Home » Archimedes archive » Acorn User » AU 1994-07.adf » !StarInfo_StarInfo » SmithJ/!TreeMenu/!MakeMod
SmithJ/!TreeMenu/!MakeMod
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 1994-07.adf » !StarInfo_StarInfo |
Filename: | SmithJ/!TreeMenu/!MakeMod |
Read OK: | ✔ |
File size: | 2663 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
1ON ERROR ON ERROR OFF: REPORT: PRINT ;" in !TreeMenu.!MakeMod, internal error code ";ERL; ".": END 2 3REM This program is run by TreeMenu's !RunImage after it has set itself up 4REM as a Wimp task. 5REM 6REM It finds the task handles of the Filer and TreeMenu and assembles a 7REM module using these task handles. The module is ~ 500 bytes long. 8REM 9REM The module detects OS mouse button events (not Wimp), and sends an 10REM event_CLICK to TreeMenu if the click is with the menu button and is on a 11REM window title-bar. 12REM 13REM It also attaches a Filter onto the Filer. If there is an Alt-Menu click 14REM on a Filer windows, the click is sent to TreeMenu, and a NULL event is 15REM sent to the Filer. 16REM 17 18 19DIM buffer 100 20 21SYS "OS_ReadVarVal", "TreeMenu$Options", buffer, 100, 0, 0 TO ,, n 22a$ = FNstring( buffer, n) 23 24detect_titlebar = INSTR( a$, "Titlebar") 25only_filer = INSTR( a$, "OnlyFiler") 26 27filer_task = FNFindTaskHandle( "Filer") 28treemenu_task = FNFindTaskHandle( "TreeMenu") 29 30REM IF filer_task = 0 ERROR 0, "Can't find Filer task" 31IF treemenu_task = 0 ERROR 0, "Can't find TreeMenu task" 32 33key = 256-3: REM code for the <alt> key 34 35 36 37DIM codespace 1024 38 39 40FOR pass0 = 0 TO 2 STEP 2 41P% = 0 42O% = codespace 43L% = codespace + 1024: REM prevents assembler from overwriting memory 44pass = pass0 + 4 + 8 45 46 47REM ********* MODULE specs ************************************************* 48 49[ OPT pass 50 51 EQUD 0 ; No startup. 52 EQUD initialise 53 EQUD finalise 54 EQUD 0 ; No service calls are dealt with. 55 EQUD title 56 EQUD helpstring 57 EQUD 0 ; No help table. 58 EQUD 0 ; No SWI chunk. 59 EQUD 0 ; No SWI handler. 60 EQUD 0 ; No SWI table. 61 EQUD 0 ; No SWI code. 62] 63 64REM ****** Storage space for constants etc. ******************************** 65 66[ OPT pass 67 68.filertaskhandle: EQUD filer_task 69.treemenutaskhandle: EQUD treemenu_task 70.mask: EQUD NOT (1<<6) ; lets through event_CLICK's only 71.oldbuttonstate: EQUD 0 72 73.pollblock: EQUS STRING$( 20, CHR$(0)): ALIGN 74 75.title: EQUS "TreeMenuMouse": EQUB 0: ALIGN 76.filtername: EQUS "TreeMenu": EQUB 0: ALIGN 77.helpstring: 78 EQUS "TreeMenuMouse"+CHR$(9)+"0.30 (14 Feb 1994) � Julian Smith" 79 EQUB 0: ALIGN 80] 81 82 83 84 85REM ************************************************************************ 86 87[ OPT pass 88 89.initialise 90 STMFD r13!, {r14} 91] 92 93IF detect_titlebar THEN 94[ OPT pass 95 96 MOV r0, #16 ; Claim OS events. 97 ADR r1, eventcode 98 MOV r2, #0 99 SWI "OS_Claim" 100 MOV r0, #14 ; Enable OS mouse button events. 101 MOV r1, #10 102 SWI "OS_Byte" 103] 104ENDIF 105 106 107IF filer_task THEN 108[ OPT pass 109 110 ADR r0, filtername ; Attach a filter to the Filer. 111 ADR r1, filtercode 112 ADR r2, 0 113 LDR r3, filertaskhandle 114 LDR r4, mask 115 SWI "Filter_RegisterPostFilter" 116] 117ENDIF 118 119 120[ OPT pass 121 LDMFD r13!, {PC} 122] 123 124 125REM ************************************************************************ 126 127 128[ OPT pass 129 130.finalise 131 STMFD r13!, {R14} 132] 133 134IF detect_titlebar THEN 135[ OPT pass 136 MOV r0, #13 ; Disable OS mouse button events. 137 MOV r1, #10 ; Its OK if someone else is using 138 SWI "OS_Byte" ; them, as the OS maintains a count 139 ; of how many times each event-type 140 ; is enabled/disabled. 141 142 MOV r0, #16 ; Stop OS claiming events. 143 ADR r1, eventcode 144 MOV r2, #0 145 SWI "OS_Release" 146] 147ENDIF 148 149IF filer_task THEN 150[ OPT pass 151 152 ADR r0, filtername ; De-register filter on the Filer. 153 ADR r1, filtercode 154 ADR r2, 0 155 LDR r3, filertaskhandle 156 LDR r4, mask 157 SWI "Filter_DeRegisterPostFilter" 158 159] 160ENDIF 161 162 163 164[ OPT pass 165 LDMFD r13!, {PC} 166] 167 168 169REM ************************************************************************ 170 171 172IF detect_titlebar THEN 173 174[ OPT pass 175.eventcode ; *********** look for menu clicks on filer titlebar ******* 176 177 CMP r0, #10: MOVNES PC, r14 ; Return if not a mouse button event. 178 179 STMFD r13!, {R0-R12, r14} ; Save all registers. 180 181 LDR r5, oldbuttonstate ; Load old button state. 182 AND r3, r3, #%111 ; Are higher bits used? 183 STR r3, oldbuttonstate ; Store new button state 184 ; for next time. 185 CMP r5, #%000 186 LDMNEFD r13!, {r0-r12, PC} ; Quit if previous button state 187 ; isn't 000. 188 CMP r3, #%010 189 LDMNEFD r13!, {r0-r12, PC} ; Quit if new button state isn't 010. 190 191 192 ; Button change is from 000 to 010, i.e. menu button click, so: 193 194 MOV r9, PC ; Switch to SVC mode... 195 ORR r8, r9, #3 196 TEQP r8, #0 197 MOV r0, r0 ; ...and store r14_svc on stack, 198 STMFD r13!,{R14} ; because it is corrupted by SWIs. 199 200 ADR r1, pollblock ; Get info on the window and icon 201 SWI "XWimp_GetPointerInfo" ; that the pointer is over. 202 203 BVS quit ; In case not in wimp enviroment ? 204 ; Not checking for a SWI error caused 205 ; a system crash when used with 206 ; MemFS. 207 208 LDR r0, [R1,#16] ; Check icon handle is -4 209 ADD r0, r0, #4 ; ( the title bar). 210 CMP r0, #0 211 BNE quit ; Quit if it isn't. 212 213] 214ENDIF 215 216IF only_filer THEN 217[ OPT pass 218 MOV r0, #0 ; Send a null event to the window to 219 ADR r1, pollblock ; find its task handle. 220 LDR r2, [R1,#12] ; The task handle is put into r2. 221 SWI "XWimp_SendMessage" 222 223 BVS quit 224 225 LDR r5, filertaskhandle ; Check if the task handle 226 CMP r2, r5 ; is the filer. 227 BNE quit ; Quit if it isn't 228] 229ENDIF 230 231[ OPT pass 232 MOV r0, #6 ; Everything is OK, so send an 233 ADR r1, pollblock ; event_CLICK to TreeMenu, using 234 LDR r2, treemenutaskhandle ; the pointer info found earlier. 235 SWI "XWimp_SendMessage" 236 237 BVS quit 238 239.quit 240 LDMFD r13!, {R14} ; Restore r14_svc. 241 TEQP r9, #0 ; Switch back to User mode. 242 MOV r0, r0 243 244 LDMFD r13!, {R0-R12, PC} ; Restore registers and return. 245] 246ENDIF 247 248 249REM ************************************************************************ 250 251IF filer_task THEN 252 253[ OPT pass 254 255.filtercode ; look for Alt-Menu clicks 256 ; pollblock is pointed to by r1 257 258 LDR r2, [R1,#8] ; Event will be event_CLICK, so mouse 259 TST r2,#2 ; button info is at pollblock!8. 260 MOVEQ PC,R14 ; Return if Menu button is up. 261 262 STMFD r13!, {R0-R1,R14} ; Only need to preserve r0 and r1 263 ; for the poll. 264 265 MOV r0,#129 ; Test for alt key using OS_Byte. 266 MOV r2,#255 267 MOV r1,#key ; Code for key to be tested for. 268 SWI "OS_Byte" 269 CMP r2, #255: 270 LDMNEFD r13!,{R0-R1,PC} ; Return if alt is not pressed. 271 272 LDMFD r13,{R0-R1} ; Re-load message block intended for 273 ; Filer ... 274 LDR r2, treemenutaskhandle ; ...and send it straight on to 275 ; TreeMenu. 276 SWI "Wimp_SendMessage" 277 278 LDMFD r13!,{R0-R1} ; Re-load message block in case 279 ; SendMessage corrupts it. 280 MOV r0, #0 ; Change it to a Null event, 281 LDMFD r13!,{PC} ; and pass it on to Filer... 282 283] 284ENDIF 285 286 287REM ************************************************************************ 288 289NEXT pass0 290 291REM Install the module in RMA area. 292SYS "OS_Module", 11, codespace, P% 293 294END 295 296 297 298DEF FNFindTaskHandle( task_name$) 299 LOCAL buff_len, buffer, r0, r1, r2 300buff_len = 256: DIM buffer buff_len 301r0 = 0 302REPEAT 303 r1 = buffer: r2 = 16 304 SYS "TaskManager_EnumerateTasks", r0, r1, r2 TO r0 305 IF r0=-1 = 0 306 UNTIL FNstring( buffer!4, 32) = task_name$ 307=!buffer 308 309 310DEF FNstring( x, n) 311 LOCAL i,c, a$ 312FOR i=0 TO n 313 c = ?(x+i) 314 IF c=0 THEN =a$ 315 a$ = a$ + CHR$(c) 316 NEXT 317=a$
M� � � � �: �: � ;" in !TreeMenu.!MakeMod, internal error code ";�; ".": � L� This program is run by TreeMenu's !RunImage after it has set itself up � as a Wimp task. � I� It finds the task handles of the Filer and TreeMenu and assembles a F� module using these task handles. The module is ~ 500 bytes long. � H� The module detects OS mouse button events (not Wimp), and sends an N� event_CLICK to TreeMenu if the click is with the menu button and is on a � window title-bar. � M� It also attaches a Filter onto the Filer. If there is an Alt-Menu click L� on a Filer windows, the click is sent to TreeMenu, and a NULL event is � sent to the Filer. � � buffer 100 Dș "OS_ReadVarVal", "TreeMenu$Options", buffer, 100, 0, 0 � ,, n a$ = �string( buffer, n) 'detect_titlebar = � a$, "Titlebar") (only_filer = � a$, "OnlyFiler") /filer_task = �FindTaskHandle( "Filer") 2treemenu_task = �FindTaskHandle( "TreeMenu") 8� IF filer_task = 0 ERROR 0, "Can't find Filer task" 8� treemenu_task = 0 � 0, "Can't find TreeMenu task" !)key = 256-3: � code for the <alt> key " # $ %� codespace 1024 & ' (� pass0 = 0 � 2 � 2 )P% = 0 *O% = codespace +LL% = codespace + 1024: � prevents assembler from overwriting memory ,pass = pass0 + 4 + 8 - . /N� ********* MODULE specs ************************************************* 0 1[ OPT pass 2 39 EQUD 0 ; No startup. 4 EQUD initialise 5 EQUD finalise 6N EQUD 0 ; No service calls are dealt with. 7 EQUD title 8 EQUD helpstring 9< EQUD 0 ; No help table. :; EQUD 0 ; No SWI chunk. ;= EQUD 0 ; No SWI handler. <; EQUD 0 ; No SWI table. =: EQUD 0 ; No SWI code. >] ? @N� ****** Storage space for constants etc. ******************************** A B[ OPT pass C D+.filertaskhandle: EQUD filer_task E..treemenutaskhandle: EQUD treemenu_task FK.mask: EQUD � (1<<6) ; lets through event_CLICK's only G".oldbuttonstate: EQUD 0 H I7.pollblock: EQUS � 20, �(0)): ALIGN J KA.title: EQUS "TreeMenuMouse": EQUB 0: ALIGN LA.filtername: EQUS "TreeMenu": EQUB 0: ALIGN M.helpstring: NL EQUS "TreeMenuMouse"+�(9)+"0.30 (14 Feb 1994) � Julian Smith" O EQUB 0: ALIGN P] Q R S T UN� ************************************************************************ V W[ OPT pass X Y.initialise Z STMFD r13!, {r14} [] \ ]� detect_titlebar � ^[ OPT pass _ `> MOV r0, #16 ; Claim OS events. a! ADR r1, eventcode b MOV r2, #0 c SWI "OS_Claim" dL MOV r0, #14 ; Enable OS mouse button events. e MOV r1, #10 f SWI "OS_Byte" g] h� i j k� filer_task � l[ OPT pass m nK ADR r0, filtername ; Attach a filter to the Filer. o" ADR r1, filtercode p ADR r2, 0 q' LDR r3, filertaskhandle r LDR r4, mask s/ SWI "Filter_RegisterPostFilter" t] u� v w x[ OPT pass y LDMFD r13!, {PC} z] { | }N� ************************************************************************ ~ �[ OPT pass � � .finalise � STMFD r13!, {R14} �] � �� detect_titlebar � �[ OPT pass �M MOV r0, #13 ; Disable OS mouse button events. �N MOV r1, #10 ; Its OK if someone else is using �O SWI "OS_Byte" ; them, as the OS maintains a count �O ; of how many times each event-type �B ; is enabled/disabled. � �F MOV r0, #16 ; Stop OS claiming events. �! ADR r1, eventcode � MOV r2, #0 � SWI "OS_Release" �] �� � �� filer_task � �[ OPT pass � �N ADR r0, filtername ; De-register filter on the Filer. �" ADR r1, filtercode � ADR r2, 0 �' LDR r3, filertaskhandle � LDR r4, mask �1 SWI "Filter_DeRegisterPostFilter" � �] �� � � � �[ OPT pass � LDMFD r13!, {PC} �] � � �N� ************************************************************************ � � �� detect_titlebar � � �[ OPT pass �P.eventcode ; *********** look for menu clicks on filer titlebar ******* � �Q CMP r0, #10: MOVNES PC, r14 ; Return if not a mouse button event. � �A STMFD r13!, {R0-R12, r14} ; Save all registers. � �D LDR r5, oldbuttonstate ; Load old button state. �A � r3, r3, #%111 ; Are higher bits used? �D STR r3, oldbuttonstate ; Store new button state �< ; for next time. � CMP r5, #%000 �L LDMNEFD r13!, {r0-r12, PC} ; Quit if previous button state �8 ; isn't 000. � CMP r3, #%010 �Q LDMNEFD r13!, {r0-r12, PC} ; Quit if new button state isn't 010. � � �K ; Button change is from 000 to 010, i.e. menu button click, so: � �C MOV r9, PC ; Switch to SVC mode... � �R r8, r9, #3 � TEQP r8, #0 �L MOV r0, r0 ; ...and store r14_svc on stack, �N STMFD r13!,{R14} ; because it is corrupted by SWIs. � �M ADR r1, pollblock ; Get info on the window and icon �G SWI "XWimp_GetPointerInfo" ; that the pointer is over. � �N BVS quit ; In case not in wimp enviroment ? �Q ; Not checking for a SWI error caused �L ; a system crash when used with �4 ; MemFS. � �E LDR r0, [R1,#16] ; Check icon handle is -4 �? ADD r0, r0, #4 ; ( the title bar). � CMP r0, #0 �? BNE quit ; Quit if it isn't. � �] �� � �� only_filer � �[ OPT pass �P MOV r0, #0 ; Send a null event to the window to �C ADR r1, pollblock ; find its task handle. �M LDR r2, [R1,#12] ; The task handle is put into r2. �' SWI "XWimp_SendMessage" � � BVS quit � �F LDR r5, filertaskhandle ; Check if the task handle �; CMP r2, r5 ; is the filer. �> BNE quit ; Quit if it isn't �] �� � �[ OPT pass �J MOV r0, #6 ; Everything is OK, so send an �L ADR r1, pollblock ; event_CLICK to TreeMenu, using �M LDR r2, treemenutaskhandle ; the pointer info found earlier. �' SWI "XWimp_SendMessage" � � BVS quit � � .quit �> LDMFD r13!, {R14} ; Restore r14_svc. �G TEQP r9, #0 ; Switch back to User mode. � MOV r0, r0 � �K LDMFD r13!, {R0-R12, PC} ; Restore registers and return. �] �� � � �N� ************************************************************************ � �� filer_task � � �[ OPT pass � �..filtercode ; look for Alt-Menu clicks 3 ; pollblock is pointed to by r1 Q LDR r2, [R1,#8] ; Event will be event_CLICK, so mouse L TST r2,#2 ; button info is at pollblock!8. G �Q PC,R14 ; Return if Menu button is up. N STMFD r13!, {R0-R1,R14} ; Only need to preserve r0 and r1 ; ; for the poll. M MOV r0,#129 ; Test for alt key using OS_Byte. MOV r2,#255 L MOV r1,#key ; Code for key to be tested for. SWI "OS_Byte" CMP r2, #255: K LDMNEFD r13!,{R0-R1,PC} ; Return if alt is not pressed. P LDMFD r13,{R0-R1} ; Re-load message block intended for 7 ; Filer ... L LDR r2, treemenutaskhandle ; ...and send it straight on to 7 ; TreeMenu. & SWI "Wimp_SendMessage" K LDMFD r13!,{R0-R1} ; Re-load message block in case F ; SendMessage corrupts it. H MOV r0, #0 ; Change it to a Null event, H LDMFD r13!,{PC} ; and pass it on to Filer... ] � N� ************************************************************************ !� pass0 " #%� Install the module in RMA area. $%ș "OS_Module", 11, codespace, P% % &� ' ( ) *"� �FindTaskHandle( task_name$) +$ � buff_len, buffer, r0, r1, r2 ,%buff_len = 256: � buffer buff_len - r0 = 0 .� / r1 = buffer: r2 = 16 06 ș "TaskManager_EnumerateTasks", r0, r1, r2 � r0 1 � r0=-1 = 0 2+ � �string( buffer!4, 32) = task_name$ 3=!buffer 4 5 6� �string( x, n) 7 � i,c, a$ 8 � i=0 � n 9 c = ?(x+i) : � c=0 � =a$ ; a$ = a$ + �(c) < � ==a$ �
00000000 0d 00 01 4d ee 20 85 20 ee 20 85 20 87 3a 20 f6 |...M. . . . .: .| 00000010 3a 20 f1 20 3b 22 20 69 6e 20 21 54 72 65 65 4d |: . ;" in !TreeM| 00000020 65 6e 75 2e 21 4d 61 6b 65 4d 6f 64 2c 20 69 6e |enu.!MakeMod, in| 00000030 74 65 72 6e 61 6c 20 65 72 72 6f 72 20 63 6f 64 |ternal error cod| 00000040 65 20 22 3b 9e 3b 20 22 2e 22 3a 20 e0 0d 00 02 |e ";.; ".": ....| 00000050 04 0d 00 03 4c f4 20 54 68 69 73 20 70 72 6f 67 |....L. This prog| 00000060 72 61 6d 20 69 73 20 72 75 6e 20 62 79 20 54 72 |ram is run by Tr| 00000070 65 65 4d 65 6e 75 27 73 20 21 52 75 6e 49 6d 61 |eeMenu's !RunIma| 00000080 67 65 20 61 66 74 65 72 20 69 74 20 68 61 73 20 |ge after it has | 00000090 73 65 74 20 69 74 73 65 6c 66 20 75 70 0d 00 04 |set itself up...| 000000a0 15 f4 20 61 73 20 61 20 57 69 6d 70 20 74 61 73 |.. as a Wimp tas| 000000b0 6b 2e 0d 00 05 05 f4 0d 00 06 49 f4 20 49 74 20 |k.........I. It | 000000c0 66 69 6e 64 73 20 74 68 65 20 74 61 73 6b 20 68 |finds the task h| 000000d0 61 6e 64 6c 65 73 20 6f 66 20 74 68 65 20 46 69 |andles of the Fi| 000000e0 6c 65 72 20 61 6e 64 20 54 72 65 65 4d 65 6e 75 |ler and TreeMenu| 000000f0 20 61 6e 64 20 61 73 73 65 6d 62 6c 65 73 20 61 | and assembles a| 00000100 0d 00 07 46 f4 20 6d 6f 64 75 6c 65 20 75 73 69 |...F. module usi| 00000110 6e 67 20 74 68 65 73 65 20 74 61 73 6b 20 68 61 |ng these task ha| 00000120 6e 64 6c 65 73 2e 20 54 68 65 20 6d 6f 64 75 6c |ndles. The modul| 00000130 65 20 69 73 20 7e 20 35 30 30 20 62 79 74 65 73 |e is ~ 500 bytes| 00000140 20 6c 6f 6e 67 2e 0d 00 08 05 f4 0d 00 09 48 f4 | long.........H.| 00000150 20 54 68 65 20 6d 6f 64 75 6c 65 20 64 65 74 65 | The module dete| 00000160 63 74 73 20 4f 53 20 6d 6f 75 73 65 20 62 75 74 |cts OS mouse but| 00000170 74 6f 6e 20 65 76 65 6e 74 73 20 28 6e 6f 74 20 |ton events (not | 00000180 57 69 6d 70 29 2c 20 61 6e 64 20 73 65 6e 64 73 |Wimp), and sends| 00000190 20 61 6e 0d 00 0a 4e f4 20 65 76 65 6e 74 5f 43 | an...N. event_C| 000001a0 4c 49 43 4b 20 74 6f 20 54 72 65 65 4d 65 6e 75 |LICK to TreeMenu| 000001b0 20 69 66 20 74 68 65 20 63 6c 69 63 6b 20 69 73 | if the click is| 000001c0 20 77 69 74 68 20 74 68 65 20 6d 65 6e 75 20 62 | with the menu b| 000001d0 75 74 74 6f 6e 20 61 6e 64 20 69 73 20 6f 6e 20 |utton and is on | 000001e0 61 0d 00 0b 17 f4 20 77 69 6e 64 6f 77 20 74 69 |a..... window ti| 000001f0 74 6c 65 2d 62 61 72 2e 0d 00 0c 05 f4 0d 00 0d |tle-bar.........| 00000200 4d f4 20 49 74 20 61 6c 73 6f 20 61 74 74 61 63 |M. It also attac| 00000210 68 65 73 20 61 20 46 69 6c 74 65 72 20 6f 6e 74 |hes a Filter ont| 00000220 6f 20 74 68 65 20 46 69 6c 65 72 2e 20 49 66 20 |o the Filer. If | 00000230 74 68 65 72 65 20 69 73 20 61 6e 20 41 6c 74 2d |there is an Alt-| 00000240 4d 65 6e 75 20 63 6c 69 63 6b 0d 00 0e 4c f4 20 |Menu click...L. | 00000250 6f 6e 20 61 20 46 69 6c 65 72 20 77 69 6e 64 6f |on a Filer windo| 00000260 77 73 2c 20 74 68 65 20 63 6c 69 63 6b 20 69 73 |ws, the click is| 00000270 20 73 65 6e 74 20 74 6f 20 54 72 65 65 4d 65 6e | sent to TreeMen| 00000280 75 2c 20 61 6e 64 20 61 20 4e 55 4c 4c 20 65 76 |u, and a NULL ev| 00000290 65 6e 74 20 69 73 0d 00 0f 18 f4 20 73 65 6e 74 |ent is..... sent| 000002a0 20 74 6f 20 74 68 65 20 46 69 6c 65 72 2e 0d 00 | to the Filer...| 000002b0 10 05 f4 0d 00 11 04 0d 00 12 04 0d 00 13 10 de |................| 000002c0 20 62 75 66 66 65 72 20 31 30 30 0d 00 14 04 0d | buffer 100.....| 000002d0 00 15 44 c8 99 20 22 4f 53 5f 52 65 61 64 56 61 |..D.. "OS_ReadVa| 000002e0 72 56 61 6c 22 2c 20 22 54 72 65 65 4d 65 6e 75 |rVal", "TreeMenu| 000002f0 24 4f 70 74 69 6f 6e 73 22 2c 20 62 75 66 66 65 |$Options", buffe| 00000300 72 2c 20 31 30 30 2c 20 30 2c 20 30 20 b8 20 2c |r, 100, 0, 0 . ,| 00000310 2c 20 6e 0d 00 16 1c 61 24 20 3d 20 a4 73 74 72 |, n....a$ = .str| 00000320 69 6e 67 28 20 62 75 66 66 65 72 2c 20 6e 29 0d |ing( buffer, n).| 00000330 00 17 04 0d 00 18 27 64 65 74 65 63 74 5f 74 69 |......'detect_ti| 00000340 74 6c 65 62 61 72 20 3d 20 a7 20 61 24 2c 20 22 |tlebar = . a$, "| 00000350 54 69 74 6c 65 62 61 72 22 29 0d 00 19 28 6f 6e |Titlebar")...(on| 00000360 6c 79 5f 66 69 6c 65 72 20 20 20 20 20 20 3d 20 |ly_filer = | 00000370 a7 20 61 24 2c 20 22 4f 6e 6c 79 46 69 6c 65 72 |. a$, "OnlyFiler| 00000380 22 29 0d 00 1a 04 0d 00 1b 2f 66 69 6c 65 72 5f |")......./filer_| 00000390 74 61 73 6b 20 20 20 20 20 20 3d 20 a4 46 69 6e |task = .Fin| 000003a0 64 54 61 73 6b 48 61 6e 64 6c 65 28 20 22 46 69 |dTaskHandle( "Fi| 000003b0 6c 65 72 22 29 0d 00 1c 32 74 72 65 65 6d 65 6e |ler")...2treemen| 000003c0 75 5f 74 61 73 6b 20 20 20 3d 20 a4 46 69 6e 64 |u_task = .Find| 000003d0 54 61 73 6b 48 61 6e 64 6c 65 28 20 22 54 72 65 |TaskHandle( "Tre| 000003e0 65 4d 65 6e 75 22 29 0d 00 1d 04 0d 00 1e 38 f4 |eMenu").......8.| 000003f0 20 49 46 20 66 69 6c 65 72 5f 74 61 73 6b 20 3d | IF filer_task =| 00000400 20 30 20 45 52 52 4f 52 20 30 2c 20 22 43 61 6e | 0 ERROR 0, "Can| 00000410 27 74 20 66 69 6e 64 20 46 69 6c 65 72 20 74 61 |'t find Filer ta| 00000420 73 6b 22 0d 00 1f 38 e7 20 74 72 65 65 6d 65 6e |sk"...8. treemen| 00000430 75 5f 74 61 73 6b 20 20 3d 20 30 20 85 20 30 2c |u_task = 0 . 0,| 00000440 20 22 43 61 6e 27 74 20 66 69 6e 64 20 54 72 65 | "Can't find Tre| 00000450 65 4d 65 6e 75 20 74 61 73 6b 22 0d 00 20 04 0d |eMenu task".. ..| 00000460 00 21 29 6b 65 79 20 3d 20 32 35 36 2d 33 3a 20 |.!)key = 256-3: | 00000470 f4 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 3c |. code for the <| 00000480 61 6c 74 3e 20 6b 65 79 0d 00 22 04 0d 00 23 04 |alt> key.."...#.| 00000490 0d 00 24 04 0d 00 25 14 de 20 63 6f 64 65 73 70 |..$...%.. codesp| 000004a0 61 63 65 20 31 30 32 34 0d 00 26 04 0d 00 27 04 |ace 1024..&...'.| 000004b0 0d 00 28 17 e3 20 70 61 73 73 30 20 3d 20 30 20 |..(.. pass0 = 0 | 000004c0 b8 20 32 20 88 20 32 0d 00 29 0f 50 25 20 20 20 |. 2 . 2..).P% | 000004d0 20 20 20 3d 20 30 0d 00 2a 17 4f 25 20 20 20 20 | = 0..*.O% | 000004e0 20 20 3d 20 63 6f 64 65 73 70 61 63 65 0d 00 2b | = codespace..+| 000004f0 4c 4c 25 20 20 20 20 20 20 3d 20 63 6f 64 65 73 |LL% = codes| 00000500 70 61 63 65 20 2b 20 31 30 32 34 3a 20 f4 20 70 |pace + 1024: . p| 00000510 72 65 76 65 6e 74 73 20 61 73 73 65 6d 62 6c 65 |revents assemble| 00000520 72 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 |r from overwriti| 00000530 6e 67 20 6d 65 6d 6f 72 79 0d 00 2c 1b 70 61 73 |ng memory..,.pas| 00000540 73 20 20 20 20 3d 20 70 61 73 73 30 20 2b 20 34 |s = pass0 + 4| 00000550 20 2b 20 38 0d 00 2d 04 0d 00 2e 04 0d 00 2f 4e | + 8..-......./N| 00000560 f4 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 4d 4f 44 55 |. ********* MODU| 00000570 4c 45 20 73 70 65 63 73 20 2a 2a 2a 2a 2a 2a 2a |LE specs *******| 00000580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 000005a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 00 30 04 0d 00 |**********..0...| 000005b0 31 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 32 04 |1.[ OPT pass..2.| 000005c0 0d 00 33 39 20 20 20 20 20 20 20 20 45 51 55 44 |..39 EQUD| 000005d0 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 | 0 | 000005e0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f | ; No| 000005f0 20 73 74 61 72 74 75 70 2e 0d 00 34 1e 20 20 20 | startup...4. | 00000600 20 20 20 20 20 45 51 55 44 20 20 20 20 69 6e 69 | EQUD ini| 00000610 74 69 61 6c 69 73 65 0d 00 35 1c 20 20 20 20 20 |tialise..5. | 00000620 20 20 20 45 51 55 44 20 20 20 20 66 69 6e 61 6c | EQUD final| 00000630 69 73 65 0d 00 36 4e 20 20 20 20 20 20 20 20 45 |ise..6N E| 00000640 51 55 44 20 20 20 20 30 20 20 20 20 20 20 20 20 |QUD 0 | 00000650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000660 20 4e 6f 20 73 65 72 76 69 63 65 20 63 61 6c 6c | No service call| 00000670 73 20 61 72 65 20 64 65 61 6c 74 20 77 69 74 68 |s are dealt with| 00000680 2e 0d 00 37 19 20 20 20 20 20 20 20 20 45 51 55 |...7. EQU| 00000690 44 20 20 20 20 74 69 74 6c 65 0d 00 38 1e 20 20 |D title..8. | 000006a0 20 20 20 20 20 20 45 51 55 44 20 20 20 20 68 65 | EQUD he| 000006b0 6c 70 73 74 72 69 6e 67 0d 00 39 3c 20 20 20 20 |lpstring..9< | 000006c0 20 20 20 20 45 51 55 44 20 20 20 20 30 20 20 20 | EQUD 0 | 000006d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000006e0 20 20 20 20 3b 20 4e 6f 20 68 65 6c 70 20 74 61 | ; No help ta| 000006f0 62 6c 65 2e 0d 00 3a 3b 20 20 20 20 20 20 20 20 |ble...:; | 00000700 45 51 55 44 20 20 20 20 30 20 20 20 20 20 20 20 |EQUD 0 | 00000710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000720 3b 20 4e 6f 20 53 57 49 20 63 68 75 6e 6b 2e 0d |; No SWI chunk..| 00000730 00 3b 3d 20 20 20 20 20 20 20 20 45 51 55 44 20 |.;= EQUD | 00000740 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000750 20 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 | ; No | 00000760 53 57 49 20 68 61 6e 64 6c 65 72 2e 0d 00 3c 3b |SWI handler...<;| 00000770 20 20 20 20 20 20 20 20 45 51 55 44 20 20 20 20 | EQUD | 00000780 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00000790 20 20 20 20 20 20 20 20 3b 20 4e 6f 20 53 57 49 | ; No SWI| 000007a0 20 74 61 62 6c 65 2e 0d 00 3d 3a 20 20 20 20 20 | table...=: | 000007b0 20 20 20 45 51 55 44 20 20 20 20 30 20 20 20 20 | EQUD 0 | 000007c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000007d0 20 20 20 3b 20 4e 6f 20 53 57 49 20 63 6f 64 65 | ; No SWI code| 000007e0 2e 0d 00 3e 05 5d 0d 00 3f 04 0d 00 40 4e f4 20 |...>.]..?...@N. | 000007f0 2a 2a 2a 2a 2a 2a 20 53 74 6f 72 61 67 65 20 73 |****** Storage s| 00000800 70 61 63 65 20 66 6f 72 20 63 6f 6e 73 74 61 6e |pace for constan| 00000810 74 73 20 65 74 63 2e 20 2a 2a 2a 2a 2a 2a 2a 2a |ts etc. ********| 00000820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| 00000830 2a 2a 2a 2a 2a 2a 2a 2a 0d 00 41 04 0d 00 42 0e |********..A...B.| 00000840 5b 20 4f 50 54 20 70 61 73 73 0d 00 43 04 0d 00 |[ OPT pass..C...| 00000850 44 2b 2e 66 69 6c 65 72 74 61 73 6b 68 61 6e 64 |D+.filertaskhand| 00000860 6c 65 3a 20 20 20 20 20 20 20 45 51 55 44 20 66 |le: EQUD f| 00000870 69 6c 65 72 5f 74 61 73 6b 0d 00 45 2e 2e 74 72 |iler_task..E..tr| 00000880 65 65 6d 65 6e 75 74 61 73 6b 68 61 6e 64 6c 65 |eemenutaskhandle| 00000890 3a 20 20 20 20 45 51 55 44 20 74 72 65 65 6d 65 |: EQUD treeme| 000008a0 6e 75 5f 74 61 73 6b 0d 00 46 4b 2e 6d 61 73 6b |nu_task..FK.mask| 000008b0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |: | 000008c0 20 20 20 45 51 55 44 20 ac 20 28 31 3c 3c 36 29 | EQUD . (1<<6)| 000008d0 20 3b 20 6c 65 74 73 20 74 68 72 6f 75 67 68 20 | ; lets through | 000008e0 65 76 65 6e 74 5f 43 4c 49 43 4b 27 73 20 6f 6e |event_CLICK's on| 000008f0 6c 79 0d 00 47 22 2e 6f 6c 64 62 75 74 74 6f 6e |ly..G".oldbutton| 00000900 73 74 61 74 65 3a 20 20 20 20 20 20 20 20 45 51 |state: EQ| 00000910 55 44 20 30 0d 00 48 04 0d 00 49 37 2e 70 6f 6c |UD 0..H...I7.pol| 00000920 6c 62 6c 6f 63 6b 3a 20 20 20 20 20 20 20 20 20 |lblock: | 00000930 20 20 20 20 45 51 55 53 20 c4 20 32 30 2c 20 bd | EQUS . 20, .| 00000940 28 30 29 29 3a 20 20 20 20 20 41 4c 49 47 4e 0d |(0)): ALIGN.| 00000950 00 4a 04 0d 00 4b 41 2e 74 69 74 6c 65 3a 20 20 |.J...KA.title: | 00000960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 | E| 00000970 51 55 53 20 22 54 72 65 65 4d 65 6e 75 4d 6f 75 |QUS "TreeMenuMou| 00000980 73 65 22 3a 20 20 20 45 51 55 42 20 30 3a 20 41 |se": EQUB 0: A| 00000990 4c 49 47 4e 0d 00 4c 41 2e 66 69 6c 74 65 72 6e |LIGN..LA.filtern| 000009a0 61 6d 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 |ame: | 000009b0 45 51 55 53 20 22 54 72 65 65 4d 65 6e 75 22 3a |EQUS "TreeMenu":| 000009c0 20 20 20 20 20 20 20 20 45 51 55 42 20 30 3a 20 | EQUB 0: | 000009d0 41 4c 49 47 4e 0d 00 4d 1c 2e 68 65 6c 70 73 74 |ALIGN..M..helpst| 000009e0 72 69 6e 67 3a 20 20 20 20 20 20 20 20 20 20 20 |ring: | 000009f0 20 0d 00 4e 4c 20 20 20 20 20 20 20 20 45 51 55 | ..NL EQU| 00000a00 53 20 20 20 20 22 54 72 65 65 4d 65 6e 75 4d 6f |S "TreeMenuMo| 00000a10 75 73 65 22 2b bd 28 39 29 2b 22 30 2e 33 30 20 |use"+.(9)+"0.30 | 00000a20 28 31 34 20 46 65 62 20 31 39 39 34 29 20 a9 20 |(14 Feb 1994) . | 00000a30 4a 75 6c 69 61 6e 20 53 6d 69 74 68 22 0d 00 4f |Julian Smith"..O| 00000a40 19 20 20 20 20 20 20 20 20 45 51 55 42 20 30 3a |. EQUB 0:| 00000a50 20 41 4c 49 47 4e 0d 00 50 05 5d 0d 00 51 04 0d | ALIGN..P.]..Q..| 00000a60 00 52 04 0d 00 53 04 0d 00 54 04 0d 00 55 4e f4 |.R...S...T...UN.| 00000a70 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a | ***************| 00000a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000ab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 00 56 04 0d 00 57 |*********..V...W| 00000ac0 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 58 04 0d |.[ OPT pass..X..| 00000ad0 00 59 0f 2e 69 6e 69 74 69 61 6c 69 73 65 0d 00 |.Y..initialise..| 00000ae0 5a 1f 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |Z. STMFD | 00000af0 20 20 72 31 33 21 2c 20 7b 72 31 34 7d 0d 00 5b | r13!, {r14}..[| 00000b00 05 5d 0d 00 5c 04 0d 00 5d 17 e7 20 64 65 74 65 |.]..\...].. dete| 00000b10 63 74 5f 74 69 74 6c 65 62 61 72 20 8c 0d 00 5e |ct_titlebar ...^| 00000b20 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 5f 04 0d |.[ OPT pass.._..| 00000b30 00 60 3e 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |.`> MOV | 00000b40 20 20 20 72 30 2c 20 23 31 36 20 20 20 20 20 20 | r0, #16 | 00000b50 20 20 20 20 20 20 20 20 20 20 20 3b 20 43 6c 61 | ; Cla| 00000b60 69 6d 20 4f 53 20 65 76 65 6e 74 73 2e 0d 00 61 |im OS events...a| 00000b70 21 20 20 20 20 20 20 20 20 41 44 52 20 20 20 20 |! ADR | 00000b80 20 72 31 2c 20 65 76 65 6e 74 63 6f 64 65 0d 00 | r1, eventcode..| 00000b90 62 1a 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 |b. MOV | 00000ba0 20 20 72 32 2c 20 23 30 0d 00 63 1e 20 20 20 20 | r2, #0..c. | 00000bb0 20 20 20 20 53 57 49 20 20 20 20 20 22 4f 53 5f | SWI "OS_| 00000bc0 43 6c 61 69 6d 22 0d 00 64 4c 20 20 20 20 20 20 |Claim"..dL | 00000bd0 20 20 4d 4f 56 20 20 20 20 20 72 30 2c 20 23 31 | MOV r0, #1| 00000be0 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |4 | 00000bf0 20 20 3b 20 45 6e 61 62 6c 65 20 4f 53 20 6d 6f | ; Enable OS mo| 00000c00 75 73 65 20 62 75 74 74 6f 6e 20 65 76 65 6e 74 |use button event| 00000c10 73 2e 0d 00 65 1b 20 20 20 20 20 20 20 20 4d 4f |s...e. MO| 00000c20 56 20 20 20 20 20 72 31 2c 20 23 31 30 0d 00 66 |V r1, #10..f| 00000c30 1d 20 20 20 20 20 20 20 20 53 57 49 20 20 20 20 |. SWI | 00000c40 20 22 4f 53 5f 42 79 74 65 22 0d 00 67 05 5d 0d | "OS_Byte"..g.].| 00000c50 00 68 05 cd 0d 00 69 04 0d 00 6a 04 0d 00 6b 12 |.h....i...j...k.| 00000c60 e7 20 66 69 6c 65 72 5f 74 61 73 6b 20 8c 0d 00 |. filer_task ...| 00000c70 6c 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 6d 04 |l.[ OPT pass..m.| 00000c80 0d 00 6e 4b 20 20 20 20 20 20 20 20 41 44 52 20 |..nK ADR | 00000c90 20 20 20 20 72 30 2c 20 66 69 6c 74 65 72 6e 61 | r0, filterna| 00000ca0 6d 65 20 20 20 20 20 20 20 20 20 20 3b 20 41 74 |me ; At| 00000cb0 74 61 63 68 20 61 20 66 69 6c 74 65 72 20 74 6f |tach a filter to| 00000cc0 20 74 68 65 20 46 69 6c 65 72 2e 0d 00 6f 22 20 | the Filer...o" | 00000cd0 20 20 20 20 20 20 20 41 44 52 20 20 20 20 20 72 | ADR r| 00000ce0 31 2c 20 66 69 6c 74 65 72 63 6f 64 65 0d 00 70 |1, filtercode..p| 00000cf0 19 20 20 20 20 20 20 20 20 41 44 52 20 20 20 20 |. ADR | 00000d00 20 72 32 2c 20 30 0d 00 71 27 20 20 20 20 20 20 | r2, 0..q' | 00000d10 20 20 4c 44 52 20 20 20 20 20 72 33 2c 20 66 69 | LDR r3, fi| 00000d20 6c 65 72 74 61 73 6b 68 61 6e 64 6c 65 0d 00 72 |lertaskhandle..r| 00000d30 1c 20 20 20 20 20 20 20 20 4c 44 52 20 20 20 20 |. LDR | 00000d40 20 72 34 2c 20 6d 61 73 6b 0d 00 73 2f 20 20 20 | r4, mask..s/ | 00000d50 20 20 20 20 20 53 57 49 20 20 20 20 20 22 46 69 | SWI "Fi| 00000d60 6c 74 65 72 5f 52 65 67 69 73 74 65 72 50 6f 73 |lter_RegisterPos| 00000d70 74 46 69 6c 74 65 72 22 0d 00 74 05 5d 0d 00 75 |tFilter"..t.]..u| 00000d80 05 cd 0d 00 76 04 0d 00 77 04 0d 00 78 0e 5b 20 |....v...w...x.[ | 00000d90 4f 50 54 20 70 61 73 73 0d 00 79 1e 20 20 20 20 |OPT pass..y. | 00000da0 20 20 20 20 4c 44 4d 46 44 20 20 20 72 31 33 21 | LDMFD r13!| 00000db0 2c 20 7b 50 43 7d 0d 00 7a 05 5d 0d 00 7b 04 0d |, {PC}..z.]..{..| 00000dc0 00 7c 04 0d 00 7d 4e f4 20 2a 2a 2a 2a 2a 2a 2a |.|...}N. *******| 00000dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000e10 2a 0d 00 7e 04 0d 00 7f 04 0d 00 80 0e 5b 20 4f |*..~.........[ O| 00000e20 50 54 20 70 61 73 73 0d 00 81 04 0d 00 82 0d 2e |PT pass.........| 00000e30 66 69 6e 61 6c 69 73 65 0d 00 83 1f 20 20 20 20 |finalise.... | 00000e40 20 20 20 20 53 54 4d 46 44 20 20 20 72 31 33 21 | STMFD r13!| 00000e50 2c 20 7b 52 31 34 7d 0d 00 84 05 5d 0d 00 85 04 |, {R14}....]....| 00000e60 0d 00 86 17 e7 20 64 65 74 65 63 74 5f 74 69 74 |..... detect_tit| 00000e70 6c 65 62 61 72 20 8c 0d 00 87 0e 5b 20 4f 50 54 |lebar .....[ OPT| 00000e80 20 70 61 73 73 0d 00 88 4d 20 20 20 20 20 20 20 | pass...M | 00000e90 20 4d 4f 56 20 20 20 20 20 72 30 2c 20 23 31 33 | MOV r0, #13| 00000ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000eb0 20 3b 20 44 69 73 61 62 6c 65 20 4f 53 20 6d 6f | ; Disable OS mo| 00000ec0 75 73 65 20 62 75 74 74 6f 6e 20 65 76 65 6e 74 |use button event| 00000ed0 73 2e 0d 00 89 4e 20 20 20 20 20 20 20 20 4d 4f |s....N MO| 00000ee0 56 20 20 20 20 20 72 31 2c 20 23 31 30 20 20 20 |V r1, #10 | 00000ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00000f00 49 74 73 20 4f 4b 20 69 66 20 73 6f 6d 65 6f 6e |Its OK if someon| 00000f10 65 20 65 6c 73 65 20 69 73 20 75 73 69 6e 67 20 |e else is using | 00000f20 0d 00 8a 4f 20 20 20 20 20 20 20 20 53 57 49 20 |...O SWI | 00000f30 20 20 20 20 22 4f 53 5f 42 79 74 65 22 20 20 20 | "OS_Byte" | 00000f40 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 74 68 | ; th| 00000f50 65 6d 2c 20 61 73 20 74 68 65 20 4f 53 20 6d 61 |em, as the OS ma| 00000f60 69 6e 74 61 69 6e 73 20 61 20 63 6f 75 6e 74 0d |intains a count.| 00000f70 00 8b 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 |..O | 00000f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000f90 20 20 20 20 20 20 20 20 20 20 20 3b 20 6f 66 20 | ; of | 00000fa0 68 6f 77 20 6d 61 6e 79 20 74 69 6d 65 73 20 65 |how many times e| 00000fb0 61 63 68 20 65 76 65 6e 74 2d 74 79 70 65 0d 00 |ach event-type..| 00000fc0 8c 42 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.B | 00000fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000fe0 20 20 20 20 20 20 20 20 20 20 3b 20 69 73 20 65 | ; is e| 00000ff0 6e 61 62 6c 65 64 2f 64 69 73 61 62 6c 65 64 2e |nabled/disabled.| 00001000 0d 00 8d 04 0d 00 8e 46 20 20 20 20 20 20 20 20 |.......F | 00001010 4d 4f 56 20 20 20 20 20 72 30 2c 20 23 31 36 20 |MOV r0, #16 | 00001020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001030 3b 20 53 74 6f 70 20 4f 53 20 63 6c 61 69 6d 69 |; Stop OS claimi| 00001040 6e 67 20 65 76 65 6e 74 73 2e 0d 00 8f 21 20 20 |ng events....! | 00001050 20 20 20 20 20 20 41 44 52 20 20 20 20 20 72 31 | ADR r1| 00001060 2c 20 65 76 65 6e 74 63 6f 64 65 0d 00 90 1a 20 |, eventcode.... | 00001070 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00001080 32 2c 20 23 30 0d 00 91 20 20 20 20 20 20 20 20 |2, #0... | 00001090 20 53 57 49 20 20 20 20 20 22 4f 53 5f 52 65 6c | SWI "OS_Rel| 000010a0 65 61 73 65 22 0d 00 92 05 5d 0d 00 93 05 cd 0d |ease"....]......| 000010b0 00 94 04 0d 00 95 12 e7 20 66 69 6c 65 72 5f 74 |........ filer_t| 000010c0 61 73 6b 20 8c 0d 00 96 0e 5b 20 4f 50 54 20 70 |ask .....[ OPT p| 000010d0 61 73 73 0d 00 97 04 0d 00 98 4e 20 20 20 20 20 |ass.......N | 000010e0 20 20 20 41 44 52 20 20 20 20 20 72 30 2c 20 66 | ADR r0, f| 000010f0 69 6c 74 65 72 6e 61 6d 65 20 20 20 20 20 20 20 |iltername | 00001100 20 20 20 3b 20 44 65 2d 72 65 67 69 73 74 65 72 | ; De-register| 00001110 20 66 69 6c 74 65 72 20 6f 6e 20 74 68 65 20 46 | filter on the F| 00001120 69 6c 65 72 2e 0d 00 99 22 20 20 20 20 20 20 20 |iler...." | 00001130 20 41 44 52 20 20 20 20 20 72 31 2c 20 66 69 6c | ADR r1, fil| 00001140 74 65 72 63 6f 64 65 0d 00 9a 19 20 20 20 20 20 |tercode.... | 00001150 20 20 20 41 44 52 20 20 20 20 20 72 32 2c 20 30 | ADR r2, 0| 00001160 0d 00 9b 27 20 20 20 20 20 20 20 20 4c 44 52 20 |...' LDR | 00001170 20 20 20 20 72 33 2c 20 66 69 6c 65 72 74 61 73 | r3, filertas| 00001180 6b 68 61 6e 64 6c 65 0d 00 9c 1c 20 20 20 20 20 |khandle.... | 00001190 20 20 20 4c 44 52 20 20 20 20 20 72 34 2c 20 6d | LDR r4, m| 000011a0 61 73 6b 0d 00 9d 31 20 20 20 20 20 20 20 20 53 |ask...1 S| 000011b0 57 49 20 20 20 20 20 22 46 69 6c 74 65 72 5f 44 |WI "Filter_D| 000011c0 65 52 65 67 69 73 74 65 72 50 6f 73 74 46 69 6c |eRegisterPostFil| 000011d0 74 65 72 22 0d 00 9e 04 0d 00 9f 05 5d 0d 00 a0 |ter"........]...| 000011e0 05 cd 0d 00 a1 04 0d 00 a2 04 0d 00 a3 04 0d 00 |................| 000011f0 a4 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 a5 1e |..[ OPT pass....| 00001200 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 00001210 72 31 33 21 2c 20 7b 50 43 7d 0d 00 a6 05 5d 0d |r13!, {PC}....].| 00001220 00 a7 04 0d 00 a8 04 0d 00 a9 4e f4 20 2a 2a 2a |..........N. ***| 00001230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00001270 2a 2a 2a 2a 2a 0d 00 aa 04 0d 00 ab 04 0d 00 ac |*****...........| 00001280 17 e7 20 64 65 74 65 63 74 5f 74 69 74 6c 65 62 |.. detect_titleb| 00001290 61 72 20 8c 0d 00 ad 04 0d 00 ae 0e 5b 20 4f 50 |ar .........[ OP| 000012a0 54 20 70 61 73 73 0d 00 af 50 2e 65 76 65 6e 74 |T pass...P.event| 000012b0 63 6f 64 65 20 20 20 20 20 20 3b 20 2a 2a 2a 2a |code ; ****| 000012c0 2a 2a 2a 2a 2a 2a 2a 20 6c 6f 6f 6b 20 66 6f 72 |******* look for| 000012d0 20 6d 65 6e 75 20 63 6c 69 63 6b 73 20 6f 6e 20 | menu clicks on | 000012e0 66 69 6c 65 72 20 74 69 74 6c 65 62 61 72 20 2a |filer titlebar *| 000012f0 2a 2a 2a 2a 2a 2a 0d 00 b0 04 0d 00 b1 51 20 20 |******.......Q | 00001300 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 30 | CMP r0| 00001310 2c 20 23 31 30 3a 20 4d 4f 56 4e 45 53 20 50 43 |, #10: MOVNES PC| 00001320 2c 20 72 31 34 20 3b 20 52 65 74 75 72 6e 20 69 |, r14 ; Return i| 00001330 66 20 6e 6f 74 20 61 20 6d 6f 75 73 65 20 62 75 |f not a mouse bu| 00001340 74 74 6f 6e 20 65 76 65 6e 74 2e 0d 00 b2 04 0d |tton event......| 00001350 00 b3 41 20 20 20 20 20 20 20 20 53 54 4d 46 44 |..A STMFD| 00001360 20 20 20 72 31 33 21 2c 20 7b 52 30 2d 52 31 32 | r13!, {R0-R12| 00001370 2c 20 72 31 34 7d 20 20 20 20 20 3b 20 53 61 76 |, r14} ; Sav| 00001380 65 20 61 6c 6c 20 72 65 67 69 73 74 65 72 73 2e |e all registers.| 00001390 0d 00 b4 04 0d 00 b5 44 20 20 20 20 20 20 20 20 |.......D | 000013a0 4c 44 52 20 20 20 20 20 72 35 2c 20 6f 6c 64 62 |LDR r5, oldb| 000013b0 75 74 74 6f 6e 73 74 61 74 65 20 20 20 20 20 20 |uttonstate | 000013c0 3b 20 4c 6f 61 64 20 6f 6c 64 20 62 75 74 74 6f |; Load old butto| 000013d0 6e 20 73 74 61 74 65 2e 0d 00 b6 41 20 20 20 20 |n state....A | 000013e0 20 20 20 20 80 20 20 20 20 20 72 33 2c 20 72 33 | . r3, r3| 000013f0 2c 20 23 25 31 31 31 20 20 20 20 20 20 20 20 20 |, #%111 | 00001400 20 20 3b 20 41 72 65 20 68 69 67 68 65 72 20 62 | ; Are higher b| 00001410 69 74 73 20 75 73 65 64 3f 0d 00 b7 44 20 20 20 |its used?...D | 00001420 20 20 20 20 20 53 54 52 20 20 20 20 20 72 33 2c | STR r3,| 00001430 20 6f 6c 64 62 75 74 74 6f 6e 73 74 61 74 65 20 | oldbuttonstate | 00001440 20 20 20 20 20 3b 20 53 74 6f 72 65 20 6e 65 77 | ; Store new| 00001450 20 62 75 74 74 6f 6e 20 73 74 61 74 65 0d 00 b8 | button state...| 00001460 3c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |< | 00001470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001480 20 20 20 20 20 20 20 20 20 3b 20 66 6f 72 20 6e | ; for n| 00001490 65 78 74 20 74 69 6d 65 2e 0d 00 b9 1d 20 20 20 |ext time..... | 000014a0 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 35 2c | CMP r5,| 000014b0 20 23 25 30 30 30 0d 00 ba 4c 20 20 20 20 20 20 | #%000...L | 000014c0 20 20 4c 44 4d 4e 45 46 44 20 72 31 33 21 2c 20 | LDMNEFD r13!, | 000014d0 7b 72 30 2d 72 31 32 2c 20 50 43 7d 20 20 20 20 |{r0-r12, PC} | 000014e0 20 20 3b 20 51 75 69 74 20 69 66 20 70 72 65 76 | ; Quit if prev| 000014f0 69 6f 75 73 20 62 75 74 74 6f 6e 20 73 74 61 74 |ious button stat| 00001500 65 20 0d 00 bb 38 20 20 20 20 20 20 20 20 20 20 |e ...8 | 00001510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00001530 69 73 6e 27 74 20 30 30 30 2e 0d 00 bc 1d 20 20 |isn't 000..... | 00001540 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 33 | CMP r3| 00001550 2c 20 23 25 30 31 30 0d 00 bd 51 20 20 20 20 20 |, #%010...Q | 00001560 20 20 20 4c 44 4d 4e 45 46 44 20 72 31 33 21 2c | LDMNEFD r13!,| 00001570 20 7b 72 30 2d 72 31 32 2c 20 50 43 7d 20 20 20 | {r0-r12, PC} | 00001580 20 20 20 3b 20 51 75 69 74 20 69 66 20 6e 65 77 | ; Quit if new| 00001590 20 62 75 74 74 6f 6e 20 73 74 61 74 65 20 69 73 | button state is| 000015a0 6e 27 74 20 30 31 30 2e 0d 00 be 04 0d 00 bf 04 |n't 010.........| 000015b0 0d 00 c0 4b 20 20 20 20 20 20 20 20 3b 20 42 75 |...K ; Bu| 000015c0 74 74 6f 6e 20 63 68 61 6e 67 65 20 69 73 20 66 |tton change is f| 000015d0 72 6f 6d 20 30 30 30 20 74 6f 20 30 31 30 2c 20 |rom 000 to 010, | 000015e0 69 2e 65 2e 20 6d 65 6e 75 20 62 75 74 74 6f 6e |i.e. menu button| 000015f0 20 63 6c 69 63 6b 2c 20 73 6f 3a 0d 00 c1 04 0d | click, so:.....| 00001600 00 c2 43 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |..C MOV | 00001610 20 20 20 72 39 2c 20 50 43 20 20 20 20 20 20 20 | r9, PC | 00001620 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 77 69 | ; Swi| 00001630 74 63 68 20 74 6f 20 53 56 43 20 6d 6f 64 65 2e |tch to SVC mode.| 00001640 2e 2e 0d 00 c3 1d 20 20 20 20 20 20 20 20 84 52 |...... .R| 00001650 20 20 20 20 20 72 38 2c 20 72 39 2c 20 23 33 0d | r8, r9, #3.| 00001660 00 c4 1a 20 20 20 20 20 20 20 20 54 45 51 50 20 |... TEQP | 00001670 20 20 20 72 38 2c 20 23 30 0d 00 c5 4c 20 20 20 | r8, #0...L | 00001680 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 2c | MOV r0,| 00001690 20 72 30 20 20 20 20 20 20 20 20 20 20 20 20 20 | r0 | 000016a0 20 20 20 20 20 3b 20 2e 2e 2e 61 6e 64 20 73 74 | ; ...and st| 000016b0 6f 72 65 20 72 31 34 5f 73 76 63 20 6f 6e 20 73 |ore r14_svc on s| 000016c0 74 61 63 6b 2c 0d 00 c6 4e 20 20 20 20 20 20 20 |tack,...N | 000016d0 20 53 54 4d 46 44 20 20 20 72 31 33 21 2c 7b 52 | STMFD r13!,{R| 000016e0 31 34 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 |14} | 000016f0 20 3b 20 62 65 63 61 75 73 65 20 69 74 20 69 73 | ; because it is| 00001700 20 63 6f 72 72 75 70 74 65 64 20 62 79 20 53 57 | corrupted by SW| 00001710 49 73 2e 0d 00 c7 04 0d 00 c8 4d 20 20 20 20 20 |Is........M | 00001720 20 20 20 41 44 52 20 20 20 20 20 72 31 2c 20 70 | ADR r1, p| 00001730 6f 6c 6c 62 6c 6f 63 6b 20 20 20 20 20 20 20 20 |ollblock | 00001740 20 20 20 3b 20 47 65 74 20 69 6e 66 6f 20 6f 6e | ; Get info on| 00001750 20 74 68 65 20 77 69 6e 64 6f 77 20 61 6e 64 20 | the window and | 00001760 69 63 6f 6e 0d 00 c9 47 20 20 20 20 20 20 20 20 |icon...G | 00001770 53 57 49 20 20 20 20 20 22 58 57 69 6d 70 5f 47 |SWI "XWimp_G| 00001780 65 74 50 6f 69 6e 74 65 72 49 6e 66 6f 22 20 20 |etPointerInfo" | 00001790 3b 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 |; that the point| 000017a0 65 72 20 69 73 20 6f 76 65 72 2e 0d 00 ca 04 0d |er is over......| 000017b0 00 cb 4e 20 20 20 20 20 20 20 20 42 56 53 20 20 |..N BVS | 000017c0 20 20 20 71 75 69 74 20 20 20 20 20 20 20 20 20 | quit | 000017d0 20 20 20 20 20 20 20 20 20 20 20 3b 20 49 6e 20 | ; In | 000017e0 63 61 73 65 20 6e 6f 74 20 69 6e 20 77 69 6d 70 |case not in wimp| 000017f0 20 65 6e 76 69 72 6f 6d 65 6e 74 20 3f 0d 00 cc | enviroment ?...| 00001800 51 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |Q | 00001810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001820 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 74 20 63 | ; Not c| 00001830 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 20 53 57 |hecking for a SW| 00001840 49 20 65 72 72 6f 72 20 63 61 75 73 65 64 0d 00 |I error caused..| 00001850 cd 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |.L | 00001860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001870 20 20 20 20 20 20 20 20 20 20 3b 20 61 20 73 79 | ; a sy| 00001880 73 74 65 6d 20 63 72 61 73 68 20 77 68 65 6e 20 |stem crash when | 00001890 75 73 65 64 20 77 69 74 68 20 0d 00 ce 34 20 20 |used with ...4 | 000018a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 000018c0 20 20 20 20 20 20 3b 20 4d 65 6d 46 53 2e 0d 00 | ; MemFS...| 000018d0 cf 04 0d 00 d0 45 20 20 20 20 20 20 20 20 4c 44 |.....E LD| 000018e0 52 20 20 20 20 20 72 30 2c 20 5b 52 31 2c 23 31 |R r0, [R1,#1| 000018f0 36 5d 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 |6] ; | 00001900 43 68 65 63 6b 20 69 63 6f 6e 20 68 61 6e 64 6c |Check icon handl| 00001910 65 20 69 73 20 2d 34 0d 00 d1 3f 20 20 20 20 20 |e is -4...? | 00001920 20 20 20 41 44 44 20 20 20 20 20 72 30 2c 20 72 | ADD r0, r| 00001930 30 2c 20 23 34 20 20 20 20 20 20 20 20 20 20 20 |0, #4 | 00001940 20 20 20 3b 20 28 20 74 68 65 20 74 69 74 6c 65 | ; ( the title| 00001950 20 62 61 72 29 2e 0d 00 d2 1a 20 20 20 20 20 20 | bar)..... | 00001960 20 20 43 4d 50 20 20 20 20 20 72 30 2c 20 23 30 | CMP r0, #0| 00001970 0d 00 d3 3f 20 20 20 20 20 20 20 20 42 4e 45 20 |...? BNE | 00001980 20 20 20 20 71 75 69 74 20 20 20 20 20 20 20 20 | quit | 00001990 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 51 75 | ; Qu| 000019a0 69 74 20 69 66 20 69 74 20 69 73 6e 27 74 2e 0d |it if it isn't..| 000019b0 00 d4 04 0d 00 d5 05 5d 0d 00 d6 05 cd 0d 00 d7 |.......]........| 000019c0 04 0d 00 d8 12 e7 20 6f 6e 6c 79 5f 66 69 6c 65 |...... only_file| 000019d0 72 20 8c 0d 00 d9 0e 5b 20 4f 50 54 20 70 61 73 |r .....[ OPT pas| 000019e0 73 0d 00 da 50 20 20 20 20 20 20 20 20 4d 4f 56 |s...P MOV| 000019f0 20 20 20 20 20 72 30 2c 20 23 30 20 20 20 20 20 | r0, #0 | 00001a00 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 | ; S| 00001a10 65 6e 64 20 61 20 6e 75 6c 6c 20 65 76 65 6e 74 |end a null event| 00001a20 20 74 6f 20 74 68 65 20 77 69 6e 64 6f 77 20 74 | to the window t| 00001a30 6f 0d 00 db 43 20 20 20 20 20 20 20 20 41 44 52 |o...C ADR| 00001a40 20 20 20 20 20 72 31 2c 20 70 6f 6c 6c 62 6c 6f | r1, pollblo| 00001a50 63 6b 20 20 20 20 20 20 20 20 20 20 20 3b 20 66 |ck ; f| 00001a60 69 6e 64 20 69 74 73 20 74 61 73 6b 20 68 61 6e |ind its task han| 00001a70 64 6c 65 2e 0d 00 dc 4d 20 20 20 20 20 20 20 20 |dle....M | 00001a80 4c 44 52 20 20 20 20 20 72 32 2c 20 5b 52 31 2c |LDR r2, [R1,| 00001a90 23 31 32 5d 20 20 20 20 20 20 20 20 20 20 20 20 |#12] | 00001aa0 3b 20 54 68 65 20 74 61 73 6b 20 68 61 6e 64 6c |; The task handl| 00001ab0 65 20 69 73 20 70 75 74 20 69 6e 74 6f 20 72 32 |e is put into r2| 00001ac0 2e 0d 00 dd 27 20 20 20 20 20 20 20 20 53 57 49 |....' SWI| 00001ad0 20 20 20 20 20 22 58 57 69 6d 70 5f 53 65 6e 64 | "XWimp_Send| 00001ae0 4d 65 73 73 61 67 65 22 0d 00 de 04 0d 00 df 18 |Message"........| 00001af0 20 20 20 20 20 20 20 20 42 56 53 20 20 20 20 20 | BVS | 00001b00 71 75 69 74 0d 00 e0 04 0d 00 e1 46 20 20 20 20 |quit.......F | 00001b10 20 20 20 20 4c 44 52 20 20 20 20 20 72 35 2c 20 | LDR r5, | 00001b20 66 69 6c 65 72 74 61 73 6b 68 61 6e 64 6c 65 20 |filertaskhandle | 00001b30 20 20 20 20 3b 20 43 68 65 63 6b 20 69 66 20 74 | ; Check if t| 00001b40 68 65 20 74 61 73 6b 20 68 61 6e 64 6c 65 0d 00 |he task handle..| 00001b50 e2 3b 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 |.; CMP | 00001b60 20 20 72 32 2c 20 72 35 20 20 20 20 20 20 20 20 | r2, r5 | 00001b70 20 20 20 20 20 20 20 20 20 20 3b 20 69 73 20 74 | ; is t| 00001b80 68 65 20 66 69 6c 65 72 2e 0d 00 e3 3e 20 20 20 |he filer....> | 00001b90 20 20 20 20 20 42 4e 45 20 20 20 20 20 71 75 69 | BNE qui| 00001ba0 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |t | 00001bb0 20 20 20 20 20 3b 20 51 75 69 74 20 69 66 20 69 | ; Quit if i| 00001bc0 74 20 69 73 6e 27 74 0d 00 e4 05 5d 0d 00 e5 05 |t isn't....]....| 00001bd0 cd 0d 00 e6 04 0d 00 e7 0e 5b 20 4f 50 54 20 70 |.........[ OPT p| 00001be0 61 73 73 0d 00 e8 4a 20 20 20 20 20 20 20 20 4d |ass...J M| 00001bf0 4f 56 20 20 20 20 20 72 30 2c 20 23 36 20 20 20 |OV r0, #6 | 00001c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00001c10 20 45 76 65 72 79 74 68 69 6e 67 20 69 73 20 4f | Everything is O| 00001c20 4b 2c 20 73 6f 20 73 65 6e 64 20 61 6e 0d 00 e9 |K, so send an...| 00001c30 4c 20 20 20 20 20 20 20 20 41 44 52 20 20 20 20 |L ADR | 00001c40 20 72 31 2c 20 70 6f 6c 6c 62 6c 6f 63 6b 20 20 | r1, pollblock | 00001c50 20 20 20 20 20 20 20 20 20 3b 20 65 76 65 6e 74 | ; event| 00001c60 5f 43 4c 49 43 4b 20 74 6f 20 54 72 65 65 4d 65 |_CLICK to TreeMe| 00001c70 6e 75 2c 20 75 73 69 6e 67 0d 00 ea 4d 20 20 20 |nu, using...M | 00001c80 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 32 2c | LDR r2,| 00001c90 20 74 72 65 65 6d 65 6e 75 74 61 73 6b 68 61 6e | treemenutaskhan| 00001ca0 64 6c 65 20 20 3b 20 74 68 65 20 70 6f 69 6e 74 |dle ; the point| 00001cb0 65 72 20 69 6e 66 6f 20 66 6f 75 6e 64 20 65 61 |er info found ea| 00001cc0 72 6c 69 65 72 2e 0d 00 eb 27 20 20 20 20 20 20 |rlier....' | 00001cd0 20 20 53 57 49 20 20 20 20 20 22 58 57 69 6d 70 | SWI "XWimp| 00001ce0 5f 53 65 6e 64 4d 65 73 73 61 67 65 22 0d 00 ec |_SendMessage"...| 00001cf0 04 0d 00 ed 18 20 20 20 20 20 20 20 20 42 56 53 |..... BVS| 00001d00 20 20 20 20 20 71 75 69 74 0d 00 ee 04 0d 00 ef | quit.......| 00001d10 09 2e 71 75 69 74 0d 00 f0 3e 20 20 20 20 20 20 |..quit...> | 00001d20 20 20 4c 44 4d 46 44 20 20 20 72 31 33 21 2c 20 | LDMFD r13!, | 00001d30 7b 52 31 34 7d 20 20 20 20 20 20 20 20 20 20 20 |{R14} | 00001d40 20 20 3b 20 52 65 73 74 6f 72 65 20 72 31 34 5f | ; Restore r14_| 00001d50 73 76 63 2e 0d 00 f1 47 20 20 20 20 20 20 20 20 |svc....G | 00001d60 54 45 51 50 20 20 20 20 72 39 2c 20 23 30 20 20 |TEQP r9, #0 | 00001d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001d80 3b 20 53 77 69 74 63 68 20 62 61 63 6b 20 74 6f |; Switch back to| 00001d90 20 55 73 65 72 20 6d 6f 64 65 2e 0d 00 f2 1a 20 | User mode..... | 00001da0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00001db0 30 2c 20 72 30 0d 00 f3 04 0d 00 f4 4b 20 20 20 |0, r0.......K | 00001dc0 20 20 20 20 20 4c 44 4d 46 44 20 20 20 72 31 33 | LDMFD r13| 00001dd0 21 2c 20 7b 52 30 2d 52 31 32 2c 20 50 43 7d 20 |!, {R0-R12, PC} | 00001de0 20 20 20 20 20 3b 20 52 65 73 74 6f 72 65 20 72 | ; Restore r| 00001df0 65 67 69 73 74 65 72 73 20 61 6e 64 20 72 65 74 |egisters and ret| 00001e00 75 72 6e 2e 0d 00 f5 05 5d 0d 00 f6 05 cd 0d 00 |urn.....].......| 00001e10 f7 04 0d 00 f8 04 0d 00 f9 4e f4 20 2a 2a 2a 2a |.........N. ****| 00001e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00001e60 2a 2a 2a 2a 0d 00 fa 04 0d 00 fb 13 e7 20 66 69 |****......... fi| 00001e70 6c 65 72 5f 74 61 73 6b 20 8c 20 0d 00 fc 04 0d |ler_task . .....| 00001e80 00 fd 0e 5b 20 4f 50 54 20 70 61 73 73 0d 00 fe |...[ OPT pass...| 00001e90 04 0d 00 ff 2e 2e 66 69 6c 74 65 72 63 6f 64 65 |......filtercode| 00001ea0 20 20 20 20 20 3b 20 6c 6f 6f 6b 20 66 6f 72 20 | ; look for | 00001eb0 41 6c 74 2d 4d 65 6e 75 20 63 6c 69 63 6b 73 0d |Alt-Menu clicks.| 00001ec0 01 00 33 20 20 20 20 20 20 20 20 20 20 20 20 20 |..3 | 00001ed0 20 20 20 3b 20 70 6f 6c 6c 62 6c 6f 63 6b 20 69 | ; pollblock i| 00001ee0 73 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 |s pointed to by | 00001ef0 72 31 0d 01 01 04 0d 01 02 51 20 20 20 20 20 20 |r1.......Q | 00001f00 20 20 4c 44 52 20 20 20 20 20 72 32 2c 20 5b 52 | LDR r2, [R| 00001f10 31 2c 23 38 5d 20 20 20 20 20 20 20 20 20 20 20 |1,#8] | 00001f20 20 20 3b 20 45 76 65 6e 74 20 77 69 6c 6c 20 62 | ; Event will b| 00001f30 65 20 65 76 65 6e 74 5f 43 4c 49 43 4b 2c 20 73 |e event_CLICK, s| 00001f40 6f 20 6d 6f 75 73 65 0d 01 03 4c 20 20 20 20 20 |o mouse...L | 00001f50 20 20 20 54 53 54 20 20 20 20 20 72 32 2c 23 32 | TST r2,#2| 00001f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001f70 20 20 20 3b 20 62 75 74 74 6f 6e 20 69 6e 66 6f | ; button info| 00001f80 20 69 73 20 61 74 20 70 6f 6c 6c 62 6c 6f 63 6b | is at pollblock| 00001f90 21 38 2e 0d 01 04 47 20 20 20 20 20 20 20 20 ec |!8....G .| 00001fa0 51 20 20 20 50 43 2c 52 31 34 20 20 20 20 20 20 |Q PC,R14 | 00001fb0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 | ; Re| 00001fc0 74 75 72 6e 20 69 66 20 4d 65 6e 75 20 62 75 74 |turn if Menu but| 00001fd0 74 6f 6e 20 69 73 20 75 70 2e 0d 01 05 04 0d 01 |ton is up.......| 00001fe0 06 4e 20 20 20 20 20 20 20 20 53 54 4d 46 44 20 |.N STMFD | 00001ff0 20 20 72 31 33 21 2c 20 7b 52 30 2d 52 31 2c 52 | r13!, {R0-R1,R| 00002000 31 34 7d 20 20 20 20 20 20 20 3b 20 4f 6e 6c 79 |14} ; Only| 00002010 20 6e 65 65 64 20 74 6f 20 70 72 65 73 65 72 76 | need to preserv| 00002020 65 20 72 30 20 61 6e 64 20 72 31 20 0d 01 07 3b |e r0 and r1 ...;| 00002030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00002050 20 20 20 20 20 20 20 20 3b 20 66 6f 72 20 74 68 | ; for th| 00002060 65 20 70 6f 6c 6c 2e 0d 01 08 04 0d 01 09 4d 20 |e poll........M | 00002070 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 | MOV r| 00002080 30 2c 23 31 32 39 20 20 20 20 20 20 20 20 20 20 |0,#129 | 00002090 20 20 20 20 20 20 20 3b 20 54 65 73 74 20 66 6f | ; Test fo| 000020a0 72 20 61 6c 74 20 6b 65 79 20 75 73 69 6e 67 20 |r alt key using | 000020b0 4f 53 5f 42 79 74 65 2e 0d 01 0a 1b 20 20 20 20 |OS_Byte..... | 000020c0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 32 2c 23 | MOV r2,#| 000020d0 32 35 35 0d 01 0b 4c 20 20 20 20 20 20 20 20 4d |255...L M| 000020e0 4f 56 20 20 20 20 20 72 31 2c 23 6b 65 79 20 20 |OV r1,#key | 000020f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00002100 20 43 6f 64 65 20 66 6f 72 20 6b 65 79 20 74 6f | Code for key to| 00002110 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2e 0d | be tested for..| 00002120 01 0c 1d 20 20 20 20 20 20 20 20 53 57 49 20 20 |... SWI | 00002130 20 20 20 22 4f 53 5f 42 79 74 65 22 0d 01 0d 1d | "OS_Byte"....| 00002140 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 00002150 72 32 2c 20 23 32 35 35 3a 0d 01 0e 4b 20 20 20 |r2, #255:...K | 00002160 20 20 20 20 20 4c 44 4d 4e 45 46 44 20 72 31 33 | LDMNEFD r13| 00002170 21 2c 7b 52 30 2d 52 31 2c 50 43 7d 20 20 20 20 |!,{R0-R1,PC} | 00002180 20 20 20 20 20 3b 20 52 65 74 75 72 6e 20 69 66 | ; Return if| 00002190 20 61 6c 74 20 69 73 20 6e 6f 74 20 70 72 65 73 | alt is not pres| 000021a0 73 65 64 2e 0d 01 0f 04 0d 01 10 50 20 20 20 20 |sed........P | 000021b0 20 20 20 20 4c 44 4d 46 44 20 20 20 72 31 33 2c | LDMFD r13,| 000021c0 7b 52 30 2d 52 31 7d 20 20 20 20 20 20 20 20 20 |{R0-R1} | 000021d0 20 20 20 20 3b 20 52 65 2d 6c 6f 61 64 20 6d 65 | ; Re-load me| 000021e0 73 73 61 67 65 20 62 6c 6f 63 6b 20 69 6e 74 65 |ssage block inte| 000021f0 6e 64 65 64 20 66 6f 72 0d 01 11 37 20 20 20 20 |nded for...7 | 00002200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00002220 20 20 20 20 3b 20 46 69 6c 65 72 20 2e 2e 2e 0d | ; Filer ....| 00002230 01 12 4c 20 20 20 20 20 20 20 20 4c 44 52 20 20 |..L LDR | 00002240 20 20 20 72 32 2c 20 74 72 65 65 6d 65 6e 75 74 | r2, treemenut| 00002250 61 73 6b 68 61 6e 64 6c 65 20 20 3b 20 2e 2e 2e |askhandle ; ...| 00002260 61 6e 64 20 73 65 6e 64 20 69 74 20 73 74 72 61 |and send it stra| 00002270 69 67 68 74 20 6f 6e 20 74 6f 20 0d 01 13 37 20 |ight on to ...7 | 00002280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 000022a0 20 20 20 20 20 20 20 3b 20 54 72 65 65 4d 65 6e | ; TreeMen| 000022b0 75 2e 0d 01 14 26 20 20 20 20 20 20 20 20 53 57 |u....& SW| 000022c0 49 20 20 20 20 20 22 57 69 6d 70 5f 53 65 6e 64 |I "Wimp_Send| 000022d0 4d 65 73 73 61 67 65 22 0d 01 15 04 0d 01 16 4b |Message".......K| 000022e0 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 000022f0 72 31 33 21 2c 7b 52 30 2d 52 31 7d 20 20 20 20 |r13!,{R0-R1} | 00002300 20 20 20 20 20 20 20 20 3b 20 52 65 2d 6c 6f 61 | ; Re-loa| 00002310 64 20 6d 65 73 73 61 67 65 20 62 6c 6f 63 6b 20 |d message block | 00002320 69 6e 20 63 61 73 65 0d 01 17 46 20 20 20 20 20 |in case...F | 00002330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00002350 20 20 20 3b 20 53 65 6e 64 4d 65 73 73 61 67 65 | ; SendMessage| 00002360 20 63 6f 72 72 75 70 74 73 20 69 74 2e 0d 01 18 | corrupts it....| 00002370 48 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 |H MOV | 00002380 20 72 30 2c 20 23 30 20 20 20 20 20 20 20 20 20 | r0, #0 | 00002390 20 20 20 20 20 20 20 20 20 3b 20 43 68 61 6e 67 | ; Chang| 000023a0 65 20 69 74 20 74 6f 20 61 20 4e 75 6c 6c 20 65 |e it to a Null e| 000023b0 76 65 6e 74 2c 0d 01 19 48 20 20 20 20 20 20 20 |vent,...H | 000023c0 20 4c 44 4d 46 44 20 20 20 72 31 33 21 2c 7b 50 | LDMFD r13!,{P| 000023d0 43 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |C} | 000023e0 20 3b 20 61 6e 64 20 70 61 73 73 20 69 74 20 6f | ; and pass it o| 000023f0 6e 20 74 6f 20 46 69 6c 65 72 2e 2e 2e 0d 01 1a |n to Filer......| 00002400 04 0d 01 1b 05 5d 0d 01 1c 05 cd 0d 01 1d 04 0d |.....]..........| 00002410 01 1e 04 0d 01 1f 4e f4 20 2a 2a 2a 2a 2a 2a 2a |......N. *******| 00002420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00002460 2a 0d 01 20 04 0d 01 21 0b ed 20 70 61 73 73 30 |*.. ...!.. pass0| 00002470 0d 01 22 04 0d 01 23 25 f4 20 49 6e 73 74 61 6c |.."...#%. Instal| 00002480 6c 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6e 20 |l the module in | 00002490 52 4d 41 20 61 72 65 61 2e 0d 01 24 25 c8 99 20 |RMA area...$%.. | 000024a0 22 4f 53 5f 4d 6f 64 75 6c 65 22 2c 20 31 31 2c |"OS_Module", 11,| 000024b0 20 63 6f 64 65 73 70 61 63 65 2c 20 50 25 0d 01 | codespace, P%..| 000024c0 25 04 0d 01 26 05 e0 0d 01 27 04 0d 01 28 04 0d |%...&....'...(..| 000024d0 01 29 04 0d 01 2a 22 dd 20 a4 46 69 6e 64 54 61 |.)...*". .FindTa| 000024e0 73 6b 48 61 6e 64 6c 65 28 20 74 61 73 6b 5f 6e |skHandle( task_n| 000024f0 61 6d 65 24 29 0d 01 2b 24 20 20 ea 20 62 75 66 |ame$)..+$ . buf| 00002500 66 5f 6c 65 6e 2c 20 62 75 66 66 65 72 2c 20 72 |f_len, buffer, r| 00002510 30 2c 20 72 31 2c 20 72 32 0d 01 2c 25 62 75 66 |0, r1, r2..,%buf| 00002520 66 5f 6c 65 6e 20 3d 20 32 35 36 3a 20 de 20 62 |f_len = 256: . b| 00002530 75 66 66 65 72 20 62 75 66 66 5f 6c 65 6e 0d 01 |uffer buff_len..| 00002540 2d 0a 72 30 20 3d 20 30 0d 01 2e 05 f5 0d 01 2f |-.r0 = 0......./| 00002550 1a 20 20 72 31 20 3d 20 62 75 66 66 65 72 3a 20 |. r1 = buffer: | 00002560 72 32 20 3d 20 31 36 0d 01 30 36 20 20 c8 99 20 |r2 = 16..06 .. | 00002570 22 54 61 73 6b 4d 61 6e 61 67 65 72 5f 45 6e 75 |"TaskManager_Enu| 00002580 6d 65 72 61 74 65 54 61 73 6b 73 22 2c 20 72 30 |merateTasks", r0| 00002590 2c 20 72 31 2c 20 72 32 20 b8 20 72 30 0d 01 31 |, r1, r2 . r0..1| 000025a0 12 20 20 e7 20 72 30 3d 2d 31 20 20 3d 20 30 0d |. . r0=-1 = 0.| 000025b0 01 32 2b 20 20 fd 20 a4 73 74 72 69 6e 67 28 20 |.2+ . .string( | 000025c0 62 75 66 66 65 72 21 34 2c 20 33 32 29 20 3d 20 |buffer!4, 32) = | 000025d0 74 61 73 6b 5f 6e 61 6d 65 24 0d 01 33 0c 3d 21 |task_name$..3.=!| 000025e0 62 75 66 66 65 72 0d 01 34 04 0d 01 35 04 0d 01 |buffer..4...5...| 000025f0 36 14 dd 20 a4 73 74 72 69 6e 67 28 20 78 2c 20 |6.. .string( x, | 00002600 6e 29 0d 01 37 0f 20 20 ea 20 69 2c 63 2c 20 61 |n)..7. . i,c, a| 00002610 24 0d 01 38 0d e3 20 69 3d 30 20 b8 20 6e 0d 01 |$..8.. i=0 . n..| 00002620 39 10 20 20 63 20 3d 20 3f 28 78 2b 69 29 0d 01 |9. c = ?(x+i)..| 00002630 3a 11 20 20 e7 20 63 3d 30 20 8c 20 3d 61 24 0d |:. . c=0 . =a$.| 00002640 01 3b 14 20 20 61 24 20 3d 20 61 24 20 2b 20 bd |.;. a$ = a$ + .| 00002650 28 63 29 0d 01 3c 07 20 20 ed 0d 01 3d 07 3d 61 |(c)..<. ...=.=a| 00002660 24 0d ff |$..| 00002663