PACKET editor DEFINES (* Autor: P.Heyderhoff *)
(* Stand: 26.04.82 *)
edit , (* Vers.: 1.6.3 *)
show ,
editmode :
FILE VAR file 1, file 2 ;
PROC edit (FILE VAR file) :
x edit (file) ;
ENDPROC edit ;
PROC edit (FILE VAR file 1, file 2) :
x edit (file 1, file 2 )
ENDPROC edit ;
PROC edit (TEXT CONST file name) :
last param (file name) ;
IF exists (file name)
THEN edit 1 (file name)
ELIF yes ("neue datei einrichten")
THEN edit 1 (file name)
ELSE errorstop ("")
FI
ENDPROC edit ;
PROC edit :
edit (last param)
ENDPROC edit ;
PROC edit 1 (TEXT CONST name) :
file 1 := sequential file (modify, name) ;
IF NOT is error
THEN edit (file 1)
FI
ENDPROC edit 1 ;
PROC edit (TEXT CONST file name 1, file name 2) :
IF exists (file name 1)
THEN edit 2 (file name 1, file name 2)
ELIF yes ("erste datei neu einrichten")
THEN edit 2 (file name 1, file name 2)
ELSE errorstop ("")
FI
ENDPROC edit ;
PROC edit 2 (TEXT CONST file name 1, file name 2) :
file 1 := sequential file (modify, file name 1) ;
IF exists (file name 2)
THEN file 2 := sequential file (modify, file name 2) ;
edit (file 1, file 2)
ELIF yes ("zweite datei neu einrichten")
THEN file 2 := sequential file (modify, file name 2) ;
edit (file 1, file 2)
ELSE errorstop ("")
FI
ENDPROC edit 2 ;
PROC show (FILE VAR file) :
schreiberlaubnis (FALSE) ;
edit (file) ;
schreiberlaubnis (TRUE)
ENDPROC show ;
PROC show (TEXT CONST file name) :
IF exists (file name)
THEN file 1 := sequential file (modify, file name) ;
show (file 1) ;
ELSE errorstop ("file does not exist")
FI
ENDPROC show ;
PROC editmode :
feldwortweise (NOT feldwortweise) ;
say (" ") ;
IF feldwortweise
THEN say ("Fließtext"13""10"")
ELSE say ("kein Umbruch"13""10"")
FI .
ENDPROC editmode ;
(****************************** e d i t o r ******************************)
LET DATEI = ROW 4075 STRUCT (INT nachfolger, vorgaenger, index,
fortsetzung, TEXT inhalt),
freianker = 1, dateianker = 2, satzmax = 4075,
bottom = ""6""23""0"" , escape = ""27"", escape w = ""27"w";
BOOL VAR war kein wechsel ;
TEXT VAR tabulator :: 77*" ";
PROC editor (DATEI VAR datei) :
enable stop ;
grundzustand;
zustand aus datei holen ;
REP b i l d e d i t o r (datei);
d a t e i e d i t o r (datei)
UNTIL (feldkommando SUB 1) = escape
PER;
war kein wechsel := (feldkommando SUB 2) <> "w";
feldkommando (subtext (feldkommando, 3));
IF schreiberlaubnis THEN zustand in datei retten FI;
schreiberlaubnis (TRUE);
out (bottom) .
grundzustand :
bildneu (TRUE); bildeinfuegen (FALSE); bildmarke (0);
feldmarke (0); feldseparator (""); feldstelle(1);
feldeinfuegen (FALSE).
zustand in datei retten :
inhalt := text (bildstelle, 5);
inhalt CAT text (bildsatz, 5);
inhalt CAT text (bildzeile, 5);
inhalt CAT text (feldlimit, 5);
feldtab (tabulator);
inhalt CAT tabulator .
zustand aus datei holen :
INT CONST satz nr := int (subtext (inhalt, 1, 5)) ;
IF satz nr > 0
THEN bildstelle (satz nr)
ELSE bildstelle (datei (dateianker).nachfolger)
FI ;
bildsatz (int (subtext (inhalt, 6, 10)));
bildzeile (int (subtext (inhalt, 11, 15)));
feldlimit (int (subtext (inhalt, 16, 20)));
tabulator := subtext (inhalt, 21) ;
feldtabulator (tabulator) .
inhalt :
datei (freianker).inhalt .
END PROC editor;
PROC y edit (DATEI VAR datei) :
editor (datei);
close
END PROC y edit;
LET begin mark = ""15"", endmark blank = ""14" ";
PROC y edit (DATEI VAR erste datei, zweite datei) :
INT CONST alte laenge := bildlaenge - 1;
INT VAR laenge := alte laenge DIV 2, flen := feldende - feldanfang + 2;
bildlaenge (laenge); feldkommando (escape w);
zweimal editieren;
bildlaenge (alte laenge + 1); bildrand (0);
close .
zweimal editieren:
page;
REP cursor ( 1, laenge + 2); out (begin mark);
cursor(flen, laenge + 2); out (endmark blank);
bildrand (0); editor (erste datei); laenge anpassen;
IF war kein wechsel THEN LEAVE zweimal editieren FI;
bildrand (alte laenge + 1 - laenge);
editor (zweite datei); laenge anpassen
UNTIL war kein wechsel
PER .
laenge anpassen :
laenge := bildlaenge;
IF laenge = 1 THEN laenge := 2 FI;
IF laenge <= alte laenge - 2
THEN laenge := alte laenge - laenge
ELSE laenge := 2
FI ; bildlaenge (laenge) .
END PROC y edit;
(**************** schrott ***********************)
PROC x edit (FILE VAR f) :
EXTERNAL 296
ENDPROC x edit ;
PROC x edit (FILE VAR f1, f2) :
EXTERNAL 297
ENDPROC x edit ;
LET FDATEI= STRUCT ( BOUND DATEI f ,
INT index, pointer, line counter,
mode, max line length, max page length,
BOOL edit status unchanged) ;
PROC x edit (FDATEI VAR f1) :
INTERNAL 296 ;
y edit (CONCR (f1.f))
ENDPROC x edit ;
PROC x edit (FDATEI VAR f1, f2) :
INTERNAL 297 ;
y edit (CONCR (f1.f), CONCR (f2.f))
ENDPROC x edit ;
PROC dateieditor (DATEI VAR d) :
EXTERNAL 295
ENDPROC dateieditor ;
PROC bildeditor (DATEI VAR d) :
EXTERNAL 293
ENDPROC bildeditor ;
ENDPACKET editor ;