home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
dev
/
obero
/
oberon-a
/
source
/
fpe
/
fpedlg.mod
< prev
next >
Wrap
Text File
|
1994-08-21
|
26KB
|
905 lines
(***************************************************************************
$RCSfile: FPEDlg.mod $
Description: Displays and handles the main dialog for the FPE utility.
Created by: fjc (Frank Copeland)
$Revision: 1.9 $
$Author: fjc $
$Date: 1994/08/08 16:14:57 $
Copyright © 1993-1994, Frank Copeland.
This file is part of FPE.
See FPE.doc for conditions of use and distribution.
Log entries are at the end of the file.
***************************************************************************)
MODULE FPEDlg;
(*
** $C= CaseChk $I= IndexChk $L= LongAdr $N- NilChk
** $P- PortableCode $R= RangeChk $S= StackChk $T= TypeChk
** $V= OvflChk $Z= ZeroVars
**
** Compiler NIL checking is replaced by ASSERTs at the appropriate places.
*)
IMPORT
Errors, E := Exec, EU := ExecUtil, Dos, I := Intuition, ASL,
IU := IntuiUtil, Ev := Events, ARPUtil, ASLUtil, ISup := IntuiSup,
ISU := IntuiSupUtil, ISE := ISupEvents, Str := Strings, Data,
Tpl := FPETpl, SD := StringDialog, TD := ToolDlg, SYS := SYSTEM;
(* ===== Dialog Window ===== *)
CONST
(* Gadget IDs *)
ModuleID = 0;
FilesID = ModuleID + 1;
LastFilesID = ModuleID + Data.NumFiles;
ButtonsID = LastFilesID + 1;
LastButtonsID = LastFilesID + Data.NumTools;
(* Menu data indexes *)
FPEIdx = 0;
AboutItemIdx = 1;
QuitItemIdx = 2;
ProgramIdx = 3;
CreateDirIdx = 4;
OpenItemIdx = 5;
AddModuleItemIdx = 6;
RemoveModuleItemIdx = 7;
SaveItemIdx = 8;
SetupIdx = 9;
LoadItemIdx = 10;
LoadDefaultIdx = 11;
LoadAltIdx = 12;
LoadSelectIdx = 13;
SaveSetupItemIdx = 14;
SaveDefaultIdx = 15;
SaveAltIdx = 16;
SaveSelectIdx = 17;
ButtonsItemIdx = 18;
FirstButtonsSubItemIdx = ButtonsItemIdx + 1;
LastButtonsSubItemIdx = ButtonsItemIdx + Data.NumTools;
FilesItemIdx = LastButtonsSubItemIdx + 1;
FirstFilesSubItemIdx = FilesItemIdx + 1;
LastFilesSubItemIdx = FilesItemIdx + Data.NumFiles;
NumMenus = LastFilesSubItemIdx + 1;
(* Menu IDs *)
FPEID = 0;
AboutItemID = 0;
QuitItemID = 1;
ProgramID = 1;
CreateDirID = 0;
OpenItemID = 1;
AddModuleItemID = 2;
RemoveModuleItemID = 3;
SaveItemID = 4;
SetupID = 2;
LoadItemID = 0;
LoadDefaultID = 0;
LoadAltID = 1;
LoadSelectID = 2;
SaveSetupItemID = 1;
SaveDefaultID = 0;
SaveAltID = 1;
SaveSelectID = 2;
ButtonsItemID = 2;
FilesItemID = 3;
VAR
renderInfo : ISup.RenderInfoPtr;
newWindow : I.NewWindow;
window : I.WindowPtr;
programNameBuffer : ARRAY Data.FileChars + 1 OF CHAR;
template : Tpl.Template;
gadgetList : ISup.GadgetList;
menuData : ARRAY NumMenus + 1 OF ISup.MenuData;
menuList : ISup.MenuList;
CONST
WindowTitle = "FPE 1.6 (26 Jul 1994)";
ScreenTitle = "Frank's Programming Environment";
(* ===== Dialog Handler ===== *)
TYPE
Handler = POINTER TO HandlerRec;
HandlerRec = RECORD (ISE.ISupPortRec) END;
CONST
IDCMPFlags = Tpl.GadgetIDCMPFlags + {I.idcmpCloseWindow, I.idcmpMenuPick};
VAR
setupDir : Data.Path;
setupFile : Data.FileName;
handler : Handler;
(* ===== Miscellaneous ===== *)
CONST
OutOfMemory = "FPE : Out of memory";
(*------------------------------------------------------------------------*)
(* Local procedures *)
PROCEDURE* Cleanup ();
BEGIN (* Cleanup *)
IF menuList # NIL THEN ISup.base.FreeMenu (menuList) END;
IF gadgetList # NIL THEN ISup.base.FreeGadgets (gadgetList) END;
IF renderInfo # NIL THEN ISup.base.FreeRenderInfo (renderInfo) END;
Tpl.Cleanup (template);
END Cleanup;
(*------------------------------------------------------------------------*)
(* ===== Dialog window procedures ===== *)
(*------------------------------------*)
PROCEDURE Init * ();
PROCEDURE InitGadgets ();
VAR index, result : INTEGER;
BEGIN (* InitGadgets *)
index := 0;
WHILE index < Data.NumFiles DO
template.GadgetData.g1 [index].text :=
SYS.ADR (Data.extensions [index]);
INC (index);
END; (* WHILE *)
index := 0;
WHILE index < Data.NumTools DO
template.GadgetData.g2 [index].text :=
SYS.ADR (Data.tools [index].title);
INC (index)
END; (* WHILE *)
template.TextData[1].text := SYS.ADR(programNameBuffer);
renderInfo :=
ISup.base.GetRenderInfo (NIL, Tpl.RenderInfoFlags);
Errors.Assert (renderInfo # NIL, "FPE : failed to get render info");
gadgetList :=
ISup.base.CreateGadgets
(renderInfo, template.GadgetData.g0, 0, 0, NIL);
Errors.Assert (gadgetList # NIL, "FPE : failed to create gadgets");
END InitGadgets;
PROCEDURE InitMenus ();
CONST
On = {}; Off = {ISup.mdDisabled};
VAR index : INTEGER;
BEGIN (* InitMenus *)
menuData [FPEIdx].type := ISup.title;
menuData [FPEIdx].flags := On;
menuData [FPEIdx].name := SYS.ADR("FPE");
menuData [AboutItemIdx].type := ISup.item;
menuData [AboutItemIdx].flags := On;
menuData [AboutItemIdx].name := SYS.ADR("About ...");
menuData [QuitItemIdx].type := ISup.item;
menuData [QuitItemIdx].flags := On;
menuData [QuitItemIdx].name := SYS.ADR("Quit");
menuData [QuitItemIdx].commandKey := SYS.ADR("Q");
menuData [ProgramIdx].type := ISup.title;
menuData [ProgramIdx].flags := On;
menuData [ProgramIdx].name := SYS.ADR("Project");
menuData [CreateDirIdx].type := ISup.item;
menuData [CreateDirIdx].flags := On;
menuData [CreateDirIdx].name := SYS.ADR("Create Directory ...");
menuData [OpenItemIdx].type := ISup.item;
menuData [OpenItemIdx].flags := On;
menuData [OpenItemIdx].name := SYS.ADR("Select Project ...");
menuData [AddModuleItemIdx].type := ISup.item;
menuData [AddModuleItemIdx].flags := On;
menuData [AddModuleItemIdx].name := SYS.ADR("Add Module ...");
menuData [RemoveModuleItemIdx].type := ISup.item;
menuData [RemoveModuleItemIdx].flags := On;
menuData [RemoveModuleItemIdx].name := SYS.ADR("Remove Module ...");
menuData [SaveItemIdx].type := ISup.item;
menuData [SaveItemIdx].flags := On;
menuData [SaveItemIdx].name := SYS.ADR("Save Module List");
menuData [SetupIdx].type := ISup.title;
menuData [SetupIdx].flags := On;
menuData [SetupIdx].name := SYS.ADR("Setup");
menuData [LoadItemIdx].type := ISup.item;
menuData [LoadItemIdx].flags := On;
menuData [LoadItemIdx].name := SYS.ADR("Load Setup");
menuData [LoadDefaultIdx].type := ISup.subItem;
menuData [LoadDefaultIdx].flags := On;
menuData [LoadDefaultIdx].name := SYS.ADR ("Default Setup");
menuData [LoadAltIdx].type := ISup.subItem;
menuData [LoadAltIdx].flags := On;
menuData [LoadAltIdx].name := SYS.ADR ("Alternate Setup");
menuData [LoadSelectIdx].type := ISup.subItem;
menuData [LoadSelectIdx].flags := On;
menuData [LoadSelectIdx].name := SYS.ADR ("Select Setup ...");
menuData [SaveSetupItemIdx].type := ISup.item;
menuData [SaveSetupItemIdx].flags := On;
menuData [SaveSetupItemIdx].name := SYS.ADR("Save Setup");
menuData [SaveDefaultIdx].type := ISup.subItem;
menuData [SaveDefaultIdx].flags := On;
menuData [SaveDefaultIdx].name := SYS.ADR ("Default Setup");
menuData [SaveAltIdx].type := ISup.subItem;
menuData [SaveAltIdx].flags := On;
menuData [SaveAltIdx].name := SYS.ADR ("Alternate Setup");
menuData [SaveSelectIdx].type := ISup.subItem;
menuData [SaveSelectIdx].flags := On;
menuData [SaveSelectIdx].name := SYS.ADR ("Select Setup ...");
menuData [ButtonsItemIdx].type := ISup.item;
menuData [ButtonsItemIdx].flags := On;
menuData [ButtonsItemIdx].name := SYS.ADR("Edit Tool Button");
index := 0;
WHILE index < Data.NumTools DO
menuData [index + FirstButtonsSubItemIdx].type := ISup.subItem;
menuData [index + FirstButtonsSubItemIdx].flags := On;
menuData [index + FirstButtonsSubItemIdx].name := SYS.ADR (Data.tools [index].title);
INC( index );
END; (* WHILE *)
menuData [FilesItemIdx].type := ISup.item;
menuData [FilesItemIdx].flags := On;
menuData [FilesItemIdx].name := SYS.ADR("Edit File Extension");
index := 0;
WHILE index < Data.NumFiles DO
menuData [index + FirstFilesSubItemIdx].type := ISup.subItem;
menuData [index + FirstFilesSubItemIdx].flags := On;
menuData [index + FirstFilesSubItemIdx].name := SYS.ADR (Data.extensions [index]);
INC( index );
END; (* WHILE *)
menuData [NumMenus].type := ISup.dataEnd;
END InitMenus;
PROCEDURE InitWindow ();
BEGIN (* InitWindow *)
window := NIL;
newWindow.leftEdge := Tpl.LeftEdge;
newWindow.topEdge := Tpl.TopEdge;
newWindow.width := Tpl.Width;
newWindow.height := Tpl.Height;
newWindow.blockPen := 1;
newWindow.idcmpFlags := {};
newWindow.flags := Tpl.WindowFlags;
newWindow.title := SYS.ADR(WindowTitle);
newWindow.type := {I.wbenchScreen};
newWindow.minWidth := 80; newWindow.minHeight := 30;
newWindow.maxWidth := 1024; newWindow.maxHeight := 1024;
END InitWindow;
BEGIN (* Init *)
Tpl.Init (template);
SYS.SETCLEANUP (Cleanup);
InitGadgets ();
InitMenus();
InitWindow();
END Init;
(*------------------------------------*)
PROCEDURE KillModuleList ();
CONST
Disable = {ISup.gdDisabled}; NoFlags = {};
VAR ignore : LONGINT;
BEGIN (* KillModuleList *)
ignore := ISup.base.SetGadgetAttributes
(gadgetList, ModuleID, Disable, Disable, ISup.useCurrentValue, 0, NIL);
END KillModuleList;
(*------------------------------------*)
PROCEDURE RefreshModuleList ();
CONST
Disable = {ISup.gdDisabled}; NoFlags = {};
VAR ignore : LONGINT;
BEGIN (* RefreshModuleList *)
IF EU.ListLength (Data.moduleList) = 0 THEN
ignore := ISup.base.SetGadgetAttributes
( gadgetList, ModuleID, Disable, Disable, ISup.useCurrentValue, 0,
NIL);
ELSE
ignore := ISup.base.SetGadgetAttributes
( gadgetList, ModuleID, Disable, NoFlags, ISup.useCurrentValue,
Data.currentModuleNo, SYS.ADR (Data.moduleList));
END
END RefreshModuleList;
(*------------------------------------*)
PROCEDURE Display ();
VAR index, left, top, width, height : INTEGER;
BEGIN (* Display *)
left := window.borderLeft; top := window.borderTop;
width := window.width - left - window.borderRight;
height := window.height - top - window.borderBottom;
ISup.base.ClearWindow (renderInfo, window, left, top, width, height, {});
ISup.base.DisplayGadgets (window, gadgetList);
ISup.base.DisplayTextsPtr
(renderInfo, window, template.TextData, 0, 0, NIL);
ISup.base.DisplayBordersPtr
(renderInfo, window, template.BorderData, 0, 0);
index := 0;
WHILE index < Data.NumFiles DO
ISU.SelectGadget
(gadgetList, FilesID + index, index IN Data.currentFiles);
INC (index)
END; (* WHILE *)
index := 0;
WHILE index < Data.NumTools DO
ISU.DisableGadget
(gadgetList, ButtonsID + index, ~Data.tools [index].isActive);
INC (index);
END; (* WHILE *)
RefreshModuleList ();
END Display;
(*------------------------------------*)
PROCEDURE * Close ();
VAR ignore : I.WindowPtr;
BEGIN (* Close *)
IF gadgetList # NIL THEN ignore := ISup.base.RemoveGadgets (gadgetList) END;
IF menuList # NIL THEN ignore := ISup.base.RemoveMenu (menuList) END;
IF window # NIL THEN ISup.base.CloseWindow (window, E.LFALSE); window := NIL END
END Close;
(*------------------------------------*)
PROCEDURE Open * ();
BEGIN (* Open *)
window :=
ISup.base.OpenWindow (renderInfo, newWindow, Tpl.OpenWindowFlags);
Errors.Assert (window # NIL, "FPE - IOpenWindow() failed");
SYS.SETCLEANUP (Close);
I.base.SetWindowTitles
(window, SYS.ADR (WindowTitle), SYS.ADR (ScreenTitle));
menuList :=
ISup.base.CreateMenuA (renderInfo, window, menuData, NIL, NIL);
Errors.Assert (menuList # NIL, "FPE - ICreateMenu() failed");
ISup.base.AttachMenu (window, menuList);
Display ();
END Open;
(*------------------------------------*)
(* $D- disable copying of open arrays *)
PROCEDURE ShowMessage ( message : ARRAY OF CHAR );
BEGIN (* ShowMessage *)
ISU.DoNotice (window, SYS.ADR("*** FPE Message ***"), message)
END ShowMessage;
(*------------------------------------*)
PROCEDURE RefreshProgramName ();
BEGIN (* RefreshProgramName *)
programNameBuffer := " ";
Str.OverWrite (programNameBuffer, Data.programName, 0);
ISup.base.DisplayTextsPtr
(renderInfo, window, template.TextData, 0, 0, NIL);
END RefreshProgramName;
(*------------------------------------*)
PROCEDURE RefreshWindow ();
CONST Flags = {ISup.cwNormalColor};
BEGIN (* RefreshWindow *)
ISup.base.RefreshGadgets (gadgetList);
ISup.base.DisplayTextsPtr
(renderInfo, window, template.TextData, 0, 0, NIL);
ISup.base.DisplayBordersPtr
(renderInfo, window, template.BorderData, 0, 0);
END RefreshWindow;
(*------------------------------------*)
PROCEDURE ResetGadgets ();
VAR window : I.WindowPtr;
BEGIN (* ResetGadgets *)
window := ISup.base.RemoveGadgets (gadgetList);
ISup.base.FreeGadgets (gadgetList);
gadgetList :=
ISup.base.CreateGadgets
(renderInfo, template.GadgetData.g0, 0, 0, NIL);
Errors.Assert (gadgetList # NIL, "FPE : failed to reset gadgets");
Display ();
END ResetGadgets;
(*------------------------------------------------------------------------*)
(* ===== Dialog handler procedures ===== *)
(*------------------------------------*)
(* $D- disable copying of open arrays *)
PROCEDURE DoLoadProgram (program : ARRAY OF CHAR);
VAR message : ARRAY 60 OF CHAR;
BEGIN (* DoLoadProgram *)
ISup.base.ChangeMousePointerPtr (window, NIL, E.LFALSE);
KillModuleList ();
IF ~Data.LoadProgram (program) THEN
message := "Could not find ";
Str.Append (message, program);
Str.Append (message, ".prg");
ShowMessage (message);
IF program [0] = 0X THEN
IF ~Data.ScanModules () THEN
ShowMessage ("Error scanning for modules");
END; (* IF *)
ELSE
Data.MakeModule (program);
END; (* IF *)
END; (* IF *)
RefreshProgramName ();
RefreshModuleList ();
ISup.base.RestoreMousePointer (window);
END DoLoadProgram;
(*------------------------------------*)
PROCEDURE (handler : Handler) HandleISup
( msg : I.IntuiMessagePtr)
: INTEGER;
VAR gadget : LONGINT; value : LONGINT;
BEGIN (* HandleISup *)
gadget := msg.code; value := SYS.VAL (LONGINT, msg.iAddress);
ISup.base.ReplyMsg (msg);
CASE gadget OF
ModuleID :
Data.currentModule :=
SYS.VAL (Data.ModuleNodePtr, EU.NodeAt (Data.moduleList, value));
Data.currentModuleNo := value
|
FilesID .. LastFilesID :
IF value # 0 THEN
INCL (Data.currentFiles, gadget - FilesID);
ELSE
EXCL (Data.currentFiles, gadget - FilesID);
END
|
ButtonsID .. LastButtonsID :
Data.DoTool (SHORT (gadget) - ButtonsID)
|
ELSE
END; (* CASE gadget *)
RETURN Ev.Continue;
END HandleISup;
(*------------------------------------*)
PROCEDURE* HandleClosewindow
( ip : Ev.IdcmpPort;
msg : I.IntuiMessagePtr )
: INTEGER;
BEGIN (* HandleClosewindow *)
E.base.ReplyMsg (msg);
RETURN Ev.StopAll;
END HandleClosewindow;
(*------------------------------------*)
PROCEDURE* HandleMenuPick
( ip : Ev.IdcmpPort;
msg : I.IntuiMessagePtr )
: INTEGER;
VAR
menuNumber, result : INTEGER; window : I.WindowPtr;
menuChoice : IU.Choice;
(*------------------------------------*)
PROCEDURE RequestFile
( hail : ARRAY OF CHAR;
VAR file, dir : ARRAY OF CHAR )
: BOOLEAN;
(* $D- *)
BEGIN (* RequestFile *)
IF ASL.base # NIL THEN
RETURN ASLUtil.RequestFile (window, hail, file, dir)
ELSE
RETURN ARPUtil.RequestFile (window, hail, file, dir)
END
END RequestFile;
(*------------------------------------*)
PROCEDURE DoAbout ();
VAR ignore : BOOLEAN;
BEGIN (* DoAbout *)
ignore :=
ISup.base.AutoRequest
( window, SYS.ADR("About FPE"),
"FPE 1.6 (26 Jul 1994)\\n"
"Frank's Programming Environment\\n"
"--oOo--\\n"
"Copyright © 1993-1994 Frank Copeland\\n"
"Written using Oberon-A\\n"
"and intuisup.library\\n\\n"
"see FPE.doc for conditions of use",
NIL, SYS.ADR("Continue"), {}, {},
{ ISup.arBackFill, ISup.arMovePointerNeg,
ISup.arDrawRaster, ISup.arTextCenter },
NIL)
END DoAbout;
(*------------------------------------*)
PROCEDURE DoCreateDir ();
VAR
strDlg : SD.StrDlg; dirName : ARRAY 32 OF CHAR;
newDir : Dos.FileLockPtr; msg : ARRAY 60 OF CHAR;
BEGIN (* DoCreateDir *)
NEW (strDlg);
IF strDlg # NIL THEN
SD.InitStrDlg
( strDlg, renderInfo, "Create Directory", "Enter directory name",
31, 31);
dirName := "";
IF SD.Activate (strDlg, window, dirName) THEN
newDir := Dos.base.CreateDir (dirName);
IF newDir # NIL THEN
Dos.base.UnLock (newDir)
ELSE
msg := "Could not create directory : ";
Str.Append (msg, dirName);
ShowMessage (msg);
END
END;
SYS.DISPOSE (strDlg)
ELSE ShowMessage (OutOfMemory)
END
END DoCreateDir;
(*------------------------------------*)
PROCEDURE DoOpen;
VAR tempFile : Data.FileName; tempDir : Data.Path;
BEGIN (* DoOpen *)
tempFile := ""; tempDir := Data.currentPath;
IF RequestFile ("Select a project", tempFile, tempDir)
THEN
Data.ChangeDirectory (tempDir);
DoLoadProgram (tempFile)
END;
END DoOpen;
(*------------------------------------*)
PROCEDURE DoSave ();
VAR msg : ARRAY 60 OF CHAR;
BEGIN (* DoSave *)
ISup.base.ChangeMousePointerPtr (window, NIL, E.LFALSE);
IF ~Data.SaveProgram() THEN
msg := "Could not save ";
Str.Append (msg, Data.programName);
Str.Append (msg, ".prg");
ShowMessage (msg);
END; (* IF *)
ISup.base.RestoreMousePointer (window);
END DoSave;
(*------------------------------------*)
PROCEDURE DoAddModule ();
VAR strDlg : SD.StrDlg; module : Data.FileName;
BEGIN (* DoAddModule *)
NEW (strDlg);
IF strDlg # NIL THEN
SD.InitStrDlg
( strDlg, renderInfo, "Add Module",
"Enter a module name", Data.FileChars, Data.FileChars);
module := "";
IF SD.Activate (strDlg, window, module) THEN
Data.MakeModule (module);
RefreshModuleList ()
END;
SYS.DISPOSE (strDlg)
ELSE
ShowMessage (OutOfMemory)
END
END DoAddModule;
(*------------------------------------*)
PROCEDURE DoRemoveModule ();
BEGIN (* DoRemoveModule *)
IF
ISU.DoRequest
( window, SYS.ADR("Remove the current module?"),
" Are you sure about this? ")
THEN
Data.RemoveModule();
RefreshModuleList ()
END; (* IF *)
END DoRemoveModule;
(*------------------------------------*)
PROCEDURE DoSetupFiles ( file : INTEGER );
VAR strDlg : SD.StrDlg; extension : Data.Extension;
BEGIN (* DoSetupFiles *)
NEW (strDlg);
IF strDlg # NIL THEN
SD.InitStrDlg
( strDlg, renderInfo, "Setup Files", "Enter extension",
Data.ExtensionChars, Data.ExtensionChars);
extension := Data.extensions [file];
IF SD.Activate (strDlg, window, extension) THEN
Data.extensions [file] := extension; ResetGadgets ()
END;
SYS.DISPOSE (strDlg)
ELSE
ShowMessage (OutOfMemory)
END
END DoSetupFiles;
(*------------------------------------*)
PROCEDURE DoSetupButtons (toolNo : INTEGER);
CONST DisableFlag = {ISup.gdDisabled}; NoFlag = {};
VAR ignore : LONGINT; toolDialog : TD.Dialog;
BEGIN (* DoSetupButtons *)
TD.MakeDialog (toolDialog);
TD.Activate (toolDialog, Data.tools [toolNo], window);
IF toolDialog.accepted THEN
ISU.DisableGadget
( gadgetList, ButtonsID + toolNo,
~Data.tools [toolNo].isActive )
END;
TD.FreeDialog (toolDialog);
END DoSetupButtons;
(*------------------------------------*)
PROCEDURE DoSaveSetup ();
VAR tempFile : Data.FileName; tempDir : Data.Path;
BEGIN (* DoSaveSetup *)
tempFile := setupFile; tempDir := setupDir;
IF
RequestFile ("Save setup to ...", tempFile, tempDir)
THEN
setupFile := tempFile; setupDir := tempDir;
Data.SaveSetup (tempDir, tempFile)
END; (* IF *)
END DoSaveSetup;
(*------------------------------------*)
PROCEDURE DoLoadSetup ();
VAR tempFile : Data.FileName; tempDir : Data.Path;
BEGIN (* DoLoadSetup *)
tempFile := setupFile; tempDir := setupDir;
IF
RequestFile ("Load setup from ...", tempFile, tempDir)
THEN
setupFile := tempFile; setupDir := tempDir;
Data.LoadSetup (tempDir, tempFile); ResetGadgets ()
END;
END DoLoadSetup;
BEGIN (* HandleMenuPick *)
result := Ev.Continue;
menuNumber := msg.code;
window := msg.idcmpWindow;
E.base.ReplyMsg (msg);
WHILE menuNumber # I.menuNull DO
IU.GetMenuChoice (menuNumber, window.menuStrip^, menuChoice);
CASE menuChoice.menuChosen OF
FPEID :
CASE menuChoice.itemChosen OF
AboutItemID : DoAbout();
|
QuitItemID : result := Ev.StopAll;
|
END; (* CASE menuChoice.itemChosen *)
|
ProgramID :
CASE menuChoice.itemChosen OF
CreateDirID : DoCreateDir()
|
OpenItemID : DoOpen();
|
AddModuleItemID : DoAddModule();
|
RemoveModuleItemID : DoRemoveModule();
|
SaveItemID : DoSave();
|
END; (* CASE menuChoice.itemChosen *)
|
SetupID :
CASE menuChoice.itemChosen OF
SaveSetupItemID :
CASE menuChoice.subItemChosen OF
SaveDefaultID : Data.SaveDefSetup (TRUE);
|
SaveAltID : Data.SaveDefSetup (FALSE);
|
SaveSelectID : DoSaveSetup ();
|
END; (* CASE menuChoice.subItemChosen *)
|
LoadItemID :
CASE menuChoice.subItemChosen OF
LoadDefaultID :
Data.LoadDefSetup (TRUE); ResetGadgets ()
|
LoadAltID :
Data.LoadDefSetup (FALSE); ResetGadgets ()
|
LoadSelectID : DoLoadSetup ();
|
END; (* CASE menuChoice.subItemChosen *)
|
ButtonsItemID :
DoSetupButtons (menuChoice.subItemChosen)
|
FilesItemID :
DoSetupFiles (menuChoice.subItemChosen)
|
END; (* CASE menuChoice.itemChosen *)
|
END; (* CASE menuChoice.menuChosen *)
menuNumber := menuChoice.pointer.nextSelect;
END; (* WHILE *)
RETURN result;
END HandleMenuPick;
(*------------------------------------*)
PROCEDURE Start * ();
BEGIN (* Start *)
NEW (handler); ASSERT (handler # NIL, 132);
handler.Init();
handler.Handle [I.idcmpCloseWindow] := HandleClosewindow;
handler.Handle [I.idcmpMenuPick] := HandleMenuPick;
setupDir := "FPE:S";
setupFile := "Default.fpe";
I.base.OldModifyIDCMP (window, IDCMPFlags);
Ev.AttachPort (handler, window.userPort);
DoLoadProgram (Data.programName);
Ev.SimpleLoop (handler);
Ev.DetachPort (handler)
END Start;
END FPEDlg.
(***************************************************************************
$Log: FPEDlg.mod $
Revision 1.9 1994/08/08 16:14:57 fjc
Release 1.4
Revision 1.8 1994/06/21 22:09:15 fjc
- Added code to conditionally call asl.library instead of
arp.library.
Revision 1.7 1994/06/17 17:26:27 fjc
- Updated for release
Revision 1.6 1994/06/09 13:36:47 fjc
- Incorporated changes in Amiga interface.
- Bumped version strings.
Revision 1.5 1994/06/04 23:49:52 fjc
- Changed to use new Amiga interface
Revision 1.4 1994/05/19 23:45:35 fjc
- Added "Program-Create Directory" menu item
Revision 1.3 1994/05/12 21:26:09 fjc
- Prepared for release
Revision 1.2 1994/01/24 14:33:33 fjc
Changed to conform with changes in Module Handlers:
Handler procedures now reply to any messages they handle
Modified About requester
Revision 1.1 1994/01/15 17:32:38 fjc
Start of revision control
***************************************************************************)