Aggiunta segnalazione d'errore se si persevera nell'uso di MainApp()

Aggiunta ricerca alternativa anche all'interno degli sheet


git-svn-id: svn://10.65.10.50/trunk@587 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-11-10 13:44:57 +00:00
parent 4dcf5f74ad
commit 8ca7b5aa46
16 changed files with 11281 additions and 10596 deletions

View File

@ -1,3 +1,678 @@
<<<<<<< applicat.cpp
#include <stdlib.h>
#include <xvt.h>
#include <extcdecl.h>
#include <modaut.h>
#include <applicat.h>
#include <config.h>
#include <mask.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <urldefid.h>
#include <utility.h>
#include <bagn002.h>
#define BITTEST(w,p) (((w) & (0x0001 << (p))) != 0)
///////////////////////////////////////////////////////////
// Metodi di accesso globali all'applicazione corrente
///////////////////////////////////////////////////////////
HIDDEN TApplication* _application = NULL;
TString16 TApplication::_user;
TApplication* MainApp()
{
CHECK(_application, "NULL application!");
#ifdef DBG
error_box("Ti lascio usare MainApp ancora per pochi giorni!");
#endif
return _application;
}
TApplication& main_app()
{
CHECK(_application, "NULL application!");
return *_application;
}
bool xvt_running() { return _application != NULL; }
///////////////////////////////////////////////////////////
// Gestione dello sfondo della finestra principale
///////////////////////////////////////////////////////////
HIDDEN long backdrop_eh( WINDOW win, EVENT* ep)
{
#if XVT_OS == XVT_OS_WIN
clear_window( win, COLOR_GRAY );
#else
clear_window( win, COLOR_BLUE );
#endif
return 0L;
}
HIDDEN void create_backdrop( void )
{
#if XVT_OS == XVT_OS_WIN
xvt_create_statbar();
xvt_statbar_set("");
#else
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_MENU, COLOR_BLACK, COLOR_WHITE);
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_DIALOG, COLOR_BLUE, COLOR_WHITE);
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_WINDOW, COLOR_RED, COLOR_WHITE);
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_CONTROL, COLOR_BLACK, COLOR_WHITE);
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_DISABLED, COLOR_GRAY, COLOR_WHITE);
xvt_escape(XVT_ESC_CH_COLOR, XVT_CH_CLR_MNEMONIC, COLOR_RED, COLOR_WHITE);
RCT rct;
get_client_rect( SCREEN_WIN, &rct );
create_window(W_PLAIN, &rct, (char*) "BACKDROP", 0, TASK_WIN,
WSF_NO_MENUBAR | WSF_CH_BACKDROP , EM_UPDATE,
backdrop_eh, 0L );
#endif
}
///////////////////////////////////////////////////////////
// Gestione del banner iniziale
///////////////////////////////////////////////////////////
class TBanner : public TWindow
{
protected:
virtual void handler(WINDOW win, EVENT* ep);
public:
TBanner();
~TBanner();
};
TBanner::TBanner()
{
create(-1, 6, 72, 6, "BANNER", WSF_NONE, W_PLAIN);
hide_brush();
open_modal();
do_events();
}
TBanner::~TBanner()
{
close_modal();
}
void TBanner::handler(WINDOW win, EVENT* ep)
{
if (ep->type == E_UPDATE)
{
const int BIGY = CHARY<<1;
clear(COLOR_LTGRAY);
RCT r; get_client_rect(win, &r);
set_color(COLOR_WHITE, COLOR_LTGRAY);
set_font(FF_TIMES, FS_BOLD | FS_ITALIC, BIGY);
char* t = (char*)(const char*)main_app().title();
int w = win_get_text_width(win, t, -1);
int a; win_get_font_metrics(win, NULL, &a, NULL);
int x = (r.right-w)>>1, y = (r.bottom+a)>>1 ;
win_draw_text(win, x+1, y+1, t, -1);
set_color(COLOR_BLACK, COLOR_LTGRAY);
win_draw_text(win, x, y, t, -1);
set_font(FF_TIMES);
t = "PRASSI S.p.A.";
w = win_get_text_width(win, t, -1);
x = (r.right-r.left-w)>>1, y = BIGY;
win_draw_text(win, x, y, t, -1);
t = "Caricamento in corso";
w = win_get_text_width(win, t, -1);
x = (r.right-r.left-w)>>1, y = r.bottom - CHARY;
win_draw_text(win, x, y, t, -1);
r.left += 4; r.right -= 4;
r.top += 4; r.bottom -= 4;
set_pen(COLOR_BLACK); win_draw_rect(win, &r);
offset_rect(&r, 1, 1);
set_pen(COLOR_WHITE); win_draw_rect(win, &r);
win_draw_icon(win, CHARX<<1, CHARX<<1, ICON_RSRC);
}
else
TWindow::handler(win, ep);
}
#if XVT_OS == XVT_OS_WIN
///////////////////////////////////////////////////////////
// Gestione dei processi per Windows(R)
///////////////////////////////////////////////////////////
#include <windows.h>
const word WM_WAKEUP = RegisterWindowMessage("WAKEUP");
DWORD waiting_for = 0;
HIDDEN BOOLEAN waiting_event_hook(HWND, WORD msg, WORD,
DWORD lparam, long far* ret)
{
if (msg == WM_WAKEUP)
{
if( lparam == waiting_for || lparam == 0)
{
waiting_for = 0L;
TTemp_window tw(TASK_WIN);
tw.maximize();
}
*ret = 0;
return TRUE;
}
return FALSE;
}
HIDDEN DWORD name2id(const char* name)
{
waiting_for = 0L;
for (int i = 0; i < 5 && name[i] > ' '; i++)
{
waiting_for <<= 6;
waiting_for |= toupper(name[i]) - '0';
}
return waiting_for;
}
void TApplication::wait_for(const char* command)
{
TTemp_window tw(TASK_WIN);
tw.iconize();
name2id(cmd2name(command));
const long old_hook = get_value(TASK_WIN, ATTR_EVENT_HOOK);
set_value(TASK_WIN, ATTR_EVENT_HOOK, (long)waiting_event_hook);
while (waiting_for) do_events();
// We need to restore these things
set_value(TASK_WIN, ATTR_EVENT_HOOK, old_hook);
xvt_statbar_refresh();
}
void TApplication::wake_up_caller() const
{
name2id(name());
SendMessage(-1, WM_WAKEUP, 0, waiting_for);
}
#endif
long TApplication::task_eh(WINDOW win, EVENT *ep)
{
switch (ep->type)
{
case E_CREATE:
create_backdrop();
#if defined(DBG) && XVT_OS == XVT_OS_SCOUNIX
message_box("Attach to process %d ...", getpid());
#endif
do_events();
break;
#if XVT_OS == XVT_OS_WIN
case E_UPDATE:
backdrop_eh(win, ep);
break;
#endif
default:
break;
}
return _application->handler(win, ep);
}
long TApplication::handler(WINDOW win, EVENT* ep)
{
switch (ep->type)
{
case E_CREATE:
{
TBanner banner;
_create_ok = create();
if (!_create_ok)
stop_run();
}
break;
case E_COMMAND:
switch(ep->v.cmd.tag)
{
case M_FILE_QUIT:
if (can_close())
stop_run();
break;
case M_FILE_PG_SETUP:
printer().set();
break;
case M_FILE_PRINT:
print();
break;
case M_FILE_NEW:
set_firm();
break;
case M_FILE_REVERT:
config();
break;
case (M_FILE+11):
about();
break;
default:
if (ep->v.cmd.tag >= BAR_ITEM(1))
{
if(!menu(ep->v.cmd.tag))
stop_run();
}
break;
}
break;
case E_CLOSE:
if (can_close())
stop_run();
break;
case E_QUIT:
if (ep->v.query)
{
if (can_close())
quit_OK();
}
else
stop_run();
break;
default:
break;
}
return 0L;
}
void TApplication::stop_run()
{
if (_savefirm) prefhndl->set_codditta(_savefirm);
terminate();
xvt_terminate();
}
TApplication::TApplication() : _printer(NULL), _savefirm(0), _create_ok(FALSE)
{
init_global_vars();
_bar = TASK_MENUBAR;
}
TApplication::~TApplication()
{}
TPrinter* TApplication::set_printer(TPrinter* p)
{
TPrinter* printer = _printer;
_printer = p;
return printer;
}
TPrinter& TApplication::printer()
{
if (_printer == NULL)
_printer = new TPrinter;
return *_printer;
}
bool TApplication::create()
{
return TRUE;
}
bool TApplication::destroy()
{
return TRUE;
}
void TApplication::terminate()
{
#if XVT_OS == XVT_OS_WIN
wake_up_caller(); // Manda il segnale di risveglio al chiamante
#endif
close_all_dialogs();
if (_create_ok)
{
destroy(); // Distruzione files e maschere
do_events();
if (_printer != NULL) // Distruzione dell'eventuale stampante
{
if (printer().isopen())
printer().close();
delete _printer;
_printer = NULL;
}
}
free_global_vars(); // Distruzione variabili globali
customize_controls(FALSE); // Rilascio eventuali DLL
}
const char* TApplication::get_module_name() const
{
TScanner scanner("prassi.aut");
bool ok = FALSE;
for (int aut = 0; scanner.line() != ""; aut++)
if (strncmp(scanner.token(), _name, 2) == 0) { ok = TRUE; break; }
const char* module = scanner.token().mid(3);
if (ok) ok = has_module(aut);
if (!ok)
fatal_box("Il modulo '%s' non e' autorizzato", module);
return module;
}
void TApplication::set_perms()
{
CGetAut(1);
_dongle_aut.set(0, TRUE);
for (int i = 1 ; i < ENDAUT; i++)
{
const int af = i - 1;
const bool val = BITTEST(_int_tab0[af / 16], af % 16);
_dongle_aut.set(i, val);
}
_user_aut.set(0, TRUE);
if (_user.not_empty())
{
if (_user == "PRASSI")
{
for (int i = 1 ; i < ENDAUT; i++)
_user_aut.set(i);
}
else
{
TLocalisamfile users(LF_USER);
users.zero();
users.put("USERNAME", _user);
if (users.read() == NOERR)
{
const TString80 aut(users.get("AUTSTR"));
const int max = aut.len();
for (int i = 1 ; i < max; i++)
_user_aut.set(i, aut[i] == 'X');
}
}
}
}
void TApplication::check_parameters(int & argc, char* argv[])
{
if (strncmp(argv[argc - 1], "-u", 2) == 0)
{
_user = &argv[argc - 1][2];
argc--;
}
#ifdef DBG
else _user = "PRASSI";
#endif
}
void TApplication::run(int argc, char* argv[], const char* title)
{
TFilename base(argv[0]);
base.ext(""); base.lower();
_title = title;
if (_user.empty())
check_parameters(argc, argv);
__argc = argc;
__argv = (const char**)argv;
int addbar;
if (argc > 1)
{
addbar = atoi(argv[1]+1);
_name = cmd2name(argv[0], argv[1]);
}
else
{
addbar = 0;
_name = cmd2name(argv[0]);
}
set_perms();
TString80 caption;
caption << "PRASSI S.p.A. - " << get_module_name();
static XVT_CONFIG cfg;
cfg.base_appl_name = (char*)base.name();
cfg.appl_name = (char*)(const char*)_title;
cfg.taskwin_title = (char*)(const char*)caption;
cfg.menu_bar_ID = TASK_MENUBAR+addbar;
cfg.about_box_ID = 0;
customize_controls(TRUE);
_application = this;
xvt_system(argc, argv, 0L, task_eh, &cfg);
}
// About box: risposta alla opzione Informazioni del menu File
void TApplication::about() const
{
#include <prassi.ver>
const TFilename n(__argv[0]);
message_box("PRASSI Versione Beta %4.2f\nProgramma %s\nLibreria del %s",
VERSION, (const char*)n.name(), __DATE__);
}
// Risposta alla selezione Stampa del menu File
void TApplication::print()
{
#ifdef DBG
error_box("Non saprei bene cosa stampare!");
#endif
}
void TApplication::check_menu_item(MENU_TAG item)
{
win_menu_check(TASK_WIN, item, TRUE);
win_update_menu_bar(TASK_WIN);
}
void TApplication::uncheck_menu_item(MENU_TAG item)
{
win_menu_check(TASK_WIN, item, FALSE);
win_update_menu_bar(TASK_WIN);
}
void TApplication::enable_menu_item(MENU_TAG item, bool on)
{
win_menu_enable(TASK_WIN, item, on);
win_update_menu_bar(TASK_WIN);
}
void TApplication::dispatch_e_menu(MENU_TAG item)
{
#if XVT_OS == XVT_OS_WIN
HWND w = (HWND)get_value(TASK_WIN, ATTR_NATIVE_WINDOW);
PostMessage(w, WM_COMMAND, item, 0L);
#else
EVENT e;
e.type = E_COMMAND;
e.v.cmd.tag = item;
e.v.cmd.shift = e.v.cmd.control = 0;
dispatch_event(TASK_WIN, &e);
#endif
}
bool TApplication::has_module(int module, int checktype) const
{
bool ok = TRUE;
if (checktype == CHK_ALL || checktype == CHK_DONGLE)
ok = _dongle_aut[module];
if (ok && checktype == CHK_ALL || checktype == CHK_USER)
ok = _user_aut[module];
return ok;
}
long TApplication::get_firm() const
{
return prefhndl->get_codditta();
}
const char* TApplication::get_firm_dir() const
{
return format("%s%s", __ptprf, prefhndl->name());
}
bool TApplication::set_firm(long newfirm)
{
disable_menu_item(M_FILE_NEW);
const long oldfirm = get_firm();
if (newfirm < 1)
{
TMask mask("bagn002");
mask.send_key(K_CTRL+K_SHIFT+(extended_firm() ? 's' : 'h'), -2);
const KEY k = mask.run();
enable_menu_item(M_FILE_NEW);
if (k == K_ENTER)
{
newfirm = mask.get_long(F_CODDITTA);
const int tipodir = mask.get_int(F_TIPO);
if (tipodir > 0)
{
if (_savefirm == 0) _savefirm = oldfirm;
prefhndl->set(tipodir == 1 ? "com" : "");
return TRUE;
}
}
}
if (newfirm == oldfirm || newfirm < 1)
return newfirm > 0;
if (prefhndl->test(newfirm))
{
prefhndl->set_codditta(newfirm);
_savefirm = 0;
}
return TRUE;
}
bool TApplication::config()
// gestisce le voci di configurazione
// le si passa il file in cui cercare il proprio
// paragrafo (comunque relativo alla ditta)
// se non c'e', viene creato copiando il default
// la variabile EdMask di quel paragrafo specifica
// la maschera da usare
{
TConfig cnf(CONFIG_DITTA);
bool ok = FALSE;
TFilename maskname(cnf.get("EdMask"));
if (!maskname.empty())
{
TMask m(maskname);
// carica campi
for (int i = 0; i < m.fields(); i++)
{
TMask_field& f = m.fld(i);
const TFieldref* fref = f.field();
if (fref != NULL)
{
const char* fname = fref->name();
if (fname != NULL)
{
TString& oldvl = cnf.get(fname);
if (!oldvl.empty())
f.set(oldvl);
}
}
}
// run mask
disable_menu_item(M_FILE_NEW);
disable_menu_item(M_FILE_REVERT);
if (m.run() == K_ENTER)
{
// aggiusta campi
for (i = 0; i < m.fields(); i++)
{
TMask_field& f = m.fld(i);
if (f.dirty())
{
const TFieldref* fref = f.field();
if (fref != NULL)
{
const char* fname = fref->name();
const char* value = f.get();
const char* oldvl = cnf.get(fname);
if (change_config(fname,oldvl,value))
cnf.set(fname, value, NULL, TRUE);
}
}
}
ok = TRUE;
}
else ok = FALSE;
enable_menu_item(M_FILE_NEW);
enable_menu_item(M_FILE_REVERT);
return ok;
}
return warning_box("Nessun parametro da configurare");
}
bool TApplication::change_config(const char* var, const char* oldv,
const char* newv)
{ return TRUE; }
=======
#include <stdlib.h> #include <stdlib.h>
#include <xvt.h> #include <xvt.h>
@ -666,3 +1341,4 @@ bool TApplication::change_config(const char* var, const char* oldv,
const char* newv) const char* newv)
{ return TRUE; } { return TRUE; }
>>>>>>> 1.24

