home *** CD-ROM | disk | FTP | other *** search
- ⓪ (* Portierung auf MM2: 9. 6. 89 *)
- ⓪ (* Stand 10. 12. 90 *)
- ⓪
- ⓪ (*
- ⓪"17.1.90: TT MainOutputPath & CompilerParm.name beim Compiler-Call
- ⓪/ausgewertet
- ⓪#6.3.90: TT CompilerArgs an Compiler übergeben
- ⓪"29.7.90: TT $Y+ Direktive eingefügt, $J- entfernt
- ⓪!13.12.90: TT Damit nach Compile-Lauf im GME der Text ein File-Datum
- ⓪/erhählt, das das Make zufriedenstellt, wird die Zeit VOR
- ⓪/dem Compiler-Aufruf verwendet.
- ⓪ *)
- ⓪
- ⓪ IMPLEMENTATION MODULE GMEditor;
- ⓪
- ⓪ (* The Little Golem Editor. Begonnen 13. 06. 86
- ⓪#(C) 1986, 1987, 1988 by Johannes Leckebusch.
- ⓪#(C) 1989, 1990 by Johannes Leckebusch.
- ⓪ *)
- ⓪
- ⓪ (*$R-*)
- ⓪ (*$Z+*)
- ⓪ (*$Y+ (sonst geht Compile nicht!) *)
- ⓪
- ⓪
- ⓪ FROM SYSTEM IMPORT ASSEMBLER, ADR, ADDRESS;
- ⓪ IMPORT StrConv, Loader, Paths, ShellMsg, TimeConvert, Clock, Lists;
- ⓪ (* FROM Storage IMPORT Inconsistent; *)
- ⓪ FROM EasyGEM1 IMPORT ClearScrap;
- ⓪
- ⓪ (* FROM MyConversions IMPORT ConvCard; *)
- ⓪ FROM Convert IMPORT ConvCard;
- ⓪
- ⓪ IMPORT Strings;
- ⓪ IMPORT Directory;
- ⓪
- ⓪ FROM FastStrings IMPORT Append, Assign, Copy, Delete, Length,
- ⓪6Insert, Pos;
- ⓪
- ⓪ FROM GMEBase IMPORT nul, backspace, CharsInLine, tab, LinesOnScreen,
- ⓪7linedel, lineins,
- ⓪7WriteChar, WriteLn, WriteConst, Trace,
- ⓪7LoescheBild, LoescheZeile, GotoXY,
- ⓪7(* CursorEin, *) CursorAus, HighLight, Normal,
- ⓪7Left, Right, ButtonSet, MausPos, MausDoppel,
- ⓪7MausAus, MausEin, MausBusy, Nachricht,
- ⓪7FrageJaNein, Ja, Nein, Abbruch,
- ⓪7CharWidth, CharHeight, ScreenWidth, ScreenHeight;
- ⓪
- ⓪ FROM GMEBase IMPORT einBefehl, Befehlssatz;
- ⓪ FROM GMEConfig IMPORT einTasteneintrag, einTastenTyp, LiesZeichen,
- ⓪(CopyConfig;
- ⓪
- ⓪ FROM GMEBase IMPORT UndoPuffer, ClipBoard, HilfsPuffer, ConfigPuffer,
- ⓪(EditPuffer, AlternEdit, FehlerPuffer, MailPuffer, GolemPuffer,
- ⓪(Tausch, SendePuffer, PSCPuffer, WaehlPuffer, undone,
- ⓪(DruckPuff, StartPuffer;
- ⓪
- ⓪ FROM GMEBase IMPORT cZeile;
- ⓪
- ⓪ FROM GMEBase IMPORT eineZeile, eineInfo, einLinePointer, aLine,
- ⓪5einStringPointer,
- ⓪5einPufferPointer, einMerkPunkt, MerkIndex, einMerkPointer,
- ⓪5einPufferDeskriptor, Mode,
- ⓪5Moden, CharSet;
- ⓪
- ⓪ FROM GMEBase IMPORT Loeschen, DeletePuffer, PufferLeer,
- ⓪5GetLine, PutLine,
- ⓪5FindeLeerpuffer, InsertPuffer, AutoCount;
- ⓪
- ⓪ FROM GMEKernel IMPORT WriteString, SchirmSchreiben,
- ⓪7InsertZeile, tabjump;
- ⓪
- ⓪ FROM GMEFile IMPORT SaveConfig, LoadConfig;
- ⓪
- ⓪ FROM GMEKernel IMPORT Edit, Prompt;
- ⓪
- ⓪ FROM GMEKernel IMPORT SucheZeilenPointer, StelleZeileEin, StellePointerEin,
- ⓪7SucheZeilenNummer, LineDown, LineUp,
- ⓪7DeleteLine, InsertLine, ScrollDown, ScrollUp,
- ⓪7DoBackspace, DoDelete, DoCR;
- ⓪
- ⓪ FROM GMEKernel IMPORT SucheWort, TauscheWort, GetKey, ReadNum,
- ⓪(InBlockMarken, BlockMarkiert, KopiereLoesche, Kopiere,
- ⓪(MarkiereBlockAnfang, MarkiereBlockEnde, LoescheBlockMarken,
- ⓪(RueckeBlockEin, LoeschePuffer;
- ⓪
- ⓪ (* FROM EditLook IMPORT SuchwortHolen, WortSuchen, SuchTauschen; *)
- ⓪
- ⓪ FROM GMEBase IMPORT DeleteTail, DoClipboard;
- ⓪
- ⓪ FROM GMEFile IMPORT TextSchreiben, TextLesen;
- ⓪
- ⓪ FROM GMEFile IMPORT ScrapPfad, ScrapName, SetCompilerInfo;
- ⓪
- ⓪ CONST coffset = 16;
- ⓪
- ⓪ VAR scrolloffset: CARDINAL;
- ⓪(dummy: CHAR;
- ⓪(befehl: einBefehl;
- ⓪(key: einTasteneintrag;
- ⓪(version: eineInfo;
- ⓪(suchwort: eineZeile;
- ⓪(tauschwort: eineZeile;
- ⓪(Zeile: eineZeile;
- ⓪(dummyC, dummyCC: CARDINAL;
- ⓪(mx, my, oldmx, oldmy: CARDINAL;
- ⓪(Knoepfe: ButtonSet;
- ⓪(bewegt: BOOLEAN;
- ⓪(SelectMenue,
- ⓪(SelectEintrag: CARDINAL;
- ⓪(LoeschPfad, LoeschName: eineInfo;
- ⓪(DummySuff: ARRAY [0..3] OF CHAR;
- ⓪(result: INTEGER;
- ⓪(returnX: CARDINAL;
- ⓪(VollPrompt: BOOLEAN;
- ⓪(BlockWurdeMarkiert: BOOLEAN;
- ⓪
- ⓪ VAR compLine: einLinePointer;
- ⓪$compEOF: CHAR;
- ⓪
- ⓪
- ⓪ (* die folg. Prozedur muß global sein! *)
- ⓪
- ⓪ (*$Z-*)
- ⓪ PROCEDURE doCompilerLine (): einStringPointer;
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$(*
- ⓪&compLine:= compLine^.naechste;
- ⓪&IF compLine # NIL THEN
- ⓪(p:= compLine^.ZeilPointer;
- ⓪&ELSE
- ⓪(compEOF:= 3C;
- ⓪(p:= ADR (compEOF)
- ⓪&END;
- ⓪&RETURN p
- ⓪$*)
- ⓪$ASSEMBLER
- ⓪(LEA compLine,A0
- ⓪(MOVE.L (A0),A1
- ⓪(MOVE.L compLine.naechste(A1),A1
- ⓪(MOVE.L A1,(A0)
- ⓪(BEQ atEOF
- ⓪
- ⓪(MOVE.L compLine.ZeilPointer(A1),(A3)+
- ⓪(RTS
- ⓪
- ⓪&atEOF
- ⓪(MOVE.B #$03,compEOF
- ⓪(MOVE.L #compEOF,(A3)+
- ⓪$END;
- ⓪"END doCompilerLine;
- ⓪"(*$L=*)
- ⓪ (*$Z+*)
- ⓪
- ⓪ (*************************** Aus EditLook ***********************)
- ⓪
- ⓪ (*********** Alte Suchroutinen, die frueher in Editor.MOD waren: ****)
- ⓪ CONST PhantomTrenn = 37C; (* Arghhh! Sollte importiert werden... *)
- ⓪ VAR TrennSet, BindeSet: CharSet;
- ⓪
- ⓪ PROCEDURE SuchwortHolen (Puff: einPufferPointer; VAR suchwort: ARRAY OF CHAR);
- ⓪ VAR ind, off: CARDINAL;
- ⓪&switch, warBlank: BOOLEAN;
- ⓪
- ⓪"(* Aus Editline, abgeaendert!: *)
- ⓪"PROCEDURE SkipBlank (ch: CHAR): BOOLEAN;
- ⓪"BEGIN
- ⓪$switch := warBlank;
- ⓪$warBlank := warBlank OR (ch IN TrennSet);
- ⓪$IF warBlank & (ch # ' ') & switch THEN
- ⓪&warBlank := FALSE;
- ⓪&switch := FALSE;
- ⓪&RETURN FALSE; (* Cursor bleibt stehen *)
- ⓪$ELSE RETURN TRUE; (* Cursor läuft weiter *)
- ⓪$END (* IF *);
- ⓪"END SkipBlank;
- ⓪"
- ⓪ BEGIN (* SuchwortHolen *)
- ⓪"suchwort [0] := nul;
- ⓪"WITH Puff^.MerkPunkte [LaufendeZeile] DO
- ⓪$ind := 0; off := 0; warBlank := FALSE;
- ⓪$IF (merkline^.ZeilPointer^ [ind + charpos] IN TrennSet) THEN
- ⓪&WHILE SkipBlank (merkline^.ZeilPointer^ [ind + charpos]) DO
- ⓪(INC (ind); INC (off);
- ⓪&END;
- ⓪$END (* IF *);
- ⓪$IF charpos + ind < Length (merkline^.ZeilPointer^) THEN
- ⓪&WHILE (SkipBlank (merkline^.ZeilPointer^ [ind + charpos])) &
- ⓪,(merkline^.ZeilPointer^ [ind + charpos] # ' ') DO
- ⓪(suchwort [ind - off] := merkline^.ZeilPointer^ [ind + charpos];
- ⓪(INC (ind);
- ⓪&END (* WHILE *);
- ⓪&IF (ind > 0) & (merkline^.ZeilPointer^ [ind - 1 + charpos] IN
- ⓪+TrennSet - CharSet {' '})
- ⓪(THEN DEC (ind);
- ⓪&END (* IF *);
- ⓪$END (* IF *);
- ⓪$suchwort [ind - off] := nul;
- ⓪"END (* WITH *);
- ⓪ END SuchwortHolen;
- ⓪!
- ⓪ PROCEDURE WortSuchen (Puff: einPufferPointer;
- ⓪6holen: BOOLEAN; VAR suchwort: ARRAY OF CHAR);
- ⓪ VAR repeat: CARDINAL;
- ⓪&s: CharSet;
- ⓪&m: eineInfo;
- ⓪&gefunden: BOOLEAN;
- ⓪&ersterFund: BOOLEAN;
- ⓪&IndexAbfrage: BOOLEAN;
- ⓪&ok: BOOLEAN;
- ⓪ VAR ml, mp, hp: einMerkPointer;
- ⓪&(* dummy,dummy1, scd, *)
- ⓪&ch, ch1: CHAR;
- ⓪&key: einTasteneintrag;
- ⓪ BEGIN
- ⓪"IF holen THEN SuchwortHolen (Puff, suchwort);
- ⓪"(* ELSE suchwort [0] := nul; *)
- ⓪"END;
- ⓪"IF WortSuche IN Puff^.Modus THEN
- ⓪$Prompt (1, 'Suche Wort (ESC löscht Vorgabe, leeres Wort bricht ab): ',
- ⓪*suchwort, key);
- ⓪"ELSE
- ⓪$Prompt (1, 'Suche Muster (ESC löscht Vorgabe, leeres Muster bricht ab): ',
- ⓪*suchwort, key);
- ⓪"END (* IF *);
- ⓪"(* tauschwort := ''; *)
- ⓪"IF ~(suchwort [0] = nul) THEN
- ⓪"
- ⓪$s := CharSet {'E', 'N', 'L', 'Q'}; (* Konstante einsetzen funkt. nicht *)
- ⓪$ch := 'E';
- ⓪$GetKey (2, 'E(inmal, N(mal, L(etztes suchen oder Q(uit: ', s, ch);
- ⓪$IF ch = 'Q' THEN
- ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪&RETURN;
- ⓪$END (* IF Quit *);
- ⓪$IF ch = 'N' THEN
- ⓪&repeat := 1;
- ⓪&ReadNum (3, 'Anzahl: ', repeat);
- ⓪&IF repeat = 0 THEN RETURN; END;
- ⓪$ELSE repeat := 1;
- ⓪$END (* IF *);
- ⓪$ersterFund := TRUE;
- ⓪$IF holen THEN
- ⓪&WITH Puff^ DO
- ⓪(WITH MerkPunkte [LetztePosition] DO
- ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪(END (* WITH *);
- ⓪&END (* WITH Puff^ *);
- ⓪&StelleZeileEin (Puff, 1, 0);
- ⓪$END (* IF holen *);
- ⓪$REPEAT
- ⓪&MausBusy;
- ⓪&SucheWort (Puff, suchwort, gefunden, key);
- ⓪&IF ch IN CharSet {'E', 'N'} THEN DEC (repeat);
- ⓪(IF ~gefunden THEN
- ⓪*Strings.Assign ('>>', m, ok); Append (suchwort, m);
- ⓪*Strings.Append ('<<|nicht gefunden!', m, ok);
- ⓪*Nachricht (m);
- ⓪(END (* IF ~gefunden *);
- ⓪&END (* IF dummy *);
- ⓪$UNTIL (ch = 'E') OR ~gefunden OR (repeat = 0);
- ⓪"END (* IF *);
- ⓪"IF gefunden THEN
- ⓪$WITH Puff^ DO
- ⓪&WITH MerkPunkte [IndexListe] DO
- ⓪(zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪(merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪(charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪&END (* WITH *);
- ⓪$END (* WITH Puff^ *);
- ⓪"END (* IF gefunden *);
- ⓪"Normal;
- ⓪"SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪ END WortSuchen;
- ⓪
- ⓪ PROCEDURE SuchTauschen (Puff: einPufferPointer; holen: BOOLEAN;
- ⓪8VAR suchwort, tauschwort: ARRAY OF CHAR);
- ⓪ VAR repeat: CARDINAL;
- ⓪&dummy: einTasteneintrag;
- ⓪&ch, ch1: CHAR;
- ⓪&key: einTasteneintrag;
- ⓪&s: CharSet;
- ⓪&gefunden: BOOLEAN;
- ⓪ BEGIN
- ⓪"IF holen THEN SuchwortHolen (Puff, suchwort);
- ⓪"(* ELSE suchwort [0] := nul; *)
- ⓪"END;
- ⓪"WITH Puff^ DO
- ⓪$IF WortSuche IN Modus THEN
- ⓪&Prompt (1,
- ⓪!'Suchen & Tauschen: Suchwort (ESC löscht Vorgabe, leeres Wort bricht ab): ',
- ⓪,suchwort, key);
- ⓪$ELSE
- ⓪&Prompt (1,
- ⓪ 'Suchen & Tauschen: Suchmuster (ESC löscht Vorgabe, leeres Muster bricht ab): ',
- ⓪,suchwort, key);
- ⓪$END (* IF *);
- ⓪$IF ~(suchwort [0] = nul) THEN
- ⓪&IF (tauschwort [0] = nul) THEN Assign (suchwort, tauschwort); END;
- ⓪&Prompt (2, 'Austauschwort (ESC löscht Vorgabe): ', tauschwort, key);
- ⓪&s := CharSet {'E', 'N', 'F', 'A', 'Q'};
- ⓪&ch := 'E';
- ⓪&GetKey (3, 'E(inmal, N(mal, F(ragen nmal, A(lle tauschen, Q(uit: ', s, ch);
- ⓪&IF ch = 'Q' THEN
- ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪(RETURN;
- ⓪&END (* IF Quit *);
- ⓪&IF ch IN CharSet {'N', 'F'} THEN
- ⓪(repeat := 1;
- ⓪(ReadNum (4, 'Anzahl (0 für alle): ', repeat);
- ⓪(IF repeat = 0 THEN repeat := 65000; END;
- ⓪&ELSE repeat := 1;
- ⓪&END (* IF *);
- ⓪&REPEAT
- ⓪(MausBusy;
- ⓪(SucheWort (Puff, suchwort, gefunden, key);
- ⓪(IF (ch IN CharSet {'E', 'N', 'F'})
- ⓪(THEN DEC (repeat);
- ⓪(END (* IF *);
- ⓪*IF gefunden THEN
- ⓪,INCL (Modus, Editiert);
- ⓪,IF ch = 'F' THEN
- ⓪.SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪.GotoXY (0, 0); LoescheZeile; HighLight;
- ⓪.WriteConst ('Tauschen J/N/Ende: '); Normal;
- ⓪.GotoXY (MerkPunkte [LaufendeZeile].charpos -
- ⓪8MerkPunkte [ErsteZeile].charpos,
- ⓪6MerkPunkte [LaufendeZeile].zeilpos -
- ⓪8MerkPunkte [ErsteZeile].zeilpos);
- ⓪.REPEAT LiesZeichen (ch1); ch1 := CAP (ch1);
- ⓪.UNTIL ch1 IN CharSet {'J', 'N', 'E'};
- ⓪,ELSE ch1 := 'J'; WriteChar ('.');
- ⓪,END (* IF *);
- ⓪,IF ch1 = 'J' THEN
- ⓪.TauscheWort (Puff, suchwort, tauschwort, Max, dummy);
- ⓪,ELSIF ch1 = 'E' THEN gefunden := FALSE;
- ⓪,END (* IF *);
- ⓪*END (* IF gefunden *);
- ⓪&UNTIL (ch = 'E') OR ~gefunden OR (repeat = 0);
- ⓪$END (* IF *);
- ⓪$IF gefunden THEN
- ⓪&WITH MerkPunkte [IndexListe] DO
- ⓪(zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪(merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪(charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪&END (* WITH *);
- ⓪$END (* IF gefunden *);
- ⓪$SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪"END (* WITH *);
- ⓪ END SuchTauschen;
- ⓪
- ⓪ (**************************** ENDE EditLook ****************************)
- ⓪
- ⓪
- ⓪ PROCEDURE CheckMargin (Puff: einPufferPointer);
- ⓪ VAR Cursor, Offset, dec: CARDINAL;
- ⓪ BEGIN
- ⓪"WITH Puff^ DO
- ⓪$Cursor := MerkPunkte [LaufendeZeile].charpos;
- ⓪$Offset := MerkPunkte [ErsteZeile].charpos;
- ⓪
- ⓪$IF Cursor < Offset THEN (* es war die linke Grenze: *)
- ⓪&dec := ((Offset - Cursor) DIV scrolloffset + 1) * scrolloffset;
- ⓪&IF MerkPunkte [ErsteZeile].charpos > dec THEN
- ⓪(DEC (MerkPunkte [ErsteZeile].charpos, dec)
- ⓪&ELSE MerkPunkte [ErsteZeile].charpos := 0;
- ⓪&END (* IF *);
- ⓪$ELSIF Cursor >= Offset + CharsInLine (* es war die rechte Grenze: *) THEN
- ⓪&dec := ((Cursor - Offset) DIV scrolloffset + 1) *
- ⓪/scrolloffset - CharsInLine;
- ⓪&INC (MerkPunkte [ErsteZeile].charpos, dec);
- ⓪$END (* IF globalx <> xoffset *);
- ⓪"END (* WITH *);
- ⓪ END CheckMargin;
- ⓪
- ⓪ PROCEDURE CallCompiler (puff: einPufferPointer; VAR msg: ARRAY OF CHAR);
- ⓪"(*
- ⓪#* IN: puff
- ⓪#* OUT: msg (enthält Fehlermeldung, sonst leer)
- ⓪#*)
- ⓪
- ⓪"VAR ok: BOOLEAN; ex: INTEGER; res: Loader.LoaderResults;
- ⓪&n: CARDINAL; arg: ARRAY [0..125] OF CHAR;
- ⓪&drivers: Lists.List;
- ⓪&tagzeit, dat: CARDINAL;
- ⓪"BEGIN
- ⓪$GotoXY (0, 0); HighLight;
- ⓪$WriteConst ('Compiler läuft...'); LoescheZeile; Normal;
- ⓪$ShellMsg.ScanMode:= FALSE;
- ⓪$compLine:= puff^.Puffer;
- ⓪$Strings.Concat (puff^.Name, ' /Q /^', arg, ok);
- ⓪$Strings.Append (StrConv.LHexToStr (ADDRESS (doCompilerLine),0), arg, ok);
- ⓪$IF ShellMsg.MainOutputPath[0] # 0C THEN
- ⓪&Strings.Append (' /O', arg, ok);
- ⓪&Append (ShellMsg.MainOutputPath, arg);
- ⓪$END;
- ⓪$IF ShellMsg.CompilerArgs[0] # 0C THEN
- ⓪&Strings.Append (' ', arg, ok);
- ⓪&Append (ShellMsg.CompilerArgs, arg);
- ⓪$END;
- ⓪$(* Zeit muß VOR Compiler-Aufruf gemerkt werden! *)
- ⓪$tagzeit:= Clock.PackTime (Clock.CurrentTime ());
- ⓪$dat:= Clock.PackDate (Clock.CurrentDate ());
- ⓪$MausBusy;
- ⓪$Loader.CallModule (ShellMsg.CompilerParm.name, ShellMsg.StdPaths,
- ⓪7arg, NIL, ex, msg, res);
- ⓪$IF res = Loader.noError THEN
- ⓪&CASE ex OF
- ⓪(0: Strings.Upper (ShellMsg.CodeName);
- ⓪-Assign (ShellMsg.CodeName, msg);
- ⓪-Strings.Append (' Länge: ', msg, ok);
- ⓪-Strings.Append (StrConv.CardToStr (ShellMsg.CodeSize, 0),
- ⓪=msg, ok);
- ⓪-WITH puff^ DO
- ⓪/tageszeit := tagzeit;
- ⓪/datum := dat;
- ⓪/INCL (Modus, Compiliert);
- ⓪-END (* WITH *);
- ⓪(|
- ⓪(2,3: StelleZeileEin (puff, ShellMsg.TextLine, LinesOnScreen DIV 2);
- ⓪-n:= Length
- ⓪2(puff^.MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^) + 1;
- ⓪-IF ShellMsg.TextCol > n THEN ShellMsg.TextCol:= n END;
- ⓪-puff^.MerkPunkte [LaufendeZeile].charpos := ShellMsg.TextCol-1;
- ⓪-CheckMargin (puff);
- ⓪-Strings.Assign (ShellMsg.ErrorMsg, msg, ok);
- ⓪-(*
- ⓪-WITH puff^.MerkPunkte [CompilerInfo] DO
- ⓪/zeilpos := puff^.MerkPunkte [LaufendeZeile].zeilpos;
- ⓪/merkline := puff^.MerkPunkte [LaufendeZeile].merkline;
- ⓪/charpos := puff^.MerkPunkte [LaufendeZeile].charpos;
- ⓪/PutLine (merkinfo, msg);
- ⓪-END (* WITH *);
- ⓪-*)
- ⓪(|
- ⓪(4: Strings.Assign ('Include-Dateien sind hier nicht erlaubt!',
- ⓪=msg, ok)
- ⓪(|
- ⓪&ELSE
- ⓪-Strings.Assign ('Unbekannte Antwort vom Compiler', msg, ok);
- ⓪&END
- ⓪$ELSE
- ⓪&(* Fehler in 'msg' anzeigen lassen *)
- ⓪$END;
- ⓪$SetCompilerInfo (puff, msg);
- ⓪"END CallCompiler;
- ⓪
- ⓪ PROCEDURE ZeitAnzeigen (Puff: einPufferPointer; VAR msg: ARRAY OF CHAR);
- ⓪ VAR str: ARRAY [0..13] OF CHAR;
- ⓪(ok: BOOLEAN;
- ⓪ BEGIN
- ⓪"Assign ('Datum: ', msg);
- ⓪"TimeConvert.DateToText (Clock.UnpackDate (Puff^.datum), '', str);
- ⓪"Append (str, msg);
- ⓪"Append (', Zeit: ', msg);
- ⓪"TimeConvert.TimeToText (Clock.UnpackTime (Puff^.tageszeit), '', str);
- ⓪"Append (str, msg);
- ⓪ END ZeitAnzeigen;
- ⓪
- ⓪ PROCEDURE CursorAufMauspos (Puff: einPufferPointer; bef: einTasteneintrag);
- ⓪ VAR n: CARDINAL;
- ⓪(xpos, ypos: CARDINAL;
- ⓪ BEGIN
- ⓪"IF oldmy <= CharHeight * 3 (* in Statuszeile *)
- ⓪$THEN RETURN;
- ⓪"END;
- ⓪"xpos := oldmx DIV CharWidth; ypos := oldmy DIV CharHeight - 2;
- ⓪"WITH Puff^ DO
- ⓪$MausAus; GotoXY (xpos, ypos);
- ⓪$(* n wird die absolute Textzeile, daher Addition
- ⓪'des Fensteroffsets >>ErsteZeile.zeilpos<< *)
- ⓪$n := MerkPunkte [ErsteZeile].zeilpos + ypos;
- ⓪$IF n > ZeilenAnzahl THEN n := ZeilenAnzahl; END;
- ⓪
- ⓪$(* Einstellen auf die Zeile mit gleichem Fensteroffset *)
- ⓪$StelleZeileEin (Puff, n, n - MerkPunkte [ErsteZeile].zeilpos);
- ⓪$
- ⓪$(* Einstellen auf Charakter + seitlichem Scrolloffset *)
- ⓪$MerkPunkte [LaufendeZeile].charpos := MerkPunkte [ErsteZeile].charpos +
- ⓪;xpos;
- ⓪$CASE bef.bef OF
- ⓪&LeftMous: MarkiereBlockAnfang (Puff); BlockWurdeMarkiert:= TRUE|
- ⓪&RightMous: MarkiereBlockEnde (Puff); BlockWurdeMarkiert:= TRUE|
- ⓪&ELSE;
- ⓪$END;
- ⓪"END (* WITH *);
- ⓪ END CursorAufMauspos;
- ⓪
- ⓪ PROCEDURE DoWeitSuch (Puff: einPufferPointer);
- ⓪ VAR gefunden: BOOLEAN;
- ⓪(ok: BOOLEAN;
- ⓪ BEGIN
- ⓪"WITH Puff^ DO
- ⓪$IF ~(suchwort [0] = nul) THEN
- ⓪&GotoXY (0, 0); HighLight; LoescheZeile;
- ⓪&WriteString (0, suchwort);
- ⓪&MausBusy;
- ⓪&SucheWort (Puff, suchwort, gefunden, key);
- ⓪&IF gefunden THEN
- ⓪(WITH MerkPunkte [IndexListe] DO
- ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪(END (* WITH *);
- ⓪&ELSE
- ⓪(Strings.Assign ('>>', Zeile, ok); Append (suchwort, Zeile);
- ⓪(Strings.Append ('<<|nicht gefunden!', Zeile, ok);
- ⓪(Nachricht (Zeile);
- ⓪&END (* IF ~gefunden *);
- ⓪&Normal;
- ⓪$END (* IF *);
- ⓪"END (* WITH *);
- ⓪ END DoWeitSuch;
- ⓪
- ⓪ PROCEDURE DoTextLoad (VAR Puff: einPufferPointer; termch: einTasteneintrag;
- ⓪(VAR Info: ARRAY OF CHAR);
- ⓪ VAR helpPuff: einPufferPointer;
- ⓪ BEGIN
- ⓪"WITH Puff^ DO
- ⓪$helpPuff := FindeLeerpuffer (Puff);
- ⓪$IF helpPuff # NIL THEN
- ⓪&Puff := helpPuff;
- ⓪&SchirmSchreiben (Puff,
- ⓪*Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪&Puff := helpPuff;
- ⓪&TextLesen (Puff, TRUE, TRUE, TRUE, TRUE);
- ⓪0(* KonfigSpeichern IN ConfigPuffer^.Modus);*)
- ⓪&IF ~PufferLeer (Puff) THEN
- ⓪(Assign (helpPuff^.Pfad, Info); DeleteTail (Info);
- ⓪(Append (helpPuff^.Name, Info);
- ⓪(Puff := helpPuff;
- ⓪&END (* IF Puffer leer *);
- ⓪&tabjump := TabWeite;
- ⓪&SchirmSchreiben (Puff,
- ⓪(MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪$END (* IF *);
- ⓪"END (* WITH *);
- ⓪ END DoTextLoad;
- ⓪
- ⓪ PROCEDURE DoNaechsterMerker (Puff: einPufferPointer;
- ⓪=VAR infozeile: ARRAY OF CHAR);
- ⓪ VAR mp: einMerkPointer;
- ⓪ BEGIN
- ⓪"WITH Puff^.MerkPunkte [CompilerInfo] DO
- ⓪$StellePointerEin (Puff, merkline, LinesOnScreen DIV 2);
- ⓪$Puff^.MerkPunkte [LaufendeZeile].charpos := charpos;
- ⓪$GetLine (merkinfo, infozeile);
- ⓪"END (* WITH *);
- ⓪"WITH Puff^ DO
- ⓪$WITH MerkPunkte [LaufendeZeile] DO
- ⓪&IF (charpos > MerkPunkte [ErsteZeile].charpos + CharsInLine) OR
- ⓪)(charpos < MerkPunkte [ErsteZeile].charpos) THEN
- ⓪(CheckMargin (Puff);
- ⓪&END (* IF *);
- ⓪$END (* WITH *);
- ⓪"END (* WITH Puff^ *);
- ⓪ END DoNaechsterMerker;
- ⓪
- ⓪ PROCEDURE Editieren (Puff: einPufferPointer;
- ⓪5VAR RetPuff: einPufferPointer;
- ⓪5VAR termch: einTasteneintrag;
- ⓪5infozeile: ARRAY OF CHAR;
- ⓪5Level: CARDINAL);
- ⓪ VAR restlaenge: CARDINAL;
- ⓪'n, mz: CARDINAL;
- ⓪'ml: einLinePointer;
- ⓪'shift: BOOLEAN;
- ⓪'overflow: BOOLEAN;
- ⓪'marginoverflow: BOOLEAN;
- ⓪'Indent: BOOLEAN;
- ⓪'Inf, Info: eineInfo;
- ⓪'AlterPfad, AlterName: eineInfo;
- ⓪'ch: CHAR;
- ⓪'helpInfo: eineInfo;
- ⓪
- ⓪'helpPuff: einPufferPointer;
- ⓪!
- ⓪ VAR dummy: CHAR;
- ⓪(gefunden: BOOLEAN;
- ⓪(gotoX, gotoY: CARDINAL;
- ⓪(Z: eineInfo;
- ⓪
- ⓪"PROCEDURE Vorlauf (Puff: einPufferPointer);
- ⓪"VAR l, ll: CARDINAL;
- ⓪(loescheBlanks: BOOLEAN;
- ⓪(ok: BOOLEAN;
- ⓪"BEGIN
- ⓪$EditPuffer := Puff;
- ⓪$WITH Puff^ DO
- ⓪&
- ⓪&(* *** Anzeige der Kopfzeile: *** *)
- ⓪&Assign (Pfad, Inf); DeleteTail (Inf);
- ⓪&Append (Name, Inf);
- ⓪&IF Editiert IN Modus THEN Strings.Append (' !', Inf, ok); END;
- ⓪&
- ⓪&(* *** Zeileneditor aufrufen: *** *)
- ⓪&MausPos (oldmx, oldmy, bewegt, Knoepfe);
- ⓪&
- ⓪&EXCL (Modus, Changed);
- ⓪&IF (infozeile [0] = nul) THEN
- ⓪(Edit (Puff, Zeile, TRUE, VollPrompt, Inf,
- ⓪.overflow, marginoverflow,
- ⓪.FALSE, oldmx, oldmy, termch);
- ⓪.VollPrompt := FALSE;
- ⓪&ELSE
- ⓪(Edit (Puff, Zeile, FALSE, TRUE, infozeile,
- ⓪.overflow, marginoverflow,
- ⓪.FALSE, oldmx, oldmy, termch);
- ⓪(infozeile [0] := nul; VollPrompt := TRUE;
- ⓪&END (* IF *);
- ⓪&
- ⓪&(* *** Bearbeitete Textposition merken: *** *)
- ⓪&IF (termch.TT = Befehl) & (termch.bef = RestoreCurrentLine) THEN
- ⓪(IF ~(Changed IN Modus) THEN
- ⓪*termch.bef := PopLastBufferLine;
- ⓪(ELSE
- ⓪*SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪*termch.bef := nothing;
- ⓪(END;
- ⓪&ELSIF Changed IN Modus THEN
- ⓪(WITH MerkPunkte [LetztePosition] DO
- ⓪*zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪*charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪*merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪(END (* WITH *);
- ⓪&
- ⓪((* Zeile zurueckschreiben: *)
- ⓪(PutLine (MerkPunkte [LaufendeZeile].merkline, Zeile);
- ⓪(INCL (Modus, Editiert);
- ⓪(EXCL (Modus, Compiliert);
- ⓪&END (* IF changed *);
- ⓪&(*
- ⓪&IF (AutoCount >= SchreibZaehler) & (AutoSave IN Modus) THEN
- ⓪(AutoCount := 0;
- ⓪(TextSchreiben (Puff, FALSE, FALSE, FALSE, KonfigSpeichern IN Modus, FALSE);
- ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪9(*MerkPunkte [LaufendeZeile].zeilpos -
- ⓪;MerkPunkte [ErsteZeile].zeilpos); *)
- ⓪&END (* IF AutoCount *);
- ⓪&*)
- ⓪$END (* WITH *);
- ⓪"END Vorlauf;
- ⓪
- ⓪ CONST BrowseOff = 8; (* Mausabstand vom Schirmrand in Chars,
- ⓪>um Browser statt Menue zu rufen *)
- ⓪ VAR mp, hp: einMerkPointer; (* Fuer MerkMenu *)
- ⓪(mpt: einMerkPunkt;
- ⓪(ok: BOOLEAN;
- ⓪(vorherMarkiert: BOOLEAN;
- ⓪(
- ⓪ BEGIN (* Editieren *)
- ⓪"VollPrompt := TRUE;
- ⓪"WITH Puff^ DO
- ⓪$EXCL (Modus, Changed);
- ⓪$tabjump := TabWeite;
- ⓪$IF ~(Exit IN Puff^.Modus) THEN
- ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪$END (* IF *);
- ⓪"END (* WITH *);
- ⓪"REPEAT
- ⓪$WITH Puff^ DO
- ⓪&(* tabjump := TabWeite; *)
- ⓪&IF (termch.bef = RollFLeft) OR (termch.bef = RollFRight) THEN
- ⓪(scrolloffset := CharsInLine - TabWeite
- ⓪&ELSE scrolloffset := TabWeite + TabWeite;
- ⓪&END;
- ⓪&Vorlauf (Puff);
- ⓪&vorherMarkiert:= BlockWurdeMarkiert;
- ⓪&BlockWurdeMarkiert:= FALSE;
- ⓪&CASE termch.bef OF
- ⓪(RollLeft, RollFLeft: IF MerkPunkte [ErsteZeile].charpos > 0 THEN
- ⓪5marginoverflow := TRUE;
- ⓪5MerkPunkte [LaufendeZeile].charpos :=
- ⓪7MerkPunkte [ErsteZeile].charpos - 1;
- ⓪3END (* IF *);
- ⓪(|
- ⓪(RollRight, RollFRight: IF MerkPunkte [ErsteZeile].charpos + CharsInLine <= Max THEN
- ⓪6MerkPunkte [LaufendeZeile].charpos :=
- ⓪7MerkPunkte [ErsteZeile].charpos + CharsInLine;
- ⓪4ELSE MerkPunkte [LaufendeZeile].charpos := Max;
- ⓪4END (* IF *);
- ⓪4marginoverflow := TRUE;
- ⓪(|
- ⓪(ELSE;
- ⓪&END (* CASE *);
- ⓪&IF marginoverflow THEN
- ⓪(CheckMargin (Puff);
- ⓪(SchirmSchreiben (Puff, MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪&ELSE (* not overflow *)
- ⓪!
- ⓪(CASE termch.bef OF
- ⓪*EditBlock: Strings.Assign ('[***Blockpuffer***]', Inf, ok);
- ⓪;EXCL (ClipBoard^.Modus, Exit);
- ⓪;SchirmSchreiben (ClipBoard,
- ⓪=MerkPunkte [ErsteZeile].merkline, 0, 0);
- ⓪;Editieren (ClipBoard, helpPuff, key, Inf, 0);
- ⓪;EditPuffer := Puff;
- ⓪;VollPrompt := TRUE;
- ⓪-|
- ⓪*Seitup: IF ((MerkPunkte [LaufendeZeile].zeilpos + 3) >
- ⓪=LinesOnScreen) THEN
- ⓪=StelleZeileEin (Puff,
- ⓪MMerkPunkte [LaufendeZeile].zeilpos
- ⓪M- LinesOnScreen + 3,
- ⓪MMerkPunkte [LaufendeZeile].zeilpos
- ⓪M- MerkPunkte [ErsteZeile].zeilpos);
- ⓪;ELSE StelleZeileEin (Puff, 1, 0);
- ⓪;END (* IF *);
- ⓪;|
- ⓪*cursup: LineUp (Puff);|
- ⓪*Seitdown: StelleZeileEin (Puff,
- ⓪KMerkPunkte [LaufendeZeile].zeilpos
- ⓪K+ LinesOnScreen - 3,
- ⓪KMerkPunkte [LaufendeZeile].zeilpos
- ⓪K- MerkPunkte [ErsteZeile].zeilpos);
- ⓪;|
- ⓪*cursdown: LineDown (Puff);
- ⓪;|
- ⓪*cursleft, ZeilAnf, DelBZeil,
- ⓪*Wortleft: IF MerkPunkte [LaufendeZeile].merkline^.vorige # Puffer THEN
- ⓪=LineUp (Puff);
- ⓪=MerkPunkte [LaufendeZeile].charpos :=
- ⓪?Length (MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^);
- ⓪;END (* IF *);
- ⓪;|
- ⓪*cursright, ZeilEnde, DelEZeil,
- ⓪*Wortrigt: IF MerkPunkte [LaufendeZeile].merkline^.naechste # NIL THEN
- ⓪=LineDown (Puff);
- ⓪=MerkPunkte [LaufendeZeile].charpos := 0;
- ⓪;END (* IF *);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*DelLChar,
- ⓪*DelLWort: DoBackspace (Puff);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*DelRChar,
- ⓪*DelRWort: WITH MerkPunkte [LaufendeZeile] DO
- ⓪=charpos := Length (merkline^.ZeilPointer^);
- ⓪;END;
- ⓪;DoDelete (Puff);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* RETURN - Zeile spalten, neue Zeile einfuegen: *)
- ⓪*return: returnX := 1; DoCR (Puff, TRUE, returnX);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Undo-Puffer loeschen: *)
- ⓪*LoeschUndo: undone := FALSE;
- ⓪;Loeschen (UndoPuffer);
- ⓪;|
- ⓪*(* Zeile in Puffer kopieren: *)
- ⓪*PopCopyLine: InsertLine (UndoPuffer,
- ⓪=Puff^.MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^,
- ⓪=FALSE, FALSE, FALSE);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zeile loeschen - in Puffer schreiben: *)
- ⓪*PopDeleteLine: DeleteLine (Puff,
- ⓪AMerkPunkte [LaufendeZeile].merkline,
- ⓪CTRUE, TRUE);
- ⓪;INCL (Modus, Editiert);
- ⓪;EXCL (Modus, Compiliert);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zeile aus Puffer bei Cursor in Text kopieren: *)
- ⓪*PopLastBufferLine,
- ⓪*CopyLastBufferLine: Indent := AutoIndent IN Modus;
- ⓪;EXCL (Modus, AutoIndent);
- ⓪;LineUp (Puff);
- ⓪;InsertLine (Puff,
- ⓪GUndoPuffer^.MerkPunkte
- ⓪I[LaufendeZeile].merkline^.ZeilPointer^,
- ⓪GFALSE, TRUE, TRUE);
- ⓪;IF termch.bef = PopLastBufferLine THEN
- ⓪=DeleteLine (UndoPuffer,
- ⓪?UndoPuffer^.MerkPunkte [LaufendeZeile].merkline,
- ⓪GFALSE, FALSE);
- ⓪=LineUp (UndoPuffer);
- ⓪;END (* IF *);
- ⓪;IF Indent THEN INCL (Modus, AutoIndent); END;
- ⓪;INCL (Modus, Editiert);
- ⓪;EXCL (Modus, Compiliert);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Ueberschreiben/Einfuegen umschalten: *)
- ⓪*indent: IF AutoIndent IN Modus THEN
- ⓪>EXCL (Modus, AutoIndent);
- ⓪;ELSE INCL (Modus, AutoIndent);
- ⓪;END (* IF *);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*insert: IF OverWrite IN Modus THEN
- ⓪=EXCL (Modus, OverWrite);
- ⓪;ELSE INCL (Modus, OverWrite);
- ⓪;END (* IF *);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*Grossklein: IF GrossKleinSuche IN Modus THEN
- ⓪>EXCL (Modus, GrossKleinSuche);
- ⓪;ELSE INCL (Modus, GrossKleinSuche);
- ⓪;END;
- ⓪-|
- ⓪*Wortsuche: IF WortSuche IN Modus THEN
- ⓪=EXCL (Modus, WortSuche);
- ⓪;ELSE INCL (Modus, WortSuche);
- ⓪;END;
- ⓪-|
- ⓪*(* Hilfspuffer anzeigen: *)
- ⓪*help: IF HilfsPuffer # NIL THEN
- ⓪=EditPuffer := HilfsPuffer;
- ⓪=HilfsPuffer := Puff;
- ⓪=Puff := EditPuffer;
- ⓪=VollPrompt := TRUE;
- ⓪;END (* IF *);
- ⓪;|
- ⓪*(* Neuen Puffer anlegen: *)
- ⓪*InsertPuff: Puff := FindeLeerpuffer (Puff);
- ⓪;IF ~PufferLeer (Puff) THEN
- ⓪=Puff := InsertPuffer (Puff);
- ⓪;END;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*NaechstenPuffer: helpPuff := Puff;
- ⓪;Puff := Puff^.NaechsterPuffer;
- ⓪;tabjump := TabWeite;
- ⓪;EditPuffer := Puff;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Bildschirm nach unten rollen: *)
- ⓪*Rolldown: ScrollDown (Puff, 1);
- ⓪;|
- ⓪*(* Bildschirm nach oben rollen: *)
- ⓪*Rollup: ScrollUp (Puff, 1);
- ⓪;|
- ⓪*(* Zum Textanfang springen: *)
- ⓪*zumDAnf: MerkPunkte [LaufendeZeile].merkline :=
- ⓪=Puffer^.naechste;
- ⓪;MerkPunkte [ErsteZeile].merkline :=
- ⓪=MerkPunkte [LaufendeZeile].merkline;
- ⓪;MerkPunkte [LaufendeZeile].zeilpos := 1;
- ⓪;MerkPunkte [ErsteZeile].zeilpos := 0;
- ⓪;MerkPunkte [LaufendeZeile].charpos := 0;
- ⓪;VollPrompt := TRUE; (* Für alle Fälle... *)
- ⓪;|
- ⓪*(* Zum Textende springen: *)
- ⓪*zumDEnde: StelleZeileEin (Puff, ZeilenAnzahl + 1, LinesOnScreen);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=Length (MerkPunkte [LaufendeZeile].merkline^.ZeilPointer^);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zur einer Zeilennummer springen: *)
- ⓪*zuNrZeile: n := 0;
- ⓪;ReadNum (1, 'Zeilennummer: ', n);
- ⓪;StelleZeileEin (Puff, n, LinesOnScreen DIV 2);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Linke Maustaste gedrueckt: *)
- ⓪*(* LeftMous *)
- ⓪*LeftMous, RightMous: CursorAufMauspos (Puff, termch);
- ⓪;|
- ⓪*(* String suchen: *)
- ⓪*SuchString: tauschwort := '';
- ⓪;WortSuchen (Puff, FALSE, suchwort);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Ganzes Wort auf Cursor suchen *)
- ⓪*PickWort: tauschwort := '';
- ⓪;WortSuchen (Puff, TRUE, suchwort);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Wort noch einmal suchen oder/und austauschen: *)
- ⓪*WeitSuch: DoWeitSuch (Puff); VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Wort suchen und tauschen: *)
- ⓪*StriTausch: SuchTauschen (Puff, FALSE, suchwort, tauschwort);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*PickTausch: SuchTauschen (Puff, TRUE, suchwort, tauschwort);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* gepufferten Block an Cursorposition in Text kopieren: *)
- ⓪*Kopier,
- ⓪*Verschieb,
- ⓪*Paste: IF NOT BlockMarkiert (Puff) AND
- ⓪>(termch.bef # Paste) THEN
- ⓪=Nachricht ('Kein Block markiert!');
- ⓪;ELSIF InBlockMarken (Puff)
- ⓪;& (termch.bef = Verschieb) THEN
- ⓪=Nachricht ('Verschieben ist hier |nicht möglich!');
- ⓪;ELSE
- ⓪=IF BlockMarkiert (Puff) AND
- ⓪=((termch.bef # Paste) OR vorherMarkiert) THEN
- ⓪?WITH MerkPunkte [LaufendeZeile] DO
- ⓪Aml:= merkline;
- ⓪An:= charpos;
- ⓪AKopiereLoesche (Puff, ClipBoard,
- ⓪Ctermch.bef # Paste, termch.bef # Kopier);
- ⓪AIF termch.bef # Paste THEN
- ⓪C(* Cursor zurücksetzen *)
- ⓪CSucheZeilenNummer (Puff, ml, zeilpos);
- ⓪Cmerkline:= ml;
- ⓪Ccharpos:= n
- ⓪AEND
- ⓪?END
- ⓪=END;
- ⓪=LoescheBlockMarken (Puff);
- ⓪=IF DoClipboard & (termch.bef = Paste) THEN
- ⓪?EXCL (ClipBoard^.Modus, Editiert);
- ⓪?LoeschePuffer (ClipBoard);
- ⓪?Assign (ScrapPfad, ClipBoard^.Pfad);
- ⓪?Assign (ScrapName, ClipBoard^.Name);
- ⓪?TextLesen (ClipBoard, TRUE, FALSE, FALSE, FALSE);
- ⓪=END;
- ⓪=IF PufferLeer (ClipBoard) THEN
- ⓪?Nachricht ('Es ist nichts|im Clipboard!');
- ⓪=ELSE
- ⓪?Kopiere (Puff, ClipBoard);
- ⓪=END;
- ⓪;END;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Markierten Block loeschen (oder kopieren) und puffern): *)
- ⓪*CutToClipboard,
- ⓪*DeleteBlock,
- ⓪*CopyToClipboard: KopiereLoesche (Puff, ClipBoard,
- ⓪=termch.bef # DeleteBlock,
- ⓪=termch.bef # CopyToClipboard);
- ⓪;IF (termch.bef # DeleteBlock) & DoClipboard THEN
- ⓪=ClearScrap; (* Löscht alle "SCRAP.*"-Dateien im
- ⓪J* Scrap-Ordner, falls er existiert.*)
- ⓪=Assign (ScrapPfad, ClipBoard^.Pfad);
- ⓪=Assign (ScrapName, ClipBoard^.Name);
- ⓪=TextSchreiben (ClipBoard, FALSE, FALSE, FALSE, FALSE, FALSE, ok);
- ⓪;END;
- ⓪;LoescheBlockMarken (Puff); VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Ganzen Puffer loeschen & entfernen: *)
- ⓪*LoescheText: IF (Editiert IN Puff^.Modus) THEN
- ⓪=IF FrageJaNein (Ja, 'Text speichern?') THEN
- ⓪?TextSchreiben (Puff, FALSE, FALSE, FALSE,
- ⓪LKonfigSpeichern IN Modus, FALSE, ok);
- ⓪=ELSIF
- ⓪?FrageJaNein (Nein, 'Text ist editiert|Trotzdem löschen?') THEN
- ⓪?EXCL (Modus, Editiert);
- ⓪=END (* IF *);
- ⓪;END (* IF Editiert *);
- ⓪;IF ~(Editiert IN Puff^.Modus) THEN
- ⓪=LoeschePuffer (Puff);
- ⓪=DeletePuffer (Puff);
- ⓪;END (* IF *);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Markierten Block saven *)
- ⓪*BlockWrit: TextSchreiben (Puff, FALSE, TRUE, TRUE, FALSE, FALSE, ok);
- ⓪;IF ok THEN
- ⓪=LoescheBlockMarken (Puff);
- ⓪;END;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* File als Block in Text einfuegen *)
- ⓪*BlockRead: AlterName := Puff^.Name;
- ⓪;AlterPfad := Puff^.Pfad; (* DeleteTail (AlterPfad); *)
- ⓪;TextLesen (Puff, FALSE, TRUE, FALSE, TRUE);
- ⓪;Puff^.Name := AlterName; Puff^.Pfad := AlterPfad;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Datei sichern ohne Abfrage *)
- ⓪*Update: TextSchreiben (Puff, FALSE, FALSE, FALSE,
- ⓪JKonfigSpeichern IN Modus, FALSE, ok);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Text speichern mit Abfrage *)
- ⓪*TextSave: TextSchreiben (Puff, FALSE, FALSE, TRUE,
- ⓪JKonfigSpeichern IN Modus, FALSE, ok);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Datei laden *)
- ⓪*TextLoad,
- ⓪*TextFragLad: DoTextLoad (Puff, termch, Info);
- ⓪;EditPuffer := Puff; VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zum Blockanfang springen: *)
- ⓪*zurAMark: StelleZeileEin (Puff,
- ⓪@MerkPunkte [BlockMarke1].zeilpos, 3);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=MerkPunkte [BlockMarke1].charpos;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Marke Blockanfang setzen: *)
- ⓪*setAMark: MarkiereBlockAnfang (Puff); BlockWurdeMarkiert:= TRUE
- ⓪;|
- ⓪*(* Zum Blockende springen: *)
- ⓪*zurEMark: StelleZeileEin (Puff,
- ⓪KMerkPunkte [BlockMarke2].zeilpos,
- ⓪KLinesOnScreen - 3);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=MerkPunkte [BlockMarke2].charpos;
- ⓪;|
- ⓪*(* Aufheben der Blockmarkierung: *)
- ⓪*BlockMLoe: LoescheBlockMarken (Puff);
- ⓪;|
- ⓪*(* Marke Blockende setzen: *)
- ⓪*setEMark: MarkiereBlockEnde (Puff); BlockWurdeMarkiert:= TRUE
- ⓪;|
- ⓪*SelectAll: mpt:= MerkPunkte [LaufendeZeile];
- ⓪;WITH MerkPunkte [LaufendeZeile] DO
- ⓪=n:= 1;
- ⓪=SucheZeilenPointer (Puff, n, merkline);
- ⓪=zeilpos:= n; charpos := 0;
- ⓪=MarkiereBlockAnfang (Puff);
- ⓪=n:= ZeilenAnzahl;
- ⓪=SucheZeilenPointer (Puff, n, merkline);
- ⓪=zeilpos:= n;
- ⓪=charpos := Length (merkline^.ZeilPointer^);
- ⓪=MarkiereBlockEnde (Puff);
- ⓪;END;
- ⓪;BlockWurdeMarkiert:= TRUE;
- ⓪;MerkPunkte [LaufendeZeile]:= mpt;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*SelectLine: LoescheBlockMarken (Puff);
- ⓪;mpt:= MerkPunkte [LaufendeZeile];
- ⓪;WITH MerkPunkte [LaufendeZeile] DO
- ⓪=charpos := 0;
- ⓪=MarkiereBlockAnfang (Puff);
- ⓪=IF merkline^.naechste # NIL THEN
- ⓪?merkline := merkline^.naechste;
- ⓪?INC (zeilpos);
- ⓪=ELSE
- ⓪?charpos := Length (merkline^.ZeilPointer^);
- ⓪=END;
- ⓪=MarkiereBlockEnde (Puff);
- ⓪;END;
- ⓪;BlockWurdeMarkiert:= TRUE;
- ⓪;MerkPunkte [LaufendeZeile]:= mpt;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*SelectWord: (* noch nicht impl *)
- ⓪;|
- ⓪*(* Block Einruecken: *)
- ⓪*Einrueck: RueckeBlockEin (Puff);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zur ersten Sprungmarke springen: *)
- ⓪*zur1Mark: StelleZeileEin (Puff,
- ⓪>MerkPunkte [MerkPunkt1].zeilpos,
- ⓪>LinesOnScreen DIV 2);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=MerkPunkte [MerkPunkt1].charpos;
- ⓪;|
- ⓪*(* Erste Sprungmarke setzen: *)
- ⓪*set1Mark: WITH MerkPunkte [MerkPunkt1] DO
- ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪;END (* WITH *);|
- ⓪*(* Zur zweiten Sprungmarke springen: *)
- ⓪*zur2Mark: StelleZeileEin (Puff,
- ⓪KMerkPunkte [MerkPunkt2].zeilpos,
- ⓪KLinesOnScreen DIV 2);
- ⓪;MerkPunkte [LaufendeZeile].charpos := MerkPunkte [MerkPunkt2].charpos;
- ⓪;|
- ⓪*zur3Mark: StelleZeileEin (Puff,
- ⓪KMerkPunkte [M13].zeilpos,
- ⓪KLinesOnScreen DIV 2);
- ⓪;MerkPunkte [LaufendeZeile].charpos := MerkPunkte [M13].charpos;
- ⓪;|
- ⓪*(* Zweite Sprungmarke setzen: *)
- ⓪*set2Mark: WITH MerkPunkte [MerkPunkt2] DO
- ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪;END (* WITH *);|
- ⓪*set3Mark: WITH MerkPunkte [M13] DO
- ⓪=zeilpos := MerkPunkte [LaufendeZeile].zeilpos;
- ⓪=merkline := MerkPunkte [LaufendeZeile].merkline;
- ⓪=charpos := MerkPunkte [LaufendeZeile].charpos;
- ⓪;END (* WITH *);|
- ⓪*(* Tabulator-Sprungweite einstellen: *)
- ⓪*TabLaen: ReadNum (1, 'Tabulatorabstand: ', TabWeite);
- ⓪;tabjump := TabWeite;
- ⓪;scrolloffset := TabWeite + TabWeite;
- ⓪;MerkPunkte [LaufendeZeile].charpos := 0;
- ⓪;MerkPunkte [ErsteZeile].charpos := 0;
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*(* Zur letzten bearbeiteten Position springen: *)
- ⓪*LetztePos: StelleZeileEin (Puff,
- ⓪AMerkPunkte [LetztePosition].zeilpos,
- ⓪ALinesOnScreen DIV 2);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=MerkPunkte [LetztePosition].charpos;
- ⓪;|
- ⓪*(* Zur letzten gesuchten Position springen: *)
- ⓪*LetzteSuchPos: StelleZeileEin (Puff,
- ⓪AMerkPunkte [IndexListe].zeilpos,
- ⓪ALinesOnScreen DIV 2);
- ⓪;MerkPunkte [LaufendeZeile].charpos :=
- ⓪=MerkPunkte [LetztePosition].charpos;
- ⓪;|
- ⓪*SteuerZeichenAnzeige:
- ⓪;IF ControlZeichen IN Modus THEN
- ⓪=EXCL (Modus, ControlZeichen)
- ⓪;ELSE INCL (Modus, ControlZeichen);
- ⓪;END;
- ⓪;|
- ⓪*TextParam: IF KonfigSpeichern IN Modus THEN
- ⓪=EXCL (Modus, KonfigSpeichern)
- ⓪;ELSE INCL (Modus, KonfigSpeichern);
- ⓪;END;
- ⓪;|
- ⓪*BackupAnlegen: IF MakeBAK IN Modus THEN
- ⓪=EXCL (Modus, MakeBAK)
- ⓪;ELSE INCL (Modus, MakeBAK);
- ⓪;END;
- ⓪;|
- ⓪*GEMKlemmbrettEinAus: DoClipboard := ~DoClipboard;
- ⓪;|
- ⓪*QueryError: DoNaechsterMerker (Puff, infozeile);
- ⓪;|
- ⓪*Compile: infozeile [0] := nul;
- ⓪;SetCompilerInfo (Puff, infozeile); (* Löschen! *)
- ⓪;CallCompiler (Puff, infozeile);
- ⓪;CheckMargin (Puff);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*ZeitUndDatum: ZeitAnzeigen (Puff, infozeile);
- ⓪;VollPrompt := TRUE;
- ⓪;|
- ⓪*GlobParam: CopyConfig (Puff, ConfigPuffer);
- ⓪;SaveConfig (ConfigPuffer, TRUE);
- ⓪;|
- ⓪*LoadParam: LoadConfig (ConfigPuffer, TRUE, FALSE);
- ⓪;|
- ⓪*ELSE;
- ⓪(END (* CASE *);
- ⓪&END (* ELSE overflow *);
- ⓪$END (* WITH *);
- ⓪$
- ⓪$IF (termch.TT = Befehl) & (termch.bef IN
- ⓪&Befehlssatz {TextLoad, TextFragLad, WeitSuch, SuchString, PickWort,
- ⓪3StriTausch, PickTausch, BlockMLoe, SelectLine,
- ⓪3QueryError, KillPuff, NaechstenPuffer, InsertPuff,
- ⓪3EditBlock, Seitup, GMECopyrightBox,
- ⓪3Seitdown, help, PufferWaehlen, zumDAnf, zumDEnde, zuNrZeile,
- ⓪3Lookup, LoadFiles,
- ⓪3Compile, Make, MakeExec,
- ⓪3CutToClipboard, CopyToClipboard,
- ⓪3LoescheText, BlockWrit, BlockRead, TextSave,
- ⓪3Update, zurAMark, zurEMark, zur1Mark, zur2Mark, zur3Mark,
- ⓪3TabLaen, LetztePos, LetzteSuchPos,
- ⓪3GlobParam, MerkPunkt, SetzPunkt, home})
- ⓪$THEN
- ⓪&SchirmSchreiben (Puff, Puff^.MerkPunkte [LaufendeZeile].merkline, 0, 0);
- ⓪&VollPrompt := TRUE;
- ⓪$END;
- ⓪"UNTIL (termch.TT = Befehl) & (termch.bef IN
- ⓪$Befehlssatz {ExitEditor, QuitCompile, QuitCompileRun, Make, MakeExec,
- ⓪-LoescheAllePuffer, SpeichereAllePuffer}) OR
- ⓪((Exit IN Puff^.Modus);
- ⓪"RetPuff := Puff;
- ⓪ END Editieren;
- ⓪
- ⓪ BEGIN
- ⓪"Trace ('EditLook');
- ⓪"BindeSet := CharSet {0C, ' ', '-', PhantomTrenn};
- ⓪"TrennSet := CharSet {0C, tab, ' ', ',', ';', '.', '(',
- ⓪7')', '[', ']', '{', '}',
- ⓪7':', '!', '/', '*', '-',
- ⓪7'+', '&', '~', '=', (*'^',*)
- ⓪7'#', '|', '<', '>'};
- ⓪
- ⓪"Trace ('Editor');
- ⓪"BlockWurdeMarkiert:= FALSE;
- ⓪"suchwort := ''; tauschwort := '';
- ⓪"undone := FALSE;
- ⓪ END GMEditor.
- ⓪
- ⓪
- ⓪ ə
- (* $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ÇÇé*)
-