Home » Archimedes archive » Acorn User » AU 1995-01.adf » !StarInfo_StarInfo » Lewis/!OldModes/ModSource

Lewis/!OldModes/ModSource

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1995-01.adf » !StarInfo_StarInfo
Filename: Lewis/!OldModes/ModSource
Read OK:
File size: 2E80 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >ModSource
   20
   30MODE MODE
   40ON ERROR ERROR EXT ERR,REPORT$+" at line "+STR$ERL
   50
   60DIM code% &4000
   70ws=12
   80sp=13
   90link=14
  100pc=15
  110
  120PROCinit_flags
  130
  140PROCinit_vars
  150
  160FOR pass=4 TO 7 STEP3
  170P%=0
  180O%=code%
  190PROCcode
  200NEXT pass
  210OSCLI "Save OldModes "+STR$~code%+" +"+STR$~(P%)
  220OSCLI "SetType OldModes Module"
  230END
  240:
  250DEF PROCcode
  260[ OPT pass
  270;
  280;
  290        EQUD    0
  300        EQUD    initcode
  310        EQUD    finalcode
  320        EQUD    servicecode
  330        EQUD    modtitlestring
  340        EQUD    helpstring
  350        EQUD    commandtable
  360        EQUD    0
  370        EQUD    0
  380        EQUD    0
  390        EQUD    0
  400.modtitlestring
  410        FNstring0(title$)
  420.helpstring
  430        FNstring0(title$+CHR$(9)+"1.00 ("+date$+") Matt Lewis � Weird Sheep")
  440]
  450
  460IF commandtable<>0 THEN
  470[ OPT pass
  480.commandtable
  490        FNcommand(title$,0,0,0,doithelp)
  500;
  510;  End of command table
  520;
  530        EQUD    0
  540.doithelp
  550        FNstring0("OldModes generates a menu of pre RiscOS 3.50 modes which sometimes need to be used with old software")
  560.doit
  570        STMFD   (sp)!,{link}
  580        MOV     r2,r0
  590        ADR     r1,modtitlestring
  600        MOV     r0,#2
  610        SWI     "XOS_Module"
  620        LDMFD   (sp)!,{pc}
  630]
  640ENDIF
  650
  660IF initcode<>0 THEN
  670[ OPT pass
  680.initcode
  690        STMFD   (sp)!,{r0-r11,link}
  700        LDR     r0,[ws]
  710        TEQ     r0,#0
  720        BNE     initcodeout
  730        MOV     r0,#6
  740        MOV     r3,#rma_space_size%
  750        SWI     "XOS_Module"       ; claim some module workspace
  760        BVS     initcodeout
  770        STR     r2,[ws]
  780        MOV     ws,r2              ; ws now points to the workspace
  790;
  800;
  810;  find task handle by scanning all running tasks using enumerate tasks
  820;
  830        MOV     r0,#0              ; set up flag for finding task
  840        STR     r0,[ws,#foundtaskhandle]
  850.initloop
  860        ADD     r1,ws,#findtaskblock
  870        MOV     r2,#20             ; set up registers for enumeration
  880        SWI     "XTaskManager_EnumerateTasks"
  890        CMP     r0,#0              ; r0=-1 if run out of tasks
  900        BLT     initcodeout
  910        BVS     initcodeout        ; now read task details
  920        LDR     r6,[ws,#findtaskblock+12]
  930        LDR     r6,[ws,#findtaskblock+4]
  940        ADR     r7,findtask        ; task name we're looking for
  950.initloop2
  960        LDRB    r4,[r6],#1
  970        LDRB    r5,[r7],#1         ; compare characters one at a
  980        TEQ     r5,#0              ; time until end of our name
  990        BEQ     initcode2          ; reached
 1000        TEQ     r4,r5              ; or
 1010        BEQ     initloop2          ; mismatch occurs
 1020        B       initloop           ; get next task info
 1030.initcode2
 1040        LDR     r3,[ws,#findtaskblock]
 1050        STR     r3,[ws,#foundtaskhandle]
 1060;
 1070;  set up filter.  r3 already has the task handle of the task from
 1080;  the previous code.
 1090;
 1100        ADR     r0,filtername
 1110        ADR     r1,filtercode
 1120        MOV     r2,ws
 1130        LDR     r4,filtermask
 1140        SWI     "XFilter_RegisterPostFilter"
 1150        MOV     r0,#0
 1160        STR     r0,[ws,#templatesloaded%]
 1170.initcodeout
 1180        LDMFD   (sp)!,{r0-r11,pc}
 1190.findtask
 1200        FNstring0("Display Manager")
 1210.filtername
 1220        FNstring0(filtername$)
 1230.filtermask
 1240        EQUD     fmask%
 1250]
 1260ENDIF
 1270
 1280IF finalcode<> 0 THEN
 1290[ OPT pass
 1300.finalcode
 1310        STMFD   (sp)!,{r0-r11,link}
 1320        LDR     ws,[ws]
 1330;
 1340;  check if filter loaded and deregister it as necessary
 1350;
 1360        LDR     r3,[ws,#foundtaskhandle]
 1370        TEQ     r3,#0              ; handle of task we're filtering
 1380        BEQ     finalcode1         ; =0 if no filter attached.
 1390        ADR     r0,filtername
 1400        ADR     r1,filtercode
 1410        MOV     r2,ws
 1420        LDR     r4,filtermask
 1430        SWI     "XFilter_DeRegisterPostFilter"
 1440;
 1450.finalcode1
 1460        BL      releasetemplateblock
 1470        MOV     r0,#7
 1480        MOV     r2,ws
 1490        SWI     "XOS_Module"       ; release module workspace
 1500        LDMFD   (sp)!,{r0-r11,pc}
 1510]
 1520ENDIF
 1530
 1540IF servicecode<> 0 THEN
 1550[ OPT pass
 1560.servicecode
 1570        STMFD   (sp)!,{link}
 1580        LDR     ws,[ws]
 1590        LDMFD   (sp)!,{pc}
 1600]
 1610ENDIF
 1620
 1630[ OPT pass
 1640
 1650.filtercode
 1660        STMFD   (sp)!,{r1-r11,link}
 1670        TEQ     r0,#6              ; mouse click event
 1680        BNE     filtercode1
 1690        LDR     r8,[ws,#templatesloaded%]
 1700        TEQ     r8,#0              ; check whether we've loaded
 1710        BNE     filtercode0        ; our templates!
 1720        MVN     r8,#0
 1730        STR     r8,[ws,#templatesloaded%]
 1740        BL      loadtemplates
 1750        ADR     r8,modesmenuinfo
 1760        LDR     r9,[ws,#template1%]
 1770        STR     r9,[r8,#4]         ; attach "info" template to menu
 1780.filtercode0
 1790        MOV     r8,#0              ; ourmenu is a flag.  It =-1 if
 1800        STR     r8,[ws,#ourmenu]   ; filter generated the menu
 1810        LDR     r8,[r1,#12]
 1820        CMN     r8,#2              ; icon bar clicked?
 1830        BNE     filtercodeout
 1840        LDR     r8,[r1,#8]
 1850        TEQ     r8,#1              ; adjust pressed?
 1860        BNE     filtercodeout      ; no!  Nothing to do with us
 1870        ADR     r0,modesmenu
 1880        BL      iconbarmenu
 1890        MVN     r0,#0
 1900        STR     r0,[ws,#ourmenu]   ; set ourmenu flag
 1910        B       filtercodeout
 1920.filtercode1
 1930        TEQ     R0,#9              ; menu choice event
 1940        BNE     filtercodeout
 1950        LDR     r8,[ws,#ourmenu]
 1960        TEQ     r8,#0              ; check flag is it our menu?
 1970        BEQ     filtercodeout      ; no, then standard menu
 1980        LDR     r8,[r1]
 1990        CMP     r8,#2
 2000        BLT     filtercode2        ; is it a mode number ?
 2010        SUB     r8,r8,#2
 2020        ADR     r9,modestable
 2030        LDRB    r0,[r9,r8]         ; if yes adjust and read table
 2040        SWI     "XWimp_SetMode"    ; set the mode!!!!!!
 2050        B       filtercode3
 2060.filtercode2
 2070        TEQ     r8,#1              ; is it quit?
 2080        BNE     filtercode3
 2090        LDR     r3,[ws,#foundtaskhandle]
 2100        ADR     r0,filtername
 2110        ADR     r1,filtercode
 2120        MOV     r2,ws
 2130        LDR     r4,filtermask      ; deregister
 2140        SWI     "XFilter_DeRegisterPostFilter"
 2150        MOV     r3,#0              ; clear flag
 2160        STR     r3,[ws,#foundtaskhandle]
 2170.filtercode3
 2180        MOV     r0,#0
 2190        STR     r0,[ws,#ourmenu]
 2200        MVN     r0,#0              ; r0 = -1 claims wimppoll from task
 2210.filtercodeout
 2220        LDMFD   (sp)!,{r1-r11,link}
 2230        MOVS    pc,link
 2240
 2250.modesmenu
 2260        FNmenuheader("Modes",80)
 2270.modesmenuinfo
 2280        FNmenuitem("Info",0,-1)
 2290        FNmenuitem("Quit",1<<1,-1)
 2300        FNmenuitem("12",0,-1)
 2310        FNmenuitem("15",0,-1)
 2320        FNmenuitem("27",0,-1)
 2330        FNmenuitem("28",0,-1)
 2340        FNmenuitem("31",0,-1)
 2350        FNmenuitem("32",1<<7,-1)
 2360;
 2370.modestable
 2380        EQUB 12
 2390        EQUB 15
 2400        EQUB 27
 2410        EQUB 28
 2420        EQUB 31
 2430        EQUB 32
 2440;
 2450;  subroutines
 2460;
 2470        FNiconbarmenu
 2480        FNloadtemplates("<OldModes$Dir>.Templates",&200,&200)
 2490        FNreleasetemplateblock
 2500
 2510]
 2520
 2530ENDPROC
 2540
 2550DEF FNcommand(name$,comcode%,infoword%,syntax%,help%)
 2560[ OPT pass
 2570   EQUS   name$
 2580   EQUB   0
 2590   ALIGN
 2600   EQUD   comcode%
 2610   EQUD   infoword%
 2620   EQUD   syntax%
 2630   EQUD   help%
 2640]
 2650=pass
 2660
 2670DEF FNstring0(string$)
 2680[ OPT pass
 2690   EQUS   string$
 2700   EQUB   0
 2710   ALIGN
 2720]
 2730=pass
 2740
 2750DEF PROCinit_flags
 2760runcode         =FALSE
 2770initcode        =TRUE
 2780finalcode       =TRUE
 2790servicecode     =TRUE
 2800commandtable    =TRUE
 2810ENDPROC
 2820
 2830DEF PROCinit_vars
 2840title$="OldModes"
 2850date$=MID$(TIME$,5,11)
 2860helptext$="Old Modes"
 2870rma_space_size%=&200
 2880filtername$="OldModes"
 2890fmask%=%1110011100011100100110010
 2900foundtaskhandle=0
 2910ourmenu=4
 2920templatespace%=8
 2930iconspace%=12
 2940template1%=16
 2950templatesloaded%=20
 2960findtaskblock=64
 2970pollblock=&100
 2980ENDPROC
 2990
 3000REM    wimp assembler library calls
 3010
 3020DEF FNiconbarmenu
 3030[ OPT pass
 3040;
 3050;  r0 points to menu block
 3060;
 3070.iconbarmenu
 3080        STMFD (sp)!,{r0-r3,r8-r10,link}
 3090        MOV   r8,r0
 3100        ADD   r1,ws,#pollblock
 3110        SWI   "XWimp_GetPointerInfo"    ; read position of pointer
 3120        BVS   iconbarout
 3130        LDR   r2,[r1,#0]
 3140        SUB   r2,r2,#64
 3150        MOV   r3,#96                    ; menu position from base
 3160        ADD   r9,r8,#28                 ; of screen
 3170.barmenu1
 3180        ADD   r3,r3,#44                 ; height of menu item
 3190        LDR   r10,[r9,#0]
 3200        TST   r10,#1<<1                 ; followed by dotted line?
 3210        ADDNE r3,r3,#24                 ; height of dotted line
 3220        ADD   r9,r9,#24
 3230        TST   r10,#1<<7                 ; last menu item?
 3240        BEQ   barmenu1                  ; adjust for each item in menu
 3250        MOV   r1,r8
 3260        SWI   "XWimp_CreateMenu"        ; open it
 3270.iconbarout
 3280        LDMFD (sp)!,{r0-r3,r8-r10,pc}
 3290]
 3300=pass
 3310
 3320
 3330DEF FNloadtemplates(path$,templatespacesize%,iconspacesize%)
 3340[ OPT pass
 3350.loadtemplates
 3360        STMFD   (sp)!,{r0-r11,link}
 3370        MOV     r2,#0                   ; zero pointers to space
 3380        STR     r2,[ws,#templatespace%] ; in module block.  Used to
 3390        STR     r2,[ws,#iconspace%]     ; check whether space claimed
 3400;
 3410        MOV     r0,#6
 3420        MOV     r3,#templatespacesize%
 3430        SWI     "XOS_Module"            ; claim template space
 3440        BVS     loadtemplates1
 3450        STR     r2,[ws,#templatespace%] ; and store pointer
 3460        MOV     r0,#6
 3470        MOV     r3,#iconspacesize%      ; claim icon space and
 3480        SWI     "XOS_Module"
 3490        BVS     loadtemplates1
 3500        STR     r2,[ws,#iconspace%]     ; store pointer
 3510;
 3520        ADR     r1,templatespath
 3530        SWI     "XWimp_OpenTemplate"
 3540        BVS     loadtemplates1
 3550        LDR     r1,[ws,#templatespace%] ; set up registers for
 3560        LDR     r2,[ws,#iconspace%]
 3570        MOV     r3,#iconspacesize%
 3580        ADD     r3,r3,r2
 3590        MVN     r4,#0
 3600;
 3610        MOV     r6,#0                   ; load windows - repeat for
 3620        ADR     r5,template1            ; all windows in the
 3630        SWI     "XWimp_LoadTemplate"    ; template file
 3640        BVS     loadtemplates2
 3650        SWI     "XWimp_CreateWindow"
 3660        BVS     loadtemplates2
 3670        STR     r0,[ws,#template1%]
 3680.loadtemplates2
 3690        SWI     "XWimp_CloseTemplate"   ; close template file
 3700.loadtemplates1
 3710        LDMFD   (sp)!,{r0-r11,pc}
 3720.templatespath
 3730        FNstring0(path$)
 3740.template1
 3750        FNstring0("info")
 3760]
 3770=pass
 3780
 3790DEF FNreleasetemplateblock
 3800[ OPT pass
 3810.releasetemplateblock
 3820        STMFD   (sp)!,{r0-r3,link}
 3830        MOV     r0,#7
 3840        LDR     r2,[ws,#templatespace%]
 3850        TEQ     r2,#0                ; if pointer<>0 then memory claimed
 3860        SWINE   "XOS_Module"         ; release it
 3870        MOV     r0,#7
 3880        LDR     r2,[ws,#iconspace%]
 3890        TEQ     r2,#0                ; if pointer<>0 then memory claimed
 3900        SWINE   "XOS_Module"         ; release it
 3910        LDMFD   (sp)!,{r0-r3,pc}
 3920]
 3930=pass
 3940
 3950DEF FNmenuheader(title$,width%)
 3960   $O%=LEFT$(title$,11)+CHR$0
 3970   O%?12=7
 3980   O%?13=2
 3990   O%?14=7
 4000   O%?15=0
 4010   O%!16=width%
 4020   O%!20=44
 4030   O%!24=0
 4040   O%+=28
 4050   P%+=28
 4060=pass
 4070
 4080DEF FNmenuitem(text$,flags%,submenu%)
 4090   !O%=flags%
 4100   O%!4=submenu%
 4110   O%!8=&07009031
 4120   $(O%+12)=LEFT$(text$,11)+CHR$0
 4130   O%+=24
 4140   P%+=24
 4150=pass

� >ModSource

� �
(� � � � �,�$+" at line "+Þ
2
<� code% &4000
F	ws=12
P	sp=13
Zlink=14
d	pc=15
n
x�init_flags
�
��init_vars
�
�� pass=4 � 7 �3
�P%=0
�O%=code%
�	�code
�
� pass
�*� "Save OldModes "+�~code%+" +"+�~(P%)
�� "SetType OldModes Module"
��
�:
�� �code
[ OPT pass
;
;
"        EQUD    0
,        EQUD    initcode
6        EQUD    finalcode
@        EQUD    servicecode
J"        EQUD    modtitlestring
T        EQUD    helpstring
^         EQUD    commandtable
h        EQUD    0
r        EQUD    0
|        EQUD    0
�        EQUD    0
�.modtitlestring
�        �string0(title$)
�.helpstring
�M        �string0(title$+�(9)+"1.00 ("+date$+") Matt Lewis � Weird Sheep")
�]
�
�� commandtable<>0 �
�[ OPT pass
�.commandtable
�+        �command(title$,0,0,0,doithelp)
�;
�;  End of command table
;
        EQUD    0

.doithelp
&|        �string0("OldModes generates a menu of pre RiscOS 3.50 modes which sometimes need to be used with old software")
0	.doit
:         STMFD   (sp)!,{link}
D        MOV     r2,r0
N%        ADR     r1,modtitlestring
X        MOV     r0,#2
b         SWI     "XOS_Module"
l        LDMFD   (sp)!,{pc}
v]
��
�
�� initcode<>0 �
�[ OPT pass
�
.initcode
�'        STMFD   (sp)!,{r0-r11,link}
�        LDR     r0,[ws]
�        TEQ     r0,#0
�        BNE     initcodeout
�        MOV     r0,#6
�'        MOV     r3,#rma_space_size%
�D        SWI     "XOS_Module"       ; claim some module workspace
�        BVS     initcodeout
        STR     r2,[ws]
G        MOV     ws,r2              ; ws now points to the workspace
;
 ;
*K;  find task handle by scanning all running tasks using enumerate tasks
4;
>E        MOV     r0,#0              ; set up flag for finding task
H,        STR     r0,[ws,#foundtaskhandle]
R
.initloop
\(        ADD     r1,ws,#findtaskblock
fI        MOV     r2,#20             ; set up registers for enumeration
p1        SWI     "XTaskManager_EnumerateTasks"
zB        CMP     r0,#0              ; r0=-1 if run out of tasks
�        BLT     initcodeout
�>        BVS     initcodeout        ; now read task details
�-        LDR     r6,[ws,#findtaskblock+12]
�,        LDR     r6,[ws,#findtaskblock+4]
�D        ADR     r7,findtask        ; task name we're looking for
�.initloop2
�        LDRB    r4,[r6],#1
�D        LDRB    r5,[r7],#1         ; compare characters one at a
�C        TEQ     r5,#0              ; time until end of our name
�0        BEQ     initcode2          ; reached
�+        TEQ     r4,r5              ; or
�8        BEQ     initloop2          ; mismatch occurs
�;        B       initloop           ; get next task info
.initcode2
*        LDR     r3,[ws,#findtaskblock]
,        STR     r3,[ws,#foundtaskhandle]
$;
.F;  set up filter.  r3 already has the task handle of the task from
8;  the previous code.
B;
L!        ADR     r0,filtername
V!        ADR     r1,filtercode
`        MOV     r2,ws
j!        LDR     r4,filtermask
t0        SWI     "XFilter_RegisterPostFilter"
~        MOV     r0,#0
�-        STR     r0,[ws,#templatesloaded%]
�.initcodeout
�%        LDMFD   (sp)!,{r0-r11,pc}
�
.findtask
�'        �string0("Display Manager")
�.filtername
�!        �string0(filtername$)
�.filtermask
�        EQUD     fmask%
�]
��
�
� finalcode<> 0 �

[ OPT pass
.finalcode
'        STMFD   (sp)!,{r0-r11,link}
(        LDR     ws,[ws]
2;
<<;  check if filter loaded and deregister it as necessary
F;
P,        LDR     r3,[ws,#foundtaskhandle]
ZG        TEQ     r3,#0              ; handle of task we're filtering
dB        BEQ     finalcode1         ; =0 if no filter attached.
n!        ADR     r0,filtername
x!        ADR     r1,filtercode
�        MOV     r2,ws
�!        LDR     r4,filtermask
�2        SWI     "XFilter_DeRegisterPostFilter"
�;
�.finalcode1
�(        BL      releasetemplateblock
�        MOV     r0,#7
�        MOV     r2,ws
�A        SWI     "XOS_Module"       ; release module workspace
�%        LDMFD   (sp)!,{r0-r11,pc}
�]
��
�
� servicecode<> 0 �
[ OPT pass
.servicecode
"         STMFD   (sp)!,{link}
,        LDR     ws,[ws]
6        LDMFD   (sp)!,{pc}
@]
J�
T
^[ OPT pass
h
r.filtercode
|'        STMFD   (sp)!,{r1-r11,link}
�:        TEQ     r0,#6              ; mouse click event
�        BNE     filtercode1
�-        LDR     r8,[ws,#templatesloaded%]
�C        TEQ     r8,#0              ; check whether we've loaded
�7        BNE     filtercode0        ; our templates!
�        MVN     r8,#0
�-        STR     r8,[ws,#templatesloaded%]
�!        BL      loadtemplates
�$        ADR     r8,modesmenuinfo
�'        LDR     r9,[ws,#template1%]
�G        STR     r9,[r8,#4]         ; attach "info" template to menu
�.filtercode0
�F        MOV     r8,#0              ; ourmenu is a flag.  It =-1 if
B        STR     r8,[ws,#ourmenu]   ; filter generated the menu
        LDR     r8,[r1,#12]
:        CMN     r8,#2              ; icon bar clicked?
&!        BNE     filtercodeout
0        LDR     r8,[r1,#8]
:8        TEQ     r8,#1              ; adjust pressed?
DC        BNE     filtercodeout      ; no!  Nothing to do with us
N         ADR     r0,modesmenu
X        BL      iconbarmenu
b        MVN     r0,#0
l9        STR     r0,[ws,#ourmenu]   ; set ourmenu flag
v!        B       filtercodeout
�.filtercode1
�:        TEQ     R0,#9              ; menu choice event
�!        BNE     filtercodeout
�$        LDR     r8,[ws,#ourmenu]
�C        TEQ     r8,#0              ; check flag is it our menu?
�?        BEQ     filtercodeout      ; no, then standard menu
�        LDR     r8,[r1]
�        CMP     r8,#2
�>        BLT     filtercode2        ; is it a mode number ?
�        SUB     r8,r8,#2
�!        ADR     r9,modestable
�E        LDRB    r0,[r9,r8]         ; if yes adjust and read table
�;        SWI     "XWimp_SetMode"    ; set the mode!!!!!!
        B       filtercode3
.filtercode2
4        TEQ     r8,#1              ; is it quit?
         BNE     filtercode3
*,        LDR     r3,[ws,#foundtaskhandle]
4!        ADR     r0,filtername
>!        ADR     r1,filtercode
H        MOV     r2,ws
R3        LDR     r4,filtermask      ; deregister
\2        SWI     "XFilter_DeRegisterPostFilter"
f3        MOV     r3,#0              ; clear flag
p,        STR     r3,[ws,#foundtaskhandle]
z.filtercode3
�        MOV     r0,#0
�$        STR     r0,[ws,#ourmenu]
�J        MVN     r0,#0              ; r0 = -1 claims wimppoll from task
�.filtercodeout
�'        LDMFD   (sp)!,{r1-r11,link}
�        MOVS    pc,link
�
�.modesmenu
�#        �menuheader("Modes",80)
�.modesmenuinfo
�"        �menuitem("Info",0,-1)
�%        �menuitem("Quit",1<<1,-1)
�         �menuitem("12",0,-1)
	         �menuitem("15",0,-1)
	         �menuitem("27",0,-1)
	         �menuitem("28",0,-1)
	$         �menuitem("31",0,-1)
	.#        �menuitem("32",1<<7,-1)
	8;
	B.modestable
	L        EQUB 12
	V        EQUB 15
	`        EQUB 27
	j        EQUB 28
	t        EQUB 31
	~        EQUB 32
	�;
	�;  subroutines
	�;
	�        �iconbarmenu
	�@        �loadtemplates("<OldModes$Dir>.Templates",&200,&200)
	�!        �releasetemplateblock
	�
	�]
	�
	��
	�
	�6� �command(name$,comcode%,infoword%,syntax%,help%)
[ OPT pass

   EQUS   name$
   EQUB   0
   ALIGN
(   EQUD   comcode%
2   EQUD   infoword%
<   EQUD   syntax%
F   EQUD   help%
P]
Z	=pass
d
n� �string0(string$)
x[ OPT pass
�   EQUS   string$
�   EQUB   0
�   ALIGN
�]
�	=pass
�
�� �init_flags
�runcode         =�
�initcode        =�
�finalcode       =�
�servicecode     =�
�commandtable    =�
��

� �init_vars
title$="OldModes"
"date$=��$,5,11)
,helptext$="Old Modes"
6rma_space_size%=&200
@filtername$="OldModes"
J%fmask%=%1110011100011100100110010
Tfoundtaskhandle=0
^
ourmenu=4
htemplatespace%=8
riconspace%=12
|template1%=16
�templatesloaded%=20
�findtaskblock=64
�pollblock=&100
��
�
�%�    wimp assembler library calls
�
�� �iconbarmenu
�[ OPT pass
�;
�;  r0 points to menu block
�;
�.iconbarmenu
+        STMFD (sp)!,{r0-r3,r8-r10,link}
        MOV   r8,r0
"        ADD   r1,ws,#pollblock
&F        SWI   "XWimp_GetPointerInfo"    ; read position of pointer
0        BVS   iconbarout
:        LDR   r2,[r1,#0]
D        SUB   r2,r2,#64
NE        MOV   r3,#96                    ; menu position from base
X7        ADD   r9,r8,#28                 ; of screen
b
.barmenu1
lA        ADD   r3,r3,#44                 ; height of menu item
v        LDR   r10,[r9,#0]
�F        TST   r10,#1<<1                 ; followed by dotted line?
�C        ADDNE r3,r3,#24                 ; height of dotted line
�        ADD   r9,r9,#24
�=        TST   r10,#1<<7                 ; last menu item?
�J        BEQ   barmenu1                  ; adjust for each item in menu
�        MOV   r1,r8
�5        SWI   "XWimp_CreateMenu"        ; open it
�.iconbarout
�)        LDMFD (sp)!,{r0-r3,r8-r10,pc}
�]
�	=pass
�
�

=� �loadtemplates(path$,templatespacesize%,iconspacesize%)

[ OPT pass

.loadtemplates

 '        STMFD   (sp)!,{r0-r11,link}

*D        MOV     r2,#0                   ; zero pointers to space

4G        STR     r2,[ws,#templatespace%] ; in module block.  Used to

>I        STR     r2,[ws,#iconspace%]     ; check whether space claimed

H;

R        MOV     r0,#6

\*        MOV     r3,#templatespacesize%

fB        SWI     "XOS_Module"            ; claim template space

p"        BVS     loadtemplates1

z?        STR     r2,[ws,#templatespace%] ; and store pointer

�        MOV     r0,#6

�B        MOV     r3,#iconspacesize%      ; claim icon space and

�         SWI     "XOS_Module"

�"        BVS     loadtemplates1

�;        STR     r2,[ws,#iconspace%]     ; store pointer

�;

�$        ADR     r1,templatespath

�(        SWI     "XWimp_OpenTemplate"

�"        BVS     loadtemplates1

�B        LDR     r1,[ws,#templatespace%] ; set up registers for

�'        LDR     r2,[ws,#iconspace%]

�&        MOV     r3,#iconspacesize%

�        ADD     r3,r3,r2
        MVN     r4,#0
;
G        MOV     r6,#0                   ; load windows - repeat for
$@        ADR     r5,template1            ; all windows in the
.;        SWI     "XWimp_LoadTemplate"    ; template file
8"        BVS     loadtemplates2
B(        SWI     "XWimp_CreateWindow"
L"        BVS     loadtemplates2
V'        STR     r0,[ws,#template1%]
`.loadtemplates2
jA        SWI     "XWimp_CloseTemplate"   ; close template file
t.loadtemplates1
~%        LDMFD   (sp)!,{r0-r11,pc}
�.templatespath
�        �string0(path$)
�.template1
�        �string0("info")
�]
�	=pass
�
�� �releasetemplateblock
�[ OPT pass
�.releasetemplateblock
�&        STMFD   (sp)!,{r0-r3,link}
�        MOV     r0,#7
+        LDR     r2,[ws,#templatespace%]

L        TEQ     r2,#0                ; if pointer<>0 then memory claimed
5        SWINE   "XOS_Module"         ; release it
        MOV     r0,#7
('        LDR     r2,[ws,#iconspace%]
2L        TEQ     r2,#0                ; if pointer<>0 then memory claimed
<5        SWINE   "XOS_Module"         ; release it
F$        LDMFD   (sp)!,{r0-r3,pc}
P]
Z	=pass
d
n � �menuheader(title$,width%)
x   $O%=�title$,11)+�0
�   O%?12=7
�   O%?13=2
�   O%?14=7
�   O%?15=0
�   O%!16=width%
�   O%!20=44
�   O%!24=0
�
   O%+=28
�
   P%+=28
�	=pass
�
�&� �menuitem(text$,flags%,submenu%)
�   !O%=flags%
   O%!4=submenu%
   O%!8=&07009031
   $(O%+12)=�text$,11)+�0
"
   O%+=24
,
   P%+=24
6	=pass
�
00000000  0d 00 0a 10 f4 20 3e 4d  6f 64 53 6f 75 72 63 65  |..... >ModSource|
00000010  0d 00 14 04 0d 00 1e 07  eb 20 eb 0d 00 28 1f ee  |......... ...(..|
00000020  20 85 20 85 20 a2 20 9f  2c f6 24 2b 22 20 61 74  | . . . .,.$+" at|
00000030  20 6c 69 6e 65 20 22 2b  c3 9e 0d 00 32 04 0d 00  | line "+....2...|
00000040  3c 11 de 20 63 6f 64 65  25 20 26 34 30 30 30 0d  |<.. code% &4000.|
00000050  00 46 09 77 73 3d 31 32  0d 00 50 09 73 70 3d 31  |.F.ws=12..P.sp=1|
00000060  33 0d 00 5a 0b 6c 69 6e  6b 3d 31 34 0d 00 64 09  |3..Z.link=14..d.|
00000070  70 63 3d 31 35 0d 00 6e  04 0d 00 78 0f f2 69 6e  |pc=15..n...x..in|
00000080  69 74 5f 66 6c 61 67 73  0d 00 82 04 0d 00 8c 0e  |it_flags........|
00000090  f2 69 6e 69 74 5f 76 61  72 73 0d 00 96 04 0d 00  |.init_vars......|
000000a0  a0 13 e3 20 70 61 73 73  3d 34 20 b8 20 37 20 88  |... pass=4 . 7 .|
000000b0  33 0d 00 aa 08 50 25 3d  30 0d 00 b4 0c 4f 25 3d  |3....P%=0....O%=|
000000c0  63 6f 64 65 25 0d 00 be  09 f2 63 6f 64 65 0d 00  |code%.....code..|
000000d0  c8 0a ed 20 70 61 73 73  0d 00 d2 2a ff 20 22 53  |... pass...*. "S|
000000e0  61 76 65 20 4f 6c 64 4d  6f 64 65 73 20 22 2b c3  |ave OldModes "+.|
000000f0  7e 63 6f 64 65 25 2b 22  20 2b 22 2b c3 7e 28 50  |~code%+" +"+.~(P|
00000100  25 29 0d 00 dc 1f ff 20  22 53 65 74 54 79 70 65  |%)..... "SetType|
00000110  20 4f 6c 64 4d 6f 64 65  73 20 4d 6f 64 75 6c 65  | OldModes Module|
00000120  22 0d 00 e6 05 e0 0d 00  f0 05 3a 0d 00 fa 0b dd  |".........:.....|
00000130  20 f2 63 6f 64 65 0d 01  04 0e 5b 20 4f 50 54 20  | .code....[ OPT |
00000140  70 61 73 73 0d 01 0e 05  3b 0d 01 18 05 3b 0d 01  |pass....;....;..|
00000150  22 15 20 20 20 20 20 20  20 20 45 51 55 44 20 20  |".        EQUD  |
00000160  20 20 30 0d 01 2c 1c 20  20 20 20 20 20 20 20 45  |  0..,.        E|
00000170  51 55 44 20 20 20 20 69  6e 69 74 63 6f 64 65 0d  |QUD    initcode.|
00000180  01 36 1d 20 20 20 20 20  20 20 20 45 51 55 44 20  |.6.        EQUD |
00000190  20 20 20 66 69 6e 61 6c  63 6f 64 65 0d 01 40 1f  |   finalcode..@.|
000001a0  20 20 20 20 20 20 20 20  45 51 55 44 20 20 20 20  |        EQUD    |
000001b0  73 65 72 76 69 63 65 63  6f 64 65 0d 01 4a 22 20  |servicecode..J" |
000001c0  20 20 20 20 20 20 20 45  51 55 44 20 20 20 20 6d  |       EQUD    m|
000001d0  6f 64 74 69 74 6c 65 73  74 72 69 6e 67 0d 01 54  |odtitlestring..T|
000001e0  1e 20 20 20 20 20 20 20  20 45 51 55 44 20 20 20  |.        EQUD   |
000001f0  20 68 65 6c 70 73 74 72  69 6e 67 0d 01 5e 20 20  | helpstring..^  |
00000200  20 20 20 20 20 20 20 45  51 55 44 20 20 20 20 63  |       EQUD    c|
00000210  6f 6d 6d 61 6e 64 74 61  62 6c 65 0d 01 68 15 20  |ommandtable..h. |
00000220  20 20 20 20 20 20 20 45  51 55 44 20 20 20 20 30  |       EQUD    0|
00000230  0d 01 72 15 20 20 20 20  20 20 20 20 45 51 55 44  |..r.        EQUD|
00000240  20 20 20 20 30 0d 01 7c  15 20 20 20 20 20 20 20  |    0..|.       |
00000250  20 45 51 55 44 20 20 20  20 30 0d 01 86 15 20 20  | EQUD    0....  |
00000260  20 20 20 20 20 20 45 51  55 44 20 20 20 20 30 0d  |      EQUD    0.|
00000270  01 90 13 2e 6d 6f 64 74  69 74 6c 65 73 74 72 69  |....modtitlestri|
00000280  6e 67 0d 01 9a 1c 20 20  20 20 20 20 20 20 a4 73  |ng....        .s|
00000290  74 72 69 6e 67 30 28 74  69 74 6c 65 24 29 0d 01  |tring0(title$)..|
000002a0  a4 0f 2e 68 65 6c 70 73  74 72 69 6e 67 0d 01 ae  |...helpstring...|
000002b0  4d 20 20 20 20 20 20 20  20 a4 73 74 72 69 6e 67  |M        .string|
000002c0  30 28 74 69 74 6c 65 24  2b bd 28 39 29 2b 22 31  |0(title$+.(9)+"1|
000002d0  2e 30 30 20 28 22 2b 64  61 74 65 24 2b 22 29 20  |.00 ("+date$+") |
000002e0  4d 61 74 74 20 4c 65 77  69 73 20 a9 20 57 65 69  |Matt Lewis . Wei|
000002f0  72 64 20 53 68 65 65 70  22 29 0d 01 b8 05 5d 0d  |rd Sheep")....].|
00000300  01 c2 04 0d 01 cc 17 e7  20 63 6f 6d 6d 61 6e 64  |........ command|
00000310  74 61 62 6c 65 3c 3e 30  20 8c 0d 01 d6 0e 5b 20  |table<>0 .....[ |
00000320  4f 50 54 20 70 61 73 73  0d 01 e0 11 2e 63 6f 6d  |OPT pass.....com|
00000330  6d 61 6e 64 74 61 62 6c  65 0d 01 ea 2b 20 20 20  |mandtable...+   |
00000340  20 20 20 20 20 a4 63 6f  6d 6d 61 6e 64 28 74 69  |     .command(ti|
00000350  74 6c 65 24 2c 30 2c 30  2c 30 2c 64 6f 69 74 68  |tle$,0,0,0,doith|
00000360  65 6c 70 29 0d 01 f4 05  3b 0d 01 fe 1b 3b 20 20  |elp)....;....;  |
00000370  45 6e 64 20 6f 66 20 63  6f 6d 6d 61 6e 64 20 74  |End of command t|
00000380  61 62 6c 65 0d 02 08 05  3b 0d 02 12 15 20 20 20  |able....;....   |
00000390  20 20 20 20 20 45 51 55  44 20 20 20 20 30 0d 02  |     EQUD    0..|
000003a0  1c 0d 2e 64 6f 69 74 68  65 6c 70 0d 02 26 7c 20  |...doithelp..&| |
000003b0  20 20 20 20 20 20 20 a4  73 74 72 69 6e 67 30 28  |       .string0(|
000003c0  22 4f 6c 64 4d 6f 64 65  73 20 67 65 6e 65 72 61  |"OldModes genera|
000003d0  74 65 73 20 61 20 6d 65  6e 75 20 6f 66 20 70 72  |tes a menu of pr|
000003e0  65 20 52 69 73 63 4f 53  20 33 2e 35 30 20 6d 6f  |e RiscOS 3.50 mo|
000003f0  64 65 73 20 77 68 69 63  68 20 73 6f 6d 65 74 69  |des which someti|
00000400  6d 65 73 20 6e 65 65 64  20 74 6f 20 62 65 20 75  |mes need to be u|
00000410  73 65 64 20 77 69 74 68  20 6f 6c 64 20 73 6f 66  |sed with old sof|
00000420  74 77 61 72 65 22 29 0d  02 30 09 2e 64 6f 69 74  |tware")..0..doit|
00000430  0d 02 3a 20 20 20 20 20  20 20 20 20 53 54 4d 46  |..:         STMF|
00000440  44 20 20 20 28 73 70 29  21 2c 7b 6c 69 6e 6b 7d  |D   (sp)!,{link}|
00000450  0d 02 44 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..D.        MOV |
00000460  20 20 20 20 72 32 2c 72  30 0d 02 4e 25 20 20 20  |    r2,r0..N%   |
00000470  20 20 20 20 20 41 44 52  20 20 20 20 20 72 31 2c  |     ADR     r1,|
00000480  6d 6f 64 74 69 74 6c 65  73 74 72 69 6e 67 0d 02  |modtitlestring..|
00000490  58 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |X.        MOV   |
000004a0  20 20 72 30 2c 23 32 0d  02 62 20 20 20 20 20 20  |  r0,#2..b      |
000004b0  20 20 20 53 57 49 20 20  20 20 20 22 58 4f 53 5f  |   SWI     "XOS_|
000004c0  4d 6f 64 75 6c 65 22 0d  02 6c 1e 20 20 20 20 20  |Module"..l.     |
000004d0  20 20 20 4c 44 4d 46 44  20 20 20 28 73 70 29 21  |   LDMFD   (sp)!|
000004e0  2c 7b 70 63 7d 0d 02 76  05 5d 0d 02 80 05 cd 0d  |,{pc}..v.]......|
000004f0  02 8a 04 0d 02 94 13 e7  20 69 6e 69 74 63 6f 64  |........ initcod|
00000500  65 3c 3e 30 20 8c 0d 02  9e 0e 5b 20 4f 50 54 20  |e<>0 .....[ OPT |
00000510  70 61 73 73 0d 02 a8 0d  2e 69 6e 69 74 63 6f 64  |pass.....initcod|
00000520  65 0d 02 b2 27 20 20 20  20 20 20 20 20 53 54 4d  |e...'        STM|
00000530  46 44 20 20 20 28 73 70  29 21 2c 7b 72 30 2d 72  |FD   (sp)!,{r0-r|
00000540  31 31 2c 6c 69 6e 6b 7d  0d 02 bc 1b 20 20 20 20  |11,link}....    |
00000550  20 20 20 20 4c 44 52 20  20 20 20 20 72 30 2c 5b  |    LDR     r0,[|
00000560  77 73 5d 0d 02 c6 19 20  20 20 20 20 20 20 20 54  |ws]....        T|
00000570  45 51 20 20 20 20 20 72  30 2c 23 30 0d 02 d0 1f  |EQ     r0,#0....|
00000580  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 20 20  |        BNE     |
00000590  69 6e 69 74 63 6f 64 65  6f 75 74 0d 02 da 19 20  |initcodeout.... |
000005a0  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
000005b0  30 2c 23 36 0d 02 e4 27  20 20 20 20 20 20 20 20  |0,#6...'        |
000005c0  4d 4f 56 20 20 20 20 20  72 33 2c 23 72 6d 61 5f  |MOV     r3,#rma_|
000005d0  73 70 61 63 65 5f 73 69  7a 65 25 0d 02 ee 44 20  |space_size%...D |
000005e0  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 22  |       SWI     "|
000005f0  58 4f 53 5f 4d 6f 64 75  6c 65 22 20 20 20 20 20  |XOS_Module"     |
00000600  20 20 3b 20 63 6c 61 69  6d 20 73 6f 6d 65 20 6d  |  ; claim some m|
00000610  6f 64 75 6c 65 20 77 6f  72 6b 73 70 61 63 65 0d  |odule workspace.|
00000620  02 f8 1f 20 20 20 20 20  20 20 20 42 56 53 20 20  |...        BVS  |
00000630  20 20 20 69 6e 69 74 63  6f 64 65 6f 75 74 0d 03  |   initcodeout..|
00000640  02 1b 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |..        STR   |
00000650  20 20 72 32 2c 5b 77 73  5d 0d 03 0c 47 20 20 20  |  r2,[ws]...G   |
00000660  20 20 20 20 20 4d 4f 56  20 20 20 20 20 77 73 2c  |     MOV     ws,|
00000670  72 32 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r2              |
00000680  3b 20 77 73 20 6e 6f 77  20 70 6f 69 6e 74 73 20  |; ws now points |
00000690  74 6f 20 74 68 65 20 77  6f 72 6b 73 70 61 63 65  |to the workspace|
000006a0  0d 03 16 05 3b 0d 03 20  05 3b 0d 03 2a 4b 3b 20  |....;.. .;..*K; |
000006b0  20 66 69 6e 64 20 74 61  73 6b 20 68 61 6e 64 6c  | find task handl|
000006c0  65 20 62 79 20 73 63 61  6e 6e 69 6e 67 20 61 6c  |e by scanning al|
000006d0  6c 20 72 75 6e 6e 69 6e  67 20 74 61 73 6b 73 20  |l running tasks |
000006e0  75 73 69 6e 67 20 65 6e  75 6d 65 72 61 74 65 20  |using enumerate |
000006f0  74 61 73 6b 73 0d 03 34  05 3b 0d 03 3e 45 20 20  |tasks..4.;..>E  |
00000700  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00000710  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
00000720  20 3b 20 73 65 74 20 75  70 20 66 6c 61 67 20 66  | ; set up flag f|
00000730  6f 72 20 66 69 6e 64 69  6e 67 20 74 61 73 6b 0d  |or finding task.|
00000740  03 48 2c 20 20 20 20 20  20 20 20 53 54 52 20 20  |.H,        STR  |
00000750  20 20 20 72 30 2c 5b 77  73 2c 23 66 6f 75 6e 64  |   r0,[ws,#found|
00000760  74 61 73 6b 68 61 6e 64  6c 65 5d 0d 03 52 0d 2e  |taskhandle]..R..|
00000770  69 6e 69 74 6c 6f 6f 70  0d 03 5c 28 20 20 20 20  |initloop..\(    |
00000780  20 20 20 20 41 44 44 20  20 20 20 20 72 31 2c 77  |    ADD     r1,w|
00000790  73 2c 23 66 69 6e 64 74  61 73 6b 62 6c 6f 63 6b  |s,#findtaskblock|
000007a0  0d 03 66 49 20 20 20 20  20 20 20 20 4d 4f 56 20  |..fI        MOV |
000007b0  20 20 20 20 72 32 2c 23  32 30 20 20 20 20 20 20  |    r2,#20      |
000007c0  20 20 20 20 20 20 20 3b  20 73 65 74 20 75 70 20  |       ; set up |
000007d0  72 65 67 69 73 74 65 72  73 20 66 6f 72 20 65 6e  |registers for en|
000007e0  75 6d 65 72 61 74 69 6f  6e 0d 03 70 31 20 20 20  |umeration..p1   |
000007f0  20 20 20 20 20 53 57 49  20 20 20 20 20 22 58 54  |     SWI     "XT|
00000800  61 73 6b 4d 61 6e 61 67  65 72 5f 45 6e 75 6d 65  |askManager_Enume|
00000810  72 61 74 65 54 61 73 6b  73 22 0d 03 7a 42 20 20  |rateTasks"..zB  |
00000820  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 72 30  |      CMP     r0|
00000830  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
00000840  20 3b 20 72 30 3d 2d 31  20 69 66 20 72 75 6e 20  | ; r0=-1 if run |
00000850  6f 75 74 20 6f 66 20 74  61 73 6b 73 0d 03 84 1f  |out of tasks....|
00000860  20 20 20 20 20 20 20 20  42 4c 54 20 20 20 20 20  |        BLT     |
00000870  69 6e 69 74 63 6f 64 65  6f 75 74 0d 03 8e 3e 20  |initcodeout...> |
00000880  20 20 20 20 20 20 20 42  56 53 20 20 20 20 20 69  |       BVS     i|
00000890  6e 69 74 63 6f 64 65 6f  75 74 20 20 20 20 20 20  |nitcodeout      |
000008a0  20 20 3b 20 6e 6f 77 20  72 65 61 64 20 74 61 73  |  ; now read tas|
000008b0  6b 20 64 65 74 61 69 6c  73 0d 03 98 2d 20 20 20  |k details...-   |
000008c0  20 20 20 20 20 4c 44 52  20 20 20 20 20 72 36 2c  |     LDR     r6,|
000008d0  5b 77 73 2c 23 66 69 6e  64 74 61 73 6b 62 6c 6f  |[ws,#findtaskblo|
000008e0  63 6b 2b 31 32 5d 0d 03  a2 2c 20 20 20 20 20 20  |ck+12]...,      |
000008f0  20 20 4c 44 52 20 20 20  20 20 72 36 2c 5b 77 73  |  LDR     r6,[ws|
00000900  2c 23 66 69 6e 64 74 61  73 6b 62 6c 6f 63 6b 2b  |,#findtaskblock+|
00000910  34 5d 0d 03 ac 44 20 20  20 20 20 20 20 20 41 44  |4]...D        AD|
00000920  52 20 20 20 20 20 72 37  2c 66 69 6e 64 74 61 73  |R     r7,findtas|
00000930  6b 20 20 20 20 20 20 20  20 3b 20 74 61 73 6b 20  |k        ; task |
00000940  6e 61 6d 65 20 77 65 27  72 65 20 6c 6f 6f 6b 69  |name we're looki|
00000950  6e 67 20 66 6f 72 0d 03  b6 0e 2e 69 6e 69 74 6c  |ng for.....initl|
00000960  6f 6f 70 32 0d 03 c0 1e  20 20 20 20 20 20 20 20  |oop2....        |
00000970  4c 44 52 42 20 20 20 20  72 34 2c 5b 72 36 5d 2c  |LDRB    r4,[r6],|
00000980  23 31 0d 03 ca 44 20 20  20 20 20 20 20 20 4c 44  |#1...D        LD|
00000990  52 42 20 20 20 20 72 35  2c 5b 72 37 5d 2c 23 31  |RB    r5,[r7],#1|
000009a0  20 20 20 20 20 20 20 20  20 3b 20 63 6f 6d 70 61  |         ; compa|
000009b0  72 65 20 63 68 61 72 61  63 74 65 72 73 20 6f 6e  |re characters on|
000009c0  65 20 61 74 20 61 0d 03  d4 43 20 20 20 20 20 20  |e at a...C      |
000009d0  20 20 54 45 51 20 20 20  20 20 72 35 2c 23 30 20  |  TEQ     r5,#0 |
000009e0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 74  |             ; t|
000009f0  69 6d 65 20 75 6e 74 69  6c 20 65 6e 64 20 6f 66  |ime until end of|
00000a00  20 6f 75 72 20 6e 61 6d  65 0d 03 de 30 20 20 20  | our name...0   |
00000a10  20 20 20 20 20 42 45 51  20 20 20 20 20 69 6e 69  |     BEQ     ini|
00000a20  74 63 6f 64 65 32 20 20  20 20 20 20 20 20 20 20  |tcode2          |
00000a30  3b 20 72 65 61 63 68 65  64 0d 03 e8 2b 20 20 20  |; reached...+   |
00000a40  20 20 20 20 20 54 45 51  20 20 20 20 20 72 34 2c  |     TEQ     r4,|
00000a50  72 35 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r5              |
00000a60  3b 20 6f 72 0d 03 f2 38  20 20 20 20 20 20 20 20  |; or...8        |
00000a70  42 45 51 20 20 20 20 20  69 6e 69 74 6c 6f 6f 70  |BEQ     initloop|
00000a80  32 20 20 20 20 20 20 20  20 20 20 3b 20 6d 69 73  |2          ; mis|
00000a90  6d 61 74 63 68 20 6f 63  63 75 72 73 0d 03 fc 3b  |match occurs...;|
00000aa0  20 20 20 20 20 20 20 20  42 20 20 20 20 20 20 20  |        B       |
00000ab0  69 6e 69 74 6c 6f 6f 70  20 20 20 20 20 20 20 20  |initloop        |
00000ac0  20 20 20 3b 20 67 65 74  20 6e 65 78 74 20 74 61  |   ; get next ta|
00000ad0  73 6b 20 69 6e 66 6f 0d  04 06 0e 2e 69 6e 69 74  |sk info.....init|
00000ae0  63 6f 64 65 32 0d 04 10  2a 20 20 20 20 20 20 20  |code2...*       |
00000af0  20 4c 44 52 20 20 20 20  20 72 33 2c 5b 77 73 2c  | LDR     r3,[ws,|
00000b00  23 66 69 6e 64 74 61 73  6b 62 6c 6f 63 6b 5d 0d  |#findtaskblock].|
00000b10  04 1a 2c 20 20 20 20 20  20 20 20 53 54 52 20 20  |..,        STR  |
00000b20  20 20 20 72 33 2c 5b 77  73 2c 23 66 6f 75 6e 64  |   r3,[ws,#found|
00000b30  74 61 73 6b 68 61 6e 64  6c 65 5d 0d 04 24 05 3b  |taskhandle]..$.;|
00000b40  0d 04 2e 46 3b 20 20 73  65 74 20 75 70 20 66 69  |...F;  set up fi|
00000b50  6c 74 65 72 2e 20 20 72  33 20 61 6c 72 65 61 64  |lter.  r3 alread|
00000b60  79 20 68 61 73 20 74 68  65 20 74 61 73 6b 20 68  |y has the task h|
00000b70  61 6e 64 6c 65 20 6f 66  20 74 68 65 20 74 61 73  |andle of the tas|
00000b80  6b 20 66 72 6f 6d 0d 04  38 19 3b 20 20 74 68 65  |k from..8.;  the|
00000b90  20 70 72 65 76 69 6f 75  73 20 63 6f 64 65 2e 0d  | previous code..|
00000ba0  04 42 05 3b 0d 04 4c 21  20 20 20 20 20 20 20 20  |.B.;..L!        |
00000bb0  41 44 52 20 20 20 20 20  72 30 2c 66 69 6c 74 65  |ADR     r0,filte|
00000bc0  72 6e 61 6d 65 0d 04 56  21 20 20 20 20 20 20 20  |rname..V!       |
00000bd0  20 41 44 52 20 20 20 20  20 72 31 2c 66 69 6c 74  | ADR     r1,filt|
00000be0  65 72 63 6f 64 65 0d 04  60 19 20 20 20 20 20 20  |ercode..`.      |
00000bf0  20 20 4d 4f 56 20 20 20  20 20 72 32 2c 77 73 0d  |  MOV     r2,ws.|
00000c00  04 6a 21 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.j!        LDR  |
00000c10  20 20 20 72 34 2c 66 69  6c 74 65 72 6d 61 73 6b  |   r4,filtermask|
00000c20  0d 04 74 30 20 20 20 20  20 20 20 20 53 57 49 20  |..t0        SWI |
00000c30  20 20 20 20 22 58 46 69  6c 74 65 72 5f 52 65 67  |    "XFilter_Reg|
00000c40  69 73 74 65 72 50 6f 73  74 46 69 6c 74 65 72 22  |isterPostFilter"|
00000c50  0d 04 7e 19 20 20 20 20  20 20 20 20 4d 4f 56 20  |..~.        MOV |
00000c60  20 20 20 20 72 30 2c 23  30 0d 04 88 2d 20 20 20  |    r0,#0...-   |
00000c70  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
00000c80  5b 77 73 2c 23 74 65 6d  70 6c 61 74 65 73 6c 6f  |[ws,#templateslo|
00000c90  61 64 65 64 25 5d 0d 04  92 10 2e 69 6e 69 74 63  |aded%].....initc|
00000ca0  6f 64 65 6f 75 74 0d 04  9c 25 20 20 20 20 20 20  |odeout...%      |
00000cb0  20 20 4c 44 4d 46 44 20  20 20 28 73 70 29 21 2c  |  LDMFD   (sp)!,|
00000cc0  7b 72 30 2d 72 31 31 2c  70 63 7d 0d 04 a6 0d 2e  |{r0-r11,pc}.....|
00000cd0  66 69 6e 64 74 61 73 6b  0d 04 b0 27 20 20 20 20  |findtask...'    |
00000ce0  20 20 20 20 a4 73 74 72  69 6e 67 30 28 22 44 69  |    .string0("Di|
00000cf0  73 70 6c 61 79 20 4d 61  6e 61 67 65 72 22 29 0d  |splay Manager").|
00000d00  04 ba 0f 2e 66 69 6c 74  65 72 6e 61 6d 65 0d 04  |....filtername..|
00000d10  c4 21 20 20 20 20 20 20  20 20 a4 73 74 72 69 6e  |.!        .strin|
00000d20  67 30 28 66 69 6c 74 65  72 6e 61 6d 65 24 29 0d  |g0(filtername$).|
00000d30  04 ce 0f 2e 66 69 6c 74  65 72 6d 61 73 6b 0d 04  |....filtermask..|
00000d40  d8 1b 20 20 20 20 20 20  20 20 45 51 55 44 20 20  |..        EQUD  |
00000d50  20 20 20 66 6d 61 73 6b  25 0d 04 e2 05 5d 0d 04  |   fmask%....]..|
00000d60  ec 05 cd 0d 04 f6 04 0d  05 00 15 e7 20 66 69 6e  |............ fin|
00000d70  61 6c 63 6f 64 65 3c 3e  20 30 20 8c 0d 05 0a 0e  |alcode<> 0 .....|
00000d80  5b 20 4f 50 54 20 70 61  73 73 0d 05 14 0e 2e 66  |[ OPT pass.....f|
00000d90  69 6e 61 6c 63 6f 64 65  0d 05 1e 27 20 20 20 20  |inalcode...'    |
00000da0  20 20 20 20 53 54 4d 46  44 20 20 20 28 73 70 29  |    STMFD   (sp)|
00000db0  21 2c 7b 72 30 2d 72 31  31 2c 6c 69 6e 6b 7d 0d  |!,{r0-r11,link}.|
00000dc0  05 28 1b 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.(.        LDR  |
00000dd0  20 20 20 77 73 2c 5b 77  73 5d 0d 05 32 05 3b 0d  |   ws,[ws]..2.;.|
00000de0  05 3c 3c 3b 20 20 63 68  65 63 6b 20 69 66 20 66  |.<<;  check if f|
00000df0  69 6c 74 65 72 20 6c 6f  61 64 65 64 20 61 6e 64  |ilter loaded and|
00000e00  20 64 65 72 65 67 69 73  74 65 72 20 69 74 20 61  | deregister it a|
00000e10  73 20 6e 65 63 65 73 73  61 72 79 0d 05 46 05 3b  |s necessary..F.;|
00000e20  0d 05 50 2c 20 20 20 20  20 20 20 20 4c 44 52 20  |..P,        LDR |
00000e30  20 20 20 20 72 33 2c 5b  77 73 2c 23 66 6f 75 6e  |    r3,[ws,#foun|
00000e40  64 74 61 73 6b 68 61 6e  64 6c 65 5d 0d 05 5a 47  |dtaskhandle]..ZG|
00000e50  20 20 20 20 20 20 20 20  54 45 51 20 20 20 20 20  |        TEQ     |
00000e60  72 33 2c 23 30 20 20 20  20 20 20 20 20 20 20 20  |r3,#0           |
00000e70  20 20 20 3b 20 68 61 6e  64 6c 65 20 6f 66 20 74  |   ; handle of t|
00000e80  61 73 6b 20 77 65 27 72  65 20 66 69 6c 74 65 72  |ask we're filter|
00000e90  69 6e 67 0d 05 64 42 20  20 20 20 20 20 20 20 42  |ing..dB        B|
00000ea0  45 51 20 20 20 20 20 66  69 6e 61 6c 63 6f 64 65  |EQ     finalcode|
00000eb0  31 20 20 20 20 20 20 20  20 20 3b 20 3d 30 20 69  |1         ; =0 i|
00000ec0  66 20 6e 6f 20 66 69 6c  74 65 72 20 61 74 74 61  |f no filter atta|
00000ed0  63 68 65 64 2e 0d 05 6e  21 20 20 20 20 20 20 20  |ched...n!       |
00000ee0  20 41 44 52 20 20 20 20  20 72 30 2c 66 69 6c 74  | ADR     r0,filt|
00000ef0  65 72 6e 61 6d 65 0d 05  78 21 20 20 20 20 20 20  |ername..x!      |
00000f00  20 20 41 44 52 20 20 20  20 20 72 31 2c 66 69 6c  |  ADR     r1,fil|
00000f10  74 65 72 63 6f 64 65 0d  05 82 19 20 20 20 20 20  |tercode....     |
00000f20  20 20 20 4d 4f 56 20 20  20 20 20 72 32 2c 77 73  |   MOV     r2,ws|
00000f30  0d 05 8c 21 20 20 20 20  20 20 20 20 4c 44 52 20  |...!        LDR |
00000f40  20 20 20 20 72 34 2c 66  69 6c 74 65 72 6d 61 73  |    r4,filtermas|
00000f50  6b 0d 05 96 32 20 20 20  20 20 20 20 20 53 57 49  |k...2        SWI|
00000f60  20 20 20 20 20 22 58 46  69 6c 74 65 72 5f 44 65  |     "XFilter_De|
00000f70  52 65 67 69 73 74 65 72  50 6f 73 74 46 69 6c 74  |RegisterPostFilt|
00000f80  65 72 22 0d 05 a0 05 3b  0d 05 aa 0f 2e 66 69 6e  |er"....;.....fin|
00000f90  61 6c 63 6f 64 65 31 0d  05 b4 28 20 20 20 20 20  |alcode1...(     |
00000fa0  20 20 20 42 4c 20 20 20  20 20 20 72 65 6c 65 61  |   BL      relea|
00000fb0  73 65 74 65 6d 70 6c 61  74 65 62 6c 6f 63 6b 0d  |setemplateblock.|
00000fc0  05 be 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00000fd0  20 20 20 72 30 2c 23 37  0d 05 c8 19 20 20 20 20  |   r0,#7....    |
00000fe0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 32 2c 77  |    MOV     r2,w|
00000ff0  73 0d 05 d2 41 20 20 20  20 20 20 20 20 53 57 49  |s...A        SWI|
00001000  20 20 20 20 20 22 58 4f  53 5f 4d 6f 64 75 6c 65  |     "XOS_Module|
00001010  22 20 20 20 20 20 20 20  3b 20 72 65 6c 65 61 73  |"       ; releas|
00001020  65 20 6d 6f 64 75 6c 65  20 77 6f 72 6b 73 70 61  |e module workspa|
00001030  63 65 0d 05 dc 25 20 20  20 20 20 20 20 20 4c 44  |ce...%        LD|
00001040  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 30 2d  |MFD   (sp)!,{r0-|
00001050  72 31 31 2c 70 63 7d 0d  05 e6 05 5d 0d 05 f0 05  |r11,pc}....]....|
00001060  cd 0d 05 fa 04 0d 06 04  17 e7 20 73 65 72 76 69  |.......... servi|
00001070  63 65 63 6f 64 65 3c 3e  20 30 20 8c 0d 06 0e 0e  |cecode<> 0 .....|
00001080  5b 20 4f 50 54 20 70 61  73 73 0d 06 18 10 2e 73  |[ OPT pass.....s|
00001090  65 72 76 69 63 65 63 6f  64 65 0d 06 22 20 20 20  |ervicecode.."   |
000010a0  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 28 73  |      STMFD   (s|
000010b0  70 29 21 2c 7b 6c 69 6e  6b 7d 0d 06 2c 1b 20 20  |p)!,{link}..,.  |
000010c0  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 77 73  |      LDR     ws|
000010d0  2c 5b 77 73 5d 0d 06 36  1e 20 20 20 20 20 20 20  |,[ws]..6.       |
000010e0  20 4c 44 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | LDMFD   (sp)!,{|
000010f0  70 63 7d 0d 06 40 05 5d  0d 06 4a 05 cd 0d 06 54  |pc}..@.]..J....T|
00001100  04 0d 06 5e 0e 5b 20 4f  50 54 20 70 61 73 73 0d  |...^.[ OPT pass.|
00001110  06 68 04 0d 06 72 0f 2e  66 69 6c 74 65 72 63 6f  |.h...r..filterco|
00001120  64 65 0d 06 7c 27 20 20  20 20 20 20 20 20 53 54  |de..|'        ST|
00001130  4d 46 44 20 20 20 28 73  70 29 21 2c 7b 72 31 2d  |MFD   (sp)!,{r1-|
00001140  72 31 31 2c 6c 69 6e 6b  7d 0d 06 86 3a 20 20 20  |r11,link}...:   |
00001150  20 20 20 20 20 54 45 51  20 20 20 20 20 72 30 2c  |     TEQ     r0,|
00001160  23 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#6              |
00001170  3b 20 6d 6f 75 73 65 20  63 6c 69 63 6b 20 65 76  |; mouse click ev|
00001180  65 6e 74 0d 06 90 1f 20  20 20 20 20 20 20 20 42  |ent....        B|
00001190  4e 45 20 20 20 20 20 66  69 6c 74 65 72 63 6f 64  |NE     filtercod|
000011a0  65 31 0d 06 9a 2d 20 20  20 20 20 20 20 20 4c 44  |e1...-        LD|
000011b0  52 20 20 20 20 20 72 38  2c 5b 77 73 2c 23 74 65  |R     r8,[ws,#te|
000011c0  6d 70 6c 61 74 65 73 6c  6f 61 64 65 64 25 5d 0d  |mplatesloaded%].|
000011d0  06 a4 43 20 20 20 20 20  20 20 20 54 45 51 20 20  |..C        TEQ  |
000011e0  20 20 20 72 38 2c 23 30  20 20 20 20 20 20 20 20  |   r8,#0        |
000011f0  20 20 20 20 20 20 3b 20  63 68 65 63 6b 20 77 68  |      ; check wh|
00001200  65 74 68 65 72 20 77 65  27 76 65 20 6c 6f 61 64  |ether we've load|
00001210  65 64 0d 06 ae 37 20 20  20 20 20 20 20 20 42 4e  |ed...7        BN|
00001220  45 20 20 20 20 20 66 69  6c 74 65 72 63 6f 64 65  |E     filtercode|
00001230  30 20 20 20 20 20 20 20  20 3b 20 6f 75 72 20 74  |0        ; our t|
00001240  65 6d 70 6c 61 74 65 73  21 0d 06 b8 19 20 20 20  |emplates!....   |
00001250  20 20 20 20 20 4d 56 4e  20 20 20 20 20 72 38 2c  |     MVN     r8,|
00001260  23 30 0d 06 c2 2d 20 20  20 20 20 20 20 20 53 54  |#0...-        ST|
00001270  52 20 20 20 20 20 72 38  2c 5b 77 73 2c 23 74 65  |R     r8,[ws,#te|
00001280  6d 70 6c 61 74 65 73 6c  6f 61 64 65 64 25 5d 0d  |mplatesloaded%].|
00001290  06 cc 21 20 20 20 20 20  20 20 20 42 4c 20 20 20  |..!        BL   |
000012a0  20 20 20 6c 6f 61 64 74  65 6d 70 6c 61 74 65 73  |   loadtemplates|
000012b0  0d 06 d6 24 20 20 20 20  20 20 20 20 41 44 52 20  |...$        ADR |
000012c0  20 20 20 20 72 38 2c 6d  6f 64 65 73 6d 65 6e 75  |    r8,modesmenu|
000012d0  69 6e 66 6f 0d 06 e0 27  20 20 20 20 20 20 20 20  |info...'        |
000012e0  4c 44 52 20 20 20 20 20  72 39 2c 5b 77 73 2c 23  |LDR     r9,[ws,#|
000012f0  74 65 6d 70 6c 61 74 65  31 25 5d 0d 06 ea 47 20  |template1%]...G |
00001300  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 72  |       STR     r|
00001310  39 2c 5b 72 38 2c 23 34  5d 20 20 20 20 20 20 20  |9,[r8,#4]       |
00001320  20 20 3b 20 61 74 74 61  63 68 20 22 69 6e 66 6f  |  ; attach "info|
00001330  22 20 74 65 6d 70 6c 61  74 65 20 74 6f 20 6d 65  |" template to me|
00001340  6e 75 0d 06 f4 10 2e 66  69 6c 74 65 72 63 6f 64  |nu.....filtercod|
00001350  65 30 0d 06 fe 46 20 20  20 20 20 20 20 20 4d 4f  |e0...F        MO|
00001360  56 20 20 20 20 20 72 38  2c 23 30 20 20 20 20 20  |V     r8,#0     |
00001370  20 20 20 20 20 20 20 20  20 3b 20 6f 75 72 6d 65  |         ; ourme|
00001380  6e 75 20 69 73 20 61 20  66 6c 61 67 2e 20 20 49  |nu is a flag.  I|
00001390  74 20 3d 2d 31 20 69 66  0d 07 08 42 20 20 20 20  |t =-1 if...B    |
000013a0  20 20 20 20 53 54 52 20  20 20 20 20 72 38 2c 5b  |    STR     r8,[|
000013b0  77 73 2c 23 6f 75 72 6d  65 6e 75 5d 20 20 20 3b  |ws,#ourmenu]   ;|
000013c0  20 66 69 6c 74 65 72 20  67 65 6e 65 72 61 74 65  | filter generate|
000013d0  64 20 74 68 65 20 6d 65  6e 75 0d 07 12 1f 20 20  |d the menu....  |
000013e0  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 38  |      LDR     r8|
000013f0  2c 5b 72 31 2c 23 31 32  5d 0d 07 1c 3a 20 20 20  |,[r1,#12]...:   |
00001400  20 20 20 20 20 43 4d 4e  20 20 20 20 20 72 38 2c  |     CMN     r8,|
00001410  23 32 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#2              |
00001420  3b 20 69 63 6f 6e 20 62  61 72 20 63 6c 69 63 6b  |; icon bar click|
00001430  65 64 3f 0d 07 26 21 20  20 20 20 20 20 20 20 42  |ed?..&!        B|
00001440  4e 45 20 20 20 20 20 66  69 6c 74 65 72 63 6f 64  |NE     filtercod|
00001450  65 6f 75 74 0d 07 30 1e  20 20 20 20 20 20 20 20  |eout..0.        |
00001460  4c 44 52 20 20 20 20 20  72 38 2c 5b 72 31 2c 23  |LDR     r8,[r1,#|
00001470  38 5d 0d 07 3a 38 20 20  20 20 20 20 20 20 54 45  |8]..:8        TE|
00001480  51 20 20 20 20 20 72 38  2c 23 31 20 20 20 20 20  |Q     r8,#1     |
00001490  20 20 20 20 20 20 20 20  20 3b 20 61 64 6a 75 73  |         ; adjus|
000014a0  74 20 70 72 65 73 73 65  64 3f 0d 07 44 43 20 20  |t pressed?..DC  |
000014b0  20 20 20 20 20 20 42 4e  45 20 20 20 20 20 66 69  |      BNE     fi|
000014c0  6c 74 65 72 63 6f 64 65  6f 75 74 20 20 20 20 20  |ltercodeout     |
000014d0  20 3b 20 6e 6f 21 20 20  4e 6f 74 68 69 6e 67 20  | ; no!  Nothing |
000014e0  74 6f 20 64 6f 20 77 69  74 68 20 75 73 0d 07 4e  |to do with us..N|
000014f0  20 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |         ADR    |
00001500  20 72 30 2c 6d 6f 64 65  73 6d 65 6e 75 0d 07 58  | r0,modesmenu..X|
00001510  1f 20 20 20 20 20 20 20  20 42 4c 20 20 20 20 20  |.        BL     |
00001520  20 69 63 6f 6e 62 61 72  6d 65 6e 75 0d 07 62 19  | iconbarmenu..b.|
00001530  20 20 20 20 20 20 20 20  4d 56 4e 20 20 20 20 20  |        MVN     |
00001540  72 30 2c 23 30 0d 07 6c  39 20 20 20 20 20 20 20  |r0,#0..l9       |
00001550  20 53 54 52 20 20 20 20  20 72 30 2c 5b 77 73 2c  | STR     r0,[ws,|
00001560  23 6f 75 72 6d 65 6e 75  5d 20 20 20 3b 20 73 65  |#ourmenu]   ; se|
00001570  74 20 6f 75 72 6d 65 6e  75 20 66 6c 61 67 0d 07  |t ourmenu flag..|
00001580  76 21 20 20 20 20 20 20  20 20 42 20 20 20 20 20  |v!        B     |
00001590  20 20 66 69 6c 74 65 72  63 6f 64 65 6f 75 74 0d  |  filtercodeout.|
000015a0  07 80 10 2e 66 69 6c 74  65 72 63 6f 64 65 31 0d  |....filtercode1.|
000015b0  07 8a 3a 20 20 20 20 20  20 20 20 54 45 51 20 20  |..:        TEQ  |
000015c0  20 20 20 52 30 2c 23 39  20 20 20 20 20 20 20 20  |   R0,#9        |
000015d0  20 20 20 20 20 20 3b 20  6d 65 6e 75 20 63 68 6f  |      ; menu cho|
000015e0  69 63 65 20 65 76 65 6e  74 0d 07 94 21 20 20 20  |ice event...!   |
000015f0  20 20 20 20 20 42 4e 45  20 20 20 20 20 66 69 6c  |     BNE     fil|
00001600  74 65 72 63 6f 64 65 6f  75 74 0d 07 9e 24 20 20  |tercodeout...$  |
00001610  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 72 38  |      LDR     r8|
00001620  2c 5b 77 73 2c 23 6f 75  72 6d 65 6e 75 5d 0d 07  |,[ws,#ourmenu]..|
00001630  a8 43 20 20 20 20 20 20  20 20 54 45 51 20 20 20  |.C        TEQ   |
00001640  20 20 72 38 2c 23 30 20  20 20 20 20 20 20 20 20  |  r8,#0         |
00001650  20 20 20 20 20 3b 20 63  68 65 63 6b 20 66 6c 61  |     ; check fla|
00001660  67 20 69 73 20 69 74 20  6f 75 72 20 6d 65 6e 75  |g is it our menu|
00001670  3f 0d 07 b2 3f 20 20 20  20 20 20 20 20 42 45 51  |?...?        BEQ|
00001680  20 20 20 20 20 66 69 6c  74 65 72 63 6f 64 65 6f  |     filtercodeo|
00001690  75 74 20 20 20 20 20 20  3b 20 6e 6f 2c 20 74 68  |ut      ; no, th|
000016a0  65 6e 20 73 74 61 6e 64  61 72 64 20 6d 65 6e 75  |en standard menu|
000016b0  0d 07 bc 1b 20 20 20 20  20 20 20 20 4c 44 52 20  |....        LDR |
000016c0  20 20 20 20 72 38 2c 5b  72 31 5d 0d 07 c6 19 20  |    r8,[r1].... |
000016d0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 72  |       CMP     r|
000016e0  38 2c 23 32 0d 07 d0 3e  20 20 20 20 20 20 20 20  |8,#2...>        |
000016f0  42 4c 54 20 20 20 20 20  66 69 6c 74 65 72 63 6f  |BLT     filterco|
00001700  64 65 32 20 20 20 20 20  20 20 20 3b 20 69 73 20  |de2        ; is |
00001710  69 74 20 61 20 6d 6f 64  65 20 6e 75 6d 62 65 72  |it a mode number|
00001720  20 3f 0d 07 da 1c 20 20  20 20 20 20 20 20 53 55  | ?....        SU|
00001730  42 20 20 20 20 20 72 38  2c 72 38 2c 23 32 0d 07  |B     r8,r8,#2..|
00001740  e4 21 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |.!        ADR   |
00001750  20 20 72 39 2c 6d 6f 64  65 73 74 61 62 6c 65 0d  |  r9,modestable.|
00001760  07 ee 45 20 20 20 20 20  20 20 20 4c 44 52 42 20  |..E        LDRB |
00001770  20 20 20 72 30 2c 5b 72  39 2c 72 38 5d 20 20 20  |   r0,[r9,r8]   |
00001780  20 20 20 20 20 20 3b 20  69 66 20 79 65 73 20 61  |      ; if yes a|
00001790  64 6a 75 73 74 20 61 6e  64 20 72 65 61 64 20 74  |djust and read t|
000017a0  61 62 6c 65 0d 07 f8 3b  20 20 20 20 20 20 20 20  |able...;        |
000017b0  53 57 49 20 20 20 20 20  22 58 57 69 6d 70 5f 53  |SWI     "XWimp_S|
000017c0  65 74 4d 6f 64 65 22 20  20 20 20 3b 20 73 65 74  |etMode"    ; set|
000017d0  20 74 68 65 20 6d 6f 64  65 21 21 21 21 21 21 0d  | the mode!!!!!!.|
000017e0  08 02 1f 20 20 20 20 20  20 20 20 42 20 20 20 20  |...        B    |
000017f0  20 20 20 66 69 6c 74 65  72 63 6f 64 65 33 0d 08  |   filtercode3..|
00001800  0c 10 2e 66 69 6c 74 65  72 63 6f 64 65 32 0d 08  |...filtercode2..|
00001810  16 34 20 20 20 20 20 20  20 20 54 45 51 20 20 20  |.4        TEQ   |
00001820  20 20 72 38 2c 23 31 20  20 20 20 20 20 20 20 20  |  r8,#1         |
00001830  20 20 20 20 20 3b 20 69  73 20 69 74 20 71 75 69  |     ; is it qui|
00001840  74 3f 0d 08 20 1f 20 20  20 20 20 20 20 20 42 4e  |t?.. .        BN|
00001850  45 20 20 20 20 20 66 69  6c 74 65 72 63 6f 64 65  |E     filtercode|
00001860  33 0d 08 2a 2c 20 20 20  20 20 20 20 20 4c 44 52  |3..*,        LDR|
00001870  20 20 20 20 20 72 33 2c  5b 77 73 2c 23 66 6f 75  |     r3,[ws,#fou|
00001880  6e 64 74 61 73 6b 68 61  6e 64 6c 65 5d 0d 08 34  |ndtaskhandle]..4|
00001890  21 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |!        ADR    |
000018a0  20 72 30 2c 66 69 6c 74  65 72 6e 61 6d 65 0d 08  | r0,filtername..|
000018b0  3e 21 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |>!        ADR   |
000018c0  20 20 72 31 2c 66 69 6c  74 65 72 63 6f 64 65 0d  |  r1,filtercode.|
000018d0  08 48 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.H.        MOV  |
000018e0  20 20 20 72 32 2c 77 73  0d 08 52 33 20 20 20 20  |   r2,ws..R3    |
000018f0  20 20 20 20 4c 44 52 20  20 20 20 20 72 34 2c 66  |    LDR     r4,f|
00001900  69 6c 74 65 72 6d 61 73  6b 20 20 20 20 20 20 3b  |iltermask      ;|
00001910  20 64 65 72 65 67 69 73  74 65 72 0d 08 5c 32 20  | deregister..\2 |
00001920  20 20 20 20 20 20 20 53  57 49 20 20 20 20 20 22  |       SWI     "|
00001930  58 46 69 6c 74 65 72 5f  44 65 52 65 67 69 73 74  |XFilter_DeRegist|
00001940  65 72 50 6f 73 74 46 69  6c 74 65 72 22 0d 08 66  |erPostFilter"..f|
00001950  33 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |3        MOV    |
00001960  20 72 33 2c 23 30 20 20  20 20 20 20 20 20 20 20  | r3,#0          |
00001970  20 20 20 20 3b 20 63 6c  65 61 72 20 66 6c 61 67  |    ; clear flag|
00001980  0d 08 70 2c 20 20 20 20  20 20 20 20 53 54 52 20  |..p,        STR |
00001990  20 20 20 20 72 33 2c 5b  77 73 2c 23 66 6f 75 6e  |    r3,[ws,#foun|
000019a0  64 74 61 73 6b 68 61 6e  64 6c 65 5d 0d 08 7a 10  |dtaskhandle]..z.|
000019b0  2e 66 69 6c 74 65 72 63  6f 64 65 33 0d 08 84 19  |.filtercode3....|
000019c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
000019d0  72 30 2c 23 30 0d 08 8e  24 20 20 20 20 20 20 20  |r0,#0...$       |
000019e0  20 53 54 52 20 20 20 20  20 72 30 2c 5b 77 73 2c  | STR     r0,[ws,|
000019f0  23 6f 75 72 6d 65 6e 75  5d 0d 08 98 4a 20 20 20  |#ourmenu]...J   |
00001a00  20 20 20 20 20 4d 56 4e  20 20 20 20 20 72 30 2c  |     MVN     r0,|
00001a10  23 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#0              |
00001a20  3b 20 72 30 20 3d 20 2d  31 20 63 6c 61 69 6d 73  |; r0 = -1 claims|
00001a30  20 77 69 6d 70 70 6f 6c  6c 20 66 72 6f 6d 20 74  | wimppoll from t|
00001a40  61 73 6b 0d 08 a2 12 2e  66 69 6c 74 65 72 63 6f  |ask.....filterco|
00001a50  64 65 6f 75 74 0d 08 ac  27 20 20 20 20 20 20 20  |deout...'       |
00001a60  20 4c 44 4d 46 44 20 20  20 28 73 70 29 21 2c 7b  | LDMFD   (sp)!,{|
00001a70  72 31 2d 72 31 31 2c 6c  69 6e 6b 7d 0d 08 b6 1b  |r1-r11,link}....|
00001a80  20 20 20 20 20 20 20 20  4d 4f 56 53 20 20 20 20  |        MOVS    |
00001a90  70 63 2c 6c 69 6e 6b 0d  08 c0 04 0d 08 ca 0e 2e  |pc,link.........|
00001aa0  6d 6f 64 65 73 6d 65 6e  75 0d 08 d4 23 20 20 20  |modesmenu...#   |
00001ab0  20 20 20 20 20 a4 6d 65  6e 75 68 65 61 64 65 72  |     .menuheader|
00001ac0  28 22 4d 6f 64 65 73 22  2c 38 30 29 0d 08 de 12  |("Modes",80)....|
00001ad0  2e 6d 6f 64 65 73 6d 65  6e 75 69 6e 66 6f 0d 08  |.modesmenuinfo..|
00001ae0  e8 22 20 20 20 20 20 20  20 20 a4 6d 65 6e 75 69  |."        .menui|
00001af0  74 65 6d 28 22 49 6e 66  6f 22 2c 30 2c 2d 31 29  |tem("Info",0,-1)|
00001b00  0d 08 f2 25 20 20 20 20  20 20 20 20 a4 6d 65 6e  |...%        .men|
00001b10  75 69 74 65 6d 28 22 51  75 69 74 22 2c 31 3c 3c  |uitem("Quit",1<<|
00001b20  31 2c 2d 31 29 0d 08 fc  20 20 20 20 20 20 20 20  |1,-1)...        |
00001b30  20 a4 6d 65 6e 75 69 74  65 6d 28 22 31 32 22 2c  | .menuitem("12",|
00001b40  30 2c 2d 31 29 0d 09 06  20 20 20 20 20 20 20 20  |0,-1)...        |
00001b50  20 a4 6d 65 6e 75 69 74  65 6d 28 22 31 35 22 2c  | .menuitem("15",|
00001b60  30 2c 2d 31 29 0d 09 10  20 20 20 20 20 20 20 20  |0,-1)...        |
00001b70  20 a4 6d 65 6e 75 69 74  65 6d 28 22 32 37 22 2c  | .menuitem("27",|
00001b80  30 2c 2d 31 29 0d 09 1a  20 20 20 20 20 20 20 20  |0,-1)...        |
00001b90  20 a4 6d 65 6e 75 69 74  65 6d 28 22 32 38 22 2c  | .menuitem("28",|
00001ba0  30 2c 2d 31 29 0d 09 24  20 20 20 20 20 20 20 20  |0,-1)..$        |
00001bb0  20 a4 6d 65 6e 75 69 74  65 6d 28 22 33 31 22 2c  | .menuitem("31",|
00001bc0  30 2c 2d 31 29 0d 09 2e  23 20 20 20 20 20 20 20  |0,-1)...#       |
00001bd0  20 a4 6d 65 6e 75 69 74  65 6d 28 22 33 32 22 2c  | .menuitem("32",|
00001be0  31 3c 3c 37 2c 2d 31 29  0d 09 38 05 3b 0d 09 42  |1<<7,-1)..8.;..B|
00001bf0  0f 2e 6d 6f 64 65 73 74  61 62 6c 65 0d 09 4c 13  |..modestable..L.|
00001c00  20 20 20 20 20 20 20 20  45 51 55 42 20 31 32 0d  |        EQUB 12.|
00001c10  09 56 13 20 20 20 20 20  20 20 20 45 51 55 42 20  |.V.        EQUB |
00001c20  31 35 0d 09 60 13 20 20  20 20 20 20 20 20 45 51  |15..`.        EQ|
00001c30  55 42 20 32 37 0d 09 6a  13 20 20 20 20 20 20 20  |UB 27..j.       |
00001c40  20 45 51 55 42 20 32 38  0d 09 74 13 20 20 20 20  | EQUB 28..t.    |
00001c50  20 20 20 20 45 51 55 42  20 33 31 0d 09 7e 13 20  |    EQUB 31..~. |
00001c60  20 20 20 20 20 20 20 45  51 55 42 20 33 32 0d 09  |       EQUB 32..|
00001c70  88 05 3b 0d 09 92 12 3b  20 20 73 75 62 72 6f 75  |..;....;  subrou|
00001c80  74 69 6e 65 73 0d 09 9c  05 3b 0d 09 a6 18 20 20  |tines....;....  |
00001c90  20 20 20 20 20 20 a4 69  63 6f 6e 62 61 72 6d 65  |      .iconbarme|
00001ca0  6e 75 0d 09 b0 40 20 20  20 20 20 20 20 20 a4 6c  |nu...@        .l|
00001cb0  6f 61 64 74 65 6d 70 6c  61 74 65 73 28 22 3c 4f  |oadtemplates("<O|
00001cc0  6c 64 4d 6f 64 65 73 24  44 69 72 3e 2e 54 65 6d  |ldModes$Dir>.Tem|
00001cd0  70 6c 61 74 65 73 22 2c  26 32 30 30 2c 26 32 30  |plates",&200,&20|
00001ce0  30 29 0d 09 ba 21 20 20  20 20 20 20 20 20 a4 72  |0)...!        .r|
00001cf0  65 6c 65 61 73 65 74 65  6d 70 6c 61 74 65 62 6c  |eleasetemplatebl|
00001d00  6f 63 6b 0d 09 c4 04 0d  09 ce 05 5d 0d 09 d8 04  |ock........]....|
00001d10  0d 09 e2 05 e1 0d 09 ec  04 0d 09 f6 36 dd 20 a4  |............6. .|
00001d20  63 6f 6d 6d 61 6e 64 28  6e 61 6d 65 24 2c 63 6f  |command(name$,co|
00001d30  6d 63 6f 64 65 25 2c 69  6e 66 6f 77 6f 72 64 25  |mcode%,infoword%|
00001d40  2c 73 79 6e 74 61 78 25  2c 68 65 6c 70 25 29 0d  |,syntax%,help%).|
00001d50  0a 00 0e 5b 20 4f 50 54  20 70 61 73 73 0d 0a 0a  |...[ OPT pass...|
00001d60  13 20 20 20 45 51 55 53  20 20 20 6e 61 6d 65 24  |.   EQUS   name$|
00001d70  0d 0a 14 0f 20 20 20 45  51 55 42 20 20 20 30 0d  |....   EQUB   0.|
00001d80  0a 1e 0c 20 20 20 41 4c  49 47 4e 0d 0a 28 16 20  |...   ALIGN..(. |
00001d90  20 20 45 51 55 44 20 20  20 63 6f 6d 63 6f 64 65  |  EQUD   comcode|
00001da0  25 0d 0a 32 17 20 20 20  45 51 55 44 20 20 20 69  |%..2.   EQUD   i|
00001db0  6e 66 6f 77 6f 72 64 25  0d 0a 3c 15 20 20 20 45  |nfoword%..<.   E|
00001dc0  51 55 44 20 20 20 73 79  6e 74 61 78 25 0d 0a 46  |QUD   syntax%..F|
00001dd0  13 20 20 20 45 51 55 44  20 20 20 68 65 6c 70 25  |.   EQUD   help%|
00001de0  0d 0a 50 05 5d 0d 0a 5a  09 3d 70 61 73 73 0d 0a  |..P.]..Z.=pass..|
00001df0  64 04 0d 0a 6e 17 dd 20  a4 73 74 72 69 6e 67 30  |d...n.. .string0|
00001e00  28 73 74 72 69 6e 67 24  29 0d 0a 78 0e 5b 20 4f  |(string$)..x.[ O|
00001e10  50 54 20 70 61 73 73 0d  0a 82 15 20 20 20 45 51  |PT pass....   EQ|
00001e20  55 53 20 20 20 73 74 72  69 6e 67 24 0d 0a 8c 0f  |US   string$....|
00001e30  20 20 20 45 51 55 42 20  20 20 30 0d 0a 96 0c 20  |   EQUB   0.... |
00001e40  20 20 41 4c 49 47 4e 0d  0a a0 05 5d 0d 0a aa 09  |  ALIGN....]....|
00001e50  3d 70 61 73 73 0d 0a b4  04 0d 0a be 11 dd 20 f2  |=pass......... .|
00001e60  69 6e 69 74 5f 66 6c 61  67 73 0d 0a c8 16 72 75  |init_flags....ru|
00001e70  6e 63 6f 64 65 20 20 20  20 20 20 20 20 20 3d a3  |ncode         =.|
00001e80  0d 0a d2 16 69 6e 69 74  63 6f 64 65 20 20 20 20  |....initcode    |
00001e90  20 20 20 20 3d b9 0d 0a  dc 16 66 69 6e 61 6c 63  |    =.....finalc|
00001ea0  6f 64 65 20 20 20 20 20  20 20 3d b9 0d 0a e6 16  |ode       =.....|
00001eb0  73 65 72 76 69 63 65 63  6f 64 65 20 20 20 20 20  |servicecode     |
00001ec0  3d b9 0d 0a f0 16 63 6f  6d 6d 61 6e 64 74 61 62  |=.....commandtab|
00001ed0  6c 65 20 20 20 20 3d b9  0d 0a fa 05 e1 0d 0b 04  |le    =.........|
00001ee0  04 0d 0b 0e 10 dd 20 f2  69 6e 69 74 5f 76 61 72  |...... .init_var|
00001ef0  73 0d 0b 18 15 74 69 74  6c 65 24 3d 22 4f 6c 64  |s....title$="Old|
00001f00  4d 6f 64 65 73 22 0d 0b  22 13 64 61 74 65 24 3d  |Modes"..".date$=|
00001f10  c1 91 24 2c 35 2c 31 31  29 0d 0b 2c 19 68 65 6c  |..$,5,11)..,.hel|
00001f20  70 74 65 78 74 24 3d 22  4f 6c 64 20 4d 6f 64 65  |ptext$="Old Mode|
00001f30  73 22 0d 0b 36 18 72 6d  61 5f 73 70 61 63 65 5f  |s"..6.rma_space_|
00001f40  73 69 7a 65 25 3d 26 32  30 30 0d 0b 40 1a 66 69  |size%=&200..@.fi|
00001f50  6c 74 65 72 6e 61 6d 65  24 3d 22 4f 6c 64 4d 6f  |ltername$="OldMo|
00001f60  64 65 73 22 0d 0b 4a 25  66 6d 61 73 6b 25 3d 25  |des"..J%fmask%=%|
00001f70  31 31 31 30 30 31 31 31  30 30 30 31 31 31 30 30  |1110011100011100|
00001f80  31 30 30 31 31 30 30 31  30 0d 0b 54 15 66 6f 75  |100110010..T.fou|
00001f90  6e 64 74 61 73 6b 68 61  6e 64 6c 65 3d 30 0d 0b  |ndtaskhandle=0..|
00001fa0  5e 0d 6f 75 72 6d 65 6e  75 3d 34 0d 0b 68 14 74  |^.ourmenu=4..h.t|
00001fb0  65 6d 70 6c 61 74 65 73  70 61 63 65 25 3d 38 0d  |emplatespace%=8.|
00001fc0  0b 72 11 69 63 6f 6e 73  70 61 63 65 25 3d 31 32  |.r.iconspace%=12|
00001fd0  0d 0b 7c 11 74 65 6d 70  6c 61 74 65 31 25 3d 31  |..|.template1%=1|
00001fe0  36 0d 0b 86 17 74 65 6d  70 6c 61 74 65 73 6c 6f  |6....templateslo|
00001ff0  61 64 65 64 25 3d 32 30  0d 0b 90 14 66 69 6e 64  |aded%=20....find|
00002000  74 61 73 6b 62 6c 6f 63  6b 3d 36 34 0d 0b 9a 12  |taskblock=64....|
00002010  70 6f 6c 6c 62 6c 6f 63  6b 3d 26 31 30 30 0d 0b  |pollblock=&100..|
00002020  a4 05 e1 0d 0b ae 04 0d  0b b8 25 f4 20 20 20 20  |..........%.    |
00002030  77 69 6d 70 20 61 73 73  65 6d 62 6c 65 72 20 6c  |wimp assembler l|
00002040  69 62 72 61 72 79 20 63  61 6c 6c 73 0d 0b c2 04  |ibrary calls....|
00002050  0d 0b cc 12 dd 20 a4 69  63 6f 6e 62 61 72 6d 65  |..... .iconbarme|
00002060  6e 75 0d 0b d6 0e 5b 20  4f 50 54 20 70 61 73 73  |nu....[ OPT pass|
00002070  0d 0b e0 05 3b 0d 0b ea  1e 3b 20 20 72 30 20 70  |....;....;  r0 p|
00002080  6f 69 6e 74 73 20 74 6f  20 6d 65 6e 75 20 62 6c  |oints to menu bl|
00002090  6f 63 6b 0d 0b f4 05 3b  0d 0b fe 10 2e 69 63 6f  |ock....;.....ico|
000020a0  6e 62 61 72 6d 65 6e 75  0d 0c 08 2b 20 20 20 20  |nbarmenu...+    |
000020b0  20 20 20 20 53 54 4d 46  44 20 28 73 70 29 21 2c  |    STMFD (sp)!,|
000020c0  7b 72 30 2d 72 33 2c 72  38 2d 72 31 30 2c 6c 69  |{r0-r3,r8-r10,li|
000020d0  6e 6b 7d 0d 0c 12 17 20  20 20 20 20 20 20 20 4d  |nk}....        M|
000020e0  4f 56 20 20 20 72 38 2c  72 30 0d 0c 1c 22 20 20  |OV   r8,r0..."  |
000020f0  20 20 20 20 20 20 41 44  44 20 20 20 72 31 2c 77  |      ADD   r1,w|
00002100  73 2c 23 70 6f 6c 6c 62  6c 6f 63 6b 0d 0c 26 46  |s,#pollblock..&F|
00002110  20 20 20 20 20 20 20 20  53 57 49 20 20 20 22 58  |        SWI   "X|
00002120  57 69 6d 70 5f 47 65 74  50 6f 69 6e 74 65 72 49  |Wimp_GetPointerI|
00002130  6e 66 6f 22 20 20 20 20  3b 20 72 65 61 64 20 70  |nfo"    ; read p|
00002140  6f 73 69 74 69 6f 6e 20  6f 66 20 70 6f 69 6e 74  |osition of point|
00002150  65 72 0d 0c 30 1c 20 20  20 20 20 20 20 20 42 56  |er..0.        BV|
00002160  53 20 20 20 69 63 6f 6e  62 61 72 6f 75 74 0d 0c  |S   iconbarout..|
00002170  3a 1c 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |:.        LDR   |
00002180  72 32 2c 5b 72 31 2c 23  30 5d 0d 0c 44 1b 20 20  |r2,[r1,#0]..D.  |
00002190  20 20 20 20 20 20 53 55  42 20 20 20 72 32 2c 72  |      SUB   r2,r|
000021a0  32 2c 23 36 34 0d 0c 4e  45 20 20 20 20 20 20 20  |2,#64..NE       |
000021b0  20 4d 4f 56 20 20 20 72  33 2c 23 39 36 20 20 20  | MOV   r3,#96   |
000021c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000021d0  20 3b 20 6d 65 6e 75 20  70 6f 73 69 74 69 6f 6e  | ; menu position|
000021e0  20 66 72 6f 6d 20 62 61  73 65 0d 0c 58 37 20 20  | from base..X7  |
000021f0  20 20 20 20 20 20 41 44  44 20 20 20 72 39 2c 72  |      ADD   r9,r|
00002200  38 2c 23 32 38 20 20 20  20 20 20 20 20 20 20 20  |8,#28           |
00002210  20 20 20 20 20 20 3b 20  6f 66 20 73 63 72 65 65  |      ; of scree|
00002220  6e 0d 0c 62 0d 2e 62 61  72 6d 65 6e 75 31 0d 0c  |n..b..barmenu1..|
00002230  6c 41 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |lA        ADD   |
00002240  72 33 2c 72 33 2c 23 34  34 20 20 20 20 20 20 20  |r3,r3,#44       |
00002250  20 20 20 20 20 20 20 20  20 20 3b 20 68 65 69 67  |          ; heig|
00002260  68 74 20 6f 66 20 6d 65  6e 75 20 69 74 65 6d 0d  |ht of menu item.|
00002270  0c 76 1d 20 20 20 20 20  20 20 20 4c 44 52 20 20  |.v.        LDR  |
00002280  20 72 31 30 2c 5b 72 39  2c 23 30 5d 0d 0c 80 46  | r10,[r9,#0]...F|
00002290  20 20 20 20 20 20 20 20  54 53 54 20 20 20 72 31  |        TST   r1|
000022a0  30 2c 23 31 3c 3c 31 20  20 20 20 20 20 20 20 20  |0,#1<<1         |
000022b0  20 20 20 20 20 20 20 20  3b 20 66 6f 6c 6c 6f 77  |        ; follow|
000022c0  65 64 20 62 79 20 64 6f  74 74 65 64 20 6c 69 6e  |ed by dotted lin|
000022d0  65 3f 0d 0c 8a 43 20 20  20 20 20 20 20 20 41 44  |e?...C        AD|
000022e0  44 4e 45 20 72 33 2c 72  33 2c 23 32 34 20 20 20  |DNE r3,r3,#24   |
000022f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002300  68 65 69 67 68 74 20 6f  66 20 64 6f 74 74 65 64  |height of dotted|
00002310  20 6c 69 6e 65 0d 0c 94  1b 20 20 20 20 20 20 20  | line....       |
00002320  20 41 44 44 20 20 20 72  39 2c 72 39 2c 23 32 34  | ADD   r9,r9,#24|
00002330  0d 0c 9e 3d 20 20 20 20  20 20 20 20 54 53 54 20  |...=        TST |
00002340  20 20 72 31 30 2c 23 31  3c 3c 37 20 20 20 20 20  |  r10,#1<<7     |
00002350  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 6c 61  |            ; la|
00002360  73 74 20 6d 65 6e 75 20  69 74 65 6d 3f 0d 0c a8  |st menu item?...|
00002370  4a 20 20 20 20 20 20 20  20 42 45 51 20 20 20 62  |J        BEQ   b|
00002380  61 72 6d 65 6e 75 31 20  20 20 20 20 20 20 20 20  |armenu1         |
00002390  20 20 20 20 20 20 20 20  20 3b 20 61 64 6a 75 73  |         ; adjus|
000023a0  74 20 66 6f 72 20 65 61  63 68 20 69 74 65 6d 20  |t for each item |
000023b0  69 6e 20 6d 65 6e 75 0d  0c b2 17 20 20 20 20 20  |in menu....     |
000023c0  20 20 20 4d 4f 56 20 20  20 72 31 2c 72 38 0d 0c  |   MOV   r1,r8..|
000023d0  bc 35 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |.5        SWI   |
000023e0  22 58 57 69 6d 70 5f 43  72 65 61 74 65 4d 65 6e  |"XWimp_CreateMen|
000023f0  75 22 20 20 20 20 20 20  20 20 3b 20 6f 70 65 6e  |u"        ; open|
00002400  20 69 74 0d 0c c6 0f 2e  69 63 6f 6e 62 61 72 6f  | it.....iconbaro|
00002410  75 74 0d 0c d0 29 20 20  20 20 20 20 20 20 4c 44  |ut...)        LD|
00002420  4d 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 33  |MFD (sp)!,{r0-r3|
00002430  2c 72 38 2d 72 31 30 2c  70 63 7d 0d 0c da 05 5d  |,r8-r10,pc}....]|
00002440  0d 0c e4 09 3d 70 61 73  73 0d 0c ee 04 0d 0c f8  |....=pass.......|
00002450  04 0d 0d 02 3d dd 20 a4  6c 6f 61 64 74 65 6d 70  |....=. .loadtemp|
00002460  6c 61 74 65 73 28 70 61  74 68 24 2c 74 65 6d 70  |lates(path$,temp|
00002470  6c 61 74 65 73 70 61 63  65 73 69 7a 65 25 2c 69  |latespacesize%,i|
00002480  63 6f 6e 73 70 61 63 65  73 69 7a 65 25 29 0d 0d  |conspacesize%)..|
00002490  0c 0e 5b 20 4f 50 54 20  70 61 73 73 0d 0d 16 12  |..[ OPT pass....|
000024a0  2e 6c 6f 61 64 74 65 6d  70 6c 61 74 65 73 0d 0d  |.loadtemplates..|
000024b0  20 27 20 20 20 20 20 20  20 20 53 54 4d 46 44 20  | '        STMFD |
000024c0  20 20 28 73 70 29 21 2c  7b 72 30 2d 72 31 31 2c  |  (sp)!,{r0-r11,|
000024d0  6c 69 6e 6b 7d 0d 0d 2a  44 20 20 20 20 20 20 20  |link}..*D       |
000024e0  20 4d 4f 56 20 20 20 20  20 72 32 2c 23 30 20 20  | MOV     r2,#0  |
000024f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002500  20 3b 20 7a 65 72 6f 20  70 6f 69 6e 74 65 72 73  | ; zero pointers|
00002510  20 74 6f 20 73 70 61 63  65 0d 0d 34 47 20 20 20  | to space..4G   |
00002520  20 20 20 20 20 53 54 52  20 20 20 20 20 72 32 2c  |     STR     r2,|
00002530  5b 77 73 2c 23 74 65 6d  70 6c 61 74 65 73 70 61  |[ws,#templatespa|
00002540  63 65 25 5d 20 3b 20 69  6e 20 6d 6f 64 75 6c 65  |ce%] ; in module|
00002550  20 62 6c 6f 63 6b 2e 20  20 55 73 65 64 20 74 6f  | block.  Used to|
00002560  0d 0d 3e 49 20 20 20 20  20 20 20 20 53 54 52 20  |..>I        STR |
00002570  20 20 20 20 72 32 2c 5b  77 73 2c 23 69 63 6f 6e  |    r2,[ws,#icon|
00002580  73 70 61 63 65 25 5d 20  20 20 20 20 3b 20 63 68  |space%]     ; ch|
00002590  65 63 6b 20 77 68 65 74  68 65 72 20 73 70 61 63  |eck whether spac|
000025a0  65 20 63 6c 61 69 6d 65  64 0d 0d 48 05 3b 0d 0d  |e claimed..H.;..|
000025b0  52 19 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |R.        MOV   |
000025c0  20 20 72 30 2c 23 36 0d  0d 5c 2a 20 20 20 20 20  |  r0,#6..\*     |
000025d0  20 20 20 4d 4f 56 20 20  20 20 20 72 33 2c 23 74  |   MOV     r3,#t|
000025e0  65 6d 70 6c 61 74 65 73  70 61 63 65 73 69 7a 65  |emplatespacesize|
000025f0  25 0d 0d 66 42 20 20 20  20 20 20 20 20 53 57 49  |%..fB        SWI|
00002600  20 20 20 20 20 22 58 4f  53 5f 4d 6f 64 75 6c 65  |     "XOS_Module|
00002610  22 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 63  |"            ; c|
00002620  6c 61 69 6d 20 74 65 6d  70 6c 61 74 65 20 73 70  |laim template sp|
00002630  61 63 65 0d 0d 70 22 20  20 20 20 20 20 20 20 42  |ace..p"        B|
00002640  56 53 20 20 20 20 20 6c  6f 61 64 74 65 6d 70 6c  |VS     loadtempl|
00002650  61 74 65 73 31 0d 0d 7a  3f 20 20 20 20 20 20 20  |ates1..z?       |
00002660  20 53 54 52 20 20 20 20  20 72 32 2c 5b 77 73 2c  | STR     r2,[ws,|
00002670  23 74 65 6d 70 6c 61 74  65 73 70 61 63 65 25 5d  |#templatespace%]|
00002680  20 3b 20 61 6e 64 20 73  74 6f 72 65 20 70 6f 69  | ; and store poi|
00002690  6e 74 65 72 0d 0d 84 19  20 20 20 20 20 20 20 20  |nter....        |
000026a0  4d 4f 56 20 20 20 20 20  72 30 2c 23 36 0d 0d 8e  |MOV     r0,#6...|
000026b0  42 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |B        MOV    |
000026c0  20 72 33 2c 23 69 63 6f  6e 73 70 61 63 65 73 69  | r3,#iconspacesi|
000026d0  7a 65 25 20 20 20 20 20  20 3b 20 63 6c 61 69 6d  |ze%      ; claim|
000026e0  20 69 63 6f 6e 20 73 70  61 63 65 20 61 6e 64 0d  | icon space and.|
000026f0  0d 98 20 20 20 20 20 20  20 20 20 53 57 49 20 20  |..         SWI  |
00002700  20 20 20 22 58 4f 53 5f  4d 6f 64 75 6c 65 22 0d  |   "XOS_Module".|
00002710  0d a2 22 20 20 20 20 20  20 20 20 42 56 53 20 20  |.."        BVS  |
00002720  20 20 20 6c 6f 61 64 74  65 6d 70 6c 61 74 65 73  |   loadtemplates|
00002730  31 0d 0d ac 3b 20 20 20  20 20 20 20 20 53 54 52  |1...;        STR|
00002740  20 20 20 20 20 72 32 2c  5b 77 73 2c 23 69 63 6f  |     r2,[ws,#ico|
00002750  6e 73 70 61 63 65 25 5d  20 20 20 20 20 3b 20 73  |nspace%]     ; s|
00002760  74 6f 72 65 20 70 6f 69  6e 74 65 72 0d 0d b6 05  |tore pointer....|
00002770  3b 0d 0d c0 24 20 20 20  20 20 20 20 20 41 44 52  |;...$        ADR|
00002780  20 20 20 20 20 72 31 2c  74 65 6d 70 6c 61 74 65  |     r1,template|
00002790  73 70 61 74 68 0d 0d ca  28 20 20 20 20 20 20 20  |spath...(       |
000027a0  20 53 57 49 20 20 20 20  20 22 58 57 69 6d 70 5f  | SWI     "XWimp_|
000027b0  4f 70 65 6e 54 65 6d 70  6c 61 74 65 22 0d 0d d4  |OpenTemplate"...|
000027c0  22 20 20 20 20 20 20 20  20 42 56 53 20 20 20 20  |"        BVS    |
000027d0  20 6c 6f 61 64 74 65 6d  70 6c 61 74 65 73 31 0d  | loadtemplates1.|
000027e0  0d de 42 20 20 20 20 20  20 20 20 4c 44 52 20 20  |..B        LDR  |
000027f0  20 20 20 72 31 2c 5b 77  73 2c 23 74 65 6d 70 6c  |   r1,[ws,#templ|
00002800  61 74 65 73 70 61 63 65  25 5d 20 3b 20 73 65 74  |atespace%] ; set|
00002810  20 75 70 20 72 65 67 69  73 74 65 72 73 20 66 6f  | up registers fo|
00002820  72 0d 0d e8 27 20 20 20  20 20 20 20 20 4c 44 52  |r...'        LDR|
00002830  20 20 20 20 20 72 32 2c  5b 77 73 2c 23 69 63 6f  |     r2,[ws,#ico|
00002840  6e 73 70 61 63 65 25 5d  0d 0d f2 26 20 20 20 20  |nspace%]...&    |
00002850  20 20 20 20 4d 4f 56 20  20 20 20 20 72 33 2c 23  |    MOV     r3,#|
00002860  69 63 6f 6e 73 70 61 63  65 73 69 7a 65 25 0d 0d  |iconspacesize%..|
00002870  fc 1c 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |..        ADD   |
00002880  20 20 72 33 2c 72 33 2c  72 32 0d 0e 06 19 20 20  |  r3,r3,r2....  |
00002890  20 20 20 20 20 20 4d 56  4e 20 20 20 20 20 72 34  |      MVN     r4|
000028a0  2c 23 30 0d 0e 10 05 3b  0d 0e 1a 47 20 20 20 20  |,#0....;...G    |
000028b0  20 20 20 20 4d 4f 56 20  20 20 20 20 72 36 2c 23  |    MOV     r6,#|
000028c0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000028d0  20 20 20 20 3b 20 6c 6f  61 64 20 77 69 6e 64 6f  |    ; load windo|
000028e0  77 73 20 2d 20 72 65 70  65 61 74 20 66 6f 72 0d  |ws - repeat for.|
000028f0  0e 24 40 20 20 20 20 20  20 20 20 41 44 52 20 20  |.$@        ADR  |
00002900  20 20 20 72 35 2c 74 65  6d 70 6c 61 74 65 31 20  |   r5,template1 |
00002910  20 20 20 20 20 20 20 20  20 20 20 3b 20 61 6c 6c  |           ; all|
00002920  20 77 69 6e 64 6f 77 73  20 69 6e 20 74 68 65 0d  | windows in the.|
00002930  0e 2e 3b 20 20 20 20 20  20 20 20 53 57 49 20 20  |..;        SWI  |
00002940  20 20 20 22 58 57 69 6d  70 5f 4c 6f 61 64 54 65  |   "XWimp_LoadTe|
00002950  6d 70 6c 61 74 65 22 20  20 20 20 3b 20 74 65 6d  |mplate"    ; tem|
00002960  70 6c 61 74 65 20 66 69  6c 65 0d 0e 38 22 20 20  |plate file..8"  |
00002970  20 20 20 20 20 20 42 56  53 20 20 20 20 20 6c 6f  |      BVS     lo|
00002980  61 64 74 65 6d 70 6c 61  74 65 73 32 0d 0e 42 28  |adtemplates2..B(|
00002990  20 20 20 20 20 20 20 20  53 57 49 20 20 20 20 20  |        SWI     |
000029a0  22 58 57 69 6d 70 5f 43  72 65 61 74 65 57 69 6e  |"XWimp_CreateWin|
000029b0  64 6f 77 22 0d 0e 4c 22  20 20 20 20 20 20 20 20  |dow"..L"        |
000029c0  42 56 53 20 20 20 20 20  6c 6f 61 64 74 65 6d 70  |BVS     loadtemp|
000029d0  6c 61 74 65 73 32 0d 0e  56 27 20 20 20 20 20 20  |lates2..V'      |
000029e0  20 20 53 54 52 20 20 20  20 20 72 30 2c 5b 77 73  |  STR     r0,[ws|
000029f0  2c 23 74 65 6d 70 6c 61  74 65 31 25 5d 0d 0e 60  |,#template1%]..`|
00002a00  13 2e 6c 6f 61 64 74 65  6d 70 6c 61 74 65 73 32  |..loadtemplates2|
00002a10  0d 0e 6a 41 20 20 20 20  20 20 20 20 53 57 49 20  |..jA        SWI |
00002a20  20 20 20 20 22 58 57 69  6d 70 5f 43 6c 6f 73 65  |    "XWimp_Close|
00002a30  54 65 6d 70 6c 61 74 65  22 20 20 20 3b 20 63 6c  |Template"   ; cl|
00002a40  6f 73 65 20 74 65 6d 70  6c 61 74 65 20 66 69 6c  |ose template fil|
00002a50  65 0d 0e 74 13 2e 6c 6f  61 64 74 65 6d 70 6c 61  |e..t..loadtempla|
00002a60  74 65 73 31 0d 0e 7e 25  20 20 20 20 20 20 20 20  |tes1..~%        |
00002a70  4c 44 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |LDMFD   (sp)!,{r|
00002a80  30 2d 72 31 31 2c 70 63  7d 0d 0e 88 12 2e 74 65  |0-r11,pc}.....te|
00002a90  6d 70 6c 61 74 65 73 70  61 74 68 0d 0e 92 1b 20  |mplatespath.... |
00002aa0  20 20 20 20 20 20 20 a4  73 74 72 69 6e 67 30 28  |       .string0(|
00002ab0  70 61 74 68 24 29 0d 0e  9c 0e 2e 74 65 6d 70 6c  |path$).....templ|
00002ac0  61 74 65 31 0d 0e a6 1c  20 20 20 20 20 20 20 20  |ate1....        |
00002ad0  a4 73 74 72 69 6e 67 30  28 22 69 6e 66 6f 22 29  |.string0("info")|
00002ae0  0d 0e b0 05 5d 0d 0e ba  09 3d 70 61 73 73 0d 0e  |....]....=pass..|
00002af0  c4 04 0d 0e ce 1b dd 20  a4 72 65 6c 65 61 73 65  |....... .release|
00002b00  74 65 6d 70 6c 61 74 65  62 6c 6f 63 6b 0d 0e d8  |templateblock...|
00002b10  0e 5b 20 4f 50 54 20 70  61 73 73 0d 0e e2 19 2e  |.[ OPT pass.....|
00002b20  72 65 6c 65 61 73 65 74  65 6d 70 6c 61 74 65 62  |releasetemplateb|
00002b30  6c 6f 63 6b 0d 0e ec 26  20 20 20 20 20 20 20 20  |lock...&        |
00002b40  53 54 4d 46 44 20 20 20  28 73 70 29 21 2c 7b 72  |STMFD   (sp)!,{r|
00002b50  30 2d 72 33 2c 6c 69 6e  6b 7d 0d 0e f6 19 20 20  |0-r3,link}....  |
00002b60  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00002b70  2c 23 37 0d 0f 00 2b 20  20 20 20 20 20 20 20 4c  |,#7...+        L|
00002b80  44 52 20 20 20 20 20 72  32 2c 5b 77 73 2c 23 74  |DR     r2,[ws,#t|
00002b90  65 6d 70 6c 61 74 65 73  70 61 63 65 25 5d 0d 0f  |emplatespace%]..|
00002ba0  0a 4c 20 20 20 20 20 20  20 20 54 45 51 20 20 20  |.L        TEQ   |
00002bb0  20 20 72 32 2c 23 30 20  20 20 20 20 20 20 20 20  |  r2,#0         |
00002bc0  20 20 20 20 20 20 20 3b  20 69 66 20 70 6f 69 6e  |       ; if poin|
00002bd0  74 65 72 3c 3e 30 20 74  68 65 6e 20 6d 65 6d 6f  |ter<>0 then memo|
00002be0  72 79 20 63 6c 61 69 6d  65 64 0d 0f 14 35 20 20  |ry claimed...5  |
00002bf0  20 20 20 20 20 20 53 57  49 4e 45 20 20 20 22 58  |      SWINE   "X|
00002c00  4f 53 5f 4d 6f 64 75 6c  65 22 20 20 20 20 20 20  |OS_Module"      |
00002c10  20 20 20 3b 20 72 65 6c  65 61 73 65 20 69 74 0d  |   ; release it.|
00002c20  0f 1e 19 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |...        MOV  |
00002c30  20 20 20 72 30 2c 23 37  0d 0f 28 27 20 20 20 20  |   r0,#7..('    |
00002c40  20 20 20 20 4c 44 52 20  20 20 20 20 72 32 2c 5b  |    LDR     r2,[|
00002c50  77 73 2c 23 69 63 6f 6e  73 70 61 63 65 25 5d 0d  |ws,#iconspace%].|
00002c60  0f 32 4c 20 20 20 20 20  20 20 20 54 45 51 20 20  |.2L        TEQ  |
00002c70  20 20 20 72 32 2c 23 30  20 20 20 20 20 20 20 20  |   r2,#0        |
00002c80  20 20 20 20 20 20 20 20  3b 20 69 66 20 70 6f 69  |        ; if poi|
00002c90  6e 74 65 72 3c 3e 30 20  74 68 65 6e 20 6d 65 6d  |nter<>0 then mem|
00002ca0  6f 72 79 20 63 6c 61 69  6d 65 64 0d 0f 3c 35 20  |ory claimed..<5 |
00002cb0  20 20 20 20 20 20 20 53  57 49 4e 45 20 20 20 22  |       SWINE   "|
00002cc0  58 4f 53 5f 4d 6f 64 75  6c 65 22 20 20 20 20 20  |XOS_Module"     |
00002cd0  20 20 20 20 3b 20 72 65  6c 65 61 73 65 20 69 74  |    ; release it|
00002ce0  0d 0f 46 24 20 20 20 20  20 20 20 20 4c 44 4d 46  |..F$        LDMF|
00002cf0  44 20 20 20 28 73 70 29  21 2c 7b 72 30 2d 72 33  |D   (sp)!,{r0-r3|
00002d00  2c 70 63 7d 0d 0f 50 05  5d 0d 0f 5a 09 3d 70 61  |,pc}..P.]..Z.=pa|
00002d10  73 73 0d 0f 64 04 0d 0f  6e 20 dd 20 a4 6d 65 6e  |ss..d...n . .men|
00002d20  75 68 65 61 64 65 72 28  74 69 74 6c 65 24 2c 77  |uheader(title$,w|
00002d30  69 64 74 68 25 29 0d 0f  78 19 20 20 20 24 4f 25  |idth%)..x.   $O%|
00002d40  3d c0 74 69 74 6c 65 24  2c 31 31 29 2b bd 30 0d  |=.title$,11)+.0.|
00002d50  0f 82 0e 20 20 20 4f 25  3f 31 32 3d 37 0d 0f 8c  |...   O%?12=7...|
00002d60  0e 20 20 20 4f 25 3f 31  33 3d 32 0d 0f 96 0e 20  |.   O%?13=2.... |
00002d70  20 20 4f 25 3f 31 34 3d  37 0d 0f a0 0e 20 20 20  |  O%?14=7....   |
00002d80  4f 25 3f 31 35 3d 30 0d  0f aa 13 20 20 20 4f 25  |O%?15=0....   O%|
00002d90  21 31 36 3d 77 69 64 74  68 25 0d 0f b4 0f 20 20  |!16=width%....  |
00002da0  20 4f 25 21 32 30 3d 34  34 0d 0f be 0e 20 20 20  | O%!20=44....   |
00002db0  4f 25 21 32 34 3d 30 0d  0f c8 0d 20 20 20 4f 25  |O%!24=0....   O%|
00002dc0  2b 3d 32 38 0d 0f d2 0d  20 20 20 50 25 2b 3d 32  |+=28....   P%+=2|
00002dd0  38 0d 0f dc 09 3d 70 61  73 73 0d 0f e6 04 0d 0f  |8....=pass......|
00002de0  f0 26 dd 20 a4 6d 65 6e  75 69 74 65 6d 28 74 65  |.&. .menuitem(te|
00002df0  78 74 24 2c 66 6c 61 67  73 25 2c 73 75 62 6d 65  |xt$,flags%,subme|
00002e00  6e 75 25 29 0d 0f fa 11  20 20 20 21 4f 25 3d 66  |nu%)....   !O%=f|
00002e10  6c 61 67 73 25 0d 10 04  14 20 20 20 4f 25 21 34  |lags%....   O%!4|
00002e20  3d 73 75 62 6d 65 6e 75  25 0d 10 0e 15 20 20 20  |=submenu%....   |
00002e30  4f 25 21 38 3d 26 30 37  30 30 39 30 33 31 0d 10  |O%!8=&07009031..|
00002e40  18 1d 20 20 20 24 28 4f  25 2b 31 32 29 3d c0 74  |..   $(O%+12)=.t|
00002e50  65 78 74 24 2c 31 31 29  2b bd 30 0d 10 22 0d 20  |ext$,11)+.0..". |
00002e60  20 20 4f 25 2b 3d 32 34  0d 10 2c 0d 20 20 20 50  |  O%+=24..,.   P|
00002e70  25 2b 3d 32 34 0d 10 36  09 3d 70 61 73 73 0d ff  |%+=24..6.=pass..|
00002e80