home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GME / GMEDITOR.I < prev    next >
Encoding:
Text File  |  1991-03-09  |  36.1 KB  |  3 lines

  1. ⓪ (* Portierung auf MM2: 9. 6. 89 *)
  2. ⓪ (* Stand 10. 12. 90 *)
  3. ⓪ 
  4. ⓪ (*
  5. ⓪"17.1.90: TT  MainOutputPath & CompilerParm.name beim Compiler-Call
  6. ⓪/ausgewertet
  7. ⓪#6.3.90: TT  CompilerArgs an Compiler übergeben
  8. ⓪"29.7.90: TT  $Y+ Direktive eingefügt, $J- entfernt
  9. ⓪!13.12.90: TT  Damit nach Compile-Lauf im GME der Text ein File-Datum
  10. ⓪/erhählt, das das Make zufriedenstellt, wird die Zeit VOR
  11. ⓪/dem Compiler-Aufruf verwendet.
  12. ⓪ *)
  13. ⓪ 
  14. ⓪ IMPLEMENTATION MODULE GMEditor;
  15. ⓪ 
  16. ⓪ (* The Little Golem Editor. Begonnen 13. 06. 86
  17. ⓪#(C) 1986, 1987, 1988 by Johannes Leckebusch.
  18. ⓪#(C) 1989, 1990 by Johannes Leckebusch.
  19. ⓪ *)
  20. ⓪ 
  21. ⓪ (*$R-*)
  22. ⓪ (*$Z+*)
  23. ⓪ (*$Y+ (sonst geht Compile nicht!) *)
  24. ⓪ 
  25. ⓪ 
  26. ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADR, ADDRESS;
  27. ⓪ IMPORT StrConv, Loader, Paths, ShellMsg, TimeConvert, Clock, Lists;
  28. ⓪ (* FROM Storage IMPORT Inconsistent; *)
  29. ⓪ FROM EasyGEM1 IMPORT ClearScrap;
  30. ⓪ 
  31. ⓪ (* FROM MyConversions IMPORT ConvCard; *)
  32. ⓪ FROM Convert IMPORT ConvCard;
  33. ⓪ 
  34. ⓪ IMPORT Strings;
  35. ⓪ IMPORT Directory;
  36. ⓪ 
  37. ⓪ FROM FastStrings IMPORT Append, Assign, Copy, Delete, Length,
  38. ⓪6Insert, Pos;
  39. ⓪ 
  40. ⓪ FROM GMEBase IMPORT nul, backspace, CharsInLine, tab, LinesOnScreen,
  41. ⓪7linedel, lineins,
  42. ⓪7WriteChar, WriteLn, WriteConst, Trace,
  43. ⓪7LoescheBild, LoescheZeile, GotoXY,
  44. ⓪7(* CursorEin, *) CursorAus, HighLight, Normal,
  45. ⓪7Left, Right, ButtonSet, MausPos, MausDoppel,
  46. ⓪7MausAus, MausEin, MausBusy, Nachricht,
  47. ⓪7FrageJaNein, Ja, Nein, Abbruch,
  48. ⓪7CharWidth, CharHeight, ScreenWidth, ScreenHeight;
  49. ⓪ 
  50. ⓪ FROM GMEBase IMPORT einBefehl, Befehlssatz;
  51. ⓪ FROM GMEConfig IMPORT einTasteneintrag, einTastenTyp, LiesZeichen,
  52. ⓪(CopyConfig;
  53. ⓪ 
  54. ⓪ FROM GMEBase IMPORT UndoPuffer, ClipBoard, HilfsPuffer, ConfigPuffer,
  55. ⓪(EditPuffer, AlternEdit, FehlerPuffer, MailPuffer, GolemPuffer,
  56. ⓪(Tausch, SendePuffer, PSCPuffer, WaehlPuffer, undone,
  57. ⓪(DruckPuff, StartPuffer;
  58. ⓪ 
  59. ⓪ FROM GMEBase IMPORT cZeile;
  60. ⓪ 
  61. ⓪ FROM GMEBase IMPORT eineZeile, eineInfo, einLinePointer, aLine,
  62. ⓪5einStringPointer,
  63. ⓪5einPufferPointer, einMerkPunkt, MerkIndex, einMerkPointer,
  64. ⓪5einPufferDeskriptor, Mode,
  65. ⓪5Moden, CharSet;
  66. ⓪ 
  67. ⓪ FROM GMEBase IMPORT Loeschen, DeletePuffer, PufferLeer,
  68. ⓪5GetLine, PutLine,
  69. ⓪5FindeLeerpuffer, InsertPuffer, AutoCount;
  70. ⓪ 
  71. ⓪ FROM GMEKernel IMPORT WriteString, SchirmSchreiben,
  72. ⓪7InsertZeile, tabjump;
  73. ⓪ 
  74. ⓪ FROM GMEFile IMPORT SaveConfig, LoadConfig;
  75. ⓪ 
  76. ⓪ FROM GMEKernel IMPORT Edit, Prompt;
  77. ⓪ 
  78. ⓪ FROM GMEKernel IMPORT SucheZeilenPointer, StelleZeileEin, StellePointerEin,
  79. ⓪7SucheZeilenNummer, LineDown, LineUp,
  80. ⓪7DeleteLine, InsertLine, ScrollDown, ScrollUp,
  81. ⓪7DoBackspace, DoDelete, DoCR;
  82. ⓪ 
  83. ⓪ FROM GMEKernel IMPORT SucheWort, TauscheWort, GetKey, ReadNum,
  84. ⓪(InBlockMarken, BlockMarkiert, KopiereLoesche, Kopiere,
  85. ⓪(MarkiereBlockAnfang, MarkiereBlockEnde, LoescheBlockMarken,
  86. ⓪(RueckeBlockEin, LoeschePuffer;
  87. ⓪ 
  88. ⓪ (* FROM EditLook IMPORT SuchwortHolen, WortSuchen, SuchTauschen; *)
  89. ⓪ 
  90. ⓪ FROM GMEBase IMPORT DeleteTail, DoClipboard;
  91. ⓪ 
  92. ⓪ FROM GMEFile IMPORT TextSchreiben, TextLesen;
  93. ⓪ 
  94. ⓪ FROM GMEFile IMPORT ScrapPfad, ScrapName, SetCompilerInfo;
  95. ⓪ 
  96. ⓪ CONST   coffset =               16;
  97. ⓪ 
  98. ⓪ VAR     scrolloffset:           CARDINAL;
  99. ⓪(dummy:                  CHAR;
  100. ⓪(befehl:                 einBefehl;
  101. ⓪(key:                    einTasteneintrag;
  102. ⓪(version:                eineInfo;
  103. ⓪(suchwort:               eineZeile;
  104. ⓪(tauschwort:             eineZeile;
  105. ⓪(Zeile:                  eineZeile;
  106. ⓪(dummyC, dummyCC:        CARDINAL;
  107. ⓪(mx, my, oldmx, oldmy:   CARDINAL;
  108. ⓪(Knoepfe:                ButtonSet;
  109. ⓪(bewegt:                 BOOLEAN;
  110. ⓪(SelectMenue,
  111. ⓪(SelectEintrag:          CARDINAL;
  112. ⓪(LoeschPfad, LoeschName: eineInfo;
  113. ⓪(DummySuff:              ARRAY [0..3] OF CHAR;
  114. ⓪(result:                 INTEGER;
  115. ⓪(returnX:                CARDINAL;
  116. ⓪(VollPrompt:             BOOLEAN;
  117. ⓪(BlockWurdeMarkiert:     BOOLEAN;
  118. ⓪ 
  119. ⓪ VAR compLine: einLinePointer;
  120. ⓪$compEOF: CHAR;
  121. ⓪ 
  122. ⓪ 
  123. ⓪ (* die folg. Prozedur muß global sein! *)
  124. ⓪ 
  125. ⓪ (*$Z-*)
  126. ⓪ PROCEDURE doCompilerLine (): einStringPointer;
  127. ⓪"(*$L-*)
  128. ⓪"BEGIN
  129. ⓪$(*
  130. ⓪&compLine:= compLine^.naechste;
  131. ⓪&IF compLine # NIL THEN
  132. ⓪(p:= compLine^.ZeilPointer;
  133. ⓪&ELSE
  134. ⓪(compEOF:= 3C;
  135. ⓪(p:= ADR (compEOF)
  136. ⓪&END;
  137. ⓪&RETURN p
  138. ⓪$*)
  139. ⓪$ASSEMBLER
  140. ⓪(LEA     compLine,A0
  141. ⓪(MOVE.L  (A0),A1
  142. ⓪(MOVE.L  compLine.naechste(A1),A1
  143. ⓪(MOVE.L  A1,(A0)
  144. ⓪(BEQ     atEOF
  145. ⓪ 
  146. ⓪(MOVE.L  compLine.ZeilPointer(A1),(A3)+
  147. ⓪(RTS
  148. ⓪ 
  149. ⓪&atEOF
  150. ⓪(MOVE.B  #$03,compEOF
  151. ⓪(MOVE.L  #compEOF,(A3)+
  152. ⓪$END;
  153. ⓪"END doCompilerLine;
  154. ⓪"(*$L=*)
  155. ⓪ (*$Z+*)
  156. ⓪ 
  157. ⓪ (*************************** Aus EditLook ***********************)
  158. ⓪ 
  159. ⓪ (*********** Alte Suchroutinen, die frueher in Editor.MOD waren: ****)
  160. ⓪ CONST   PhantomTrenn =          37C; (* Arghhh! Sollte importiert werden... *)
  161. ⓪ VAR     TrennSet, BindeSet:     CharSet;
  162. ⓪ 
  163. ⓪ PROCEDURE SuchwortHolen (Puff: einPufferPointer; VAR suchwort: ARRAY OF CHAR);
  164. ⓪ VAR   ind, off:               CARDINAL;
  165. ⓪&switch, warBlank:       BOOLEAN;
  166. ⓪ 
  167. ⓪"(* Aus Editline, abgeaendert!: *)
  168. ⓪"PROCEDURE SkipBlank (ch: CHAR): BOOLEAN;
  169. ⓪"BEGIN
  170. ⓪$switch := warBlank;
  171. ⓪$warBlank := warBlank OR (ch IN TrennSet);
  172. ⓪$IF warBlank & (ch # ' ') & switch THEN
  173. ⓪&warBlank := FALSE;
  174. ⓪&switch := FALSE;
  175. ⓪&RETURN FALSE; (* Cursor bleibt stehen *)
  176. ⓪$ELSE RETURN TRUE; (* Cursor läuft weiter *)
  177. ⓪$END (* IF *);
  178. ⓪"END SkipBlank;
  179. ⓪"
  180. ⓪ BEGIN (* SuchwortHolen *)
  181. ⓪"suchwort [0] := nul;
  182. ⓪"WITH Puff^.MerkPunkte [LaufendeZeile] DO
  183. ⓪$ind := 0; off := 0; warBlank := FALSE;
  184. ⓪$IF (merkline^.ZeilPointer^ [ind + charpos] IN TrennSet) THEN
  185. ⓪&WHILE SkipBlank (merkline^.ZeilPointer^ [ind + charpos]) DO
  186. ⓪(INC (ind); INC (off);
  187. ⓪&END;
  188. ⓪$END (* IF *);
  189. ⓪$IF charpos + ind < Length (merkline^.ZeilPointer^) THEN
  190. ⓪&WHILE (SkipBlank (merkline^.ZeilPointer^ [ind + charpos])) &
  191. ⓪,(merkline^.ZeilPointer^ [ind + charpos] # ' ') DO
  192. ⓪(suchwort [ind - off] := merkline^.ZeilPointer^ [ind + charpos];
  193. ⓪(INC (ind);
  194. ⓪&END (* WHILE *);
  195. ⓪&IF (ind > 0) & (merkline^.ZeilPointer^ [ind - 1 + charpos] IN
  196. ⓪+TrennSet - CharSet {' '})
  197. ⓪(THEN DEC (ind);
  198. ⓪&END (* IF *);
  199. ⓪$END (* IF *);
  200. ⓪$suchwort [ind - off] := nul;
  201. ⓪"END (* WITH *);
  202. ⓪ END SuchwortHolen;
  203. ⓪!
  204. ⓪ PROCEDURE WortSuchen (Puff: einPufferPointer;
  205. ⓪6holen: BOOLEAN; VAR suchwort: ARRAY OF CHAR);
  206. ⓪ VAR   repeat:           CARDINAL;
  207. ⓪&s:                CharSet;
  208. ⓪&m:                eineInfo;
  209. ⓪&gefunden:         BOOLEAN;
  210. ⓪&ersterFund:       BOOLEAN;
  211. ⓪&IndexAbfrage:     BOOLEAN;
  212. ⓪&ok:               BOOLEAN;
  213. ⓪ VAR   ml, mp, hp:       einMerkPointer;
  214. ⓪&(* dummy,dummy1, scd, *)
  215. ⓪&ch, ch1:          CHAR;
  216. ⓪&key:              einTasteneintrag;
  217. ⓪ BEGIN
  218. ⓪"IF holen THEN SuchwortHolen (Puff, suchwort);
  219. ⓪"(* ELSE suchwort [0] := nul; *)
  220. ⓪"END;
  221. ⓪"IF WortSuche IN Puff^.Modus THEN
  222. ⓪$Prompt (1, 'Suche Wort (ESC löscht Vorgabe, leeres Wort bricht ab): ',
  223. ⓪*suchwort, key);
  224. ⓪"ELSE
  225. ⓪$Prompt (1, 'Suche Muster (ESC löscht Vorgabe, leeres Muster bricht ab): ',
  226. ⓪*suchwort, key);
  227. ⓪"END (* IF *);
  228. ⓪"(* tauschwort := ''; *)
  229. ⓪"IF ~(suchwort [0] = nul) THEN
  230. ⓪"
  231. ⓪$s := CharSet {'E', 'N', 'L', 'Q'}; (* Konstante einsetzen funkt. nicht *)
  232. ⓪$ch := 'E';
  233. ⓪$GetKey (2, 'E(inmal, N(mal, L(etztes suchen oder Q(uit: ', s, ch);
  234. ⓪$IF ch = 'Q' THEN
  235. ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
  236. ⓪&RETURN;
  237. ⓪$END (* IF Quit *);
  238. ⓪$IF ch = 'N' THEN
  239. ⓪&repeat := 1;
  240. ⓪&ReadNum (3, 'Anzahl: ', repeat);
  241. ⓪&IF repeat = 0 THEN RETURN; END;
  242. ⓪$ELSE repeat := 1;
  243. ⓪$END (* IF *);
  244. ⓪$ersterFund := TRUE;
  245. ⓪$IF holen THEN
  246. ⓪&WITH Puff^ DO
  247. ⓪(WITH MerkPunkte [LetztePosition] DO
  248. ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  249. ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
  250. ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
  251. ⓪(END (* WITH *);
  252. ⓪&END (* WITH Puff^ *);
  253. ⓪&StelleZeileEin (Puff, 1, 0);
  254. ⓪$END (* IF holen *);
  255. ⓪$REPEAT
  256. ⓪&MausBusy;
  257. ⓪&SucheWort (Puff, suchwort, gefunden, key);
  258. ⓪&IF ch IN CharSet {'E', 'N'} THEN DEC (repeat);
  259. ⓪(IF ~gefunden THEN
  260. ⓪*Strings.Assign ('>>', m, ok); Append (suchwort, m);
  261. ⓪*Strings.Append ('<<|nicht gefunden!', m, ok);
  262. ⓪*Nachricht (m);
  263. ⓪(END (* IF ~gefunden *);
  264. ⓪&END (* IF dummy *);
  265. ⓪$UNTIL (ch = 'E') OR ~gefunden OR (repeat = 0);
  266. ⓪"END (* IF *);
  267. ⓪"IF gefunden THEN
  268. ⓪$WITH Puff^ DO
  269. ⓪&WITH MerkPunkte [IndexListe] DO
  270. ⓪(zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  271. ⓪(merkline := MerkPunkte [LaufendeZeile].merkline;
  272. ⓪(charpos := MerkPunkte [LaufendeZeile].charpos;
  273. ⓪&END (* WITH *);
  274. ⓪$END (* WITH Puff^ *);
  275. ⓪"END (* IF gefunden *);
  276. ⓪"Normal;
  277. ⓪"SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
  278. ⓪ END WortSuchen;
  279. ⓪ 
  280. ⓪ PROCEDURE SuchTauschen (Puff: einPufferPointer; holen: BOOLEAN;
  281. ⓪8VAR suchwort, tauschwort: ARRAY OF CHAR);
  282. ⓪ VAR   repeat:           CARDINAL;
  283. ⓪&dummy:            einTasteneintrag;
  284. ⓪&ch, ch1:          CHAR;
  285. ⓪&key:              einTasteneintrag;
  286. ⓪&s:                CharSet;
  287. ⓪&gefunden:         BOOLEAN;
  288. ⓪ BEGIN
  289. ⓪"IF holen THEN SuchwortHolen (Puff, suchwort);
  290. ⓪"(* ELSE suchwort [0] := nul; *)
  291. ⓪"END;
  292. ⓪"WITH Puff^ DO
  293. ⓪$IF WortSuche IN Modus THEN
  294. ⓪&Prompt (1,
  295. ⓪!'Suchen & Tauschen: Suchwort (ESC löscht Vorgabe, leeres Wort bricht ab): ',
  296. ⓪,suchwort, key);
  297. ⓪$ELSE
  298. ⓪&Prompt (1,
  299. ⓪ 'Suchen & Tauschen: Suchmuster (ESC löscht Vorgabe, leeres Muster bricht ab): ',
  300. ⓪,suchwort, key);
  301. ⓪$END (* IF *);
  302. ⓪$IF ~(suchwort [0] = nul) THEN
  303. ⓪&IF (tauschwort [0] = nul) THEN Assign (suchwort, tauschwort); END;
  304. ⓪&Prompt (2, 'Austauschwort (ESC löscht Vorgabe): ', tauschwort, key);
  305. ⓪&s := CharSet {'E', 'N', 'F', 'A', 'Q'};
  306. ⓪&ch := 'E';
  307. ⓪&GetKey (3, 'E(inmal, N(mal, F(ragen nmal, A(lle tauschen, Q(uit: ', s, ch);
  308. ⓪&IF ch = 'Q' THEN
  309. ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  310. ⓪(RETURN;
  311. ⓪&END (* IF Quit *);
  312. ⓪&IF ch IN CharSet {'N', 'F'} THEN
  313. ⓪(repeat := 1;
  314. ⓪(ReadNum (4, 'Anzahl (0 für alle): ', repeat);
  315. ⓪(IF repeat = 0 THEN repeat := 65000; END;
  316. ⓪&ELSE repeat := 1;
  317. ⓪&END (* IF *);
  318. ⓪&REPEAT
  319. ⓪(MausBusy;
  320. ⓪(SucheWort (Puff, suchwort, gefunden, key);
  321. ⓪(IF (ch IN CharSet {'E', 'N', 'F'})
  322. ⓪(THEN DEC (repeat);
  323. ⓪(END (* IF *);
  324. ⓪*IF gefunden THEN
  325. ⓪,INCL (Modus, Editiert);
  326. ⓪,IF ch = 'F' THEN
  327. ⓪.SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  328. ⓪.GotoXY (0, 0); LoescheZeile; HighLight;
  329. ⓪.WriteConst ('Tauschen J/N/Ende: '); Normal;
  330. ⓪.GotoXY (MerkPunkte [LaufendeZeile].charpos -
  331. ⓪8MerkPunkte [ErsteZeile].charpos,
  332. ⓪6MerkPunkte [LaufendeZeile].zeilpos -
  333. ⓪8MerkPunkte [ErsteZeile].zeilpos);
  334. ⓪.REPEAT LiesZeichen (ch1); ch1 := CAP (ch1);
  335. ⓪.UNTIL ch1 IN CharSet {'J', 'N', 'E'};
  336. ⓪,ELSE ch1 := 'J'; WriteChar ('.');
  337. ⓪,END (* IF *);
  338. ⓪,IF ch1 = 'J' THEN
  339. ⓪.TauscheWort (Puff, suchwort, tauschwort, Max, dummy);
  340. ⓪,ELSIF ch1 = 'E' THEN gefunden := FALSE;
  341. ⓪,END (* IF *);
  342. ⓪*END (* IF gefunden *);
  343. ⓪&UNTIL (ch = 'E') OR ~gefunden OR (repeat = 0);
  344. ⓪$END (* IF *);
  345. ⓪$IF gefunden THEN
  346. ⓪&WITH MerkPunkte [IndexListe] DO
  347. ⓪(zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  348. ⓪(merkline := MerkPunkte [LaufendeZeile].merkline;
  349. ⓪(charpos := MerkPunkte [LaufendeZeile].charpos;
  350. ⓪&END (* WITH *);
  351. ⓪$END (* IF gefunden *);
  352. ⓪$SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  353. ⓪"END (* WITH *);
  354. ⓪ END SuchTauschen;
  355. ⓪ 
  356. ⓪ (**************************** ENDE EditLook ****************************)
  357. ⓪ 
  358. ⓪ 
  359. ⓪ PROCEDURE CheckMargin (Puff: einPufferPointer);
  360. ⓪ VAR   Cursor, Offset, dec:     CARDINAL;
  361. ⓪ BEGIN
  362. ⓪"WITH Puff^ DO
  363. ⓪$Cursor := MerkPunkte [LaufendeZeile].charpos;
  364. ⓪$Offset := MerkPunkte [ErsteZeile].charpos;
  365. ⓪ 
  366. ⓪$IF Cursor < Offset THEN (* es war die linke Grenze: *)
  367. ⓪&dec := ((Offset - Cursor) DIV scrolloffset + 1) * scrolloffset;
  368. ⓪&IF MerkPunkte [ErsteZeile].charpos > dec THEN
  369. ⓪(DEC (MerkPunkte [ErsteZeile].charpos, dec)
  370. ⓪&ELSE MerkPunkte [ErsteZeile].charpos := 0;
  371. ⓪&END (* IF *);
  372. ⓪$ELSIF Cursor >= Offset + CharsInLine (* es war die rechte Grenze: *) THEN
  373. ⓪&dec := ((Cursor - Offset) DIV scrolloffset + 1) *
  374. ⓪/scrolloffset - CharsInLine;
  375. ⓪&INC (MerkPunkte [ErsteZeile].charpos, dec);
  376. ⓪$END (* IF globalx <> xoffset *);
  377. ⓪"END (* WITH *);
  378. ⓪ END CheckMargin;
  379. ⓪ 
  380. ⓪ PROCEDURE CallCompiler (puff: einPufferPointer; VAR msg: ARRAY OF CHAR);
  381. ⓪"(*
  382. ⓪#* IN: puff
  383. ⓪#* OUT: msg  (enthält Fehlermeldung, sonst leer)
  384. ⓪#*)
  385. ⓪ 
  386. ⓪"VAR ok: BOOLEAN; ex: INTEGER; res: Loader.LoaderResults;
  387. ⓪&n: CARDINAL; arg: ARRAY [0..125] OF CHAR;
  388. ⓪&drivers: Lists.List;
  389. ⓪&tagzeit, dat: CARDINAL;
  390. ⓪"BEGIN
  391. ⓪$GotoXY (0, 0); HighLight;
  392. ⓪$WriteConst ('Compiler läuft...'); LoescheZeile; Normal;
  393. ⓪$ShellMsg.ScanMode:= FALSE;
  394. ⓪$compLine:= puff^.Puffer;
  395. ⓪$Strings.Concat (puff^.Name, ' /Q /^', arg, ok);
  396. ⓪$Strings.Append (StrConv.LHexToStr (ADDRESS (doCompilerLine),0), arg, ok);
  397. ⓪$IF ShellMsg.MainOutputPath[0] # 0C THEN
  398. ⓪&Strings.Append (' /O', arg, ok);
  399. ⓪&Append (ShellMsg.MainOutputPath, arg);
  400. ⓪$END;
  401. ⓪$IF ShellMsg.CompilerArgs[0] # 0C THEN
  402. ⓪&Strings.Append (' ', arg, ok);
  403. ⓪&Append (ShellMsg.CompilerArgs, arg);
  404. ⓪$END;
  405. ⓪$(* Zeit muß VOR Compiler-Aufruf gemerkt werden! *)
  406. ⓪$tagzeit:= Clock.PackTime (Clock.CurrentTime ());
  407. ⓪$dat:= Clock.PackDate (Clock.CurrentDate ());
  408. ⓪$MausBusy;
  409. ⓪$Loader.CallModule (ShellMsg.CompilerParm.name, ShellMsg.StdPaths,
  410. ⓪7arg, NIL, ex, msg, res);
  411. ⓪$IF res = Loader.noError THEN
  412. ⓪&CASE ex OF
  413. ⓪(0:   Strings.Upper (ShellMsg.CodeName);
  414. ⓪-Assign (ShellMsg.CodeName, msg);
  415. ⓪-Strings.Append ('   Länge: ', msg, ok);
  416. ⓪-Strings.Append (StrConv.CardToStr (ShellMsg.CodeSize, 0),
  417. ⓪=msg, ok);
  418. ⓪-WITH puff^ DO
  419. ⓪/tageszeit := tagzeit;
  420. ⓪/datum := dat;
  421. ⓪/INCL (Modus, Compiliert);
  422. ⓪-END (* WITH *);
  423. ⓪(|
  424. ⓪(2,3: StelleZeileEin (puff, ShellMsg.TextLine, LinesOnScreen DIV 2);
  425. ⓪-n:= Length
  426. ⓪2(puff^.MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^) + 1;
  427. ⓪-IF ShellMsg.TextCol > n THEN ShellMsg.TextCol:= n END;
  428. ⓪-puff^.MerkPunkte [LaufendeZeile].charpos := ShellMsg.TextCol-1;
  429. ⓪-CheckMargin (puff);
  430. ⓪-Strings.Assign (ShellMsg.ErrorMsg, msg, ok);
  431. ⓪-(*
  432. ⓪-WITH puff^.MerkPunkte [CompilerInfo] DO
  433. ⓪/zeilpos := puff^.MerkPunkte [LaufendeZeile].zeilpos;
  434. ⓪/merkline := puff^.MerkPunkte [LaufendeZeile].merkline;
  435. ⓪/charpos := puff^.MerkPunkte [LaufendeZeile].charpos;
  436. ⓪/PutLine (merkinfo, msg);
  437. ⓪-END (* WITH *);
  438. ⓪-*)
  439. ⓪(|
  440. ⓪(4:   Strings.Assign ('Include-Dateien sind hier nicht erlaubt!',
  441. ⓪=msg, ok)
  442. ⓪(|
  443. ⓪&ELSE
  444. ⓪-Strings.Assign ('Unbekannte Antwort vom Compiler', msg, ok);
  445. ⓪&END
  446. ⓪$ELSE
  447. ⓪&(* Fehler in 'msg' anzeigen lassen *)
  448. ⓪$END;
  449. ⓪$SetCompilerInfo (puff, msg);
  450. ⓪"END CallCompiler;
  451. ⓪ 
  452. ⓪ PROCEDURE ZeitAnzeigen (Puff: einPufferPointer; VAR msg: ARRAY OF CHAR);
  453. ⓪ VAR     str:            ARRAY [0..13] OF CHAR;
  454. ⓪(ok:             BOOLEAN;
  455. ⓪ BEGIN
  456. ⓪"Assign ('Datum: ', msg);
  457. ⓪"TimeConvert.DateToText (Clock.UnpackDate (Puff^.datum), '', str);
  458. ⓪"Append (str, msg);
  459. ⓪"Append (', Zeit: ', msg);
  460. ⓪"TimeConvert.TimeToText (Clock.UnpackTime (Puff^.tageszeit), '', str);
  461. ⓪"Append (str, msg);
  462. ⓪ END ZeitAnzeigen;
  463. ⓪ 
  464. ⓪ PROCEDURE CursorAufMauspos (Puff: einPufferPointer; bef: einTasteneintrag);
  465. ⓪ VAR     n:              CARDINAL;
  466. ⓪(xpos, ypos:     CARDINAL;
  467. ⓪ BEGIN
  468. ⓪"IF oldmy <= CharHeight * 3 (* in Statuszeile *)
  469. ⓪$THEN RETURN;
  470. ⓪"END;
  471. ⓪"xpos := oldmx DIV CharWidth; ypos := oldmy DIV CharHeight - 2;
  472. ⓪"WITH Puff^ DO
  473. ⓪$MausAus; GotoXY (xpos, ypos);
  474. ⓪$(* n wird die absolute Textzeile, daher Addition
  475. ⓪'des Fensteroffsets >>ErsteZeile.zeilpos<< *)
  476. ⓪$n := MerkPunkte [ErsteZeile].zeilpos + ypos;
  477. ⓪$IF n > ZeilenAnzahl THEN n := ZeilenAnzahl; END;
  478. ⓪ 
  479. ⓪$(* Einstellen auf die Zeile mit gleichem Fensteroffset *)
  480. ⓪$StelleZeileEin (Puff, n, n - MerkPunkte [ErsteZeile].zeilpos);
  481. ⓪$
  482. ⓪$(* Einstellen auf Charakter + seitlichem Scrolloffset *)
  483. ⓪$MerkPunkte [LaufendeZeile].charpos := MerkPunkte [ErsteZeile].charpos +
  484. ⓪;xpos;
  485. ⓪$CASE bef.bef OF
  486. ⓪&LeftMous:         MarkiereBlockAnfang (Puff); BlockWurdeMarkiert:= TRUE|
  487. ⓪&RightMous:        MarkiereBlockEnde (Puff); BlockWurdeMarkiert:= TRUE|
  488. ⓪&ELSE;
  489. ⓪$END;
  490. ⓪"END (* WITH *);
  491. ⓪ END CursorAufMauspos;
  492. ⓪ 
  493. ⓪ PROCEDURE DoWeitSuch (Puff: einPufferPointer);
  494. ⓪ VAR     gefunden:       BOOLEAN;
  495. ⓪(ok:             BOOLEAN;
  496. ⓪ BEGIN
  497. ⓪"WITH Puff^ DO
  498. ⓪$IF ~(suchwort [0] = nul) THEN
  499. ⓪&GotoXY (0, 0); HighLight; LoescheZeile;
  500. ⓪&WriteString (0, suchwort);
  501. ⓪&MausBusy;
  502. ⓪&SucheWort (Puff, suchwort, gefunden, key);
  503. ⓪&IF gefunden THEN
  504. ⓪(WITH MerkPunkte [IndexListe] DO
  505. ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  506. ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
  507. ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
  508. ⓪(END (* WITH *);
  509. ⓪&ELSE
  510. ⓪(Strings.Assign ('>>', Zeile, ok); Append (suchwort, Zeile);
  511. ⓪(Strings.Append ('<<|nicht gefunden!', Zeile, ok);
  512. ⓪(Nachricht (Zeile);
  513. ⓪&END (* IF ~gefunden *);
  514. ⓪&Normal;
  515. ⓪$END (* IF *);
  516. ⓪"END (* WITH *);
  517. ⓪ END DoWeitSuch;
  518. ⓪ 
  519. ⓪ PROCEDURE DoTextLoad (VAR Puff: einPufferPointer; termch: einTasteneintrag;
  520. ⓪(VAR Info: ARRAY OF CHAR);
  521. ⓪ VAR     helpPuff:       einPufferPointer;
  522. ⓪ BEGIN
  523. ⓪"WITH Puff^ DO
  524. ⓪$helpPuff := FindeLeerpuffer (Puff);
  525. ⓪$IF helpPuff # NIL THEN
  526. ⓪&Puff := helpPuff;
  527. ⓪&SchirmSchreiben (Puff,
  528. ⓪*Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
  529. ⓪&Puff := helpPuff;
  530. ⓪&TextLesen (Puff, TRUE, TRUE, TRUE, TRUE);
  531. ⓪0(* KonfigSpeichern IN ConfigPuffer^.Modus);*)
  532. ⓪&IF ~PufferLeer (Puff) THEN
  533. ⓪(Assign (helpPuff^.Pfad, Info); DeleteTail (Info);
  534. ⓪(Append (helpPuff^.Name, Info);
  535. ⓪(Puff := helpPuff;
  536. ⓪&END (* IF Puffer leer *);
  537. ⓪&tabjump := TabWeite;
  538. ⓪&SchirmSchreiben (Puff,
  539. ⓪(MerkPunkte [LaufendeZeile].merkline, 0, 0);
  540. ⓪$END (* IF *);
  541. ⓪"END (* WITH *);
  542. ⓪ END DoTextLoad;
  543. ⓪ 
  544. ⓪ PROCEDURE DoNaechsterMerker (Puff: einPufferPointer;
  545. ⓪=VAR infozeile: ARRAY OF CHAR);
  546. ⓪ VAR     mp:     einMerkPointer;
  547. ⓪ BEGIN
  548. ⓪"WITH Puff^.MerkPunkte [CompilerInfo] DO
  549. ⓪$StellePointerEin (Puff, merkline, LinesOnScreen DIV 2);
  550. ⓪$Puff^.MerkPunkte [LaufendeZeile].charpos := charpos;
  551. ⓪$GetLine (merkinfo, infozeile);
  552. ⓪"END (* WITH *);
  553. ⓪"WITH Puff^ DO
  554. ⓪$WITH MerkPunkte [LaufendeZeile] DO
  555. ⓪&IF (charpos > MerkPunkte [ErsteZeile].charpos + CharsInLine) OR
  556. ⓪)(charpos < MerkPunkte [ErsteZeile].charpos) THEN
  557. ⓪(CheckMargin (Puff);
  558. ⓪&END (* IF *);
  559. ⓪$END (* WITH *);
  560. ⓪"END (* WITH Puff^ *);
  561. ⓪ END DoNaechsterMerker;
  562. ⓪ 
  563. ⓪ PROCEDURE Editieren (Puff: einPufferPointer;
  564. ⓪5VAR RetPuff: einPufferPointer;
  565. ⓪5VAR termch: einTasteneintrag;
  566. ⓪5infozeile: ARRAY OF CHAR;
  567. ⓪5Level: CARDINAL);
  568. ⓪ VAR    restlaenge:              CARDINAL;
  569. ⓪'n, mz:                   CARDINAL;
  570. ⓪'ml:                      einLinePointer;
  571. ⓪'shift:                   BOOLEAN;
  572. ⓪'overflow:                BOOLEAN;
  573. ⓪'marginoverflow:          BOOLEAN;
  574. ⓪'Indent:                  BOOLEAN;
  575. ⓪'Inf, Info:               eineInfo;
  576. ⓪'AlterPfad, AlterName:    eineInfo;
  577. ⓪'ch:                      CHAR;
  578. ⓪'helpInfo:                eineInfo;
  579. ⓪ 
  580. ⓪'helpPuff:                einPufferPointer;
  581. ⓪!
  582. ⓪ VAR     dummy:          CHAR;
  583. ⓪(gefunden:       BOOLEAN;
  584. ⓪(gotoX, gotoY:   CARDINAL;
  585. ⓪(Z:              eineInfo;
  586. ⓪ 
  587. ⓪"PROCEDURE Vorlauf (Puff: einPufferPointer);
  588. ⓪"VAR   l, ll:          CARDINAL;
  589. ⓪(loescheBlanks:  BOOLEAN;
  590. ⓪(ok:             BOOLEAN;
  591. ⓪"BEGIN
  592. ⓪$EditPuffer := Puff;
  593. ⓪$WITH Puff^ DO
  594. ⓪&
  595. ⓪&(* *** Anzeige der Kopfzeile: *** *)
  596. ⓪&Assign (Pfad, Inf); DeleteTail (Inf);
  597. ⓪&Append (Name, Inf);
  598. ⓪&IF Editiert IN Modus THEN Strings.Append (' !', Inf, ok); END;
  599. ⓪&
  600. ⓪&(* *** Zeileneditor aufrufen: *** *)
  601. ⓪&MausPos (oldmx, oldmy, bewegt, Knoepfe);
  602. ⓪&
  603. ⓪&EXCL (Modus, Changed);
  604. ⓪&IF (infozeile [0] = nul) THEN
  605. ⓪(Edit (Puff, Zeile, TRUE, VollPrompt, Inf,
  606. ⓪.overflow, marginoverflow,
  607. ⓪.FALSE, oldmx, oldmy, termch);
  608. ⓪.VollPrompt := FALSE;
  609. ⓪&ELSE
  610. ⓪(Edit (Puff, Zeile, FALSE, TRUE, infozeile,
  611. ⓪.overflow, marginoverflow,
  612. ⓪.FALSE, oldmx, oldmy, termch);
  613. ⓪(infozeile [0] := nul; VollPrompt := TRUE;
  614. ⓪&END (* IF *);
  615. ⓪&
  616. ⓪&(* *** Bearbeitete Textposition merken: *** *)
  617. ⓪&IF (termch.TT = Befehl) & (termch.bef = RestoreCurrentLine) THEN
  618. ⓪(IF ~(Changed IN Modus) THEN
  619. ⓪*termch.bef := PopLastBufferLine;
  620. ⓪(ELSE
  621. ⓪*SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  622. ⓪*termch.bef := nothing;
  623. ⓪(END;
  624. ⓪&ELSIF Changed IN Modus THEN
  625. ⓪(WITH MerkPunkte [LetztePosition] DO
  626. ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  627. ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
  628. ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
  629. ⓪(END (* WITH *);
  630. ⓪&
  631. ⓪((* Zeile zurueckschreiben: *)
  632. ⓪(PutLine (MerkPunkte [LaufendeZeile].merkline, Zeile);
  633. ⓪(INCL (Modus, Editiert);
  634. ⓪(EXCL (Modus, Compiliert);
  635. ⓪&END (* IF changed *);
  636. ⓪&(*
  637. ⓪&IF (AutoCount >= SchreibZaehler) & (AutoSave IN Modus) THEN
  638. ⓪(AutoCount := 0;
  639. ⓪(TextSchreiben (Puff, FALSE, FALSE, FALSE, KonfigSpeichern IN Modus, FALSE);
  640. ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  641. ⓪9(*MerkPunkte [LaufendeZeile].zeilpos -
  642. ⓪;MerkPunkte [ErsteZeile].zeilpos); *)
  643. ⓪&END (* IF AutoCount *);
  644. ⓪&*)
  645. ⓪$END (* WITH *);
  646. ⓪"END Vorlauf;
  647. ⓪ 
  648. ⓪ CONST   BrowseOff =     8; (* Mausabstand vom Schirmrand in Chars,
  649. ⓪>um Browser statt Menue zu rufen *)
  650. ⓪ VAR     mp, hp:         einMerkPointer;         (* Fuer MerkMenu *)
  651. ⓪(mpt:            einMerkPunkt;
  652. ⓪(ok:             BOOLEAN;
  653. ⓪(vorherMarkiert: BOOLEAN;
  654. ⓪(
  655. ⓪ BEGIN (* Editieren *)
  656. ⓪"VollPrompt := TRUE;
  657. ⓪"WITH Puff^ DO
  658. ⓪$EXCL (Modus, Changed);
  659. ⓪$tabjump := TabWeite;
  660. ⓪$IF ~(Exit IN Puff^.Modus) THEN
  661. ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
  662. ⓪$END (* IF *);
  663. ⓪"END (* WITH *);
  664. ⓪"REPEAT
  665. ⓪$WITH Puff^ DO
  666. ⓪&(* tabjump := TabWeite; *)
  667. ⓪&IF (termch.bef = RollFLeft) OR (termch.bef = RollFRight) THEN
  668. ⓪(scrolloffset := CharsInLine - TabWeite
  669. ⓪&ELSE scrolloffset := TabWeite + TabWeite;
  670. ⓪&END;
  671. ⓪&Vorlauf (Puff);
  672. ⓪&vorherMarkiert:= BlockWurdeMarkiert;
  673. ⓪&BlockWurdeMarkiert:= FALSE;
  674. ⓪&CASE termch.bef OF
  675. ⓪(RollLeft, RollFLeft:  IF MerkPunkte [ErsteZeile].charpos > 0 THEN
  676. ⓪5marginoverflow := TRUE;
  677. ⓪5MerkPunkte [LaufendeZeile].charpos :=
  678. ⓪7MerkPunkte [ErsteZeile].charpos - 1;
  679. ⓪3END (* IF *);
  680. ⓪(|
  681. ⓪(RollRight, RollFRight:  IF MerkPunkte [ErsteZeile].charpos + CharsInLine <= Max THEN
  682. ⓪6MerkPunkte [LaufendeZeile].charpos :=
  683. ⓪7MerkPunkte [ErsteZeile].charpos + CharsInLine;
  684. ⓪4ELSE MerkPunkte [LaufendeZeile].charpos := Max;
  685. ⓪4END (* IF *);
  686. ⓪4marginoverflow := TRUE;
  687. ⓪(|
  688. ⓪(ELSE;
  689. ⓪&END (* CASE *);
  690. ⓪&IF marginoverflow THEN
  691. ⓪(CheckMargin (Puff);
  692. ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
  693. ⓪&ELSE (* not overflow *)
  694. ⓪!
  695. ⓪(CASE termch.bef OF
  696. ⓪*EditBlock:       Strings.Assign ('[***Blockpuffer***]', Inf, ok);
  697. ⓪;EXCL (ClipBoard^.Modus, Exit);
  698. ⓪;SchirmSchreiben (ClipBoard,
  699. ⓪=MerkPunkte [ErsteZeile].merkline, 0, 0);
  700. ⓪;Editieren (ClipBoard, helpPuff, key, Inf, 0);
  701. ⓪;EditPuffer := Puff;
  702. ⓪;VollPrompt := TRUE;
  703. ⓪-|
  704. ⓪*Seitup:          IF ((MerkPunkte [LaufendeZeile].zeilpos + 3) >
  705. ⓪=LinesOnScreen) THEN
  706. ⓪=StelleZeileEin (Puff,
  707. ⓪MMerkPunkte [LaufendeZeile].zeilpos
  708. ⓪M- LinesOnScreen + 3,
  709. ⓪MMerkPunkte [LaufendeZeile].zeilpos
  710. ⓪M- MerkPunkte [ErsteZeile].zeilpos);
  711. ⓪;ELSE StelleZeileEin (Puff, 1, 0);
  712. ⓪;END (* IF *);
  713. ⓪;|
  714. ⓪*cursup:          LineUp (Puff);|
  715. ⓪*Seitdown:        StelleZeileEin (Puff,
  716. ⓪KMerkPunkte [LaufendeZeile].zeilpos
  717. ⓪K+ LinesOnScreen - 3,
  718. ⓪KMerkPunkte [LaufendeZeile].zeilpos
  719. ⓪K- MerkPunkte [ErsteZeile].zeilpos);
  720. ⓪;|
  721. ⓪*cursdown:        LineDown (Puff);
  722. ⓪;|
  723. ⓪*cursleft, ZeilAnf, DelBZeil,
  724. ⓪*Wortleft:        IF MerkPunkte [LaufendeZeile].merkline^.vorige # Puffer THEN
  725. ⓪=LineUp (Puff);
  726. ⓪=MerkPunkte [LaufendeZeile].charpos :=
  727. ⓪?Length (MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^);
  728. ⓪;END (* IF *);
  729. ⓪;|
  730. ⓪*cursright, ZeilEnde, DelEZeil,
  731. ⓪*Wortrigt:        IF MerkPunkte [LaufendeZeile].merkline^.naechste # NIL THEN
  732. ⓪=LineDown (Puff);
  733. ⓪=MerkPunkte [LaufendeZeile].charpos := 0;
  734. ⓪;END (* IF *);
  735. ⓪;VollPrompt := TRUE;
  736. ⓪;|
  737. ⓪*DelLChar,
  738. ⓪*DelLWort:        DoBackspace (Puff);
  739. ⓪;VollPrompt := TRUE;
  740. ⓪;|
  741. ⓪*DelRChar,
  742. ⓪*DelRWort:        WITH MerkPunkte [LaufendeZeile] DO
  743. ⓪=charpos := Length (merkline^.ZeilPointer^);
  744. ⓪;END;
  745. ⓪;DoDelete (Puff);
  746. ⓪;VollPrompt := TRUE;
  747. ⓪;|
  748. ⓪*(* RETURN - Zeile spalten, neue Zeile einfuegen: *)
  749. ⓪*return:          returnX := 1; DoCR (Puff, TRUE, returnX);
  750. ⓪;VollPrompt := TRUE;
  751. ⓪;|
  752. ⓪*(* Undo-Puffer loeschen: *)
  753. ⓪*LoeschUndo:      undone := FALSE;
  754. ⓪;Loeschen (UndoPuffer);
  755. ⓪;|
  756. ⓪*(* Zeile in Puffer kopieren: *)
  757. ⓪*PopCopyLine:     InsertLine (UndoPuffer,
  758. ⓪=Puff^.MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^,
  759. ⓪=FALSE, FALSE, FALSE);
  760. ⓪;VollPrompt := TRUE;
  761. ⓪;|
  762. ⓪*(* Zeile loeschen - in Puffer schreiben: *)
  763. ⓪*PopDeleteLine:   DeleteLine (Puff,
  764. ⓪AMerkPunkte [LaufendeZeile].merkline,
  765. ⓪CTRUE, TRUE);
  766. ⓪;INCL (Modus, Editiert);
  767. ⓪;EXCL (Modus, Compiliert);
  768. ⓪;VollPrompt := TRUE;
  769. ⓪;|
  770. ⓪*(* Zeile aus Puffer bei Cursor in Text kopieren: *)
  771. ⓪*PopLastBufferLine,
  772. ⓪*CopyLastBufferLine: Indent := AutoIndent IN Modus;
  773. ⓪;EXCL (Modus, AutoIndent);
  774. ⓪;LineUp (Puff);
  775. ⓪;InsertLine (Puff,
  776. ⓪GUndoPuffer^.MerkPunkte
  777. ⓪I[LaufendeZeile].merkline^.ZeilPointer^,
  778. ⓪GFALSE, TRUE, TRUE);
  779. ⓪;IF termch.bef = PopLastBufferLine THEN
  780. ⓪=DeleteLine (UndoPuffer,
  781. ⓪?UndoPuffer^.MerkPunkte [LaufendeZeile].merkline,
  782. ⓪GFALSE, FALSE);
  783. ⓪=LineUp (UndoPuffer);
  784. ⓪;END (* IF *);
  785. ⓪;IF Indent THEN INCL (Modus, AutoIndent); END;
  786. ⓪;INCL (Modus, Editiert);
  787. ⓪;EXCL (Modus, Compiliert);
  788. ⓪;VollPrompt := TRUE;
  789. ⓪;|
  790. ⓪*(* Ueberschreiben/Einfuegen umschalten: *)
  791. ⓪*indent:          IF AutoIndent IN Modus THEN
  792. ⓪>EXCL (Modus, AutoIndent);
  793. ⓪;ELSE INCL (Modus, AutoIndent);
  794. ⓪;END (* IF *);
  795. ⓪;VollPrompt := TRUE;
  796. ⓪;|
  797. ⓪*insert:          IF OverWrite IN Modus THEN
  798. ⓪=EXCL (Modus, OverWrite);
  799. ⓪;ELSE INCL (Modus, OverWrite);
  800. ⓪;END (* IF *);
  801. ⓪;VollPrompt := TRUE;
  802. ⓪;|
  803. ⓪*Grossklein:      IF GrossKleinSuche IN Modus THEN
  804. ⓪>EXCL (Modus, GrossKleinSuche);
  805. ⓪;ELSE INCL (Modus, GrossKleinSuche);
  806. ⓪;END;
  807. ⓪-|
  808. ⓪*Wortsuche:       IF WortSuche IN Modus THEN
  809. ⓪=EXCL (Modus, WortSuche);
  810. ⓪;ELSE INCL (Modus, WortSuche);
  811. ⓪;END;
  812. ⓪-|
  813. ⓪*(* Hilfspuffer anzeigen: *)
  814. ⓪*help:            IF HilfsPuffer # NIL THEN
  815. ⓪=EditPuffer := HilfsPuffer;
  816. ⓪=HilfsPuffer := Puff;
  817. ⓪=Puff := EditPuffer;
  818. ⓪=VollPrompt := TRUE;
  819. ⓪;END (* IF *);
  820. ⓪;|
  821. ⓪*(* Neuen Puffer anlegen: *)
  822. ⓪*InsertPuff:      Puff := FindeLeerpuffer (Puff);
  823. ⓪;IF ~PufferLeer (Puff) THEN
  824. ⓪=Puff := InsertPuffer (Puff);
  825. ⓪;END;
  826. ⓪;VollPrompt := TRUE;
  827. ⓪;|
  828. ⓪*NaechstenPuffer: helpPuff := Puff;
  829. ⓪;Puff := Puff^.NaechsterPuffer;
  830. ⓪;tabjump := TabWeite;
  831. ⓪;EditPuffer := Puff;
  832. ⓪;VollPrompt := TRUE;
  833. ⓪;|
  834. ⓪*(* Bildschirm nach unten rollen: *)
  835. ⓪*Rolldown:        ScrollDown (Puff, 1);
  836. ⓪;|
  837. ⓪*(* Bildschirm nach oben rollen: *)
  838. ⓪*Rollup:          ScrollUp (Puff, 1);
  839. ⓪;|
  840. ⓪*(* Zum Textanfang springen: *)
  841. ⓪*zumDAnf:         MerkPunkte [LaufendeZeile].merkline :=
  842. ⓪=Puffer^.naechste;
  843. ⓪;MerkPunkte [ErsteZeile].merkline :=
  844. ⓪=MerkPunkte [LaufendeZeile].merkline;
  845. ⓪;MerkPunkte [LaufendeZeile].zeilpos := 1;
  846. ⓪;MerkPunkte [ErsteZeile].zeilpos := 0;
  847. ⓪;MerkPunkte [LaufendeZeile].charpos := 0;
  848. ⓪;VollPrompt := TRUE; (* Für alle Fälle... *)
  849. ⓪;|
  850. ⓪*(* Zum Textende springen: *)
  851. ⓪*zumDEnde:        StelleZeileEin (Puff, ZeilenAnzahl + 1, LinesOnScreen);
  852. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  853. ⓪=Length (MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^);
  854. ⓪;VollPrompt := TRUE;
  855. ⓪;|
  856. ⓪*(* Zur einer Zeilennummer springen: *)
  857. ⓪*zuNrZeile:       n := 0;
  858. ⓪;ReadNum (1, 'Zeilennummer: ', n);
  859. ⓪;StelleZeileEin (Puff, n, LinesOnScreen DIV 2);
  860. ⓪;VollPrompt := TRUE;
  861. ⓪;|
  862. ⓪*(* Linke Maustaste gedrueckt: *)
  863. ⓪*(* LeftMous *)
  864. ⓪*LeftMous, RightMous:        CursorAufMauspos (Puff, termch);
  865. ⓪;|
  866. ⓪*(* String suchen: *)
  867. ⓪*SuchString:      tauschwort := '';
  868. ⓪;WortSuchen (Puff, FALSE, suchwort);
  869. ⓪;VollPrompt := TRUE;
  870. ⓪;|
  871. ⓪*(* Ganzes Wort auf Cursor suchen *)
  872. ⓪*PickWort:        tauschwort := '';
  873. ⓪;WortSuchen (Puff, TRUE, suchwort);
  874. ⓪;VollPrompt := TRUE;
  875. ⓪;|
  876. ⓪*(* Wort noch einmal suchen oder/und austauschen: *)
  877. ⓪*WeitSuch:        DoWeitSuch (Puff); VollPrompt := TRUE;
  878. ⓪;|
  879. ⓪*(* Wort suchen und tauschen: *)
  880. ⓪*StriTausch:      SuchTauschen (Puff, FALSE, suchwort, tauschwort);
  881. ⓪;VollPrompt := TRUE;
  882. ⓪;|
  883. ⓪*PickTausch:      SuchTauschen (Puff, TRUE, suchwort, tauschwort);
  884. ⓪;VollPrompt := TRUE;
  885. ⓪;|
  886. ⓪*(* gepufferten Block an Cursorposition in Text kopieren: *)
  887. ⓪*Kopier,
  888. ⓪*Verschieb,
  889. ⓪*Paste:           IF NOT BlockMarkiert (Puff) AND
  890. ⓪>(termch.bef # Paste) THEN
  891. ⓪=Nachricht ('Kein Block markiert!');
  892. ⓪;ELSIF InBlockMarken (Puff)
  893. ⓪;& (termch.bef = Verschieb) THEN
  894. ⓪=Nachricht ('Verschieben ist hier |nicht möglich!');
  895. ⓪;ELSE
  896. ⓪=IF BlockMarkiert (Puff) AND
  897. ⓪=((termch.bef # Paste) OR vorherMarkiert) THEN
  898. ⓪?WITH MerkPunkte [LaufendeZeile] DO
  899. ⓪Aml:= merkline;
  900. ⓪An:= charpos;
  901. ⓪AKopiereLoesche (Puff, ClipBoard,
  902. ⓪Ctermch.bef # Paste, termch.bef # Kopier);
  903. ⓪AIF termch.bef # Paste THEN
  904. ⓪C(* Cursor zurücksetzen *)
  905. ⓪CSucheZeilenNummer (Puff, ml, zeilpos);
  906. ⓪Cmerkline:= ml;
  907. ⓪Ccharpos:= n
  908. ⓪AEND
  909. ⓪?END
  910. ⓪=END;
  911. ⓪=LoescheBlockMarken (Puff);
  912. ⓪=IF DoClipboard & (termch.bef = Paste) THEN
  913. ⓪?EXCL (ClipBoard^.Modus, Editiert);
  914. ⓪?LoeschePuffer (ClipBoard);
  915. ⓪?Assign (ScrapPfad, ClipBoard^.Pfad);
  916. ⓪?Assign (ScrapName, ClipBoard^.Name);
  917. ⓪?TextLesen (ClipBoard, TRUE, FALSE, FALSE, FALSE);
  918. ⓪=END;
  919. ⓪=IF PufferLeer (ClipBoard) THEN
  920. ⓪?Nachricht ('Es ist nichts|im Clipboard!');
  921. ⓪=ELSE
  922. ⓪?Kopiere (Puff, ClipBoard);
  923. ⓪=END;
  924. ⓪;END;
  925. ⓪;VollPrompt := TRUE;
  926. ⓪;|
  927. ⓪*(* Markierten Block loeschen (oder kopieren) und puffern): *)
  928. ⓪*CutToClipboard,
  929. ⓪*DeleteBlock,
  930. ⓪*CopyToClipboard: KopiereLoesche (Puff, ClipBoard,
  931. ⓪=termch.bef # DeleteBlock,
  932. ⓪=termch.bef # CopyToClipboard);
  933. ⓪;IF (termch.bef # DeleteBlock) & DoClipboard THEN
  934. ⓪=ClearScrap; (* Löscht alle "SCRAP.*"-Dateien im
  935. ⓪J* Scrap-Ordner, falls er existiert.*)
  936. ⓪=Assign (ScrapPfad, ClipBoard^.Pfad);
  937. ⓪=Assign (ScrapName, ClipBoard^.Name);
  938. ⓪=TextSchreiben (ClipBoard, FALSE, FALSE, FALSE, FALSE, FALSE, ok);
  939. ⓪;END;
  940. ⓪;LoescheBlockMarken (Puff); VollPrompt := TRUE;
  941. ⓪;|
  942. ⓪*(* Ganzen Puffer loeschen & entfernen: *)
  943. ⓪*LoescheText:     IF (Editiert IN Puff^.Modus) THEN
  944. ⓪=IF FrageJaNein (Ja, 'Text speichern?') THEN
  945. ⓪?TextSchreiben (Puff, FALSE, FALSE, FALSE,
  946. ⓪LKonfigSpeichern IN Modus, FALSE, ok);
  947. ⓪=ELSIF
  948. ⓪?FrageJaNein (Nein, 'Text ist editiert|Trotzdem löschen?') THEN
  949. ⓪?EXCL (Modus, Editiert);
  950. ⓪=END (* IF *);
  951. ⓪;END (* IF Editiert *);
  952. ⓪;IF ~(Editiert IN Puff^.Modus) THEN
  953. ⓪=LoeschePuffer (Puff);
  954. ⓪=DeletePuffer (Puff);
  955. ⓪;END (* IF *);
  956. ⓪;VollPrompt := TRUE;
  957. ⓪;|
  958. ⓪*(* Markierten Block saven *)
  959. ⓪*BlockWrit:       TextSchreiben (Puff, FALSE, TRUE, TRUE, FALSE, FALSE, ok);
  960. ⓪;IF ok THEN
  961. ⓪=LoescheBlockMarken (Puff);
  962. ⓪;END;
  963. ⓪;VollPrompt := TRUE;
  964. ⓪;|
  965. ⓪*(* File als Block in Text einfuegen *)
  966. ⓪*BlockRead:       AlterName := Puff^.Name;
  967. ⓪;AlterPfad := Puff^.Pfad; (* DeleteTail (AlterPfad); *)
  968. ⓪;TextLesen (Puff, FALSE, TRUE, FALSE, TRUE);
  969. ⓪;Puff^.Name := AlterName; Puff^.Pfad := AlterPfad;
  970. ⓪;VollPrompt := TRUE;
  971. ⓪;|
  972. ⓪*(* Datei sichern ohne Abfrage *)
  973. ⓪*Update:          TextSchreiben (Puff, FALSE, FALSE, FALSE,
  974. ⓪JKonfigSpeichern IN Modus, FALSE, ok);
  975. ⓪;VollPrompt := TRUE;
  976. ⓪;|
  977. ⓪*(* Text speichern mit Abfrage *)
  978. ⓪*TextSave:        TextSchreiben (Puff, FALSE, FALSE, TRUE,
  979. ⓪JKonfigSpeichern IN Modus, FALSE, ok);
  980. ⓪;VollPrompt := TRUE;
  981. ⓪;|
  982. ⓪*(* Datei laden *)
  983. ⓪*TextLoad,
  984. ⓪*TextFragLad:     DoTextLoad (Puff, termch, Info);
  985. ⓪;EditPuffer := Puff; VollPrompt := TRUE;
  986. ⓪;|
  987. ⓪*(* Zum Blockanfang springen: *)
  988. ⓪*zurAMark:        StelleZeileEin (Puff,
  989. ⓪@MerkPunkte [BlockMarke1].zeilpos, 3);
  990. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  991. ⓪=MerkPunkte [BlockMarke1].charpos;
  992. ⓪;VollPrompt := TRUE;
  993. ⓪;|
  994. ⓪*(* Marke Blockanfang setzen: *)
  995. ⓪*setAMark:        MarkiereBlockAnfang (Puff); BlockWurdeMarkiert:= TRUE
  996. ⓪;|
  997. ⓪*(* Zum Blockende springen: *)
  998. ⓪*zurEMark:        StelleZeileEin (Puff,
  999. ⓪KMerkPunkte [BlockMarke2].zeilpos,
  1000. ⓪KLinesOnScreen - 3);
  1001. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  1002. ⓪=MerkPunkte [BlockMarke2].charpos;
  1003. ⓪;|
  1004. ⓪*(* Aufheben der Blockmarkierung: *)
  1005. ⓪*BlockMLoe:       LoescheBlockMarken (Puff);
  1006. ⓪;|
  1007. ⓪*(* Marke Blockende setzen: *)
  1008. ⓪*setEMark:        MarkiereBlockEnde (Puff); BlockWurdeMarkiert:= TRUE
  1009. ⓪;|
  1010. ⓪*SelectAll:       mpt:= MerkPunkte [LaufendeZeile];
  1011. ⓪;WITH MerkPunkte [LaufendeZeile] DO
  1012. ⓪=n:= 1;
  1013. ⓪=SucheZeilenPointer (Puff, n, merkline);
  1014. ⓪=zeilpos:= n; charpos := 0;
  1015. ⓪=MarkiereBlockAnfang (Puff);
  1016. ⓪=n:= ZeilenAnzahl;
  1017. ⓪=SucheZeilenPointer (Puff, n, merkline);
  1018. ⓪=zeilpos:= n;
  1019. ⓪=charpos := Length (merkline^.ZeilPointer^);
  1020. ⓪=MarkiereBlockEnde (Puff);
  1021. ⓪;END;
  1022. ⓪;BlockWurdeMarkiert:= TRUE;
  1023. ⓪;MerkPunkte [LaufendeZeile]:= mpt;
  1024. ⓪;VollPrompt := TRUE;
  1025. ⓪;|
  1026. ⓪*SelectLine:      LoescheBlockMarken (Puff);
  1027. ⓪;mpt:= MerkPunkte [LaufendeZeile];
  1028. ⓪;WITH MerkPunkte [LaufendeZeile] DO
  1029. ⓪=charpos := 0;
  1030. ⓪=MarkiereBlockAnfang (Puff);
  1031. ⓪=IF merkline^.naechste # NIL THEN
  1032. ⓪?merkline := merkline^.naechste;
  1033. ⓪?INC (zeilpos);
  1034. ⓪=ELSE
  1035. ⓪?charpos := Length (merkline^.ZeilPointer^);
  1036. ⓪=END;
  1037. ⓪=MarkiereBlockEnde (Puff);
  1038. ⓪;END;
  1039. ⓪;BlockWurdeMarkiert:= TRUE;
  1040. ⓪;MerkPunkte [LaufendeZeile]:= mpt;
  1041. ⓪;VollPrompt := TRUE;
  1042. ⓪;|
  1043. ⓪*SelectWord: (*   noch nicht impl *)
  1044. ⓪;|
  1045. ⓪*(* Block Einruecken: *)
  1046. ⓪*Einrueck:        RueckeBlockEin (Puff);
  1047. ⓪;VollPrompt := TRUE;
  1048. ⓪;|
  1049. ⓪*(* Zur ersten Sprungmarke springen: *)
  1050. ⓪*zur1Mark:        StelleZeileEin (Puff,
  1051. ⓪>MerkPunkte [MerkPunkt1].zeilpos,
  1052. ⓪>LinesOnScreen DIV 2);
  1053. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  1054. ⓪=MerkPunkte [MerkPunkt1].charpos;
  1055. ⓪;|
  1056. ⓪*(* Erste Sprungmarke setzen: *)
  1057. ⓪*set1Mark:        WITH MerkPunkte [MerkPunkt1] DO
  1058. ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  1059. ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
  1060. ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
  1061. ⓪;END (* WITH *);|
  1062. ⓪*(* Zur zweiten Sprungmarke springen: *)
  1063. ⓪*zur2Mark:        StelleZeileEin (Puff,
  1064. ⓪KMerkPunkte [MerkPunkt2].zeilpos,
  1065. ⓪KLinesOnScreen DIV 2);
  1066. ⓪;MerkPunkte [LaufendeZeile].charpos := MerkPunkte [MerkPunkt2].charpos;
  1067. ⓪;|
  1068. ⓪*zur3Mark:        StelleZeileEin (Puff,
  1069. ⓪KMerkPunkte [M13].zeilpos,
  1070. ⓪KLinesOnScreen DIV 2);
  1071. ⓪;MerkPunkte [LaufendeZeile].charpos := MerkPunkte [M13].charpos;
  1072. ⓪;|
  1073. ⓪*(* Zweite Sprungmarke setzen: *)
  1074. ⓪*set2Mark:        WITH MerkPunkte [MerkPunkt2] DO
  1075. ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  1076. ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
  1077. ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
  1078. ⓪;END (* WITH *);|
  1079. ⓪*set3Mark:        WITH MerkPunkte [M13] DO
  1080. ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
  1081. ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
  1082. ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
  1083. ⓪;END (* WITH *);|
  1084. ⓪*(* Tabulator-Sprungweite einstellen: *)
  1085. ⓪*TabLaen:         ReadNum (1, 'Tabulatorabstand: ', TabWeite);
  1086. ⓪;tabjump := TabWeite;
  1087. ⓪;scrolloffset := TabWeite + TabWeite;
  1088. ⓪;MerkPunkte [LaufendeZeile].charpos := 0;
  1089. ⓪;MerkPunkte [ErsteZeile].charpos := 0;
  1090. ⓪;VollPrompt := TRUE;
  1091. ⓪;|
  1092. ⓪*(* Zur letzten bearbeiteten Position springen: *)
  1093. ⓪*LetztePos:       StelleZeileEin (Puff,
  1094. ⓪AMerkPunkte [LetztePosition].zeilpos,
  1095. ⓪ALinesOnScreen DIV 2);
  1096. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  1097. ⓪=MerkPunkte [LetztePosition].charpos;
  1098. ⓪;|
  1099. ⓪*(* Zur letzten gesuchten Position springen: *)
  1100. ⓪*LetzteSuchPos:   StelleZeileEin (Puff,
  1101. ⓪AMerkPunkte [IndexListe].zeilpos,
  1102. ⓪ALinesOnScreen DIV 2);
  1103. ⓪;MerkPunkte [LaufendeZeile].charpos :=
  1104. ⓪=MerkPunkte [LetztePosition].charpos;
  1105. ⓪;|
  1106. ⓪*SteuerZeichenAnzeige:
  1107. ⓪;IF ControlZeichen IN Modus THEN
  1108. ⓪=EXCL (Modus, ControlZeichen)
  1109. ⓪;ELSE INCL (Modus, ControlZeichen);
  1110. ⓪;END;
  1111. ⓪;|
  1112. ⓪*TextParam:       IF KonfigSpeichern IN Modus THEN
  1113. ⓪=EXCL (Modus, KonfigSpeichern)
  1114. ⓪;ELSE INCL (Modus, KonfigSpeichern);
  1115. ⓪;END;
  1116. ⓪;|
  1117. ⓪*BackupAnlegen:   IF MakeBAK IN Modus THEN
  1118. ⓪=EXCL (Modus, MakeBAK)
  1119. ⓪;ELSE INCL (Modus, MakeBAK);
  1120. ⓪;END;
  1121. ⓪;|
  1122. ⓪*GEMKlemmbrettEinAus: DoClipboard := ~DoClipboard;
  1123. ⓪;|
  1124. ⓪*QueryError:      DoNaechsterMerker (Puff, infozeile);
  1125. ⓪;|
  1126. ⓪*Compile:         infozeile [0] := nul;
  1127. ⓪;SetCompilerInfo (Puff, infozeile); (* Löschen! *)
  1128. ⓪;CallCompiler (Puff, infozeile);
  1129. ⓪;CheckMargin (Puff);
  1130. ⓪;VollPrompt := TRUE;
  1131. ⓪;|
  1132. ⓪*ZeitUndDatum:    ZeitAnzeigen (Puff, infozeile);
  1133. ⓪;VollPrompt := TRUE;
  1134. ⓪;|
  1135. ⓪*GlobParam:       CopyConfig (Puff, ConfigPuffer);
  1136. ⓪;SaveConfig (ConfigPuffer, TRUE);
  1137. ⓪;|
  1138. ⓪*LoadParam:       LoadConfig (ConfigPuffer, TRUE, FALSE);
  1139. ⓪;|
  1140. ⓪*ELSE;
  1141. ⓪(END (* CASE *);
  1142. ⓪&END (* ELSE overflow *);
  1143. ⓪$END (* WITH *);
  1144. ⓪$
  1145. ⓪$IF (termch.TT = Befehl) & (termch.bef IN
  1146. ⓪&Befehlssatz {TextLoad, TextFragLad, WeitSuch, SuchString, PickWort,
  1147. ⓪3StriTausch, PickTausch, BlockMLoe, SelectLine,
  1148. ⓪3QueryError, KillPuff, NaechstenPuffer, InsertPuff,
  1149. ⓪3EditBlock, Seitup, GMECopyrightBox,
  1150. ⓪3Seitdown, help, PufferWaehlen, zumDAnf, zumDEnde, zuNrZeile,
  1151. ⓪3Lookup, LoadFiles,
  1152. ⓪3Compile, Make, MakeExec,
  1153. ⓪3CutToClipboard, CopyToClipboard,
  1154. ⓪3LoescheText, BlockWrit, BlockRead, TextSave,
  1155. ⓪3Update, zurAMark, zurEMark, zur1Mark, zur2Mark, zur3Mark,
  1156. ⓪3TabLaen, LetztePos, LetzteSuchPos,
  1157. ⓪3GlobParam, MerkPunkt, SetzPunkt, home})
  1158. ⓪$THEN
  1159. ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
  1160. ⓪&VollPrompt := TRUE;
  1161. ⓪$END;
  1162. ⓪"UNTIL (termch.TT = Befehl) & (termch.bef IN
  1163. ⓪$Befehlssatz {ExitEditor, QuitCompile, QuitCompileRun, Make, MakeExec,
  1164. ⓪-LoescheAllePuffer, SpeichereAllePuffer}) OR
  1165. ⓪((Exit IN Puff^.Modus);
  1166. ⓪"RetPuff := Puff;
  1167. ⓪ END Editieren;
  1168. ⓪ 
  1169. ⓪ BEGIN
  1170. ⓪"Trace ('EditLook');
  1171. ⓪"BindeSet := CharSet {0C, ' ', '-', PhantomTrenn};
  1172. ⓪"TrennSet := CharSet {0C, tab, ' ', ',', ';', '.', '(',
  1173. ⓪7')', '[', ']', '{', '}',
  1174. ⓪7':', '!', '/', '*', '-',
  1175. ⓪7'+', '&', '~', '=', (*'^',*)
  1176. ⓪7'#', '|', '<', '>'};
  1177. ⓪ 
  1178. ⓪"Trace ('Editor');
  1179. ⓪"BlockWurdeMarkiert:= FALSE;
  1180. ⓪"suchwort := ''; tauschwort := '';
  1181. ⓪"undone := FALSE;
  1182. ⓪ END GMEditor.
  1183. ⓪ 
  1184. ⓪ 
  1185. ⓪ ə
  1186. (* $FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFEBA0DA$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4C$FFED7F4CÇ$00003277T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00002DD5$00008792$FFEB9790$0000319F$000031FE$000031E3$000031ED$000030FC$00002FF0$FFEB9790$00002F9A$FFEB9790$FFEB9790$000002F7$00003277$00008C0BÇÇé*)
  1187.