Eliminate tutte le dipendenze dal sistema operativo ricorrendo

all'header os_dep.h


git-svn-id: svn://10.65.10.50/trunk@6249 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1998-02-24 10:30:04 +00:00
parent 5fd426004a
commit d70d456f1e
9 changed files with 64 additions and 338 deletions

View File

@ -1,18 +1,14 @@
#define STRICT
#define XVT_INCL_NATIVE
#include <xinclude.h>
#include <applicat.h>
#include <colors.h>
#include <config.h>
#include <execp.h>
#include <msksheet.h>
#include <isam.h>
#include <msksheet.h>
#include <prefix.h>
#include <progind.h>
#include <stack.h>
#include <tabutil.h>
#include <utility.h>
#include <urldefid.h>
@ -553,7 +549,7 @@ bool TMenuitem::enabled() const
for (int e = 0; ext[e]; e++)
{
name.ext(ext[e]);
if (fexist(name))
if (name.exist())
break;
}
yes = ext[e] != NULL;
@ -988,7 +984,6 @@ protected: // TApplication
virtual bool create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual bool build_firm_data(long cod, bool flagcom = FALSE);
virtual long handler(WINDOW win, EVENT* ep);
protected:
@ -1018,120 +1013,6 @@ inline TMenu_application& app()
{ return (TMenu_application&)main_app(); }
bool TMenu_application::build_firm_data(long codditta, bool flagcom)
{
const char * const ndir = "/dir.gen";
const char * const ntrc = "/trc.gen";
TFilename s(firm2dir(codditta)); s << ndir;
bool exist = fexist(s);
if (!exist)
{
s = s.path(); s.rtrim(1); s << ntrc;
exist = fexist(s);
}
if (exist)
return message_box("Direttorio dati danneggiato, impossibile attivare la ditta %ld", codditta);
if (!yesno_box("Gli archivi della ditta %ld non esistono: si desidera generarli?", codditta))
return FALSE;
TLocalisamfile ditte(LF_NDITTE);
ditte.zero();
ditte.put(NDT_CODDITTA,codditta);
if (ditte.read(_isequal,_testandlock) == _islocked)
{
message_box("Archivi della ditta %ld in fase di creazione da parte di un altro utente.",codditta);
return FALSE;
}
set_autoload_new_files(yesno_box("Si desidera precaricare gli archivi standard"));
s = s.path(); s.rtrim(1);
if (!fexist(s) && !make_dir(s))
return error_box("Impossibile creare il direttorio della ditta %ld (%s)",
codditta, (const char*)s);
s << ndir;
if (!fcopy(&ndir[1], s))
return error_box("Impossibile copiare il file %s della ditta %ld",
&ndir[1], codditta);
s = s.path(); s << ntrc;
if (!fcopy(&ntrc[1], s))
return error_box("Impossibile copiare il file %s della ditta %ld",
ntrc, codditta);
TDir dir, dir1;
TTrec rec;
prefix().set("");
dir1.get(LF_DIR, _nolock, _nordir, _sysdirop);
const long maxeod0 = dir1.eod();
prefix().set_codditta(codditta);
dir.get(LF_DIR, _nolock, _nordir, _sysdirop);
if (dir.eod() == 0)
{
dir1.eod() = 1L;
dir1.put(LF_DIR, _nordir, _sysdirop);
dir.get(LF_DIR, _nolock, _nordir, _sysdirop);
}
const long maxeod1 = dir.eod();
if (maxeod0 > maxeod1)
{
dir.get(LF_DIR, _nolock, _nordir, _sysdirop);
dir.eod() = maxeod0;
dir.put(LF_DIR, _nordir, _sysdirop);
rec.zero();
}
TString mess("Generazione archivi della ditta "); mess << codditta;
TProgind p(maxeod0 ? maxeod0 : 1, mess, FALSE, TRUE, 70);
for (int i = LF_DIR + 1; i <= maxeod0; i++)
{
p.addstatus(1);
prefix().set("");
dir.get(i, _nolock, _nordir, _sysdirop);
rec.get(i);
bool create_now = dir.is_active();
prefix().set_codditta(codditta);
dir.put(i, _nordir, _sysdirop);
rec.put(i);
const char* name = dir.name();
dir.flags() = 0L;
create_now = create_now && (flagcom ? dir.is_com() : dir.is_firm());
if (dir.is_valid() && create_now)
{
TSystemisamfile f(i);
f.build(30);
}
else
{
dir.put(i, _nordir, _sysdirop);
rec.put(i);
}
}
TConfig c(CONFIG_STUDIO, "cg");
if (c.get_bool("StiReg"))
{
TTable reg("REG");
for (reg.first(_lock); reg.good(); reg.next(_lock))
{
reg.put("B9", "X");
reg.rewrite();
}
}
ditte.reread(_unlock);
set_firm(codditta);
set_autoload_new_files(TRUE);
return TRUE;
}
bool TMenu_application::menu_item_handler(TMask_field&f, KEY k)
{
@ -1390,13 +1271,11 @@ bool TMenu_application::check_user()
}
}
#if XVT_OS == XVT_OS_WIN
if (ok && utente != "PRASSI")
{
TConfig prawin(CONFIG_INSTALL, "Main");
prawin.set("User", utente);
}
#endif
return ok;
}

