home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1987-04-02 | 10.6 KB | 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.