Patch level : 10.0 109
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.2 1208 git-svn-id: svn://10.65.10.50/trunk@17101 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4f9ea774d6
commit
870a1baae0
@ -21,3 +21,28 @@
|
|||||||
: INCR ( a1 -- )
|
: INCR ( a1 -- )
|
||||||
1 SWAP +!
|
1 SWAP +!
|
||||||
;
|
;
|
||||||
|
|
||||||
|
: STRCONTAINS ( s1 s2 -- b1 )
|
||||||
|
STRFIND 0 >=
|
||||||
|
;
|
||||||
|
|
||||||
|
: STRLEFT ( s1 n1 -- s2 )
|
||||||
|
0 SWAP STRMID
|
||||||
|
;
|
||||||
|
|
||||||
|
: STRRIGHT ( s1 n1 -- s2 )
|
||||||
|
OVER STRLEN SWAP - -1 STRMID
|
||||||
|
;
|
||||||
|
|
||||||
|
: STRSTARTSWITH ( s1 s2 -- b1 )
|
||||||
|
DUP STRLEN ROT SWAP STRLEFT =
|
||||||
|
;
|
||||||
|
|
||||||
|
: STRENDSWITH ( s1 s2 -- b1 )
|
||||||
|
DUP STRLEN ROT SWAP STRRIGHT =
|
||||||
|
;
|
||||||
|
|
||||||
|
: STRBEFORE ( s1 s2 -- s3 )
|
||||||
|
OVER SWAP STRFIND STRLEFT
|
||||||
|
;
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ enum AVM_opcode
|
|||||||
avm_or, avm_over,
|
avm_or, avm_over,
|
||||||
avm_perform, avm_pick, avm_plus_loop, avm_plus_store, avm_push,
|
avm_perform, avm_pick, avm_plus_loop, avm_plus_store, avm_push,
|
||||||
avm_repeat, avm_rdrop, avm_rpeek, avm_rpush, avm_roll, avm_rot, avm_round,
|
avm_repeat, avm_rdrop, avm_rpeek, avm_rpush, avm_roll, avm_rot, avm_round,
|
||||||
avm_strlen, avm_strmid, avm_strtok_fetch, avm_strtok_add,
|
avm_strfind, avm_strlen, avm_strmid, avm_strtok_fetch, avm_strtok_add,
|
||||||
avm_store, avm_sp, avm_sub, avm_swap,
|
avm_store, avm_sp, avm_sub, avm_swap,
|
||||||
avm_then, avm_trunc,
|
avm_then, avm_trunc,
|
||||||
avm_until, avm_usrword,
|
avm_until, avm_usrword,
|
||||||
@ -59,7 +59,7 @@ const char* AVM_TOKENS[avm_zzz+1] =
|
|||||||
"OR", "OVER",
|
"OR", "OVER",
|
||||||
"PERFORM", "PICK", "+LOOP", "+!", "$PUSH$",
|
"PERFORM", "PICK", "+LOOP", "+!", "$PUSH$",
|
||||||
"REPEAT", "R>", "R@", ">R", "ROLL", "ROT", "ROUND",
|
"REPEAT", "R>", "R@", ">R", "ROLL", "ROT", "ROUND",
|
||||||
"STRLEN", "STRMID", "STRTOK@", "STRTOK+",
|
"STRFIND", "STRLEN", "STRMID", "STRTOK@", "STRTOK+",
|
||||||
"!", "SP", "-", "SWAP",
|
"!", "SP", "-", "SWAP",
|
||||||
"THEN", "TRUNC",
|
"THEN", "TRUNC",
|
||||||
"UNTIL", "$USR$",
|
"UNTIL", "$USR$",
|
||||||
@ -943,7 +943,7 @@ void TAVM::execute(const TAVM_op& op)
|
|||||||
{
|
{
|
||||||
const TString name = _stack.pop().as_string();
|
const TString name = _stack.pop().as_string();
|
||||||
do_fetch(name);
|
do_fetch(name);
|
||||||
_stack.roll(1);
|
_stack.roll(1); // Swap (serve per concatenare le stringhe in maniera corretta)
|
||||||
do_add();
|
do_add();
|
||||||
do_store(name);
|
do_store(name);
|
||||||
}
|
}
|
||||||
@ -981,6 +981,13 @@ void TAVM::execute(const TAVM_op& op)
|
|||||||
_stack.push(tok);
|
_stack.push(tok);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case avm_strfind:
|
||||||
|
{
|
||||||
|
const TString& lit = _stack.pop().as_string();
|
||||||
|
const TString& big = _stack.pop().as_string();
|
||||||
|
_stack.push(big.find(lit)); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case avm_strtok_add:
|
case avm_strtok_add:
|
||||||
{
|
{
|
||||||
const TString& tok = _stack.pop().as_string();
|
const TString& tok = _stack.pop().as_string();
|
||||||
|
@ -738,7 +738,7 @@ TConfig::TConfig(int which_config, const char* paragraph)
|
|||||||
}
|
}
|
||||||
case CONFIG_USER:
|
case CONFIG_USER:
|
||||||
{
|
{
|
||||||
TString16 u = user();
|
TString80 u = user();
|
||||||
if (u.blank())
|
if (u.blank())
|
||||||
u = ::dongle().administrator();
|
u = ::dongle().administrator();
|
||||||
u.lower();
|
u.lower();
|
||||||
|
@ -1272,13 +1272,18 @@ TText_control::TText_control(WINDOW win, short cid,
|
|||||||
|
|
||||||
RCT rct; coord2rct(win, left, top, width, height, rct);
|
RCT rct; coord2rct(win, left, top, width, height, rct);
|
||||||
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
|
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
|
||||||
|
if (big)
|
||||||
|
{
|
||||||
|
rct.right += (rct.right - rct.left);
|
||||||
|
rct.bottom += (rct.bottom - rct.top);
|
||||||
|
}
|
||||||
|
|
||||||
const unsigned long attrib = flags2attr(flags);
|
const unsigned long attrib = flags2attr(flags);
|
||||||
XI_OBJ_DEF* def = xi_add_text_def(NULL, cid, (XinRect *) &rct, attrib, (char*)(const char*)t);
|
XI_OBJ_DEF* def = xi_add_text_def(NULL, cid, (XinRect *) &rct, attrib, (char*)(const char*)t);
|
||||||
CHECKS(def, "Can't create the definition of TText_control:", text);
|
CHECKS(def, "Can't create the definition of TText_control:", text);
|
||||||
def->v.text->fore_color = color;
|
def->v.text->fore_color = color;
|
||||||
if (bold)
|
if (bold || big)
|
||||||
def->v.text->font_id = xvt_default_font(true);
|
def->v.text->font_id = xvt_default_font(bold, big);
|
||||||
_obj = xi_create(get_interface(win), def);
|
_obj = xi_create(get_interface(win), def);
|
||||||
CHECKS(_obj, "Can't create TText_control ", text);
|
CHECKS(_obj, "Can't create TText_control ", text);
|
||||||
|
|
||||||
@ -1391,12 +1396,34 @@ void TField_control::create(WINDOW win, short cid,
|
|||||||
{
|
{
|
||||||
CHECK(!in_create, "Nested control creation");
|
CHECK(!in_create, "Nested control creation");
|
||||||
in_create = true;
|
in_create = true;
|
||||||
|
bool big = false;
|
||||||
|
bool bold = false;
|
||||||
const short fcid = cid > 0 ? cid + 2000 : cid - 2000;
|
const short fcid = cid > 0 ? cid + 2000 : cid - 2000;
|
||||||
XI_OBJ_DEF* frm_def = xi_add_form_def(NULL, fcid, fcid);
|
XI_OBJ_DEF* frm_def = xi_add_form_def(NULL, fcid, fcid);
|
||||||
frm_def->app_data = (long)this;
|
frm_def->app_data = (long)this;
|
||||||
|
|
||||||
RCT rct; coord2rct(win, left, top, width, height, rct);
|
for (const char* s = flags; *s; s++)
|
||||||
rct.right += XI_FU_MULTIPLE/4;
|
{
|
||||||
|
if (toupper(*s) == '{')
|
||||||
|
big = true;
|
||||||
|
else
|
||||||
|
if (toupper(*s) == '}')
|
||||||
|
bold = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RCT rct; coord2rct(win, left, top, width, height, rct);
|
||||||
|
|
||||||
|
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE/4;
|
||||||
|
|
||||||
|
if (big)
|
||||||
|
{
|
||||||
|
rct.right += (rct.right - rct.left);
|
||||||
|
|
||||||
|
const int dy = (rct.bottom - rct.top) / 2;
|
||||||
|
|
||||||
|
rct.bottom += dy;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long attrib = flags2attr(flags) | XI_ATR_EDITMENU;
|
unsigned long attrib = flags2attr(flags) | XI_ATR_EDITMENU;
|
||||||
if (AUTOSELECT)
|
if (AUTOSELECT)
|
||||||
@ -1418,27 +1445,37 @@ void TField_control::create(WINDOW win, short cid,
|
|||||||
|
|
||||||
def->app_data = (long)this;
|
def->app_data = (long)this;
|
||||||
XI_FIELD_DEF* f = def->v.field;
|
XI_FIELD_DEF* f = def->v.field;
|
||||||
|
if (big || bold)
|
||||||
|
f->font_id = xvt_default_font(bold, big);
|
||||||
f->well = CAMPI_SCAVATI;
|
f->well = CAMPI_SCAVATI;
|
||||||
f->active_back_color = FOCUS_BACK_COLOR;
|
f->active_back_color = FOCUS_BACK_COLOR;
|
||||||
|
|
||||||
if (height == 1)
|
if (big)
|
||||||
{
|
|
||||||
f->auto_tab = true;
|
|
||||||
if (button)
|
|
||||||
{
|
|
||||||
f->button = true;
|
|
||||||
f->pixel_button_distance = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // E' un multiline, quindi setto il rettangolo
|
|
||||||
{
|
{
|
||||||
f->xi_rct.top = rct.top;
|
f->xi_rct.top = rct.top;
|
||||||
f->xi_rct.bottom = rct.bottom;
|
f->xi_rct.bottom = rct.bottom;
|
||||||
f->xi_rct.right = rct.right;
|
f->xi_rct.right = rct.right;
|
||||||
f->xi_rct.left = rct.left;
|
f->xi_rct.left = rct.left;
|
||||||
f->cr_ok = true;
|
}
|
||||||
f->var_len_text = true;
|
else
|
||||||
}
|
if (height == 1)
|
||||||
|
{
|
||||||
|
f->auto_tab = true;
|
||||||
|
if (button)
|
||||||
|
{
|
||||||
|
f->button = true;
|
||||||
|
f->pixel_button_distance = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // E' un multiline, quindi setto il rettangolo
|
||||||
|
{
|
||||||
|
f->xi_rct.top = rct.top;
|
||||||
|
f->xi_rct.bottom = rct.bottom;
|
||||||
|
f->xi_rct.right = rct.right;
|
||||||
|
f->xi_rct.left = rct.left;
|
||||||
|
f->cr_ok = true;
|
||||||
|
f->var_len_text = true;
|
||||||
|
}
|
||||||
|
|
||||||
XI_OBJ* itf = get_interface(win);
|
XI_OBJ* itf = get_interface(win);
|
||||||
XI_OBJ* form = xi_create(itf, frm_def);
|
XI_OBJ* form = xi_create(itf, frm_def);
|
||||||
|
@ -4143,8 +4143,10 @@ void TRecfield::set(int from, int to)
|
|||||||
|
|
||||||
if (nf == FIELDERR)
|
if (nf == FIELDERR)
|
||||||
{
|
{
|
||||||
NFCHECK("File n. %d unknown field %s", _rec->num(), (const char*)_name);
|
if (_rec->exist(_name))
|
||||||
_p = _rec->string();
|
_subfield = _name;
|
||||||
|
else
|
||||||
|
NFCHECK("File n. %d unknown field %s", _rec->num(), _name); _p = _rec->string();
|
||||||
_len = 0;
|
_len = 0;
|
||||||
_dec = 0;
|
_dec = 0;
|
||||||
_type = _alfafld;
|
_type = _alfafld;
|
||||||
@ -4192,6 +4194,8 @@ TRecfield::TRecfield(TRectype& rec, const char* name, int from, int to)
|
|||||||
|
|
||||||
void TRecfield::put_subfield(const char* s)
|
void TRecfield::put_subfield(const char* s)
|
||||||
{
|
{
|
||||||
|
if (strcmp(_name, _subfield) == 0)
|
||||||
|
return;
|
||||||
const TString& str = _rec->get(_name);
|
const TString& str = _rec->get(_name);
|
||||||
int p = str.find(_subfield);
|
int p = str.find(_subfield);
|
||||||
|
|
||||||
@ -4300,6 +4304,11 @@ void TRecfield::setptr(TRecnotype r)
|
|||||||
void TRecfield::get_subfield(TString& s) const
|
void TRecfield::get_subfield(TString& s) const
|
||||||
{
|
{
|
||||||
const TString& str = _rec->get(_name);
|
const TString& str = _rec->get(_name);
|
||||||
|
|
||||||
|
if (strcmp(_name, _subfield) == 0)
|
||||||
|
s =, str;
|
||||||
|
else
|
||||||
|
{
|
||||||
int p = str.find(_subfield);
|
int p = str.find(_subfield);
|
||||||
|
|
||||||
if (p == 0 || (p > 0 && str[p - 1] < ' '))
|
if (p == 0 || (p > 0 && str[p - 1] < ' '))
|
||||||
@ -4405,7 +4414,7 @@ TRecfield::operator TDate() const
|
|||||||
|
|
||||||
TRecfield::operator const char*() const
|
TRecfield::operator const char*() const
|
||||||
{
|
{
|
||||||
TString& tmp = get_tmp_string(_len);
|
TString& tmp = get_tmp_string(max(_len, 50));
|
||||||
|
|
||||||
if (_subfield == NULL)
|
if (_subfield == NULL)
|
||||||
{
|
{
|
||||||
|
@ -967,7 +967,8 @@ bool TMask::on_key(
|
|||||||
if (f.is_kind_of(CLASS_SHEET_FIELD))
|
if (f.is_kind_of(CLASS_SHEET_FIELD))
|
||||||
{
|
{
|
||||||
TSheet_field& s = (TSheet_field&)f;
|
TSheet_field& s = (TSheet_field&)f;
|
||||||
const int newrow = s.append() ? -1 : 0;
|
const int newrow = s.append() ? -1 : ( _focus == fire ? s.selected() + 1: 0);
|
||||||
|
|
||||||
notify_focus_field(s.dlg());
|
notify_focus_field(s.dlg());
|
||||||
s.insert(newrow, true, true);
|
s.insert(newrow, true, true);
|
||||||
}
|
}
|
||||||
|
@ -2287,7 +2287,21 @@ int TBrowse::do_input(
|
|||||||
else
|
else
|
||||||
if (_filter[i] == '#')
|
if (_filter[i] == '#')
|
||||||
{
|
{
|
||||||
work << '"' << field(atoi(&_filter[++i])).get() << '"';
|
if (_filter[++i] == '-')
|
||||||
|
{
|
||||||
|
TString val;
|
||||||
|
TSheet_field* sheet = field().mask().get_sheet();
|
||||||
|
|
||||||
|
if (sheet != NULL)
|
||||||
|
{
|
||||||
|
const short id = atoi(&_filter[++i]);
|
||||||
|
|
||||||
|
val = sheet->mask().field(id).get();
|
||||||
|
}
|
||||||
|
work << '"' << val << '"';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
work << '"' << field(atoi(&_filter[i])).get() << '"';
|
||||||
while (isspace(_filter[i])) i++;
|
while (isspace(_filter[i])) i++;
|
||||||
while (isdigit(_filter[i])) i++;
|
while (isdigit(_filter[i])) i++;
|
||||||
i--;
|
i--;
|
||||||
@ -3481,6 +3495,11 @@ void TEdit_field::create(WINDOW parent)
|
|||||||
if (_browse) // Decide se attivare o meno il bottone di ricerca
|
if (_browse) // Decide se attivare o meno il bottone di ricerca
|
||||||
_ctl_data._flags << 'B';
|
_ctl_data._flags << 'B';
|
||||||
|
|
||||||
|
if (_ctl_data._prompt.find("@g") >= 0 || _ctl_data._prompt.find("@G") >= 0)
|
||||||
|
_ctl_data._flags << '{';
|
||||||
|
if (_ctl_data._prompt.find("@b") >= 0 || _ctl_data._prompt.find("@B") >= 0)
|
||||||
|
_ctl_data._flags << '}';
|
||||||
|
|
||||||
_ctl = new TField_control(parent, _ctl_data._dlg,
|
_ctl = new TField_control(parent, _ctl_data._dlg,
|
||||||
_ctl_data._x, _ctl_data._y,
|
_ctl_data._x, _ctl_data._y,
|
||||||
_ctl_data._width, _ctl_data._size,
|
_ctl_data._width, _ctl_data._size,
|
||||||
|
@ -643,10 +643,10 @@ protected:
|
|||||||
word create_prompt(WINDOW parent, word width, word heigth);
|
word create_prompt(WINDOW parent, word width, word heigth);
|
||||||
|
|
||||||
virtual const char* reformat(const char* data) const;
|
virtual const char* reformat(const char* data) const;
|
||||||
virtual TString& get_window_data() pure;
|
|
||||||
virtual void set_window_data(const char* data) pure;
|
virtual void set_window_data(const char* data) pure;
|
||||||
|
|
||||||
public: // TMask_field
|
public: // TMask_field
|
||||||
|
virtual TString& get_window_data() pure;
|
||||||
// @cmember Ritorna il prompt del campo
|
// @cmember Ritorna il prompt del campo
|
||||||
virtual const char* prompt() const;
|
virtual const char* prompt() const;
|
||||||
|
|
||||||
|
@ -142,6 +142,8 @@ class TSpreadsheet : public TControl
|
|||||||
int _columns;
|
int _columns;
|
||||||
// @cmember:(INTERNAL) Indica se e' attivo lo spreadsheet
|
// @cmember:(INTERNAL) Indica se e' attivo lo spreadsheet
|
||||||
bool _active;
|
bool _active;
|
||||||
|
// @cmember:(INTERNAL) Indica se e' attivo l'auto append
|
||||||
|
bool _auto_append;
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Funzione per la gestione di una riga dello sheet (vedi <t SPREADSHEET_NOTIFY>)
|
// @cmember:(INTERNAL) Funzione per la gestione di una riga dello sheet (vedi <t SPREADSHEET_NOTIFY>)
|
||||||
SPREADSHEET_NOTIFY _notify;
|
SPREADSHEET_NOTIFY _notify;
|
||||||
@ -277,6 +279,8 @@ public:
|
|||||||
void show_column(int col, bool on = TRUE);
|
void show_column(int col, bool on = TRUE);
|
||||||
// @cmember Permette di eliminare una colonna dallo spreadsheet
|
// @cmember Permette di eliminare una colonna dallo spreadsheet
|
||||||
void delete_column(const int col) const;
|
void delete_column(const int col) const;
|
||||||
|
// @cmember Permette di attivare/ disattivare l'auto append
|
||||||
|
void set_auto_append(bool on) { _auto_append = on;}
|
||||||
bool exist_column(const int col) const { return find_column(col) != NULL; }
|
bool exist_column(const int col) const { return find_column(col) != NULL; }
|
||||||
// @cmember Sposta la colonna dalla posizione <p fromindex> alla posizione
|
// @cmember Sposta la colonna dalla posizione <p fromindex> alla posizione
|
||||||
// <p toindex>
|
// <p toindex>
|
||||||
@ -376,6 +380,7 @@ int TSpreadsheet::ROW_NUMBER_WIDTH = 3;
|
|||||||
KEY TSpreadsheet::barcode_newline() const
|
KEY TSpreadsheet::barcode_newline() const
|
||||||
{
|
{
|
||||||
static KEY _barcode_newline = 0xFFFF;
|
static KEY _barcode_newline = 0xFFFF;
|
||||||
|
|
||||||
if (_barcode_newline == 0xFFFF)
|
if (_barcode_newline == 0xFFFF)
|
||||||
{
|
{
|
||||||
TConfig ini(CONFIG_INSTALL, "Main");
|
TConfig ini(CONFIG_INSTALL, "Main");
|
||||||
@ -403,7 +408,7 @@ TSpreadsheet::TSpreadsheet(
|
|||||||
_edit_field(NULL), _cur_row(0), _cur_rec(0), _cur_col(1),
|
_edit_field(NULL), _cur_row(0), _cur_rec(0), _cur_col(1),
|
||||||
_row_dirty(FALSE), _cell_dirty(FALSE), _check_enabled(TRUE),
|
_row_dirty(FALSE), _cell_dirty(FALSE), _check_enabled(TRUE),
|
||||||
_needs_update(-1), _selection_posted(-1), _save_columns_order(FALSE),
|
_needs_update(-1), _selection_posted(-1), _save_columns_order(FALSE),
|
||||||
_f9_target(NULL)
|
_f9_target(NULL), _auto_append(false)
|
||||||
{
|
{
|
||||||
int m_width[MAX_COL], v_width[MAX_COL];
|
int m_width[MAX_COL], v_width[MAX_COL];
|
||||||
int fixed_cols = 0; // Number of fixed columns
|
int fixed_cols = 0; // Number of fixed columns
|
||||||
@ -1743,7 +1748,11 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
if (xiev->v.xvte.type == E_CHAR)
|
if (xiev->v.xvte.type == E_CHAR)
|
||||||
{
|
{
|
||||||
const KEY k = e_char_to_key(&xiev->v.xvte);
|
const KEY k = e_char_to_key(&xiev->v.xvte);
|
||||||
switch (k)
|
|
||||||
|
if (_auto_append && k == K_DOWN && _cur_row == items() - 1 && test_focus_change())
|
||||||
|
owner().mask().send_key(K_CTRL + '+', 0);
|
||||||
|
|
||||||
|
switch (k)
|
||||||
{
|
{
|
||||||
case K_ROWEDIT:
|
case K_ROWEDIT:
|
||||||
xiev->type = XIE_DBL_CELL;
|
xiev->type = XIE_DBL_CELL;
|
||||||
@ -2702,6 +2711,12 @@ void TSheet_field::enable(bool on)
|
|||||||
s->activate(on);
|
s->activate(on);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSheet_field::set_auto_append(bool on)
|
||||||
|
{
|
||||||
|
TSpreadsheet* s = (TSpreadsheet*)_ctl;
|
||||||
|
s->set_auto_append(on);
|
||||||
|
}
|
||||||
|
|
||||||
bool TSheet_field::enabled() const
|
bool TSheet_field::enabled() const
|
||||||
{
|
{
|
||||||
// return items() > 0;
|
// return items() > 0;
|
||||||
|
@ -255,6 +255,9 @@ public:
|
|||||||
// @cmember Setta il member <p _append> con il valore di <p on>
|
// @cmember Setta il member <p _append> con il valore di <p on>
|
||||||
void set_append(bool on = true)
|
void set_append(bool on = true)
|
||||||
{ _append = on;}
|
{ _append = on;}
|
||||||
|
// @cmember Permette di attivare/ disattivare l'auto append
|
||||||
|
void set_auto_append(bool on = true);
|
||||||
|
|
||||||
// @cmember Ritorna il valore del membro <p _append>
|
// @cmember Ritorna il valore del membro <p _append>
|
||||||
bool append() const
|
bool append() const
|
||||||
{ return _append;}
|
{ return _append;}
|
||||||
|
@ -254,7 +254,7 @@ bool TRecordset::save_as_text(const char* path)
|
|||||||
out << unesc(val); // Evitiamo doppi separatori di campo e record
|
out << unesc(val); // Evitiamo doppi separatori di campo e record
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (var.type() == _realfld)
|
if (var.type() == _realfld || (cols == 0 && is_numeric(val)))
|
||||||
num_reformat(val);
|
num_reformat(val);
|
||||||
out << val;
|
out << val;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user