home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
026.lha
/
HP-10C
/
menus.mod
< prev
Wrap
Text File
|
1987-04-02
|
11KB
|
352 lines
IMPLEMENTATION MODULE CalcMenus;
(** ------------------------------------------------------------------
------------------------------------------------------------------ **)
(* VERSION FOR COMMODORE AMIGA
Version : 0.00a 04-Jul-86 DJP
*)
FROM CalcDisplay IMPORT display, displayType, NDecDigits, NSciDigits;
FROM Intuition IMPORT IntuitionText,
MenuItem, MenuItemPtr, ItemFlags, ItemFlagSet,
Menu, MenuPtr, MenuFlags, MenuFlagSet,
NoMenu, NoItem, NoSub, MenuNULL,
WindowPtr,
IDCMPFlagSet, IDCMPFlags;
FROM IntuiUtils IMPORT ItemNum, MenuNum, SubNum;
FROM Menus IMPORT ItemAddress;
FROM Requesters IMPORT AutoRequest;
FROM Storage IMPORT ALLOCATE;
FROM SYSTEM IMPORT ADDRESS, ADR, BYTE, NULL;
(* Mostly for InitMenus *)
TYPE NAME = ARRAY[0..15] OF CHAR;
VAR SubItems : ARRAY[0..15] OF MenuItem;
Items : ARRAY[0..6] OF MenuItem;
Titles : ARRAY[0..1] OF Menu;
SubName : ARRAY[0..15] OF NAME;
ItemName : ARRAY[0..6] OF NAME;
TName : ARRAY[0..1] OF NAME;
SubText : ARRAY[0..15] OF IntuitionText;
Itemtext : ARRAY[0..6] OF IntuitionText;
PROCEDURE MenuHandle( menuNumber : CARDINAL ; wp : WindowPtr ) : BOOLEAN;
VAR I : INTEGER;
ItemA : MenuItemPtr;
NMenu : CARDINAL;
NItem : CARDINAL;
NSubI : CARDINAL;
PROCEDURE UnCheck;
VAR I : INTEGER;
BEGIN
(* Un-check all menu and submenu items for menu 1 *)
FOR I := 2 TO 6 DO
Items[I].Flags := ItemFlagSet{ItemText, ItemEnabled, It6, CheckIt};
END;
FOR I := 0 TO 15 DO
SubItems[I].Flags := ItemFlagSet{ItemText, ItemEnabled, It6, CheckIt};
END;
END UnCheck;
PROCEDURE AUTOREQUEST;
TYPE LINE = ARRAY[0..49] OF CHAR;
VAR
I : CARDINAL;
NMenu : CARDINAL;
NItem : CARDINAL;
NSubI : CARDINAL;
Line1 : ARRAY[0..49] OF CHAR;
Line2 : ARRAY[0..49] OF CHAR;
Line3 : ARRAY[0..49] OF CHAR;
Line4 : ARRAY[0..49] OF CHAR;
Line5 : ARRAY[0..49] OF CHAR;
Line6 : ARRAY[0..49] OF CHAR;
Line7 : ARRAY[0..49] OF CHAR;
NoText : ARRAY[0..4] OF CHAR;
YesText : ARRAY[0..4] OF CHAR;
AutoBodyText : ARRAY[0..7] OF IntuitionText;
AutoYesText : IntuitionText;
AutoNoText : IntuitionText;
AutoYesFlags : IDCMPFlagSet;
AutoNoFlags : IDCMPFlagSet;
OK : BOOLEAN;
Top : CARDINAL;
BEGIN
(* Create AutoRequester *)
YesText := " OK ";
WITH AutoYesText DO
FrontPen := BYTE(2); BackPen := BYTE(0);
DrawMode := BYTE(0);
LeftEdge := 6; TopEdge := 3;
ITextFont := NULL; NextText := NULL;
IText := ADR( YesText );
END;
NoText := "FINE";
WITH AutoNoText DO
FrontPen := BYTE(2); BackPen := BYTE(0);
DrawMode := BYTE(0);
LeftEdge := 6; TopEdge := 3;
ITextFont := NULL; NextText := NULL;
IText := ADR( NoText );
END;
Line1 := "HP-10C (sort of) ";
Line2 := " Written by Duncan Prindle ";
Line3 := " using TDI Modula2 ";
Line4 := " Send comments to; ";
Line5 := " BITNET.DUNCAN@SLACVM ";
Line6 := " For more information see ";
Line7 := " HP-10C.DOC ";
FOR I := 0 TO 6 DO
Top := 10 * (I + 1);
WITH AutoBodyText[I] DO
FrontPen := BYTE(2); BackPen := BYTE(0);
DrawMode := BYTE(0);
LeftEdge := 10; TopEdge := Top;
ITextFont := NULL; NextText := NULL;
END;
END;
FOR I := 0 TO 5 DO
WITH AutoBodyText[I] DO
NextText := ADR( AutoBodyText[I+1] );
END;
END;
AutoBodyText[0].IText := ADR( Line1 );
AutoBodyText[1].IText := ADR( Line2 );
AutoBodyText[2].IText := ADR( Line3 );
AutoBodyText[3].IText := ADR( Line4 );
AutoBodyText[4].IText := ADR( Line5 );
AutoBodyText[5].IText := ADR( Line6 );
AutoBodyText[6].IText := ADR( Line7 );
AutoYesFlags := IDCMPFlagSet{};
AutoNoFlags := IDCMPFlagSet{};
OK := AutoRequest( wp^, AutoBodyText[0], AutoYesText,
AutoNoText, AutoYesFlags, AutoNoFlags, 300, 130);
END AUTOREQUEST;
BEGIN
WHILE menuNumber # MenuNULL DO
(* Decode Menu number *)
NMenu := MenuNum( menuNumber );
NItem := ItemNum( menuNumber );
NSubI := SubNum( menuNumber );
(* Now Do something *)
IF NMenu = 0 THEN
(* Menu 0. The items are:
NItem := 0 => "ABOUT"
NItem := 1 => "QUIT" *)
IF NItem = 0 THEN AUTOREQUEST;
ELSIF NItem = 1 THEN RETURN FALSE;
END;
ELSIF NMenu = 1 THEN
(* Menu 1 is the Display
NItem := 0 => "BINARY"
NItem := 1 => "OCTAL"
NItem := 2 => "HEX"
NItem := 3 => "DECIMAL"
NItem := 4 => "SCIENTIFIC"
DECIMAL and SCIENTIFIC have subitems. *)
IF NItem = 0 THEN display := BINARY; UnCheck;
ELSIF NItem = 1 THEN display := OCTAL; UnCheck;
ELSIF NItem = 2 THEN display := HEX; UnCheck;
ELSIF NItem = 3 THEN display := DECIMAL; UnCheck;
NDecDigits := NSubI + 1;
SubItems[NSubI].Flags :=
ItemFlagSet{ItemText, ItemEnabled,
It6, CheckIt, Checked};
ELSIF NItem = 4 THEN display := SCIENTIFIC; UnCheck;
NSciDigits := NSubI + 1;
NSciDigits := - NSciDigits;
SubItems[NSubI+8].Flags :=
ItemFlagSet{ItemText, ItemEnabled,
It6, CheckIt, Checked};
END;
Items[NItem+2].Flags := ItemFlagSet{ItemText, ItemEnabled,
It6, CheckIt, Checked};
END;
(* Finished with current menu item. Get next one and handle it. *)
ItemA := ItemAddress( Titles[0], menuNumber );
menuNumber := ItemA^.NextSelect;
END;
RETURN TRUE;
END MenuHandle;
PROCEDURE InitMenus( ): MenuPtr;
VAR I : CARDINAL;
BEGIN
SubName[ 0] := " 1";
SubName[ 1] := " 2";
SubName[ 2] := " 3";
SubName[ 3] := " 4";
SubName[ 4] := " 5";
SubName[ 5] := " 6";
SubName[ 6] := " 7";
SubName[ 7] := " 8";
SubName[ 8] := " 1";
SubName[ 9] := " 2";
SubName[10] := " 3";
SubName[11] := " 4";
SubName[12] := " 5";
SubName[13] := " 6";
SubName[14] := " 7";
SubName[15] := " 8";
FOR I := 0 TO 15 DO
WITH SubText[I] DO
FrontPen := BYTE(2); BackPen := BYTE(0); DrawMode := BYTE(0);
LeftEdge := 0; TopEdge := 1;
ITextFont := NULL;
IText := ADR( SubName[I] );
NextText := NULL;
END;
END;
ItemName[0] := " ABOUT";
ItemName[1] := " QUIT";
ItemName[2] := " BINARY";
ItemName[3] := " OCTAL";
ItemName[4] := " HEX";
ItemName[5] := " DECIMAL";
ItemName[6] := " SCIENTIFIC";
FOR I := 0 TO 6 DO
WITH Itemtext[I] DO
FrontPen := BYTE(2); BackPen := BYTE(0); DrawMode := BYTE(0);
LeftEdge := 0; TopEdge := 1;
ITextFont := NULL;
IText := ADR( ItemName[I] );
NextText := NULL;
END;
END;
FOR I := 0 TO 15 DO
WITH SubItems[I] DO
IF I < 15
THEN NextItem := ADR( SubItems[I+1] );
ELSE NextItem := NULL;
END;
IF I < 8
THEN TopEdge := 10*I;
ELSE TopEdge := 10*(I-8);
END;
LeftEdge := 108; Width := 48; Height := 10;
Flags := ItemFlagSet{ItemText, ItemEnabled, CheckIt, It6};
ItemFill := ADR( SubText[I] );
SelectFill := NULL;
SubItem := NULL;
END;
END;
SubItems[ 0].MutualExclude := 254;
SubItems[ 1].MutualExclude := 253;
SubItems[ 2].MutualExclude := 251;
SubItems[ 2].Flags := ItemFlagSet{ItemText, ItemEnabled, It6,
CheckIt, Checked};
SubItems[ 3].MutualExclude := 247;
SubItems[ 4].MutualExclude := 239;
SubItems[ 5].MutualExclude := 223;
SubItems[ 6].MutualExclude := 191;
SubItems[ 7].MutualExclude := 127;
SubItems[ 7].NextItem := NULL;
SubItems[ 8].MutualExclude := 254;
SubItems[ 9].MutualExclude := 253;
SubItems[10].MutualExclude := 251;
SubItems[11].MutualExclude := 247;
SubItems[12].MutualExclude := 239;
SubItems[13].MutualExclude := 223;
SubItems[14].MutualExclude := 191;
SubItems[15].MutualExclude := 127;
FOR I := 0 TO 6 DO
WITH Items[I] DO
IF I < 6
THEN NextItem := ADR( Items[I+1] );
ELSE NextItem := NULL;
END;
IF I < 2
THEN TopEdge := 10*I;
Width := 64;
ELSE TopEdge := 10*(I-2);
Width := 120;
END;
LeftEdge := 0; Height := 10;
Flags := ItemFlagSet{ItemText, ItemEnabled, CheckIt, It6};
MutualExclude := 0;
ItemFill := ADR( Itemtext[I] );
SelectFill := NULL;
SubItem := NULL;
END;
END;
Items[0].Flags := ItemFlagSet{ItemText, ItemEnabled, It6};
Items[1].NextItem := NULL;
Items[1].Flags := ItemFlagSet{ItemText, ItemEnabled, It6};
Items[2].MutualExclude := 30;
Items[3].MutualExclude := 29;
Items[4].MutualExclude := 27;
Items[5].MutualExclude := 23;
Items[5].Flags := ItemFlagSet{ItemText, ItemEnabled, It6,
CheckIt, Checked};
Items[5].SubItem := ADR( SubItems[0] );
Items[6].MutualExclude := 15;
Items[6].SubItem := ADR( SubItems[8] );
TName[0] := " HP-10C";
TName[1] := " DISPLAY";
WITH Titles[0] DO
NextMenu := ADR( Titles[1] );
LeftEdge := 3; TopEdge := 0; Width := 70; Height := 0;
Flags := MenuFlagSet{MenuEnabled};
MenuName := ADR( TName[0] );
FirstItem := ADR( Items[0] );
END;
WITH Titles[1] DO
NextMenu := NULL;
LeftEdge := 72; TopEdge := 0; Width := 78; Height := 0;
Flags := MenuFlagSet{MenuEnabled};
MenuName := ADR( TName[1] );
FirstItem := ADR( Items[2] );
END;
RETURN ADR( Titles[0] );
END InitMenus;
END CalcMenus.