|
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