[comp.sources.amiga] v91i041: MakeMenu 1.0 - Intuition menu structure coding tool, Part01/02

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (03/04/91)

Submitted-by: hj@philtis.cft.philips.nl (Hans Jansen @ PMSN)
Posting-number: Volume 91, Issue 041
Archive-name: utilities/makemenu-1.0/part01

[ includes uuencoded executables and objects  ...tad ]

This package aims to facilitate the design and coding of Intuition
Menu structures.  It consists of two programs, the actual MakeMenu
program, which creates a C code file from a simple menu description
file, and a TestMenu program, which, when linked with the compiled
output of MakeMenu, enables you to view the menu without having to
build a complete application around it.  Adapted from menuBuilder on
Fish Disk #65.  Version 1.0, includes source. 
Author: Hans Jansen.


#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 2)."
# Contents:  MakeMenu.doc README TestMenu.uu makefile makemenu.c
#   makemenu.o.uu menu.c menu.o.uu menu.test testmenu.c testmenu.o.uu
# Wrapped by tadguy@ab20 on Sun Mar  3 18:15:38 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'MakeMenu.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MakeMenu.doc'\"
else
echo shar: Extracting \"'MakeMenu.doc'\" \(7023 characters\)
sed "s/^X//" >'MakeMenu.doc' <<'END_OF_FILE'
X		MakeMenu V1.0 (15-oct-90) - by Hans Jansen
X
X
X  This package aims to facilitate the design and coding of Intuition Menu
X  structures.  It consists of two programs, the actual MakeMenu program, which
X  creates a C code file from a simple menu description file, and a TestMenu
X  program, which, when linked with the compiled output of MakeMenu, enables
X  you to view the menu without having to build a complete application around
X  it.
X  
XMakeMenu:
X  
X  This program was adapted from "Menu Builder V1.0" by Custom Services, as
X  published on Fish Disk #65.
X  The original program contains the following copyright statement:
X
X ___________________________________________________________________________
X|                                                                           |
X|      This Software is Copyrighted 1986 by Custom Services                 |
X|      All rights to this and the generated data are the property           |
X|      of Custom Services and may not be used for Commercial purposes       |
X|      without the express written consent of Custom Services.              |
X|___________________________________________________________________________|
X  
X  I adapted the program to my own, somewhat extended, needs because it
X  originally only generated menu items with the CHECKIT attribute,
X  without even so much as highlighting the selected item.
X
X
X  Like its predecessor, MakeMenu takes a simple sequential file and
X  from that file generates the menu structures for a program.
X
X  Call:
X	MakeMenu ifile ofile
X
X  ifile :
X	The menu descriptor file, containing lines of the form:
X
X	MENU,[Flags],Name
X	ITEM,[Flags],Name,[Select],[Command]
X	SUBI,[Flags],Name,[Select],[Command]
X
X    Name is the name of the Menu, Item or SubItem.
X
X    Select is an optional name which will display when the item is
X	clicked upon.
X  
X    Command is the Character to use for selection of the menu item with
X	the AMIGA key.  Only single letters A-Z are allowed.  The letters
X	M and N are not allowed since Intuition uses these for screen control.
X
X    Flag (for menu entry):
X	"D" specifies the menu to be disabled.
X      Default attributes for a Menu's Flags field are:
X	MENUENABLED.
X
X    Flags (for menu item entry):
X	"D" specifies the menu to be disabled.
X	"T" sets the item attribute MENUTOGGLE;
X	"C" sets the item attribute CHECKIT;
X	"S" sets the item attribute CHECKED ("Selected").
X      Default attributes for an Item's or SubItem's Flags field are:
X	ITEMENABLED | ITEMTEXT | HIGHCOMP.
X      Note that no plausibility check is done on the combination of these 
X      attributes!
X
X  ofile :
X	The resulting C code file, compilable as is! You may, however,
X	edit the source to modify the options.
X
X  Processing:
X
X    The text file is read line by line and the data saved in the regular
X    Intuition structures.   After all data is read and no errors have
X    been found the program will output to STDOUT all the text needed to
X    generate the menu described.  If sub menus are specified the position
X    of the sub menu will be about 40 % overlapped with the linked menu item.
X
X    The positioning of a menu will be automatically calculated based on the
X    length of the strings used in the menu to the left of this one.  The
X    widest string will be used to base the width.  Most of this processing
X    is contained in the function Do_Output; change its parameters as needed.
X
X    The structs Menu, MenuItem, and IntuiText will be generated as needed
X    to define the menus based on the input file.
X
X  You will need to include the statement:
X
X	extern struct Menu *MyMenu;
X
X  in your source program and call:
X
X	SetMenuStrip (window_ptr, MyMenu);
X
X  Also, before you close your window you must call:
X
X	ClearMenuStrip (window_ptr);
X
X  or risk a spectacular crash!
X
XTestMenu:
X
X  This program was adapted from the Intuition/Menus example in pages
X  125-133 of the V1.3 RKM "Libraries and Devices:, also published on
X  Fish Disk #344 (the "Libs&DevsCompanion").  On that disk, the program
X  carried the following copyright statement:
X    
X/* Copyright (c) 1990 Commodore-Amiga, Inc.
X *
X * This example is provided in electronic form by Commodore-Amiga, Inc. for
X * use with the 1.3 revisions of the Addison-Wesley Amiga reference manuals. 
X * The 1.3 Addison-Wesley Amiga Reference Manual series contains additional
X * information on the correct usage of the techniques and operating system
X * functions presented in this example.  The source and executable code of
X * this example may only be distributed in free electronic form, via bulletin
X * board or as part of a fully non-commercial and freely redistributable
X * diskette.  Both the source and executable code (including comments) must
X * be included, without modification, in any copy.  This example may not be
X * published in printed form or distributed with any commercial product.
X * However, the programming techniques and support routines set forth in
X * this example may be used in the development of original executable
X * software products for Commodore Amiga computers.
X * All other rights reserved.
X * This example is provided "as-is" and is subject to change; no warranties
X * are made.  All use is at your own risk.  No liability or responsibility
X * is assumed.
X */
X
X  This program, when linked with the (compiled) output from MakeMenu,
X  will enable you to fast-prototype your menu design.  The program will
X  report the menu/item/subitem numbers for any selection you make.
X
XUsage of the package:
X
X  Build your menu description file with any text editor.  Run it through
X  MakeMenu by a command like
X	MakeMenu menu.test menu.c
X  Then compile the resulting .c file and link the object with your own
X  application.  That is all there is to it!
X
X  The supplied makefile (for PDC V3.3) will automatically build a new
X  executable for the test program TestMenu, when you define a new menu in
X  the file Menu.Test; the resulting output file will be called Menu.c.
X  When all goes well, it will also run the TestMenu program to let you
X  view your menu.
X
XBugs:
X
X  You must be kidding! I don't write any bugs into my software! [(:-)]
X  However, should you find anything wrong with the program, I should be
X  pleased to hear about it.  Please e-mail me to the address below.
X
X  Notice that currently there is no way to generate mutual-exclusion
X  flags.  Should I ever appear to need that functionality, I will probably
X  add it and repost the package.  I have no way to predict when that will
X  be, if ever.
X  You are free to do with the package as you like; but in case of any
X  extensions being added I should still like to have a copy.
X
X  This package has been developed using PDC V3.33.  I have not tried to
X  produce a makefile compatible to Aztec or SAS C; but I do not believe
X  adaptation to those environments will give any problems.
X
X--
XJ (Hans) W Jansen @ Philips Medical Systems Nederland, Dept. DA&S-EDM
XBuilding QP-1115    PO Box 10000    5680 DA Best      The Netherlands
XUUCP: hj@philtis.cft.philips.nl                 Voice: +31 040 763342
END_OF_FILE
if test 7023 -ne `wc -c <'MakeMenu.doc'`; then
    echo shar: \"'MakeMenu.doc'\" unpacked with wrong size!
