REM Sapphire menu macro library -- © 1994 Straylight DEF FNmenudefs_test=0 REM --- Support functions --- DEF FNmenu__b(o%,b%) LOCAL m% IF b%=0 THEN ERROR 1,"Bit mask 0 passed to menuDefs" m%=0 WHILE (b% AND 1)=0 m%+=1 b%=b%>>1 ENDWHILE [ opt 4 dcd (o%<<5) OR (m%) ] =m% DEF FNmenu__s(f%) IF (!(menu__l+O%-P%) AND &FFFF) >= (f% AND &FFFF) AND (f% AND &FFFF)<>0 THEN ERROR 0,"Flags built in wrong order in menuDefs" !(menu__l+O%-P%)=!(menu__l+O%-P%) OR f% =0 DEF FNmenu__n [ opt 4 FNalign .menu__l dcd 0 ] =0 DEF FNmenu__1(f%,a%) [ opt 4 FNmenu__s(f%) dcd a% ] =0 DEF FNmenu__2(f%,a%,b%) [ opt 4 FNmenu__s(f%) dcd a% dcd b% ] =0 DEF FNmenu__ob(f%,o%,b%) [ opt 4 FNmenu__s(f%) FNmenu__b(o%,b%) ] =0 REM --- Creating menu headers --- DEF FNmenu(t$) [ opt 4 FNmenu__n dcb t$+CHR$(0) FNalign ] =0 DEF FNmenu_ind(t%) [ opt 4 FNmenu__n FNmenu__s(mFlag_indirect) dcd t% ] =0 DEF FNtearoff(t$) [ opt 4 FNmenu__n FNmenu__s(mFlag_tearoff) dcb t$+CHR$(0) FNalign ] =0 DEF FNtearoff_ind(t%) [ opt 4 FNmenu__n FNmenu__s(mFlag_indirect) FNmenu__s(mFlag_tearoff) dcd t% ] =0 REM --- Flags for menus and items --- DEF FNmenu_r12Data=FNmenu__s(mFlag_R12) DEF FNmenu_makeMe(p%)=FNmenu__1(mFlag_makeMe,p%) DEF FNmenu_mHeight(h%)=FNmenu__1(mFlag_maxHeight,h%) REM --- Menu items --- DEF FNmenu_item(t$) [ opt 4 FNmenu__n dcb t$+CHR$(0) FNalign ] =0 DEF FNmenu_itemInd(t%) [ opt 4 FNmenu__n FNmenu__s(mFlag_indirect) dcd t% ] =0 DEF FNmenu_shade(o%,b%)=FNmenu__ob(mFlag_shade,o%,b%) DEF FNmenu_iShade(o%,b%)=FNmenu__ob(mFlag_invShade,o%,b%) DEF FNmenu_switch(o%,b%)=FNmenu__ob(mFlag_switch,o%,b%) DEF FNmenu_radio(g%,s%)=FNmenu__2(mFlag_radio,g%,s%) DEF FNmenu_sprite(s%,a%) [ opt 4 FNmenu__s(mFlag_sprite) dcd s% ] IF a%<>0 THEN [opt 4:dcd a%:] =0 DEF FNmenu_halfSize=FNmenu__s(mFlag_halfSize) DEF FNmenu_subWarn=FNmenu__s(mFlag_subWarn) DEF FNmenu_subMenu(s%,h%)=FNmenu__2(mFlag_subMenu,s%,h%) DEF FNmenu_noWarn=FNmenu__s(mFlag_noWarn) DEF FNmenu_ruleOff=FNmenu__s(mFlag_ruleOff) DEF FNmenu_end [ opt o dcd mFlag_end ] =0