Create readable text `.bas' for each tokenized BASIC `,ffb' file.
[ssr] / StraySrc / Libraries / Sapphire / bsh / menuDefs.bas
diff --git a/StraySrc/Libraries/Sapphire/bsh/menuDefs.bas b/StraySrc/Libraries/Sapphire/bsh/menuDefs.bas
new file mode 100644 (file)
index 0000000..a20283e
--- /dev/null
@@ -0,0 +1,147 @@
+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