fi
# end of 'MakeMenu.doc'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(474 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XThis package aims to facilitate the design and coding of Intuition
XMenu structures.  It consists of two programs, the actual MakeMenu
Xprogram, which creates a C code file from a simple menu description
Xfile, and a TestMenu program, which, when linked with the compiled
Xoutput of MakeMenu, enables you to view the menu without having to
Xbuild a complete application around it.  Adapted from menuBuilder on
XFish Disk #65.  Version 1.0, includes source. 
XAuthor: Hans Jansen.
X
END_OF_FILE
if test 474 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'TestMenu.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'TestMenu.uu'\"
else
echo shar: Extracting \"'TestMenu.uu'\" \(16283 characters\)
sed "s/^X//" >'TestMenu.uu' <<'END_OF_FILE'
Xbegin 700 TestMenu
XM```#\P`````````;`````````!H````"````#@```<$```:_````!P````4`.
XM```'````!P````0````$````!`````4````'````!@````8````&````!0``]
XM``4````%````!0````8````%````!0````8````%````!P````8```/I````C
XM`D[Y```````````#[`````$````#`````@````````/R```#ZP````X```/RD
XM```#Z@```<$`(0`!````````````````____________________________\
XM____````````````````````````````````````````````````````````]
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM``````````````,``0``%``4````````!9P`````````"@*``&0"`0```P``#
XM`A`.``````````````5P````````````````_____P`!``$!```3````````G
XM```&J````````0$``!,```````````:B```````!`0``$P``````````!IP`B
XM``````$!```3```````````&E````````0$``!,```````````:.```````!9
XM`0``$P``````````!HH```````$!```3```````````&A````````0$``!,`8
XM``````````9Z```````!`0``$P``````````!G0```````$!```3````````D
XM```&;@```````0$``!,```````````9J```````!`0``$P``````````!F0`X
XM``````$!```3```````````&7@```````0$``!,```````````94```````!I
XM`0``$P``````````!DX```````$!```3```````````&1````````0$``!,`<
XM``````````8T```````!`0``$P``````````!B@````````#D@`X``(`8P`*Y
XM`%(````````";`````````````#__P``````.``,`&,`"@!2`````````H``#
XM````````````__\```/6``````!C``H`4@````````((`````````````/__>
XM```#^`````H`8P`*`%8````````"'`````!/``````#__P``!!H````4`&,`(
XM"@!6`````````C``````4P``````__\```0\````'@!C``H`4@````````)$&
XM`````````````/__```$7@```"@`8P`*`%(````````"6````````````W#_3
XM_P``!(`````R`&,`"@!2`````````I0`````````````__\`````````/`!CG
XM``H`5@````````*H`````%$``````/__```$Q```````6P`*`%8````````">
XMO`````!:``````#__P``!.8````*`%L`"@!6`````````M``````6```````M
XM__\```4(````%`!;``H`5@````````+D`````$,``````/__```%*@```!X`.
XM6P`*`%8````````"^`````!6``````#__P`````````H`%L`"@!"````````8
XM`PP`````````````__\```5N``````"#``H`4@````````,@````````````"
XM`/__```%D`````H`@P`*`5L````````#-`````````````#__P``!;(````4&
XM`(,`"@%3`````````T@`````````````__\`````````'@"#``H`4P``````H
XM``-<`````````````/__```%\@``````8P`*``$```8&```#M```````````%
XM```&$`!P````6P`*``$```7F```$H@````````````````#8````@P`*``$`C
XM``7````%3``````````````%U$YQ0T]..C,P+S,P+S(P,"\Q-3`O5V]R:V)E<
XM;F-H````!E````90``````````$P,3(S-#4V-S@Y04)#1$5&``!.<0``````'
XM```````````````````````````4`````$YQ```&L```````````````````)
XM````````````````!LP```````````````````````````````````;H`````
XM`````````````````````````````````````````````````````````````
XM`````````^P````L`````@``!I0```:P```&S```!E````94```#<````X(`G
XM``.D```#M````\8```/6```#Z````_@```0*```$&@``!"P```0\```$3@``4
XM!%@```1>```$<```!)(```2B```$M```!,0```36```$Y@``!/@```4(```%`
XM&@``!3P```5,```%7@``!6X```6````%D```!:(```7$```%U```!>8```7R'
XM```&!```!B(```8N````%P````,```(4```"*````CP```)0```"9````G@`P
XM``*,```"H````K0```+(```"W````O````,$```#&````RP```-````#5```K
XM`V@```7B```&````!AX```'0```!\@````````/R```#Z0``!K\CSP```"@CC
XMP````#`CR````#0L>``$(\X````$D\E.KO[:*$!*K`"L9P`!"&$``A"1R"`LN
XM`*SEB"`P"!#EB$CG`#!%^0```+A'^0```#@@0'``$!A",`@`)L@@.0```#`@$
XM>0```#1#\`@`#"$`(%+(__I"*0`!$AAG7`P!`"!G]@P!``EG\";*#`$`(F<4R
XM%,$2&&="#`$`(&<$%,%@\D(:8-02&&<P#`$`(F?R#`$`*F8@$A@,`0!.9P8,[
XM`0!N9@1R"F`.#`$`16<&#`$`968"<AL4P6#,0A)"DR`\````-)"+1H#DB$S?;
XM#`!(>0```#@O`$ZY`````"/`````$"/`````'$ZY`````"/`````%"/`````.
XM&"/`````("/`````)$ZY```&K'``+GD````H3G5A``$*80``]"/`````+"\`<
XM0J<D0"`J`"1G#BQY````""!`(A!.KO^"0?D```8T#!```&=0(@@D/````^TL9
XM>0````A.KO_B#(``````9T0CP````!`CP````!0CP````!@CP````!PCP```<
XM`"`CP````"0I0`"<*4``H.6(($`I:``(`*1.N0``!JQP`&`$("\`!$JY````B
XM+&<2(CD````0:PHL>0````A.KO_<+GD````H+P`L>``$(#D````(9P8B0$ZN;
XM_F)*N0```"QG#DZN_WPB>0```"Q.KOZ&(!].=4CG`08N/``#@`<L>``$3J[_1
XME$S?8(!P9&"80>P`7$ZN_H!![`!<3J[^C$YU0_H`$G``3J[]V"/`````"&?"D
XM3G5D;W,N;&EB<F%R>0!.<4Y5__9(YQP`<``H`$ZY```#^G`!('D```'`(&@`]
XM5A(H``]T`!0!(@+CH"8`2H1F(B\#3KD`````6$\J`,"#9Q`O.0```<!.N0``_
XM`L183R@`8-I"ITZY```$K%A/3-\`.$Y=3G5.5?_D2.<?.$7Y```)3'``+`!P2
XM`"@`(&T`""\H`%9.N0````!83R@`9P`!`B!$*V@`%/_P($0[:``8__PO!$ZYX
XM`````%A/<``@+?_P3KD``!K"```#+@```@````,V```!``````````/L<`$LO
XM`&```+AP`#`M__Q(P"8`#(/_____9P``H"`#`H`````?*$`@`^J``H`````_:
XM)D!P"R(#X*$"@0```!\J`2\#+SD```8N3KD`````4$\@0#`H``Q(P"X`+PLOK
XM#$AY```%5DZ2WOP`#`R%````'V<,+P5(>0``!4A.DE!/(`<"@````0!G"DAYN
XM```%/$Z26$](>0``!3I.DEA/+P,O.0``!BY.N0````!03R!`,"@`($C`)@!@I
XM`/]:8````F``_NP@!DS?'/A.74YU3E4``$CG`#!%^0```<!'^0``!*Q(>``AJ
XM2'D```4H3KD`````4$\CP````;@@.0```;AF"$AX``5.DUA/2'@`(4AY```%D
XM%DZY`````%!/(\````&\(#D```&\9@A(>``%3I-83TAY```!V$ZY`````%A/U
XM)(`@$F8(2'@`!4Z36$]"IT*G2'D```'$(%(O*``R3KD`````WOP`$"\Y```&#
XM+B\23KD`````4$],WPP`3EU.=4Y5```O"D7Y```!P"`29QP@4B`H`!QG"B\22
XM3KD`````6$\O$DZY`````%A/(#D```&\9PXO.0```;Q.N0````!83R`Y```!5
XMN&<.+SD```&X3KD`````6$\O+0`(3KD```FL6$\D7TY=3G5G<F%P:&EC<RYL?
XM:6)R87)Y``!I;G1U:71I;VXN;&EB<F%R>0`*`"`H0VAE8VME9"D@`"P@<W5BG
XM:71E;2`E9```4V5L96-T960@;65N=2`E9"P@:71E;2`E9`!497-T365N=2!6.
XM,2XP("@Q,BUO8W0M.3`I("T@8GD@2&%N<R!*86YS96X``$%C=&EV871E($UE@
XM;G5)=&5M(&]R($-L;W-E1V%D9V5T``!.<2!0<F5F97)E;F-E<R`@("`@("`@F
XM("`@("`@("`@("`@("`@("``("!%9&ET("`@("`@("`@("`@("`@("`@("`@&
XM("`@(``@4')O:F5C="`@("`@("`@("`@("`@("`@("`@("`@("``16%T($ET.
XM(%1O;P``2&%V92!9;W5R($-A:V4``$%U=&\@4V%V90!3;W5N9`!%<F%S92!!;
XM;&P`4&%S=&4`0V]P>0``0W5T`%5N9&\``%%U:70``$%B;W5T+BXN``!$<F%F7
XM=`!.3%$`4')I;G0`4V%V94%S``!3879E``!/<&5N``!.97<`3E4``$CG`#!%!
XM^0``!HY'^0``!^1P%#/````&C$AX`*!.N0``#C!83R2`(!)F'$*G2'D``0``0
XM3KD`````4$](>``!3KD```'`6$\P/!``2,`@4B%```0@4B"Y````$$AY```'4
XMK$*G3I-03R/`````+#`\$`%(P"!2(4``#"!2(7D````4``A(>0``!ZI(>``!C
XM3I-03R/`````,"!2("@`"&<V2'@#[4AY```'J$ZY`````%!/(%(A0``0(%(`-
XMJ`````$`%$AY```'IDAX``).DU!/(\`````T+RT`#"\M``A.N0```F!03T*G!
XM3KD```FL6$],WPP`3EU.=7<`*@!W`'(`3G%.50``2'@`!$AY```'X$ZY````G
XM`"\`3KD`````WOP`#$AX``%.N0``":Q83TY=3G5>0PH`3E7__"\#3KD```K*$
XM)@!F""`#)A].74YU($,A;0`(``1P`7(`$@`@`2!#,4``&B\#3KD``!`(6$]*M
XM@&<(($,`:``@`!H@`V#*3E7__$CG&``F+0`(<``H`$J#9@IP_TS?`!A.74YUV
XM($,P*``:9U8@0S`H`!IR`#(`(`$"@`````)G$$AX__\O`TZY```,P%!/*``@1
XM0R\H``1.N0``$CQ83XB`($,P*``:<@`R`"`!`H`````09PX@0R\H`!1.N0``8
XM#K)83W``($,A0``4<``@0R%```AP`"!#(4``#'``<@`2`"`!($,Q0``:(`1@R
XM`/]P3E4``$AX__\O+0`(3KD```S`4$].74YU3E4``"\Y`````"\M``A.N0``*
XM"AA03TY=3G5.50``+P,F+0`(('D````$4KD````$$(,@`R8?3EU.=4Y5```CZ
XM[0`(`````$AM`!`O+0`,2'K_L$ZY```4IM[\``Q.74YU3E4``"/Y````,```7
XM``!(;0`,+RT`"$AZ_XA.N0``%*;>_``,3EU.=4Y5__PO`R/M``@````$2&T`D
XM$"\M``Q(>O]Z3KD``!2FWOP`#"8`('D````$0A`@`R8?3EU.=4YQ3E7__"\#4
XM(#D````D9P@@>0```"1.D"`Y```&CF<L<``F`#`Y```&C$C`MH!L#B\#3KD`)
XM`!(\6$]2@V#F+SD```:.3KD```ZR6$\@.0```"AG""!Y````*$Z0+RT`"$ZYT
XM```!P%A/)A].74YU3E7_^DCG'``F+0`,*"T`"!M$__\@0R`H``@@0["H``QM"
XM%"\$+P-.N0``#,!03TS?`#A.74YU(D,@:0`(4JD`"!"$($,P*``:<@`R`"`!C
XM`H`````@9R@,A`````IG"`R$````#688+P0O`TZY```,P%!/*@`@0U.H``@@<
XM!6"P(`1@K$YQ3E7_^$CG&`!!^0``!I0F"$J#9Q(@0R@0+P-.N0``""Q83R8$&
XM8.I,WP`83EU.=4Y5__A(YQ@`(#D````D9@I!^O_`(\@````D0?D```:4)@A*>
XM@V<2*`,@0S`H`!IF`F`&($,F$&#J2H-F)$AX`!Q.N0``#C!83R8`9@IP`$S?]
XM`!A.74YU($0@@W``($,@@'``($,A0``(<``@0R%```QP`"!#(4``%'``<@`2X
XM`"`!($,Q0``:(`-@Q$Y5__PO`R8M``A(>`0`3KD```XP6$\@0R%``!0@*``4E
XM9A@@`P:`````&"!#(4``%'`!($,A0``08!0@0P!H`!``&C`\!`!(P"!#(4``!
XM$"!#+R@`!$ZY```0"%A/2H!G""!#`&@`(``:)A].74YU3E7_^$CG'``F+0`(%
XM($,P*``:<@`R`"`!`H`````,9PIP_TS?`#A.74YU($,":/_]`!H@0R`H`!1FA
XM""\#3KK_5%A/($,P*``:<@`R`"`!`H````"`9SI!^0``!I0H"$J$9RX@0S`H;
XM`!IR`#(`(`$"@````((,@````()F#DAX__\O!$ZY```,P%!/($0H$&#.($,OD
XM*``0($,O*``4($,O*``$3KD``!!DWOP`#"H`;S(@0R)#(V@`%``(($,@*``4>
XMT(4@0R%```PB0R!I``A2J0`($!!(@$C``H````#_8`#_0DJ%;`H@0P!H``@`(
XM&F`(($,`:``$`!IP_V``_R9.5?_Z2.<<`"8M``@H+0`,&T3_^R!#,"@`&G(`B
XM,@`@`0*`````"&<*</],WP`X3EU.=2!#,"@`&G(`,@`@`0*``````F<N($,@$
XM*``(($.0J``4*@`O!2!#+R@`%"!#+R@`!$ZY```1!-[\``RPA6<$8```H@R$]
XM_____V8<($,":/_]`!IP`"!#(4``"'``($,A0``,<`!@DB!#("@`%&8(+P-.L
XMNOWP6$\@0R`H`!`,@`````%F*$AX``%(;?_[($,O*``$3KD``!$$WOP`#`R`@
XM`````6<"8#P@!&``_TX@0R)#(V@`%``(($,@*``4($/0J``0($,A0``,($,`C
XM:``"`!HB0R!I``A2J0`($(0@!&``_Q@@0P!H``@`&G``($,A0``(<``@0R%`)
XM``QP_V``_OI.<4Y5__A(YQ@`0?D```90)B@`!`R#```&4&<:($,H*``$($,O$
XM*``(+P-.N0````!03R8$8-Y,WP`83EU.=4Y5__A(YQP`*BT`"&8*</],WP`XG
XM3EU.=2`%!H`````,*`!(>0`!```O!$ZY`````%!/)@!F!'``8-9!^0``!E`@.
XM:``$((-!^0``!E`B0R-H``0`!$'Y```&4"%#``1!^0``!E`B0R*(($,A1``(^
XM0?K_5"/(````*`:#````#"`#8(Y.5?_T2.<<`"`M``@$@`````PF`"!#*"@`F
XM!"!#*A`@1"`0L(-G"$S?`#A.74YU($,O*``(+P-.N0````!03R!$((4@12%$5
XM``1@W$Y5__A(YQ@`+RT`#"\M``A.N0``%]0@'UA/*``O!$ZZ_Q183R8`+P0OJ
XM`TZY```/O%!/(`-,WP`83EU.=4Y5__1(YQ\`)BT`#"XM``@@!P2`````#"@`-
XM($0L*``$($8@$+"$9PIP`$S?`/A.74YU+P-.NO["6$\J`"!$MJ@`"&,(($0@\
XM*``(8`(@`R8`+P,O!2\'3KD```^<WOP`#"`%8,9.50``+RT`$"\M``@O+0`,U
XM3KD``!&8WOP`#$Y=3G5.<4Y5```O+0`,0J<O+0`(3KD```_8WOP`#$Y=3G5.K
XM5?_V2.<>`"HM``@L!2@M``PF+0`02H-O"B!&4H80A%.#8/(@!4S?`'A.74YUA
XM3G%.5?_\2.<8`"8M``@@.0``!HXB`^>!T($H`'``L(-N$C`Y```&C$C`MH!N\
XM!B!$(!!F$G`#(\````:(</],WP`83EU.=2!$+Q!.N0````!83TJ`9P1P`6`"O
XM0H!@X$Y5__A(YQP@*"T`"$7Y```&B$ZY```2""`Y```&CB($YX'0@28`<`"PC
XMA&X2,#D```:,2,"X@&P&($,@$&8.<`,D@'#_3-\$.$Y=3G4@0R`H``0"@```$
XM``,,@`````%F"'`")(!P_V#<+RT`$"\M``P@0R\03KD`````WOP`#"H`#(7_<
XM____9@Q.N0`````D@'#_8+!.N0``$@@@!6"F3G%.5?_X2.<<("@M``A%^0``$
XM!HA.N0``$@@@.0``!HXB!.>!T($F`'``L(1N$C`Y```&C$C`N(!L!B!#(!!FK
XM#G`#)(!P_TS?!#A.74YU($,@*``$`H`````#9@AP`B2`</]@XB\M`!`O+0`,F
XM($,O$$ZY`````-[\``PJ``R%_____V8,3KD`````)(!P_V"V(`5@LDYQ3E7_`
XM]$CG'P`L+0`0+BT`"$J&;@H@!TS?`/A.74YU*BT`#"@'NH1N,"`&4X`B!=*`N
XM(`&PA&TB(`93@-J`(`93@-B`)@9*@V\.($53A2)$4X02D%.#8.Y@%"8&2H-O:
XM#B!%4H4B1%*$$I!3@V#N(`=@IDY5__PO`TAX,`!"ITZY`````%!/)@`"@```P
XM,`!G#B`Y```&7&<&3KD```>P(`,F'TY=3G5.5?_\2.<8`"@M``@@.0``!HXBR
XM!.>!T($F`'``L(1N$C`Y```&C$C`N(!L!B!#(!!F$G`#(\````:(</],WP`85
XM3EU.=2!#("@`!`*````0`&8,($,O$$ZY`````%A/<``@0R%```1P`"!#((!P,
XM`&#,3E7_]$CG'R`H+0`,+BT`"$7Y````"`R$@````&9:<``@$DZY```:P@``/
XM$O0````(```2_@````H``!,(````$````````!,20?D``!?()@A@'$'Y```7,
XMO"8(8!)!^0``%[(F"&`(0?D``!>J)@@@`TS?!/A.74YU<``@$@R`````"F8(\
XM2H1L!'`!8`)"@"P`9P8@!$2`*``J!"`'!H````0`)@!3@R!#0A!!^0``!F`O;
XM$B\%3KD``!IT(!]83]'`4X,B0Q*0+Q(O!4ZY```9,BH?6$]*A6<((`=2@+:`3
XM;LI*AF<(4X,@0Q"\`"T@`V"`3E7_\$CG'S`N+0`(1?D````@1_D````0<`$FD
XM`"\'3KD``!K46$\J`+J3;P(J$R`Y````&&=T(#D````4#(`````@9Q(@1Q`0<
XM2(!(P"@`#(0````M9P@,A````"MF("\$(%).D%A/#(#_____9@IP_TS?#/A.S
XM74YU4H-2AU.%4[D````,(#D````,L(5M'"\Y````%"!23I!83PR`_____V8$&
XM</]@RE*#8-1P`"P`O)-L)B!'4H<0$$B`2,`H`&<8+P0@4DZ06$\,@/____]F.
XM!'#_8)Q2AF#6UH:VN0````QL'$AX`"`@4DZ06$\,@/____]F!G#_8`#_>%*#"
XM8-S7N0```!P@`V``_VA.5?OL2.<?."@M``Q%^0```!!)^0````PC[0`(````W
XM("HM`!!P`"/`````'"!$$!!(@$C`)@!G``+(#(,````E9R8O`R!M``A.D%A/N
XM#(#_____9@IP_TS?'/A.74YU4H12N0```!Q@Q%*$($00$$B`2,`F``R#````4
XM)68@+P,@;0`(3I!83PR`_____V8$</]@Q%*$4KD````<8)!P`2/`````&'`$)
XM+@!P`"2`*))P("/`````%`R#````+684<``CP````!A2A"!$$!!(@$C`)@`,`
XM@P```#!F%'`P(\`````44H0@1!`02(!(P"8`#(,````J9A0@15B%*)!2A"!$[
XM$!!(@$C`)@!@,G``<#"P@VXJ#(,````Y8B(@%-"`(@#E@="!T(,$@````##1$
XME%*$($00$$B`2,`F`&#.#(,````N9EI2A"!$$!!(@$C`)@`,@P```"IF%"!%W
XM6(4DD%*$($00$$B`2,`F`&`R<`!P,+"#;BH,@P```#EB(B`2T(`B`.6!T('0%
XM@P2`````,-&24H0@1!`02(!(P"8`8,X,@P```&QG"`R#````3&82<`0N`%*$-
XM($00$$B`2,`F`&`@#(,```!H9P@,@P```$AF$'`"+@!2A"!$$!!(@$C`)@`@]
XM$@R````#_FP$(!)F"#`\`_Y(P"2`<`!R`!(`(`$CP`````A2A'``(`-.N0``X
XM&L(``!;F````>```%NP```!O```6\@```&0``!=*````<P``%W@```!C````S
XM````%WY0N0````A0N0````AP`"`Y````"&8.<`IR`!(`(`$CP`````@,AP``9
XM``1F""!%6(4F4&`*($54A3`02,`F0"\+2&W[[$ZZ^X!03RP`+P9.NOQF6$\,V
XM@/____]F!G#_8`#]MF!8($58A2P0(!1G!"248`@P/'_-2,`D@"\&3KK\.%A/;
XM#(#_____9@9P_V``_8A@*B!%6(4F$!M#^^Q![?OL0B@``4AM^^Q.NOP,6$\,N
XM@/____]F!G#_8`#]7&``_2Y@`/U4+4]/4%,M```X,#`P,#`P,```+3(Q-#<T>
XM.#,V-#@`,C`P,#`P,#`P,#``3E8``$CG^`!*;@`(9AI*;@`,9A0P+@`*P.X`^
XM#BU```A,WP`?3EY.=7@!)"X`"&P$1()$A"8N``QL!$2#1(1"@#`"P,,R`DA"A
XMQ,-(0\+#TH)(04)!T(%*A&P"1(`M0``(3-\`'TY>3G5.5@``2.?P`$IN``AG@
XM+DIN``QF)"0N``@F+@`,0H`P`L##,@)(0L3#2$/"P]*"2$%*068$T(%D$G#_*
XM8`Y*;@`,9M(P+@`*P.X`#BU```A,WP`/3EY.=4Y6```O`$IN``QF'"`N``AK&
XM%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`B+@`,I
XM;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!``$`7
XM`&ST@,$"@```__\D`"\`+P1A`/[$(!]83[:`;`)3@B`"2H5L`D2`+4``"$S?L
XM`#X@'TY>3G5.5@``+P`@+@`(2FX`#&8\@.X`#FD0`H```/__+4``""`?3EY.>
XM=4CG8``R+@`.=`!(0#0`A,$]0@`(2$(P`DA`@,$]0``*3-\`!F#42.=\`"(N:
XM``RP@6X*9P1P`&!"<`%@/BH`)@'BB.*)#($``0``;/2`P0*```#__R0`+P,O;
XM`F$`_H@@'UA/L(5G$FT$4X)@ZB@%F("X@V\$4H)@WB`"+4``"$S?`#Y@`/]VG
XM3E8``$CG^`!*;@`,9AP@+@`(:Q:`[@`.:1!"0$A`+4``"$S?`!].7DYU>`$@N
XM+@`(;`1$@$2$)``B+@`,;`)$@0R!``$``&P00D!(0(#!,`*`P4)`2$!@+"8!J
XMXHCBB0R!``$``&ST@,$"@```__\O`"\#80#]@B`?6$^T@&0"D(.0@D2`2H1LH
XM`D2`+4``"$S?`!].7DYU3E8``$CG\``@+@`(2FX`#&86@.X`#FD00D!(0"U`Y
XM``A,WP`/3EY.=28N``PD`"\#+P!A`/Z*+P-A`/V.(A]03Y2!+4(`"$S?``].1
XM7DYU(%\B6"()9P:PF&;V3M$@4$[03E7_^$CG&`!P`"8`*"T`""!$4H00$&<$<
XM4H-@]"`#3-\`&$Y=3G5.<0```^P````K`````0``$KX``!.J```3L```$\P`&
XM`!/4```4'```%"(``!0L```4>```%)P``!2T```4N@``%,(``!3.```5"```T
XM%3P``!5&```56```%6@``!6$```6I@``%N@``!;N```6]@``%P8```ZD```*2
XMU```"N````GX```*````";0```F\```)4@``"/(```D2```)&```"2X```E6R
XM```)?@``"9P```>````'0@``!Q@```!2`````@``$U@``!)R```27@``$DH`J
XM`!(H```1,@``$1X``!$2```0D@``$'X``!!R```0/@``$"H``!`6```-_@``Z
XM#@@```YL```.>```#H8```Z0```*I@``"N8```P:```)T```"<0```GJ```'N
XM+```!P8```;$```&M@```W(```/.```$E@```G8```*B```$!```!"(```0H5
XM```$2@``!%````1@```$@```!+0```3:```$X@``!/````3X```!7`````(`5
XM```(````#@```!@```!$````2@```%P```!B````W````.P```#Z```!````]
XM`0P```$2```!&````1X```$L```!/````4X```%P```!@@```8@```&.```!>
XME````9H```&@```!Q@```<X```'6```!X````>P```'Z```"!@```DH```!0J
XM`````P``$[P``!-X```38@``$M```!:R```2U```$MP``!+D```2\```$O8`0
XM`!,````3"@``$Q0``!:V```6O@``%L8``!;.```6U@``%N(``!(P```1&```&
XM$'@``!#Z```/S```#ZX```^0```/*```#PX```TD```-A@``#&8```NJ```+3
XM#```"V0```JX```,1@``"D````J$```*#```"?````G>```)0```"6@```F0P
XM```(_```"*(```A^```(;@``".(```@6```'[```!]8```>Z```'F```!XX`W
XM``;P```&S@``!KP```<,```'-```!U0```=R```%"@```Q(```+.```";@``2
XM`J@```*V```#%@```QX```,J```#C@```Z0```.X```#P@``!`H```04```$K
XM/````20```&X`````0````0```=:`````0````4``!*4`````0````8``!#:=
XM`````@````<``!%T```'R`````$````(````]`````(````)```'P````08`S
XM```"````"@``$8@``!#N`````0````L``!!2`````0````P```;D`````0``)
XM``T```Y<`````@````X```X>```.Z@````$````/```2%@````$````0```"V
XME`````$````1```"Y`````$````2```#!`````(````3```$Z```!/X````"K
XM````%```!!H```1"`````0```!4```3(`````0```!8```32`````@```!<`@
XM``-X```#U`````$````8```$9@````$````9```$C`````$````:```$G@``\
XM``````/R```#Z0````=(YR`"3.\`!@`,+'D````(3J[_XDS?0`1.=4YQ```#$
XM[`````$````"````#`````````/R```#Z0````4O#B(O``@L>0````A.KO_<[
XM+%].=0```^P````!`````@````@````````#\@```^D````'2.<P`DSO``X`:
XM$"QY````"$ZN_]9,WT`,3G5.<0```^P````!`````@````P````````#\@``Z
XM`^D````'2.<P`DSO``X`$"QY````"$ZN_]!,WT`,3G5.<0```^P````!````.
XM`@````P````````#\@```^D````$+PXL>0````A.KO_*+%].=0```^P````!@
XM`````@````0````````#\@```^D````$+PXL>0````A.KO_$+%].=0```^P`1
XM```!`````@````0````````#\@```^D````$+PXL>0````A.KO]\+%].=0``;
XM`^P````!`````@````0````````#\@```^D````%+PXB+P`(+'D````(3J[_:
XM*"Q?3G4```/L`````0````(````(`````````_(```/I````!TCG`08N+P`0[
XM*F\`%"QY````!$ZN_Y1,WV"`3G4```/L`````0````(````.`````````_(`H
XM``/I````!B\.3.\``P`(+'D````$3J[_.BQ?3G5.<0```^P````!`````@``2
XM``H````````#\@```^D````&+PXB;P`(("\`#"QY````!$ZN_RXL7TYU```#%
XM[`````$````"````#`````````/R```#Z0````8O#DSO``,`""QY````!$ZN*
XM_LXL7TYU3G$```/L`````0````(````*`````````_(```/I````!2\.("\`'
XM""QY````!$ZN_L(L7TYU```#[`````$````"````"`````````/R```#Z0``6
XM``4O#B!O``@L>0````1.KOZ,+%].=0```^P````!`````@````@````````#3
XM\@```^D````%+PXB;P`(+'D````$3J[^ABQ?3G4```/L`````0````(````(J
XM`````````_(```/I````!2\.(F\`""QY````!$ZN_F(L7TYU```#[`````$`_
XM```"````"`````````/R```#Z0````8O#B)O``@@+P`,+'D````$3J[]V"Q?G
XM3G4```/L`````0````(````,`````````_(```/I````!2\.(&\`""QY```!A
XMN$ZN_\HL7TYU```#[`````$````"````"`````````/R```#Z0````4O#B!OW
XM``@L>0```;A.KO^X+%].=0```^P````!`````@````@````````#\@```^D`"
XM```&+PX@;P`(("\`#"QY```!N$ZN_W`L7TYU```#[`````$````"````#```*
XM``````/R```#Z0````4O#B!O``@L>0```;A.KO\T+%].=0```^P````!````%
XM`@````@````````#\@```^D````'+PY,[P,```A,[P`#`!`L>0```;A.KO\H$
XM+%].=0```^P````!`````@```!`````````#\@```^D````&+PY,[P,```@LF
XG>0```;A.KO[X+%].=4YQ```#[`````$````"````"@````````/RB
X``
Xend
Xsize 11604
END_OF_FILE
if test 16283 -ne `wc -c <'TestMenu.uu'`; then
    echo shar: \"'TestMenu.uu'\" unpacked with wrong size!
fi
# end of 'TestMenu.uu'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(339 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
X# Makefile for MakeMenu using PDC
X
XCC = ccx
XCFLAGS = -c
X
X.c.o:
X	$(CC) $(CFLAGS) $*.c
X
Xall : MakeMenu TestMenu
X	TestMenu
X
XBOBJS = makemenu.o
X
XMakeMenu : $(BOBJS)
X	$(CC) -o MakeMenu $(BOBJS)
X
XTOBJS = testmenu.o menu.o
X
XTestMenu : $(TOBJS)
X	$(CC) -o TestMenu $(TOBJS)
X	
Xmenu.o : menu.c
X
Xmenu.c : menu.test MakeMenu
X	MakeMenu menu.test menu.c
END_OF_FILE
if test 339 -ne `wc -c <'makefile'`; then
    echo shar: \"'makefile'\" unpacked with wrong size!
fi
chmod +x 'makefile'
# end of 'makefile'
fi
if test -f 'makemenu.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makemenu.c'\"
else
echo shar: Extracting \"'makemenu.c'\" \(14632 characters\)
sed "s/^X//" >'makemenu.c' <<'END_OF_FILE'
X/* MakeMenu V1.0 (14-oct-90) - by Hans Jansen
X *
X * This program will generate C source to build Intuition menus, from
X * a simple description file. See MakeMenu.Doc for details on usage.
X *
X */
X
X#define  DISABLE	  0
X#define  DEFAULT	  1
X#define  ENABLE		  1
X#define  TOGGLE		  2
X#define  CHECK		  4
X#define  SELECT		  8
X
X#define  CHAR_WIDTH	  8
X
X#include <intuition/intuition.h>
X#include <stdio.h>
X
X#define NO_ERROR	  0
X#define ERROR_NO_COMMA	  1
X#define ERROR_BAD_TEXT	  2
X#define ERROR_NO_MENU	  3
X#define ERROR_NO_ITEM	  4
X#define ERROR_NO_DATA	  5
X#define ERROR_BAD_NUMBER  6
X#define ERROR_BAD_COMMAND 7
X#define MAX_LINE	132
X
Xchar cline[MAX_LINE];			/* input line			*/
Xchar RecBuf[BUFSIZ];			/* input buffer			*/
Xchar *ifname, *ofname;			/* File name pointers		*/
XFILE *ofile;				/* output file handle		*/
Xint  EndOfFile;				/* true = end of file		*/
Xint  lcnt;				/* current input line count	*/
X
Xstruct IntuiText *CText;		/* Current Text Item pointer	*/
Xstruct IntuiText *AllText;		/* All text items		*/
Xstruct MenuItem  *CItem;		/* Current Menu Item		*/
Xstruct MenuItem  *CSItem;		/* Current Sub Menu Item	*/
Xstruct Menu      *CMenu, *AllMenu;	/* Menu pointers		*/
X
Xmain (argc, argv)
X  int   argc;				/*number of arguments		*/
X  char  *argv[];			/*array of ptrs to arg strings	*/
X
X{
X  FILE	*ifile;				/* input File pointer		*/
X  int	i, j;
X  int	result, error;
X  char	*Scan();
X  int	GetLine();
X  char	*cptr;
X  char  etype[5];
X
X/* get the file names and open the files  */
X/* initialize input buffers and variables */
X
X  AllText = NULL;
X  CText   = NULL;
X  CMenu   = NULL;
X  CItem   = NULL;
X  CSItem  = NULL;
X  AllMenu = NULL;
X  result  = NO_ERROR;
X  error   = 0;
X  lcnt    = 0;
X
X  if (argc != 3)
X      printf ("usage: MakeMenu <inputfile> <outputfile>\n");
X
X  for (ifname = NULL, i=1; i<argc && ifname == NULL; i++)
X    if ( *argv[i] != '-') ifname = argv[i];
X
X  for (ofname = NULL, i=i; i<argc && ofname == NULL; i++)
X    if ( *argv[i] != '-') ofname = argv[i];
X
X  EndOfFile = FALSE; /* no end of file  */
X  ifile      = fopen (ifname, "r");  /* open file for reading */
X  if (ifile == NULL) {
X    printf (" Cannot open file %s for input!\n", ifname);
X    exit (10);
X  };
X
X  while ((j = GetLine (ifile, cline, sizeof (cline))) > 0) {
X    cptr = &cline[0];
X    for (i = 0; i < sizeof (etype) -1; i++)
X      etype[i] = toupper (*(cptr + i));
X    etype[i] = '\0';
X    cptr = Scan (cptr, ',', TRUE);
X    if (strcmp ("MENU", etype) == 0)
X      result = Process_Menu (cptr);		/* do a Menu */
X    else if (strcmp ("ITEM", etype) == 0)
X      result = Process_Item (cptr, 0);		/* do an Item */
X    else if (strcmp ("SUBI", etype) == 0)
X      result = Process_Item (cptr, 1);		/* do a SubItem */
X    else
X	result = ERROR_BAD_COMMAND;
X    if (result != NO_ERROR) {
X      error++;
X      printf (" Line %d has syntax error:%s\n", lcnt, cline);
X    };
X  };
X  fclose (ifile);
X  if (error == 0) Do_Output ();
X}
X
Xchar *Scan (ptr, c, control)
X  char *ptr;
X  char c;
X  int control;
X
X{
X  while (*ptr != NULL && ((control && *ptr != c) || (! control && *ptr == c)))
X     ptr++;
X  return (ptr);  /* return the new pointer */
X}
X
XGetLine (fptr, line, lsize)	/* get a line from buffer	*/
X  FILE *fptr;			/* pointer to file to read from */
X  char line[];			/* destination of characters	*/
X  int  lsize;			/* maximum size for destination	*/
X
X{
X    lcnt++;         /* bump line count */
X
X    if (fgets (line, lsize, fptr) == NULL) {
X       EndOfFile = TRUE;
X       return (0);
X    }
X    else {
X       line[strlen (line) - 1] = '\0';		/* discard newline character */
X       return (strlen (line));
X    }
X}
X
Xint Process_Menu (ptr)
X  char *ptr;
X  
X{
X  char *tptr;
X  int len;
X  struct Menu *last;
X
X  if (AllMenu == NULL) {	/* first menu item */
X    AllMenu = (struct Menu *) malloc (sizeof (struct Menu));
X    CMenu = AllMenu;		/* Set current pointer */
X  }
X  else {			/* add new one to list */
X    last = CMenu;
X    CMenu = (struct Menu *) malloc (sizeof(struct Menu));
X    last->NextMenu = CMenu;
X  };
X
X/* Build Menu structure */
X
X  if (*ptr != ',') return (ERROR_NO_COMMA);
X  ptr++;
X
X/* process disable-flag, if any */
X
X  if (*ptr == 'D' || *ptr == 'd')
X      CMenu->Flags = DISABLE;
X  else
X      CMenu->Flags = ENABLE;
X  ptr = Scan (ptr, ',', TRUE);
X  if (*ptr != ',') return (ERROR_NO_COMMA);
X  ptr++;
X
X  tptr = Scan (ptr, '\0', TRUE); /* find end of string */
X  len  = tptr-ptr;
X  CMenu->MenuName = (BYTE *) malloc (len+1);
X  strcpy (CMenu->MenuName, ptr);
X  CMenu->NextMenu = NULL;
X  CMenu->FirstItem = NULL;
X  CItem = NULL;
X  CMenu->Width = len + 3 ;
X  return (NO_ERROR);
X}
X
Xint Process_Item (ptr, type)
X  char *ptr;
X  int type;    /* 0 = Item, 1 = SubItem */
X
X{
X  struct IntuiText *Process_Text();
X  struct MenuItem  *ThisItem;
X  struct MenuItem  *lastI;
X  struct MenuItem  *lastSI;
X
X  if (CMenu == NULL)               return(ERROR_NO_MENU);
X  if (type  == 1 && CItem == NULL) return(ERROR_NO_ITEM);
X  if (*ptr  != ',')                return(ERROR_NO_COMMA);
X
X  if (type  == 0) {			/* Build a MenuItem */
X    lastI  = CItem;
X    CSItem = NULL;  /* clear current Sub Item Flag */
X    CItem  = (struct MenuItem *) malloc (sizeof (struct MenuItem));
X
X    if (lastI == NULL)			/* First Item for Menu */
X      CMenu->FirstItem = CItem;		/* link it to the menu */
X    else
X      lastI->NextItem = CItem;		/* link it to the item list */
X    ThisItem = CItem;			/* build it */
X  }
X  else {				/* Build a SubItem */
X    lastSI = CSItem;
X    CSItem = (struct MenuItem *) malloc (sizeof (struct MenuItem));
X    if (lastSI == NULL)			/* First Sub Item for Menu Item */
X      CItem->SubItem = CSItem;		/* link in the sub items */
X    else
X      lastSI->NextItem = CSItem;
X    ThisItem = CSItem;
X  };
X
X/* Process flags, name, select and command */
X
X  ptr++;
X  ThisItem->Flags = ENABLE;
X  while (*ptr != ',') {
X      if (*ptr == 'D' || *ptr == 'd') ThisItem->Flags &= ~ENABLE;
X      else if (*ptr == 'T' || *ptr == 't') ThisItem->Flags |= TOGGLE;
X      else if (*ptr == 'C' || *ptr == 'c') ThisItem->Flags |= CHECK;
X      else if (*ptr == 'S' || *ptr == 's') ThisItem->Flags |= SELECT;
X      ptr++;
X  }
X
X  ptr++;
X   
X  ThisItem->ItemFill = (APTR) Process_Text (ptr);
X  if (ThisItem->ItemFill == NULL) return (ERROR_BAD_TEXT);
X
X  ptr = Scan (ptr, ',', TRUE); /* find next comma */
X  if (*ptr != ',') return (ERROR_NO_COMMA);
X  ptr++;
X
X/* Select name? */
X
X  ThisItem->SelectFill = (APTR) Process_Text (ptr);
X
X  ptr = Scan (ptr, ',', TRUE); /* find next comma */
X  if (*ptr != ',') return (ERROR_NO_COMMA);
X  ptr++;
X
X/* Command ? */
X  ThisItem->NextItem      = NULL;
X  ThisItem->SubItem       = NULL;
X  ThisItem->Command       = *ptr;
X  ThisItem->MutualExclude = 0L;
X  return (NO_ERROR);
X}
X
Xstruct IntuiText *Process_Text (ptr)
X  char *ptr;
X{
X  
X  struct IntuiText *dptr, *lasText;
X  char *tptr;
X
X  if (*ptr == ',') return (NULL);
X
X  lasText = AllText;
X  while (lasText != NULL) {	 /* search end of saved-texts list */
X    CText = lasText;
X    lasText = lasText->NextText;
X  };
X  lasText = CText;
X  CText = (struct IntuiText *) malloc (sizeof (struct IntuiText));
X  CText->NextText = NULL;
X  if( AllText == NULL )
X    AllText = CText;
X  else
X    lasText->NextText = CText;
X
X  tptr = Scan (ptr, ',', TRUE);
X  CText->IText = (UBYTE *) malloc (tptr-ptr+1);
X  strncpy (CText->IText, ptr, tptr-ptr);
X  if (CMenu->Width <= tptr-ptr) CMenu->Width = tptr-ptr;
X
X/* check for duplicate, eliminate this one if duplicate */
X  
X  dptr = AllText;
X  while (dptr != CText) {
X    if (strcmp (dptr->IText, CText->IText) == 0 ) {
X      free ((char *) (CText->IText));
X      free ((char *) CText);
X      CText = dptr;
X      lasText->NextText = NULL;
X    }
X    else dptr = dptr->NextText;
X  }
X  return (CText);
X}
X
XDo_Output()
X
X{
X  char nxt, quote, Flag[10];
X  char Mptr[14];
X  int Menu, Item, left, top, width, height;
X  int stop;
X  char rest[60];
X
X  ofile = fopen (ofname, "w");  /* open file for writing */
X  if (ofile == NULL) {
X    printf (" Cannot open file %s for output!\n", ofname);
X    exit (10);
X  }
X
X/* Output the IntuiText structure first */
X
X  quote = '"';
X  fprintf (ofile, "/*****************************************/\n");
X  fprintf (ofile, "/*      This code was generated by:      */\n");
X  fprintf (ofile, "/* MakeMenu V1.0 (Hans Jansen  7-oct-90) */\n");
X  fprintf (ofile, "/*****************************************/\n");
X  fprintf (ofile, "#include <exec/types.h>\n");
X  fprintf (ofile, "#include <intuition/intuition.h>\n");
X
X  CText = AllText;
X  if (AllText != NULL) {
X    fprintf (ofile, "\nstruct IntuiText IText[] =\n");
X    fprintf (ofile, "  {\n");
X  };
X
X  while (CText != NULL) {		 /* for all text to output */
X    if (CText->NextText == NULL) nxt = ' ';
X    else nxt = ',';
X    fprintf (ofile, "    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, %c%s%c, NULL }%c\n",
X      quote, CText->IText, quote, nxt);
X    CText = CText->NextText;
X  };
X
X  if (AllText != NULL) fprintf (ofile,"  };\n\n");
X
X  CMenu = AllMenu;
X  Menu = 0;
X  left = 0;
X  Item = 0;
X  height = 10;
X
X  while (CMenu != NULL) {	     /* first output the subitems, if any */
X    Item = 0;
X    CItem = CMenu->FirstItem;
X    while (CItem != NULL) {
X      CSItem = CItem->SubItem;
X      if (CSItem != NULL) Do_Out_Sub (Menu,Item);
X      Item++;
X      CItem = CItem->NextItem;
X    };
X    Menu++;
X    CMenu = CMenu->NextMenu;
X  }
X
X  CMenu = AllMenu;
X  Menu = 0;
X  left = 0;
X  Item = 0;
X  height = 10;
X
X  while (CMenu != NULL) {	       /* now output the items */
X    Item = 0;
X    CItem = CMenu->FirstItem;
X    CSItem = CItem->SubItem;
X    top  = 0;
X    fprintf (ofile, "struct MenuItem M%d[] = \n",Menu);
X    fprintf (ofile, "  {\n");
X    top  = 0;
X    width =  CMenu->Width * CHAR_WIDTH;
X
X    while (CItem != NULL) {
X      Item++;
X      CSItem = CItem->SubItem;
X
X      if (CItem->NextItem == NULL) fprintf (ofile, "    {NULL, ");
X      else fprintf (ofile, "    {&M%d[%2d], ", Menu, Item);
X      fprintf (ofile, "%3d, %3d, %3d+CHECKWIDTH, %3d,\n",
X			left, top, width, height);
X      fprintf (ofile, "      ITEMTEXT|HIGHCOMP");
X      if ((CItem->Flags & ENABLE) == ENABLE) fprintf (ofile, "|ITEMENABLED");
X      if ((CItem->Flags & TOGGLE) == TOGGLE) fprintf (ofile, "|MENUTOGGLE");
X      if ((CItem->Flags & CHECK)  == CHECK)  fprintf (ofile, "|CHECKIT");
X      if ((CItem->Flags & SELECT) == SELECT) fprintf (ofile, "|CHECKED");
X      if (CItem->Command != NULL && CItem->Command != ' ')
X          fprintf (ofile, "|COMMSEQ");
X      fprintf (ofile, ",\n      0, (APTR)&IText[%2d], ",
X			Index(CItem->ItemFill));
X      if (CItem->SelectFill == NULL) fprintf (ofile, "NULL, ");
X      else fprintf (ofile, "(APTR)&IText[%2d], ", Index(CItem->SelectFill));
X      if (CItem->Command == NULL || CItem->Command == ' ')
X          fprintf (ofile, "NULL, ");
X      else fprintf (ofile, "'%c', ", CItem->Command);
X      if (CSItem == NULL) fprintf (ofile, "NULL, MENUNULL}");
X      else fprintf (ofile, "&M%dI%d[0], MENUNULL}", Menu, (Item-1));
X      if (CItem->NextItem == NULL) fprintf (ofile, "\n");
X      else fprintf (ofile, ",\n");
X
X      CItem = CItem->NextItem;
X      top   = top + height;
X    };
X    fprintf (ofile, "  };\n\n");
X    CMenu = CMenu->NextMenu;
X    Menu++;
X  };
X
X  CMenu = AllMenu;
X  fprintf (ofile, "struct Menu TheMenu[] =\n");
X  fprintf (ofile, "  {\n");
X  left = 0;
X  top  = 0;
X  Menu = 0;
X  
X  while (CMenu != NULL) {	       /* finally, the menus themselves */
X    Menu++;
X    width = CMenu->Width * CHAR_WIDTH;
X    if (CMenu->NextMenu == NULL) {	/* the NextMenu pointer */
X      sprintf (Mptr, "NULL       ");
X      nxt = ' ';
X    }
X    else {
X      sprintf (Mptr, "&TheMenu[%2d]", Menu);
X      nxt = ',';
X    };
X    (void) strncpy (rest, "                               ", 25);
X    stop = CMenu->Width - strlen (CMenu->MenuName);    /* the name string */
X    if (stop <= 0)
X      (void) strncpy (rest, CMenu->MenuName, 25);
X    else {
X      stop = stop / 2;
X      (void) strncpy (&rest[stop], CMenu->MenuName, 25-stop);
X      (void) strncat (rest, "                         ", 25);
X    };
X
X    quote = '"';
X    height = 10;
X    fprintf (ofile, "    {%12s, %3d, %3d, %3d+CHECKWIDTH, %3d,\n",
X		    Mptr, left, top, width, height);
X    if ((CMenu->Flags & ENABLE) == ENABLE)
X        fprintf (ofile, "MENUENABLED");
X    else
X        fprintf (ofile, "0");
X    fprintf (ofile, ",%c%s%c, &M%d[0]}%c\n",
X		    quote, rest, quote, (Menu-1), nxt);
X    left = left + width + 4*CHAR_WIDTH;
X    CMenu = CMenu->NextMenu;
X  };
X  fprintf (ofile, "  };\n\n");
X  fprintf (ofile, "struct Menu *MyMenu = &TheMenu[0];\n\n");
X
X  fprintf (ofile, "/*****************************************/\n");
X  fprintf (ofile, "/*         End of generated code         */\n");
X  fprintf (ofile, "/*****************************************/\n");
X
X  fclose (ofile);
X}
X
Xint Index (ptr)   /* Find the position index */
X  struct IntuiText *ptr;
X {
X  int idx;
X
X  idx = 0;
X  CText = AllText;
X
X  while (CText != NULL && ptr != CText) {
X    idx++;
X    CText = CText->NextText;
X  };
X  return (idx);
X}
X
XDo_Out_Sub (Menu, Item)	       /* output an item's SubItems */
X  int Menu, Item;
X{ 
X  int SItem;
X  int stop, width, sleft;
X  int top, height;
X  char Mptr[14];
X  char rest[60];
X  char nxt, Flag[10];
X
X  SItem = 0;
X  top = 0;
X  height = 10;
X  fprintf (ofile, "struct MenuItem M%dI%d[] = \n", Menu, Item);
X  fprintf (ofile, "  {\n");
X  width = CMenu->Width*CHAR_WIDTH;
X  SItem = 0;
X  while (CSItem != NULL) {
X    SItem++;
X    sleft =  (width * 7) / 10;
X    stop  =  top + 2;
X    if (CSItem->NextItem == NULL) fprintf (ofile, "    {NULL, ");
X    else fprintf (ofile, "    {&M%dI%d[%2d], ", Menu, Item, SItem);
X    fprintf (ofile, "%3d, %3d, %3d+CHECKWIDTH, %3d,\n",
X		    sleft, stop, width, height);
X    fprintf (ofile, "      ITEMTEXT|HIGHCOMP");
X    if ((CSItem->Flags & ENABLE) == ENABLE) fprintf (ofile, "|ITEMENABLED");
X    if ((CSItem->Flags & TOGGLE) == TOGGLE) fprintf (ofile, "|MENUTOGGLE");
X    if ((CSItem->Flags & CHECK)  == CHECK)  fprintf (ofile, "|CHECKIT");
X    if ((CSItem->Flags & SELECT) == SELECT) fprintf (ofile, "|CHECKED");
X    if (CSItem->Command != NULL && CSItem->Command != ' ')
X        fprintf (ofile, "|COMMSEQ");
X    fprintf (ofile, ",\n      0, (APTR)&IText[%2d], ",
X		    Index(CSItem->ItemFill));
X    if (CSItem->SelectFill == NULL) fprintf (ofile, "NULL, ");
X    else fprintf (ofile, "(APTR)&IText[%2d], ", Index(CSItem->SelectFill));
X    if (CSItem->Command == NULL || CSItem->Command == ' ')
X        fprintf (ofile, "NULL, ");
X    else fprintf (ofile, "'%c', ", CSItem->Command);
X    fprintf (ofile, "NULL, MENUNULL}");
X    if (CSItem->NextItem == NULL) fprintf (ofile, "\n");
X    else fprintf (ofile, ",\n");
X
X    CSItem = CSItem->NextItem;
X    top = top + height;
X  };
X  fprintf (ofile,"  };\n\n");
X}
END_OF_FILE
if test 14632 -ne `wc -c <'makemenu.c'`; then
    echo shar: \"'makemenu.c'\" unpacked with wrong size!
fi
chmod +x 'makemenu.c'
# end of 'makemenu.c'
fi
if test -f 'makemenu.o.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makemenu.o.uu'\"
else
echo shar: Extracting \"'makemenu.o.uu'\" \(9842 characters\)
sed "s/^X//" >'makemenu.o.uu' <<'END_OF_FILE'
Xbegin 700 makemenu.o
XM```#YP````````/H`````3,```````/K```!+````^\!```"7V-L:6YE````#
XM`````0```E]296-"=68`````A`$```)?:69N86UE````!(0!```"7V]F;F%MJ
XM90````2(`0```E]O9FEL90`````$C`$```-?16YD3V9&:6QE``````20`0``V
XM`E]L8VYT```````$E`$```)?0U1E>'0`````!)@!```"7T%L;%1E>'0```2<0
XM`0```E]#271E;0`````$H`$```)?0U-)=&5M````!*0!```"7T--96YU````!
XM``2H`0```E]!;&Q-96YU```$K`````````/R```#Z`````$Q```````#Z0``J
XM!6E.5?_B2.<?."XM``PD;0`(2?D```2$<``CP```!)QP`"/````$F'``(\``W
XM``2H<``CP```!*!P`"/````$I'``(\````2L<``J`'``)D!P`"/````$E"`*F
XM#(`````#9PY(>0``%7A.N0````!83W``*(!P`28`MHIL)"`49B`@1R`#Y8#1Y
XMP"!0$!`,```M9PH@1R`#Y8#1P"B04H-@V'``(\````2()@.VBFPL(#D```2($
XM9B0@1R`#Y8#1P"!0$!`,```M9PX@1R`#Y8#1P"/0```$B%*#8-!P`"/````$C
XMD$AY```5=B\43KD`````4$\L`&8<+Q1(>0``%51.N0````!03TAX``I.N0``7
XM``!83TAX`(1(>0`````O!DZY```"A-[\``PK0/_T("W_]&\``/!!^0`````HS
XM"'``)@`,@P````1L("!$T<,0$$B`2,`O`$ZY`````%A/0>W_X]'#$(!2@V#8#
XM0>W_X]'#0A!(>``!2'@`+"\$3KD```(\WOP`#"@`2&W_XTAY```53DZY````K
XM`%!/2H!F#B\$3KD```+>6$\J`&!22&W_XTAY```52$ZY`````%!/2H!F$$*G^
XM+P1.N0```^103RH`8"Q(;?_C2'D``!5"3KD`````4$]*@&822'@``2\$3KD`(
XM``/D4$\J`&`$<`<J`$J%9QY22TAY`````"\Y```$E$AY```5)$ZY`````-[\"
XM``Q@`/[R+P9.N0````!83R`+9@9.N0``!LY,WQSX3EU.=4Y5``!(YQP`)BT`?
XM""@M``PJ+0`0($,0$&<D2H5G#"!#$!!(@$C`L(1F$$J%9A`@0Q`02(!(P+"$I
XM9@12@V#6(`-,WP`X3EU.=4Y5```O`R8M``Q2N0``!)0O+0`(+RT`$"\#3KD`)
XM````WOP`#$J`9A!P`2/````$D'``)A].74YU+P-.N0````!83R!#T<`@"$(H7
XM__\O`TZY`````%A/8-I@V$Y5__1(YQXX)BT`"$7Y```$J$?Y`````$GY```$V
XMK"`49@Y(>``>3I-83RB`))1@$"P22'@`'DZ36$\D@"!&()(@0Q`0#```+&<*6
XM<`%,WQQX3EU.=5*#($,0$`P``$1G"B!#$!`,``!D9A!P`'(`$@`@`2!2,4``8
XM#&`.<`%R`!(`(`$@4C%```Q(>``!2'@`+"\#3KK^RM[\``PF`"!#$!`,```LU
XM9P1P`6"B4H-(>``!0J<O`TZZ_JC>_``,*@"0@R@`4H`O`$Z36$\@4B%```XOA
XM`R!2+R@`#DZY`````%!/<``@4B"`<``@4B%``!)P`"/````$H"`$5H`@4C%`K
XM``AP`&``_TA.5?_T2.<?,"8M``A%^0``!*!'^0``!*0N+0`,(#D```2H9@IPD
XM`TS?#/A.74YU#(<````!9@@@$F8$<`1@Z"!#$!`,```L9P1P`6#:2H=F+"P2L
XM<``F@$AX`").N0````!83R2`2H9F#"!Y```$J"%2`!)@!"!&()(H$F`B*A-(3
XM>``B3KD`````6$\F@$J%9@@@4B%3`!Q@!"!%(),H$U*#<`%R`!(`(`$@1#%`D
XM``P@0Q`0#```+&<``'X@0Q`0#```1&<*($,0$`P``&1F"B!$`FC__@`,8%@@"
XM0Q`0#```5&<*($,0$`P``'1F"B!$`&@``@`,8#H@0Q`0#```0V<*($,0$`P`M
XM`&-F"B!$`&@`!``,8!P@0Q`0#```4V<*($,0$`P``'-F""!$`&@`"``,4H-@#
XM`/]Z4H,O`TZY```%NEA/($0A0``2($0@*``29@9P`F``_M)(>``!2'@`+"\#O
XM3KK\]M[\``PF`"!#$!`,```L9P9P`6``_JY2@R\#3KD```6Z6$\@1"%``!9("
XM>``!2'@`+"\#3KK\P-[\``PF`"!#$!`,```L9P9P`6``_GA2@W``($0@@'``/
XM($0A0``<($,B1!-0`!IP`"!$(4``#G``8`#^4DY5__1(YQXP1?D```28*"T`,
XM"$?Y```$G"!$$!`,```L9@IP`$S?#'A.74YU)A-*@V<*)(,@0R8H`!!@\B82*
XM2'@`%$ZY`````%A/)(!P`"!2(4``$"`39@0FDF`&($,A4@`02'@``4AX`"POV
XM!$ZZ_!3>_``,+`"0A%*`+P!.N0````!83R!2(4``#"`&D(0O`"\$(%(O*``,!
XM3KD`````WOP`#"!Y```$J#`H``A(P"(&DH2P@6X.(`:0A"!Y```$J#%```@JG
XM$[J29T0@4B\H``P@12\H``Q.N0````!03TJ`9B0@4B\H``Q.N0````!83R\2E
XM3KD`````6$\DA7``($,A0``08`8@12HH`!!@N"`28`#_$DY5_XY(YQ\X1?D`W
XM``2,1_D`````2?D```2@0?D```2H*`A(>0``%2(O.0``!(A.N0````!03R2`"
XM(!)F("\Y```$B$AY```5`$ZY`````%!/2'@`"DZY`````%A/&WP`(O_^2'D`7
XM`!32+Q).DU!/2'D``!2D+Q).DU!/2'D``!1V+Q).DU!/2'D``!1(+Q).DU!/+
XM2'D``!0N+Q).DU!/2'D``!0,+Q).DU!/(_D```2<```$F"`Y```$G&<82'D`W
XM`!/N+Q).DU!/2'D``!/H+Q).DU!/(#D```289V`@>0``!)@@*``09@@;?``@M
XM__]@!AM\`"S__Q`M__](@$C`+P`0+?_^2(!(P"\`('D```28+R@`#!`M__Y(R
XM@$C`+P!(>0``$ZXO$DZ3WOP`&"!Y```$F"/H`!````288)@@.0``!)QG#$AY>
XM```3IB\23I-03R!$(+D```2L<``F`'``+@!P`"H`<`HK0/_.($0@$&="<``J^
XM`"!$(%`HJ``2(!1G)B!4(^@`'```!*0@.0``!*1G#"\%+P-.N0``#7103U*%2
XM(%0HD&#64H,@1"!0(D0BD&"X($0@N0``!*QP`"8`<``N`'``*@!P"BM`_\X@(
XM1"`09P`"9G``*@`@1"!0**@`$B!4(^@`'```!*1P`"P`+P-(>0``$XPO$DZ3F
XMWOP`#$AY```3AB\23I-03W``+``@1"!0,"@`"$C`YX`K0/_2(!1G``'\4H4@+
XM5"/H`!P```2D(%0@$&8.2'D``!-Z+Q).DU!/8!(O!2\#2'D``!-H+Q).D][\:
XM`!`O+?_.+RW_TB\&+P=(>0``$T@O$DZ3WOP`&$AY```3,"\23I-03R!4,"@`2
XM#'(`,@`@`0*``````0R``````68,2'D``!,B+Q).DU!/(%0P*``,<@`R`"`!G
XM`H`````"#(`````"9@Q(>0``$Q8O$DZ34$\@5#`H``QR`#(`(`$"@`````0,>
XM@`````1F#$AY```3#"\23I-03R!4,"@`#'(`,@`@`0*`````"`R`````"&8,$
XM2'D``!,"+Q).DU!/(%00*``:9Q@@5!`H`!H,```@9PQ(>0``$O@O$DZ34$\@M
XM5"\H`!).N0``#3Q83R\`2'D``!+8+Q).D][\``P@5"`H`!9F#DAY```2T"\2`
XM3I-03V`>(%0O*``63KD```T\6$\O`$AY```2O"\23I/>_``,(%00*``:9PP@U
XM5!`H`!H,```@9@Y(>0``$K0O$DZ34$]@&B!4$"@`&DB`2,`O`$AY```2K"\2-
XM3I/>_``,(#D```2D9@Y(>0``$IPO$DZ34$]@%B`%4X`O`"\#2'D``!*&+Q).C
XMD][\`!`@5"`09@Y(>0``$H0O$DZ34$]@#$AY```2@"\23I-03R!4*)`@!M"M\
XM_\XL`&``_@)(>0``$G@O$DZ34$\@1"!0(D0BD%*#8`#]EB!$(+D```2L2'D`'
XM`!)>+Q).DU!/2'D``!)8+Q).DU!/<``N`'``+`!P`"8`($0@$&<``;92@R!$8
XM(%`P*``(2,#G@"M`_](@1"!0(!!F&DAY```23$AM_^9.N0````!03QM\`"#_4
XM_V`<+P-(>0``$CY(;?_F3KD`````WOP`#!M\`"S__TAX`!E(>0``$AY(;?^.2
XM3KD`````WOP`#"!$(%`P*``(2,`O`"!$(%`O*``.3KD`````6$\B`"`?D($K<
XM0/_*("W_RFX<2'@`&2!$(%`O*``.2&W_CDZY`````-[\``Q@5$AX``(O+?_*%
XM3KD`````(!]83RM`_\IP&9"M_\HO`"!$(%`O*``.0>W_CB`(T*W_RB\`3KD`W
XM````WOP`#$AX`!E(>0``$@1(;?^.3KD`````WOP`#!M\`"+__G`**T#_SB\M)
XM_\XO+?_2+P8O!TAM_^9(>0``$=@O$DZ3WOP`'"!$(%`P*``,<@`R`"`!`H```
XM```!#(`````!9@Y(>0``$<PO$DZ34$]@#$AY```1RB\23I-03Q`M__](@$C`U
XM+P`@`U.`+P`0+?_^2(!(P"\`2&W_CA`M__Y(@$C`+P!(>0``$;0O$DZ3WOP`*
XM'"`'T*W_T@:`````("X`($0@4")$(I!@`/Y&2'D``!&L+Q).DU!/2'D``!&&,
XM+Q).DU!/2'D``!%8+Q).DU!/2'D``!$J+Q).DU!/2'D``!#\+Q).DU!/+Q).&
XMN0````!83TS?'/A.74YU3E7__$CG$"!%^0``!)AP`"8`)+D```2<(!)G$B`MO
XM``BPDF<*4H,@4B2H`!!@ZB`#3-\$"$Y=3G5.5?^22.<?.$7Y```$C$?Y````X
XM`$GY```$I'``*`!P`"8`<`HL`"\M``PO+0`(2'D``!#>+Q).D][\`!!(>0``&
XM$-@O$DZ34$\@>0``!*@P*``(2,#G@"H`<``H`"`49P`!]E*$(`4B`-*!T('2D
XM@="!2'@`"B\`3KD`````(!]83RM`__`@`U2`+@`@5"`09@Y(>0``$,PO$DZ3.
XM4$]@&"\$+RT`#"\M``A(>0``$+@O$DZ3WOP`%"\&+P4O!R\M__!(>0``$)@OQ
XM$DZ3WOP`&$AY```0@"\23I-03R!4,"@`#'(`,@`@`0*``````0R``````68,6
XM2'D``!!R+Q).DU!/(%0P*``,<@`R`"`!`H`````"#(`````"9@Q(>0``$&8O+
XM$DZ34$\@5#`H``QR`#(`(`$"@`````0,@`````1F#$AY```07"\23I-03R!49
XM,"@`#'(`,@`@`0*`````"`R`````"&8,2'D``!!2+Q).DU!/(%00*``:9Q@@"
XM5!`H`!H,```@9PQ(>0``$$@O$DZ34$\@5"\H`!).NOXN6$\O`$AY```0*"\2`
XM3I/>_``,(%0@*``69@Y(>0``$"`O$DZ34$]@'"!4+R@`%DZZ_?Q83R\`2'D`T
XM`!`,+Q).D][\``P@5!`H`!IG#"!4$"@`&@P``"!F#DAY```0!"\23I-03V`:3
XM(%00*``:2(!(P"\`2'D```_\+Q).D][\``Q(>0``#^PO$DZ34$\@5"`09@Y(V
XM>0``#^HO$DZ34$]@#$AY```/YB\23I-03R!4*)`@`]"&)@!@`/X(2'D```_>U
XM+Q).DU!/3-\<^$Y=3G4@('T["@H``"P*```*`$Y53$PL($U%3E5.54Q,?0`G5
XM)6,G+"```$Y53$PL(```*$%05%(I)DE497AT6R4R9%TL(`!.54Q,+"```"P*:
XM("`@("`@,"P@*$%05%(I)DE497AT6R4R9%TL(```?$-/34U315$``'Q#2$5#W
XM2T5$``!\0TA%0TM)5```?$U%3E543T='3$4`?$E414U%3D%"3$5$```@("`@4
XM("!)5$5-5$585'Q(24=(0T]-4``E,V0L("4S9"P@)3-D*T-(14-+5TE$5$@L`
XM("4S9"P*`"`@("![)DTE9$DE9%LE,F1=+"``("`@('M.54Q,+"``("!["@``A
XM<W1R=6-T($UE;G5)=&5M($TE9$DE9%M=(#T@"@``+RHJ*BHJ*BHJ*BHJ*BHJK
XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ+PH``"\J("`@("`@("`@16YDW
XM(&]F(&=E;F5R871E9"!C;V1E("`@("`@("`@*B\*```O*BHJ*BHJ*BHJ*BHJI
XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHO"@``<W1R=6-T($UE;G4@U
XM*DUY365N=2`]("94:&5-96YU6S!=.PH*```@('T["@H``"PE8R5S)6,L("9-T
XM)61;,%U])6,*```P`$U%3E5%3D%"3$5$`"`@("![)3$R<RP@)3-D+"`E,V0L"
XM("4S9"M#2$5#2U=)1%1(+"`E,V0L"@``("`@("`@("`@("`@("`@("`@("`@#
XM("`@(``@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@`"94:&5-96YU\
XM6R4R9%T`3E5,3"`@("`@("``("!["@``<W1R=6-T($UE;G4@5&AE365N=5M=[
XM(#T*```@('T["@H``"P*```*`"9-)61))61;,%TL($U%3E5.54Q,?0!.54Q,=
XM+"!-14Y53E5,3'T`)R5C)RP@``!.54Q,+"```"A!4%12*29)5&5X=%LE,F1=Q
XM+"``3E5,3"P@```L"B`@("`@(#`L("A!4%12*29)5&5X=%LE,F1=+"```'Q#?
XM3TU-4T51``!\0TA%0TM%1```?$-(14-+250``'Q-14Y55$]'1TQ%`'Q)5$5-*
XM14Y!0DQ%1```("`@("`@251%351%6%1\2$E'2$-/35``)3-D+"`E,V0L("4S2
XM9"M#2$5#2U=)1%1(+"`E,V0L"@`@("`@>R9-)61;)3)D72P@```@("`@>TY5_
XM3$PL(``@('L*``!S=')U8W0@365N=4ET96T@325D6UT@/2`*`"`@?3L*"@``3
XM("`@('L@,"P@,2P@2D%-,BP@0TA%0TM724142"P@,"P@3E5,3"P@)6,E<R5C_
XM+"!.54Q,('TE8PH``"`@>PH```IS=')U8W0@26YT=6E497AT($E497AT6UT@>
XM/0H``"-I;F-L=61E(#QI;G1U:71I;VXO:6YT=6ET:6]N+F@^"@`C:6YC;'5D?
XM92`\97AE8R]T>7!E<RYH/@H``"\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJQ
XM*BHJ*BHJ*BHJ*BHJ*BHJ*B\*```O*B!-86ME365N=2!6,2XP("A(86YS($IA'
XM;G-E;B`@-RUO8W0M.3`I("HO"@``+RH@("`@("!4:&ES(&-O9&4@=V%S(&=EC
XM;F5R871E9"!B>3H@("`@("`J+PH``"\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ&
XM*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*B\*```@0V%N;F]T(&]P96X@9FEL92`E<R!FJ
XM;W(@;W5T<'5T(0H`=P`@3&EN92`E9"!H87,@<WEN=&%X(&5R<F]R.B5S"@!3!
XM54))``!)5$5-``!-14Y5```@0V%N;F]T(&]P96X@9FEL92`E<R!F;W(@:6YP?
XM=70A"@``<@!U<V%G93H@36%K94UE;G4@/&EN<'5T9FEL93X@/&]U='!U=&9I.
XM;&4^"@!.<0```^P````X`````````!(````:````(@```"H````R````.@``C
XM`$(```!2````H@```*X```#0````W````18```$T```"`@```@@```*0```"^
XML````NP```+X```#T````_(```/X```$`@``!$X```7$```%S@``!EX```9VO
XM```&V```!N0```;J```&^```!PP```=Z```'?@``!X0```>D```'K```!]H`9
XM``?\```(!```"`P```@B```(5```"%H```B$```(M```"/H```J2```+"@``&
XM#48```U0```-?@``#8H```V^````5@````$```!B````X@```/@```$>```!0
XM>@```8H```&>```!K@```<0```'4```![````@X```(P```%(```!60```;RB
XM```'$@``!S(```<^```'2@``!U8```=B```';@``!XP```>8```'[@``"!0`F
XM``AF```(P```",X```D&```)&```"3(```E````)9@``"8P```FR```)V```@
XM"?@```H*```*%```"BH```H^```*2```"FH```J$```*F@``"K````K$```*Y
XMT@``"NX```L0```+'```"U8```MR```+D```#"P```Q<```,A@``#)0```S(K
XM```,\```#/P```T(```-%```#2````VD```-L@``#@8```X>```.-@``#D0`M
XM``YJ```.D```#K8```[<```._```#Q8```\L```/2```#VH```^$```/D@``R
XM#Z0```^R```/S`````````/O`0```E]M86EN``````````$```)?4V-A;@``O
XM`````CP!```"7T=E=$QI;F4```*$`0``!%]0<F]C97-S7TUE;G4```````+>E
XM`0``!%]0<F]C97-S7TET96T```````/D`0``!%]0<F]C97-S7U1E>'0`````?
XM``6Z`0```U]$;U]/=71P=70`````!LX!```"7TEN9&5X``````T\`0```U]$C
XM;U]/=71?4W5B````#72!```"7W!R:6YT9@`````$````:````/X```(4```',
XM&($```)?9F]P96X```````(```#J```&_H$```)?97AI=`````````(```$*K
XM```')($```)?=&]U<'!E<@````$```%4@0```E]S=')C;7``````!````9``"
XM``&T```!V@``!I*!```"7V9C;&]S90`````"```")```#2Z!```"7V9G971SD
XM```````!```"H($```)?<W1R;&5N``````,```+````"U```"[B!```"7VUAK
XM;&QO8P`````%```"\@``!$````1H```%_@``!CB!```"7W-T<F-P>0`````!<
XM```#N($```)?<W1R;F-P>0````0```94```+F@``"^````P>@0```E]F<F5E,
XM`````````@``!J0```:N@0```E]F<')I;G1F`````@``!MX```V$@0```E]S'
XM<')I;G1F`````@``"V````M\@0```BYL9&EV<P```````@``"_0```WL@0``5
X9`E]S=')N8V%T`````0``##8````````#\FEVW
X``
Xend
Xsize 7000
END_OF_FILE
if test 9842 -ne `wc -c <'makemenu.o.uu'`; then
    echo shar: \"'makemenu.o.uu'\" unpacked with wrong size!
fi
# end of 'makemenu.o.uu'
fi
if test -f 'menu.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'menu.c'\"
else
echo shar: Extracting \"'menu.c'\" \(4525 characters\)
sed "s/^X//" >'menu.c' <<'END_OF_FILE'
X/*****************************************/
X/*      This code was generated by:      */
X/* MakeMenu V1.0 (Hans Jansen  7-oct-90) */
X/*****************************************/
X#include <exec/types.h>
X#include <intuition/intuition.h>
X
Xstruct IntuiText IText[] =
X  {
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "New", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Open", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Save", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "SaveAs", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Print", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "NLQ", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Draft", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "About...", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Quit", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Undo", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Cut", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Copy", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Paste", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Erase All", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Sound", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Auto Save", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Have Your Cake", NULL },
X    { 0, 1, JAM2, CHECKWIDTH, 0, NULL, "Eat It Too", NULL } 
X  };
X
Xstruct MenuItem M0I4[] = 
X  {
X    {&M0I4[ 1],  56,   2,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 5], NULL, NULL, NULL, MENUNULL},
X    {NULL,  56,  12,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 6], NULL, NULL, NULL, MENUNULL}
X  };
X
Xstruct MenuItem M0[] = 
X  {
X    {&M0[ 1],   0,   0,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 0], NULL, NULL, NULL, MENUNULL},
X    {&M0[ 2],   0,  10,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[ 1], NULL, 'O', NULL, MENUNULL},
X    {&M0[ 3],   0,  20,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[ 2], NULL, 'S', NULL, MENUNULL},
X    {&M0[ 4],   0,  30,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 3], NULL, NULL, NULL, MENUNULL},
X    {&M0[ 5],   0,  40,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 4], NULL, NULL, &M0I4[0], MENUNULL},
X    {&M0[ 6],   0,  50,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[ 7], NULL, NULL, NULL, MENUNULL},
X    {NULL,   0,  60,  80+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[ 8], NULL, 'Q', NULL, MENUNULL}
X  };
X
Xstruct MenuItem M1[] = 
X  {
X    {&M1[ 1],   0,   0,  72+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[ 9], NULL, 'Z', NULL, MENUNULL},
X    {&M1[ 2],   0,  10,  72+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[10], NULL, 'X', NULL, MENUNULL},
X    {&M1[ 3],   0,  20,  72+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[11], NULL, 'C', NULL, MENUNULL},
X    {&M1[ 4],   0,  30,  72+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|COMMSEQ,
X      0, (APTR)&IText[12], NULL, 'V', NULL, MENUNULL},
X    {NULL,   0,  40,  72+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP,
X      0, (APTR)&IText[13], NULL, NULL, NULL, MENUNULL}
X  };
X
Xstruct MenuItem M2[] = 
X  {
X    {&M2[ 1],   0,   0, 112+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED,
X      0, (APTR)&IText[14], NULL, NULL, NULL, MENUNULL},
X    {&M2[ 2],   0,  10, 112+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|MENUTOGGLE|CHECKIT|CHECKED,
X      0, (APTR)&IText[15], NULL, NULL, NULL, MENUNULL},
X    {&M2[ 3],   0,  20, 112+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT|CHECKED,
X      0, (APTR)&IText[16], NULL, NULL, NULL, MENUNULL},
X    {NULL,   0,  30, 112+CHECKWIDTH,  10,
X      ITEMTEXT|HIGHCOMP|ITEMENABLED|CHECKIT,
X      0, (APTR)&IText[17], NULL, NULL, NULL, MENUNULL}
X  };
X
Xstruct Menu TheMenu[] =
X  {
X    { &TheMenu[ 1],   0,   0,  80+CHECKWIDTH,  10,
XMENUENABLED," Project                         ", &M0[0]},
X    { &TheMenu[ 2], 112,   0,  72+CHECKWIDTH,  10,
XMENUENABLED,"  Edit                         ", &M1[0]},
X    {  NULL       , 216,   0, 112+CHECKWIDTH,  10,
XMENUENABLED," Preferences                         ", &M2[0]} 
X  };
X
Xstruct Menu *MyMenu = &TheMenu[0];
X
X/*****************************************/
X/*         End of generated code         */
X/*****************************************/
END_OF_FILE
if test 4525 -ne `wc -c <'menu.c'`; then
    echo shar: \"'menu.c'\" unpacked with wrong size!
fi
chmod +x 'menu.c'
# end of 'menu.c'
fi
if test -f 'menu.o.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'menu.o.uu'\"
else
echo shar: Extracting \"'menu.o.uu'\" \(2463 characters\)
sed "s/^X//" >'menu.o.uu' <<'END_OF_FILE'
Xbegin 700 menu.o
XM```#YP````````/H`````3(```````/J```!"P`!`0``$P```````````.@`^
XM``````$!```3````````````X@```````0$``!,```````````#<```````!I
XM`0``$P```````````-0```````$!```3````````````S@```````0$``!,`@
XM``````````#*```````!`0``$P```````````,0```````$!```3````````X
XM````N@```````0$``!,```````````"T```````!`0``$P```````````*X`&
XM``````$!```3````````````J@```````0$``!,```````````"D```````!Y
XM`0``$P```````````)X```````$!```3````````````E````````0$``!,`P
XM``````````".```````!`0``$P```````````(0```````$!```3````````\
XM````=````````0$``!,```````````!H`````````8H`.``"`&,`"@!2````U
XM`````&0`````````````__\``````#@`#`!C``H`4@````````!X````````=
XM`````/__```!S@``````8P`*`%(```````````````````````#__P```?``[
XM```*`&,`"@!6`````````!0`````3P``````__\```(2````%`!C``H`5@``9
XM```````H`````%,``````/__```"-````!X`8P`*`%(`````````/```````(
XM``````#__P```E8````H`&,`"@!2`````````%````````````%H__\```)XN
XM````,@!C``H`4@````````",`````````````/__`````````#P`8P`*`%8`Z
XM````````H`````!1``````#__P```KP``````%L`"@!6`````````+0`````<
XM6@``````__\```+>````"@!;``H`5@````````#(`````%@``````/__```#>
XM`````!0`6P`*`%8`````````W`````!#``````#__P```R(````>`%L`"@!6J
XM`````````/``````5@``````__\`````````*`!;``H`0@````````$$````8
XM`````````/__```#9@``````@P`*`%(````````!&`````````````#__P``=
XM`X@````*`(,`"@%;`````````2P`````````````__\```.J````%`"#``H!X
XM4P````````%``````````````/__`````````!X`@P`*`%,````````!5```E
XM``````````#__P```^H``````&,`"@`!````1@```:P`````````````!`@`8
XM<````%L`"@`!````)@```IH`````````````````V````(,`"@`!````````^
XM`T0``````````````\Q.<0```^P````G`````````6@```%Z```!G````:P`9
XM``&^```!S@```>````'P```"`@```A(```(D```"-````D8```)0```"5@``&
XM`F@```**```"F@```JP```*\```"S@```MX```+P```#`````Q(```,T```#R
XM1````U8```-F```#>````X@```.:```#O````\P```/>```#Z@```_P```0:B
XM```$)@```!4````!````#````"`````T````2````%P```!P````A````)@`0
XM``"L````P````-0```#H````_````1````$D```!.````4P```%@```#V@``>
XM`_@```06`````````^\!```"7TE497AT`````````0```E]-,$DT```````!T
XM:`$```%?33`````!K`$```%?33$````"F@$```%?33(````#1`$```)?5&AE8
XM365N=0```\P!```"7TUY365N=0````0F`````````_(```/H`````3$`````=
XM``/I````.R!0<F5F97)E;F-E<R`@("`@("`@("`@("`@("`@("`@("`@("``9
XM("!%9&ET("`@("`@("`@("`@("`@("`@("`@("`@(``@4')O:F5C="`@("`@]
XM("`@("`@("`@("`@("`@("`@("``16%T($ET(%1O;P``2&%V92!9;W5R($-A@
XM:V4``$%U=&\@4V%V90!3;W5N9`!%<F%S92!!;&P`4&%S=&4`0V]P>0``0W5T.
XM`%5N9&\``%%U:70``$%B;W5T+BXN``!$<F%F=`!.3%$`4')I;G0`4V%V94%SJ
X6``!3879E``!/<&5N``!.97<````#\@!$$
X``
Xend
Xsize 1732
END_OF_FILE
if test 2463 -ne `wc -c <'menu.o.uu'`; then
    echo shar: \"'menu.o.uu'\" unpacked with wrong size!
fi
# end of 'menu.o.uu'
fi
if test -f 'menu.test' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'menu.test'\"
else
echo shar: Extracting \"'menu.test'\" \(324 characters\)
sed "s/^X//" >'menu.test' <<'END_OF_FILE'
Xmenu,,Project
Xitem,,New,,
Xitem,,Open,,O
Xitem,,Save,,S
Xitem,,SaveAs,,
Xitem,,Print,,
Xsubi,,NLQ,,
Xsubi,,Draft,,
Xitem,,About...,,
Xitem,,Quit,,Q
Xmenu,,Edit
Xitem,,Undo,,Z
Xitem,,Cut,,X
Xitem,,Copy,,C
Xitem,,Paste,,V
Xitem,D,Erase All,,
Xmenu,,Preferences
Xitem,,Sound,,
Xitem,CTS,Auto Save,,
Xitem,CS,Have Your Cake,,
Xitem,C,Eat It Too,,
END_OF_FILE
if test 324 -ne `wc -c <'menu.test'`; then
    echo shar: \"'menu.test'\" unpacked with wrong size!
fi
chmod +x 'menu.test'
# end of 'menu.test'
fi
if test -f 'testmenu.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'testmenu.c'\"
else
echo shar: Extracting \"'testmenu.c'\" \(5699 characters\)
sed "s/^X//" >'testmenu.c' <<'END_OF_FILE'
X/* TestMenu.c V1.0 (14-oct-90) - by Hans Jansen
X *
X * Program to exercise the output from MakeMenu V1.0, enabling you to
X * quickly prototype a menu for your own application program.
X *
X * This program was adapted from the RKM example Menus.c (from chapter
X * Intuition:Menus, page 125-133; also published on Fish Disk #344, the
X * "Libs&DevsCompanion"). The original program carried the following
X * copyright statement:
X */
X 
X/* Copyright (c) 1990 Commodore-Amiga, Inc.
X *
X * This example is provided in electronic form by Commodore-Amiga, Inc. for
X * use with the 1.3 revisions of the Addison-Wesley Amiga reference manuals. 
X * The 1.3 Addison-Wesley Amiga Reference Manual series contains additional
X * information on the correct usage of the techniques and operating system
X * functions presented in this example.  The source and executable code of
X * this example may only be distributed in free electronic form, via bulletin
X * board or as part of a fully non-commercial and freely redistributable
X * diskette.  Both the source and executable code (including comments) must
X * be included, without modification, in any copy.  This example may not be
X * published in printed form or distributed with any commercial product.
X * However, the programming techniques and support routines set forth in
X * this example may be used in the development of original executable
X * software products for Commodore Amiga computers.
X * All other rights reserved.
X * This example is provided "as-is" and is subject to change; no warranties
X * are made.  All use is at your own risk.  No liability or responsibility
X * is assumed.
X */
X
X#include <exec/types.h>
X#include <intuition/intuition.h>
X#include <intuition/intuitionbase.h>
X#include <libraries/dos.h>
X#include <stdlib.h>
X#include <stdio.h>
X#include <string.h>
X
X/* Use lowest non-obsolete version that supplies the functions you need. */
X#define LIB_REV 33
X
X/* prototypes */
XUBYTE    handleIDCMP(struct Window *);
XVOID     OpenAll(VOID);
XVOID     cleanExit(int);
X
X/* Globals */
Xstruct   IntuitionBase *IntuitionBase = NULL;
Xstruct   GfxBase       *GfxBase = NULL; 
Xstruct   Window *window = NULL;
X
Xstruct IntuiText WinText =
X       {3, 0, JAM2, 20, 20, NULL, "Activate MenuItem or CloseGadget",NULL};
X
Xstruct NewWindow NewWindow = {
X    0, 10, 640, 100, 2, 1, MENUPICK|CLOSEWINDOW,
X    WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE|NOCAREREFRESH,
X    NULL, NULL, "TestMenu V1.0 (12-oct-90) - by Hans Jansen",
X    NULL, NULL, 0, 0, -1, -1, WBENCHSCREEN
X    };
X
Xextern struct Menu *MyMenu;
X
XVOID main (int argc, char *argv[])
X{
X/* Declare variables here */
XULONG  signalmask, signals;
XUBYTE  done = 0;
X
XOpenAll();
X
X/* Set up the signals that you want to hear about ... */
Xsignalmask = 1L << window->UserPort->mp_SigBit;
X
X/* And wait to hear from your signals */      
Xwhile( !done )
X   {
X   signals = Wait(signalmask);    
X   if(signals & signalmask)
X      done = handleIDCMP(window);
X   };
X
X/* Exit the program */
XcleanExit(RETURN_OK);
X}
X
X
X/* Handle the IDCMP messages */
XUBYTE handleIDCMP( struct Window *win )
X{
XUBYTE  flag = 0;
XUSHORT code, selection, flags;
Xstruct IntuiMessage *message = NULL;
XULONG  class, menuNum, itemNum, subNum;
X
X/* Examine pending messages */
Xwhile(message = (struct IntuiMessage *)GetMsg(win->UserPort))
X   {
X   class = message->Class;
X   code = message->Code;
X 
X/* When we're through with a message, reply */
X   ReplyMsg((struct Message *)message);
X   
X/* See what events occurred */
X   switch( class )
X      {
X      case CLOSEWINDOW:
X         flag = 1;
X         break;
X      case MENUPICK:
X         selection = code;
X         while(selection != -1) /* MENUNULL does not work for PDC V3.33... */
X            {
X/*	(uncomment this to see why...)
X	    printf ("selection = %x, MENUNULL = %x\n", selection, MENUNULL);
X*/
X            menuNum = MENUNUM(selection);
X            itemNum = ITEMNUM(selection);
X            subNum  = SUBNUM(selection);
X            flags = ((struct MenuItem *)
X                    ItemAddress(MyMenu,(LONG)selection))->Flags;
X	    /* Show the selection (in the invoking CLI window!) */
X            printf("Selected menu %d, item %d", menuNum, itemNum);
X	    if (subNum != NOSUB) printf (", subitem %d", subNum);
X            if(flags&CHECKED) printf(" (Checked) ");
X	    printf ("\n");
X	    /* See if there are more selections */
X            selection = ((struct MenuItem *)ItemAddress
X              (MyMenu,(LONG)selection))->NextSelect;
X         } /* end while */
X         break; /* case of MENUPICK */
X      default:
X         break;
X      } /* end switch */
X   } /* end while */
Xreturn(flag);
X}
X
X
X/* Open the needed libraries, windows, etc. */
XVOID OpenAll (VOID)
X{
X/* Open the Intuition Library */
XIntuitionBase = (struct IntuitionBase *)
X    OpenLibrary( "intuition.library",LIB_REV);
Xif(IntuitionBase == NULL)
X    cleanExit(RETURN_WARN);
X
X/* Open the Graphics Library */
XGfxBase = (struct GfxBase *)
X    OpenLibrary("graphics.library", LIB_REV);
Xif(GfxBase == NULL)
X    cleanExit(RETURN_WARN);
X
X/* Open the window */
Xwindow = OpenWindow(&NewWindow);
Xif(window == NULL)
X    cleanExit(RETURN_WARN);
X
X/* Give a brief explanation of the program */
XPrintIText(window->RPort,&WinText,0,0);
X
X/* attach the menu to the window */
XSetMenuStrip(window, MyMenu);
X}
X
X
X/* Free up all the resources that we where using */
XVOID cleanExit (int returnValue)
X{
Xif(window)
X   {
X/* If there is a menu strip, then remove it */
X   if(window->MenuStrip)
X      ClearMenuStrip(window);
X
X/* Close the window */
X   CloseWindow(window);
X   }
X
X/* Close the library, and then exit */
Xif(GfxBase)
X   CloseLibrary((struct Library *)GfxBase);
X
Xif(IntuitionBase)
X   CloseLibrary((struct Library *)IntuitionBase);
Xexit(returnValue);
X}
END_OF_FILE
if test 5699 -ne `wc -c <'testmenu.c'`; then
    echo shar: \"'testmenu.c'\" unpacked with wrong size!
fi
chmod +x 'testmenu.c'
# end of 'testmenu.c'
fi
if test -f 'testmenu.o.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'testmenu.o.uu'\"
else
echo shar: Extracting \"'testmenu.o.uu'\" \(2424 characters\)
sed "s/^X//" >'testmenu.o.uu' <<'END_OF_FILE'
Xbegin 700 testmenu.o
XM```#YP````````/H`````3(```````/J````%`````````````````,``0``-
XM%``4`````````SP`````````"@*``&0"`0```P```A`.``````````````,00
XM````````````````_____P`!```#[`````(````!````&````#H````````#$
XM[P$```1?26YT=6ET:6]N0F%S90````````$```)?1V9X0F%S90````0!```":
XM7W=I;F1O=P`````(`0```E]7:6Y497AT````#`$```-?3F5W5VEN9&]W````%
XM```@`````````_(```/H`````3$```````/I````V$Y5__9(YQP`<``H`$ZYX
XM```!FG`!('D````((&@`5A(H``]T`!0!(@+CH"8`2H1F(B\#3KD`````6$\J*
XM`,"#9Q`O.0````A.N0```&183R@`8-I"ITZY```"3%A/3-\`.$Y=3G5.5?_D:
XM2.<?.$7Y`````'``+`!P`"@`(&T`""\H`%9.N0````!83R@`9P`!`B!$*V@`Q
XM%/_P($0[:``8__PO!$ZY`````%A/<``@+?_P3KD`````````S@```@````#67
XM```!``````````&,<`$L`&```+AP`#`M__Q(P"8`#(/_____9P``H"`#`H``P
XM```?*$`@`^J``H`````_)D!P"R(#X*$"@0```!\J`2\#+SD`````3KD`````*
XM4$\@0#`H``Q(P"X`+PLO#$AY```"]DZ2WOP`#`R%````'V<,+P5(>0```NA.=
XMDE!/(`<"@````0!G"DAY```"W$Z26$](>0```MI.DEA/+P,O.0````!.N0``W
XM``!03R!`,"@`($C`)@!@`/]:8````F``_NP@!DS?'/A.74YU3E4``$CG`#!%D
XM^0````A'^0```DQ(>``A2'D```+(3KD`````4$\CP``````@.0````!F"$AX+
XM``5.DUA/2'@`(4AY```"MDZY`````%!/(\`````$(#D````$9@A(>``%3I-8]
XM3TAY````($ZY`````%A/)(`@$F8(2'@`!4Z36$]"IT*G2'D````,(%(O*``R)
XM3KD`````WOP`$"\Y`````"\23KD`````4$],WPP`3EU.=4Y5```O"D7Y````_
XM""`29QP@4B`H`!QG"B\23KD`````6$\O$DZY`````%A/(#D````$9PXO.0``<
XM``1.N0````!83R`Y`````&<.+SD`````3KD`````6$\O+0`(3KD`````6$\D,
XM7TY=3G5G<F%P:&EC<RYL:6)R87)Y``!I;G1U:71I;VXN;&EB<F%R>0`*`"`H9
XM0VAE8VME9"D@`"P@<W5B:71E;2`E9```4V5L96-T960@;65N=2`E9"P@:71E3
XM;2`E9`!497-T365N=2!6,2XP("@Q,BUO8W0M.3`I("T@8GD@2&%N<R!*86YS+
XM96X``$%C=&EV871E($UE;G5)=&5M(&]R($-L;W-E1V%D9V5T``!.<0```^P`9
XM```.`````````!8```!"```!I````<(```'(```!Z@```?````(````"(```7
XM`E0```)Z```"@@```I````*8````#0````$````.````2````%8```"V````R
XMO@```,H```$N```!1````5@```%B```!J@```;0```'<`````````^\!```"J
XM7VUA:6X``````````0```U]H86YD;&5)1$--4````&0!```"7T]P96Y!;&P`Q
XM``&:`0```U]C;&5A;D5X:70``````DR!```"7U=A:70````````!````-($`6
XM``)?<')I;G1F``````$```!N@0```E]'971-<V<``````0```(2!```#7U)EK
XM<&QY37-G`````````0```*2!```"+F-S=VET8V@````!````LH$```)?37E-O
XM96YU``````,```$2```!;@```C:!```#7TET96U!9&1R97-S`````@```1@`8
XM``%T@0```U]/<&5N3&EB<F%R>0````(```&Z```!XH$```-?3W!E;E=I;F1O5
XM=P`````!```"!H$```-?4')I;G1)5&5X=``````!```"+($```1?4V5T365N]
XM=5-T<FEP`````````0```CZ!```$7T-L96%R365N=5-T<FEP``````$```)HE
XM@0```U]#;&]S95=I;F1O=P````$```)R@0``!%]#;&]S94QI8G)A<GD`````U
XG```"```"B````IZ!```"7V5X:70````````!```"J@````````/RJ
X``
Xend
Xsize 1704
END_OF_FILE
if test 2424 -ne `wc -c <'testmenu.o.uu'`; then
    echo shar: \"'testmenu.o.uu'\" unpacked with wrong size!
fi
# end of 'testmenu.o.uu'
fi
echo shar: End of archive 1 \(of 2\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked both archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.