system/printer-laser/4/src/laser.inserter

Raw file
Back to index

PACKET laserdrucker inserter DEFINES treiber einrichten : 
 
(**************************************************************************)
(*   Installationsprogramm                        Stand   : 12.12.88      *)
(*   für Tintenstrahl-                            Version : 0.9           *)
(*   und Laserdrucker                             Autor   : hjh           *)
(**************************************************************************)
 
LET anzahl firmen = 6 ; 
LET apple = "APPLE" , 
    canon = "CANON" , 
    epson = "EPSON" , 
    hp    = "HEWLETT PACKARD" , 
    kyo   = "KYOCERA" , 
    nec   = "NEC" ; 
 
THESAURUS VAR firmen := empty thesaurus ; 
 
INT VAR i ; 
ROW anzahl firmen THESAURUS VAR drucker ; 
FOR i FROM 1 UPTO anzahl firmen REP 
  drucker (i) := empty thesaurus 
PER ;
ROW anzahl firmen THESAURUS VAR printer ; 
FOR i FROM 1 UPTO anzahl firmen REP 
  printer (i) := empty thesaurus 
PER ;
ROW anzahl firmen THESAURUS VAR fonttables ; 
FOR i FROM 1 UPTO anzahl firmen REP 
  fonttables (i) := empty thesaurus 
PER ;
 
liste (apple,"LASERWRITER","printer.apple.laserwriter","fonttab.apple.laserwriter"); 
liste (canon , "LBP-8"    ,"printer.canon.lbp-8"      ,"fonttab.canon.lbp-8"); 
liste (epson , "SQ 2500"  ,"printer.epson.sq"         ,"fonttab.epson.sq"); 
liste (hp , "HP LASERJET" ,"printer.hp.laserjet"      ,"fonttab.hp.laserjet"); 
liste (hp , "HP LASERJET+" ,"printer.hp.laserjet"      ,"fonttab.hp.laserjet"); 
liste (kyo , "F-1010"     ,"printer.kyocera.f-1010"   ,"fonttab.kyocera.f-1010"); 
liste (kyo , "F-2200"     ,"printer.kyocera.f-1010"   ,"fonttab.kyocera.f-1010"); 
liste (nec , "SILENTWRITER LC-08"      ,"printer.nec.lc-08"
,"fonttab.nec.lc-08"); 

treiber einrichten;
 
PROC liste (TEXT CONST firmenname, druckername , 
                        printername, fonttabname ) : 
  INT VAR firmnum ; 
  IF firmen CONTAINS firmenname 
    THEN firmnum := link (firmen,firmenname) 
    ELSE insert (firmen,firmenname,firmnum) 
  FI; 
  insert (drucker(firmnum), druckername) ; 
  insert (printer(firmnum), printername) ; 
  insert (fonttables(firmnum), fonttabname) ; 
END PROC liste ;
 
