1055 lines
25 KiB
C++
Executable File
1055 lines
25 KiB
C++
Executable File
// EDIT Printer File
|
|
// Utility for printer configuration files editing
|
|
// by MB SEP 1993
|
|
|
|
#ifndef __APPLICAT_H
|
|
#include <applicat.h>
|
|
#endif
|
|
|
|
#ifndef __MASK_H
|
|
#include <mask.h>
|
|
#endif
|
|
|
|
#ifndef __CHECKS_H
|
|
#include <checks.h>
|
|
#endif
|
|
|
|
#ifndef __STRINGS_H
|
|
#include <strings.h>
|
|
#endif
|
|
|
|
#ifndef __REAL_H
|
|
#include <real.h>
|
|
#endif
|
|
|
|
#ifndef __PRINTER_H
|
|
#include <printer.h>
|
|
#endif
|
|
|
|
#ifndef __UTILITY_H
|
|
#include <utility.h>
|
|
#endif
|
|
|
|
#define __BA2300_CPP
|
|
#include <ba2300.h>
|
|
|
|
FILE* mirror;
|
|
FILE* mirror2;
|
|
FILE* current;
|
|
FILE* printerlist;
|
|
FILE* codes;
|
|
FILE* names;
|
|
FILE* defcodes;
|
|
FILE* defnames;
|
|
|
|
int selprinter=1;
|
|
|
|
|
|
void build_list_file (FILE* inputfile, TFilename& outputfile)
|
|
{
|
|
FILE* printerlist;
|
|
TString junk;
|
|
int prog=0;
|
|
|
|
printerlist=fopen(outputfile, "w");
|
|
fseek(inputfile, 0, SEEK_SET);
|
|
while (fgets(__tmp_string, 256, inputfile))
|
|
{
|
|
junk=__tmp_string;
|
|
if (junk.find("[")!=-1 && junk.find("[Default]")==-1 && junk.find("[End of File]")==-1)
|
|
{
|
|
junk.ltrim(1);
|
|
junk.rtrim(2);
|
|
fprintf(printerlist, " ITEM \"%i|%s\"\n", prog++, (char*)junk);
|
|
}
|
|
}
|
|
fclose(printerlist);
|
|
}
|
|
|
|
bool seek_default_printer (FILE* inputfile, TString& newprinter, long* position, bool justafter)
|
|
{
|
|
TString junk;
|
|
|
|
fseek(inputfile, 0, SEEK_SET);
|
|
fgets(__tmp_string, 256, inputfile);
|
|
junk=__tmp_string;
|
|
if (junk.find("[")!=-1)
|
|
{
|
|
if (junk.find("Default")!=-1)
|
|
{
|
|
fgets(__tmp_string, 256, inputfile);
|
|
junk=__tmp_string;
|
|
junk.rtrim(1);
|
|
}
|
|
else
|
|
{
|
|
junk.ltrim(1);
|
|
junk.rtrim(2);
|
|
}
|
|
newprinter=junk;
|
|
return seek_printer(inputfile, newprinter, position, justafter);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
bool seek_printer (FILE* inputfile, TString& printer, long* position, bool justafter)
|
|
{
|
|
TString junk;
|
|
long pos;
|
|
char* noteof;
|
|
|
|
fseek(inputfile, 0, SEEK_SET);
|
|
do
|
|
{
|
|
pos=ftell(inputfile);
|
|
noteof=fgets(__tmp_string, 256, inputfile);
|
|
junk=__tmp_string;
|
|
}
|
|
while (!((junk.find(printer)!=-1 && junk.find("[")!=-1) || !noteof));
|
|
|
|
if (!noteof) return FALSE;
|
|
else
|
|
if (justafter)
|
|
{
|
|
*position=ftell(inputfile);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
*position=pos;
|
|
fseek(inputfile, pos, SEEK_SET);
|
|
return TRUE;
|
|
}
|
|
}
|
|
bool erase_file (TFilename& filename)
|
|
{
|
|
FILE* junkfile;
|
|
|
|
if ((junkfile=fopen(filename, "r"))!=0)
|
|
{
|
|
fclose (junkfile);
|
|
#if XVT_OS == XVT_OS_SCOUNIX
|
|
sprintf (__tmp_string, "rm %s", (char*)filename);
|
|
system (__tmp_string);
|
|
#else
|
|
remove(filename);
|
|
#endif
|
|
return TRUE;
|
|
} else return FALSE;
|
|
}
|
|
|
|
bool is_present (FILE* inputfile, TString& printer)
|
|
{
|
|
TFilename mirror("mirror");
|
|
TString junk;
|
|
FILE* printerlist;
|
|
bool found=FALSE;
|
|
|
|
build_list_file (inputfile, mirror);
|
|
printerlist=fopen(mirror, "r");
|
|
while (fgets(__tmp_string, 256, printerlist) && !found)
|
|
{
|
|
junk=__tmp_string;
|
|
if (junk.find(printer)!=-1) found=TRUE;
|
|
}
|
|
fclose(printerlist);
|
|
|
|
return found;
|
|
}
|
|
|
|
bool change_default_printer (TFilename& inputfilename, FILE* inputfile, TString& newdefprinter)
|
|
{
|
|
FILE* mirror;
|
|
TFilename mirrorname("mirror");
|
|
TString junk;
|
|
|
|
if (is_present(inputfile, newdefprinter))
|
|
{
|
|
mirror=fopen (mirrorname, "w");
|
|
fseek (inputfile, 0, SEEK_SET);
|
|
fgets (__tmp_string, 256, inputfile);
|
|
junk=__tmp_string;
|
|
if (junk.find("[Default]")!=-1)
|
|
{
|
|
fputs(__tmp_string, mirror);
|
|
fgets(__tmp_string, 256, inputfile);
|
|
fgets(__tmp_string, 256, inputfile);
|
|
}
|
|
else fprintf(mirror, "[Default]\n");
|
|
fprintf(mirror, "%s\n", (char*)newdefprinter);
|
|
fputs(__tmp_string, mirror);
|
|
while (fgets(__tmp_string, 256, inputfile))
|
|
fputs (__tmp_string, mirror);
|
|
fclose (mirror);
|
|
fclose (inputfile);
|
|
erase_file (inputfilename);
|
|
rename (mirrorname, inputfilename);
|
|
inputfile = fopen(inputfilename, "r");
|
|
return TRUE;
|
|
}
|
|
else return FALSE;
|
|
}
|
|
|
|
bool build_code_files (FILE* input, TFilename& outcdfile, TFilename& outnmfile, TString& printer)
|
|
{
|
|
TString junk;
|
|
TToken_string j2;
|
|
long pos;
|
|
int i;
|
|
FILE *codes, *names;
|
|
|
|
if (is_present(input, printer))
|
|
{
|
|
codes=fopen(outcdfile, "w");
|
|
names=fopen(outnmfile, "w");
|
|
seek_printer (input, printer, &pos, TRUE);
|
|
for (i=0; i<7; i++)
|
|
fgets(__tmp_string, 256, input);
|
|
fgets(__tmp_string, 256, input);
|
|
junk=__tmp_string;
|
|
i=0;
|
|
while (junk.find("[")==-1)
|
|
{
|
|
junk.ltrim(14);
|
|
j2=junk;
|
|
j2.restart();
|
|
fprintf(names, " ITEM \"%i|%s\"\n", i++, (char*)j2.get());
|
|
fputs((char*)j2.get(), codes);
|
|
fgets(__tmp_string, 256, input);
|
|
junk=__tmp_string;
|
|
}
|
|
fclose (names);
|
|
fclose (codes);
|
|
return TRUE;
|
|
}
|
|
else return FALSE;
|
|
}
|
|
|
|
void build_list_box (FILE* names, TMask& mask, short field)
|
|
{
|
|
TString replace1, replace2, junk;
|
|
|
|
replace1.cut(0);
|
|
replace2.cut(0);
|
|
while(fgets(__tmp_string, 256, names))
|
|
{
|
|
if (__tmp_string[0]!='\n')
|
|
{
|
|
if (replace1.not_empty()) replace1 << '|';
|
|
if (replace2.not_empty()) replace2 << '|';
|
|
junk=__tmp_string;
|
|
junk.ltrim(8);
|
|
while (junk[0] && junk[0]!='|')
|
|
{
|
|
replace1 << junk[0];
|
|
junk.ltrim(1);
|
|
}
|
|
junk.ltrim(1);
|
|
junk.rtrim(2);
|
|
replace2 << (char*)junk;
|
|
}
|
|
}
|
|
((TList_field&)mask.field(field)).replace_items(replace1, replace2);
|
|
}
|
|
|
|
void place_codes_on_file (FILE* names, FILE* codes, FILE* output)
|
|
{
|
|
TString name;
|
|
TString junk;
|
|
|
|
while (fgets(__tmp_string, 256, names))
|
|
{
|
|
name=__tmp_string;
|
|
item2prname(name, junk);
|
|
name.cut(0);
|
|
name << "Code = " << junk << "|";
|
|
if (fgets(__tmp_string, 256, codes))
|
|
if (!(__tmp_string=="\n"||__tmp_string==""))
|
|
fprintf(output, "%s%s", (char*)name, __tmp_string);
|
|
}
|
|
}
|
|
|
|
void item2prname (TString& item, TString& name)
|
|
{
|
|
name=item;
|
|
name.ltrim(8);
|
|
name.rtrim(2);
|
|
if (name.not_empty())
|
|
while (name[0]!='|') name.ltrim(1);
|
|
name.ltrim(1);
|
|
}
|
|
|
|
bool seek_first_printer(FILE* input, TString& printer, long* pos, bool justafter)
|
|
{
|
|
return seek_printer_no(input, 1, printer, pos, justafter);
|
|
}
|
|
|
|
bool seek_printer_no(FILE* input, int number, TString& printer, long* pos, bool justafter)
|
|
{
|
|
FILE* listfile;
|
|
TString junk;
|
|
char* noteof=0;
|
|
|
|
if (number==0) return FALSE;
|
|
build_list_file(input, (TFilename)"mirror");
|
|
listfile=fopen("mirror", "r");
|
|
for (int i=0; i<number; i++) noteof=fgets(__tmp_string, 256, listfile);
|
|
if (!noteof) return FALSE;
|
|
junk=__tmp_string;
|
|
item2prname(junk, printer);
|
|
fclose(listfile);
|
|
return seek_printer(input, printer, pos, justafter);
|
|
}
|
|
class EPF_Application : public TApplication
|
|
{
|
|
bool _isnamed;
|
|
bool _haschanged;
|
|
bool _isopened;
|
|
|
|
TFilename _mirrorname;
|
|
TFilename _mir2name;
|
|
TFilename _currentname;
|
|
TFilename _plname;
|
|
TFilename _cdname;
|
|
TFilename _dcdname;
|
|
TFilename _nmname;
|
|
TFilename _dnmname;
|
|
|
|
DIRECTORY _workdir;
|
|
|
|
TString _currentprinter;
|
|
|
|
public:
|
|
// Constructor
|
|
EPF_Application ();
|
|
|
|
// Destructor
|
|
~EPF_Application ();
|
|
|
|
protected:
|
|
int accept_current_name (bool mode);
|
|
bool create_box ();
|
|
void delete_printer ();
|
|
void insert_new_info (TMask& mask);
|
|
void make_mirror ();
|
|
void reset_mirror ();
|
|
void save_box (bool saveas=FALSE);
|
|
void save_file (bool saveas=FALSE);
|
|
bool select_printer ();
|
|
void set_field (TMask& mask, int fldid, char* str, bool inrun);
|
|
void set_files_to_default ();
|
|
void update_mirror (TMask& mask);
|
|
|
|
public:
|
|
void fill_mask (TMask& mask, bool inrun=FALSE);
|
|
void fill_print_codes (TMask& mask);
|
|
virtual bool menu (MENU_TAG);
|
|
void set_current_printer (TString newprinter) { _currentprinter=newprinter; }
|
|
void update_codes_file (TString str, int pos);
|
|
void update_names_file (TString& str, int items);
|
|
};
|
|
|
|
bool codes_on_key (TMask_field& f, KEY key);
|
|
bool add_on_key (TMask_field& f, KEY key);
|
|
bool names_on_key (TMask_field& f, KEY key);
|
|
bool prev_on_key (TMask_field& f, KEY key);
|
|
bool next_on_key (TMask_field& f, KEY key);
|
|
|
|
// global application
|
|
EPF_Application epf;
|
|
|
|
// Constructor
|
|
EPF_Application::EPF_Application ():
|
|
_plname(FILE_PRINTERS),
|
|
_cdname(FILE_CODES),
|
|
_nmname(FILE_NAMES),
|
|
_dcdname(FILE_DEF_CODES),
|
|
_dnmname(FILE_DEF_NAMES),
|
|
_isnamed(FALSE),
|
|
_isopened(FALSE),
|
|
_haschanged(FALSE),
|
|
_currentname("printer.ini")
|
|
{
|
|
_mirrorname=tmpnam(NULL);
|
|
_mir2name=tmpnam(NULL);
|
|
reset_mirror ();
|
|
set_files_to_default ();
|
|
reset_mirror();
|
|
make_mirror();
|
|
_isopened=TRUE;
|
|
}
|
|
|
|
// Destructor
|
|
EPF_Application::~EPF_Application ()
|
|
{
|
|
erase_file(_cdname);
|
|
erase_file(_nmname);
|
|
erase_file(_plname);
|
|
}
|
|
|
|
// Handlers for masks
|
|
bool names_on_key (TMask_field& f, KEY key)
|
|
{
|
|
if (key==K_SPACE)
|
|
epf.fill_print_codes (f.mask());
|
|
return TRUE;
|
|
}
|
|
|
|
bool add_on_key (TMask_field& f, KEY key)
|
|
{
|
|
if (key==' ')
|
|
{
|
|
TMask addmask(MSK_4);
|
|
TString junk;
|
|
int items;
|
|
|
|
addmask.run();
|
|
f.mask().set_focus();
|
|
junk.cut(0);
|
|
items = ((TList_field&)((TMask&)f.mask()).field(MSK_23_NAMES)).items();
|
|
junk << items << "|" << addmask.get(MSK_4_CODE);
|
|
((TList_field&)((TMask&)f.mask()).field(MSK_23_NAMES)).add_item(junk);
|
|
junk = addmask.get(MSK_4_CODE);
|
|
epf.update_names_file (junk, items);
|
|
epf.fill_print_codes (f.mask());
|
|
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool codes_on_key (TMask_field& f, KEY key)
|
|
{
|
|
TString junk;
|
|
int intjunk;
|
|
|
|
if (key==K_TAB)
|
|
{
|
|
if (f.focusdirty())
|
|
{
|
|
junk = f.mask().get(MSK_23_NAMES);
|
|
intjunk = atoi(junk);
|
|
epf.update_codes_file (f.mask().get(MSK_23_CODES), intjunk);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool prev_on_key (TMask_field& f, KEY key)
|
|
{
|
|
TString printer;
|
|
long pos;
|
|
|
|
if (key==' ')
|
|
if (seek_printer_no(mirror, selprinter-1, printer, &pos))
|
|
{
|
|
selprinter--;
|
|
build_code_files (mirror, (TFilename)FILE_CODES, (TFilename)FILE_NAMES, printer);
|
|
names=fopen(FILE_NAMES, "r");
|
|
build_list_box (names, f.mask(), MSK_23_NAMES);
|
|
fclose(names);
|
|
epf.set_current_printer(printer);
|
|
epf.fill_mask(f.mask(), TRUE);
|
|
epf.fill_print_codes(f.mask());
|
|
}
|
|
f.mask().show();
|
|
return TRUE;
|
|
}
|
|
|
|
bool next_on_key (TMask_field& f, KEY key)
|
|
{
|
|
TString printer;
|
|
long pos;
|
|
|
|
if (key==' ')
|
|
if (seek_printer_no(mirror, selprinter+1, printer, &pos))
|
|
{
|
|
selprinter++;
|
|
build_code_files (mirror, (TFilename)FILE_CODES, (TFilename)FILE_NAMES, printer);
|
|
names=fopen(FILE_NAMES, "r");
|
|
build_list_box (names, f.mask(), MSK_23_NAMES);
|
|
fclose(names);
|
|
epf.set_current_printer(printer);
|
|
epf.fill_mask(f.mask(), TRUE);
|
|
epf.fill_print_codes(f.mask());
|
|
}
|
|
f.mask().show();
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// Methods
|
|
void EPF_Application::save_box(bool saveas)
|
|
{
|
|
if (yesno_box("Il file corrente e' stato modificato: vuoi salvarlo?"))
|
|
save_file(saveas);
|
|
}
|
|
|
|
int EPF_Application::accept_current_name(bool mode)
|
|
{
|
|
FILE_SPEC filetoopen;
|
|
FL_STATUS junk;
|
|
TString typespec(EXTENSION);
|
|
char dirjunk[50];
|
|
|
|
// ritorna 0 se il file esiste
|
|
// 1 se il file non esiste
|
|
// 2 se l'operazioe e' stata interrotta
|
|
|
|
|
|
#if XVT_OS == XVT_OS_DOS
|
|
typespec.upper();
|
|
#endif
|
|
|
|
get_dir(&_workdir);
|
|
strcpy(filetoopen.type, (char*)typespec);
|
|
filetoopen.dir=_workdir;
|
|
if (mode==OPEN) junk=open_file_dlg(&filetoopen, "Scegli un file di configurazione stampanti");
|
|
else junk=save_file_dlg(&filetoopen, "Digita il nome del nuovo file");
|
|
if (junk==FL_BAD || junk==FL_CANCEL) return 2;
|
|
if (mode==OPEN) _isnamed=TRUE;
|
|
dir_to_str(&(filetoopen.dir), dirjunk, 50);
|
|
_currentname.cut(0);
|
|
_currentname << dirjunk << '/' << filetoopen.name;
|
|
if (mode==OPEN) if ((current =fopen(_currentname, "r"))==NULL) return 1;
|
|
else
|
|
{
|
|
fclose(current );
|
|
return 0;
|
|
}
|
|
else return 0;
|
|
}
|
|
|
|
void EPF_Application::reset_mirror()
|
|
{
|
|
erase_file(_mirrorname);
|
|
mirror =fopen(_mirrorname, "a+");
|
|
}
|
|
|
|
bool EPF_Application::create_box()
|
|
{
|
|
return yesno_box("Il file specificato non esiste, vuoi crearlo?");
|
|
}
|
|
|
|
void EPF_Application::make_mirror()
|
|
{
|
|
fseek(mirror , 0, SEEK_SET);
|
|
current =fopen(_currentname, "r");
|
|
while (fgets(__tmp_string, 256, current ))
|
|
fputs(__tmp_string, mirror );
|
|
fclose(current );
|
|
}
|
|
|
|
void EPF_Application::update_mirror (TMask& mask)
|
|
{
|
|
TString linetoadd;
|
|
TFilename junk;
|
|
|
|
|
|
mirror2 =fopen(_mir2name, "w");
|
|
fseek(mirror , 0, SEEK_SET);
|
|
|
|
fgets(__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
while (linetoadd.find(_currentprinter)==-1 || linetoadd.find("[")==-1)
|
|
{
|
|
fputs (__tmp_string, mirror2 );
|
|
fgets (__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
}
|
|
linetoadd.cut(0);
|
|
linetoadd << "[" << (char*)mask.get(MSK_23_LOGIC) << ']' << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Printer type= " << (char*)mask.get(MSK_23_TYPE) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Device name = " << (char*)mask.get(MSK_23_PHYSIC) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Filter name = " << (char*)mask.get(MSK_23_FILTER) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Normal = " << (char*)mask.get(MSK_23_NORMAL) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Bold = " << (char*)mask.get(MSK_23_BOLD) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Italic = " << (char*)mask.get(MSK_23_ITALIC) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Underlined = " << (char*)mask.get(MSK_23_UNDERLINED) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
|
|
names=fopen(FILE_NAMES, "r");
|
|
codes=fopen(FILE_CODES, "r");
|
|
place_codes_on_file (names, codes, mirror2 );
|
|
fgets(__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
while(linetoadd.find("[")==-1)
|
|
{
|
|
fgets (__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
}
|
|
fputs (__tmp_string, mirror2 );
|
|
while (fgets(__tmp_string, 256, mirror ))
|
|
{
|
|
fputs (__tmp_string, mirror2 );
|
|
}
|
|
|
|
#if XVT_OS != XVT_OS_SCOUNIX
|
|
fflush(mirror2 );
|
|
#endif
|
|
fclose(mirror2 );
|
|
fclose(mirror );
|
|
fclose(names);
|
|
fclose(codes);
|
|
junk=_mirrorname;
|
|
_mirrorname=_mir2name;
|
|
_mir2name=junk;
|
|
mirror =fopen(_mirrorname, "a+");
|
|
}
|
|
|
|
void EPF_Application::delete_printer ()
|
|
{
|
|
TString linetoadd;
|
|
TFilename junk;
|
|
|
|
mirror2 =fopen(_mir2name, "w");
|
|
fseek(mirror , 0, SEEK_SET);
|
|
|
|
fgets(__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
while (linetoadd.find(_currentprinter)==-1 || linetoadd.find("[")==-1)
|
|
{
|
|
fputs (__tmp_string, mirror2 );
|
|
fgets (__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
}
|
|
fgets(__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
while(linetoadd.find("[")==-1)
|
|
{
|
|
fgets (__tmp_string, 256, mirror );
|
|
linetoadd=__tmp_string;
|
|
}
|
|
fputs (__tmp_string, mirror2 );
|
|
while (fgets(__tmp_string, 256, mirror ))
|
|
{
|
|
fputs (__tmp_string, mirror2 );
|
|
}
|
|
|
|
#if XVT_OS != XVT_OS_SCOUNIX
|
|
fflush(mirror2 );
|
|
#endif
|
|
fclose(mirror2 );
|
|
fclose(mirror );
|
|
junk=_mirrorname;
|
|
_mirrorname=_mir2name;
|
|
_mir2name=junk;
|
|
mirror =fopen(_mirrorname, "a+");
|
|
}
|
|
|
|
void EPF_Application::save_file (bool saveas)
|
|
{
|
|
int junk=0;
|
|
TString currents;
|
|
|
|
if (!saveas)
|
|
{
|
|
if (!_haschanged) return;
|
|
if (!_isnamed) saveas=TRUE;
|
|
}
|
|
if (saveas) junk=accept_current_name (SAVE);
|
|
if (junk!=2)
|
|
{
|
|
fclose (current);
|
|
current = fopen (_currentname, "w");
|
|
fseek(mirror , 0, SEEK_SET);
|
|
fgets(__tmp_string, 256, mirror );
|
|
currents = __tmp_string;
|
|
if (currents.find("Default")==-1)
|
|
{
|
|
currents.ltrim(1);
|
|
currents.rtrim(2);
|
|
fprintf(current , "[Default]\n");
|
|
fprintf(current , "%s\n", (char*)currents);
|
|
}
|
|
fseek(mirror , 0, SEEK_SET);
|
|
while (fgets(__tmp_string, 256, mirror ))
|
|
fputs(__tmp_string, current );
|
|
fclose(current );
|
|
fseek(mirror , 0, SEEK_END);
|
|
}
|
|
}
|
|
|
|
bool EPF_Application::select_printer ()
|
|
{
|
|
TMask mask2(MSK_1);
|
|
int numb;
|
|
long pos;
|
|
|
|
build_list_file(mirror, _plname);
|
|
printerlist=fopen(_plname, "r");
|
|
build_list_box(printerlist, mask2, MSK_1_SELECTED);
|
|
mask2.run();
|
|
_currentprinter=mask2.get(MSK_1_SELECTED);
|
|
numb=atoi(_currentprinter)+1;
|
|
seek_printer_no(mirror, numb, _currentprinter, &pos);
|
|
fclose(printerlist);
|
|
return (mask2.last_key()==K_ENTER ? TRUE : FALSE);
|
|
}
|
|
|
|
void EPF_Application::set_field (TMask& mask, int fldid, char* str, bool inrun)
|
|
{
|
|
mask.set(fldid, str);
|
|
}
|
|
|
|
void EPF_Application::fill_mask (TMask& mask, bool inrun) // a ba2300
|
|
{
|
|
TString junk;
|
|
bool found=FALSE;
|
|
|
|
fseek(mirror , 0, SEEK_SET);
|
|
while (fgets(__tmp_string, 256, mirror ) && !found)
|
|
{
|
|
junk=__tmp_string;
|
|
if (junk.find(_currentprinter)!=-1 && junk.find("[")!=-1)
|
|
{
|
|
found=TRUE;
|
|
set_field(mask, MSK_23_LOGIC, _currentprinter, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_TYPE, junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_PHYSIC, (char*)junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_FILTER, junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_NORMAL, junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_BOLD, junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_ITALIC, junk, inrun);
|
|
fgets(__tmp_string, 256, mirror );
|
|
junk=__tmp_string;
|
|
junk.ltrim(14);
|
|
junk.rtrim(1);
|
|
set_field(mask, MSK_23_UNDERLINED, junk, inrun);
|
|
}
|
|
}
|
|
}
|
|
|
|
void EPF_Application::fill_print_codes (TMask& mask)
|
|
{
|
|
TString junk;
|
|
int intjunk;
|
|
char* ok;
|
|
|
|
junk=mask.get(MSK_23_NAMES);
|
|
intjunk=atoi(junk);
|
|
|
|
codes=fopen(_cdname, "r");
|
|
for (int i=0; i<intjunk; i++)
|
|
fgets(__tmp_string, 256, codes);
|
|
ok = fgets(__tmp_string, 256, codes);
|
|
if (ok) mask.set(MSK_23_CODES, __tmp_string);
|
|
else mask.set(MSK_23_CODES, "");
|
|
|
|
fclose(codes);
|
|
}
|
|
|
|
|
|
void EPF_Application::insert_new_info (TMask& mask)
|
|
{
|
|
TString linetoadd;
|
|
TFilename junk;
|
|
char* k;
|
|
|
|
mirror2 =fopen(_mir2name, "w");
|
|
fseek(mirror , 0, SEEK_SET);
|
|
|
|
k = fgets(__tmp_string, 256, mirror );
|
|
while ((strcmp(__tmp_string, "[End of File]\n")) && k)
|
|
{
|
|
fputs (__tmp_string, mirror2 );
|
|
k = fgets(__tmp_string, 256, mirror );
|
|
}
|
|
|
|
linetoadd.cut(0);
|
|
linetoadd << "[" << (char*)mask.get(MSK_23_LOGIC) << ']' << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Printer type= " << (char*)mask.get(MSK_23_TYPE) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Device name = " << (char*)mask.get(MSK_23_PHYSIC) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Filter name = " << (char*)mask.get(MSK_23_FILTER) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Normal = " << (char*)mask.get(MSK_23_NORMAL) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Bold = " << (char*)mask.get(MSK_23_BOLD) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Italic = " << (char*)mask.get(MSK_23_ITALIC) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
linetoadd.cut(0);
|
|
linetoadd << "Underlined = " << (char*)mask.get(MSK_23_UNDERLINED) << '\n';
|
|
fprintf(mirror2 , "%s", (char*)linetoadd);
|
|
names=fopen(FILE_NAMES, "r");
|
|
codes=fopen(FILE_CODES, "r");
|
|
place_codes_on_file (names, codes, mirror2 );
|
|
linetoadd.cut(0);
|
|
linetoadd << "[End of File]\n";
|
|
fprintf(mirror2, "%s", (char*)linetoadd);
|
|
|
|
#if XVT_OS != XVT_OS_SCOUNIX
|
|
fflush(mirror2 );
|
|
#endif
|
|
fclose(mirror2 );
|
|
fclose(mirror );
|
|
fclose(names);
|
|
fclose(codes);
|
|
junk=_mirrorname;
|
|
_mirrorname=_mir2name;
|
|
_mir2name=junk;
|
|
mirror =fopen(_mirrorname, "a+");
|
|
}
|
|
|
|
void EPF_Application::set_files_to_default ()
|
|
{
|
|
codes=fopen(_cdname, "w");
|
|
defcodes=fopen(_dcdname, "r");
|
|
|
|
if (defcodes != NULL)
|
|
{
|
|
while (fgets(__tmp_string, 256, defcodes))
|
|
fputs(__tmp_string, codes);
|
|
|
|
fclose(defcodes);
|
|
}
|
|
fclose(codes);
|
|
|
|
names=fopen(_nmname, "w");
|
|
defnames=fopen(_dnmname, "r");
|
|
if (defnames != NULL)
|
|
{
|
|
while (fgets(__tmp_string, 256, defnames))
|
|
fputs (__tmp_string, names);
|
|
|
|
fclose(defnames);
|
|
}
|
|
fclose(names);
|
|
}
|
|
|
|
void EPF_Application::update_names_file (TString& str, int items)
|
|
{
|
|
names = fopen (_nmname, "a");
|
|
fprintf(names, " ITEM \"%i|%s\"\n", items, (char*)str);
|
|
fclose (names);
|
|
}
|
|
|
|
void EPF_Application::update_codes_file (TString str, int pos)
|
|
{
|
|
int currentpos;
|
|
TString dirstr(30);
|
|
|
|
codes = fopen(_cdname, "r");
|
|
mirror2 = fopen(_mir2name, "w");
|
|
for (currentpos=0; currentpos<pos && fgets(__tmp_string, 256, codes); currentpos++)
|
|
fputs(__tmp_string, mirror2 );
|
|
if (currentpos==pos)
|
|
{
|
|
fgets(__tmp_string, 256, codes);
|
|
fprintf(mirror2 , "%s\n", (char*)str);
|
|
while (fgets(__tmp_string, 256, codes))
|
|
fputs(__tmp_string, mirror2 );
|
|
}
|
|
else
|
|
{
|
|
for(;currentpos<pos; currentpos++)
|
|
fprintf(mirror2 , "\n");
|
|
fprintf(mirror2 , "%s\n", (char*)str);
|
|
}
|
|
fclose(codes);
|
|
fclose(mirror2 );
|
|
#if XVT_OS == XVT_OS_SCOUNIX
|
|
sprintf(__tmp_string, "rm %s", (char*)_cdname);
|
|
system(__tmp_string);
|
|
dir_to_str(&_workdir, (char*)dirstr, 30);
|
|
sprintf(__tmp_string, "mv %s %s/%s", (char*)_mir2name, (char*)dirstr, (char*)_cdname);
|
|
system(__tmp_string);
|
|
#else
|
|
remove(_cdname);
|
|
rename(_mir2name, _cdname);
|
|
#endif
|
|
}
|
|
|
|
|
|
// Menu
|
|
|
|
bool EPF_Application::menu(MENU_TAG m)
|
|
{
|
|
int junk;
|
|
|
|
switch (m)
|
|
{
|
|
case NEW_FILE:
|
|
if (_haschanged) save_box();
|
|
_isnamed=FALSE;
|
|
junk=accept_current_name(OPEN); // da modificare in base a XVTILITY
|
|
if (junk<2)
|
|
{
|
|
reset_mirror();
|
|
_isopened=TRUE;
|
|
_currentprinter="** new file **";
|
|
}
|
|
break;
|
|
case OPEN_FILE:
|
|
{
|
|
// 0=file aperto esistente
|
|
// 1=file aperto nuovo
|
|
// 2=non aprire nessun file
|
|
int open_status=0;
|
|
long pos=0;
|
|
|
|
if (_haschanged) save_box();
|
|
open_status=accept_current_name(OPEN); // in base a XVTILITY
|
|
if (open_status==1) open_status=(create_box()?1:2);
|
|
if (open_status<2) reset_mirror();
|
|
if (open_status==0) make_mirror();
|
|
if (open_status<2) _isopened=TRUE;
|
|
current=fopen(_currentname, "r");
|
|
seek_default_printer(current, _currentprinter, &pos);
|
|
fclose(current);
|
|
}
|
|
break;
|
|
case SAVE_FILE:
|
|
if (_haschanged) save_file();
|
|
_haschanged=FALSE;
|
|
break;
|
|
case SAVE_FILE_AS:
|
|
save_file(TRUE);
|
|
_haschanged=FALSE;
|
|
break;
|
|
case QUIT_EPF:
|
|
if (_haschanged) save_box();
|
|
xvt_terminate();
|
|
break;
|
|
case INSERT_PRINTER:
|
|
{
|
|
TMask mask(MSK_2);
|
|
|
|
set_files_to_default ();
|
|
get_dir(&_workdir);
|
|
names=fopen(_nmname, "r");
|
|
build_list_box (names, mask, MSK_23_NAMES);
|
|
fclose(names);
|
|
_haschanged=TRUE;
|
|
fill_print_codes (mask);
|
|
mask.set_handler(MSK_23_NAMES, names_on_key);
|
|
mask.set_handler(MSK_2_ADD, add_on_key);
|
|
mask.set_handler(MSK_23_CODES, codes_on_key);
|
|
mask.run();
|
|
if (mask.last_key()==K_ENTER) insert_new_info(mask);
|
|
}
|
|
break;
|
|
case MODIFY_PRINTER:
|
|
if (_isopened && _currentprinter.find("** new file **")==-1)
|
|
{
|
|
_haschanged=TRUE;
|
|
build_list_file(mirror, _plname);
|
|
if (select_printer())
|
|
{
|
|
TMask mask(MSK_2);
|
|
|
|
build_code_files(mirror, _cdname, _nmname, _currentprinter);
|
|
names=fopen(_nmname, "r");
|
|
build_list_box (names, mask, MSK_23_NAMES);
|
|
fclose(names);
|
|
fill_print_codes (mask);
|
|
fill_mask(mask);
|
|
mask.set_handler (MSK_23_NAMES, names_on_key);
|
|
mask.set_handler (MSK_2_ADD, add_on_key);
|
|
mask.set_handler (MSK_23_CODES, codes_on_key);
|
|
mask.run();
|
|
if (mask.last_key()==K_ENTER) update_mirror(mask);
|
|
}
|
|
} else warning_box ("Nessun file aperto");
|
|
break;
|
|
case SHOW_PRINTER:
|
|
{
|
|
long pos;
|
|
|
|
if (_isopened && _currentprinter.find("** new file **")==-1)
|
|
{
|
|
TMask mask(MSK_3);
|
|
|
|
selprinter=1;
|
|
seek_first_printer(mirror, _currentprinter, &pos);
|
|
build_code_files(mirror, _cdname, _nmname, _currentprinter);
|
|
names=fopen(_nmname, "r");
|
|
build_list_box (names, mask, MSK_23_NAMES);
|
|
fclose(names);
|
|
build_list_file(mirror, _plname);
|
|
fill_print_codes (mask);
|
|
mask.set_handler(MSK_23_NAMES, names_on_key);
|
|
mask.set_handler(MSK_3_PREVIOUS, prev_on_key);
|
|
mask.set_handler(MSK_3_NEXT, next_on_key);
|
|
fill_mask(mask, TRUE);
|
|
mask.disable();
|
|
mask.enable(MSK_23_NAMES);
|
|
mask.enable(MSK_3_PREVIOUS);
|
|
mask.enable(MSK_3_NEXT);
|
|
|
|
mask.run();
|
|
} else warning_box ("Nessun file aperto");
|
|
}
|
|
break;
|
|
case DELETE_PRINTER:
|
|
if (_isopened)
|
|
{
|
|
_haschanged=TRUE;
|
|
build_list_file(mirror, _plname);
|
|
if (select_printer())
|
|
delete_printer();
|
|
} else warning_box ("Nessun file aperto");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
int ba2300(int argc, char** argv)
|
|
{
|
|
epf.run(argc, argv, "Manutenzione stampanti");
|
|
|
|
return 0;
|
|
}
|