home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / menus / !Menus / !Help next >
Encoding:
Text File  |  1992-05-01  |  14.3 KB  |  362 lines

  1.                        ARMageddon Software presents
  2.                        -----!Menus and MenuMod-----
  3.                             ------------------
  4.  
  5. WARNING!!
  6. ---------
  7.      This document expects you know how to program the WIMP and
  8. basically how it works. If you don't then refer to either the RISC-OS
  9. Programmers Reference Manual (volume 3) or the hundreds of magazine
  10. articles that have been published on the subject.
  11.  
  12. The programs
  13. ------------
  14.      These two programs provide an easy and effective way to produce
  15. and manipulate standard WIMP menus in your own WIMP programs. The menu
  16. structures can be easily designed using the multi-tasking application,
  17. !Menus. In much the same way that !FormEd produces 'Templates' !Menus
  18. produces files that contain all relevant information for the menus,
  19. these include indirect data and validation strings. MenuMod is a
  20. relocatable module which contains several SWI's, these allow the
  21. programmer to control the menus and change their state. This includes
  22. shading items, ticking items, changing the item's colours, changing
  23. the items text, etc. Also included with the programs are two BASIC
  24. freebies called !ListMenus and !ListTemp. All four programs will be
  25. explained after this short commercial break....
  26.  
  27.      These programs are not public domain. If you find a use for any
  28. part of this software you should register your copy with me at the
  29. address at the end of this file. The registration fee is £3 if you use
  30. this software for non-commercial applications. If you will charge for
  31. your programs the registration fee is doubled at £6
  32.  
  33.      You must admit these prices are not high and if enough people
  34. register it will:-
  35.  
  36.        a) Earn me a bit of money.
  37.        b) Give me the incentive to write more CHEAP software and to
  38.           improve these programs.
  39.        c) Allow you to distribute the MenuMod module with your software 
  40.           (providing you payed the right fee of course)
  41.  
  42.      It will also allow you to moan about the software with some hope
  43. of me acting on it. Please report any bugs that can be repeated to me
  44. stating how and when the bug occurred. Also if there are any features
  45. you would like to see added to these programs then tell me. I can be
  46. contacted at the addresses at the end of this file. You are free to
  47. pass copies of this software, with ALL accompanying files, among your
  48. friends and enemies, but they should register their copies as well.
  49. ARMageddon software (ie. moi!) retain copyright on all these files. NO
  50. part of this software, or its files, should be altered (ie. no
  51. sneakily changing the authors name and address!)
  52.  
  53. MenuMod - Technical details
  54. ---------------------------
  55.  
  56. -Data
  57.      MenuMod actually uses data tables identical to those used by SWI
  58. "Wimp_CreateMenu" so no extra conversion is needed you simply pass the
  59. address of the menu structure to the WIMP. As menu files contain more
  60. than one menu finding the address is a bit difficult so SWI's have
  61. been incorporated to calculate them.
  62.  
  63. -Accessing menu items
  64.      Menu items can be accessed in two ways :-
  65.  
  66. -Menu strings
  67.      These consist of a series of zero terminated strings. The entire
  68. string is similar to that returned by SWI "Wimp_DecodeMenu" ie.
  69. "Display.Small icons" for a typical filer menu selection. The only
  70. differences are that the initial menu title is placed before the
  71. selection string ie. the above example would become
  72. "Filer.Display.Small icons" also the dots are replaced with zero
  73. bytes. After all the selection strings an extra zero byte is added
  74. signifying the end.
  75.  
  76. -Menu lists
  77.      These are standard lists of menu selections as returned by SWI
  78. "Wimp_Poll" ie. a series of words signifying the selection path
  79. terminated by a -1. Again though the menu number (with 0 being the
  80. first in the file) is placed before the list so the above selection
  81. would become 0,0,1,-1 each number would be a word long and the 'Filer'
  82. menu would have to be the first in the file.
  83.  
  84. -MenuMod SWI's
  85.      All but one of the SWI's are entered with R0 pointing to the base
  86. of the menu file, this is the address where the file is loaded. On
  87. exit, all registers, unless otherwise specified, are preserved. When
  88. you are told R1 should point to a menu list/string you can use either,
  89. MenuMod detects which one you are using (It does so by checking the
  90. first word in the string/list, if its less than 256 then it's a list
  91. otherwise its a string. Incidentally strings don't have to be word
  92. aligned)
  93.  
  94. SWI "Menu_Calculate"
  95.  
  96.      This is used to recalculate and reallocate all indirect and
  97. validation strings. It also calculates submenu addresses. It is
  98. usually called immediately after loading the menu file.
  99.  
  100. SWI "Menu_Validate"
  101.  
  102.      This is called when sub-window handles have been calculated and
  103. stored with SWI "Menu_SetSubHandle". It checks to ensure that all
  104. sub-window handles have been defined.
  105.  
  106. SWI "Menu_ListToAddress"
  107. Entry
  108.      R1=Menu list
  109. Exit
  110.      R2=Address of the item
  111.  
  112.      This call returns the address of the menu item specified in the
  113. menu list given. If the list contains only a menu number (ie. only the
  114. first word contains data) the call returns the address of the entire
  115. menu structure. This can then be used by SWI "Wimp_CreateMenu" to open
  116. that menu.
  117.     
  118. SWI "Menu_StringToAddress"
  119. Entry
  120.      R1=Menu string
  121. Exit 
  122.      R2=Address of menu item
  123.  
  124.      This is similar to the previous SWI except it uses menu strings.
  125. Again if only one string is passed (ie. a menu title) it returns the
  126. address of that menu
  127.  
  128. SWI "Menu_Read"
  129. Entry
  130.      R1=Menu string/list
  131.      R2=offset to read from
  132. Exit
  133.      R3=Value read
  134.  
  135.      This allows you to read the data at an item or menu directly. The
  136. offset is not checked so you must know where you want to load from.
  137. The base address is calculated from the data at R1, so it could point
  138. to an item or a menu.
  139.  
  140. SWI "Menu_Write"
  141. Entry
  142.      R1=Menu string/list
  143.      R2=Offset to write to
  144.      R3=Value to write
  145.  
  146.      This is used for writing data to items or menus. You must know
  147. where you are storing the data as it could corrupt the menu data.
  148.  
  149.      The following calls do not check if you are accessing a menu or
  150. an item though they should only be used on items
  151.  
  152. SWI "Menu_Tick"
  153. Entry
  154.      R1=Menu string/list
  155.      R2=State
  156.  
  157.      This call allows you to change the state of an items tick icon.
  158. The state is 0 for no tick and non-0 for a tick.
  159.  
  160. SWI "Menu_Shade"
  161. Entry
  162.      R1=Menu string/list
  163.      R2=State
  164.  
  165.      This sets the shade flag. The state is 0 for no shade and non-0
  166. to shade an item.
  167.  
  168. SWI "Menu_GetIndirect"
  169. Entry
  170.      R1=Menu string/list
  171.      R2=Item to read from
  172. Exit
  173.      R3-R5=Indirect data (3 words)
  174.  
  175.      This call finds the addresses of the indirect data. As the
  176. commonest use of this call is for finding the address of a writable
  177. item, it uses a slightly different method of access items. Most
  178. writable items will be blank when the menu is defined and you can't
  179. use a blank in the menu string (a blank string would be classed as a
  180. double zero byte, or the end). To get around this you only specify the
  181. menu where the item is in the menu string/list, so if you were
  182. accessing the input mode number option from the palette you would pass
  183. either 'Mode' or the menu number in the buffer at R1. You then specify
  184. the item you want to read from in R2, in this example this would be 3
  185. (item 4 counted from 0). This value could be replaced with -1, the SWI
  186. will recognises -1 as meaning 'the last item in the menu'.
  187.  
  188.      On exit R3 is the pointer to the indirect string, R4 is the
  189. pointer to the validation string (-1 for none), and R5 is the length
  190. of the indirect string. These are standard pointers. R3 is probably
  191. the most useful as it would point to the data of a writable item.
  192. Though it could be used to store items like the "File 'xxxxxxx'" item
  193. in the Filer menu.
  194.  
  195. SWI "Menu_SetSubHandle"
  196. Entry
  197.      R1=Menu string/list
  198.      R2=Sub window handle
  199.  
  200.      This call sets up sub window (or dialog box) handles. It returns
  201. an error if the item wasn't defined as a sub window.
  202.  
  203.      The last call is used internally though I thought it might be
  204. useful for other things.
  205.  
  206. SWI "Menu_StringCompare"
  207. Entry
  208.      R0=First string
  209.      R1=Second string
  210.      R2=Terminating character
  211.      R3=Maximum number of characters to compare before returning 'equals'
  212. Exit
  213.      R0 & R1 Are updated. They will point to after the terminators or
  214. after the first difference, depending on the outcome.
  215.      Z=1 for 'equals',Z=0 for 'not equals'
  216.  
  217.      This compares the two strings specified. The comparison is case
  218. sensitive. If R2 is zero on entry then the the call will accept any
  219. control code as a terminator. The call sets the flags so that NE/EQ
  220. suffixes can be used in machine code (BASIC programmers can ignore
  221. that last bit!)
  222.  
  223. -Menus.
  224.      If you didn't understand the last bit I don't blame you. Have a
  225. look at the BASIC file $.!Menus.!RunImage to get a better idea of how
  226. to use the calls. In the program there's a function FNms(m$) this call
  227. can be used for generating menu strings, an example could be (in
  228. BASIC)
  229.  
  230.      SYS "Menu_Tick",Menus%,FNms("Filer:Display.Small icons"),1
  231.  
  232. The ':' and '.' are treated identically but I thought it would be make
  233. it look better.
  234.  
  235.      To load and setup a menu file you usually do some code similar to
  236. the following pseudo-basic:-
  237.  
  238.      DEF PROCmenus
  239.      x%=(size of menu file)
  240.      DIM Menus% x%
  241.      OSCLI("Load <Appl$Dir>.Menus "+STR$~(Menus%))
  242.      SYS "Menu_Calculate",Menus%
  243.      sub window handles are then stored for example
  244.      SYS "Menu_SetSubHandle",Menus%,FNms("Application:Save"),SaveWindowHandle%
  245.      SYS "Menu_Validate",Menus%
  246.      ENDPROC
  247.  
  248. The !Menus Application
  249. ----------------------
  250.  
  251.      This program creates the menu tables used by MenuMod.
  252.  
  253. -The !Menus icon
  254.      Clicking select over this icon will, if possible, create a new
  255. menu.
  256.      Clicking menu over the icon will bring up a menu with Save,Quit,
  257. and Info which are standard options. It will also duplicate the New
  258. Menu option provided by select.
  259.  
  260. -The Menus
  261.      So that complex menus can be viewed easily the menus created are
  262. displayed with a 'back' icon on their title bars. This also shows you
  263. which are menu definitions and which are actual WIMP menus. Menus gain
  264. a vertical scroll bar when they reach a certain height (about 900 OS
  265. units). Otherwise the menus look identical to normal WIMP menus. These
  266. menus will be referred to as emulated menus.
  267.  
  268. -What next?
  269.      Clicking menu on a emulated menu item will bring up a menu with
  270. the following options
  271.  
  272. -Title         This allows you to change the menu title. You must give
  273.                menus titles. The program will generate an error if you
  274.                don't. 
  275. -Width         This allows you to change the width of the menu items. 
  276. -Item style    This leads to a submenu which control the item
  277.                where the menu button was originally pressed. It give
  278.                the following options
  279. -Indirect      Selecting on this icon will toggle the indirect flag. 
  280.                When the flag is set the item has a submenu which lead 
  281.                to a writable icon where you specify the length of the 
  282.                data.
  283. -Validation    This item is shaded when the indirect flag is clear. 
  284.                Otherwise it leads to a writable icon where you specify 
  285.                the validation string.
  286. -Data          This submenu will allow you to change the text used by 
  287.                the item. The input is restricted to the conditions of 
  288.                the validation string.
  289. -Foreground & 
  290. -Background    These are used to change the colour of the item.
  291.  
  292.                The other options provide pretty obvious functions (ie.
  293.                Tick) the items current settings are signified by ticks
  294.                next to the appropriate option. Selecting 'Messages'
  295.                will make submenu selection from that menu item
  296.                generate the 'Message_MenuWarning' message. If you
  297.                don't understand that don't bother and don't use it!
  298.                Selecting "Sub window" will set the submenu pointer
  299.                ready to accept a window handle. See SWI
  300.                "Menu_SetSubHandle" for more details.
  301.  
  302. -Insert after &
  303. -Insert before These will insert a new menu item after/before the
  304.                selected menu item.
  305.                
  306. -Delete item   Deletes the selected item.
  307. -Link menu     This leads to a subwindow. If you drag (with select) the 
  308.                icon to a menu item it will link the current menu to that 
  309.                item. The item then gains the submenu arrow. You can't link 
  310.                a menu to its self.
  311. -Delete link   Will delete a link made by the last option.
  312. -Delete menu   This will ask for confirmation of the delete. If you respond 
  313.                with OK the program will check all other menus deleting any 
  314.                links it finds to the selected menu. It will then delete 
  315.                it.
  316.  
  317. Clicking select on an emulated item will :-
  318.      a)  If the item has no sub window/handle the program will beep.
  319.      b)  If the item links to a sub window then the program will tell you 
  320.          so.
  321.      c)  If the item has a submenu then this is moved to just right of the 
  322.          sub arrow.
  323.  
  324. -Filing operations
  325.      The program loads and saves in the proper RISC-OS way, and I've
  326. acquisitioned file type &321 for menu files. Other files can be merged
  327. with the current one by dragging them to the !Menus icon. The
  328. directory 'Menus' contains a few default menus such as a 'Colours'
  329. menu.
  330.  
  331. !ListTemp & !ListMenu
  332. ---------------------
  333.  
  334.      These two programs can be used to yield information on Templates
  335. and Menu files respectively. The output can be sent to a printer which
  336. makes the programs very handy for remembering template names and menu
  337. selections. Both programs ask for a filename if the last character is
  338. a '.' it is treated as being an application directory and the name is
  339. suffixed with either 'Templates' or 'Menus'. ie. entering '!Menus.'
  340. will make it load the file '!Menus.Templates' or '!Menus.Menus'
  341.  
  342. Right, now where to send your money
  343. -----------------------------------
  344.  
  345. You can send your money £3 or £6, along with your name and address, to me at
  346.      David Andrews
  347.      3 Penzance Street
  348.      Moor Row
  349.      Cumbria
  350.      (The North!!)
  351.      CA24 3JH
  352. Within two weeks you will receive confirmation of your registration.
  353. If you use BBS it might help if you give a contact point.
  354.  
  355. You can also ask for extra help or information on the following BBS's
  356.  
  357. Username :-         Elwood Blues (Alias David Andrews)
  358. The World of Cryton 0749 79794 
  359. Noah BBS            0272 572322
  360. Archive BBS         0603 745932
  361. Arcade BBS          081 6542212
  362.