diff --git a/include/bagn001a.uml b/include/bagn001a.uml index 7784fa349..9d2080857 100755 --- a/include/bagn001a.uml +++ b/include/bagn001a.uml @@ -1,132 +1,132 @@ -#include - -PAGE "IMPOSTAZIONE STAMPANTE" -1 -1 76 13 - -RADIOBUTTON MSK_1_TYPE 1 70 -BEGIN - PROMPT 1 1 "Stampa su..." - HELP "Selezionare il tipo dove direzionare la stampa" - ITEM "0|Stampante" - MESSAGE HIDE,MSK_1_FILENAME - MESSAGE SHOW,MSK_1_PRINTERS|ENABLE,MSK_1_PRINTERS - MESSAGE ENABLE,MSK_1_CODES - MESSAGE ENABLE,MSK_1_SIZE - MESSAGE ENABLE,MSK_1_LINES - MESSAGE ENABLE,DLG_SETPRINT - ITEM "2|Visualizzazione" - MESSAGE HIDE,MSK_1_FILENAME - MESSAGE SHOW,MSK_1_PRINTERS|DISABLE,MSK_1_PRINTERS - MESSAGE DISABLE,MSK_1_CODES - MESSAGE DISABLE,MSK_1_SIZE - MESSAGE DISABLE,MSK_1_LINES - MESSAGE DISABLE,DLG_SETPRINT - ITEM "1|File su disco" - MESSAGE SHOW,MSK_1_FILENAME - MESSAGE HIDE,MSK_1_PRINTERS - MESSAGE ENABLE,MSK_1_CODES - MESSAGE DISABLE,MSK_1_SIZE - MESSAGE DISABLE,MSK_1_LINES - MESSAGE DISABLE,DLG_SETPRINT - FLAGS "Z" -END - -LIST MSK_1_PRINTERS 50 -BEGIN - /* viene riempito a run-time con nomi letti da config */ - PROMPT 4 5 "Stampante " - HELP "Selezionare il tipo di stampante desiderata" -END - -STRING MSK_1_FILENAME 52 -BEGIN - PROMPT 4 5 "Nome file " - CHECKTYPE REQUIRED - VALIDATE FILENAME_FUNC - FLAGS "A" - HELP "Nome del file in cui memorizzare la stampa" - WARNING "E' necessario specificare un nome di file" -END - -LIST MSK_1_CODES 40 -BEGIN - PROMPT 4 6 "Tipo stampa " - HELP "Modalita' nelle quale si desidera la stampa" -END - -LIST MSK_1_SIZE 3 -BEGIN - PROMPT 31 6 "Carattere " - ITEM "7|7" - ITEM "8|8" - ITEM "10|10" - ITEM "12|12" - ITEM "15|15" - ITEM "17|17" - HELP "Dimensioni del carattere di stampa" -END - -LIST MSK_1_LINES 3 -BEGIN - PROMPT 52 6 "Linee/Inch " - ITEM "4|4" - ITEM "5|5" - ITEM "6|6" - ITEM "7|7" - ITEM "8|8" - ITEM "9|9" - ITEM "10|10" - HELP "Numero di linee per pollice" -END - -LIST MSK_1_FONT 10 -BEGIN - PROMPT 4 6 "Font " - HELP "Font di stampa su video o stampante" - ITEM "1|Courier" - FLAGS "D" -END - -NUMBER MSK_1_NPAGES 3 0 -BEGIN - PROMPT 54 8 "N.o copie " - HELP "Numero di copie da fare" -END - -BOOLEAN MSK_1_ISGRAPHICS -BEGIN - PROMPT 4 8 "Stampa elementi grafici" - HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente" -END - - -GROUPBOX DLG_NULL 74 4 -BEGIN - PROMPT 1 9 "" -END - -BUTTON DLG_SETPRINT 9 2 -BEGIN - PROMPT -14 -2 "~Imposta" - HELP "Chiama l'Impostazione Stampante di Windows" - MESSAGE EXIT,DLG_SETPRINT -END - -BUTTON DLG_SAVEREC 9 2 -BEGIN - PROMPT -24 -2 "~Registra" - MESSAGE EXIT,K_INS -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -34 -2 "" -END - -BUTTON DLG_CANCEL 9 2 -BEGIN - PROMPT -44 -2 "" -END - -ENDPAGE - -ENDMASK +#include + +PAGE "IMPOSTAZIONE STAMPANTE" -1 -1 76 13 + +RADIOBUTTON MSK_1_TYPE 1 70 +BEGIN + PROMPT 1 1 "Stampa su..." + HELP "Selezionare il tipo dove direzionare la stampa" + ITEM "0|Stampante" + MESSAGE HIDE,MSK_1_FILENAME + MESSAGE SHOW,MSK_1_PRINTERS|ENABLE,MSK_1_PRINTERS + MESSAGE ENABLE,MSK_1_CODES + MESSAGE ENABLE,MSK_1_SIZE + MESSAGE ENABLE,MSK_1_LINES + MESSAGE ENABLE,DLG_SETPRINT + ITEM "2|Visualizzazione" + MESSAGE HIDE,MSK_1_FILENAME + MESSAGE SHOW,MSK_1_PRINTERS|DISABLE,MSK_1_PRINTERS + MESSAGE DISABLE,MSK_1_CODES + MESSAGE DISABLE,MSK_1_SIZE + MESSAGE DISABLE,MSK_1_LINES + MESSAGE DISABLE,DLG_SETPRINT + ITEM "1|File su disco" + MESSAGE SHOW,MSK_1_FILENAME + MESSAGE HIDE,MSK_1_PRINTERS + MESSAGE ENABLE,MSK_1_CODES + MESSAGE DISABLE,MSK_1_SIZE + MESSAGE DISABLE,MSK_1_LINES + MESSAGE DISABLE,DLG_SETPRINT + FLAGS "Z" +END + +LIST MSK_1_PRINTERS 50 +BEGIN + /* viene riempito a run-time con nomi letti da config */ + PROMPT 4 5 "Stampante " + HELP "Selezionare il tipo di stampante desiderata" +END + +STRING MSK_1_FILENAME 52 +BEGIN + PROMPT 4 5 "Nome file " + CHECKTYPE REQUIRED + VALIDATE FILENAME_FUNC + FLAGS "A" + HELP "Nome del file in cui memorizzare la stampa" + WARNING "E' necessario specificare un nome di file" +END + +LIST MSK_1_CODES 40 +BEGIN + PROMPT 4 6 "Tipo stampa " + HELP "Modalita' nelle quale si desidera la stampa" +END + +LIST MSK_1_SIZE 3 +BEGIN + PROMPT 31 6 "Carattere " + ITEM "7|7" + ITEM "8|8" + ITEM "10|10" + ITEM "12|12" + ITEM "15|15" + ITEM "17|17" + HELP "Dimensioni del carattere di stampa" +END + +LIST MSK_1_LINES 3 +BEGIN + PROMPT 52 6 "Linee/Inch " + ITEM "4|4" + ITEM "5|5" + ITEM "6|6" + ITEM "7|7" + ITEM "8|8" + ITEM "9|9" + ITEM "10|10" + HELP "Numero di linee per pollice" +END + +LIST MSK_1_FONT 10 +BEGIN + PROMPT 4 6 "Font " + HELP "Font di stampa su video o stampante" + ITEM "1|Courier" + FLAGS "D" +END + +NUMBER MSK_1_NPAGES 3 0 +BEGIN + PROMPT 54 8 "N.o copie " + HELP "Numero di copie da fare" +END + +BOOLEAN MSK_1_ISGRAPHICS +BEGIN + PROMPT 4 8 "Stampa elementi grafici" + HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente" +END + + +GROUPBOX DLG_NULL 74 4 +BEGIN + PROMPT 1 9 "" +END + +BUTTON DLG_SETPRINT 9 2 +BEGIN + PROMPT -14 -2 "~Imposta" + HELP "Chiama l'Impostazione Stampante di Windows" + MESSAGE EXIT,DLG_SETPRINT +END + +BUTTON DLG_SAVEREC 9 2 +BEGIN + PROMPT -24 -2 "~Registra" + MESSAGE EXIT,K_INS +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -34 -2 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -44 -2 "" +END + +ENDPAGE + +ENDMASK diff --git a/include/defmask.h b/include/defmask.h index 6733dec27..f1259be70 100755 --- a/include/defmask.h +++ b/include/defmask.h @@ -1,92 +1,92 @@ -#ifndef __DEFMASK_H -#define __DEFMASK_H - -/* @M - Identificativi predefiniti dei controlli di XVT - */ -#define DLG_NULL -1 -#define DLG_OK 1 /* TAG del bottone */ -#define DLG_CANCEL 2 /* TAG del bottone */ -#define DLG_PGDN 5 /* TAG del bottone */ -#define DLG_PGUP 6 /* TAG del bottone */ -#define DLG_PAGE 7 /* TAG del bottone */ -#define DLG_PAGETAGS 8 /* TAG del bottone */ -#define DLG_QUIT 9 /* TAG del bottone */ -#define DLG_F9 10 /* TAG del bottone */ -#define DLG_FIRSTREC 11 /* TAG del bottone */ -#define DLG_PREVREC 12 /* TAG del bottone */ -#define DLG_STOPREC 13 /* TAG del bottone */ -#define DLG_NEXTREC 14 /* TAG del bottone */ -#define DLG_LASTREC 15 /* TAG del bottone */ -#define DLG_NEWREC 16 /* TAG del bottone */ -#define DLG_DELREC 17 /* TAG del bottone */ -#define DLG_SAVEREC 18 /* TAG del bottone */ -#define DLG_FINDREC 19 /* TAG del bottone */ -#define DLG_BAR 20 /* TAG del bottone == */ -#define DLG_SELECT 21 /* TAG del bottone */ -#define DLG_EDIT 22 /* TAG del bottone Edit */ -#define DLG_LINK 23 /* TAG del bottone Collega (applicazione) */ -#define DLG_PRINT 24 /* TAG del bottone Stampa */ -#define DLG_SETPRINT 25 /* TAG del bottone Imposta Stampa */ -#define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ - -/* @M - Funzioni di libreria per i validate delle maschere - Nome descrizione Parametri - NUM_EXPR espressione numerica espressione - STR_EXPR espressione stringa espressione - NOT_EMPTY_FUNC campo non vuoto - FIXLEN_FUNC lunghezza fissa lunghezza - EMPTYCOPY_FUNC data id del campo da cui copiarsi se vuoto - DATE_CMP_FUNC compara due date operatore,id.campo con l'altra - data - PI_FUNC controllo part.IVA ???? - XTPI_FUNC controllo esteso - part.IVA ???? - XTZPI_FUNC controllo esteso - part.IVA anche vuota ???? - CF_FUNC controllo cod.fisc. ???? - XTCF_FUNC controllo esteso - cod.fisc. ???? - XTZCF_FUNC controllo esteso - cod.fisc.anche vuoto ???? - MTCHECK_FUNC mese corretto per - ditta mensile o - trimestrale - REQIF_FUNC richiesto se immesso un campo della lista - n.ro di campi lista di campi... - ONEREQ_FUNC almeno uno non vuoto - n.ro campi lista di campi - CHECK_FIELD esegue il check su di un altro campo - campo - FILENAME_FUNC controlla se la stringa e' un nome di file - */ - -#define EXPR_FUNC 0 2 -#define EMPTYCOPY_FUNC 1 1 -#define PI_FUNC 2 1 -#define CF_FUNC 3 1 -#define NOT_EMPTY_FUNC 4 0 -#define DATE_CMP_FUNC 5 2 -#define XTPI_FUNC 6 3 -#define XTCF_FUNC 7 4 -#define XTZPI_FUNC 8 3 -#define XTZCF_FUNC 9 4 -#define FIXLEN_FUNC 10 1 -#define MTCHECK_FUNC 11 0 -#define REQIF_FUNC 12 -#define AUTOEXIT_FUNC 13 -#define NUMCALC_FUNC 14 -#define STRCALC_FUNC 15 -#define ONEREQ_FUNC 16 -#define CHECK_FIELD 17 1 -#define FILENAME_FUNC 18 - -#define VALEXPR VALIDATE EXPR_FUNC -#define NUM_EXPR VALEXPR 0 -#define STR_EXPR VALEXPR 1 -#define NUM_CALC VALIDATE NUMCALC_FUNC 1 -#define STR_CALC VALIDATE STRCALC_FUNC 1 -#define THIS_FIELD 0 -/* @END */ -#endif // __DEFMASK_H +#ifndef __DEFMASK_H +#define __DEFMASK_H + +/* @M + Identificativi predefiniti dei controlli di XVT + */ +#define DLG_NULL -1 +#define DLG_OK 1 /* TAG del bottone */ +#define DLG_CANCEL 2 /* TAG del bottone */ +#define DLG_PGDN 5 /* TAG del bottone */ +#define DLG_PGUP 6 /* TAG del bottone */ +#define DLG_PAGE 7 /* TAG del bottone */ +#define DLG_PAGETAGS 8 /* TAG del bottone */ +#define DLG_QUIT 9 /* TAG del bottone */ +#define DLG_F9 10 /* TAG del bottone */ +#define DLG_FIRSTREC 11 /* TAG del bottone */ +#define DLG_PREVREC 12 /* TAG del bottone */ +#define DLG_STOPREC 13 /* TAG del bottone */ +#define DLG_NEXTREC 14 /* TAG del bottone */ +#define DLG_LASTREC 15 /* TAG del bottone */ +#define DLG_NEWREC 16 /* TAG del bottone */ +#define DLG_DELREC 17 /* TAG del bottone */ +#define DLG_SAVEREC 18 /* TAG del bottone */ +#define DLG_FINDREC 19 /* TAG del bottone */ +#define DLG_BAR 20 /* TAG del bottone == */ +#define DLG_SELECT 21 /* TAG del bottone */ +#define DLG_EDIT 22 /* TAG del bottone Edit */ +#define DLG_LINK 23 /* TAG del bottone Collega (applicazione) */ +#define DLG_PRINT 24 /* TAG del bottone Stampa */ +#define DLG_SETPRINT 25 /* TAG del bottone Imposta Stampa */ +#define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ + +/* @M + Funzioni di libreria per i validate delle maschere + Nome descrizione Parametri + NUM_EXPR espressione numerica espressione + STR_EXPR espressione stringa espressione + NOT_EMPTY_FUNC campo non vuoto + FIXLEN_FUNC lunghezza fissa lunghezza + EMPTYCOPY_FUNC data id del campo da cui copiarsi se vuoto + DATE_CMP_FUNC compara due date operatore,id.campo con l'altra + data + PI_FUNC controllo part.IVA ???? + XTPI_FUNC controllo esteso + part.IVA ???? + XTZPI_FUNC controllo esteso + part.IVA anche vuota ???? + CF_FUNC controllo cod.fisc. ???? + XTCF_FUNC controllo esteso + cod.fisc. ???? + XTZCF_FUNC controllo esteso + cod.fisc.anche vuoto ???? + MTCHECK_FUNC mese corretto per + ditta mensile o + trimestrale + REQIF_FUNC richiesto se immesso un campo della lista + n.ro di campi lista di campi... + ONEREQ_FUNC almeno uno non vuoto + n.ro campi lista di campi + CHECK_FIELD esegue il check su di un altro campo + campo + FILENAME_FUNC controlla se la stringa e' un nome di file + */ + +#define EXPR_FUNC 0 2 +#define EMPTYCOPY_FUNC 1 1 +#define PI_FUNC 2 1 +#define CF_FUNC 3 1 +#define NOT_EMPTY_FUNC 4 0 +#define DATE_CMP_FUNC 5 2 +#define XTPI_FUNC 6 3 +#define XTCF_FUNC 7 4 +#define XTZPI_FUNC 8 3 +#define XTZCF_FUNC 9 4 +#define FIXLEN_FUNC 10 1 +#define MTCHECK_FUNC 11 0 +#define REQIF_FUNC 12 +#define AUTOEXIT_FUNC 13 +#define NUMCALC_FUNC 14 +#define STRCALC_FUNC 15 +#define ONEREQ_FUNC 16 +#define CHECK_FIELD 17 1 +#define FILENAME_FUNC 18 + +#define VALEXPR VALIDATE EXPR_FUNC +#define NUM_EXPR VALEXPR 0 +#define STR_EXPR VALEXPR 1 +#define NUM_CALC VALIDATE NUMCALC_FUNC 1 +#define STR_CALC VALIDATE STRCALC_FUNC 1 +#define THIS_FIELD 0 +/* @END */ +#endif // __DEFMASK_H diff --git a/include/mask.h b/include/mask.h index e045826bc..f12337bed 100755 --- a/include/mask.h +++ b/include/mask.h @@ -1,194 +1,194 @@ -#ifndef __MASK_H -#define __MASK_H - -#ifndef __WINDOW_H -#include -#endif - -#ifndef __MASKFLD_H -#include -#endif - -#ifndef __REAL_H -#include -#endif - - -// @T -typedef bool (*MASK_HANDLER)(TMask& mask, KEY key); -enum TMaskmode { NO_MODE, MODE_INS , MODE_MOD , - MODE_VIS , MODE_QUERY, MODE_QUERYINS }; -// @END - -// @C -// Classe TMask : public TWindow -// @END - -class TMask : public TWindow -{ - // @DPRIV - enum { MAX_PAGES = 12 }; // Massimo numero di pagine nella maschera - WINDOW _pagewin[MAX_PAGES+1]; // Windows of the pages - WINDOW _pagepag[MAX_PAGES]; // Windows of pgup/pgdn - WINDOW _pagetag[MAX_PAGES]; // Windows of pagetags - - int _pages; // Number of pages of the mask - int _page; // Current page - - TBit_array _enabled; // Are pages enabled - int _mode; // Mode of the mask - TArray _field; // Fields in the mask - - int _first_focus; // First control to have focus - int _focus; // Control with focus - int _sheets; // Number of sheets - - MASK_HANDLER _handler; // User defined key handler - - TFilename _source_file; // Source file of the mask - TFilename _workfile; // Name of savefile - long _lastpos; // last read offset on savefile - - real _exchange; // Current value exhange - bool _sheetmask; // Mask owned by a sheet - -protected: - // Ritorna la finestra della pagina corrente (Usare con attenzione) - WINDOW win() const { return _page == -1 ? NULL_WIN : _pagewin[_page]; } - WINDOW toolwin() const { return _pagewin[MAX_PAGES]; } - - int find_field_win(WINDOW win) const; // number of field with window win - - void set_mask_fields() const; // update screen - - void load_checks() const; // load checks related fields - virtual void start_run(); // called when the mask starts to run - virtual TMask_field* parse_field(TScanner& scanner); - - void init_mask(); - WINDOW read_page(TScanner& scanner, bool toolbar = FALSE); - void read_mask(const char* name, int num, int max); - void add_buttons(); - - int find_parent_page(const TMask_field&) const; - int find_first_field(WINDOW w, int dir) const; - int find_active_field(int first, int dir) const; - bool check_current_page(); // Check all the fields on the current page - void next_page(int p); // Show next/previous page - int curr_page() const { return _page; } // Current page number - - bool test_focus_change(WINDOW w = NULL_WIN); - void control_handler(EVENT* ep); - void handler(WINDOW win, EVENT* ep); - -public: - // @FPUB - // crea leggendo descrizione da file .msk - TMask(const char* name, int num = 0, int max = MAX_PAGES); - - // crea mask vuota con parametri dati - TMask(const char* title, int pages, int cols, int rows, int xpos = -1, - int ypos = -1); - - virtual ~TMask(); - - const TFilename& source_file() const { return _source_file; } - - // aggiunta campi a runtime - void add_static (short id, int page, const char* prompt, int x, int y, - const char* flags = ""); - void add_string (short id, int page, const char* prompt, int x, int y, - int dim, const char* flags = "", int width = 0); - void add_number (short id, int page, const char* prompt, int x, int y, - int dim, const char* flags = "", int ndec = 0); - void add_date (short id, int page, const char* prompt, int x, int y, - const char* flags = ""); - void add_button (short id, int page, const char* prompt, int x, int y, - int dx = 9, int dy = 1, const char* flags = ""); - - void add_radio(short id, int page, const char* prompt, int x, int y, - int dx, const char* codes, const char* items, const char* flags = ""); - - int fields() const { return _field.items(); } - int sheets() const { return _sheets; } - - void set_mode(int m) { _mode = m; } - int mode() const { return _mode; } - - void set_exchange(bool show_value, const real& nuo); - const real& exchange() const { return _exchange; } - - bool check_fields(); - void get_mask_fields(); // read screen contents - virtual bool stop_run(KEY key); // called to close the mask - virtual bool can_be_closed() const; - - virtual void open(); - virtual void close(); - virtual void enable(bool on) const; - - int id2pos(short id) const; - TMask_field& fld(int i) const { return (TMask_field&)_field[i]; } // Ritorna il campo i-esimo della maschera - TMask_field& field(short id) const; // field with given id - TEdit_field& efield(short id) const; // edit-field with given id - - void set(short fld_id, const char* str, bool hit=FALSE); - void set(short fld_id, long num, bool hit=FALSE); - const TString& get(short fld_id) const; - long get_long(short fld_id) const; - int get_int(short fld_id) const { return (int)get_long(fld_id); } - bool get_bool(short fld_id) const; - - int first_focus(short id); - void set_focus(); - void move_focus_field(int num); - void set_focus_win(WINDOW win, bool force); - int focus_field() const { return _focus;} - - virtual bool on_key(KEY key); - void on_firm_change(); - - void enable(short fld_id, bool on = TRUE); // Abilita un campo - void disable(short fld_id) { enable(fld_id, FALSE); } - void enable_default(short fld_id = -1); - - void enable_page(byte p, bool on = TRUE); - void disable_page(byte p) { enable_page(p, FALSE); } - bool page_enabled(byte p) const; - - byte num_keys() const; - void enable_key(byte key, bool on = TRUE); - void disable_key(byte key) { enable_key(key, FALSE); } - short get_key_field(byte key, bool first) const; - bool key_valid(int key) const; - - void show(short fld_id = -1, bool on = TRUE); - void hide(short fld_id = -1) { show(fld_id, FALSE); } - void show_default(short fld_id = -1); - - void reset(short fld_id = -1); - void undo(short fld_id = -1); - - void autoload(const TRelation* = NULL); - void autosave(TRelation* = NULL) const; - - void send_key(KEY key, short id, TMask_field* from = NULL); - void set_handler(short fld_id, CONTROL_HANDLER handler); - void set_handler(MASK_HANDLER handler); - void set_workfile(const char* workfile) { _workfile = workfile; _lastpos = 0L;} - bool save(bool append = FALSE) const; - bool load(bool reset = FALSE); - - short dirty() const; // Ritorna il primo campo dirty - bool is_sheetmask() const { return _sheetmask; } - - bool no_mode() const { return _mode == NO_MODE; } - bool query_mode() const { return _mode == MODE_QUERY || _mode == MODE_QUERYINS; } - bool edit_mode() const { return _mode == MODE_MOD; } - bool insert_mode() const { return _mode == MODE_QUERYINS || _mode == MODE_INS; } - - virtual const char* get_caption() const; - virtual void set_caption(const char* c); -}; - -#endif // __MASK_H +#ifndef __MASK_H +#define __MASK_H + +#ifndef __WINDOW_H +#include +#endif + +#ifndef __MASKFLD_H +#include +#endif + +#ifndef __REAL_H +#include +#endif + + +// @T +typedef bool (*MASK_HANDLER)(TMask& mask, KEY key); +enum TMaskmode { NO_MODE, MODE_INS , MODE_MOD , + MODE_VIS , MODE_QUERY, MODE_QUERYINS }; +// @END + +// @C +// Classe TMask : public TWindow +// @END + +class TMask : public TWindow +{ + // @DPRIV + enum { MAX_PAGES = 12 }; // Massimo numero di pagine nella maschera + WINDOW _pagewin[MAX_PAGES+1]; // Windows of the pages + WINDOW _pagepag[MAX_PAGES]; // Windows of pgup/pgdn + WINDOW _pagetag[MAX_PAGES]; // Windows of pagetags + + int _pages; // Number of pages of the mask + int _page; // Current page + + TBit_array _enabled; // Are pages enabled + int _mode; // Mode of the mask + TArray _field; // Fields in the mask + + int _first_focus; // First control to have focus + int _focus; // Control with focus + int _sheets; // Number of sheets + + MASK_HANDLER _handler; // User defined key handler + + TFilename _source_file; // Source file of the mask + TFilename _workfile; // Name of savefile + long _lastpos; // last read offset on savefile + + real _exchange; // Current value exhange + bool _sheetmask; // Mask owned by a sheet + +protected: + // Ritorna la finestra della pagina corrente (Usare con attenzione) + WINDOW win() const { return _page == -1 ? NULL_WIN : _pagewin[_page]; } + WINDOW toolwin() const { return _pagewin[MAX_PAGES]; } + + int find_field_win(WINDOW win) const; // number of field with window win + + void set_mask_fields() const; // update screen + + void load_checks() const; // load checks related fields + virtual void start_run(); // called when the mask starts to run + virtual TMask_field* parse_field(TScanner& scanner); + + void init_mask(); + WINDOW read_page(TScanner& scanner, bool toolbar = FALSE); + void read_mask(const char* name, int num, int max); + void add_buttons(); + + int find_parent_page(const TMask_field&) const; + int find_first_field(WINDOW w, int dir) const; + int find_active_field(int first, int dir) const; + bool check_current_page(); // Check all the fields on the current page + void next_page(int p); // Show next/previous page + int curr_page() const { return _page; } // Current page number + + bool test_focus_change(WINDOW w = NULL_WIN); + void control_handler(EVENT* ep); + void handler(WINDOW win, EVENT* ep); + +public: + // @FPUB + // crea leggendo descrizione da file .msk + TMask(const char* name, int num = 0, int max = MAX_PAGES); + + // crea mask vuota con parametri dati + TMask(const char* title, int pages, int cols, int rows, int xpos = -1, + int ypos = -1); + + virtual ~TMask(); + + const TFilename& source_file() const { return _source_file; } + + // aggiunta campi a runtime + void add_static (short id, int page, const char* prompt, int x, int y, + const char* flags = ""); + void add_string (short id, int page, const char* prompt, int x, int y, + int dim, const char* flags = "", int width = 0); + void add_number (short id, int page, const char* prompt, int x, int y, + int dim, const char* flags = "", int ndec = 0); + void add_date (short id, int page, const char* prompt, int x, int y, + const char* flags = ""); + void add_button (short id, int page, const char* prompt, int x, int y, + int dx = 9, int dy = 1, const char* flags = ""); + + void add_radio(short id, int page, const char* prompt, int x, int y, + int dx, const char* codes, const char* items, const char* flags = ""); + + int fields() const { return _field.items(); } + int sheets() const { return _sheets; } + + void set_mode(int m) { _mode = m; } + int mode() const { return _mode; } + + void set_exchange(bool show_value, const real& nuo); + const real& exchange() const { return _exchange; } + + bool check_fields(); + void get_mask_fields(); // read screen contents + virtual bool stop_run(KEY key); // called to close the mask + virtual bool can_be_closed() const; + + virtual void open(); + virtual void close(); + virtual void enable(bool on) const; + + int id2pos(short id) const; + TMask_field& fld(int i) const { return (TMask_field&)_field[i]; } // Ritorna il campo i-esimo della maschera + TMask_field& field(short id) const; // field with given id + TEdit_field& efield(short id) const; // edit-field with given id + + void set(short fld_id, const char* str, bool hit=FALSE); + void set(short fld_id, long num, bool hit=FALSE); + const TString& get(short fld_id) const; + long get_long(short fld_id) const; + int get_int(short fld_id) const { return (int)get_long(fld_id); } + bool get_bool(short fld_id) const; + + int first_focus(short id); + void set_focus(); + void move_focus_field(int num); + void set_focus_win(WINDOW win, bool force); + int focus_field() const { return _focus;} + + virtual bool on_key(KEY key); + void on_firm_change(); + + void enable(short fld_id, bool on = TRUE); // Abilita un campo + void disable(short fld_id) { enable(fld_id, FALSE); } + void enable_default(short fld_id = -1); + + void enable_page(byte p, bool on = TRUE); + void disable_page(byte p) { enable_page(p, FALSE); } + bool page_enabled(byte p) const; + + byte num_keys() const; + void enable_key(byte key, bool on = TRUE); + void disable_key(byte key) { enable_key(key, FALSE); } + short get_key_field(byte key, bool first) const; + bool key_valid(int key) const; + + void show(short fld_id = -1, bool on = TRUE); + void hide(short fld_id = -1) { show(fld_id, FALSE); } + void show_default(short fld_id = -1); + + void reset(short fld_id = -1); + void undo(short fld_id = -1); + + void autoload(const TRelation* = NULL); + void autosave(TRelation* = NULL) const; + + void send_key(KEY key, short id, TMask_field* from = NULL); + void set_handler(short fld_id, CONTROL_HANDLER handler); + void set_handler(MASK_HANDLER handler); + void set_workfile(const char* workfile) { _workfile = workfile; _lastpos = 0L;} + bool save(bool append = FALSE) const; + bool load(bool reset = FALSE); + + short dirty() const; // Ritorna il primo campo dirty + bool is_sheetmask() const { return _sheetmask; } + + bool no_mode() const { return _mode == NO_MODE; } + bool query_mode() const { return _mode == MODE_QUERY || _mode == MODE_QUERYINS; } + bool edit_mode() const { return _mode == MODE_MOD; } + bool insert_mode() const { return _mode == MODE_QUERYINS || _mode == MODE_INS; } + + virtual const char* get_caption() const; + virtual void set_caption(const char* c); +}; + +#endif // __MASK_H diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 3f7db136b..8dae73330 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -1,4 +1,4 @@ -// $Id: maskfld.cpp,v 1.57 1994-12-02 13:30:09 guy Exp $ +// $Id: maskfld.cpp,v 1.58 1994-12-05 14:23:15 guy Exp $ #include #include @@ -1901,26 +1901,30 @@ const char* TEdit_field::format(const char* d) fpark.trim(); if (fpark.not_empty()) - { - if (fpark.len() > _size) + { + int len = fpark.len(); + if (len > _size) { #ifdef DBG yesnofatal_box("Campo %d troppo lungo: %d > %d", dlg(), fpark.len(), _size); #endif - fpark.cut(_size); + fpark.cut(len = _size); } + if (len < _size) + { + if (_flags.zerofilled) + { + if (isdigit(fpark[0]) && real::is_real(fpark)) + fpark.right_just(_size, '0'); + } + else + if (_flags.rightjust) + fpark.right_just(_size); + } + if (_flags.uppercase) fpark.upper(); - - if (_flags.zerofilled) - { - if (isdigit(fpark[0]) && real::is_real(fpark)) - fpark.right_just(_size, '0'); - } - else - if (_flags.rightjust) - fpark.right_just(_size); } return fpark; diff --git a/include/msksheet.cpp b/include/msksheet.cpp index 28be7558c..995a9d660 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -1081,7 +1081,7 @@ TSheet_field::~TSheet_field() void TSheet_field::reset() { _sheet->destroy(); - _sheet->mask().reset(); + _sheet->sheet_mask().reset(); } // Certified 100% diff --git a/include/real.h b/include/real.h index 6304edfe6..5a90711fd 100755 --- a/include/real.h +++ b/include/real.h @@ -1,159 +1,159 @@ -#ifndef __REAL_H -#define __REAL_H - -#ifndef GMDOTH -#include -#include -#endif - -#ifndef __IOSTREAM_H -#include -#endif - -#ifndef __STDTYPES_H -#include -#endif - -#ifndef __ARRAY_H -#include -#endif -// @C -class real : public TObject -{ - // @DPRIV - DEC _dec; - // @END - -protected: - virtual TObject* dup() const; - char* literals() const; - char* points(int decimals = 0) const; - -public: - - static char* eng2ita(char* s); - static char* ita2eng(const char* s); - static bool is_real(const char* n); - - // @FPUB - DEC* ptr() const { return (DEC*)&_dec; } - char* string(int len = 0, int dec = UNDEFINED, char pad = ' ') const; - char* stringa(int len = 0, int dec = UNDEFINED, char pad = ' ') const; - char* string(const char* picture) const; - - int precision() ; - bool is_zero() const; - int sign() const; - long integer() const; // operator int is too dangerous - - real& round(int prec = 0) ; - real& trunc(int prec = 0) ; - real& ceil(int prec = 0); - real& operator =(double a); - real& operator =(const real& b); - real& operator +=(const real& b); - real& operator +=(double a); - real& operator -=(const real& b); - real& operator *=(const real& b); - real& operator /=(const real& b); - bool operator !() const { return is_zero(); } - real operator -() const; - - real(); - real(const real& b); - real(double a); - real(const char* s); - virtual ~real() {} -}; - -/////////////////////////////////////////////////////////// -// Math operators -/////////////////////////////////////////////////////////// - -ostream& operator <<(ostream& out, const real& a) ; -istream& operator >>(istream& in, real& a) ; - -real operator +(const real& a, const real& b) ; -real operator +(double a, const real& b) ; -real operator +(const real& a, double b) ; -real operator -(const real& a, const real& b) ; -real operator -(double a, const real& b) ; -real operator -(const real& a, double b) ; -real operator *(const real& a, const real& b) ; -real operator *(double a, const real& b) ; -real operator *(const real& a, double b) ; -real operator /(const real& a, const real& b) ; -real operator /(double a, const real& b) ; -real operator /(const real& a, double b) ; - -bool operator <(const real& a, const real& b) ; -bool operator <(double a, const real& b) ; -bool operator >(const real& a, const real& b) ; -bool operator >(double a, const real& b) ; -bool operator <=(const real& a, const real& b) ; -bool operator <=(double a, const real& b) ; -bool operator >=(const real& a, const real& b) ; -bool operator >=(double a, const real& b) ; -bool operator ==(const real& a, const real& b) ; -bool operator ==(double a, const real& b) ; -bool operator !=(const real& a, const real& b) ; -bool operator !=(double a, const real& b) ; - -inline bool operator <(const real& a, double b) { return operator >(b, a); } -inline bool operator >(const real& a, double b) { return operator <(b, a); } -inline bool operator <=(const real& a, double b) { return operator >=(b, a); } -inline bool operator >=(const real& a, double b) { return operator <=(b, a); } -inline bool operator ==(const real& a, double b) { return operator ==(b, a); } -inline bool operator !=(const real& a, double b) { return operator !=(b, a); } - -real operator %(const real& a, const long b) ; -void swap(real& a, real& b) ; -real fnc_min(const real& a, const real& b) ; -real fnc_max(const real& a, const real& b) ; -real sqrt(const real& a) ; -real sqr(const real& a) ; -real exp10(const real& a) ; -real pow(const real& a, const real& b) ; -real exp(const real& a) ; -real log10(const real& a) ; -real log(const real& a) ; -real sin(const real& a) ; -real cos(const real& a) ; -real tan(const real& a) ; -real abs(const real& a) ; -extern const real ZERO; - -class TDistrib : public TObject -{ - real _tot; - real _prog; - bool _ready; - TArray _slices; - int _current; - int _decs; - -public: - - void add(real slice); - real get(); - - // se zap e' vero scancella tutte le percentuali immesse - // altrimenti cambia solo il totale - void init(const real& r, bool zap = FALSE); - void operator =(const real& r) { init(r); } - const real& last_slice() const - { - CHECK(_current,"TDistrib: slices not set"); - return (const real&)_slices[_current-1]; - } - - TDistrib(const real& r, int round = UNDEFINED) : - _prog(0.0), _tot(r), _ready(FALSE), - _current(0), _decs(round), _slices(4) - {} - virtual ~TDistrib() {} -}; - - - -#endif // __REAL_H +#ifndef __REAL_H +#define __REAL_H + +#ifndef GMDOTH +#include +#include +#endif + +#ifndef __IOSTREAM_H +#include +#endif + +#ifndef __STDTYPES_H +#include +#endif + +#ifndef __ARRAY_H +#include +#endif +// @C +class real : public TObject +{ + // @DPRIV + DEC _dec; + // @END + +protected: + virtual TObject* dup() const; + char* literals() const; + char* points(int decimals = 0) const; + +public: + + static char* eng2ita(char* s); + static char* ita2eng(const char* s); + static bool is_real(const char* n); + + // @FPUB + DEC* ptr() const { return (DEC*)&_dec; } + char* string(int len = 0, int dec = UNDEFINED, char pad = ' ') const; + char* stringa(int len = 0, int dec = UNDEFINED, char pad = ' ') const; + char* string(const char* picture) const; + + int precision() ; + bool is_zero() const; + int sign() const; + long integer() const; // operator int is too dangerous + + real& round(int prec = 0) ; + real& trunc(int prec = 0) ; + real& ceil(int prec = 0); + real& operator =(double a); + real& operator =(const real& b); + real& operator +=(const real& b); + real& operator +=(double a); + real& operator -=(const real& b); + real& operator *=(const real& b); + real& operator /=(const real& b); + bool operator !() const { return is_zero(); } + real operator -() const; + + real(); + real(const real& b); + real(double a); + real(const char* s); + virtual ~real() {} +}; + +/////////////////////////////////////////////////////////// +// Math operators +/////////////////////////////////////////////////////////// + +ostream& operator <<(ostream& out, const real& a) ; +istream& operator >>(istream& in, real& a) ; + +real operator +(const real& a, const real& b) ; +real operator +(double a, const real& b) ; +real operator +(const real& a, double b) ; +real operator -(const real& a, const real& b) ; +real operator -(double a, const real& b) ; +real operator -(const real& a, double b) ; +real operator *(const real& a, const real& b) ; +real operator *(double a, const real& b) ; +real operator *(const real& a, double b) ; +real operator /(const real& a, const real& b) ; +real operator /(double a, const real& b) ; +real operator /(const real& a, double b) ; + +bool operator <(const real& a, const real& b) ; +bool operator <(double a, const real& b) ; +bool operator >(const real& a, const real& b) ; +bool operator >(double a, const real& b) ; +bool operator <=(const real& a, const real& b) ; +bool operator <=(double a, const real& b) ; +bool operator >=(const real& a, const real& b) ; +bool operator >=(double a, const real& b) ; +bool operator ==(const real& a, const real& b) ; +bool operator ==(double a, const real& b) ; +bool operator !=(const real& a, const real& b) ; +bool operator !=(double a, const real& b) ; + +inline bool operator <(const real& a, double b) { return operator >(b, a); } +inline bool operator >(const real& a, double b) { return operator <(b, a); } +inline bool operator <=(const real& a, double b) { return operator >=(b, a); } +inline bool operator >=(const real& a, double b) { return operator <=(b, a); } +inline bool operator ==(const real& a, double b) { return operator ==(b, a); } +inline bool operator !=(const real& a, double b) { return operator !=(b, a); } + +real operator %(const real& a, const long b) ; +void swap(real& a, real& b) ; +real fnc_min(const real& a, const real& b) ; +real fnc_max(const real& a, const real& b) ; +real sqrt(const real& a) ; +real sqr(const real& a) ; +real exp10(const real& a) ; +real pow(const real& a, const real& b) ; +real exp(const real& a) ; +real log10(const real& a) ; +real log(const real& a) ; +real sin(const real& a) ; +real cos(const real& a) ; +real tan(const real& a) ; +real abs(const real& a) ; +extern const real ZERO; + +class TDistrib : public TObject +{ + real _tot; + real _prog; + bool _ready; + TArray _slices; + int _current; + int _decs; + +public: + + void add(real slice); + real get(); + + // se zap e' vero scancella tutte le percentuali immesse + // altrimenti cambia solo il totale + void init(const real& r, bool zap = FALSE); + void operator =(const real& r) { init(r); } + const real& last_slice() const + { + CHECK(_current,"TDistrib: slices not set"); + return (const real&)_slices[_current-1]; + } + + TDistrib(const real& r, int round = UNDEFINED) : + _prog(0.0), _tot(r), _ready(FALSE), + _current(0), _decs(round), _slices(4) + {} + virtual ~TDistrib() {} +}; + + + +#endif // __REAL_H diff --git a/include/relapp.h b/include/relapp.h index b85d0c5bf..2f03d490c 100755 --- a/include/relapp.h +++ b/include/relapp.h @@ -1,114 +1,114 @@ -#ifndef __RELAPP_H -#define __RELAPP_H - -#ifndef __APPLICAT_H -#include -#endif - -#ifndef __RELATION_H -#include -#endif - -#ifndef __MASK_H -#include -#endif - -class TKey_array; - -class TRelation_application : public TApplication -{ - TMask * _mask; - TKey_array* _maskeys; - TRecnotype _first, _last; - int _search_id; - - TString16 _autoins_caller; - long _recins; - - bool _lnflag; - TToken_string _fixed; - - virtual bool create(); - virtual bool destroy(); - - bool filter(); - bool test_key(byte k, bool err); - bool save(bool check_dirty); - void enable_query(); - void set_toolbar(bool all); - - int set_mode(int mode); // Seleziona il nuovo modo e ritorna il vecchio - void set_limits(byte what = 0x3); - void query_insert_mode() { query_mode(TRUE); } - void insert_mode(); // Entra in modo inserimento - virtual bool main_loop(); // Ciclo principale - bool relation_remove(); // Cancella il record corrente - TMask_field* get_search_field() const; - - bool autonum(TMask* m, bool rec); - bool has_filtered_cursor() const { return filtered() || force_cursor_usage();} - -protected: - TLocalisamfile& file() const { return get_relation()->lfile(); } // File principale della relazione - TRecnotype first() const { return _first;} - TRecnotype last() const { return _first;} - TMask& curr_mask() const { return *_mask; } - const TString& autoins_caller() const { return _autoins_caller;} - virtual bool menu(MENU_TAG m); - - virtual bool user_create() pure; // Inizializzazione dati utente - virtual bool user_destroy() pure; // Distruzione dati utente - - void set_fixed(); // Fissa i campi non modificabili - bool search_mode(); // Attiva la maschera di ricerca - void query_mode(bool pre_ins = FALSE); // Entra in modo ricerca - bool modify_mode(); // Entra in modo modifica - void setkey(); - bool lnflag() const { return _lnflag;} - // La richiesta della maschera da utilizzare per ogni fase di lavoro (ricerca, inserimento, - // modifica avviene sempre in due tempi: changing_mask e get_mask. Cio' serve per gestire - // Correttamente le applicazioni con mashere multiple. La prima funzione serve a sapere se - // la futura get_mask ritornera' una maschera diversa dalla corrente. - virtual bool changing_mask(int mode) pure; - virtual TMask* get_mask(int mode) pure; // Richiede la maschera da usare - - virtual TRelation* get_relation() const pure; // Relazione da modificare - virtual int read(TMask& m); // Legge dalla relazione i valori nella maschera - virtual int write(const TMask& m); // Scrive sulla relazione i valori dalla maschera - virtual int rewrite(const TMask& m); // Riscrive sulla relazione i valori dalla maschera - virtual bool remove(); // Cancella il record corrente - - // Richiede una stringa nella forma CAMPO1|VALORE1|CAMPO2|VALORE2|...|CAMPOn|VALOREn - // contenente le coppie NUMERO_CAMPO_MASCHERA - VALORE_DA_ASSEGNARE che descrivono il - // prossimo codice libero da utilizzare per la autonumerazione. - // Nel caso di banale numerazione progressiva potrebbe essere implementata come - // return format("%d|%s", F_NUM, get_relation()->items()); - virtual const char* get_next_key() { return ""; } - - // Richiede se il record corrente e' protetto (non cancellabile) - virtual bool protected_record(TRectype&) { return FALSE; } - - virtual void init_query_mode(TMask&) { } // Inizializza la maschera per il modo ricerca - virtual void init_query_insert_mode(TMask& m) { init_query_mode(m); } - virtual void init_insert_mode(TMask&) { } // Inizializza la maschera per il modo inserimento - virtual void init_modify_mode(TMask&) { } // Inizializza la maschera per il modo modifica - - virtual bool force_cursor_usage() const { return FALSE;} - virtual void write_enable(const bool on = TRUE) { get_relation()->write_enable(-1, on); } - void write_disable() { write_enable(FALSE); } - - virtual bool save_and_new() const; - - void set_search_field(short id) { _search_id = id;} // Impone il campo da utilizzare col bottone Ricerca - -public: - TRelation_application(); - virtual ~TRelation_application(); - bool filtered() const { return _fixed.not_empty(); } - bool find(byte key = 0); - void set_link(TMask & m, const char * keyexpr); -}; - -#endif - - +#ifndef __RELAPP_H +#define __RELAPP_H + +#ifndef __APPLICAT_H +#include +#endif + +#ifndef __RELATION_H +#include +#endif + +#ifndef __MASK_H +#include +#endif + +class TKey_array; + +class TRelation_application : public TApplication +{ + TMask * _mask; + TKey_array* _maskeys; + TRecnotype _first, _last; + int _search_id; + + TString16 _autoins_caller; + long _recins; + + bool _lnflag; + TToken_string _fixed; + + virtual bool create(); + virtual bool destroy(); + + bool filter(); + bool test_key(byte k, bool err); + bool save(bool check_dirty); + void enable_query(); + void set_toolbar(bool all); + + int set_mode(int mode); // Seleziona il nuovo modo e ritorna il vecchio + void set_limits(byte what = 0x3); + void query_insert_mode() { query_mode(TRUE); } + void insert_mode(); // Entra in modo inserimento + virtual bool main_loop(); // Ciclo principale + bool relation_remove(); // Cancella il record corrente + TMask_field* get_search_field() const; + + bool autonum(TMask* m, bool rec); + bool has_filtered_cursor() const { return filtered() || force_cursor_usage();} + +protected: + TLocalisamfile& file() const { return get_relation()->lfile(); } // File principale della relazione + TRecnotype first() const { return _first;} + TRecnotype last() const { return _first;} + TMask& curr_mask() const { return *_mask; } + const TString& autoins_caller() const { return _autoins_caller;} + virtual bool menu(MENU_TAG m); + + virtual bool user_create() pure; // Inizializzazione dati utente + virtual bool user_destroy() pure; // Distruzione dati utente + + void set_fixed(); // Fissa i campi non modificabili + bool search_mode(); // Attiva la maschera di ricerca + void query_mode(bool pre_ins = FALSE); // Entra in modo ricerca + bool modify_mode(); // Entra in modo modifica + void setkey(); + bool lnflag() const { return _lnflag;} + // La richiesta della maschera da utilizzare per ogni fase di lavoro (ricerca, inserimento, + // modifica avviene sempre in due tempi: changing_mask e get_mask. Cio' serve per gestire + // Correttamente le applicazioni con mashere multiple. La prima funzione serve a sapere se + // la futura get_mask ritornera' una maschera diversa dalla corrente. + virtual bool changing_mask(int mode) pure; + virtual TMask* get_mask(int mode) pure; // Richiede la maschera da usare + + virtual TRelation* get_relation() const pure; // Relazione da modificare + virtual int read(TMask& m); // Legge dalla relazione i valori nella maschera + virtual int write(const TMask& m); // Scrive sulla relazione i valori dalla maschera + virtual int rewrite(const TMask& m); // Riscrive sulla relazione i valori dalla maschera + virtual bool remove(); // Cancella il record corrente + + // Richiede una stringa nella forma CAMPO1|VALORE1|CAMPO2|VALORE2|...|CAMPOn|VALOREn + // contenente le coppie NUMERO_CAMPO_MASCHERA - VALORE_DA_ASSEGNARE che descrivono il + // prossimo codice libero da utilizzare per la autonumerazione. + // Nel caso di banale numerazione progressiva potrebbe essere implementata come + // return format("%d|%s", F_NUM, get_relation()->items()); + virtual const char* get_next_key() { return ""; } + + // Richiede se il record corrente e' protetto (non cancellabile) + virtual bool protected_record(TRectype&) { return FALSE; } + + virtual void init_query_mode(TMask&) { } // Inizializza la maschera per il modo ricerca + virtual void init_query_insert_mode(TMask& m) { init_query_mode(m); } + virtual void init_insert_mode(TMask&) { } // Inizializza la maschera per il modo inserimento + virtual void init_modify_mode(TMask&) { } // Inizializza la maschera per il modo modifica + + virtual bool force_cursor_usage() const { return FALSE;} + virtual void write_enable(const bool on = TRUE) { get_relation()->write_enable(-1, on); } + void write_disable() { write_enable(FALSE); } + + virtual bool save_and_new() const; + + void set_search_field(short id) { _search_id = id;} // Impone il campo da utilizzare col bottone Ricerca + +public: + TRelation_application(); + virtual ~TRelation_application(); + bool filtered() const { return _fixed.not_empty(); } + bool find(byte key = 0); + void set_link(TMask & m, const char * keyexpr); +}; + +#endif + + diff --git a/include/strings.cpp b/include/strings.cpp index 8f620be6e..5bcb3b40a 100755 --- a/include/strings.cpp +++ b/include/strings.cpp @@ -686,13 +686,12 @@ const TFilename& TFilename::tempdir() // Certified 50% const TFilename& TFilename::temp(const char* prefix) { - const TFilename dirpref(tempdir()); - char* t = NULL; + TFilename dirpref(tempdir()); - if (prefix) + if (prefix && *prefix) { set(prefix); // Copia prefisso e ... - strip("$#"); // ... toglie caratteri jolly + strip("$#*?."); // ... toglie caratteri jolly const TFixed_string f(prefix); #if XVT_OS==XVT_OS_SCOUNIX @@ -707,19 +706,24 @@ const TFilename& TFilename::temp(const char* prefix) *this << pid; } #endif - - t = tempnam((char*)(const char*)dirpref, (char*)_str); } - else - t = tempnam((char*)(const char*)dirpref, NULL); + else cut(0); + TFilename oldtmp(getenv("TMP")); + dirpref.insert("TMP=", 0); + putenv(dirpref); + + char* t = tempnam(NULL, (char*)_str); + CHECK(t != NULL, "Can't execute tempnam"); set(t); + free(t); + oldtmp.insert("TMP=", 0); + putenv(oldtmp); #ifdef DBG if (fexist(_str)) fatal_box("Il file '%s' esiste gia'", _str); #endif - if (t) free(t); return *this; } diff --git a/include/strings.h b/include/strings.h index 00f9e638e..352a5ccdb 100755 --- a/include/strings.h +++ b/include/strings.h @@ -1,289 +1,290 @@ -#ifndef __STRINGS_H -#define __STRINGS_H - -#ifndef __STRING_H -#include -#endif - -#ifndef __OBJECT_H -#include -#endif - -// @C -// Classe TString : public TObject -// @END - -class TString : public TObject -{ -protected: - // @DPROT - char* _str; // Puntatore alla stringa - int _size; // Lunghezza - // @END - - // @FPROT - int make_room(int size); // Cerca spazio per altri size caratteri - TString& set(const char*); // Inizializza con la stringa puntata da char* di lunghezza size - - TString(char* str, int size) : _str(str), _size(size) {} - -public: - // @FPUB - virtual void resize(int size, bool cpy); // Ri/alloca la stringa - - TString(); - TString(int size); // Default constructor for a string of given size - TString(const char* s); // Costruttore a partire da una stringa s - TString(const TString& s); // Costruttore da un oggetto TString s - virtual ~TString(); // Deallocates the string - - /////////////////////////////////////////////////////////// - // @DES Methods derived from TObject - /////////////////////////////////////////////////////////// - - // @FPUB - virtual const char* class_name() const; // Ritorna il nome della classe - virtual word class_id() const; // Ritorna l'identificatore della classe - virtual bool ok() const { return _str != NULL; } - virtual TObject* dup() const; - virtual void print_on(ostream& out) const; - virtual void read_from(istream& in); - virtual word hash() const; // Return hash value - - /////////////////////////////////////////////////////////// - // @DES Query methods - /////////////////////////////////////////////////////////// - - // @FPUB - operator const char*() const { return (const char*)_str; } // *(TString) -> _str - char& operator[](int i) // TString[i] -> _str[i] - { - CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i); - return _str[i]; - } - char operator[](int i) const // TString[i] -> _str[i] - { - CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i); - return _str[i]; - } - - int size() const { return _size; } - int len() const { return strlen(_str); } - bool empty() const { return *_str == '\0'; } - bool not_empty() const { return *_str != '\0'; } - - int find(char, int from = 0) const; // Ritorna la posizione del carattere char nell'oggetto TString - int find(const char* s, int from = 0) const; // Ritorna la posizione della stringa s nell'oggetto TString - - const TString& left(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da sinistra - const TString& mid(int from, int count = -1) const; // Ritorna l'oggetto TString composto dai count caratteri a partire da from - const TString& sub(int from, int to = -1) const; // Ritorna la stringa da FROM a TO (escluso) - const TString& right(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da destra - -/////////////////////////////////////////////////////////// -// @DES Modifying methods -/////////////////////////////////////////////////////////// - -// @FPUB - - TString& fill(char c, int n = -1); // Riempie con n caratteri c - TString& spaces(int n = -1) { return fill(' ', n); } - TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos - TString& insert(const char* s, int pos = 0); // Inserisce la stringa s dalla posizione pos - - TString& strip(const char* k); // Elimina tutti i caratteri contenuti in k - TString& strip_spaces(); // Elimina tutti gli spazi non contenuti tra apici singoli o doppi - TString& ltrim(int n = 0); // Elimina gli spazi da sinistra se n=0 altrimenti elimina i primi n caratteri (da sinistra). - TString& rtrim(int n = 0); // Elimina gli spazi da destra se n=0 altrimenti elimina i primi n caratteri (da destra). - TString& trim(); // ltrim e rtrim - - TString& right_just(int n = -1, char c = ' '); // Giustifica a destra - TString& center_just(int n = -1, char c = ' '); // Centra - TString& left_just(int n = -1, char c = ' '); // Giustifica a sinistra - - TString& picture(const char* pic, const char* s); - virtual TString& format(const char* fmt, ...); - - TString& cut(int n); // Inserisce un '\0' alla posizione n-esima. - - TString& upper(); // Mette la stringa in maiuscolo - TString& lower(); // Mette la stringa in minuscolo - -/////////////////////////////////////////////////////////// -// @DES Standard operators -/////////////////////////////////////////////////////////// - -// @FPUB - - const TString& operator =(const TString& s) { return set(s._str); } - const TString& operator =(const char* s) { return set(s); } - - TString& operator <<(const char*); - TString& operator <<(char); - TString& operator <<(int); - TString& operator <<(long); - TString& operator <<(double); - TString& operator <<(const TObject& obj); - TString& operator <<(const TString& str); // For efficiency only - - bool operator ==(const char* s) const { return strcmp(_str, s) == 0; } - bool operator ==(char* s) const { return strcmp(_str, s) == 0; } - bool operator ==(const TString& s) const { return strcmp(_str, s._str) == 0; } - bool operator !=(const char* s) const { return strcmp(_str, s) != 0; } - bool operator !=(char* s) const { return strcmp(_str, s) != 0; } - bool operator !=(const TString& s) const { return strcmp(_str, s._str) != 0; } - bool operator <(const char* s) const { return strcmp(_str, s) < 0; } - bool operator >(const char* s) const { return strcmp(_str, s) > 0; } - bool operator >=(const char* s) const { return strcmp(_str, s) >= 0; } - bool operator <=(const char* s) const { return strcmp(_str, s) <= 0; } - bool match(const char* s) const; - bool compare(const char* s, int max = -1, bool ignorecase = FALSE) const; -}; - -// @C -// Classe TFixed_string : public TString -// @END - -class TFixed_string : public TString -{ -protected: - virtual void resize(int size, bool cpy); // Causa un errore fatale! - -public: - TFixed_string(const char* str, int size = -1); - virtual ~TFixed_string(); - - virtual TString& format(const char* fmt, ...); - - const TString& operator =(const TString& s) { return set((const char*)s); } - const TString& operator=(const char* str) { return set(str); } - void strncpy(const char* s, int n); -}; - -class TString16 : public TFixed_string -{ - char _str16[17]; - -public: - TString16(const char* str = "") : TFixed_string(_str16, 17) { set(str); } - TString16(const TString& s) : TFixed_string(_str16, 17) { set(s); } - const TString& operator =(const TString& s) { return set((const char*)s); } - const TString& operator =(const char* str) { return set(str); } -}; - -class TString80 : public TFixed_string -{ - char _str80[81]; - -public: - TString80(const char* str = "") : TFixed_string(_str80, 81) { set(str); } - TString80(const TString& s) : TFixed_string(_str80, 81) { set(s); } - const TString& operator =(const char* str) { return set(str); } - const TString& operator =(const TString& s) { return set((const char*)s); } -}; - -class TString256 : public TFixed_string -{ - char _str256[257]; - -public: - TString256(const char* str = "") : TFixed_string(_str256, 257) { set(str); } - TString256(const TString& s) : TFixed_string(_str256, 257) { set(s); } - const TString& operator =(const char* str) { return set(str); } - const TString& operator =(const TString& s) { return set((const char*)s); } -}; - - - -// @C -// Classe TFilename : public TString80 (256 su Windows'95) -// @END - -class TFilename : public TString80 -{ -public: - // @FPUB - - TFilename(const char* n = "") : TString80(n) {} - TFilename(const TString& n) : TString80(n) {} - - // assegnazione tra TFile e stringa - const TString& operator =(const char* s) { return set(s); } - const TString& operator =(const TString& s) { return set((const char*)s); } - - virtual bool ok() const; // Controlla il formato del nome del file - - const char* ext() const; // Ritorna l'estensione - void ext(const char*); // Imposta come estensione la stringa puntata da char* - - const char* name() const; // Ritorna il nome del file - const char* path() const; // Ritorna il nome del direttorio - const TFilename& temp(const char* prefix = NULL); // Genera il nome di un file temporaneo - const TFilename& tempdir(); // Genera il nome della directory temporanea -}; - -// @C -// Classe TToken_string : public TString -// @END - -class TToken_string : public TString -{ - // @DPRIV - char _separator; // Carattere separatore - int _last; // Puntatore all'ultimo - -protected: - // @FPROT - - virtual TObject* dup() const; // Crea un duplicato della token string - bool set_item(const char* v, int n); - -public: - // @FPUB - TToken_string(const char* = "", char separator = '|'); - TToken_string(int n, char separator = '|'); - TToken_string(const TToken_string& s); - - void separator(char s) { _separator = s; } // Setta il separatore a s - - void restart() { _last = empty() ? -1 : 0; } // Rimette all'inizio il puntatore - const TString& operator =(const char* s) { set(s);restart();return *this; } - const TString& operator =(const TString& s) { set(s);restart();return *this; } - - void add(const char* s, int n = -1); // Aggiunge una stringa - void add(char c, int pos = -1); // Aggiunge un char - void add(long n, int pos = -1); // Aggiunge un intero - void add(int n, int pos = -1); // Aggiunge un intero - void destroy(int pos); // Toglie la stringa pos - const char* get(); // Ritorna il prossimo token - const char* get(int n); // Ritorna un token (-1 = prossimo; -2 = ultimo; n = ennesimo) - char get_char(int n = -1); // Ritorna un carattere - int get_int(int n = -1); // Ritorna un intero - long get_long(int n = -1); // Ritorna un intero esteso - int get_pos(const char* s); // Ritorna la posizione dell'item s - int items() const; // Ritorna il numero di token presenti - bool empty_items() const; // Controlla se tutti i token sono nulli -}; - -/////////////////////////////////////////////////////////// -// @DES Paragraph -/////////////////////////////////////////////////////////// - -class TParagraph_string : public TToken_string -{ - int _width; - bool _fixed; - -protected: - void tokenize(); - -public: - TParagraph_string(const char* s, int width); - const TString& operator =(const char* s); - void set_width(int width) { _width = width; } -}; - -#endif - - - +#ifndef __STRINGS_H +#define __STRINGS_H + +#ifndef __STRING_H +#include +#endif + +#ifndef __OBJECT_H +#include +#endif + +// @C +// Classe TString : public TObject +// @END + +class TString : public TObject +{ +protected: + // @DPROT + char* _str; // Puntatore alla stringa + int _size; // Lunghezza + // @END + + // @FPROT + int make_room(int size); // Cerca spazio per altri size caratteri + TString& set(const char*); // Inizializza con la stringa puntata da char* di lunghezza size + + TString(char* str, int size) : _str(str), _size(size) {} + +public: + // @FPUB + virtual void resize(int size, bool cpy); // Ri/alloca la stringa + + TString(); + TString(int size); // Default constructor for a string of given size + TString(const char* s); // Costruttore a partire da una stringa s + TString(const TString& s); // Costruttore da un oggetto TString s + virtual ~TString(); // Deallocates the string + + /////////////////////////////////////////////////////////// + // @DES Methods derived from TObject + /////////////////////////////////////////////////////////// + + // @FPUB + virtual const char* class_name() const; // Ritorna il nome della classe + virtual word class_id() const; // Ritorna l'identificatore della classe + virtual bool ok() const { return _str != NULL; } + virtual TObject* dup() const; + virtual void print_on(ostream& out) const; + virtual void read_from(istream& in); + virtual word hash() const; // Return hash value + + /////////////////////////////////////////////////////////// + // @DES Query methods + /////////////////////////////////////////////////////////// + + // @FPUB + operator const char*() const { return (const char*)_str; } // *(TString) -> _str + char& operator[](int i) // TString[i] -> _str[i] + { + CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i); + return _str[i]; + } + char operator[](int i) const // TString[i] -> _str[i] + { + CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i); + return _str[i]; + } + + int size() const { return _size; } + int len() const { return strlen(_str); } + bool empty() const { return *_str == '\0'; } + bool not_empty() const { return *_str != '\0'; } + + int find(char, int from = 0) const; // Ritorna la posizione del carattere char nell'oggetto TString + int find(const char* s, int from = 0) const; // Ritorna la posizione della stringa s nell'oggetto TString + + const TString& left(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da sinistra + const TString& mid(int from, int count = -1) const; // Ritorna l'oggetto TString composto dai count caratteri a partire da from + const TString& sub(int from, int to = -1) const; // Ritorna la stringa da FROM a TO (escluso) + const TString& right(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da destra + + /////////////////////////////////////////////////////////// + // @DES Modifying methods + /////////////////////////////////////////////////////////// + + // @FPUB + + TString& fill(char c, int n = -1); // Riempie con n caratteri c + TString& spaces(int n = -1) { return fill(' ', n); } + TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos + TString& insert(const char* s, int pos = 0); // Inserisce la stringa s dalla posizione pos + + TString& strip(const char* k); // Elimina tutti i caratteri contenuti in k + TString& strip_spaces(); // Elimina tutti gli spazi non contenuti tra apici singoli o doppi + TString& ltrim(int n = 0); // Elimina gli spazi da sinistra se n=0 altrimenti elimina i primi n caratteri (da sinistra). + TString& rtrim(int n = 0); // Elimina gli spazi da destra se n=0 altrimenti elimina i primi n caratteri (da destra). + TString& trim(); // ltrim e rtrim + + TString& right_just(int n = -1, char c = ' '); // Giustifica a destra + TString& center_just(int n = -1, char c = ' '); // Centra + TString& left_just(int n = -1, char c = ' '); // Giustifica a sinistra + + TString& picture(const char* pic, const char* s); + virtual TString& format(const char* fmt, ...); + + TString& cut(int n); // Inserisce un '\0' alla posizione n-esima. + + TString& upper(); // Mette la stringa in maiuscolo + TString& lower(); // Mette la stringa in minuscolo + + /////////////////////////////////////////////////////////// + // @DES Standard operators + /////////////////////////////////////////////////////////// + + // @FPUB + + const TString& operator =(const TString& s) { return set(s._str); } + const TString& operator =(const char* s) { return set(s); } + + TString& operator <<(const char*); + TString& operator <<(char); + TString& operator <<(int); + TString& operator <<(long); + TString& operator <<(double); + TString& operator <<(const TObject& obj); + TString& operator <<(const TString& str); // For efficiency only + + bool operator ==(const char* s) const { return strcmp(_str, s) == 0; } + bool operator ==(char* s) const { return strcmp(_str, s) == 0; } + bool operator ==(const TString& s) const { return strcmp(_str, s._str) == 0; } + bool operator !=(const char* s) const { return strcmp(_str, s) != 0; } + bool operator !=(char* s) const { return strcmp(_str, s) != 0; } + bool operator !=(const TString& s) const { return strcmp(_str, s._str) != 0; } + bool operator <(const char* s) const { return strcmp(_str, s) < 0; } + bool operator >(const char* s) const { return strcmp(_str, s) > 0; } + bool operator >=(const char* s) const { return strcmp(_str, s) >= 0; } + bool operator <=(const char* s) const { return strcmp(_str, s) <= 0; } + bool match(const char* s) const; + bool compare(const char* s, int max = -1, bool ignorecase = FALSE) const; +}; + +// @C +// Classe TFixed_string : public TString +// @END + +class TFixed_string : public TString +{ +protected: + virtual void resize(int size, bool cpy); // Causa un errore fatale! + +public: + TFixed_string(const char* str, int size = -1); + virtual ~TFixed_string(); + + virtual TString& format(const char* fmt, ...); + + const TString& operator =(const TString& s) { return set((const char*)s); } + const TString& operator=(const char* str) { return set(str); } + void strncpy(const char* s, int n); +}; + +class TString16 : public TFixed_string +{ + char _str16[17]; + +public: + TString16(const char* s = "") : TFixed_string(_str16, 17) { set(s); } + TString16(const TString& s) : TFixed_string(_str16, 17) { set(s); } + const TString& operator =(const TString& s) { return set((const char*)s); } + const TString& operator =(const char* s) { return set(s); } +}; + +class TString80 : public TFixed_string +{ + char _str80[81]; + +public: + TString80(const char* s = "") : TFixed_string(_str80, 81) { set(s); } + TString80(const TString& s) : TFixed_string(_str80, 81) { set(s); } + const TString& operator =(const char* s) { return set(s); } + const TString& operator =(const TString& s) { return set((const char*)s); } +}; + +class TString256 : public TFixed_string +{ + char _str256[257]; + +public: + TString256(const char* s = "") : TFixed_string(_str256, 257) { set(s); } + TString256(const TString& s) : TFixed_string(_str256, 257) { set(s); } + const TString& operator =(const char* s) { return set(s); } + const TString& operator =(const TString& s) { return set((const char*)s); } +}; + + + +// @C +// Classe TFilename : public TString80 (256 su Windows'95) +// @END + +class TFilename : public TString80 +{ +public: + // @FPUB + + TFilename(const char* n = "") : TString80(n) {} + TFilename(const TString& n) : TString80((const char*)n) {} + TFilename(const TFilename& n) : TString80((const char*)n) {} + + // assegnazione tra TFile e stringa + const TString& operator =(const char* s) { return set(s); } + const TString& operator =(const TString& s) { return set((const char*)s); } + + virtual bool ok() const; // Controlla il formato del nome del file + + const char* ext() const; // Ritorna l'estensione + void ext(const char*); // Imposta come estensione la stringa puntata da char* + + const char* name() const; // Ritorna il nome del file + const char* path() const; // Ritorna il nome del direttorio + const TFilename& temp(const char* prefix = NULL); // Genera il nome di un file temporaneo + const TFilename& tempdir(); // Genera il nome della directory temporanea +}; + +// @C +// Classe TToken_string : public TString +// @END + +class TToken_string : public TString +{ + // @DPRIV + char _separator; // Carattere separatore + int _last; // Puntatore all'ultimo + +protected: + // @FPROT + + virtual TObject* dup() const; // Crea un duplicato della token string + bool set_item(const char* v, int n); + +public: + // @FPUB + TToken_string(const char* = "", char separator = '|'); + TToken_string(int n, char separator = '|'); + TToken_string(const TToken_string& s); + + void separator(char s) { _separator = s; } // Setta il separatore a s + + void restart() { _last = empty() ? -1 : 0; } // Rimette all'inizio il puntatore + const TString& operator =(const char* s) { set(s);restart();return *this; } + const TString& operator =(const TString& s) { set(s);restart();return *this; } + + void add(const char* s, int n = -1); // Aggiunge una stringa + void add(char c, int pos = -1); // Aggiunge un char + void add(long n, int pos = -1); // Aggiunge un intero + void add(int n, int pos = -1); // Aggiunge un intero + void destroy(int pos); // Toglie la stringa pos + const char* get(); // Ritorna il prossimo token + const char* get(int n); // Ritorna un token (-1 = prossimo; -2 = ultimo; n = ennesimo) + char get_char(int n = -1); // Ritorna un carattere + int get_int(int n = -1); // Ritorna un intero + long get_long(int n = -1); // Ritorna un intero esteso + int get_pos(const char* s); // Ritorna la posizione dell'item s + int items() const; // Ritorna il numero di token presenti + bool empty_items() const; // Controlla se tutti i token sono nulli +}; + +/////////////////////////////////////////////////////////// +// @DES Paragraph +/////////////////////////////////////////////////////////// + +class TParagraph_string : public TToken_string +{ + int _width; + bool _fixed; + +protected: + void tokenize(); + +public: + TParagraph_string(const char* s, int width); + const TString& operator =(const char* s); + void set_width(int width) { _width = width; } +}; + +#endif + + +