(*
*********************************************************
*********************************************************
** **
** 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;