Rem ************************************ Rem * AMOS Example 16.11 * Rem * Menu Called * Rem * (c) Mandarin / Jawx 1990 * Rem ************************************ Rem Curs Off : Flash Off Shift Down 1,3,15,1 Rem Define menu strings Rem Reserve ten bytes of storage and call TRY1 M1$="(reserve 10:proc TRY1)" Rem Reserve four bytes of storage and call TRY2 M2$="(reserve 4:proc TRY2)" Rem Create menus For L1=1 To 4 Rem Title is drawn using procedure TRY1 Menu$(L1)=M1$ For L2=1 To 2 Rem First level menu is drawn by TRY2 Menu$(L1,L2)=M2$ Rem Call level one fify times a second Menu Called(L1,L2) For L3=1 To 3 Rem Set up third level menu Menu$(L1,L2,L3)=M1$ Next Next Next Menu On Wait Key End Rem Menu procedures Procedure TRY1 Rem Draw a bar with pattern N Rem Menu procedures may not use parameters, so N is shared Shared N Rem If menu item has fully opened If Dreg(2) Rem Get X,Y coordinates of left coorner of item X=Dreg(0) : Y=Dreg(1) : V=Areg(1) N=Deek(V) : Add N,1,0 To 25 : Doke V,N Set Pattern N Bar X,Y To X+64,Y+16 Text X,Y+8,Str$(Deek(V)) End If Dreg(0)=65 Dreg(1)=17 End Proc Rem Menu procedure 2 Procedure TRY2 Rem Draws a fancy moire pattern Rem set dimensions of box TX=64 : TY=64 Rem Read values from data zone N=Deek(Areg(1)) : C=Deek(Areg(1)+2) Rem Check if menu item has been opened If Dreg(4) N=0 : C=3 End If Rem Draw pattern Rem Get coordinates of top left hand corner of box X1=Dreg(0) : Y1=Dreg(1) Rem Get coords of bottom right corner X2=X1+TX : Y2=Y1+TY Rem Get middle of box MX=X1+TX/2 : MY=Y1+TY/2 Rem If box is displayed on the screen If Dreg(2) Rem Draw pattern If N=0 Set Pattern 0 Rem If the menu is highlighted If Dreg(3) Ink 0 Else Ink 2 End If Bar X1,Y1 To X2,Y2 End If Rem Moire pattern Ink C Draw X1+N,Y1 To MX,MY Draw X2,Y1+N To MX,MY Draw X2-N,Y2 To MX,MY Draw X1,Y2-N To MX,MY Add N,1,0 To TX : Doke Areg(1),N Add C,1,3 To 15 : Doke Areg(1)+2,C End If Rem Save bottom right coords of box Dreg(0)=TX+1 Dreg(1)=TY+1 End Proc