home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 11 / algorith / kartei.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-08-29  |  7.0 KB  |  228 lines

  1. (*------------------------------------------------------*)
  2. (*                        KARTEI.PAS                    *)
  3. (* Hauptprogramm des Karteikartenprogramm mit Erkennung *)
  4. (*                    natürlicher Sprache               *)
  5. (*            (C) 1989 Stephan Diehl & TOOLBOX          *)
  6. PROGRAM karteiverwaltung_mit_nli;
  7.  
  8. USES Crt, Turbo3, Dos; (* Für Turbo 3.0 auskommentieren *)
  9.  
  10. TYPE
  11.  skurz=STRING[12];
  12.  smittel=STRING[40];
  13.  slang=STRING[55];
  14.  kategorien=(feld,inh1,inh2,inh3,inh4,inh5,
  15.              anweisung,pop,bdl);
  16.  kartentypen=(nix,a,b,c,d,e,f,g,h,i,voll);
  17.  kartenzeiger=^kartenform;
  18.  kartenform=RECORD
  19.                kartentyp:kartentypen;
  20.                inhalt:ARRAY[1..4] OF smittel;
  21.                inhalt5:ARRAY[1..7] OF slang;
  22.                naechste:kartenzeiger;
  23.              END;
  24.  wlistzeiger=^wortliste;
  25.  wortliste=RECORD
  26.               begriff:smittel;
  27.               naechste:wlistzeiger;
  28.             END;
  29.  zustaende=(za,zb,zc,zd,ze,zf);
  30.  anweisungen=(drucker,monitor,sortieren,editieren,
  31.               loeschen,kartedrucken,keine);
  32.  befehlszeiger=^befehlsliste;
  33.  befehlsliste=RECORD
  34.                  anw:anweisungen;
  35.                  naechste:befehlszeiger;
  36.                END;
  37.  namensfeld=ARRAY[a..i,1..5] OF skurz;
  38.  formular=RECORD
  39.              k1:namensfeld;
  40.              k2:kartentypen;
  41.             END;
  42.  begriffsfeld=ARRAY[feld..inh5] OF wlistzeiger;
  43.  bild=ARRAY[1..4000] OF BYTE;
  44.  
  45. VAR
  46.  LST : TEXT;
  47.  ant:CHAR;
  48.  memavailable:REAL;
  49.  bildschirm_hga : BYTE ABSOLUTE $b000:0;
  50.  bildschirm_cga : BYTE ABSOLUTE $b800:0;
  51.  speichere_bildschirm,speichere_bild_help:bild;
  52.  zeile:INTEGER;
  53.  (* Formulare *)
  54.  feldnamen : namensfeld;
  55.  (* Zeiger zum verwalten der Karteikartenliste *)
  56.  erste_karte,karte,ksuch1,
  57.  ksuch2, hilf, zwischen,letzte_karte,
  58.  sorthilf, vorgaenger                : kartenzeiger;
  59.  kt,letzter_typ : kartentypen;
  60.  kartanz,fnr,u,z,y,antworten,
  61.  xxx1,xxx2,yyy1,yyy2,ccx,ccy : INTEGER;
  62.  (* In diesem Array werden 5 Listen *)
  63.  (* mit Suchbegriffen verwaltet     *)
  64.  erster_begriff,letzter_begriff,suchbegriff : begriffsfeld;
  65.  wort,sortierer,hilfstr : smittel;
  66.  eingabe,tmstr : slang;
  67.  category,cty : kategorien;
  68.  zustand : zustaende;
  69.  nach,no_change,zweite_anfrage,scanning,
  70.  auf_drucker,no_feld,no_feld2           : BOOLEAN;
  71.  anweis : anweisungen;
  72.  erster_befehl,letzter_befehl,befehl : befehlszeiger;
  73.  ctrlmenge : SET OF anweisungen;
  74.  datnam : STRING[8];
  75.  textdatei : TEXT;
  76.  formulardatei : FILE OF formular;
  77.  kartendatei : FILE OF kartenform;
  78.  hformular : formular;
  79.  
  80. CONST
  81.  (* Der "Joker" ist sozusagen mit jedem Wort gleich *)
  82.  wildcard='^';
  83.  (* Die folgenden 7 Woerterbuecher koennen noch *)
  84.  (* erweitert werden. Sie bilden den gesamten   *)
  85.  (* Wortschatz, den Kartei a priori hat.        *)
  86.  sortanz=6; monanz=6; druckanz=7; editanz=10;
  87.  loeschanz=7; kdruckanz=6; bdlanz=20;
  88.  sort:ARRAY[1..sortanz] OF skurz
  89.       =('sortieren','sortiere','sortiert','alphabetisch',
  90.         'alphabetischer', 'alphabet');
  91.  mon:ARRAY[1..monanz] OF skurz
  92.       =('monitor','bildschirm','screen','nenne',
  93.         'nennen','zeige');
  94.  druck:ARRAY[1..druckanz] OF skurz
  95.       =('drucke','drucken','drucker','printer',
  96.         'ausgedruckt','gedruckt','ausdrucken');
  97.  edit:ARRAY[1..editanz] OF skurz
  98.       =('editieren','ändern','bearbeiten','editiert',
  99.         'geändert','bearbeitet','editiere','ändere',
  100.         'bearbeite','editor');
  101.  loesch:ARRAY[1..loeschanz] OF skurz
  102.       =('löschen','lösche','gelöscht','vergiß',
  103.         'streiche','vergessen','streichen');
  104.  kartdruck:ARRAY[1..kdruckanz] OF skurz
  105.       =('endloskarte','endloskarten','karteikarte',
  106.         'karteikarten','formatiert','formatierte');
  107.  bdlos:ARRAY[1..bdlanz] OF skurz
  108.       =('alle','alles','und','auch','der','die','das',
  109.         'dem','den','des','an','aus','über','in','im',
  110.         'zu','mir','auf','von','mit');
  111.  
  112. (*$I STUFF1.INC *)
  113. (*$I STUFF2.INC *)
  114. (*$I BUBBLE.INC *)
  115. (*$I ATNBOX.INC *)
  116. (*$I TIMEDATE.INC *)
  117.  
  118. BEGIN
  119.   Assign(LST,'PRN');
  120.   Rewrite(LST);
  121.   resetfenster;
  122.   FOR kt:=a TO i DO FOR u:=1 TO 5 DO feldnamen[kt,u]:='';
  123.   letzter_typ:=nix;
  124.   erste_karte:=NIL;
  125.   kartanz:=0;    ant:='x'; scanning:=TRUE;
  126.   New(zwischen);
  127.   ClrScr;
  128.   schwarzaufweiss;
  129.   Write(Chr(201)); datnam:='';
  130.   FOR u:=2 TO 79 DO Write(Chr(205));Write(Chr(187));
  131.   WriteLn('                    >>  K A R T E I <<    ',
  132.           'Stephan Diehl & TOOLBOX              '       );
  133.   GotoXY(1,2); Write(Chr(186));
  134.   GotoXY(80,2); Write(Chr(186));
  135.   Write(Chr(200));
  136.   FOR u:=2 TO 79 DO Write(Chr(205));
  137.   Write(Chr(188));
  138.   weissaufschwarz;
  139.   GotoXY(50,5);
  140.   IF MemAvail<0 THEN memavailable:=65536.0-MemAvail
  141.   ELSE memavailable:=MemAvail;
  142.   WriteLn('freier Speicher: ',
  143.           memavailable*16:7:0,' Bytes');
  144.   GotoXY(50,6);
  145.   WriteLn('Die Datei enthält: ',kartanz:5,' Karten');
  146.   GotoXY(50,7);
  147.   IF scanning THEN
  148.     WriteLn('Scanning ausschalten mit <S>')
  149.   ELSE
  150.     WriteLn ('Scanning einschalten mit <S>');
  151.   GotoXY(50,9); Write('Aktuelles Datum: ',date);
  152.   GotoXY(50,10); Write('Aktuelle Zeit: ',time:9);
  153.   schwarzaufweiss;
  154.   fenster(5,6,44,23); ClrScr; weissaufschwarz;
  155.   GotoXY(10,1);
  156.   WriteLn( ' O P T I O N E N ');
  157.   Window(7,6,44,23);WriteLn;
  158.   WriteLn('< 1 >  neues Formular entwerfen   '); WriteLn;
  159.   WriteLn('< 2 >  neue Karteikarte erstellen '); WriteLn;
  160.   WriteLn('< 3 >  Karten abspeichern         '); WriteLn;
  161.   WriteLn('< 4 >  Karten laden               '); WriteLn;
  162.   WriteLn('< 5 >  Anfragen in Deutsch        ');
  163.   WriteLn;
  164.   WriteLn('< 0 >  E N D E                    ');
  165.   WriteLn;
  166.   WriteLn('< S >  Scanning an/aus            ');
  167.   WriteLn;
  168.   Write('< ESC >  Hilfe zum Hauptmenu     ');
  169.   resetfenster;
  170.   weissaufschwarz;
  171.   weissaufschwarz;
  172.   IF hga THEN
  173.     Move(bildschirm_hga,speichere_bildschirm,4000)
  174.   ELSE
  175.     Move(bildschirm_cga,speichere_bildschirm,4000);
  176.   REPEAT
  177.     IF hga THEN
  178.       Move(speichere_bildschirm,bildschirm_hga,4000)
  179.     ELSE
  180.       Move(speichere_bildschirm,bildschirm_cga,4000);
  181.     weissaufschwarz;
  182.     GotoXY(50,5);
  183.     IF MemAvail<0 THEN
  184.       memavailable:=65536.0-MemAvail
  185.     ELSE
  186.       memavailable:=MemAvail;
  187.     WriteLn('freier Speicher: ',
  188.             memavailable*16:7:0,' Bytes');
  189.     GotoXY(50,6);
  190.     WriteLn('Die Datei enthält: ',
  191.             kartanz:5,' Karten');
  192.     GotoXY(50,7);
  193.     IF scanning THEN
  194.       WriteLn('Scanning ausschalten mit <S>')
  195.     ELSE
  196.       WriteLn ('Scanning einschalten mit <S>');
  197.     REPEAT
  198.       GotoXY(80,25);
  199.       IF tmstr<>time THEN BEGIN
  200.         weissaufschwarz;
  201.         GotoXY(66,10);
  202.         Write(time:9);
  203.         tmstr:=time
  204.       END;
  205.     UNTIL KeyPressed;
  206.     Read(KBD,ant);
  207.     weissaufschwarz;
  208.     CASE ant
  209.       OF '2' : ClrScr;
  210.       (* Reserve *)
  211.     END;
  212.     CASE ant OF
  213.       '1': neuesformular;
  214.       '2': neuekarteikarte;
  215.       '3': karten_abspeichern;
  216.       '4': karten_laden;
  217.       '5': IF kartanz>0 THEN anfragen;
  218.       's',
  219.       'S': scanning:=NOT scanning;
  220.     END;
  221.     IF ant=Chr(27) THEN hilfe(1);
  222.     resetfenster;
  223.   UNTIL ant='0';
  224.   ClrScr;
  225.   Close(LST);
  226.  END.
  227.  
  228.