system/base/unknown/src/editor

Raw file
Back to index

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 ;