| 1 | REM Sapphire menu macro library -- © 1994 Straylight |
| 2 | |
| 3 | DEF FNmenudefs_test=0 |
| 4 | |
| 5 | REM --- Support functions --- |
| 6 | |
| 7 | DEF FNmenu__b(o%,b%) |
| 8 | LOCAL m% |
| 9 | IF b%=0 THEN ERROR 1,"Bit mask 0 passed to menuDefs" |
| 10 | m%=0 |
| 11 | WHILE (b% AND 1)=0 |
| 12 | m%+=1 |
| 13 | b%=b%>>1 |
| 14 | ENDWHILE |
| 15 | [ opt 4 |
| 16 | dcd (o%<<5) OR (m%) |
| 17 | ] |
| 18 | =m% |
| 19 | |
| 20 | DEF FNmenu__s(f%) |
| 21 | 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" |
| 22 | !(menu__l+O%-P%)=!(menu__l+O%-P%) OR f% |
| 23 | =0 |
| 24 | |
| 25 | DEF FNmenu__n |
| 26 | [ opt 4 |
| 27 | FNalign |
| 28 | .menu__l |
| 29 | dcd 0 |
| 30 | ] |
| 31 | =0 |
| 32 | |
| 33 | DEF FNmenu__1(f%,a%) |
| 34 | [ opt 4 |
| 35 | FNmenu__s(f%) |
| 36 | dcd a% |
| 37 | ] |
| 38 | =0 |
| 39 | |
| 40 | DEF FNmenu__2(f%,a%,b%) |
| 41 | [ opt 4 |
| 42 | FNmenu__s(f%) |
| 43 | dcd a% |
| 44 | dcd b% |
| 45 | ] |
| 46 | =0 |
| 47 | |
| 48 | DEF FNmenu__ob(f%,o%,b%) |
| 49 | [ opt 4 |
| 50 | FNmenu__s(f%) |
| 51 | FNmenu__b(o%,b%) |
| 52 | ] |
| 53 | =0 |
| 54 | |
| 55 | REM --- Creating menu headers --- |
| 56 | |
| 57 | DEF FNmenu(t$) |
| 58 | [ opt 4 |
| 59 | FNmenu__n |
| 60 | dcb t$+CHR$(0) |
| 61 | FNalign |
| 62 | ] |
| 63 | =0 |
| 64 | |
| 65 | DEF FNmenu_ind(t%) |
| 66 | [ opt 4 |
| 67 | FNmenu__n |
| 68 | FNmenu__s(mFlag_indirect) |
| 69 | dcd t% |
| 70 | ] |
| 71 | =0 |
| 72 | |
| 73 | DEF FNtearoff(t$) |
| 74 | [ opt 4 |
| 75 | FNmenu__n |
| 76 | FNmenu__s(mFlag_tearoff) |
| 77 | dcb t$+CHR$(0) |
| 78 | FNalign |
| 79 | ] |
| 80 | =0 |
| 81 | |
| 82 | DEF FNtearoff_ind(t%) |
| 83 | [ opt 4 |
| 84 | FNmenu__n |
| 85 | FNmenu__s(mFlag_indirect) |
| 86 | FNmenu__s(mFlag_tearoff) |
| 87 | dcd t% |
| 88 | ] |
| 89 | =0 |
| 90 | |
| 91 | REM --- Flags for menus and items --- |
| 92 | |
| 93 | DEF FNmenu_r12Data=FNmenu__s(mFlag_R12) |
| 94 | |
| 95 | DEF FNmenu_makeMe(p%)=FNmenu__1(mFlag_makeMe,p%) |
| 96 | |
| 97 | DEF FNmenu_mHeight(h%)=FNmenu__1(mFlag_maxHeight,h%) |
| 98 | |
| 99 | REM --- Menu items --- |
| 100 | |
| 101 | DEF FNmenu_item(t$) |
| 102 | [ opt 4 |
| 103 | FNmenu__n |
| 104 | dcb t$+CHR$(0) |
| 105 | FNalign |
| 106 | ] |
| 107 | =0 |
| 108 | |
| 109 | DEF FNmenu_itemInd(t%) |
| 110 | [ opt 4 |
| 111 | FNmenu__n |
| 112 | FNmenu__s(mFlag_indirect) |
| 113 | dcd t% |
| 114 | ] |
| 115 | =0 |
| 116 | |
| 117 | DEF FNmenu_shade(o%,b%)=FNmenu__ob(mFlag_shade,o%,b%) |
| 118 | |
| 119 | DEF FNmenu_iShade(o%,b%)=FNmenu__ob(mFlag_invShade,o%,b%) |
| 120 | |
| 121 | DEF FNmenu_switch(o%,b%)=FNmenu__ob(mFlag_switch,o%,b%) |
| 122 | |
| 123 | DEF FNmenu_radio(g%,s%)=FNmenu__2(mFlag_radio,g%,s%) |
| 124 | |
| 125 | DEF FNmenu_sprite(s%,a%) |
| 126 | [ opt 4 |
| 127 | FNmenu__s(mFlag_sprite) |
| 128 | dcd s% |
| 129 | ] |
| 130 | IF a%<>0 THEN [opt 4:dcd a%:] |
| 131 | =0 |
| 132 | |
| 133 | DEF FNmenu_halfSize=FNmenu__s(mFlag_halfSize) |
| 134 | |
| 135 | DEF FNmenu_subWarn=FNmenu__s(mFlag_subWarn) |
| 136 | |
| 137 | DEF FNmenu_subMenu(s%,h%)=FNmenu__2(mFlag_subMenu,s%,h%) |
| 138 | |
| 139 | DEF FNmenu_noWarn=FNmenu__s(mFlag_noWarn) |
| 140 | |
| 141 | DEF FNmenu_ruleOff=FNmenu__s(mFlag_ruleOff) |
| 142 | |
| 143 | DEF FNmenu_end |
| 144 | [ opt o |
| 145 | dcd mFlag_end |
| 146 | ] |
| 147 | =0 |