Modifica sperimentale per apprendimento di Nicola

git-svn-id: svn://10.65.10.50/trunk@59 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
nik 1994-08-25 09:02:59 +00:00
parent 635e73f1b4
commit 84ecc65375

View File

@ -7,323 +7,325 @@
int TTable::name2log(const char* n) int TTable::name2log(const char* n)
{ {
return *n == '%' ? LF_TABCOM : return *n == '%' ? LF_TABCOM :
*n == '#' ? LF_TABGEN : *n == '#' ? LF_TABGEN :
LF_TAB; LF_TAB;
} }
TTable::TTable(const char* tabname, bool linkrecinst) TTable::TTable(const char* tabname, bool linkrecinst)
: TLocalisamfile(name2log(tabname), linkrecinst) : TLocalisamfile(name2log(tabname), linkrecinst)
{ {
if ((*tabname == '%') || (*tabname == '#')) tabname++; if ((*tabname == '%') || (*tabname == '#')) tabname++;
_tabname = tabname; _tabname = tabname;
_tabname.upper(); _tabname.upper();
settab(TRUE); settab(TRUE);
} }
int TTable::first(word lockop) int TTable::first(word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
curr().zero(); curr().zero();
codtab = _tabname; codtab = _tabname;
TBaseisamfile::read(_isgteq, lockop); TBaseisamfile::read(_isgteq, lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (good()) if (good())
if (strncmp(_tabname, c, 3) != 0) setstatus(_isemptyfile); if (strncmp(_tabname, c, 3) != 0) setstatus(_isemptyfile);
if (bad()) curr().zero(); if (bad()) curr().zero();
else else
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::last(word lockop) int TTable::last(word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
curr().zero(); curr().zero();
codtab = format("%s%c", (const char*) _tabname, 0xFF); codtab = format("%s%c", (const char*) _tabname, 0xFF);
TBaseisamfile::read(_isgteq); TBaseisamfile::read(_isgteq);
if (!eof()) TBaseisamfile::prev(lockop); if (!eof()) TBaseisamfile::prev(lockop);
else setstatus(NOERR); else setstatus(NOERR);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (good()) if (good())
if (strncmp(_tabname, c, 3) != 0) setstatus(_isemptyfile); if (strncmp(_tabname, c, 3) != 0) setstatus(_isemptyfile);
if (bad()) curr().zero(); if (bad()) curr().zero();
else else
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::next(word lockop) int TTable::next(word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
read(); read();
if (bad()) return status(); if (bad()) return status();
TRecnotype nrec = recno(); TRecnotype nrec = recno();
TBaseisamfile::next(lockop); TBaseisamfile::next(lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (strncmp(_tabname, c, 3) != 0) if (strncmp(_tabname, c, 3) != 0)
{ {
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
TBaseisamfile::readat(nrec, lockop); TBaseisamfile::readat(nrec, lockop);
setstatus(_iseof); setstatus(_iseof);
} }
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::prev(word lockop) int TTable::prev(word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
read(); read();
if (bad()) return status(); if (bad()) return status();
TRecnotype nrec = recno(); TRecnotype nrec = recno();
TBaseisamfile::prev(lockop); TBaseisamfile::prev(lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (strncmp(_tabname, c, 3) != 0) if (strncmp(_tabname, c, 3) != 0)
{ {
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
TBaseisamfile::readat(nrec, lockop); TBaseisamfile::readat(nrec, lockop);
setstatus(_isbof); setstatus(_isbof);
} }
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::reread(word lockop, TDate&) int TTable::reread(word lockop, TDate&)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::reread(lockop); TBaseisamfile::reread(lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::reread(TRectype& rec, word lockop, TDate&) int TTable::reread(TRectype& rec, word lockop, TDate&)
{ {
TRecfield codtab(rec, "CODTAB"); TRecfield codtab(rec, "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::reread(rec, lockop); TBaseisamfile::reread(rec, lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::skip(TRecnotype nrec, word lockop) int TTable::skip(TRecnotype nrec, word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
if (!nrec) return NOERR; if (!nrec) return NOERR;
TBaseisamfile::skip(nrec, lockop); TBaseisamfile::skip(nrec, lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (strncmp(_tabname, c, 3) != 0) if (strncmp(_tabname, c, 3) != 0)
{ {
if (nrec > 0) if (nrec > 0)
{ {
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
last(lockop); last(lockop);
setstatus(_iseof); setstatus(_iseof);
} }
else else
{ {
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
first(lockop); first(lockop);
setstatus(_isbof); setstatus(_isbof);
} }
} }
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::read(word op, word lockop, TDate&) int TTable::read(word op, word lockop, TDate&)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op); CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op);
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::read(op, lockop); TBaseisamfile::read(op, lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (good() && strncmp(_tabname, c, 3) != 0) if (good() && strncmp(_tabname, c, 3) != 0)
{ {
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
last(lockop); last(lockop);
setstatus(_iseof); setstatus(_iseof);
} }
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::read(TRectype& rec, word op, word lockop, TDate&) int TTable::read(TRectype& rec, word op, word lockop, TDate&)
{ {
TRecfield codtab(rec, "CODTAB"); TRecfield codtab(rec, "CODTAB");
CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op); CHECKD(op >= _iscurr && op <= _isgteq, "Invalid read operation : ", op);
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::read(rec, op, lockop); TBaseisamfile::read(rec, op, lockop);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
if (good() && strncmp(_tabname, c, 3) != 0) if (good() && strncmp(_tabname, c, 3) != 0)
{ {
setstatus(_iseof); setstatus(_iseof);
if (lockop == _lock) TBaseisamfile::reread(_unlock); if (lockop == _lock) TBaseisamfile::reread(_unlock);
last(lockop); last(lockop);
} }
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::readat(TRecnotype nrec, word lockop) int TTable::readat(TRecnotype nrec, word lockop)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
TBaseisamfile::readat(nrec, lockop); TBaseisamfile::readat(nrec, lockop);
TFixed_string s((const char*) codtab); TFixed_string s((const char*) codtab);
CHECKS(_tabname == s.left(3), "Invalid position : Table ", (const char *)_tabname); CHECKS(_tabname == s.left(3), "Invalid position : Table ", (const char *)_tabname);
codtab = &s[3]; codtab = &s[3];
return status(); return status();
} }
int TTable::readat(TRectype& rec ,TRecnotype nrec, word lockop) int TTable::readat(TRectype& rec ,TRecnotype nrec, word lockop)
{ {
TRecfield codtab(rec, "CODTAB"); TRecfield codtab(rec, "CODTAB");
TBaseisamfile::readat(rec, nrec, lockop); TBaseisamfile::readat(rec, nrec, lockop);
TFixed_string s((const char*) codtab); TFixed_string s((const char*) codtab);
CHECKS(_tabname == s.left(3), "Invalid position : Table ", (const char*)_tabname); CHECKS(_tabname == s.left(3), "Invalid position : Table ", (const char*)_tabname);
codtab = &s[3]; codtab = &s[3];
return status(); return status();
} }
int TTable::write(TDate&) int TTable::write(TDate&)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::write(); TBaseisamfile::write();
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::write(const TRectype& rec, TDate&) int TTable::write(const TRectype& rec, TDate&)
{ {
TRecfield codtab((TRectype&)rec, "CODTAB"); TRecfield codtab((TRectype&)rec, "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::write(rec); TBaseisamfile::write(rec);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::rewrite(TDate&) int TTable::rewrite(TDate&)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::rewrite(); TBaseisamfile::rewrite();
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::rewrite(const TRectype& rec, TDate&) int TTable::rewrite(const TRectype& rec, TDate&)
{ {
TRecfield codtab((TRectype&)rec, "CODTAB"); TRecfield codtab((TRectype&)rec, "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::rewrite(rec); TBaseisamfile::rewrite(rec);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::remove(TDate&) int TTable::remove(TDate&)
{ {
TRecfield codtab(curr(), "CODTAB"); TRecfield codtab(curr(), "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::remove(); TBaseisamfile::remove();
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }
int TTable::remove(const TRectype& rec, TDate&) int TTable::remove(const TRectype& rec, TDate&)
{ {
TRecfield codtab((TRectype&)rec, "CODTAB"); TRecfield codtab((TRectype&)rec, "CODTAB");
TFixed_string s((const char*) codtab, 80); TFixed_string s((const char*) codtab, 80);
s.insert(_tabname, 0); s.insert(_tabname, 0);
codtab = s; codtab = s;
TBaseisamfile::remove(rec); TBaseisamfile::remove(rec);
const char *c = (const char *) codtab; const char *c = (const char *) codtab;
codtab = c + 3; codtab = c + 3;
return status(); return status();
} }