View File

@ -1,104 +1,106 @@
#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;
static TString16 _user; long _savefirm;
bool _create_ok;
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 long handler(WINDOW win, EVENT* ep);
virtual bool create(); // Crea la finestra principale virtual bool extended_firm() const { return FALSE; } // Extended set_firm dialog box
virtual bool menu(MENU_TAG) { return TRUE; } // Controlla il menu
virtual bool destroy(); // Rimuove l'applicazione virtual bool create(); // Crea la finestra principale
virtual void print(); virtual bool menu(MENU_TAG) { return TRUE; } // Controlla il menu
virtual bool destroy(); // Rimuove l'applicazione
virtual bool change_config(const char* var, const char* oldv, const char* newv); virtual void print();
void set_user(const char * user) { _user = user; }
virtual bool change_config(const char* var, const char* oldv, const char* newv);
void terminate(); void set_user(const char * user) { _user = user; }
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; }
void wait_for(const char* name); const TString& title() const { return _title; }
void wake_up_caller() const;
void wait_for(const char* name);
TPrinter* set_printer(TPrinter* p); void wake_up_caller() const;
TPrinter& printer();
TPrinter* set_printer(TPrinter* p);
static void check_parameters(int & argc, char *argv[]); TPrinter& printer();
void set_perms(); static void check_parameters(int & argc, char *argv[]);
const TString& user() const { return _user; }
bool has_module(int module, int checktype = CHK_ALL) const; void set_perms();
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();
}; TApplication();
virtual ~TApplication();
bool xvt_running(); // xvt is running? };
TApplication* MainApp(); // main application (old fashioned: will be removed soon
TApplication& main_app(); bool xvt_running(); // xvt is running?
TApplication* MainApp(); // main application (old fashioned: will be removed soon
#endif // __APPLICATION_H TApplication& main_app();
#endif // __APPLICATION_H

