From 4cb1eba51e04e1afb74194b7e0bf77b5d282fcb9 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 8 Aug 1996 15:40:13 +0000 Subject: [PATCH] Separzione tracciati step 1 git-svn-id: svn://10.65.10.50/trunk@3342 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ba/ba1100.cpp | 477 ++++++++++++++++++++++++++++---------------------- ba/ba1101.cpp | 15 +- 2 files changed, 283 insertions(+), 209 deletions(-) diff --git a/ba/ba1100.cpp b/ba/ba1100.cpp index 69e2978ab..956fa9887 100755 --- a/ba/ba1100.cpp +++ b/ba/ba1100.cpp @@ -28,7 +28,7 @@ struct direct { unsigned short d_ino; char d_name[DIRSIZ]; -}; +}; #else #include #include @@ -39,8 +39,11 @@ struct direct class TManutenzione_app : public TApplication { TDir_sheet* _browse; - TMask* _mask; + TArray _dirs; + TArray _recs; + TMask* _mask; long _firm; + long _level; long _history_firm; TRec_sheet* _rec; @@ -58,13 +61,14 @@ protected: virtual void print(); virtual void do_print(TPrinter & p, TRec_sheet & r); const char* dumpfilename(const FileDes& dep) const; + void load_des(); void open_history(); void put_history(const char* firm); void close_history(); - + public: - TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL), _firm(0) {} + TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL), _firm(0), _level(0) {} }; HIDDEN void build_filelist(const char *path, TArray & list) @@ -91,17 +95,17 @@ HIDDEN void build_filelist(const char *path, TArray & list) list.add(dname.mid(1,3)); } } - close(fd); -#else + close(fd); +#else _find_t f; - + if (_dos_findfirst("recdesc/d???.des", _A_NORMAL, &f) == 0) - { + { bool one_to_add = TRUE; while (one_to_add) - { + { TString80 dname(f.name); - + if (!isdigit(dname[1])) list.add(dname.mid(1,3)); one_to_add = _dos_findnext(&f) == 0; @@ -115,7 +119,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) { const char* table[] = {"", "Alfanumerico", "Intero", "Intero Lungo", "Reale", "Data", "Intero", "Carattere", - "Booleano", "Intero Zerofilled", + "Booleano", "Intero Zerofilled", "Intero Lungo Zerofilled","Memo"}; TPrintrow row; TToken_string s; @@ -126,7 +130,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) const char * descfname = r.descfname(); TString16 tab(r.tab()); const bool istab = tab.not_empty(); - + tab.upper(); if (fexist(descfname)) descr = new TConfig(descfname, DESCPAR); @@ -169,7 +173,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) { if (hasdescr) { - wd = d.get(); + wd = d.get(); if (wd != NULL) row.put(wd, 53); } @@ -183,7 +187,7 @@ void TManutenzione_app::do_print(TPrinter & p, TRec_sheet & r) wd = d.get(); } } - } + } p.formfeed(); row.reset(); row.put("Espressione chiave", 7); @@ -212,10 +216,10 @@ void TManutenzione_app::print() p.headerlen(6); p.footerlen(4); if (_rec == NULL) - { + { TDir d; - - d.get(LF_DIR); + + d.get(LF_DIR); int items = (int)d.eod(); TProgind *pi; pi = new TProgind(items,"Stampa tracciati record archivi", TRUE, TRUE, 63); @@ -223,7 +227,7 @@ void TManutenzione_app::print() pi->setstatus(2); for (int i = 2 ; !pi->iscancelled() && i <= items; i++) - { + { d.get(i); if (d.len() > 0) { @@ -238,7 +242,7 @@ void TManutenzione_app::print() build_filelist(DESCDIR, list); items = list.items(); - + pi = new TProgind(items,"Stampa descrizione tabelle", TRUE, TRUE, 63); for (i = 0; !pi->iscancelled() && i < items; i++) @@ -261,7 +265,7 @@ bool TManutenzione_app::create() // initvar e arrmask TApplication::create(); _firm = get_firm(); - + if (argc() > 2) { update(); @@ -270,13 +274,13 @@ bool TManutenzione_app::create() // initvar e arrmask else { if (!set_firm()) - return FALSE; - - const bool superprassi = user() == "PRASSI"; - + return FALSE; + load_des(); + + const bool superprassi = user() == "PRASSI"; _mask = new TMask ("ba1100a"); - _browse = new TDir_sheet ("Manutenzione file di sistema", superprassi ? 0xC : 0x8); - + _browse = new TDir_sheet ("Manutenzione file di sistema", superprassi ? 0xC : 0x8); + if (superprassi) { _browse->add_button(DLG_INSFILE, "~Inserisci", K_F6); @@ -284,10 +288,10 @@ bool TManutenzione_app::create() // initvar e arrmask _browse->add_button(DLG_ADDFILE, "~Aggiungi", K_F8); _mask->enable(-1); // Abilita campi privilegiati - } - + } + dispatch_e_menu(BAR_ITEM(1)); - } + } enable_menu_item(M_FILE_PRINT); return TRUE ; } @@ -306,7 +310,7 @@ void TManutenzione_app::insert_riga (long riga_sel, TToken_string& riga) { const int logicnum = int(riga_sel) + 1; const int num_files = (int)_browse->items(); - + _mask->disable(DLG_PACK); _mask->disable(DLG_RECORD); _mask->disable(DLG_LOAD); @@ -316,7 +320,7 @@ void TManutenzione_app::insert_riga (long riga_sel, TToken_string& riga) _mask->hide(FLD_EOX); _mask->set (FLD_NUM, riga.get(0)); _mask->reset (F_TAB); - + if (_mask->run() == K_ENTER) { /* shift di uno in avanti degli elementi del direttorio partendo dall'ultimo */ @@ -338,7 +342,7 @@ void TManutenzione_app::insert_riga (long riga_sel, TToken_string& riga) _browse->set_items(_browse->dir()->eod()); _browse->dir()->put(LF_DIR); } -} +} void TManutenzione_app::open_history() { @@ -378,16 +382,16 @@ void TManutenzione_app::close_history() const char* TManutenzione_app::dumpfilename(const FileDes& dep) const { TFilename n; n.tempdir(); -#if XVT_OS == XVT_OS_SCOUNIX +#if XVT_OS == XVT_OS_SCOUNIX n << '/'; -#else +#else n << '\\'; -#endif +#endif n << dep.SysName; n.strip("$%"); n.ext("txt"); n.lower(); - + strcpy(__tmp_string, n); return __tmp_string; } @@ -399,14 +403,14 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) FileDes dep; TDir d; const int logicnum = int(riga_sel) + 1; - + const bool superprassi = user() == "PRASSI"; - + _mask->enable(DLG_PACK, superprassi); _mask->enable(DLG_RECORD, superprassi); _mask->enable(DLG_LOAD, superprassi); _mask->enable(DLG_DUMP); - + _mask->show(F_TAB, logicnum >= LF_TABGEN && logicnum <= LF_TAB); _mask->set (FLD_NUM, riga.get(0)); _mask->set (FLD_NOME, riga.get()); @@ -419,11 +423,11 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) _mask->reset (FLD_EXTEND); _mask->reset (F_TAB); - const TRecnotype oldeox = atol(_mask->get(FLD_EOX)); + const TRecnotype oldeox = _mask->get_long(FLD_EOX); const bool com = prefix().is_com() || !*prefix().name(); const char* name = _mask->get(FLD_NOME); - const bool enable_extend = (com ? *name != '$' : *name == '$') && - (riga_sel > 0) && + const bool enable_extend = (com ? *name != '$' : *name == '$') && + (riga_sel > 0) && (_mask->get_int(F_LEN) > 0 || oldeox > 0); _mask->show(FLD_EXTEND, enable_extend); @@ -433,7 +437,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) switch (tasto) { case K_F4: - if (logicnum > 1) + if (logicnum > 1) { const TFilename filename(_mask->get(FLD_NOME)); const TString tabella(_mask->get(F_TAB)); @@ -457,7 +461,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) dep.Flags = atol(_mask->get (FLD_FLAG)); strcpy (dep.Des,_mask->get (FLD_DESC)); strcpy (dep.FCalc,_mask->get (FLD_FORMULA)); - const TRecnotype eox = atol(_mask->get(FLD_EOX)); + const TRecnotype eox = _mask->get_bool(FLD_EXTEND) ? _mask->get_long(FLD_EOX) : oldeox; _browse->dir()->get(logicnum, _lock, _nordir, _sysdirop); _browse->dir()->set(dep.SysName, dep.EOD, dep.Flags, @@ -472,7 +476,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) d.get(logicnum); TFilename f_name(d.name()); f_name.ext("dbf"); - + if (!fexist(f_name)) f.build(eox); else f.extend(eox); _browse->dir()->get(logicnum, _nolock, _nordir, _sysdirop); @@ -509,7 +513,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) if (tasto == K_F7) { TMask m("ba1100b"); - + TFilename nout(dumpfilename(dep)); m.set(FLD_OUTFILE, nout); @@ -524,7 +528,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga) const bool withdel = m.get_bool(FLD_WITHDEL); const int keyno = m.get_int(FLD_KEYNO); f.dump(nout, keyno, fs, fd, rs, withdel); - } + } } } else @@ -581,127 +585,113 @@ void TManutenzione_app::update_dir() if (prefix().get_codditta() <= _history_firm) return; - prefix().set(""); - - - TString desc(256), s(256); - TDir d; - d.get(LF_DIR); - const int orig_items = (int)d.eod(); - - prefix().set(pref); + const int orig_items = _dirs.last(); - d.get(LF_DIR); + TDir d ; + + d.get(LF_DIR); const int items = (int)d.eod(); - - s = "Aggiornamento direttorio "; - if (is_com) s << "comune."; - else s << "della ditta " << atol (pref) <<"."; + + TString80 s("Aggiornamento direttorio "); + if (is_com) s << "comune"; + else s << " della ditta " << atol (pref) <<"."; #if XVT_OS == XVT_OS_WIN s << " Memoria libera: " << (long)GetFreeSpace(0)/1024 << " Kbytes."; #endif - + TProgind p(items ? items : 1, s, FALSE, TRUE, 70); p.setstatus(1); for (int i = 2; i <= items; i++) - { + { p.addstatus(1); - prefix().set(""); - d.get(i, _nolock, _nordir, _sysdirop); - bool is_firm = d.is_firm(); - bool to_create = (is_com ? d.is_com() : d.is_firm()); - desc = d.des(); - s = d.name(); +// prefix().set(""); + const TDir & ds = (const TDir &) _dirs[i]; + const bool is_firm = ds.is_firm(); + const bool to_create = (is_com ? ds.is_com() : ds.is_firm()); +// TString s(ds.name()); + TFilename fd(ds.filename()); + bool towrite = FALSE; - long flags = d.flags(); - word len = d.len(); - prefix().set(pref); +// long flags = ds.flags(); +// word len = ds.len(); +// prefix().set(pref); d.get(i); - if (!fexist(d.filename())) + TFilename fs(d.filename()); + + if (!fexist(fs)) { if (d.eox() > 0L) { - d.get(i, _nolock, _nordir, _sysdirop); + d.get(i, _nolock, _nordir, _sysdirop); d.eod() = 0L; d.eox() = 0L; d.put(i, _nordir, _sysdirop); } } - else + else if (i > 2) { - FILE * f = fopen(d.filename(), "r"); + FILE * f = fopen(fs, "r"); if (f != NULL) { fseek(f, 0L, SEEK_END); const long size = ftell(f); - + fclose(f); - if (size > 0L && d.len() > 0) - { + if (size > 0L && d.len() > 0) + { TBaseisamfile b(i); int err = b.is_valid(); if (err == NOERR) { TLocalisamfile f(i); - } - else - { + } + else + { if (!yesno_box("Il file %d non puo' essere aperto: errore %d. Continuo?",i,err)) stop_run(); } } else - { + { if (to_create) - { + { remove(d.filename()); TToken_string idx_names; - get_idx_names(i, idx_names); + get_idx_names(i, idx_names); for (const char * idx_name = idx_names.get(); idx_name != NULL; idx_name = idx_names.get()) remove(idx_name); - d.get(i, _nolock, _nordir, _sysdirop); + d.get(i, _nolock, _nordir, _sysdirop); d.eod() = 0L; d.eox() = 0L; d.put(i, _nordir, _sysdirop); } } - } + } } - d.get(i, _nolock, _nordir, _sysdirop); + d.get(i, _nolock, _nordir, _sysdirop); if (to_create) { - TDir d1; - - prefix().set(""); - d1.get(i); - - TFilename fd(d1.name()); - - prefix().set(pref); - d1.get(i); - TFilename fs(d1.name()); - - fs.ext("dbf"); - fd.ext("dbf"); - if (is_firm) - { +/* non piu' necessario + if (is_firm) + { TString name(fd); fd.cut(0); fd << fs.path() << name; - } - + } +*/ + if (fexist(fs) && (fd != fs)) { bool ok = TRUE; TFilename path(fd.path()); - - path.rtrim(1); + + path.rtrim(1); if (path.not_empty() && !fexist(path)) - ok = make_dir(path); - if (ok && fcopy(fs, fd)) + ok = make_dir(path); + if (ok && fcopy(fs, fd)) { TToken_string ts(10),td(10); td.cut(0); @@ -712,7 +702,7 @@ void TManutenzione_app::update_dir() TFilename fdi(fd); // Nuovo nome. (Con l'estensione) fdi.ext(""); if (j > 1) // Means that more indexes are in TToken_string ts - { + { TString xx=fdi.name(); if (xx.len() < 8) fdi << ('0' + j); @@ -724,7 +714,7 @@ void TManutenzione_app::update_dir() if (!fcopy(fsi, fdi)) ok = FALSE; } - if (ok) + if (ok) { remove(fs); // Rimuove i files sorgenti. Crea un eventuale .cgp fd.ext("cgp"); @@ -742,116 +732,117 @@ void TManutenzione_app::update_dir() remove(ts.get()); if (ts.items() > 1) // Means that fd.cgp must be created { - TFilename ff=td.get(); + TFilename ff=td.get(); ff.ext(""); ff.rtrim(1); - fprintf(o,"%s\n",ff.name()); + fprintf(o,"%s\n",ff.name()); } } if (o!=NULL) fclose(o); } - else + else { remove(fd); // Remove all destinations written td.restart(); for (int j=1; j<=td.items(); j++) remove(td.get()); - } - } - else + } + } + else ok = FALSE; if (ok) { - d.set(s, d.eox(), 0L, desc, d.expr()); - towrite = TRUE; + d.set(s, d.eox(), 0L, ds.des(), d.expr()); + towrite = TRUE; } - } + } } else { - towrite = (desc != d.des()); + towrite = (TString(ds.des()) != d.des()); if (towrite) - strcpy((char *) d.des(), desc); + strcpy((char *) d.des(), ds.des()); } if (towrite) - d.put(i, _nordir, _sysdirop); - d.get(i); + d.put(i, _nordir, _sysdirop); +// d.get(i); } // end of for scope - prefix().set(pref); +// prefix().set(pref); if (items >= orig_items) return; - + for (i = items + 1; i <= orig_items; i++) { - prefix().set(""); - d.get(i, _nolock, _nordir, _sysdirop); - prefix().set(pref); - d.set_len(0); - d.eox() = 0; - d.flags() = 0L; - d.put(i, _nordir, _sysdirop); +// prefix().set(""); +// d.get(i, _nolock, _nordir, _sysdirop); +// prefix().set(pref); + TDir d1((TDir &) _dirs[i]); + + d1.set_len(0); + d1.eox() = 0; + d1.flags() = 0L; + d1.put(i, _nordir, _sysdirop); } - prefix().set(pref); - d.get(LF_DIR, _nolock, _nordir, _sysdirop); - d.eod() = orig_items; +// prefix().set(pref); + d.get(LF_DIR, _nolock, _nordir, _sysdirop); + d.eod() = orig_items; if (d.eox() < d.eod()) d.eox() = d.eod(); d.put(LF_DIR, _nordir, _sysdirop); -} +} void TManutenzione_app::convert_dir() { const TString pref(prefix().name()); - const bool is_com = prefix().is_com(); - + const bool is_com = prefix().is_com(); + TDir d; - TTrec r; - + if (prefix().get_codditta() <= _history_firm) return; - - d.get(LF_DIR); + + d.get(LF_DIR); const int items = (int)d.eod(); TString s(256); s = "Aggiornamento archivi "; if (is_com) s << "comuni."; else s << "della ditta " << atol (pref) << "."; - + #if XVT_OS == XVT_OS_WIN s << " Memoria libera: " << (long)GetFreeSpace(0)/1024 << " Kbytes."; #endif - + TProgind p(items ? items : 1, s, FALSE, TRUE, 70); p.setstatus(1); - + for (int i = 2; i <= items; i++) - { + { p.addstatus(1); - prefix().set(""); - r.get(i); - d.get(i); - prefix().set(pref); - if (d.len() > 0) - { +// prefix().set(""); + const TTrec & rs = (const TTrec &) _recs[i]; + const TDir & ds = (const TDir &) _dirs[i]; +// prefix().set(pref); + if (ds.len() > 0) + { TBaseisamfile b(i); - const int module = abs((int)d.flags()); + const int module = abs((int)ds.flags()); int err = b.is_valid(); if (err == -60) err=NOERR; - d.get(i, _nolock, _nordir, _sysdirop); + d.get(i, _nolock, _nordir, _sysdirop); if (i > 2 && err != NOERR && ((is_com && d.is_com()) || (!is_com && d.is_firm()))) - { + { if (!yesno_box("Il file %d non puo' essere aperto: errore %d. Continuo?",i,err)) - stop_run(); + stop_run(); else continue; } TSystemisamfile f(i); - - f.update(r); + + f.update(rs); if (f.status() == 8) // cio' significa che e' accaduto quasi l'irreparabile... - { + { { TLocalisamfile u(LF_USER); u.zero(); u.put("USERNAME","PRASSI"); @@ -863,59 +854,126 @@ void TManutenzione_app::convert_dir() } stop_run(); } - d.get(i, _nolock, _nordir, _sysdirop); + d.get(i, _nolock, _nordir, _sysdirop); bool to_create = (is_com ? d.is_com() : d.is_firm()); - + if (to_create && has_module(module, CHK_DONGLE)) { d.get(i); - TFilename s(d.name()); - s.ext("dbf"); + TFilename s(d.filename()); if (!fexist(s)) { TSystemisamfile f(i); - f.build(10L); + f.build(10L); } } } else { + TTrec r(rs); + r.zero(); r.put(i); } } - - prefix().set(""); - const long level = prefix().filelevel(); - prefix().set(pref); - d.get(LF_DIR, _nolock, _nordir, _sysdirop); - d.flags() = level; - d.put(LF_DIR, _nordir, _sysdirop); +// prefix().set(pref); + d.get(LF_DIR, _nolock, _nordir, _sysdirop); + d.flags() = _level; + d.put(LF_DIR, _nordir, _sysdirop); put_history(pref); } +void TManutenzione_app::load_des() +{ + const TString pref(prefix().name()); + + _dirs.destroy(); + _recs.destroy(); + _level = prefix().filelevel(); + + TDir d; + TTrec r; + + d.get(LF_DIR); + const int items = (int)d.eod(); + const bool standard = pref.empty(); + + TString80 s("Caricamento descrizioni archivi "); + + if (standard) s << "standard"; + else + if (prefix().is_com()) s << "comuni"; + else s << " della ditta " << atol (pref); + + TProgind p(items ? items : 1, s, TRUE, TRUE, 70); + + p.setstatus(1); + for (int i = 2; i <= items; i++) + { + p.addstatus(1); + d.get(i, _nolock, _nordir, _sysdirop); + r.get(i); + if (standard) + { + TFilename desc_file; + + desc_file << DESCDIR << "/f" << i; + desc_file.ext("trr"); + if (fexist(desc_file)) + { + { + ifstream in(desc_file); + TFilename descfname; + + descfname.format("%s/d%d.des", DESCDIR, i); + + if (!fexist(descfname)) + { + FILE * fd = fopen(descfname, "w"); + + if (fd != NULL) + fclose(fd); + } + + TConfig descr(descfname, DESCPAR); + + r.set_des(&descr); + in >> r; + r.put(i); + d.set_len(r.len()); + d.put(i, _nordir, _sysdirop); + r.set_des(); + } + remove(desc_file); + } + } + _dirs.add(d, i); + _recs.add(r, i); + } +} + void TManutenzione_app::update() -{ +{ bool ok = TRUE; TIsamfile utenti(LF_USER, FALSE); utenti.open(_excllock); - + for (int err = utenti.first(); err == NOERR; err = utenti.next()) - { + { const TString16 u = utenti.get("USERNAME"); if (u == "PRASSI") - { + { if (utenti.get("AUTSTR") == "CONVERTING") { ok = error_box("Impossibile proseguire: esiste gia' conversione in corso"); break; - } + } else { utenti.put("AUTSTR", "CONVERTING"); utenti.rewrite(); - } + } } else { @@ -923,42 +981,44 @@ void TManutenzione_app::update() { ok = error_box("La conversione non puo' essere effettuata\n" "mentre l'utente %s e' collegato", (const char*)u); - break; + break; } - } - } + } + } utenti.close(); - if (!ok) + if (!ok) return; - + open_history(); - long firm = get_firm(); + long firm = get_firm(); TString pref; if (firm == 0) pref = prefix().name(); - + do_events(); - + begin_wait(); + prefix().set(""); + load_des(); prefix().set("com"); - if (prefix().filelevel() <= 199502L) +/* if (prefix().filelevel() <= 199502L) { TExternal_app app("bacnv 4 0"); app.run(); - } - + } */ + update_dir(); convert_dir(); - + TSystemisamfile ditte(LF_NDITTE); ditte.open(); - + TString80 s("Conversione archivi ditte."); TProgind p(ditte.items() ? ditte.items() : 1, s, TRUE, TRUE, 70); p.setstatus(1); TString mxs; - + for (ditte.first(); !ditte.eof(); ditte.next()) { const TRecnotype rec = ditte.recno(); @@ -980,24 +1040,25 @@ void TManutenzione_app::update() ditte.readat(rec); } ditte.close(); - + if (firm > 0) set_firm(firm); else prefix().set(pref); - + load_des(); + ok = FALSE; while (!ok) { utenti.open(_excllock); ok = utenti.ok(); do_events(); - } - - utenti.put("USERNAME", "PRASSI"); + } + + utenti.put("USERNAME", "PRASSI"); if (utenti.read() == NOERR) { utenti.zero("AUTSTR"); utenti.rewrite(); - } + } utenti.close(); close_history(); end_wait(); @@ -1016,22 +1077,22 @@ bool TManutenzione_app::menu(MENU_TAG m) disable_menu_item(M_FILE_NEW); KEY key = _browse->run(); - + if (key != K_ENTER && key != K_ESC && user() != "PRASSI") { error_box("Operazione non permessa all'utente %s", (const char*)user()); key = 0; } - + switch (key) { - case K_F6: + case K_F6: riga_selezionata = _browse->selected(); riga = _browse->row(); insert_riga (riga_selezionata, riga); break; - - case K_ENTER: + + case K_ENTER: riga_selezionata = _browse->selected(); riga = _browse->row(); edit_riga (riga_selezionata, riga); @@ -1043,20 +1104,20 @@ bool TManutenzione_app::menu(MENU_TAG m) case K_F7: update(); break; - + case K_F8: _browse->add(); riga_selezionata = _browse->items() - 1; riga = _browse->row(riga_selezionata); edit_riga (riga_selezionata, riga); break; - + default: break; - } - + } + enable_menu_item(M_FILE_NEW); } - + return xvt_test_menu_tag(BAR_ITEM(2)); } diff --git a/ba/ba1101.cpp b/ba/ba1101.cpp index 049f3cd13..c01aab16a 100755 --- a/ba/ba1101.cpp +++ b/ba/ba1101.cpp @@ -166,14 +166,26 @@ HIDDEN bool len_handler(TMask_field& f, KEY key) } +bool TRec_sheet::fld_notify(TSheet_field& f, int r, KEY k) +{ + if (k == K_CTRL + K_INS) + { + TToken_string & row = f.row(r); + row.add("1", f.cid2index(FLD_TIPO)); + } + return TRUE; +} + bool TRec_sheet::key_notify(TSheet_field& f, int r, KEY k) { if (k == K_INS) { const int items = f.items(); - f.disable_cell(0, 1); if (f.items() >= 8) return FALSE; } + else + if (k = K_CTRL + K_INS) + f.enable_cell(r, 1, r > 0); return TRUE; } @@ -214,6 +226,7 @@ void TRec_sheet::edit() _mask->set (F_NUM, _dir->num()); _mask->set (F_DES, _dir->des()); f1.sheet_mask().field(FLD_LEN).set_handler(len_handler); + f1.set_notify(fld_notify); f1.set_append(FALSE); int nfields = _rec->fields();