home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 01 / batmenu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-11-03  |  3.6 KB  |  96 lines

  1. (* ------------------------------------------------------------------ *)
  2. (*                          BATMENU.PAS                               *)
  3. (*               Menueauswahl fuer Batchprogramme                     *)
  4. PROGRAM BatMenu;
  5. CONST Fehler  = 255;          (* wird bei einem Fehler zurueckgegeben *)
  6.       Abbruch = 254;          (* wird bei ESC-Taste zurueckgegeben    *)
  7.       Escape  =  27;
  8. TYPE  str255 = STRING[255];
  9. VAR   menue: ARRAY [0..9] OF BOOLEAN;
  10. (* ------------------------------------------------------------------ *)
  11. (* Beendet Programm und erzeugt Programm-Return-Code, der mit ERROR-  *)
  12. (* LEVEL in DOS abgefragt werden kann. Abfrage IF ERRORLEVEL in ab-   *)
  13. (* steigender Reihenfolge!                                            *)
  14. PROCEDURE System (antwort: INTEGER);
  15. TYPE  register = RECORD
  16.                    ax,bx,cx,dx,bp,si,di,ds,es,fl : INTEGER;
  17.                  END;
  18. VAR  regs: register;
  19. BEGIN  regs.ax := $4C00 OR antwort;  MSDos(regs);  END;
  20. (* ------------------------------------------------------------------ *)
  21. FUNCTION erstes_Textzeichen (zeile: str255): INTEGER;
  22. VAR i: INTEGER;
  23. BEGIN
  24.   i := 1;  erstes_Textzeichen := 1;
  25.   WHILE i <= Length(zeile) DO BEGIN
  26.     IF zeile[i] IN ['0'..'9','A'..'z'] THEN BEGIN
  27.       erstes_Textzeichen := i;  i := Length(zeile);
  28.     END;
  29.     i := Succ(i);
  30.   END;
  31. END;
  32. (* ------------------------------------------------------------------ *)
  33. PROCEDURE Gross (VAR st1, st2: str255);
  34. VAR i: INTEGER;
  35. BEGIN
  36.   st2 := st1;
  37.   FOR i := 1 TO Length(st2) DO st2[i] := UpCase(st2[i]);
  38. END;
  39. (* ------------------------------------------------------------------ *)
  40. PROCEDURE lese_Menue (name: str255);
  41. VAR menue_datei: TEXT;  zeile, temp: str255;  code: INTEGER;
  42. BEGIN
  43.   FOR code := 0 TO 9 DO menue[code] := FALSE;
  44.   Assign(menue_datei,name);         (* Text-Datei mit dem Menue lesen *)
  45.   (*$I-*) ReSet(menue_datei);  (*$I+*) (* wir machen Fehlerbehandlung *)
  46.   IF IOResult <> 0 THEN BEGIN          (* selbst...                   *)
  47.     WriteLn('*** Fehler in BATMENU: ',name,
  48.             ' kann nicht gelesen werden!');
  49.     System(Fehler);                        (* Programm endet hier !!! *)
  50.   END;
  51.   WHILE NOT Eof(menue_datei) DO BEGIN
  52.     ReadLn(menue_datei,zeile);
  53.     IF zeile <> '' THEN BEGIN
  54.       temp := Copy(zeile,erstes_Textzeichen(zeile),3);
  55.       Gross(temp,temp);
  56.       IF temp <> 'REM' THEN BEGIN    (* Zeile auf Menuepunkt pruefen: *)
  57.         code := Ord(zeile[erstes_Textzeichen(zeile)])-Ord('0');
  58.         IF code IN [0..9] THEN  menue[code] := TRUE;
  59.         WriteLn(zeile);
  60.       END;
  61.     END
  62.     ELSE WriteLn;
  63.   END;
  64.   Close(menue_datei);
  65. END;
  66. (* ------------------------------------------------------------------ *)
  67. FUNCTION hole_Taste: CHAR;
  68. VAR Taste: CHAR;
  69. BEGIN
  70.   REPEAT UNTIL KeyPressed;                  (* auf Tastendruck warten *)
  71.   Read(Kbd, Taste);                     (* Zeichen von Tastatur lesen *)
  72.   hole_Taste := Taste;
  73. END;
  74. (* ------------------------------------------------------------------ *)
  75. PROCEDURE waehlen;
  76. VAR code: INTEGER;
  77. BEGIN
  78.   REPEAT
  79.     code := Ord(hole_Taste);
  80.     IF code = Escape THEN System(abbruch);         (* hier geht's aus *)
  81.     code := code - Ord('0');
  82.     IF code IN [0..9] THEN                         (* dem Programm !  *)
  83.       IF menue[code] THEN System(code);
  84.   UNTIL FALSE;
  85. END;
  86. (* ------------------------------------------------------------------ *)
  87. BEGIN
  88.   ClrScr;                                      (* Bildschirm loeschen *)
  89.   IF paramcount <> 1 THEN BEGIN
  90.     WriteLn('*** Fehler in BATMENU: keine Menue-Datei angegeben!');
  91.     System(Fehler);
  92.   END;
  93.   lese_Menue(paramstr(1));
  94.   waehlen;
  95. END.
  96.