View File

@ -1,39 +1,21 @@
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <share.h>
// Serve per GetFreeSpace
#define XVT_INCL_NATIVE
#define STRICT
#include <applicat.h>
#include <extcdecl.h>
#include <execp.h>
#include <isam.h>
#include <mask.h>
#include <os_dep.h>
#include <prefix.h>
#include <printer.h>
#include <progind.h>
#include <urldefid.h>
#include <utility.h>
#include <validate.h>
#include <extcdecl.h>
#include <execp.h>
#include "ba1.h"
#include "ba1100.h"
#if XVT_OS==XVT_OS_SCOUNIX
#define DIRSIZ 14
struct direct
{
unsigned short d_ino;
char d_name[DIRSIZ];
};
#else
#include <errno.h>
#include <dos.h>
#endif
#define History_file "conv.his"
#define Dir_file "dir.gen"
#define Trc_file "trc.gen"
@ -105,49 +87,6 @@ HIDDEN bool browse_file_handler(TMask_field& f, KEY k)
return TRUE;
}
HIDDEN void build_filelist(const char *path, TArray & list)
{
#if XVT_OS==XVT_OS_SCOUNIX
struct directx
{
ino_t d_ino;
char d_name[DIRSIZ + 1];
} dlink;
int fd;
if ((fd = open(path, 0)) == -1)
return;
dlink.d_name[DIRSIZ] = '\0';
while(read(fd, &dlink, sizeof(struct direct)) ==
sizeof(struct direct))
{
if (dlink.d_ino > 0)
{
TFixed_string dname(dlink.d_name);
if (dname.find(".des") > 0 && dname[0] == 'd' && !isdigit(dname[1]))
list.add(dname.mid(1,3));
}
}
close(fd);
#else
_find_t f;
if (_dos_findfirst("recdesc/d???.des", _A_NORMAL, &f) == 0)
{
bool one_to_add = TRUE;
while (one_to_add)
{
TString80 dname(f.name);
if (!isdigit(dname[1]))
list.add(dname.mid(1,3));
one_to_add = _dos_findnext(&f) == 0;
}
}
#endif
}
TManutenzione_app::TManutenzione_app() : _browse(NULL), _rec(NULL), _mask(NULL), _firm(0), _level(0)
{
if (!fexist(Dir_file)) // controlla l'esistenza dei direttori standard (dir.gen e trc.gen)
@ -334,16 +273,17 @@ void TManutenzione_app::print()
}
delete pi;
TArray list;
build_filelist(DESCDIR, list);
items = list.items();
TString_array list;
items = list_files("recdesc/d???.des", list);
pi = new TProgind(items,"Stampa descrizione tabelle", TRUE, TRUE, 63);
TString16 tab;
for (i = 0; !pi->iscancelled() && i < items; i++)
{
TString & tab = (TString &) list[i];
tab = list.row(i).right(7);
tab.cut(3);
TRec_sheet r(4, tab);
pi->addstatus(1);
@ -556,12 +496,7 @@ void TManutenzione_app::dump_trc(const char * dir, const bool des_too, const lon
const char* TManutenzione_app::dumpfilename(const FileDes& dep) const
{
TFilename n; n.tempdir();
#if XVT_OS == XVT_OS_SCOUNIX
n << '/';
#else
n << '\\';
#endif
n << dep.SysName;
n.add(dep.SysName);
n.strip("$%");
n.ext("txt");
n.lower();
@ -700,7 +635,7 @@ void TManutenzione_app::edit_riga (long riga_sel, TToken_string& riga)
f.packfile();
f.packindex();
//Pack supplementare tramite FOXPRO (da togliere con CodeBase 6)
#if XVT_OS == XVT_OS_WIN
#if XVT_OS == XVT_OS_WIN || XVT_OS == XVT_OS_WIN32
if (logicnum > 2 && logicnum < 6 && f.status() == NOERR)
if (fexist("packaga.exe"))
{
@ -814,9 +749,7 @@ void TManutenzione_app::update_dir()
prompt = "Aggiornamento direttorio ";
if (is_com) prompt << "comune";
else prompt << " della ditta " << atol(pref) <<".";
#if XVT_OS == XVT_OS_WIN
prompt << " Memoria libera: " << (long)GetFreeSpace(0)/1024 << " Kbytes.";
#endif
prompt << " Memoria libera: " << long(os_get_free_memory()/1024) << " Kbytes.";
TProgind p(update_items ? update_items : 1, prompt, FALSE, TRUE, 70);
p.setstatus(1);
@ -1075,9 +1008,7 @@ void TManutenzione_app::convert_dir()
if (is_com) s << "comuni.";
else s << "della ditta " << atol (pref) << ".";
#if XVT_OS == XVT_OS_WIN
s << " Memoria libera: " << (long)GetFreeSpace(0)/1024 << " Kbytes.";
#endif
s << " Memoria libera: " << long(os_get_free_memory()/1024) << " Kbytes.";
TProgind p(update_items ? update_items : 1, s, FALSE, TRUE, 70);
p.setstatus(1);
@ -1201,11 +1132,8 @@ void TManutenzione_app::load_des()
TFilename fn;
TDir td,new_dir;
TTrec tr;
#if XVT_OS == XVT_OS_WIN
struct _find_t c_file;
#endif
int ln = items,last_newln = items;
bool firstime = TRUE,ok;
tr.zero();
fn << DESCDIR << "/level.dir";
@ -1219,45 +1147,39 @@ void TManutenzione_app::load_des()
//unlink(fn);
}
// scandisce *.dir in RECDESC tramite dos_findfirst e _dos_findnext
// scandisce *.dir in RECDESC
// eventuali "buchi" oltre al numero attuale di items vengono rimpiazzati
// con tracciati vuoti.
fn.format("%s/f*.dir",DESCDIR);
#if XVT_OS == XVT_OS_WIN
do
TString_array list;
const int totfiles = list_files(fn, list);
for (int n = 0; n < totfiles; n++)
{
if (firstime)
fn = list.row(n);
infile.open(fn);
infile >> td;
ln = td.num();
const bool is_new = ln > last_newln; // memorizza l'ultimo record scritto come nuovo
if (is_new) // aggiunge i files che mancano
{
ok = _dos_findfirst(fn, _A_NORMAL, &c_file ) == 0;
firstime = FALSE;
}
fn.format("%s/%s",DESCDIR,c_file.name);
if (ok)
{
infile.open(fn);
infile >> td;
ln = td.num();
const bool is_new = ln > last_newln; // memorizza l'ultimo record scritto come nuovo
if (is_new) // aggiunge i files che mancano
for (int i = last_newln+1; i<ln; i++)
{
for (int i = last_newln+1; i<ln; i++)
{
ws.format("$f%d",i);
new_dir.set(ws,0L,-1L,"File non presente","");
new_dir.put(i,_nordir,_sysdirop);
tr.put(i);
}
last_newln = ln;
ws.format("$f%d",i);
new_dir.set(ws,0L,-1L,"File non presente","");
new_dir.put(i,_nordir,_sysdirop);
tr.put(i);
}
td.put(ln,_nordir,_sysdirop);
if (is_new)
tr.put(ln);
infile.close();
//unlink(fn);
last_newln = ln;
}
} while( _dos_findnext( &c_file ) == 0 );
#endif
td.put(ln,_nordir,_sysdirop);
if (is_new)
tr.put(ln);
infile.close();
//unlink(fn);
}
// Aggiorna il numero di files presenti in totale nel direttorio
if (last_newln > items) // rialloca openf altrimenti la TPrefix::closeall() provoca un grazioso errore in applicazione
{
@ -1401,9 +1323,8 @@ void TManutenzione_app::update()
const TRecnotype rec = ditte.recno();
const long codditta = ditte.get_long("CODDITTA");
mxs = s;
#if XVT_OS == XVT_OS_WIN
mxs << " Ditta " << codditta << ". Memoria libera: " << (long)GetFreeSpace(0)/1024 << " Kbytes.";
#endif
mxs << " Ditta " << codditta << ". Memoria libera: "
<< long(os_get_free_memory()/1024) << " Kbytes.";
p.addstatus(1);
p.set_text(mxs);
if (codditta > _history_firm && prefix().exist(codditta))

View File

@ -797,7 +797,7 @@ bool TAttivazione_moduli::aggiorna_listino_handler(TMask_field& fld, KEY key)
TInstall_ini ini;
TFilename name = ini.get("DiskPath");
name.add(ini.default_name());
while (!fexist(name))
while (!name.exist())
{
TMask msk("Aggiornamento listino", 1, -1, -1, 60, 4);
msk.add_string(DLG_USER, 0, "Percorso", 1, 1, 50);

View File

@ -1,16 +1,13 @@
#include <dos.h>
#define XVT_INCL_NATIVE
#include <applicat.h>
#include <defmask.h>
#include <execp.h>
#include <golem.h>
#include <msksheet.h>
#include <os_dep.h>
#include <prefix.h>
#include <progind.h>
#include <urldefid.h>
#include <utility.h>
#include <text.h>
#include <utility.h>
#include "ba1.h"
#include "ba1600.h"
@ -991,22 +988,12 @@ bool TFascicolator_mask::move_file(const TFilename& file, const char* dir) const
bool space_ok = FALSE;
while (!space_ok)
{
int disk = 0;
if (dest[1] == ':')
{
const char letter = toupper(dest[0]);
disk = 'A' - letter + 1;
}
struct _diskfree_t drive;
_dos_getdiskfree(disk, &drive);
const unsigned requested_clusters = unsigned(filesize / drive.sectors_per_cluster / drive.bytes_per_sector) + 1;
space_ok = requested_clusters <= drive.avail_clusters;
space_ok = ::os_test_disk_free_space(dest, filesize);
if (!space_ok)
{
TString msg(128);
msg << "Lo spazio sull'unita' e' insufficiente";
if (GetDriveType(disk-1) == DRIVE_REMOVABLE)
if (::os_is_removable_drive(dest))
{
msg << ":\nInserire un nuovo disco e ritentare?";
if (!yesno_box(msg))
@ -1267,13 +1254,12 @@ bool TFascicolator_mask::zip_module(const TString& main_module, bool agg, int pa
ini.set("Dischi", disks, main_module); // Aggiorna install.ini
ini.export_paragraph(main_module, sommario); // Aggiorna sommario
const char drive = toupper(path[0]);
const bool floppy = (GetDriveType(drive - 'A') == DRIVE_REMOVABLE) && (path[1] == ':');
const bool floppy = ::os_is_removable_drive(path);
for (int d = 1; d <= disks && !aborted; d++)
{
if (floppy)
message_box("Inserire il disco %d di %d nell'unita' %c:", d, disks, drive);
message_box("Inserire il disco %d di %d nell'unita':", d, disks);
// Costruisco il nome del file da copiare su dischetto
TFilename src(archivio);

View File

@ -1,9 +1,7 @@
#include <dos.h>
#define XVT_INCL_NATIVE
#include <applicat.h>
#include <colors.h>
#include <execp.h>
#include <execp.h>
#include <os_dep.h>
#include <progind.h>
#include <sheet.h>
#include <utility.h>
@ -13,6 +11,7 @@
#include "ba1500.h"
#include "ba1600.h"
#include "ba1700a.h"
// definizioni delle colonne dello sheet
#define C_MODULE 1
#define C_CODE 2
@ -24,14 +23,6 @@
#define C_CURRDATAREL 8
#define C_ISPATCH 9
HIDDEN int noyes_box(const char* msg)
{
MessageBeep(MB_ICONQUESTION);
int r = MessageBox(GetFocus(), msg, "RICHIESTA",
MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
return r == IDYES;
}
HIDDEN int compare_version(const char* v1, int p1, const char* v2, int p2)
{
TString16 ver1(v1), ver2(v2);
@ -419,16 +410,13 @@ bool TInstaller_mask::move_file(const TFilename& from, const TFilename& file, co
const char letter = toupper(dest[0]);
disk = 'A' - letter + 1;
}
struct _diskfree_t drive;
_dos_getdiskfree(disk, &drive);
const unsigned requested_clusters = unsigned(filesize / drive.sectors_per_cluster / drive.bytes_per_sector) + 1;
space_ok = requested_clusters <= drive.avail_clusters;
space_ok = ::os_test_disk_free_space(dest, filesize);
if (!space_ok)
{
TString msg;
msg << "Lo spazio sull'unita' e' insufficiente";
if (GetDriveType(disk-1) == DRIVE_REMOVABLE)
if (::os_is_removable_drive(dest))
{
msg << ":\nInserire un nuovo disco e ritentare?";
if (!yesno_box(msg))
@ -558,11 +546,8 @@ bool TInstaller_mask::install(const TString& module, int patchlevel)
if (ok)
{
struct _diskfree_t drive;
_dos_getdiskfree(0, &drive);
const long required = fsize(cmdline) * (dischi-d+1) * 4;
const unsigned requested_clusters = unsigned(required / drive.sectors_per_cluster / drive.bytes_per_sector) + 1;
if (requested_clusters >= drive.avail_clusters)
if (::os_test_disk_free_space("", required))
{
ok = yesno_box("Lo spazio su disco potrebbe essere insufficiente:\n"
"Si desidera continuare ugualmente?");
@ -859,8 +844,7 @@ TInstaller_mask::TInstaller_mask()
set(F_PATH, path);
const char lettera = toupper(path[0]);
const bool floppy = (path.len() > 1) && path[1] == ':' &&
GetDriveType(lettera - 'A') == DRIVE_REMOVABLE;
const bool floppy = ::os_is_removable_drive(path);
if (path.not_empty() && !floppy)
autoload();

View File

@ -17,10 +17,6 @@ int main(int argc, char** argv)
rt = ba2100(argc, argv); break;
case 1:
rt = ba2200(argc, argv); break;
#if XVT_OS == XVT_OS_SCOUNIX
case 2:
rt = ba2300(argc, argv) ; break;
#endif
case 3:
rt = ba2400(argc, argv) ; break;
case 4:

View File

@ -1,33 +1,22 @@
#include <direct.h>
#define XVT_INCL_NATIVE
#define STRICT
#include <applicat.h>
#include <colors.h>
#include <config.h>
#include <archives.h>
#include <isam.h>
#include <mask.h>
#include <prefix.h>
#include <progind.h>
#include <urldefid.h>
#include <utility.h>
#include <archives.h>
#include "ba2200.h"
///////////////////////////////////////////////////////////
// Archiving application
///////////////////////////////////////////////////////////
class TArchive_app : public TApplication
class TArchive_app : public TSkeleton_application
{
TArchive _arc;
protected:
virtual bool create();
virtual bool menu(MENU_TAG);
virtual void main_loop();
static bool test_firm(TMask_field& f, KEY k);
KEY query(long& firm, char& floppy, TString& desc, bool& tmp) const;
@ -40,8 +29,6 @@ public:
bool TArchive_app::create()
{
TApplication::create();
bool ok = TRUE;
TIsamfile utenti(LF_USER, FALSE);
@ -58,7 +45,7 @@ bool TArchive_app::create()
utenti.close();
if (ok)
dispatch_e_menu(BAR_ITEM(1));
ok = TSkeleton_application::create();
return ok;
}
@ -97,12 +84,12 @@ KEY TArchive_app::query(long& firm, char& floppy, TString& desc, bool& temp) con
return k;
}
bool TArchive_app::menu(MENU_TAG)
void TArchive_app::main_loop()
{
KEY k;
long firm;
char floppy;
TString80 desc;
TString desc(80);
bool temp;
while ((k = query(firm, floppy, desc, temp)) != K_QUIT)
@ -110,8 +97,6 @@ bool TArchive_app::menu(MENU_TAG)
if (k == K_SAVE) _arc.backup(firm, floppy, desc);
else _arc.restore(firm, floppy, temp);
}
return FALSE;
}
int ba2200(int argc, char* argv[])

View File

@ -4,9 +4,6 @@
// ************************************************************************
#include "ba6100.h"
static const char sep[] =
"-----------------------------------------------------------------"
"-----------------------------------------------------------------" ;
void TAnaprint_app::set_scheda_anagiu()
{
@ -945,24 +942,14 @@ void TAnaprint_app::set_headers()
{
case anafis:
case anagiu:
#if XVT_OS != XVT_OS_SCOUNIX
set_background("W1l{1 2 132 2}W4l{1 4 132 4}");
#else
set_header(2,(const char*)sep);
set_header(4,(const char*)sep);
#endif
set_header(1,"@bRUBRICA PERSONE %s@40gStudio@53gData @< pag. @#",
_pr_what == anagiu ? "GIURIDICHE" : "FISICHE");
set_header(3,"@iCodice Cognome e nome");
set_header(5,"");
break;
case nditte:
#if XVT_OS != XVT_OS_SCOUNIX
set_background("W1l{1 2 132 2}W4l{1 4 132 4}");
#else
set_header(2,(const char*)sep);
set_header(4,(const char*)sep);
#endif
set_header(1,"@bRUBRICA DITTE@40gStudio@53gData @< pag. @#");
set_header(3,"@iCodice Cognome e nome");
set_header(5,"");

View File

@ -1,20 +1,11 @@
#include <mask.h>
#include <printapp.h>
#include <relation.h>
#include <tabutil.h>
#include <utility.h>
#include <sort.h>
#include <lffiles.h>
#include <comuni.h>
#include "ba6.h"
#include "ba6200.h"
const MAXSTR = 128;
static char __tmp [MAXSTR];
static TFixed_string tmp (__tmp, MAXSTR);
class BA6200_application : public TPrintapp
{
TRelation* _rel;
@ -269,11 +260,8 @@ bool BA6200_application::user_destroy()
int ba6200(int argc, char* argv[])
{
BA6200_application a;
a.run(argc, argv, "Stampa Comuni");
return 0;
}