!  Amiga Menu routines
!
!  a True BASIC, Inc. product
!
!  Copyright (c) 1986 by True BASIC, Inc.
!  All rights reserved.
!
!  This library requires routines from amiga*, and the native-code menu 
!  support routine s_menu.
!

EXTERNAL

SUB AMenu_set(menu$(,))

    WHEN exception in
         CALL s_menu(0,0,0,0,result,"")     ! take menu from True BASIC
         LET barleft = 10         ! current left coord in menu bar
         LET menus = Ubound(menu$,1)   ! total number of menus
         LET items = Ubound(menu$,2)   ! max number of items per menu

         FOR menunum = 1 to menus

             LET header$ = menu$(menunum,0)      ! get header text
             LET x = 10*len(header$)+10     ! get width of this
             CALL s_menu(1,barleft,x,0,result,header$)     ! add new menu
             IF result <> 0 then CAUSE EXCEPTION 5000
             LET barleft = barleft+x   ! remember new left coord

             LET sawcom = 0
             FOR itemnum = 1 to items
                 LET item$ = menu$(menunum,itemnum)   ! get item text
                 CALL splitcom(item$,com)   ! split off command char if any
                 IF com <> 0 then LET sawcom = 1      ! remember whether any command chars
                 LET x = max(len(item$)*10+10,x)      ! remember longest
             NEXT itemnum
             IF sawcom<>0 then LET x = x + 40    ! allow room for command char

             LET menutop = 0
             FOR itemnum = 1 to items
                 LET item$ = menu$(menunum,itemnum)   ! get item text
                 IF item$ <> "" then
                    CALL splitcom(item$,com)     ! split off command char if any
                    CALL s_menu(2,menutop,x,com,result,item$)   ! add new item
                 END IF
                 IF result <> 0 then CAUSE EXCEPTION 5000
                 LET menutop = menutop+10
             NEXT itemnum

         NEXT menunum             ! end of menu, on to the next

         CALL s_menu(3,0,0,0,result,"")     ! install our menu list
    USE
         CALL AMenu_end
         CAUSE EXCEPTION extype,extext$
    END WHEN

    SUB splitcom(s$,com)
        LET z = len(s$)
        IF s$[z-1:z-1] = "@" then
           LET com = Ord(s$[z:z])
           LET s$ = s$[1:z-2]
        ELSE
           LET com = 0
        END IF
    END SUB

END SUB

SUB AMenu_get(menu,item)
    CALL s_menu(4,menu,item,0,result,"")
END SUB

SUB AMenu_enable(menu,item)
    CALL s_menu(5,menu,item,0,result,"")
END SUB

SUB AMenu_disable(menu,item)
    CALL s_menu(6,menu,item,0,result,"")
END SUB

SUB AMenu_end
    CALL s_menu(7,0,0,0,result,"")
END SUB
