Modificato meccanismo richiamo programmi esterni
git-svn-id: svn://10.65.10.50/trunk@793 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
af3b1f3113
commit
e8dcb49a76
@ -301,6 +301,17 @@ void TApplication::terminate()
|
|||||||
if (_create_ok)
|
if (_create_ok)
|
||||||
{
|
{
|
||||||
destroy(); // Distruzione files e maschere
|
destroy(); // Distruzione files e maschere
|
||||||
|
#if XVT_OS == XVT_OS_WIN
|
||||||
|
const word WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
||||||
|
const HTASK ht = GetCurrentTask();
|
||||||
|
SendMessage(HWND_BROADCAST, WM_WAKEUP, ht, 0L);
|
||||||
|
|
||||||
|
if (fexist("prassi.hlp"))
|
||||||
|
{
|
||||||
|
HWND hwnd = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
|
||||||
|
WinHelp(hwnd, "prassi.hlp", HELP_QUIT, 0L);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
do_events();
|
do_events();
|
||||||
|
|
||||||
if (_printer != NULL) // Distruzione dell'eventuale stampante
|
if (_printer != NULL) // Distruzione dell'eventuale stampante
|
||||||
@ -310,13 +321,6 @@ void TApplication::terminate()
|
|||||||
delete _printer;
|
delete _printer;
|
||||||
_printer = NULL;
|
_printer = NULL;
|
||||||
}
|
}
|
||||||
#if XVT_OS == XVT_OS_WIN
|
|
||||||
if (fexist("prassi.hlp"))
|
|
||||||
{
|
|
||||||
HWND hwnd = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
|
|
||||||
WinHelp(hwnd, "prassi.hlp", HELP_QUIT, 0L);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_files())
|
if (use_files())
|
||||||
@ -392,17 +396,9 @@ void TApplication::check_parameters(int & argc, char* argv[])
|
|||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
else _user = "PRASSI";
|
else _user = "PRASSI";
|
||||||
#endif
|
#endif
|
||||||
long twin_style = WSF_ICONIZABLE | WSF_SIZE | WSF_CLOSE;
|
|
||||||
|
|
||||||
if (stricmp(argv[argc-1], "-icon") == 0)
|
|
||||||
{
|
|
||||||
twin_style |= WSF_ICONIZED;
|
|
||||||
argc--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
twin_style |= WSF_MAXIMIZED;
|
|
||||||
|
|
||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
|
const long twin_style = WSF_ICONIZABLE | WSF_SIZE | WSF_CLOSE | WSF_MAXIMIZED;
|
||||||
set_value(NULL_WIN,ATTR_WIN_PM_TWIN_STARTUP_STYLE, twin_style);
|
set_value(NULL_WIN,ATTR_WIN_PM_TWIN_STARTUP_STYLE, twin_style);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,107 +1,113 @@
|
|||||||
#ifndef __APPLICATION_H
|
#ifndef __APPLICATION_H
|
||||||
#define __APPLICATION_H
|
#define __APPLICATION_H
|
||||||
|
|
||||||
#ifndef INCL_XVTH
|
#ifndef INCL_XVTH
|
||||||
#include <xvt.h>
|
#include <xvt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __PRINTER_H
|
#ifndef __PRINTER_H
|
||||||
#include <printer.h>
|
#include <printer.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TApplication
|
// Classe TApplication
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
#define MSG_AI "AI" // message auto_insert (relapp)
|
#define MSG_AI "AI" // message auto_insert (relapp)
|
||||||
#define MSG_FS "FS" // message filtered start (relapp)
|
#define MSG_FS "FS" // message filtered start (relapp)
|
||||||
#define MSG_LN "LN" // message (printapp -> relapp)
|
#define MSG_LN "LN" // message (printapp -> relapp)
|
||||||
#define CHK_ALL -1 // all authorization checks
|
#define CHK_ALL -1 // all authorization checks
|
||||||
#define CHK_DONGLE 0 // dongle authorization checks
|
#define CHK_DONGLE 0 // dongle authorization checks
|
||||||
#define CHK_USER 1 // user authorization checks
|
#define CHK_USER 1 // user authorization checks
|
||||||
|
|
||||||
class TApplication
|
class TApplication
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
int _bar;
|
int _bar;
|
||||||
int __argc;
|
int __argc;
|
||||||
const char** __argv;
|
const char** __argv;
|
||||||
TBit_array _dongle_aut;
|
TBit_array _dongle_aut;
|
||||||
TBit_array _user_aut;
|
TBit_array _user_aut;
|
||||||
|
|
||||||
TString80 _name, _title;
|
TString80 _name, _title;
|
||||||
TPrinter* _printer;
|
TPrinter* _printer;
|
||||||
|
|
||||||
long _savefirm;
|
long _savefirm;
|
||||||
bool _create_ok;
|
bool _create_ok;
|
||||||
static TString16 _user;
|
word _waiting;
|
||||||
|
|
||||||
protected:
|
static TString16 _user;
|
||||||
const char* get_module_name() const;
|
|
||||||
static long task_eh(WINDOW win, EVENT* ep);
|
protected:
|
||||||
|
const char* get_module_name() const;
|
||||||
virtual long handler(WINDOW win, EVENT* ep);
|
static long task_eh(WINDOW win, EVENT* ep);
|
||||||
virtual bool extended_firm() const { return FALSE; } // Extended set_firm dialog box
|
|
||||||
virtual bool use_files() const { return TRUE; }
|
virtual long handler(WINDOW win, EVENT* ep);
|
||||||
|
virtual bool extended_firm() const { return FALSE; } // Extended set_firm dialog box
|
||||||
virtual bool create(); // Crea la finestra principale
|
virtual bool use_files() const { return TRUE; }
|
||||||
virtual bool menu(MENU_TAG) { return TRUE; } // Controlla il menu
|
|
||||||
virtual bool build_firm_data(long cod, bool flagcom = FALSE) { return TRUE;}
|
virtual bool create(); // Crea la finestra principale
|
||||||
virtual bool destroy(); // Rimuove l'applicazione
|
virtual bool menu(MENU_TAG) { return TRUE; } // Controlla il menu
|
||||||
virtual void print();
|
virtual bool build_firm_data(long cod, bool flagcom = FALSE) { return TRUE;}
|
||||||
|
virtual bool destroy(); // Rimuove l'applicazione
|
||||||
virtual void on_config_change();
|
virtual void print();
|
||||||
virtual void on_firm_change();
|
|
||||||
|
virtual void on_config_change();
|
||||||
void set_user(const char * user) { _user = user; }
|
virtual void on_firm_change();
|
||||||
void set_perms();
|
|
||||||
|
void set_user(const char * user) { _user = user; }
|
||||||
void terminate();
|
void set_perms();
|
||||||
bool config();
|
|
||||||
void about() const;
|
void terminate();
|
||||||
|
bool config();
|
||||||
public:
|
void about() const;
|
||||||
// @FPUB
|
|
||||||
|
public:
|
||||||
void setbar(int menubar) { _bar = menubar;} // Modifica la menu-bar
|
// @FPUB
|
||||||
void run(int argc, char* argv[], const char* name);
|
|
||||||
|
void setbar(int menubar) { _bar = menubar;} // Modifica la menu-bar
|
||||||
// @DES Queste funzioni possono essere ridefinite da ogni applicazione
|
void run(int argc, char* argv[], const char* name);
|
||||||
// @FPUB
|
|
||||||
virtual word class_id() const { return CLASS_APPLICATION; }
|
// @DES Queste funzioni possono essere ridefinite da ogni applicazione
|
||||||
void stop_run(); // Forza chiusura applicazione
|
// @FPUB
|
||||||
|
virtual word class_id() const { return CLASS_APPLICATION; }
|
||||||
void check_menu_item(MENU_TAG item); // Check menu
|
void stop_run(); // Forza chiusura applicazione
|
||||||
void uncheck_menu_item(MENU_TAG item); // Uncheck
|
|
||||||
void enable_menu_item(MENU_TAG item, bool on = TRUE);
|
void check_menu_item(MENU_TAG item); // Check menu
|
||||||
void disable_menu_item(MENU_TAG item) { enable_menu_item(item, FALSE); }
|
void uncheck_menu_item(MENU_TAG item); // Uncheck
|
||||||
void dispatch_e_menu(MENU_TAG item);
|
void enable_menu_item(MENU_TAG item, bool on = TRUE);
|
||||||
|
void disable_menu_item(MENU_TAG item) { enable_menu_item(item, FALSE); }
|
||||||
const TString& name() const { return _name; }
|
void dispatch_e_menu(MENU_TAG item);
|
||||||
const char** argv() const { return __argv; }
|
|
||||||
const char* argv(int i) const { return __argv[i]; }
|
const TString& name() const { return _name; }
|
||||||
int argc() const { return __argc; }
|
const char** argv() const { return __argv; }
|
||||||
|
const char* argv(int i) const { return __argv[i]; }
|
||||||
void set_title(const char* t) { _title = t; }
|
int argc() const { return __argc; }
|
||||||
const TString& title() const { return _title; }
|
|
||||||
|
void set_title(const char* t) { _title = t; }
|
||||||
TPrinter* set_printer(TPrinter* p);
|
const TString& title() const { return _title; }
|
||||||
TPrinter& printer();
|
|
||||||
|
TPrinter* set_printer(TPrinter* p);
|
||||||
static void check_parameters(int & argc, char *argv[]);
|
TPrinter& printer();
|
||||||
|
|
||||||
const TString& user() const { return _user; }
|
static void check_parameters(int & argc, char *argv[]);
|
||||||
bool has_module(int module, int checktype = CHK_ALL) const;
|
|
||||||
bool set_firm(long cod = -1);
|
const TString& user() const { return _user; }
|
||||||
long get_firm() const;
|
bool has_module(int module, int checktype = CHK_ALL) const;
|
||||||
const char* get_firm_dir() const;
|
bool set_firm(long cod = -1);
|
||||||
|
long get_firm() const;
|
||||||
TApplication();
|
const char* get_firm_dir() const;
|
||||||
virtual ~TApplication();
|
|
||||||
};
|
void wait_for(word taskid) { _waiting = taskid; }
|
||||||
|
void wake_up() { _waiting = 0; }
|
||||||
bool xvt_running(); // xvt is running?
|
word waiting() const { return _waiting; }
|
||||||
TApplication* MainApp(); // main application (old fashioned: will be removed soon
|
|
||||||
TApplication& main_app();
|
TApplication();
|
||||||
|
virtual ~TApplication();
|
||||||
#endif // __APPLICATION_H
|
};
|
||||||
|
|
||||||
|
bool xvt_running(); // xvt is running?
|
||||||
|
TApplication* MainApp(); // main application (old fashioned: will be removed soon
|
||||||
|
TApplication& main_app();
|
||||||
|
|
||||||
|
#endif // __APPLICATION_H
|
||||||
|
|||||||
@ -146,7 +146,6 @@ int yesnofatal_box(const char* fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int yesnocancel_box(const char* fmt, ...)
|
int yesnocancel_box(const char* fmt, ...)
|
||||||
{
|
{
|
||||||
buildmsg();
|
buildmsg();
|
||||||
@ -170,6 +169,19 @@ int yesnocancel_box(const char* fmt, ...)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __trace(const char* fmt, ...)
|
||||||
|
{
|
||||||
|
buildmsg();
|
||||||
|
FILE* f = fopen("trace.log", "a");
|
||||||
|
if (f != NULL)
|
||||||
|
{
|
||||||
|
fprintf(f, "%s\n", msg);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
return f != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // XVT_OS
|
#endif // XVT_OS
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
117
include/checks.h
117
include/checks.h
@ -1,58 +1,59 @@
|
|||||||
#ifndef __CHECKS_H
|
#ifndef __CHECKS_H
|
||||||
#define __CHECKS_H
|
#define __CHECKS_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
/* @FPUB */
|
/* @FPUB */
|
||||||
int message_box(const char* fmt, ...);
|
int message_box(const char* fmt, ...);
|
||||||
int warning_box(const char* fmt, ...);
|
int warning_box(const char* fmt, ...);
|
||||||
int sorry_box(const char* fmt, ...);
|
int sorry_box(const char* fmt, ...);
|
||||||
int error_box(const char* fmt, ...);
|
int error_box(const char* fmt, ...);
|
||||||
int fatal_box(const char* fmt, ...);
|
int fatal_box(const char* fmt, ...);
|
||||||
int yesno_box(const char* fmt, ...);
|
int yesno_box(const char* fmt, ...);
|
||||||
int yesnocancel_box(const char* fmt, ...);
|
int yesnocancel_box(const char* fmt, ...);
|
||||||
int yesnofatal_box(const char* fmt, ...);
|
int yesnofatal_box(const char* fmt, ...);
|
||||||
|
int __trace(const char* fmt, ...);
|
||||||
/* @END */
|
|
||||||
#ifdef __cplusplus
|
/* @END */
|
||||||
}
|
#ifdef __cplusplus
|
||||||
#endif
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* @M
|
|
||||||
Utilizzate in fase di debug (definire il simbolo DBG in compilazione)
|
/* @M
|
||||||
*/
|
Utilizzate in fase di debug (definire il simbolo DBG in compilazione)
|
||||||
#ifdef DBG
|
*/
|
||||||
#define CHECK(p, m) ( (p) ? (void)0 : (void) fatal_box( \
|
#ifdef DBG
|
||||||
"Check failed in %s, line %d:\n\r%s", \
|
#define CHECK(p, m) ( (p) ? (void)0 : (void) fatal_box( \
|
||||||
__FILE__, __LINE__, m) )
|
"Check failed in %s, line %d:\n\r%s", \
|
||||||
|
__FILE__, __LINE__, m) )
|
||||||
#define CHECKS(p, m, s0) ( (p) ? (void)0 : (void) fatal_box( \
|
|
||||||
"Check failed in %s, line %d:\n\r%s%s", \
|
#define CHECKS(p, m, s0) ( (p) ? (void)0 : (void) fatal_box( \
|
||||||
__FILE__, __LINE__, m, s0) )
|
"Check failed in %s, line %d:\n\r%s%s", \
|
||||||
|
__FILE__, __LINE__, m, s0) )
|
||||||
#define CHECKD(p, m, d0) ( (p) ? (void)0 : (void) fatal_box( \
|
|
||||||
"Check failed in %s, line %d:\n\r%s%d", \
|
#define CHECKD(p, m, d0) ( (p) ? (void)0 : (void) fatal_box( \
|
||||||
__FILE__, __LINE__, m, d0) )
|
"Check failed in %s, line %d:\n\r%s%d", \
|
||||||
#else
|
__FILE__, __LINE__, m, d0) )
|
||||||
|
#else
|
||||||
#define CHECK(p, m)
|
|
||||||
#define CHECKS(p, m, s)
|
#define CHECK(p, m)
|
||||||
#define CHECKD(p, m, d)
|
#define CHECKS(p, m, s)
|
||||||
|
#define CHECKD(p, m, d)
|
||||||
#endif
|
|
||||||
/* @END */
|
#endif
|
||||||
|
/* @END */
|
||||||
|
|
||||||
/* @M
|
|
||||||
Utilizzata in fase di debug (definire il simbolo TRC in compilazione)
|
/* @M
|
||||||
*/
|
Utilizzata in fase di debug (definire il simbolo TRC in compilazione)
|
||||||
#ifdef TRC
|
*/
|
||||||
#define TRACE(m) warning_box(m)
|
#ifdef TRC
|
||||||
#else
|
#define TRACE __trace
|
||||||
#define TRACE(m) ((void) 0)
|
#else
|
||||||
#endif
|
#define TRACE 1 ? 0 : __trace
|
||||||
/* @END */
|
#endif
|
||||||
|
/* @END */
|
||||||
#endif // __CHECKS_H
|
|
||||||
|
#endif // __CHECKS_H
|
||||||
|
|||||||
3378
include/cisam.c
3378
include/cisam.c
File diff suppressed because it is too large
Load Diff
@ -505,6 +505,7 @@ TPush_button::TPush_button(short left, short top, short right, short bottom,
|
|||||||
{
|
{
|
||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
|
|
||||||
case DLG_OK:
|
case DLG_OK:
|
||||||
if (strcmp("Conferma", caption()) == 0)
|
if (strcmp("Conferma", caption()) == 0)
|
||||||
capt = format("#%d", BMP_OK);
|
capt = format("#%d", BMP_OK);
|
||||||
@ -526,21 +527,23 @@ TPush_button::TPush_button(short left, short top, short right, short bottom,
|
|||||||
if (strcmp("Nuovo", caption()) == 0) // Puo' essere Gestione
|
if (strcmp("Nuovo", caption()) == 0) // Puo' essere Gestione
|
||||||
capt = format("#%d#%d", BMP_NEWREC, BMP_NEWRECDN);
|
capt = format("#%d#%d", BMP_NEWREC, BMP_NEWRECDN);
|
||||||
break;
|
break;
|
||||||
case DLG_FIRSTREC:
|
|
||||||
capt = format("#%d", BMP_FIRSTREC);
|
|
||||||
break;
|
|
||||||
case DLG_PREVREC:
|
|
||||||
capt = format("#%d", BMP_PREVREC);
|
|
||||||
break;
|
|
||||||
case DLG_STOPREC:
|
case DLG_STOPREC:
|
||||||
capt = format("#%d", BMP_STOPREC);
|
capt = format("#%d", BMP_STOPREC);
|
||||||
break;
|
break;
|
||||||
case DLG_NEXTREC:
|
/*
|
||||||
capt = format("#%d", BMP_NEXTREC);
|
case DLG_FIRSTREC:
|
||||||
break;
|
capt = format("#%d", BMP_FIRSTREC);
|
||||||
case DLG_LASTREC:
|
break;
|
||||||
capt = format("#%d", BMP_LASTREC);
|
case DLG_PREVREC:
|
||||||
break;
|
capt = format("#%d", BMP_PREVREC);
|
||||||
|
break;
|
||||||
|
case DLG_NEXTREC:
|
||||||
|
capt = format("#%d", BMP_NEXTREC);
|
||||||
|
break;
|
||||||
|
case DLG_LASTREC:
|
||||||
|
capt = format("#%d", BMP_LASTREC);
|
||||||
|
break;
|
||||||
|
*/
|
||||||
case DLG_SAVEREC:
|
case DLG_SAVEREC:
|
||||||
capt = format("#%d#%d", BMP_SAVEREC, BMP_SAVERECDN);
|
capt = format("#%d#%d", BMP_SAVEREC, BMP_SAVERECDN);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -30,15 +30,12 @@ bool TExternal_app::can_run() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int TExternal_app::run(bool async, bool iconized)
|
int TExternal_app::run(bool async, bool user)
|
||||||
{
|
{
|
||||||
TString256 path(_path);
|
TString256 path(_path);
|
||||||
|
|
||||||
if (!async)
|
if (user)
|
||||||
{
|
|
||||||
if (iconized) path << " -icon";
|
|
||||||
path << " -u" << main_app().user();
|
path << " -u" << main_app().user();
|
||||||
}
|
|
||||||
|
|
||||||
_error = 0;
|
_error = 0;
|
||||||
_exitcode = 0;
|
_exitcode = 0;
|
||||||
@ -59,34 +56,32 @@ int TExternal_app::run(bool async, bool iconized)
|
|||||||
CURSOR oldcur = get_cursor(TASK_WIN);
|
CURSOR oldcur = get_cursor(TASK_WIN);
|
||||||
set_cursor(TASK_WIN, CURSOR_WAIT);
|
set_cursor(TASK_WIN, CURSOR_WAIT);
|
||||||
|
|
||||||
const UINT sh = iconized ? SW_SHOWMINIMIZED : SW_SHOW;
|
_exitcode = WinExec((char*)(const char*)path, SW_SHOW);
|
||||||
_exitcode = WinExec((char*)(const char*)path, sh);
|
|
||||||
|
|
||||||
if (_exitcode >= 32)
|
if (_exitcode >= 32)
|
||||||
{
|
{
|
||||||
if (!async)
|
if (!async)
|
||||||
{
|
{
|
||||||
if (!iconized)
|
TTemp_window tw(TASK_WIN);
|
||||||
{
|
tw.iconize();
|
||||||
TTemp_window tw(TASK_WIN);
|
|
||||||
tw.iconize();
|
|
||||||
}
|
|
||||||
|
|
||||||
HTASK child = NULL;
|
HTASK child = NULL;
|
||||||
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
TASKENTRY te; te.dwSize = sizeof(TASKENTRY);
|
||||||
for (bool ok = TaskFirst(&te); ok; ok = TaskNext(&te))
|
for (bool ok = TaskFirst(&te); ok; ok = TaskNext(&te))
|
||||||
if (te.hInst == (HINSTANCE)_exitcode) child = te.hTask;
|
if (te.hInst == (HINSTANCE)_exitcode) child = te.hTask;
|
||||||
CHECK(child, "Can't find child task");
|
CHECK(child, "Can't find child task");
|
||||||
while(TaskFindHandle(&te, child))
|
|
||||||
process_events();
|
|
||||||
|
|
||||||
if (!iconized)
|
main_app().wait_for(child);
|
||||||
|
for (byte i = 0; main_app().waiting(); i++)
|
||||||
{
|
{
|
||||||
TTemp_window tw(TASK_WIN);
|
if (i == 0 && TaskFindHandle(&te, child) == FALSE)
|
||||||
tw.maximize();
|
break;
|
||||||
xvt_statbar_refresh();
|
process_events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tw.maximize();
|
||||||
}
|
}
|
||||||
|
xvt_statbar_refresh();
|
||||||
_exitcode = 0;
|
_exitcode = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -96,7 +91,6 @@ int TExternal_app::run(bool async, bool iconized)
|
|||||||
else
|
else
|
||||||
error_box("Impossibile eseguire '%s':\nErrore %d", (const char*)_path, _exitcode);
|
error_box("Impossibile eseguire '%s':\nErrore %d", (const char*)_path, _exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_cursor(TASK_WIN, oldcur);
|
set_cursor(TASK_WIN, oldcur);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -1,34 +1,34 @@
|
|||||||
// execp.h; trattasi di -*-c++-*-
|
// execp.h; trattasi di -*-c++-*-
|
||||||
// fv 6/10/93
|
// fv 6/10/93
|
||||||
|
|
||||||
#ifndef __EXECP_H
|
#ifndef __EXECP_H
|
||||||
#define __EXECP_H
|
#define __EXECP_H
|
||||||
|
|
||||||
#ifndef __OBJECT_H
|
#ifndef __OBJECT_H
|
||||||
#include <object.h>
|
#include <object.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Class for external object execution with optional background
|
// Class for external object execution with optional background
|
||||||
// exec under UNIX and swap on EMS under DOS
|
// exec under UNIX and swap on EMS under DOS
|
||||||
// Manages restoring the XVT status
|
// Manages restoring the XVT status
|
||||||
// No command line is implemented; user is supposed to use the
|
// No command line is implemented; user is supposed to use the
|
||||||
// mailbox for this
|
// mailbox for this
|
||||||
|
|
||||||
class TExternal_app : public TObject
|
class TExternal_app : public TObject
|
||||||
{
|
{
|
||||||
const char* _path; // app name (must be allocated by user)
|
const char* _path; // app name (must be allocated by user)
|
||||||
int _error; // last error (errno code)
|
int _error; // last error (errno code)
|
||||||
int _exitcode; // last exit code
|
int _exitcode; // last exit code
|
||||||
int _count; // count of calls
|
int _count; // count of calls
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool can_run() const;
|
bool can_run() const;
|
||||||
int run(bool async = FALSE, bool iconized = FALSE);
|
int run(bool async = FALSE, bool user = TRUE);
|
||||||
int error() { return _error;};
|
int error() { return _error;};
|
||||||
int exitcode() { return _exitcode;};
|
int exitcode() { return _exitcode;};
|
||||||
int count() { return _count; };
|
int count() { return _count; };
|
||||||
|
|
||||||
TExternal_app(const char* p);
|
TExternal_app(const char* p);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
221
include/form.cpp
221
include/form.cpp
@ -2,13 +2,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#include <msksheet.h>
|
|
||||||
#include <form.h>
|
#include <form.h>
|
||||||
|
#include <msksheet.h>
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
#include <bagn003.h>
|
#include "..\ba\ba2100.h"
|
||||||
|
|
||||||
static TForm* _form = NULL;
|
static TForm* _form = NULL;
|
||||||
|
|
||||||
@ -71,7 +71,8 @@ void TForm_flags::print_on(ostream& out) const
|
|||||||
if (!enabled) s << "D";
|
if (!enabled) s << "D";
|
||||||
if (!shown) s << "H";
|
if (!shown) s << "H";
|
||||||
|
|
||||||
if (s.not_empty()) out << " FLAGS \"" << s << '"' << endl;
|
if (s.not_empty())
|
||||||
|
out << " FLAGS \"" << s << '"' << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -143,7 +144,7 @@ public:
|
|||||||
|
|
||||||
bool in_group(byte g) const { return g == 0 || _group[g]; }
|
bool in_group(byte g) const { return g == 0 || _group[g]; }
|
||||||
const TString& key() const { return _desc; }
|
const TString& key() const { return _desc; }
|
||||||
void to_row(TToken_string& row) const;
|
void print_on(TToken_string& row) const;
|
||||||
|
|
||||||
void show(bool on = TRUE) { _flag.shown = on; }
|
void show(bool on = TRUE) { _flag.shown = on; }
|
||||||
void hide() { show(FALSE); }
|
void hide() { show(FALSE); }
|
||||||
@ -375,11 +376,15 @@ bool TForm_item::update()
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TForm_item::to_row(TToken_string& row) const
|
void TForm_item::print_on(TToken_string& row) const
|
||||||
{
|
{
|
||||||
row = class_name();
|
row = class_name();
|
||||||
row.add(_y);
|
row.add(_y);
|
||||||
row.add(_x);
|
row.add(_x);
|
||||||
|
|
||||||
|
const long fu = _group.first_one();
|
||||||
|
if (fu > 0) row.add(fu);
|
||||||
|
else row.add(" ");
|
||||||
row.add(key());
|
row.add(key());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,10 +793,27 @@ bool TForm_list::update()
|
|||||||
// TPrint_section
|
// TPrint_section
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TPrint_section::TPrint_section(TForm* f)
|
TMask* TPrint_section::_msk = NULL;
|
||||||
: _height(0), _form(f)
|
|
||||||
|
TPrint_section::TPrint_section(TForm* f) : _height(0), _form(f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
TPrint_section::~TPrint_section()
|
||||||
|
{
|
||||||
|
if (_msk)
|
||||||
|
{
|
||||||
|
delete _msk;
|
||||||
|
_msk = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const TPrint_section& TPrint_section::copy(const TPrint_section& ps)
|
||||||
|
{
|
||||||
|
_item = ps._item;
|
||||||
|
_height = ps._height;
|
||||||
|
return ps;
|
||||||
|
}
|
||||||
|
|
||||||
TPrintrow& TPrint_section::row(int num)
|
TPrintrow& TPrint_section::row(int num)
|
||||||
{
|
{
|
||||||
TPrintrow* pr = (TPrintrow*)objptr(num);
|
TPrintrow* pr = (TPrintrow*)objptr(num);
|
||||||
@ -815,7 +837,7 @@ TForm_item* TPrint_section::parse_item(const TString& s)
|
|||||||
if (s == "LI")
|
if (s == "LI")
|
||||||
return new TForm_list(this);
|
return new TForm_list(this);
|
||||||
|
|
||||||
CHECKS(NULL, "Elemento di stampa sconosciuto: ", (const char*)s);
|
CHECKS(NULL, "Campo di stampa sconosciuto: ", (const char*)s);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -868,51 +890,63 @@ bool TPrint_section::update()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TPrint_section::edit()
|
bool TPrint_section::edit(const char* title)
|
||||||
{
|
{
|
||||||
TMask m("bagn003");
|
TMask m("ba2100s");
|
||||||
|
m.set_caption(title);
|
||||||
|
|
||||||
|
m.set(F_HEIGHT, _height);
|
||||||
|
|
||||||
|
if (m.run() == K_ESC)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
TString80 title("Campi della sezione");
|
bool dirty = m.dirty() != 0;
|
||||||
|
|
||||||
TArray_sheet a(-1, -1, 0, 0, title, "Tipo@8|Riga|Col.|Descrizione@80", 0xE);
|
if (dirty)
|
||||||
|
_height = m.get_int(F_HEIGHT);
|
||||||
|
|
||||||
|
TArray_sheet a(-1, -1, 0, 0, title, "Tipo@8|Riga|Col.|Gr.|Descrizione@40", 0xE);
|
||||||
|
|
||||||
for (word i = 0; i < fields(); i++)
|
for (word i = 0; i < fields(); i++)
|
||||||
{
|
{
|
||||||
TToken_string* s = new TToken_string(128);
|
TToken_string* s = new TToken_string(128);
|
||||||
field(i).to_row(*s);
|
field(i).print_on(*s);
|
||||||
a.add(s);
|
a.add(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dirty = FALSE;
|
|
||||||
KEY k;
|
KEY k;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
k = a.run();
|
k = a.run();
|
||||||
i = (word)a.selected();
|
i = (word)a.selected();
|
||||||
|
|
||||||
|
if (k == K_ENTER || k == K_INS && _msk == NULL)
|
||||||
|
_msk = new TMask("ba2100f");
|
||||||
|
|
||||||
switch(k)
|
switch(k)
|
||||||
{
|
{
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
m.set_mode(MODE_MOD);
|
_msk->set_mode(MODE_MOD);
|
||||||
if (field(i).edit(m))
|
if (field(i).edit(*_msk))
|
||||||
{
|
{
|
||||||
|
field(i).print_on(a.row(i));
|
||||||
dirty = TRUE;
|
dirty = TRUE;
|
||||||
field(i).to_row(a.row(i));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_INS:
|
case K_INS:
|
||||||
{
|
{
|
||||||
m.set_mode(MODE_INS);
|
_msk->set_mode(MODE_INS);
|
||||||
TForm_string dummy(this);
|
TForm_string dummy(this);
|
||||||
if (dummy.edit(m))
|
if (dummy.edit(*_msk))
|
||||||
{
|
{
|
||||||
const TString& c = m.get(F_CLASS).left(2);
|
const TString& c = _msk->get(F_CLASS).left(2);
|
||||||
TForm_item* item = parse_item(c);
|
TForm_item* item = parse_item(c);
|
||||||
item->read_from(m);
|
item->read_from(*_msk);
|
||||||
_item.insert(item, i);
|
_item.insert(item, i);
|
||||||
|
|
||||||
TToken_string s(128); item->to_row(s);
|
TToken_string s(128); item->print_on(s);
|
||||||
a.insert(s, i);
|
a.insert(s, i);
|
||||||
|
dirty = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -921,19 +955,20 @@ bool TPrint_section::edit()
|
|||||||
{
|
{
|
||||||
_item.destroy(i, TRUE);
|
_item.destroy(i, TRUE);
|
||||||
a.destroy(i);
|
a.destroy(i);
|
||||||
|
dirty = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (k != K_ESC);
|
} while (k != K_ESC);
|
||||||
|
|
||||||
return dirty;
|
return dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TPrint_section::print_on(ostream& out) const
|
void TPrint_section::print_on(ostream& out) const
|
||||||
{
|
{
|
||||||
out << _height << endl;
|
out << ' ' << _height << endl;
|
||||||
for(word i = 0; i < fields(); i++)
|
for(word i = 0; i < fields(); i++)
|
||||||
out << field(i);
|
out << field(i);
|
||||||
}
|
}
|
||||||
@ -952,23 +987,14 @@ bool TForm::parse_use(TScanner& scanner)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
tab = scanner.pop();
|
tab = scanner.pop();
|
||||||
if (strlen(tab) > 4)
|
|
||||||
return error_box("'%s' non e' una tabella valida: %d", tab);
|
|
||||||
_relation = new TRelation(tab);
|
_relation = new TRelation(tab);
|
||||||
}
|
}
|
||||||
|
|
||||||
int key = 1;
|
int key = 1;
|
||||||
if (scanner.popkey() == "KE")
|
if (scanner.popkey() == "KE")
|
||||||
{
|
|
||||||
key = scanner.integer();
|
key = scanner.integer();
|
||||||
if (key < 1)
|
else
|
||||||
{
|
scanner.push();
|
||||||
error_box("Chiave non valida '%s': uso 1",
|
|
||||||
(const char*)scanner.token());
|
|
||||||
key = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else scanner.push();
|
|
||||||
|
|
||||||
_cursor = new TCursor(_relation, "", key);
|
_cursor = new TCursor(_relation, "", key);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -977,7 +1003,7 @@ bool TForm::parse_use(TScanner& scanner)
|
|||||||
|
|
||||||
bool TForm::parse_join(TScanner& scanner)
|
bool TForm::parse_join(TScanner& scanner)
|
||||||
{
|
{
|
||||||
TString j(scanner.pop()); // File or table
|
TString16 j(scanner.pop()); // File or table
|
||||||
|
|
||||||
int to = 0;
|
int to = 0;
|
||||||
if (scanner.popkey() == "TO") // TO keyword
|
if (scanner.popkey() == "TO") // TO keyword
|
||||||
@ -1020,13 +1046,16 @@ bool TForm::parse_join(TScanner& scanner)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TPrint_section& TForm::page2pos(const TArray& s, word p) const
|
TPrint_section& TForm::section(char s, word p)
|
||||||
{
|
{
|
||||||
pagetype pos = odd_page;
|
pagetype pos = odd_page;
|
||||||
if (p == 0 && s.objptr(last_page)) pos = last_page;
|
if (p == 0 && exist(s, last_page)) pos = last_page;
|
||||||
if (p == 1 && s.objptr(first_page)) pos = first_page;
|
if (p == 1 && exist(s, first_page)) pos = first_page;
|
||||||
if (pos == 0 && (p & 0x1) == 0 && s.objptr(even_page)) pos = even_page;
|
if (pos == 0 && (p & 0x1) == 0 && exist(s, even_page)) pos = even_page;
|
||||||
return (TPrint_section&)s[pos];
|
|
||||||
|
TPrint_section* sec = exist(s, pos);
|
||||||
|
CHECKD(sec, "Can't find section for page ", p);
|
||||||
|
return *sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
word TForm::set_header(word p, bool u)
|
word TForm::set_header(word p, bool u)
|
||||||
@ -1034,10 +1063,14 @@ word TForm::set_header(word p, bool u)
|
|||||||
TPrinter& printer = main_app().printer();
|
TPrinter& printer = main_app().printer();
|
||||||
printer.resetheader();
|
printer.resetheader();
|
||||||
|
|
||||||
TPrint_section& head = page2pos(_head, p);
|
TPrint_section& head = section('H', p);
|
||||||
|
|
||||||
if (u) head.update();
|
if (u) head.update();
|
||||||
else head.reset();
|
else
|
||||||
|
{
|
||||||
|
head.reset();
|
||||||
|
printer.headerlen(head.height());
|
||||||
|
}
|
||||||
|
|
||||||
for (word j = 0; j < head.height(); j++)
|
for (word j = 0; j < head.height(); j++)
|
||||||
printer.setheaderline(j, head.row(j));
|
printer.setheaderline(j, head.row(j));
|
||||||
@ -1047,7 +1080,7 @@ word TForm::set_header(word p, bool u)
|
|||||||
|
|
||||||
word TForm::set_body(word p, bool u)
|
word TForm::set_body(word p, bool u)
|
||||||
{
|
{
|
||||||
TPrint_section& body = page2pos(_body, p);
|
TPrint_section& body = section('B', p);
|
||||||
|
|
||||||
if (u) body.update();
|
if (u) body.update();
|
||||||
else body.reset();
|
else body.reset();
|
||||||
@ -1067,10 +1100,14 @@ word TForm::set_footer(word p, bool u)
|
|||||||
TPrinter& printer = main_app().printer();
|
TPrinter& printer = main_app().printer();
|
||||||
printer.resetfooter();
|
printer.resetfooter();
|
||||||
|
|
||||||
TPrint_section& foot = page2pos(_foot, p);
|
TPrint_section& foot = section('F', p);
|
||||||
|
|
||||||
if (u) foot.update();
|
if (u) foot.update();
|
||||||
else foot.reset();
|
else
|
||||||
|
{
|
||||||
|
foot.reset();
|
||||||
|
printer.footerlen(foot.height());
|
||||||
|
}
|
||||||
|
|
||||||
for (word j = 0; j < foot.height(); j++)
|
for (word j = 0; j < foot.height(); j++)
|
||||||
printer.setfooterline(j, foot.row(j));
|
printer.setfooterline(j, foot.row(j));
|
||||||
@ -1110,13 +1147,13 @@ long TForm::records() const
|
|||||||
|
|
||||||
bool TForm::print(long from, long to)
|
bool TForm::print(long from, long to)
|
||||||
{
|
{
|
||||||
CHECK(form == NULL, "Can't print two forms");
|
_form = this; // setta il form corrente
|
||||||
_form = this;
|
|
||||||
_lastpage = FALSE;
|
_lastpage = FALSE;
|
||||||
|
|
||||||
TPrinter& printer = main_app().printer();
|
TPrinter& printer = main_app().printer();
|
||||||
printer.setheaderhandler(header_handler);
|
printer.setheaderhandler(header_handler);
|
||||||
printer.setfooterhandler(footer_handler);
|
printer.setfooterhandler(footer_handler);
|
||||||
|
printer.formlen(height());
|
||||||
|
|
||||||
const bool was_open = printer.isopen();
|
const bool was_open = printer.isopen();
|
||||||
|
|
||||||
@ -1141,7 +1178,7 @@ bool TForm::print(long from, long to)
|
|||||||
|
|
||||||
if (i > records())
|
if (i > records())
|
||||||
{
|
{
|
||||||
if (_head.objptr(last_page) || _body.objptr(last_page) || _foot.objptr(last_page))
|
if (exist('H', last_page) || exist('B', last_page) || exist('F', last_page))
|
||||||
{
|
{
|
||||||
_lastpage = TRUE;
|
_lastpage = TRUE;
|
||||||
set_header(0, TRUE);
|
set_header(0, TRUE);
|
||||||
@ -1153,17 +1190,22 @@ bool TForm::print(long from, long to)
|
|||||||
if (!was_open)
|
if (!was_open)
|
||||||
printer.close();
|
printer.close();
|
||||||
|
|
||||||
_form = NULL;
|
_form = NULL; // resetta form
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TForm::print_section(ostream& out, const TArray& s, const char* name) const
|
void TForm::print_section(ostream& out, char s) const
|
||||||
{
|
{
|
||||||
for (pagetype t = odd_page; t <= last_page; t = pagetype(t+1)) if (s.objptr(t))
|
for (pagetype t = odd_page; t <= last_page; t = pagetype(t+1))
|
||||||
{
|
{
|
||||||
out << "SECTION " << name << ' ' << int(t);
|
const TPrint_section* sec = ((TForm*)this)->exist(s, t);
|
||||||
out << s[t];
|
if (sec)
|
||||||
out << "END\n" << endl;
|
{
|
||||||
|
const char* name = s == 'H' ? "HEADER" : (s == 'F' ? "FOOTER" : "BODY");
|
||||||
|
out << "SECTION " << name << ' ' << int(t);
|
||||||
|
out << *sec;
|
||||||
|
out << "END\n" << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1172,14 +1214,15 @@ void TForm::print_on(ostream& out) const
|
|||||||
if (relation())
|
if (relation())
|
||||||
out << *relation() << endl;
|
out << *relation() << endl;
|
||||||
|
|
||||||
print_section(out, _head, "HEADER");
|
print_section(out, 'H');
|
||||||
print_section(out, _body, "BODY");
|
print_section(out, 'B');
|
||||||
print_section(out, _foot, "FOOTER");
|
print_section(out, 'F');
|
||||||
|
|
||||||
out << "END" << endl;
|
out << "END" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
TPrint_section& TForm::section(char s, pagetype t)
|
|
||||||
|
TPrint_section* TForm::exist(char s, pagetype t, bool create)
|
||||||
{
|
{
|
||||||
TArray* a = NULL;
|
TArray* a = NULL;
|
||||||
switch (s)
|
switch (s)
|
||||||
@ -1193,33 +1236,29 @@ TPrint_section& TForm::section(char s, pagetype t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TPrint_section* sec = (TPrint_section*)a->objptr(t);
|
TPrint_section* sec = (TPrint_section*)a->objptr(t);
|
||||||
if (sec == NULL) a->add(sec = new TPrint_section(this));
|
if (sec == NULL && create)
|
||||||
return (TPrint_section&)*sec;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool TForm::edit(char s, pagetype t)
|
|
||||||
{
|
|
||||||
bool dirty = FALSE;
|
|
||||||
|
|
||||||
section(s, t).edit();
|
|
||||||
|
|
||||||
if (dirty && yesno_box("Salvare le modifiche?"))
|
|
||||||
{
|
{
|
||||||
set_cursor(TASK_WIN, CURSOR_WAIT);
|
sec = new TPrint_section(this);
|
||||||
TFilename bak(_name); bak.ext("bak");
|
a->add(sec, t);
|
||||||
rename(_name, bak);
|
}
|
||||||
ofstream out(_name);
|
|
||||||
print_on(out);
|
return sec;
|
||||||
set_cursor(TASK_WIN, CURSOR_ARROW);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return dirty;
|
word TForm::height()
|
||||||
|
{
|
||||||
|
word h = 0;
|
||||||
|
if (_head.items())
|
||||||
|
h += section('H', 1).height();
|
||||||
|
if (_body.items())
|
||||||
|
h += section('B', 1).height();
|
||||||
|
if (_foot.items())
|
||||||
|
h += section('F', 1).height();
|
||||||
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TForm::TForm(const char* name)
|
TForm::TForm(const char* name) : _name(name), _relation(NULL), _cursor(NULL)
|
||||||
: _name(name), _relation(NULL), _cursor(NULL)
|
|
||||||
{
|
{
|
||||||
const CURSOR oldcur = get_cursor(TASK_WIN);
|
const CURSOR oldcur = get_cursor(TASK_WIN);
|
||||||
set_cursor(TASK_WIN, CURSOR_WAIT);
|
set_cursor(TASK_WIN, CURSOR_WAIT);
|
||||||
@ -1234,14 +1273,16 @@ TForm::TForm(const char* name)
|
|||||||
while (ok && scanner.popkey() == "JO")
|
while (ok && scanner.popkey() == "JO")
|
||||||
ok = parse_join(scanner);
|
ok = parse_join(scanner);
|
||||||
}
|
}
|
||||||
scanner.push();
|
|
||||||
|
|
||||||
while (scanner.popkey() != "" && ok)
|
while (ok)
|
||||||
{
|
{
|
||||||
const char sec = scanner.key()[0];
|
scanner.popkey();
|
||||||
|
const char sec = toupper(scanner.key()[0]);
|
||||||
|
if (sec <= ' ' || sec == 'E')
|
||||||
|
break;
|
||||||
const pagetype p = (pagetype)scanner.integer();
|
const pagetype p = (pagetype)scanner.integer();
|
||||||
TPrint_section& ps = section(sec, p);
|
TPrint_section* ps = exist(sec, p, TRUE);
|
||||||
ok = ps.parse(scanner);
|
ok = ps->parse(scanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_cursor(TASK_WIN, oldcur);
|
set_cursor(TASK_WIN, oldcur);
|
||||||
|
|||||||
213
include/form.h
213
include/form.h
@ -1,99 +1,114 @@
|
|||||||
#ifndef __FORM_H
|
#ifndef __FORM_H
|
||||||
#define __FORM_H
|
#define __FORM_H
|
||||||
|
|
||||||
#ifndef __PRINTER_H
|
#ifndef __PRINTER_H
|
||||||
#include <printer.h>
|
#include <printer.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __SCANNER_H
|
#ifndef __SCANNER_H
|
||||||
#include <scanner.h>
|
#include <scanner.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __RELATION_H
|
#ifndef __MASK_H
|
||||||
class TRelation;
|
class TMask;
|
||||||
class TCursor;
|
#endif
|
||||||
#endif
|
|
||||||
|
#ifndef __RELATION_H
|
||||||
enum pagetype { odd_page, even_page, first_page, last_page };
|
class TRelation;
|
||||||
|
class TCursor;
|
||||||
class TForm;
|
#endif
|
||||||
class TForm_item;
|
|
||||||
|
enum pagetype { odd_page, even_page, first_page, last_page };
|
||||||
class TPrint_section : public TArray
|
|
||||||
{
|
class TForm;
|
||||||
word _height; // Altezza della sezione
|
class TForm_item;
|
||||||
|
|
||||||
TForm* _form; // Form cui appartiene alla sezione
|
class TPrint_section : public TArray
|
||||||
TArray _item; // Lista dei campi da stampare
|
{
|
||||||
|
static TMask* _msk;
|
||||||
protected:
|
|
||||||
virtual void print_on(ostream& out) const;
|
word _height; // Altezza della sezione
|
||||||
TForm_item* parse_item(const TString& key);
|
|
||||||
TForm_item* parse_item(TScanner& scanner);
|
TForm* _form; // Form cui appartiene alla sezione
|
||||||
|
TArray _item; // Lista dei campi da stampare
|
||||||
public:
|
|
||||||
TPrintrow& row(int num);
|
const TPrint_section& copy(const TPrint_section& ps);
|
||||||
TForm* form() const { return _form; }
|
|
||||||
|
protected:
|
||||||
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
virtual void print_on(ostream& out) const;
|
||||||
word fields() const { return _item.items(); }
|
TForm_item* parse_item(const TString& key);
|
||||||
word height() const { return _height; }
|
TForm_item* parse_item(TScanner& scanner);
|
||||||
|
|
||||||
void reset();
|
public:
|
||||||
bool update();
|
TPrintrow& row(int num);
|
||||||
bool parse(TScanner& scanner);
|
TForm* form() const { return _form; }
|
||||||
|
|
||||||
bool edit();
|
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
||||||
|
word fields() const { return _item.items(); }
|
||||||
TPrint_section(TForm* parent);
|
word height() const { return _height; }
|
||||||
virtual ~TPrint_section() {}
|
|
||||||
};
|
void reset();
|
||||||
|
bool update();
|
||||||
|
bool parse(TScanner& scanner);
|
||||||
class TForm : public TObject
|
|
||||||
{
|
bool edit(const char* title);
|
||||||
TFilename _name; // Profile name
|
|
||||||
|
const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }
|
||||||
TRelation* _relation; // Can be NULL
|
TPrint_section(TForm* parent);
|
||||||
TCursor* _cursor; // Can be NULL
|
TPrint_section(const TPrint_section& ps) { copy(ps); }
|
||||||
|
virtual ~TPrint_section();
|
||||||
TArray _head; // Headers
|
};
|
||||||
TArray _body; // Bodies
|
|
||||||
TArray _foot; // Footers
|
|
||||||
|
class TForm : public TObject
|
||||||
bool _lastpage;
|
{
|
||||||
|
friend class TForm_editor;
|
||||||
TPrint_section& page2pos(const TArray& a, word p) const;
|
|
||||||
|
TFilename _name; // Profile name
|
||||||
static void header_handler(TPrinter& p);
|
|
||||||
static void footer_handler(TPrinter& p);
|
TRelation* _relation; // Can be NULL
|
||||||
|
TCursor* _cursor; // Can be NULL
|
||||||
protected:
|
|
||||||
TPrint_section& section(char s, pagetype t); // H = Header, B = Body, F = Footer
|
TArray _head; // Headers
|
||||||
|
TArray _body; // Bodies
|
||||||
void print_section(ostream& out, const TArray& s, const char* name) const;
|
TArray _foot; // Footers
|
||||||
virtual void print_on(ostream& out) const;
|
|
||||||
|
bool _lastpage; // I am about to print the last page
|
||||||
bool parse_use(TScanner&);
|
|
||||||
bool parse_join(TScanner&);
|
TPrint_section* exist(char s, pagetype t, bool create = FALSE); // Can be NULL
|
||||||
|
|
||||||
word page(const TPrinter& p) const;
|
static void header_handler(TPrinter& p);
|
||||||
|
static void footer_handler(TPrinter& p);
|
||||||
virtual long records() const;
|
|
||||||
virtual word set_header(word p, bool u);
|
protected:
|
||||||
virtual word set_body(word p, bool u);
|
// H = Header, B = Body, F = Footer, R = Relation
|
||||||
virtual word set_footer(word p, bool u);
|
TPrint_section& section(char s = 'B', word page = 1);
|
||||||
|
word height(); // Height of first page
|
||||||
public:
|
|
||||||
bool print(long from = 0L, long to = -1L);
|
void print_section(ostream& out, char s) const;
|
||||||
|
virtual void print_on(ostream& out) const;
|
||||||
TRelation* relation() const { return _relation; }
|
bool edit_relation();
|
||||||
TCursor* cursor() const { return _cursor; }
|
|
||||||
|
bool parse_use(TScanner&);
|
||||||
bool edit(char section, pagetype t);
|
bool parse_join(TScanner&);
|
||||||
|
|
||||||
TForm(const char* form);
|
word page(const TPrinter& p) const;
|
||||||
~TForm();
|
|
||||||
};
|
virtual long records() const;
|
||||||
|
virtual word set_header(word p, bool u);
|
||||||
#endif
|
virtual word set_body(word p, bool u);
|
||||||
|
virtual word set_footer(word p, bool u);
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool print(long from = 0L, long to = -1L);
|
||||||
|
|
||||||
|
const TFilename& name() const { return _name; }
|
||||||
|
|
||||||
|
TRelation* relation() const { return _relation; }
|
||||||
|
TCursor* cursor() const { return _cursor; }
|
||||||
|
|
||||||
|
TForm(const char* form);
|
||||||
|
virtual ~TForm();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NOT_LINKED(i,f) CHECKS(i != NULL, "Record senza tracciato: impossibile eseguire ", f)
|
#define NOT_LINKED(i,f) CHECKS(i != NULL, "Record senza tracciato: impossibile eseguire ", f)
|
||||||
#define NOT_OPEN(f) CHECKS(_isamfile != NULL, "File chiuso, impossibile eseguire ", f)
|
#define NOT_OPEN(f) CHECKS(_isamfile != NULL, "File chiuso: ", f)
|
||||||
|
|
||||||
HIDDEN void UNKNOWN_FIELD(int num, const char* name)
|
HIDDEN void UNKNOWN_FIELD(int num, const char* name)
|
||||||
{ yesnofatal_box("Il campo '%s' non appartiene al file %d", name, num); }
|
{ yesnofatal_box("Il campo '%s' non appartiene al file %d", name, num); }
|
||||||
@ -38,7 +38,6 @@ HIDDEN void UNKNOWN_FIELD(int num, const char* name)
|
|||||||
HIDDEN bool __autoload = TRUE;
|
HIDDEN bool __autoload = TRUE;
|
||||||
|
|
||||||
void set_autoload_new_files(bool on)
|
void set_autoload_new_files(bool on)
|
||||||
|
|
||||||
{
|
{
|
||||||
__autoload = on;
|
__autoload = on;
|
||||||
}
|
}
|
||||||
@ -193,13 +192,23 @@ const char* TBaseisamfile::name() const
|
|||||||
|
|
||||||
const char* TBaseisamfile::filename() const
|
const char* TBaseisamfile::filename() const
|
||||||
{
|
{
|
||||||
NOT_OPEN(name());
|
if (_isamfile == NULL)
|
||||||
|
{
|
||||||
|
TDir d;
|
||||||
|
d.get(num());
|
||||||
|
return strcpy(__tmp_string, d.name());
|
||||||
|
}
|
||||||
return _isamfile->d->SysName;
|
return _isamfile->d->SysName;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* TBaseisamfile::description() const
|
const char* TBaseisamfile::description() const
|
||||||
{
|
{
|
||||||
NOT_OPEN(name());
|
if (_isamfile == NULL)
|
||||||
|
{
|
||||||
|
TDir d;
|
||||||
|
d.get(num());
|
||||||
|
return strcpy(__tmp_string, d.des());
|
||||||
|
}
|
||||||
return _isamfile->d->Des;
|
return _isamfile->d->Des;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
990
include/isam.h
990
include/isam.h
@ -1,497 +1,493 @@
|
|||||||
#ifndef __ISAM_H
|
#ifndef __ISAM_H
|
||||||
#define __ISAM_H
|
#define __ISAM_H
|
||||||
|
|
||||||
#ifndef __ARRAY_H
|
#ifndef __SYSFLD_H
|
||||||
#include <array.h>
|
#include <sysfld.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __SYSFLD_H
|
#ifndef FOXPRO
|
||||||
#include <sysfld.h>
|
|
||||||
#endif
|
#ifndef __REAL_H
|
||||||
|
#include <real.h>
|
||||||
#ifndef FOXPRO
|
#endif
|
||||||
|
|
||||||
#ifndef __REAL_H
|
#endif
|
||||||
#include <real.h>
|
|
||||||
#endif
|
#ifndef __DATE_H
|
||||||
|
#include <date.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __DATE_H
|
#ifndef __STRINGS_H
|
||||||
#include <date.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __STRINGS_H
|
#ifndef __FILES_H
|
||||||
#include <strings.h>
|
#include <files.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __FILES_H
|
#ifndef __LFFILES_H
|
||||||
#include <files.h>
|
#include <lffiles.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __LFFILES_H
|
|
||||||
#include <lffiles.h>
|
// @M
|
||||||
#endif
|
#define FIELDERR -1
|
||||||
|
|
||||||
|
const int MAX_KEYS = 8;
|
||||||
// @M
|
// @END
|
||||||
#define FIELDERR -1
|
|
||||||
|
// @C
|
||||||
const int MAX_KEYS = 8;
|
// Classe TRectype : public TObject
|
||||||
// @END
|
//
|
||||||
|
// Tipo record
|
||||||
// @C
|
//
|
||||||
// Classe TRectype : public TObject
|
// @END
|
||||||
//
|
|
||||||
// Tipo record
|
class TRectype : public TSortable
|
||||||
//
|
{
|
||||||
// @END
|
friend class TExtrectype;
|
||||||
|
friend class TRecfield;
|
||||||
class TRectype : public TSortable
|
friend class TBaseisamfile;
|
||||||
{
|
friend class TLocalisamfile;
|
||||||
friend class TExtrectype;
|
friend class TIsamtempfile;
|
||||||
friend class TRecfield;
|
|
||||||
friend class TBaseisamfile;
|
// DPRIV
|
||||||
friend class TLocalisamfile;
|
char* _rec; // Puntatore a inizio record
|
||||||
friend class TIsamtempfile;
|
int _logicnum; // Numero logico
|
||||||
|
int _length; // Lunghezza
|
||||||
// DPRIV
|
isdef* _i; // Puntatore al file isam
|
||||||
char* _rec; // Puntatore a inizio record
|
bool _isempty; // Se il record e' vuoto
|
||||||
int _logicnum; // Numero logico
|
char _tab[5]; // identificatore della tabella
|
||||||
int _length; // Lunghezza
|
TRecfield * _cod; // campo "COD" della tabella
|
||||||
isdef* _i; // Puntatore al file isam
|
// @END
|
||||||
bool _isempty; // Se il record e' vuoto
|
|
||||||
char _tab[5]; // identificatore della tabella
|
protected:
|
||||||
TRecfield * _cod; // campo "COD" della tabella
|
// FPROT
|
||||||
// @END
|
const char* start(int nf) const;
|
||||||
|
void setempty(bool val) { _isempty = val;} // Rende vero is_empty
|
||||||
protected:
|
virtual TObject* dup() const; // Duplica record
|
||||||
// FPROT
|
virtual int compare(const TSortable& s) const;
|
||||||
const char* start(int nf) const;
|
// @END
|
||||||
void setempty(bool val) { _isempty = val;} // Rende vero is_empty
|
|
||||||
virtual TObject* dup() const; // Duplica record
|
public:
|
||||||
virtual int compare(const TSortable& s) const;
|
// FPUB
|
||||||
// @END
|
int items() const;
|
||||||
|
void setdirty() { setempty(FALSE); }
|
||||||
public:
|
void settab(const char *tab);
|
||||||
// FPUB
|
char* string() const { return _rec;} // Ritorna il puntatore all'inizio. NON dovrebbe essere usata!
|
||||||
int items() const;
|
|
||||||
void setdirty() { setempty(FALSE); }
|
void discard() { *_rec = char(_deleted);} // Setta il flag di cancellazione
|
||||||
void settab(const char *tab);
|
void recall() { *_rec = char(_valid);} // Ripristina il flag di cancellazione
|
||||||
char* string() const { return _rec;} // Ritorna il puntatore all'inizio. NON dovrebbe essere usata!
|
bool isdeleted() const { return *_rec == _deleted;} // Chiede se e' cancellato
|
||||||
|
int len() const { return _length;} // Ritorna la lunghezza
|
||||||
void discard() { *_rec = char(_deleted);} // Setta il flag di cancellazione
|
TFieldtypes type(const char* fieldname) const; // Ritorna il tipo del campo
|
||||||
void recall() { *_rec = char(_valid);} // Ripristina il flag di cancellazione
|
int length(const char* fieldname) const; // Ritorna lunghezza campo
|
||||||
bool isdeleted() const { return *_rec == _deleted;} // Chiede se e' cancellato
|
int ndec(const char* fieldname) const; // Ritorna numero di decimali
|
||||||
int len() const { return _length;} // Ritorna la lunghezza
|
bool exist(const char* fieldname) const; // Ritorna l'esistenza del campo
|
||||||
TFieldtypes type(const char* fieldname) const; // Ritorna il tipo del campo
|
const char* fieldname(int i) const; // Ritorna il nome del campo i
|
||||||
int length(const char* fieldname) const; // Ritorna lunghezza campo
|
|
||||||
int ndec(const char* fieldname) const; // Ritorna numero di decimali
|
// @DES Get tipizzata. Ritorna il contenuto del campo nei vari tipi
|
||||||
bool exist(const char* fieldname) const; // Ritorna l'esistenza del campo
|
// @FPUB
|
||||||
const char* fieldname(int i) const; // Ritorna il nome del campo i
|
#ifndef FOXPRO
|
||||||
|
int get_int(const char* fieldname) const ;
|
||||||
// @DES Get tipizzata. Ritorna il contenuto del campo nei vari tipi
|
long get_long(const char* fieldname) const ;
|
||||||
// @FPUB
|
word get_word(const char* fieldname) const ;
|
||||||
#ifndef FOXPRO
|
char get_char(const char* fieldname) const ;
|
||||||
int get_int(const char* fieldname) const ;
|
bool get_bool(const char* fieldname) const ;
|
||||||
long get_long(const char* fieldname) const ;
|
real get_real(const char* fieldname) const ;
|
||||||
word get_word(const char* fieldname) const ;
|
#endif
|
||||||
char get_char(const char* fieldname) const ;
|
TDate get_date(const char* fieldname) const ;
|
||||||
bool get_bool(const char* fieldname) const ;
|
|
||||||
real get_real(const char* fieldname) const ;
|
// @DES Get non tipizzata. Il campo e' ritornato come TString&
|
||||||
#endif
|
// @FPUB
|
||||||
TDate get_date(const char* fieldname) const ;
|
const TString& get(const char* fieldname) const ;
|
||||||
|
|
||||||
// @DES Get non tipizzata. Il campo e' ritornato come TString&
|
// @DES Put tipizzata
|
||||||
// @FPUB
|
// @FPUB
|
||||||
const TString& get(const char* fieldname) const ;
|
|
||||||
|
#ifndef FOXPRO
|
||||||
// @DES Put tipizzata
|
void put(const char* fieldname, int val);
|
||||||
// @FPUB
|
void put(const char* fieldname, long val);
|
||||||
|
void put(const char* fieldname, word val);
|
||||||
#ifndef FOXPRO
|
void put(const char* fieldname, const TDate& val);
|
||||||
void put(const char* fieldname, int val);
|
void put(const char* fieldname, char val);
|
||||||
void put(const char* fieldname, long val);
|
void put(const char* fieldname, bool val);
|
||||||
void put(const char* fieldname, word val);
|
void put(const char* fieldname, const real& val);
|
||||||
void put(const char* fieldname, const TDate& val);
|
#endif
|
||||||
void put(const char* fieldname, char val);
|
|
||||||
void put(const char* fieldname, bool val);
|
// @DES Put NON tipizzata
|
||||||
void put(const char* fieldname, const real& val);
|
// @FPUB
|
||||||
#endif
|
void put(const char* fieldname, const char* val);
|
||||||
|
// void put(const char* fieldname, TString& val);
|
||||||
// @DES Put NON tipizzata
|
|
||||||
// @FPUB
|
void zero(const char * fieldname); // Vuota campo puntato da fieldname
|
||||||
void put(const char* fieldname, const char* val);
|
void zero(); // Vuota tutto il record
|
||||||
// void put(const char* fieldname, TString& val);
|
void zero(char c); // Vuota tutto il record usando il carattere c
|
||||||
|
|
||||||
void zero(const char * fieldname); // Vuota campo puntato da fieldname
|
TRectype& operator =(const TRectype& rec); // assegnazione tra TRectype
|
||||||
void zero(); // Vuota tutto il record
|
TRectype& operator =(const char* rec); // assegnazione tra TRectype
|
||||||
void zero(char c); // Vuota tutto il record usando il carattere c
|
TRectype& operator =(const TBaseisamfile& f);
|
||||||
|
|
||||||
TRectype& operator =(const TRectype& rec); // assegnazione tra TRectype
|
const isdef* filehnd() const { return _i; } // Ritorna il file isam associato
|
||||||
TRectype& operator =(const char* rec); // assegnazione tra TRectype
|
int num() const { return _logicnum;} // Ritorna il numero logico
|
||||||
TRectype& operator =(const TBaseisamfile& f);
|
bool empty() const {return _isempty;} // Ritorna se e' vuoto
|
||||||
|
bool valid() const {return _rec[0] == 0;} // Ritorna se il record non e'cancellato
|
||||||
const isdef* filehnd() const { return _i; } // Ritorna il file isam associato
|
const char* key(int numkey = 1) const; // Ritorna l'espressione della chiave numero numkey
|
||||||
int num() const { return _logicnum;} // Ritorna il numero logico
|
bool ok() const { return _i != NULL;}
|
||||||
bool empty() const {return _isempty;} // Ritorna se e' vuoto
|
|
||||||
bool valid() const {return _rec[0] == 0;} // Ritorna se il record non e'cancellato
|
TRectype(int logicnum); // Costruisce un record staccato da un file. Bisogna poi chiamare linkfile(). Sarebbe meglio utilizzare una delle altre due
|
||||||
const char* key(int numkey = 1) const; // Ritorna l'espressione della chiave numero numkey
|
TRectype(const TBaseisamfile* i); // Costruisce record e lo associa al file isam i
|
||||||
bool ok() const { return _i != NULL;}
|
TRectype(const TRectype& r); // Costruisce il record a partire da r
|
||||||
|
|
||||||
TRectype(int logicnum); // Costruisce un record staccato da un file. Bisogna poi chiamare linkfile(). Sarebbe meglio utilizzare una delle altre due
|
virtual ~TRectype();
|
||||||
TRectype(const TBaseisamfile* i); // Costruisce record e lo associa al file isam i
|
};
|
||||||
TRectype(const TRectype& r); // Costruisce il record a partire da r
|
|
||||||
|
// @C
|
||||||
virtual ~TRectype();
|
// Classe TBaseisamfile : public TObject
|
||||||
};
|
//
|
||||||
|
// File isam di base
|
||||||
// @C
|
//
|
||||||
// Classe TBaseisamfile : public TObject
|
// @END
|
||||||
//
|
|
||||||
// File isam di base
|
class TBaseisamfile : public TObject
|
||||||
//
|
{
|
||||||
// @END
|
// @DPRIV
|
||||||
|
isdef* _isamfile; // Descrittore file isam
|
||||||
class TBaseisamfile : public TObject
|
int _logicnum; // Numero logico del record corrente
|
||||||
{
|
int _lasterr; // Ultimo errore
|
||||||
// @DPRIV
|
bool _delrec; // Per sapere se rimuovere il record alla fine
|
||||||
isdef* _isamfile; // Descrittore file isam
|
bool _delopenrec; // Per sapere se rimuovere il record alla fine dalla lista interna di record
|
||||||
int _logicnum; // Numero logico del record corrente
|
TRectype* _current; // Puntatore a record corrente
|
||||||
int _lasterr; // Ultimo errore
|
TFile _hf;
|
||||||
bool _delrec; // Per sapere se rimuovere il record alla fine
|
TFile _hfhd;
|
||||||
bool _delopenrec; // Per sapere se rimuovere il record alla fine dalla lista interna di record
|
bool _historicfile; // Vero se il file e' archivio storico
|
||||||
TRectype* _current; // Puntatore a record corrente
|
TRecnotype _lasthf;
|
||||||
TFile _hf;
|
TRecnotype _recno;
|
||||||
TFile _hfhd;
|
|
||||||
bool _historicfile; // Vero se il file e' archivio storico
|
friend class TRectype;
|
||||||
TRecnotype _lasthf;
|
friend class TLocalisamfile;
|
||||||
TRecnotype _recno;
|
friend class TIsamfile;
|
||||||
|
friend class TIsamtempfile;
|
||||||
friend class TRectype;
|
friend class TRecfield;
|
||||||
friend class TLocalisamfile;
|
// friend class TCursor;
|
||||||
friend class TIsamfile;
|
// @END
|
||||||
friend class TIsamtempfile;
|
// @FPRIV
|
||||||
friend class TRecfield;
|
// friend TRecnotype __buildcursor(TFilecursor* tic, TRecnotype rp);
|
||||||
// friend class TCursor;
|
// friend TRecnotype __filtercursor(TFilecursor* tic);
|
||||||
// @END
|
// friend bool __evalcondition(TBaseisamfile* i,TString& condition);
|
||||||
// @FPRIV
|
// friend void __readrec(TFilecursor* tic);
|
||||||
// friend TRecnotype __buildcursor(TFilecursor* tic, TRecnotype rp);
|
|
||||||
// friend TRecnotype __filtercursor(TFilecursor* tic);
|
int gethr(TRectype& rec, TDate& atdate);
|
||||||
// friend bool __evalcondition(TBaseisamfile* i,TString& condition);
|
int addhr(const TRectype& rec, TDate& atdate);
|
||||||
// friend void __readrec(TFilecursor* tic);
|
int rewhr(const TRectype& rec, TDate& atdate);
|
||||||
|
int delhr(const TRectype& rec, TDate& atdate);
|
||||||
int gethr(TRectype& rec, TDate& atdate);
|
|
||||||
int addhr(const TRectype& rec, TDate& atdate);
|
protected:
|
||||||
int rewhr(const TRectype& rec, TDate& atdate);
|
// @FPROT
|
||||||
int delhr(const TRectype& rec, TDate& atdate);
|
isdef** ptrfilehnd() const { return (isdef**) &_isamfile;}
|
||||||
|
void clearfilehnd() { _isamfile = NULL;}
|
||||||
protected:
|
|
||||||
// @FPROT
|
void recover();
|
||||||
isdef** ptrfilehnd() const { return (isdef**) &_isamfile;}
|
int _open(unsigned int mode = _manulock); // Apre isam file con lock
|
||||||
void clearfilehnd() { _isamfile = NULL;}
|
int _close();
|
||||||
|
const char* filename() const;
|
||||||
void recover();
|
|
||||||
int _open(unsigned int mode = _manulock); // Apre isam file con lock
|
public:
|
||||||
int _close();
|
// @FPUB
|
||||||
const char* filename() const;
|
void setkey(int nkey); // Attiva una chiave
|
||||||
|
int getkey() const; // Ritorna la chiave
|
||||||
public:
|
void setstatus(int status) { _lasterr = status; } // Setta _lasterr
|
||||||
// @FPUB
|
virtual int first(word lockop = _nolock);
|
||||||
void setkey(int nkey); // Attiva una chiave
|
virtual int last(word lockop = _nolock);
|
||||||
int getkey() const; // Ritorna la chiave
|
virtual int next(word lockop = _nolock);
|
||||||
void setstatus(int status) { _lasterr = status; } // Setta _lasterr
|
virtual int next(TDate& atdate);
|
||||||
virtual int first(word lockop = _nolock);
|
virtual int prev(word lockop = _nolock);
|
||||||
virtual int last(word lockop = _nolock);
|
virtual int prev(TDate& atdate);
|
||||||
virtual int next(word lockop = _nolock);
|
virtual int reread(word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
||||||
virtual int next(TDate& atdate);
|
virtual int reread(TRectype& rec, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
||||||
virtual int prev(word lockop = _nolock);
|
virtual int skip(TRecnotype nrec, word lockop = _nolock);
|
||||||
virtual int prev(TDate& atdate);
|
virtual int read(word op = _isequal, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
||||||
virtual int reread(word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
virtual int read(TRectype& rec, word op = _isequal, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
||||||
virtual int reread(TRectype& rec, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
virtual int readat(TRecnotype nrec, word lockop = _nolock);
|
||||||
virtual int skip(TRecnotype nrec, word lockop = _nolock);
|
virtual int readat(TRectype& rec, TRecnotype nrec, word lockop = _nolock);
|
||||||
virtual int read(word op = _isequal, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
virtual int write(TDate& atdate = (TDate&)botime);
|
||||||
virtual int read(TRectype& rec, word op = _isequal, word lockop = _nolock, TDate& atdate = (TDate&)botime);
|
virtual int write(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
||||||
virtual int readat(TRecnotype nrec, word lockop = _nolock);
|
virtual int rewrite(TDate& atdate = (TDate&)botime);
|
||||||
virtual int readat(TRectype& rec, TRecnotype nrec, word lockop = _nolock);
|
virtual int rewrite(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
||||||
virtual int write(TDate& atdate = (TDate&)botime);
|
virtual int rewriteat(TRecnotype nrec);
|
||||||
virtual int write(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
virtual int rewriteat(const TRectype& rec, TRecnotype nrec);
|
||||||
virtual int rewrite(TDate& atdate = (TDate&)botime);
|
virtual int remove(TDate& atdate = (TDate&)botime);
|
||||||
virtual int rewrite(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
virtual int remove(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
||||||
virtual int rewriteat(TRecnotype nrec);
|
virtual const char* name() const;
|
||||||
virtual int rewriteat(const TRectype& rec, TRecnotype nrec);
|
|
||||||
virtual int remove(TDate& atdate = (TDate&)botime);
|
TRecnotype recno() const { return _recno;}
|
||||||
virtual int remove(const TRectype& rec, TDate& atdate = (TDate&)botime);
|
int lock(); // Attiva lock di tutto il file
|
||||||
virtual const char* name() const;
|
int unlock(); // Disattiva lock di tutto il file
|
||||||
|
void indexon(); // Accende gli indici
|
||||||
TRecnotype recno() const { return _recno;}
|
void indexoff(); // Spegne gli indici
|
||||||
int lock(); // Attiva lock di tutto il file
|
int status() const { return _lasterr; } // Ritorna _lasterr
|
||||||
int unlock(); // Disattiva lock di tutto il file
|
TRectype& curr() const {return *_current;} // Ritorna puntatore a record corrente
|
||||||
void indexon(); // Accende gli indici
|
bool eof() const { return status() == _iseof || status() == _isemptyfile;} // Vero se siamo a fine file
|
||||||
void indexoff(); // Spegne gli indici
|
bool bof() const { return status() == _isbof || status() == _isemptyfile;} // Vero se siamo a inizio file
|
||||||
int status() const { return _lasterr; } // Ritorna _lasterr
|
bool good() const { return status() == NOERR;} // Vero se _lasterr non contiene codici d'errore
|
||||||
TRectype& curr() const {return *_current;} // Ritorna puntatore a record corrente
|
bool bad() const { return status() != NOERR;} // Vero se _lasterr contiene codici d'errore
|
||||||
bool eof() const { return status() == _iseof || status() == _isemptyfile;} // Vero se siamo a fine file
|
bool empty(); // Vero se il file e' vuoto
|
||||||
bool bof() const { return status() == _isbof || status() == _isemptyfile;} // Vero se siamo a inizio file
|
int num() const { return _logicnum;} // Ritorna il numero logico del record corrente
|
||||||
bool good() const { return status() == NOERR;} // Vero se _lasterr non contiene codici d'errore
|
const char* description() const;
|
||||||
bool bad() const { return status() != NOERR;} // Vero se _lasterr contiene codici d'errore
|
TRecnotype eod() const { return filehnd()->d->EOD;}
|
||||||
bool empty(); // Vero se il file e' vuoto
|
|
||||||
int num() const { return _logicnum;} // Ritorna il numero logico del record corrente
|
isdef* filehnd() const { return (isdef*) _isamfile;} // Ritorna l'handle del file isam nella tabella
|
||||||
const char* description() const;
|
|
||||||
TRecnotype eod() const { return filehnd()->d->EOD;}
|
long items() const; // n.o di records nel file
|
||||||
|
|
||||||
isdef* filehnd() const { return (isdef*) _isamfile;} // Ritorna l'handle del file isam nella tabella
|
// @DES Get tipizzata. Ritorna il contenuto del campo nei vari tipi
|
||||||
|
// @FPUB
|
||||||
long items() const; // n.o di records nel file
|
#ifndef FOXPRO
|
||||||
|
int get_int(const char* fieldname) const
|
||||||
// @DES Get tipizzata. Ritorna il contenuto del campo nei vari tipi
|
{ return curr().get_int(fieldname);}
|
||||||
// @FPUB
|
long get_long(const char* fieldname) const
|
||||||
#ifndef FOXPRO
|
{ return curr().get_long(fieldname);}
|
||||||
int get_int(const char* fieldname) const
|
word get_word(const char* fieldname) const
|
||||||
{ return curr().get_int(fieldname);}
|
{ return curr().get_word(fieldname);}
|
||||||
long get_long(const char* fieldname) const
|
char get_char(const char* fieldname) const
|
||||||
{ return curr().get_long(fieldname);}
|
{ return curr().get_char(fieldname);}
|
||||||
word get_word(const char* fieldname) const
|
bool get_bool(const char* fieldname) const
|
||||||
{ return curr().get_word(fieldname);}
|
{ return curr().get_bool(fieldname);}
|
||||||
char get_char(const char* fieldname) const
|
real get_real(const char* fieldname) const
|
||||||
{ return curr().get_char(fieldname);}
|
{ return curr().get_real(fieldname);}
|
||||||
bool get_bool(const char* fieldname) const
|
#endif
|
||||||
{ return curr().get_bool(fieldname);}
|
TDate get_date(const char* fieldname) const
|
||||||
real get_real(const char* fieldname) const
|
{ return curr().get_date(fieldname);}
|
||||||
{ return curr().get_real(fieldname);}
|
|
||||||
#endif
|
// @DES Get non tipizzata. Il campo e' ritornato come TString&
|
||||||
TDate get_date(const char* fieldname) const
|
// @FPUB
|
||||||
{ return curr().get_date(fieldname);}
|
const TString& get(const char* fieldname) const
|
||||||
|
{ return curr().get(fieldname);}
|
||||||
// @DES Get non tipizzata. Il campo e' ritornato come TString&
|
|
||||||
// @FPUB
|
// @DES Put NON tipizzata
|
||||||
const TString& get(const char* fieldname) const
|
// @FPUB
|
||||||
{ return curr().get(fieldname);}
|
#ifndef FOXPRO
|
||||||
|
void put(const char* fieldname, int val)
|
||||||
// @DES Put NON tipizzata
|
{ curr().put(fieldname, val);}
|
||||||
// @FPUB
|
void put(const char* fieldname, long val)
|
||||||
#ifndef FOXPRO
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, int val)
|
void put(const char* fieldname, word val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, long val)
|
void put(const char* fieldname, const TDate& val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, word val)
|
void put(const char* fieldname, char val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, const TDate& val)
|
void put(const char* fieldname, bool val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, char val)
|
void put(const char* fieldname, const real& val)
|
||||||
{ curr().put(fieldname, val);}
|
{ curr().put(fieldname, val);}
|
||||||
void put(const char* fieldname, bool val)
|
#endif
|
||||||
{ curr().put(fieldname, val);}
|
|
||||||
void put(const char* fieldname, const real& val)
|
// @DES Put NON tipizzata
|
||||||
{ curr().put(fieldname, val);}
|
// @FPUB
|
||||||
#endif
|
void put(const char* fieldname, const char* val)
|
||||||
|
{ curr().put(fieldname, val);}
|
||||||
// @DES Put NON tipizzata
|
|
||||||
// @FPUB
|
void zero(const char * fieldname) { curr().zero(fieldname);}
|
||||||
void put(const char* fieldname, const char* val)
|
void zero() { curr().zero();}
|
||||||
{ curr().put(fieldname, val);}
|
void zero(char c) { curr().zero(c);}
|
||||||
|
TRectype& operator =(const TRectype& rec) { return curr() = rec;}
|
||||||
void zero(const char * fieldname) { curr().zero(fieldname);}
|
|
||||||
void zero() { curr().zero();}
|
TBaseisamfile(int logicnum, bool linkrecinst = TRUE);
|
||||||
void zero(char c) { curr().zero(c);}
|
virtual ~TBaseisamfile();
|
||||||
TRectype& operator =(const TRectype& rec) { return curr() = rec;}
|
};
|
||||||
|
|
||||||
TBaseisamfile(int logicnum, bool linkrecinst = TRUE);
|
// @C
|
||||||
virtual ~TBaseisamfile();
|
// Classe TIsamfile : public TBaseisamfile
|
||||||
};
|
//
|
||||||
|
// File isam
|
||||||
// @C
|
//
|
||||||
// Classe TIsamfile : public TBaseisamfile
|
// @END
|
||||||
//
|
|
||||||
// File isam
|
class TIsamfile : public TBaseisamfile
|
||||||
//
|
{
|
||||||
// @END
|
public:
|
||||||
|
// @FPUB
|
||||||
class TIsamfile : public TBaseisamfile
|
int flags(bool updateeod = FALSE);
|
||||||
{
|
int open(unsigned int mode = _manulock) { return _open(mode);} // Apre isam file con lock
|
||||||
public:
|
int close() { return _close();}
|
||||||
// @FPUB
|
TIsamfile(int logicnum, bool linkrecinst = TRUE);
|
||||||
int flags(bool updateeod = FALSE);
|
virtual ~TIsamfile();
|
||||||
int open(unsigned int mode = _manulock) { return _open(mode);} // Apre isam file con lock
|
};
|
||||||
int close() { return _close();}
|
|
||||||
TIsamfile(int logicnum, bool linkrecinst = TRUE);
|
// @C
|
||||||
virtual ~TIsamfile();
|
// Classe TIsamtempfile : public TBaseisamfile
|
||||||
};
|
//
|
||||||
|
// File isam temporaneo
|
||||||
// @C
|
//
|
||||||
// Classe TIsamtempfile : public TBaseisamfile
|
// @END
|
||||||
//
|
|
||||||
// File isam temporaneo
|
class TIsamtempfile : public TBaseisamfile
|
||||||
//
|
{
|
||||||
// @END
|
public:
|
||||||
|
// @FPUB
|
||||||
class TIsamtempfile : public TBaseisamfile
|
int open(char* radix, bool create = TRUE, TRecnotype eod = 0,
|
||||||
{
|
TRecnotype eox = 100); // Apre il file. radix e' la radice del path del file, se create e' falso vuol dire che il file esiste gia', e allora eod dice quanti record ci sono; eox quanti bisogna aggiungerne
|
||||||
public:
|
|
||||||
// @FPUB
|
int close(bool flagdel = TRUE); // Chiude il file e se e' vero flagdel lo cancella
|
||||||
int open(char* radix, bool create = TRUE, TRecnotype eod = 0,
|
|
||||||
TRecnotype eox = 100); // Apre il file. radix e' la radice del path del file, se create e' falso vuol dire che il file esiste gia', e allora eod dice quanti record ci sono; eox quanti bisogna aggiungerne
|
TIsamtempfile(int logicnum, bool linkrecinst = FALSE);
|
||||||
|
virtual ~TIsamtempfile();
|
||||||
int close(bool flagdel = TRUE); // Chiude il file e se e' vero flagdel lo cancella
|
};
|
||||||
|
|
||||||
TIsamtempfile(int logicnum, bool linkrecinst = FALSE);
|
// @C
|
||||||
virtual ~TIsamtempfile();
|
// Classe TSystemisamfile : public TBaseisamfile
|
||||||
};
|
//
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// Classe TSystemisamfile : public TBaseisamfile
|
class TSystemisamfile : public TIsamfile
|
||||||
//
|
{
|
||||||
// @END
|
TArray _flds;
|
||||||
|
TArray _exps;
|
||||||
class TSystemisamfile : public TIsamfile
|
|
||||||
{
|
bool getlcf(long flev);
|
||||||
TArray _flds;
|
bool exec_convapp(long flev, const bool before);
|
||||||
TArray _exps;
|
void makelc(TRectype& rec);
|
||||||
|
|
||||||
bool getlcf(long flev);
|
public:
|
||||||
bool exec_convapp(long flev, const bool before);
|
// @FPUB
|
||||||
void makelc(TRectype& rec);
|
int build(TRecnotype eox); // Costruisce un file isam
|
||||||
|
int extend(TRecnotype eox); // Estende un file preesistente
|
||||||
public:
|
long size(TRecnotype eox); // Calcola lo spazio che il file occuperebbe se venisse esteso a eox
|
||||||
// @FPUB
|
int update(TTrec& newrec, bool vis = TRUE);
|
||||||
int build(TRecnotype eox); // Costruisce un file isam
|
|
||||||
int extend(TRecnotype eox); // Estende un file preesistente
|
int packfile(bool vis = TRUE); // Rimuove fisicamente i record cancellati
|
||||||
long size(TRecnotype eox); // Calcola lo spazio che il file occuperebbe se venisse esteso a eox
|
int packindex(bool vis = TRUE); // La stessa cosa sugli indici
|
||||||
int update(TTrec& newrec, bool vis = TRUE);
|
|
||||||
|
// @DES Importa un file ascii. from e' il nome del file da importare
|
||||||
int packfile(bool vis = TRUE); // Rimuove fisicamente i record cancellati
|
int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ;
|
||||||
int packindex(bool vis = TRUE); // La stessa cosa sugli indici
|
|
||||||
|
// @DES Esporta VERSO un file ascii.
|
||||||
// @DES Importa un file ascii. from e' il nome del file da importare
|
int dump(const char* to, int nkey = 1, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool withdeleted = FALSE);
|
||||||
int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ;
|
|
||||||
|
TSystemisamfile(int logicnum, bool linkrecinst = TRUE)
|
||||||
// @DES Esporta VERSO un file ascii.
|
: TIsamfile(logicnum, linkrecinst) {}
|
||||||
int dump(const char* to, int nkey = 1, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool withdeleted = FALSE);
|
virtual ~TSystemisamfile() {}
|
||||||
|
};
|
||||||
TSystemisamfile(int logicnum, bool linkrecinst = TRUE)
|
|
||||||
: TIsamfile(logicnum, linkrecinst) {}
|
// @C
|
||||||
virtual ~TSystemisamfile() {}
|
// Classe TLocalisamfile : public TBaseisamfile
|
||||||
};
|
//
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// Classe TLocalisamfile : public TBaseisamfile
|
class TLocalisamfile : public TBaseisamfile
|
||||||
//
|
{
|
||||||
// @END
|
// @DPRIV
|
||||||
|
bool _was_open; // Vero se il file e' stato aperto come Localisamfile
|
||||||
class TLocalisamfile : public TBaseisamfile
|
bool _isatab; // Vero se il file e' una tabella
|
||||||
{
|
|
||||||
// @DPRIV
|
public:
|
||||||
bool _was_open; // Vero se il file e' stato aperto come Localisamfile
|
// @FPUB
|
||||||
bool _isatab; // Vero se il file e' una tabella
|
virtual int operator +=(const TRecnotype npos); // Avanza npos record
|
||||||
|
virtual int operator -=(const TRecnotype npos); // Sposta indietro di npos
|
||||||
public:
|
virtual int operator ++(); // record successivo
|
||||||
// @FPUB
|
virtual int operator --(); // record precedente
|
||||||
virtual int operator +=(const TRecnotype npos); // Avanza npos record
|
bool tab() const { return _isatab;} // Ritorna vero se tabella
|
||||||
virtual int operator -=(const TRecnotype npos); // Sposta indietro di npos
|
void settab(bool fl = FALSE) { _isatab = fl;} // Setta il flag _isatab
|
||||||
virtual int operator ++(); // record successivo
|
|
||||||
virtual int operator --(); // record precedente
|
int open(unsigned int mode = _manulock);
|
||||||
bool tab() const { return _isatab;} // Ritorna vero se tabella
|
int close() ;
|
||||||
void settab(bool fl = FALSE) { _isatab = fl;} // Setta il flag _isatab
|
// Costruttore. linkrecinst dice se il file deve utilizzare un area record separata oppure la stessa.
|
||||||
|
TLocalisamfile(int logicnum, bool linkrecinst = TRUE);
|
||||||
int open(unsigned int mode = _manulock);
|
virtual ~TLocalisamfile();
|
||||||
int close() ;
|
};
|
||||||
// Costruttore. linkrecinst dice se il file deve utilizzare un area record separata oppure la stessa.
|
|
||||||
TLocalisamfile(int logicnum, bool linkrecinst = TRUE);
|
// @C
|
||||||
virtual ~TLocalisamfile();
|
// Classe TRec_array : public TArray
|
||||||
};
|
//
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// Classe TRec_array : public TArray
|
class TRec_array : public TArray
|
||||||
//
|
{
|
||||||
// @END
|
public:
|
||||||
|
// @FPUB
|
||||||
class TRec_array : public TArray
|
TRec_array(int dimension, TBaseisamfile& i);
|
||||||
{
|
};
|
||||||
public:
|
|
||||||
// @FPUB
|
// @C
|
||||||
TRec_array(int dimension, TBaseisamfile& i);
|
// Classe TRecfield : public TObject
|
||||||
};
|
//
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// Classe TRecfield : public TObject
|
class TRecfield : public TObject
|
||||||
//
|
{
|
||||||
// @END
|
// @DPRIV
|
||||||
|
char _name[12]; // Nome campo
|
||||||
class TRecfield : public TObject
|
TRectype* _rec; // Puntatore a inizio record
|
||||||
{
|
char* _p; // Puntatore a inizio campo
|
||||||
// @DPRIV
|
byte _len; // Lunghezza campo
|
||||||
char _name[12]; // Nome campo
|
byte _dec; // Numero di decimali
|
||||||
TRectype* _rec; // Puntatore a inizio record
|
byte _type; // Tipo del campo
|
||||||
char* _p; // Puntatore a inizio campo
|
// @END
|
||||||
byte _len; // Lunghezza campo
|
|
||||||
byte _dec; // Numero di decimali
|
// @FPRIV
|
||||||
byte _type; // Tipo del campo
|
void set(int from, int to);
|
||||||
// @END
|
|
||||||
|
public:
|
||||||
// @FPRIV
|
// @FPUB
|
||||||
void set(int from, int to);
|
// @DES Operatore di assegnazione (=) per i vari tipi
|
||||||
|
// @FPUB
|
||||||
public:
|
|
||||||
// @FPUB
|
int operator =(int i) ;
|
||||||
// @DES Operatore di assegnazione (=) per i vari tipi
|
long operator =(long l) ;
|
||||||
// @FPUB
|
const TDate& operator =(const TDate& d) ;
|
||||||
|
const char* operator =(const char* s) ;
|
||||||
int operator =(int i) ;
|
#ifndef FOXPRO
|
||||||
long operator =(long l) ;
|
const real& operator =(const real& r) ;
|
||||||
const TDate& operator =(const TDate& d) ;
|
#endif // FOXPRO
|
||||||
const char* operator =(const char* s) ;
|
|
||||||
#ifndef FOXPRO
|
// @DES Operatore di estrazione per i vari tipi
|
||||||
const real& operator =(const real& r) ;
|
// @FPUB
|
||||||
#endif // FOXPRO
|
operator int() const ;
|
||||||
|
operator long() const ;
|
||||||
// @DES Operatore di estrazione per i vari tipi
|
operator const char*() const ;
|
||||||
// @FPUB
|
operator TDate() const ;
|
||||||
operator int() const ;
|
#ifndef FOXPRO
|
||||||
operator long() const ;
|
operator const real() const ;
|
||||||
operator const char*() const ;
|
#endif // FOXPRO
|
||||||
operator TDate() const ;
|
|
||||||
#ifndef FOXPRO
|
|
||||||
operator const real() const ;
|
void setptr(TRecnotype r); // Scrive un campo packed. Sarebbe meglio non usare mai campi packed.
|
||||||
#endif // FOXPRO
|
TRecnotype ptr() const; // Legge un campo packed. Sarebbe meglio non usare mai campi packed.
|
||||||
|
|
||||||
|
const char* pos() const { return (const char*) _p;} // Ritorna un puntatore all'inizio del campo nel record. Dovrebbe essere protected!
|
||||||
void setptr(TRecnotype r); // Scrive un campo packed. Sarebbe meglio non usare mai campi packed.
|
int len() const { return (int) _len;} // Ritorna la lunghezza
|
||||||
TRecnotype ptr() const; // Legge un campo packed. Sarebbe meglio non usare mai campi packed.
|
int dec() const { return (int) _dec;} // Ritorna il numero di decimali
|
||||||
|
TFieldtypes type() const { return (TFieldtypes) _type;} // Ritorna il tipo del campo
|
||||||
const char* pos() const { return (const char*) _p;} // Ritorna un puntatore all'inizio del campo nel record. Dovrebbe essere protected!
|
TRectype& record() const { return *_rec;} // Ritorna puntatore a inizio record
|
||||||
int len() const { return (int) _len;} // Ritorna la lunghezza
|
|
||||||
int dec() const { return (int) _dec;} // Ritorna il numero di decimali
|
TRecfield(TRectype& rec, const char* name, int from = 0, int to = -1);
|
||||||
TFieldtypes type() const { return (TFieldtypes) _type;} // Ritorna il tipo del campo
|
};
|
||||||
TRectype& record() const { return *_rec;} // Ritorna puntatore a inizio record
|
|
||||||
|
// @C
|
||||||
TRecfield(TRectype& rec, const char* name, int from = 0, int to = -1);
|
// Classe TTransaction
|
||||||
};
|
//
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// Classe TTransaction
|
class TTransaction
|
||||||
//
|
{
|
||||||
// @END
|
public:
|
||||||
|
// @FPUB
|
||||||
class TTransaction
|
void begin();
|
||||||
{
|
void end(bool success = TRUE);
|
||||||
public:
|
void abort() { end(FALSE);}
|
||||||
// @FPUB
|
};
|
||||||
void begin();
|
|
||||||
void end(bool success = TRUE);
|
#ifdef __ISAM_CPP
|
||||||
void abort() { end(FALSE);}
|
#define extern
|
||||||
};
|
#endif
|
||||||
|
|
||||||
#ifdef __ISAM_CPP
|
// @DPUB
|
||||||
#define extern
|
extern TTransaction transaction;
|
||||||
#endif
|
extern TRectype** openrec;
|
||||||
|
// @END
|
||||||
// @DPUB
|
#undef extern
|
||||||
extern TTransaction transaction;
|
|
||||||
extern TRectype** openrec;
|
void set_autoload_new_files(bool on);
|
||||||
// @END
|
|
||||||
#undef extern
|
#endif // __ISAM_
|
||||||
|
|
||||||
void set_autoload_new_files(bool on);
|
|
||||||
|
|
||||||
#endif // __ISAM_
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// $Id: maskfld.cpp,v 1.63 1994-12-20 15:11:11 guy Exp $
|
// $Id: maskfld.cpp,v 1.64 1994-12-27 14:58:54 guy Exp $
|
||||||
#include <xvt.h>
|
#include <xvt.h>
|
||||||
|
|
||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
@ -6,6 +6,7 @@
|
|||||||
#include <execp.h>
|
#include <execp.h>
|
||||||
#include <mailbox.h>
|
#include <mailbox.h>
|
||||||
#include <mask.h>
|
#include <mask.h>
|
||||||
|
#include <prefix.h>
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <tabutil.h>
|
#include <tabutil.h>
|
||||||
@ -38,6 +39,7 @@ TMask_field::TField_Flags::TField_Flags()
|
|||||||
roman = exchange = FALSE;
|
roman = exchange = FALSE;
|
||||||
firm = ghost = FALSE;
|
firm = ghost = FALSE;
|
||||||
password = FALSE;
|
password = FALSE;
|
||||||
|
trim = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Certified 100%
|
// Certified 100%
|
||||||
@ -47,6 +49,9 @@ char TMask_field::TField_Flags::update(const char* s)
|
|||||||
for (; *s; s++)
|
for (; *s; s++)
|
||||||
switch(toupper(*s))
|
switch(toupper(*s))
|
||||||
{
|
{
|
||||||
|
case ' ':
|
||||||
|
case '_':
|
||||||
|
trim = FALSE; break;
|
||||||
case '*':
|
case '*':
|
||||||
password = TRUE; break;
|
password = TRUE; break;
|
||||||
case 'A':
|
case 'A':
|
||||||
@ -471,7 +476,8 @@ TString& TMask_field::get() const
|
|||||||
else
|
else
|
||||||
gpark = get_field_data();
|
gpark = get_field_data();
|
||||||
|
|
||||||
return gpark.trim();
|
if (_flags.trim) gpark.trim();
|
||||||
|
return gpark;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -575,7 +581,7 @@ bool TMask_field::do_message(int num)
|
|||||||
KEY key = 0;
|
KEY key = 0;
|
||||||
msg = m;
|
msg = m;
|
||||||
value = msg.get();
|
value = msg.get();
|
||||||
value.trim();
|
// value.trim(); // TBR
|
||||||
const char* dlg = msg.get();
|
const char* dlg = msg.get();
|
||||||
|
|
||||||
int cmd = -1;
|
int cmd = -1;
|
||||||
@ -748,8 +754,20 @@ bool TMask_field::on_key(KEY key)
|
|||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
if (fexist("prassi.hlp"))
|
if (fexist("prassi.hlp"))
|
||||||
{
|
{
|
||||||
|
struct MULTIGUY
|
||||||
|
{
|
||||||
|
UINT mkSize;
|
||||||
|
BYTE mkKeylist;
|
||||||
|
char mkKeyphrase[16];
|
||||||
|
} mk;
|
||||||
|
|
||||||
|
TFilename topic(mask().source_file()); topic.ext("");
|
||||||
|
mk.mkSize = sizeof(MULTIGUY);
|
||||||
|
mk.mkKeylist = 'M';
|
||||||
|
strcpy(mk.mkKeyphrase, topic);
|
||||||
|
|
||||||
HWND hwnd = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
|
HWND hwnd = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
|
||||||
WinHelp(hwnd, "prassi.hlp", HELP_KEY, (DWORD)(const char*)mask().source_file());
|
WinHelp(hwnd, "prassi.hlp", HELP_MULTIKEY, (DWORD)&mk);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (_help.not_empty())
|
if (_help.not_empty())
|
||||||
@ -1435,29 +1453,8 @@ KEY TBrowse::run()
|
|||||||
do_input(TRUE);
|
do_input(TRUE);
|
||||||
_cursor->read(_isgteq);
|
_cursor->read(_isgteq);
|
||||||
|
|
||||||
TString80 caption;
|
|
||||||
const TLocalisamfile& f = _cursor->file();
|
const TLocalisamfile& f = _cursor->file();
|
||||||
if (f.tab())
|
TString80 caption(prefhndl->description(f.name()));
|
||||||
{
|
|
||||||
TFilename name("batb");
|
|
||||||
name << _cursor->file().name() << ".msk";
|
|
||||||
if (fexist(name.lower()))
|
|
||||||
{
|
|
||||||
TScanner m(name);
|
|
||||||
while (m.line().left(2) != "PA"); // Find PAGE
|
|
||||||
const int apicia = m.token().find('"')+1;
|
|
||||||
const int apicic = m.token().find('"', apicia);
|
|
||||||
caption = m.token().sub(apicia, apicic);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
caption = name.mid(4);
|
|
||||||
caption.cut(caption.find('.'));
|
|
||||||
caption.insert("Tabella ", 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
caption = f.description();
|
|
||||||
if (!isalnum(caption[0]))
|
if (!isalnum(caption[0]))
|
||||||
caption = "Selezione";
|
caption = "Selezione";
|
||||||
|
|
||||||
@ -1900,7 +1897,7 @@ const char* TEdit_field::get_field_data() const
|
|||||||
const char* TEdit_field::format(const char* d)
|
const char* TEdit_field::format(const char* d)
|
||||||
{
|
{
|
||||||
fpark = d;
|
fpark = d;
|
||||||
fpark.trim();
|
if (_flags.trim) fpark.trim();
|
||||||
|
|
||||||
if (fpark.not_empty())
|
if (fpark.not_empty())
|
||||||
{
|
{
|
||||||
@ -1944,7 +1941,8 @@ const char* TEdit_field::picture_data(const char* data, bool video)
|
|||||||
|
|
||||||
set_window_data(data);
|
set_window_data(data);
|
||||||
TMask_field::get_window_data();
|
TMask_field::get_window_data();
|
||||||
fpark.trim();
|
|
||||||
|
if (_flags.trim) fpark.trim();
|
||||||
return fpark;
|
return fpark;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2245,6 +2243,12 @@ void TButton_field::parse_head(TScanner& scanner)
|
|||||||
|
|
||||||
bool TButton_field::parse_item(TScanner& scanner)
|
bool TButton_field::parse_item(TScanner& scanner)
|
||||||
{
|
{
|
||||||
|
if (scanner.key() == "PI")
|
||||||
|
{
|
||||||
|
const int bmp = scanner.integer();
|
||||||
|
_prompt << '#' << bmp;
|
||||||
|
return bmp > 0;
|
||||||
|
}
|
||||||
return TMask_field::parse_item(scanner);
|
return TMask_field::parse_item(scanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2267,6 +2271,8 @@ void TButton_field::create(WINDOW parent)
|
|||||||
_virtual_key = _exit_key = K_ESC;
|
_virtual_key = _exit_key = K_ESC;
|
||||||
break;
|
break;
|
||||||
case DLG_DELREC:
|
case DLG_DELREC:
|
||||||
|
if (_prompt.empty())
|
||||||
|
_prompt = "Elimina";
|
||||||
_virtual_key = 'E';
|
_virtual_key = 'E';
|
||||||
_exit_key = K_DEL;
|
_exit_key = K_DEL;
|
||||||
break;
|
break;
|
||||||
@ -2301,8 +2307,9 @@ void TButton_field::create(WINDOW parent)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if XWTWS == WMWS
|
#if XWTWS == WMWS
|
||||||
|
const int diesis = _prompt.find('#');
|
||||||
|
if (diesis > 0) _prompt.cut(diesis);
|
||||||
_prompt.center_just(_width);
|
_prompt.center_just(_width);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
1135
include/maskfld.h
1135
include/maskfld.h
File diff suppressed because it is too large
Load Diff
@ -20,15 +20,13 @@ extern "C"
|
|||||||
// TSpreadsheet
|
// TSpreadsheet
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define K_PLUS '+'
|
|
||||||
|
|
||||||
class TSpreadsheet : public TWindow
|
class TSpreadsheet : public TWindow
|
||||||
{
|
{
|
||||||
friend class TSheet_field;
|
friend class TSheet_field;
|
||||||
|
|
||||||
enum { ITF_CID = 0, LIST_CID = 1 };
|
enum { ITF_CID = 0, LIST_CID = 1 };
|
||||||
|
|
||||||
TArray _str; // Array di TToken_strings
|
TString_array _str; // Array di TToken_strings
|
||||||
TBit_array _column_disabled;
|
TBit_array _column_disabled;
|
||||||
TArray _disabled; // Array di TBit_array
|
TArray _disabled; // Array di TBit_array
|
||||||
|
|
||||||
@ -70,11 +68,12 @@ protected:
|
|||||||
public:
|
public:
|
||||||
void update(int row);
|
void update(int row);
|
||||||
|
|
||||||
TToken_string& row(int n);
|
TToken_string& row(int n) { return _str.row(n); }
|
||||||
TArray& rows_array() const { return (TArray&)_str; }
|
int add(const TToken_string& s) { return _str.add(s); }
|
||||||
int add(TToken_string&);
|
int add(TToken_string* s) { return _str.add(s); }
|
||||||
int insert(int rec);
|
int insert(int rec);
|
||||||
bool destroy(int rec = -1);
|
bool destroy(int rec = -1);
|
||||||
|
TString_array& rows_array() { return _str; }
|
||||||
|
|
||||||
void set_focus_cell(int riga, int colonna);
|
void set_focus_cell(int riga, int colonna);
|
||||||
void activate(bool on);
|
void activate(bool on);
|
||||||
@ -381,7 +380,7 @@ int TSpreadsheet::insert(int rec)
|
|||||||
const bool ok = notify(rec, K_INS);
|
const bool ok = notify(rec, K_INS);
|
||||||
if (!ok) return -1;
|
if (!ok) return -1;
|
||||||
|
|
||||||
TToken_string s; // Empty row
|
TToken_string s(80); // Empty row
|
||||||
const int r = _str.insert(s, rec);
|
const int r = _str.insert(s, rec);
|
||||||
_disabled.insert(NULL, rec);
|
_disabled.insert(NULL, rec);
|
||||||
|
|
||||||
@ -505,7 +504,7 @@ break;
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
src = row(rec).get(col); // Set value for cell
|
src = row(rec).get(col); // Set value for cell
|
||||||
if (src && *src && (acqua == CLASS_REAL_FIELD || acqua == CLASS_DATE_FIELD))
|
if (src && *src && f->is_edit())
|
||||||
{
|
{
|
||||||
src = f->picture_data(src, FALSE); // Get formatted string
|
src = f->picture_data(src, FALSE); // Get formatted string
|
||||||
}
|
}
|
||||||
@ -525,11 +524,7 @@ break;
|
|||||||
if (src)
|
if (src)
|
||||||
{
|
{
|
||||||
strncpy(dst, src, len);
|
strncpy(dst, src, len);
|
||||||
if (isspace(*dst))
|
// if (isspace(*dst)) { TFixed_string d(dst); d.ltrim(); } TBR
|
||||||
{
|
|
||||||
TFixed_string d(dst);
|
|
||||||
d.ltrim();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*dst = '\0';
|
*dst = '\0';
|
||||||
@ -830,16 +825,6 @@ void TSpreadsheet::activate(bool on)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TSpreadsheet::add(TToken_string& t)
|
|
||||||
{
|
|
||||||
return _str.add(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
TToken_string& TSpreadsheet::row(int n)
|
|
||||||
{
|
|
||||||
return (TToken_string&)_str[n];
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
@ -868,8 +853,6 @@ public:
|
|||||||
TSpreadsheet(short x, short y, short dx, short dy, const char* maskname, int maskno,
|
TSpreadsheet(short x, short y, short dx, short dy, const char* maskname, int maskno,
|
||||||
const char* head, WINDOW parent, TSheet_field * o);
|
const char* head, WINDOW parent, TSheet_field * o);
|
||||||
|
|
||||||
TArray& rows_array() const { return data(); }
|
|
||||||
|
|
||||||
TMask& sheet_mask() { return _mask; }
|
TMask& sheet_mask() { return _mask; }
|
||||||
TMask& mask() const;
|
TMask& mask() const;
|
||||||
|
|
||||||
@ -1218,12 +1201,12 @@ bool TSheet_field::parse_item(TScanner& scanner)
|
|||||||
void TSheet_field::create(WINDOW parent)
|
void TSheet_field::create(WINDOW parent)
|
||||||
{
|
{
|
||||||
const TMask& m = mask();
|
const TMask& m = mask();
|
||||||
_sheet = new TSpreadsheet(_x, _y, _width, _size, m.source_file(), m.sheets(),
|
_sheet = new TSpreadsheet(_x, _y, _width, _size, m.source_file(),
|
||||||
_head, parent, this);
|
m.sheets(), _head, parent, this);
|
||||||
|
|
||||||
_win = _sheet->win();
|
_win = _sheet->win();
|
||||||
enable_window(_win, enabled());
|
|
||||||
show_window(_win, shown());
|
show_window(_win, shown());
|
||||||
|
if (!enabled()) disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1252,7 +1235,7 @@ TToken_string& TSheet_field::row(int n)
|
|||||||
if (n < 0 || n >= max)
|
if (n < 0 || n >= max)
|
||||||
{
|
{
|
||||||
if (n < 0) n = first_empty();
|
if (n < 0) n = first_empty();
|
||||||
if (n >= max) n = _sheet->add(TToken_string(80));
|
if (n >= max) n = _sheet->add(new TToken_string(80));
|
||||||
}
|
}
|
||||||
return _sheet->row(n);
|
return _sheet->row(n);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
#define VERSION 1.1
|
#define VERSION 1.2
|
||||||
|
|||||||
@ -9,8 +9,8 @@
|
|||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <array.h>
|
|
||||||
#include <extcdecl.h>
|
#include <extcdecl.h>
|
||||||
|
#include <isam.h>
|
||||||
#include <scanner.h>
|
#include <scanner.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
HIDDEN const char* const glockname = "xx";
|
HIDDEN const char* const glockname = "xx";
|
||||||
|
|
||||||
TPrefix::TPrefix()
|
TPrefix::TPrefix() : _filelevel(0), _items(0)
|
||||||
{
|
{
|
||||||
CHECK(prefhndl == NULL, "Can't create two prefix objects");
|
CHECK(prefhndl == NULL, "Can't create two prefix objects");
|
||||||
|
|
||||||
@ -177,6 +177,7 @@ void TPrefix::set(const char* name, bool force, TFilelock mode)
|
|||||||
|
|
||||||
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
CGetFile(LF_DIR, &d, _nolock, NORDIR);
|
||||||
_filelevel = d.Flags;
|
_filelevel = d.Flags;
|
||||||
|
_items = (int)d.EOD;
|
||||||
openall(FALSE, excl, max, comfiles);
|
openall(FALSE, excl, max, comfiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,6 +248,49 @@ bool TPrefix::set_codditta(long codditta, bool force)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* TPrefix::description(const char* cod) const
|
||||||
|
{
|
||||||
|
TString80 n(cod);
|
||||||
|
|
||||||
|
if (n[0] == '%')
|
||||||
|
n.ltrim(1);
|
||||||
|
|
||||||
|
const int logicnum = atoi(n);
|
||||||
|
if (logicnum == 0)
|
||||||
|
{
|
||||||
|
TFilename name("batb");
|
||||||
|
name << n << ".msk";
|
||||||
|
if (fexist(name.lower()))
|
||||||
|
{
|
||||||
|
TScanner m(name);
|
||||||
|
while (m.line().left(2) != "PA"); // Find PAGE
|
||||||
|
const int apicia = m.token().find('"')+1;
|
||||||
|
const int apicic = m.token().find('"', apicia);
|
||||||
|
n = m.token().sub(apicia, apicic);
|
||||||
|
}
|
||||||
|
else n.cut(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (logicnum > 0 && logicnum < items())
|
||||||
|
{
|
||||||
|
const TBaseisamfile f(logicnum);
|
||||||
|
n = f.description();
|
||||||
|
}
|
||||||
|
else n.cut(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return strcpy(__tmp_string, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TPrefix::description(int cod) const
|
||||||
|
{
|
||||||
|
TString16 n; n << cod;
|
||||||
|
return description(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Restituisce il nome di una directory dati
|
// Restituisce il nome di una directory dati
|
||||||
// Certified 90%
|
// Certified 90%
|
||||||
const char* firm2dir(long codditta)
|
const char* firm2dir(long codditta)
|
||||||
|
|||||||
136
include/prefix.h
136
include/prefix.h
@ -1,65 +1,71 @@
|
|||||||
#ifndef __PREFIX_H
|
#ifndef __PREFIX_H
|
||||||
#define __PREFIX_H
|
#define __PREFIX_H
|
||||||
|
|
||||||
#ifndef __EXTCTYPE_H
|
#ifndef __EXTCTYPE_H
|
||||||
#include <extctype.h>
|
#include <extctype.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __FILES_H
|
#ifndef __FILES_H
|
||||||
#include <files.h>
|
#include <files.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __STRINGS_H
|
#ifndef __STRINGS_H
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// class TPrefix : public TObject
|
// class TPrefix : public TObject
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TPrefix : public TObject
|
class TPrefix : public TObject
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
TString _prefix;
|
TString _prefix;
|
||||||
int* _dirfl;
|
int* _dirfl;
|
||||||
int* _recfl;
|
int* _recfl;
|
||||||
long _filelevel;
|
long _filelevel;
|
||||||
SecDef* _fdir;
|
int _items;
|
||||||
SecDef* _rdir;
|
|
||||||
|
SecDef* _fdir;
|
||||||
bool test(const char* s) const ;
|
SecDef* _rdir;
|
||||||
void put();
|
|
||||||
|
bool test(const char* s) const ;
|
||||||
public:
|
void put();
|
||||||
// @FPUB
|
|
||||||
void set(const char* name = NULL, bool force = FALSE, TFilelock mode = _manulock);
|
public:
|
||||||
bool exist(long codditta) const;
|
// @FPUB
|
||||||
bool test(long codditta) const;
|
void set(const char* name = NULL, bool force = FALSE, TFilelock mode = _manulock);
|
||||||
long get_codditta() const ;
|
bool exist(long codditta) const;
|
||||||
bool set_codditta(long codditta, bool force = FALSE);
|
bool test(long codditta) const;
|
||||||
const char* name() const { return _prefix;}
|
long get_codditta() const ;
|
||||||
long filelevel() const {return _filelevel;}
|
bool set_codditta(long codditta, bool force = FALSE);
|
||||||
|
const char* name() const { return _prefix;}
|
||||||
TPrefix();
|
long filelevel() const {return _filelevel;}
|
||||||
virtual ~TPrefix();
|
|
||||||
};
|
int items() const { return _items; }
|
||||||
|
const char* description(const char* cod) const;
|
||||||
|
const char* description(int cod) const;
|
||||||
const char* firm2dir(long codditta);
|
|
||||||
|
TPrefix();
|
||||||
#ifdef __PREFIX_CPP
|
virtual ~TPrefix();
|
||||||
#define extern
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
// @DPUB
|
const char* firm2dir(long codditta);
|
||||||
extern TPrefix* prefhndl
|
|
||||||
// @END
|
#ifdef __PREFIX_CPP
|
||||||
#ifdef __PREFIX_CPP
|
#define extern
|
||||||
= NULL ;
|
#endif
|
||||||
#undef extern
|
|
||||||
#else
|
// @DPUB
|
||||||
;
|
extern TPrefix* prefhndl
|
||||||
#endif
|
// @END
|
||||||
|
#ifdef __PREFIX_CPP
|
||||||
#endif // __PREFIX_H
|
= NULL ;
|
||||||
|
#undef extern
|
||||||
|
#else
|
||||||
|
;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // __PREFIX_H
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// $Id: relapp.cpp,v 1.40 1994-12-16 15:50:08 guy Exp $
|
// $Id: relapp.cpp,v 1.41 1994-12-27 14:59:08 guy Exp $
|
||||||
#include <mailbox.h>
|
#include <mailbox.h>
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
@ -465,9 +465,11 @@ bool TRelation_application::modify_mode()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TMask_field* TRelation_application::get_search_field() const
|
TMask_field* TRelation_application::get_search_field() const
|
||||||
{
|
{
|
||||||
if (_search_id > 0) return &_mask->field(_search_id);
|
if (_search_id > 0)
|
||||||
|
return &_mask->field(_search_id);
|
||||||
|
|
||||||
const TChiave& k = _maskeys->key(1);
|
const TChiave& k = _maskeys->key(1);
|
||||||
for (int i = 0; i < k.items(); i++)
|
for (int i = 0; i < k.items(); i++)
|
||||||
{
|
{
|
||||||
@ -624,6 +626,7 @@ bool TRelation_application::save(bool check_dirty)
|
|||||||
if (mode == MODE_INS)
|
if (mode == MODE_INS)
|
||||||
{
|
{
|
||||||
bool changed = TRUE;
|
bool changed = TRUE;
|
||||||
|
|
||||||
while (changed)
|
while (changed)
|
||||||
{
|
{
|
||||||
get_relation()->zero();
|
get_relation()->zero();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// $Id: relation.cpp,v 1.27 1994-12-20 15:11:20 guy Exp $
|
// $Id: relation.cpp,v 1.28 1994-12-27 14:59:10 guy Exp $
|
||||||
// relation.cpp
|
// relation.cpp
|
||||||
// fv 12/8/93
|
// fv 12/8/93
|
||||||
// relation class for isam files
|
// relation class for isam files
|
||||||
@ -9,6 +9,7 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <expr.h>
|
#include <expr.h>
|
||||||
#include <extcdecl.h>
|
#include <extcdecl.h>
|
||||||
|
#include <prefix.h>
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <tabutil.h>
|
#include <tabutil.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
@ -149,6 +150,7 @@ void TRelationdef::print_on(TToken_string& out) const
|
|||||||
|
|
||||||
out = "";
|
out = "";
|
||||||
print_name(out, f);
|
print_name(out, f);
|
||||||
|
out.add(prefhndl->description(f.name()));
|
||||||
out << '|';
|
out << '|';
|
||||||
|
|
||||||
if (_numto > 0)
|
if (_numto > 0)
|
||||||
@ -161,7 +163,8 @@ void TRelationdef::print_on(TToken_string& out) const
|
|||||||
const TLocalisamfile& t = _rel->file(_numto);
|
const TLocalisamfile& t = _rel->file(_numto);
|
||||||
print_name(out, t);
|
print_name(out, t);
|
||||||
}
|
}
|
||||||
}
|
} else out << ' ';
|
||||||
|
|
||||||
out.add(_key);
|
out.add(_key);
|
||||||
out.add(_alias);
|
out.add(_alias);
|
||||||
out << '|';
|
out << '|';
|
||||||
@ -213,14 +216,16 @@ void TRelation::print_on(TArray& a) const
|
|||||||
const TLocalisamfile& f = file();
|
const TLocalisamfile& f = file();
|
||||||
TToken_string s(128);
|
TToken_string s(128);
|
||||||
print_name(s, f);
|
print_name(s, f);
|
||||||
|
s.add(prefhndl->description(f.name()));
|
||||||
|
s.add("");
|
||||||
s.add(f.getkey());
|
s.add(f.getkey());
|
||||||
|
s.add(" | ");
|
||||||
a.destroy();
|
a.destroy();
|
||||||
a.add(s, 0);
|
a.add(s);
|
||||||
for (int i = 0; i < _reldefs.items(); i++)
|
for (int i = 0; i < _reldefs.items(); i++)
|
||||||
{
|
{
|
||||||
((TRelationdef&)_reldefs[i]).print_on(s);
|
((TRelationdef&)_reldefs[i]).print_on(s);
|
||||||
a.add(s, i+1);
|
a.add(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,10 @@
|
|||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSheet
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TSheet::TSheet(short x, short y, short dx, short dy,
|
TSheet::TSheet(short x, short y, short dx, short dy,
|
||||||
const char* title, const char* head, byte buttons,
|
const char* title, const char* head, byte buttons,
|
||||||
long first, WINDOW parent)
|
long first, WINDOW parent)
|
||||||
@ -146,13 +150,10 @@ void TSheet::set_first(long n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TSheet::set_row(const TToken_string& row, byte i)
|
void TSheet::set_row(const TToken_string& r, byte i)
|
||||||
{
|
{
|
||||||
if (i > 64) i = 0; else i++;
|
if (i > 64) i = 0; else i++;
|
||||||
if (_page.objptr(i) == NULL)
|
_page.add(r, i);
|
||||||
_page.add(row, i);
|
|
||||||
else
|
|
||||||
((TToken_string&)_page[i]) = row;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -202,7 +203,7 @@ void TSheet::handler(WINDOW win, EVENT* ep)
|
|||||||
select(nuo);
|
select(nuo);
|
||||||
if (ep->type == E_MOUSE_DBL)
|
if (ep->type == E_MOUSE_DBL)
|
||||||
dispatch_e_char(win, K_ENTER);
|
dispatch_e_char(win, K_ENTER);
|
||||||
else if (_checkable && _check_enabled && vec == nuo)
|
else if (_checkable && _check_enabled && vec == nuo)
|
||||||
{
|
{
|
||||||
_checked.not(nuo);
|
_checked.not(nuo);
|
||||||
force_update();
|
force_update();
|
||||||
@ -270,6 +271,8 @@ bool TSheet::on_key(KEY key)
|
|||||||
{
|
{
|
||||||
case K_ENTER:
|
case K_ENTER:
|
||||||
if (items() < 1) key = K_ESC;
|
if (items() < 1) key = K_ESC;
|
||||||
|
if (_disabled[selected()])
|
||||||
|
break;
|
||||||
case K_ESC:
|
case K_ESC:
|
||||||
stop_run(key);
|
stop_run(key);
|
||||||
case K_DEL:
|
case K_DEL:
|
||||||
@ -317,8 +320,11 @@ bool TSheet::on_key(KEY key)
|
|||||||
switch(key)
|
switch(key)
|
||||||
{
|
{
|
||||||
case K_SPACE:
|
case K_SPACE:
|
||||||
_checked.not(selected());
|
if (!_disabled[selected()])
|
||||||
force = TRUE;
|
{
|
||||||
|
_checked.not(selected());
|
||||||
|
force = TRUE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case K_F2:
|
case K_F2:
|
||||||
uncheck(-1);
|
uncheck(-1);
|
||||||
@ -337,6 +343,23 @@ bool TSheet::on_key(KEY key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TSheet::enable(long n, bool on)
|
||||||
|
{
|
||||||
|
if (n >= 0)
|
||||||
|
_disabled.set(n, !on);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (on)
|
||||||
|
_disabled.reset();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_disabled.set(items());
|
||||||
|
_disabled.set();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TSheet::select(long n)
|
void TSheet::select(long n)
|
||||||
{
|
{
|
||||||
if (n < 0) n = 0; else
|
if (n < 0) n = 0; else
|
||||||
@ -436,11 +459,15 @@ bool TSheet::update_row(long n)
|
|||||||
for (int j = 0; (s = t.get()) != NULL; x += _size[j++]+1)
|
for (int j = 0; (s = t.get()) != NULL; x += _size[j++]+1)
|
||||||
{
|
{
|
||||||
int x1 = x;
|
int x1 = x;
|
||||||
|
bool dis = FALSE;
|
||||||
if (n >= 0)
|
if (n >= 0)
|
||||||
{
|
{
|
||||||
if (_checkable && j == 0)
|
if (_checkable && j == 0)
|
||||||
s = _checked[n] ? "X" : " ";
|
s = _checked[n] ? "X" : " ";
|
||||||
|
|
||||||
|
dis = _disabled[n];
|
||||||
|
if (dis) set_color(COLOR_CYAN, COLOR_GRAY);
|
||||||
|
|
||||||
switch (_type[j])
|
switch (_type[j])
|
||||||
{
|
{
|
||||||
case 'R':
|
case 'R':
|
||||||
@ -457,6 +484,7 @@ bool TSheet::update_row(long n)
|
|||||||
x1 += (_size[j]-strlen(s)) >> 1; // Centra le testate
|
x1 += (_size[j]-strlen(s)) >> 1; // Centra le testate
|
||||||
|
|
||||||
stringat(x1, y, s);
|
stringat(x1, y, s);
|
||||||
|
if (dis) set_color(COLOR_BLACK, COLOR_GRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -578,7 +606,7 @@ long TArray_sheet::add(const TToken_string& s)
|
|||||||
|
|
||||||
long TArray_sheet::add(TToken_string* s)
|
long TArray_sheet::add(TToken_string* s)
|
||||||
{
|
{
|
||||||
const long n = _data.add(s, -1);
|
const long n = _data.add(s);
|
||||||
set_scroll_max(-1, n);
|
set_scroll_max(-1, n);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -721,7 +749,7 @@ void TBrowse_sheet::repos_buttons() const
|
|||||||
bool TBrowse_sheet::on_key(KEY k)
|
bool TBrowse_sheet::on_key(KEY k)
|
||||||
{
|
{
|
||||||
const WINDOW ctl = get_ctl_window(win(), 100);
|
const WINDOW ctl = get_ctl_window(win(), 100);
|
||||||
const bool alnum = k >= ' ' && k < 256;
|
const bool alnum = k >= ' ' && k < K_UP;
|
||||||
|
|
||||||
if (ctl != NULL_WIN && (alnum || k == K_BACKSPACE || k == K_DEL))
|
if (ctl != NULL_WIN && (alnum || k == K_BACKSPACE || k == K_DEL))
|
||||||
{
|
{
|
||||||
|
|||||||
330
include/sheet.h
330
include/sheet.h
@ -1,164 +1,166 @@
|
|||||||
#ifndef __SHEET_H
|
#ifndef __SHEET_H
|
||||||
#define __SHEET_H
|
#define __SHEET_H
|
||||||
|
|
||||||
#ifndef __ARRAY_H
|
#ifndef __STRINGS_H
|
||||||
#include <array.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __STRINGS_H
|
#ifndef __WINDOW_H
|
||||||
#include <strings.h>
|
#include <window.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __WINDOW_H
|
#ifndef __RELATION_H
|
||||||
#include <window.h>
|
class TCursor;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __RELATION_H
|
#ifndef __MASKFLD_H
|
||||||
class TCursor;
|
class TEdit_field;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __MASKFLD_H
|
|
||||||
class TEdit_field;
|
// @C
|
||||||
#endif
|
// class TSheet : public TScroll_window
|
||||||
|
// @END
|
||||||
// @C
|
|
||||||
// class TSheet : public TScroll_window
|
class TSheet : public TScroll_window
|
||||||
// @END
|
{
|
||||||
|
// @DPRIV
|
||||||
class TSheet : public TScroll_window
|
enum { MAX_BUT = 8, MAX_COL = 128 };
|
||||||
{
|
TString_array _page;
|
||||||
// @DPRIV
|
|
||||||
enum { MAX_BUT = 8, MAX_COL = 128 };
|
byte _columns;
|
||||||
TArray _page;
|
byte _size[MAX_COL], _type[MAX_COL];
|
||||||
|
long _curr, _last_update;
|
||||||
byte _columns;
|
|
||||||
byte _size[MAX_COL], _type[MAX_COL];
|
short _visible_rows;
|
||||||
long _curr, _last_update;
|
|
||||||
|
bool _checkable;
|
||||||
short _visible_rows;
|
bool _check_enabled;
|
||||||
|
TBit_array _checked, _disabled;
|
||||||
bool _checkable;
|
|
||||||
bool _check_enabled;
|
WINDOW _button[MAX_BUT];
|
||||||
TBit_array _checked;
|
KEY _key[MAX_BUT];
|
||||||
|
byte _buttonmask;
|
||||||
WINDOW _button[MAX_BUT];
|
|
||||||
KEY _key[MAX_BUT];
|
protected:
|
||||||
byte _buttonmask;
|
// @FPROT
|
||||||
|
bool head_on() const { return _columns > 1; }
|
||||||
protected:
|
bool buttons_on() const { return *_button != NULL_WIN; }
|
||||||
// @FPROT
|
short visible_rows() const { return _visible_rows; }
|
||||||
bool head_on() const { return _columns > 1; }
|
virtual short reserved_rows() const;
|
||||||
bool buttons_on() const { return *_button != NULL_WIN; }
|
void build_page(long first = -1);
|
||||||
short visible_rows() const { return _visible_rows; }
|
|
||||||
virtual short reserved_rows() const;
|
PNT log2dev(long x, long y) const;
|
||||||
void build_page(long first = -1);
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
|
virtual bool on_key(KEY);
|
||||||
PNT log2dev(long x, long y) const;
|
virtual void update();
|
||||||
virtual void handler(WINDOW win, EVENT* ep);
|
virtual void open();
|
||||||
virtual bool on_key(KEY);
|
|
||||||
virtual void update();
|
void set_first(long n);
|
||||||
virtual void open();
|
bool is_visible(long n) const { return n >= first() && n < first()+visible_rows(); }
|
||||||
|
|
||||||
void set_first(long n);
|
int width() const;
|
||||||
bool is_visible(long n) const { return n >= first() && n < first()+visible_rows(); }
|
int row_to_page(long n) const;
|
||||||
|
int row_to_win(long n) const;
|
||||||
int width() const;
|
|
||||||
int row_to_page(long n) const;
|
long first() const { return origin().y; }
|
||||||
int row_to_win(long n) const;
|
bool update_row(long n);
|
||||||
|
void invert_row(long n);
|
||||||
long first() const { return origin().y; }
|
|
||||||
bool update_row(long n);
|
void set_row(const TToken_string& row, byte n);
|
||||||
void invert_row(long n);
|
|
||||||
|
virtual void repos_buttons() const;
|
||||||
void set_row(const TToken_string& row, byte n);
|
|
||||||
|
virtual void page_build(long first, byte num) pure;
|
||||||
virtual void repos_buttons() const;
|
|
||||||
|
void print();
|
||||||
virtual void page_build(long first, byte num) pure;
|
public:
|
||||||
|
// @FPUB
|
||||||
void print();
|
TSheet(short x, short y, short dx, short dy,
|
||||||
public:
|
const char* title, const char* head, byte buttons = 0,
|
||||||
// @FPUB
|
long first = 0L, WINDOW parent = NULL_WIN);
|
||||||
TSheet(short x, short y, short dx, short dy,
|
void add_button(short id, const char* caption, KEY key = K_ESC);
|
||||||
const char* title, const char* head, byte buttons = 0,
|
|
||||||
long first = 0L, WINDOW parent = NULL_WIN);
|
virtual long items() const pure;
|
||||||
void add_button(short id, const char* caption, KEY key = K_ESC);
|
virtual TToken_string& row(long s = -1);
|
||||||
|
|
||||||
virtual long items() const pure;
|
long selected() const { return _curr; }
|
||||||
virtual TToken_string& row(long s = -1);
|
void select(long n);
|
||||||
|
|
||||||
long selected() const { return _curr; }
|
bool checked(long n) const { return _checked[n]; }
|
||||||
void select(long n);
|
void check(long n, bool on = TRUE);
|
||||||
|
void uncheck(long n) { check(n, FALSE); }
|
||||||
bool checked(long n) const { return _checked[n]; }
|
void enable_check(bool yn = TRUE) { _check_enabled = yn; }
|
||||||
void check(long n, bool on = TRUE);
|
void disable_check() { enable_check(FALSE); }
|
||||||
void uncheck(long n) { check(n, FALSE); }
|
|
||||||
void enable_check(bool yn = TRUE) { _check_enabled = yn; }
|
void enable(long n = -1, bool on = TRUE);
|
||||||
void disable_check() { enable_check(FALSE); }
|
void disable(long n = -1) { enable(n, FALSE); }
|
||||||
bool one_checked() const { return _checked.first_one() != -1; }
|
bool enabled(long n) const { return !_disabled[n]; }
|
||||||
long checked() const { return _checked.ones(); }
|
bool disabled(long n) const { return _disabled[n]; }
|
||||||
};
|
|
||||||
|
bool one_checked() const { return _checked.first_one() != -1; }
|
||||||
class TArray_sheet : public TSheet
|
long checked() const { return _checked.ones(); }
|
||||||
{
|
};
|
||||||
TArray _data;
|
|
||||||
|
class TArray_sheet : public TSheet
|
||||||
protected:
|
{
|
||||||
|
TString_array _data;
|
||||||
virtual void page_build(long first, byte num);
|
|
||||||
|
protected:
|
||||||
TArray& data() const { return (TArray&)_data; }
|
|
||||||
TToken_string& data(long n) const { return (TToken_string&)_data[(int)n]; }
|
virtual void page_build(long first, byte num);
|
||||||
|
TToken_string& data(long n) { return _data.row((int)n); }
|
||||||
public:
|
TString_array& rows_array() { return _data; }
|
||||||
TArray_sheet(short x, short y, short dx, short dy, const char* caption,
|
|
||||||
const char* head, byte buttons = 0, WINDOW parent = NULL_WIN);
|
public:
|
||||||
virtual long items() const { return _data.items(); }
|
TArray_sheet(short x, short y, short dx, short dy, const char* caption,
|
||||||
long add(const TToken_string& s);
|
const char* head, byte buttons = 0, WINDOW parent = NULL_WIN);
|
||||||
long add(TToken_string* s);
|
virtual long items() const { return _data.items(); }
|
||||||
long insert(const TToken_string& s, long n);
|
long add(const TToken_string& s);
|
||||||
virtual TToken_string& row(long s = -1) { return (s < 0) ? data(selected()) : data(s); }
|
long add(TToken_string* s);
|
||||||
bool destroy(int i = -1) { uncheck(-1); return _data.destroy(i, TRUE); }
|
long insert(const TToken_string& s, long n);
|
||||||
};
|
virtual TToken_string& row(long s = -1) { return (s < 0) ? data(selected()) : data(s); }
|
||||||
|
bool destroy(int i = -1) { uncheck(-1); return _data.destroy(i, TRUE); }
|
||||||
|
};
|
||||||
class TCursor_sheet : public TSheet
|
|
||||||
{
|
|
||||||
TArray _fields; // Array of TRecfield
|
class TCursor_sheet : public TSheet
|
||||||
long _records;
|
{
|
||||||
|
TArray _fields; // Array of TRecfield
|
||||||
protected:
|
long _records;
|
||||||
TCursor* _cursor;
|
|
||||||
|
protected:
|
||||||
virtual void page_build(long first, byte rows);
|
TCursor* _cursor;
|
||||||
|
|
||||||
public:
|
virtual void page_build(long first, byte rows);
|
||||||
TCursor_sheet(TCursor* cursor, const char* fields,
|
|
||||||
const char* title, const char* head, byte buttons = 0);
|
public:
|
||||||
virtual ~TCursor_sheet() {}
|
TCursor_sheet(TCursor* cursor, const char* fields,
|
||||||
virtual long items() const { return _records; }
|
const char* title, const char* head, byte buttons = 0);
|
||||||
virtual KEY run();
|
virtual ~TCursor_sheet() {}
|
||||||
};
|
virtual long items() const { return _records; }
|
||||||
|
virtual KEY run();
|
||||||
|
};
|
||||||
class TBrowse_sheet : public TCursor_sheet
|
|
||||||
{
|
|
||||||
TEdit_field* const _field;
|
class TBrowse_sheet : public TCursor_sheet
|
||||||
|
{
|
||||||
protected:
|
TEdit_field* const _field;
|
||||||
virtual void handler(WINDOW win, EVENT* ep);
|
|
||||||
virtual short reserved_rows() const;
|
protected:
|
||||||
virtual void repos_buttons() const;
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
virtual bool on_key(KEY k);
|
virtual short reserved_rows() const;
|
||||||
TEdit_field& field() { return *_field; }
|
virtual void repos_buttons() const;
|
||||||
|
virtual bool on_key(KEY k);
|
||||||
public:
|
TEdit_field& field() { return *_field; }
|
||||||
TBrowse_sheet(TCursor* cursor, const char* fields,
|
|
||||||
const char* title, const char* head, byte buttons,
|
public:
|
||||||
TEdit_field* f, TToken_string* siblings = NULL);
|
TBrowse_sheet(TCursor* cursor, const char* fields,
|
||||||
virtual ~TBrowse_sheet() {}
|
const char* title, const char* head, byte buttons,
|
||||||
virtual KEY run();
|
TEdit_field* f, TToken_string* siblings = NULL);
|
||||||
};
|
virtual ~TBrowse_sheet() {}
|
||||||
|
virtual KEY run();
|
||||||
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@ -1012,3 +1012,24 @@ void TParagraph_string::tokenize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TString_array
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int TString_array::add(const char* s, int n)
|
||||||
|
{
|
||||||
|
if (objptr(n) == NULL)
|
||||||
|
n = TArray::add(new TToken_string(s), n);
|
||||||
|
else row(n) = s;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TString_array::add(const TToken_string& s, int n)
|
||||||
|
{
|
||||||
|
if (objptr(n) == NULL)
|
||||||
|
n = TArray::add(s);
|
||||||
|
else
|
||||||
|
row(n) = s;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
@ -1,290 +1,306 @@
|
|||||||
#ifndef __STRINGS_H
|
#ifndef __STRINGS_H
|
||||||
#define __STRINGS_H
|
#define __STRINGS_H
|
||||||
|
|
||||||
#ifndef __STRING_H
|
#ifndef __STRING_H
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __OBJECT_H
|
#ifndef __ARRAY_H
|
||||||
#include <object.h>
|
#include <array.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TString : public TObject
|
// Classe TString : public TObject
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TString : public TObject
|
class TString : public TObject
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// @DPROT
|
// @DPROT
|
||||||
char* _str; // Puntatore alla stringa
|
char* _str; // Puntatore alla stringa
|
||||||
int _size; // Lunghezza
|
int _size; // Lunghezza
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
// @FPROT
|
// @FPROT
|
||||||
int make_room(int size); // Cerca spazio per altri size caratteri
|
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& set(const char*); // Inizializza con la stringa puntata da char* di lunghezza size
|
||||||
|
|
||||||
TString(char* str, int size) : _str(str), _size(size) {}
|
TString(char* str, int size) : _str(str), _size(size) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
virtual void resize(int size, bool cpy); // Ri/alloca la stringa
|
virtual void resize(int size, bool cpy); // Ri/alloca la stringa
|
||||||
|
|
||||||
TString();
|
TString();
|
||||||
TString(int size); // Default constructor for a string of given size
|
TString(int size); // Default constructor for a string of given size
|
||||||
TString(const char* s); // Costruttore a partire da una stringa s
|
TString(const char* s); // Costruttore a partire da una stringa s
|
||||||
TString(const TString& s); // Costruttore da un oggetto TString s
|
TString(const TString& s); // Costruttore da un oggetto TString s
|
||||||
virtual ~TString(); // Deallocates the string
|
virtual ~TString(); // Deallocates the string
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// @DES Methods derived from TObject
|
// @DES Methods derived from TObject
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// @FPUB
|
// @FPUB
|
||||||
virtual const char* class_name() const; // Ritorna il nome della classe
|
virtual const char* class_name() const; // Ritorna il nome della classe
|
||||||
virtual word class_id() const; // Ritorna l'identificatore della classe
|
virtual word class_id() const; // Ritorna l'identificatore della classe
|
||||||
virtual bool ok() const { return _str != NULL; }
|
virtual bool ok() const { return _str != NULL; }
|
||||||
virtual TObject* dup() const;
|
virtual TObject* dup() const;
|
||||||
virtual void print_on(ostream& out) const;
|
virtual void print_on(ostream& out) const;
|
||||||
virtual void read_from(istream& in);
|
virtual void read_from(istream& in);
|
||||||
virtual word hash() const; // Return hash value
|
virtual word hash() const; // Return hash value
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// @DES Query methods
|
// @DES Query methods
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// @FPUB
|
// @FPUB
|
||||||
operator const char*() const { return (const char*)_str; } // *(TString) -> _str
|
operator const char*() const { return (const char*)_str; } // *(TString) -> _str
|
||||||
char& operator[](int i) // TString[i] -> _str[i]
|
char& operator[](int i) // TString[i] -> _str[i]
|
||||||
{
|
{
|
||||||
CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i);
|
CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i);
|
||||||
return _str[i];
|
return _str[i];
|
||||||
}
|
}
|
||||||
char operator[](int i) const // TString[i] -> _str[i]
|
char operator[](int i) const // TString[i] -> _str[i]
|
||||||
{
|
{
|
||||||
CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i);
|
CHECKD(i >= 0 && i <= _size, "Bad string subscript: ", i);
|
||||||
return _str[i];
|
return _str[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
int size() const { return _size; }
|
int size() const { return _size; }
|
||||||
int len() const { return strlen(_str); }
|
int len() const { return strlen(_str); }
|
||||||
bool empty() const { return *_str == '\0'; }
|
bool empty() const { return *_str == '\0'; }
|
||||||
bool not_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(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
|
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& 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& 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& 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
|
const TString& right(int count) const; // Ritorna l'oggetto TString composto dai count caratteri da destra
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// @DES Modifying methods
|
// @DES Modifying methods
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// @FPUB
|
// @FPUB
|
||||||
|
|
||||||
TString& fill(char c, int n = -1); // Riempie con n caratteri c
|
TString& fill(char c, int n = -1); // Riempie con n caratteri c
|
||||||
TString& spaces(int n = -1) { return fill(' ', n); }
|
TString& spaces(int n = -1) { return fill(' ', n); }
|
||||||
TString& overwrite(const char* s, int pos = 0); // Sovrascrive la stringa s dalla posizione pos
|
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& 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(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& 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& 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& 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& trim(); // ltrim e rtrim
|
||||||
|
|
||||||
TString& right_just(int n = -1, char c = ' '); // Giustifica a destra
|
TString& right_just(int n = -1, char c = ' '); // Giustifica a destra
|
||||||
TString& center_just(int n = -1, char c = ' '); // Centra
|
TString& center_just(int n = -1, char c = ' '); // Centra
|
||||||
TString& left_just(int n = -1, char c = ' '); // Giustifica a sinistra
|
TString& left_just(int n = -1, char c = ' '); // Giustifica a sinistra
|
||||||
|
|
||||||
TString& picture(const char* pic, const char* s);
|
TString& picture(const char* pic, const char* s);
|
||||||
virtual TString& format(const char* fmt, ...);
|
virtual TString& format(const char* fmt, ...);
|
||||||
|
|
||||||
TString& cut(int n); // Inserisce un '\0' alla posizione n-esima.
|
TString& cut(int n); // Inserisce un '\0' alla posizione n-esima.
|
||||||
|
|
||||||
TString& upper(); // Mette la stringa in maiuscolo
|
TString& upper(); // Mette la stringa in maiuscolo
|
||||||
TString& lower(); // Mette la stringa in minuscolo
|
TString& lower(); // Mette la stringa in minuscolo
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// @DES Standard operators
|
// @DES Standard operators
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// @FPUB
|
// @FPUB
|
||||||
|
|
||||||
const TString& operator =(const TString& s) { return set(s._str); }
|
const TString& operator =(const TString& s) { return set(s._str); }
|
||||||
const TString& operator =(const char* s) { return set(s); }
|
const TString& operator =(const char* s) { return set(s); }
|
||||||
|
|
||||||
TString& operator <<(const char*);
|
TString& operator <<(const char*);
|
||||||
TString& operator <<(char);
|
TString& operator <<(char);
|
||||||
TString& operator <<(int);
|
TString& operator <<(int);
|
||||||
TString& operator <<(long);
|
TString& operator <<(long);
|
||||||
TString& operator <<(double);
|
TString& operator <<(double);
|
||||||
TString& operator <<(const TObject& obj);
|
TString& operator <<(const TObject& obj);
|
||||||
TString& operator <<(const TString& str); // For efficiency only
|
TString& operator <<(const TString& str); // For efficiency only
|
||||||
|
|
||||||
bool operator ==(const char* s) const { return strcmp(_str, s) == 0; }
|
bool operator ==(const char* s) const { return strcmp(_str, s) == 0; }
|
||||||
bool operator ==(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 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 !=(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 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 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 match(const char* s) const;
|
||||||
bool compare(const char* s, int max = -1, bool ignorecase = FALSE) const;
|
bool compare(const char* s, int max = -1, bool ignorecase = FALSE) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TFixed_string : public TString
|
// Classe TFixed_string : public TString
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TFixed_string : public TString
|
class TFixed_string : public TString
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual void resize(int size, bool cpy); // Causa un errore fatale!
|
virtual void resize(int size, bool cpy); // Causa un errore fatale!
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TFixed_string(const char* str, int size = -1);
|
TFixed_string(const char* str, int size = -1);
|
||||||
virtual ~TFixed_string();
|
virtual ~TFixed_string();
|
||||||
|
|
||||||
virtual TString& format(const char* fmt, ...);
|
virtual TString& format(const char* fmt, ...);
|
||||||
|
|
||||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||||
const TString& operator=(const char* str) { return set(str); }
|
const TString& operator=(const char* str) { return set(str); }
|
||||||
void strncpy(const char* s, int n);
|
void strncpy(const char* s, int n);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TString16 : public TFixed_string
|
class TString16 : public TFixed_string
|
||||||
{
|
{
|
||||||
char _str16[17];
|
char _str16[17];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TString16(const char* s = "") : TFixed_string(_str16, 17) { set(s); }
|
TString16(const char* s = "") : TFixed_string(_str16, 17) { set(s); }
|
||||||
TString16(const TString& 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 TString& s) { return set((const char*)s); }
|
||||||
const TString& operator =(const char* s) { return set(s); }
|
const TString& operator =(const char* s) { return set(s); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TString80 : public TFixed_string
|
class TString80 : public TFixed_string
|
||||||
{
|
{
|
||||||
char _str80[81];
|
char _str80[81];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TString80(const char* s = "") : TFixed_string(_str80, 81) { set(s); }
|
TString80(const char* s = "") : TFixed_string(_str80, 81) { set(s); }
|
||||||
TString80(const TString& 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 char* s) { return set(s); }
|
||||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||||
};
|
};
|
||||||
|
|
||||||
class TString256 : public TFixed_string
|
class TString256 : public TFixed_string
|
||||||
{
|
{
|
||||||
char _str256[257];
|
char _str256[257];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TString256(const char* s = "") : TFixed_string(_str256, 257) { set(s); }
|
TString256(const char* s = "") : TFixed_string(_str256, 257) { set(s); }
|
||||||
TString256(const TString& 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 char* s) { return set(s); }
|
||||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TFilename : public TString80 (256 su Windows'95)
|
// Classe TFilename : public TString80 (256 su Windows'95)
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TFilename : public TString80
|
class TFilename : public TString80
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
|
|
||||||
TFilename(const char* n = "") : TString80(n) {}
|
TFilename(const char* n = "") : TString80(n) {}
|
||||||
TFilename(const TString& n) : TString80((const char*)n) {}
|
TFilename(const TString& n) : TString80((const char*)n) {}
|
||||||
TFilename(const TFilename& n) : TString80((const char*)n) {}
|
TFilename(const TFilename& n) : TString80((const char*)n) {}
|
||||||
|
|
||||||
// assegnazione tra TFile e stringa
|
// assegnazione tra TFile e stringa
|
||||||
const TString& operator =(const char* s) { return set(s); }
|
const TString& operator =(const char* s) { return set(s); }
|
||||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||||
|
|
||||||
virtual bool ok() const; // Controlla il formato del nome del file
|
virtual bool ok() const; // Controlla il formato del nome del file
|
||||||
|
|
||||||
const char* ext() const; // Ritorna l'estensione
|
const char* ext() const; // Ritorna l'estensione
|
||||||
void ext(const char*); // Imposta come estensione la stringa puntata da char*
|
void ext(const char*); // Imposta come estensione la stringa puntata da char*
|
||||||
|
|
||||||
const char* name() const; // Ritorna il nome del file
|
const char* name() const; // Ritorna il nome del file
|
||||||
const char* path() const; // Ritorna il nome del direttorio
|
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& temp(const char* prefix = NULL); // Genera il nome di un file temporaneo
|
||||||
const TFilename& tempdir(); // Genera il nome della directory temporanea
|
const TFilename& tempdir(); // Genera il nome della directory temporanea
|
||||||
};
|
};
|
||||||
|
|
||||||
// @C
|
// @C
|
||||||
// Classe TToken_string : public TString
|
// Classe TToken_string : public TString
|
||||||
// @END
|
// @END
|
||||||
|
|
||||||
class TToken_string : public TString
|
class TToken_string : public TString
|
||||||
{
|
{
|
||||||
// @DPRIV
|
// @DPRIV
|
||||||
char _separator; // Carattere separatore
|
char _separator; // Carattere separatore
|
||||||
int _last; // Puntatore all'ultimo
|
int _last; // Puntatore all'ultimo
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// @FPROT
|
// @FPROT
|
||||||
|
|
||||||
virtual TObject* dup() const; // Crea un duplicato della token string
|
virtual TObject* dup() const; // Crea un duplicato della token string
|
||||||
bool set_item(const char* v, int n);
|
bool set_item(const char* v, int n);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @FPUB
|
// @FPUB
|
||||||
TToken_string(const char* = "", char separator = '|');
|
TToken_string(const char* = "", char separator = '|');
|
||||||
TToken_string(int n, char separator = '|');
|
TToken_string(int n, char separator = '|');
|
||||||
TToken_string(const TToken_string& s);
|
TToken_string(const TToken_string& s);
|
||||||
|
|
||||||
void separator(char s) { _separator = s; } // Setta il separatore a s
|
void separator(char s) { _separator = s; } // Setta il separatore a s
|
||||||
|
|
||||||
void restart() { _last = empty() ? -1 : 0; } // Rimette all'inizio il puntatore
|
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 char* s) { set(s);restart();return *this; }
|
||||||
const TString& operator =(const TString& 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(const char* s, int n = -1); // Aggiunge una stringa
|
||||||
void add(char c, int pos = -1); // Aggiunge un char
|
void add(char c, int pos = -1); // Aggiunge un char
|
||||||
void add(long n, int pos = -1); // Aggiunge un intero
|
void add(long n, int pos = -1); // Aggiunge un intero
|
||||||
void add(int 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
|
void destroy(int pos); // Toglie la stringa pos
|
||||||
const char* get(); // Ritorna il prossimo token
|
const char* get(); // Ritorna il prossimo token
|
||||||
const char* get(int n); // Ritorna un token (-1 = prossimo; -2 = ultimo; n = ennesimo)
|
const char* get(int n); // Ritorna un token (-1 = prossimo; -2 = ultimo; n = ennesimo)
|
||||||
char get_char(int n = -1); // Ritorna un carattere
|
char get_char(int n = -1); // Ritorna un carattere
|
||||||
int get_int(int n = -1); // Ritorna un intero
|
int get_int(int n = -1); // Ritorna un intero
|
||||||
long get_long(int n = -1); // Ritorna un intero esteso
|
long get_long(int n = -1); // Ritorna un intero esteso
|
||||||
int get_pos(const char* s); // Ritorna la posizione dell'item s
|
int get_pos(const char* s); // Ritorna la posizione dell'item s
|
||||||
int items() const; // Ritorna il numero di token presenti
|
int items() const; // Ritorna il numero di token presenti
|
||||||
bool empty_items() const; // Controlla se tutti i token sono nulli
|
bool empty_items() const; // Controlla se tutti i token sono nulli
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// @DES Paragraph
|
// @DES Paragraph
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class TParagraph_string : public TToken_string
|
class TParagraph_string : public TToken_string
|
||||||
{
|
{
|
||||||
int _width;
|
int _width;
|
||||||
bool _fixed;
|
bool _fixed;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void tokenize();
|
void tokenize();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TParagraph_string(const char* s, int width);
|
TParagraph_string(const char* s, int width);
|
||||||
const TString& operator =(const char* s);
|
const TString& operator =(const char* s);
|
||||||
void set_width(int width) { _width = width; }
|
void set_width(int width) { _width = width; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
///////////////////////////////////////////////////////////
|
||||||
|
// @DES TString_array
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TString_array : public TArray
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TToken_string& row(int n) { return (TToken_string&)operator[](n); }
|
||||||
|
int add(TToken_string* s, int n = -1) { return TArray::add(s, n); }
|
||||||
|
int add(const TToken_string& s, int n = -1);
|
||||||
|
int add(const char* s, int n = -1);
|
||||||
|
|
||||||
|
TString_array(int size = 8) : TArray(size) {}
|
||||||
|
virtual ~TString_array() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1832,7 +1832,7 @@ bool TViswin::call_editor ()
|
|||||||
newfilename.insert (" ", 0);
|
newfilename.insert (" ", 0);
|
||||||
newfilename.insert (editor, 0);
|
newfilename.insert (editor, 0);
|
||||||
TExternal_app edit (newfilename);
|
TExternal_app edit (newfilename);
|
||||||
if (edit.run(TRUE))
|
if (edit.run(TRUE, FALSE))
|
||||||
beep ();
|
beep ();
|
||||||
else
|
else
|
||||||
ok = TRUE;
|
ok = TRUE;
|
||||||
|
|||||||
@ -99,6 +99,8 @@ HIDDEN COLORREF NormalForeColor = COLOR2RGB(NORMAL_COLOR);
|
|||||||
HIDDEN COLORREF NormalBackColor = COLOR2RGB(NORMAL_BACK_COLOR);
|
HIDDEN COLORREF NormalBackColor = COLOR2RGB(NORMAL_BACK_COLOR);
|
||||||
HIDDEN HBRUSH NormalBrush = CreateSolidBrush(NormalBackColor);
|
HIDDEN HBRUSH NormalBrush = CreateSolidBrush(NormalBackColor);
|
||||||
|
|
||||||
|
const word WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
||||||
|
|
||||||
static BOOLEAN event_hook(HWND hwnd,
|
static BOOLEAN event_hook(HWND hwnd,
|
||||||
UINT msg,
|
UINT msg,
|
||||||
UINT wparam,
|
UINT wparam,
|
||||||
@ -200,6 +202,9 @@ static BOOLEAN event_hook(HWND hwnd,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if (msg == WM_WAKEUP && wparam == main_app().waiting())
|
||||||
|
main_app().wake_up();
|
||||||
|
break;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,9 +398,8 @@ KEY e_char_to_key(const EVENT* ep)
|
|||||||
KEY key = ep->v.chr.ch;
|
KEY key = ep->v.chr.ch;
|
||||||
if (key < K_INS || key > K_HELP)
|
if (key < K_INS || key > K_HELP)
|
||||||
{
|
{
|
||||||
// if (ep->v.chr.shift && !isprint(key)) key += K_SHIFT;
|
if (ep->v.chr.shift && (key < ' ' || key >= K_UP)) key += K_SHIFT;
|
||||||
if (ep->v.chr.shift && (key < ' ' || key > 'z')) key += K_SHIFT;
|
if (ep->v.chr.control && key >= ' ') key += K_CTRL;
|
||||||
if (key >= ' ' && ep->v.chr.control) key += K_CTRL;
|
|
||||||
}
|
}
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
@ -543,9 +547,9 @@ void xvt_init_font()
|
|||||||
LogFont.lfWidth = (int)font.get_long("Width");
|
LogFont.lfWidth = (int)font.get_long("Width");
|
||||||
LogFont.lfWeight = FontWeight = (int)font.get_long("Weight");
|
LogFont.lfWeight = FontWeight = (int)font.get_long("Weight");
|
||||||
LogFont.lfCharSet = (int)font.get_long("CharSet");
|
LogFont.lfCharSet = (int)font.get_long("CharSet");
|
||||||
LogFont.lfClipPrecision = (int)font.get_long("Clip");
|
// LogFont.lfClipPrecision = (int)font.get_long("Clip");
|
||||||
LogFont.lfOutPrecision = (int)font.get_long("Precision");
|
// LogFont.lfOutPrecision = (int)font.get_long("Precision");
|
||||||
LogFont.lfQuality = (int)font.get_long("Quality");;
|
// LogFont.lfQuality = (int)font.get_long("Quality");;
|
||||||
LogFont.lfPitchAndFamily = (int)font.get_long("Pitch");
|
LogFont.lfPitchAndFamily = (int)font.get_long("Pitch");
|
||||||
strcpy(LogFont.lfFaceName, font.get("Name"));
|
strcpy(LogFont.lfFaceName, font.get("Name"));
|
||||||
}
|
}
|
||||||
@ -581,8 +585,6 @@ void xvt_set_font(WINDOW win, int family, int style, int dim)
|
|||||||
#if XVT_OS == XVT_OS_WIN
|
#if XVT_OS == XVT_OS_WIN
|
||||||
if (dim < 1)
|
if (dim < 1)
|
||||||
{
|
{
|
||||||
// LogFont.lfWidth = CHARX - (style & FS_BOLD) ? 2 : 1;
|
|
||||||
// LogFont.lfHeight = CHARY - ((style & FS_BOLD) ? 4 : 2);
|
|
||||||
LogFont.lfWeight = FontWeight + ((style & FS_BOLD) ? 300 : 0);
|
LogFont.lfWeight = FontWeight + ((style & FS_BOLD) ? 300 : 0);
|
||||||
LogFont.lfItalic = (style & FS_ITALIC) ? TRUE : FALSE;
|
LogFont.lfItalic = (style & FS_ITALIC) ? TRUE : FALSE;
|
||||||
set_value(NULL_WIN, ATTR_WIN_PM_LOGFONT, (long)&LogFont);
|
set_value(NULL_WIN, ATTR_WIN_PM_LOGFONT, (long)&LogFont);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user