home *** CD-ROM | disk | FTP | other *** search
- ⓪
- ⓪ (* Atari-Editor
- ⓪!*------------------------------------------------------------------------------
- ⓪!* Copyright 1986-1990 by Thomas Tempelmann
- ⓪!*------------------------------------------------------------------------------
- ⓪!* TT: Thomas Tempelmann, Schusterwolfstr.13, 81241 München, Tel.089/8347394
- ⓪!* Hü: Wilfried Hübner, Hohenzollernstr. 8B, D-1000 Berlin 39
- ⓪!* HSK: Hannes Krohn, Kreuzstr. 35, Karlsruhe
- ⓪!*------------------------------------------------------------------------------
- ⓪!* 0.0: H.-J. Himmeröder :23.02.85: Grundversion
- ⓪!* 1.0: TT :27.06.86: Übernahme des Gepard-Editors 2.p
- ⓪!* 1.1: TT :27.07.86: Load/Save impl.
- ⓪!* 1.2: TT :06.09.86: Cleantext schneller, Aufruf nach Load/Save
- ⓪!* 1.3: TT :23.10.86: Infoblock in Kommentarzeile; Saveinfo nur,
- ⓪!* wenn er beim Laden schon da war.
- ⓪!* 1.4: TT :25.10.86: Tabs werden richtig erkannt (-> "§")
- ⓪!* 1.5: TT :27.10.86: Hoffentlich kein Addr-Err mehr bei save
- ⓪!* 1.6: TT :02.03.87: Zeilennummern nun +1; Bei Frames wird
- ⓪!* 'saveInfo' gerettet; C(op F(ile raus;
- ⓪!* HardCopy korrig.; Cursor wird bei Pos-
- ⓪!* übergabe in ArgV[2] positioniert.
- ⓪!* 1.7: TT :03.03.87: Quit: X und C, TextPos vor CleanText gesetzt
- ⓪!* 1.8: TT :04.03.87: CleanText jetzt endlich richtig; F7/F8.
- ⓪!* 1.9: TT :09.05.87: Save erkennt Disk full
- ⓪!* 2.0: TT :25.07.87: Umstellung als MOS-Modul
- ⓪!* 2.1: TT :29.08.87: Nach Q, S, Return kein extra Zeichen am Textende
- ⓪!* 2.2: TT :14.09.87: FileSearch immer
- ⓪!* 2.3: TT :04.11.87: Code-Optimierungen
- ⓪!* 2.4: TT :25.12.87: ArgV-Auswertung erneuert
- ⓪!* 2.5: TT :25.01.88: In ArgV[3] wird die Spalte jetzt 0-based erwartet
- ⓪!* 2.6: TT :11.04.88: Läuft auch in Farbe.
- ⓪!* 2.6: TT :13.04.88: Farben werden gerettet.
- ⓪!* 2.7: TT :15.04.88: VOR Scrn-Rückschaltung wird auf VBL gewartet.
- ⓪!* 2.8: TT :18.04.88: Startup-Msg geändert, TextName wird auch bei QN gesetzt.
- ⓪!* 2.9: TT :02.06.88: Cleantext erkennt overflow; SaveText löscht File, wenn
- ⓪!* Schreibfehler; Compiler wird mit F5 gestartet - Achtung:
- ⓪!* Wenn Fehler in Include-File, wird der Text nicht geladen
- ⓪!* DLEChar v. $E auf $10 korrigiert.
- ⓪!* 2.A: TT :24.07.88: GotoLine hängt nicht, wenn Zeile = 0.
- ⓪!* 2.B: TT :10.08.88: Ausgabe beschleunigt; Farb-Auswahl nun ok; InsKey/DelKey
- ⓪!* alternativ für Insert-/Delete-Modus; Tabs werden bei F3
- ⓪!* initialisiert.
- ⓪!* 16.08.88: Ctrl-left/right f. SOLn/EOLn
- ⓪!* 2.C 10.09.88: Farbausgabe: ClearEndOfLine korrigiert
- ⓪!* 2.C+ Hü :16.04.89: FileSelectBox (readOnly) eingebaut. Textcursor kann mit
- ⓪!* Maus versetzt werden. Scrolling durch Mausbetätigung
- ⓪!* an den vertikalen Bildschirmrändern.
- ⓪!* 2.D TT 19.04.89: FileSelect-Box auch bei Schreiboperationen; Pfadname
- ⓪!* in FS enthält auch Laufwerksbuchstabe; SaveText liefert
- ⓪!* FALSE bei Schreibfehler -> Text geht nicht mehr bei 'QU'
- ⓪!* verloren; CmdLineAway prüft auch Mausklick; '.TXT' wird
- ⓪!* nicht mehr automatisch angefügt; Tab-Weite kann in
- ⓪!* 'ET' bestimmt werden; Quick-Save-Option; Backup-Name
- ⓪!* wird richtig gebildet; Ctrl-Z bei Save zw. Textende und
- ⓪!* Info-Line.
- ⓪!* 2.E TT 23.04.89: GetPath fügt ggf. '\' an Pfad an, damit es keine Probleme
- ⓪!* mit altem Directories-Modul gibt; FileSelect zeigt Frage
- ⓪!* an; Mauskontrolle überarbeitet (WaitForKey); kein Absturz
- ⓪!* wenn 'Overflow' in GetFile; Nach L(ook kann mit J(ump -
- ⓪!* an Ursprungsstelle zurückgesprungen werden; Kein Hänger
- ⓪!* bei Delete über Textanfang/-ende; TabLeft jetzt mit
- ⓪!* Ctrl- oder Shift-Tab; ScrollUp/Down mit Ctrl-Up/Down;
- ⓪!* Hardcopy wieder drin.
- ⓪!* TT 28.04.89: Bei F3 wird neue Frame-Nr wieder aktualisiert
- ⓪!* 2.F TT 14.05.89: Wenn von niedriger auf mittl. Auflösung umgeschaltet
- ⓪!* werden muß, wird kein GEM (Maus, FileSelect) verwendet
- ⓪!* TT 22.05.89: Kein Hänger, wenn Ctrl-Z erstes Zeichen im Text
- ⓪!* 2.G TT 25.05.89: Ctrl-Z wird nicht am Textende erzeugt, wenn kein
- ⓪!* <Save Info-line>.
- ⓪!* 2.H HSK 13.11.88: Mit F6 wird in .DEF-Files nach dem Identifier unter dem
- ⓪!* Cursor gesucht, das entsprechende .D-File geladen und
- ⓪!* der Cursor auf den Identifier positioniert.
- ⓪!* Mit 'FindWord' wird der vollst. Name gesucht, sonst nach
- ⓪!* dessen Anfang.
- ⓪!* TT 09.07.89: Laden eines leeren Textes gibt keinen Absturz mehr.
- ⓪!* Leereingabe mit [ OK ] bei Fileselect sucht nicht mehr.
- ⓪!* Dateifehler als Text (bisher Nr).
- ⓪!* 2.I TT 17.07.89: F6 geht auch bei M2LIB.DEF
- ⓪!* 2.J TT 25.07.89: CallCompiler übergibt neue Options f. Compiler 3.6p
- ⓪!* TT 06.08.89: Enter-Taste nun direction-unabhängig (immer runter);
- ⓪!* Compiler-Name nun 'MM2Comp'
- ⓪!* 2.H TT 08.08.89: Datum der Source wird ggf. nach Comp-Aufruf neu gesetzt;
- ⓪!* Maus-Kontrolle geändert, damit bei FormAlert die Maus
- ⓪!* sichtbar ist.
- ⓪!* TT 10.08.89: "Save editor info-line" defaultmäßig nun auf FALSE;
- ⓪!* 'ß' wird auch als Alpha-Zeichen erkannt.
- ⓪!* TT 15.08.89: Maus-Kontrolle nochmals geändert (TRUE bei ShowCursor)
- ⓪!* TT 19.08.89: DefLibName importiert, wird nicht mehr gesucht
- ⓪!* TT 20.08.89: Quit mit Make, Make-Exec
- ⓪!* 2.I TT 13.09.89: F6 sollte nun auch mit LibFiles gehen
- ⓪!* 2.J TT 14.12.89: Änderungen an Shortkeys
- ⓪!* TT 11.01.90: F6 findet nun alle Items, auch Rec-Felder & Enum-Elems;
- ⓪!* Environment: X setzt Cursor immer an Textbeginn
- ⓪!* TT 17.01.90: Compilername wird aus ShellMsg importiert
- ⓪!* 2.K TT 13.03.90: Bei Enlarge-Fehler hoffentlich kein Bus-Error mehr
- ⓪!* TT 09.05.90: F6 sucht bei Modulnamen nicht mehr weiter im gefundenen
- ⓪!* Source; CompV4-Anpassung; F6 benutzt 'ReplaceHome'.
- ⓪!* 2.L TT 15.07.90: Enlarge wird nun korrekt aufgerufen.
- ⓪!* 2.M TT 20.08.90: Sollte nun bei Autoswitch-Overscan auf normal schalten;
- ⓪!* MoveText und Find/Replace schneller.
- ⓪!* 2.N TT 15.09.90: Mögl. Buserrors bei FindDefFile abgefangen. F6 kommt
- ⓪!* wieder mit Records klar.
- ⓪!* 2.O TT 18.09.90: Overscan-Switch korrigiert.
- ⓪!* 2.P TT 09.10.90: Läuft auch mit TT
- ⓪!* 2.Q TT 14.11.90: FileSelector wird versuchsweise auch bei Auflösungs-
- ⓪!* wechsel bei ST & TT verwendet (s. InitScreen).
- ⓪!* 2.R TT 03.12.90: Return-Taste wieder Direction-abhängig (a.Adjust,Delete).
- ⓪!* TT 11.12.90: Bei leerem Dateinamen beim Start kommt keine Fehlermeld.
- ⓪!* TT 19.04.91: Erkennt auch einzelne LF als Zeilentrenner
- ⓪!* 2.S TT 20.10.91: Bei DelMode mit Return-Taste und Direction=up kein
- ⓪!* Hänger mehr bei oberster Zeile.
- ⓪!* TT 15.02.93: Der Puffer belegt nur noch 2/3 des freien MaxMem,
- ⓪!* mind. jedoch 32K. StopEditor: erst Screenmode zurück,
- ⓪!* dann ExitGem (damit Redraw bei MultiTOS klappt?).
- ⓪!* MenuBar(NIL) vor InitEditor.
- ⓪!* 2.T TT 21.11.93: SetScreen-Aufruf ("Setrez") am Ende nur, wenn's auch am
- ⓪!* Anfang aufgerufen wurde (Vorschlag v. G.Castan wg. STE).
- ⓪!* MouseControl-Aufruf zu Beginn wg. MultiTOS.
- ⓪!* Tastenabfrage per MultiEvent.
- ⓪!* 2.T TT 10.12.93: GetInfo: Falls kein DLE im 1. Byte des Textes, wird auch
- ⓪!* die Info am Ende verworfen (wg. D.Steins Editor)
- ⓪!* 11.01.94: Maus wird nur noch über GrafMouse ein-/ausgeschaltet.
- ⓪!* 17.01.94: Bei neuen Texten wird im tag "=" ptrEnd gespeichert. Dies
- ⓪!* wird von nun an als Kriterium benutzt, ob die Infoline
- ⓪!* gültig ist. Über tag[';'] wird Cursorpos. beim Speichern
- ⓪!* gemerkt und beim Laden sofort wieder angesprungen.
- ⓪!* 2.U TT 06.02.94: Shift-/Ctrl-Cursor vertauscht.
- ⓪!*)
- ⓪
- ⓪
- ⓪ MODULE GEP_ED; (*$C-,R-,Q+,M-,G+ (Dezimale Char-Konst.) *)
- ⓪
- ⓪ (* ED1.ICL *)
- ⓪ FROM EasyGEM0 IMPORT ForceDeskRedraw;
- ⓪ FROM GrafBase IMPORT Point, Rectangle;
- ⓪ FROM GEMGlobals IMPORT TEffectSet, msbut1, MbuttonSet, TextEffect,
- ⓪0GemChar, FillType, SpecialKeySet;
- ⓪ FROM AESEvents IMPORT MultiEvent, lookForEntry, Event, EventSet, MessageBuffer;
- ⓪ FROM AESGraphics IMPORT MouseForm, GrafMouse;
- ⓪ FROM VDIInputs IMPORT GetMouseState;
- ⓪ FROM AESMenus IMPORT MenuBar;
- ⓪ FROM AESWindows IMPORT MouseControl, UpdateWindow;
- ⓪ FROM GEMEnv IMPORT RC, DeviceHandle, GemHandle, InitGem,
- ⓪(GEMVersion, ExitGem, CurrGemHandle;
- ⓪ FROM Strings IMPORT Empty, Append, Concat, Upper, Pos, Delete, Assign,
- ⓪(Compare, equal, Insert, PosLen, Length;
- ⓪ IMPORT Strings;
- ⓪ FROM StrConv IMPORT CardToStr, LHexToStr, StrToLCard, StrToCard, IntToStr;
- ⓪ FROM Storage IMPORT Enlarge, ALLOCATE, DEALLOCATE, Inconsistent,
- ⓪+MemAvail, MemSize, AllAvail;
- ⓪ FROM StorBase IMPORT FullStorBaseAccess;
- ⓪ FROM ArgCV IMPORT InitArgCV, PtrArgStr;
- ⓪ FROM PrgCtrl IMPORT TermProcess;
- ⓪ FROM PathEnv IMPORT FileSelectProc, SelectFile, NoSelect, ReplaceHome,
- ⓪+HomeReplaced, HomePath;
- ⓪ FROM PathCtrl IMPORT PathList, PathEntry;
- ⓪ FROM Paths IMPORT ListPos, SearchFile;
- ⓪ FROM ShellMsg IMPORT SrcPaths, TextName, ErrorMsg, TextCol, TextLine, ScanMode,
- ⓪(MainOutputPath, DefLibName, CodeName, CodeSize, Active, DefPaths,
- ⓪(StdPaths, ShellPath, CompilerArgs, CompilerParm, DefSfx;
- ⓪ FROM Files IMPORT File, Access, ReplaceMode, Open, Create, Close,
- ⓪(GetDateTime, SetDateTime, State, GetStateMsg, ResetState;
- ⓪ FROM Binary IMPORT ReadBytes, FileSize, WriteBytes, Seek, fromBegin;
- ⓪ FROM LibFiles IMPORT LibFile, OpenLib, CloseLib, LibQuery, LibEntry;
- ⓪ FROM FileNames IMPORT SplitName, SplitPath, ConcatPath;
- ⓪ IMPORT FileNames;
- ⓪ FROM Directory IMPORT DirEntry, DirQuery, MakeFullPath, GetDefaultPath,
- ⓪(FileAttrSet;
- ⓪ FROM Lists IMPORT NextEntry, ResetList, InitList, List;
- ⓪ FROM Clock IMPORT CurrentDate, CurrentTime, PackDate, PackTime,
- ⓪(Date, Time, UnpackDate, UnpackTime;
- ⓪ FROM SysInfo IMPORT Machine;
- ⓪ FROM TimeConvert IMPORT DateToText, TimeToText;
- ⓪ IMPORT Block;
- ⓪ FROM EasyExceptions IMPORT Call, Exception;
- ⓪
- ⓪ FROM Loader IMPORT DefaultStackSize, CallModule, LoaderResults;
- ⓪
- ⓪ CONST mayCallCompiler = TRUE; (* Bei FALSE auch Loader-IMPORT entfernen! *)
- ⓪
- ⓪ TYPE ASCII = SET OF [0C..255C];
- ⓪
- ⓪ CONST intVersion = 'V#0664';
- ⓪(Version = '2.U';
- ⓪
- ⓪(infoLen = 624;
- ⓪(
- ⓪(DLEoffset = $20;
- ⓪(DLEchar = 16C;
- ⓪(
- ⓪(ToggleTabKey = 02C;
- ⓪(ETXKey = 03C;
- ⓪(EnterKey = 13C;
- ⓪(DELKey = 05C;
- ⓪(BSKey = 04C;
- ⓪(INSKey = 01C;
- ⓪(LeftKey = 06C;
- ⓪(RightKey = 07C;
- ⓪(WordLeftKey = 08C;
- ⓪(WordRightKey = 09C;
- ⓪(EoLnKey = 18C;
- ⓪(SoLnKey = 19C;
- ⓪(TabLeftKey = 10C;
- ⓪(TabRightKey = 11C;
- ⓪(UpKey = 14C;
- ⓪(DownKey = 15C;
- ⓪(PageUpKey = 16C;
- ⓪(PageDownKey = 17C;
- ⓪(ClrEoLnKey = 20C;
- ⓪(ClrLnKey = 21C;
- ⓪(FindDefKey = 22C;
- ⓪(ESCKey = 27C;
- ⓪(BreakKey = 'B';
- ⓪(HelpKey = 24C;
- ⓪(OpenFrameKey = 25C;
- ⓪(CloseFrameKey= 26C;
- ⓪(HomeKey = 28C;
- ⓪(ScrlUpKey = 29C;
- ⓪(ScrlDownKey = 30C;
- ⓪(CompileKey = 31C;
- ⓪
- ⓪(CRChar = 13C;
- ⓪(LFChar = 10C;
- ⓪(BSChar = 08C;
- ⓪(ClrScrnChar = 12C;
- ⓪(ClrEolnChar = 01C;
- ⓪(ClrEoSChar = 02C;
- ⓪(Cursoronchar = 03C;
- ⓪(Cursoroffchar = 04C;
- ⓪(Inverseonchar = 05C;
- ⓪(Inverseoffchar = 06C;
- ⓪(LeftChar = 11C;
- ⓪(HomeChar = 14C;
- ⓪(ClrLnChar = 15C;
- ⓪(DownChar = 17C;
- ⓪(UpChar = 18C;
- ⓪
- ⓪ TYPE String = ARRAY [0..81] OF CHAR;
- ⓪%MaxStr = ARRAY [0..255] OF CHAR;
- ⓪
- ⓪ VAR fileName, errMsg, Path1, FName1,
- ⓪$oldString, newString : String;
- ⓪$printLine (* Puffer für Ausgaberoutinen *) : MaxStr;
- ⓪$exitCode, LinesPerChar, PointsPerChar : INTEGER;
- ⓪$maxLine, maxCol, maxColM1, yx, dleWert, ptrXIns, nrOfTabs,
- ⓪$ptrY, ptrX, ptrLine, ptrCount, workCount, countDefault,dumCard,
- ⓪$fileD, fileT, filesInMem, sessions, oldShiftMode,
- ⓪$ErrorNr, CursorX, CursorY, cols, Lines, cmdMode : CARDINAL;
- ⓪$bufferStart, bufferH, bufferL, bufferM, ptrStart, ptr, temp,
- ⓪$ptrEnd, delPtr, lastPtr, hilf, scrPtr, pFont8_8, pFont8_16,
- ⓪$oldSelect, pScreen, ShortKeyPtr, ColorReg : ADDRESS;
- ⓪$rptf , total, startupTime, keepTime, ErrorPos, flen, ErrLine : LONGCARD;
- ⓪$direction, findCase, findSame, findWord, verify, endOfEd, color,
- ⓪$saved, cmdFlag, infinite, abort, accept, delFlag, insFlag,success,
- ⓪$forceTab, screenOK, fnOK, makeDLE, autoBack, autoIncVer, strOK,Ok1,
- ⓪$CursorState, tabMode, Inverse, Inserting, saveInfo, UseGem, rez_changed,
- ⓪$defFound, leaveDLEonWrite, restoreFileDT, modNameFound, isTT : BOOLEAN;
- ⓪$oldconterm, ch : CHAR;
- ⓪$tabs: ARRAY [0..40] OF WORD;
- ⓪$oldColor: ARRAY [0..3] OF CARDINAL;
- ⓪$DefLibFile: LibFile;
- ⓪$f: File;
- ⓪$IOResult,Integ : INTEGER;
- ⓪$allowed : ASCII;
- ⓪$infoBuffer : ARRAY [1..330] OF word;
- ⓪$fontbuffer : ARRAY [0..$7FF] OF WORD; (* 4 KB für akt. Font *)
- ⓪$dev : DeviceHandle;
- ⓪$hdl : GemHandle;
- ⓪$
- ⓪$(* folg. 5 Vars müssen hintereinander liegen! *)
- ⓪$ptrStack : ARRAY [0..15] OF ADDRESS; tags: ARRAY ['0'..'Z'] OF ADDRESS;
- ⓪$saveStack : ARRAY [0..15] OF ADDRESS; svs2: ARRAY ['0'..'Z'] OF ADDRESS;
- ⓪$svlptr: ADDRESS;
- ⓪
- ⓪
- ⓪ (* TABLE.B ErrorType: 'wwwcccpnpkrrcoooP'; *)
- ⓪
- ⓪
- ⓪ (* ED2.ICL *)
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DispChar;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ ;
- ⓪ ; *** Character auf Monitor-Screen darstellen ***
- ⓪ ; Char in D0.B
- ⓪ ; (D0/A0/A1)
- ⓪ ;
- ⓪*TST.W color
- ⓪*BNE disp8x8
- ⓪*
- ⓪*; Font-^ auf richtiges Zeichen bestimmen:
- ⓪*LEA fontbuffer,A0
- ⓪*LSL #4,D0 ; * 16
- ⓪*ADDA.W D0,A0
- ⓪*; Screenoffset := CursorY * 80 * 16 + CursorX * 1
- ⓪*MOVE.W CursorY,D0
- ⓪*; D0 * 1280
- ⓪*LSL.W #8,D0
- ⓪*MOVE.L D0,A1
- ⓪*LSL.W #2,D0
- ⓪*ADD.W A1,D0
- ⓪*ADD CursorX,D0
- ⓪*MOVE.L pScreen,A1
- ⓪*ADDA.W D0,A1
- ⓪*
- ⓪*MOVE.B (A0)+,(A1)
- ⓪*MOVE.B (A0)+,0080(A1)
- ⓪*MOVE.B (A0)+,0160(A1)
- ⓪*MOVE.B (A0)+,0240(A1)
- ⓪*MOVE.B (A0)+,0320(A1)
- ⓪*MOVE.B (A0)+,0400(A1)
- ⓪*MOVE.B (A0)+,0480(A1)
- ⓪*MOVE.B (A0)+,0560(A1)
- ⓪*MOVE.B (A0)+,0640(A1)
- ⓪*MOVE.B (A0)+,0720(A1)
- ⓪*MOVE.B (A0)+,0800(A1)
- ⓪*MOVE.B (A0)+,0880(A1)
- ⓪*MOVE.B (A0)+,0960(A1)
- ⓪*MOVE.B (A0)+,1040(A1)
- ⓪*MOVE.B (A0)+,1120(A1)
- ⓪*MOVE.B (A0)+,1200(A1)
- ⓪*RTS
- ⓪
- ⓪ disp8x8 ; Font-^ auf richtiges Zeichen bestimmen:
- ⓪*MOVEM.W D4/D5,-(A7)
- ⓪*LEA fontbuffer,A0
- ⓪*LSL #3,D0 ; * 8
- ⓪*ADDA.W D0,A0
- ⓪*; Screenoffset := CursorY * 80/160 * 8/16 + CursorX * 1/2
- ⓪*MOVE.W CursorY,D0
- ⓪*; D0 * 1280
- ⓪*LSL.W #8,D0
- ⓪*MOVE D0,D4
- ⓪*LSL.W #2,D0
- ⓪*ADD.W D4,D0
- ⓪*MOVE CursorX,D4
- ⓪*MOVE D4,D5
- ⓪*ANDI #$FFFE,D4
- ⓪*LSL #1,D4
- ⓪*ADD D4,D0
- ⓪*ANDI #1,D5
- ⓪*ADD D5,D0
- ⓪*MOVE.L pScreen,A1
- ⓪*ADDA.W D0,A1
- ⓪*MOVEM.W (A7)+,D4/D5
- ⓪*
- ⓪*; beide Planes müssen gesetzt werden
- ⓪*MOVE.B (A0) ,(A1)
- ⓪*MOVE.B (A0)+,0002(A1)
- ⓪*MOVE.B (A0) ,0160(A1)
- ⓪*MOVE.B (A0)+,0162(A1)
- ⓪*MOVE.B (A0) ,0320(A1)
- ⓪*MOVE.B (A0)+,0322(A1)
- ⓪*MOVE.B (A0) ,0480(A1)
- ⓪*MOVE.B (A0)+,0482(A1)
- ⓪*MOVE.B (A0) ,0640(A1)
- ⓪*MOVE.B (A0)+,0642(A1)
- ⓪*MOVE.B (A0) ,0800(A1)
- ⓪*MOVE.B (A0)+,0802(A1)
- ⓪*MOVE.B (A0) ,0960(A1)
- ⓪*MOVE.B (A0)+,0962(A1)
- ⓪*MOVE.B (A0) ,1120(A1)
- ⓪*MOVE.B (A0)+,1122(A1)
- ⓪ END
- ⓪ END DispChar;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE NextCharMono;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(; Font-^ auf richtiges Zeichen bestimmen:
- ⓪(LEA fontbuffer,A0
- ⓪(LSL #4,D0 ; * 16
- ⓪(ADDA.W D0,A0
- ⓪(ADDQ.L #1,A1
- ⓪(MOVE.B (A0)+,(A1)
- ⓪(MOVE.B (A0)+,0080(A1)
- ⓪(MOVE.B (A0)+,0160(A1)
- ⓪(MOVE.B (A0)+,0240(A1)
- ⓪(MOVE.B (A0)+,0320(A1)
- ⓪(MOVE.B (A0)+,0400(A1)
- ⓪(MOVE.B (A0)+,0480(A1)
- ⓪(MOVE.B (A0)+,0560(A1)
- ⓪(MOVE.B (A0)+,0640(A1)
- ⓪(MOVE.B (A0)+,0720(A1)
- ⓪(MOVE.B (A0)+,0800(A1)
- ⓪(MOVE.B (A0)+,0880(A1)
- ⓪(MOVE.B (A0)+,0960(A1)
- ⓪(MOVE.B (A0)+,1040(A1)
- ⓪(MOVE.B (A0)+,1120(A1)
- ⓪(MOVE.B (A0)+,1200(A1)
- ⓪ END
- ⓪ END NextCharMono;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE NextCharColor;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(; Font-^ auf richtiges Zeichen bestimmen:
- ⓪(LEA fontbuffer,A0
- ⓪(LSL #3,D0 ; * 8
- ⓪(ADDA.W D0,A0
- ⓪(MOVE.W A1,D0
- ⓪(BTST #0,D0
- ⓪(BEQ even
- ⓪(ADDQ.L #3,A1
- ⓪(BRA odd0
- ⓪ even ADDQ.L #1,A1
- ⓪ odd0 MOVE.B (A0) ,(A1)
- ⓪(MOVE.B (A0)+,0002(A1)
- ⓪(MOVE.B (A0) ,0160(A1)
- ⓪(MOVE.B (A0)+,0162(A1)
- ⓪(MOVE.B (A0) ,0320(A1)
- ⓪(MOVE.B (A0)+,0322(A1)
- ⓪(MOVE.B (A0) ,0480(A1)
- ⓪(MOVE.B (A0)+,0482(A1)
- ⓪(MOVE.B (A0) ,0640(A1)
- ⓪(MOVE.B (A0)+,0642(A1)
- ⓪(MOVE.B (A0) ,0800(A1)
- ⓪(MOVE.B (A0)+,0802(A1)
- ⓪(MOVE.B (A0) ,0960(A1)
- ⓪(MOVE.B (A0)+,0962(A1)
- ⓪(MOVE.B (A0) ,1120(A1)
- ⓪(MOVE.B (A0)+,1122(A1)
- ⓪ END
- ⓪ END NextCharColor;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InvertChar;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ ;
- ⓪ ; *** Character auf Monitor-Screen invertieren ***
- ⓪ ; (D0/A0)
- ⓪ ;
- ⓪*TST.W color
- ⓪*BNE disp8x8
- ⓪
- ⓪*MOVE.W CursorY,D0
- ⓪*LSL.W #8,D0
- ⓪*MOVE.L D0,A0
- ⓪*LSL.W #2,D0
- ⓪*ADD.W A0,D0
- ⓪*ADD CursorX,D0
- ⓪*MOVE.L pScreen,A0
- ⓪*ADDA.W D0,A0
- ⓪*MOVEQ #-1,D0
- ⓪*EOR.B D0,(A0)
- ⓪*EOR.B D0,0080(A0)
- ⓪*EOR.B D0,0160(A0)
- ⓪*EOR.B D0,0240(A0)
- ⓪*EOR.B D0,0320(A0)
- ⓪*EOR.B D0,0400(A0)
- ⓪*EOR.B D0,0480(A0)
- ⓪*EOR.B D0,0560(A0)
- ⓪*EOR.B D0,0640(A0)
- ⓪*EOR.B D0,0720(A0)
- ⓪*EOR.B D0,0800(A0)
- ⓪*EOR.B D0,0880(A0)
- ⓪*EOR.B D0,0960(A0)
- ⓪*EOR.B D0,1040(A0)
- ⓪*EOR.B D0,1120(A0)
- ⓪*EOR.B D0,1200(A0)
- ⓪*RTS
- ⓪
- ⓪ disp8x8 MOVEM.W D4/D5,-(A7)
- ⓪*; Screenoffset := CursorY * 80/160 * 8/16 + CursorX * 1/2
- ⓪*MOVE.W CursorY,D0
- ⓪*; D0 * 1280
- ⓪*LSL.W #8,D0
- ⓪*MOVE D0,D4
- ⓪*LSL.W #2,D0
- ⓪*ADD.W D4,D0
- ⓪*MOVE CursorX,D4
- ⓪*MOVE D4,D5
- ⓪*ANDI #$FFFE,D4
- ⓪*LSL #1,D4
- ⓪*ADD D4,D0
- ⓪*ANDI #1,D5
- ⓪*ADD D5,D0
- ⓪*MOVE.L pScreen,A0
- ⓪*ADDA.W D0,A0
- ⓪*MOVEM.W (A7)+,D4/D5
- ⓪*MOVEQ #-1,D0
- ⓪*EOR.B D0,(A0)
- ⓪*EOR.B D0,0002(A0)
- ⓪*EOR.B D0,0160(A0)
- ⓪*EOR.B D0,0162(A0)
- ⓪*EOR.B D0,0320(A0)
- ⓪*EOR.B D0,0322(A0)
- ⓪*EOR.B D0,0480(A0)
- ⓪*EOR.B D0,0482(A0)
- ⓪*EOR.B D0,0640(A0)
- ⓪*EOR.B D0,0642(A0)
- ⓪*EOR.B D0,0800(A0)
- ⓪*EOR.B D0,0802(A0)
- ⓪*EOR.B D0,0960(A0)
- ⓪*EOR.B D0,0962(A0)
- ⓪*EOR.B D0,1120(A0)
- ⓪*EOR.B D0,1122(A0)
- ⓪ END
- ⓪ END InvertChar;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ScrnCurOff;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(; CLR.L CursorCnt
- ⓪(TST CursorState
- ⓪(BEQ CurOffE
- ⓪(JSR InvertChar
- ⓪(CLR CursorState
- ⓪ CurOffE
- ⓪ END;
- ⓪ END ScrnCurOff;
- ⓪
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE BufferDisp;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(DBRA D3,cont0
- ⓪(RTS
- ⓪ cont0 JSR ScrnCurOff
- ⓪(CLR D0
- ⓪(TST.W color
- ⓪(BEQ mono
- ⓪(BRA col
- ⓪
- ⓪ mono2: CLR D0
- ⓪(MOVE.B (A2)+,D0
- ⓪(JSR NextCharMono
- ⓪(ADDQ.W #1,CursorX
- ⓪(DBRA D3,mono2
- ⓪(RTS
- ⓪ mono MOVE.B (A2)+,D0
- ⓪(JSR DispChar
- ⓪(ADDQ.W #1,CursorX
- ⓪(DBRA D3,mono2
- ⓪(RTS
- ⓪
- ⓪
- ⓪ color2 CLR D0
- ⓪(MOVE.B (A2)+,D0
- ⓪(JSR NextCharColor
- ⓪(ADDQ.W #1,CursorX
- ⓪(DBRA D3,color2
- ⓪(RTS
- ⓪ col MOVE.B (A2)+,D0
- ⓪(JSR DispChar
- ⓪(ADDQ.W #1,CursorX
- ⓪(DBRA D3,color2
- ⓪ END
- ⓪ END BufferDisp;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE ClearEndOfLine;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVE CursorX,D0
- ⓪(BTST #0,D0
- ⓪(BEQ clreol
- ⓪(MOVEQ #' ',D0
- ⓪(JSR DispChar
- ⓪(ADDQ #1,CursorX
- ⓪(BSR clreol
- ⓪(SUBQ #1,CursorX
- ⓪ ClEolE0 RTS
- ⓪
- ⓪ clreol TST.W color
- ⓪(BNE disp8x8
- ⓪
- ⓪(MOVE cols,D0 ; 80
- ⓪(SUB CursorX,D0 ; ergibt gerade Anzahl zu löschender Bytes
- ⓪(BLS ClEolE0
- ⓪(LSR #1,D0 ; Anzahl Words
- ⓪(SUBQ #1,D0
- ⓪(MOVE D1,-(A7)
- ⓪(MOVE D0,-(A7)
- ⓪(MOVE.W CursorY,D0
- ⓪(LSL.W #8,D0
- ⓪(MOVE.L D0,A0
- ⓪(LSL.W #2,D0
- ⓪(ADD.W A0,D0
- ⓪(ADD CursorX,D0 ; ist immer gerade X-Pos.
- ⓪(MOVE.L pScreen,A0
- ⓪(ADDA.W D0,A0
- ⓪(MOVE.L A0,-(A7)
- ⓪(MOVE #15,-(A7) ; Loop-Counter
- ⓪ l1 MOVE 6(A7),D0
- ⓪(CLR D1
- ⓪ l2 MOVE D1,(A0)+ ; Eine Raster-Zeile löschen
- ⓪(DBRA D0,l2
- ⓪(ADDI.L #80,2(A7)
- ⓪(MOVE.L 2(A7),A0
- ⓪(SUBQ #1,(A7) ; alle 16 Raster-Zeilen löschen
- ⓪(BCC l1
- ⓪(ADDQ.L #8,A7
- ⓪(MOVE (A7)+,D1
- ⓪ ClEolE1 RTS
- ⓪
- ⓪ disp8x8 MOVE cols,D0 ; 80
- ⓪(SUB CursorX,D0 ; ergibt gerade Anzahl zu löschender Words
- ⓪(BLS ClEolE1
- ⓪(LSR #1,D0 ; Anzahl Longs
- ⓪(SUBQ #1,D0
- ⓪(MOVE D4,-(A7)
- ⓪(MOVE D0,-(A7)
- ⓪(; Screenoffset := CursorY * 160 * 8 + CursorX * 2
- ⓪(MOVE.W CursorY,D0
- ⓪(; D0 * 1280
- ⓪(LSL.W #8,D0
- ⓪(MOVE D0,D4
- ⓪(LSL.W #2,D0
- ⓪(ADD.W D4,D0
- ⓪(MOVE CursorX,D4 ; ist immer gerade X-Pos.
- ⓪(LSL #1,D4
- ⓪(ADD D4,D0
- ⓪(MOVE.L pScreen,A0
- ⓪(ADDA.W D0,A0
- ⓪(MOVE.L A0,-(A7)
- ⓪(MOVE #7,-(A7) ; Loop-Counter
- ⓪ l3 MOVE 6(A7),D0
- ⓪(CLR D4
- ⓪ l4 MOVE.L D4,(A0)+ ; Eine Raster-Zeile löschen
- ⓪(DBRA D0,l4
- ⓪(ADDI.L #160,2(A7)
- ⓪(MOVE.L 2(A7),A0
- ⓪(SUBQ #1,(A7) ; alle 8 Raster-Zeilen löschen
- ⓪(BCC l3
- ⓪(ADDQ.L #8,A7
- ⓪(MOVE (A7)+,D4
- ⓪ END;
- ⓪ END ClearEndOfLine;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE BufferWrite ( buf : ADDRESS; no : CARDINAL );
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVEM.L D0/D6/A0/A1/A2,-(A7)
- ⓪(JSR ScrnCurOff
- ⓪(MOVE.W -(A3),D6
- ⓪(MOVE.L -(A3),A2
- ⓪(BRA.L cont0
- ⓪
- ⓪ JScrnCurOff
- ⓪(JMP ScrnCurOff
- ⓪
- ⓪ InverseOff
- ⓪(CLR Inverse
- ⓪(RTS
- ⓪
- ⓪ InverseOn
- ⓪(MOVE #1,Inverse
- ⓪ ClEolE0 RTS
- ⓪
- ⓪ ClearLine
- ⓪(MOVE CursorX,-(A7)
- ⓪(CLR.W CursorX
- ⓪(JSR ClearEndOfLine
- ⓪(MOVE (A7)+,CursorX
- ⓪(RTS
- ⓪
- ⓪ CursorHome
- ⓪(CLR.W CursorX
- ⓪(CLR.W CursorY
- ⓪(RTS
- ⓪
- ⓪ ClearEoL
- ⓪(JMP ClearEndOfLine
- ⓪
- ⓪ ClearScrn
- ⓪(BSR CursorHome
- ⓪
- ⓪ ClearEoS
- ⓪(JSR ClearEndOfLine
- ⓪(MOVE CursorX,-(A7)
- ⓪(MOVE CursorY,-(A7)
- ⓪(CLR.W CursorX
- ⓪ ClrEosL ADDQ.W #1,CursorY
- ⓪(MOVE CursorY,D0
- ⓪(CMP Lines,D0
- ⓪(BCC ClrEosE
- ⓪(JSR ClearEndOfLine
- ⓪(BRA ClrEosL
- ⓪ ClrEosE MOVE (A7)+,CursorY
- ⓪(MOVE (A7)+,CursorX
- ⓪ ScrnRTS RTS
- ⓪(
- ⓪ ScrollUp
- ⓪(MOVEM.L D1-D7/A2-A6,-(A7)
- ⓪(MOVE.L pScreen,A0
- ⓪(MOVE.L A0,A1
- ⓪(ADDA.W #1280,A1
- ⓪(MOVE.W #640-1,D0
- ⓪ ScrlUL1 MOVEM.L (A1)+,D1-D7/A2-A6
- ⓪(MOVEM.L D1-D7/A2-A6,(A0)
- ⓪(ADDA.W #48,A0 ; = 12 * 4
- ⓪(DBRA D0,ScrlUL1
- ⓪(MOVEM.L (A7)+,D1-D7/A2-A6
- ⓪(RTS
- ⓪(
- ⓪ ScrollDown
- ⓪(MOVEM.L D1-D7/A2-A6,-(A7)
- ⓪(MOVE.L pScreen,A0
- ⓪(ADDA.W #32000,A0
- ⓪(MOVE.L A0,A1
- ⓪(SUBA.W #1280,A1
- ⓪(MOVE.W #640-1,D0
- ⓪ ScrlDL1 SUBA.W #48,A1 ; = 12 * 4
- ⓪(MOVEM.L (A1),D1-D7/A2-A6
- ⓪(MOVEM.L D1-D7/A2-A6,-(A0)
- ⓪(DBRA D0,ScrlDL1
- ⓪(MOVEM.L (A7)+,D1-D7/A2-A6
- ⓪(RTS
- ⓪(
- ⓪ ScrnCR CLR.W CursorX
- ⓪(
- ⓪ CursorDown
- ⓪(ADDQ.W #1,CursorY
- ⓪(MOVE CursorY,D0
- ⓪(CMP Lines,D0
- ⓪(BCS CurDE
- ⓪(MOVE.W Lines,D0
- ⓪(SUBQ #1,D0
- ⓪(MOVE D0,CursorY
- ⓪(BSR ScrollUp
- ⓪ CurDC MOVE CursorX,-(A7)
- ⓪(CLR.W CursorX
- ⓪(JSR ClearEndOfLine
- ⓪(MOVE (A7)+,CursorX
- ⓪ CurDE RTS
- ⓪(
- ⓪ CursorUp
- ⓪(SUBQ #1,CursorY
- ⓪(BCC CurDE
- ⓪(CLR CursorY
- ⓪(BSR ScrollDown
- ⓪(BRA CurDC
- ⓪ (*
- ⓪ IncCursor
- ⓪(ADDQ.W #1,CursorX
- ⓪ ChkCursor
- ⓪(MOVE CursorX,D0
- ⓪(CMP cols,D0
- ⓪(BCS CurDE
- ⓪(CLR.W CursorX
- ⓪(BRA CursorDown
- ⓪ *)
- ⓪ DecCursor
- ⓪(SUBQ.W #1,CursorX
- ⓪(BCC ScrnRTS
- ⓪(MOVE cols,CursorX
- ⓪(SUBQ.W #1,CursorX
- ⓪(BRA CursorUp
- ⓪
- ⓪ BackSpace
- ⓪(BSR DecCursor
- ⓪(MOVEQ #' ',D0
- ⓪(JMP DispChar
- ⓪(
- ⓪ ScrnCurOn
- ⓪(; CLR.L CursorCnt
- ⓪(; BSR ChkCursor
- ⓪(TST CursorState
- ⓪(BNE CurOnE
- ⓪(JSR InvertChar
- ⓪(MOVE #1,CursorState
- ⓪ CurOnE RTS
- ⓪
- ⓪ CtrlOut CMPI #CRChar,D0
- ⓪(BEQ ScrnCR
- ⓪(CMPI #BSChar,D0
- ⓪(BEQ BackSpace
- ⓪(CMPI #LeftChar,D0
- ⓪(BEQ DecCursor
- ⓪(CMPI #UpChar,D0
- ⓪(BEQ CursorUp
- ⓪(CMPI #DownChar,D0
- ⓪(BEQ CursorDown
- ⓪(CMPI #HomeChar,D0
- ⓪(BEQ CursorHome
- ⓪(CMPI #ClrLnChar,D0
- ⓪(BEQ ClearLine
- ⓪(CMPI #ClrScrnChar,D0
- ⓪(BEQ ClearScrn
- ⓪(CMPI #ClrEolnChar,D0
- ⓪(BEQ ClearEoL
- ⓪(CMPI #ClrEoSChar,D0
- ⓪(BEQ ClearEoS
- ⓪(CMPI #Cursoronchar,D0
- ⓪(BEQ ScrnCurOn
- ⓪(CMPI #Cursoroffchar,D0
- ⓪(BEQ JScrnCurOff
- ⓪(CMPI #Inverseoffchar,D0
- ⓪(BEQ InverseOff
- ⓪(CMPI #Inverseonchar,D0
- ⓪(BEQ InverseOn
- ⓪(RTS
- ⓪(
- ⓪ OutC0 TST D0
- ⓪(BEQ end0
- ⓪(BSR CtrlOut
- ⓪(BRA cont0
- ⓪
- ⓪ OutC1 JSR InvertChar
- ⓪(BRA OutC2
- ⓪
- ⓪ ScrnOut CLR D0
- ⓪(MOVE.B (A2)+,D0
- ⓪(CMPI #' ',D0
- ⓪(BCS OutC0
- ⓪(JSR DispChar
- ⓪(TST Inverse
- ⓪(BNE OutC1
- ⓪ OutC2 ADDQ.W #1,CursorX
- ⓪ cont0 DBRA D6,ScrnOut
- ⓪ end0 MOVEM.L (A7)+,D0/D6/A0/A1/A2
- ⓪ END
- ⓪ END BufferWrite;
- ⓪
- ⓪ (* ED3.ICL *)
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE Rename (oldName, newName: ADDRESS): INTEGER;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L -(A3),-(A7) ; newName
- ⓪(MOVE.L -(A3),-(A7) ; oldName
- ⓪(CLR -(A7)
- ⓪(MOVE #$56,-(A7)
- ⓪(TRAP #1
- ⓪(ADDA.W #12,A7
- ⓪(TST.L D0
- ⓪(BMI E
- ⓪(MOVEQ #0,D0
- ⓪%E: MOVE D0,(A3)+
- ⓪$END
- ⓪"END Rename;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE FDelete (name: ADDRESS): INTEGER;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L -(A3),-(A7)
- ⓪(MOVE #$41,-(A7)
- ⓪(TRAP #1
- ⓪(ADDQ.L #6,A7
- ⓪(TST.L D0
- ⓪(BMI E
- ⓪(MOVEQ #0,D0
- ⓪%E: MOVE D0,(A3)+
- ⓪$END
- ⓪"END FDelete;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE GotoXY ( x, y : cardinal );
- ⓪ BEGIN
- ⓪"CursorX := x;
- ⓪"CursorY := y
- ⓪ END GotoXY;
- ⓪
- ⓪ PROCEDURE Conout ( c: CHAR );
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(SUBQ.L #1,A3
- ⓪(MOVE.B -(A3),D0
- ⓪(MOVE D0,-(A7)
- ⓪(MOVE #2,-(A7)
- ⓪(MOVE #3,-(A7)
- ⓪(TRAP #13
- ⓪(ADDQ.L #6,A7
- ⓪$END
- ⓪"END Conout;
- ⓪"(*$L=*)
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Bell;
- ⓪ BEGIN
- ⓪"Conout ( 7C )
- ⓪ END Bell;
- ⓪
- ⓪
- ⓪ PROCEDURE Today (): CARDINAL;
- ⓪"BEGIN
- ⓪$RETURN PackDate (CurrentDate ())
- ⓪"END Today;
- ⓪
- ⓪ PROCEDURE DirTime (): CARDINAL;
- ⓪"BEGIN
- ⓪$RETURN PackTime (CurrentTime ())
- ⓪"END DirTime;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GotoXYd1; (* GoToXY Highbyte(d1)=Y, Lowbyte(d1)=X *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;rettet nur d1,a0
- ⓪(movem.l d1/a0,-(a7)
- ⓪(cmp.b maxCol,d1
- ⓪(bls nopa
- ⓪(move.b maxCol,d1
- ⓪ nopa move d1,ptrY
- ⓪(move.b d1,ptrX
- ⓪(clr (a3)+
- ⓪(move.b d1,-1(a3)
- ⓪(lsr #8,d1
- ⓪(move d1,(a3)+
- ⓪(jsr GoToXY
- ⓪(movem.l (a7)+,d1/a0
- ⓪ END
- ⓪ END GotoXYd1;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ChrOut; (* Ausgabe eines Zeichens in d0 *)
- ⓪ BEGIN (* mit Aktualisierung der X,Y-Koordinaten *)
- ⓪ ASSEMBLER ;rettet alle Register
- ⓪(movem.l d0/d1/d2/d3/d4/d5/d6/a0/A1/A2,-(a7)
- ⓪(cmpi.b #' ',d0
- ⓪(bcc asciich
- ⓪(cmpi.b #CRchar,d0
- ⓪(bne ctrl1
- ⓪ newlin addq.b #1,ptrY
- ⓪(clr.b ptrX
- ⓪(moveq #0,d1
- ⓪(move.b ptrY,d1
- ⓪(cmp.w maxLine,d1
- ⓪(bls doit
- ⓪(bra lineup
- ⓪ ctrl1 cmpi.b #LeftChar,d0
- ⓪(beq ctrl11
- ⓪(cmpi.b #BSchar,d0
- ⓪(bne ctrl2
- ⓪ ctrl11 subq.b #1,ptrX
- ⓪(bpl doit
- ⓪(move.b maxCol,ptrX
- ⓪ lineup subq.b #1,ptrY
- ⓪(bpl doit
- ⓪(clr.b ptrY
- ⓪(bra doit
- ⓪ ctrl2 cmpi.b #ClrScrnChar,d0
- ⓪(bne doit
- ⓪(clr.b ptrY
- ⓪(clr.b ptrX
- ⓪(bra doit
- ⓪ asciich move.b ptrX,d1
- ⓪(cmp.b maxCol,d1
- ⓪(bcc newlin
- ⓪(addq.b #1,d1
- ⓪(move.b d1,ptrX
- ⓪ doit lea printLine,a0
- ⓪(move.b d0,(a0)
- ⓪(move.l a0,(a3)+
- ⓪(move #1,(a3)+
- ⓪(jsr BufferWrite
- ⓪(movem.l (a7)+,d0/d1/d2/d3/d4/d5/d6/a0/A1/A2
- ⓪ END
- ⓪ END ChrOut;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Write(cr: CHAR); (* dieses Write geht ⁿber ChrOut *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(subq.l #1,a3
- ⓪(move.b -(a3),d0
- ⓪(jmp ChrOut
- ⓪ END
- ⓪ END Write;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE WriteLn; (* damit x-y-Koord. bekannt *)
- ⓪ BEGIN
- ⓪"ASSEMBLER moveq #CRchar,d0 jmp ChrOut END
- ⓪ END WriteLn;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ClrLn; (* damit x-y-Koord. bekannt *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #ClrEOLNchar,d0
- ⓪(jsr ChrOut
- ⓪(jmp WriteLn
- ⓪ END
- ⓪ END ClrLn;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE WriteString(REF s:ARRAY OF CHAR);
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(ADDQ #1,-2(A3)
- ⓪(jsr BufferWrite
- ⓪(move cursorX,d1
- ⓪(move.b d1,ptrX
- ⓪(move cursorY,d1
- ⓪(move.b d1,ptrY
- ⓪ END;
- ⓪ END WriteString;
- ⓪
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE WriteLCard(c:LONGCARD);
- ⓪ BEGIN
- ⓪"WriteString (CardToStr(c,0))
- ⓪ END WriteLCard;
- ⓪
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE PrintError ( errno : INTEGER );
- ⓪ VAR s: String;
- ⓪ BEGIN
- ⓪"writestring('I/O error: ');
- ⓪"GetStateMsg (errno, s);
- ⓪"writestring(s);
- ⓪"writeln;
- ⓪ END PrintError;
- ⓪
- ⓪ VAR LastKey: GemChar;
- ⓪$LastMeta: SpecialKeySet;
- ⓪$buttons: mButtonSet;
- ⓪$Mousepoint: Point;
- ⓪$keyBuffered: BOOLEAN;
- ⓪
- ⓪ (*$L+*)
- ⓪ PROCEDURE LookForKey;
- ⓪"VAR events: EventSet; clicks: CARDINAL; key: GemChar; keystate: SpecialKeySet;
- ⓪&mp: Point; msgbuf: MessageBuffer; buts: MButtonSet;
- ⓪"BEGIN
- ⓪$MultiEvent (EventSet {keyboard, timer},
- ⓪00, MButtonSet {}, MButtonSet {},
- ⓪0lookForEntry, Rectangle{0,0,0,0},
- ⓪0lookForEntry, Rectangle{0,0,0,0},
- ⓪0msgbuf, 0, mp, buts, keystate, key, clicks, events);
- ⓪$IF ~keyBuffered & (keyboard IN events) THEN
- ⓪&keyBuffered:= TRUE;
- ⓪&LastKey:= key;
- ⓪&LastMeta:= keystate
- ⓪$END
- ⓪"END LookForKey;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE KeyPressed () : BOOLEAN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(JSR LookForKey
- ⓪(TST.L ShortKeyPtr
- ⓪(BNE yes
- ⓪((*
- ⓪*MOVE #2,-(A7)
- ⓪*MOVE #1,-(A7)
- ⓪*TRAP #13
- ⓪*ADDQ.L #4,A7
- ⓪*TST.W D0
- ⓪(*)
- ⓪(MOVE keyBuffered,D0
- ⓪ yes SNE D0
- ⓪(AND #1,D0
- ⓪(MOVE D0,(A3)+
- ⓪ END
- ⓪ END KeyPressed;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GetKeyD0;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVEM.L D1/D2/A5/A6,-(A7)
- ⓪ notValid
- ⓪(TST.L ShortKeyPtr
- ⓪(BNE GetShort
- ⓪(
- ⓪(moveq #CursorOnChar,d0
- ⓪(jsr ChrOut
- ⓪(
- ⓪((*
- ⓪*MOVE #2,-(A7)
- ⓪*MOVE #2,-(A7)
- ⓪*TRAP #13 ; Get Key
- ⓪*ADDQ.L #4,A7
- ⓪*MOVE.L D0,-(A7)
- ⓪*MOVE.B (A7),D2 ; D2: shift status
- ⓪*ANDI #$F,D2 ; nur shift, ctrl, alt drin lassen
- ⓪*CLR.B (A7)
- ⓪(*)
- ⓪&waitforkey:
- ⓪(JSR LookForKey
- ⓪(TST keyBuffered
- ⓪(BEQ waitforkey
- ⓪(CLR keyBuffered
- ⓪(move.w LastKey,D0
- ⓪(andi #$FF,D0 ; Char-Code
- ⓪(swap D0
- ⓪(move.b LastKey,D0 ; Scan-Code
- ⓪(andi #$FF,D0
- ⓪(swap D0
- ⓪(MOVE.L D0,-(A7)
- ⓪(MOVE.B LastMeta,D2 ; D2: shift status
- ⓪(ANDI #$F,D2 ; nur shift, ctrl, alt drin lassen
- ⓪(
- ⓪(moveq #CursorOffChar,d0
- ⓪(jsr ChrOut
- ⓪(
- ⓪(MOVE.L (A7)+,D0
- ⓪(
- ⓪(TST inserting
- ⓪(BEQ cont
- ⓪(
- ⓪(LEA shortKeys(PC),A5
- ⓪ srch2 MOVE.L (A5)+,D1
- ⓪(BEQ cont
- ⓪(CMP.L D0,D1
- ⓪(BNE noctrl
- ⓪(MOVE.L A5,ShortKeyPtr
- ⓪(BRA GetShort
- ⓪ noctrl TST.B (A5)+
- ⓪(BNE noctrl
- ⓪(MOVE A5,D1
- ⓪(BTST #0,D1
- ⓪(BEQ srch2
- ⓪(ADDQ.L #1,A5
- ⓪(BRA srch2
- ⓪
- ⓪ GetShort
- ⓪(MOVE.L ShortKeyPtr,A5
- ⓪(CLR D0
- ⓪(MOVE.B (A5)+,D0
- ⓪(ADDQ.L #1,ShortKeyPtr
- ⓪(TST.B (A5)
- ⓪(BNE ende
- ⓪(CLR.L ShortKeyPtr
- ⓪(BRA ende
- ⓪
- ⓪ cont LEA ctrlkeys(PC),A5
- ⓪(LEA keytabend(PC),A6
- ⓪ srch CMP.L 2(A5),D0
- ⓪(BNE noctrl2
- ⓪
- ⓪(MOVE (A5),D0
- ⓪(CMPI #UpKey,D0
- ⓪(BEQ up2
- ⓪(CMPI #DownKey,D0
- ⓪(BEQ down2
- ⓪(CMPI #TabRightKey,D0
- ⓪(BNE ende
- ⓪(TST.B D2
- ⓪(BEQ ende
- ⓪(MOVEQ #TabLeftKey,D0
- ⓪(BRA ende
- ⓪ up2 BTST #2,D2 ; ctrl gedrückt?
- ⓪(BEQ ende
- ⓪(MOVEQ #ScrlDownKey,D0
- ⓪(BRA ende
- ⓪ down2 BTST #2,D2 ; ctrl gedrückt?
- ⓪(BEQ ende
- ⓪(MOVEQ #ScrlUpKey,D0
- ⓪(BRA ende
- ⓪
- ⓪ noctrl2 ADDQ.L #6,A5
- ⓪(CMPA.L A6,A5
- ⓪(BCS srch
- ⓪
- ⓪(CMPI.L #' ',D0
- ⓪(BCS notValid ; Controlzeichen nicht direkt zugelassen
- ⓪
- ⓪ ende MOVEM.L (A7)+,D1/D2/A5/A6
- ⓪(RTS
- ⓪(
- ⓪ ctrlkeys
- ⓪(DC.W HelpKey DC.L $620000L
- ⓪(DC.W ESCKey DC.L $610000L ; Undo
- ⓪(DC.W ETXkey DC.L $3B0000L ; F1
- ⓪(DC.W SoLnKey DC.L $4B0034L ; SHIFT cursor left
- ⓪(DC.W EoLnKey DC.L $4D0036L ; SHIFT cursor right
- ⓪(DC.W WordLeftKey DC.L $730000L ; CTRL cursor left
- ⓪(DC.W WordRightKey DC.L $740000L ; CTRL cursor right
- ⓪(DC.W SoLnKey DC.L $430000L ; F9
- ⓪(DC.W EoLnKey DC.L $440000L ; F10
- ⓪(DC.W ScrlUpKey DC.L $410000L ; F7
- ⓪(DC.W ScrlDownKey DC.L $420000L ; F8
- ⓪(DC.W ESCKey DC.L $01001BL
- ⓪(DC.W ToggleTabKey DC.L $3C0000L ; F2
- ⓪(DC.W ETXKey DC.L $72000DL ; ENTER
- ⓪(DC.W EnterKey DC.L $1C000DL ; RETURN
- ⓪(DC.W DELKey DC.L $53007FL
- ⓪(DC.W BSKey DC.L $0E0008L
- ⓪(DC.W INSKey DC.L $520000L
- ⓪(DC.W LeftKey DC.L $4B0000L
- ⓪(DC.W RightKey DC.L $4D0000L
- ⓪(DC.W UpKey DC.L $480000L
- ⓪(DC.W DownKey DC.L $500000L
- ⓪(DC.W PageUpKey DC.L $480038L ; SHIFT cursor up
- ⓪(DC.W PageDownKey DC.L $500032L ; SHIFT cursor down
- ⓪(DC.W TabLeftKey DC.L $100011L ; CTRL-Q
- ⓪(DC.W TabRightKey DC.L $0F0009L ; TAB
- ⓪(DC.W OpenFrameKey DC.L $3D0000L ; F3
- ⓪(DC.W CloseFrameKey DC.L $3E0000L ; F4
- ⓪(DC.W CompileKey DC.L $3F0000L ; F5
- ⓪(DC.W HomeKey DC.L $470000L ; Clr/Home
- ⓪(DC.W FindDefKey DC.L $400000L ; F6
- ⓪
- ⓪ keytabend
- ⓪
- ⓪ shortKeys
- ⓪(DC.L $300000L ASC 'BEGIN' DC.B EnterKey ASC ' '
- ⓪8DC.B EnterKey,LeftKey,LeftKey ASC 'END ;'
- ⓪8DC.B EnterKey,ETXKey,LeftKey,LeftKey ACZ 'I' SYNC
- ⓪(DC.L $170000L ACZ 'INTEGER' SYNC
- ⓪(DC.L $190000L ACZ 'PROCEDURE ' SYNC
- ⓪(DC.L $180000L ACZ 'BOOLEAN' SYNC
- ⓪(DC.L $110000L ACZ 'WHILE ' SYNC
- ⓪(DC.L $120000L DC.B LeftKey,LeftKey ASC 'END;' DC.B EnterKey,0 SYNC
- ⓪(DC.L $130000L ASC 'REPEAT' DC.B EnterKey ACZ ' ' SYNC
- ⓪8DC.B EnterKey,LeftKey,LeftKey ASC 'UNTIL ;'
- ⓪8DC.B ETXKey, UpKey ACZ 'I' SYNC
- ⓪(DC.L $2E0000L ACZ 'CARDINAL' SYNC
- ⓪(DC.L $2F0000L ACZ 'WriteString (' SYNC
- ⓪(DC.L $310000L ASC 'WriteLn;' DC.B EnterKey, 0 SYNC
- ⓪(DC.L $1E0000L ASC 'ASSEMBLER' DC.B EnterKey,TabRightKey,0 SYNC
- ⓪(DC.L $1F0000L ACZ 'String' SYNC
- ⓪(DC.L $200000L ASC 'DO' DC.B EnterKey ASC ' '
- ⓪8DC.B EnterKey,LeftKey,LeftKey ASC 'END;'
- ⓪8DC.B ETXKey, UpKey ACZ 'I' SYNC
- ⓪(DC.L $210000L ACZ 'FOR ' SYNC
- ⓪(DC.L $260000L ACZ 'LONGCARD' SYNC
- ⓪(DC.L $250000L ACZ 'LONGINT' SYNC
- ⓪(DC.L $2C0000L ACZ 'ADDRESS' SYNC
- ⓪(DC.L $160000L ACZ 'UNTIL ' SYNC
- ⓪(DC.L $140000L ASC 'THEN' DC.B EnterKey ASC ' '
- ⓪8DC.B EnterKey,LeftKey,LeftKey ASC 'END;'
- ⓪8DC.B ETXKey, UpKey ACZ 'I' SYNC
- ⓪(DC.L $150000L ACZ 'FROM SYSTEM IMPORT ' SYNC
- ⓪(DC.L $220000L ASC 'FROM InOut IMPORT Write, WriteLn, WriteString, WriteInt, WriteCard;'
- ⓪8DC.B EnterKey, 0 SYNC
- ⓪(DC.L 0
- ⓪ END
- ⓪ END GetKeyD0;
- ⓪
- ⓪ PROCEDURE ClrKBDbuffer;
- ⓪"BEGIN
- ⓪$WHILE KeyPressed () DO GetKeyD0; ShortKeyPtr := NIL END
- ⓪"END ClrKBDbuffer;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ChrIn; (* d0=Zeichen von Tastatur *)
- ⓪ BEGIN (* ohne Echo *)
- ⓪ ASSEMBLER
- ⓪(clr accept
- ⓪(clr abort
- ⓪ liest jsr GetKeyD0
- ⓪(cmpi #ToggleTabKey,d0
- ⓪(bne ct10
- ⓪(moveq #0,d3
- ⓪(move.b ptrX,d3
- ⓪(move d3,d1
- ⓪(lsr #3,d1
- ⓪(lea tabs,A0
- ⓪(bchg d3,0(a0,d1.w)
- ⓪(bne decr
- ⓪(addq #1,nrOfTabs
- ⓪(bra tabcmd
- ⓪ decr subq #1,nrOfTabs
- ⓪ tabcmd tst tabMode
- ⓪(beq ctende ;liest
- ⓪(clr cmdFlag
- ⓪(;bra liest
- ⓪(bra ctende
- ⓪ ct10 cmpi #ESCkey,d0
- ⓪(bne ct11
- ⓪(move #1,abort
- ⓪(bra ctende
- ⓪ ct11 cmpi #ETXkey,d0
- ⓪(bne ctende
- ⓪(move #1,accept
- ⓪(;bra ctende
- ⓪ ctende
- ⓪ END
- ⓪ END ChrIn;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ReadCh; (* ch:=Zeichen vom KBD *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(jsr ChrIn
- ⓪(move.b d0,ch
- ⓪ END
- ⓪ END ReadCh;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ErrorWait;
- ⓪ BEGIN
- ⓪"ClrKBDbuffer;
- ⓪"GetKeyD0
- ⓪ END ErrorWait;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE SuccessFull(id: CARDINAL):BOOLEAN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(tst IOResult
- ⓪(bpl NoErr
- ⓪(movem.l d0-d6/a0/A1/A2,-(a7)
- ⓪(move IOResult,-(a7)
- ⓪(moveq #CRchar,d0
- ⓪(jsr ChrOut
- ⓪(moveq #ClrEOLNchar,d0
- ⓪(jsr ChrOut
- ⓪(moveq #0,d0
- ⓪(move -(a3),d0
- ⓪ (*
- ⓪(move.l d0,(a3)+
- ⓪(lea ErrorType,a0
- ⓪(move.b 0(a0,d0.w),d0
- ⓪(jsr ChrOut
- ⓪(jsr WriteLCard
- ⓪(moveq #':',d0
- ⓪(jsr ChrOut
- ⓪ *)
- ⓪(move (a7),(a3)+
- ⓪(jsr PrintError
- ⓪(jsr Bell
- ⓪(jsr ErrorWait
- ⓪(move (a7)+,IOResult
- ⓪(movem.l (a7)+,d0-d6/a0/A1/A2
- ⓪(clr (a3)+
- ⓪(rts
- ⓪ NoErr move #1,-2(a3)
- ⓪ END
- ⓪ END SuccessFull;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Flip(VAR s1,s2:STRING);
- ⓪ BEGIN (* vertauscht s1 mit s2 *)
- ⓪ ASSEMBLER
- ⓪(move.l -(a3),a0
- ⓪(move.l -(a3),A1
- ⓪(moveq #40,d1
- ⓪ Flipx move (a0),d0
- ⓪(move (A1),(a0)+
- ⓪(move d0,(A1)+
- ⓪(dbf d1,Flipx
- ⓪ END
- ⓪ END Flip;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE ReadString(VAR str: string); (* mit Umcodierung *)
- ⓪"VAR line:STRING; (* bei ESC bleibt str erhalten *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪*moveq #0,d1
- ⓪ readstrw jsr ChrIn
- ⓪*tst abort
- ⓪*bne readabrt
- ⓪*cmpi.b #' ',d0
- ⓪*bcs readctrl
- ⓪ readnorm move.b ptrX,d2
- ⓪*cmp.b maxColM1,d2
- ⓪*bhi readerr
- ⓪*move.b d0,line(A6,d1.w)
- ⓪*addq #1,d1
- ⓪*jsr ChrOut
- ⓪*bra readstrw
- ⓪ readctrl cmpi #EnterKey,d0
- ⓪*beq readcr
- ⓪*cmpi #leftKey,d0
- ⓪*beq readleft
- ⓪*cmpi #bsKey,d0
- ⓪*beq readleft
- ⓪*cmpi #delKey,d0
- ⓪*beq readleft
- ⓪ readerr bra readstrw
- ⓪ readleft tst d1
- ⓪*ble readerr
- ⓪*subq #1,d1
- ⓪*moveq #BSChar,d0
- ⓪*jsr ChrOut
- ⓪*bra readstrw
- ⓪ readcr clr.b line(A6,d1.w) END; Flip(str,line); ASSEMBLER
- ⓪ !readabrt jsr WriteLn
- ⓪ END
- ⓪ END ReadString;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Worthy: BOOLEAN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #1,d1
- ⓪(move.l ptrEnd,d0
- ⓪(sub.l ptrStart,d0
- ⓪(cmpi.l #4,d0
- ⓪(bhi itisw
- ⓪(moveq #0,d1
- ⓪ itisw move d1,(a3)+
- ⓪ END
- ⓪ END Worthy;
- ⓪
- ⓪ PROCEDURE NormTab;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(DC.B $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
- ⓪(DC.B $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F
- ⓪(DC.B $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F
- ⓪(DC.B $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F
- ⓪(DC.B $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F
- ⓪(DC.B $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F
- ⓪(DC.B $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F
- ⓪(DC.B $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F
- ⓪(DC.B $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F
- ⓪(DC.B $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F
- ⓪(DC.B $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF
- ⓪(DC.B $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF
- ⓪(DC.B $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF
- ⓪(DC.B $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF
- ⓪(DC.B $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF
- ⓪(DC.B $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF
- ⓪$END
- ⓪"END NormTab;
- ⓪
- ⓪ PROCEDURE AlphaNumTab;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0
- ⓪(DC.B 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪$END
- ⓪"END AlphaNumTab;
- ⓪
- ⓪ PROCEDURE ShiftTab;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(DC.B $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
- ⓪(DC.B $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F
- ⓪(DC.B ' ','!','"','#','$','%','&',$27,'(',')','*','+',',','-','.','/'
- ⓪(DC.B '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?'
- ⓪(DC.B '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'
- ⓪(DC.B 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_'
- ⓪(DC.B '`','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'
- ⓪(DC.B 'P','Q','R','S','T','U','V','W','X','Y','Z','{','|','}','~',''
- ⓪(DC.B 'Ç','Ü','É','A','Ä','À','Å','Ç','E','E','E','I','I','I','Ä','Å'
- ⓪(DC.B 'É','Æ','Æ','O','Ö','O','U','U','ÿ','Ö','Ü','¢','£','¥','ß','ƒ'
- ⓪(DC.B 'A','I','O','U','Ñ','Ñ','ª','º','¿','⌐','¬','½','¼','¡','«','»'
- ⓪(DC.B 'Ã','Õ','Ø','Ø','Œ','Œ','À','Ã','Õ','¨','´','†','¶','©','®','™'
- ⓪(DC.B 'IJ','IJ','א','ב','ג','ד','ה','ו','ז','ח','ט','י','כ','ל','מ','נ'
- ⓪(DC.B 'ס','ע','פ','צ','ק','ר','ש','ת','ן','ך','ם','ף','ץ','§','∧','∞'
- ⓪(DC.B 'α','β','Γ','π','Σ','σ','µ','τ','Φ','Θ','Ω','δ','∮','ϕ','∈','∩'
- ⓪(DC.B '≡','±','≥','≤','⌠','⌡','÷','≈','°','∙','·','√','ⁿ','²','³','¯'
- ⓪(;und gleich darauf noch die Lower-Table
- ⓪(DC.B $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
- ⓪(DC.B $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F
- ⓪(DC.B ' ','!','"','#','$','%','&',$27,'(',')','*','+',',','-','.','/'
- ⓪(DC.B '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?'
- ⓪(DC.B '@','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'
- ⓪(DC.B 'p','q','r','s','t','u','v','w','x','y','z','[','\',']','^','_'
- ⓪(DC.B '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'
- ⓪(DC.B 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~',''
- ⓪(DC.B 'ç','ü','é','â','ä','à','å','ç','ê','ë','è','ï','î','ì','ä','å'
- ⓪(DC.B 'é','æ','æ','ô','ö','ò','û','ù','ÿ','Ö','ü','¢','£','¥','ß','ƒ'
- ⓪(DC.B 'á','í','ó','ú','ñ','ñ','ª','º','¿','⌐','¬','½','¼','¡','«','»'
- ⓪(DC.B 'ã','õ','ø','ø','œ','œ','à','ã','õ','¨','´','†','¶','©','®','™'
- ⓪(DC.B 'ij','ij','א','ב','ג','ד','ה','ו','ז','ח','ט','י','כ','ל','מ','נ'
- ⓪(DC.B 'ס','ע','פ','צ','ק','ר','ש','ת','ן','ך','ם','ף','ץ','§','∧','∞'
- ⓪(DC.B 'α','β','Γ','π','Σ','σ','µ','τ','Φ','Θ','Ω','δ','∮','ϕ','∈','∩'
- ⓪(DC.B '≡','±','≥','≤','⌠','⌡','÷','≈','°','∙','·','√','ⁿ','²','³','¯'
- ⓪$END
- ⓪"END ShiftTab;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ShiftUp; (* kleine Buchstaben => große *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;operiert auf d0
- ⓪(cmpi.b #'a',d0
- ⓪(bcs shftrts
- ⓪(cmpi.b #'z',d0
- ⓪(bls shiftit
- ⓪(cmpi.b #132,d0
- ⓪(beq ae
- ⓪(cmpi.b #148,d0
- ⓪(beq oe
- ⓪(cmpi.b #129,d0
- ⓪(bne shftrts
- ⓪(moveq #154,d0
- ⓪(rts
- ⓪ ae moveq #142,d0
- ⓪(rts
- ⓪ oe moveq #153,d0
- ⓪(rts
- ⓪ shiftit eori.b #$20,d0
- ⓪ shftrts
- ⓪ END
- ⓪ END ShiftUp;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE AlphaNum; (* Test, ob d0 ein alphanum. Zeichen enth. *)
- ⓪ BEGIN (* Ergebnis im Z-Flag:1=alphanum *)
- ⓪ ASSEMBLER
- ⓪)ANDI #255,D0
- ⓪)MOVE.L A0,-(A7)
- ⓪)LEA AlphaNumTab,A0
- ⓪)TST.B 0(A0,D0.W)
- ⓪)MOVE.L (A7)+,A0
- ⓪ END
- ⓪ END AlphaNum;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ClearTabs;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(lea tabs,a0
- ⓪(moveq #0,d0
- ⓪(move.b maxCol,d0
- ⓪(addq #1,d0
- ⓪(asr #3,d0
- ⓪(subq #1,d0
- ⓪ cllp clr.b (a0)+ ;tabs löschen
- ⓪(dbf d0,cllp
- ⓪$END
- ⓪"END ClearTabs;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE StandardTabs (n: CARDINAL);
- ⓪"TYPE ByteSet = SET OF [0..7];
- ⓪"VAR p: POINTER TO ARRAY [0..80] OF ByteSet; i: CARDINAL;
- ⓪"BEGIN (* alle n Zeichen ein Tab *)
- ⓪$ClearTabs;
- ⓪$i:= 0;
- ⓪$p:= ADR (tabs);
- ⓪$nrOfTabs:= 0;
- ⓪$WHILE i < cols DO
- ⓪&INCL (p^[i DIV 8], i MOD 8);
- ⓪&INC (nrOfTabs);
- ⓪&INC (i, n)
- ⓪$END;
- ⓪"(*
- ⓪'ASSEMBLER ;benutzt d0,a0
- ⓪/moveq #0,d0
- ⓪/move.b maxCol,d0
- ⓪/addq #1,d0
- ⓪/asr #3,d0
- ⓪/move d0,nrOfTabs
- ⓪/lea tabs,a0
- ⓪/subq #1,d0
- ⓪'tblp move.b #$01,(a0)+
- ⓪/dbf d0,tblp
- ⓪'END
- ⓪"*)
- ⓪"END StandardTabs;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE CountTabs;
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0,a0
- ⓪(moveq #0,d2
- ⓪(move.b maxCol,d2
- ⓪(move d2,d1
- ⓪(addq #1,d2
- ⓪(asr #3,d2
- ⓪(lea tabs,a0
- ⓪(subq #1,d2
- ⓪ tblp move.b (a0)+,d0
- ⓪(moveq #7,d3
- ⓪ tbcnt btst #0,d0
- ⓪(beq notset
- ⓪(addq #1,d1
- ⓪ notset lsr #1,d0
- ⓪(dbf d3,tbcnt
- ⓪(dbf d2,tblp
- ⓪(move d1,nrOfTabs
- ⓪ END
- ⓪ END CountTabs;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE GetTabs(tabString:String);
- ⓪"VAR step, i, n: CARDINAL;
- ⓪"BEGIN (* tabString umwandeln, 'T'=Tabulator, '.'=keiner *)
- ⓪$i:= 0;
- ⓪$n:= StrToCard (tabString, i, strok);
- ⓪$IF (n > 0) AND (n<80) THEN
- ⓪&StandardTabs (n)
- ⓪$ELSE
- ⓪&ASSEMBLER
- ⓪(JSR ClearTabs
- ⓪(lea tabString(A6),A0
- ⓪(moveq #0,d0
- ⓪(moveq #0,d1 ;d1=nrOfTabs
- ⓪(lea tabs,A1
- ⓪(moveq #0,d3 ;d3=Bit-Index
- ⓪(tst.b (a0)
- ⓪(bne gtloop
- ⓪(move #8,(A3)+
- ⓪(jsr StandardTabs
- ⓪(bra getex
- ⓪ gtloop move.b (a0)+,d0
- ⓪(beq gete2
- ⓪(jsr ShiftUp
- ⓪(move d3,d4
- ⓪(lsr #3,d4
- ⓪(bclr d3,0(A1,d4.w)
- ⓪(cmpi.b #'T',d0
- ⓪(bne gtstor
- ⓪(bset d3,0(A1,d4.w)
- ⓪(addq #1,d1
- ⓪ gtstor addq #1,d3
- ⓪(bra gtloop
- ⓪ gete2 move d1,nrOfTabs
- ⓪ getex
- ⓪&END
- ⓪$END
- ⓪"END GetTabs;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE TabSet: BOOLEAN; (* true, wenn an aktueller *)
- ⓪ BEGIN (* Cursorposition ein Tab steht *)
- ⓪ ASSEMBLER ;benutzt d0,d1,d2,A2
- ⓪(tst nrOfTabs
- ⓪(beq tabf
- ⓪(moveq #0,d1
- ⓪(move.b ptrX,d1
- ⓪(cmp.b maxColM1,d1
- ⓪(bgt tabf
- ⓪(move forceTab,d0
- ⓪(lea tabs,A2
- ⓪(move d1,d2
- ⓪(lsr #3,d2
- ⓪(btst d1,0(A2,d2.w)
- ⓪(beq notab
- ⓪ tabf moveq #1,d0
- ⓪ notab move d0,(a3)+
- ⓪ END
- ⓪ END TabSet;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE TabsToStr():String;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(lea tabs,a0
- ⓪(move.l a3,A1
- ⓪(lea 82(A3),A3
- ⓪(moveq #0,d0
- ⓪(move.b maxCol,d0
- ⓪(addq #1,d0
- ⓪(asr #3,d0
- ⓪(subq #1,d0
- ⓪ lp1 moveq #7,d1
- ⓪(move.b (a0)+,d2
- ⓪ lp2 moveq #'.',d3
- ⓪(lsr.b #1,d2
- ⓪(bcc push
- ⓪(moveq #'T',d3
- ⓪ push move.b d3,(A1)+
- ⓪(dbf d1,lp2
- ⓪(dbf d0,lp1
- ⓪(clr.b (A1)+
- ⓪ END
- ⓪ END TabsToStr;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Yes: BOOLEAN; (* true, falls y,Y,j,J eingegeben *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(jsr ErrorWait
- ⓪(jsr ShiftUp
- ⓪(moveq #1,d1
- ⓪(cmpi #'J',d0
- ⓪(beq jaret
- ⓪(cmpi #'Y',d0
- ⓪(beq jaret
- ⓪(moveq #0,d1
- ⓪ jaret move d1,(a3)+
- ⓪ END
- ⓪ END Yes;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DirKey: BOOLEAN; (* wertet Tasten zur Richtungs- *)
- ⓪ BEGIN (* umschaltung aus *)
- ⓪ ASSEMBLER ;benutzt d0,d1,d2
- ⓪(moveq #0,d0
- ⓪(move.b ch,d0
- ⓪(move direction,d1
- ⓪(moveq #0,d2
- ⓪(cmpi.b #'<',d0
- ⓪(beq dleft
- ⓪(cmpi.b #',',d0
- ⓪(beq dleft
- ⓪(cmpi.b #'-',d0 ; '<' ',' '-' fⁿr links
- ⓪(beq dleft
- ⓪(cmpi.b #'>',d0
- ⓪(beq dright
- ⓪(cmpi.b #'.',d0
- ⓪(beq dright
- ⓪(cmpi.b #'+',d0 ; '>' '.' '+' fⁿr rechts
- ⓪(bne dexit
- ⓪ dright tst d1
- ⓪(beq dexit
- ⓪(clr d1
- ⓪(bra dstore
- ⓪ dleft tst d1
- ⓪(bne dexit
- ⓪(moveq #1,d1
- ⓪ dstore move d1,direction
- ⓪(clr cmdFlag
- ⓪(moveq #1,d2
- ⓪ dexit move d2,(a3)+
- ⓪ END
- ⓪ END DirKey;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ReadUpCh; (* liest einen Gro∞buchstaben vom KBD *)
- ⓪ BEGIN
- ⓪"ASSEMBLER jsr ChrIn jsr ShiftUp move.b d0,ch END
- ⓪ END ReadUpCh;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Rptfx10:BOOLEAN; (* berechnet Repeatfactor (rptf) *)
- ⓪ BEGIN (* d2 enthΣlt 1, wenn Zahl gefunden *)
- ⓪ ASSEMBLER ;benutzt d0,d1,d2,d3
- ⓪(moveq #0,d2
- ⓪(moveq #0,d3
- ⓪(move.b ch,d3
- ⓪(subi.b #'0',d3 ;Low-Bound abziehen
- ⓪(bcs rptfex
- ⓪(cmpi.b #9,d3 ;>9?
- ⓪(bhi rptfex
- ⓪(move.l rptf,d0 ;alten Repeatfactor mal 10 nehmen
- ⓪(move.l d0,d1
- ⓪(asl.l #2,d1
- ⓪(add.l d1,d0
- ⓪(asl.l #1,d0
- ⓪(add.l d3,d0 ;neue Ziffer addieren
- ⓪(move.l d0,rptf
- ⓪(moveq #1,d2 ;d2=1 => es wurde eine Zahl gefunden
- ⓪ rptfex move d2,(a3)+
- ⓪ END
- ⓪ END Rptfx10;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE RptfOK; (* gültiger Repeatfactor ? *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0
- ⓪(move.l rptf,d0
- ⓪(bne ok
- ⓪(moveq #1,d0 ;Default=1
- ⓪ ok move.l d0,rptf
- ⓪ END
- ⓪ END RptfOK;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Negate(VAR bool:BOOLEAN);
- ⓪ BEGIN (* bool:=NOT bool *)
- ⓪ ASSEMBLER move.l -(a3),a0 EORI #1,(a0) END
- ⓪ END Negate;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Prepare;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪&(*
- ⓪(pea printLine
- ⓪(;### move.l (a7),(a3)+
- ⓪(;### jsr GetTime
- ⓪(move.l (a7)+,a0
- ⓪(moveq #0,d0
- ⓪(move (a0)+,d0
- ⓪(mulu #60,d0
- ⓪(add (a0)+,d0
- ⓪(mulu #15,d0
- ⓪(asl.l #2,d0
- ⓪(moveq #0,d1
- ⓪(move (a0)+,d1
- ⓪(add.l d1,d0
- ⓪&*) nop
- ⓪ END
- ⓪ END Prepare;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Finish;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪&(*
- ⓪(jsr Prepare
- ⓪(move.l d0,d1
- ⓪(sub.l startupTime,d0
- ⓪(bpl ok
- ⓪(add.l #$15180,d0
- ⓪ ok move.l d1,startupTime
- ⓪(add.l d0,total
- ⓪(add.l d0,keepTime
- ⓪&*) nop
- ⓪ END
- ⓪ END Finish;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ResetTextOptions;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(clr cmdFlag
- ⓪(moveq #16-1+43-1,d0
- ⓪(lea ptrStack,a0
- ⓪%lp clr.l (a0)+ ;löscht auch tags
- ⓪(dbf d0,lp
- ⓪(move.l ptr,lastptr
- ⓪(clr ptrCount
- ⓪(clr fileD
- ⓪(clr fileT
- ⓪(clr restoreFileDT
- ⓪(clr direction
- ⓪(clr findSame
- ⓪(clr findWord
- ⓪(clr findCase
- ⓪(clr infinite
- ⓪(clr verify
- ⓪(clr.l rptf
- ⓪(move #1,saved
- ⓪(clr autoBack
- ⓪(clr autoIncVer
- ⓪(move #1,makeDLE
- ⓪(clr leaveDLEonWrite
- ⓪(clr saveinfo
- ⓪(move #8,(A3)+
- ⓪(jsr StandardTabs
- ⓪$END
- ⓪"END ResetTextOptions;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GoToPtr; (* positioniert Cursor auf gespeicherte yx *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move yx,d1
- ⓪(jmp GotoXYd1
- ⓪ END
- ⓪ END GoToPtr;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Home; (* Cursor nach links oben, Statuszeile l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr d1
- ⓪(jsr GotoXYd1
- ⓪(moveq #ClrEOLNchar,d0
- ⓪(jmp ChrOut
- ⓪ END
- ⓪ END Home;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ClrCmdLine; (* Cursorposition retten, dann Home *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr cmdFlag
- ⓪(move ptrY,d0
- ⓪(move.b ptrX,d0
- ⓪(move d0,yx
- ⓪(jmp Home
- ⓪ END
- ⓪ END ClrCmdLine;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE LineOut; (* eine Zeile aus Speicher auf Bildschirm bringen *)
- ⓪ BEGIN (* dabei auf Cursorposition achten *)
- ⓪"ASSEMBLER ;benutzt d0,d2,d3,d4,d5,d6,a0,A1,A2
- ⓪,moveq #0,d3 ;ZΣhler fⁿr PrintLine / highword=x-pos
- ⓪,lea printLine,A2
- ⓪,moveq #0,d5
- ⓪,tst insflag
- ⓪,beq.l LineOut1
- ⓪,move.b ptrX,d5
- ⓪,bra.l LineOut1
- ⓪"
- ⓪"lget tst insFlag
- ⓪,bne lgetnz ;bei Insert den Cursor nicht verΣndern
- ⓪,cmpa.l ptr,a0
- ⓪,bne lgetnz
- ⓪,move ptrY,d0
- ⓪,move.b d5,d0
- ⓪,move d0,yx
- ⓪"lgetnz moveq #0,d0
- ⓪,move.b (a0)+,d0
- ⓪,bne lendrts
- ⓪,tst.b (a0)
- ⓪,beq lendkorr
- ⓪,subq.l #1,a0
- ⓪,
- ⓪"lendkorr move.b d3,ptrX
- ⓪
- ⓪,; move.b #ClrEOLNchar,0(A2,d3.w)
- ⓪,; addq.b #1,d3
- ⓪,movem.l d1/a0,-(a7)
- ⓪,jsr BufferDisp ;Ausgabe von PrintLine
- ⓪,jsr ClearEndOfLine
- ⓪,movem.l (a7)+,d1/a0
- ⓪,addq.l #4,a7 ;verlasse LineOut
- ⓪"
- ⓪"lendrts rts
- ⓪"
- ⓪"lput cmpi.b #CRchar,d0
- ⓪,beq lendkorr
- ⓪,tst delFlag
- ⓪,beq lput1
- ⓪,cmpa.l delPtr,a0
- ⓪,bhi lput1
- ⓪,cmpa.l ptr,a0
- ⓪,bls lput1
- ⓪,moveq #' ',d0
- ⓪"lput1 cmp.b maxCol,d5
- ⓪,bgt lputbad
- ⓪,move.b d0,0(A2,d3.w)
- ⓪,addq.b #1,d3
- ⓪,cmpi.b #$20,d0
- ⓪,bcs lputrts
- ⓪"lputinc addq.b #1,d5
- ⓪"lputrts rts
- ⓪"lputbad move.b #'!',-1(A2,d3.w)
- ⓪,rts
- ⓪"
- ⓪"ldlecode bsr lget
- ⓪,move.b d0,d4
- ⓪,moveq #' ',d0
- ⓪,sub.b d0,d4
- ⓪,ble LineOut1
- ⓪"lspc bsr lput
- ⓪,subq.b #1,d4
- ⓪,bne lspc
- ⓪,
- ⓪"LineOut1 bsr lget
- ⓪,cmpi.b #DLEchar,d0
- ⓪,beq ldlecode
- ⓪,bsr lput
- ⓪,bra LineOut1
- ⓪"END
- ⓪ END LineOut;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE LineSt; (* positioniert a0 auf Zeilenanfang im Speicher *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d3,a0
- ⓪ linecr1 move.b -(a0),d3
- ⓪*beq lineret1
- ⓪*cmpi.b #CRchar,d3
- ⓪*bne linecr1
- ⓪ lineret1 addq.l #1,a0
- ⓪ END
- ⓪ END LineSt;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE LastCR; (* positioniert a0 auf vorhergehendes CR *)
- ⓪((* liefert NE, wenn End of text *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ LastCR1 tst.b -1(a0)
- ⓪*beq lastret1
- ⓪*cmpi.b #CRchar,-(a0)
- ⓪*bne LastCR1
- ⓪*rts
- ⓪ lastret1 cmpi.b #1,-1(a0) ; ergibt immer NE
- ⓪ END
- ⓪ END LastCR;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE NextCR; (* positioniert a0 auf nächstes CR+1 *)
- ⓪((* liefert NE, wenn End of text *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ luup cmpa.l ptrEnd,A0
- ⓪+bcc error2
- ⓪+tst.b (a0)
- ⓪+beq error2
- ⓪+cmpi.b #CRchar,(a0)+
- ⓪+bne luup
- ⓪+rts
- ⓪ error2 move.l ptrEnd,a0
- ⓪+subq.l #2,a0
- ⓪ error cmpa.l a7,a0 ; liefert NE
- ⓪ END
- ⓪ END NextCR;
- ⓪
- ⓪
- ⓪ VAR lineNo: LONGCARD;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE CountCR: LONGCARD; (* zählt Zeilen=CR's *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0,d1,d2,a0
- ⓪(clr.l lineNo
- ⓪(move.l ptrStart,a0
- ⓪(move.l ptr,A1
- ⓪(moveq #1,d0
- ⓪(moveq #CRchar,d2
- ⓪ lbl cmpa.l a0,A1
- ⓪(bne lbl2
- ⓪(move.l d0,lineNo
- ⓪ lbl2 move.b (a0)+,d3
- ⓪(beq cntend
- ⓪(cmp.b d2,d3
- ⓪(bne lbl
- ⓪(addq.l #1,d0
- ⓪(bra lbl
- ⓪ cntend move.l d0,(a3)+
- ⓪ END
- ⓪ END CountCR;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE conc((*$? CompilerVersion > 3: REF*) a,b:Strings.String): Strings.String;
- ⓪"VAR s: Strings.String;
- ⓪"BEGIN
- ⓪$Concat (a,b,s,strok);
- ⓪$RETURN s
- ⓪"END conc;
- ⓪
- ⓪ FORWARD PutCmd(REF k: ARRAY OF CHAR); (* String in Statuszeile drucken *)
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Info; (* durch '?' ausgelöst *)
- ⓪ BEGIN
- ⓪"PutCmd(
- ⓪"conc(conc(conc(conc('used:', CardToStr(ptrEnd-ptrStart-4L,6)),
- ⓪1conc(' bytes; free:', CardToStr(bufferH-ptrEnd,7))),
- ⓪,conc(conc(' bytes;', CardToStr(filesInMem,2)),
- ⓪1conc(' frames;', CardToStr(CountCR(),5)))),
- ⓪,conc(' lines; cursor:', CardToStr(lineNo,5))));
- ⓪"ErrorWait
- ⓪ END Info;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE FindCursor; (* bringt Cursor in richtige x-Position *)
- ⓪ BEGIN (* d1 mu∞ yx-Koordinaten enthalten *)
- ⓪ ASSEMBLER (* a0 mu∞ auf Zeilenanfang zeigen *)
- ⓪(moveq #0,d3
- ⓪(move.b (a0),d4
- ⓪(beq ma1z
- ⓪(cmpi.b #DLEchar,d4
- ⓪(bne fc1
- ⓪(addq.l #1,a0
- ⓪(move.b (a0)+,d3
- ⓪(subi.b #DLEoffset,d3 ;d3=Space-Count
- ⓪ fc1 cmp.b d3,d1
- ⓪(bls ma0z
- ⓪(move.b (a0),d4
- ⓪(beq ma1z
- ⓪(cmpi.b #CRchar,d4
- ⓪(beq ma0z
- ⓪(addq.l #1,a0
- ⓪(cmpi.b #$20,d4
- ⓪(bcs fc1
- ⓪(addq.b #1,d3
- ⓪(bra fc1
- ⓪ ma1z subq.l #1,a0
- ⓪(cmpi.b #dlechar,-1(a0)
- ⓪(bne ma0z
- ⓪(subq.l #1,a0
- ⓪ ma0z move.l a0,ptr
- ⓪(move.b d3,d1
- ⓪(jmp GotoXYd1
- ⓪ END
- ⓪ END FindCursor;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ScreenOut; (* Bildschirm neu schreiben *)
- ⓪ BEGIN (* am Textende letzte Zeile in die letzte *)
- ⓪ ASSEMBLER (* Bildschirmzeile drucken *)
- ⓪(move #1,screenOK
- ⓪(move.l ptr,a0
- ⓪(cmpi.b #DLEchar,(a0)
- ⓪(bne nodle
- ⓪(addq.l #1,a0
- ⓪ nodle cmpi.b #DLEchar,-1(a0)
- ⓪(bne nodleo
- ⓪(addq.l #1,a0
- ⓪ nodleo move.l a0,ptr
- ⓪(move.l a0,scrPtr
- ⓪(move ptrLine,d1
- ⓪ pcr cmp maxLine,d1 ;bis in letzte Bildschirmzeile vorpirschen
- ⓪(bge zcr
- ⓪(jsr NextCR
- ⓪(addq #1,d1
- ⓪(bra pcr
- ⓪ zcr subq #1,d1
- ⓪(beq korr
- ⓪(jsr LastCR ;wieder zurück, damit Bildschirm immer voll
- ⓪(bra zcr
- ⓪ korr jsr LineSt
- ⓪(move #$174F,yx
- ⓪(jsr GotoXYd1 ; D1 ist 0!
- ⓪(move maxLine,d1
- ⓪ scrn1 jsr WriteLn
- ⓪(jsr LineOut
- ⓪(subq #1,d1
- ⓪(bne scrn1
- ⓪(moveq #0,d0
- ⓪(move.b yx,d0
- ⓪(move d0,ptrLine
- ⓪(jmp GoToPtr
- ⓪ END
- ⓪ END ScreenOut;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE CenterScreen; (* Bildschirm schreiben, Cursor in Mitte *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move maxLine,d0
- ⓪(ASR #1,d0
- ⓪(move d0,ptrLine
- ⓪(jmp ScreenOut
- ⓪ END
- ⓪ END CenterScreen;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE jumpPtr (p: ADDRESS);
- ⓪"BEGIN
- ⓪$IF (ptrStart<p) & (p<ptrEnd) THEN
- ⓪&scrPtr:= ptr;
- ⓪&ptr:= p;
- ⓪$END;
- ⓪$CenterScreen
- ⓪"END jumpPtr;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE CondScreen(p:PROC); (* nur wenn Text verändert wurde *)
- ⓪ BEGIN (* p=ScreenOut oder CenterScreen *)
- ⓪ ASSEMBLER
- ⓪(move.l -(a3),A1
- ⓪(tst screenOK
- ⓪(beq doit
- ⓪(move.l ptr,a0
- ⓪(cmpi.b #DLEchar,(a0)
- ⓪(bne nodle
- ⓪(addq.l #2,a0
- ⓪(move.l a0,ptr
- ⓪ nodle cmpa.l scrPtr,a0
- ⓪(beq finis
- ⓪ doit jmp (A1)
- ⓪ finis moveq #0,d0
- ⓪(move.b ptrY,d0
- ⓪(move d0,ptrLine
- ⓪ END
- ⓪ END CondScreen;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ChkLastPtr; (* zeigt lastPtr ausserhalb des Textes ? *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt a0,A1
- ⓪(move.l lastPtr,a0
- ⓪(move.l ptr,A1
- ⓪(cmpa.l ptrStart,a0
- ⓪(bcs doit
- ⓪(cmpa.l ptrEnd,a0
- ⓪(bhi doit
- ⓪(move.l a0,A1
- ⓪ doit move.l A1,lastPtr
- ⓪ END
- ⓪ END ChkLastPtr;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE PushPtr;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(move ptrCount,d0
- ⓪(lea ptrStack,A1
- ⓪(move d0,d1
- ⓪(subq #4,d1
- ⓪(andi #$3C,d1
- ⓪(move.l a0,d2
- ⓪(sub.l 0(A1,d1.w),d2
- ⓪(bge noneg
- ⓪(neg.l d2
- ⓪ noneg cmpi.l #8,d2
- ⓪(bcs nopush ;nicht pushen, wenn gleich dem Letzten+-8
- ⓪(move.l a0,0(A1,d0.w)
- ⓪(addq #4,d0
- ⓪(andi #$3C,d0
- ⓪ nopush move d0,ptrCount
- ⓪ END
- ⓪ END PushPtr;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ChkZap: CARDINAL; (* fⁿr Zap. Prⁿft, ob mehr als 200 *)
- ⓪ BEGIN (* Zeichen gel÷scht werden, und ob *)
- ⓪ ASSEMBLER ;benutzt d0,d1,d3,a0 (* Buffer ausreicht *)
- ⓪(move.l ptr,a0
- ⓪(move.l lastPtr,d0
- ⓪(move.l d0,delPtr
- ⓪(cmp.l a0,d0
- ⓪(bhi zap1
- ⓪(exg d0,a0
- ⓪(move.l d0,delPtr
- ⓪(move.l a0,ptr
- ⓪ zap1 sub.l a0,d0
- ⓪(move.l bufferH,d1
- ⓪(sub.l ptrEnd,d1
- ⓪(moveq #2,d3
- ⓪(cmp.l d1,d0
- ⓪(bhi zap3
- ⓪(subq #1,d3
- ⓪(cmp.l #200,d0
- ⓪(bhi zap3
- ⓪(subq #1,d3
- ⓪ zap3 move d3,(a3)+
- ⓪ END
- ⓪ END ChkZap;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE PutDir;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #'>',d0
- ⓪(tst direction
- ⓪(beq pcdir
- ⓪(moveq #'<',d0
- ⓪ pcdir jmp ChrOut
- ⓪ END
- ⓪ END PutDir;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE PutFrm;
- ⓪ BEGIN
- ⓪"WriteLCard (filesInMem);
- ⓪"Write (' ');
- ⓪ END PutFrm;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE PutCmd(REF k: ARRAY OF CHAR); (* String in Statuszeile drucken *)
- ⓪ BEGIN (* ohne Cursorpos. zu verlieren *)
- ⓪ ASSEMBLER
- ⓪(clr cmdFlag
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(move d1,-(a7)
- ⓪(jsr Home
- ⓪(moveq #InverseOnChar,d0
- ⓪(jsr ChrOut
- ⓪(jsr PutDir
- ⓪(TST.W tabmode
- ⓪(BNE noFrm
- ⓪(jsr PutFrm
- ⓪ noFrm jsr WriteString
- ⓪ fillup move cols,d1
- ⓪(cmp CursorX,d1
- ⓪(bls filled
- ⓪(moveq #' ',d0
- ⓪(jsr chrout
- ⓪(bra fillup
- ⓪ filled moveq #InverseOffChar,d0
- ⓪(jsr ChrOut
- ⓪(move (a7)+,d1
- ⓪(jmp GotoXYd1
- ⓪ END
- ⓪ END PutCmd;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE PutCmdOrTab(k: MAXSTR);
- ⓪ BEGIN
- ⓪"IF tabMode THEN
- ⓪$Assign (TabsToStr(), k, strok);
- ⓪$Delete (k,0,1,STROK)
- ⓪"END;
- ⓪"PutCmd(k)
- ⓪ END PutCmdOrTab;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE CmdLineAway (checkMouse: BOOLEAN): BOOLEAN;
- ⓪"(* Statuszeile evtl. erneuern ? *)
- ⓪"VAR c: CARDINAL;
- ⓪&buttons: mButtonSet;
- ⓪&Mousepoint: Point;
- ⓪"BEGIN
- ⓪$IF cmdFlag THEN RETURN
- ⓪&FALSE
- ⓪$ELSE
- ⓪&c:= countDefault;
- ⓪&LOOP
- ⓪(IF KeyPressed () THEN RETURN FALSE END;
- ⓪(GetMouseState(dev,MousePoint, buttons); (*hält Ablauf nicht an *)
- ⓪(IF checkMouse AND (msbut1 IN buttons) THEN RETURN FALSE END;
- ⓪(IF c = 0 THEN RETURN TRUE END;
- ⓪(DEC (c)
- ⓪&END
- ⓪$END;
- ⓪$(*
- ⓪(ASSEMBLER
- ⓪0moveq #0,d0
- ⓪0tst cmdFlag
- ⓪0bne clart
- ⓪0move countDefault,d1
- ⓪(wait move d1,-(a7)
- ⓪0jsr KeyPressed
- ⓪0move (a7)+,d1
- ⓪0moveq #0,d0
- ⓪0tst -(a3)
- ⓪0dbne d1,wait
- ⓪0bne clart
- ⓪0moveq #1,d0
- ⓪(clart move d0,(a3)+
- ⓪(END
- ⓪$*)
- ⓪"END CmdLineAway;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsCmd;
- ⓪ BEGIN
- ⓪"PutCmdOrTab('Insert: /F1/ or /Enter/ accepts, /ESC/ ignores')
- ⓪ END InsCmd;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Overflow;
- ⓪ BEGIN
- ⓪"ASSEMBLER move.l A2,-(a7) END;
- ⓪"PutCmd('Buffer overflow');Bell;ErrorWait;
- ⓪"ASSEMBLER move.l (a7)+,A2 END
- ⓪ END Overflow;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Available(bytes:INTEGER):BOOLEAN;
- ⓪ BEGIN (* Test, ob noch <bytes> Zeichen eingefⁿgt werden k÷nnen *)
- ⓪ ASSEMBLER ;benutzt d1,d2
- ⓪+moveq #0,d2
- ⓪+move -(a3),d1
- ⓪+ext.l d1
- ⓪+add.l bufferH,d1
- ⓪+sub.l bufferL,d1
- ⓪+add.l ptrEnd,d1
- ⓪+cmp.l bufferH,d1
- ⓪+bpl keinplatz
- ⓪+cmp.l bufferL,d1
- ⓪+bpl keinplatz
- ⓪+moveq #1,d2
- ⓪ keinplatz move d2,(a3)+
- ⓪ END
- ⓪ END Available;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE MoveTags(ad:ADDRESS; cnt:LONGINT);
- ⓪ BEGIN (* verschiebt die Tags, nachdem der Text verschoben wurde *)
- ⓪ ASSEMBLER ;benutzt d0,d1,a0,A1,A2
- ⓪(move.l -(a3),d0
- ⓪(move.l -(a3),a0
- ⓪(moveq #58,d1
- ⓪(lea ptrStack,A1 ;tags inbegriffen
- ⓪(tst.l d0
- ⓪(beq adjrts
- ⓪(bpl adjtag
- ⓪(adda.l d0,a0
- ⓪ adjtag move.l (A1)+,A2
- ⓪(cmpa.l A2,a0
- ⓪(bhi noadj
- ⓪(adda.l d0,A2
- ⓪(cmpa.l A2,a0
- ⓪(bls adjt1
- ⓪(move.l #0,A2
- ⓪ adjt1 move.l A2,-4(A1)
- ⓪ noadj dbf d1,adjtag
- ⓪(move.l lastPtr,A2
- ⓪(cmpa.l A2,a0
- ⓪(bhi adjt2
- ⓪(adda.l d0,A2
- ⓪(cmpa.l A2,a0
- ⓪(bls adjt2
- ⓪(move.l a0,A2
- ⓪ adjt2 move.l A2,lastPtr
- ⓪ ;'ptr' darf hier nicht verschoben werden, weil das ggf. schon woanders passiert.
- ⓪ adjrts
- ⓪ END
- ⓪ END MoveTags;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE saveTags;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #58,d1
- ⓪(lea saveStack,A0
- ⓪(lea ptrStack,A1
- ⓪ adjtag move.l (A1)+,(A0)+
- ⓪(dbf d1,adjtag
- ⓪(move.l lastPtr,(A0)+
- ⓪ END
- ⓪ END saveTags;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE restoreTags;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #58,d1
- ⓪(lea saveStack,A0
- ⓪(lea ptrStack,A1
- ⓪ adjtag move.l (A0)+,(A1)+
- ⓪(dbf d1,adjtag
- ⓪(move.l (A0)+,lastPtr
- ⓪ END
- ⓪ END restoreTags;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE MoveText(ad:ADDRESS; displace:LONGINT);
- ⓪ BEGIN (* verschiebt Text im Speicher ab Adresse ad um displace *)
- ⓪ ASSEMBLER ;benutzt d0,d1,a0,A1,A2
- ⓪(move.l -4(a3),d0 ;displace
- ⓪(move.l -8(a3),A1 ;ad ! Parameter bleiben auf Stack !
- ⓪(move.l ptrEnd,a0
- ⓪(tst.l d0
- ⓪(beq movrts
- ⓪(clr saved
- ⓪(clr restoreFileDT
- ⓪(clr screenOK
- ⓪(
- ⓪(lea 0(A1,d0.l),A2
- ⓪(add.l d0,ptrEnd
- ⓪(; A1: source-Start, A2: dest-Start
- ⓪(MOVE.L D2,-(A7)
- ⓪(MOVE.L A1,(A3)+
- ⓪(SUBA.L A1,A0 ;Länge = ptrEnd - start
- ⓪(ADDQ.L #1,A0
- ⓪(MOVE.L A0,(A3)+
- ⓪(MOVE.L A2,(A3)+
- ⓪(JSR Block.Copy
- ⓪(MOVE.L (A7)+,D2
- ⓪ movrts jmp MoveTags
- ⓪ END
- ⓪ END MoveText;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE BufferToText(copyDLE: BOOLEAN);
- ⓪ BEGIN (* kopiert den Buffer-Inhalt an die Textstelle *)
- ⓪ ASSEMBLER
- ⓪*move.l bufferH,d4
- ⓪*sub.l bufferL,d4
- ⓪*bgt bok1
- ⓪*beq bleer1
- ⓪ bleer move.l bufferH,bufferL END;
- ⓪*PutCmd('Buffer bad'); ASSEMBLER
- ⓪*jsr Bell
- ⓪*jsr ErrorWait
- ⓪ bleer1 bra bnix
- ⓪ bok1 clr (a3)+
- ⓪*jsr Available
- ⓪*tst -(a3)
- ⓪*beq bleer
- ⓪*move.l bufferH,d3
- ⓪*sub.l bufferL,d3
- ⓪*ble bnix
- ⓪*move.l d3,-(a7)
- ⓪*move.l ptr,(a3)+
- ⓪*move.l d3,(a3)+
- ⓪*jsr MoveText
- ⓪*move.l ptr,A1
- ⓪*move.l bufferH,a0
- ⓪*move.l (a7)+,d3
- ⓪ rein move.b -(a0),(A1)+
- ⓪*subq.l #1,d3
- ⓪*bgt rein
- ⓪*move.l ptr,a0
- ⓪*move.l A1,ptr
- ⓪*tst -2(a3) ;copyIt? bei Insert keinen DLE kopieren
- ⓪*beq bnix
- ⓪*jsr LineSt
- ⓪*cmpi.b #DLEchar,(a0)
- ⓪*bne bnix
- ⓪*cmpi.b #DLEchar,-2(A1)
- ⓪*bne bnix
- ⓪*move.b 1(a0),-1(A1)
- ⓪ bnix subq.l #2,a3
- ⓪ END
- ⓪ END BufferToText;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelInBuffer; (* bei Delete: falls ESC gedrⁿckt wurde *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d1,a0,A2
- ⓪(move.l ptr,d1
- ⓪(move.l delPtr,a0
- ⓪(cmp.l a0,d1
- ⓪(bcc lolehi
- ⓪(exg a0,d1
- ⓪ lolehi move.l bufferH,A2
- ⓪(cmp.l a0,d1
- ⓪(beq dnixin
- ⓪ abinb move.b (a0)+,-(A2)
- ⓪(cmp.l a0,d1
- ⓪(bhi abinb
- ⓪ dnixin move.l A2,bufferL
- ⓪ END
- ⓪ END DelInBuffer;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE AbInBuffer; (* delPtr-ptr in Buffer, dann l÷schen *)
- ⓪ BEGIN (* egal ob delPtr>ptr oder delPtr<ptr *)
- ⓪ ASSEMBLER ;benutzt d0,a0,A1
- ⓪(jsr DelInBuffer ;in A2 steht noch bufferL
- ⓪(move.l ptr,a0
- ⓪(move.l delPtr,A1
- ⓪(move.l A1,d0
- ⓪(sub.l a0,d0
- ⓪(bmi aib1
- ⓪(exg A1,a0
- ⓪(neg.l d0 ;a0 ist h÷here Adresse
- ⓪ aib1 cmpi.b #DLEchar,-2(a0) ;letzter mitgel÷schter DLE-Code
- ⓪(bne aib2
- ⓪(cmpi.b #DLEchar,-2(A1) ;DLE vor gel. Bereich
- ⓪(bne aib2
- ⓪(move.b -1(a0),-1(A1) ;DLE-Code kopieren
- ⓪ aib2 move.l a0,(a3)+
- ⓪(move.l d0,(a3)+
- ⓪(jmp MoveText
- ⓪ END
- ⓪ END AbInBuffer;
- ⓪
- ⓪ (* ED4.ICL *)
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE IncrementVersion (): Strings.String;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr.b (a3)
- ⓪(lea 80(A3),A3
- ⓪(move.l ptrStart,a0
- ⓪ fndlp move.b (a0)+,d0
- ⓪(beq xit
- ⓪(cmpi.b #'V',d0
- ⓪(beq fndV
- ⓪(cmpi.b #DLEchar,d0
- ⓪(bne fndlp
- ⓪(addq.l #1,a0
- ⓪(bra fndlp
- ⓪ fndV cmpi.b #'#',(a0)+
- ⓪(bne fndlp
- ⓪(move.l a0,A1
- ⓪ fnddig move.b (a0)+,d0
- ⓪(cmpi.b #'0',d0
- ⓪(bcs incr
- ⓪(cmpi.b #'9',d0
- ⓪(bls fnddig
- ⓪ incr subq.l #1,a0
- ⓪(lea -1(a0),A2
- ⓪ incrlp move.b -(a0),d0
- ⓪(cmpa.l a0,A1
- ⓪(bhi wrt
- ⓪(clr saved
- ⓪(clr restoreFileDT
- ⓪(addq.b #1,d0
- ⓪(cmpi.b #'9',d0
- ⓪(bls incrxt
- ⓪(move.b #'0',(a0)
- ⓪(bra incrlp
- ⓪ incrxt move.b d0,(a0)
- ⓪ wrt lea -80(A3),A0
- ⓪(move.b #'V',(a0)+
- ⓪(move.b #'#',(a0)+
- ⓪ wrtlp move.b (A1)+,(a0)+
- ⓪(cmpa.l A1,A2
- ⓪(bcc wrtlp
- ⓪(clr.b (a0)
- ⓪ xit
- ⓪ END
- ⓪ END IncrementVersion;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Exchg(ch:CHAR): BOOLEAN;(* ein Zeichen an Textstelle schreiben *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0,a0
- ⓪(move -(a3),-(a7)
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(beq ins0
- ⓪(cmpi.b #CRchar,d0
- ⓪(bne ok
- ⓪ ins0 moveq #0,d0
- ⓪(move #1,(a3)+
- ⓪(jsr Available
- ⓪(tst -(a3)
- ⓪(beq nonono
- ⓪(move.l ptr,(a3)+
- ⓪(move.l #1,(a3)+
- ⓪(jsr MoveText
- ⓪ ok moveq #1,d0
- ⓪(clr saved
- ⓪(clr restoreFileDT
- ⓪(move.l ptr,a0
- ⓪(move.b (a7),(a0)+
- ⓪(move.l a0,ptr
- ⓪ nonono move d0,(a3)+
- ⓪(addq.l #2,a7
- ⓪ END
- ⓪ END Exchg;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE FillIn(ad:ADDRESS; VAR n:STRING); (* String an ad einspeichern *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0,a0,A1
- ⓪(move.l -(a3),a0
- ⓪(move.l -(a3),A1
- ⓪(move.b (a0)+,d0
- ⓪(beq nofill
- ⓪ lbl move.b d0,(A1)+
- ⓪(move.b (a0)+,d0
- ⓪(bne lbl
- ⓪(clr saved
- ⓪(clr restoreFileDT
- ⓪(clr screenOK
- ⓪ nofill
- ⓪ END
- ⓪ END FillIn;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Search(): BOOLEAN; (* findet Auftreten von oldString im Text *)
- ⓪ BEGIN (* delPtr zeigt auf erstes Zeichen, ptr dahinter *)
- ⓪ ASSEMBLER ;benutzt d0-d7,a0-A6
- ⓪+movem.l d3-d7,-(a7) ;die movem müssen wg. D6 am Ende getrennt sein!
- ⓪+movem.l A6/a3/a4,-(a7)
- ⓪+link A5,#0
- ⓪+moveq #0,d6 ;d6=BOOLEAN-Ergebnis
- ⓪+lea oldString,A1
- ⓪+moveq #0,d4
- ⓪+move.b (A1)+,d4 ;d4=Length(oldString)
- ⓪+beq.l srchrts
- ⓪+move.l ptr,a0 ;a0=Text-Pointer
- ⓪+lea getplus(pc),A6
- ⓪+lea getoldp(pc),a4
- ⓪+tst direction ;true=rückwärts
- ⓪+beq dok
- ⓪+lea getmin(pc),A6
- ⓪+lea getoldm(pc),a4
- ⓪+adda d4,A1
- ⓪ dok moveq #0,d0 ;obere Bytes von D0 löschen
- ⓪+moveq #0,d3 ;obere Bytes von D3 löschen
- ⓪+; ** das 1. gesuchte Zeichen auf den Stack **
- ⓪+lea NormTab,a3
- ⓪+lea anum2(PC),a2
- ⓪+jsr (a4) ;erstes suchzeichen nach D3/D7
- ⓪+move.l a1,-(A7)
- ⓪+move d3,d7
- ⓪+tst findCase ;Case-Sensitivity-Flag
- ⓪+bne csens
- ⓪+lea ShiftTab,a3
- ⓪+move.b 0(a3,d3.w),d7 ;upper case
- ⓪+addi.w #256,d3
- ⓪+move.b 0(a3,d3.w),d3 ;lower case
- ⓪+andi #255,D3
- ⓪ csens move.w d7,-(a7)
- ⓪+move.b d3,(a7)
- ⓪+tst findWord
- ⓪+bne wsrch
- ⓪+bra.w srchneu
- ⓪
- ⓪ ; ***** Ende der Suchvorbereitung *****
- ⓪
- ⓪ getmin move.b -(a0),d0
- ⓪+beq.l srchrts
- ⓪+cmpi.b #DLEchar,-1(a0)
- ⓪+bne getmin1
- ⓪+subq.l #1,a0
- ⓪+move.l a0,delPtr
- ⓪+bra getmin
- ⓪ getmin1 rts
- ⓪
- ⓪ getplus move.b (a0)+,d0
- ⓪+beq.l srchrts
- ⓪+cmpi.b #DLEchar,d0
- ⓪+bne getplus1
- ⓪+addq.l #1,a0
- ⓪+move.l a0,delPtr
- ⓪+bra getplus
- ⓪ getplus1 rts
- ⓪
- ⓪ getoldm move.b -(A1),d3
- ⓪+move.b 0(a3,d3.w),d3 ;upper case
- ⓪+rts
- ⓪ getoldp move.b (A1)+,d3
- ⓪+move.b 0(a3,d3.w),d3 ;upper case
- ⓪+rts
- ⓪
- ⓪ ; * wortweise *
- ⓪
- ⓪ wsrch move.l 2(a7),A1 ;A1=Zeiger in oldString
- ⓪+move d4,d5 ;Schleifenzähler
- ⓪+move.b (a7),d3
- ⓪+move.b 1(a7),d7
- ⓪+tst direction ;true=rückwärts
- ⓪+beq forw3
- ⓪
- ⓪ back3 ; erstmal alle AlphaNums überspringen
- ⓪+move.b -(a0),d0
- ⓪+TST.B 0(A2,D0.W) ;AlphaNum?
- ⓪+beq back3 ;ja
- ⓪+bpl back4
- ⓪+tst.b d0
- ⓪+bne back3 ;muß DLE gewesen sein - weiter
- ⓪+bra.w srchrts
- ⓪ back4 ;dies zeichen kann noch übersprungen werden, weil es ja kein
- ⓪+;alpha-zeichen ist, dahinter suchen wir wortanfang
- ⓪+move.b -(a0),d0
- ⓪+TST.B 0(A2,D0.W) ;AlphaNum?
- ⓪+beq back5 ;ja
- ⓪+bpl back4
- ⓪+tst.b d0
- ⓪+bne back4 ;muß DLE gewesen sein - weiter
- ⓪+bra.w srchrts
- ⓪ back5 ;wortanfang - stimmt 1. zeichen?
- ⓪+cmp.b d3,d0
- ⓪+beq.w found1
- ⓪+cmp.b d7,d0
- ⓪+bne back3 ;stimmt nicht - wieder zum wortende
- ⓪+bra.w found1
- ⓪
- ⓪ forw3 ; erstmal alle AlphaNums überspringen
- ⓪+move.b (a0)+,d0
- ⓪+TST.B 0(A2,D0.W) ;AlphaNum?
- ⓪+beq forw3 ;ja - weitersuchen
- ⓪+bpl forw2 ;nein
- ⓪+tst.b d0
- ⓪+beq.w srchrts
- ⓪+;muß DLE gewesen sein. Überspringen und weiter wie nicht-AlphaNum
- ⓪+addq.l #1,a0
- ⓪ forw2 ;dies zeichen kann noch übersprungen werden, weil es ja kein
- ⓪+;alpha-zeichen ist, dahinter suchen wir wortanfang
- ⓪+move.b (a0)+,d0
- ⓪+TST.B 0(A2,D0.W) ;AlphaNum?
- ⓪+beq forw5 ;ja -> wortanfang gefunden
- ⓪+bpl forw2 ;nein, weiter nach anfang suchen
- ⓪+tst.b d0
- ⓪+beq.w srchrts
- ⓪+;muß DLE gewesen sein
- ⓪+addq.l #1,a0
- ⓪+bra forw2
- ⓪ forw5 ;wortanfang - stimmt 1. zeichen?
- ⓪+cmp.b d3,d0
- ⓪+beq.w found1
- ⓪+cmp.b d7,d0
- ⓪+bne forw3 ;stimmt nicht - wieder zum wortende
- ⓪+bra.w found1
- ⓪
- ⓪ ; * normal suchen *
- ⓪
- ⓪ srchneu move.l 2(a7),A1 ;A1=Zeiger in oldString
- ⓪+move d4,d5 ;Schleifenzähler
- ⓪+; ** das 1. Zeichen wird schneller gesucht **
- ⓪+move.b (a7),d3
- ⓪+move.b 1(a7),d7
- ⓪+tst direction ;true=rückwärts
- ⓪+beq forw1
- ⓪ back1 ; rückw. suchen
- ⓪+move.b -(a0),d0
- ⓪+beq.l srchrts
- ⓪+cmp.b d3,d0
- ⓪+beq backfnd
- ⓪+cmp.b d7,d0
- ⓪+bne back1
- ⓪ backfnd cmpi.b #DLEchar,-1(a0) ; ist ein DLE davor?
- ⓪+beq back1 ; dann haben wir uns geirrt
- ⓪+bra found1
- ⓪ forw1 ; vorw. suchen
- ⓪+move.b (a0)+,d0
- ⓪+beq.l srchrts
- ⓪+cmp.b d3,d0
- ⓪+beq forwfnd
- ⓪+cmp.b d7,d0
- ⓪+bne forw1
- ⓪ forwfnd cmpi.b #DLEchar,-2(a0) ; war ein DLE davor?
- ⓪+beq forw1 ; dann haben wir uns geirrt
- ⓪
- ⓪ found1 ; gefunden
- ⓪+move.l a0,delPtr
- ⓪+subq #1,d5
- ⓪+beq found2
- ⓪
- ⓪+; jetzt die restlichen Zeichen vergleichen
- ⓪ srchmore jsr (A6) ;getbyte
- ⓪+move.b 0(a3,d0.w),d0 ;upper case
- ⓪+jsr (a4) ;getold
- ⓪+cmp.b d0,d3
- ⓪+bne srchmism
- ⓪+subq #1,d5
- ⓪+bne srchmore
- ⓪
- ⓪ found2 move.l a0,A1
- ⓪+tst findWord
- ⓪+beq found3
- ⓪+move.l delPtr,-(A7)
- ⓪+jsr (A6) ;getbyte
- ⓪+move.l (A7)+,delPtr
- ⓪+TST.B 0(A2,D0.W) ;AlphaNum?
- ⓪+beq wsrch ;ja
- ⓪ found3 moveq #1,d6 ;Erfolg
- ⓪+move.l A1,ptr
- ⓪+tst direction ;true=rückwärts
- ⓪+bne.w srchrts
- ⓪+subq.l #1,delPtr
- ⓪+bra.w srchrts
- ⓪
- ⓪ srchmism move.l delPtr,a0
- ⓪+tst findWord
- ⓪+bne wsrch
- ⓪+bra srchneu
- ⓪
- ⓪ anum2 ; Alphanum-Tab, -1 bei Null und DLE
- ⓪(DC.B -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0
- ⓪(DC.B 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ⓪(DC.B 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1
- ⓪(DC.B 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪(DC.B 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
- ⓪
- ⓪+; Suchende
- ⓪
- ⓪ srchrts unlk A5
- ⓪+movem.l (a7)+,A6/a3/a4
- ⓪+move d6,(a3)+
- ⓪+movem.l (a7)+,d3-d7
- ⓪ END
- ⓪ END Search;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE ChkName(VAR n:STRING): BOOLEAN;
- ⓪"VAR p,l:INTEGER;
- ⓪ BEGIN (* evtl. '.TXT' anhängen *)
- ⓪"Upper(n);
- ⓪"IF Empty (FileNames.FileName(n)) THEN
- ⓪$n:=''; RETURN false
- ⓪"ELSE
- ⓪$(* dies muß raus, da sonst keine Dateien ohne Suffix geladen werden können:
- ⓪&p := Pos('.',n,0);
- ⓪&IF p<0 THEN
- ⓪(Concat(n,'.TXT',n,strok)
- ⓪&END
- ⓪$*)
- ⓪"END;
- ⓪"RETURN true
- ⓪ END ChkName;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE PutInfo; (* den infoBlock zum Abspeichern fⁿllen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER ;benutzt d0,d1,d2,a0,A1
- ⓪(
- ⓪(lea infobuffer,A1
- ⓪(move.l #$0d0a282A,(A1)+
- ⓪(MOVE.B #' ',(A1)+
- ⓪(bra cont
- ⓪(
- ⓪ putlcard
- ⓪(move.l d2,(a3)+
- ⓪(move #9,(a3)+
- ⓪(movem.l d0/d1/a0/A1,-(a7)
- ⓪(jsr lhextostr
- ⓪(movem.l (a7)+,d0/d1/a0/A1
- ⓪(lea -80(a3),A2
- ⓪(moveq #8,d2
- ⓪ putl1 move.b (A2)+,(A1)+
- ⓪(dbra d2,putl1
- ⓪(lea -80(a3),a3
- ⓪(rts
- ⓪(
- ⓪ putch ori.b #$80,d0
- ⓪(move.b d0,(A1)+
- ⓪(rts
- ⓪(
- ⓪ cont lea tags,a0
- ⓪(move.l ptrStart,d1
- ⓪(moveq #41,d0
- ⓪ coptag move.l (a0)+,d2
- ⓪(sub.l d1,d2
- ⓪(bsr putlcard
- ⓪(dbf d0,coptag
- ⓪(
- ⓪(move findCase,d0
- ⓪(bsr putch
- ⓪(
- ⓪(move.l lastPtr,d2
- ⓪(sub.l d1,d2
- ⓪(bsr putlcard
- ⓪(
- ⓪(movem.l d0/d1/a0/A1,-(a7)
- ⓪(jsr tabsToStr
- ⓪(movem.l (a7)+,d0/d1/a0/A1
- ⓪(lea -82(a3),a0
- ⓪(moveq #79,d0
- ⓪ coptab move.b (a0)+,(A1)+
- ⓪(dbf d0,coptab
- ⓪(lea -82(a3),a3
- ⓪(
- ⓪(lea ptrStack,a0
- ⓪(moveq #15,d0
- ⓪ ctag2 move.l (a0)+,d2
- ⓪(sub.l d1,d2
- ⓪(bsr putlcard
- ⓪(dbf d0,ctag2
- ⓪(
- ⓪(move ptrCount,d0
- ⓪(bsr putch
- ⓪(move autoBack,d0
- ⓪(bsr putch
- ⓪(move autoIncVer,d0
- ⓪(move leaveDLEonWrite,D1
- ⓪(LSL #1,D1
- ⓪(OR D1,D0
- ⓪(bsr putch
- ⓪(MOVE.L #$2A290D0A,(A1)+
- ⓪(moveq #20,d0
- ⓪ clrl move.b #'.',(A1)+
- ⓪(dbra d0,clrl
- ⓪ END
- ⓪ END PutInfo;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE CleanText;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(JSR savetags
- ⓪(TST makeDLE
- ⓪(BEQ.L rmdo
- ⓪
- ⓪(; neuer Text, DLE einfügen
- ⓪
- ⓪(; zuerst die Verschiebungen berechnen
- ⓪ spdo MOVE.L ptrStart,A1
- ⓪(MOVE.L A1,A2
- ⓪(MOVE.L ptrEnd,D2
- ⓪(SUB.L A1,D2
- ⓪(MOVEQ #0,D3
- ⓪
- ⓪ spdln MOVEQ #2,D1
- ⓪
- ⓪ spdcnt CMPI.B #' ',(A1)
- ⓪(BNE spdmo
- ⓪(ADDQ.L #1,A1
- ⓪(SUBQ.L #1,D1
- ⓪(ADDQ.L #1,A2
- ⓪(SUBQ.L #1,D2
- ⓪(BRA spdcnt
- ⓪
- ⓪ spdmo CMPI.B #DLEchar,(A1)
- ⓪(BNE spdmo1
- ⓪
- ⓪(SUBQ.L #2,D2
- ⓪(SUBQ.L #2,D1
- ⓪(MOVEQ #0,D3
- ⓪(ADDQ.L #2,A1
- ⓪(ADDQ.L #2,A2
- ⓪
- ⓪ spdmo1 CMPA.L bufferL,A2
- ⓪(BLS spdmo2
- ⓪(JSR overflow
- ⓪(JMP restoretags
- ⓪ spdmo2 MOVE.L A2,(A3)+
- ⓪(ADD.L D1,D3
- ⓪(MOVE.L D3,(A3)+
- ⓪(ADDA.L D3,A2
- ⓪(MOVEM.L D1/D2/A1/A2,-(A7)
- ⓪(JSR MoveTags
- ⓪(MOVEM.L (A7)+,D1/D2/A1/A2
- ⓪(MOVEQ #0,D3
- ⓪ spnex SUBQ.L #1,D2
- ⓪(ADDQ.L #1,A2
- ⓪(MOVE.B (A1)+,D0
- ⓪(CMPI.B #$0D,D0
- ⓪(BEQ spdlx
- ⓪(CMPI.B #$0A,D0
- ⓪(BEQ spd00
- ⓪(CMPI.B #' ',D0
- ⓪(BNE sptr
- ⓪(SUBQ.L #1,D3
- ⓪(BRA spcr
- ⓪ sptr MOVEQ #0,D3
- ⓪ spcr TST.L D2
- ⓪(BPL spnex
- ⓪(
- ⓪(BRA spcdo ; Fertig
- ⓪(
- ⓪ spdlx CMPI.B #$0A,(A1)
- ⓪(BNE spd00
- ⓪(
- ⓪(SUBQ.L #1,D2
- ⓪(ADDQ.L #1,A2
- ⓪(ADDQ.L #1,A1
- ⓪(SUBQ.L #1,D3
- ⓪ spd00 TST.L D2
- ⓪(BPL spdln
- ⓪
- ⓪(; jetzt den Text hochkopieren
- ⓪ spcdo MOVE.L ptrEnd,A0
- ⓪(MOVE.L BufferL,A1
- ⓪(SUBQ.L #2,A1
- ⓪(MOVE.L A0,D0
- ⓪(SUB.L ptrStart,D0
- ⓪(MOVE.L D0,D2
- ⓪(MOVE.L A1,A2
- ⓪(SUBA.L D0,A2
- ⓪(ADDQ.L #1,A0
- ⓪(ADDQ.L #1,A1
- ⓪(SWAP D0
- ⓪ spcdom1 SWAP D0
- ⓪ spcdomv MOVE.B -(A0),-(A1)
- ⓪(DBF D0,spcdomv
- ⓪(SWAP D0
- ⓪(DBF D0,spcdom1
- ⓪(
- ⓪(; zuletzt Zurückkopieren mit Korrektur der Codes
- ⓪(; D2: Anzahl Source-Bytes
- ⓪(; A0: Pufferbeginn (dest)
- ⓪(; A1: Textbeginn (source)
- ⓪(MOVEQ #0,D3
- ⓪ spcdln MOVEQ #DLEoffset,D1
- ⓪(TST.W D3
- ⓪(BEQ spcdcnt
- ⓪(LEA -1(A0,D3.W),A0
- ⓪(MOVE.B #$0D,(A0)+
- ⓪(MOVEQ #0,D3
- ⓪ spcdcnt CMPI.B #' ',(A1)
- ⓪(BNE spcdmo
- ⓪(ADDQ.L #1,A1
- ⓪(ADDQ.B #1,D1
- ⓪(SUBQ.L #1,D2
- ⓪(BRA spcdcnt
- ⓪ spcdmo CMPI.B #DLEchar,(A1)
- ⓪(BNE spcdle
- ⓪(SUBQ.L #2,D2
- ⓪(MOVEQ #0,D3
- ⓪(ADDQ.L #1,A1
- ⓪(MOVE.B (A1)+,D0
- ⓪(SUBI.B #DLEoffset,D0
- ⓪(BLE spcdle
- ⓪(ADD.B D0,D1
- ⓪ spcdle MOVE.B #DLEchar,(A0)+
- ⓪(MOVE.B D1,(A0)+
- ⓪ spcnex SUBQ.L #1,D2
- ⓪(MOVE.B (A1)+,D0
- ⓪(BEQ spccr
- ⓪(CMPI.B #$0A,D0
- ⓪(BEQ iscr
- ⓪(CMPI.B #$0D,D0
- ⓪(BNE notCR
- ⓪(CMPI.B #$0A,(A1)
- ⓪(BNE isCR
- ⓪(SUBQ.L #1,D2
- ⓪(ADDQ.L #1,A1
- ⓪ isCR MOVEQ #$0D,D0
- ⓪ notCR CMPI.B #$09,D0
- ⓪(BNE notTAB
- ⓪(MOVEQ #'§',D0
- ⓪ notTAB MOVE.B D0,(A0)+
- ⓪(CMPI.B #$0D,D0
- ⓪(BEQ spcdlx
- ⓪(CMPI.B #' ',D0
- ⓪(BNE spctr
- ⓪(SUBQ.W #1,D3
- ⓪(BRA spccr
- ⓪ spctr MOVEQ #0,D3
- ⓪ spccr TST.L D2
- ⓪(BGE spcnex
- ⓪(TST.W D3
- ⓪(BEQ spce0
- ⓪(LEA 0(A0,D3.W),A0
- ⓪(BRA spce0
- ⓪ spcdx TST.W D3
- ⓪(BEQ spce0
- ⓪(LEA -1(A0,D3.W),A0
- ⓪(MOVE.B #$0D,(A0)+
- ⓪(MOVEQ #0,D3
- ⓪ spce0 CLR.B (A0)+
- ⓪(CLR.B (A0)+
- ⓪(MOVE.L A0,ptrEnd
- ⓪(CLR.B (A0)+
- ⓪(CLR.B (A0)+
- ⓪(CLR.B (A0)+
- ⓪(CLR.B (A0)+
- ⓪(RTS
- ⓪ spcdlx TST.L D2
- ⓪(BGE spcdln
- ⓪(BRA spcdx
- ⓪
- ⓪(; text speichern: DLE löschen
- ⓪ rmdo MOVE.L ptrStart,A1
- ⓪(MOVE.L A1,A2
- ⓪(MOVE.L ptrEnd,D2
- ⓪(SUB.L A1,D2
- ⓪(MOVEQ #1,D3
- ⓪ rldln ADDQ.L #1,A2
- ⓪(MOVE.B (A1)+,D0
- ⓪(CMPI.B #DLEchar,D0
- ⓪(BNE rldld
- ⓪(ADDQ.L #1,A2
- ⓪(SUBQ.L #1,D2
- ⓪(MOVEQ #0,D0
- ⓪(MOVE.B (A1)+,D0
- ⓪(SUBI.B #DLEoffset,D0
- ⓪(BPL ok
- ⓪(MOVEQ #0,D0
- ⓪ ok SUBQ.L #1,D0
- ⓪(SUB.L D3,D0
- ⓪(CMPA.L bufferL,A2
- ⓪(BLS spdmo3
- ⓪(JSR overflow
- ⓪(JMP restoretags
- ⓪ spdmo3 MOVE.L A2,(A3)+
- ⓪(MOVE.L D0,(A3)+
- ⓪(ADDA.L D0,A2
- ⓪(MOVEM.L A1/A2,-(A7)
- ⓪(JSR MoveTags
- ⓪(MOVEM.L (A7)+,A1/A2
- ⓪(MOVEQ #0,D3
- ⓪ rldld SUBQ.L #1,D2
- ⓪(BGE rldln
- ⓪(; Fertig mit Tag-Korrektur
- ⓪(MOVE.L ptrEnd,A0
- ⓪(MOVE.L BufferL,A1
- ⓪(SUBQ.L #2,A1
- ⓪(MOVE.L A0,D0
- ⓪(SUB.L ptrStart,D0
- ⓪(MOVE.L D0,D2
- ⓪(MOVE.L A1,A2
- ⓪(SUBA.L D0,A2
- ⓪(ADDQ.L #1,A0
- ⓪(ADDQ.L #1,A1
- ⓪(SWAP D0
- ⓪ rmdom1 SWAP D0
- ⓪ rmdomv MOVE.B -(A0),-(A1)
- ⓪(DBF D0,rmdomv
- ⓪(SWAP D0
- ⓪(DBF D0,rmdom1
- ⓪ rmdln MOVE.B (A1)+,D0
- ⓪(CMPI.B #$0D,D0
- ⓪(BNE notCR2
- ⓪(MOVE.B D0,(A0)+
- ⓪(MOVEQ #$0A,D0
- ⓪ notCR2 CMPI.B #DLEchar,D0
- ⓪(BEQ rmdcnt
- ⓪(MOVE.B D0,(A0)+
- ⓪ rmdld SUBQ.L #1,D2
- ⓪(BGE rmdln
- ⓪ rmdx SUBQ.L #1,A0
- ⓪(MOVE.L A0,ptrEnd
- ⓪ rmex RTS
- ⓪ rmdcnt MOVE.B (A1)+,D0
- ⓪(SUBQ.L #1,D2
- ⓪(SUBI.B #DLEoffset,D0
- ⓪ rmdspc BLE rmdld
- ⓪(MOVE.B #' ',(A0)+
- ⓪(SUBQ.B #1,D0
- ⓪(BRA rmdspc
- ⓪ END
- ⓪ END CleanText;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE WriteText: BOOLEAN;
- ⓪"VAR oldend: POINTER TO CHAR; blockAnz, lastInBl, ioerr : Cardinal;
- ⓪&oldch: CHAR;
- ⓪ BEGIN
- ⓪"IF saveinfo THEN
- ⓪$tags['=']:= ptrEnd;
- ⓪$tags[';']:= ptr;
- ⓪"END;
- ⓪"IF makeDLE & NOT leaveDLEonWrite THEN
- ⓪$makeDLE := False; Cleantext
- ⓪"END;
- ⓪"oldend:= ptrend-2L;
- ⓪"oldch:= oldend^;
- ⓪"oldend^:= CHR (26); (* Ctrl-Z *)
- ⓪"IF saveinfo THEN
- ⓪$INC (ptrend);
- ⓪$IF odd (ptrend-ptrstart) THEN
- ⓪&inc (ptrend)
- ⓪$END;
- ⓪"END;
- ⓪"WriteBytes (f,ptrStart,ptrend-ptrstart-2L);
- ⓪"oldend^:= oldch;
- ⓪"ptrend:= ADDRESS (oldend)+2L;
- ⓪"IOResult := State (f);
- ⓪"IF saveinfo & (ioresult >= 0) THEN
- ⓪$PutInfo;
- ⓪$WriteBytes (f,adr(infobuffer),long(infoLen));
- ⓪$IOResult := State (f);
- ⓪"END;
- ⓪"tags['=']:= ptrStart;
- ⓪"tags[';']:= ptrStart;
- ⓪"ResetState(f);
- ⓪"Close(f);
- ⓪"ioerr := State (f);
- ⓪"IF SuccessFull(1) THEN
- ⓪$IOResult := ioerr;
- ⓪$IF SuccessFull(3) THEN
- ⓪&saved:=true;
- ⓪&RETURN true
- ⓪$END
- ⓪"END;
- ⓪"RETURN false
- ⓪ END WriteText;
- ⓪
- ⓪ VAR fullDate: Date; fullTime: Time;
- ⓪
- ⓪ PROCEDURE GetDT;
- ⓪"BEGIN
- ⓪$GetDateTime (f, fullDate, fullTime);
- ⓪$fileD:= PackDate (fullDate);
- ⓪$fileT:= PackTime (fullTime)
- ⓪"END GetDT;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE SaveText(VAR fn:STRING; sBack, sWarn, keepTime:BOOLEAN):BOOLEAN;
- ⓪"VAR createTime, createDate:CARDINAL; gotOld:BOOLEAN; bp, be, bf:STRING;
- ⓪ BEGIN
- ⓪"IF autoIncVer & NOT saved & NOT restoreFileDT THEN
- ⓪$WriteString (IncrementVersion())
- ⓪"END;
- ⓪"WriteLn;
- ⓪"Open (f,fn,readonly);
- ⓪"IOResult := State(f);
- ⓪"gotOld:=IOResult>=0;
- ⓪"IF gotOld THEN
- ⓪$Close (f);
- ⓪$IF sWarn THEN
- ⓪&WriteString('File already exists. Overwrite it?');
- ⓪&IF NOT Yes() THEN RETURN false END;
- ⓪&WriteLn
- ⓪$END;
- ⓪$IF sBack OR autoBack THEN
- ⓪&WriteString('Backing up...');WriteLn;
- ⓪&bf:=fn;
- ⓪&SplitPath (bf, bf, bp);
- ⓪&SplitName (bp, bp, be);
- ⓪&Append (bp, bf, strok);
- ⓪&Append('.BAK',bf,strok);
- ⓪&ioresult:= FDelete (ADR(bf));
- ⓪&ioresult:= Rename (ADR(fn),ADR(bf));
- ⓪&IF NOT SuccessFull(7) THEN RETURN false END
- ⓪$END;
- ⓪$ioresult:= FDelete (ADR(fn));
- ⓪"END;
- ⓪"Create (f,fn,writeonly,noreplace);
- ⓪"IOResult := State (f);
- ⓪"IF SuccessFull(9) THEN
- ⓪$WriteString('Writing ');WriteString(fn); WriteLn;
- ⓪$IF WriteText () THEN
- ⓪&Open (f,fn,readonly);
- ⓪&IF restoreFileDT OR keepTime THEN
- ⓪(fullDate:= UnpackDate (fileD);
- ⓪(fullTime:= UnpackTime (fileT);
- ⓪(SetDateTime (f, fullDate, fullTime);
- ⓪&ELSE
- ⓪(GetDT
- ⓪&END;
- ⓪&Close (f);
- ⓪&RETURN TRUE
- ⓪$ELSE
- ⓪&IF sBack OR autoBack THEN
- ⓪(ioresult:= FDelete (ADR(fn));
- ⓪(ioresult:= Rename (ADR(bf),ADR(fn));
- ⓪&END;
- ⓪$END
- ⓪"END;
- ⓪"RETURN false
- ⓪ END SaveText;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GetInfo; (* Marker usw. aus infoBlock holen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(movem.l a0/A1/d0/d1/d2/d3/d4/d5/d6,-(a7)
- ⓪(CLR saveinfo
- ⓪(clr leaveDLEonWrite ; damit ReadText nix falsch macht
- ⓪(BRA cont
- ⓪(
- ⓪ getlcard
- ⓪(move.l a1,-(a7)
- ⓪(lea printline,a1
- ⓪(move.l a1,(a3)+
- ⓪(moveq #8,D3
- ⓪(move d3,(a3)+
- ⓪ copstr move.b (a0)+,(a1)+
- ⓪(dbra d3,copstr
- ⓪(clr.b (a1)
- ⓪(clr.w -(a7)
- ⓪(move.l a7,(a3)+
- ⓪(clr.w -(a7)
- ⓪(move.l a7,(a3)+
- ⓪(movem.l d0/d1/a0/a2,-(a7)
- ⓪(jsr strtolcard
- ⓪(movem.l (a7)+,d0/d1/a0/a2
- ⓪(addq.l #4,a7
- ⓪(move.l (a7)+,a1
- ⓪(move.l -(a3),d2
- ⓪(rts
- ⓪(
- ⓪ cont LEA -infoLen(A2),A0
- ⓪(CMPA.L ptrStart,A0
- ⓪(BLS.W noget
- ⓪(MOVE.L A0,D0
- ⓪(CMPI.B #$0D,(A0)+
- ⓪(BNE.L noget
- ⓪(CMPI.B #$0A,(A0)+
- ⓪(BNE.L noget
- ⓪(CMPI.B #'(',(A0)+
- ⓪(BNE.L noget
- ⓪(CMPI.B #'*',(A0)+
- ⓪(BNE.L noget
- ⓪(CMPI.B #' ',(A0)+
- ⓪(BNE.L noget
- ⓪(
- ⓪(MOVE.L D0,A2
- ⓪(
- ⓪((*
- ⓪*MOVE.L ptrStart,A1
- ⓪*CMPI.B #DLEchar,(a1)
- ⓪*BNE.W noget ; Es ist eine Info da, aber wir ignorieren sie
- ⓪(*)
- ⓪(
- ⓪(; Die tags werden erstmal in einen Kopierpuffer geladen und erst
- ⓪(; am Ende, wenn sicher ist, daß die Infoline noch aktuell ist,
- ⓪(; per restoreTags in den richtigen Puffer übertragen.
- ⓪(
- ⓪(lea svs2,A1
- ⓪(move.l ptrStart,d1
- ⓪(moveq #41,d0
- ⓪ coptag bsr getlcard
- ⓪(add.l d1,d2
- ⓪(move.l d2,(A1)+
- ⓪(dbf d0,coptag
- ⓪(
- ⓪(move.b (a0)+,d0
- ⓪(andi #1,d0
- ⓪(move d0,findCase
- ⓪(
- ⓪(bsr getlcard
- ⓪(add.l d1,d2
- ⓪(move.l d2,svlptr
- ⓪(
- ⓪(moveq #79,d0
- ⓪ coptab move.b (a0)+,(a3)+
- ⓪(dbf d0,coptab
- ⓪(clr.w (a3)+
- ⓪(movem.l d0-d2/a0-A2,-(a7)
- ⓪(jsr gettabs
- ⓪(movem.l (a7)+,d0-d2/a0-A2
- ⓪(
- ⓪(lea saveStack,A1
- ⓪(moveq #15,d0
- ⓪ ctag2 bsr getlcard
- ⓪(add.l d1,d2
- ⓪(move.l d2,(A1)+
- ⓪(dbf d0,ctag2
- ⓪(
- ⓪(move.b (a0)+,d0
- ⓪(andi #$3C,d0
- ⓪(move d0,ptrCount
- ⓪(
- ⓪(move.b (a0)+,d0
- ⓪(andi #1,d0
- ⓪(move d0,autoBack
- ⓪(
- ⓪(move.b (a0)+,d0
- ⓪(move d0,d1
- ⓪(andi #1,d0
- ⓪(move d0,autoIncVer
- ⓪(lsr #1,d1
- ⓪(andi #1,d1
- ⓪(move d1,leaveDLEonWrite
- ⓪(
- ⓪(; Konsistenzprüfung der Infoline:
- ⓪(; tags['='] muß identisch mit ptrEnd sein
- ⓪
- ⓪(MOVE #1,saveinfo
- ⓪
- ⓪ noGet movem.l (a7)+,a0/A1/d0/d1/d2/d3/d4/d5/d6
- ⓪ END
- ⓪ END GetInfo;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GetFile; (* file laden *)
- ⓪ BEGIN
- ⓪"ASSEMBLER
- ⓪.move.l flen,d0
- ⓪.move.l d0,d5
- ⓪.add.l A2,d0
- ⓪.move.l d0,d6 ;VORRAUSSICHTLICHES TEXTENDE
- ⓪.tst.l d5
- ⓪.beq nullget
- ⓪.addi.l #$100,d0
- ⓪.cmp.l hilf,d0
- ⓪.blt blockok
- ⓪.jsr Overflow
- ⓪.move #-1,ioresult
- ⓪.bra.w lesende
- ⓪"blockok MOVE.L f,(A3)+
- ⓪.MOVE.L A2,(A3)+
- ⓪.MOVE.L D5,(A3)+
- ⓪.clr.l -(a7)
- ⓪.move.l a7,(a3)+
- ⓪.movem.l A1/A2/d0/d1/d2,-(a7)
- ⓪.JSR ReadBytes
- ⓪.MOVE.L f,(A3)+
- ⓪.JSR State
- ⓪.MOVE -(A3),IOResult
- ⓪.move #11,(a3)+
- ⓪.jsr SuccessFull
- ⓪.movem.l (a7)+,A1/A2/d0/d1/d2
- ⓪.addq.l #4,a7
- ⓪
- ⓪.tst -(a3)
- ⓪.beq.S lesende
- ⓪
- ⓪+nullget
- ⓪.movea.l d6,A1
- ⓪.clr.b (A1)
- ⓪.move.l A1,A2
- ⓪.
- ⓪"lesende move.l A2,-(a7)
- ⓪"END;
- ⓪"IF State (f) >= 0 THEN
- ⓪$GetDT;
- ⓪"END;
- ⓪"ResetState(f);
- ⓪"Close(f);
- ⓪"ASSEMBLER movea.l (a7)+,A2
- ⓪"END
- ⓪ END GetFile;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ReadText; (* File von Diskette laden und aufbereiten *)
- ⓪ BEGIN (* alle Text-Pointer setzen *)
- ⓪ ASSEMBLER
- ⓪(clr.w saveinfo
- ⓪(move.l bufferL,hilf
- ⓪(move.l ptrStart,A2 ;ZEIGER LESEN
- ⓪(move.l A2,ptr
- ⓪(move.l a2,-(a7)
- ⓪(jsr ResetTextOptions
- ⓪(move.l (a7)+,a2
- ⓪(jsr GetFile
- ⓪(tst IOResult
- ⓪(bmi.w noload
- ⓪(TST.L D5
- ⓪(; BEQ.W noload
- ⓪(beq skipeot
- ⓪(jsr getinfo
- ⓪ look40 move.b -(a2),d0
- ⓪(beq look40
- ⓪(cmpi.b #26,d0 ; ctrl-z
- ⓪(beq skipeot
- ⓪(addq.l #1,a2
- ⓪ skipeot clr.b (A2)+
- ⓪(clr.b (A2)+
- ⓪(move.l A2,ptrEnd
- ⓪(TST.W saveinfo
- ⓪(BEQ noinfo
- ⓪(lea svs2,a1 ; Kopie v. 'tags'
- ⓪(cmpa.l $34(a1),a2 ; tags['='] = ptrEnd?
- ⓪(beq infook
- ⓪(move.l $34(a1),d0 ; tags['='] überhaupt definiert?
- ⓪(MOVE.L ptrStart,A1
- ⓪(cmp.l a1,d0
- ⓪(bcs chkold ; nein -> auf DLE prüfen
- ⓪(cmp.l a2,d0 ; (A2=ptrEnd)
- ⓪(bcs noinfo ; ja -> info nicht mehr gültig
- ⓪ chkold CMPI.B #DLEchar,(a1)
- ⓪(bne noinfo ; bei alten Texten ist DLE das Kriterium
- ⓪ infook MOVE.W #1,saveinfo
- ⓪(JSR restoreTags
- ⓪(bra info0
- ⓪ noinfo CLR.W saveinfo
- ⓪ info0 clr.b (A2)+
- ⓪(clr.b (A2)+
- ⓪(clr.b (A2)+
- ⓪(clr.b (A2)+
- ⓪(move #1,saved
- ⓪(move.l ptrStart,d1
- ⓪(tst errorNr
- ⓪(beq nomark
- ⓪(clr errorNr
- ⓪(move.l errorpos,d0
- ⓪(beq nomark
- ⓪(add.l d1,d0
- ⓪(lea tags,A1
- ⓪(move.l d0,$3C(A1) ; tags['?'] setzen
- ⓪ nomark lea tabs,a0
- ⓪(cmpi.b #80,(a0)
- ⓪(bne noload
- ⓪(moveq #39,d0
- ⓪ cptab move (a0)+,(a3)+
- ⓪(dbf d0,cptab
- ⓪(clr.w (a3)+
- ⓪(jsr GetTabs
- ⓪ noload jsr CountTabs
- ⓪(tst leaveDLEonWrite
- ⓪(bne noclean ; Text wurde mit DLEs gespeichert
- ⓪(jsr Cleantext
- ⓪ noclean
- ⓪ END
- ⓪ END ReadText;
- ⓪
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Page(dir: BOOLEAN); (* 20*Repeatfactor Zeilen vor/zurⁿck *)
- ⓪ BEGIN
- ⓪ ClrKBDbuffer;
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(move.l a0,scrPtr
- ⓪(jsr RptfOK ; liefert rptf in D0
- ⓪(move.l d0,d5
- ⓪(; umrechnen in Zeilenanzahl
- ⓪(move.l d5,d0
- ⓪(asl.l #2,d0 ; Zeilen := rptf * 20
- ⓪(add.l d0,d5
- ⓪(asl.l #2,d5
- ⓪(lea NextCR,A1
- ⓪(tst -(a3)
- ⓪(beq pbild
- ⓪(lea LastCR,A1
- ⓪ pbild jsr (A1)
- ⓪(bne nokor1 ; end of text
- ⓪(subq.l #1,d5
- ⓪(bgt pbild
- ⓪ nokor1 jsr LineSt
- ⓪(clr.l rptf
- ⓪(move.l a0,ptr
- ⓪(move.l #ScreenOut,(a3)+
- ⓪(jmp CondScreen
- ⓪ END
- ⓪ END Page;
- ⓪"
- ⓪ (*$l-*)
- ⓪ PROCEDURE Down; (* eine Zeile runter *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪*clr forceTab
- ⓪*move.l ptr,a0
- ⓪ cr1 move.b (a0)+,d0
- ⓪*beq Downrt
- ⓪*cmpi.b #CRchar,d0
- ⓪*bne cr1
- ⓪*move.b ptrX,hilf
- ⓪*jsr WriteLn
- ⓪*move ptrLine,d0
- ⓪*addq #1,d0
- ⓪*move d0,ptrLine
- ⓪*cmp maxLine,d0
- ⓪*ble crzanflf
- ⓪*move maxLine,ptrLine
- ⓪*move.l a0,-(a7)
- ⓪*clr cmdFlag
- ⓪*jsr LineOut
- ⓪*move.l (a7)+,a0
- ⓪ crzanflf move ptrY,d1
- ⓪*move.b ptrX,d1
- ⓪*moveq #0,d0
- ⓪*move.b ch,d0
- ⓪*clr.b d1
- ⓪*tst delFlag
- ⓪*bne crzanf1
- ⓪*cmpi #downKey,d0
- ⓪*bne crzanf1
- ⓪*move.b hilf,d1
- ⓪ crzanf1 jmp FindCursor
- ⓪ Downrt move #1,forceTab
- ⓪ END
- ⓪ END Down;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE UpNoCursor; (* eine Zeile rauf *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪(jsr LineSt
- ⓪(tst.b -1(a0)
- ⓪(beq uprt
- ⓪(jsr LastCR
- ⓪(jsr LineSt
- ⓪(cmpi #1,ptrLine
- ⓪(bhi up1
- ⓪(clr cmdflag
- ⓪(moveq #HomeChar,d0
- ⓪(jsr ChrOut
- ⓪(moveq #ClrLnChar,D0
- ⓪(jsr ChrOut
- ⓪(moveq #UpChar,D0
- ⓪(jsr ChrOut
- ⓪(moveq #DownChar,D0
- ⓪(jsr ChrOut
- ⓪(movem.l d0/a0,-(a7)
- ⓪(jsr LineOut
- ⓪(movem.l (a7)+,d0/a0
- ⓪(rts
- ⓪ up1 subq.b #1,ptrY
- ⓪(subq #1,ptrLine
- ⓪(rts
- ⓪ uprt move #1,forceTab
- ⓪ END
- ⓪ END UpNoCursor;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Up; (* eine Zeile rauf *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪(jsr LineSt
- ⓪(tst.b -1(a0)
- ⓪(beq.l uprt
- ⓪(jsr LastCR
- ⓪(jsr LineSt
- ⓪(cmpi #1,ptrLine
- ⓪(bhi up1
- ⓪(move ptrX,-(a7)
- ⓪(clr cmdflag
- ⓪(moveq #HomeChar,d0
- ⓪(jsr ChrOut
- ⓪(moveq #ClrLnChar,D0
- ⓪(jsr ChrOut
- ⓪(moveq #UpChar,D0
- ⓪(jsr ChrOut
- ⓪(moveq #DownChar,D0
- ⓪(jsr ChrOut
- ⓪(movem.l d0/a0,-(a7)
- ⓪(jsr LineOut
- ⓪(movem.l (a7)+,d0/a0
- ⓪(move (a7)+,ptrX
- ⓪(bra up2
- ⓪ up1 subq.b #1,ptrY
- ⓪(subq #1,ptrLine
- ⓪ up2 move ptrY,d1
- ⓪(clr.b d1
- ⓪(cmpi.b #CRchar,ch
- ⓪(beq upzanf
- ⓪(move.b ptrX,d1
- ⓪ upzanf jmp FindCursor
- ⓪ uprt move #1,forceTab
- ⓪ END
- ⓪ END Up;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ScrollUp;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪*clr forceTab
- ⓪*move.l ptr,a0
- ⓪ cr1 move.b (a0)+,d0
- ⓪*beq.w Downrt
- ⓪*cmpi.b #CRchar,d0
- ⓪*bne cr1
- ⓪*
- ⓪*; prüfen, ob noch /ptrLine/ Zeilen darunter sind
- ⓪*move.l a0,temp
- ⓪*move maxline,d1
- ⓪*sub ptrline,d1
- ⓪*cmp d1,d1
- ⓪*bra con1
- ⓪ lup1 jsr nextcr
- ⓪ con1 dbne d1,lup1
- ⓪*bne.w downrt
- ⓪*
- ⓪*; jsr lastcr
- ⓪*; jsr LineSt
- ⓪*move ptrY,d1
- ⓪*move.b ptrX,d1
- ⓪*move d1,-(a7)
- ⓪*move ptrLine,-(a7)
- ⓪*move maxLine,ptrLine
- ⓪*move maxLine,D1
- ⓪*lsl #8,d1
- ⓪*jsr gotoxyd1 ; auf letzte Zeile springen
- ⓪*jsr writeln
- ⓪*clr cmdFlag
- ⓪*jsr LineOut
- ⓪*move.l temp,a0
- ⓪*move (a7)+,ptrLine
- ⓪*move (a7)+,d1
- ⓪*jmp FindCursor
- ⓪ Downrt move #1,forceTab
- ⓪$END
- ⓪"END ScrollUp;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ScrollDown;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪(jsr LineSt
- ⓪(tst.b -1(a0)
- ⓪(beq.l uprt
- ⓪(jsr LastCR
- ⓪(jsr LineSt
- ⓪
- ⓪(; prüfen, ob noch /ptrLine/ Zeilen darüber sind
- ⓪(move.l a0,temp
- ⓪(move ptrline,d1
- ⓪(subq #1,d1
- ⓪(cmp d1,d1
- ⓪(bra con1
- ⓪ lup1 jsr lastcr
- ⓪ con1 dbne d1,lup1
- ⓪(bne.w uprt
- ⓪
- ⓪(jsr LineSt
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(move d1,-(a7)
- ⓪(moveq #HomeChar,d0
- ⓪(jsr ChrOut
- ⓪(moveq #ClrLnChar,D0
- ⓪(jsr ChrOut
- ⓪(moveq #UpChar,D0
- ⓪(jsr ChrOut
- ⓪(move #$0100,D1
- ⓪(jsr gotoxyd1
- ⓪(move ptrLine,-(a7)
- ⓪(move #1,ptrLine
- ⓪(clr cmdFlag
- ⓪(jsr LineOut
- ⓪(move.l temp,a0
- ⓪(move (a7)+,ptrLine
- ⓪(move (a7)+,d1
- ⓪(jmp FindCursor
- ⓪ uprt move #1,forceTab
- ⓪$END
- ⓪"END ScrollDown;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Right; (* ein Zeichen nach rechts *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪ again move.b (a0)+,d0
- ⓪(beq force
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq rcr
- ⓪(cmpi.b #$20,d0
- ⓪(bcs again
- ⓪(move.l a0,ptr
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(cmp.b maxCol,d1
- ⓪(beq force
- ⓪(addq.b #1,d1
- ⓪(jmp GotoXYd1
- ⓪ rcr jmp Down
- ⓪ force move #1,forceTab
- ⓪ END
- ⓪ END Right;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GotoEOLN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ goright move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(beq xit
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq xit
- ⓪(jsr Right
- ⓪(bra goright
- ⓪ xit
- ⓪ END
- ⓪ END GotoEOLN;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE WordRight; (* ein Wort nach rechts *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(jsr alphanum
- ⓪(bne lp2
- ⓪ lp1 jsr Right
- ⓪(tst forceTab
- ⓪(bne wrout
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(jsr AlphaNum
- ⓪(beq lp1
- ⓪ lp2 jsr Right
- ⓪(tst forceTab
- ⓪(bne wrout
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(jsr AlphaNum
- ⓪(bne lp2
- ⓪ wrout
- ⓪ END
- ⓪ END WordRight;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Left; (* ein Zeichen nach links *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪ again move.b -(a0),d0
- ⓪(beq leftrt
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq crback
- ⓪(cmpi.b #DLEchar,-1(a0)
- ⓪(bne delit
- ⓪(tst.b -2(a0)
- ⓪(beq leftrt
- ⓪(bra crback
- ⓪ delit cmpi.b #$20,d0
- ⓪(bcs again
- ⓪(jsr LineSt
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(subq.b #1,d1
- ⓪(jmp FindCursor
- ⓪(move.l a0,ptr
- ⓪(moveq #LeftChar,d0
- ⓪(jmp ChrOut
- ⓪ crback jsr UpNoCursor
- ⓪(jsr LineSt
- ⓪(move ptrY,d1
- ⓪(move.b maxCol,d1
- ⓪(jmp FindCursor
- ⓪ leftrt move #1,forceTab
- ⓪ END
- ⓪ END Left;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE OnSOLn (): BOOLEAN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(moveq #1,d0
- ⓪(move.l ptr,a0
- ⓪(cmpi.b #CRchar,-1(a0)
- ⓪(beq xit
- ⓪(cmpi.b #dlechar,-2(a0)
- ⓪(beq xit
- ⓪(clr d0
- ⓪ xit move d0,(a3)+
- ⓪ END
- ⓪ END OnSOLn;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GotoSOLN;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ goleft move.l ptr,a0
- ⓪(move.b -1(a0),d0
- ⓪(beq xit
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq xit
- ⓪(move.b -2(a0),d0
- ⓪(beq xit
- ⓪(cmpi.b #DLEchar,d0
- ⓪(beq xit
- ⓪(jsr Left
- ⓪(bra goleft
- ⓪ xit
- ⓪ END
- ⓪ END GotoSOLN;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE WordLeft; (* ein Wort nach links *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ lp1 jsr Left
- ⓪(tst forceTab
- ⓪(bne wrout
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(jsr AlphaNum
- ⓪(bne lp1
- ⓪ lp2 move.l ptr,a0
- ⓪(move.b -1(a0),d0
- ⓪(beq wrout
- ⓪(cmpi.b #DLEchar,-2(a0)
- ⓪(beq wrout
- ⓪(jsr alphanum
- ⓪(bne wrout
- ⓪(jsr Left
- ⓪(tst forceTab
- ⓪(beq lp2
- ⓪ wrout
- ⓪ END
- ⓪ END WordLeft;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelRight; (* nach rechts l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪ again move.b (a0)+,d0
- ⓪(beq force
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq rcr
- ⓪(cmpi.b #$20,d0
- ⓪(bcs again
- ⓪(move.l a0,ptr
- ⓪(move.b ptrX,d1
- ⓪(cmp.b maxCol,d1
- ⓪(beq force
- ⓪(moveq #' ',d0
- ⓪(cmpa.l delPtr,a0
- ⓪(bhi delaus
- ⓪(move.b -1(a0),d0
- ⓪ delaus jmp ChrOut
- ⓪ rcr jmp Down
- ⓪ force move #1,forceTab
- ⓪ END
- ⓪ END DelRight;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelLeft; (* nach links l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(clr forceTab
- ⓪(move.l ptr,a0
- ⓪ again move.b -(a0),d0
- ⓪(beq leftrt
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq crback
- ⓪(cmpi.b #DLEchar,-1(a0)
- ⓪(bne delit
- ⓪(tst.b -2(a0)
- ⓪(beq leftrt
- ⓪(bra crback
- ⓪ delit cmpi.b #$20,d0
- ⓪(bcs again
- ⓪(move.l a0,ptr
- ⓪(moveq #LeftChar,d0
- ⓪(jsr ChrOut
- ⓪(move.b (a0),d0
- ⓪(cmpa.l delPtr,a0
- ⓪(bcc delaus
- ⓪(moveq #' ',d0
- ⓪ delaus jsr ChrOut
- ⓪(moveq #LeftChar,d0
- ⓪(jmp ChrOut
- ⓪ crback jsr UpNoCursor
- ⓪(jsr LineSt
- ⓪(move ptrY,d1
- ⓪(move.b maxCol,d1
- ⓪(jmp FindCursor
- ⓪ leftrt move #1,forceTab
- ⓪ END
- ⓪ END DelLeft;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelLine; (* Zeile löschen mit DelRight/Left *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪ delln move.l temp,a0
- ⓪(cmpa.l ptr,a0
- ⓪(bgt delfor
- ⓪(blt delbck
- ⓪(rts
- ⓪ delfor jsr DelRight
- ⓪(bra delln
- ⓪ delbck jsr DelLeft
- ⓪(bra delln
- ⓪ END
- ⓪ END DelLine;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelWordRight; (* Wort rechts l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(bra lp0
- ⓪ again move.b (a0)+,d0
- ⓪(beq wrout
- ⓪(cmpi.b #CRchar,d0
- ⓪(bne nocr
- ⓪(cmpi.b #DLEchar,(a0)
- ⓪(bne ok
- ⓪(addq.l #2,a0
- ⓪(bra ok
- ⓪ nocr cmpi.b #$20,d0
- ⓪(bcs again
- ⓪ ok rts
- ⓪ lp0 move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(beq wrout
- ⓪(jsr alphanum
- ⓪(bne lp2
- ⓪ lp1 bsr again
- ⓪(move.b (a0),d0
- ⓪(beq wrout
- ⓪(jsr AlphaNum
- ⓪(beq lp1
- ⓪ lp2 bsr again
- ⓪(move.b (a0),d0
- ⓪(beq wrout
- ⓪(jsr AlphaNum
- ⓪(bne lp2
- ⓪(move.l a0,temp
- ⓪(jsr DelLine
- ⓪ wrout
- ⓪ END
- ⓪ END DelWordRight;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelWordLeft; (* Wort links l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(bra lp1
- ⓪ again move.b -(a0),d0
- ⓪(beq dwlout
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq leftok
- ⓪(cmpi.b #DLEchar,-1(a0)
- ⓪(bne delit
- ⓪(subq.l #1,a0
- ⓪(bra again
- ⓪ delit cmpi.b #$20,d0
- ⓪(bcs again
- ⓪ leftok rts
- ⓪ lp1 bsr again
- ⓪(tst.b d0
- ⓪(beq dwlout
- ⓪(jsr AlphaNum
- ⓪(bne lp1
- ⓪ lp2 move.b -1(a0),d0
- ⓪(beq dwlok
- ⓪(cmpi.b #DLEchar,-2(a0)
- ⓪(beq dwlok
- ⓪(jsr alphanum
- ⓪(bne dwlok
- ⓪(bsr again
- ⓪(tst.b d0
- ⓪(beq dwlout
- ⓪(tst forceTab
- ⓪(beq lp2
- ⓪ dwlok move.l a0,temp
- ⓪(jsr DelLine
- ⓪ dwlout
- ⓪ END
- ⓪ END DelWordLeft;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelToEOLN; (* bis Zeilenende l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(jsr NextCR
- ⓪(bne nodel
- ⓪(subq.l #1,a0
- ⓪(move.l a0,temp
- ⓪(jmp DelLine
- ⓪ nodel
- ⓪ END
- ⓪ END DelToEOLN;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelToSOLN; (* bis Zeilenanfang l÷schen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(jsr LastCR
- ⓪(bne noadd
- ⓪(addq.l #1,a0
- ⓪ noadd cmpi.b #DLEchar,(a0)
- ⓪(bne ok
- ⓪(addq.l #2,a0
- ⓪ ok move.l a0,temp
- ⓪(jmp DelLine
- ⓪ END
- ⓪ END DelToSOLN;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelDown; (* nach unten löschen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪*move.l ptr,a0
- ⓪ cr1 move.b (a0)+,d0
- ⓪*bne cr11
- ⓪*rts
- ⓪ cr11 cmpi.b #CRchar,d0
- ⓪*bne cr1
- ⓪*moveq #0,d0
- ⓪*move.b ch,d0
- ⓪*move.b ptrX,d1
- ⓪*cmpi #downKey,d0
- ⓪*beq crmitte
- ⓪*moveq #0,d1
- ⓪ crmitte moveq #0,d3
- ⓪*cmpi.b #DLEchar,(a0)
- ⓪*bne xit
- ⓪*addq.l #1,a0
- ⓪*move.b (a0)+,d3
- ⓪*sub.b #DLEoffset,d3
- ⓪*cmp.b d3,d1
- ⓪*ble xit
- ⓪ fc1 move.b (a0),d4
- ⓪*beq xit
- ⓪*cmpi.b #CRchar,d4
- ⓪*beq xit
- ⓪*addq.l #1,a0
- ⓪*addq.b #1,d3
- ⓪*cmp.b d3,d1
- ⓪*bne fc1
- ⓪ xit move.l a0,temp
- ⓪*jmp DelLine
- ⓪ END
- ⓪ END DelDown;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelUp; (* nach oben löschen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(jsr LineSt
- ⓪(jsr LastCR
- ⓪(bne uprt
- ⓪(jsr LineSt
- ⓪(move.b ptrX,d1
- ⓪(cmpi.b #EnterKey,ch
- ⓪(bne crmitt
- ⓪(moveq #0,d1
- ⓪ crmitt moveq #0,d3
- ⓪(cmpi.b #DLEchar,(a0)
- ⓪(bne xit
- ⓪(addq.l #1,a0
- ⓪(move.b (a0)+,d3
- ⓪(sub.b #DLEoffset,d3
- ⓪(cmp.b d3,d1
- ⓪(ble xit
- ⓪ fc1 move.b (a0),d4
- ⓪(beq xit
- ⓪(cmpi.b #CRchar,d4
- ⓪(beq xit
- ⓪(addq.l #1,a0
- ⓪(addq.b #1,d3
- ⓪(cmp.b d3,d1
- ⓪(bne fc1
- ⓪ xit move.l a0,temp
- ⓪(jmp DelLine
- ⓪ uprt
- ⓪ END
- ⓪ END DelUp;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsWrite; (* Bildschrim ab Cursor neu aufbauen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move d1,-(a7)
- ⓪(jsr GotoXYd1
- ⓪(clr d0
- ⓪(move.b ptrY,d0
- ⓪(move d0,ptrLine
- ⓪(move.l ptr,a0
- ⓪ inslnw jsr LineOut
- ⓪(moveq #0,d0
- ⓪(move.b ptrY,d0
- ⓪(cmp maxLine,d0
- ⓪(bcc inslnx
- ⓪(jsr WriteLn
- ⓪(bra inslnw
- ⓪ inslnx move (a7)+,d1
- ⓪(jmp GotoXYd1
- ⓪ END
- ⓪ END InsWrite;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsRight; (* ein Zeichen nach rechts im Insert-Buf. (bufferM) *)
- ⓪ END InsRight;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsBackSpace; (* ein Zeichen aus Insert-Buffer l÷schen (bufferM) *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪+clr forceTab
- ⓪+move.l bufferL,a0
- ⓪+cmpa.l bufferH,a0
- ⓪+bcs eleft1
- ⓪+move.l ptr,a0
- ⓪+cmpi.b #DLEchar,-2(a0)
- ⓪+bne ilefterr
- ⓪+move.b -(a0),d0
- ⓪+cmpi.b #DLEoffset,d0
- ⓪+bls ilefterr
- ⓪+subq.b #1,d0
- ⓪+move.b d0,(a0)
- ⓪+move.b d0,dleWert
- ⓪+bra.l insback
- ⓪ ilefterr move #1,forceTab
- ⓪+rts
- ⓪ eleft1 cmpi.b #CRchar,(a0)
- ⓪+beq crleft
- ⓪+cmpi.b #DLEchar,1(a0)
- ⓪+beq dleleft
- ⓪+move.b (a0),d0
- ⓪+addq.l #1,bufferL
- ⓪+addq.l #1,bufferM
- ⓪+cmpi.b #$20,d0
- ⓪+bcs insbctrl
- ⓪+bra insback
- ⓪ dleleft move.b (a0),d0
- ⓪+cmpi.b #DLEoffset,d0
- ⓪+bhi dleleft1
- ⓪+addq.l #2,a0
- ⓪ crleft addq.l #1,a0
- ⓪+move.l a0,bufferL
- ⓪+move.l a0,bufferM
- ⓪+move ptrY,d1
- ⓪+clr.b d1
- ⓪+subi #256,d1
- ⓪+ble ilefterr
- ⓪ findx cmpi.b #CRchar,(a0)
- ⓪+beq foundx
- ⓪+addq.l #1,a0
- ⓪+addq.b #1,d1
- ⓪+cmpa.l bufferH,a0
- ⓪+bls findx
- ⓪+move.l bufferH,a0
- ⓪+subq.b #1,d1
- ⓪+add.b ptrXIns,d1
- ⓪ foundx cmpi.b #DLEchar,-(a0)
- ⓪+bne foundx1
- ⓪+subq.b #2,d1
- ⓪+add.b -(a0),d1
- ⓪+sub.b #DLEoffset,d1
- ⓪ foundx1 jmp InsWrite
- ⓪ dleleft1 subq.b #1,d0
- ⓪+move.b d0,dleWert
- ⓪+move.b d0,(a0)
- ⓪ insback moveq #BSchar,d0
- ⓪+jsr ChrOut
- ⓪ insbctrl move ptrY,d1
- ⓪+move.b ptrX,d1
- ⓪+move d1,-(a7)
- ⓪+move.l ptr,a0
- ⓪+jsr LineOut
- ⓪+move (a7)+,d1
- ⓪+jmp GotoXYd1
- ⓪ END
- ⓪ END InsBackSpace;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsLeft; (* ein Zeichen nach links im Insert-Buf. (bufferM) *)
- ⓪ BEGIN
- ⓪ ASSEMBLER jmp InsBackSpace
- ⓪ END
- ⓪ END InsLeft;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsDelete; (* Zeichen unter Cursor l÷schen (bufferM) *)
- ⓪ BEGIN
- ⓪ ASSEMBLER jmp InsBackSpace
- ⓪ END
- ⓪ END InsDelete;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsLine; (* eine Zeile einfⁿgen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move #3,(a3)+
- ⓪(jsr Available
- ⓪(tst -(a3)
- ⓪(bne ins1
- ⓪(jsr Overflow
- ⓪(jmp InsCmd
- ⓪ ins1 jsr ClrLn
- ⓪(moveq #ClrEOLNchar,d0
- ⓪(jsr ChrOut
- ⓪(move.l bufferL,a0
- ⓪(move.b #CRchar,-(a0)
- ⓪(move.b dleWert,d5
- ⓪(move.b d5,d4
- ⓪(subi.b #DLEoffset,d4
- ⓪(move.b d4,d6
- ⓪(tst makeDLE
- ⓪(beq inodle
- ⓪(move.b #DLEchar,-(a0)
- ⓪(move.b d5,-(a0)
- ⓪(bra ins2
- ⓪ inodle subq.b #1,d4
- ⓪(bmi ins2
- ⓪(move.b #' ',-(a0)
- ⓪(bra inodle
- ⓪ ins2 move.l a0,bufferL
- ⓪(move.l a0,bufferM
- ⓪(move ptrY,d1
- ⓪(move.b d6,d1
- ⓪(jmp InsWrite
- ⓪ END
- ⓪ END InsLine;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE IntoBuffer(ch: CHAR); (* ch im Insert-Buffer ablegen *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(subq.l #1,a3
- ⓪(moveq #0,d0
- ⓪(move.b -(a3),d0
- ⓪(move #1,(a3)+
- ⓪(jsr Available
- ⓪(tst -(a3)
- ⓪(bne ins1
- ⓪(jsr Overflow
- ⓪(jmp InsCmd
- ⓪ ins1 move #1,forceTab
- ⓪(move.b ptrX,d1
- ⓪(cmp.b maxCol,d1
- ⓪(bcc ins2
- ⓪ ins11 jsr ChrOut
- ⓪(clr forceTab
- ⓪ ins2 move.l bufferL,a0
- ⓪(cmpi.b #' ',d0
- ⓪(bne bufch
- ⓪(cmpi.b #DLEchar,1(a0)
- ⓪(beq bufdle
- ⓪(cmpa.l bufferH,a0
- ⓪(bcs bufch
- ⓪(move.l ptr,A1
- ⓪(cmpi.b #DLEchar,-2(A1)
- ⓪(bne bufch
- ⓪(lea -1(A1),a0
- ⓪ bufdle addq.b #1,dleWert
- ⓪(bpl bufdl1
- ⓪(subq.b #1,dleWert
- ⓪ bufdl1 addq.b #1,(a0)
- ⓪(bpl bufwrt
- ⓪(subq.b #1,(a0)
- ⓪(bra bufwrt
- ⓪ bufch move.b d0,-(a0)
- ⓪(move.l a0,bufferL
- ⓪(move.l a0,bufferM
- ⓪ bufwrt move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(move d1,-(a7)
- ⓪(move.l ptr,a0
- ⓪(jsr LineOut
- ⓪(move (a7)+,d1
- ⓪(jmp GotoXYd1
- ⓪ END
- ⓪ END IntoBuffer;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Break;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(cmpi.b #DLEchar,-2(a0)
- ⓪(beq fndna
- ⓪(move.b -1(a0),d0
- ⓪(jsr AlphaNum
- ⓪(bne spcvor
- ⓪ fndna move.b (a0)+,d0 ;suche non-alpha-char.
- ⓪(beq.l exbrk
- ⓪(jsr AlphaNum
- ⓪(beq fndna
- ⓪(subq.l #1,a0
- ⓪ spcvor cmpi.b #' ',(a0)+
- ⓪(beq spcvor
- ⓪(subq.l #1,a0
- ⓪(move.l a0,ptr
- ⓪(jsr LineSt ;a0 zeigt auf voriges CR
- ⓪(moveq #DLEoffset,d0
- ⓪(moveq #1,d1
- ⓪(tst makeDLE
- ⓪(beq nodle
- ⓪(cmpi.b #DLEchar,(a0)
- ⓪(bne nodle
- ⓪(addq.l #2,d1
- ⓪(move.b 1(a0),d0
- ⓪ nodle move d1,d2
- ⓪(move.b d0,dleWert
- ⓪(move.l ptr,a0
- ⓪(move.l a0,(a3)+
- ⓪ spcweg move.b -(a0),d0
- ⓪(cmpi.b #DLEchar,d0
- ⓪(beq fnddle
- ⓪(cmpi.b #' ',d0
- ⓪(bne nospc
- ⓪(subq.l #1,d1
- ⓪(bra spcweg
- ⓪ fnddle addq.l #1,d1
- ⓪ nospc move.l d1,(a3)+
- ⓪(add.l d1,ptr
- ⓪(move d2,-(a7)
- ⓪(jsr MoveText
- ⓪(move (a7)+,d2
- ⓪(move.l ptr,a0
- ⓪(suba d2,a0
- ⓪(move.b #CRchar,(a0)+
- ⓪(tst makeDLE
- ⓪(beq exbrk
- ⓪(move.b #DLEchar,(a0)+
- ⓪(move.b dleWert,(a0)+
- ⓪ exbrk jsr ScreenOut
- ⓪ END
- ⓪ END Break;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Glue;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(jsr RptfOK
- ⓪ gluelp move.l ptr,a0
- ⓪(moveq #-1,d1
- ⓪ fndcr move.b (a0)+,d0
- ⓪(beq exglue
- ⓪(cmpi.b #CRchar,d0
- ⓪(bne fndcr
- ⓪(cmpi.b #DLEchar,-3(a0)
- ⓪(beq spcda
- ⓪(cmpi.b #' ',-2(a0)
- ⓪(beq spcda
- ⓪(move.b #' ',-1(a0)
- ⓪(addq.l #1,d1
- ⓪ spcda cmpi.b #DLEchar,(a0)
- ⓪(bne movok
- ⓪(addq.l #2,a0
- ⓪(subq.l #2,d1
- ⓪ movok move.l a0,(a3)+
- ⓪(move.l d1,(a3)+
- ⓪(adda.l d1,a0
- ⓪(move.l a0,ptr
- ⓪(jsr MoveText
- ⓪(subq.l #1,rptf
- ⓪(;bne gluelp ;Glue ohne Rptf!!
- ⓪ exglue jsr ScreenOut
- ⓪(clr.l rptf
- ⓪ END
- ⓪ END Glue;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelOneChar;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(move.b (a0),d0
- ⓪(beq xit
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq xit
- ⓪(addq.l #1,a0
- ⓪(move.l a0,(a3)+
- ⓪(move.l #-1,(a3)+
- ⓪(jsr MoveText
- ⓪(jsr PushPtr
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(move.l ptr,a0
- ⓪(move #1,insflag
- ⓪(jsr LineOut
- ⓪(clr insflag
- ⓪(jsr GotoXYd1
- ⓪ xit
- ⓪ END
- ⓪ END DelOneChar;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE DelOneCharLeft;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(tst.b -(a0)
- ⓪(beq xit
- ⓪(move.b -1(a0),d0
- ⓪(beq xit
- ⓪(cmpi.b #DLEchar,d0
- ⓪(bne nodle
- ⓪(move.b (a0),d0
- ⓪(subq.b #1,d0
- ⓪(cmpi.b #DLEoffset,d0
- ⓪(bge store0
- ⓪(moveq #DLEoffset,d0
- ⓪ store0 move.b d0,(a0)+
- ⓪(move.l a0,ptr
- ⓪(subq.l #2,a0
- ⓪(move ptrY,d1
- ⓪(clr.b d1
- ⓪(jsr GotoXYd1
- ⓪(jsr LineOut
- ⓪(jmp GotoPtr
- ⓪ nodle jsr Left
- ⓪(jmp DelOneChar
- ⓪ xit
- ⓪ END
- ⓪ END DelOneCharLeft;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE InsOneChar;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪&(*move.l ptr,a0
- ⓪(move.b -(a0),d0
- ⓪(beq nodle
- ⓪(cmpi.b #DLEchar,-1(a0)
- ⓪(bne nodle
- ⓪(addq.b #1,d0
- ⓪(bmi xit
- ⓪(move.b d0,(a0)
- ⓪(subq.l #1,a0
- ⓪(move ptrY,d1
- ⓪(clr.b d1
- ⓪(jsr GotoXYd1
- ⓪(jsr LineOut
- ⓪(jmp GotoPtr
- ⓪ nodle*) move #1,(a3)+
- ⓪(jsr Available
- ⓪(tst -(a3)
- ⓪(beq xit
- ⓪(move.l ptr,(a3)+
- ⓪(move.l #1,(a3)+
- ⓪(jsr MoveText
- ⓪(jsr PushPtr
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(move #1,insflag
- ⓪(move.l ptr,a0
- ⓪(move.b #' ',(a0)
- ⓪(jsr LineOut
- ⓪(clr insflag
- ⓪(jsr GotoXYd1
- ⓪ xit
- ⓪ END
- ⓪ END InsOneChar;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE InsMode; (* Insert-Modus *)
- ⓪"VAR ptrLTemp:CARDINAL;
- ⓪ BEGIN
- ⓪"InsCmd;
- ⓪"ASSEMBLER
- ⓪,move.b ptrX,ptrXIns
- ⓪,move ptrLine,ptrLTemp(A6)
- ⓪,move #1,insFlag
- ⓪,move.l bufferH,a0
- ⓪,move.l a0,bufferL
- ⓪,move.l a0,bufferM
- ⓪,move.l ptr,a0
- ⓪,move.b -1(a0),temp
- ⓪,jsr LineSt
- ⓪,moveq #DLEoffset,d0
- ⓪,cmpi.b #DLEchar,(a0)+
- ⓪,bne ikeindle
- ⓪,move.b (a0),d0
- ⓪"ikeindle move.b d0,dleWert
- ⓪"END;
- ⓪"REPEAT
- ⓪$ReadCh;
- ⓪$IF ch=EnterKey THEN
- ⓪&InsLine;
- ⓪&IF ptrLine=maxLine THEN InsCmd END
- ⓪$ELSIF ch=leftKey THEN InsLeft
- ⓪$ELSIF ch=BSkey THEN InsBackSpace
- ⓪$ELSIF ch=DELkey THEN InsDelete
- ⓪$ELSIF ch=TabLeftKey THEN REPEAT InsLeft UNTIL TabSet()
- ⓪$ELSIF ch=rightKey THEN
- ⓪&IF bufferM=bufferL THEN IntoBuffer(' ') ELSE InsRight END
- ⓪$ELSIF ch=TabRightKey THEN
- ⓪&REPEAT
- ⓪(IF bufferM=bufferL THEN IntoBuffer(' ') ELSE InsRight END
- ⓪&UNTIL TabSet()
- ⓪$ELSIF ch IN allowed THEN IntoBuffer(ch)
- ⓪$ELSIF accept THEN BufferToText(false) END
- ⓪"UNTIL abort OR accept;
- ⓪"PushPtr;
- ⓪"lastPtr:=ptr;
- ⓪"insFlag:=false;
- ⓪"IF abort THEN
- ⓪$ASSEMBLER move.l ptr,a0 move.b temp,-1(a0) move ptrLTemp(A6),ptrLine END;
- ⓪$ScreenOut
- ⓪"END
- ⓪ END InsMode;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE DelMode; (* Delete-Modus *)
- ⓪"VAR ptrLTemp:CARDINAL;
- ⓪ BEGIN
- ⓪"ASSEMBLER move.l ptr,delPtr move ptrLine,ptrLTemp(A6) clr cmdFlag
- ⓪*move #1,delFlag clr.l rptf
- ⓪"END;
- ⓪"LOOP
- ⓪$IF CmdLineAway(FALSE) THEN
- ⓪&PutCmdOrTab('Delete: /F1/ or /Enter/ deletes, /ESC/ ignores');
- ⓪&cmdFlag:=true
- ⓪$END;
- ⓪$ReadUpCh;
- ⓪$IF accept THEN AbInBuffer; EXIT
- ⓪$ELSIF abort THEN DelInBuffer; EXIT
- ⓪$ELSIF DirKey() OR Rptfx10() THEN
- ⓪$ELSE RptfOk;
- ⓪&REPEAT
- ⓪(IF (ch=leftKey) OR (ch=BSkey) OR (ch=DELkey) THEN DelLeft
- ⓪(ELSIF (ch=rightKey) OR (ch=' ') THEN DelRight
- ⓪(ELSIF ch=TabLeftKey THEN REPEAT DelLeft UNTIL (ptr<=ptrStart) OR TabSet()
- ⓪(ELSIF ch=TabRightKey THEN REPEAT DelRight UNTIL (ptr>=ptrEnd-2L) OR TabSet()
- ⓪(ELSIF ch=EnterKey THEN IF direction THEN DelUp ELSE DelDown END;
- ⓪(ELSIF ch=EOLNkey THEN DelToEOLN
- ⓪(ELSIF ch=SOLNkey THEN DelToSOLN
- ⓪(ELSIF ch=WordLeftKey THEN DelWordLeft
- ⓪(ELSIF ch=WordRightKey THEN DelWordRight
- ⓪(ELSIF ch=upKey THEN DelUp
- ⓪(ELSIF ch=downKey THEN DelDown
- ⓪(END;
- ⓪(DEC(rptf)
- ⓪&UNTIL (rptf=0L) OR KeyPressed()
- ⓪$END
- ⓪"END;
- ⓪"cmdFlag:=false; delFlag:=false;
- ⓪"IF (ptr>delPtr) OR abort THEN ptr:=delPtr END;
- ⓪"PushPtr;
- ⓪"lastPtr:=ptr;
- ⓪"ptrLine:=ptrLTemp;
- ⓪"ScreenOut
- ⓪ END DelMode;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Zap; (* Zap zum l÷schen gr÷sserer Stⁿcke *)
- ⓪ BEGIN
- ⓪"temp:=ptr;
- ⓪"ChkLastPtr;
- ⓪"CASE ChkZap() OF
- ⓪"0:AbInBuffer; ScreenOut |
- ⓪"1:PutCmd('Zap more than 200 characters? ');
- ⓪$IF Yes() THEN AbInBuffer; ScreenOut ELSE ptr:=temp END |
- ⓪"2:PutCmd('Zap: no room to buffer - delete anyway? ');
- ⓪$IF Yes() THEN
- ⓪&bufferL:=bufferH;
- ⓪&MoveText(delPtr,LONGINT(ptr)-LONGINT(delPtr));
- ⓪&ScreenOut
- ⓪$ELSE ptr:=temp
- ⓪$END
- ⓪"END
- ⓪ END Zap;
- ⓪
- ⓪ (* ED5.ICL *)
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Exchange;
- ⓪ BEGIN
- ⓪"cmdFlag:=false;
- ⓪"LOOP
- ⓪$IF CmdLineAway(FALSE) THEN
- ⓪&PutCmdOrTab('Exchange: /ESC/, /F1/ or /Enter/ to END');
- ⓪&cmdFlag:=true
- ⓪$END;
- ⓪$ReadCh;
- ⓪$IF accept OR abort THEN EXIT
- ⓪$ELSIF ch=EOLNkey THEN GotoEOLN
- ⓪$ELSIF ch=SOLNkey THEN GotoSOLN
- ⓪$ELSIF ch=leftKey THEN Left
- ⓪$ELSIF ch=rightKey THEN Right
- ⓪$ELSIF ch=wordLeftKey THEN WordLeft
- ⓪$ELSIF ch=wordRightKey THEN WordRight
- ⓪$ELSIF ch=TabLeftKey THEN REPEAT Left UNTIL TabSet()
- ⓪$ELSIF ch=TabRightKey THEN REPEAT Right UNTIL TabSet()
- ⓪$ELSIF ch=EnterKey THEN Down
- ⓪$ELSIF (ch=PageDownKey) OR (ch=PageUpKey) THEN Page(ch=PageUpKey)
- ⓪$ELSIF ch=upKey THEN Up
- ⓪$ELSIF ch=downKey THEN Down
- ⓪$ELSIF ch=scrlUpKey THEN ScrollUp;
- ⓪$ELSIF ch=scrlDownKey THEN ScrollDown;
- ⓪$ELSIF ch=DELkey THEN DelOneChar
- ⓪$ELSIF ch=INSkey THEN InsOneChar
- ⓪$ELSIF ch=BSkey THEN DelOneCharLeft
- ⓪$ELSIF (ch IN allowed) & Exchg(ch) THEN ASSEMBLER
- ⓪&move.b ptrX,d0 cmp.b maxCol,d0 bhi no move.b ch,d0 jsr ChrOut no END
- ⓪$END
- ⓪"END;
- ⓪"PushPtr;
- ⓪"cmdFlag:=false
- ⓪ END Exchange;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE Adjust; (* zum Einrⁿcken von Zeilen und Bl÷cken *)
- ⓪"VAR dlediff:CARDINAL;
- ⓪ BEGIN
- ⓪"ASSEMBLER clr dlediff(A6) clr cmdFlag clr.l rptf END;
- ⓪"LOOP
- ⓪$IF CmdLineAway(FALSE) THEN
- ⓪&PutCmdOrTab('Adjust: <-, ->, L(eft, /CR/, /ESC/');
- ⓪&cmdFlag:=true
- ⓪$END;
- ⓪$ReadUpCh;
- ⓪$IF abort OR accept THEN EXIT
- ⓪$ELSIF DirKey() OR Rptfx10() THEN
- ⓪$ELSE RptfOK;
- ⓪&ASSEMBLER
- ⓪&adjloop move.l ptr,a0 ;Hauptschleife
- ⓪1jsr LineSt ;a0 zeigt auf evtl. DLE
- ⓪1moveq #0,d0
- ⓪1move.b ch,d0
- ⓪1cmpi #upKey,d0
- ⓪1beq.l adjup
- ⓪1cmpi.b #EnterKey,d0
- ⓪1bne adj0
- ⓪1tst.w direction
- ⓪1bne.w adjUp
- ⓪1bra.w adjDown
- ⓪&adj0 cmpi #downKey,d0
- ⓪1beq.l adjDown
- ⓪1cmpi.b #DLEchar,(a0)+ ;kein DLE => gleich wieder raus
- ⓪1bne.l adjmor1
- ⓪1move.b (a0),d1 ;Space-Count nach DLE
- ⓪1cmpi #leftKey,d0
- ⓪1bne adj1
- ⓪1cmpi.b #DLEoffset,d1
- ⓪1beq.l adjmor1
- ⓪1subq.b #1,d1
- ⓪1subq.b #1,dlediff(A6)
- ⓪1move.b d1,(a0) ;eins nach links
- ⓪1bra.l adjzeile
- ⓪&adj1 cmpi.b #' ',d0
- ⓪1beq adj11
- ⓪1cmpi #rightKey,d0
- ⓪1bne adj2
- ⓪&adj11 addq.b #1,d1
- ⓪1bpl adjright
- ⓪1subq.b #1,d1
- ⓪&adjright addq.b #1,dlediff(A6)
- ⓪1move.b d1,(a0) ;eins nach rechts
- ⓪1bra.l adjzeile
- ⓪&adj2 cmpi.b #'L',d0 ;L(eft-Adjust
- ⓪1bne adj3
- ⓪1moveq #DLEoffset,d1
- ⓪1sub.b (a0),d1
- ⓪1move.b d1,dlediff(A6) ;Distanz fⁿr weitere Zeilen ber.
- ⓪1move.b #DLEoffset,(a0)
- ⓪1bra.l adjzeile
- ⓪&adj3 cmpi.b #TabRightKey,d0
- ⓪1bne adj4
- ⓪1sub.b #DLEoffset,d1
- ⓪1move.b d1,ptrX
- ⓪&adjtab addq.b #1,dleDiff(A6)
- ⓪1addq.b #1,ptrX
- ⓪1bmi adjzeile
- ⓪1addq.b #1,(a0)
- ⓪1jsr TabSet
- ⓪1tst -(a3)
- ⓪1beq adjtab
- ⓪1bra adjzeile
- ⓪&adj4 cmpi.b #TabLeftKey,d0
- ⓪1bne.l adjmore
- ⓪1sub.b #DLEoffset,d1
- ⓪1move.b d1,ptrX
- ⓪&adjbaktab subq.b #1,dleDiff(A6)
- ⓪1subq.b #1,ptrX
- ⓪1bmi adjzeile
- ⓪1subq.b #1,(a0)
- ⓪1jsr TabSet
- ⓪1tst -(a3)
- ⓪1beq adjbaktab
- ⓪1bra adjzeile
- ⓪&adjDown jsr Down
- ⓪1bra adjupDown
- ⓪&adjup jsr Up
- ⓪&adjupDown move.l ptr,a0
- ⓪1jsr LineSt
- ⓪1cmpi.b #DLEchar,(a0)+
- ⓪1bne adjmor1
- ⓪1move.b (a0),d3
- ⓪1add.b dlediff(A6),d3 ;Zeile erst mal um dlediff verschieben
- ⓪1cmpi.b #DLEoffset,d3
- ⓪1bge adjhl
- ⓪1moveq #DLEoffset,d3
- ⓪&adjhl move.b d3,(a0)
- ⓪&adjzeile clr saved
- ⓪1clr restoreFileDT
- ⓪1move ptrY,d1
- ⓪1clr.b d1
- ⓪1jsr GotoXYd1
- ⓪1addq.l #1,a0
- ⓪1move.l a0,ptr
- ⓪1jsr LineSt
- ⓪1jsr LineOut
- ⓪1jsr GoToPtr
- ⓪&adjmor1 jsr KeyPressed ;bei Repeatfactor evtl. abbrechen
- ⓪1tst -(a3)
- ⓪1bne adjmor2
- ⓪1subq.l #1,rptf
- ⓪1bne.l adjloop
- ⓪&adjmor2 clr.l rptf
- ⓪&adjmore
- ⓪&END
- ⓪$END
- ⓪"END;
- ⓪"cmdFlag:=false
- ⓪ END Adjust;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE SetTag; (* Tag an aktuelle Text-Position setzen *)
- ⓪ BEGIN
- ⓪"PutCmd('Set tag: enter 0..9 or A..Z: ');
- ⓪"ASSEMBLER
- ⓪*jsr ChrIn
- ⓪*jsr ShiftUp
- ⓪*cmpi #'Z',d0 ;'Z' höchster erlaubter Marker
- ⓪*bhi notag
- ⓪*subi #'0',d0 ;'0'=Untergrenze abziehen
- ⓪*blt notag
- ⓪*lsl #2,d0 ;in der Tabelle stehen LONGs
- ⓪*lea tags,a0
- ⓪*move.l ptr,0(a0,d0.w)
- ⓪"notag
- ⓪"END
- ⓪ END SetTag;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE GotoLine (l:LONGCARD;col:CARDINAL);
- ⓪ BEGIN
- ⓪"ASSEMBLER
- ⓪(move.l ptr,scrPtr
- ⓪(move.l ptrStart,a0
- ⓪(move.w -(a3),d2
- ⓪(move.l -(a3),d1
- ⓪(beq asgn
- ⓪ lp subq.l #1,d1
- ⓪(beq asgn
- ⓪(jsr NextCR
- ⓪(bra lp
- ⓪ asgn tst.b (a0)
- ⓪(beq pre0
- ⓪(addq.l #1,a0 ; DLE überspringen
- ⓪(move.b (a0)+,d1
- ⓪(subi.b #DLEoffset,d1
- ⓪(sub.b d1,d2
- ⓪(bmi set0
- ⓪(adda.w d2,a0
- ⓪ set0 move.l a0,ptr
- ⓪ ext0 jmp CenterScreen
- ⓪ pre0 jsr LastCR
- ⓪(addq.l #3,a0 ; hinter DLE
- ⓪(bra ext0
- ⓪"END
- ⓪ END GotoLine;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Jump; (* Setzen des Text-Pointers *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l rptf,d1
- ⓪(bne.l count
- ⓪(END; PutCmd('Jump: B(egin, E(nd, L(ast or tag '); ASSEMBLER
- ⓪(jsr ReadUpCh
- ⓪(move ptrCount,workCount
- ⓪(move.l ptr,scrPtr
- ⓪ jmplp move.l ptr,a0
- ⓪(cmpi.b #'L',d0
- ⓪(bne nolast
- ⓪(move.l lastPtr,a0
- ⓪(bra nomar1
- ⓪ nolast cmpi.b #'E',d0
- ⓪(bne noend
- ⓪(move.l ptrEnd,a0
- ⓪(subq.l #2,a0
- ⓪(bra nomar1
- ⓪ noend cmpi.b #'B',d0
- ⓪(bne nobeg
- ⓪(move.l ptrStart,a0
- ⓪ nomar1 bra.l nomark
- ⓪ nobeg cmpi.b #' ',d0
- ⓪(bne nospc
- ⓪(jsr ReadUpCh
- ⓪(move.l ptr,a0
- ⓪(bra.l nosyn
- ⓪ nospc lea ptrStack,A1
- ⓪(move workCount,d1
- ⓪(cmpi.b #'+',d0
- ⓪(bne noplus
- ⓪(addq #4,d1
- ⓪(bra bckpls
- ⓪ noplus cmpi.b #'-',d0
- ⓪(bne noback
- ⓪(subq #4,d1
- ⓪ bckpls andi #$3C,d1
- ⓪(move.l 0(A1,d1.w),a0
- ⓪(move d1,workCount
- ⓪(bsr.l nomark
- ⓪(jsr ReadUpCh
- ⓪(cmpi.b #'-',d0
- ⓪(beq nospc
- ⓪(bra jmplp
- ⓪ noback cmpi.b #'?',d0
- ⓪(bne nosyn
- ⓪(tst.l ErrorPos
- ⓪(beq nosyn
- ⓪(END; PutCmd(ErrMsg); ASSEMBLER
- ⓪(tst saved
- ⓪(bne syn1
- ⓪(lea tags,A1
- ⓪(move.l $3C(A1),a0
- ⓪(bra syn2
- ⓪ syn1 move.l ptrStart,a0
- ⓪(adda.l ErrorPos,a0
- ⓪(lea tags,A1
- ⓪(move.l a0,$3C(A1)
- ⓪ syn2 bsr nomark
- ⓪(jmp ErrorWait
- ⓪ nosyn cmpi.b #'Z',d0
- ⓪(bhi nomark
- ⓪(subi.b #'0',d0
- ⓪(bcs nomark
- ⓪(asl #2,d0
- ⓪(lea tags,A1
- ⓪(move.l 0(A1,d0.w),a0
- ⓪ nomark cmpa.l ptrStart,a0
- ⓪(bcs bad
- ⓪(cmpa.l ptrEnd,a0
- ⓪(bcc bad
- ⓪(bra asgn
- ⓪ count move.l d1,(a3)+
- ⓪(clr (a3)+
- ⓪(jmp gotoLine
- ⓪ asgn move.l a0,ptr
- ⓪ bad move.l #CenterScreen,(a3)+
- ⓪(jmp CondScreen
- ⓪ END
- ⓪ END Jump;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE WriteTitle;
- ⓪"BEGIN
- ⓪$writestring ('Gepard-Atari Editor '+Version+' for Megamax Modula-2'); WriteLn;
- ⓪$writestring
- ⓪$('Copyright © [1985..1990], Thomas Tempelmann, Schusterwolfstr. 13, 81241 München');
- ⓪$writeLn;
- ⓪$writeLn
- ⓪"END WriteTitle;
- ⓪
- ⓪ PROCEDURE UpdatePath (VAR tPath: ARRAY OF CHAR);
- ⓪"VAR res: INTEGER;
- ⓪"BEGIN
- ⓪$MakeFullPath (tPath, res);
- ⓪$ConcatPath (tPath, Path1, Path1);
- ⓪"END UpdatePath;
- ⓪
- ⓪ PROCEDURE Getpath (VAR tPath: String);
- ⓪"BEGIN
- ⓪$GetDefaultPath(tPath);
- ⓪$Append('*.*',tPath,strOk);
- ⓪"END GetPath;
- ⓪L(*Hü*)
- ⓪ PROCEDURE getFilefromBox (title: MaxStr): String;
- ⓪"VAR selectOK,Ok :Boolean;
- ⓪&REST,TEMPPATH,fName: STRING;
- ⓪"BEGIN
- ⓪$IF UseGem THEN
- ⓪&Write(ClrScrnChar);
- ⓪&IF GEMVersion () <= $120 THEN
- ⓪(GotoXY ( (cols-Length(title)) DIV 2, 1);
- ⓪(WriteString (title);
- ⓪&END;
- ⓪&SelectFile(title,Path1,FName1,selectOK);
- ⓪&Write(ClrScrnChar);
- ⓪&SplitPath(Path1,tempPath,Rest);
- ⓪&abort:= NOT selectOK OR Empty (FName1);
- ⓪&IF NOT abort then
- ⓪(Concat(tempPath,FName1,fName,Ok);
- ⓪(if Ok then return fName end
- ⓪&END;
- ⓪&Return ''
- ⓪$ELSE
- ⓪&WriteString (title);
- ⓪&Write (' ');
- ⓪&ReadString (fName);
- ⓪&IF Empty (fName) THEN abort:= TRUE END;
- ⓪&IF Abort THEN fName:= '' END;
- ⓪&RETURN fName
- ⓪$END
- ⓪!END getFilefromBox;
- ⓪
- ⓪ PROCEDURE NewFile; (* neues File laden *)
- ⓪"VAR fn:STRING;
- ⓪ BEGIN
- ⓪"ClrKBDbuffer;
- ⓪"ClrCmdLine;
- ⓪"IF NOT saved & Worthy() THEN
- ⓪$WriteString('New file: Throw away changes ? ');
- ⓪$IF NOT Yes() THEN GoToPtr; RETURN END
- ⓪"END;
- ⓪"GotoXY(0,0); Write(ClrEOLnchar);
- ⓪"fn:=getFilefromBox('Load which file?');
- ⓪"IF ChkName(fn) THEN
- ⓪$SearchFile (fn,SrcPaths,fromStart,strok,fn);
- ⓪$Open (f,fn,readOnly);
- ⓪$IOResult:=State(f);
- ⓪$IF SuccessFull(13) THEN
- ⓪&UpdatePath (fn);
- ⓪&WriteString('Reading ');WriteString(fn);WriteLn;
- ⓪&flen:= FileSize(f);
- ⓪&ReadText;
- ⓪$END;
- ⓪$IF IOResult=0 THEN Flip(fileName,fn) END
- ⓪"END;
- ⓪"jumpPtr (tags[';']);
- ⓪"tags[';']:= ptrEnd
- ⓪ END NewFile;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE CopyText; (* einkopieren eines Files oder des Buffers *)
- ⓪"VAR copyname:STRING; tagDisplace:LONGINT;
- ⓪ BEGIN
- ⓪"PutCmd('Copy: B(uffer');
- ⓪"ReadUpCh;
- ⓪"IF ch='B' THEN
- ⓪$BufferToText(true); PushPtr; ScreenOut
- ⓪"END
- ⓪ END CopyText;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE FiReDefault; (* Defaultwerte fⁿr Find/Replace *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(tst.l rptf
- ⓪(bne nodflt
- ⓪(tst infinite
- ⓪(bne nodflt
- ⓪(move #1,verify
- ⓪(move #1,infinite
- ⓪ nodflt jmp ClrCmdLine
- ⓪ END
- ⓪ END FiReDefault;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE Prompt(ps:STRING; id1:STRING; VAR inp1:STRING);
- ⓪ BEGIN (* Prompt für Find/Replace *)
- ⓪"ASSEMBLER
- ⓪$jsr PutDir
- ⓪$moveq #'(',d0
- ⓪$jsr ChrOut
- ⓪$moveq #'?',d0
- ⓪$tst verify
- ⓪$beq inf
- ⓪$jsr ChrOut
- ⓪ inf
- ⓪$tst infinite
- ⓪$beq inf1
- ⓪$moveq #'/',d0
- ⓪$jsr ChrOut
- ⓪$bra inf2
- ⓪ inf1
- ⓪$move.l rptf,(a3)+
- ⓪$jsr WriteLCard
- ⓪ inf2
- ⓪$moveq #')',d0
- ⓪$jsr ChrOut
- ⓪$moveq #' ',d0
- ⓪$jsr ChrOut
- ⓪"END;
- ⓪"WriteString(ps);
- ⓪"IF findWord THEN WriteString(' Word') END;
- ⓪"WriteString(id1);
- ⓪"WriteString(': ');
- ⓪"ReadString(inp1)
- ⓪ END Prompt;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE ConvToST (VAR s:ARRAY OF CHAR);
- ⓪"VAR i,n:CARDINAL;
- ⓪"BEGIN
- ⓪$n:=ORD(s[0]);
- ⓪$FOR i:=1 TO n DO
- ⓪&s[i-1]:=s[i]
- ⓪$END;
- ⓪$s[n]:=0C
- ⓪"END ConvToST;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE ConvToGep (VAR s:ARRAY OF CHAR);
- ⓪"VAR i,n:CARDINAL;
- ⓪"BEGIN
- ⓪$n:=Length(s);
- ⓪$FOR i:=n TO 1 BY -1 DO
- ⓪&s[i]:=s[i-1]
- ⓪$END;
- ⓪$s[0]:=CHR(n)
- ⓪"END ConvToGep;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE Find; (* oldString suchen *)
- ⓪ VAR s: String;
- ⓪ BEGIN
- ⓪"FiReDefault;
- ⓪"IF NOT findSame THEN Prompt('Find','',oldString) END;
- ⓪"GoToPtr;
- ⓪"IF NOT abort & (Length(oldString)>0) THEN
- ⓪$scrPtr:=ptr;
- ⓪$ConvToGep (oldString);
- ⓪$LOOP
- ⓪&IF Search() THEN
- ⓪(IF verify THEN
- ⓪*CenterScreen;
- ⓪*PutCmd('Find: /SPACE/ to proceed, any key to end');
- ⓪*ReadCh;IF ch#' ' THEN EXIT END
- ⓪(END;
- ⓪(ASSEMBLER move.l rptf,d0 tst infinite beq decr addq.l #2,d0
- ⓪(decr subq.l #1,d0 move.l d0,rptf bne goOn END; EXIT; ASSEMBLER
- ⓪(!goOn
- ⓪(END
- ⓪&ELSE
- ⓪(CondScreen(CenterScreen);
- ⓪(Concat(CardToStr(rptf,0),' Find: string not found',s,strok);
- ⓪(PutCmd(s);
- ⓪(ErrorWait; EXIT
- ⓪&END
- ⓪$END;
- ⓪$ConvToST (oldString);
- ⓪$CondScreen(CenterScreen)
- ⓪"END
- ⓪ END Find;
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Look;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪ fndna cmpi.b #DLEchar,-2(a0)
- ⓪(beq Lookit
- ⓪(move.b -1(a0),d0
- ⓪(beq Lookit
- ⓪(jsr AlphaNum
- ⓪(bne Lookit
- ⓪(subq.l #1,a0
- ⓪(bra fndna
- ⓪ Lookit lea oldString,A1
- ⓪(moveq #0,d6
- ⓪ Looklp move.b (a0)+,d0
- ⓪(move.b d0,d1
- ⓪(jsr AlphaNum ;d1 bleibt erhalten
- ⓪(bne ex
- ⓪(move.b d1,0(A1,d6.w)
- ⓪(clr.b 1(A1,d6.w)
- ⓪(addq.b #1,d6
- ⓪(cmpi #79,d6
- ⓪(bcs Looklp
- ⓪(subq.b #1,d6
- ⓪ ex tst.b d6
- ⓪(beq noLook
- ⓪(JSR PushPtr ; für Rücksprung mit J-
- ⓪(move.l ptr,a0
- ⓪(tst findSame
- ⓪(bne fnd
- ⓪(move #1,findSame
- ⓪(move.l ptrStart,a0
- ⓪(tst direction
- ⓪(beq fnd
- ⓪(move.l ptrEnd,a0
- ⓪(subq.l #2,a0
- ⓪ fnd move.l a0,ptr
- ⓪(jmp Find
- ⓪ noLook
- ⓪ END
- ⓪ END Look;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE FReplace; (* oldString suchen und durch newString erstzen *)
- ⓪"VAR tagDisplace:LONGINT; s: String;
- ⓪ BEGIN
- ⓪"FiReDefault;
- ⓪"IF NOT findSame THEN
- ⓪$Prompt('Replace',' old',oldString);
- ⓪$IF NOT abort & (Length(oldString)>0) THEN Home;
- ⓪&Prompt('Replace',' new',newString)
- ⓪$END
- ⓪"END;
- ⓪"GoToPtr;
- ⓪"IF NOT abort & (Length(oldString)>0) THEN
- ⓪$tagDisplace:=LONG (INTEGER(Length(newString)-Length(oldString)));
- ⓪$scrPtr:=ptr;
- ⓪$ConvToGep (oldString);
- ⓪$LOOP
- ⓪&IF Search() THEN
- ⓪(IF verify THEN
- ⓪*CenterScreen;
- ⓪*PutCmd('Replace: /SPACE/ replaces, /RETURN/ skips, /ESC/ ends');
- ⓪*REPEAT ReadCh UNTIL (ch=' ') OR (ch=EnterKey) OR abort
- ⓪(ELSE
- ⓪*Home;WriteLCard(rptf);
- ⓪*IF KeyPressed() THEN ChrIn END
- ⓪(END;
- ⓪(IF abort THEN EXIT END;
- ⓪(IF NOT verify OR (ch=' ') THEN
- ⓪*IF Available(SHORT(tagDisplace)) THEN
- ⓪,IF direction THEN
- ⓪.MoveText(delPtr,tagDisplace); FillIn(ptr,newString)
- ⓪,ELSE
- ⓪.MoveText(ptr,tagDisplace); FillIn(delPtr,newString);
- ⓪.ASSEMBLER move.l tagDisplace(A6),d0 add.l d0,ptr END
- ⓪,END;
- ⓪,PushPtr;
- ⓪,ASSEMBLER move.l rptf,d0 tst infinite beq decr addq.l #2,d0
- ⓪,decr subq.l #1,d0 move.l d0,rptf bne goOn END; EXIT; ASSEMBLER
- ⓪,!goOn
- ⓪,END
- ⓪*ELSE
- ⓪,CondScreen(CenterScreen);
- ⓪,PutCmd('Replace: Out of memory');ErrorWait; EXIT
- ⓪*END
- ⓪(END
- ⓪&ELSE
- ⓪(CondScreen(CenterScreen);
- ⓪(Concat(CardToStr(rptf,0),' Replace: string not found',s,strok);
- ⓪(PutCmd(s);
- ⓪(ErrorWait; EXIT
- ⓪&END
- ⓪$END;
- ⓪$ConvToST (oldString);
- ⓪$CondScreen(CenterScreen)
- ⓪"END
- ⓪ END FReplace;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE ScreenTop: ADDRESS;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0 ;aktueller Ptr
- ⓪(move ptrLine,d1 ;aktuelle Zeile
- ⓪ pcr cmp maxLine,d1 ;bis in letzte Bildschirmzeile vorpirschen
- ⓪(bhi zcr
- ⓪(jsr NextCR ;setzt A0 auf nächstes CR+1
- ⓪(addq #1,d1
- ⓪(bra pcr
- ⓪ zcr subq #1,d1
- ⓪(beq korr
- ⓪(jsr LastCR ;wieder zurⁿck, damit Bildschirm immer voll
- ⓪(bra zcr
- ⓪ korr move.l a0,(a3)+
- ⓪ END
- ⓪ END ScreenTop;
- ⓪
- ⓪ PROCEDURE ScreenTop1: ADDRESS; (* geht nur nach oben, sonst Fehler bei *)
- ⓪ BEGIN (* Mausaktion auf letzter Seite (Hü) *)
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0 ;aktueller Ptr
- ⓪(move ptrLine,d1 ;aktuelle Zeile
- ⓪(beq zero
- ⓪ subl subq #1,d1
- ⓪(beq zero
- ⓪(jsr LastCR ;ein CR zurück
- ⓪(bra subl
- ⓪ zero move.l a0,(a3)+
- ⓪ END
- ⓪ END ScreenTop1;
- ⓪
- ⓪ PROCEDURE ScreenTop2: ADDRESS;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(jsr screentop1
- ⓪(move.l -(a3),a0
- ⓪(jsr lineSt
- ⓪(move.l a0,(a3)+
- ⓪$END
- ⓪"END ScreenTop2;
- ⓪
- ⓪ PROCEDURE ScreenBottom: ADDRESS;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(move.l ptr,a0
- ⓪(move ptrLine,d1
- ⓪ pcr cmp maxLine,d1 ;bis in letzte Bildschirmzeile vorpirschen
- ⓪(bhi zcr0
- ⓪(jsr NextCR
- ⓪(addq #1,d1
- ⓪(bra pcr
- ⓪ zcr0 move.l a0,(a3)+
- ⓪ END
- ⓪ END ScreenBottom;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE HardCopyFromTo(a,b:ADDRESS; fwd:BOOLEAN);
- ⓪"PROCEDURE timeOut;
- ⓪$BEGIN
- ⓪&PutCmd ('Printer: Timeout');Bell;ErrorWait;
- ⓪$END timeOut;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVEM.L D3/D4/A4/A5,-(A7)
- ⓪(MOVE -(A3),D3
- ⓪(MOVE.L -(A3),A5
- ⓪(MOVE.L -(A3),A4
- ⓪(MOVEQ #CRChar,D0
- ⓪(BRA print
- ⓪
- ⓪&get
- ⓪(TST D3
- ⓪(BNE forw
- ⓪(CMPA.L A4,A5
- ⓪(BLS noget
- ⓪(MOVE.B -(A5),D0
- ⓪(RTS
- ⓪&forw
- ⓪(CMPA.L A5,A4
- ⓪(BCC noget
- ⓪(MOVE.B (A4)+,D0
- ⓪(RTS
- ⓪&noget
- ⓪(CLR D0
- ⓪(RTS
- ⓪
- ⓪&prn
- ⓪(MOVE.W D0,-(A7)
- ⓪(MOVE #5,-(A7)
- ⓪(TRAP #1
- ⓪(ADDQ.L #4,A7
- ⓪(TST.W D0
- ⓪(RTS
- ⓪
- ⓪&again
- ⓪(JSR KeyPressed
- ⓪(TST -(A3)
- ⓪(BEQ nokey
- ⓪(JSR GetKeyD0
- ⓪(CMPI.B #EscKey,D0
- ⓪(BEQ ende
- ⓪&noKey
- ⓪(BSR get
- ⓪(BEQ ende
- ⓪(CMPI.B #CRChar,D0
- ⓪(BNE nocr
- ⓪(BSR prn
- ⓪(BEQ timeout0
- ⓪(MOVEQ #LFChar,D0
- ⓪(BRA print
- ⓪&nocr
- ⓪(CMPI.B #DLEChar,D0
- ⓪(BNE print
- ⓪(BSR get
- ⓪(BEQ ende
- ⓪(SUBI.B #' ',D0
- ⓪(BCS again
- ⓪(CLR D4
- ⓪(MOVE.B D0,D4
- ⓪(BRA pdle
- ⓪&ldle
- ⓪(MOVEQ #' ',D0
- ⓪(BSR prn
- ⓪(BEQ timeout0
- ⓪&pdle
- ⓪(DBRA D4,ldle
- ⓪(BRA again
- ⓪&print
- ⓪(BSR prn
- ⓪(BNE again
- ⓪&timeout0
- ⓪(BSR timeOut
- ⓪(BRA ret
- ⓪&ende
- ⓪(MOVEQ #CRChar,D0
- ⓪(BSR prn
- ⓪(BEQ ret
- ⓪(MOVEQ #LFChar,D0
- ⓪(BSR prn
- ⓪&ret
- ⓪(MOVEM.L (A7)+,D3/D4/A4/A5
- ⓪$END
- ⓪"END HardCopyFromTo;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE HardCopy;
- ⓪ BEGIN
- ⓪"PutCmd('HardCopy: S(creen, B(uffer, A(ll');
- ⓪"ReadUpCh;
- ⓪"IF ch='S' THEN HardCopyFromTo(ScreenTop2(),ScreenBottom(),true)
- ⓪"ELSIF ch='B' THEN HardCopyFromTo(bufferL,bufferH,false)
- ⓪"ELSIF ch='A' THEN HardCopyFromTo(ptrStart,ptrEnd,true)
- ⓪"END
- ⓪ END HardCopy;
- ⓪
- ⓪ PROCEDURE wrNotSaved;
- ⓪"BEGIN
- ⓪$WriteString('Last changes have not been saved yet!')
- ⓪"END wrNotSaved;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE Environment;
- ⓪"PROCEDURE OnOff(x:BOOLEAN);
- ⓪"(*$l-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER tst -(a3) bne on moveq #'f',d0 jsr ChrOut bra on1
- ⓪$on moveq #'n',d0 on1 jsr ChrOut jmp WriteLn
- ⓪$END
- ⓪"END OnOff;
- ⓪"(*$l+*)
- ⓪"VAR sTime:STRING; tabString:String; i:CARDINAL; tg: CHAR;
- ⓪ BEGIN
- ⓪"LOOP
- ⓪$Write(ClrScrnChar);
- ⓪$writeTitle;
- ⓪$IF NOT saved THEN
- ⓪&wrNotSaved;
- ⓪$ELSE
- ⓪&WriteString ("Editor's internal version: ");
- ⓪&WriteString (intVersion);
- ⓪$END;
- ⓪$WriteLn;
- ⓪$WriteLn;
- ⓪$WriteString('Filename: ');WriteString(fileName); WriteLn;
- ⓪$WriteString(' last update: '); DateToText (UnpackDate (fileD), '', sTime); WriteString(sTime);
- ⓪$WriteString(' / '); TimeToText (UnpackTime (fileT), '', sTime); WriteString(sTime); WriteLn;
- ⓪$IF restoreFileDT THEN
- ⓪&WriteString (' last code: '); WriteString (CodeName); WriteString (', '); WriteString (CardToStr (Codesize,0)); WriteString (' bytes'); WriteLn;
- ⓪$END;
- ⓪$WriteLn;
- ⓪$WriteString('O(ld: ');WriteString(oldString);WriteLn;
- ⓪$WriteString('N(ew: ');WriteString(newString);WriteLn;
- ⓪$WriteString('F(lip Old and New');WriteLn;
- ⓪$WriteLn;
- ⓪$WriteString('A(uto backup is o'); OnOff(autoBack);
- ⓪$WriteString('C(ase sensitivity is o'); OnOff(findCase);
- ⓪$WriteString('I(ncrement version is o'); OnOff(autoIncVer);
- ⓪$WriteString('Q(uick save & load is o'); OnOff(leaveDLEonWrite);
- ⓪$WriteString('S(ave <Editor-Info-Line> is o'); OnOff(saveInfo);
- ⓪$WriteLn;
- ⓪$WriteString('Tags: ');
- ⓪$FOR tg:='0' TO 'Z' DO
- ⓪&IF (ptrStart<tags[tg]) & (tags[tg]<ptrEnd) THEN
- ⓪(Write(tg)
- ⓪&ELSE
- ⓪(Write(' ')
- ⓪&END
- ⓪$END;
- ⓪$WriteLn;
- ⓪$WriteLn;
- ⓪$WriteString('T(ab setting'); WriteLn;
- ⓪$tabString:=TabsToStr(); WriteString(tabString); WriteLn;
- ⓪$WriteLn;
- ⓪$WriteString('Enter option: '); ReadUpCh; WriteLn;
- ⓪$IF ch='A' THEN Negate(autoBack)
- ⓪$ELSIF ch='C' THEN Negate(findCase)
- ⓪$ELSIF ch='F' THEN Flip(oldString,newString)
- ⓪$ELSIF ch='I' THEN Negate(autoIncVer)
- ⓪$ELSIF ch='Q' THEN Negate(leaveDLEonWrite)
- ⓪$ELSIF ch='S' THEN Negate(saveInfo)
- ⓪$ELSIF ch='N' THEN WriteString('New: ');ReadString(newString)
- ⓪$ELSIF ch='O' THEN WriteString('Old: ');ReadString(oldString)
- ⓪$ELSIF ch='T' THEN ReadString(tabString);GetTabs(tabString);
- ⓪$ELSIF ch='X' THEN
- ⓪&makeDLE:=FALSE; CleanText; makeDLE:=TRUE; CleanText;
- ⓪&ChkLastPtr; ptr:= ptrStart; CenterScreen
- ⓪$ELSE EXIT
- ⓪$END
- ⓪"END;
- ⓪"ScreenOut;
- ⓪"cmdFlag:=false
- ⓪ END Environment;
- ⓪
- ⓪
- ⓪ FORWARD CloseTextFrame;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE QuitEditor; (* Q(uit- Untermenⁿ *)
- ⓪"VAR fn:STRING; show,sWarn:BOOLEAN; p:CARDINAL;
- ⓪ BEGIN
- ⓪"ClrKBDbuffer;
- ⓪"fn:= '';
- ⓪"cmdFlag:=false;
- ⓪"show:=true; sWarn:=false;
- ⓪"Write(ClrScrnChar);
- ⓪"LOOP
- ⓪$IF show THEN
- ⓪&GotoXY(0,0);
- ⓪&IF saveinfo THEN WriteString('Editor Info-Line will be saved') END;
- ⓪&ClrLn;
- ⓪&IF leaveDLEonWrite THEN WriteString('Quick save is active') END;
- ⓪&ClrLn;
- ⓪&ClrLn;
- ⓪&IF NOT saved AND Worthy() THEN
- ⓪(wrNotSaved
- ⓪&END;
- ⓪&ClrLn;
- ⓪&ClrLn;
- ⓪&WriteString ('Filename: '); WriteString (fileName); ClrLn;
- ⓪&ClrLn;
- ⓪&WriteString('E(xit'); ClrLn;
- ⓪&WriteString('I(ncrement'); ClrLn;
- ⓪&WriteString ('U(pdate (Save & Exit)'); ClrLn;
- ⓪&IF filesInMem=0 THEN
- ⓪(WriteString('C(ompile (Update & Compile)'); ClrLn;
- ⓪(WriteString('X(exute (Execute)'); ClrLn;
- ⓪(WriteString('M(ake (Update & Make)'); ClrLn;
- ⓪(WriteString('R(un (Make & Execute)'); ClrLn;
- ⓪&END;
- ⓪&WriteString('S(ave'); ClrLn;
- ⓪&WriteString('B(ack up and save'); ClrLn;
- ⓪&WriteString('K(eep time stamp and save'); ClrLn;
- ⓪&WriteString('W(rite to a file...'); ClrLn;
- ⓪&WriteString('N(ew filename...'); ClrLn;
- ⓪&WriteString('O(ther filename, no save...'); ClrLn;
- ⓪&WriteString('ESC to return'); ClrLn;
- ⓪&show:=false
- ⓪$END;
- ⓪$GoToXY(0,21);
- ⓪$ReadUpCh; IF ch> ' ' THEN Write(ch) END;
- ⓪$Write(ClrEOSchar);
- ⓪$IF (ch=ESCkey) OR (ch=EnterKey) THEN EXIT
- ⓪$ELSIF ch='I' THEN WriteString (IncrementVersion())
- ⓪$ELSIF ch='E' THEN
- ⓪&saved:=saved OR NOT Worthy();
- ⓪&IF NOT saved THEN WriteLn;
- ⓪(WriteString('Throw away changes since last update? ');
- ⓪(saved:=Yes()
- ⓪&END;
- ⓪&IF saved THEN
- ⓪(IF filesInMem=0 THEN endOfEd:=true ELSE CloseTextFrame END;
- ⓪(EXIT
- ⓪&END
- ⓪$ELSIF ch='W' THEN WriteLn;
- ⓪&(* WriteString('Write file: '); ReadString(fn); *)
- ⓪&fn:=getFilefromBox('Write file:');
- ⓪&show:=true;
- ⓪&IF NOT abort & ChkName(fn) & SaveText(fn,false,true,false) THEN END
- ⓪$ELSIF ch='O' THEN WriteLn;
- ⓪&(* WriteString('Other filename: '); ReadString(fn); *)
- ⓪&fn:=getFilefromBox('Other filename:');
- ⓪&show:=true;
- ⓪&IF NOT abort & ChkName(fn) THEN
- ⓪(Flip(fn,fileName); sWarn:=true
- ⓪&END
- ⓪$ELSIF ch='N' THEN WriteLn;
- ⓪&(* WriteString('New filename: '); ReadString(fn); *)
- ⓪&fn:=getFilefromBox('New filename:');
- ⓪&show:=true;
- ⓪&IF NOT abort & ChkName(fn) & SaveText(fn,false,true,false) THEN
- ⓪(Assign (fn,TextName,strok);
- ⓪(Flip(fn,fileName);
- ⓪&END
- ⓪$ELSIF Length(fileName)>0 THEN
- ⓪&IF (ch='S') OR (ch='K') THEN
- ⓪(IF SaveText(fileName,false,sWarn,ch='K') THEN
- ⓪*Assign (filename,TextName,strok);
- ⓪(END
- ⓪&ELSIF (ch='U')
- ⓪&OR (
- ⓪((filesInMem=0) & ( (ch='C') OR (ch='X') OR (ch='M') OR (ch='R') )
- ⓪&) THEN
- ⓪(IF SaveText(fileName,false,sWarn,false) THEN
- ⓪*Assign (filename,TextName,strok);
- ⓪*IF filesInMem=0 THEN
- ⓪,endOfEd:=true;
- ⓪,IF ch='C' THEN
- ⓪.exitCode:= 1
- ⓪,ELSIF ch='X' THEN
- ⓪.exitCode:= 2
- ⓪,ELSIF ch='M' THEN
- ⓪.exitCode:= 3
- ⓪,ELSIF ch='R' THEN
- ⓪.exitCode:= 4
- ⓪,END
- ⓪*ELSE
- ⓪,CloseTextFrame
- ⓪*END;
- ⓪*EXIT
- ⓪(END
- ⓪&ELSIF ch='B' THEN
- ⓪(IF SaveText(fileName,true,false,false) THEN
- ⓪*Assign (filename,TextName,strok);
- ⓪(END
- ⓪&END
- ⓪$END
- ⓪"END;
- ⓪"IF NOT endOfEd THEN
- ⓪$IF ~makeDLE THEN
- ⓪&makeDLE:= True;
- ⓪&WriteLn;
- ⓪&WriteString ('please wait...');
- ⓪&Cleantext;
- ⓪$END;
- ⓪$ScreenOut
- ⓪"END
- ⓪ END QuitEditor;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE OpenTextFrame;
- ⓪ BEGIN
- ⓪"IF (bufferL-ptrEnd<1500L) THEN
- ⓪$PutCmd('Not enough memory for text-frame'); Bell; ErrorWait
- ⓪"ELSE
- ⓪$ASSEMBLER
- ⓪,jsr finish
- ⓪,move.l ptrEnd,d0
- ⓪,addq.l #3,d0
- ⓪,bclr #0,d0
- ⓪,move.l d0,a0
- ⓪,move.l total,(a0)+
- ⓪,move direction,(a0)+
- ⓪,move saved,(a0)+
- ⓪,move saveinfo,(a0)+
- ⓪,move makeDLE,(a0)+
- ⓪,move leaveDLEonWrite,(a0)+
- ⓪,move findCase,(a0)+
- ⓪,move autoBack,(a0)+
- ⓪,move autoIncVer,(a0)+
- ⓪,move.l errorpos,(a0)+
- ⓪,lea ptrStack,A1
- ⓪,moveq #58,d0
- ⓪$allptr move.l (A1)+,(a0)+
- ⓪,dbf d0,allptr
- ⓪,lea filename,A1
- ⓪,moveq #40,d0
- ⓪$allfn move (A1)+,(a0)+
- ⓪,dbf d0,allfn
- ⓪,lea tabs,A1
- ⓪,moveq #40,d0
- ⓪$alltab move (A1)+,(a0)+
- ⓪,dbf d0,alltab
- ⓪,move nrOfTabs,(a0)+
- ⓪,move ptrLine,(a0)+
- ⓪,move ptrCount,(a0)+
- ⓪,move fileD,(a0)+
- ⓪,move fileT,(a0)+
- ⓪,move restoreFileDT,(a0)+
- ⓪,move.l ptr,(a0)+
- ⓪,move.l lastPtr,(a0)+
- ⓪,move.l ptrStart,(a0)+
- ⓪,move.l ptrEnd,(a0)+
- ⓪,clr (a0)+
- ⓪,
- ⓪,addq #1,filesInMem
- ⓪,move.l a0,ptrStart
- ⓪,move.b #DLEchar,(a0)+
- ⓪,move.b #DLEoffset,(a0)+
- ⓪,move.l a0,ptr
- ⓪,move.l a0,lastPtr
- ⓪,clr (a0)+
- ⓪,move.l a0,ptrEnd
- ⓪,clr.l (a0)+
- ⓪,moveq #58,d0 lea ptrStack,a0 lp clr.l (a0)+ dbf d0,lp
- ⓪,jsr ResetTextOptions
- ⓪,clr.b fileName
- ⓪,clr delFlag clr insFlag clr.l total
- ⓪,jsr Prepare
- ⓪,move.l d0,startupTime clr.l errorpos
- ⓪,move #1,ptrLine jsr ScreenOut
- ⓪$END
- ⓪"END
- ⓪ END OpenTextFrame;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE CloseTextFrame;
- ⓪ BEGIN
- ⓪"saved:=saved OR NOT Worthy();
- ⓪"IF filesInMem=0 THEN
- ⓪$PutCmd('No old text frame to close'); Errorwait; RETURN
- ⓪"ELSIF NOT saved THEN
- ⓪$ClrCmdLine;
- ⓪$WriteString('Close text frame: Throw away changes ? ');
- ⓪$IF NOT Yes() THEN GoToPtr; RETURN END
- ⓪"END;
- ⓪"ASSEMBLER
- ⓪*move.l ptrStart,a0
- ⓪*subq.l #2,a0
- ⓪*move.l -(a0),ptrEnd
- ⓪*move.l -(a0),ptrStart
- ⓪*move.l -(a0),lastPtr
- ⓪*move.l -(a0),ptr
- ⓪*move -(a0),restoreFileDT
- ⓪*move -(a0),fileT
- ⓪*move -(a0),fileD
- ⓪*move -(a0),ptrCount
- ⓪*move -(a0),ptrLine
- ⓪*move -(a0),nrOfTabs
- ⓪*moveq #40,d0
- ⓪*lea tabs,A1
- ⓪*lea 82(A1),A1
- ⓪"alltab move -(a0),-(A1)
- ⓪*dbf d0,alltab
- ⓪*moveq #40,d0
- ⓪*lea filename,A1
- ⓪*lea 82(A1),A1
- ⓪"allfn move -(a0),-(A1)
- ⓪*dbf d0,allfn
- ⓪*moveq #58,d0
- ⓪*lea ptrStack,A1
- ⓪*lea 236(A1),A1
- ⓪"allptr move.l -(a0),-(A1)
- ⓪*dbf d0,allptr
- ⓪*move.l -(a0),errorpos
- ⓪*move -(a0),autoIncVer
- ⓪*move -(a0),autoBack
- ⓪*move -(a0),findCase
- ⓪*move -(a0),leaveDLEonWrite
- ⓪*move -(a0),makeDLE
- ⓪*move -(a0),saveinfo
- ⓪*move -(a0),saved
- ⓪*move -(a0),direction
- ⓪*move.l -(a0),total
- ⓪*jsr Prepare
- ⓪*move.l d0,startupTime
- ⓪*subq #1,filesInMem
- ⓪"END
- ⓪ END CloseTextFrame;
- ⓪
- ⓪
- ⓪ (*$? mayCallCompiler:
- ⓪
- ⓪ TYPE
- ⓪(Header = RECORD
- ⓪3LayoutNr : BYTE;
- ⓪3Id : BYTE;
- ⓪3QualificationFlag : CARDINAL;
- ⓪3Key : LONGCARD;
- ⓪3OffsExTree : ADDRESS;
- ⓪3DefinedItems : CARDINAL;
- ⓪3OffsImpList : ADDRESS;
- ⓪3VarSize : LONGCARD;
- ⓪3ModName : ADDRESS
- ⓪1END;
- ⓪
- ⓪(
- ⓪(TreeEntry = RECORD
- ⓪6OffsNextItemNr: CARDINAL;
- ⓪6Name: CHAR
- ⓪4END;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE CompName (ad: ADDRESS): MaxStr;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L -(A3),A0
- ⓪(MOVE.L A3,A2
- ⓪(LEA 256(A3),A3
- ⓪"CopyHelpStr
- ⓪(MOVE.B (A0)+,D0
- ⓪(BEQ EndCopy
- ⓪(CMPI.B #$FE,D0
- ⓪(BCC EndCopy
- ⓪(MOVE.B D0,(A2)+
- ⓪(BRA CopyHelpStr
- ⓪"EndCopy
- ⓪(CLR.B (A2)+
- ⓪$END
- ⓪"END CompName;
- ⓪
- ⓪ VAR defFile: File; size: LONGCARD;
- ⓪$returnVal: BOOLEAN;
- ⓪
- ⓪ (*$L+*)
- ⓪ PROCEDURE Process;
- ⓪
- ⓪"VAR str: POINTER TO ARRAY [0..7] OF CHAR;
- ⓪&first, continue, success: BOOLEAN;
- ⓪&Data: POINTER TO Header;
- ⓪&helpString: String;
- ⓪&BytesRead: LONGCARD;
- ⓪&modName: ADDRESS;
- ⓪
- ⓪ BEGIN
- ⓪"(* Process File *)
- ⓪"Home;
- ⓪"IF (bufferL - ptrEnd < size + 1500L) THEN
- ⓪$WriteString ('Insufficient memory!');
- ⓪$ReadCh;
- ⓪$returnVal:= FALSE;
- ⓪$RETURN
- ⓪"END;
- ⓪"Data:= ptrEnd + 4L; (* leave some bytes unused for security resons *)
- ⓪"ReadBytes (defFile, Data, size, BytesRead);
- ⓪"IF BytesRead # size THEN
- ⓪$(* if not all bytes read exit *)
- ⓪$WriteString ('Read error!');
- ⓪$ReadCh;
- ⓪$returnVal:= TRUE;
- ⓪$RETURN
- ⓪"END;
- ⓪"str:= ADDRESS (Data);
- ⓪"INC (Data,8);
- ⓪"IF (Compare (str^, "MM2Code") # equal) OR (Data^.ID # BYTE (3)) THEN
- ⓪$(* not a DEF file *)
- ⓪$returnVal:= TRUE;
- ⓪$RETURN
- ⓪"END;
- ⓪"(* display modname *)
- ⓪"modName:= ADDRESS(Data)+Data^.ModName;
- ⓪"WriteString (CompName (modName));
- ⓪"continue:= TRUE; (* default: scan next file *)
- ⓪"first:= TRUE; (* first check the modname itself *)
- ⓪"(* scan list of exported items *)
- ⓪"ASSEMBLER
- ⓪(; Cursorpos. merken
- ⓪(move ptrY,d0
- ⓪(move.b ptrX,d0
- ⓪(move d0,yx
- ⓪(MOVE.L modName(A6),A1
- ⓪(BRA.W searchStart
- ⓪(
- ⓪"CaseSen
- ⓪(; put next character of item-name in D0 and next of oldString in D1,
- ⓪(; increment index.
- ⓪(MOVE.B 0(A1,D2.W),D0
- ⓪(MOVE.B 0(A2,D2.W),D1
- ⓪(ADDQ.W #1,D2
- ⓪(RTS
- ⓪"NoCaseSen
- ⓪(; same as CaseSen, but characters are converted to capitals.
- ⓪(CLR D0
- ⓪(MOVE.B 0(A2,D2.W),D0
- ⓪(MOVE.B 0(A4,D0.W),D0
- ⓪(MOVE.W D0,D1
- ⓪(MOVE.B 0(A1,D2.W),D0
- ⓪(MOVE.B 0(A4,D0.W),D0
- ⓪(ADDQ.W #1,D2
- ⓪(RTS
- ⓪"
- ⓪"ItemFound
- ⓪(BSR.W showItem
- ⓪(BNE CmpFailed
- ⓪"endOfTree
- ⓪(RTS
- ⓪(
- ⓪"CompNext
- ⓪(MOVE.W (A0)+,D0 ; modul-lokale Item-Nr
- ⓪(BEQ.L endOfTree
- ⓪(LEA 2(A0),A1
- ⓪"CompFirst
- ⓪(MOVEQ #0,D2 ; D2 := index in strings
- ⓪"CmpNext
- ⓪(JSR (A5) ; get next characters in D0/D1
- ⓪(TST.B D0
- ⓪(BEQ.W ItemEnd
- ⓪(CMP.B #$FE,D0 ; check end of item-name
- ⓪(BCC.W ItemEnd ; end of name
- ⓪(CMP.B D0,D1
- ⓪(BEQ CmpNext ; equal -> continue with next
- ⓪(TST.B D1
- ⓪(BNE CmpFailed
- ⓪(TST.W findWord
- ⓪(BNE CmpFailed
- ⓪(BRA.W ItemFound
- ⓪"ItemEnd
- ⓪(; End of name of item is reached. if also end of oldString ->
- ⓪(; item is correct.
- ⓪(TST.B D1
- ⓪(BEQ.W ItemFound
- ⓪"CmpFailed
- ⓪(; skip to next item and continue search
- ⓪(TST.W first(A6)
- ⓪(BEQ notFirst
- ⓪(CLR.W first(A6)
- ⓪(MOVE.L Data(A6),A0 ; A0 := pointer to header
- ⓪(MOVE.L Header.OffsExTree(A0),D0 ; D0 := offset to list of items
- ⓪(BEQ.L endOfTree ; no exported items
- ⓪(ADDA.L D0,A0 ; A0 := pointer to list of items
- ⓪(BRA CompNext
- ⓪"notFirst
- ⓪(ADDQ.B #1,D0
- ⓪(BEQ endOfName
- ⓪(ADDA.W D2,A1
- ⓪"luup2 MOVE.B (A1)+,D0
- ⓪(BPL luup2
- ⓪(ADDQ.B #1,D0
- ⓪(BNE luup2
- ⓪"endOfName
- ⓪(CMPI.B #13,1(A1)
- ⓪(BNE noRecord
- ⓪(
- ⓪(; lokalen Record-Baum durchsuchen
- ⓪(MOVE.L A0,-(A7)
- ⓪(LEA 8(A1),A0
- ⓪(BSR CompNext
- ⓪(MOVE.L (A7)+,A0
- ⓪(TST continue(A6)
- ⓪(BEQ endOfTree
- ⓪(
- ⓪"noRecord
- ⓪(MOVE.W TreeEntry.OffsNextItemNr(A0),D0 ; offset to next item
- ⓪(BEQ.L endOfTree
- ⓪(ADDA.W D0,A0
- ⓪(BRA CompNext
- ⓪(
- ⓪"writeName
- ⓪(LEA helpString(A6),A2
- ⓪(CLR D1
- ⓪"CopyHelpStr
- ⓪(MOVE.B (A1)+,D0
- ⓪(BEQ EndCopy
- ⓪(CMPI.B #$FE,D0
- ⓪(BCC EndCopy
- ⓪(ADDQ #1,D1
- ⓪(MOVE.B D0,(A2)+
- ⓪(BRA CopyHelpStr
- ⓪"EndCopy
- ⓪(CLR.B (A2)+
- ⓪(MOVE.B #'.',D0
- ⓪(JSR ChrOut ; write '.'
- ⓪(LEA helpString(A6),A2
- ⓪(MOVE.L A2,(A3)+
- ⓪(MOVE.W D1,(A3)+
- ⓪(JMP BufferWrite ; write helpString
- ⓪"
- ⓪"wrn ; Namen auf Stack rückwärts ausgeben
- ⓪(MOVE.L 4(A0),D0
- ⓪(BEQ wrn3
- ⓪(MOVE.L A1,-(A7)
- ⓪(MOVE.L D0,A1
- ⓪(ADDQ.L #2,A1
- ⓪(ADDQ.L #8,A0
- ⓪(BSR wrn
- ⓪(MOVE.L (A7)+,A1
- ⓪"wrn3 BRA writeName
- ⓪
- ⓪
- ⓪"showItem
- ⓪(; search successful
- ⓪(MOVEM.L A0/A2/A5,-(A7)
- ⓪(TST.W first(A6)
- ⓪(BNE NoNam
- ⓪(LEA 16(A7),A0
- ⓪(BSR wrn
- ⓪"NoNam JSR Bell
- ⓪(MOVE.B #' ',D0
- ⓪(JSR ChrOut ; write ' '
- ⓪(MOVE.B #'?',D0
- ⓪(JSR ChrOut ; write '?'
- ⓪(JSR ReadCh ; get input
- ⓪(TST abort
- ⓪(BNE FindEnd ; ESC -> abort
- ⓪(TST accept
- ⓪(BNE FindEnd ; F1 -> load
- ⓪(MOVE.B ch,D0
- ⓪(CMPI.B #EnterKey,D0
- ⓪(BEQ FindEnd
- ⓪(JSR ShiftUp ; convert to capitals
- ⓪(CMPI.B #'Y',D0
- ⓪(BNE ContSearch
- ⓪"FindEnd
- ⓪(; User wants to load this def.-module
- ⓪(CLR continue(A6)
- ⓪"ContSearch
- ⓪(MOVE yx,d1
- ⓪(JSR GotoXYd1
- ⓪(MOVEQ #ClrEOLNchar,d0
- ⓪(JSR ChrOut
- ⓪(MOVEM.L (A7)+,A0/A2/A5
- ⓪(TST continue(A6)
- ⓪(RTS
- ⓪
- ⓪"searchStart
- ⓪(MOVE.L A4,-(A7)
- ⓪(MOVE.L A5,-(A7) ; save A5
- ⓪(LEA ShiftTab,A4
- ⓪(LEA NoCaseSen(PC),A5
- ⓪(TST.W findCase
- ⓪(BEQ StartSearch2 ; not case sensitive
- ⓪(LEA CaseSen(PC),A5
- ⓪"StartSearch2
- ⓪(LEA oldString,A2 ; A2 := pointer to oldString
- ⓪(CLR.L -(A7)
- ⓪(BSR CompFirst
- ⓪(ADDQ.L #4,A7
- ⓪(MOVE.L (A7)+,A5 ; restore A5
- ⓪(MOVE.L (A7)+,A4
- ⓪"END;
- ⓪"IF ~continue & ~abort THEN
- ⓪$modNameFound:= first;
- ⓪$oldString:= helpString;
- ⓪$defFound:= TRUE
- ⓪"END;
- ⓪"returnVal:= continue
- ⓪ END Process;
- ⓪
- ⓪ PROCEDURE ProcessDefFile (defFile0: File; size0: LONGCARD): BOOLEAN;
- ⓪"VAR exc:Exception;
- ⓪"BEGIN
- ⓪$defFile:= defFile0;
- ⓪$size:= size0;
- ⓪$Call (Process, exc);
- ⓪$RETURN returnVal
- ⓪"END ProcessDefFile;
- ⓪
- ⓪ (*$L+*)
- ⓪ PROCEDURE ProcessDefFile1 (REF path : ARRAY OF CHAR; entry : DirEntry): BOOLEAN;
- ⓪"VAR name: ARRAY [0..139] OF CHAR;
- ⓪&f: File;
- ⓪&cont: BOOLEAN;
- ⓪"BEGIN
- ⓪$Assign (path, name, success);
- ⓪$Append (entry.name, name, success);
- ⓪$Open (f, name, readOnly);
- ⓪$cont:= ProcessDefFile (f, entry.size);
- ⓪$IF defFound THEN Assign (entry.name, filename, success) END;
- ⓪$Close (f);
- ⓪$RETURN cont
- ⓪"END ProcessDefFile1;
- ⓪
- ⓪ (*$L+*)
- ⓪ PROCEDURE ProcessDefFile2 (entry : LibEntry) : BOOLEAN;
- ⓪"VAR cont: BOOLEAN;
- ⓪"BEGIN
- ⓪$Seek (DefLibFile.f, entry.start, fromBegin);
- ⓪$cont:= ProcessDefFile (DefLibFile.f, entry.size);
- ⓪$IF defFound THEN Assign (entry.name, filename, success) END;
- ⓪$RETURN cont
- ⓪"END ProcessDefFile2;
- ⓪
- ⓪ (*$L+*)
- ⓪ PROCEDURE FindDefinition;
- ⓪
- ⓪ VAR
- ⓪(Entry : PathEntry;
- ⓪(wild : ARRAY [1..141] OF CHAR;
- ⓪(b2, success : BOOLEAN;
- ⓪(result : INTEGER;
- ⓪
- ⓪ BEGIN
- ⓪"IF (bufferL-ptrEnd<1500L) THEN
- ⓪$PutCmd('Not enough memory for this function'); Bell; ErrorWait; RETURN
- ⓪"END;
- ⓪"(* determine identifier to be searched *)
- ⓪"ASSEMBLER
- ⓪(; code is copied from procedure look and modified
- ⓪(move.l ptr,a0
- ⓪ fndna cmpi.b #DLEchar,-2(a0) ; is it start of line ?
- ⓪(beq Lookit ; yes -> start of word found
- ⓪(move.b -1(a0),d0 ; get previous character
- ⓪(beq Lookit ; if it's zero -> start of word found
- ⓪(jsr AlphaNum
- ⓪(bne Lookit ; if it's no alphanum. -> start found
- ⓪(subq.l #1,a0 ; search backwards
- ⓪(bra fndna
- ⓪ Lookit
- ⓪(; now copy whole word into oldString
- ⓪(lea oldString,A1 ; A1 := pointer to oldString
- ⓪(moveq #0,d6 ; length of copied word
- ⓪ Looklp move.b (a0)+,d0 ; get one char
- ⓪(move.b d0,d1 ; save char
- ⓪(jsr AlphaNum ;d1 bleibt erhalten
- ⓪(bne ex ; if it's not alphanum. -> word copied
- ⓪(move.b d1,0(A1,d6.w) ; put char
- ⓪(clr.b 1(A1,d6.w) ; clear next byte
- ⓪(addq.b #1,d6 ; inc. length
- ⓪(cmpi #79,d6
- ⓪(bcs Looklp ; repeat until 80 characters copied
- ⓪(subq.b #1,d6 ; dec. length
- ⓪ ex tst.b d6
- ⓪(beq.l noLook ; if length = 0 -> no search
- ⓪"END;
- ⓪"success:= findCase;
- ⓪"b2:= findWord;
- ⓪"OpenTextFrame;
- ⓪"findCase:= success;
- ⓪"findWord:= b2;
- ⓪"(* all memory between ptrEnd and bufferL can now be used *)
- ⓪"defFound:= FALSE;
- ⓪"
- ⓪"(* Query Def-Libfile *)
- ⓪"Assign (DefLibName, wild, success);
- ⓪"ReplaceHome (wild);
- ⓪"OpenLib (DefLibFile, wild, result);
- ⓪"IF result >= 0 THEN
- ⓪$LibQuery (DefLibFile, ProcessDefFile2, result);
- ⓪$CloseLib (DefLibFile)
- ⓪"END;
- ⓪"
- ⓪"(* Query normal .DEF files *)
- ⓪"IF NOT defFound THEN
- ⓪$ResetList (DefPaths);
- ⓪$LOOP
- ⓪&Entry:= NextEntry (DefPaths);
- ⓪&IF (Entry = NIL) OR defFound OR abort THEN EXIT END;
- ⓪&(* Process Entry *)
- ⓪&Concat (Entry^, '*.', wild, success);
- ⓪&Append (DefSfx, wild, success);
- ⓪&ReplaceHome (wild);
- ⓪&DirQuery (wild, FileAttrSet{}, ProcessDefFile1, result);
- ⓪$END;
- ⓪"END;
- ⓪
- ⓪"IF defFound THEN
- ⓪$ASSEMBLER
- ⓪(; change extension from .def to .d
- ⓪(LEA filename,A0 ; A0 := pointer to filename
- ⓪"TestOneChar
- ⓪(MOVE.B (A0)+,D0 ; get one char from name
- ⓪(CMPI.B #'.',D0
- ⓪(BNE TestOneChar ; repeat until '.' found
- ⓪(CLR.B 1(A0) ; terminate string after 'D'
- ⓪$END;
- ⓪$Write(ClrScrnchar);
- ⓪$SearchFile (filename,SrcPaths,fromStart,success,filename); (* Search
- ⓪csource *)
- ⓪$success:= findCase;
- ⓪$Open (f,filename,readOnly);
- ⓪$IOResult:=State(f);
- ⓪$IF SuccessFull(13) THEN
- ⓪&WriteString('Reading ');WriteString(filename);WriteLn;
- ⓪&flen:= FileSize(f);
- ⓪&ReadText
- ⓪$END;
- ⓪$findCase:= success;
- ⓪$IF IOResult#0 THEN
- ⓪&CloseTextFrame;
- ⓪&cmdFlag:= FALSE;
- ⓪&ScreenOut
- ⓪$ELSE
- ⓪&(* file is read. Now set Cursor *)
- ⓪&ScreenOut;
- ⓪&IF NOT modNameFound THEN
- ⓪(findWord:= TRUE;
- ⓪(findSame:= TRUE;
- ⓪(findCase:= TRUE;
- ⓪(Find
- ⓪&END
- ⓪$END
- ⓪"ELSE
- ⓪$(* Kein File gefunden *)
- ⓪$CloseTextFrame;
- ⓪$ScreenOut;
- ⓪$cmdFlag:=false;
- ⓪"END;
- ⓪"ASSEMBLER
- ⓪ noLook
- ⓪"END;
- ⓪ END FindDefinition;
- ⓪ *)
- ⓪
- ⓪ (*$L+*)
- ⓪ (*$? mayCallCompiler:
- ⓪ PROCEDURE callCompiler;
- ⓪"VAR ok: BOOLEAN; ex: INTEGER; msg: ARRAY [0..125] OF CHAR;
- ⓪&res: LoaderResults; l, l2: LONGINT;
- ⓪&ad: ADDRESS; tim, dat: CARDINAL; p: POINTER TO CHAR;
- ⓪&oldSize: LONGCARD; str: Strings.String;
- ⓪"BEGIN
- ⓪$(*
- ⓪%* Puffer bis auf 1000 Byte freien Rest verkleinern
- ⓪%*)
- ⓪$l:= LONGINT (bufferH-ptrEnd-1000L); (* Länge des freien Puffers *)
- ⓪$IF l>0L THEN
- ⓪&IF NOT FullStorBaseAccess () THEN
- ⓪((* wenn kein Vergrößern des Speichers am Ende möglich,
- ⓪)* dann geben wir hier nur 2/3 des noch freien Speichers frei. *)
- ⓪(l2:= AllAvail();
- ⓪(IF l2 >= 2 * l THEN
- ⓪*l:= 0
- ⓪(ELSIF l2 >= l THEN
- ⓪*l:= l DIV 3;
- ⓪(ELSE
- ⓪*l:= l - l DIV 3;
- ⓪(END
- ⓪&END;
- ⓪&IF l > 0 THEN
- ⓪(IF ODD (l) THEN DEC (l) END;
- ⓪(DEALLOCATE (bufferStart, l);
- ⓪(bufferH:= bufferStart + MemSize (bufferStart);
- ⓪(ASSEMBLER
- ⓪*MOVE.L bufferH,D0
- ⓪*BCLR #0,D0
- ⓪*MOVE.L D0,A0
- ⓪*CLR.L -(A0)
- ⓪*CLR.L -(A0)
- ⓪*MOVE.L A0,bufferH
- ⓪*MOVE.L A0,bufferL
- ⓪(END;
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$ScanMode:= FALSE;
- ⓪$IF autoIncVer & NOT saved THEN
- ⓪&str:= IncrementVersion ()
- ⓪$ELSE
- ⓪&str:= ''
- ⓪$END;
- ⓪$PutCmd (conc ("Compiling... ", str));
- ⓪$p:= ptrEnd;
- ⓪$p^:= 3C;
- ⓪$
- ⓪$Concat (fileName, ' /Q /@', msg, ok);
- ⓪$Append (LHexToStr (ptrStart,0), msg, ok);
- ⓪$IF MainOutputPath[0] # 0C THEN
- ⓪&Append (' /O', msg, ok);
- ⓪&Append (MainOutputPath, msg, ok);
- ⓪$END;
- ⓪$IF CompilerArgs[0] # 0C THEN
- ⓪&Append (' ', msg, ok);
- ⓪&Append (CompilerArgs, msg, ok);
- ⓪$END;
- ⓪$tim:= DirTime (); dat:= Today ();
- ⓪$oldSize:= DefaultStackSize;
- ⓪$DefaultStackSize:= 16000;
- ⓪$CallModule (CompilerParm.name, StdPaths, msg, NIL, ex, str, res);
- ⓪$DefaultStackSize:= oldSize;
- ⓪$p^:= 0C;
- ⓪$IF Inconsistent () THEN
- ⓪&Bell; PutCmd ("Memory management is damaged! Save text with backup and reboot!"); ErrorWait
- ⓪$END;
- ⓪$IF res # noError THEN
- ⓪&Bell; PutCmd (conc ("Compiler couldn't be executed: ", str)); ErrorWait
- ⓪$ELSE
- ⓪&CASE ex OF
- ⓪(0: restoreFileDT:= TRUE; fileD:= dat; fileT:= tim;
- ⓪-ScreenOut|
- ⓪(2,3: Assign (ErrorMsg, ErrMsg, ok);
- ⓪-GotoLine (TextLine, TextCol-1);
- ⓪-tags['?']:= ptr;
- ⓪-ErrorPos:= ptr-ptrStart;
- ⓪-Bell; PutCmd(ErrMsg); ErrorWait |
- ⓪(4: ScreenOut; Bell; PutCmd('Include files are not allowed here!'); ErrorWait |
- ⓪&ELSE
- ⓪-ScreenOut; Bell; GetStateMsg (ex, str); PutCmd(str); ErrorWait
- ⓪&END
- ⓪$END;
- ⓪$ad:= bufferStart;
- ⓪$IF (l>0L) & FullStorBaseAccess () THEN
- ⓪&Enlarge (bufferStart, l, ok);
- ⓪&IF ~ok THEN
- ⓪(bufferStart:= ad (* wird anscheinend vom Storage zerstört?! *);
- ⓪(Bell;
- ⓪(PutCmd ("Editor's buffer is nearly full. You'd better save the text and quit/reboot!");
- ⓪(ErrorWait
- ⓪&ELSE
- ⓪(bufferH:= bufferStart + MemSize (bufferStart);
- ⓪(ASSEMBLER
- ⓪*MOVE.L bufferH,D0
- ⓪*LSR #1,D0
- ⓪*LSL #1,D0
- ⓪*MOVE.L D0,A0
- ⓪*CLR.L -(A0)
- ⓪*CLR.L -(A0)
- ⓪*MOVE.L A0,bufferH
- ⓪*MOVE.L A0,bufferL
- ⓪(END
- ⓪&END
- ⓪$END;
- ⓪"END callCompiler;
- ⓪ *)
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE Supexec ( p : PROC );
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVE.L -(A3),-(A7)
- ⓪(MOVE #38,-(A7)
- ⓪(TRAP #14
- ⓪(ADDQ.L #6,A7
- ⓪ END
- ⓪ END Supexec;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE Setrez (r: CARDINAL);
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVE.W -(A3),-(A7)
- ⓪(MOVEQ #-1,D0
- ⓪(MOVE.L D0,-(A7)
- ⓪(MOVE.L D0,-(A7)
- ⓪(MOVE #5,-(A7)
- ⓪(TRAP #14
- ⓪(ADDA.W #12,A7
- ⓪ END
- ⓪ END Setrez;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE Getrez (): CARDINAL;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(MOVE #4,-(A7)
- ⓪(TRAP #14
- ⓪(ADDQ.L #2,A7
- ⓪(MOVE.W D0,(A3)+
- ⓪ END
- ⓪ END Getrez;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE SetColor (n,c: CARDINAL): CARDINAL;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L -(A3),-(A7)
- ⓪(MOVE #7,-(A7)
- ⓪(TRAP #14
- ⓪(ADDQ.L #6,A7
- ⓪(MOVE.W D0,(A3)+
- ⓪$END;
- ⓪"END SetColor;
- ⓪"
- ⓪ (*$L-*)
- ⓪ PROCEDURE Wvbl;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(LEA $FF8200,A1
- ⓪(MOVEP.W 1(A1),D0
- ⓪(NOP
- ⓪(NOP
- ⓪ W1 MOVEP.W 5(A1),D1
- ⓪(CMP.W D0,D1
- ⓪(BEQ W1
- ⓪ W2 MOVEP.W 5(A1),D1
- ⓪(CMP.W D0,D1
- ⓪(BNE W2
- ⓪ END
- ⓪ END Wvbl;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE initFont8_8;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L pFont8_8,A0
- ⓪(; Daten in Font-Puffer kopieren, dabei umverteilen
- ⓪(LEA fontbuffer,A1
- ⓪(MOVE.W #255,D0
- ⓪ l: MOVEQ #7,D1
- ⓪(CLR D2
- ⓪ m: MOVE.B 0(A0,D2.W),(A1)+
- ⓪(ADDI.W #$100,D2
- ⓪(DBRA D1,m
- ⓪(ADDQ.L #1,A0
- ⓪(DBRA D0,l
- ⓪$END;
- ⓪"END initFont8_8;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE initFont8_16;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.L pFont8_16,A0
- ⓪(LEA fontbuffer,A1
- ⓪(MOVE.W #255,D0
- ⓪ n: MOVEQ #15,D1
- ⓪(CLR D2
- ⓪ o: MOVE.B 0(A0,D2.W),(A1)+
- ⓪(ADDI.W #$100,D2
- ⓪(DBRA D1,o
- ⓪(ADDQ.L #1,A0
- ⓪(DBRA D0,n
- ⓪$END;
- ⓪"END initFont8_16;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE GetpScreen;
- ⓪ BEGIN
- ⓪"ASSEMBLER
- ⓪(; zuerst dafür sorgen, daß wir die shift-bits bei bconin bekommen.
- ⓪(MOVE.B $484,oldconterm
- ⓪(BSET #3,$484
- ⓪(MOVE.L $44E,pScreen
- ⓪
- ⓪((*
- ⓪(MOVE SR,-(A7)
- ⓪(MOVE #$2700,SR
- ⓪(JSR Wvbl
- ⓪(CLR D1
- ⓪(LEA $FF8260,A2
- ⓪(TST isTT ; bei TT immer auf 640*400
- ⓪(BEQ noTT
- ⓪(ADDQ.L #2,A2
- ⓪ noTT MOVE.L A2,ColorReg
- ⓪(MOVE.B (A2),D0
- ⓪(ANDI #7,D0
- ⓪(MOVE.B D0,oldShiftMode
- ⓪(TST isTT ; bei TT immer auf 640*400
- ⓪(BNE doTT
- ⓪(BTST #1,D0
- ⓪(SEQ D1
- ⓪(MOVE.W D1,color
- ⓪(BEQ mono
- ⓪(BTST #0,D0
- ⓪(SNE D1
- ⓪(MOVE.W D1,UseGEM ; falls Auflösung gewechselt, kein GEM verw.
- ⓪(BSET #0,$FF8260
- ⓪(JSR initFont8_8
- ⓪(BRA ende
- ⓪ doTT CMPI.B #2,oldShiftMode
- ⓪(BEQ mono
- ⓪(CLR UseGEM ; falls Auflösung gewechselt, kein GEM verw.
- ⓪(MOVE.B (A2),D0
- ⓪(ANDI #$F8,D0
- ⓪(OR.B #2,D0
- ⓪(MOVE.B D0,(A2)
- ⓪(BRA mono2
- ⓪ mono: MOVE #1,UseGEM
- ⓪(; Daten in Font-Puffer kopieren, dabei umverteilen
- ⓪ mono2 JSR initFont8_16
- ⓪ ende MOVE (A7)+,SR
- ⓪(*)
- ⓪"END
- ⓪ END GetpScreen;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE ResetpScreen;
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪((*
- ⓪(; auf VBL warten
- ⓪(MOVE SR,-(A7)
- ⓪(MOVE #$2700,SR
- ⓪(JSR Wvbl
- ⓪(MOVE.L ColorReg,A2
- ⓪(MOVE.B (A2),D0
- ⓪(ANDI #$F8,D0
- ⓪(OR.B oldShiftMode,D0
- ⓪(MOVE.B D0,(A2)
- ⓪(MOVE (A7)+,SR
- ⓪(*)
- ⓪(MOVE.B oldconterm,$484
- ⓪ END
- ⓪ END ResetpScreen;
- ⓪
- ⓪ (*$L+*)
- ⓪
- ⓪ PROCEDURE OscanIs () : BOOLEAN;
- ⓪"VAR oScan : CARDINAL;
- ⓪ BEGIN
- ⓪"ASSEMBLER
- ⓪$MOVE.W #4200,-(SP)
- ⓪$TRAP #14
- ⓪$ADDQ.L #2,SP
- ⓪$MOVE.W D0,oScan(A6)
- ⓪"END;
- ⓪"RETURN oScan # 4200
- ⓪ END OscanIs;
- ⓪
- ⓪ PROCEDURE OscanSwitch (mode : INTEGER) : INTEGER;
- ⓪"VAR oScanMode : INTEGER;
- ⓪ BEGIN
- ⓪"ASSEMBLER
- ⓪$MOVE.W mode(A6),-(SP)
- ⓪$MOVE.W #4206,-(SP)
- ⓪$TRAP #14
- ⓪$ADDQ.L #4,SP
- ⓪$MOVE.W D0,oScanMode(A6)
- ⓪"END;
- ⓪"RETURN oScanMode
- ⓪ END OscanSwitch;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE EsetShift (shftMode: WORD): CARDINAL;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE.W -(A3),-(A7)
- ⓪(MOVE #80,-(A7)
- ⓪(TRAP #14
- ⓪(ADDQ.L #4,A7
- ⓪(MOVE.W D0,(A3)+
- ⓪$END
- ⓪"END EsetShift;
- ⓪
- ⓪ (*$L-*)
- ⓪ PROCEDURE EgetShift (): CARDINAL;
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE #81,-(A7)
- ⓪(TRAP #14
- ⓪(ADDQ.L #2,A7
- ⓪(MOVE.W D0,(A3)+
- ⓪$END
- ⓪"END EgetShift;
- ⓪
- ⓪
- ⓪ TABLE.B ColdStart: 1;
- ⓪
- ⓪ VAR oldOscan : INTEGER;
- ⓪
- ⓪
- ⓪ (*$L+,A+*)
- ⓪ PROCEDURE InitScreen;
- ⓪"VAR i,newShiftMode: CARDINAL;
- ⓪"BEGIN
- ⓪$isTT:= Machine() >= 2;
- ⓪$IF Oscanis() THEN oldOscan:= Oscanswitch (0); END;
- ⓪$UseGem:= TRUE;
- ⓪$color:= FALSE;
- ⓪$rez_changed:= FALSE;
- ⓪$IF ~isTT THEN
- ⓪&oldShiftMode:= Getrez ();
- ⓪&IF oldShiftMode # 2 THEN
- ⓪(rez_changed:= TRUE;
- ⓪(Setrez (1);
- ⓪(oldColor[0]:= SetColor (0, $777);
- ⓪(FOR i:= 1 TO 3 DO oldColor[i]:= SetColor (i, 0) END;
- ⓪(color:= TRUE
- ⓪&END;
- ⓪$ELSE
- ⓪&newShiftMode:= EgetShift ();
- ⓪&ASSEMBLER
- ⓪+MOVE.W newShiftMode(A6),D0
- ⓪+ANDI #$F0FF,D0
- ⓪+ORI #$0200,D0 ; 640*400 setzen
- ⓪+MOVE.W D0,newShiftMode(A6)
- ⓪&END;
- ⓪&oldShiftMode:= EsetShift (newShiftMode);
- ⓪$END;
- ⓪$ASSEMBLER
- ⓪(;*** ^ auf Fontdaten holen:
- ⓪(DC.W $A000
- ⓪(MOVE.L (A1)+,A0 ; f. System-Font 6*6 (Icon)
- ⓪(MOVE.L (A1)+,A0 ; f. System-Font 8*8 (Farbe)
- ⓪(LEA pFont8_8,A2
- ⓪(MOVE.L 76(A0),(A2)
- ⓪(MOVE.L (A1)+,A0 ; f. System-Font 8*16 (S/W)
- ⓪(LEA pFont8_16,A2
- ⓪(MOVE.L 76(A0),(A2)
- ⓪$END;
- ⓪$IF color THEN initFont8_8 ELSE initFont8_16 END;
- ⓪$Supexec (GetpScreen);
- ⓪"END InitScreen;
- ⓪
- ⓪
- ⓪ (*$L+*)
- ⓪
- ⓪ PROCEDURE InitEditor; (* Initialisierung der Pointer und Flags *)
- ⓪"VAR bufferLaenge: LONGINT; v, r: CARDINAL; d: Date;
- ⓪ BEGIN
- ⓪"PointsPerChar:= 8;
- ⓪"IF color THEN
- ⓪$LinesPerChar:= 8
- ⓪"ELSE
- ⓪$LinesPerChar:= 16
- ⓪"END;
- ⓪"allowed:=ASCII{' '..255C};
- ⓪"bufferLaenge:=(INT(MemAvail())-32000) * 2 DIV 3;
- ⓪"IF bufferLaenge > 0 THEN
- ⓪$Allocate(bufferStart,bufferLaenge);
- ⓪"END;
- ⓪"IF bufferStart=NIL THEN WriteString('Not enough memory'); HALT END;
- ⓪"ASSEMBLER
- ⓪*move.l bufferStart,a0
- ⓪*move.l a0,d0
- ⓪*clr.l (a0)+
- ⓪*move.l a0,ptrStart
- ⓪*move.b #DLEchar,(a0)+
- ⓪*move.b #DLEoffset,(a0)+
- ⓪*move.l a0,ptr
- ⓪*move.l a0,lastPtr
- ⓪*clr (a0)+
- ⓪*move.l a0,ptrEnd
- ⓪*clr.l (a0)+
- ⓪*add.l bufferLaenge(A6),d0
- ⓪*bclr.l #0,d0
- ⓪*move.l d0,a0
- ⓪*clr.l -(a0)
- ⓪*clr.l -(a0)
- ⓪*move.l a0,bufferL
- ⓪*move.l a0,bufferH
- ⓪*moveq #25,d0
- ⓪*move d0,lines
- ⓪*subq #1,d0
- ⓪*move d0,maxLine
- ⓪*moveq #80,d0
- ⓪*move d0,cols
- ⓪*subq #1,d0
- ⓪*move.b d0,maxCol
- ⓪*subq #1,d0
- ⓪*move.b d0,maxColM1
- ⓪*
- ⓪*clr exitCode
- ⓪*clr endOfEd
- ⓪*clr filesInMem
- ⓪*clr cmdFlag
- ⓪*clr delFlag
- ⓪*clr insFlag
- ⓪*jsr ResetTextOptions
- ⓪*addq #1,sessions
- ⓪*clr.l total
- ⓪*jsr Prepare
- ⓪*move.l d0,startupTime
- ⓪*clr.b oldString
- ⓪*clr.b newString
- ⓪*move #30,countDefault
- ⓪*CLR.L ShortKeyPtr
- ⓪*CLR Inserting
- ⓪*MOVE #1,errorNr
- ⓪
- ⓪*; Warmstart-Init geht nur, wenn die betroffenen Variablen als
- ⓪*; TABLEs definiert werden (so auch die Find/Rpl-Strings).
- ⓪*; tst.b ColdStart
- ⓪*; beq.l warm
- ⓪*; clr.b ColdStart
- ⓪
- ⓪*move #1,sessions
- ⓪*clr cmdMode
- ⓪*clr tabMode
- ⓪*clr.l keepTime
- ⓪"warm
- ⓪"END
- ⓪ END InitEditor;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE StopEditor;
- ⓪ VAR i: CARDINAL;
- ⓪ BEGIN
- ⓪"DeAllocate(bufferStart,0L);
- ⓪"Finish;
- ⓪"(*
- ⓪"SetNewDesk (NIL, Root);
- ⓪"ForceDeskRedraw;
- ⓪"*)
- ⓪"Supexec (ResetpScreen);
- ⓪"IF isTT THEN
- ⓪$oldShiftMode:= EsetShift (oldShiftMode);
- ⓪"ELSE
- ⓪$IF rez_changed THEN Setrez (oldShiftMode) END;
- ⓪$IF color THEN
- ⓪&FOR i:= 0 TO 3 DO dumCard:= SetColor (i, oldColor[i]) END;
- ⓪$END;
- ⓪"END;
- ⓪"IF Oscanis() THEN oldOscan:= Oscanswitch (oldOscan) END;
- ⓪"SelectFile:= FileSelectProc (oldSelect);
- ⓪"GrafMouse (mouseOn, NIL);
- ⓪"MouseControl (FALSE);
- ⓪"ForceDeskRedraw;
- ⓪"ExitGem (hdl);
- ⓪ END StopEditor;
- ⓪
- ⓪
- ⓪ VAR first: boolean; argv:ARRAY [0..4] OF PtrArgStr;
- ⓪$argc,strpos:CARDINAL; nullCh:CHAR;
- ⓪
- ⓪
- ⓪ (*$l-*)
- ⓪ PROCEDURE Right1; (* ohne DOWN am Zeilen-Ende *)
- ⓪ BEGIN
- ⓪ ASSEMBLER
- ⓪(;clr forceTab
- ⓪(move.l ptr,a0
- ⓪ again move.b (a0)+,d0
- ⓪(beq donix
- ⓪(cmpi.b #CRchar,d0
- ⓪(beq donix
- ⓪(cmpi.b #$20,d0
- ⓪(bcs again
- ⓪(move.l a0,ptr
- ⓪(move ptrY,d1
- ⓪(move.b ptrX,d1
- ⓪(cmp.b maxCol,d1
- ⓪(beq donix
- ⓪(addq.b #1,d1
- ⓪(jmp GotoXYd1
- ⓪ donix
- ⓪ END
- ⓪ END Right1;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE ShowCmdLine;
- ⓪"BEGIN
- ⓪$CASE cmdMode OF
- ⓪&0: PutCmdOrTab(
- ⓪ 'Edit: C(py D(el E(nv F(ind I(ns J(mp N(ew Q(uit R(epl T(ag X(chg Z(ap /'
- ⓪(+Version+'/')|
- ⓪&1: PutCmdOrTab(
- ⓪ 'Edit: A(djust B(reak G(lue H(ardcopy L(ook M(id O(pp P(age /'
- ⓪(+Version+'/')|
- ⓪&2: PutCmdOrTab(
- ⓪ 'Edit: ?:info K:show tabs F2:set tab F3/F4: Open/Close text frame /'
- ⓪(+Version+'/')|
- ⓪&3: PutCmdOrTab(
- ⓪ 'Edit: F5: Compile F6: Look for exported identifier /'
- ⓪(+Version+'/')|
- ⓪&4: PutCmdOrTab(
- ⓪ 'Edit: Find/Replace/Look prefix: S(ame V(erify W(ord /'
- ⓪(+Version+'/')|
- ⓪$END;
- ⓪$cmdFlag:=true
- ⓪"END ShowCmdLine;
- ⓪
- ⓪ (*$l+*)
- ⓪ PROCEDURE WaitForKey;
- ⓪
- ⓪"VAR maus: BOOLEAN;
- ⓪
- ⓪"PROCEDURE CursorsOn;
- ⓪$BEGIN
- ⓪&Write (CursorOnChar);
- ⓪&IF UseGem AND NOT maus THEN
- ⓪(GrafMouse (arrow, NIL);
- ⓪(GrafMouse (mouseOn, NIL);
- ⓪(maus:= TRUE;
- ⓪&END;
- ⓪$END CursorsOn;
- ⓪
- ⓪"PROCEDURE CursorsOff;
- ⓪$BEGIN
- ⓪&IF UseGem & maus THEN
- ⓪(GrafMouse (mouseOff, NIL);
- ⓪(maus:= FALSE;
- ⓪&END;
- ⓪&ScrnCurOff;
- ⓪$END CursorsOff;
- ⓪
- ⓪"VAR
- ⓪$i, mousePtrX, mousePtrY: CARDINAL;
- ⓪
- ⓪"BEGIN
- ⓪$maus:= FALSE;
- ⓪$CursorsOn;
- ⓪$IF CmdLineAway(TRUE) THEN
- ⓪&CursorsOff;
- ⓪&ShowCmdLine;
- ⓪&CursorsOn;
- ⓪$END;
- ⓪$LOOP
- ⓪&(* MAUS ist hier an *)
- ⓪&IF Keypressed() THEN
- ⓪(IF UseGem THEN GrafMouse (mouseOff, NIL); maus:= FALSE END;
- ⓪(ReadUpCh;
- ⓪(EXIT (*Taste wurde gedrückt, Byte in Ch*)
- ⓪&ELSE (*Hü*)
- ⓪(GetMouseState(dev,MousePoint, buttons); (*hält Ablauf nicht an *)
- ⓪(IF (msbut1 IN buttons) THEN
- ⓪*IF Mousepoint.y <= (LinesPerChar DIV 2) then
- ⓪,ch:= UpKey;
- ⓪,EXIT
- ⓪*ElSIF Mousepoint.y > (INTEGER(Lines)*LinesPerChar-2) THEN
- ⓪,ch:= DownKey;
- ⓪,EXIT
- ⓪*ELSIF (Mousepoint.y >= LinesPerChar)
- ⓪*AND (Mousepoint.y < (INTEGER(Lines)*LinesPerChar-2)) THEN
- ⓪,(*Maustaste gedrückt und nicht Statuszeile*)
- ⓪,CursorsOff;
- ⓪,Ptr:=ScreenTop1();
- ⓪,ptrLine:= 1;
- ⓪,ASSEMBLER
- ⓪0MOVE #$0100,D1
- ⓪0JSR GotoXYD1 ; x=0, y=1
- ⓪,END;
- ⓪,mousePtrX := Mousepoint.x DIV PointsPerChar; (* 0-79*)
- ⓪,mousePtrY := Mousepoint.y DIV LinesPerChar; (* 1-24, Cmd-Zeile=0 *)
- ⓪,ch:= downKey;
- ⓪,for i:=1 to mousePtrY-1 do Down end;
- ⓪,GotoSOln;
- ⓪,For i:=CursorX+1 to mousePtrX do Right1 end;
- ⓪,ClrKbdbuffer;
- ⓪,CursorsOn;
- ⓪*END;
- ⓪(END (*if Maus gedrückt*)
- ⓪&END (*IF Key ELSE mouse*)
- ⓪$END (*LOOP, keine Taste gedrückt*);
- ⓪$CursorsOff;
- ⓪"END WaitForKey;
- ⓪
- ⓪ (*$l+*)
- ⓪ BEGIN (* of Editor *)
- ⓪"(* Screen löschen
- ⓪$Conout (CHR(27)); Conout ('E');
- ⓪"*)
- ⓪"InitScreen;
- ⓪"oldSelect:= ADDRESS (SelectFile);
- ⓪"IF NOT UseGem THEN SelectFile:= NoSelect; END;
- ⓪"InitGem(RC,dev,success);
- ⓪"if success then hdl:= CurrGemHandle() end;
- ⓪"HomePath:= ShellPath;
- ⓪"GrafMouse (mouseOff, NIL);
- ⓪"MouseControl (TRUE);
- ⓪"MenuBar (NIL, FALSE);
- ⓪"InitEditor;
- ⓪"Write(ClrScrnChar);
- ⓪"writeTitle;
- ⓪"nullCh:=0C;
- ⓪"InitArgCV (argc,argv);
- ⓪"ErrorPos:=0L;
- ⓪"GetPath(Path1); FName1:= '';
- ⓪"first := TRUE;
- ⓪"REPEAT
- ⓪$IF first & (length(ArgV[1]^) # 0) THEN
- ⓪&Assign (ArgV[1]^,filename,strok);
- ⓪&splitpath(filename,Path1,FName1);
- ⓪&IF Path1[0] = 0C THEN
- ⓪(GetPath (Path1)
- ⓪&ELSE
- ⓪(Append ('*.*', Path1, strok)
- ⓪&END
- ⓪$ELSE
- ⓪&(* writestring('Edit which file? ');
- ⓪)filename := '';
- ⓪)readstring(filename);
- ⓪'*)
- ⓪&filename:=getFilefromBox('Edit which file?');
- ⓪$END;
- ⓪$fnOK:=ChkName(fileName);
- ⓪$IF fnOK THEN
- ⓪&SearchFile (filename,SrcPaths,fromStart,strok,filename);
- ⓪&Open (f,filename,readonly);
- ⓪&IOResult:= State(f);
- ⓪&IF IOResult >= 0 THEN
- ⓪(UpdatePath (filename);
- ⓪(writeLn;
- ⓪(WriteString('Reading '); WriteString(fileName); WriteLn;
- ⓪(flen:= FileSize(f);
- ⓪(ReadText
- ⓪&ELSE
- ⓪(WriteString ('File not found !');
- ⓪(ErrorWait
- ⓪&END
- ⓪$END;
- ⓪$first := FALSE;
- ⓪"UNTIL NOT fnOK OR (IOResult>=0);
- ⓪"strpos:=0;
- ⓪"ErrLine:= StrToLCard (ArgV[2]^,strpos,strok);
- ⓪"IF fnOK & (ErrLine#0L) THEN
- ⓪$strpos:=0;
- ⓪$GotoLine (ErrLine, StrToCard (ArgV[3]^,strpos,strok));
- ⓪$tags['?']:= ptr;
- ⓪$ErrorPos:= ptr-ptrStart;
- ⓪$Assign (argv[4]^,ErrMsg,strok);
- ⓪$PutCmd(ErrMsg); ErrorWait
- ⓪"ELSE
- ⓪$jumpPtr (tags[';']);
- ⓪$tags[';']:= ptrEnd
- ⓪"END;
- ⓪"REPEAT (*2*)
- ⓪$WaitForKey; (* Mausaktionen werden allein in der Routine behandelt, *)
- ⓪0(* außerhalb dieser Routine ist die Maus immer aus *)
- ⓪$IF Rptfx10() OR DirKey() THEN
- ⓪$ELSIF ch='/' THEN Negate(infinite)
- ⓪$ELSIF ch='S' THEN Negate(findSame)
- ⓪$ELSIF ch='V' THEN Negate(verify)
- ⓪$ELSIF ch='W' THEN Negate(findWord)
- ⓪$ELSE
- ⓪&CASE ch OF
- ⓪&'A': Adjust |
- ⓪&'C': CopyText |
- ⓪&'D': DelMode |
- ⓪&'E': Environment |
- ⓪&'F': Find |
- ⓪&'G': Glue |
- ⓪&'H': HardCopy |
- ⓪&'I': Inserting := True; InsMode; Inserting := False |
- ⓪&'J': Jump |
- ⓪&'K': Negate(tabMode); cmdFlag:=false |
- ⓪&'L': Look |
- ⓪&'M': CenterScreen |
- ⓪&'N': NewFile |
- ⓪&'O': Page(true) |
- ⓪&'P': Page(false) |
- ⓪&'Q': QuitEditor |
- ⓪&'R': FReplace |
- ⓪&'T': SetTag |
- ⓪&'X': Exchange |
- ⓪&'Y': ASSEMBLER move.l rptf,d0 beq no move d0,countDefault !no END |
- ⓪&'Z': Zap|
- ⓪&ELSE
- ⓪(IF ch=BreakKey THEN Break
- ⓪((*$? mayCallCompiler:
- ⓪(ELSIF ch=FindDefKey THEN FindDefinition
- ⓪(*)
- ⓪(ELSIF ch=HomeKey THEN CenterScreen
- ⓪(ELSIF ch=INSKey THEN Inserting := True; InsMode; Inserting := False
- ⓪(ELSIF ch=DELKey THEN DelMode
- ⓪(ELSIF (ch=OpenFrameKey) THEN OpenTextFrame
- ⓪(ELSIF (ch=CloseFrameKey) THEN
- ⓪*CloseTextFrame;
- ⓪*cmdFlag:=false;
- ⓪*ScreenOut
- ⓪(ELSIF ch=Helpkey THEN
- ⓪*IF tabMode THEN tabMode:= FALSE ELSE cmdMode:= (cmdMode+1) MOD 5 END;
- ⓪*cmdFlag:= FALSE
- ⓪(ELSIF ch='?' THEN Info
- ⓪(ELSIF (ch=PageDownKey) OR (ch=PageUpKey) THEN Page(ch=PageUpKey)
- ⓪((*$? mayCallCompiler:
- ⓪*ELSIF ch=compileKey THEN callCompiler
- ⓪(*)
- ⓪(ELSE
- ⓪*RptfOK;
- ⓪*REPEAT
- ⓪,IF (ch=' ') OR (ch=rightKey) THEN Right
- ⓪,ELSIF ch=EOLNkey THEN GotoEOLN
- ⓪,ELSIF ch=SOLNkey THEN GotoSOLN
- ⓪,ELSIF (ch=BSkey) OR (ch=leftKey) THEN Left
- ⓪,ELSIF ch=wordLeftKey THEN WordLeft
- ⓪,ELSIF ch=wordRightKey THEN WordRight
- ⓪,ELSIF ch=TabRightKey THEN
- ⓪.REPEAT
- ⓪0Right
- ⓪.UNTIL (OnSOLn() AND KeyPressed()) OR (ptr>=ptrEnd-2L) OR TabSet()
- ⓪,ELSIF ch=TabLeftKey THEN
- ⓪.REPEAT
- ⓪0Left
- ⓪.UNTIL (OnSOLn() AND KeyPressed()) OR (ptr<=ptrStart) OR TabSet()
- ⓪,ELSIF ch=upKey THEN Up
- ⓪,ELSIF ch=downKey THEN Down
- ⓪,ELSIF ch=scrlUpKey THEN ScrollUp;
- ⓪,ELSIF ch=scrlDownKey THEN ScrollDown;
- ⓪,ELSIF ch=EnterKey THEN IF direction THEN Up ELSE Down END;
- ⓪,END;
- ⓪,DEC(rptf)
- ⓪*UNTIL (rptf=0L) OR KeyPressed()
- ⓪(END
- ⓪&END;
- ⓪&ASSEMBLER clr.l rptf clr findWord clr findSame clr infinite clr verify
- ⓪&END
- ⓪$END;
- ⓪"UNTIL endOfEd (*2*);
- ⓪"StopEditor;
- ⓪"TermProcess (exitCode)
- ⓪ END GEP_ED.
- ⓪ ə
- (* $FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$00007A4D$FFE597C0$000263E0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0$FFE597C0Ç$00007A4DT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$FFE406A8$00007AD7$FFE406A8$00007A62$00007A9C$FFE406A8$00007B10$00007A9C$00007A4D$00002A9C$00002BD3$00002BE3$00007AC2$00007E04$00007AC2$FFE406A8ñÇâ*)
-