| ![]() | ||||||||||||||||||||
FATS ist aufrufkompatibel zu der Dateiverwaltung FABS PLUS, dadurch ist die Einbindung des Programmes in bestehende, auf FABS basierende Anwendungsprogramme ohne Quelltextänderungen durch Austausch der OBJ-Module erledigt. Sämtliche Programmierschnittstellen dieser Software wurden nachgebildet. Sie können auch in Kombination mit den neuen verbesserten Schnittstellen von FATS verwendet werden, um so einen schrittweisen Umstieg zu ermöglichen. Das nachfolgende Microsoft Pascal Beispiel demonstriert die Verwendung der von FATS bereitgestellten
 FABS PLUS kompatiblen Befehle:
{ FATS Basis Demo für MS Pascal (kompatible Schnittstelle) }
program TST0_MSP (input,output);
type
fatskeystr = string(25);
kundenrec = record
LOESCHKENNZ: char;
ANREDE: lstring(5);
NAME: lstring(25);
BRANCHE: lstring(25);
STRASSE: lstring(25);
PLZ: lstring(5);
ORT: lstring(20);
end;
const
dn_demo = '..\..\..\DEMODATA\KUNDEN.ASC';
dn_kund = 'KUNDEN.DAT';
var
hKunden: file of kundenrec;
hDemodata: text;
kpuffer: kundenrec;
szCmnd: lstring(255);
lpFatsKey: ads of fatskeystr;
szFatskey: fatskeystr;
szRecno: lstring(8);
uErrorcode, count: word;
dwRecno: integer4;
cChar: char;
function fbspas (vars szCmnd : lstring; vars uErrorcode: word) : word; extern;
function fbpas1 (vars szCmnd : lstring; vars uErrorcode: word;
vars pKeyadr : word) : word; extern;
function fbpas2 (vars szCmnd : lstring; vars uErrorcode: word;
lpKeyadr: adsmem) : integer4; extern;
function gfseg1: word; extern;
function fatscall: integer4;
Var dwRecno : integer4;
begin
dwRecno := fbpas2(szCmnd, uErrorcode, ads(lpFatsKey));
szFatsKey:=lpFatsKey^;
fatscall:=dwRecno;
end;
begin
writeln ('Dieses Programm muß mit MS-Pascal übersetzt werden.');
writeln;
writeln ('Folgende Objektmodule benötigen Sie:');
writeln ('Standalone: FATS_MSP.OBJ & FATS.OBJ');
writeln ('DLL-Version: FATSMSPD.OBJ & FATS_O16.LIB');
writeln;
writeln ('Bitte [ENTER] drücken...');
read(cChar);
{ -------> ASCII-Datei mit Demodaten öffnen }
assign (hDemodata, dn_demo);
reset (hDemodata);
{ -------> Datendatei erstellen }
writeln ('Datendatei wird erstellt ...');
assign (hKunden, dn_kund);
hKunden.mode:=direct;
rewrite (hKunden);
{ -------> Indexdatei erstellen }
writeln ('Indexdatei wird erstellt ...');
szCmnd:='C\KUNDEN.KEY\25\3\A\1';
dwRecno:=fbspas(szCmnd, uErrorcode);
{ -------> Datensätze einfügen }
writeln;
writeln ('Es werden jetzt 222 Datensätze in die Datei eingefügt. Für jeden');
writeln ('Datensatz werden 3 Schlüssel in die Indexdatei eingefügt.');
writeln ('Bitte [ENTER] drücken...');
read(cChar);
count:=0;
repeat
kpuffer.LOESCHKENNZ:=' ';
read(hDemodata, kpuffer.ANREDE);
read(hDemodata, kpuffer.NAME);
read(hDemodata, kpuffer.BRANCHE);
read(hDemodata, kpuffer.STRASSE);
read(hDemodata, kpuffer.PLZ);
read(hDemodata, kpuffer.ORT);
szCmnd:='I\1\';
concat(szCmnd, kpuffer.NAME);
concat(szCmnd, '\');
concat(szCmnd, kpuffer.BRANCHE);
concat(szCmnd, '\');
concat(szCmnd, kpuffer.PLZ);
concat(szCmnd, kpuffer.ORT);
dwRecno:=fbspas(szCmnd, uErrorcode);
seek(hKunden, dwRecno);
hKunden^:=kpuffer;
put(hKunden);
writeln(kpuffer.NAME,' --> Satznummer ', dwRecno:-8);
count:=count+1;
until (count = 222) or (uErrorcode <> 0);
close(hDemodata);
{ -------> Datensätze nach Name sortiert ausgeben }
writeln;
writeln ('Die Datensätze werden jetzt anhand des ersten Schlüssels (NAME)');
writeln ('aufsteigend sortiert ausgegeben. Der dabei verwendete FATS-Befehl');
writeln ('SEARCH NEXT AFTER kann im Einzelplatz und im Netzwerk verwendet');
writeln ('werden. Bitte [ENTER] drücken...');
read(cChar);
szCmnd:='F\1\1';
repeat
dwRecno:=fatscall;
if (uErrorcode = 0) and (encode(szRecno, dwRecno:8)) then begin
seek(hKunden, dwRecno);
get(hKunden);
kpuffer:=hKunden^;
writeln(kpuffer.NAME, ' --> Satznummer ', dwRecno:-8);
szCmnd:='A\1\';
concat(szCmnd, szRecno);
concat(szCmnd, '\1\');
concat(szCmnd, szFatskey);
end;
until uErrorcode <> 0;
{ -------> Datensätze nach Branche sortiert ausgeben }
writeln;
writeln ('Die Datensätze werden jetzt anhand des zweiten Schlüssels (BRANCHE)');
writeln ('aufsteigend sortiert ausgegeben.');
writeln ('Bitte [ENTER] drücken...');
read(cChar);
szCmnd:='F\2\1';
repeat
dwRecno:=fatscall;
if uErrorcode = 0 then begin
seek(hKunden, dwRecno);
get(hKunden);
kpuffer:=hKunden^;
writeln(kpuffer.BRANCHE, ' ', kpuffer.NAME, ' --> Satznummer ', dwRecno:-8);
{ **** Nur für Einzelplatzsysteme geeignet: SEARCH NEXT **** }
szCmnd:='N\1';
end;
until uErrorcode <> 0;
{ -------> Datensätze nach PLZ & Ort sortiert ausgeben }
writeln;
writeln ('Die Datensätze werden jetzt anhand des dritten Schlüssels (PLZ/ORT)');
writeln ('absteigend sortiert ausgegeben.');
writeln ('Bitte [ENTER] drücken...');
read(cChar);
szCmnd:='L\3\1';
repeat
dwRecno:=fatscall;
if (uErrorcode = 0) and (encode(szRecno, dwRecno:8)) then begin
seek(hKunden, dwRecno);
get(hKunden);
kpuffer:=hKunden^;
writeln(kpuffer.PLZ,' ', kpuffer.ORT, ' ', kpuffer.NAME, ' --> Satznummer ', dwRecno:-8);
szCmnd:='E\3\';
concat(szCmnd, szRecno);
concat(szCmnd, '\1\');
concat(szCmnd, szFatskey);
end;
until uErrorcode <> 0;
{ -------> Indexdatei schließen }
szCmnd:='K\1';
dwRecno:=fbspas(szCmnd, uErrorcode);
close(hKunden);
end.
© 2008
GCS Software, Udo Gertz