Patch level : 10.0
Files correlati : agalib Ricompilazione Demo : [ ] Commento : Aggiunto supporto per firma digitale git-svn-id: svn://10.65.10.50/trunk@18571 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
89aad9db2e
commit
512126d4df
@ -3544,11 +3544,12 @@ const TString& TRectype::get(const char* fieldname) const
|
|||||||
const int index = findfld(&recd, fieldname);
|
const int index = findfld(&recd, fieldname);
|
||||||
if ( _memo_data->objptr( index ))
|
if ( _memo_data->objptr( index ))
|
||||||
return _memo_data->row( index );
|
return _memo_data->row( index );
|
||||||
if(_memo_data->recno() >= 0L)
|
if (_memo_data->recno() >= 0L)
|
||||||
{
|
{
|
||||||
const int orig = _memo_data->file();
|
const TIsam_handle orig = _memo_data->file();
|
||||||
if (orig)
|
if (orig)
|
||||||
{
|
{
|
||||||
|
CHECKD(orig >= LF_EXTERNAL || orig == num(), "Invalid isam handle ", orig);
|
||||||
TCodeb_handle cb_handle = prefix().get_handle(orig, -1);
|
TCodeb_handle cb_handle = prefix().get_handle(orig, -1);
|
||||||
CHECKD(cb_handle >= 0, "Can't read memo from file ", orig);
|
CHECKD(cb_handle >= 0, "Can't read memo from file ", orig);
|
||||||
if (DB_recno(cb_handle) != _memo_data->recno())
|
if (DB_recno(cb_handle) != _memo_data->recno())
|
||||||
|
@ -2839,26 +2839,20 @@ KEY TFile_select::run()
|
|||||||
{
|
{
|
||||||
TFilename path;
|
TFilename path;
|
||||||
path.add(field().get());
|
path.add(field().get());
|
||||||
path.ext(_filter.ext());
|
if (_filter.find('.') > 0 && !_filter.ends_with(".*"))
|
||||||
|
path.ext(_filter.ext());
|
||||||
|
|
||||||
FILE_SPEC fs;
|
FILE_SPEC fs; xvt_fsys_convert_str_to_fspec(path, &fs);
|
||||||
xvt_fsys_convert_str_to_fspec(path, &fs);
|
|
||||||
|
|
||||||
DIRECTORY savedir; xvt_fsys_get_dir(&savedir);
|
|
||||||
bool good = xvt_dm_post_file_open(&fs, field().prompt()) == FL_OK;
|
bool good = xvt_dm_post_file_open(&fs, field().prompt()) == FL_OK;
|
||||||
xvt_fsys_set_dir(&savedir);
|
|
||||||
|
|
||||||
if (good)
|
if (good)
|
||||||
{
|
{
|
||||||
good = _filter.blank() || xvt_str_match(fs.name, _filter, false);
|
xvt_fsys_convert_fspec_to_str(&fs, path.get_buffer(), path.size());
|
||||||
|
good = _filter.blank() || xvt_str_match(path.name(), _filter, false);
|
||||||
if (good)
|
if (good)
|
||||||
{
|
|
||||||
xvt_fsys_convert_dir_to_str(&fs.dir, path.get_buffer(), path.size());
|
|
||||||
path.add(fs.name);
|
|
||||||
field().set(path);
|
field().set(path);
|
||||||
}
|
|
||||||
else
|
else
|
||||||
field().error_box(FR("Il nome non corrisponde a %s"), _filter.get_buffer());
|
field().error_box(FR("Il nome del file non corrisponde a %s"), _filter.get_buffer());
|
||||||
}
|
}
|
||||||
return good ? K_ENTER : K_ESC;
|
return good ? K_ENTER : K_ESC;
|
||||||
}
|
}
|
||||||
|
@ -434,7 +434,7 @@ int TFile_info::close()
|
|||||||
{
|
{
|
||||||
// Chiudi fisicamente solo se necessario
|
// Chiudi fisicamente solo se necessario
|
||||||
if (_locked || _exclusive || dir_type() == _extdir)
|
if (_locked || _exclusive || dir_type() == _extdir)
|
||||||
err = close_low();
|
err = close_low(); // Chiudo fisicamente il file per eliminare i lock
|
||||||
}
|
}
|
||||||
_locked = _exclusive = false;
|
_locked = _exclusive = false;
|
||||||
}
|
}
|
||||||
@ -454,7 +454,7 @@ void TFile_info::auto_close()
|
|||||||
int TFile_info::auto_open(int key)
|
int TFile_info::auto_open(int key)
|
||||||
{
|
{
|
||||||
if (_handle < 0)
|
if (_handle < 0)
|
||||||
open_low(FALSE, TRUE);
|
open_low(false, true);
|
||||||
|
|
||||||
if (_handle >= 0)
|
if (_handle >= 0)
|
||||||
{
|
{
|
||||||
@ -715,8 +715,14 @@ void TFile_manager::destroy_info(int logicnum)
|
|||||||
TCodeb_handle TFile_manager::get_handle(TIsam_handle name, int key)
|
TCodeb_handle TFile_manager::get_handle(TIsam_handle name, int key)
|
||||||
{
|
{
|
||||||
TFile_info& i = fileinfo(name);
|
TFile_info& i = fileinfo(name);
|
||||||
|
|
||||||
|
#ifdef DBG
|
||||||
if (i.ref_count() == 0)
|
if (i.ref_count() == 0)
|
||||||
NFCHECK("Can't use closed file %d", i.num());
|
{
|
||||||
|
NFCHECK("Sarebbe bene aggiungere una bella open_files(%d, ...) in TYour_app::create()", i.num());
|
||||||
|
i.open(false, true);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TCodeb_handle handle = i.handle();
|
TCodeb_handle handle = i.handle();
|
||||||
if (handle < 0)
|
if (handle < 0)
|
||||||
@ -879,7 +885,7 @@ bool TFirm::read(long cod)
|
|||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
if (cod < 0L)
|
if (cod < 0L)
|
||||||
cod = prefix().get_codditta();
|
cod = prefix().get_codditta();
|
||||||
_rec.destroy();
|
destroy();
|
||||||
TLocalisamfile ditte(LF_NDITTE);
|
TLocalisamfile ditte(LF_NDITTE);
|
||||||
if (cod > 0L)
|
if (cod > 0L)
|
||||||
{
|
{
|
||||||
@ -894,18 +900,18 @@ bool TFirm::read(long cod)
|
|||||||
for (int f = ditta.items()-1; f >= 0; f--)
|
for (int f = ditta.items()-1; f >= 0; f--)
|
||||||
{
|
{
|
||||||
const char* name = ditta.fieldname(f);
|
const char* name = ditta.fieldname(f);
|
||||||
_rec.add(name, ditta.get(name));
|
add(name, ditta.get(name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
NFCHECK("Can't read firm %ld: error %d", cod, err);
|
NFCHECK("Can't read firm %ld: error %d", cod, err);
|
||||||
|
|
||||||
return _rec.items() > 0;
|
return items() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString& TFirm::get(const char* attr) const
|
const TString& TFirm::get(const char* attr) const
|
||||||
{
|
{
|
||||||
const TString* str = (const TString*)_rec.objptr(attr);
|
const TString* str = (const TString*)objptr(attr);
|
||||||
if (str == NULL)
|
if (str == NULL)
|
||||||
str = &EMPTY_STRING;
|
str = &EMPTY_STRING;
|
||||||
return *str;
|
return *str;
|
||||||
@ -1069,7 +1075,7 @@ bool TPrefix::exist(long codditta) const
|
|||||||
{
|
{
|
||||||
if (codditta > 0L && codditta < 100000L)
|
if (codditta > 0L && codditta < 100000L)
|
||||||
{
|
{
|
||||||
TFilename s(firm2dir(codditta));
|
TFilename s = firm2dir(codditta);
|
||||||
s.add("dir.gen");
|
s.add("dir.gen");
|
||||||
if (s.exist())
|
if (s.exist())
|
||||||
{
|
{
|
||||||
@ -1134,10 +1140,14 @@ bool TPrefix::set_codditta(long codditta, bool force)
|
|||||||
s.format("%05lda", codditta);
|
s.format("%05lda", codditta);
|
||||||
set(s, force);
|
set(s, force);
|
||||||
CPutPref(_prefix);
|
CPutPref(_prefix);
|
||||||
if (_firm)
|
if (_firm && _firm->read(codditta))
|
||||||
{
|
{
|
||||||
_firm->read(codditta);
|
TConfig ini(CONFIG_DITTA, "Main");
|
||||||
xvt_sys_set_profile_string(NULL, "Main", "Company", _firm->get(NDT_RAGSOC));
|
FOR_EACH_ASSOC_STRING((*_firm), h, key, str)
|
||||||
|
{
|
||||||
|
if (*str > ' ')
|
||||||
|
ini.set(key, str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1257,6 +1267,12 @@ const char* firm2dir(long codditta)
|
|||||||
firm.format("%05lda", codditta); break;
|
firm.format("%05lda", codditta); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (__ptprf[0] == '\0')
|
||||||
|
{
|
||||||
|
CGetPref();
|
||||||
|
CHECK(__ptprf[0], "Invalid prefix");
|
||||||
|
}
|
||||||
|
|
||||||
TString& path = get_tmp_string(_MAX_PATH);
|
TString& path = get_tmp_string(_MAX_PATH);
|
||||||
xvt_fsys_build_pathname(path.get_buffer(), "", __ptprf, firm, NULL, NULL);
|
xvt_fsys_build_pathname(path.get_buffer(), "", __ptprf, firm, NULL, NULL);
|
||||||
return path;
|
return path;
|
||||||
@ -1383,7 +1399,7 @@ bool TPrefix::build_firm_data(long codditta, bool flagcom)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TPrefix::firms(TString_array& codes) const
|
int TPrefix::firms(TString_array& codes)
|
||||||
{
|
{
|
||||||
codes.destroy();
|
codes.destroy();
|
||||||
TFilename n = __ptprf; n.add("?????A");
|
TFilename n = __ptprf; n.add("?????A");
|
||||||
@ -1392,14 +1408,16 @@ int TPrefix::firms(TString_array& codes) const
|
|||||||
{
|
{
|
||||||
n = xvt_slist_get(dirs, e, NULL);
|
n = xvt_slist_get(dirs, e, NULL);
|
||||||
const TString& code = n.name_only();
|
const TString& code = n.name_only();
|
||||||
if (exist(atol(code)))
|
TFilename s = firm2dir(atol(code));
|
||||||
|
s.add("dir.gen");
|
||||||
|
if (s.exist())
|
||||||
codes.add(code);
|
codes.add(code);
|
||||||
}
|
}
|
||||||
xvt_slist_destroy(dirs);
|
xvt_slist_destroy(dirs);
|
||||||
return codes.items();
|
return codes.items();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TPrefix::firms(TPointer_array& codes) const
|
int TPrefix::firms(TPointer_array& codes)
|
||||||
{
|
{
|
||||||
TString_array strcodes; firms(strcodes);
|
TString_array strcodes; firms(strcodes);
|
||||||
FOR_EACH_ARRAY_ROW(strcodes, t, row)
|
FOR_EACH_ARRAY_ROW(strcodes, t, row)
|
||||||
@ -1407,6 +1425,44 @@ int TPrefix::firms(TPointer_array& codes) const
|
|||||||
return codes.items();
|
return codes.items();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TPrefix::firms(TArray& ditte)
|
||||||
|
{
|
||||||
|
ditte.destroy();
|
||||||
|
TPointer_array codes; firms(codes);
|
||||||
|
for (int i = 0; i < codes.items(); i++)
|
||||||
|
{
|
||||||
|
const long codditta = codes.get_long(i);
|
||||||
|
TFilename ininame = firm2dir(codditta);
|
||||||
|
ininame.add("ditta.ini");
|
||||||
|
TConfig ini(ininame, "Main");
|
||||||
|
TAssoc_array& fields = ini.list_variables();
|
||||||
|
if (fields.empty() && prefix_valid())
|
||||||
|
{
|
||||||
|
TLocalisamfile nditte(LF_NDITTE);
|
||||||
|
TRectype& ditta = nditte.curr();
|
||||||
|
ditta.put(NDT_CODDITTA, codditta);
|
||||||
|
if (nditte.read() == NOERR)
|
||||||
|
{
|
||||||
|
for (int f = 0; f < ditta.items(); f++)
|
||||||
|
{
|
||||||
|
const char* fname = ditta.fieldname(f);
|
||||||
|
const TString& value = ditta.get(fname);
|
||||||
|
if (!value.blank())
|
||||||
|
ini.set(fname, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fields.empty())
|
||||||
|
{
|
||||||
|
ini.set(NDT_CODDITTA, codditta);
|
||||||
|
CHECK(!fields.empty(), "Can't genenerate firm data");
|
||||||
|
}
|
||||||
|
ditte.add(fields);
|
||||||
|
}
|
||||||
|
return ditte.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TTable name converter
|
// TTable name converter
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
@ -67,10 +67,8 @@ public:
|
|||||||
// @class TFirm | Classe contenente le informazioni sulla ditta correntemente in uso
|
// @class TFirm | Classe contenente le informazioni sulla ditta correntemente in uso
|
||||||
//
|
//
|
||||||
// @base public | TObject
|
// @base public | TObject
|
||||||
class TFirm : public TObject
|
class TFirm : public TAssoc_array
|
||||||
{
|
{
|
||||||
TAssoc_array _rec;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool read(long code);
|
bool read(long code);
|
||||||
TFirm& operator=(long code) { read(code); return *this; }
|
TFirm& operator=(long code) { read(code); return *this; }
|
||||||
@ -220,8 +218,9 @@ public:
|
|||||||
{ _manager.destroy_info(logicnum); }
|
{ _manager.destroy_info(logicnum); }
|
||||||
|
|
||||||
const TFirm& firm();
|
const TFirm& firm();
|
||||||
int firms(TString_array& codes) const;
|
static int firms(TString_array& codes);
|
||||||
int firms(TPointer_array& codes) const; // calls above method!
|
static int firms(TPointer_array& codes); // calls above method!
|
||||||
|
static int firms(TArray& data); // calls above method!
|
||||||
|
|
||||||
// @cmember Costruttore
|
// @cmember Costruttore
|
||||||
TPrefix();
|
TPrefix();
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
#include <nditte.h>
|
#include <nditte.h>
|
||||||
#include <unloc.h>
|
#include <unloc.h>
|
||||||
|
|
||||||
static const char MAX_STRING[2] = {(char) 255, 0};
|
static const char MAX_STRING[2] = { (char)255, 0 };
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TReport_font
|
// TReport_font
|
||||||
@ -3128,6 +3128,13 @@ bool TReport::print_or_preview()
|
|||||||
return book.print_or_preview();
|
return book.print_or_preview();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TReport::print()
|
||||||
|
{
|
||||||
|
TReport_book book;
|
||||||
|
book.add(*this);
|
||||||
|
return book.print();
|
||||||
|
}
|
||||||
|
|
||||||
bool TReport::preview()
|
bool TReport::preview()
|
||||||
{
|
{
|
||||||
TReport_book book;
|
TReport_book book;
|
||||||
@ -3135,11 +3142,11 @@ bool TReport::preview()
|
|||||||
return book.preview();
|
return book.preview();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TReport::archive()
|
bool TReport::archive(bool signature)
|
||||||
{
|
{
|
||||||
TReport_book book;
|
TReport_book book;
|
||||||
book.add(*this);
|
book.add(*this);
|
||||||
return book.archive();
|
return book.archive(NULL, signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
TReport::TReport()
|
TReport::TReport()
|
||||||
|
@ -582,8 +582,9 @@ public:
|
|||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
bool print_or_preview();
|
bool print_or_preview();
|
||||||
|
bool print();
|
||||||
bool preview();
|
bool preview();
|
||||||
bool archive();
|
bool archive(bool signature);
|
||||||
|
|
||||||
TReport();
|
TReport();
|
||||||
virtual ~TReport();
|
virtual ~TReport();
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <applicat.h>
|
||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
#include <colors.h>
|
#include <colors.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@ -1494,7 +1495,7 @@ bool TBook::print_page(TWindow& win, size_t page)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TBook::export_text(const TFilename& fname, bool signature)
|
bool TBook::export_text(TFilename& fname, bool signature)
|
||||||
{
|
{
|
||||||
if (fname.ends_with(".pdf", true))
|
if (fname.ends_with(".pdf", true))
|
||||||
return export_pdf(fname, signature);
|
return export_pdf(fname, signature);
|
||||||
@ -1631,6 +1632,13 @@ bool TBook::export_text(const TFilename& fname, bool signature)
|
|||||||
_vertical_alignment = str.get_char();
|
_vertical_alignment = str.get_char();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ofs.close();
|
||||||
|
if (signature && main_app().has_module(FDAUT))
|
||||||
|
{
|
||||||
|
char outfile[_MAX_PATH] = "";
|
||||||
|
if (xvt_sign_file(fname, outfile))
|
||||||
|
fname = outfile;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1922,9 +1930,9 @@ bool TBook::print(size_t pagefrom, size_t pageto, word copies)
|
|||||||
return xvt_print_start_thread(main_loop_callback, (long)this) != 0;
|
return xvt_print_start_thread(main_loop_callback, (long)this) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TBook::export_pdf(const TFilename& filename, bool certified)
|
bool TBook::export_pdf(TFilename& filename, bool signature)
|
||||||
{
|
{
|
||||||
bool ok = (pages() > 0) && dongle().active(RSAUT);
|
bool ok = (pages() > 0) && main_app().has_module(RSAUT); // Controllo paranoico dei permessi
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
_pdf_file = filename;
|
_pdf_file = filename;
|
||||||
@ -1932,10 +1940,14 @@ bool TBook::export_pdf(const TFilename& filename, bool certified)
|
|||||||
_pageto = 0;
|
_pageto = 0;
|
||||||
_copies = 1;
|
_copies = 1;
|
||||||
ok = xvt_print_start_thread(main_loop_callback, (long)this) != 0;
|
ok = xvt_print_start_thread(main_loop_callback, (long)this) != 0;
|
||||||
if (ok && certified)
|
if (ok && signature && main_app().has_module(FDAUT)) // Controllo paranoico dei permessi
|
||||||
{
|
{
|
||||||
if (!xvt_pdf_sign(filename))
|
char outfile[_MAX_PATH] = "";
|
||||||
error_box(TR("Impossibile apporre la firma digitale al documento"));
|
if (xvt_sign_file(filename, outfile))
|
||||||
|
{
|
||||||
|
xvt_fsys_remove_file(filename); // Sbatto via il documento originale non firmato
|
||||||
|
filename = outfile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
@ -1993,7 +2005,7 @@ bool TBook::archive(const char* repname, bool signature)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TBook::send_mail(const TFilename& file, bool signature)
|
bool TBook::send_mail(TFilename& file, bool signature)
|
||||||
{
|
{
|
||||||
bool ok = export_pdf(file, signature);
|
bool ok = export_pdf(file, signature);
|
||||||
if (ok)
|
if (ok)
|
||||||
@ -2033,8 +2045,8 @@ bool TBook::print_or_preview()
|
|||||||
break;
|
break;
|
||||||
case exportprinter:
|
case exportprinter:
|
||||||
{
|
{
|
||||||
const TFilename f = printer().get_export_file();
|
TFilename f = printer().get_export_file();
|
||||||
ok = export_text(f, false);
|
ok = export_text(f, NULL);
|
||||||
if (ok)
|
if (ok)
|
||||||
xvt_sys_goto_url(f, "open");
|
xvt_sys_goto_url(f, "open");
|
||||||
}
|
}
|
||||||
@ -2720,7 +2732,7 @@ bool TReport_book::print(size_t pagefrom, size_t pageto, word copies)
|
|||||||
return TBook::print(pagefrom, pageto, copies);
|
return TBook::print(pagefrom, pageto, copies);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TReport_book::archive(const char* repname)
|
bool TReport_book::archive(const char* repname, bool signature)
|
||||||
{
|
{
|
||||||
TFilename n = repname;
|
TFilename n = repname;
|
||||||
if (n.blank() && _report != NULL)
|
if (n.blank() && _report != NULL)
|
||||||
@ -2728,7 +2740,7 @@ bool TReport_book::archive(const char* repname)
|
|||||||
n = _report->filename().name();
|
n = _report->filename().name();
|
||||||
n.ext("");
|
n.ext("");
|
||||||
}
|
}
|
||||||
return TBook::archive(n);
|
return TBook::archive(n, signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,12 +86,12 @@ public:
|
|||||||
virtual bool on_link(const TReport_link&) { return false; }
|
virtual bool on_link(const TReport_link&) { return false; }
|
||||||
|
|
||||||
virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0);
|
virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0);
|
||||||
virtual bool archive(const char* repname = NULL, bool certified = false);
|
virtual bool archive(const char* repname, bool signature);
|
||||||
virtual bool preview();
|
virtual bool preview();
|
||||||
|
|
||||||
virtual bool export_pdf(const TFilename& fname, bool certified);
|
virtual bool export_pdf(TFilename& fname, bool signature);
|
||||||
virtual bool export_text(const TFilename& fname, bool certified);
|
virtual bool export_text(TFilename& fname, bool signature);
|
||||||
virtual bool send_mail(const TFilename& fname, bool certified);
|
virtual bool send_mail(TFilename& fname, bool signature);
|
||||||
virtual bool esporta();
|
virtual bool esporta();
|
||||||
bool print_or_preview(); // Calls one of the above
|
bool print_or_preview(); // Calls one of the above
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ public:
|
|||||||
virtual int logical_page_width() const { return _logical_page_width; }
|
virtual int logical_page_width() const { return _logical_page_width; }
|
||||||
virtual int logical_page_height() const { return _logical_page_height; }
|
virtual int logical_page_height() const { return _logical_page_height; }
|
||||||
virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0);
|
virtual bool print(size_t pagefrom = 0, size_t pageto = 0, word copies = 0);
|
||||||
virtual bool archive(const char* repname = NULL);
|
virtual bool archive(const char* repname, bool signature);
|
||||||
TReport_book(const char* name = NULL);
|
TReport_book(const char* name = NULL);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user