home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
No Fragments Archive 10: Diskmags
/
nf_archive_10.iso
/
MAGS
/
ST_USER
/
1993
/
USERJN93.MSA
/
DEVPAC2_MENUTEST.S
< prev
next >
Wrap
Text File
|
1993-04-20
|
4KB
|
221 lines
* a sample GEM program supplied with DevpacST version 2
* Menu test program using the AES, VDI not required
* last changed:19.4.88
opt x+ dump long labels for debugging
include gemmacro.s
MN_SELECTED equ 10
* the program proper
start move.l 4(a7),a3 base page
move.l #mystack,a7
move.l $c(a3),d0 text len
add.l $14(a3),d0 data len
add.l $1c(a3),d0 BSS len
add.l #$100,d0 basepage
move.l d0,-(sp)
move.l a3,-(sp)
clr.w -(sp)
move.w #$4a,-(sp)
trap #1 shrink memory
lea 12(sp),sp
appl_init
move.w d0,ap_id store the application id
* set the mouse to an arrow
graf_mouse #0 arrow please
bsr load_resources
menu_bar #menu_start,#1 display it
clr.w check_state
* the main loop of the application
* the only interesting events are messages
waitforevent
evnt_mesag #messagebuf
move.l #messagebuf,a0
move.w (a0),d0 message type
cmp.w #MN_SELECTED,d0
beq handle_menu
* nothing I'm interested in so try again
bra waitforevent
* to go away various things have to be tidied up
quit
menu_bar #menu_start,#0
appl_exit tell GEM I've finished
* now quit to the desktop
clr.w -(a7) status code
move.w #$4c,-(a7) P_TERM
trap #1 and go away
* menu handling after one has been clicked on
handle_menu
move.w messagebuf+8,d4 menu item
bsr.s do_menu act on it
* now unlight the menu title
menu_tnormal #menu_start,messagebuf+6,#1
bra waitforevent and try again
* given a menu click (d4) work out what it is and act on it
do_menu cmp.w #m_about,d4
beq.s do_about
cmp.w #m_hello,d4
beq.s do_hello
cmp.w #m_quit,d4
beq quit
cmp.w #m_check,d4
beq.s do_check
cmp.w #m_dialog,d4
beq.s do_dialog
rts
do_about
form_alert #1,#about_alert
rts
do_hello
form_alert #1,#hello_alert
rts
do_check
eor.w #1,check_state
menu_icheck #menu_start,#m_check,check_state
rts
do_dialog
form_center #my_dialog
movem.w int_out+2,d3-d6 d3-d6 are dialog co-ords
form_dial #0,d3,d4,d5,d6,d3,d4,d5,d6
objc_draw #my_dialog,#0,#2,d3,d4,d5,d6
form_do #my_dialog,#0
mulu #ob_sizeof,d0
move.l #my_dialog,a0
bclr #0,ob_state+1(a0,d0.w) un-select button
form_dial #3,d3,d4,d5,d6,d3,d4,d5,d6
rts
*************************
* RESOURCES *
*************************
* done the hard way......
ob_flags equ 8
ob_state equ 10
ob_sizeof equ 24
G_BOX equ 20
G_STRING equ 28
G_BUTTON equ 26
NONE equ 0
SELECTABLE equ 1
DEFAULT equ 2
EXIT equ 4
LASTOB equ $20
NORMAL equ 0
OUTLINED equ $10
nextobj set 1
object macro next,head,tail,type,flags,state
dc.w \1,\2,\3
dc.w G_\4,\5,\6
nextobj set nextobj+1
endm
* doesn't actually load a resource file as we don't have one, but
* instead converts the built-in resources co-ordinates
load_resources
lea menu_start(pc),a3
bsr.s convert_resource
lea my_dialog(pc),a3
bsr.s convert_resource
rts
* given an object tree at a3, fixup its co-ordinates
convert_resource
moveq #0,d3
move.l a3,a0
.loop move.l a0,-(sp)
rsrc_obfix a3,d3
move.l (sp)+,a0
btst #5,ob_flags+1(a0)
bne.s .done
addq.w #1,d3
add.w #ob_sizeof,a0
bra.s .loop until LASTOB
.done rts
* once a menu is stabilised it is best to Insert the file
menu_start
include menutest.mnu
even
nextobj set 1
my_dialog
object 0,nextobj,nextobj+1,BOX,NONE,NORMAL
dc.l 2<<16+$1181
dc.w 0,0,35,10
object nextobj,-1,-1,STRING,NONE,OUTLINED
dc.l titletx
dc.w 5,2,25,2
object 0,-1,-1,BUTTON,SELECTABLE!DEFAULT!EXIT!LASTOB,NORMAL
dc.l buttontx
dc.w 12,7,12,2
* menu numbers are best calculated using the RS directive
rsset 4
* titles first
rs.b 1 File title
rs.b 1 Test title
* other titles
rs.b 2
* now the items
m_about rs.b 1 About item
rs.b 6+1 other items under Desk
rs.b 1 skip File title
m_hello rs.b 1
m_quit rs.b 1
rs.b 1 skip Test item
m_check rs.b 1
rs.b 1
m_dialog rs.b 1
SECTION DATA
about_alert dc.b '[1][A test program written|'
dc.b 'with DevpacST Version 2][ Great ]',0
hello_alert dc.b '[3][ ][ Hello! ]',0
titletx dc.b ' A Hand-Made Dialog Box!',0
buttontx dc.b 'Click me',0
SECTION BSS
* global variables
ws_handle ds.w 1
ap_id ds.w 1
messagebuf ds.b 16
check_state ds.w 1
ds.l 100 stack space
mystack ds.w 1 (stacks go backwards)
* if not linking then include the run-times
IFEQ __LK
include aeslib.s
* VDI not needed!!
ENDC