View File

@ -1,209 +1,208 @@
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#ifdef XVT_OS #ifdef XVT_OS
#include <xvt_os.h> #include <xvt_os.h>
#if XVT_OS == XVT_OS_WIN #if XVT_OS == XVT_OS_WIN
#include <windows.h> #include <windows.h>
#include <keys.h> #include <keys.h>
#else #else
#include <xvtility.h> #include <xvtility.h>
#endif #endif
#include <applicat.h> #include <applicat.h>
#endif // XVT_OS #endif // XVT_OS
#ifdef FOXPRO #ifdef FOXPRO
#undef XVT_OS #undef XVT_OS
#include <pro_ext.h> #include <pro_ext.h>
#endif #endif
#ifdef XVT_R3_API #ifdef XVT_R3_API
#include <windows.h> #include <windows.h>
#endif #endif
#include <checks.h> #include <checks.h>
#define buildmsg() char msg[256];va_list argptr;va_start(argptr,fmt);vsprintf(msg,fmt,argptr);va_end(argptr) #define buildmsg() char msg[256];va_list argptr;va_start(argptr,fmt);vsprintf(msg,fmt,argptr);va_end(argptr)
#ifdef XVT_OS #ifdef XVT_OS
int fatal_box(const char* fmt, ...) int fatal_box(const char* fmt, ...)
{ {
buildmsg(); buildmsg();
#if XVT_OS == XVT_OS_WIN #if XVT_OS == XVT_OS_WIN
MessageBeep(MB_ICONHAND); MessageBeep(MB_ICONHAND);
MessageBox(GetFocus(), msg, "ERRORE FATALE", MB_OK | MB_ICONHAND | MB_SYSTEMMODAL); MessageBox(GetFocus(), msg, "ERRORE FATALE", MB_OK | MB_ICONHAND | MB_SYSTEMMODAL);
const TApplication* a = MainApp();
if (a != NULL) if (xvt_running())
a->wake_up_caller(); main_app().stop_run();
xvt_terminate(); #else
#else beep();
beep(); if (xvt_running()) xvt_fatal("%s", msg);
if (xvt_running()) xvt_fatal("%s", msg); else
else {
{ fprintf(stderr, "%s\n", msg);
fprintf(stderr, "%s\n", msg); getchar();
getchar(); exit(1);
exit(1); }
} #endif
#endif
return 0;
return 0; }
}
int error_box(const char* fmt, ...)
int error_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN MessageBeep(MB_ICONEXCLAMATION);
MessageBeep(MB_ICONEXCLAMATION); MessageBox(GetFocus(), msg, "ERRORE", MB_OK | MB_ICONEXCLAMATION);
MessageBox(GetFocus(), msg, "ERRORE", MB_OK | MB_ICONEXCLAMATION); #else
#else beep();
beep(); if (xvt_running()) xvt_error("%s", msg);
if (xvt_running()) xvt_error("%s", msg); else
else {
{ fprintf(stderr, "%s\n", msg);
fprintf(stderr, "%s\n", msg); getchar();
getchar(); }
} #endif
#endif
return 0;
return 0; }
}
int warning_box(const char* fmt, ...)
int warning_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN MessageBeep(MB_ICONQUESTION);
MessageBeep(MB_ICONQUESTION); MessageBox(GetFocus(), msg, "ATTENZIONE", MB_OK | MB_ICONQUESTION);
MessageBox(GetFocus(), msg, "ATTENZIONE", MB_OK | MB_ICONQUESTION); #else
#else beep();
beep(); xvt_note("%s", msg);
xvt_note("%s", msg); #endif
#endif
return 0;
return 0; }
}
int message_box(const char* fmt, ...)
int message_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN MessageBox(GetFocus(), msg, "INFORMAZIONE", MB_OK | MB_ICONINFORMATION);
MessageBox(GetFocus(), msg, "INFORMAZIONE", MB_OK | MB_ICONINFORMATION); #else
#else xvt_note("%s", msg);
xvt_note("%s", msg); #endif
#endif
return 0;
return 0; }
}
int sorry_box(const char* fmt, ...)
int sorry_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN MessageBeep(MB_OK);
MessageBeep(MB_OK); MessageBox(GetFocus(), msg, "SPIACENTE", MB_OK | MB_ICONINFORMATION);
MessageBox(GetFocus(), msg, "SPIACENTE", MB_OK | MB_ICONINFORMATION); #else
#else xvt_note("%s", msg);
xvt_note("%s", msg); #endif
#endif
return 0;
return 0; }
}
int yesno_box(const char* fmt, ...)
int yesno_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN int r = MessageBox(GetFocus(), msg, "RICHIESTA", MB_YESNO | MB_ICONQUESTION);
int r = MessageBox(GetFocus(), msg, "RICHIESTA", MB_YESNO | MB_ICONQUESTION); return r == IDYES;
return r == IDYES; #else
#else ASK_RESPONSE r = xvt_ask((char*) "Si", (char*) "No", NULL, "%s", msg);
ASK_RESPONSE r = xvt_ask((char*) "Si", (char*) "No", NULL, "%s", msg); return r == RESP_DEFAULT;
return r == RESP_DEFAULT; #endif
#endif }
}
int yesnofatal_box(const char* fmt, ...)
int yesnofatal_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#ifdef DBG
#ifdef DBG char s[256]; sprintf(s, "%s\nContinuare ugualmente?", msg);
char s[256]; sprintf(s, "%s\nContinuare ugualmente?", msg); const int ret = yesno_box("%s", s);
const int ret = yesno_box("%s", s); if (!ret) fatal_box("");
if (!ret) fatal_box(""); #else
#else fatal_box("%s", msg);
fatal_box("%s", msg); #endif
#endif
return FALSE;
return FALSE; }
}
int yesnocancel_box(const char* fmt, ...)
int yesnocancel_box(const char* fmt, ...) {
{ buildmsg();
buildmsg();
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN int r = MessageBox(GetFocus(), msg, "RICHIESTA", MB_YESNOCANCEL | MB_ICONQUESTION);
int r = MessageBox(GetFocus(), msg, "RICHIESTA", MB_YESNOCANCEL | MB_ICONQUESTION); if (r == IDYES) r = K_YES;
if (r == IDYES) r = K_YES; else
else if (r == IDNO) r = K_NO;
if (r == IDNO) r = K_NO; else
else r = K_ESC;
r = K_ESC; return r;
return r; #else
#else ASK_RESPONSE r = xvt_ask((char*) "Si", (char*) "No", (char*) "Annulla", "%s", msg);
ASK_RESPONSE r = xvt_ask((char*) "Si", (char*) "No", (char*) "Annulla", "%s", msg); if (r == RESP_DEFAULT) r = K_YES;
if (r == RESP_DEFAULT) r = K_YES; else
else if (r == RESP_2) r = K_NO;
if (r == RESP_2) r = K_NO; else
else r = K_ESC;
r = K_ESC; return r;
return r; #endif
#endif }
}
#endif // XVT_OS
#endif // XVT_OS
#ifdef FOXPRO
#ifdef FOXPRO
int error_box(const char* fmt, ...)
int error_box(const char* fmt, ...) {
{ buildmsg();
buildmsg(); _UserError(msg);
_UserError(msg); return 0;
return 0; }
}
int fatal_box(const char* fmt, ...)
int fatal_box(const char* fmt, ...) {
{ buildmsg();
buildmsg(); _UserError(msg);
_UserError(msg); return 0;
return 0; }
}
int message_box(const char* fmt, ...)
int message_box(const char* fmt, ...) {
{ buildmsg();
buildmsg(); _UserError(msg);
_UserError(msg); return 0;
return 0; }
}
int yesnofatal_box(const char* fmt, ...)
int yesnofatal_box(const char* fmt, ...) {
{ buildmsg();
buildmsg(); _UserError(msg);
_UserError(msg); return 0;
return 0; }
} #endif // FOXPRO
#endif // FOXPRO

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,202 +1,202 @@
// $Id: mailbox.cpp,v 1.5 1994-10-25 10:00:59 alex Exp $ // $Id: mailbox.cpp,v 1.6 1994-11-10 13:44:25 guy Exp $
#include <stdlib.h> #include <stdlib.h>
#include <fstream.h> #include <fstream.h>
#include <applicat.h> #include <applicat.h>
#include <mailbox.h> #include <mailbox.h>
#include <utility.h> #include <utility.h>
#if XVT_OS == XVT_OS_DOS || XVT_OS == XVT_OS_WIN #if XVT_OS == XVT_OS_DOS || XVT_OS == XVT_OS_WIN
#include <io.h> #include <io.h>
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
#define DEF_MSGS_CAPACITY 50 #define DEF_MSGS_CAPACITY 50
#define MAX_TXT_LEN 200 #define MAX_TXT_LEN 200
TMessage::TMessage(const char* to, const char* sub, const char* text, TMessage::TMessage(const char* to, const char* sub, const char* text,
const char* from) const char* from)
{ {
_to = to; _subject = sub; _to = to; _subject = sub;
_text = text; _text = text;
_from = (from == NULL || *from == '\0' ? main_app().name() : from); _from = (from == NULL || *from == '\0' ? main_app().name() : from);
_flags = 0x00; _number = -1; _flags = 0x00; _number = -1;
} }
void TMessage::send() void TMessage::send()
{ {
TMailbox mail; TMailbox mail;
mail.send(*this); mail.send(*this);
} }
void TMailbox::reread() void TMailbox::reread()
// reads new messages from mailbox; // reads new messages from mailbox;
// create messages, put messages in _msgs array in cronological order // create messages, put messages in _msgs array in cronological order
{ {
char buf[MAX_TXT_LEN]; char buf[MAX_TXT_LEN];
ifstream mbox(_path); ifstream mbox(_path);
// skip read messages // skip read messages
mbox.seekg(_lastpos); mbox.seekg(_lastpos);
while (mbox.getline(buf, MAX_TXT_LEN -1) != NULL) while (mbox.getline(buf, MAX_TXT_LEN -1) != NULL)
{ {
// process new message // process new message
TMessage* tmnew = new TMessage (NULL, NULL, NULL, buf); TMessage* tmnew = new TMessage (NULL, NULL, NULL, buf);
// lines are <from> <subject> <body> // lines are <from> <subject> <body>
mbox.getline(buf, MAX_TXT_LEN -1); mbox.getline(buf, MAX_TXT_LEN -1);
tmnew->subject(buf); tmnew->subject(buf);
mbox.getline(buf, MAX_TXT_LEN -1); mbox.getline(buf, MAX_TXT_LEN -1);
tmnew->body(buf); tmnew->body(buf);
_msgs.add(tmnew); _msgs.add(tmnew);
tmnew->number(_msgs.items()); tmnew->number(_msgs.items());
n_new++; n_new++;
} }
_lastpos = mbox.tellg(); _lastpos = mbox.tellg();
} }
TMessage* TMailbox::next_unread() TMessage* TMailbox::next_unread()
{ {
// returns next unread message; // returns next unread message;
if (_cnt == _msgs.items()) if (_cnt == _msgs.items())
return NULL; return NULL;
while(this->get(_cnt)->isread()) while(this->get(_cnt)->isread())
{ {
_cnt++; _cnt++;
if (_cnt == _msgs.items()) if (_cnt == _msgs.items())
return NULL; return NULL;
} }
n_new --; n_new --;
return this->get(_lastread = _cnt); return this->get(_lastread = _cnt);
} }
TMessage* TMailbox::next_read() TMessage* TMailbox::next_read()
{ {
// next read/unread message // next read/unread message
if (_cnt == _msgs.items()) if (_cnt == _msgs.items())
return NULL; return NULL;
if (!(this->get(_cnt)->isread())) if (!(this->get(_cnt)->isread()))
n_new--; n_new--;
return this->get(_cnt++); return this->get(_cnt++);
} }
TMessage* TMailbox::next(bool read) TMessage* TMailbox::next(bool read)
{ {
// next message, default unread // next message, default unread
TMessage* m = read ? next_read() : next_unread(); TMessage* m = read ? next_read() : next_unread();
if (m) if (m)
m->setread(); m->setread();
return m; return m;
} }
TMessage* TMailbox::next_s(char* s, bool read) TMessage* TMailbox::next_s(char* s, bool read)
{ {
// next message with matching subject // next message with matching subject
for (;;) for (;;)
{ {
if (_cnt == _msgs.items()) if (_cnt == _msgs.items())
return NULL; return NULL;
if (strcmp(this->get(_cnt)->subject(), s) == 0) if (strcmp(this->get(_cnt)->subject(), s) == 0)
{ {
if (read) break; if (read) break;
else else
{ {
if (!(this->get(_cnt)->isread())) break; if (!(this->get(_cnt)->isread())) break;
} }
} }
_cnt++; _cnt++;
} }
this->get(_cnt)->setread(); this->get(_cnt)->setread();
if (!read) n_new--; if (!read) n_new--;
return this->get(_cnt); return this->get(_cnt);
} }
TMessage* TMailbox::next_f(char* f, bool read) TMessage* TMailbox::next_f(char* f, bool read)
{ {
// next message with matching sender // next message with matching sender
for (;;) for (;;)
{ {
if (_cnt == _msgs.items()) if (_cnt == _msgs.items())
return NULL; return NULL;
if (strcmp(this->get(_cnt)->from(), f) == 0) if (strcmp(this->get(_cnt)->from(), f) == 0)
{ {
if (read) break; if (read) break;
else { if (!(this->get(_cnt)->isread())) break; } else { if (!(this->get(_cnt)->isread())) break; }
} }
_cnt++; _cnt++;
} }
this->get(_cnt)->setread(); this->get(_cnt)->setread();
if (!read) n_new--; if (!read) n_new--;
return this->get(_cnt); return this->get(_cnt);
} }
void TMailbox::send(TMessage& m) void TMailbox::send(TMessage& m)
{ {
CHECK(m.from().not_empty() && m.to().not_empty() && CHECK(m.from().not_empty() && m.to().not_empty() &&
(m.subject().not_empty || m.body().not_empty()), (m.subject().not_empty || m.body().not_empty()),
"Can't send partially empty message"); "Can't send partially empty message");
// strcpy(to_path, getenv("TMPDIR") == NULL ? MAILDIR : getenv("TMPDIR")); // strcpy(to_path, getenv("TMPDIR") == NULL ? MAILDIR : getenv("TMPDIR"));
TFilename to_path; to_path.tempdir(); TFilename to_path; to_path.tempdir();
to_path << "/" << m.to() << ".mbx"; to_path << "/" << m.to() << ".mbx";
ofstream fto(to_path, ios::app); ofstream fto(to_path, ios::app);
CHECK(fto.good(),"send: trouble opening mailbox file"); CHECK(fto.good(),"send: trouble opening mailbox file");
fto << m.from() << '\n' fto << m.from() << '\n'
<< m.subject() << '\n' << m.subject() << '\n'
<< m.body() << '\n'; << m.body() << '\n';
fto.close(); fto.close();
} }
void TMailbox::sendcmd(int argc, char* argv[], char* to) void TMailbox::sendcmd(int argc, char* argv[], char* to)
{ {
CHECK(0,"MAILBOX::COMMANDLINE INTERFACE NOT IMPLEMENTED"); CHECK(0,"MAILBOX::COMMANDLINE INTERFACE NOT IMPLEMENTED");
for (int i = 0; i < argc; i++) for (int i = 0; i < argc; i++)
{ {
// parse argv[i] // parse argv[i]
// create new message // create new message
// send it out // send it out
} }
} }
char* TMailbox::readcmd(char*) char* TMailbox::readcmd(char*)
{ {
// filters all messages to recipient and adds to to_path // filters all messages to recipient and adds to to_path
CHECK(0,"MAILBOX::COMMANDLINE INTERFACE NOT IMPLEMENTED"); CHECK(0,"MAILBOX::COMMANDLINE INTERFACE NOT IMPLEMENTED");
// TMessage* m; // TMessage* m;
return "NOT YET IMPLEMENTED"; return "NOT YET IMPLEMENTED";
} }
TMailbox::TMailbox(const char* appname) : _msgs(DEF_MSGS_CAPACITY) TMailbox::TMailbox(const char* appname) : _msgs(DEF_MSGS_CAPACITY)
{ {
if (appname == NULL) if (appname == NULL)
appname = main_app().name(); // myself; must be global appname = main_app().name(); // myself; must be global
_path.tempdir(); _path.tempdir();
// strcpy(_path, getenv("TMPDIR") == NULL ? MAILDIR : getenv("TMPDIR")); // strcpy(_path, getenv("TMPDIR") == NULL ? MAILDIR : getenv("TMPDIR"));
_path << "/" << appname << ".mbx"; _path << "/" << appname << ".mbx";
_lastread =0; _lastpos = 0l; _lastread =0; _lastpos = 0l;
n_new = 0; n_new = 0;
this->reread(); this->reread();
restart(); restart();
} }
TMailbox::~TMailbox() TMailbox::~TMailbox()
{ {
TMessage* m; TMessage* m;
// scan all remaining messages and erase mailbox // scan all remaining messages and erase mailbox
reread(); reread();
if (access(_path,0) == 0) if (access(_path,0) == 0)
remove(_path); remove(_path);
// send unread messages to myself // send unread messages to myself
while((m = next()) != NULL) while((m = next()) != NULL)
{ {
m->to(MainApp()->name()); m->to(main_app().name());
send(*m); send(*m);
} }
} }

View File

@ -769,7 +769,8 @@ bool TMask::on_key(KEY key)
} }
} }
} }
else return fld(_focus).on_key(key); else
return fld(_focus).on_key(key);
} }
return TRUE; return TRUE;
@ -1125,7 +1126,9 @@ void TMask::send_key(KEY key, short to) const
{ {
if (to == 0) if (to == 0)
{ {
dispatch_e_char(win(), key); WINDOW w = win();
if (w == NULL_WIN) w = _pagewin[0];
dispatch_e_char(w, key);
return; return;
} }

View File

@ -1,4 +1,4 @@
// $Id: maskfld.cpp,v 1.42 1994-11-07 13:50:56 guy Exp $ // $Id: maskfld.cpp,v 1.43 1994-11-10 13:44:30 guy Exp $
#include <xvt.h> #include <xvt.h>
#include <applicat.h> #include <applicat.h>
@ -1349,8 +1349,7 @@ TToken_string& TBrowse::create_siblings(TToken_string& siblings)
const TMask& mask = field().mask(); const TMask& mask = field().mask();
siblings = ""; // Azzera la lista dei campi associati siblings = ""; // Azzera la lista dei campi associati
if (!mask.is_running()) // if (!mask.is_running()) return siblings;
return siblings; // Non saprei come fare
TBit_array key(4); // Elenco delle chiavi gia' utilizzate TBit_array key(4); // Elenco delle chiavi gia' utilizzate
key.set(_cursor->key()); key.set(_cursor->key());
@ -1451,8 +1450,7 @@ default:
{ {
const short id = siblings.get_int((k - K_CTRL) << 1); const short id = siblings.get_int((k - K_CTRL) << 1);
TEdit_field& ef = (TEdit_field&)_fld->mask().field(id); TEdit_field& ef = (TEdit_field&)_fld->mask().field(id);
if (ef.mask().is_running()) ef.set_focus(); ef.set_focus();
else ef.mask().first_focus(-ef.dlg());
ef.mask().send_key(k = K_F9, 0); ef.mask().send_key(k = K_F9, 0);
} }
break; break;
@ -1652,7 +1650,7 @@ bool TEdit_field::parse_item(TScanner& scanner)
if (tabmaskname.not_empty()) if (tabmaskname.not_empty())
{ {
if (strncmp(MainApp()->name(), "ba3", 3) != 0) if (strncmp(main_app().name(), "ba3", 3) != 0)
{ {
tabmaskname.insert("MBATB", 0); tabmaskname.insert("MBATB", 0);
_browse->set_insert(tabmaskname); _browse->set_insert(tabmaskname);
@ -2412,7 +2410,7 @@ void TReal_field::create(WINDOW w)
TEdit_field::create(w); TEdit_field::create(w);
if (_flags.firm) if (_flags.firm)
set(::format("%ld", MainApp()->get_firm())); else set(::format("%ld", main_app().get_firm())); else
if (automagic()) if (automagic())
{ {
TDate d(TODAY); TDate d(TODAY);

File diff suppressed because it is too large Load Diff

View File

@ -1,50 +1,51 @@
#ifndef __MSKSHEET_H #ifndef __MSKSHEET_H
#define __MSKSHEET_H #define __MSKSHEET_H
#ifndef __MASK_H #ifndef __MASK_H
#include <mask.h> #include <mask.h>
#endif #endif
class TSpreadsheet; class TSpreadsheet;
typedef bool (*SPREADSHEET_NOTIFY)(int r, KEY k); typedef bool (*SPREADSHEET_NOTIFY)(int r, KEY k);
class TSheet_field : public TMask_field class TSheet_field : public TMask_field
{ {
TSpreadsheet* _sheet; TSpreadsheet* _sheet;
TToken_string _head; TToken_string _head;
protected: protected:
virtual word class_id() const; virtual word class_id() const;
virtual bool on_hit(); virtual bool on_hit();
virtual bool on_key(KEY k); virtual bool on_key(KEY k);
virtual void parse_head(TScanner& scanner); virtual void parse_head(TScanner& scanner);
virtual bool parse_item(TScanner& scanner); virtual bool parse_item(TScanner& scanner);
virtual void create(WINDOW parent); virtual void create(WINDOW parent);
virtual void exchange(bool show_value, const real& n); virtual void exchange(bool show_value, const real& n);
public: public:
TToken_string& row(int n); // Get/Create a new row TToken_string& row(int n); // Get/Create a new row
TArray& rows_array() const; // Get all rows TArray& rows_array() const; // Get all rows
int first_empty() const; // First empty row int first_empty() const; // First empty row
int items() const; // Number of rows int items() const; // Number of rows
int selected() const; // Number of current row int selected() const; // Number of current row
virtual void reset(); virtual void reset();
void destroy(int r = -1); // Destroy row void destroy(int r = -1); // Destroy row
void force_update(int r = -1);// Update data/screen void force_update(int r = -1);// Update data/screen
TMask& sheet_mask() const; TMask& sheet_mask() const;
void set_notify(SPREADSHEET_NOTIFY n); void set_notify(SPREADSHEET_NOTIFY n);
void enable_column(int col, bool on = TRUE); void enable_column(int col, bool on = TRUE);
void enable_cell(int row, int column, bool on = TRUE); void enable_cell(int row, int column, bool on = TRUE);
void disable_cell(int row, int column) { enable_cell(row, column, FALSE); } void disable_cell(int row, int column) { enable_cell(row, column, FALSE); }
bool cell_disabled(int row, int column) const;
TSheet_field(TMask* m);
virtual ~TSheet_field(); TSheet_field(TMask* m);
}; virtual ~TSheet_field();
};
#endif
#endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff