home *** CD-ROM | disk | FTP | other *** search
- ⓪ MODULE MM2TinyShell; (*$Z+,P+,V+,R-*)
- ⓪
- ⓪ (*
- ⓪!*----------------------------------------------------------------------------
- ⓪!* Copyright Februar 1987 Thomas Tempelmann & Manuel Chakravarty
- ⓪!*----------------------------------------------------------------------------
- ⓪!* Modul-Beschreibung : GEM-Tiny-Shell für MOS / Megamax Modula-2
- ⓪!*----------------------------------------------------------------------------
- ⓪!* Version : 2.3g / Interne Version: V#0117
- ⓪!*----------------------------------------------------------------------------
- ⓪!* MCH: Manuel Chakravarty
- ⓪!* TT: Thomas Tempelmann
- ⓪!* MS: Michael Seyfried, Unterer Mauergarten 17, D-W6520 Worms 24
- ⓪!*----------------------------------------------------------------------------
- ⓪!* Datum Version Autor Bemerkung (Arbeitsbericht)
- ⓪!*----------------------------------------------------------------------------
- ⓪!* 01.12.90 2.1p MCH Übernahme aller Teile der MM2Shell, die keine
- ⓪!* Fenster benutzen
- ⓪!* 03.12.90 2.1p MCH Neue Workfilebehandlung und neue Resource
- ⓪!* 07.12.90 2.2 TT Anpassung an MM2Shell 2.2
- ⓪!* 07.04.91 2.2b TT Höhe der Menüzeile korrigiert; ACCs werden vor/nach
- ⓪!* Start von Programmen geschlossen;
- ⓪!* Batch-Befehle "POSTAMBLE1/2" zum Starten von Prgs
- ⓪!* vor Verlassen der Shell; ExitSS-Aufruf am Ende des
- ⓪!* Moduls _hinter_ den ShellWrite-Aufruf verlegt;
- ⓪!* Codename von Workfiles wird nun korrekt behalten.
- ⓪!* 20.05.91 2.2d TT Bei manueller Arbeitsdateieingabe wird die Datei
- ⓪!* auf den Source-Pfaden gesucht.
- ⓪!* 20.10.91 2.3 TT Linker-Option-Box ermöglicht Symboldatei-Erzeugung.
- ⓪!* MS Shell nun MultiGEM-fähig, dazu 'call' überarbeitet.
- ⓪!* 14.01.93 2.3e TT
- ⓪!*----------------------------------------------------------------------------
- ⓪!*)
- ⓪
- ⓪
- ⓪ (* Qualified imports for 'ShellShell' *)
- ⓪
- ⓪ IMPORT Clock, ModCtrl,
- ⓪
- ⓪'GEMBase, AESMisc,
- ⓪'GrafBase, GEMGlobals, GEMEnv,
- ⓪'AESForms, AESObjects, AESResources, AESGraphics, AESMenus,
- ⓪'AESWindows, AESEvents,
- ⓪'ObjHandler, EventHandler, EasyGEM0, EasyGEM1;
- ⓪
- ⓪
- ⓪ FROM SYSTEM IMPORT LONGWORD, WORD, ADDRESS, BYTE,
- ⓪7ASSEMBLER, ADR, LOAD, STORE;
- ⓪
- ⓪ IMPORT Mm2tinysRsc; (* RSC-Datei *)
- ⓪
- ⓪ FROM RealCtrl IMPORT AnyRealFormat, UsedFormat;
- ⓪
- ⓪ FROM StrConv IMPORT CardToStr, IntToStr, StrToLCard, StrToCard,
- ⓪7StrToInt, LHexToStr;
- ⓪
- ⓪ FROM Loader IMPORT LoaderResults, DefaultStackSize,
- ⓪7LoadModule, CallModule, UnLoadModule;
- ⓪
- ⓪ FROM PathEnv IMPORT HomeReplaced, HomeSymbol, ReplaceHome, HomePath;
- ⓪ FROM PathCtrl IMPORT PathList;
- ⓪ FROM Paths IMPORT SearchFile, ListPos;
- ⓪
- ⓪ FROM Storage IMPORT ALLOCATE, DEALLOCATE, MemAvail, AllAvail, Inconsistent;
- ⓪
- ⓪ FROM Strings IMPORT PosLen, String, Relation, Compare, Space, Upper, Empty,
- ⓪7EatSpaces, Append, StrEqual, Delete, Concat, Assign,
- ⓪7Split, Insert, Length, Copy, Pos;
- ⓪
- ⓪ IMPORT Lists;
- ⓪
- ⓪ IMPORT SysUtil0;
- ⓪
- ⓪ FROM MOSConfig IMPORT StdDateMask;
- ⓪ IMPORT MOSConfig;
- ⓪
- ⓪ IMPORT MOSCtrl;
- ⓪
- ⓪ FROM MOSGlobals IMPORT MemArea, BusFault, OddBusAddr, NoValidRETURN,
- ⓪7OutOfStack, FileStr, PathStr, NameStr,
- ⓪7fOK, fFileNotFound, fDriveNotReady, fWriteProtected,
- ⓪7fPathNotFound, fInvalidDrive, fAccessDenied,
- ⓪7fTooManyOpen, fInsufficientMemory,
- ⓪7Drive, DriveSet, fEOF;
- ⓪
- ⓪ FROM ShellMsg IMPORT ScanMode, ScanAddr, TextName, ErrorMsg, DefPaths,
- ⓪7ModPaths, ErrListFile, ImpPaths, SrcPaths, DefSfx,
- ⓪7ImpSfx, ModSfx, CodeName, Active, LinkDesc,
- ⓪7LLRange, ScanIndex, TextLine, TextCol,
- ⓪7MakeFileName, TemporaryPath, MainOutputPath,
- ⓪7DefLibName, DefOutPath, ImpOutPath, ModOutPath,
- ⓪7ShellPath, ImpSrcSfx, ModSrcSfx, DefSrcSfx, CodeSize,
- ⓪7StdPaths, CompilerArgs, CompilerParm, ScanOpts,
- ⓪7LinkMode, LinkerParm, EditorParm;
- ⓪
- ⓪ IMPORT Directory;
- ⓪ FROM Directory IMPORT FileAttr, FileAttrSet, DirEntry, DirQueryProc,
- ⓪7SetCurrentDir, GetCurrentDir, DefaultDrive,
- ⓪7DirQuery, SetDefaultDrive, DrivesOnline,
- ⓪7CreateDir, GetDefaultPath, SetFileAttr,
- ⓪7ForceMediaChange, MakeFullPath, SetDefaultPath,
- ⓪7FreeSpace;
- ⓪
- ⓪ FROM FileNames IMPORT StrToDrive, SplitPath, SplitName, DriveToStr,
- ⓪7NameConc, ValidatePath, ConcatPath, ConcatName,
- ⓪7FileName, FilePath;
- ⓪
- ⓪ FROM Files IMPORT File, Access, ReplaceMode,
- ⓪7Create, Open, Close, State, ResetState, GetStateMsg,
- ⓪7Remove, EOF, SetDateTime, GetDateTime;
- ⓪
- ⓪ FROM Binary IMPORT ReadBlock, ReadBytes, WriteBlock;
- ⓪
- ⓪ IMPORT Text;
- ⓪
- ⓪ FROM GEMScan IMPORT InputScan, CallingChain, ChainDepth;
- ⓪
- ⓪ FROM PrgCtrl IMPORT EnvlpCarrier,
- ⓪7SetEnvelope, TermProcess;
- ⓪4
- ⓪ FROM SysTypes IMPORT ExcDesc, ExcSet, TRAP5;
- ⓪
- ⓪ FROM Excepts IMPORT InstallPreExc;
- ⓪
- ⓪ FROM SysBuffers IMPORT ExceptsStack;
- ⓪
- ⓪ FROM EasyGEM0 IMPORT WrapAlert;
- ⓪
- ⓪ FROM UserBreak IMPORT EnableBreak, DisableBreak;
- ⓪
- ⓪ FROM KbdEvents IMPORT DeInstallKbdEvents, InstallKbdEvents;
- ⓪
- ⓪ FROM EasyGEM0 IMPORT SetGetMode, ShowArrow, HideMouse, ShowMouse;
- ⓪
- ⓪ FROM AESForms IMPORT FormError, FormAlert;
- ⓪
- ⓪ IMPORT InOutBase;
- ⓪
- ⓪
- ⓪ CONST (* Versionskennung der Shell.
- ⓪)*)
- ⓪(ShellRevision = ' 2.3g ';
- ⓪(
- ⓪((*
- ⓪)* Ist die folg. Konstante TRUE, wird das Modul "KbdEvents"
- ⓪)* verwendet, das dafür sorgt, daß Tastendrücke, bei denen
- ⓪)* Shift, Control oder Alternate gedrückt werden, immer richtig
- ⓪)* erkannt werden.
- ⓪)* Andernfalls kann es passieren, daß diese Umschalttasten
- ⓪)* ignoriert werden, wenn die gewünschte Aktion erst nach
- ⓪)* dem Tastendruck gestartet wird.
- ⓪)* Siehe auch Hinweise im Definitions-Text des Moduls
- ⓪)*)
- ⓪(UseExtKeys = TRUE;
- ⓪
- ⓪((*
- ⓪)* Ist die folg. Konstante TRUE, startet die Shell GEM-Programme
- ⓪)* korrekt mit der AES-Funktion "ShellWrite", sofern TOS 1.4
- ⓪)* oder höher verwendet wird. Dies kann aber zu Problemen führen,
- ⓪)* beispielsweise, wenn die Shell von NEODESK gestartet wird,
- ⓪)* weshalb sie dazu auf FALSE gesetzt werden kann.
- ⓪)*)
- ⓪(DoShellWrite = TRUE;
- ⓪(
- ⓪((*
- ⓪)* Stack-Größen für die Systemprogramme. Sie sollten vergrößert
- ⓪)* werden, wenn bei einem der Programme ein "Stacküberlauf"
- ⓪)* auftritt.
- ⓪)*)
- ⓪(CompilerStackSize = 16000;
- ⓪(LinkerStackSize = 8000;
- ⓪(EditorStackSize = 16000;
- ⓪(MakeStackSize = 8000;
- ⓪
- ⓪((*
- ⓪)* Maximale Anzahl von Suchpfaden, die in einer Batch-Datei
- ⓪)* definiert werden können. Ist zu erhöhen, wenn bim Starten
- ⓪)* der Shell oder eines Batches eine diesbezügliche Fehler-
- ⓪)* meldung erscheint.
- ⓪)*)
- ⓪(MaxSearchPaths = 40;
- ⓪
- ⓪((*
- ⓪)* Name der Datei in der alle zu compilierenden Module
- ⓪)* vom Make abgelegt werden. Das Verzeichnis (Pfad), in dem
- ⓪)* diese Datei erzeugt wird, ist der "temporäre Pfad", der
- ⓪)* in der Shell-Parameter-Box anzugeben ist!
- ⓪)*)
- ⓪(MakeCompFileName = 'MAKE.M2C';
- ⓪
- ⓪
- ⓪ TYPE actionType = (doEdit, doComp, doLink, doExec, doScan, doCpEx,
- ⓪;doLoad, doUnLd, doCont, doBtch, doParm, doMake,
- ⓪;doMkEx, doDftM);
- ⓪(MySuf = (prg, app, tos, ttp, mos, mtp, mod, def, imp, m2p,
- ⓪;m2b, m2m, m2d);
- ⓪
- ⓪(Str128 = ARRAY [0..127] OF CHAR;
- ⓪
- ⓪(ptrString = POINTER TO String;
- ⓪
- ⓪(PathEntry = POINTER TO PathStr;
- ⓪
- ⓪ VAR lastFn, currFn,
- ⓪(workFName, workCName : FileStr;
- ⓪(args : ARRAY[0..127] OF CHAR;
- ⓪
- ⓪(suf: ARRAY MySuf OF ARRAY [0..2] OF CHAR;
- ⓪
- ⓪
- ⓪0(* Konfigurationsvariablen *)
- ⓪0(* ======================= *)
- ⓪
- ⓪(shellParm : RECORD
- ⓪<breakActive : BOOLEAN;
- ⓪<batchPath : PathStr;
- ⓪<parameterPath : PathStr;
- ⓪<sectors : CARDINAL;
- ⓪<tracks : CARDINAL;
- ⓪<sides : CARDINAL;
- ⓪<makeName : String;
- ⓪<(* TRUE: Nach TOS/TTP-Prgs auf Taste warten *)
- ⓪<waitOnReturn : BOOLEAN;
- ⓪:END;
- ⓪
- ⓪(noDirChange: BOOLEAN;
- ⓪
- ⓪
- ⓪
- ⓪ PROCEDURE conc ( REF s1,s2: ARRAY OF CHAR ): Str128;
- ⓪"VAR s: Str128;
- ⓪&voidO: BOOLEAN;
- ⓪"BEGIN
- ⓪$Concat (s1,s2,s, voidO);
- ⓪$RETURN s
- ⓪"END conc;
- ⓪
- ⓪
- ⓪ FORWARD action (what: actionType; workFile, tool: BOOLEAN);
- ⓪
- ⓪ FORWARD FileAlert (errNo: INTEGER);
- ⓪ FORWARD SaveParameter;
- ⓪ FORWARD LoadParameter (REF name: ARRAY OF CHAR; loadInBatch: BOOLEAN);
- ⓪ FORWARD ExecuteBatch (name: ARRAY OF CHAR; load: BOOLEAN);
- ⓪
- ⓪
- ⓪ MODULE ShellShell; (* Verwaltet die GEM-Aktionen der Modula-Shell *)
- ⓪
- ⓪
- ⓪ IMPORT Text, SysUtil0,
- ⓪
- ⓪0(* resource indices *)
- ⓪
- ⓪'Menu, Mibox, Mshell, Mdatei, Mworkfil, Mparms,
- ⓪'Mwork, Mtools, Dinfo, Mdeditwo, Mdcompwo, Mdexecwo,
- ⓪'Mdlinkwo, Mdscanwo, Mdeditot, Mdcompot, Mdexecot,
- ⓪'Mdlinkot, Mdscanot, Mdfolder, Mddelete, Mdquit, Wibox, Mwnew,
- ⓪'Mwdelete, Mwchange, Mwwork1, Mwwork2, Mwwork3, Mwwork4,
- ⓪'Mwwork5, Mwwork6, Mwwork7, Mwwork8, Mwwork9, Mwwork0,
- ⓪'Mpshell, Mpeditor, Mpcomp, Mplink, Mpsave, Mienv,
- ⓪'Midocu, Mihelp, Tibox, Mtool1, Mtool2, Mtool3,
- ⓪'Mtool4, Mtool5, Mtool6, Mtool7, Mtool8, Mtool9,
- ⓪'Mtool10, Optbox, Oquite, Opmark, Opwidth, Oppath,
- ⓪'Ooutput, Oargs, Olibrary, Oerror, Oname, Oquit,
- ⓪'Ook, Shellbox, Version, Scanbox, Sok, Squit,
- ⓪'Saddr, Snamebox, Snedit, Snok, Snwork, Snquit,
- ⓪'Argbox, Aedit, Aok, Loptbox, Locheck1, Locheck2,
- ⓪'Locheck3, Locheck4, Locheck5, Locheck6, Locheck7, Locheck8,
- ⓪'Lofname1, Lofname2, Lofname3, Lofname4, Lofname5, Lofname6,
- ⓪'Lofname7, Lofname8, Lochecks, Lostack, Lomaxmod, Look,
- ⓪'Loquit, Loname, Lonoopt, Lonamopt, Lomiddle, Lofull,
- ⓪'Lofastld, Lofastco, Lofastme, Losymfil, Loadbox, Lfname, Sparmbox,
- ⓪'Spmake, Spscpath, Spbreak, Spbaname, Sppaname, Spok, Spquit,
- ⓪'Msgbar, Mbmsg, Eparmbox, Epname, Epsearch, Epstoper,
- ⓪'Epshtemp, Epshname, Epedtemp, Epedname, Eparg, Eparname,
- ⓪'Eparpos, Eparerro, Epok, Epquit, Helpbox, Hpnext,
- ⓪'Hpprev, Hpquit, Hpmsgs, Hpmsg1, Hpmsg2, Hpmsg3,
- ⓪'Hpmsg4, Hpmsg5, Hpmsg6, Hpmsg7, Hpmsg8, Hpmsg9,
- ⓪'Hpmsg10, Hpmsg11, Hpmsg12, Hpmsg13, Hpmsg14, Infobox,
- ⓪'Inpath, Inmkfile, Instack, Inblock, Inall, Incode,
- ⓪'Inlength, Realform, Ihome, Inok, Inquit, Stponrtn,
- ⓪'Pathalt, Optalt, Memalt, Debugalt, Noldstr, Okstr,
- ⓪'Nouldstr, Noexestr, Retstr, Edstr, Workstr, Compstr,
- ⓪'Linkstr, Infstr, Contstr, Parmsalt, Noparalt, Nowrkalt,
- ⓪'Exitalt, Nohlpalt, Makestr, Contmalt, Editstr, Editbstr,
- ⓪'Npathstr, Chworkti, Neworkti, Editti, Compti, Execti,
- ⓪'Coexti, Linkti, Scanti, Foldti, Deleti,
- ⓪
- ⓪%
- ⓪0(* from the library *)
- ⓪
- ⓪'ADDRESS, BYTE, WORD,
- ⓪'ASSEMBLER, ADR, LOAD, STORE,
- ⓪'
- ⓪'(* Storage *)
- ⓪'ALLOCATE, DEALLOCATE, MemAvail, AllAvail,
- ⓪
- ⓪'(* RealCtrl *)
- ⓪'AnyRealFormat, UsedFormat,
- ⓪'
- ⓪'(* Strings *)
- ⓪'String, Relation,
- ⓪'Concat, Insert, Split, Assign, Length, Compare, Copy, Space,
- ⓪'Upper, Empty, EatSpaces, Append, StrEqual, PosLen, Delete, Pos,
- ⓪'
- ⓪'MOSConfig,
- ⓪'DefSrcSfx, ImpSrcSfx, ModSrcSfx, StdDateMask,
- ⓪'
- ⓪'(* StrConv *)
- ⓪'CardToStr, IntToStr, StrToCard, StrToLCard, LHexToStr,
- ⓪
- ⓪'(* Directory *)
- ⓪'Directory,
- ⓪'FileAttr, FileAttrSet, DirEntry, DirQueryProc, Drive, DriveSet,
- ⓪'DirQuery, SplitPath, SplitName, SetFileAttr, StrToDrive, FreeSpace,
- ⓪'DriveToStr, DefaultDrive, CreateDir, GetCurrentDir, SetDefaultDrive,
- ⓪'SetCurrentDir, FileStr, PathStr, NameStr, DrivesOnline, ValidatePath,
- ⓪'ForceMediaChange, MakeFullPath, ConcatPath, ConcatName, SetDefaultPath,
- ⓪'FileName, GetDefaultPath, FilePath,
- ⓪'
- ⓪'(* ShellMsg *)
- ⓪'ScanMode, TextName, CodeName, DefSfx, ImpSfx, ModSfx, ScanAddr,
- ⓪'ErrListFile, LinkDesc, TemporaryPath, LLRange,
- ⓪'SrcPaths, ShellPath, MakeFileName, DefLibName, MainOutputPath,
- ⓪'ScanOpts, DefPaths, EditorParm, CompilerParm, LinkerParm, LinkMode,
- ⓪'
- ⓪'
- ⓪'(* Loader *)
- ⓪'DefaultStackSize,
- ⓪'
- ⓪'(* MOSGlobals *)
- ⓪'fOK, fEOF, fFileNotFound,
- ⓪'
- ⓪'(* Files *)
- ⓪'File, Access,
- ⓪'State, Open, Close, ResetState,
- ⓪'
- ⓪'(* Binary *)
- ⓪'ReadBlock, WriteBlock,
- ⓪'
- ⓪'(* GEMScan *)
- ⓪'ChainDepth,
- ⓪'
- ⓪'(* MOSGloabls *)
- ⓪'MemArea,
- ⓪'
- ⓪'(* Exceptions *)
- ⓪'TRAP5, ExcSet, ExcDesc,
- ⓪'ExceptsStack, InstallPreExc,
- ⓪'
- ⓪'(* Paths *)
- ⓪'ListPos,
- ⓪'ReplaceHome, SearchFile,
- ⓪'HomePath, HomeSymbol,
- ⓪'
- ⓪'(* PrgCtrl *)
- ⓪'TermProcess,
- ⓪'
- ⓪'(* from the outer module *)
- ⓪'CompilerArgs,
- ⓪'actionType, Str128,
- ⓪'lastFn, currFn, MySuf, ShellRevision,
- ⓪'action, suf, args, noDirChange, shellParm, conc,
- ⓪'SaveParameter, LoadParameter, FileAlert, ExecuteBatch;
- ⓪
- ⓪ (* MOS *)
- ⓪
- ⓪ FROM MOSCtrl IMPORT RealMode;
- ⓪
- ⓪ FROM Clock IMPORT Date, Time;
- ⓪
- ⓪ FROM ModCtrl IMPORT ModQuery;
- ⓪
- ⓪ FROM Lists IMPORT List, LDir, InitList,
- ⓪?CreateList, DeleteList, ResetList, AppendEntry,
- ⓪?InsertEntry, NextEntry, PrevEntry, RemoveEntry,
- ⓪?CurrentEntry, ListEmpty, ScanEntries,
- ⓪?NoOfEntries, EndOfList;
- ⓪
- ⓪ (* Graphics *)
- ⓪
- ⓪ FROM GrafBase IMPORT black, Pnt, Rect, PtrBitPattern, WritingMode,
- ⓪7Point, Rectangle, TransRect, MinPoint, ClipRect,
- ⓪7FrameRects;
- ⓪5
- ⓪ (* General GEM *)
- ⓪
- ⓪ FROM GEMGlobals IMPORT Root, MaxDepth, NoObject, MaxStr,
- ⓪7PtrObjTree, GemChar, MouseButton, MButtonSet,
- ⓪7SpecialKeySet, ObjState, OStateSet, ObjFlag,
- ⓪7OFlagSet, ObjType, FillType, SpecialKey, PtrMaxStr,
- ⓪7LineType;
- ⓪
- ⓪ FROM GEMEnv IMPORT RC, GemHandle, DeviceHandle, DevParm, PtrDevParm,
- ⓪7InitGem, ExitGem, GemActive, CurrGemHandle,
- ⓪7SetCurrGemHandle, GemError, MouseInput, DeviceParameter;
- ⓪
- ⓪ (* AES *)
- ⓪
- ⓪ FROM AESForms IMPORT FormDialMode,
- ⓪?FormDial, FormDo, FormAlert;
- ⓪
- ⓪ FROM AESObjects IMPORT FindObject, DrawObject;
- ⓪
- ⓪ FROM AESResources IMPORT ResourcePart,
- ⓪?LoadResource, FreeResource, ResourceAddr;
- ⓪
- ⓪ FROM AESWindows IMPORT SetNewDesk;
- ⓪
- ⓪ FROM AESGraphics IMPORT MouseForm,
- ⓪?DragBox, MouseKeyState, GrafMouse, RubberBox;
- ⓪
- ⓪ FROM AESMenus IMPORT MenuBar, NormalTitle, EnableItem, MenuText,
- ⓪?CheckItem;
- ⓪
- ⓪ FROM AESEvents IMPORT menuSelected, Event, RectEnterMode,
- ⓪?MessageBuffer, MultiEvent, EventSet;
- ⓪
- ⓪ FROM AESMisc IMPORT ShellGet, ShellRead;
- ⓪
- ⓪ IMPORT GEMBase;
- ⓪
- ⓪ (* Beyond GEM *)
- ⓪
- ⓪ FROM ObjHandler IMPORT SetPtrChoice,
- ⓪?SetCurrObjTree, CurrObjTree,
- ⓪?ObjectState, SetObjSpace, ObjectSpace,
- ⓪?ObjectFlags, BorderThickness, AssignTextStrings,
- ⓪?GetTextStrings, ObjTreeError, LinkTextString,
- ⓪?SetObjFlags, CreateSpecification, ObjectType,
- ⓪?SetObjType, SetIconForm, GetIconForm,
- ⓪?SetIconLook, GetIconLook, GetComplexColor,
- ⓪?SetComplexColor, GetIconColor, SetIconColor,
- ⓪?SetObjState, GetObjRelatives, RightSister;
- ⓪
- ⓪ FROM EventHandler IMPORT EventProc, WatchDogCarrier,
- ⓪?HandleEvents, ShareTime, DeInstallWatchDog,
- ⓪?InstallWatchDog, FlushEvents;
- ⓪
- ⓪ FROM EasyGEM0 IMPORT SetGetMode, ObjEnumRef,
- ⓪?ShowArrow, HideMouse, ShowMouse,
- ⓪?ObjectSpaceWithAttrs, AbsObjectSpace,
- ⓪?GetTextString, SetTextString, SetObjStateElem,
- ⓪?ToggleObjState, ObjectStateElem, SetObjFlag,
- ⓪?PrepareBox, ReleaseBox, DoSimpleBox,
- ⓪?ForceDeskRedraw, DrawObjInWdw, DeskSize,
- ⓪?DeselectButton, ToggleCheckBox, ToggleCheckPlus,
- ⓪?SetGetBoxLCard, SetGetBoxStr, SetGetBoxEnum,
- ⓪?SetGetBoxState, SetGetBoxCard, CharSize,
- ⓪?ToggleSelectBox, ObjectFlag, TreeAddress,
- ⓪?TextStringAddress;
- ⓪
- ⓪ FROM EasyGEM1 IMPORT SelectFile;
- ⓪
- ⓪
- ⓪ EXPORT TellMode, MaxTool, ToolField, NoPathsStr, EditBatStr,
- ⓪'NoLoadStr, OkStr, NoUnloadStr, NoExecStr, RetStr, EdStr, MakeStr,
- ⓪'WorkStr, CompStr, LinkStr, InfStr, ContMakeAlt, noParmAlt, ContStr,
- ⓪'InitSS, ExitSS, ShowSS, HideSS, TalkWithUser, RequestArg, ScanBox,
- ⓪'TellLoading, ClearDeskAndShowMsg, ShowBee, appl_init, appl_exit,
- ⓪'maxWorkFiles, WorkField, IsSourceName, InitWorkFieldMenuIndizies,
- ⓪'memErrorAlt, ShellName, LastCodeName, LastCodeSize, EditStr,
- ⓪'IsMBTFile, multiGEM, multiTOS;
- ⓪'
- ⓪
- ⓪ CONST minNecessaryMem = 50L * 1024L; (* min. 50k Speicher *)
- ⓪
- ⓪(screenColumns = 80; (* screen width in chars *)
- ⓪
- ⓪(MaxTool = 10;
- ⓪(maxWorkFiles = 10;
- ⓪
- ⓪(resourceFile = 'MM2TINYS.RSC';
- ⓪(batchFile = 'MM2TINYS.M2B';
- ⓪(parameterFile = 'MM2TINYS.M2P';
- ⓪(helpFile = 'MM2TINYS.HLP';
- ⓪(fileBoxLength = 41; (* Länge des file box edit strings *)
- ⓪(maxDftPathInfo = 43; (* 'infoBox.Inpath' length *)
- ⓪(maxCodeFileInfo = 43; (* 'infoBox.Incode' length *)
- ⓪(maxDefLibName = 33; (* 'infoBox.Inmkfile' length *)
- ⓪
- ⓪(msgStrLen = 70;
- ⓪(
- ⓪(noRscAlt1 = '[3][Das Resource File kann|nicht geladen werden!]';
- ⓪(noRscAlt2 = '[ Bye Bye... ]';
- ⓪(
- ⓪(noGemAlt1 = '[3][Anmeldung beim GEM|ist nicht gelungen!]';
- ⓪(noGemAlt2 = '[ Pech ?! ]';
- ⓪(
- ⓪(memErrorAlt = 'Fehler in Speicherverwaltung|Neustart empfohlen!';
- ⓪(
- ⓪(stdProtWidth = 80; (* Standardbreite des Compilerprotokolls *)
- ⓪(
- ⓪(undoKey = BYTE (97);
- ⓪(
- ⓪((* 'actManager' needs these constants, that are normally defined within
- ⓪)* the resource in the large shell.
- ⓪)*)
- ⓪(Edit = 0;
- ⓪(Compile = 1;
- ⓪(Execute = 2;
- ⓪(Link = 3;
- ⓪(Scan = 4;
- ⓪(Resident = 5;
- ⓪(
- ⓪(
- ⓪ TYPE ptrRectangle = POINTER TO Rectangle;
- ⓪(ptrList = POINTER TO List;
- ⓪(ptrString = POINTER TO String;
- ⓪(
- ⓪
- ⓪ CONST noCurrentWorkfile = -1; (* more info at 'WorkField' *)
- ⓪(
- ⓪ VAR
- ⓪0(* globale handles *)
- ⓪
- ⓪(dev : DeviceHandle;
- ⓪(gemHdl : GemHandle;
- ⓪(multiGEM : BOOLEAN;
- ⓪(multiTOS : BOOLEAN;
- ⓪(menu, desk, scanBox,
- ⓪(shellBox, optBox,
- ⓪(fileInfoBox, fileBox,
- ⓪(shellParmBox, editorParmBox,
- ⓪(sNameBox, argBox,
- ⓪(linkBox, loadBox,
- ⓪(fNameBox, formatBox,
- ⓪(msgBar, confirmBox,
- ⓪(helpBox, infoBox : PtrObjTree;
- ⓪(
- ⓪(aesPB : GEMBase.AESPB;
- ⓪(vdiPB : GEMBase.VDIPB;
- ⓪(
- ⓪(pathToLongAlt,
- ⓪(cOptToLongAlt, wrgIcon2Alt,
- ⓪(memFullAlt, drvSpaceMsg,
- ⓪(debugAlt,
- ⓪(NoLoadStr, OkStr, NoPathsStr,
- ⓪(NoUnloadStr, NoExecStr,
- ⓪(RetStr, EdStr, WorkStr,
- ⓪(CompStr, LinkStr, InfStr,
- ⓪(ContMakeAlt, ContStr, EditStr, EditBatStr,
- ⓪(parmSaveAlt, noParmAlt,
- ⓪(noNewWorkAlt, loadFailedAlt,
- ⓪(exitShellAlt, noHelpAlt,
- ⓪(MakeStr, changeWorkTitle,
- ⓪(newWorkTitle, editTitle,
- ⓪(compileTitle, executeTitle,
- ⓪(compExecTitle, linkTitle,
- ⓪(scanTitle, folderTitle,
- ⓪(deleteTitle : PtrMaxStr;
- ⓪(
- ⓪(linkBoxIdx : ARRAY[1..8] OF RECORD
- ⓪8check,
- ⓪8path : CARDINAL;
- ⓪6END;
- ⓪(
- ⓪(ToolField : ARRAY[1..MaxTool] OF RECORD
- ⓪8index : CARDINAL; (* Menu-Obj. *)
- ⓪8
- ⓪8CASE used :BOOLEAN OF
- ⓪:TRUE : name : FileStr;
- ⓪8END;
- ⓪6END;
- ⓪
- ⓪((* Contains all work files.
- ⓪)*)
- ⓪(WorkField : RECORD
- ⓪8noUsed : CARDINAL;
- ⓪8current : INTEGER;
- ⓪8elems : ARRAY[0..maxWorkFiles - 1] OF RECORD
- ⓪Mindex : CARDINAL;
- ⓪Mused : BOOLEAN;
- ⓪McodeName : FileStr;
- ⓪MsourceName : FileStr;
- ⓪KEND;
- ⓪8baseHeightOfWibox: INTEGER;
- ⓪6END;
- ⓪(
- ⓪(msgStr : String;
- ⓪
- ⓪
- ⓪0(* Variablen, die die aktuellen Shellparameter speichern *)
- ⓪
- ⓪(quitStatus : (noQuit, quit, quickQuit);
- ⓪(LastCodeName : FileStr;
- ⓪(LastCodeSize : LONGCARD;
- ⓪(
- ⓪0(* Globale Infovariablen *)
- ⓪(
- ⓪(deskSize : Rectangle;
- ⓪(charWidth, charHeight : CARDINAL;
- ⓪(
- ⓪(tellSpace : Rectangle; (* Darf nur von 'TellLoading'
- ⓪Q* benutzt werden.
- ⓪Q*)
- ⓪
- ⓪(lastArgs: ARRAY [0..127] OF CHAR;
- ⓪
- ⓪(ShellName: PathStr;
- ⓪
- ⓪0(* Globale Kurzzeitvariablen *)
- ⓪(
- ⓪(ok : BOOLEAN; (* Siehe auch 'notOKAlert' *)
- ⓪(but : CARDINAL;
- ⓪(
- ⓪0(* global dummies *)
- ⓪(
- ⓪(voidC : CARDINAL;
- ⓪(voidO : BOOLEAN;
- ⓪(voidCh : CHAR;
- ⓪(voidI : INTEGER;
- ⓪(void128 : ARRAY [0..127] OF CHAR;
- ⓪(voidADR : ADDRESS;
- ⓪(voidFrame: Rectangle;
- ⓪
- ⓪
- ⓪8(* Diverse Hilfsroutinen *)
- ⓪8(* ===================== *)
- ⓪
- ⓪((* mouse *)
- ⓪(
- ⓪ PROCEDURE mouseImage;
- ⓪
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪*DC.W $0, $0, $1, $0, $1
- ⓪*DC.W $07F0,$07F0,$07F0,$07F0,$0FF8,$1FFC,$3FFE,$3FFF
- ⓪*DC.W $3FFF,$3FFF,$1FFF,$0FFF,$0FFF,$07FF,$03FF,$03FE
- ⓪*DC.W $0000,$03E0,$03E0,$02A0,$07F0,$0E38,$1F7C,$1FFD
- ⓪*DC.W $1FFC,$1FFD,$0FF8,$07F2,$07FD,$03E0,$01CA,$01E8
- ⓪$END;
- ⓪"END mouseImage;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE ShowBee;
- ⓪
- ⓪"BEGIN
- ⓪$GrafMouse (userCursor, ADDRESS (mouseImage))
- ⓪"END ShowBee;
- ⓪
- ⓪
- ⓪ PROCEDURE appl_init;
- ⓪"BEGIN
- ⓪$WITH aesPB DO
- ⓪&WITH pcontrl^ DO
- ⓪(opcode:= 10;
- ⓪(sintin:= 0;
- ⓪(sintout:= 1;
- ⓪(sadrin:= 0;
- ⓪(sadrout:= 0;
- ⓪&END;
- ⓪$END;
- ⓪$GEMBase.CallAES( ADR( aesPB));
- ⓪"END appl_init;
- ⓪
- ⓪ PROCEDURE appl_exit;
- ⓪"BEGIN
- ⓪$WITH aesPB DO
- ⓪&WITH pcontrl^ DO
- ⓪(opcode:= 19;
- ⓪(sintin:= 0;
- ⓪(sintout:= 1;
- ⓪(sadrin:= 0;
- ⓪(sadrout:= 0;
- ⓪&END;
- ⓪$END;
- ⓪$GEMBase.CallAES( ADR( aesPB));
- ⓪"END appl_exit;
- ⓪
- ⓪
- ⓪((* strings *)
- ⓪
- ⓪ (* appendSpcTo -- Fügt Spaces an 'str' an, bis 'Length (str) = i'
- ⓪!*)
- ⓪(
- ⓪ PROCEDURE appendSpcTo (i: CARDINAL; VAR str: ARRAY OF CHAR);
- ⓪
- ⓪"VAR l : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$l := HIGH (str);
- ⓪$IF i < l THEN l := i END;
- ⓪$Append (Space (l - Length (str)), str, voidO);
- ⓪"END appendSpcTo;
- ⓪
- ⓪ (* truncCopyStr -- 'source' wird nach 'dest' kopiert. Es gibt 'maxDestLen'
- ⓪!* die Größe von 'dest' an, ist 'source' größer, so wird
- ⓪!* der vordere Teil abgeschnitten und ein '..' vorange-
- ⓪!* stellt.
- ⓪!*)
- ⓪!
- ⓪ PROCEDURE truncCopyString ( source : ARRAY OF CHAR;
- ⓪?maxDestLen: CARDINAL;
- ⓪;VAR dest : ARRAY OF CHAR);
- ⓪
- ⓪"VAR sourceLen: CARDINAL;
- ⓪
- ⓪"BEGIN
- ⓪$sourceLen := Length (source);
- ⓪$IF sourceLen > maxDestLen
- ⓪$THEN
- ⓪&Copy (source, sourceLen - maxDestLen - 2, sourceLen, dest, voidO);
- ⓪&Insert ('..', 0, dest, voidO);
- ⓪$ELSE Assign (source, dest, voidO) END;
- ⓪"END truncCopyString;
- ⓪&
- ⓪&
- ⓪((* lists *)
- ⓪
- ⓪ (* deleteSimpleList -- Deletes the list 'l' completly. The elements of the
- ⓪!* list must be dynamical allocated variables and would
- ⓪!* all be disposed.
- ⓪!* If 'killCarrier = TRUE' then list-carrier would be
- ⓪!* deleted.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE deleteSimpleList (VAR l: List; killCarrier: BOOLEAN);
- ⓪
- ⓪"VAR entry: ADDRESS;
- ⓪
- ⓪"BEGIN
- ⓪$ResetList (l);
- ⓪$entry := PrevEntry (l);
- ⓪$WHILE entry # NIL DO
- ⓪&RemoveEntry (l, voidO);
- ⓪&DEALLOCATE (entry, 0L);
- ⓪&entry := CurrentEntry (l);
- ⓪$END;
- ⓪$IF killCarrier THEN DeleteList (l, voidO) END;
- ⓪"END deleteSimpleList;
- ⓪
- ⓪"
- ⓪((* tests *)
- ⓪
- ⓪ PROCEDURE withShift (VAR s: SpecialKeySet): BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$RETURN (leftShiftKey IN s) OR (rightShiftKey IN s)
- ⓪"END withShift;
- ⓪
- ⓪ PROCEDURE withBothShifts (VAR s: SpecialKeySet): BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$RETURN (leftShiftKey IN s) AND (rightShiftKey IN s)
- ⓪"END withBothShifts;
- ⓪
- ⓪ PROCEDURE withCtrl (VAR s: SpecialKeySet): BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$RETURN controlKey IN s
- ⓪"END withCtrl;
- ⓪
- ⓪ PROCEDURE withAlt (VAR s: SpecialKeySet): BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$RETURN alternateKey IN s
- ⓪"END withAlt;
- ⓪
- ⓪"
- ⓪((* procs for AES objects *)
- ⓪(
- ⓪ (* formDo -- Is same as 'FormDo', but clears the most significant bit
- ⓪!* of 'exit' (double click).
- ⓪!*)
- ⓪!
- ⓪ PROCEDURE formDo (tree: PtrObjTree; start: CARDINAL; VAR exit: CARDINAL);
- ⓪
- ⓪"BEGIN
- ⓪$FormDo (tree, start, exit);
- ⓪$exit := exit MOD (MaxCard DIV 2);
- ⓪"END formDo;
- ⓪"
- ⓪ PROCEDURE drawObject (tree: PtrObjTree; obj: CARDINAL);
- ⓪
- ⓪"VAR space : Rectangle;
- ⓪
- ⓪"BEGIN
- ⓪$space := AbsObjectSpace (tree, obj);
- ⓪$DrawObject (tree, Root, MaxDepth, space);
- ⓪"END drawObject;
- ⓪"
- ⓪ PROCEDURE hideObj (obj: CARDINAL; hide: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$SetObjFlag (CurrObjTree (), obj, hideTreeFlg, hide);
- ⓪"END hideObj;
- ⓪
- ⓪"
- ⓪0(* Operations on path/file names *)
- ⓪
- ⓪ (* IsSourceName -- Is TRUE, if 'path' descibes a source file else FALSE.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE IsSourceName (REF path: ARRAY OF CHAR): BOOLEAN;
- ⓪
- ⓪"VAR name : NameStr;
- ⓪(prefix : ARRAY[0..64] OF CHAR;
- ⓪(suffix : ARRAY[0..2] OF CHAR;
- ⓪(sufcnt : MySuf;
- ⓪(isSource: BOOLEAN;
- ⓪(
- ⓪"BEGIN
- ⓪$SplitPath (path, prefix, name);
- ⓪$SplitName (name, name, suffix);
- ⓪$isSource := ~ Empty (suffix);
- ⓪$IF isSource THEN
- ⓪&sufcnt:= MIN (MySuf);
- ⓪&LOOP
- ⓪(IF StrEqual (suffix, suf[sufcnt]) THEN isSource := FALSE; EXIT
- ⓪(ELSIF sufcnt = MAX (MySuf) THEN EXIT
- ⓪(ELSE INC (sufcnt) END
- ⓪&END;
- ⓪$END;
- ⓪$RETURN isSource
- ⓪"END IsSourceName;
- ⓪
- ⓪ PROCEDURE isMSPFile (REF name: ARRAY OF CHAR): BOOLEAN;
- ⓪"VAR n: ARRAY [0..11] OF CHAR;
- ⓪"BEGIN
- ⓪$SplitPath (name, void128, n);
- ⓪$SplitName (n, void128, n);
- ⓪$RETURN StrEqual (n, suf[m2p])
- ⓪"END isMSPFile;
- ⓪"
- ⓪ PROCEDURE IsMBTFile (REF name: ARRAY OF CHAR): BOOLEAN;
- ⓪"VAR n: ARRAY [0..11] OF CHAR;
- ⓪"BEGIN
- ⓪$SplitPath (name, void128, n);
- ⓪$SplitName (n, void128, n);
- ⓪$RETURN StrEqual (n, suf[m2b])
- ⓪"END IsMBTFile;
- ⓪"
- ⓪ PROCEDURE isMakeFile (REF name: ARRAY OF CHAR): BOOLEAN;
- ⓪"VAR n: ARRAY [0..11] OF CHAR;
- ⓪"BEGIN
- ⓪$SplitPath (name, void128, n);
- ⓪$SplitName (n, void128, n);
- ⓪$RETURN StrEqual (n, suf[m2m])
- ⓪"END isMakeFile;
- ⓪"
- ⓪"
- ⓪0(* Alerts *)
- ⓪0(* ====== *)
- ⓪
- ⓪ PROCEDURE doAlert (alt: PtrMaxStr);
- ⓪
- ⓪"BEGIN
- ⓪$FormAlert (1, alt^, voidC);
- ⓪"END doAlert;
- ⓪"
- ⓪
- ⓪ (* multiStringAlert -- Setzt aus den zwei Zeichenketten eine Alarmmeldung
- ⓪!* zusammen und gibt diese aus.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE multiStringAlert (REF str1, str2: ARRAY OF CHAR; VAR but: CARDINAL);
- ⓪
- ⓪"VAR str : ARRAY[0..255] OF CHAR;
- ⓪"
- ⓪"BEGIN
- ⓪$Concat (str1, str2, str, voidO);
- ⓪$FormAlert (1, str, but);
- ⓪"END multiStringAlert;
- ⓪
- ⓪ (* notOKAlert -- Falls die globale Variable 'ok = FALSE' ist, so wird der
- ⓪!* übergebene FileStr 'str' innerhalb einer Alert-Box ange-
- ⓪!* zeigt.
- ⓪!*)
- ⓪!
- ⓪ PROCEDURE notOKAlert (str: PtrMaxStr);
- ⓪
- ⓪"BEGIN
- ⓪$IF ~ ok THEN doAlert (str) END;
- ⓪"END notOKAlert;
- ⓪
- ⓪ PROCEDURE flexAlert (default: CARDINAL; REF str1,str2:ARRAY OF CHAR; alt:PtrMaxStr;
- ⓪5VAR but:CARDINAL);
- ⓪5
- ⓪"VAR str, strx : ARRAY[0..255] OF CHAR;
- ⓪*i, j : INTEGER;
- ⓪7
- ⓪"BEGIN
- ⓪$i:=Pos ('&',alt^, 0);
- ⓪$j:=Pos ('&',alt^, i + 1);
- ⓪$Copy (alt^, 0,i, str, voidO);
- ⓪$Append (str1, str, voidO);
- ⓪$IF j >= 0 THEN
- ⓪&Copy (alt^, i + 1,j - i - 1, strx, voidO);
- ⓪&Append (strx, str, voidO);
- ⓪&Append (str2, str, voidO);
- ⓪&i:=j;
- ⓪$END;
- ⓪$Copy (alt^, i + 1,Length (alt^) - CARDINAL (i) - 1, strx, voidO);
- ⓪$Append (strx, str, voidO);
- ⓪$FormAlert (default,str, but);
- ⓪"END flexAlert;
- ⓪"
- ⓪ PROCEDURE reportOutOfMemory;
- ⓪
- ⓪"BEGIN
- ⓪$doAlert (memFullAlt);
- ⓪"END reportOutOfMemory;
- ⓪
- ⓪
- ⓪8(* menu procs *)
- ⓪8(* =========== *)
- ⓪
- ⓪ PROCEDURE InitWorkFieldMenuIndizies;
- ⓪
- ⓪"BEGIN
- ⓪$WorkField.elems[0].index := Mwwork0;
- ⓪$WorkField.elems[1].index := Mwwork1;
- ⓪$WorkField.elems[2].index := Mwwork2;
- ⓪$WorkField.elems[3].index := Mwwork3;
- ⓪$WorkField.elems[4].index := Mwwork4;
- ⓪$WorkField.elems[5].index := Mwwork5;
- ⓪$WorkField.elems[6].index := Mwwork6;
- ⓪$WorkField.elems[7].index := Mwwork7;
- ⓪$WorkField.elems[8].index := Mwwork8;
- ⓪$WorkField.elems[9].index := Mwwork9;
- ⓪"END InitWorkFieldMenuIndizies;
- ⓪"
- ⓪"
- ⓪ (* setTools -- Verändert den Menubaum so, daß nur noch die in 'ToolField'
- ⓪!* vorhandenen Menu-Tool-Einträge sichtbar sind.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE setTools;
- ⓪
- ⓪"CONST toolNameLen = 12;
- ⓪
- ⓪"VAR f1, f2 : Rectangle;
- ⓪(h : INTEGER;
- ⓪(i : CARDINAL;
- ⓪(str, str2 : FileStr;
- ⓪"
- ⓪"BEGIN
- ⓪"
- ⓪$SetCurrObjTree (menu, FALSE);
- ⓪$h := 0;
- ⓪$FOR i := 1 TO MaxTool DO
- ⓪&WITH ToolField[i]
- ⓪&DO
- ⓪(IF used THEN
- ⓪(
- ⓪*GetTextString (menu, index, str);
- ⓪*SplitPath (name, void128, str2);
- ⓪*Append (Space (toolNameLen - Length (str2)), str2, voidO);
- ⓪*Delete (str, 2, toolNameLen, voidO);
- ⓪*Insert (str2, 2, str, voidO);
- ⓪*MenuText (menu, index, str);
- ⓪*f1 := ObjectSpace (index);
- ⓪*h := h + f1.h
- ⓪*
- ⓪(END;
- ⓪(hideObj (index, NOT used);
- ⓪&END
- ⓪$END;
- ⓪$IF h = 0
- ⓪$THEN
- ⓪&IF NOT ObjectFlag (menu, Mtools, hideTreeFlg)
- ⓪&THEN
- ⓪(hideObj (Mtools, TRUE);
- ⓪(f1 := ObjectSpace (Mibox);
- ⓪(f2 := ObjectSpace (Mtools);
- ⓪(DEC (f1.w, f2.w);
- ⓪(SetObjSpace (Mibox, f1);
- ⓪&END;
- ⓪$ELSE
- ⓪&IF ObjectFlag (menu, Mtools, hideTreeFlg) THEN
- ⓪(hideObj (Mtools, FALSE);
- ⓪(f1 := ObjectSpace (Mibox);
- ⓪(f2 := ObjectSpace (Mtools);
- ⓪(INC (f1.w, f2.w);
- ⓪(SetObjSpace (Mibox, f1);
- ⓪&END;
- ⓪&f1 := ObjectSpace (Tibox);
- ⓪&f1.h := h;
- ⓪&SetObjSpace (Tibox, f1);
- ⓪$END;
- ⓪$
- ⓪$MenuBar (menu, TRUE);
- ⓪$
- ⓪"END setTools;
- ⓪
- ⓪
- ⓪ (* setWorkfiles -- Verändert den Menubaum so, daß nur noch die in 'WorkField'
- ⓪!* vorhandenen Menu-Workfile-Einträge sichtbar sind.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE setWorkfiles;
- ⓪
- ⓪"CONST workNameLen = 12;
- ⓪
- ⓪"VAR i, lastIdx: INTEGER;
- ⓪(str, str2 : FileStr;
- ⓪(f1, f2 : Rectangle;
- ⓪"
- ⓪"BEGIN
- ⓪$SetCurrObjTree (menu, FALSE);
- ⓪$lastIdx := 0;
- ⓪$FOR i := 0 TO maxWorkFiles - 1 DO
- ⓪$
- ⓪&WITH WorkField.elems[i]
- ⓪&DO
- ⓪(GetTextString (menu, index, str);
- ⓪(IF used
- ⓪(THEN
- ⓪*lastIdx := i;
- ⓪*SplitPath (sourceName, void128, str2);
- ⓪(ELSE
- ⓪*str2 := '';
- ⓪(END;
- ⓪(Append (Space (workNameLen - Length (str2)), str2, voidO);
- ⓪(Delete (str, 2, workNameLen, voidO);
- ⓪(Insert (str2, 2, str, voidO);
- ⓪(MenuText (menu, index, str);
- ⓪*
- ⓪(SetObjStateElem (menu, index, disableObj, NOT used);
- ⓪(CheckItem (menu, index, FALSE);
- ⓪&END
- ⓪&
- ⓪$END;(*FOR*)
- ⓪$
- ⓪$(* Cause the work file number zero is the last in the pull down menu.
- ⓪%*)
- ⓪$IF WorkField.elems[0].used THEN lastIdx := 10 END;
- ⓪$
- ⓪$(* Hide all work file menu entries after the last used one.
- ⓪%*)
- ⓪$FOR i := 1 TO maxWorkFiles - 1
- ⓪$DO
- ⓪&hideObj (WorkField.elems[i].index, i > lastIdx);
- ⓪$END;
- ⓪$hideObj (WorkField.elems[0].index, 10 > lastIdx);
- ⓪$
- ⓪$(* Adjust size of the ibox, that contains the pull down menu.
- ⓪%*)
- ⓪$f1 := ObjectSpace (Wibox);
- ⓪$f2 := ObjectSpace (Mwwork0);
- ⓪$f1.h := lastIdx * f2.h + WorkField.baseHeightOfWibox;
- ⓪$SetObjSpace (Wibox, f1);
- ⓪$
- ⓪$IF WorkField.current # noCurrentWorkfile
- ⓪$THEN
- ⓪&CheckItem (menu, WorkField.elems[WorkField.current].index, TRUE);
- ⓪$END;
- ⓪"END setWorkfiles;
- ⓪
- ⓪
- ⓪ PROCEDURE animateMenuTitle (title: CARDINAL; VAR space: Rectangle);
- ⓪
- ⓪"BEGIN
- ⓪$NormalTitle (menu, title, FALSE);
- ⓪$space := AbsObjectSpace (menu, title);
- ⓪"END animateMenuTitle;
- ⓪
- ⓪ PROCEDURE deAnimateMenuTitle (title: CARDINAL);
- ⓪
- ⓪"BEGIN
- ⓪$NormalTitle (menu, title, TRUE);
- ⓪"END deAnimateMenuTitle;
- ⓪"
- ⓪
- ⓪0(* Routinen für das Dialogbox-Managment *)
- ⓪0(* ==================================== *)
- ⓪
- ⓪((* misc. box primitives *)
- ⓪
- ⓪ TYPE arrayOfTwoCards = ARRAY[1..2] OF CARDINAL;
- ⓪
- ⓪ PROCEDURE twoCardsInArray (c1, c2: CARDINAL): arrayOfTwoCards;
- ⓪
- ⓪"VAR res: arrayOfTwoCards;
- ⓪"
- ⓪"BEGIN
- ⓪$res[1] := c1;
- ⓪$res[2] := c2;
- ⓪$RETURN res
- ⓪"END twoCardsInArray;
- ⓪"
- ⓪
- ⓪((* box handlers *)
- ⓪"
- ⓪ PROCEDURE doCompilerOptionBox;
- ⓪
- ⓪"PROCEDURE setGetCompOpts (mode: SetGetMode);
- ⓪"
- ⓪$VAR notProtocol,
- ⓪(found : BOOLEAN;
- ⓪(fname : FileStr;
- ⓪"
- ⓪$BEGIN
- ⓪&WITH CompilerParm DO
- ⓪(SetGetBoxStr (optBox, Oname, mode, name);
- ⓪(Upper (name);
- ⓪(SetGetBoxState (optBox, Oquite, mode, checkObj, shortMsgs);
- ⓪(SetGetBoxState (optBox, Opmark, mode, checkObj, protocol);
- ⓪(IF mode = setValue THEN
- ⓪*notProtocol := ~ protocol;
- ⓪*SetGetBoxState (optBox, Oppath, setValue, disableObj, notProtocol);
- ⓪*SetGetBoxState (optBox, Opwidth, setValue, disableObj, notProtocol);
- ⓪(END;
- ⓪(SetGetBoxStr (optBox, Oargs, mode, CompilerArgs);
- ⓪(SetGetBoxStr (optBox, Oppath, mode, protName);
- ⓪(SetGetBoxCard (optBox, Opwidth, mode, protWidth);
- ⓪(IF protWidth < 10 THEN protWidth := stdProtWidth END;
- ⓪(
- ⓪(SetGetBoxStr (optBox, Ooutput, mode, MainOutputPath);
- ⓪(ValidatePath (MainOutputPath);
- ⓪(SetGetBoxStr (optBox, Olibrary, mode, DefLibName);
- ⓪(IF mode = getValue THEN
- ⓪*Upper (DefLibName);
- ⓪*IF Length (FilePath (DefLibName)) = 0 THEN
- ⓪,SearchFile (DefLibName, DefPaths, fromStart, found, DefLibName);
- ⓪*END
- ⓪(END;
- ⓪(SetGetBoxStr (optBox, Oerror, mode, ErrListFile);
- ⓪(Upper (ErrListFile);
- ⓪&END;
- ⓪$END setGetCompOpts;
- ⓪$
- ⓪
- ⓪"VAR space, start : Rectangle;
- ⓪(exit : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$setGetCompOpts (setValue);
- ⓪$PrepareBox (optBox, start, space);
- ⓪$
- ⓪$LOOP
- ⓪&formDo (optBox, Ooutput, exit);
- ⓪&
- ⓪&CASE exit OF
- ⓪(Ook, Oquit: DeselectButton (optBox, exit); EXIT|
- ⓪(Oquite : ToggleCheckBox (optBox, Oquite)|
- ⓪(Opmark : ToggleCheckPlus (optBox, Opmark,
- ⓪EtwoCardsInArray (Oppath, Opwidth))|
- ⓪&ELSE
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$IF exit = Ook THEN setGetCompOpts (getValue) END;
- ⓪$
- ⓪$ReleaseBox(optBox, start, space);
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doCompilerOptionBox;
- ⓪
- ⓪ PROCEDURE doLinkerOptionBox;
- ⓪
- ⓪"PROCEDURE setGetLinkOpts (mode: SetGetMode);
- ⓪
- ⓪$VAR i : CARDINAL;
- ⓪(valid,
- ⓪(notValid: BOOLEAN;
- ⓪(refs : ARRAY [1..4] OF ObjEnumRef;
- ⓪$
- ⓪$BEGIN
- ⓪&SetGetBoxStr (linkBox, Loname, mode, LinkerParm.name);
- ⓪&Upper (LinkerParm.name);
- ⓪&FOR i:= 1 TO 8 DO
- ⓪(WITH linkBoxIdx[i] DO
- ⓪*SetGetBoxState (linkBox, check, mode, checkObj, LinkerParm.linkList[i].valid);
- ⓪*IF mode = setValue THEN
- ⓪,notValid := ~ LinkerParm.linkList[i].valid;
- ⓪,SetGetBoxState (linkBox, path, setValue, disableObj, notValid);
- ⓪*END;
- ⓪*SetGetBoxStr (linkBox, path, mode, LinkerParm.linkList[i].name);
- ⓪(END
- ⓪&END;
- ⓪&valid := (LinkerParm.linkStackSize # 0L); notValid := ~ valid;
- ⓪&SetGetBoxState (linkBox, Lochecks, mode, checkObj, valid);
- ⓪&IF mode = setValue THEN
- ⓪(SetGetBoxState (linkBox, Lostack, setValue, disableObj, notValid);
- ⓪&END;
- ⓪&SetGetBoxLCard (linkBox, Lostack, mode, LinkerParm.linkStackSize);
- ⓪&IF ~ valid THEN LinkerParm.linkStackSize := 0L END;
- ⓪&SetGetBoxCard (linkBox, Lomaxmod, mode, LinkerParm.maxLinkMod);
- ⓪&
- ⓪&SetGetBoxState (linkBox, Lofastld, mode, checkObj, LinkerParm.fastLoad);
- ⓪&SetGetBoxState (linkBox, Lofastco, mode, checkObj, LinkerParm.fastCode);
- ⓪&SetGetBoxState (linkBox, Lofastme, mode, checkObj, LinkerParm.fastMemory);
- ⓪&
- ⓪&SetGetBoxState (linkBox, Losymfil, mode, checkObj, LinkerParm.symbolFile);
- ⓪&
- ⓪&refs[1].obj := Lonoopt;
- ⓪&refs[1].value := WORD (noOptimize);
- ⓪&refs[2].obj := Lonamopt;
- ⓪&refs[2].value := WORD (nameOptimize);
- ⓪&refs[3].obj := Lomiddle;
- ⓪&refs[3].value := WORD (partOptimize);
- ⓪&refs[4].obj := Lofull;
- ⓪&refs[4].value := WORD (fullOptimize);
- ⓪&i := ORD (LinkerParm.optimize);
- ⓪&SetGetBoxEnum (linkBox, refs, mode, i);
- ⓪&LinkerParm.optimize := VAL (LinkMode, i);
- ⓪$END setGetLinkOpts;
- ⓪$
- ⓪
- ⓪"VAR space, start : Rectangle;
- ⓪(exit, i : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$setGetLinkOpts (setValue);
- ⓪$PrepareBox (linkBox, start, space);
- ⓪$
- ⓪$LOOP
- ⓪&formDo (linkBox, Root, exit);
- ⓪&
- ⓪&IF (exit = Look) OR (exit = Loquit) THEN
- ⓪(DeselectButton (linkBox, exit); EXIT
- ⓪&ELSIF exit = Lochecks THEN
- ⓪(ToggleCheckPlus (linkBox, Lochecks, Lostack)
- ⓪&ELSIF (exit = Lofastld) OR (exit = Lofastco) OR (exit = Lofastme)
- ⓪&OR (exit = Losymfil) THEN
- ⓪(ToggleCheckBox (linkBox, exit)
- ⓪&ELSE
- ⓪(FOR i := 1 TO 8 DO
- ⓪*IF linkBoxIdx[i].check = exit THEN
- ⓪,ToggleCheckPlus (linkBox, exit, linkBoxIdx[i].path)
- ⓪*END
- ⓪(END;
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$IF exit = Look THEN setGetLinkOpts (getValue) END;
- ⓪"
- ⓪$ReleaseBox(linkBox, start,space);
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doLinkerOptionBox;
- ⓪"
- ⓪ PROCEDURE doScanBox (): BOOLEAN;
- ⓪
- ⓪"VAR but : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$ScanAddr := 0L;
- ⓪$SetTextString (scanBox, Saddr, '');
- ⓪$DoSimpleBox (scanBox, Rect (-1, -1, -1, -1), but);
- ⓪$IF but = Sok THEN SetGetBoxLCard (scanBox, Saddr, getValue, ScanAddr) END;
- ⓪$RETURN ScanAddr # 0L
- ⓪"END doScanBox;
- ⓪
- ⓪ FORWARD setWorkfileName (idx: CARDINAL; VAR name: ARRAY OF CHAR);
- ⓪
- ⓪ (* doChangeWork -- Inquires a file name from the user, that becomes the new
- ⓪!* work file number 'idx'.
- ⓪!* 'idx' has to be an active work file.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE doChangeWork (idx: INTEGER);
- ⓪
- ⓪"VAR str : FileStr;
- ⓪*ok : BOOLEAN;
- ⓪"
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mworkfil, voidFrame);
- ⓪"
- ⓪$str := WorkField.elems[idx].sourceName;
- ⓪$SelectFile (changeWorkTitle^, str, ok);
- ⓪$
- ⓪$IF ok
- ⓪$THEN
- ⓪&Upper (str);
- ⓪&setWorkfileName (idx, str);
- ⓪$END;
- ⓪$
- ⓪$deAnimateMenuTitle (Mworkfil);
- ⓪"END doChangeWork;
- ⓪
- ⓪ PROCEDURE doShellParameterBox;
- ⓪
- ⓪"PROCEDURE setGetShellParm (mode: SetGetMode);
- ⓪"
- ⓪$BEGIN
- ⓪&WITH shellParm DO
- ⓪(SetGetBoxState (shellParmBox, Spbreak, mode, checkObj, breakActive);
- ⓪(SetGetBoxStr (shellParmBox, Spbaname, mode, batchPath);
- ⓪(Upper (batchPath);
- ⓪(SetGetBoxStr (shellParmBox, Sppaname, mode, parameterPath);
- ⓪(Upper (parameterPath);
- ⓪(SetGetBoxStr (shellParmBox, Spscpath, mode, TemporaryPath);
- ⓪(ValidatePath (TemporaryPath);
- ⓪(IF TemporaryPath[0] # HomeSymbol THEN
- ⓪*MakeFullPath (TemporaryPath, voidI);
- ⓪(END;
- ⓪(SetGetBoxStr (shellParmBox, Spmake, mode, makeName);
- ⓪(Upper (makeName);
- ⓪&END;
- ⓪$END setGetShellParm;
- ⓪$
- ⓪"VAR space, start : Rectangle;
- ⓪(exit : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$setGetShellParm (setValue);
- ⓪$PrepareBox (shellParmBox, start, space);
- ⓪$
- ⓪$LOOP
- ⓪&formDo (shellParmBox, Root, exit);
- ⓪&
- ⓪&CASE exit OF
- ⓪(Spok, Spquit: DeselectButton (shellParmBox, exit); EXIT|
- ⓪(
- ⓪(Spbreak : ToggleCheckBox (shellParmBox, exit)|
- ⓪&ELSE
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$IF exit = Spok THEN setGetShellParm (getValue) END;
- ⓪$
- ⓪$ReleaseBox(shellParmBox, start, space);
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doShellParameterBox;
- ⓪
- ⓪ PROCEDURE doEditorParameterBox;
- ⓪
- ⓪"PROCEDURE setGetEditorParm (mode: SetGetMode);
- ⓪"
- ⓪$VAR disable: BOOLEAN;
- ⓪"
- ⓪$BEGIN
- ⓪&WITH EditorParm DO
- ⓪(SetGetBoxStr (editorParmBox, Epname, mode, name);
- ⓪(Upper (name);
- ⓪(SetGetBoxState (editorParmBox, Epsearch, mode,
- ⓪8checkObj, searchSources);
- ⓪(SetGetBoxState (editorParmBox, Epstoper, mode,
- ⓪8checkObj, waitOnError);
- ⓪(SetGetBoxState (editorParmBox, Epshtemp, mode,
- ⓪8checkObj, tempShellFile);
- ⓪(disable := ~ tempShellFile;
- ⓪(SetGetBoxState (editorParmBox, Epshname, mode, disableObj, disable);
- ⓪(SetGetBoxStr (editorParmBox, Epshname, mode, tempShellName);
- ⓪(
- ⓪(SetGetBoxState (editorParmBox, Epedtemp, mode,
- ⓪8checkObj, tempEditorFile);
- ⓪(disable := ~ tempEditorFile;
- ⓪(SetGetBoxState (editorParmBox, Epedname, mode, disableObj, disable);
- ⓪(SetGetBoxStr (editorParmBox, Epedname, mode, tempEditorName);
- ⓪
- ⓪(SetGetBoxState (editorParmBox, Eparg, mode,
- ⓪8checkObj, passArgument);
- ⓪(SetGetBoxState (editorParmBox, Eparname, mode,
- ⓪8checkObj, passName);
- ⓪(SetGetBoxState (editorParmBox, Eparerro, mode,
- ⓪8checkObj, passErrorText);
- ⓪(SetGetBoxState (editorParmBox, Eparpos, mode,
- ⓪8checkObj, passErrorPos);
- ⓪&END;
- ⓪$END setGetEditorParm;
- ⓪$
- ⓪"VAR start, space: Rectangle;
- ⓪(exit : CARDINAL;
- ⓪
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$setGetEditorParm (setValue);
- ⓪$PrepareBox (editorParmBox, start, space);
- ⓪$
- ⓪$LOOP
- ⓪&formDo (editorParmBox, Root, exit);
- ⓪&
- ⓪&CASE exit OF
- ⓪(Epok, Epquit: DeselectButton (editorParmBox, exit); EXIT|
- ⓪(
- ⓪(Epsearch,
- ⓪(Epstoper,
- ⓪(Eparg,
- ⓪(Eparname,
- ⓪(Eparerro,
- ⓪(Eparpos : ToggleCheckBox (editorParmBox, exit)|
- ⓪(Epshtemp : ToggleCheckPlus (editorParmBox, Epshtemp, Epshname)|
- ⓪(Epedtemp : ToggleCheckPlus (editorParmBox, Epedtemp, Epedname)|
- ⓪&ELSE
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$IF exit = Epok THEN setGetEditorParm (getValue) END;
- ⓪"
- ⓪$ReleaseBox(editorParmBox, start, space);
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doEditorParameterBox;
- ⓪"
- ⓪ PROCEDURE doHelpBox (REF fname: ARRAY OF CHAR);
- ⓪
- ⓪"CONST noLines = 14; (* Anzahl der Zeilen in der Hilfe-Box *)
- ⓪(noRows = 65;
- ⓪
- ⓪"VAR start, space : Rectangle;
- ⓪(but, i,
- ⓪(visibleLines : CARDINAL;
- ⓪(text : List;
- ⓪(err, end, first : BOOLEAN;
- ⓪(f : File;
- ⓪(str : ptrString;
- ⓪(path : PathStr;
- ⓪
- ⓪"PROCEDURE fileErr (): BOOLEAN;
- ⓪$VAR state: INTEGER;
- ⓪$BEGIN
- ⓪&state := State (f);
- ⓪&IF (state < fOK) OR (state = fEOF) THEN
- ⓪)ResetState (f);
- ⓪)FileAlert (state);
- ⓪)RETURN TRUE
- ⓪&ELSE
- ⓪)RETURN FALSE
- ⓪&END;
- ⓪$END fileErr;
- ⓪$
- ⓪"PROCEDURE addLine (obj: CARDINAL);
- ⓪$BEGIN
- ⓪&IF NOT end THEN
- ⓪(str := NextEntry (text);
- ⓪(IF str = NIL THEN end := TRUE ELSE INC (visibleLines) END;
- ⓪&END;
- ⓪&IF end THEN
- ⓪(SetTextString (helpBox, obj, '')
- ⓪&ELSE
- ⓪(IF Length (str^) > noRows THEN
- ⓪*Delete (str^, noRows, Length (str^) - noRows, voidO);
- ⓪(END;
- ⓪(SetTextString (helpBox, obj, str^);
- ⓪&END;
- ⓪$END addLine;
- ⓪$
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$(* Lies Hilfe-Datei ein.
- ⓪%*)
- ⓪
- ⓪$Concat (ShellPath, fname, path, voidO);
- ⓪$CreateList (text, err);
- ⓪$IF err THEN reportOutOfMemory; deAnimateMenuTitle (Mparms); RETURN END;
- ⓪$ShowBee;
- ⓪$Open (f, path, readSeqTxt);
- ⓪$IF (State (f)) # fOK
- ⓪$THEN
- ⓪&doAlert (noHelpAlt);
- ⓪&DeleteList (text, voidO);
- ⓪&deAnimateMenuTitle (Mparms);
- ⓪&ShowArrow;
- ⓪&RETURN
- ⓪$END;
- ⓪$LOOP
- ⓪$
- ⓪&NEW (str);
- ⓪&IF str = NIL THEN reportOutOfMemory; EXIT END;
- ⓪&IF fileErr () THEN DISPOSE (str); EXIT END;
- ⓪&Text.ReadString (f, str^);
- ⓪$ AppendEntry (text, str, err);
- ⓪&IF err THEN reportOutOfMemory; DISPOSE (str); EXIT END;
- ⓪&IF fileErr () THEN EXIT END;
- ⓪&Text.ReadLn (f);
- ⓪$
- ⓪$END;
- ⓪$Close (f);
- ⓪$ShowArrow;
- ⓪$
- ⓪$(* Zeige Hilfe-Datei an.
- ⓪%*)
- ⓪%
- ⓪$ResetList (text);
- ⓪$but := Hpnext; visibleLines := 0; first := TRUE;
- ⓪$REPEAT
- ⓪$
- ⓪&IF but = Hpprev THEN
- ⓪(IF EndOfList (text) THEN INC (visibleLines) END;
- ⓪(FOR i := 1 TO noLines + visibleLines DO voidADR := PrevEntry (text) END;
- ⓪&END;
- ⓪&SetObjStateElem (helpBox, Hpprev, disableObj, EndOfList (text));
- ⓪&end := FALSE; visibleLines := 0;
- ⓪&addLine (Hpmsg1); addLine (Hpmsg2); addLine (Hpmsg3);
- ⓪&addLine (Hpmsg4); addLine (Hpmsg5); addLine (Hpmsg6);
- ⓪&addLine (Hpmsg7); addLine (Hpmsg8); addLine (Hpmsg9);
- ⓪&addLine (Hpmsg10); addLine (Hpmsg11); addLine (Hpmsg12);
- ⓪&addLine (Hpmsg13); addLine (Hpmsg14);
- ⓪&SetObjStateElem (helpBox, Hpnext, disableObj, EndOfList (text));
- ⓪&SetObjFlag (helpBox, Hpnext, defaultFlg, NOT EndOfList (text));
- ⓪&SetObjFlag (helpBox, Hpquit, defaultFlg, EndOfList (text));
- ⓪&
- ⓪&IF first THEN PrepareBox (helpBox, start, space); first := FALSE
- ⓪&ELSE DrawObject (helpBox, Root, MaxDepth, space) END;
- ⓪&formDo (helpBox, Root, but);
- ⓪&DeselectButton (helpBox, but);
- ⓪&
- ⓪$UNTIL but = Hpquit;
- ⓪$ReleaseBox (helpBox, start, space);
- ⓪$
- ⓪$(* Lösche Hilfe-Datei.
- ⓪%*)
- ⓪$deleteSimpleList (text, TRUE);
- ⓪$
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doHelpBox;
- ⓪
- ⓪
- ⓪ PROCEDURE doInfoBox;
- ⓪
- ⓪ (*
- ⓪!* Umgebungsinformationen
- ⓪!*)
- ⓪
- ⓪"VAR dftPath,
- ⓪(codeFile : FileStr;
- ⓪(dftPathEditable : BOOLEAN;
- ⓪(
- ⓪"PROCEDURE setGetInfo (mode: SetGetMode);
- ⓪"
- ⓪$VAR lc: LONGCARD; s: ARRAY [0..13] OF CHAR;
- ⓪"
- ⓪$BEGIN
- ⓪&SetObjFlag (infoBox, Inpath, editFlg, dftPathEditable);
- ⓪&SetGetBoxStr (infoBox, Inpath, mode, dftPath);
- ⓪&SetGetBoxLCard (infoBox, Instack, mode, DefaultStackSize);
- ⓪&SetGetBoxStr (infoBox, Inmkfile, mode, MakeFileName);
- ⓪&SetGetBoxState (infoBox, Stponrtn, mode, checkObj, shellParm.waitOnReturn);
- ⓪&Upper (MakeFileName);
- ⓪&IF mode = setValue THEN
- ⓪(lc := MemAvail ();
- ⓪(SetGetBoxLCard (infoBox, Inblock, setValue, lc);
- ⓪(lc := AllAvail ();
- ⓪(SetGetBoxLCard (infoBox, Inall, setValue, lc);
- ⓪(SetGetBoxStr (infoBox, Ihome, setValue, HomePath);
- ⓪(SetGetBoxStr (infoBox, Incode, setValue, codeFile);
- ⓪(SetGetBoxLCard (infoBox, Inlength, setValue, LastCodeSize);
- ⓪(IF UsedFormat = IEEEReal THEN
- ⓪*IF RealMode = 2 THEN
- ⓪,s:= 'IEEE (ST-FPU)'
- ⓪*ELSE
- ⓪,s:= 'IEEE (TT-FPU)'
- ⓪*END
- ⓪(ELSE
- ⓪*s:= 'Megamax'
- ⓪(END;
- ⓪(SetGetBoxStr (infoBox, Realform, setValue, s);
- ⓪&END;
- ⓪$END setGetInfo;
- ⓪$
- ⓪"VAR space, start : Rectangle;
- ⓪(exit : CARDINAL;
- ⓪(res : INTEGER;
- ⓪
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, start);
- ⓪$
- ⓪$GetDefaultPath (dftPath);
- ⓪$dftPathEditable := (maxDftPathInfo >= Length (dftPath));
- ⓪$truncCopyString (dftPath, maxDftPathInfo, dftPath);
- ⓪$truncCopyString (LastCodeName, maxCodeFileInfo, codeFile);
- ⓪$setGetInfo (setValue);
- ⓪$
- ⓪$PrepareBox (infoBox, start, space);
- ⓪$LOOP
- ⓪&formDo (infoBox, Root, exit);
- ⓪&CASE exit OF
- ⓪(Inok, Inquit: DeselectButton (infoBox, exit); EXIT|
- ⓪(Stponrtn : ToggleCheckBox (infoBox, exit)|
- ⓪&ELSE
- ⓪&END;
- ⓪$END;
- ⓪$ReleaseBox(infoBox, start, space);
- ⓪$
- ⓪$IF exit = Inok THEN
- ⓪&setGetInfo (getValue);
- ⓪&IF dftPathEditable THEN
- ⓪(ValidatePath (dftPath);
- ⓪(ReplaceHome (dftPath);
- ⓪(SetDefaultPath (dftPath, res);
- ⓪(FileAlert (res);
- ⓪&END;
- ⓪$END;
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END doInfoBox;
- ⓪"
- ⓪
- ⓪0(* Exportierte Box-Funktionen *)
- ⓪
- ⓪ PROCEDURE ScanBox (VAR name: ARRAY OF CHAR): BOOLEAN;
- ⓪
- ⓪"VAR but: CARDINAL;
- ⓪
- ⓪"BEGIN
- ⓪$SetTextString (sNameBox, Snedit, name);
- ⓪$DoSimpleBox (sNameBox, Rect (-1, -1, -1, -1), but);
- ⓪$CASE but OF
- ⓪&Snok : GetTextString(sNameBox, Snedit, name); Upper (name)|
- ⓪&Snwork: WITH WorkField DO
- ⓪0IF current >= 0
- ⓪0THEN Assign(elems[current].sourceName, name, voidO)
- ⓪0ELSE Assign ('', name, voidO); END;
- ⓪.END|
- ⓪$ELSE
- ⓪$END;
- ⓪$RETURN but # Snquit
- ⓪"END ScanBox;
- ⓪
- ⓪ PROCEDURE RequestArg (VAR name: ARRAY OF CHAR);
- ⓪
- ⓪"BEGIN
- ⓪$SetTextString (argBox, Aedit, name);
- ⓪$DoSimpleBox (argBox, Rect (0, 0, 50, 30), voidC);
- ⓪$GetTextString (argBox, Aedit, name);
- ⓪"END RequestArg;
- ⓪
- ⓪ TYPE TellMode = (initTell, newTellValue, endTell);
- ⓪
- ⓪ PROCEDURE TellLoading (mode: TellMode; REF fname: ARRAY OF CHAR);
- ⓪
- ⓪"VAR start : Rectangle;
- ⓪"
- ⓪"BEGIN
- ⓪$start := Rect (0, 0, 50, 30);
- ⓪$
- ⓪$CASE mode OF
- ⓪&initTell : SetTextString (loadBox, Lfname, '');
- ⓪<PrepareBox (loadBox, start, tellSpace);
- ⓪<ShowBee|
- ⓪<
- ⓪&newTellValue : SetTextString (loadBox, Lfname, ' ');
- ⓪<drawObject (loadBox, Lfname);
- ⓪<SetTextString (loadBox, Lfname, FileName (fname));
- ⓪<drawObject (loadBox, Lfname)|
- ⓪<
- ⓪&endTell : ReleaseBox (loadBox, start, tellSpace);
- ⓪<ShowArrow|
- ⓪$END;
- ⓪"END TellLoading;
- ⓪
- ⓪"
- ⓪
- ⓪8(* misc. II *)
- ⓪8(* ======== *)
- ⓪
- ⓪ PROCEDURE enableAndDisableMenuItems;
- ⓪
- ⓪"VAR workSelected: BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$EnableItem (menu, Mwnew, WorkField.noUsed < maxWorkFiles);
- ⓪$workSelected := (WorkField.current # noCurrentWorkfile);
- ⓪$EnableItem (menu, Mwdelete, workSelected);
- ⓪$EnableItem (menu, Mwchange, workSelected);
- ⓪$EnableItem (menu, Mdeditwo, workSelected);
- ⓪$EnableItem (menu, Mdcompwo, workSelected);
- ⓪$EnableItem (menu, Mdexecwo, workSelected);
- ⓪$EnableItem (menu, Mdlinkwo, workSelected);
- ⓪$EnableItem (menu, Mdscanwo, workSelected);
- ⓪"END enableAndDisableMenuItems;
- ⓪
- ⓪
- ⓪0(* Arbeitende Routinen *)
- ⓪0(* =================== *)
- ⓪
- ⓪ FORWARD HideSS (complete: BOOLEAN);
- ⓪ FORWARD ShowSS (isCompleteHidden: BOOLEAN);
- ⓪
- ⓪
- ⓪ (* setWorkfileName -- Assigns the specified workfile a new name.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE setWorkfileName (idx: CARDINAL; VAR name: ARRAY OF CHAR);
- ⓪
- ⓪"BEGIN
- ⓪$Upper (name);
- ⓪$WITH WorkField.elems[idx]
- ⓪$DO
- ⓪&Assign (name, sourceName, voidO);
- ⓪&codeName := '';
- ⓪$END;
- ⓪$
- ⓪$setWorkfiles;
- ⓪"END setWorkfileName;
- ⓪"
- ⓪"
- ⓪ (* selectWorkfile -- Selects another work file object. Only used slots would
- ⓪!* be selected.
- ⓪!*)
- ⓪!
- ⓪ PROCEDURE selectWorkfile (i: INTEGER);
- ⓪
- ⓪"BEGIN
- ⓪$WITH WorkField DO
- ⓪$
- ⓪&(* Remove check mark at old curr. work file.
- ⓪'*)
- ⓪&IF WorkField.current # noCurrentWorkfile
- ⓪&THEN
- ⓪(CheckItem (menu, elems[current].index, FALSE);
- ⓪&END;
- ⓪&
- ⓪&(* Set new work file, if it is used.
- ⓪'*)
- ⓪&IF ~ WorkField.elems[i].used THEN i := noCurrentWorkfile END;
- ⓪&WorkField.current := i;
- ⓪&
- ⓪&(* Set check mark at new curr. work file.
- ⓪'*)
- ⓪&IF WorkField.current # noCurrentWorkfile
- ⓪&THEN
- ⓪(CheckItem (menu, elems[current].index, TRUE);
- ⓪&END;
- ⓪$
- ⓪$END;(*WITH*)
- ⓪"END selectWorkfile;
- ⓪
- ⓪ (* makeNewWorkfile -- Tries to make another work file object.
- ⓪!*)
- ⓪!
- ⓪ PROCEDURE makeNewWorkfile;
- ⓪
- ⓪"VAR i : CARDINAL;
- ⓪(str : FileStr;
- ⓪(ok : BOOLEAN;
- ⓪(
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mworkfil, voidFrame);
- ⓪$
- ⓪$(* find free slot.
- ⓪%*)
- ⓪$(* wir wollen mit Nr. 1 anfangen, erst nach Nr. 9 soll Nr. 0 kommen *)
- ⓪$i := 1;
- ⓪$WHILE (i <= maxWorkFiles) AND WorkField.elems[i MOD 10].used DO INC (i) END;
- ⓪$IF i = 10 THEN i:= 0 END;
- ⓪$
- ⓪$IF i < maxWorkFiles THEN (* if found, then init. slot *)
- ⓪$
- ⓪&str := '';
- ⓪&SelectFile (newWorkTitle^, str, ok);
- ⓪&
- ⓪&IF ok THEN
- ⓪&
- ⓪(SearchFile (str, SrcPaths, fromStart, voidO, str);
- ⓪(INC (WorkField.noUsed);
- ⓪(WorkField.elems[i].used := TRUE;
- ⓪(setWorkfileName (i, str);
- ⓪(selectWorkfile (i);
- ⓪(
- ⓪&END;
- ⓪&
- ⓪$ELSE
- ⓪&doAlert (noNewWorkAlt)
- ⓪$END;
- ⓪$
- ⓪$deAnimateMenuTitle (Mworkfil);
- ⓪"END makeNewWorkfile;
- ⓪
- ⓪ (* killWorkfile -- Releases the current workfile object.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE killWorkfile;
- ⓪
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mworkfil, voidFrame);
- ⓪$
- ⓪$WITH WorkField DO
- ⓪&IF current # noCurrentWorkfile THEN
- ⓪&
- ⓪(DEC (noUsed);
- ⓪(elems[current].used := FALSE;
- ⓪(elems[current].sourceName := '';
- ⓪(current := noCurrentWorkfile;
- ⓪(setWorkfiles; (* Correct menu tree *)
- ⓪(
- ⓪&END;
- ⓪$END;
- ⓪&
- ⓪$deAnimateMenuTitle (Mworkfil);
- ⓪"END killWorkfile;
- ⓪#
- ⓪ PROCEDURE saveParameter;
- ⓪
- ⓪"VAR but: CARDINAL;
- ⓪
- ⓪"BEGIN
- ⓪$FormAlert (1, parmSaveAlt^, but);
- ⓪$IF but = 1 THEN SaveParameter END;
- ⓪"END saveParameter;
- ⓪
- ⓪ (* actManager -- Prepares the shell to execute a shell action and then calls
- ⓪!* the 'action' procedure in the outer module.
- ⓪!*
- ⓪!* 'obj' -- Desktop object associated with the desired
- ⓪!* action.
- ⓪!* 'specials' -- Special keys pressed at action selection time.
- ⓪!* 'work' -- Parameter of the action is a work file?
- ⓪!* 'tool' -- Is a executed file a tool? (to set the correct
- ⓪!* path in 'call')
- ⓪!* 'alsoExec' -- Also excecute code after compilation?
- ⓪!* 'noSelect' -- Don't call file slector box.
- ⓪!*)
- ⓪"
- ⓪ PROCEDURE actManager (obj : CARDINAL;
- ⓪6specials: SpecialKeySet;
- ⓪5 work,
- ⓪6tool,
- ⓪6alsoExec,
- ⓪6noSelect: BOOLEAN);
- ⓪
- ⓪"PROCEDURE assignMsg (VAR name: ARRAY OF CHAR);
- ⓪"
- ⓪$BEGIN
- ⓪&truncCopyString (name, msgStrLen, msgStr);
- ⓪$END assignMsg;
- ⓪$
- ⓪"PROCEDURE setSourceCurrFnAndMsg;
- ⓪"
- ⓪$BEGIN
- ⓪$
- ⓪&IF ~ work AND Empty (currFn)THEN
- ⓪(currFn := lastFn;
- ⓪&END;
- ⓪&
- ⓪&IF work THEN
- ⓪(WITH WorkField DO
- ⓪*IF current >= 0 THEN assignMsg (elems[current].sourceName)
- ⓪*ELSE msgStr := '' END;
- ⓪(END;
- ⓪&ELSE assignMsg (currFn) END;
- ⓪&
- ⓪$END setSourceCurrFnAndMsg;
- ⓪$
- ⓪"PROCEDURE setCodeCurrFnAndMsg;
- ⓪"
- ⓪$BEGIN
- ⓪$
- ⓪&IF ~ work AND Empty (currFn) THEN
- ⓪(currFn := CodeName;
- ⓪&END;
- ⓪&
- ⓪&IF work THEN
- ⓪(WITH WorkField DO
- ⓪*IF current # noCurrentWorkfile THEN
- ⓪,assignMsg (elems[current].codeName)
- ⓪*ELSE msgStr := '' END;
- ⓪(END;
- ⓪&ELSE assignMsg (currFn) END;
- ⓪&
- ⓪$END setCodeCurrFnAndMsg;
- ⓪"
- ⓪"TYPE testProc = PROCEDURE (REF (* name: *) ARRAY OF CHAR): BOOLEAN;
- ⓪$
- ⓪"PROCEDURE testWorkAndCurrFn ((*$Z-*)test: testProc(*$Z=*)): BOOLEAN;
- ⓪"
- ⓪$BEGIN
- ⓪&WITH WorkField DO
- ⓪(IF work AND (current = noCurrentWorkfile) THEN RETURN FALSE
- ⓪(ELSE
- ⓪*RETURN (work AND test (elems[current].sourceName)) OR test (currFn)
- ⓪(END;
- ⓪&END;
- ⓪$END testWorkAndCurrFn;
- ⓪"
- ⓪"
- ⓪"VAR ok: BOOLEAN;
- ⓪"
- ⓪"PROCEDURE ifNotWorkThenSelectFile (title: PtrMaxStr; source: BOOLEAN);
- ⓪"
- ⓪$BEGIN
- ⓪&ok := TRUE;
- ⓪&IF NOT work AND NOT noSelect
- ⓪&THEN
- ⓪(IF source THEN currFn := lastFn ELSE currFn := CodeName END;
- ⓪(SelectFile (title^, currFn, ok);
- ⓪&END;
- ⓪$END ifNotWorkThenSelectFile;
- ⓪$
- ⓪$
- ⓪"BEGIN
- ⓪$CASE obj OF
- ⓪&Compile : IF alsoExec THEN ifNotWorkThenSelectFile (compExecTitle, TRUE);
- ⓪1ELSE ifNotWorkThenSelectFile (compileTitle, TRUE) END;
- ⓪1IF NOT ok THEN RETURN END;
- ⓪1setSourceCurrFnAndMsg;
- ⓪1IF testWorkAndCurrFn (isMakeFile) THEN
- ⓪3IF alsoExec THEN action (doMkEx, work, tool)
- ⓪3ELSE action (doMake, work, tool) END;
- ⓪1ELSE
- ⓪3IF alsoExec THEN action (doCpEx, work, tool)
- ⓪3ELSE action (doComp, work, tool) END;
- ⓪1END|
- ⓪&Edit : ifNotWorkThenSelectFile (editTitle, TRUE);
- ⓪1IF NOT ok THEN RETURN END;
- ⓪1setSourceCurrFnAndMsg; action (doEdit, work, tool)|
- ⓪&Execute : ifNotWorkThenSelectFile (executeTitle, FALSE);
- ⓪1IF NOT ok THEN RETURN END;
- ⓪1setCodeCurrFnAndMsg;
- ⓪1Assign (lastFn, TextName, voidO);
- ⓪1IF NOT work AND IsSourceName (currFn) THEN
- ⓪3assignMsg (currFn);
- ⓪3action (doExec, work, tool);
- ⓪1ELSE
- ⓪3IF testWorkAndCurrFn (IsMBTFile) (* exec. Batch-File *) THEN
- ⓪5action (doBtch, work, tool);
- ⓪3ELSIF testWorkAndCurrFn (isMSPFile) (* exec. Parm.-File *) THEN
- ⓪5action (doParm, work, tool);
- ⓪3ELSIF testWorkAndCurrFn (isMakeFile)(* exec. Make-File *) THEN
- ⓪5action (doMkEx, work, tool);
- ⓪3ELSE (* exec. norm. code *)
- ⓪5IF withShift (specials) THEN
- ⓪7RequestArg (lastArgs);
- ⓪7args := lastArgs;
- ⓪5ELSE
- ⓪7args := '';
- ⓪5END;
- ⓪5noDirChange := withAlt (specials);
- ⓪5action (doExec, work, tool);
- ⓪5noDirChange := FALSE;
- ⓪3END;
- ⓪1END;
- ⓪1Assign (TextName, lastFn, voidO)|
- ⓪&Link : ifNotWorkThenSelectFile (linkTitle, FALSE);
- ⓪1IF NOT ok THEN RETURN END;
- ⓪1setCodeCurrFnAndMsg; action (doLink, work, tool)|
- ⓪&
- ⓪&Scan : ifNotWorkThenSelectFile (scanTitle, TRUE);
- ⓪1IF NOT ok THEN RETURN END;
- ⓪1setSourceCurrFnAndMsg;
- ⓪1IF (ChainDepth < 0) OR ~ withShift (specials)
- ⓪1THEN
- ⓪3IF doScanBox () THEN
- ⓪5action (doScan, work, tool);
- ⓪3END;
- ⓪1ELSE msgStr := ''; action (doCont, TRUE, tool) END|
- ⓪ (*
- ⓪&Resident : setCodeCurrFnAndMsg;
- ⓪1HideSS (FALSE);
- ⓪1TellLoading (initTell, '');
- ⓪1action (doLoad, FALSE, tool);
- ⓪1TellLoading (endTell, '');
- ⓪1ShowSS (FALSE)|
- ⓪ *)
- ⓪$ELSE
- ⓪$END;
- ⓪"END actManager;
- ⓪9
- ⓪ PROCEDURE executeTool (i: CARDINAL; specials: SpecialKeySet);
- ⓪
- ⓪"VAR code: FileStr;
- ⓪
- ⓪"BEGIN
- ⓪$IF ToolField[i].used AND NOT Empty (ToolField[i].name) THEN
- ⓪&currFn := ToolField[i].name;
- ⓪&code := CodeName; (* Akt. Code-Datei retten *)
- ⓪&actManager (Execute, specials, FALSE, TRUE, FALSE, TRUE);
- ⓪&CodeName := code; (* Akt. Code-Datei wiederherstellen *)
- ⓪$END;
- ⓪"END executeTool;
- ⓪
- ⓪ PROCEDURE editDocu (specials: SpecialKeySet);
- ⓪
- ⓪"VAR oldText, oldLast: FileStr;
- ⓪"
- ⓪"BEGIN
- ⓪$animateMenuTitle (Mparms, voidFrame);
- ⓪$
- ⓪$ConcatName (shellParm.parameterPath, suf[m2d], currFn);
- ⓪$oldText := TextName;
- ⓪$oldLast := lastFn;
- ⓪$actManager (Edit, specials, FALSE, FALSE, FALSE, TRUE);
- ⓪$TextName := oldText;
- ⓪$lastFn := oldLast;
- ⓪$
- ⓪$deAnimateMenuTitle (Mparms);
- ⓪"END editDocu;
- ⓪
- ⓪ PROCEDURE makeFolder;
- ⓪
- ⓪"VAR ok : BOOLEAN;
- ⓪(name : FileStr;
- ⓪(result : INTEGER;
- ⓪
- ⓪"BEGIN
- ⓪$name:= '';
- ⓪$SelectFile (folderTitle^, name, ok);
- ⓪$IF ok & NOT Empty (FileName (name)) THEN
- ⓪&CreateDir (name, result); FileAlert (result);
- ⓪$END;
- ⓪"END makeFolder;
- ⓪
- ⓪ PROCEDURE deleteFile;
- ⓪
- ⓪"VAR ok : BOOLEAN;
- ⓪(name : FileStr;
- ⓪(result : INTEGER;
- ⓪
- ⓪"BEGIN
- ⓪$name:= '';
- ⓪$SelectFile (deleteTitle^, name, ok);
- ⓪$IF ok & NOT Empty (FileName (name)) THEN
- ⓪&Directory.Delete (name, result); FileAlert (result);
- ⓪$END;
- ⓪"END deleteFile;
- ⓪
- ⓪
- ⓪0(* Routinen zur De-/Aktivierung der ShellShell *)
- ⓪0(* =========================================== *)
- ⓪"
- ⓪ PROCEDURE ClearDeskAndShowMsg;
- ⓪
- ⓪"BEGIN
- ⓪$MenuBar (NIL, FALSE);
- ⓪$IF NOT multiGEM & NOT multiTOS THEN
- ⓪&(* unter MultiGEM nichts in Menüleise zeichnen *)
- ⓪&DrawObject (msgBar, Root, MaxDepth, ObjectSpaceWithAttrs (msgBar, Root));
- ⓪$END;
- ⓪$FormDial (freeForm, Rect (0, 0, 0, 0), deskSize);
- ⓪"END ClearDeskAndShowMsg;
- ⓪
- ⓪ PROCEDURE ShowSS (isCompleteHidden: BOOLEAN);
- ⓪
- ⓪"VAR i : INTEGER;
- ⓪(name: NameStr;
- ⓪
- ⓪"BEGIN
- ⓪$IF isCompleteHidden THEN
- ⓪$
- ⓪&SetCurrGemHandle (gemHdl, ok);
- ⓪&IF ~ ok THEN HALT; TermProcess (-1) END;
- ⓪&
- ⓪&setTools;
- ⓪&setWorkfiles;
- ⓪&MouseInput (TRUE);
- ⓪&
- ⓪&ShowArrow;
- ⓪&IF ~multiTOS THEN SetNewDesk (NIL, Root); END;
- ⓪&MenuBar (menu, TRUE);
- ⓪&
- ⓪&FormDial (freeForm, Rect (0, 0, 0, 0), deskSize);
- ⓪&
- ⓪$END;
- ⓪"END ShowSS;
- ⓪"
- ⓪
- ⓪ PROCEDURE InitSS (): BOOLEAN;
- ⓪
- ⓪"VAR mayLoad, success : BOOLEAN;
- ⓪*devParm : PtrDevParm;
- ⓪*space, f: Rectangle;
- ⓪*x, w : INTEGER;
- ⓪*eventmsg: MessageBuffer;
- ⓪*mouseloc: Point;
- ⓪*buttons: MButtonSet;
- ⓪*keystate: SpecialKeySet;
- ⓪*key: GemChar;
- ⓪*clicks: CARDINAL;
- ⓪*events: EventSet;
- ⓪
- ⓪"BEGIN
- ⓪$IF MemAvail () < minNecessaryMem THEN RETURN FALSE END;
- ⓪$
- ⓪$InitGem (RC,dev, success);
- ⓪$IF ~ success THEN
- ⓪&IF GemActive () THEN
- ⓪(multiStringAlert (noGemAlt1,noGemAlt2, voidC);
- ⓪&END;
- ⓪&RETURN FALSE
- ⓪$ELSE
- ⓪&gemHdl:=CurrGemHandle ();
- ⓪$END;
- ⓪$ShellPath:= HomePath;
- ⓪$
- ⓪$GEMBase.GetPBs (gemHdl, vdiPB, aesPB);
- ⓪$multiGEM:= aesPB.pglobal^.count > 1;
- ⓪$multiTOS:= aesPB.pglobal^.count = -1;
- ⓪$
- ⓪$deskSize := DeskSize ();
- ⓪$CharSize (dev, charWidth, charHeight);
- ⓪$
- ⓪2(* Resource laden und Baumadressen ermitteln *)
- ⓪2
- ⓪$LoadResource (resourceFile);
- ⓪$IF GemError () THEN
- ⓪&multiStringAlert (noRscAlt1,noRscAlt2, voidC);
- ⓪&ExitGem (gemHdl);
- ⓪&TermProcess (0)
- ⓪$END;
- ⓪$
- ⓪$menu := TreeAddress (Menu);
- ⓪$msgBar := TreeAddress (Msgbar);
- ⓪$scanBox := TreeAddress (Scanbox);
- ⓪$shellBox := TreeAddress (Shellbox);
- ⓪$optBox := TreeAddress (Optbox);
- ⓪$sNameBox := TreeAddress (Snamebox);
- ⓪$argBox := TreeAddress (Argbox);
- ⓪$linkBox := TreeAddress (Loptbox);
- ⓪$loadBox := TreeAddress (Loadbox);
- ⓪$shellParmBox := TreeAddress (Sparmbox);
- ⓪$editorParmBox := TreeAddress (Eparmbox);
- ⓪$helpBox := TreeAddress (Helpbox);
- ⓪$infoBox := TreeAddress (Infobox);
- ⓪$
- ⓪$pathToLongAlt := TextStringAddress (Pathalt);
- ⓪$cOptToLongAlt := TextStringAddress (Optalt);
- ⓪$memFullAlt := TextStringAddress (Memalt);
- ⓪$debugAlt := TextStringAddress (Debugalt);
- ⓪$parmSaveAlt := TextStringAddress (Parmsalt);
- ⓪$noParmAlt := TextStringAddress (Noparalt);
- ⓪$ContMakeAlt := TextStringAddress (Contmalt);
- ⓪$noNewWorkAlt := TextStringAddress (Nowrkalt);
- ⓪$exitShellAlt := TextStringAddress (Exitalt);
- ⓪$noHelpAlt := TextStringAddress (Nohlpalt);
- ⓪$
- ⓪$NoLoadStr := TextStringAddress (Noldstr);
- ⓪$OkStr := TextStringAddress (Okstr);
- ⓪$EditStr := TextStringAddress (Editstr);
- ⓪$EditBatStr := TextStringAddress (Editbstr);
- ⓪$NoPathsStr := TextStringAddress (Npathstr);
- ⓪$NoUnloadStr := TextStringAddress (Nouldstr);
- ⓪$NoExecStr := TextStringAddress (Noexestr);
- ⓪$RetStr := TextStringAddress (Retstr);
- ⓪$EdStr := TextStringAddress (Edstr);
- ⓪$WorkStr := TextStringAddress (Workstr);
- ⓪$CompStr := TextStringAddress (Compstr);
- ⓪$LinkStr := TextStringAddress (Linkstr);
- ⓪$InfStr := TextStringAddress (Infstr);
- ⓪$ContStr := TextStringAddress (Contstr);
- ⓪$MakeStr := TextStringAddress (Makestr);
- ⓪$
- ⓪$changeWorkTitle := TextStringAddress (Chworkti);
- ⓪$newWorkTitle := TextStringAddress (Neworkti);
- ⓪$editTitle := TextStringAddress (Editti);
- ⓪$compileTitle := TextStringAddress (Compti);
- ⓪$executeTitle := TextStringAddress (Execti);
- ⓪$compExecTitle := TextStringAddress (Coexti);
- ⓪$linkTitle := TextStringAddress (Linkti);
- ⓪$scanTitle := TextStringAddress (Scanti);
- ⓪$folderTitle := TextStringAddress (Foldti);
- ⓪$deleteTitle := TextStringAddress (Deleti);
- ⓪$
- ⓪$
- ⓪2(* 'msgBar'-Ausmaße der Größe
- ⓪3* des Ausgabegeräts anpassen
- ⓪3*)
- ⓪"
- ⓪$devParm := DeviceParameter (dev);
- ⓪$
- ⓪$space.x := 0;
- ⓪$space.y := 0;
- ⓪$space.w := devParm^.rasterWidth + 1;
- ⓪$space.h := deskSize.y-1;
- ⓪$SetCurrObjTree (msgBar, FALSE);
- ⓪$SetObjSpace (Root, space);
- ⓪$SetObjSpace (Mbmsg, space);
- ⓪$
- ⓪$LinkTextString (Mbmsg, ADR (msgStr));
- ⓪*
- ⓪2(* Indizies ermitteln *)
- ⓪2
- ⓪$linkBoxIdx[1].check := Locheck1;
- ⓪$linkBoxIdx[1].path := Lofname1;
- ⓪$linkBoxIdx[2].check := Locheck2;
- ⓪$linkBoxIdx[2].path := Lofname2;
- ⓪$linkBoxIdx[3].check := Locheck3;
- ⓪$linkBoxIdx[3].path := Lofname3;
- ⓪$linkBoxIdx[4].check := Locheck4;
- ⓪$linkBoxIdx[4].path := Lofname4;
- ⓪$linkBoxIdx[5].check := Locheck5;
- ⓪$linkBoxIdx[5].path := Lofname5;
- ⓪$linkBoxIdx[6].check := Locheck6;
- ⓪$linkBoxIdx[6].path := Lofname6;
- ⓪$linkBoxIdx[7].check := Locheck7;
- ⓪$linkBoxIdx[7].path := Lofname7;
- ⓪$linkBoxIdx[8].check := Locheck8;
- ⓪$linkBoxIdx[8].path := Lofname8;
- ⓪$
- ⓪$InitWorkFieldMenuIndizies;
- ⓪$SetCurrObjTree (menu, FALSE);
- ⓪$f := ObjectSpace (Wibox);
- ⓪$WorkField.baseHeightOfWibox := f.h;
- ⓪$f := ObjectSpace (Mwwork0);
- ⓪$DEC (WorkField.baseHeightOfWibox, f.h * 10);
- ⓪$
- ⓪$SetTextString (shellBox, Version, ShellRevision);
- ⓪$
- ⓪$
- ⓪2(* Initalisiere 'Tools'-Indizies *)
- ⓪2
- ⓪$ToolField[1].index := Mtool1;
- ⓪$ToolField[2].index := Mtool2;
- ⓪$ToolField[3].index := Mtool3;
- ⓪$ToolField[4].index := Mtool4;
- ⓪$ToolField[5].index := Mtool5;
- ⓪$ToolField[6].index := Mtool6;
- ⓪$ToolField[7].index := Mtool7;
- ⓪$ToolField[8].index := Mtool8;
- ⓪$ToolField[9].index := Mtool9;
- ⓪$ToolField[10].index := Mtool10;
- ⓪$
- ⓪$TemporaryPath:= ShellPath;
- ⓪$
- ⓪$(*
- ⓪%* Prüfen, ob ESC gedrückt wurde, weil dann beim Batch-Ausführen keine
- ⓪%* Module geladen werden sollen.
- ⓪%*)
- ⓪$mayLoad:= TRUE;
- ⓪$MultiEvent (EventSet {keyboard, timer}, 0, MButtonSet{}, MButtonSet{},
- ⓪0lookForEntry, Rect (0,0,0,0), lookForEntry, Rect (0,0,0,0),
- ⓪0eventmsg, 0, mouseloc, buttons, keystate, key, clicks, events);
- ⓪$IF keyboard IN events THEN
- ⓪&mayLoad:= key.ascii # 33C; (* ESC-Code *)
- ⓪$END;
- ⓪$LoadParameter (shellParm.parameterPath, mayLoad);
- ⓪$
- ⓪$ShowSS (TRUE);
- ⓪$
- ⓪$RETURN TRUE;
- ⓪"END InitSS;
- ⓪
- ⓪ PROCEDURE HideSS (complete: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$IF complete THEN ClearDeskAndShowMsg END;
- ⓪$ShowBee;
- ⓪"END HideSS;
- ⓪
- ⓪ PROCEDURE ExitSS;
- ⓪
- ⓪"BEGIN
- ⓪$msgStr := '';
- ⓪$HideSS (TRUE);
- ⓪$
- ⓪$FreeResource;
- ⓪$(* ExitGem (gemHdl); *)
- ⓪"END ExitSS;
- ⓪
- ⓪*
- ⓪0(* Routinen zur Event-Verarbeitung *)
- ⓪0(* =============================== *)
- ⓪
- ⓪ (* keyManager -- Bearbeitet alle keyboard events
- ⓪!*)
- ⓪
- ⓪ (*$Z-*)
- ⓪ PROCEDURE keyManager (VAR ch: GemChar; VAR specials: SpecialKeySet): BOOLEAN;
- ⓪ (*$Z=*)
- ⓪
- ⓪"CONST aCode = BYTE (30); (* Buchstabentasten *)
- ⓪*cCode = BYTE (46);
- ⓪*eCode = BYTE (18);
- ⓪*fCode = BYTE (33);
- ⓪*iCode = BYTE (23);
- ⓪*lCode = BYTE (38);
- ⓪*nCode = BYTE (49);
- ⓪*mCode = BYTE (50);
- ⓪*oCode = BYTE (24);
- ⓪*pCode = BYTE (25);
- ⓪*qCode = BYTE (16);
- ⓪*rCode = BYTE (19);
- ⓪*sCode = BYTE (31);
- ⓪*uCode = BYTE (22);
- ⓪*xCode = BYTE (45);
- ⓪*
- ⓪*code1A = BYTE (2); (* Ziffern *)
- ⓪*code0A = BYTE (11);
- ⓪*code7N = BYTE (103);
- ⓪*code0N = BYTE (112);
- ⓪*
- ⓪*plusCode= BYTE (27); (* <+> *)
- ⓪*
- ⓪*clrHome = BYTE (71); (* <Clr>-Taste *)
- ⓪*delete = BYTE (83); (* <Delete>-Taste *)
- ⓪*help = BYTE (98); (* <Help>-Taste *)
- ⓪*escape = BYTE (1); (* <Esc>-Taste *)
- ⓪*f1 = BYTE (59); (* <F1> *)
- ⓪*f10 = BYTE (68); (* <F10> *)
- ⓪*shiftF1 = BYTE (84); (* Shift + <F1> *)
- ⓪*shiftF10= BYTE (93); (* Shift + <F10> *)
- ⓪"
- ⓪"VAR buts : MButtonSet;
- ⓪*loc : Point;
- ⓪*
- ⓪*success : BOOLEAN;
- ⓪*msg : String;
- ⓪*
- ⓪$PROCEDURE withoutCtrl () :BOOLEAN;
- ⓪$BEGIN
- ⓪&RETURN ~ (controlKey IN specials)
- ⓪$END withoutCtrl;
- ⓪"
- ⓪"BEGIN
- ⓪"
- ⓪$CASE ch.scan OF
- ⓪$
- ⓪&(* Commands *)
- ⓪&
- ⓪&aCode : actManager (Execute, specials, withoutCtrl (), FALSE, FALSE,
- ⓪=FALSE)|
- ⓪&cCode : IF withAlt (specials) THEN doCompilerOptionBox
- ⓪1ELSE
- ⓪3actManager (Compile, specials, withoutCtrl (), FALSE, FALSE,
- ⓪?FALSE)
- ⓪1END|
- ⓪&eCode : IF withAlt (specials) THEN doEditorParameterBox
- ⓪1ELSE
- ⓪3actManager (Edit, specials, withoutCtrl (), FALSE, FALSE,
- ⓪?FALSE)
- ⓪1END|
- ⓪&lCode : IF withAlt (specials) THEN doLinkerOptionBox
- ⓪1ELSE
- ⓪3actManager (Link, specials, withoutCtrl (), FALSE, FALSE,
- ⓪?FALSE)
- ⓪1END|
- ⓪&sCode : actManager (Scan, specials, withoutCtrl (), FALSE, FALSE,
- ⓪=FALSE)|
- ⓪&(*
- ⓪&rCode : actManager (Resident, specials, withoutCtrl (), FALSE, FALSE,
- ⓪=FALSE)|
- ⓪'*)
- ⓪&plusCode : actManager (Compile, specials, withoutCtrl (), FALSE, TRUE,
- ⓪=FALSE)|
- ⓪&
- ⓪&oCode : makeFolder|
- ⓪&
- ⓪&pCode : IF NOT withCtrl (specials)
- ⓪1AND (WorkField.current # noCurrentWorkfile) THEN
- ⓪3doChangeWork (WorkField.current);
- ⓪1END|
- ⓪&
- ⓪&mCode : Concat ('Making: ', MakeFileName, msg, voidO);
- ⓪1truncCopyString (msg, msgStrLen, msgStr);
- ⓪1action (doDftM, FALSE, FALSE)|
- ⓪
- ⓪&(* Menu: Datei *)
- ⓪&
- ⓪&nCode : makeNewWorkfile|
- ⓪&delete : killWorkfile|
- ⓪&qCode : IF withCtrl (specials) THEN quitStatus := quickQuit
- ⓪1ELSE quitStatus := quit END|
- ⓪&
- ⓪&(* Menu: Parameter / Info *)
- ⓪&
- ⓪&xCode : IF withCtrl (specials) THEN saveParameter
- ⓪1ELSE doShellParameterBox END|
- ⓪&uCode : doInfoBox|
- ⓪&help : IF withShift (specials) THEN editDocu (specials)
- ⓪1ELSE doHelpBox (helpFile) END|
- ⓪&
- ⓪&(* Menu: Tools *)
- ⓪&
- ⓪&f1..f10 : executeTool (ORD (ch.scan) - ORD (f1) + 1, specials)|
- ⓪&shiftF1..shiftF10
- ⓪/: INCL (specials, leftShiftKey);
- ⓪1executeTool (ORD (ch.scan) - ORD (shiftF1) + 1, specials)|
- ⓪&
- ⓪&(* work files *)
- ⓪&
- ⓪&code1A..code0A,
- ⓪&code7N..code0N
- ⓪/: selectWorkfile (ORD (ch.ascii) - ORD ('0'))|
- ⓪1
- ⓪$ELSE RETURN TRUE END;
- ⓪$
- ⓪$RETURN FALSE;
- ⓪"END keyManager;
- ⓪
- ⓪ (* menuManager -- Bearbeitet alle message events, die durch Anklicken der
- ⓪!* Menuzeile entstehen.
- ⓪!*)
- ⓪!
- ⓪ (*$Z-*)
- ⓪ PROCEDURE menuManager (title, item: CARDINAL): BOOLEAN;
- ⓪ (*$Z=*)
- ⓪"
- ⓪"VAR i : CARDINAL;
- ⓪*buts : MButtonSet;
- ⓪*specials: SpecialKeySet;
- ⓪*loc : Point;
- ⓪*start : Rectangle;
- ⓪#
- ⓪"BEGIN
- ⓪$MouseKeyState (loc,buts,specials);
- ⓪$CASE item OF
- ⓪&
- ⓪&(* MShell *)
- ⓪%
- ⓪&Dinfo : animateMenuTitle (Mshell, start);
- ⓪2DoSimpleBox (shellBox, start, voidC);
- ⓪2deAnimateMenuTitle (Mshell)|
- ⓪&
- ⓪&(* Datei *)
- ⓪&
- ⓪&Mdfolder : makeFolder|
- ⓪&Mddelete : deleteFile|
- ⓪&Mdquit : quitStatus := quit|
- ⓪&
- ⓪&(* Bearbeiten *)
- ⓪&
- ⓪&Mdeditwo : actManager (Edit, specials, TRUE, FALSE, FALSE, FALSE)|
- ⓪&Mdcompwo : actManager (Compile, specials, TRUE, FALSE, FALSE, FALSE)|
- ⓪&Mdexecwo : actManager (Execute, specials, TRUE, FALSE, FALSE, FALSE)|
- ⓪&Mdlinkwo : actManager (Link, specials, TRUE, FALSE, FALSE, FALSE)|
- ⓪&Mdscanwo : actManager (Scan, specials, TRUE, FALSE, FALSE, FALSE)|
- ⓪&Mdeditot : actManager (Edit, specials, FALSE, FALSE, FALSE, FALSE)|
- ⓪&Mdcompot : actManager (Compile, specials, FALSE, FALSE, FALSE, FALSE)|
- ⓪&Mdexecot : actManager (Execute, specials, FALSE, FALSE, FALSE, FALSE)|
- ⓪&Mdlinkot : actManager (Link, specials, FALSE, FALSE, FALSE, FALSE)|
- ⓪&Mdscanot : actManager (Scan, specials, FALSE, FALSE, FALSE, FALSE)|
- ⓪&
- ⓪&(* Arbeitsdatei *)
- ⓪&
- ⓪&Mwnew : makeNewWorkfile|
- ⓪&Mwdelete : killWorkfile|
- ⓪&Mwchange : IF WorkField.current # noCurrentWorkfile THEN
- ⓪4doChangeWork (WorkField.current);
- ⓪2END|
- ⓪&Mwwork0 : selectWorkfile (0)|
- ⓪&Mwwork1 : selectWorkfile (1)|
- ⓪&Mwwork2 : selectWorkfile (2)|
- ⓪&Mwwork3 : selectWorkfile (3)|
- ⓪&Mwwork4 : selectWorkfile (4)|
- ⓪&Mwwork5 : selectWorkfile (5)|
- ⓪&Mwwork6 : selectWorkfile (6)|
- ⓪&Mwwork7 : selectWorkfile (7)|
- ⓪&Mwwork8 : selectWorkfile (8)|
- ⓪&Mwwork9 : selectWorkfile (9)|
- ⓪&
- ⓪&(* Parameter / Info *)
- ⓪&
- ⓪&Mpshell : doShellParameterBox|
- ⓪&Mpeditor : doEditorParameterBox|
- ⓪&Mpcomp : doCompilerOptionBox|
- ⓪&Mplink : doLinkerOptionBox|
- ⓪&Mpsave : saveParameter|
- ⓪&Mienv : doInfoBox|
- ⓪&Mihelp : doHelpBox (helpFile)|
- ⓪&Midocu : editDocu (specials)|
- ⓪&
- ⓪$ELSE
- ⓪&
- ⓪&(* Tools *)
- ⓪$
- ⓪&FOR i := 1 TO MaxTool DO
- ⓪(IF item = ToolField[i].index THEN executeTool (i, specials) END
- ⓪&END;
- ⓪&
- ⓪$END;
- ⓪$
- ⓪$NormalTitle (menu,title, TRUE);
- ⓪$
- ⓪$RETURN FALSE;
- ⓪"END menuManager;
- ⓪
- ⓪ PROCEDURE TalkWithUser;
- ⓪
- ⓪"VAR worker : ARRAY [1..2] OF EventProc;
- ⓪*
- ⓪*success : BOOLEAN;
- ⓪*
- ⓪*firstA3,
- ⓪*newA3 : LONGCARD;
- ⓪*
- ⓪*button : CARDINAL;
- ⓪"
- ⓪"BEGIN
- ⓪$enableAndDisableMenuItems;
- ⓪"
- ⓪$worker[1].event := keyboard;
- ⓪$worker[1].keyHdler := keyManager;
- ⓪$worker[2].event := message;
- ⓪$worker[2].msgType := menuSelected;
- ⓪$worker[2].menuHdler := menuManager;
- ⓪
- ⓪$STORE (11, firstA3);
- ⓪"
- ⓪$REPEAT
- ⓪"
- ⓪&HandleEvents (0, MButtonSet{}, MButtonSet{},
- ⓪4lookForEntry, Rect (0,0,0,0),
- ⓪4lookForEntry, Rect (0,0,0,0),
- ⓪40L,
- ⓪4worker, 0);
- ⓪"
- ⓪&STORE (11, newA3);
- ⓪&IF newA3 # firstA3 THEN
- ⓪(LOAD (firstA3, 11);
- ⓪(FormAlert (1, '[1][Heap fault][ OK ]', voidC);
- ⓪&END;
- ⓪&
- ⓪&enableAndDisableMenuItems;
- ⓪"
- ⓪&currFn := ''; (* Damit 'lastFn' zum Zuge kommen kann *)
- ⓪&
- ⓪&(* handle a quit shell request
- ⓪'*)
- ⓪&IF quitStatus = quit THEN
- ⓪(FormAlert (1, exitShellAlt^, button);
- ⓪(IF button = 3 THEN quitStatus := noQuit
- ⓪(ELSIF button = 1 THEN SaveParameter END;
- ⓪&END;
- ⓪$
- ⓪$UNTIL quitStatus # noQuit;
- ⓪"END TalkWithUser;
- ⓪
- ⓪ (*$Z-*)
- ⓪ PROCEDURE hdlTrap5 (VAR desc: ExcDesc): BOOLEAN;
- ⓪ (*$Z=*)
- ⓪"BEGIN
- ⓪$doAlert (debugAlt); (* Fehlermeldung *)
- ⓪$TermProcess (0); (* und ab damit *)
- ⓪$RETURN FALSE (* Nur um des Compilers Willen *)
- ⓪"END hdlTrap5;
- ⓪
- ⓪
- ⓪ VAR i : CARDINAL;
- ⓪(hdl : ADDRESS;
- ⓪(wsp : MemArea;
- ⓪
- ⓪ BEGIN (* ShellShell *)
- ⓪
- ⓪"(* Vom Modula-System und der Shell benutzte Suffices:
- ⓪#*)
- ⓪"suf[prg] := 'PRG';
- ⓪"suf[app] := 'APP';
- ⓪"suf[tos] := 'TOS';
- ⓪"suf[ttp] := 'TTP';
- ⓪"suf[m2p] := 'M2P';
- ⓪"suf[m2b] := 'M2B';
- ⓪"suf[m2m] := 'M2M';
- ⓪"suf[m2d] := 'M2D';
- ⓪"(*
- ⓪#* Die folgenden Endungen können verändert werden:
- ⓪#* (Shell dann neu linken und alle Dateien mit den neuen Endungen
- ⓪#* versehen - auch diejenigen in der Library "MM2DEF.M2L"!)
- ⓪#*)
- ⓪"suf[mod] := 'MOD'; (* Object-Files, GEM-Application *)
- ⓪"suf[mos] := 'MOS'; (* Object-Files, TOS-Application *)
- ⓪"suf[mtp] := 'MTP'; (* Object-Files, TTP-Application *)
- ⓪"suf[imp] := 'IMP'; (* Object-Files bei Implementationsmodulen *)
- ⓪"suf[def] := 'DEF'; (* Symbol-Files (übersetzte Definitionsmodule *)
- ⓪"DefSrcSfx:= 'D'; (* ModRef: Definitions-Texte *)
- ⓪"ImpSrcSfx:= 'I'; (* ModRef: Implementations-Texte *)
- ⓪"ModSrcSfx:= 'M'; (* ModRef: Hauptmodul-Texte *)
- ⓪
- ⓪"(* Für Compiler: Suffices für erzeugte Dateien *)
- ⓪"DefSfx:= suf[def]; (* Extension f. Symboldatei-Codes *)
- ⓪"ImpSfx:= suf[imp]; (* Extension f. Implementations-Codes *)
- ⓪"ModSfx:= suf[mod]; (* Extension f. Hauptmodul-Codes *)
- ⓪
- ⓪"(* Suffices für Loader (CallModule, LoadModule) *)
- ⓪"MOSConfig.DftSfx:= suf[mod]; (* Default-Endung bei 'CallModule' *)
- ⓪"MOSConfig.ImpSfx:= suf[imp]; (* Endung der importierten Module *)
- ⓪
- ⓪"(* some box info vars
- ⓪#*)
- ⓪"LastCodeName := '';
- ⓪"LastCodeSize := 0L;
- ⓪
- ⓪"(* default configuration
- ⓪#*)
- ⓪
- ⓪"MakeFileName := '';
- ⓪
- ⓪"WITH shellParm DO
- ⓪$breakActive := TRUE;
- ⓪$batchPath := batchFile;
- ⓪$
- ⓪$ShellRead (ShellName, args); (* Liest Pfad/Name der Shell und Argumentzeile *)
- ⓪$IF args [0] # 0C THEN
- ⓪&(* M2P-Dateiname wurde in Argumentzeile übergeben *)
- ⓪&Assign (args, parameterPath, voidO)
- ⓪$ELSE
- ⓪&(* M2P-Dateiname wird aus Shell-Pfad u. "MM2SHELL.M2P" zusammengesetzt *)
- ⓪&ConcatPath (ShellName, parameterFile, parameterPath)
- ⓪$END;
- ⓪$ConcatName (parameterPath, suf[m2p], parameterPath);
- ⓪$MakeFullPath (parameterPath, voidI);
- ⓪$
- ⓪$waitOnReturn := FALSE;
- ⓪"END;
- ⓪"
- ⓪"(* no work file.
- ⓪#*)
- ⓪"FOR i := 0 TO maxWorkFiles - 1 DO WorkField.elems[i].used := FALSE END;
- ⓪"WorkField.noUsed := 0;
- ⓪"WorkField.current := noCurrentWorkfile;
- ⓪"
- ⓪"WITH EditorParm DO
- ⓪$name:= 'GME';
- ⓪$searchSources := FALSE;
- ⓪$waitOnError := FALSE;
- ⓪$tempShellFile := FALSE;
- ⓪$tempShellName := '';
- ⓪$tempEditorFile := FALSE;
- ⓪$tempEditorName := '';
- ⓪$passArgument := TRUE;
- ⓪$passName := TRUE;
- ⓪$passErrorText := TRUE;
- ⓪$passErrorPos := TRUE;
- ⓪"END;
- ⓪"
- ⓪"ErrListFile := 'MODULA.ERR';
- ⓪"MainOutputPath := '';
- ⓪"WITH CompilerParm DO (* Compiler-Parameter: *)
- ⓪$name:= 'MM2Comp';
- ⓪$shortMsgs := FALSE; (* - keine Kurzausgaben *)
- ⓪$protocol := FALSE; (* - kein Protokoll *)
- ⓪$protWidth := stdProtWidth;
- ⓪$protName := '';
- ⓪"END;
- ⓪"
- ⓪"WITH LinkerParm DO
- ⓪$name := 'MM2Link';
- ⓪$FOR i := MIN (LLRange) TO MAX (LLRange) DO
- ⓪&linkList[i].valid := FALSE;
- ⓪&linkList[i].name := '';
- ⓪$END;
- ⓪$optimize := fullOptimize; (* - Vollständige Optimierung *)
- ⓪$linkStackSize := 0;
- ⓪$maxLinkMod := 100;
- ⓪$fastLoad := TRUE;
- ⓪$fastCode := TRUE;
- ⓪$fastMemory:= TRUE;
- ⓪$symbolFile:= FALSE;
- ⓪$symbolArgs:= ''; (* optional: Argumente f. 'MM2LnkIO.OutputSymbols' *)
- ⓪$outputName:= ''; (* optional: Name d. Ausgabedatei *)
- ⓪"END;
- ⓪"
- ⓪"FOR i := 1 TO MaxTool DO ToolField[i].used := FALSE END; (* Keine Tools *)
- ⓪"
- ⓪"msgStr := '';
- ⓪"
- ⓪"(* TRAP #5 belegen, um Fehlermeldung auszugeben, wenn in einem Modul $D+
- ⓪#* verwendet wird, ohne 'Debug'-Modul importiert zu haben *)
- ⓪"wsp.bottom := ADR (ExceptsStack);
- ⓪"wsp.length := SIZE (ExceptsStack);
- ⓪"InstallPreExc (ExcSet{TRAP5}, hdlTrap5, TRUE, wsp, hdl);
- ⓪
- ⓪"quitStatus := noQuit;
- ⓪
- ⓪ END ShellShell;
- ⓪
- ⓪
- ⓪((***************************)
- ⓪((* Hier endet 'ShellShell' *)
- ⓪((***************************)
- ⓪
- ⓪
- ⓪ CONST mspFileMagic = 10071898L + 02700000000L; (* ab 20: TinyShell *)
- ⓪(escKey = 33C;
- ⓪
- ⓪ TYPE PtrStr = POINTER TO String;
- ⓪(AutoCmd = (noCmd, scan, edit, compile, execute, comp_exec, exec_src,
- ⓪3make_exec, dftMake, dftMake_exec, contMake);
- ⓪
- ⓪ VAR ready : BOOLEAN;
- ⓪%dummy : INTEGER;
- ⓪%handle : INTEGER;
- ⓪%strVal : BOOLEAN;
- ⓪%buttonNum: CARDINAL;
- ⓪%editorsMakeCmd,
- ⓪%autoCmd : AutoCmd;
- ⓪%shellStart,
- ⓪%makeActive : BOOLEAN;
- ⓪%callRes : LoaderResults;
- ⓪%callMsg : String;
- ⓪%exitCode : INTEGER;
- ⓪%voidO : BOOLEAN;
- ⓪%voidI : INTEGER;
- ⓪%voidC : CARDINAL;
- ⓪
- ⓪%withPost1, withPost2: BOOLEAN;
- ⓪%postAmble1, postAmble2, postArgs1, postArgs2: String;
- ⓪
- ⓪
- ⓪ PROCEDURE FileAlert (errNo: INTEGER);
- ⓪
- ⓪"VAR msg : ARRAY[0..50] OF CHAR;
- ⓪
- ⓪"BEGIN
- ⓪$IF (errNo < fOK) AND (errNo # fDriveNotReady) AND (errNo # fWriteProtected)
- ⓪$THEN
- ⓪&GetStateMsg (errNo, msg);
- ⓪&Concat ('[1][', msg, msg, voidO);
- ⓪&Append ('][ OK ]', msg, voidO);
- ⓪&FormAlert (1, msg, voidC);
- ⓪$END;
- ⓪"END FileAlert;
- ⓪
- ⓪ PROCEDURE SaveParameter;
- ⓪
- ⓪"VAR f : File;
- ⓪"
- ⓪"PROCEDURE ioErr (): BOOLEAN;
- ⓪"
- ⓪$VAR ioRes: INTEGER;
- ⓪"
- ⓪$BEGIN
- ⓪&ioRes := State (f);
- ⓪&IF ioRes < fOK THEN
- ⓪(ResetState (f);
- ⓪(FileAlert (ioRes);
- ⓪(Remove (f);
- ⓪(ShowArrow;
- ⓪&END;
- ⓪&RETURN ioRes < fOK
- ⓪$END ioErr;
- ⓪$
- ⓪"PROCEDURE wBlock (VAR data: ARRAY OF BYTE): BOOLEAN;
- ⓪"
- ⓪$BEGIN
- ⓪&WriteBlock (f, data);
- ⓪&RETURN ~ ioErr ()
- ⓪$END wBlock;
- ⓪"
- ⓪"VAR magic: LONGCARD;
- ⓪(ok: BOOLEAN;
- ⓪"BEGIN
- ⓪$ShowBee;
- ⓪$
- ⓪$Create (f, HomeReplaced (shellParm.parameterPath), writeOnly, replaceOld);
- ⓪$IF State (f) # fOK THEN FileAlert (State (f)); RETURN END;
- ⓪$
- ⓪$magic := mspFileMagic;
- ⓪$LOOP (* Ist keine echte Schleife - lediglich f. einfacheres EXIT *)
- ⓪&ok:= FALSE;
- ⓪&IF ~ wBlock (magic) THEN EXIT END;
- ⓪&IF ~ wBlock (shellParm) THEN EXIT END;
- ⓪&IF ~ wBlock (WorkField) THEN EXIT END;
- ⓪&IF ~ wBlock (lastFn) THEN EXIT END;
- ⓪&IF ~ wBlock (CodeName) THEN EXIT END;
- ⓪&IF ~ wBlock (EditorParm) THEN EXIT END;
- ⓪&IF ~ wBlock (CompilerParm) THEN EXIT END;
- ⓪&IF ~ wBlock (LinkerParm) THEN EXIT END;
- ⓪&IF ~ wBlock (DefaultStackSize) THEN EXIT END;
- ⓪&IF ~ wBlock (TemporaryPath) THEN EXIT END;
- ⓪&IF ~ wBlock (MakeFileName) THEN EXIT END;
- ⓪&IF ~ wBlock (DefLibName) THEN EXIT END;
- ⓪&IF ~ wBlock (ErrListFile) THEN EXIT END;
- ⓪&IF ~ wBlock (MainOutputPath) THEN EXIT END;
- ⓪&IF ~ wBlock (CompilerArgs) THEN EXIT END;
- ⓪&ok:= TRUE;
- ⓪&EXIT
- ⓪$END;
- ⓪$IF NOT ok THEN RETURN END;
- ⓪$
- ⓪$Close (f);
- ⓪$
- ⓪$ShowArrow;
- ⓪"END SaveParameter;
- ⓪
- ⓪ PROCEDURE LoadParameter (REF name: ARRAY OF CHAR; loadInBatch: BOOLEAN);
- ⓪
- ⓪"VAR f : File;
- ⓪(fname : FileStr;
- ⓪
- ⓪"PROCEDURE ioErr (): BOOLEAN;
- ⓪"
- ⓪$VAR ioRes: INTEGER;
- ⓪"
- ⓪$BEGIN
- ⓪&ioRes := State (f);
- ⓪&IF ioRes < fOK THEN
- ⓪(ResetState (f);
- ⓪(FileAlert (ioRes);
- ⓪(Close (f);
- ⓪(ShowArrow;
- ⓪&END;
- ⓪&RETURN ioRes < fOK
- ⓪$END ioErr;
- ⓪$
- ⓪"PROCEDURE rBlock (VAR data: ARRAY OF BYTE): BOOLEAN;
- ⓪"
- ⓪$BEGIN
- ⓪&ReadBlock (f, data);
- ⓪&RETURN ~ ioErr ()
- ⓪$END rBlock;
- ⓪
- ⓪"VAR magic, n: LONGCARD;
- ⓪(ch: CHAR;
- ⓪(ok: BOOLEAN;
- ⓪"
- ⓪"BEGIN
- ⓪$ShowBee;
- ⓪$
- ⓪$Assign (name, fname, voidO);
- ⓪$ReplaceHome (fname);
- ⓪$MakeFullPath (fname, voidI);
- ⓪$Open (f, fname, readOnly);
- ⓪$IF State (f) # fOK THEN FormAlert (1, noParmAlt^, voidC); RETURN END;
- ⓪$
- ⓪$IF ~ rBlock (magic) THEN RETURN END;
- ⓪$IF magic = mspFileMagic THEN
- ⓪&LOOP (* Ist keine echte Schleife - lediglich f. einfacheres EXIT *)
- ⓪(ok:= FALSE;
- ⓪(IF ~ rBlock (shellParm) THEN EXIT END;
- ⓪(IF ~ rBlock (WorkField) THEN EXIT END;
- ⓪(IF ~ rBlock (lastFn) THEN EXIT END;
- ⓪(IF ~ rBlock (CodeName) THEN EXIT END;
- ⓪(IF ~ rBlock (EditorParm) THEN EXIT END;
- ⓪(IF ~ rBlock (CompilerParm) THEN EXIT END;
- ⓪(IF ~ rBlock (LinkerParm) THEN EXIT END;
- ⓪(IF ~ rBlock (DefaultStackSize) THEN EXIT END;
- ⓪(IF ~ rBlock (TemporaryPath) THEN EXIT END;
- ⓪(IF ~ rBlock (MakeFileName) THEN EXIT END;
- ⓪(IF ~ rBlock (DefLibName) THEN EXIT END;
- ⓪(IF ~ rBlock (ErrListFile) THEN EXIT END;
- ⓪(IF ~ rBlock (MainOutputPath) THEN EXIT END;
- ⓪(IF ~ rBlock (CompilerArgs) THEN EXIT END;
- ⓪(ok:= TRUE;
- ⓪(EXIT
- ⓪&END;
- ⓪&IF NOT ok THEN RETURN END;
- ⓪
- ⓪&Assign (fname, shellParm.parameterPath, voidO);
- ⓪
- ⓪$ELSE
- ⓪&FormAlert (1, noParmAlt^, voidC)
- ⓪$END;
- ⓪$Close (f);
- ⓪$
- ⓪$InitWorkFieldMenuIndizies;
- ⓪$
- ⓪$(* If a batch file is specified, execute it. *)
- ⓪$IF NOT Empty (shellParm.batchPath) THEN
- ⓪&ExecuteBatch (shellParm.batchPath, loadInBatch)
- ⓪$END;
- ⓪$
- ⓪$ShowArrow;
- ⓪"END LoadParameter;
- ⓪
- ⓪
- ⓪ PROCEDURE PrepareScan;
- ⓪
- ⓪"BEGIN
- ⓪$ScanAddr := CallingChain [ScanIndex].relAddr;
- ⓪$ScanOpts := CallingChain [ScanIndex].codeOpts;
- ⓪$Assign (CallingChain [ScanIndex].sourceName, TextName, voidO);
- ⓪"END PrepareScan;
- ⓪
- ⓪ PROCEDURE readWorkNames;
- ⓪
- ⓪"BEGIN
- ⓪$WITH WorkField DO
- ⓪&IF current >= 0 THEN
- ⓪(workFName := elems[current].sourceName;
- ⓪(workCName := elems[current].codeName;
- ⓪&ELSE
- ⓪(workFName := ''; workCName := '';
- ⓪&END;
- ⓪$END;
- ⓪"END readWorkNames;
- ⓪
- ⓪ PROCEDURE writeWorkName (REF source, code: ARRAY OF CHAR);
- ⓪"VAR i : INTEGER;
- ⓪"BEGIN (* richtige Arbeitsdatei suchen und Code speichern *)
- ⓪$WITH WorkField DO
- ⓪&IF current >= 0 THEN
- ⓪(FOR i:= 0 TO maxWorkFiles-1 DO
- ⓪*IF elems[i].used & StrEqual (source, elems[i].sourceName) THEN
- ⓪,Assign (code, elems[i].codeName, voidO);
- ⓪,RETURN
- ⓪*END
- ⓪(END
- ⓪&END;
- ⓪$END;
- ⓪"END writeWorkName;
- ⓪
- ⓪ PROCEDURE Bconout ( c: CHAR );
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(SUBQ.L #1,A3
- ⓪(MOVEQ #0,D0
- ⓪(MOVE.B -(A3),D0
- ⓪(MOVE D0,-(A7)
- ⓪(MOVE #2,-(A7)
- ⓪(MOVE #3,-(A7)
- ⓪(TRAP #13
- ⓪(ADDQ.L #6,A7
- ⓪$END
- ⓪"END Bconout;
- ⓪"(*$L=*)
- ⓪
- ⓪ (*$Z-*)
- ⓪ PROCEDURE Bconin (): CHAR;
- ⓪ (*$Z=*)
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE #2,-(A7)
- ⓪(MOVE #2,-(A7)
- ⓪(TRAP #13
- ⓪(ADDQ.L #4,A7
- ⓪(MOVE.B D0,(A3)+
- ⓪(CLR.B (A3)+
- ⓪$END
- ⓪"END Bconin;
- ⓪"(*$L=*)
- ⓪
- ⓪ (*$Z-*)
- ⓪ PROCEDURE Bconstat (): BOOLEAN;
- ⓪ (*$Z=*)
- ⓪"(*$L-*)
- ⓪"BEGIN
- ⓪$ASSEMBLER
- ⓪(MOVE #2,-(A7)
- ⓪(MOVE #1,-(A7)
- ⓪(TRAP #13
- ⓪(ADDQ.L #4,A7
- ⓪(TST D0
- ⓪(SNE D0
- ⓪(ANDI #1,D0
- ⓪(MOVE.W D0,(A3)+
- ⓪$END
- ⓪"END Bconstat;
- ⓪"(*$L=*)
- ⓪
- ⓪ PROCEDURE clrscr;
- ⓪"BEGIN
- ⓪$Bconout (33C); Bconout ('E');
- ⓪"END clrscr;
- ⓪
- ⓪ PROCEDURE curon;
- ⓪"BEGIN
- ⓪$Bconout (33C); Bconout ('e');
- ⓪"END curon;
- ⓪
- ⓪ PROCEDURE curoff;
- ⓪"BEGIN
- ⓪$Bconout (15C); Bconout (33C); Bconout ('f');
- ⓪"END curoff;
- ⓪
- ⓪ PROCEDURE bing;
- ⓪"BEGIN
- ⓪$Bconout (7C);
- ⓪"END bing;
- ⓪
- ⓪
- ⓪ PROCEDURE alert ( REF s1,s2,s3: ARRAY OF CHAR );
- ⓪"VAR msg: ARRAY [0..269] OF CHAR;
- ⓪"BEGIN
- ⓪$Assign (s1, msg, voidO);
- ⓪$WrapAlert (msg, 0);
- ⓪$IF s2[0] # 0C THEN
- ⓪&Append ('|', msg, strVal);
- ⓪&Append (s2, msg, voidO);
- ⓪&WrapAlert (msg, 0);
- ⓪$END;
- ⓪$Insert ('[0][',0,msg,strVal);
- ⓪$Append ('][]',msg,strVal);
- ⓪$Insert (s3,CARDINAL(Length(msg)-1),msg, voidO);
- ⓪$FormAlert (1, msg,buttonNum);
- ⓪"END alert;
- ⓪"
- ⓪ PROCEDURE load;
- ⓪
- ⓪"VAR r : LoaderResults;
- ⓪*msg : ARRAY [0..79] OF CHAR;
- ⓪*name : FileStr;
- ⓪"
- ⓪"BEGIN
- ⓪$IF Empty (currFn) THEN name := CodeName ELSE name := currFn END;
- ⓪$TellLoading (newTellValue, name);
- ⓪$LoadModule (name, StdPaths, name, msg, r);
- ⓪$IF r # noError THEN alert (conc (name, NoLoadStr^), msg, OkStr^) END;
- ⓪"END load;
- ⓪
- ⓪ PROCEDURE unload;
- ⓪
- ⓪"VAR r : LoaderResults;
- ⓪*name : FileStr;
- ⓪"
- ⓪"BEGIN
- ⓪$IF Empty (currFn) THEN name := CodeName ELSE name := currFn END;
- ⓪$UnLoadModule (name, r);
- ⓪$IF r # noError THEN alert (conc (name, NoUnloadStr^), '', OkStr^) END;
- ⓪"END unload;
- ⓪
- ⓪ PROCEDURE closeAllWindows;
- ⓪"VAR w: CARDINAL;
- ⓪"BEGIN
- ⓪$AESWindows.UpdateWindow (TRUE);
- ⓪$LOOP
- ⓪&w:= AESWindows.TopWindow ();
- ⓪&IF w = 0 THEN EXIT END;
- ⓪&AESWindows.CloseWindow (w);
- ⓪&AESWindows.DeleteWindow (w);
- ⓪$END;
- ⓪$IF (GEMEnv.GEMVersion() >= $140) THEN
- ⓪&(* UpdateWindow(FALSE) hier unnötig - siehe ST-Magazin 3/91 Seite 92. *)
- ⓪&AESWindows.ResetWindows ();
- ⓪$ELSE
- ⓪&AESWindows.UpdateWindow (FALSE);
- ⓪$END;
- ⓪"END closeAllWindows;
- ⓪
- ⓪ VAR callSwitchedToTextMode: BOOLEAN;
- ⓪
- ⓪ PROCEDURE call ( VAR modname: ARRAY OF CHAR; args: ARRAY OF CHAR;
- ⓪1stackSize: LONGCARD; interactive, checkError, tool:BOOLEAN );
- ⓪
- ⓪"TYPE SufSet = SET OF MySuf;
- ⓪"
- ⓪"VAR sufstr : ARRAY[0..2] OF CHAR;
- ⓪&dummy : ARRAY[0..12] OF CHAR;
- ⓪&name, path,
- ⓪&oldPath : PathStr;
- ⓪&getparm : BOOLEAN;
- ⓪&prgType : AESMisc.ProgramType;
- ⓪&sufcnt, suffix : MySuf;
- ⓪&res : INTEGER;
- ⓪&dummyChar : CHAR;
- ⓪&hdl : ADDRESS;
- ⓪&prevStackSize : LONGCARD;
- ⓪
- ⓪"BEGIN
- ⓪$Assign (modname, name, voidO);
- ⓪$Upper (name);
- ⓪
- ⓪$SplitPath (name, path, dummy);
- ⓪$SplitName (dummy,dummy,sufstr);
- ⓪$suffix:= mod;
- ⓪$IF sufstr[0] = 0C THEN
- ⓪&ConcatName (name, suf[mod], name)
- ⓪$ELSE
- ⓪&FOR sufcnt:= MIN (MySuf) TO MAX (MySuf) DO
- ⓪(IF StrEqual (sufstr,suf[sufcnt]) THEN
- ⓪*suffix := sufcnt;
- ⓪(END
- ⓪&END;
- ⓪$END;
- ⓪$prgType:= AESMisc.graphicPrgm;
- ⓪$getparm:= FALSE;
- ⓪$IF suffix IN SufSet {ttp,mtp} THEN getparm:= interactive END;
- ⓪$IF suffix IN SufSet {ttp,mtp,tos,mos} THEN prgType:= AESMisc.textPrgm END;
- ⓪
- ⓪$IF getparm THEN
- ⓪&RequestArg (args);
- ⓪$END;
- ⓪
- ⓪$GetDefaultPath (oldPath);
- ⓪$IF ~noDirChange THEN
- ⓪&IF (path[0] = 0C) AND NOT tool THEN
- ⓪((* Ist kein Pfad angegeben, bleibt bei Tools und
- ⓪)* Systemprgs der akt. Pfad erhalten
- ⓪)*)
- ⓪(SearchFile (name, StdPaths, fromStart, voidO, name);
- ⓪(SplitPath (name, path, dummy);
- ⓪&END;
- ⓪&ReplaceHome (path);
- ⓪&SetDefaultPath (path, voidI)
- ⓪$END;
- ⓪
- ⓪$callSwitchedToTextMode := (prgType = AESMisc.textPrgm);
- ⓪
- ⓪$(*$? UseExtKeys: IF NOT tool THEN DeInstallKbdEvents END; *)
- ⓪$
- ⓪$IF NOT multiGEM & NOT multiTOS THEN
- ⓪&closeAllWindows; (* alle noch offenen Fenster (von ACCs) schließen *)
- ⓪$END;
- ⓪
- ⓪$IF prgType = AESMisc.textPrgm THEN
- ⓪&HideMouse;
- ⓪&clrscr;
- ⓪&curon;
- ⓪$END;
- ⓪$
- ⓪$IF DoShellWrite AND (GEMEnv.GEMVersion() >= $140) THEN
- ⓪&IF NOT multiTOS THEN
- ⓪(AESMisc.ShellWrite (TRUE, prgType, name, args);
- ⓪&END
- ⓪$END;
- ⓪
- ⓪$IF NOT multiGEM & NOT multiTOS THEN
- ⓪&(* AC_CLOSE-Nachricht an alle Accessories schicken *)
- ⓪&appl_exit; (* nach appl_exit kein AES-Aufruf mehr! *)
- ⓪$END;
- ⓪$
- ⓪$prevStackSize:= DefaultStackSize;
- ⓪$IF stackSize # 0 THEN DefaultStackSize:= stackSize END;
- ⓪$CallModule (name, StdPaths, args, NIL, exitCode, callMsg, callRes);
- ⓪$DefaultStackSize:= prevStackSize;
- ⓪
- ⓪$IF NOT multiGEM & NOT multiTOS THEN
- ⓪&(* beim GEM wieder anmelden *)
- ⓪&appl_init; (* erst jetzt wieder AES-Aufrufe erlaubt! *)
- ⓪$END;
- ⓪(
- ⓪$IF DoShellWrite AND (GEMEnv.GEMVersion() >= $140) THEN
- ⓪&IF NOT multiTOS THEN
- ⓪((* Dies alles funktioniert erst ab TOS 1.4 richtig *)
- ⓪(AESMisc.ShellWrite (FALSE, AESMisc.graphicPrgm, ShellName, '');
- ⓪&END
- ⓪$END;
- ⓪$
- ⓪$IF prgType = AESMisc.textPrgm THEN
- ⓪&(* Nach Programmende bei TOS-Programmen auf Tastendruck warten *)
- ⓪&IF interactive & shellParm.waitOnReturn
- ⓪)& NOT ScanMode & (callRes = noError) THEN
- ⓪(WHILE Bconstat () DO dummyChar:= Bconin () END;
- ⓪(curon;
- ⓪(dummyChar:= Bconin ()
- ⓪&END;
- ⓪&curoff;
- ⓪&ShowMouse
- ⓪$END;
- ⓪
- ⓪$IF NOT multiGEM & NOT multiTOS THEN
- ⓪&closeAllWindows; (* alle noch offenen Fenster (von ACCs) schließen *)
- ⓪$END;
- ⓪
- ⓪$ClearDeskAndShowMsg;
- ⓪$
- ⓪$IF Inconsistent () THEN
- ⓪&alert (memErrorAlt, '', OkStr^)
- ⓪$END;
- ⓪
- ⓪$(*$? UseExtKeys: IF NOT tool THEN InstallKbdEvents END; *)
- ⓪
- ⓪$SetDefaultPath (oldPath, res);
- ⓪
- ⓪$IF checkError THEN
- ⓪&IF callRes # noError THEN
- ⓪(IF callRes = exitFault THEN
- ⓪*alert (callMsg, '', OkStr^)
- ⓪(ELSE
- ⓪*alert (conc (name, NoExecStr^), callMsg, OkStr^)
- ⓪(END
- ⓪&ELSIF ScanMode THEN
- ⓪(PrepareScan;
- ⓪(IF ScanBox (TextName) THEN
- ⓪*autoCmd := scan
- ⓪(ELSE
- ⓪*autoCmd := noCmd
- ⓪(END
- ⓪&ELSIF exitCode # 0 THEN
- ⓪(CASE exitCode OF
- ⓪*fFileNotFound,
- ⓪*fPathNotFound,
- ⓪*fInvalidDrive: FormError (2)|
- ⓪4(* "Diese Anwendung kann Datei oder Ordner nicht finden" *)
- ⓪*fAccessDenied: FormError (5)|
- ⓪6(* "Datei existiert bereits oder ist Schreibgeschützt" *)
- ⓪*fTooManyOpen,
- ⓪*fInsufficientMemory: FormError (8)|
- ⓪-(* "Es steht nicht genug Speicher für diese Anw. zur Verfügung" *)
- ⓪(ELSE
- ⓪*alert (conc (RetStr^, IntToStr (exitCode, 0)), '', OkStr^)
- ⓪(END
- ⓪&END
- ⓪$END;
- ⓪$ScanMode := FALSE
- ⓪"END call;
- ⓪
- ⓪
- ⓪ PROCEDURE callEdit (VAR s0: ARRAY OF CHAR; errMsg: BOOLEAN);
- ⓪
- ⓪"VAR s, voidStr,
- ⓪&tempPath : ARRAY [0..126] OF CHAR;
- ⓪&f : File;
- ⓪&lastBreak : BOOLEAN;
- ⓪&zero : CARDINAL;
- ⓪
- ⓪"PROCEDURE writeTempFile;
- ⓪
- ⓪$PROCEDURE stateError (): BOOLEAN;
- ⓪
- ⓪&BEGIN
- ⓪(IF State (f) # fOK THEN
- ⓪*FileAlert (State (f));
- ⓪*ResetState (f);
- ⓪*Remove (f);
- ⓪*RETURN TRUE
- ⓪(ELSE RETURN FALSE END;
- ⓪&END stateError;
- ⓪$
- ⓪$PROCEDURE writeLn (VAR str: ARRAY OF CHAR): BOOLEAN;
- ⓪$
- ⓪&BEGIN
- ⓪(Text.WriteString (f, str);
- ⓪(IF stateError () THEN RETURN FALSE END;
- ⓪(Text.WriteLn (f);
- ⓪(IF stateError () THEN RETURN FALSE END;
- ⓪(RETURN TRUE
- ⓪&END writeLn;
- ⓪$
- ⓪$VAR s2: Str128;
- ⓪&
- ⓪$BEGIN
- ⓪&ReplaceHome (tempPath);
- ⓪&Create (f, tempPath, writeSeqTxt, replaceOld);
- ⓪&IF stateError () THEN RETURN END;
- ⓪&IF ~ EditorParm.passName THEN
- ⓪(IF ~ writeLn (TextName) THEN RETURN END;
- ⓪&END;
- ⓪&IF ~ EditorParm.passErrorPos AND errMsg THEN
- ⓪(Assign (CardToStr (TextLine, 0), s2, voidO);
- ⓪(Append (' ', s2, voidO);
- ⓪(Append (CardToStr (TextCol - 1, 0), s2, voidO);
- ⓪(IF ~ writeLn (s2) THEN RETURN END;
- ⓪&END;
- ⓪&IF ~ EditorParm.passErrorText AND errMsg THEN
- ⓪(IF ~ writeLn (ErrorMsg) THEN RETURN END;
- ⓪&END;
- ⓪&Close (f);
- ⓪$END writeTempFile;
- ⓪
- ⓪"BEGIN
- ⓪$Split (s0, PosLen (' ', s0, 0), TextName, s, voidO);
- ⓪$IF EditorParm.searchSources THEN
- ⓪&SearchFile (TextName, SrcPaths, fromStart, voidO, TextName)
- ⓪$END;
- ⓪$IF EditorParm.passName THEN Insert (TextName, 0, s, voidO) END;
- ⓪
- ⓪$(* Zeiger auf akt. Dateinamen dem Editor mit übergeben
- ⓪&IF isToolbox THEN
- ⓪(Append (' ^', s, voidO);
- ⓪(Append (CardToStr (LONGCARD (ADR (TextName)), 0), s, voidO);
- ⓪(Append (' ', s, voidO);
- ⓪&END;
- ⓪$*)
- ⓪
- ⓪$IF EditorParm.tempShellFile THEN
- ⓪&SplitPath (EditorParm.name, tempPath, voidStr);
- ⓪&Append (EditorParm.tempShellName, tempPath, voidO);
- ⓪&Append (tempPath, s, strVal);
- ⓪&writeTempFile;
- ⓪$END;
- ⓪$
- ⓪$IF ~ EditorParm.passArgument THEN s := '' END;
- ⓪$
- ⓪$lastBreak:= shellParm.breakActive;
- ⓪$shellParm.breakActive:= FALSE;
- ⓪$call (EditorParm.name, s, EditorStackSize, FALSE, FALSE, TRUE);
- ⓪$shellParm.breakActive:= lastBreak;
- ⓪$
- ⓪$IF EditorParm.tempEditorFile THEN
- ⓪&SplitPath (EditorParm.name, tempPath, voidStr);
- ⓪&Append (EditorParm.tempEditorName, tempPath, voidO);
- ⓪&ReplaceHome (tempPath);
- ⓪&Open (f, tempPath, readSeqTxt);
- ⓪&IF State (f) = fOK THEN
- ⓪(Text.ReadString (f, s);
- ⓪(Close (f);
- ⓪(zero := 0;
- ⓪(exitCode := StrToCard (s, zero, strVal);
- ⓪(IF ~ strVal THEN exitCode := 0 END;
- ⓪&ELSE
- ⓪(exitCode:= 0
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$autoCmd := noCmd;
- ⓪$IF callRes # noError THEN
- ⓪&alert (EdStr^, callMsg, OkStr^)
- ⓪$ELSE
- ⓪&CASE exitCode OF
- ⓪(1: autoCmd := compile|
- ⓪(2: autoCmd := exec_src|
- ⓪(3: autoCmd := dftMake|
- ⓪(4: autoCmd := dftMake_exec|
- ⓪&ELSE
- ⓪&END;
- ⓪&IF (autoCmd = dftMake_exec) OR (autoCmd = dftMake) THEN
- ⓪(IF NOT makeActive THEN
- ⓪*editorsMakeCmd:= autoCmd;
- ⓪*makeActive:= TRUE;
- ⓪(END;
- ⓪(autoCmd:= contMake
- ⓪&ELSE
- ⓪(IF makeActive THEN
- ⓪*FormAlert (1, ContMakeAlt^, buttonNum);
- ⓪*IF buttonNum = 1 THEN
- ⓪,autoCmd:= contMake
- ⓪*END
- ⓪(END
- ⓪&END
- ⓪$END;
- ⓪"END callEdit;
- ⓪
- ⓪ PROCEDURE hdedit (wrk: BOOLEAN);
- ⓪
- ⓪"VAR name1, name2: NameStr;
- ⓪&dummy : Str128;
- ⓪"
- ⓪"BEGIN
- ⓪$IF wrk THEN
- ⓪&callEdit (workFName, FALSE);
- ⓪$ELSE
- ⓪&callEdit (currFn, FALSE)
- ⓪$END;
- ⓪$Upper (TextName);
- ⓪$SplitPath (TextName, dummy, name1);
- ⓪$SplitPath (workFName, dummy, name2);
- ⓪$IF NOT StrEqual (name1, name2) THEN lastFn := TextName END;
- ⓪"END hdedit;
- ⓪
- ⓪ PROCEDURE hdrun (wrk, tool: BOOLEAN);
- ⓪
- ⓪"VAR found,
- ⓪(codeOK : BOOLEAN;
- ⓪(f : File;
- ⓪(cDate,
- ⓪(sDate : Clock.Date;
- ⓪(cTime,
- ⓪(sTime : Clock.Time;
- ⓪(sname,
- ⓪(cname,
- ⓪(voidStr,
- ⓪(suffix : FileStr;
- ⓪
- ⓪
- ⓪"PROCEDURE longTime (d:Clock.Date; t:Clock.Time): LONGCARD;
- ⓪$BEGIN
- ⓪&RETURN LONG (Clock.PackDate (d)) * $10000 + LONG (Clock.PackTime (t))
- ⓪$END longTime;
- ⓪
- ⓪"PROCEDURE getCodeDateTime ( suffix: MySuf;
- ⓪Apaths : PathList;
- ⓪=VAR cname : FileStr;
- ⓪=VAR found : BOOLEAN);
- ⓪$VAR testName: FileStr;
- ⓪(testN2: FileStr;
- ⓪(path: ptrString;
- ⓪$BEGIN
- ⓪&found:= FALSE;
- ⓪
- ⓪&ConcatName (cname, suf[suffix], testN2);
- ⓪&IF NOT Empty (MainOutputPath) THEN
- ⓪((* Eingestellten Ausgabe-Pfad prüfen *)
- ⓪(Concat (MainOutputPath, testN2, testName, voidO);
- ⓪&ELSE
- ⓪((* Ausgabe-Pfad aus Compiler-Pfaden prüfen *)
- ⓪(IF suffix = imp THEN
- ⓪*Concat (ImpOutPath, testN2, testName, voidO);
- ⓪(ELSE
- ⓪*Concat (ModOutPath, testN2, testName, voidO);
- ⓪(END
- ⓪&END;
- ⓪&ReplaceHome (testName);
- ⓪&Open (f, testName, readOnly);
- ⓪&found:= (State (f) >= fOK);
- ⓪&IF NOT found THEN
- ⓪((* Datei auf Default-Pfaden suchen *)
- ⓪(SearchFile (testN2, paths, fromStart, found, testName);
- ⓪(IF found THEN
- ⓪*Open (f, testName, readOnly);
- ⓪(END
- ⓪&END;
- ⓪&IF found THEN
- ⓪(GetDateTime (f, cDate, cTime);
- ⓪(Close (f);
- ⓪(cname:= testName;
- ⓪&END;
- ⓪$END getCodeDateTime;
- ⓪
- ⓪"BEGIN (* hdrun *)
- ⓪$codeOK := FALSE;
- ⓪$(* check, wether code is valid if source is executed *)
- ⓪$IF wrk THEN
- ⓪&SearchFile (workFName, SrcPaths, fromStart, found, sname);
- ⓪$ELSIF IsSourceName (currFn) THEN
- ⓪&SearchFile (currFn, SrcPaths, fromStart, found, sname)
- ⓪$ELSE
- ⓪&(* wir haben einen Code -> sofort ausführen *)
- ⓪&codeOK := TRUE
- ⓪$END;
- ⓪$IF NOT codeOK THEN
- ⓪&IF found THEN
- ⓪((* Source vorhanden *)
- ⓪(IF wrk THEN
- ⓪*workFName:= sname; cname:= workCName
- ⓪(ELSE
- ⓪*currFn:= sname; cname:= ''
- ⓪(END;
- ⓪(IF Empty (cname) THEN
- ⓪*(* Wir müssen den Code suchen *)
- ⓪*SplitPath (sname, voidStr, cname);
- ⓪*SplitName (cname, cname, suffix);
- ⓪*getCodeDateTime (mod, ModPaths, cname, codeOK);
- ⓪*IF NOT codeOK THEN
- ⓪,getCodeDateTime (mos, ModPaths, cname, codeOK) END;
- ⓪*IF NOT codeOK THEN
- ⓪,getCodeDateTime (mtp, ModPaths, cname, codeOK) END;
- ⓪*IF NOT codeOK THEN
- ⓪,getCodeDateTime (imp, ImpPaths, cname, codeOK) END;
- ⓪(ELSE
- ⓪*(* Code schon vorhanden *)
- ⓪*Open (f, cname, readOnly);
- ⓪*codeOK:= (State (f) = fOK);
- ⓪*IF codeOK THEN
- ⓪,GetDateTime (f, cDate, cTime);
- ⓪,Close (f);
- ⓪*END;
- ⓪(END;
- ⓪(IF codeOK THEN
- ⓪*(* Code vorhanden -> Zeit der Source ermitteln und mit Code vergl. *)
- ⓪*Open (f, sname, readOnly);
- ⓪*GetDateTime (f, sDate, sTime);
- ⓪*Close (f);
- ⓪*codeOK:= longTime (cDate,cTime) >= longTime (sDate,sTime);
- ⓪(END;
- ⓪&ELSE
- ⓪((* Source nicht vorhanden -> Fehler melden? *)
- ⓪((* wenn nicht, wird einfach Compiler gestartet... (weil codeOK=FALSE) *)
- ⓪&END;
- ⓪&
- ⓪$ELSE
- ⓪&cname:= currFn
- ⓪$END;
- ⓪$
- ⓪$IF codeOK THEN
- ⓪&IF wrk THEN workCName := cname
- ⓪&ELSE CodeName := cname END;
- ⓪&call (cname, args, 0, TRUE, TRUE, tool)
- ⓪$ELSE
- ⓪&IF wrk THEN workCName:= '' END;
- ⓪&TextName := sname;
- ⓪&autoCmd := comp_exec
- ⓪$END
- ⓪$
- ⓪"END hdrun;
- ⓪
- ⓪
- ⓪ PROCEDURE DoEditBox (batch, mustShow: BOOLEAN; VAR cont: BOOLEAN);
- ⓪"VAR s: String;
- ⓪&msg: Str128;
- ⓪&buttonNum: CARDINAL;
- ⓪"BEGIN
- ⓪$(* Signalton: *)
- ⓪$bing;
- ⓪$IF mustShow OR EditorParm.waitOnError THEN
- ⓪&msg := '[2][][]';
- ⓪&IF batch THEN
- ⓪(Insert (EditBatStr^, 6, msg, voidO)
- ⓪&ELSE
- ⓪(Insert (EditStr^, 6, msg, voidO)
- ⓪&END;
- ⓪&s:= ErrorMsg;
- ⓪&WrapAlert (s, 0);
- ⓪&Insert (s, 4, msg, voidO);
- ⓪&FormAlert (1, msg, buttonNum);
- ⓪&IF buttonNum = 1 THEN
- ⓪(autoCmd:= edit; cont:= FALSE;
- ⓪&ELSE
- ⓪(autoCmd:= noCmd; cont:= (buttonNum = 2);
- ⓪&END
- ⓪$ELSE
- ⓪&autoCmd:= edit; cont:= FALSE;
- ⓪$END
- ⓪"END DoEditBox;
- ⓪
- ⓪
- ⓪ (* callComp -- Calls the compiler to compile the file 'modName'.
- ⓪!* 'work = TRUE' means the workfile is compiled.
- ⓪!* 'batch = TRUE' means the compiler is called while
- ⓪!* executing a batch file. In that case 'cont' states,
- ⓪!* if the execution of the batch file has to continue
- ⓪!* after this proc. returns.
- ⓪!*)
- ⓪
- ⓪ PROCEDURE callComp (VAR modname: ARRAY OF CHAR;
- ⓪8work,
- ⓪8batch : BOOLEAN;
- ⓪4VAR cont : BOOLEAN);
- ⓪
- ⓪"VAR i:INTEGER;
- ⓪&s,msg:Str128;
- ⓪
- ⓪"BEGIN
- ⓪$(* String mit Compileroptionen aufbauen.
- ⓪%*)
- ⓪$WITH CompilerParm DO
- ⓪&IF shortMsgs THEN s:= ' -Q' ELSE s:= ' +Q' END;
- ⓪&Append (' ', s, voidO);
- ⓪&Append (CompilerArgs, s, voidO);
- ⓪&IF ~ Empty (MainOutputPath) THEN
- ⓪(Append (' /O', s, voidO);
- ⓪(Append (MainOutputPath, s, voidO);
- ⓪&END;
- ⓪&IF protocol THEN
- ⓪(Append (' /C', s, voidO);
- ⓪(Append (CardToStr (protWidth, 0), s, voidO);
- ⓪(Append (' /P', s, voidO);
- ⓪(Append (protName, s, voidO);
- ⓪&END;
- ⓪$END;
- ⓪$
- ⓪$CodeName:= '';
- ⓪$IF autoCmd = scan THEN ScanMode:= TRUE END;
- ⓪$call (CompilerParm.name, conc (modname, s),
- ⓪*CompilerStackSize, FALSE, FALSE, TRUE);
- ⓪$
- ⓪$cont:= TRUE;
- ⓪$IF callRes # noError THEN
- ⓪&alert (CompStr^, callMsg, OkStr^);
- ⓪&autoCmd:= noCmd
- ⓪$ELSE
- ⓪&CASE exitCode OF
- ⓪(0: IF autoCmd = scan THEN
- ⓪/autoCmd:= edit
- ⓪-ELSIF ~ batch THEN
- ⓪-
- ⓪/IF makeActive THEN
- ⓪1CodeName:= LastCodeName;
- ⓪/ELSE
- ⓪1Upper (CodeName);
- ⓪1LastCodeName:= CodeName;
- ⓪1LastCodeSize:= CodeSize;
- ⓪/END;
- ⓪/IF work THEN
- ⓪1workCName:= CodeName;
- ⓪1writeWorkName (TextName, CodeName);
- ⓪/END;
- ⓪/IF autoCmd = comp_exec THEN
- ⓪1autoCmd:= execute
- ⓪/ELSE
- ⓪1autoCmd:= noCmd
- ⓪/END;
- ⓪/
- ⓪-END|
- ⓪(2: DoEditBox (batch, TRUE, cont)|
- ⓪(3: DoEditBox (batch, FALSE, cont)
- ⓪&ELSE
- ⓪(autoCmd:= noCmd
- ⓪&END
- ⓪$END
- ⓪"END callComp;
- ⓪
- ⓪
- ⓪ PROCEDURE callLink (VAR moduleName: ARRAY OF CHAR);
- ⓪
- ⓪"VAR s: ARRAY [0..124] OF CHAR;
- ⓪"
- ⓪"BEGIN
- ⓪$Assign (moduleName, s, voidO);
- ⓪$WITH LinkerParm DO
- ⓪&IF optimize = partOptimize THEN
- ⓪(Append (' -H', s, voidO);
- ⓪&ELSIF optimize = nameOptimize THEN
- ⓪(Append (' -M', s, voidO);
- ⓪&ELSIF optimize = fullOptimize THEN
- ⓪(Append (' -F', s, voidO);
- ⓪&END;
- ⓪&IF fastLoad THEN
- ⓪(Append (' -0', s, voidO)
- ⓪&END;
- ⓪&IF fastCode THEN
- ⓪(Append (' -1', s, voidO)
- ⓪&END;
- ⓪&IF fastMemory THEN
- ⓪(Append (' -2', s, voidO)
- ⓪&END;
- ⓪&IF symbolFile THEN
- ⓪(Append (' -S', s, voidO);
- ⓪(Append (symbolArgs, s, voidO)
- ⓪&END;
- ⓪&IF outputName[0] # '' THEN
- ⓪(Append (' -O', s, voidO);
- ⓪(Append (outputName, s, voidO)
- ⓪&END;
- ⓪&call (name, s, LinkerStackSize, FALSE, FALSE, TRUE);
- ⓪$END;
- ⓪$IF callRes # noError THEN
- ⓪&alert (LinkStr^, callMsg, OkStr^)
- ⓪$END
- ⓪"END callLink;
- ⓪
- ⓪
- ⓪ PROCEDURE callMake (REF name: ARRAY OF CHAR; batch: BOOLEAN; VAR cont: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$call (shellParm.makeName, name, MakeStackSize, FALSE, FALSE, TRUE);
- ⓪$cont:= TRUE;
- ⓪$IF callRes # noError THEN
- ⓪&alert (MakeStr^, callMsg, OkStr^);
- ⓪&autoCmd:= noCmd;
- ⓪$ELSE
- ⓪&CASE exitCode OF
- ⓪(0: LastCodeName:= CodeName;
- ⓪+LastCodeSize:= 0L;
- ⓪+ConcatPath (TemporaryPath, MakeCompFileName, TextName);
- ⓪+ReplaceHome (TextName);
- ⓪+IF autoCmd = make_exec THEN autoCmd:= comp_exec
- ⓪+ELSE autoCmd:= compile END|
- ⓪(1: IF autoCmd = make_exec THEN autoCmd:= execute
- ⓪+ELSE autoCmd:= noCmd END|
- ⓪(2: DoEditBox (batch, FALSE, cont)
- ⓪&ELSE
- ⓪(autoCmd:= noCmd;
- ⓪&END;
- ⓪$END
- ⓪"END callMake;
- ⓪
- ⓪
- ⓪ PROCEDURE hdscan (wrk: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$ErrorMsg:= '<Scanned>';
- ⓪$autoCmd:= scan;
- ⓪$IF wrk THEN callComp (workFName, TRUE, FALSE, voidO);
- ⓪$ELSIF Empty (currFn) THEN callComp (lastFn, FALSE, FALSE, voidO)
- ⓪$ELSE callComp (currFn, FALSE, FALSE, voidO) END;
- ⓪"END hdscan;
- ⓪
- ⓪ PROCEDURE hdcomp (wrk: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$IF wrk THEN callComp (workFName, TRUE, FALSE, voidO);
- ⓪$ELSE callComp (currFn, FALSE, FALSE, voidO); lastFn:= currFn; END;
- ⓪"END hdcomp;
- ⓪
- ⓪ PROCEDURE hdlink (wrk: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$IF wrk THEN callLink (workCName)
- ⓪$ELSE callLink (currFn) END;
- ⓪"END hdlink;
- ⓪"
- ⓪ PROCEDURE hdmake (wrk: BOOLEAN);
- ⓪
- ⓪"BEGIN
- ⓪$IF wrk THEN callMake (workFName, FALSE, voidO)
- ⓪$ELSE callMake (currFn, FALSE, voidO) END;
- ⓪"END hdmake;
- ⓪
- ⓪ PROCEDURE action (what: actionType; wrkFile, tool: BOOLEAN);
- ⓪
- ⓪"TYPE aTypeSet = SET OF actionType;
- ⓪"
- ⓪"CONST noHideAction = aTypeSet {doLoad, doUnLd, doCont};
- ⓪"
- ⓪"VAR s : Str128;
- ⓪&dummy, i: CARDINAL;
- ⓪&n1, n2 : ARRAY [0..11] OF CHAR;
- ⓪&hidden : BOOLEAN;
- ⓪
- ⓪"BEGIN
- ⓪$IF wrkFile THEN readWorkNames END;
- ⓪$
- ⓪$IF what IN noHideAction THEN hidden:= FALSE
- ⓪$ELSE HideSS (TRUE); hidden:= TRUE END;
- ⓪$
- ⓪$editorsMakeCmd:= noCmd;
- ⓪$makeActive:= FALSE;
- ⓪$CASE what OF
- ⓪&doEdit: hdedit (wrkFile)|
- ⓪&doComp: hdcomp (wrkFile)|
- ⓪&doExec: hdrun (wrkFile, tool);
- ⓪.IF wrkFile THEN writeWorkName (workFName, workCName) END|
- ⓪&doLink: hdlink (wrkFile)|
- ⓪&doScan: hdscan (wrkFile)|
- ⓪&doCpEx: autoCmd := comp_exec; hdcomp (wrkFile)|
- ⓪&doLoad: load|
- ⓪&doUnLd: unload|
- ⓪&doCont: InputScan (ErrorMsg, ScanIndex);
- ⓪.PrepareScan;
- ⓪.IF ScanBox (TextName) THEN
- ⓪0HideSS (TRUE); hidden:= TRUE;
- ⓪0autoCmd:= scan;
- ⓪0callComp (TextName, FALSE, FALSE, voidO)
- ⓪.END|
- ⓪&doBtch: IF wrkFile THEN ExecuteBatch (workFName, TRUE)
- ⓪.ELSE ExecuteBatch (currFn, TRUE) END|
- ⓪&doParm: IF wrkFile THEN LoadParameter (workFName, TRUE)
- ⓪.ELSE LoadParameter (currFn, TRUE) END|
- ⓪&doMake,
- ⓪&doMkEx,
- ⓪&doDftM: makeActive:= TRUE;
- ⓪.autoCmd:= contMake
- ⓪$ELSE
- ⓪$END;
- ⓪
- ⓪$REPEAT
- ⓪&CASE autoCmd OF
- ⓪
- ⓪(contMake: CASE what OF
- ⓪5doMake: autoCmd:= noCmd; hdmake (wrkFile)|
- ⓪5doMkEx: autoCmd:= make_exec; hdmake (wrkFile)|
- ⓪5doDftM: autoCmd:= dftMake
- ⓪3ELSE
- ⓪5autoCmd:= editorsMakeCmd
- ⓪3END|
- ⓪
- ⓪(edit : Concat (TextName, ' ', s, strVal);
- ⓪3IF EditorParm.passErrorPos THEN
- ⓪5Append (CardToStr (TextLine, 0), s, strVal);
- ⓪5Append (' ', s, strVal);
- ⓪5Append (CardToStr (TextCol - 1, 0), s, strVal);
- ⓪5Append (' ', s, strVal);
- ⓪3END;
- ⓪3IF EditorParm.passErrorText THEN
- ⓪5Append ('"', s, strVal);
- ⓪5Append (ErrorMsg, s, voidO);
- ⓪5Append ('" ', s, strVal);
- ⓪3END;
- ⓪3callEdit (s, TRUE)|
- ⓪
- ⓪(scan,
- ⓪(compile,
- ⓪(comp_exec: callComp (TextName, wrkFile, FALSE, voidO)|
- ⓪(
- ⓪(exec_src : autoCmd:= noCmd;
- ⓪3workFName:= '';
- ⓪3workCName:= '';
- ⓪3wrkFile:= FALSE;
- ⓪3WITH WorkField DO
- ⓪5IF current >= 0 THEN
- ⓪7i:= 0;
- ⓪7LOOP (* workFile richtig bestimmen *)
- ⓪9WITH elems[i] DO
- ⓪;IF used & StrEqual (TextName, sourceName) THEN
- ⓪=workFName:= sourceName;
- ⓪=workCName:= codeName;
- ⓪=wrkFile:= TRUE;
- ⓪=EXIT
- ⓪;END;
- ⓪9END;
- ⓪9INC (i);
- ⓪9IF i = maxWorkFiles THEN
- ⓪;EXIT
- ⓪9END;
- ⓪7END
- ⓪5END;
- ⓪3END;
- ⓪3IF ~wrkFile THEN currFn:= TextName END;
- ⓪3hdrun (wrkFile, tool);
- ⓪3IF wrkFile THEN writeWorkName (workFName, workCName) END|
- ⓪
- ⓪(execute : autoCmd:= noCmd;
- ⓪3call (CodeName, args, 0, TRUE, TRUE, tool)|
- ⓪
- ⓪(dftMake_exec,
- ⓪(dftMake : IF autoCmd = dftMake_exec THEN autoCmd:= make_exec END;
- ⓪3callMake ('' (* >> Make verw. Default-Namen aus ShellMsg *), FALSE, voidO)|
- ⓪&ELSE
- ⓪&END
- ⓪$UNTIL autoCmd = noCmd;
- ⓪$
- ⓪$Assign (lastFn, TextName, voidO);
- ⓪$
- ⓪$IF hidden THEN ShowSS (TRUE) END;
- ⓪"END action;
- ⓪
- ⓪
- ⓪
- ⓪ TYPE pathEntry = RECORD
- ⓪<used: BOOLEAN;
- ⓪<path: PathStr;
- ⓪:END;
- ⓪
- ⓪ VAR pathArray: ARRAY [1..MaxSearchPaths] OF pathEntry;
- ⓪
- ⓪ PROCEDURE ExecuteBatch (name: ARRAY OF CHAR; load: BOOLEAN);
- ⓪
- ⓪"VAR f : File;
- ⓪&s, arg : ARRAY[0..255] OF CHAR;
- ⓪&gotLine, cont,
- ⓪&doIt : BOOLEAN;
- ⓪&result : INTEGER;
- ⓪&oldDrive : Drive;
- ⓪&oldPath : PathStr;
- ⓪"
- ⓪"PROCEDURE delSpc (VAR s:ARRAY OF CHAR);
- ⓪$BEGIN
- ⓪&WHILE s[0] = ' ' DO Delete (s,0,1, voidO) END
- ⓪$END delSpc;
- ⓪"
- ⓪"PROCEDURE equ (a,b: ARRAY OF CHAR): BOOLEAN;
- ⓪$BEGIN
- ⓪&Upper (a);
- ⓪&Upper (b);
- ⓪&RETURN Compare (FileName (a), FileName (b)) = equal
- ⓪$END equ;
- ⓪
- ⓪"PROCEDURE setLinkName (VAR n:ARRAY OF CHAR);
- ⓪$VAR first: CHAR;
- ⓪(i: CARDINAL;
- ⓪(useEmpty: BOOLEAN;
- ⓪$BEGIN
- ⓪&first:=n[0];
- ⓪&IF (first = '-') OR (first = '+') THEN
- ⓪(Delete (n, 0, 1, voidO);
- ⓪(delSpc (n);
- ⓪&END;
- ⓪&FOR useEmpty:= FALSE TO TRUE DO
- ⓪(FOR i:= MIN (LLRange) TO MAX (LLRange) DO
- ⓪*IF equ (LinkerParm.linkList[i].name, n)
- ⓪*OR (useEmpty AND Empty (LinkerParm.linkList[i].name)) THEN
- ⓪,LinkerParm.linkList[i].valid:= (first # '-');
- ⓪,Assign (n, LinkerParm.linkList[i].name, voidO);
- ⓪,RETURN
- ⓪*END
- ⓪(END
- ⓪&END
- ⓪$END setLinkName;
- ⓪"
- ⓪"PROCEDURE setToolName (VAR n:ARRAY OF CHAR);
- ⓪$VAR i: CARDINAL;
- ⓪$BEGIN
- ⓪&FOR i:=1 TO MaxTool DO
- ⓪(IF ~ToolField[i].used THEN
- ⓪*ToolField[i].used:= TRUE;
- ⓪*Assign (n,ToolField[i].name, voidO);
- ⓪*RETURN
- ⓪(END
- ⓪&END
- ⓪$END setToolName;
- ⓪"
- ⓪"PROCEDURE getFirstPath (paths: PathList; VAR path: ARRAY OF CHAR);
- ⓪$VAR entry: PathEntry;
- ⓪$BEGIN
- ⓪&Lists.ResetList (paths);
- ⓪&entry:= Lists.NextEntry (paths);
- ⓪&IF entry # NIL THEN
- ⓪(Assign (entry^, path, voidO)
- ⓪&ELSE
- ⓪(path[0]:= ''
- ⓪&END
- ⓪$END getFirstPath;
- ⓪"
- ⓪"PROCEDURE killPaths (VAR paths: PathList);
- ⓪"
- ⓪$VAR entry: ADDRESS;
- ⓪(idx : CARDINAL;
- ⓪"
- ⓪$BEGIN
- ⓪&Lists.ResetList (paths);
- ⓪&entry:= Lists.PrevEntry (paths);
- ⓪&WHILE entry # NIL DO
- ⓪(idx:= 1;
- ⓪(WHILE (idx <= MaxSearchPaths)
- ⓪.AND (ADR (pathArray[idx].path) # entry) DO INC (idx) END;
- ⓪(IF idx <= MaxSearchPaths THEN pathArray[idx].used:= FALSE END;
- ⓪(Lists.RemoveEntry (paths, voidO);
- ⓪(entry:= Lists.CurrentEntry (paths);
- ⓪&END;
- ⓪$END killPaths;
- ⓪"
- ⓪"PROCEDURE setP ( VAR paths: PathList );
- ⓪$VAR err:BOOLEAN; c:CHAR; idx: CARDINAL;
- ⓪$BEGIN
- ⓪&killPaths (paths);
- ⓪&idx:= 1;
- ⓪&LOOP
- ⓪(IF EOF (f) THEN EXIT END;
- ⓪(Text.ReadString (f,s);
- ⓪(IF s[0] # ' ' THEN EXIT END;
- ⓪(WHILE (idx <= MaxSearchPaths) AND pathArray[idx].used DO INC (idx) END;
- ⓪(IF idx <= MaxSearchPaths THEN
- ⓪*EatSpaces (s);
- ⓪*IF Compare ('.',s) = equal THEN s:= '' END;
- ⓪*ValidatePath (s);
- ⓪*Assign (s,pathArray[idx].path,err);
- ⓪*Lists.AppendEntry (paths,ADR(pathArray[idx].path),err);
- ⓪*pathArray[idx].used:= TRUE;
- ⓪*INC (idx)
- ⓪(ELSE
- ⓪*alert (NoPathsStr^, '', OkStr^)
- ⓪(END
- ⓪&END;
- ⓪&gotLine:= TRUE;
- ⓪$END setP;
- ⓪"
- ⓪"PROCEDURE is (REF s0:ARRAY OF CHAR): BOOLEAN;
- ⓪$BEGIN
- ⓪&RETURN StrEqual (s0,s)
- ⓪$END is;
- ⓪
- ⓪"PROCEDURE prep (REF in: ARRAY OF CHAR): BOOLEAN;
- ⓪$BEGIN
- ⓪&Split (in,PosLen (' ',in,0),s,arg,strVal);
- ⓪&delSpc (arg);
- ⓪&Upper (s);
- ⓪&RETURN (s[0] # 0C) AND (s[0] # '*')
- ⓪$END prep;
- ⓪
- ⓪"PROCEDURE getLC (VAR l: LONGCARD);
- ⓪$VAR i: CARDINAL;
- ⓪$BEGIN
- ⓪&i:= 0;
- ⓪&l:= StrToLCard (arg, i, strVal);
- ⓪$END getLC;
- ⓪
- ⓪"VAR found, tell: BOOLEAN;
- ⓪&i: CARDINAL;
- ⓪&res : INTEGER;
- ⓪
- ⓪"PROCEDURE unTell;
- ⓪$BEGIN
- ⓪&IF tell THEN TellLoading (endTell, ''); tell := FALSE END;
- ⓪$END unTell;
- ⓪
- ⓪"BEGIN
- ⓪$ShowBee;
- ⓪$tell:= FALSE;
- ⓪$SearchFile (name, StdPaths, fromStart, found, name);
- ⓪$Open (f, name, readSeqTxt);
- ⓪$IF State (f) < 0 THEN
- ⓪&GetStateMsg (State(f), s);
- ⓪&alert (InfStr^, s, OkStr^);
- ⓪$ELSE
- ⓪&gotLine:= FALSE;
- ⓪&cont:= TRUE;
- ⓪&REPEAT
- ⓪
- ⓪(IF NOT gotLine THEN Text.ReadString (f, s) END;
- ⓪(gotLine:= FALSE;
- ⓪(
- ⓪(doIt:= FALSE;
- ⓪(IF prep (s) THEN
- ⓪*IF is ('IF_SHELLSTART') THEN (* IF-Clause *)
- ⓪,IF shellStart THEN
- ⓪.doIt:= prep (arg);
- ⓪,END;
- ⓪*ELSIF is ('IF_EXITCODE') THEN
- ⓪,i:= 0;
- ⓪,IF StrToInt (arg, i, voidO) = exitCode THEN
- ⓪.Copy (arg, i, 200, arg, voidO);
- ⓪.doIt:= prep (arg);
- ⓪,END
- ⓪*ELSE
- ⓪,doIt:= TRUE
- ⓪*END;
- ⓪(END;
- ⓪
- ⓪(IF doIt THEN
- ⓪H(* misc *)
- ⓪*IF is ('WAIT') THEN
- ⓪,alert (arg,'',ContStr^);
- ⓪*ELSIF is ('STACKSIZE') THEN
- ⓪,getLC (DefaultStackSize);
- ⓪,IF DefaultStackSize < 1024L THEN DefaultStackSize:= 1024 END;
- ⓪
- ⓪H(* tools *)
- ⓪*ELSIF is ('DELETETOOLS') THEN
- ⓪,FOR i:= 1 TO MaxTool DO ToolField[i].used:= FALSE END; (* Keine Tools *)
- ⓪*ELSIF is ('TOOL') THEN
- ⓪,setToolName (arg)
- ⓪H(* loader commands *)
- ⓪*ELSIF is ('EXEC') THEN
- ⓪,Split (arg, PosLen (' ', arg, 0), arg, s, strVal);
- ⓪,delSpc (s);
- ⓪,unTell;
- ⓪,Upper (arg);
- ⓪,IF IsMBTFile (arg) THEN
- ⓪.ExecuteBatch (arg, load)
- ⓪,ELSE
- ⓪.call (arg, s, 0, FALSE, TRUE, FALSE);
- ⓪,END;
- ⓪,IF autoCmd # noCmd THEN cont := FALSE END;
- ⓪*ELSIF is ('POSTAMBLE1') THEN
- ⓪,Split (arg,PosLen (' ',arg,0),postAmble1,postArgs1,strVal);
- ⓪,delSpc (postArgs1);
- ⓪,withPost1:= TRUE;
- ⓪*ELSIF is ('POSTAMBLE2') THEN
- ⓪,Split (arg,PosLen (' ',arg,0),postAmble2,postArgs2,strVal);
- ⓪,delSpc (postArgs2);
- ⓪,withPost2:= TRUE;
- ⓪*ELSIF is ('LOAD') THEN
- ⓪,IF load THEN
- ⓪.IF NOT tell THEN TellLoading (initTell, ''); tell := TRUE END;
- ⓪.TellLoading (newTellValue, arg);
- ⓪.LoadModule (arg, StdPaths, callMsg (* dummy *), callMsg,
- ⓪:callRes);
- ⓪,END
- ⓪*ELSIF is ('UNLOAD') THEN
- ⓪,IF load THEN
- ⓪.UnLoadModule (arg, callRes)
- ⓪,END
- ⓪*
- ⓪*ELSIF is ('LINKSTACKSIZE') THEN
- ⓪,getLC (LinkerParm.linkStackSize);
- ⓪*ELSIF is ('NO_OPTIMIZE') THEN
- ⓪,LinkerParm.optimize:= noOptimize
- ⓪*ELSIF is ('NAME_OPTIMIZE') THEN
- ⓪,LinkerParm.optimize:= nameOptimize
- ⓪*ELSIF is ('PART_OPTIMIZE') THEN
- ⓪,LinkerParm.optimize:= partOptimize
- ⓪*ELSIF is ('FULL_OPTIMIZE') THEN
- ⓪,LinkerParm.optimize:= fullOptimize
- ⓪*ELSIF is ('DRIVER') THEN
- ⓪,setLinkName (arg)
- ⓪*ELSIF is ('DELETEDRIVERS') THEN
- ⓪,SysUtil0.ClearVar (LinkerParm.linkList);
- ⓪
- ⓪H(* comp./link/make *)
- ⓪*ELSIF is ('COMPILE') THEN
- ⓪,autoCmd:= noCmd;
- ⓪,unTell;
- ⓪,callComp (arg, FALSE, TRUE, cont)
- ⓪*ELSIF is ('MAKE') THEN
- ⓪,autoCmd:= noCmd;
- ⓪,unTell;
- ⓪,callMake (arg, TRUE, cont)
- ⓪*ELSIF is ('LINK') THEN
- ⓪,autoCmd:= noCmd;
- ⓪,unTell;
- ⓪,callLink (arg)
- ⓪*ELSIF is ('EDIT') THEN
- ⓪,autoCmd:= noCmd;
- ⓪,unTell;
- ⓪,callEdit (arg, FALSE)
- ⓪H(* paths *)
- ⓪*ELSIF is ('SETDIR') THEN
- ⓪,SetCurrentDir (defaultDrv, arg, voidI);
- ⓪*ELSIF is ('SETDRIVE') THEN
- ⓪,SetDefaultDrive (StrToDrive (arg))
- ⓪*ELSIF is ('SETPATH') THEN
- ⓪,SetDefaultPath (arg, voidI)
- ⓪
- ⓪*ELSIF is ('DEFAULTPATH') THEN
- ⓪,setP ( StdPaths );
- ⓪*ELSIF is ('DEFPATH') THEN
- ⓪,setP ( DefPaths );
- ⓪,getFirstPath (DefPaths, DefOutPath);
- ⓪*ELSIF is ('IMPPATH') THEN
- ⓪,setP ( ImpPaths );
- ⓪,getFirstPath (ImpPaths, ImpOutPath);
- ⓪*ELSIF is ('MODPATH') THEN
- ⓪,setP ( ModPaths );
- ⓪,getFirstPath (ModPaths, ModOutPath);
- ⓪*ELSIF is ('SOURCEPATH') THEN
- ⓪,setP ( SrcPaths )
- ⓪*ELSIF is ('DEFOUT') THEN
- ⓪,Assign (arg, DefOutPath, voidO);
- ⓪,ValidatePath (DefOutPath)
- ⓪*ELSIF is ('IMPOUT') THEN
- ⓪,Assign (arg, ImpOutPath, voidO);
- ⓪,ValidatePath (ImpOutPath)
- ⓪*ELSIF is ('MODOUT') THEN
- ⓪,Assign (arg, ModOutPath, voidO);
- ⓪,ValidatePath (ModOutPath)
- ⓪*ELSIF is ('MAINOUTPUTPATH') THEN
- ⓪,Assign (arg, MainOutputPath, voidO);
- ⓪,ValidatePath (MainOutputPath);
- ⓪*END;
- ⓪(
- ⓪(END;
- ⓪(
- ⓪&UNTIL EOF (f) OR NOT cont;
- ⓪&Close (f);
- ⓪
- ⓪&(* getFirstPath-Aufrufe hier weg und oben eingefügt *)
- ⓪
- ⓪$END;
- ⓪$unTell;
- ⓪$ShowArrow;
- ⓪"END ExecuteBatch;
- ⓪
- ⓪ VAR level : CARDINAL;
- ⓪
- ⓪ PROCEDURE envlpProc (start, inChild:BOOLEAN; VAR i:INTEGER);
- ⓪
- ⓪"BEGIN
- ⓪$IF ~inChild THEN
- ⓪&IF start THEN
- ⓪(IF level = 0 THEN
- ⓪*IF shellParm.breakActive THEN voidO:=EnableBreak () END
- ⓪(END;
- ⓪(INC (level);
- ⓪&ELSE
- ⓪(DEC (level);
- ⓪(IF level = 0 THEN
- ⓪*IF shellParm.breakActive THEN DisableBreak END;
- ⓪(END;
- ⓪&END
- ⓪$END;
- ⓪"END envlpProc;
- ⓪"
- ⓪"
- ⓪ VAR oldOpen : InOutBase.OpenProc;
- ⓪(oldClose: InOutBase.ClsProc;
- ⓪
- ⓪ PROCEDURE myOpen (x, y: CARDINAL);
- ⓪
- ⓪"BEGIN
- ⓪$IF NOT callSwitchedToTextMode THEN
- ⓪&HideMouse;
- ⓪&clrscr;
- ⓪&curon;
- ⓪$END;
- ⓪$oldOpen (x, y);
- ⓪"END myOpen;
- ⓪
- ⓪ PROCEDURE myClose;
- ⓪
- ⓪"BEGIN
- ⓪$IF NOT callSwitchedToTextMode THEN
- ⓪&curoff;
- ⓪&ShowMouse
- ⓪$END;
- ⓪$oldClose;
- ⓪"END myClose;
- ⓪
- ⓪
- ⓪ VAR err : BOOLEAN;
- ⓪(wsp : MemArea;
- ⓪(envlpHdl: EnvlpCarrier;
- ⓪(ch : CHAR;
- ⓪(idx : CARDINAL;
- ⓪
- ⓪ BEGIN (* Main of MShell *)
- ⓪
- ⓪"(* ShellMsg - Variablen initialisieren
- ⓪#*)
- ⓪"Active:= TRUE;
- ⓪"
- ⓪"(* Pfadlisten anlegen
- ⓪#*)
- ⓪"Lists.CreateList (StdPaths,err);
- ⓪"Lists.CreateList (DefPaths,err);
- ⓪"Lists.CreateList (ImpPaths,err);
- ⓪"Lists.CreateList (ModPaths,err);
- ⓪"Lists.CreateList (SrcPaths,err);
- ⓪"FOR idx:= 1 TO MaxSearchPaths DO pathArray[idx].used:= FALSE END;
- ⓪
- ⓪"autoCmd:= noCmd;
- ⓪"
- ⓪"shellStart:= TRUE;
- ⓪"
- ⓪"IF InitSS () THEN
- ⓪"
- ⓪$(* Kontrolle gestarteter Prozesse zur Ctrl-C - Aktivierung
- ⓪%*)
- ⓪$SetEnvelope (envlpHdl, envlpProc, wsp);
- ⓪$
- ⓪$(* Link into 'InOutBase' driver procs
- ⓪%*)
- ⓪$oldOpen := InOutBase.OpenWdw;
- ⓪$InOutBase.OpenWdw := myOpen;
- ⓪$oldClose := InOutBase.CloseWdw;
- ⓪$InOutBase.CloseWdw := myClose;
- ⓪$
- ⓪$shellStart:= FALSE;
- ⓪$(*$? UseExtKeys: InstallKbdEvents; *)
- ⓪$TalkWithUser; (* Hauptschleife der Shell *)
- ⓪$(*$? UseExtKeys: DeInstallKbdEvents; *)
- ⓪
- ⓪$IF withPost1 THEN
- ⓪&call (postAmble1, postArgs1, 0L, FALSE, TRUE, FALSE);
- ⓪$END;
- ⓪$IF withPost2 THEN
- ⓪&call (postAmble2, postArgs2, 0L, FALSE, TRUE, FALSE);
- ⓪$END;
- ⓪
- ⓪$InOutBase.OpenWdw := oldOpen;
- ⓪$InOutBase.CloseWdw := oldClose;
- ⓪
- ⓪$(* eigenen Namen löschen, damit GEMINI die Shell nicht nochmal startet *)
- ⓪$IF DoShellWrite & (GEMEnv.GEMVersion () >= $140) THEN
- ⓪&IF NOT multiTOS THEN
- ⓪(AESMisc.ShellWrite (FALSE, AESMisc.graphicPrgm, '', '');
- ⓪&END
- ⓪$END;
- ⓪
- ⓪$ExitSS;
- ⓪
- ⓪"ELSE
- ⓪$TermProcess (fInsufficientMemory)
- ⓪"END;
- ⓪"
- ⓪ END MM2TinyShell.
- ⓪ ə
- (* $000096BA$FFEE34BD$000126F0$000171BA$FFF7016F$FFF7016F$FFF7016F$FFF7016F$FFF7016F$FFEC1D4A$FFF7016F$000001C2$FFF7016F$0001A06C$FFF7016F$FFEC67A7$FFF7016F$00005FE8$FFED6C22$FFF7016F$FFED6C22$00011614$FFF7016F$FFF7016F$FFF64330$00002098$FFE96D50$FFF7016F$FFF7016F$00014F4A$FFF7016F$FFF7016F$FFF7016F$FFF7016F$FFE96809$0001159C$FFEE34BD$FFF7016F$00004278$0000723D$FFF7016F$FFF7016FÇ$000029C4T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00000C82$00002FC6$000029C4$0000A2FA$000001C2$00001493$000001C2$00000781$000001C2$FFDEC118$0000A61B$0000A5CE$0000A5B0$000029C4$FFE18A32$00000C59£Çâ*)
-