summaryrefslogtreecommitdiff
path: root/system/base/unknown/src/editor
blob: 63f2f19da52c8a71fbd5a896bf5942bce3b27b88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
 
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 ;