app/gs.dialog/1.2/src/ls-DIALOG decompress

Raw file
Back to index

(* 
        
          ********************************************************* 
          ********************************************************* 
          **                                                     ** 
          **               ls-DIALOG - DECOMPRESS                ** 
          **                                                     ** 
          **                    Version 1.2                      ** 
          **                                                     ** 
          **                 (Stand: 04.11.88)                   ** 
          **                                                     ** 
          **                                                     ** 
          **         Autor: Wolfgang Weber, Bielefeld            ** 
          **                                                     ** 
          **                                                     ** 
          ** Copyright (C) 1987, 1988 Eva Latta-Weber, Bielefeld ** 
          **                                                     ** 
          ** Copyright (C) 1988 ERGOS GmbH, Siegburg             ** 
          **                                                     ** 
          ********************************************************* 
          ********************************************************* 
 
                                                                           *) 
PACKET ls dialog decompress DEFINES 
 
       komprimiere, 
       dekomprimiere: 
 
LET verweis      = "Angegebene Datei existiert nicht!", 
    falscher typ = "Angegebenen Datei hat falschen Typ!", 
    filetype     = 1003; 
 
PROC komprimiere (TEXT CONST dateiname):   
  INT VAR zeiger; 
  ueberpruefe existenz; 
  ueberpruefe dateityp; 
  initialisiere; 
  FOR zeiger FROM 1 UPTO 24 REP 
    getline (ein, eingabezeile); 
    putline (aus, eingabezeile); 
  PER; 
  WHILE NOT eof (ein) REP 
    getline (ein, eingabezeile); 
    zaehler INCR 1; cout (zaehler); 
    zwischenzeile := abgeschnitten (eingabezeile); 
    haenge zeilentrenner an; 
    haenge zwischenzeile an ausgabezeile; 
    schreibe ausgabezeile ggf weg 
  PER; 
  schreibe ausgabezeile weg; 
  mache ausgabedatei zur eingabedatei. 
 
  ueberpruefe existenz: 
    IF NOT exists (dateiname) 
       THEN errorstop (verweis); 
    FI. 
 
  ueberpruefe dateityp: 
    IF type (old (dateiname)) <> filetype 
       THEN errorstop (falscher typ) 
    FI. 
 
  initialisiere: 
    FILE VAR ein := sequential file (input, dateiname); 
    FILE VAR aus := sequential file (output, "KOMPRIM"); 
    maxlinelength (aus, 600); 
    INT VAR zaehler :: 1; 
    TEXT VAR eingabezeile :: "", zwischenzeile :: "", ausgabezeile :: "". 
 
  haenge zeilentrenner an: 
    IF zwischenzeile <> "" 
       THEN zwischenzeile CAT "{}" 
    FI. 
 
  haenge zwischenzeile an ausgabezeile: 
    ausgabezeile CAT zwischenzeile. 
 
  schreibe ausgabezeile ggf weg: 
    IF length (ausgabezeile) > 500 
       THEN schreibe ausgabezeile weg 
    FI. 
 
  schreibe ausgabezeile weg: 
    IF ausgabezeile <> "" 
       THEN putline (aus, ausgabezeile); 
            ausgabezeile := "" 
    FI. 
 
mache ausgabedatei zur eingabedatei: 
  forget (dateiname, quiet); 
  rename ("KOMPRIM", dateiname). 
END PROC komprimiere; 
 
TEXT PROC abgeschnitten (TEXT CONST zeile): 
  TEXT VAR t :: zeile; 
  WHILE (t SUB length (t)) = " " REP 
    t := subtext (t, 1, length (t) - 1) 
  PER; 
  t 
END PROC abgeschnitten; 
 
PROC dekomprimiere (TEXT CONST dateiname): 
  INT VAR zeiger; 
  ueberpruefe existenz; 
  ueberpruefe dateityp; 
  initialisiere; 
  FOR zeiger FROM 1 UPTO 24 REP 
    getline (ein, eingabezeile); 
    putline (aus, eingabezeile); 
  PER; 
  WHILE NOT eof (ein) REP 
    getline (ein, eingabezeile); 
    zerlege zeile 
  PER; 
  forget (dateiname, quiet); 
  rename ("DEKOMPRIM", dateiname). 
 
  ueberpruefe existenz: 
    IF NOT exists (dateiname) 
       THEN errorstop (verweis) 
    FI. 
 
  ueberpruefe dateityp: 
    IF type (old (dateiname)) <> filetype 
       THEN errorstop (falscher typ) 
    FI. 
 
  initialisiere: 
    FILE VAR ein := sequential file (input, dateiname); 
    FILE VAR aus := sequential file (output, "DEKOMPRIM"); 
    INT VAR zaehler :: 1; 
    TEXT VAR eingabezeile :: "",  ausgabezeile :: "". 
 
  zerlege zeile: 
    WHILE eingabezeile <> "" REP 
      nimm das erste stueck und schreibe es weg; 
      entferne den zeilentrenner 
    PER. 
 
  nimm das erste stueck und schreibe es weg: 
    ausgabezeile := subtext (eingabezeile, 1, pos (eingabezeile, "{}") - 1); 
    putline (aus, ausgabezeile); 
    zaehler INCR 1; 
    cout (zaehler). 
 
  entferne den zeilentrenner: 
    eingabezeile := subtext (eingabezeile, pos (eingabezeile, "{}") + 2). 
END PROC dekomprimiere; 
END PACKET ls dialog decompress;