PROC treiber einrichten : 
  INT VAR menu phase := 1 ; 
  BOOL VAR installed := FALSE ; 
  BOOL VAR was esc ; 
  INT VAR firmnum, druckernum ;
  TEXT VAR firmenname, druckername, printername, fonttabname ;
 
  pre menu ;
  REP 
    SELECT menu phase OF 
      CASE 1 : menu ("Hauptmenü Tintenstrahl und Laserdrucker", firmen, 
                     "CR: Eingabe        ESC : Installation abrechen", 
                     firmnum, was esc ) ;
               IF was esc 
                 THEN menu phase := 0 
                 ELSE menu phase := 2 ; 
                      firmenname := name (firmen,firmnum) ;
               FI ;
  
      CASE 2 : menu (firmenname + " - Menü", drucker(firmnum),
                     "CR: Eingabe        ESC : Zurück zum Hauptmenü",      
                     druckernum, was esc) ;
               IF was esc 
                 THEN menu phase := 1 
                 ELSE menu phase := 3 ; 
                      druckername := name (drucker(firmnum),druckernum);  
                      printername := name (printer(firmnum),druckernum); 
                      fonttabname := name (fonttables(firmnum),druckernum); 
               FI;
 
      CASE 3 : inst (druckername, printername, fonttabname, installed) ; 
               IF NOT installed THEN menu phase := 1 FI;
    END SELECT 
  UNTIL installed OR abbruch PER ;
  post menu. 
 
  abbruch: 
    menu phase < 1 .
 
  pre menu: 
    line; 
    IF is single task system
      THEN errorstop ("Dieser Treiber arbeitet nur mit Multi-Tasking-EUMEL") 
    FI; 
    IF NOT is system task (myself)
      THEN errorstop ("Die Druckertask muß im Systemzweig angelegt werden") 
    FI; 
    command dialogue (TRUE);
    IF name (myself) <> "PRINTER" 
      THEN putline ("Diese Task heißt nicht ""PRINTER"", sondern """ + 
                    name (myself) + """ !"); 
           IF yes ("Soll die Task in ""PRINTER"" umbenannt werden ?") 
             THEN rename myself ("PRINTER") 
           FI 
    FI. 
 
  is single task system:  (pcb (9) AND 255) = 1.
 
  post menu: 
   IF NOT installed 
    THEN page; 
         putline ("Es ist kein Druckertreiber installiert worden!"); 
         line; 
         putline ("Wenn dieses Installationsprogramm insertiert wurde,");
         putline ("kann es in der Task """ + name (myself) + """ "); 
         putline ("mit 'treiber einrichten' erneut aufgerufen werden."); 
         line; 
   FI. 
 
END PROC treiber einrichten ;
 
PROCEDURE menu (TEXT CONST header, THESAURUS CONST items, TEXT CONST bottom, 
                INT VAR choice, BOOL VAR was esc) : 
  INT VAR anzahl ; 
  page; 
  headline (header) ; 
  show list (items,anzahl) ; 
  bottomline (bottom) ;
  ask user (anzahl,choice,was esc);  
END PROC menu ;
 
PROC headline (TEXT CONST header): 
  cursor (13,1); 
  putline ("E U M E L - Druckertreiber - Installations - Programm"); 
  cursor (40 - LENGTH header DIV 2, 2); 
  IF header <> "" THEN put (header) FI ;
  line (2) 
END PROC headline; 
 
PROC bottomline (TEXT CONST bottom): 
  cursor (1,24); 
  IF bottom <> "" THEN put (""5"" + bottom) FI ;
END PROC bottomline; 
 
PROC show list (THESAURUS CONST items , INT VAR anzahl ) : 
  INT VAR i ; 
  anzahl := highest entry (items);
  FOR i FROM 1 UPTO anzahl REP 
    putline ( text(i) + ".  " + name (items,i) ) ; 
  PER;
END PROC show list ;
 
PROC ask user (INT CONST max choice, INT VAR choice, BOOL VAR was esc): 
  TEXT VAR exit; 
  TEXT VAR inp := "";
  REP 
    cursor (1,23); 
    IF inp = "" 
      THEN put ("Ihre Wahl (Nummer eingeben):")
      ELSE put ("FEHLER! Eingabe korrigieren:")
    FI; 
    editget (inp, ""27"", "", exit); 
    was esc :=  exit = ""27"";
  UNTIL was esc OR ok PER. 
 
  ok: 
    choice := int (inp) ; 
    last conversion ok CAND ( choice > 0 AND choice <= max choice) . 
END PROC ask user; 
 
BOOL PROC is system task (TASK CONST task): 
  TASK VAR tsk := task ; 
  WHILE NOT (tsk = supervisor OR tsk = niltask) REP  
    tsk := father (tsk) ; 
  PER;
  tsk = supervisor 
END PROC is system task ;
 
PROC inst (TEXT CONST druckername, printername, fonttabname, 
           BOOL VAR success) : 
   page ; 
   headline (druckername) ; 
   fetch from archive if necessary ((empty thesaurus 
      + printer name + fonttab name) - all ,success); 
   IF success  AND ok
     THEN page ; 
          putline ("Der Drucker wird insertiert"); 
          insert (printer name) ; 
     ELSE success := FALSE ; 
   FI. 
 
ok: 
  bottomline (" "); 
  yes ("Soll der ausgewählte Drucker insertiert werden"). 
   
END PROC inst ; 
 
PROC fetch from archive if necessary (THESAURUS CONST files, 
                                       BOOL VAR success ):
  BOOL VAR was esc ; 
  THESAURUS VAR thes :: files; 
 
  WHILE highest entry (thes) > 0  REP
    ask for archive;
    IF NOT was esc 
      THEN disable stop ; 
           bottomline ("Bitte warten !  "); 
           reserve archive;
           IF NOT is error 
             THEN IF highest entry (thes / ALL archive) > 0 
                    THEN fetch (thes / ALL archive, archive);
                    ELSE fehler ("Dateien nicht gefunden") 
                  FI; 
                  thes := thes - all;
           FI; 
           IF is error 
             THEN fehler (errormessage);
                  clear error 
           FI; 
           command dialogue (FALSE); 
           release (archive);
           command dialogue (TRUE); 
           enable stop ; 
    FI;
  UNTIL was esc PER; 
  success := highest entry (thes) = 0. 
 
ask for archive:
  headline ("") ;
  putline ("Bitte Archiv mit den Dateien"); 
  TEXT VAR buffer;
  INT VAR index :: 0; 
  REP 
    get (thes, buffer, index); 
    putline ("    " + buffer) 
  UNTIL index = 0 PER; 
  putline ("einlegen !"); 
  bottomline ("CR: Wenn Archiv eingelegt        ESC : Zurück zum Hauptmenü"); 
  cursor (1,24); 
  REP 
    inchar (buffer) ; 
  UNTIL buffer = ""13"" OR buffer = ""27"" PER ; 
  was esc := buffer = ""27"". 
 
reserve archive :
  INT VAR p1, p2;
  archive (" "31" ");
  list (archive);
  IF is error
     THEN buffer := errormessage;
          p1 := pos (buffer, """", 1 ) + 1;
          p2 := pos (buffer, """", p1) - 1;
          IF p1 > 0 AND p2 > 0
             THEN clear error;
                  buffer := subtext (buffer, p1, p2);
                  archive (buffer);
          FI;
  FI.

END PROC fetch from archive if necessary ;

PROC fehler (TEXT CONST fehlermeldung): 
  bottomline (""7"" + fehlermeldung + "   Bitte eine Taste drücken") ; 
  pause ; 
  bottomline (" ") ; 
END PROC fehler;
 
END PACKET laserdrucker inserter;