home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TVXEDIT.PAS *)
- (* *)
- (* Editor mit erweitertem Menü + druckfähig *)
- (* (C) 1992 by Christian Ohr & DMV-Verlag *)
- (* (C) 1990 Borland international *)
- (* ------------------------------------------------------ *)
-
- {$R-,S-,I-,B-,D-,L-,V-,A+,F+,O+,X+}
- {$M 4096,8192,655360}
-
-
- PROGRAM TVXEdit;
-
-
- USES Crt, Dos, Objects, Drivers, Memory, Views, Menus,
- Dialogs, StdDlgG, MsgBoxG, App, Buffers, Editors,
- XViews, XMenus, XObjects, XDrivers, XDialogs,
- XGadgets, XMacro;
-
-
- CONST
- HeapSize = 32 * (1024 DIV 16); (* 32 kB Rest-Heap *)
-
- cmOpen = 100;
- cmNew = 101;
- cmChangeDir = 102;
- cmDosShell = 103;
- cmShowClip = 104;
- cmVideoMode = 105;
- cmPrint = 106;
- cmStoreDesktop = 107;
- cmLoadDesktop = 108;
- cmAbout = 109;
- cmIndent = 110;
- cmOvWrt = 111;
-
-
- TYPE
- pXEditWindow = ^tXEditWindow;
- tXEditWindow = OBJECT(tXWindow)
- Editor: pFileEditor;
- CONSTRUCTOR Init (VAR Bounds: tRect; FileName: FNameStr;
- ANumber: INTEGER);
- CONSTRUCTOR Load(VAR S: tStream);
- PROCEDURE Close; VIRTUAL;
- FUNCTION GetTitle (MaxSize: INTEGER): tTitleStr;
- VIRTUAL;
- PROCEDURE HandleEvent (VAR Event: tEvent); VIRTUAL;
- PROCEDURE InitMenuBar; VIRTUAL;
- PROCEDURE InitStatusLine; VIRTUAL;
- FUNCTION IsClipWindow: BOOLEAN;
- PROCEDURE Store (VAR S: tStream); VIRTUAL;
- END;
-
-
- pEditorApp = ^tEditorApp;
- tEditorApp = OBJECT(tMacroApplication)
- Buzzer: pBuzzer;
- CONSTRUCTOR Init;
- DESTRUCTOR Done; VIRTUAL;
- PROCEDURE HandleEvent(VAR Event: tEvent); VIRTUAL;
- PROCEDURE Idle; VIRTUAL;
- PROCEDURE InitMenuBar; VIRTUAL;
- PROCEDURE InitStatusLine; VIRTUAL;
- PROCEDURE LoadDesktop;
- PROCEDURE OutOfMemory; VIRTUAL;
- PROCEDURE StoreDesktop;
- END;
-
-
- CONST
- rXEditWindow: tStreamRec = (
- ObjType: 1600;
- VmtLink: Ofs(TypeOf(tXEditWindow)^);
- Load: @tXEditWindow.Load;
- Store: @tXEditWindow.Store
- );
-
- Check: STRING[2] = ' √';
-
-
- VAR
- EditorApp: tEditorApp;
- ClipWindow: pXEditWindow;
- PrnS: pPrintStream;
-
-
- FUNCTION CreateFindDialog: pDialog;
- VAR
- D: pDialog;
- Control: pView;
- R: tRect;
- BEGIN
- R.Assign(0, 0, 38, 12);
- D := New(pDialog, Init(R, 'Finden'));
- WITH D^ DO BEGIN
- Options := Options OR ofCentered;
-
- R.Assign(3, 3, 32, 4);
- Control := New(pInputLine, Init(R, 80));
- Insert(Control);
- R.Assign(2, 2, 15, 3);
- Insert(New(pLabel, Init(R, '~S~uchen nach', Control)));
- R.Assign(32, 3, 35, 4);
- Insert(New(pHistory, Init(R, pInputLine(Control), 10)));
-
- R.Assign(3, 5, 35, 7);
- Insert(New(pCheckBoxes, Init(R,
- NewSItem('~G~roß-/Kleinschreibung',
- NewSItem('~A~ls ~W~ort', NIL)))));
-
- R.Assign(13, 9, 23, 11);
- Insert(New(pButton, Init(R, 'O~K~', cmOk, bfDefault)));
- Inc(R.A.X, 12); Inc(R.B.X, 13);
- Insert(New(pButton, Init(R, 'Abbruch', cmCancel,
- bfNormal)));
-
- SelectNext(FALSE);
- END;
- CreateFindDialog := D;
- END;
-
-
- FUNCTION CreateReplaceDialog: pDialog;
- VAR
- D: pDialog;
- Control: pView;
- R: tRect;
- BEGIN
- R.Assign(0, 0, 40, 16);
- D := New(pDialog, Init(R, 'Ersetzen'));
- WITH D^ DO BEGIN
- Options := Options OR ofCentered;
-
- R.Assign(3, 3, 34, 4);
- Control := New(pInputLine, Init(R, 80));
- Insert(Control);
- R.Assign(2, 2, 15, 3);
- Insert(New(pLabel, Init(R, '~S~uchen nach', Control)));
- R.Assign(34, 3, 37, 4);
- Insert(New(pHistory, Init(R, pInputLine(Control), 10)));
-
- R.Assign(3, 6, 34, 7);
- Control := New(pInputLine, Init(R, 80));
- Insert(Control);
- R.Assign(2, 5, 12, 6);
- Insert(New(pLabel, Init(R,'~E~rsetzen durch',Control)));
- R.Assign(34, 6, 37, 7);
- Insert(New(pHistory, Init(R, pInputLine(Control), 11)));
-
- R.Assign(3, 8, 37, 12);
- Insert(New(pCheckBoxes, Init(R,
- NewSItem('~G~roß-/Kleinschreibung',
- NewSItem('~A~ls Wort',
- NewSItem('~B~estätigen',
- NewSItem('A~l~les ersetzen', NIL)))))));
-
- R.Assign(15, 13, 25, 15);
- Insert(New(pButton, Init(R, 'O~K~', cmOk, bfDefault)));
- Inc(R.A.X, 12); Inc(R.B.X, 13);
- Insert(New(pButton, Init(R, 'Abbruch', cmCancel,
- bfNormal)));
-
- SelectNext(FALSE);
- END;
- CreateReplaceDialog := D;
- END;
-
-
- FUNCTION DoDialog(Dialog: INTEGER; Info: POINTER):WORD; FAR;
- VAR
- R: tRect;
- T: tPoint;
- BEGIN
- CASE Dialog OF
- edOutOfMemory:
- DoDialog := MessageBox(
- 'Nicht genügend Speicher vorhanden.',
- NIL, mfError + mfOkButton);
- edReadError:
- DoDialog := MessageBox('Datei %s nicht lesbar.',
- @Info, mfError + mfOkButton);
- edWriteError:
- DoDialog := MessageBox('Datei %s nicht schreibbar.',
- @Info, mfError + mfOkButton);
- edCreateError:
- DoDialog := MessageBox('Datei %s nicht erstellt.',
- @Info, mfError + mfOkButton);
- edSaveModify:
- DoDialog := MessageBox(
- '%s wurde modifiziert. Sichern?',
- @Info, mfInformation + mfYesNoCancel);
- edSaveUntitled:
- DoDialog := MessageBox('Unbenannte Datei sichern?',
- NIL, mfInformation + mfYesNoCancel);
- edSaveAs:
- DoDialog := ExecDialog(New(PFileDialog,Init('*.*',
- 'Sichern unter', '~N~ame', fdOkButton, 101)), Info);
- edFind:
- DoDialog := ExecDialog(CreateFindDialog, Info);
- edSearchFailed:
- DoDialog := MessageBox('Suchbegriff nicht gefunden.',
- NIL, mfError + mfOkButton);
- edReplace:
- DoDialog := ExecDialog(CreateReplaceDialog, Info);
- edReplacePrompt:
- BEGIN
- R.Assign(0, 1, 40, 8);
- R.Move((Desktop^.Size.X - R.B.X) DIV 2, 0);
- Desktop^.MakeGlobal(R.B, T);
- Inc(T.Y);
- IF tPoint(Info).Y <= T.Y THEN
- R.Move(0, Desktop^.Size.Y - R.B.Y - 2);
- DoDialog := MessageBoxRect(R,
- 'Begriff ersetzen?',
- NIL, mfYesNoCancel + mfInformation);
- END;
- END;
- END;
-
-
- FUNCTION OpenEditor(FileName: FNameStr; Visible: BOOLEAN;
- ANumber: INTEGER): pXEditWindow;
- VAR
- P: pView;
- R: tRect;
- BEGIN
- DeskTop^.GetExtent(R);
- P := Application^.ValidView(New(pXEditWindow,
- Init(R, FileName, ANumber)));
- IF NOT Visible THEN P^.Hide;
- DeskTop^.Insert(P);
- OpenEditor := pXEditWindow(P);
- END;
-
-
- PROCEDURE Print;
- BEGIN
- PrnS := New(pPrintStream, Init(LPT1));
- IF TypeOf(Desktop^.Current^) = TypeOf(tXEditWindow) THEN
- WITH pXEditWindow(Desktop^.Current)^.Editor^ DO
- IF SelStart = SelEnd THEN BEGIN
- Message(Desktop^.Current, evCommand, cmTextEnd,NIL);
- PrnS^.Write(Buffer^[0], BufLen);
- END ELSE
- PrnS^.Write(Buffer^[SelStart], SelEnd - SelStart);
- IF PrnS^.Status <> 0 THEN
- MessageBox(PrnCodeStr[PrnS^.ErrorInfo], NIL,
- mfError + mfOkButton);
- Dispose(PrnS, Done);
- END;
-
-
-
- (* ------------------------------------------------------ *)
- (* tXEditWindow *)
- (* ------------------------------------------------------ *)
-
-
- CONSTRUCTOR tXEditWindow.Init(VAR Bounds: tRect;
- FileName: FNameStr; ANumber: INTEGER);
- VAR
- Indicator: pIndicator;
- HScrollBar, VScrollBar: pScrollBar;
- R: tRect;
- BEGIN
- tXWindow.Init(Bounds, '', ANumber, StdSysMenu);
- Options := Options OR ofTileable;
- R.Assign(18, Size.Y - 1, Size.X - 2, Size.Y);
- HScrollBar := New(pScrollBar, Init(R));
- HScrollBar^.Hide;
- Insert(HScrollBar);
- R.Assign(Size.X - 1, 1, Size.X, Size.Y - 1);
- VScrollBar := New(pScrollBar, Init(R));
- VScrollBar^.Hide;
- Insert(VScrollBar);
- R.Assign(2, Pred(Size.Y), 16, Size.Y);
- Indicator := New(pIndicator, Init(R));
- Indicator^.Hide;
- Insert(Indicator);
- GetExtent(R);
- R.Grow(-1, -2);
- Editor := New(pFileEditor, Init(
- R, HScrollBar, VScrollBar, Indicator, FileName));
- Insert(Editor);
- FindItem(WinMenuBar^.Menu, cmOvWrt, TRUE)^.Param^ :=
- Check[Succ(Ord(Editor^.Overwrite))];
- FindItem(WinMenuBar^.Menu, cmIndent, TRUE)^.Param^ :=
- Check[Succ(Ord(Editor^.AutoIndent))];
-
- END;
-
-
- CONSTRUCTOR tXEditWindow.Load(VAR S: tStream);
- BEGIN
- tXWindow.Load(S);
- GetSubViewPtr(S, Editor);
- END;
-
-
- PROCEDURE tXEditWindow.Close;
- BEGIN
- IF IsClipWindow THEN Hide ELSE tXWindow.Close;
- END;
-
-
- FUNCTION tXEditWindow.GetTitle(MaxSize: INTEGER): tTitleStr;
- VAR
- Temp: tTitleStr;
- I : INTEGER;
- BEGIN
- IF IsClipWindow THEN
- GetTitle := 'Zwischenablage' ELSE
- IF Editor^.FileName = '' THEN
- GetTitle := 'Unbenannt' ELSE BEGIN
- Temp := Editor^.FileName;
- I := Pos('\', Temp);
- WHILE (Length(Temp) > MaxSize) AND (I > 0) DO BEGIN
- System.Delete(Temp, 1, I);
- Temp := '...' + Temp;
- I := Pos('\', Temp);
- END;
- IF Length(Temp) > MaxSize THEN
- System.Delete(Temp, 1, Length(Temp) - MaxSize);
- GetTitle := Temp;
- END;
- END;
-
-
- PROCEDURE tXEditWindow.HandleEvent(VAR Event: tEvent);
- VAR
- ThisMenu: pMenuItem;
- BEGIN
- IF Event.What = evkeyDown THEN
- CASE Event.KeyCode OF
- kbIns:
- BEGIN
- Event.What := evCommand;
- Event.Command := cmOvWrt;
- END;
- $180F:
- BEGIN
- Event.What := evCommand;
- Event.Command := cmIndent;
- END;
- END;
-
- tXWindow.HandleEvent(Event);
-
- CASE Event.What OF
- evBroadcast:
- IF Event.Command = cmUpdateTitle THEN BEGIN
- Frame^.DrawView;
- ClearEvent(Event);
- END;
- evCommand:
- CASE Event.Command OF
- cmIndent:
- BEGIN
- ThisMenu := FindItem(WinMenuBar^.Menu,
- cmIndent, TRUE);
- ThisMenu^.Param^ := Check[2 - Ord(
- Editor^.AutoIndent)];
- Event.Command := cmIndentMode;
- PutEvent(Event);
- END;
- cmOvWrt:
- BEGIN
- ThisMenu := FindItem(WinMenuBar^.Menu,
- cmOvWrt, TRUE);
- ThisMenu^.Param^ := Check[2 - Ord(
- Editor^.Overwrite)];
- Event.Command := cmInsMode;
- PutEvent(Event);
- END;
- END;
- END;
- END;
-
-
- PROCEDURE tXEditWindow.InitMenuBar;
- VAR
- R: tRect;
- BEGIN
- GetExtent(R);
- R.Grow(-1, 0);
- R.Move(0, 1);
- R.B.Y := Succ(R.A.Y);
-
- WinMenuBar := New(PWinRipMenuBar, Init(R, NewMenu(NIL)));
- StartMenuAt(WinMenuBar^.Menu);
-
- AddSub('~A~usgabe', 0);
- AddItem('~S~ichern', 'F2', kbF2, cmSave, 0);
- AddItem('Sichern ~u~nter...', '', kbNoKey, cmSaveAs, 0);
- AddLine;
- AddItem('~D~rucken', '', kbNoKey, cmPrint, 0);
- CloseSub('~A~usgabe');
-
- AddSub('~B~earbeiten', 0);
- AddItem('~R~ückgängig', '', kbNoKey, cmUndo, 0);
- AddLine;
- AddItem('~A~usschneiden', 'Shift-Del', kbShiftDel,
- cmCut, 0);
- AddItem('~K~opieren', 'Ctrl-Ins', kbCtrlIns, cmCopy, 0);
- AddItem('~E~infügen', 'Shift-Ins', kbShiftIns,
- cmPaste, 0);
- AddItem('~Z~wischenablage', '', kbNoKey, cmShowClip, 0);
- AddLine;
- AddItem('~L~öschen', 'Ctrl-Del', kbCtrlDel, cmClear, 0);
- CloseSub('~B~earbeiten');
-
- AddSub('~S~uchen', 0);
- AddItem('~F~inden...', '', kbNoKey, cmFind, 0);
- AddItem('~E~rsetzen...', '', kbNoKey, cmReplace, 0);
- AddItem('~W~iederholen', '', kbNoKey, cmSearchAgain,0);
- CloseSub('~S~uchen');
-
- AddSub('~E~ditor', 0);
- AddItem('~E~inrücken', ' ', kbNoKey, cmIndent, 0);
- AddItem('Ü~b~erschreiben', ' ', kbNoKey, cmOvWrt, 0);
- CloseSub('~E~ditor');
- END;
-
-
- PROCEDURE tXEditWindow.InitStatusLine;
- VAR
- R: tRect;
- BEGIN
- GetExtent(R);
- R.Grow(-1, 0);
- R.Move(0, -1);
- R.A.Y := Pred(R.B.Y);
- WinStatusLine := New(PWinStatusLine, Init(R,
- NewStatusDef(0, $FFFF,
- NewStatusKey('~F2~ Sichern', kbF2, cmSave,
- NewStatusKey('~F7~ Symbol', kbF7, cmShrink,
- NewStatusKey('~Ctrl-F10~ Menü', kbCtrlF10, cmWinMenu,
- NewStatusKey('', kbCtrlF3, cmSysMenu,
- NewStatusKey('', kbCtrlF5, cmResize,
- NIL))))),
- NIL)));
- END;
-
-
- FUNCTION tXEditWindow.IsClipWindow: BOOLEAN;
- BEGIN
- IsClipWindow := (ClipWindow = @Self);
- END;
-
-
- PROCEDURE tXEditWindow.Store(VAR S: tStream);
- BEGIN
- tXWindow.Store(S);
- PutSubViewPtr(S, Editor);
- END;
-
-
-
- (* ------------------------------------------------------ *)
- (* tEditorApp *)
- (* ------------------------------------------------------ *)
-
-
- CONSTRUCTOR tEditorApp.Init;
- VAR
- Pat: CHAR;
- H: WORD;
- R: tRect;
- I: INTEGER;
- BEGIN
- H := PtrRec(HeapEnd).Seg - PtrRec(HeapPtr).Seg;
- IF H > HeapSize THEN
- BufHeapSize := H - HeapSize ELSE
- BufHeapSize := 0;
- InitBuffers;
-
- tMacroApplication.Init;
-
- DisableCommands([cmSave, cmSaveAs, cmCut, cmCopy, cmPaste,
- cmClear, cmUndo, cmFind, cmReplace,
- cmSearchAgain]);
-
- SetSystemMsg(TRUE); (* Systemmeldungen als MessageBox *)
- InitStdSysMenu; (* Standard-Systemmenü für Fenster *)
-
- EditorDialog := DoDialog;
-
- ClipWindow := OpenEditor('', FALSE, wnNoNumber);
- IF ClipWindow <> NIL THEN
- BEGIN
- Clipboard := ClipWindow^.Editor;
- Clipboard^.CanUndo := FALSE;
- ClipWindow^.Flags := ClipWindow^.Flags AND NOT wfShrink;
- END;
-
- GetExtent(R);
- Dec(R.B.X);
- R.A.X := R.B.X - 9; R.B.Y := Succ(R.A.Y);
- Buzzer := New(pBuzzer, Init(R));
- Insert(Buzzer);
-
- MacroObj := New(pMacro, Init);
-
- RegisterObjects;
- RegisterViews;
- RegisterMenus;
- RegisterDialogs;
- RegisterApp;
- RegisterXDialogs;
- RegisterXMenus;
- RegisterXViews;
- RegisterXMacro;
- RegisterEditors;
- RegisterType(rXEditWindow);
- LoadKeyStream; (* Keycode-Konstanten-Stream lesen *)
-
- PinUp(50, 8,
- #13#3'TVXEdit -- Extended Editor' +
- #13#3 +
- #13#3'(C) 1992 Christian Ohr & DMV-Verlag' +
- #13#3'(C) 1983,90 Borland Int.', NIL);
- Delay(1500);
- PinDown;
-
- IF ParamCount > 0 THEN
- FOR I := 1 TO ParamCount DO
- OpenEditor(ParamStr(I), TRUE, wnAutoNumber);
- END;
-
-
- DESTRUCTOR tEditorApp.Done;
- BEGIN
- tMacroApplication.Done;
- DoneBuffers;
- END;
-
-
- PROCEDURE tEditorApp.HandleEvent(VAR Event: tEvent);
-
- PROCEDURE AboutBox;
- VAR
- BufHeap : LONGINT;
- BEGIN
- BufHeap := LONGINT(BufHeapSize) SHR 6;
- MessageBox(
- #3'TVXEDIT - Extended Editor' +
- #13#3 +
- #13#3'Gesamtbuffer: %d kB', @BufHeap,
- mfInformation + mfOkButton);
- END;
-
- PROCEDURE FileOpen;
- VAR
- FileName: FNameStr;
- BEGIN
- FileName := '*.*';
- IF ExecDialog(New(PFileDialog, Init('*.*',
- 'Datei öffnen', '~N~ame', fdOpenButton, 100)),
- @FileName) <> cmCancel THEN
- OpenEditor(FileName, TRUE, wnAutoNumber);
- END;
-
- PROCEDURE FileNew;
- BEGIN
- OpenEditor('', TRUE, wnAutoNumber);
- END;
-
- PROCEDURE ChangeDir;
- BEGIN
- ExecDialog(New(PChDirDialog, Init(cdNormal, 0)), NIL);
- END;
-
- PROCEDURE DosShell;
- BEGIN
- DoneSysError;
- DoneEvents;
- DoneVideo;
- DoneMemory;
- SetMemTop(Ptr(BufHeapPtr, 0));
- PrintStr('EXIT, um zu TVXEDIT zurückzukehren...');
- SwapVectors;
- Exec(GetEnv('COMSPEC'), '');
- SwapVectors;
- SetMemTop(Ptr(BufHeapEnd, 0));
- InitMemory;
- InitVideo;
- InitEvents;
- InitSysError;
- Redraw;
- END;
-
- PROCEDURE ShowClip;
- BEGIN
- ClipWindow^.Select;
- ClipWindow^.Show;
- END;
-
- PROCEDURE Tile;
- VAR
- R: tRect;
- BEGIN
- Desktop^.GetExtent(R);
- Desktop^.Tile(R);
- END;
-
- PROCEDURE Cascade;
- VAR
- R: tRect;
- BEGIN
- Desktop^.GetExtent(R);
- Desktop^.Cascade(R);
- END;
-
- PROCEDURE VideoMode;
- VAR
- NewMode: WORD;
- R: tRect;
- BEGIN
- IF HiResScreen THEN BEGIN
- NewMode := ScreenMode XOR smFont8x8;
- IF NewMode AND smFont8x8 <> 0 THEN
- ShadowSize.X := 1 ELSE
- ShadowSize.X := 2;
- SetScreenMode(NewMode);
- END;
- END;
-
- PROCEDURE SaveMacros;
- VAR
- FileName: FNameStr;
- S: pBufStream;
- BEGIN
- FileName := '*.MAC';
- IF ExecDialog(New(PFileDialog, Init('*.MAC',
- 'Makrodatei sichern', '~N~ame', fdOkButton, 100)),
- @FileName) <> cmCancel THEN BEGIN
- FileName := FExpand(FileName);
- S := New(pBufStream, Init(FileName, stCreate, 1024));
- IF LowMemory THEN OutOfMemory ELSE
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht geöffnet', NIL,
- mfError + mfOkButton) ELSE BEGIN
- S^.Put(MacroObj);
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht schreibbar', NIL,
- mfError + mfOkButton);
- END;
- Dispose(S, Done);
- END;
- END;
-
- PROCEDURE LoadMacros;
- VAR
- FileName: FNameStr;
- S: pBufStream;
- BEGIN
- FileName := '*.MAC';
- IF ExecDialog(New(PFileDialog, Init('*.MAC',
- 'Makrodatei öffnen', '~N~ame', fdOpenButton, 100)),
- @FileName) <> cmCancel THEN BEGIN
- FileName := FExpand(FileName);
- S := New(pBufStream, Init(FileName, stOpenRead,1024));
- IF LowMemory THEN OutOfMemory ELSE
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht geöffnet', NIL,
- mfError + mfOkButton) ELSE BEGIN
- IF MacroObj <> NIL THEN
- Dispose(MacroObj, Done);
- MacroObj := pMacro(S^. Get);
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht lesbar', NIL,
- mfError + mfOkButton);
- END;
- Dispose(S, Done);
- END;
- END;
-
-
- BEGIN
- SetStatusHelpCtx;
-
- tMacroApplication.HandleEvent(Event);
- CASE Event.What OF
- evCommand:
- CASE Event.Command OF
- cmAbout: AboutBox;
- cmOpen: FileOpen;
- cmNew: FileNew;
- cmChangeDir: ChangeDir;
- cmDosShell: DosShell;
- cmShowClip: ShowClip;
- cmTile: Tile;
- cmCascade: Cascade;
- cmPrint: Print;
- cmWindowList: WindowListDialog;
- cmVideoMode: VideoMode;
- cmStoreDesktop: StoreDesktop;
- cmLoadDesktop: LoadDesktop;
- cmRecordMacro:
- IF MacroObj <> NIL THEN MacroObj^.RecordMacro;
- cmMacros:
- IF MacroObj <> NIL THEN MacroObj^.MacroDialog;
- cmSaveMacros: SaveMacros;
- cmLoadMacros: LoadMacros;
- ELSE
- Exit;
- END;
- ELSE
- Exit;
- END;
- ClearEvent(Event);
- END;
-
-
- PROCEDURE tEditorApp.Idle;
- BEGIN
- tMacroApplication.Idle;
- Buzzer^.Update;
- END;
-
-
- PROCEDURE tEditorApp.InitMenuBar;
- VAR
- R: tRect;
- BEGIN
- GetExtent(R);
- R.B.Y := Succ(R.A.Y);
- MenuBar := New(pRipMenuBar, Init(R, NewMenu(NIL)));
- StartMenuAt(MenuBar^.Menu);
-
- AddSub('~≡~', 0);
- AddItem('~I~nfo...', '', kbNoKey, cmAbout, 0);
- CloseSub('~≡~');
-
- AddSub('~D~atei', 0);
- AddItem('Ö~f~fnen...', 'F3', kbF3, cmOpen, 0);
- AddItem('~N~eu', '', kbNoKey, cmNew, 0);
- AddLine;
- AddItem('~V~erzeichnis...', '', kbNoKey, cmChangeDir,0);
- AddItem('~D~OS shell', '', kbNoKey, cmDosShell, 0);
- AddItem('~B~eenden', 'Alt-X', kbAltX, cmQuit, 0);
- CloseSub('~D~atei');
-
- AddSub('~O~ptionen', 0);
- AddItem('43/50 ~Z~eilen', '', kbNoKey, cmVideoMode, 0);
- AddLine;
- AddItem('Desktop ~s~ichern', '',kbNoKey,
- cmStoreDesktop, 0);
- AddItem('Desktop ~l~aden', '', kbNoKey,
- cmLoadDesktop,0);
- CloseSub('~O~ptionen');
-
- AddSub('~M~akros', 0);
- AddItem('~A~ufnahme...', '', kbNoKey, cmRecordMacro, 0);
- AddItem('~B~earbeiten/Ausführen...', 'Alt-F7', kbAltF7,
- cmMacros, 0);
- AddLine;
- AddItem('Makros ~s~ichern...', '', kbNokey,
- cmSaveMacros, 0);
- AddItem('Makros ~l~aden...', '', kbNoKey,
- cmLoadMacros, 0);
- CloseSub('~M~akros');
-
-
- AddSub('~F~enster', 0);
- AddItem('~N~ebeneinander', '', kbNoKey, cmTile, 0);
- AddItem('Über~l~append', '', kbNoKey, cmCascade, 0);
- AddItem('~W~eiter', 'F6', kbF6, cmNext, 0);
- AddItem('~Z~urück', 'Shift-F6', kbShiftF6, cmPrev, 0);
- AddLine;
- AddItem('~F~enster...', 'Alt-0', kbAlt0,cmWindowList,0);
- CloseSub('~F~enster');
- END;
-
-
- PROCEDURE tEditorApp.InitStatusLine;
- VAR
- R: tRect;
- BEGIN
- GetExtent(R);
- R.A.Y := R.B.Y - 1;
- StatusLine := New(pStatusLine, Init(R,
- NewStatusDef(0, hcCtrl,
- NewStatusKey('~F3~ Öffnen', kbF3, cmOpen,
- NewStatusKey('~F6~ Weiter', kbF6, cmNext,
- NewStatusKey('~F10~ Menü', kbF10, cmMenu,
- NIL))),
- NewStatusDef(hcAlt, hcAlt,
- NewStatusKey('~Alt-X~ Beenden', kbAltX, cmQuit,
- NewStatusKey('~Alt-F3~ Schließen', kbAltF3, cmClose,
- NewStatusKey('~Alt-F7~ Makro', kbAltF7, cmMacros,
- NIL))),
- NIL))));
- END;
-
-
- PROCEDURE tEditorApp.LoadDesktop;
- VAR
- P: pView;
- S: pStream;
-
- PROCEDURE CloseView(P: pView); FAR;
- BEGIN
- Message(P, evCommand, cmClose, NIL);
- END;
-
- BEGIN
- S := New(PBufStream, Init('TVXEDIT.DSK',stOpenRead,1024));
- IF LowMemory THEN OutOfMemory ELSE
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht geöffnet',
- NIL, mfOkButton + mfError) ELSE BEGIN
- IF Desktop^.Valid(cmClose) THEN BEGIN
- Desktop^.ForEach(@CloseView);
- REPEAT
- P := pView(S^.Get);
- Desktop^.InsertBefore(ValidView(P),Desktop^.Last);
- UNTIL P = NIL;
- END;
- IF S^.Status <> stOk THEN
- MessageBox('Datei nicht lesbar', NIL,
- mfOkButton + mfError);
- END;
- Dispose(S, Done);
- END;
-
-
- PROCEDURE tEditorApp.OutOfMemory;
- BEGIN
- MessageBox('Nicht genügend Speicher vorhanden.',
- NIL, mfError + mfOkButton);
- END;
-
-
- PROCEDURE tEditorApp.StoreDesktop;
- VAR
- S: pStream;
- F: FILE;
-
- PROCEDURE WriteView(P: pView); FAR;
- BEGIN
- IF (P <> Desktop^.Last) AND
- (TypeOf(P^) <> TypeOf(tPinMenuBox)) AND NOT
- pXEditWindow(P)^.IsClipWindow THEN S^.Put(P);
- END;
-
- BEGIN
- S := New(PBufStream, Init('TVXEDIT.DSK', stCreate, 1024));
- IF NOT LowMemory AND (S^.Status = stOk) THEN
- BEGIN
- Desktop^.ForEach(@WriteView);
- S^.Put(NIL);
- IF S^.Status <> stOk THEN
- BEGIN
- MessageBox('Datei TVXEDIT.DSK nicht erstellt.',
- NIL, mfOkButton + mfError);
- Dispose(S, Done);
- Assign(F, 'TVXEDIT.DSK');
- Erase(F);
- Exit;
- END;
- END;
- Dispose(S, Done);
- END;
-
-
- BEGIN
- EditorApp.Init;
- EditorApp.Run;
- EditorApp.Done;
- END.
-
-
- (* ------------------------------------------------------ *)
- (* Ende von TVXEDIT.PAS *)
-