<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=CW_PROG3.S</id>
	<title>CW PROG3.S - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=CW_PROG3.S"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;action=history"/>
	<updated>2026-05-13T22:52:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11640&amp;oldid=prev</id>
		<title>&gt;Wongck at 12:16, 13 October 2011</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11640&amp;oldid=prev"/>
		<updated>2011-10-13T12:16:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:16, 13 October 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l466&quot;&gt;Line 466:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 466:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[CW_CHAPTER_3]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[CW_CHAPTER_3]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Programming&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Assembly Language Workshop&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Wongck</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11639&amp;oldid=prev</id>
		<title>&gt;Silver Surfer: Added category</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11639&amp;oldid=prev"/>
		<updated>2009-05-02T17:26:45Z</updated>

		<summary type="html">&lt;p&gt;Added category&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:26, 2 May 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l466&quot;&gt;Line 466:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 466:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[CW_CHAPTER_3]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Back to [[CW_CHAPTER_3]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>&gt;Silver Surfer</name></author>
	</entry>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11638&amp;oldid=prev</id>
		<title>&gt;Zorro 2 at 13:56, 24 October 2006</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=CW_PROG3.S&amp;diff=11638&amp;oldid=prev"/>
		<updated>2006-10-24T13:56:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
;---------------------------------------------------------------------&lt;br /&gt;
; THE ST ASSEMBLY LANGUAGE WORKSHOP, VOLUME 2&lt;br /&gt;
; PROGRAM 3&lt;br /&gt;
;&lt;br /&gt;
; COPYRIGHT 1992 BY CLAYTON WALNUM&lt;br /&gt;
;---------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        include MENU.H&lt;br /&gt;
&lt;br /&gt;
R_TREE          equ     0&lt;br /&gt;
ARROW           equ     0&lt;br /&gt;
NORMAL          equ     1&lt;br /&gt;
MN_SELECTED     equ     10&lt;br /&gt;
NUM_MENUS       equ     11&lt;br /&gt;
&lt;br /&gt;
PTERM0          equ     0&lt;br /&gt;
APPL_INIT       equ     10&lt;br /&gt;
APPL_EXIT       equ     19&lt;br /&gt;
EVNT_MESAG      equ     23&lt;br /&gt;
MENU_BAR        equ     30&lt;br /&gt;
MENU_ICHECK     equ     31&lt;br /&gt;
MENU_IENABLE    equ     32&lt;br /&gt;
MENU_TNORMAL    equ     33&lt;br /&gt;
MENU_TEXT       equ     34&lt;br /&gt;
FORM_ALERT      equ     52&lt;br /&gt;
MSHRINK         equ     74&lt;br /&gt;
GRAF_MOUSE      equ     78&lt;br /&gt;
RSRC_LOAD       equ     110&lt;br /&gt;
RSRC_FREE       equ     111&lt;br /&gt;
RSRC_GADDR      equ     112&lt;br /&gt;
AES_OPCODE      equ     200&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
; MACROS&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
; This macro calls up a simple, one-button GEM alert box, using the&lt;br /&gt;
; form_alert AES function. It requires two parameters: the default&lt;br /&gt;
; button number and the address of the alert-box string. Because this&lt;br /&gt;
; alert box will have only one button, the value for the default&lt;br /&gt;
; button must be 0 for no default or 1 for button 1.&lt;br /&gt;
;-------------------------------------------------------------------- &lt;br /&gt;
alert   macro&lt;br /&gt;
        ifc     '','\2'&lt;br /&gt;
        fail    Missing parameter!&lt;br /&gt;
        mexit&lt;br /&gt;
        endc&lt;br /&gt;
        move    #FORM_ALERT,control0&lt;br /&gt;
        move    #1,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    #\1,int_in0&lt;br /&gt;
        move.l  #\2,addr_in0&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        endm&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
; MAIN PROGRAM&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
        text&lt;br /&gt;
&lt;br /&gt;
; Calculate the size of the program area.&lt;br /&gt;
&lt;br /&gt;
        move.l  a7,a5                   ; Save addr of TPA.&lt;br /&gt;
        lea     stack,sp                ; Load addr of our stack.&lt;br /&gt;
        &lt;br /&gt;
        move.l  4(a5),a5                ; Get addr of TPA.              &lt;br /&gt;
        move.l  12(a5),d0               ; Get len of text segment.&lt;br /&gt;
        add.l   20(a5),d0               ; Add len of data segment.&lt;br /&gt;
        add.l   28(a5),d0               ; Add len of BSS segment.&lt;br /&gt;
        add.l   #$100,d0                ; Add len of TPA. &lt;br /&gt;
&lt;br /&gt;
; Release unused memory back to the system.&lt;br /&gt;
        &lt;br /&gt;
        move.l  d0,-(sp)                ; Push size of program on stack.&lt;br /&gt;
        move.l  a5,-(sp)                ; Push program addr on stack.&lt;br /&gt;
        clr     -(sp)                   ; Clear dummy word on stack.    &lt;br /&gt;
        move    #MSHRINK,-(sp)          ; Push Mshrink opcode.&lt;br /&gt;
        trap    #1                      ; Call GEMDOS.&lt;br /&gt;
        add.l   #12,sp                  ; Reset stack pointer.&lt;br /&gt;
&lt;br /&gt;
; Clear some fields of the global array.&lt;br /&gt;
&lt;br /&gt;
        clr.l   ap_ptree        &lt;br /&gt;
        clr.l   ap_1resv&lt;br /&gt;
        clr.l   ap_2resv&lt;br /&gt;
        clr.l   ap_3resv&lt;br /&gt;
        clr.l   ap_4resv&lt;br /&gt;
&lt;br /&gt;
; Call appl_init to initialize application.&lt;br /&gt;
&lt;br /&gt;
        move    #APPL_INIT,control0     ; Place opcode in control array.&lt;br /&gt;
        clr     control1                ; Load length of init_in. &lt;br /&gt;
        move    #1,control2             ; Load length of int_out.&lt;br /&gt;
        clr     control3                ; Load length of addr_in.&lt;br /&gt;
        clr     control4                ; Load length of addr_out.&lt;br /&gt;
        bsr     aes                     ; Call the AES.&lt;br /&gt;
        cmpi    #$FFFF,ap_id            ; Error?&lt;br /&gt;
        beq     end                     ; Yep.  Outta here.&lt;br /&gt;
&lt;br /&gt;
; Change mouse pointer back to arrow.&lt;br /&gt;
&lt;br /&gt;
        move    #GRAF_MOUSE,control0&lt;br /&gt;
        move    #1,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    #ARROW,int_in0          ; Mouse form number.&lt;br /&gt;
        clr.l   addr_in0                ; Use 0 for address of form.&lt;br /&gt;
        bsr     aes     &lt;br /&gt;
&lt;br /&gt;
; Load resource file.&lt;br /&gt;
&lt;br /&gt;
        move    #RSRC_LOAD,control0&lt;br /&gt;
        clr     control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move.l  #rsrc_file,addr_in0     ; Addr of resource file name.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        tst     int_out0                ; Did the resource load okay?&lt;br /&gt;
        bne     rsrc_okay               ; Yep.&lt;br /&gt;
        alert   1,alert5                ; &amp;quot;Resource load error!&amp;quot;&lt;br /&gt;
        bra     exit&lt;br /&gt;
&lt;br /&gt;
; Get resource address.&lt;br /&gt;
        &lt;br /&gt;
rsrc_okay:&lt;br /&gt;
        move    #RSRC_GADDR,control0&lt;br /&gt;
        move    #2,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        clr     control3&lt;br /&gt;
        move    #1,control4&lt;br /&gt;
        move    #R_TREE,int_in0         ; Type number of data.&lt;br /&gt;
        move    #TREE00,int_in1         ; Array index of data.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        tst     int_out0                ; Was there an error?&lt;br /&gt;
        bne     addr_okay               ; Nope.&lt;br /&gt;
        alert   1,alert6                ; &amp;quot;Resource address error!&amp;quot;&lt;br /&gt;
        bra     exit&lt;br /&gt;
&lt;br /&gt;
; Show menu bar.&lt;br /&gt;
&lt;br /&gt;
addr_okay:&lt;br /&gt;
        move.l  addr_out,menu_adr       ; Save addr of menu resource.&lt;br /&gt;
        move    #MENU_BAR,control0&lt;br /&gt;
        move    #1,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    #1,int_in0              ; Set flag to show menu.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of menu resource.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
&lt;br /&gt;
; Event loop.&lt;br /&gt;
&lt;br /&gt;
event_loop:&lt;br /&gt;
        move    #EVNT_MESAG,control0&lt;br /&gt;
        clr     control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move.l  #msgbuf,addr_in0        ; Address of message buffer.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
&lt;br /&gt;
; Decipher message.&lt;br /&gt;
&lt;br /&gt;
        cmpi    #MN_SELECTED,msgbuf0&lt;br /&gt;
        bne     event_loop&lt;br /&gt;
        move    #NUM_MENUS-1,d5         ; Init loop counter.&lt;br /&gt;
        move    d5,d6                   ; Init the...&lt;br /&gt;
        add     d6,d6                   ; index register.&lt;br /&gt;
        lea     menu_ids,a5             ; Get addr of ID table.&lt;br /&gt;
        move    msgbuf4,d4              ; Get menu ID.&lt;br /&gt;
find_id:&lt;br /&gt;
        cmp     0(a5,d6),d4             ; Is this the ID?&lt;br /&gt;
        beq     found_id                ; Yep.&lt;br /&gt;
        subi    #2,d6                   ; No, so calculate new index...&lt;br /&gt;
        dbra    d5,find_id              ; and loop back for another try.&lt;br /&gt;
        bra     event_loop              ; ID not in table. Whoops!&lt;br /&gt;
&lt;br /&gt;
found_id:&lt;br /&gt;
        lea     menu_vecs,a5            ; Get addr of vector table.&lt;br /&gt;
        add     d6,d6                   ; Calculate index.&lt;br /&gt;
        move.l  0(a5,d6),a6             ; Get vector.&lt;br /&gt;
        jmp     (a6)                    ; Jump to proper routine.&lt;br /&gt;
&lt;br /&gt;
; Respond to menu item chosen.&lt;br /&gt;
        &lt;br /&gt;
info:&lt;br /&gt;
        alert   1,alert1&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
load:&lt;br /&gt;
        alert   1,alert2&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
save:&lt;br /&gt;
        alert   1,alert3&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
option1:&lt;br /&gt;
        tst     optn1                   ; Is Option1 checked?&lt;br /&gt;
        beq     setcheck1               ; No. Go add checkmark.&lt;br /&gt;
        clr     optn1                   ; Yes. Clear checkmark.&lt;br /&gt;
        clr     check_flag&lt;br /&gt;
        bra     check&lt;br /&gt;
setcheck1:&lt;br /&gt;
        move    #1,optn1                ; Set option1 checkmark.&lt;br /&gt;
        move    #1,check_flag&lt;br /&gt;
        bra     check&lt;br /&gt;
&lt;br /&gt;
option2:&lt;br /&gt;
        tst     optn2                   ; Is option2 checked?&lt;br /&gt;
        beq     setcheck2               ; No. Go add checkmark.&lt;br /&gt;
        clr     optn2                   ; Yes. Clear checkmark.&lt;br /&gt;
        clr     check_flag&lt;br /&gt;
        bra     check&lt;br /&gt;
setcheck2:&lt;br /&gt;
        move    #1,optn2                ; Set option2 checkmark&lt;br /&gt;
        move    #1,check_flag&lt;br /&gt;
        bra     check&lt;br /&gt;
        &lt;br /&gt;
option3:&lt;br /&gt;
        tst     optn3                   ; Is option3 checked?&lt;br /&gt;
        beq     setcheck3               ; No. Go add checkmark.&lt;br /&gt;
        clr     optn3                   ; Yes. Clear checkmark.&lt;br /&gt;
        clr     check_flag&lt;br /&gt;
        bra     check&lt;br /&gt;
setcheck3:&lt;br /&gt;
        move    #1,optn3                ; Set option3 checkmark.&lt;br /&gt;
        move    #1,check_flag&lt;br /&gt;
&lt;br /&gt;
check:&lt;br /&gt;
        move    #MENU_ICHECK,control0&lt;br /&gt;
        move    #2,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    msgbuf4,int_in0         ; Menu item number.&lt;br /&gt;
        move    check_flag,int_in1      ; Checkmark flag.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of resource tree.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
onoff:&lt;br /&gt;
        tst     on                      ; Are selections on?&lt;br /&gt;
        beq     turn_on                 ; No, so turn them on.&lt;br /&gt;
        lea     on_str,a5               ; Yes. Get address of &amp;quot;On.&amp;quot;&lt;br /&gt;
        clr     on                      ; Clear flag.&lt;br /&gt;
        bra     enable0&lt;br /&gt;
turn_on:&lt;br /&gt;
        lea     off_str,a5              ; Get address of &amp;quot;Off.&amp;quot;&lt;br /&gt;
        move    #1,on                   ; Set flag.&lt;br /&gt;
&lt;br /&gt;
enable0:&lt;br /&gt;
        move    #2,d5                   ; Init loop counter.&lt;br /&gt;
        move    #SELECT1,d6             ; Get menu item number.&lt;br /&gt;
enable1:&lt;br /&gt;
        move    #MENU_IENABLE,control0&lt;br /&gt;
        move    #2,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    d6,int_in0              ; Menu item number.&lt;br /&gt;
        move    on,int_in1              ; On/Off flag.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of resource tree.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        addi    #1,d6                   ; Next menu item number.&lt;br /&gt;
        dbra    d5,enable1&lt;br /&gt;
&lt;br /&gt;
; Change text in menu.&lt;br /&gt;
&lt;br /&gt;
        move    #MENU_TEXT,control0&lt;br /&gt;
        move    #1,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #2,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    #ONOFF,int_in0          ; Menu item number.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of resource tree.&lt;br /&gt;
        move.l  a5,addr_in1             ; Address of new menu string.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
select1:&lt;br /&gt;
        move.b  #'1',alert4+30          ; Add '1' to alert string.&lt;br /&gt;
        alert   1,alert4&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
select2:&lt;br /&gt;
        move.b  #'2',alert4+30          ; Add '2' to alert string.&lt;br /&gt;
        alert   1,alert4&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
select3:&lt;br /&gt;
        move.b  #'3',alert4+30          ; Add '3' to alert string.&lt;br /&gt;
        alert   1,alert4&lt;br /&gt;
        bsr     menu_normal&lt;br /&gt;
        bra     event_loop&lt;br /&gt;
&lt;br /&gt;
; Remove menu bar.&lt;br /&gt;
&lt;br /&gt;
quit:&lt;br /&gt;
        move    #MENU_BAR,control0&lt;br /&gt;
        move    #1,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        clr     int_in0                 ; Menu display flag.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of resource tree.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        &lt;br /&gt;
; Release resource space.&lt;br /&gt;
&lt;br /&gt;
        move    #RSRC_FREE,control0&lt;br /&gt;
        clr     control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        clr     control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        &lt;br /&gt;
; Close down application.&lt;br /&gt;
&lt;br /&gt;
exit:&lt;br /&gt;
        move    #APPL_EXIT,control0&lt;br /&gt;
        move    #0,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #0,control3&lt;br /&gt;
        move    #0,control4&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        &lt;br /&gt;
end:&lt;br /&gt;
        move.w  #PTERM0,-(sp)           ; Back to desktop.&lt;br /&gt;
        trap    #1&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
; This subroutine calls the AES.  Before calling this subroutine, the&lt;br /&gt;
; program must have correctly initialized the AES control, int_in,&lt;br /&gt;
; and addr_in arrays.&lt;br /&gt;
;&lt;br /&gt;
; Input:        Appropriate values in the int_in, addr_in, and&lt;br /&gt;
;               control arrays.&lt;br /&gt;
; Output:       Appropriate values in the int_out, addr_out, and&lt;br /&gt;
;               global arrays.&lt;br /&gt;
; Regs changed: NONE&lt;br /&gt;
; Uses: apb, global, int_in, int_out, addr_in, addr_out&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
aes:&lt;br /&gt;
        movem.l a0-a7/d0-d7,-(sp)       ; Save registers.&lt;br /&gt;
        move.l  #apb,d1                 ; Load addr of apb.&lt;br /&gt;
        move.l  #AES_OPCODE,d0          ; Load AES opcode.&lt;br /&gt;
        trap    #2                      ; Call AES.&lt;br /&gt;
        movem.l (sp)+,a0-a7/d0-d7       ; Restore registers.&lt;br /&gt;
        rts&lt;br /&gt;
&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
; This subroutine unhighlights a menu title.&lt;br /&gt;
;&lt;br /&gt;
; Input:        Menu object # in msgbuf3.&lt;br /&gt;
;               Address of resource tree in menu_adr.&lt;br /&gt;
; Output:       Appropriate values in the int_out and global arrays.&lt;br /&gt;
; Regs changed: NONE&lt;br /&gt;
; Uses:         control, int_in, int_out, addr_in, msgbuf3, menu_adr&lt;br /&gt;
; Calls:        aes&lt;br /&gt;
;--------------------------------------------------------------------&lt;br /&gt;
menu_normal:&lt;br /&gt;
        move    #MENU_TNORMAL,control0&lt;br /&gt;
        move    #2,control1&lt;br /&gt;
        move    #1,control2&lt;br /&gt;
        move    #1,control3&lt;br /&gt;
        clr     control4&lt;br /&gt;
        move    msgbuf3,int_in0         ; Object number of menu title.&lt;br /&gt;
        move    #NORMAL,int_in1         ; Highlight flag.&lt;br /&gt;
        move.l  menu_adr,addr_in0       ; Address of resource tree.&lt;br /&gt;
        bsr     aes&lt;br /&gt;
        rts&lt;br /&gt;
        &lt;br /&gt;
        data&lt;br /&gt;
        &lt;br /&gt;
        even&lt;br /&gt;
optn1:          dc.w    1&lt;br /&gt;
optn2:          dc.w    0&lt;br /&gt;
optn3:          dc.w    0&lt;br /&gt;
on:             dc.w    1&lt;br /&gt;
&lt;br /&gt;
menu_ids:       dc.w    INFO,LOAD,SAVE,QUIT,OPTION1,OPTION2&lt;br /&gt;
                dc.w    OPTION3,ONOFF,SELECT1,SELECT2,SELECT3&lt;br /&gt;
menu_vecs:      dc.l    info,load,save,quit,option1,option2&lt;br /&gt;
                dc.l    option3,onoff,select1,select2,select3&lt;br /&gt;
        &lt;br /&gt;
apb:            dc.l    control,global,int_in,int_out,addr_in,addr_out&lt;br /&gt;
&lt;br /&gt;
rsrc_file:      dc.b    &amp;quot;MENU.RSC&amp;quot;,0&lt;br /&gt;
alert1:         dc.b    &amp;quot;[0][Assembly Language Workshop  |&amp;quot;&lt;br /&gt;
                dc.b    &amp;quot;      Demo program.| |     Copyright 1992|&amp;quot;&lt;br /&gt;
                dc.b    &amp;quot;    by Clayton Walnum][  OK  ]&amp;quot;,0&lt;br /&gt;
alert2:         dc.b    &amp;quot;[0][You clicked on  |    LOAD][  OK  ]&amp;quot;,0&lt;br /&gt;
alert3:         dc.b    &amp;quot;[0][You clicked on  |    SAVE][  OK  ]&amp;quot;,0&lt;br /&gt;
alert4:         dc.b    &amp;quot;[0][You clicked on  |   Select ][  OK  ]&amp;quot;,0&lt;br /&gt;
alert5:         dc.b    &amp;quot;[0][Resource load error!  ][  OK  ]&amp;quot;,0&lt;br /&gt;
alert6:         dc.b    &amp;quot;[0][Resource address error!][  OK  ]&amp;quot;,0&lt;br /&gt;
off_str:        dc.b    &amp;quot;    Off&amp;quot;,0&lt;br /&gt;
on_str:         dc.b    &amp;quot;    On&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
        bss&lt;br /&gt;
&lt;br /&gt;
        even&lt;br /&gt;
        &lt;br /&gt;
menu_adr:       ds.l    1&lt;br /&gt;
check_flag:     ds.w    1&lt;br /&gt;
&lt;br /&gt;
msgbuf:&lt;br /&gt;
msgbuf0:        ds.w    1&lt;br /&gt;
msgbuf1:        ds.w    1&lt;br /&gt;
msgbuf2:        ds.w    1&lt;br /&gt;
msgbuf3:        ds.w    1&lt;br /&gt;
msgbuf4:        ds.w    1&lt;br /&gt;
msgbuf5:        ds.w    1&lt;br /&gt;
msgbuf6:        ds.w    1&lt;br /&gt;
msgbuf7:        ds.w    1&lt;br /&gt;
&lt;br /&gt;
global:&lt;br /&gt;
ap_version:     ds.w    1&lt;br /&gt;
ap_count:       ds.w    1&lt;br /&gt;
ap_id:          ds.w    1&lt;br /&gt;
ap_private:     ds.l    1&lt;br /&gt;
ap_ptree:       ds.l    1&lt;br /&gt;
ap_1resv:       ds.l    1&lt;br /&gt;
ap_2resv:       ds.l    1&lt;br /&gt;
ap_3resv:       ds.l    1&lt;br /&gt;
ap_4resv:       ds.l    1&lt;br /&gt;
&lt;br /&gt;
control:&lt;br /&gt;
control0:       ds.w    1&lt;br /&gt;
control1:       ds.w    1&lt;br /&gt;
control2:       ds.w    1&lt;br /&gt;
control3:       ds.w    1&lt;br /&gt;
control4:       ds.w    1&lt;br /&gt;
&lt;br /&gt;
int_in:&lt;br /&gt;
int_in0:        ds.w    1&lt;br /&gt;
int_in1:        ds.w    1&lt;br /&gt;
int_out:&lt;br /&gt;
int_out0:       ds.w    1&lt;br /&gt;
int_out1:       ds.w    1&lt;br /&gt;
addr_in:&lt;br /&gt;
addr_in0:       ds.l    1&lt;br /&gt;
addr_in1:       ds.l    1&lt;br /&gt;
addr_out:       ds.l    1&lt;br /&gt;
&lt;br /&gt;
                ds.l    255&lt;br /&gt;
stack:          ds.l    1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[CW_CHAPTER_3]]&lt;/div&gt;</summary>
		<author><name>&gt;Zorro 2</name></author>
	</entry>
</feed>