Home » Archimedes archive » Acorn User » AU 1996-08.adf » Regulars » StarInfo/Kemp/TaskEnsure/TaskEnsSrc
StarInfo/Kemp/TaskEnsure/TaskEnsSrc
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 1996-08.adf » Regulars |
Filename: | StarInfo/Kemp/TaskEnsure/TaskEnsSrc |
Read OK: | ✔ |
File size: | 2366 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
1REM -------------------------------------------------------------------------- 2REM 3REM TaskEnsure (source) 4REM 5REM Task name equivalent of 'RMEnsure' 6REM 7REM by KCE Software (Andrew Kemp) 8REM 9REM LEN March 1996 10REM 11REM -------------------------------------------------------------------------- 12 13ON ERROR VDU 7:PRINT REPORT$;" at line ";STR$(ERL):END 14 15REM -------------------------------------------------------------------------- 16REM Define some handy constants 17REM -------------------------------------------------------------------------- 18 19arm_V = 1<<28 20workspace_size = 1024 21os_file_save = 10 22file$ = "%.TaskEnsure" 23filetype_utility = &ffc 24 25REM -------------------------------------------------------------------------- 26REM Define register name aliases 27REM -------------------------------------------------------------------------- 28 29workspace_pointer = 12 30link = 14 31pc = 15 32 33REM -------------------------------------------------------------------------- 34REM Build the utility 35REM -------------------------------------------------------------------------- 36 37DIM code% 500 38PROCassemble 39SYS "OS_File", os_file_save, file$, filetype_utility,, code%, O% 40END 41 42: 43 44REM -------------------------------------------------------------------------- 45REM Assemble utility code 46REM -------------------------------------------------------------------------- 47 48DEF PROCassemble 49LOCAL pass% 50FOR pass%=4 TO 6 STEP 2 51P%=0: O%=code% 52 53[ OPT pass% 54 55; ---------------------------------------------------------------------------- 56; Code is entered here 57; 58; r1 = pointer to command line tail 59; r12 = address of 1024 bytes of workspace 60; ---------------------------------------------------------------------------- 61 62 LDRB r0, [r1] 63 CMP r0, #ASC("""") ; if command tail begins with '"', 64 BEQ quoted_taskname ; the task name is in quotes 65 66; ---------------------------------------------------------------------------- 67; r1 points to the start of a single word task name (or the end of the 68; command tail if there were no parameters given) 69; 70; Terminate this name with a zero byte, and point r2 to the next 71; character 72; ---------------------------------------------------------------------------- 73 74 MOV r2, r1 75.taskname_loop 76 LDRB r0, [r2], #1 ; find the space after the task name 77 CMP r0, #ASC(" ") 78 BLT syntax_error ; error if command line ends too early 79 BNE taskname_loop 80 81.taskname_skipped 82 MOV r0, #0 83 STRB r0, [r2, #-1] ; terminate task name with zero byte 84 ; r1 points to task name 85 ; r2 points to rest of command line tail 86 87; ---------------------------------------------------------------------------- 88; Now r2 points to the first space after the task name (or possibly the 89; end of the command line if the second parameter is missing) 90; 91; Skip over the spaces so that r2 points to the start of the second 92; parameter 93; ---------------------------------------------------------------------------- 94 95.space_loop 96 LDRB r0, [r2], #1 97 CMP r0, #ASC(" ") 98 BLT syntax_error ; error if second parameter missing 99 BEQ space_loop 100 101 SUB r4, r2, #1 ; r4 points to output command 102 103; ---------------------------------------------------------------------------- 104; At this point, r1 points to a zero terminated task name 105; r4 points to a ctrl-char terminated *command 106; ---------------------------------------------------------------------------- 107 108 MOV r3, r1 ; now r3 points to task name 109 110 MOV r0, #0 ; zero => first call 111.read_task_blocks 112 MOV r1, workspace_pointer 113 MOV r2, #workspace_size 114 SWI "XTaskManager_EnumerateTasks" 115 MOVVS pc, link ; pass on any returned error to the user 116 117 MOV r5, workspace_pointer ; points to start of task info blocks 118 119; ---------------------------------------------------------------------------- 120; Here r5 points to the start of a sequence of 16 byte task description 121; blocks - work through these, looking for our task 122; ---------------------------------------------------------------------------- 123 124.check_task_blocks 125 CMP r5, r1 ; have we checked last of these blocks? 126 BHS checked_task_blocks 127 LDR r6, [r5, #4] ; r6 points to task name returned 128 MOV r7, #0 ; r7 = an offset into the strings 129.compare_task_name 130 LDRB r8, [r3, r7] 131 LDRB r2, [r6, r7] 132 CMP r2, #ASC(" ") ; have we reached end of returned name? 133 MOVLT r2, #0 134 135 CMP r8, r2 136 ADDNE r5, r5, #16 ; OK, so that task wasn't right 137 BNE check_task_blocks ; - try the next 138 139 ; the strings match so far - but have we reached the end? 140 141 CMP r2, #0 142 MOVEQS pc, link ; if we have a match, end here 143 ADD r7, r7, #1 ; increment string offset 144 B compare_task_name ; check next character 145 146; ---------------------------------------------------------------------------- 147; Here we have worked through a complete set of returned task 148; description blocks - check to see if TaskManager_EnumerateTasks has 149; any more to give us; otherwise execute the command supplied 150; ---------------------------------------------------------------------------- 151 152.checked_task_blocks 153 CMN r0, #1 ; are the any more blocks to be read? 154 BNE read_task_blocks 155 156; ---------------------------------------------------------------------------- 157; At this point, our task is definitely _not_ running 158; ---------------------------------------------------------------------------- 159 160 MOV r0, r4 ; r0 points to *command 161 SWI "XOS_CLI" 162 MOV pc, link ; return, passing on any returned 163 ; errors to the user 164 165; ---------------------------------------------------------------------------- 166; Task name began with a '"', so we will assume it is being given in 167; double quotes 168; 169; Find the closing '"' (if it exists) and then return to the standard 170; command line processing code (otherwise return an error) 171; ---------------------------------------------------------------------------- 172 173.quoted_taskname 174 ADD r1, r1, #1 ; task name starts after the '"' 175 MOV r2, r1 176.quoted_taskname_loop 177 LDRB r0, [r2], #1 178 CMP r0, #ASC(" ") 179 BLT bad_string ; error if no closing '"' 180 CMP r0, #ASC("""") 181 BNE quoted_taskname_loop 182 B taskname_skipped 183 184; ---------------------------------------------------------------------------- 185; An error has occured - at least one of our parameters is missing 186; 187; Blame everything on the user with a syntax error message 188; ---------------------------------------------------------------------------- 189 190.syntax_error_block 191 DCD 0 192 = "Syntax: *TaskEnsure <task name> <*command>" + CHR$(0) 193 ALIGN 194 195.syntax_error 196 ADR r0, syntax_error_block 197 ORRS pc, link, #arm_V 198 199; ---------------------------------------------------------------------------- 200; An error has occured - the task name began with a '"', but there is 201; no terminating '"' 202; 203; Blame everything on the user with a 'Bad string' message 204; ---------------------------------------------------------------------------- 205 206.bad_string_error_block 207 DCD 253 208 = "Bad string" + CHR$(0) 209 ALIGN 210 211.bad_string 212 ADR r0, bad_string_error_block 213 ORRS pc, link, #arm_V 214 215; ---------------------------------------------------------------------------- 216; Version number and gratuitous author credit 217; ---------------------------------------------------------------------------- 218 219 = "0.01 (02 Mar 1996) � Andrew Kemp" 220 221] 222NEXT pass% 223ENDPROC
P� -------------------------------------------------------------------------- � � TaskEnsure (source) � ,� Task name equivalent of 'RMEnsure' � '� by KCE Software (Andrew Kemp) � � � March 1996 � P� -------------------------------------------------------------------------- #� � � 7:� �$;" at line ";�(�):� P� -------------------------------------------------------------------------- %� Define some handy constants P� -------------------------------------------------------------------------- #arm_V = 1<<28 "workspace_size = 1024 os_file_save = 10 ,file$ = "%.TaskEnsure" "filetype_utility = &ffc P� -------------------------------------------------------------------------- &� Define register name aliases P� -------------------------------------------------------------------------- workspace_pointer = 12 link = 14 pc = 15 !P� -------------------------------------------------------------------------- "� Build the utility #P� -------------------------------------------------------------------------- $ %� code% 500 & �assemble 'Cș "OS_File", os_file_save, file$, filetype_utility,, code%, O% (� ) *: + ,P� -------------------------------------------------------------------------- -� Assemble utility code .P� -------------------------------------------------------------------------- / 0� �assemble 1� pass% 2� pass%=4 � 6 � 2 3P%=0: O%=code% 4 5[ OPT pass% 6 7R; ---------------------------------------------------------------------------- 8 ; Code is entered here 9; :.; r1 = pointer to command line tail ;4; r12 = address of 1024 bytes of workspace <R; ---------------------------------------------------------------------------- = > LDRB r0, [r1] ?L CMP r0, #�("""") ; if command tail begins with '"', @H BEQ quoted_taskname ; the task name is in quotes A BR; ---------------------------------------------------------------------------- CP; r1 points to the start of a single word task name (or the end of the D;; command tail if there were no parameters given) E; FJ; Terminate this name with a zero byte, and point r2 to the next G; character HR; ---------------------------------------------------------------------------- I J MOV r2, r1 K.taskname_loop LP LDRB r0, [r2], #1 ; find the space after the task name M CMP r0, #�(" ") NR BLT syntax_error ; error if command line ends too early O! BNE taskname_loop P Q.taskname_skipped R MOV r0, #0 SP STRB r0, [r2, #-1] ; terminate task name with zero byte TD ; r1 points to task name UT ; r2 points to rest of command line tail V WR; ---------------------------------------------------------------------------- XQ; Now r2 points to the first space after the task name (or possibly the YG; end of the command line if the second parameter is missing) Z; [M; Skip over the spaces so that r2 points to the start of the second \; parameter ]R; ---------------------------------------------------------------------------- ^ _.space_loop ` LDRB r0, [r2], #1 a CMP r0, #�(" ") bO BLT syntax_error ; error if second parameter missing c BEQ space_loop d eI SUB r4, r2, #1 ; r4 points to output command f gR; ---------------------------------------------------------------------------- hC; At this point, r1 points to a zero terminated task name iG; r4 points to a ctrl-char terminated *command jR; ---------------------------------------------------------------------------- k lH MOV r3, r1 ; now r3 points to task name m n@ MOV r0, #0 ; zero => first call o.read_task_blocks p) MOV r1, workspace_pointer q' MOV r2, #workspace_size r1 SWI "XTaskManager_EnumerateTasks" sT MOVVS pc, link ; pass on any returned error to the user t uQ MOV r5, workspace_pointer ; points to start of task info blocks v wR; ---------------------------------------------------------------------------- xQ; Here r5 points to the start of a sequence of 16 byte task description y=; blocks - work through these, looking for our task zR; ---------------------------------------------------------------------------- { |.check_task_blocks }S CMP r5, r1 ; have we checked last of these blocks? ~' BHS checked_task_blocks M LDR r6, [r5, #4] ; r6 points to task name returned �M MOV r7, #0 ; r7 = an offset into the strings �.compare_task_name � LDRB r8, [r3, r7] � LDRB r2, [r6, r7] �Q CMP r2, #�(" ") ; have we reached end of returned name? � MOVLT r2, #0 � � CMP r8, r2 �K ADDNE r5, r5, #16 ; OK, so that task wasn't right �< BNE check_task_blocks ; - try the next � �E ; the strings match so far - but have we reached the end? � � CMP r2, #0 �G �QS pc, link ; if we have a match, end here �E ADD r7, r7, #1 ; increment string offset �B B compare_task_name ; check next character � �R; ---------------------------------------------------------------------------- �G; Here we have worked through a complete set of returned task �O; description blocks - check to see if TaskManager_EnumerateTasks has �G; any more to give us; otherwise execute the command supplied �R; ---------------------------------------------------------------------------- � �.checked_task_blocks �Q CMN r0, #1 ; are the any more blocks to be read? �$ BNE read_task_blocks � �R; ---------------------------------------------------------------------------- �?; At this point, our task is definitely _not_ running �R; ---------------------------------------------------------------------------- � �C MOV r0, r4 ; r0 points to *command � SWI "XOS_CLI" �M MOV pc, link ; return, passing on any returned �@ ; errors to the user � �R; ---------------------------------------------------------------------------- �N; Task name began with a '"', so we will assume it is being given in �; double quotes �; �O; Find the closing '"' (if it exists) and then return to the standard �D; command line processing code (otherwise return an error) �R; ---------------------------------------------------------------------------- � �.quoted_taskname �L ADD r1, r1, #1 ; task name starts after the '"' � MOV r2, r1 �.quoted_taskname_loop � LDRB r0, [r2], #1 � CMP r0, #�(" ") �E BLT bad_string ; error if no closing '"' � CMP r0, #�("""") �( BNE quoted_taskname_loop �$ B taskname_skipped � �R; ---------------------------------------------------------------------------- �L; An error has occured - at least one of our parameters is missing �; �D; Blame everything on the user with a syntax error message �R; ---------------------------------------------------------------------------- � �.syntax_error_block � DCD 0 �G = "Syntax: *TaskEnsure <task name> <*command>" + �(0) � ALIGN � �.syntax_error �* ADR r0, syntax_error_block �# �RS pc, link, #arm_V � �R; ---------------------------------------------------------------------------- �O; An error has occured - the task name began with a '"', but there is �; no terminating '"' �; �D; Blame everything on the user with a 'Bad string' message �R; ---------------------------------------------------------------------------- � �.bad_string_error_block � DCD 253 �' = "Bad string" + �(0) � ALIGN � �.bad_string �. ADR r0, bad_string_error_block �# �RS pc, link, #arm_V � �R; ---------------------------------------------------------------------------- �7; Version number and gratuitous author credit �R; ---------------------------------------------------------------------------- � �6 = "0.01 (02 Mar 1996) � Andrew Kemp" � �] �� pass% �� �
00000000 0d 00 01 50 f4 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |...P. ----------| 00000010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000050 0d 00 02 05 f4 0d 00 03 1d f4 20 20 20 20 20 54 |.......... T| 00000060 61 73 6b 45 6e 73 75 72 65 20 28 73 6f 75 72 63 |askEnsure (sourc| 00000070 65 29 0d 00 04 05 f4 0d 00 05 2c f4 20 20 20 20 |e)........,. | 00000080 20 54 61 73 6b 20 6e 61 6d 65 20 65 71 75 69 76 | Task name equiv| 00000090 61 6c 65 6e 74 20 6f 66 20 27 52 4d 45 6e 73 75 |alent of 'RMEnsu| 000000a0 72 65 27 0d 00 06 05 f4 0d 00 07 27 f4 20 20 20 |re'........'. | 000000b0 20 20 62 79 20 4b 43 45 20 53 6f 66 74 77 61 72 | by KCE Softwar| 000000c0 65 20 28 41 6e 64 72 65 77 20 4b 65 6d 70 29 0d |e (Andrew Kemp).| 000000d0 00 08 05 f4 0d 00 09 16 f4 20 20 20 20 20 a9 20 |......... . | 000000e0 4d 61 72 63 68 20 31 39 39 36 0d 00 0a 05 f4 0d |March 1996......| 000000f0 00 0b 50 f4 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..P. -----------| 00000100 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d |---------------.| 00000140 00 0c 04 0d 00 0d 23 ee 20 85 20 ef 20 37 3a f1 |......#. . . 7:.| 00000150 20 f6 24 3b 22 20 61 74 20 6c 69 6e 65 20 22 3b | .$;" at line ";| 00000160 c3 28 9e 29 3a e0 0d 00 0e 04 0d 00 0f 50 f4 20 |.(.):........P. | 00000170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000001b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 10 25 f4 20 |----------...%. | 000001c0 20 20 20 20 44 65 66 69 6e 65 20 73 6f 6d 65 20 | Define some | 000001d0 68 61 6e 64 79 20 63 6f 6e 73 74 61 6e 74 73 0d |handy constants.| 000001e0 00 11 50 f4 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..P. -----------| 000001f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d |---------------.| 00000230 00 12 04 0d 00 13 23 61 72 6d 5f 56 20 20 20 20 |......#arm_V | 00000240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d | =| 00000250 20 31 3c 3c 32 38 0d 00 14 22 77 6f 72 6b 73 70 | 1<<28..."worksp| 00000260 61 63 65 5f 73 69 7a 65 20 20 20 20 20 20 20 20 |ace_size | 00000270 20 20 3d 20 31 30 32 34 0d 00 15 20 6f 73 5f 66 | = 1024... os_f| 00000280 69 6c 65 5f 73 61 76 65 20 20 20 20 20 20 20 20 |ile_save | 00000290 20 20 20 20 3d 20 31 30 0d 00 16 2c 66 69 6c 65 | = 10...,file| 000002a0 24 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |$ | 000002b0 20 20 20 20 3d 20 22 25 2e 54 61 73 6b 45 6e 73 | = "%.TaskEns| 000002c0 75 72 65 22 0d 00 17 22 66 69 6c 65 74 79 70 65 |ure"..."filetype| 000002d0 5f 75 74 69 6c 69 74 79 20 20 20 20 20 20 20 20 |_utility | 000002e0 3d 20 26 66 66 63 0d 00 18 04 0d 00 19 50 f4 20 |= &ffc.......P. | 000002f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000330 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 1a 26 f4 20 |----------...&. | 00000340 20 20 20 20 44 65 66 69 6e 65 20 72 65 67 69 73 | Define regis| 00000350 74 65 72 20 6e 61 6d 65 20 61 6c 69 61 73 65 73 |ter name aliases| 00000360 0d 00 1b 50 f4 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |...P. ----------| 00000370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000003b0 0d 00 1c 04 0d 00 1d 20 77 6f 72 6b 73 70 61 63 |....... workspac| 000003c0 65 5f 70 6f 69 6e 74 65 72 20 20 20 20 20 20 20 |e_pointer | 000003d0 3d 20 31 32 0d 00 1e 20 6c 69 6e 6b 20 20 20 20 |= 12... link | 000003e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000003f0 3d 20 31 34 0d 00 1f 20 70 63 20 20 20 20 20 20 |= 14... pc | 00000400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000410 3d 20 31 35 0d 00 20 04 0d 00 21 50 f4 20 2d 2d |= 15.. ...!P. --| 00000420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000460 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 22 1b f4 20 20 20 |--------..".. | 00000470 20 20 42 75 69 6c 64 20 74 68 65 20 75 74 69 6c | Build the util| 00000480 69 74 79 0d 00 23 50 f4 20 2d 2d 2d 2d 2d 2d 2d |ity..#P. -------| 00000490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000004d0 2d 2d 2d 0d 00 24 04 0d 00 25 0f de 20 63 6f 64 |---..$...%.. cod| 000004e0 65 25 20 35 30 30 0d 00 26 0d f2 61 73 73 65 6d |e% 500..&..assem| 000004f0 62 6c 65 0d 00 27 43 c8 99 20 22 4f 53 5f 46 69 |ble..'C.. "OS_Fi| 00000500 6c 65 22 2c 20 6f 73 5f 66 69 6c 65 5f 73 61 76 |le", os_file_sav| 00000510 65 2c 20 66 69 6c 65 24 2c 20 66 69 6c 65 74 79 |e, file$, filety| 00000520 70 65 5f 75 74 69 6c 69 74 79 2c 2c 20 63 6f 64 |pe_utility,, cod| 00000530 65 25 2c 20 4f 25 0d 00 28 05 e0 0d 00 29 04 0d |e%, O%..(....)..| 00000540 00 2a 05 3a 0d 00 2b 04 0d 00 2c 50 f4 20 2d 2d |.*.:..+...,P. --| 00000550 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000590 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 2d 1f f4 20 20 20 |--------..-.. | 000005a0 20 20 41 73 73 65 6d 62 6c 65 20 75 74 69 6c 69 | Assemble utili| 000005b0 74 79 20 63 6f 64 65 0d 00 2e 50 f4 20 2d 2d 2d |ty code...P. ---| 000005c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000600 2d 2d 2d 2d 2d 2d 2d 0d 00 2f 04 0d 00 30 0f dd |-------../...0..| 00000610 20 f2 61 73 73 65 6d 62 6c 65 0d 00 31 0b ea 20 | .assemble..1.. | 00000620 70 61 73 73 25 0d 00 32 15 e3 20 70 61 73 73 25 |pass%..2.. pass%| 00000630 3d 34 20 b8 20 36 20 88 20 32 0d 00 33 12 50 25 |=4 . 6 . 2..3.P%| 00000640 3d 30 3a 20 4f 25 3d 63 6f 64 65 25 0d 00 34 04 |=0: O%=code%..4.| 00000650 0d 00 35 15 5b 20 20 20 20 20 20 20 4f 50 54 20 |..5.[ OPT | 00000660 70 61 73 73 25 0d 00 36 04 0d 00 37 52 3b 20 2d |pass%..6...7R; -| 00000670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000006b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 38 20 3b |-----------..8 ;| 000006c0 20 20 20 20 20 20 20 43 6f 64 65 20 69 73 20 65 | Code is e| 000006d0 6e 74 65 72 65 64 20 68 65 72 65 0d 00 39 05 3b |ntered here..9.;| 000006e0 0d 00 3a 2e 3b 20 20 20 20 20 20 20 72 31 20 20 |..:.; r1 | 000006f0 3d 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d |= pointer to com| 00000700 6d 61 6e 64 20 6c 69 6e 65 20 74 61 69 6c 0d 00 |mand line tail..| 00000710 3b 34 3b 20 20 20 20 20 20 20 72 31 32 20 3d 20 |;4; r12 = | 00000720 61 64 64 72 65 73 73 20 6f 66 20 31 30 32 34 20 |address of 1024 | 00000730 62 79 74 65 73 20 6f 66 20 77 6f 72 6b 73 70 61 |bytes of workspa| 00000740 63 65 0d 00 3c 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d |ce..<R; --------| 00000750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000790 2d 2d 2d 2d 0d 00 3d 04 0d 00 3e 1c 20 20 20 20 |----..=...>. | 000007a0 20 20 20 20 4c 44 52 42 20 20 20 20 72 30 2c 20 | LDRB r0, | 000007b0 5b 72 31 5d 0d 00 3f 4c 20 20 20 20 20 20 20 20 |[r1]..?L | 000007c0 43 4d 50 20 20 20 20 20 72 30 2c 20 23 97 28 22 |CMP r0, #.("| 000007d0 22 22 22 29 20 20 20 20 20 20 20 20 20 20 3b 20 |""") ; | 000007e0 69 66 20 63 6f 6d 6d 61 6e 64 20 74 61 69 6c 20 |if command tail | 000007f0 62 65 67 69 6e 73 20 77 69 74 68 20 27 22 27 2c |begins with '"',| 00000800 0d 00 40 48 20 20 20 20 20 20 20 20 42 45 51 20 |..@H BEQ | 00000810 20 20 20 20 71 75 6f 74 65 64 5f 74 61 73 6b 6e | quoted_taskn| 00000820 61 6d 65 20 20 20 20 20 20 20 20 20 3b 20 74 68 |ame ; th| 00000830 65 20 74 61 73 6b 20 6e 61 6d 65 20 69 73 20 69 |e task name is i| 00000840 6e 20 71 75 6f 74 65 73 0d 00 41 04 0d 00 42 52 |n quotes..A...BR| 00000850 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |; --------------| 00000860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000890 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 |--------------..| 000008a0 43 50 3b 20 20 20 20 20 20 20 72 31 20 70 6f 69 |CP; r1 poi| 000008b0 6e 74 73 20 74 6f 20 74 68 65 20 73 74 61 72 74 |nts to the start| 000008c0 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 77 6f 72 | of a single wor| 000008d0 64 20 74 61 73 6b 20 6e 61 6d 65 20 28 6f 72 20 |d task name (or | 000008e0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0d 00 |the end of the..| 000008f0 44 3b 3b 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e |D;; comman| 00000900 64 20 74 61 69 6c 20 69 66 20 74 68 65 72 65 20 |d tail if there | 00000910 77 65 72 65 20 6e 6f 20 70 61 72 61 6d 65 74 65 |were no paramete| 00000920 72 73 20 67 69 76 65 6e 29 0d 00 45 05 3b 0d 00 |rs given)..E.;..| 00000930 46 4a 3b 20 20 20 20 20 20 20 54 65 72 6d 69 6e |FJ; Termin| 00000940 61 74 65 20 74 68 69 73 20 6e 61 6d 65 20 77 69 |ate this name wi| 00000950 74 68 20 61 20 7a 65 72 6f 20 62 79 74 65 2c 20 |th a zero byte, | 00000960 61 6e 64 20 70 6f 69 6e 74 20 72 32 20 74 6f 20 |and point r2 to | 00000970 74 68 65 20 6e 65 78 74 0d 00 47 15 3b 20 20 20 |the next..G.; | 00000980 20 20 20 20 63 68 61 72 61 63 74 65 72 0d 00 48 | character..H| 00000990 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |R; -------------| 000009a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000009d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d |---------------.| 000009e0 00 49 04 0d 00 4a 1a 20 20 20 20 20 20 20 20 4d |.I...J. M| 000009f0 4f 56 20 20 20 20 20 72 32 2c 20 72 31 0d 00 4b |OV r2, r1..K| 00000a00 12 2e 74 61 73 6b 6e 61 6d 65 5f 6c 6f 6f 70 0d |..taskname_loop.| 00000a10 00 4c 50 20 20 20 20 20 20 20 20 4c 44 52 42 20 |.LP LDRB | 00000a20 20 20 20 72 30 2c 20 5b 72 32 5d 2c 20 23 31 20 | r0, [r2], #1 | 00000a30 20 20 20 20 20 20 20 20 20 20 20 3b 20 66 69 6e | ; fin| 00000a40 64 20 74 68 65 20 73 70 61 63 65 20 61 66 74 65 |d the space afte| 00000a50 72 20 74 68 65 20 74 61 73 6b 20 6e 61 6d 65 0d |r the task name.| 00000a60 00 4d 1f 20 20 20 20 20 20 20 20 43 4d 50 20 20 |.M. CMP | 00000a70 20 20 20 72 30 2c 20 23 97 28 22 20 22 29 0d 00 | r0, #.(" ")..| 00000a80 4e 52 20 20 20 20 20 20 20 20 42 4c 54 20 20 20 |NR BLT | 00000a90 20 20 73 79 6e 74 61 78 5f 65 72 72 6f 72 20 20 | syntax_error | 00000aa0 20 20 20 20 20 20 20 20 20 20 3b 20 65 72 72 6f | ; erro| 00000ab0 72 20 69 66 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e |r if command lin| 00000ac0 65 20 65 6e 64 73 20 74 6f 6f 20 65 61 72 6c 79 |e ends too early| 00000ad0 0d 00 4f 21 20 20 20 20 20 20 20 20 42 4e 45 20 |..O! BNE | 00000ae0 20 20 20 20 74 61 73 6b 6e 61 6d 65 5f 6c 6f 6f | taskname_loo| 00000af0 70 0d 00 50 04 0d 00 51 15 2e 74 61 73 6b 6e 61 |p..P...Q..taskna| 00000b00 6d 65 5f 73 6b 69 70 70 65 64 0d 00 52 1a 20 20 |me_skipped..R. | 00000b10 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 72 30 | MOV r0| 00000b20 2c 20 23 30 0d 00 53 50 20 20 20 20 20 20 20 20 |, #0..SP | 00000b30 53 54 52 42 20 20 20 20 72 30 2c 20 5b 72 32 2c |STRB r0, [r2,| 00000b40 20 23 2d 31 5d 20 20 20 20 20 20 20 20 20 20 20 | #-1] | 00000b50 3b 20 74 65 72 6d 69 6e 61 74 65 20 74 61 73 6b |; terminate task| 00000b60 20 6e 61 6d 65 20 77 69 74 68 20 7a 65 72 6f 20 | name with zero | 00000b70 62 79 74 65 0d 00 54 44 20 20 20 20 20 20 20 20 |byte..TD | 00000b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00000ba0 3b 20 72 31 20 70 6f 69 6e 74 73 20 74 6f 20 74 |; r1 points to t| 00000bb0 61 73 6b 20 6e 61 6d 65 0d 00 55 54 20 20 20 20 |ask name..UT | 00000bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00000be0 20 20 20 20 3b 20 72 32 20 70 6f 69 6e 74 73 20 | ; r2 points | 00000bf0 74 6f 20 72 65 73 74 20 6f 66 20 63 6f 6d 6d 61 |to rest of comma| 00000c00 6e 64 20 6c 69 6e 65 20 74 61 69 6c 0d 00 56 04 |nd line tail..V.| 00000c10 0d 00 57 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..WR; ----------| 00000c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000c60 2d 2d 0d 00 58 51 3b 20 20 20 20 20 20 20 4e 6f |--..XQ; No| 00000c70 77 20 72 32 20 70 6f 69 6e 74 73 20 74 6f 20 74 |w r2 points to t| 00000c80 68 65 20 66 69 72 73 74 20 73 70 61 63 65 20 61 |he first space a| 00000c90 66 74 65 72 20 74 68 65 20 74 61 73 6b 20 6e 61 |fter the task na| 00000ca0 6d 65 20 28 6f 72 20 70 6f 73 73 69 62 6c 79 20 |me (or possibly | 00000cb0 74 68 65 0d 00 59 47 3b 20 20 20 20 20 20 20 65 |the..YG; e| 00000cc0 6e 64 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e |nd of the comman| 00000cd0 64 20 6c 69 6e 65 20 69 66 20 74 68 65 20 73 65 |d line if the se| 00000ce0 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 69 |cond parameter i| 00000cf0 73 20 6d 69 73 73 69 6e 67 29 0d 00 5a 05 3b 0d |s missing)..Z.;.| 00000d00 00 5b 4d 3b 20 20 20 20 20 20 20 53 6b 69 70 20 |.[M; Skip | 00000d10 6f 76 65 72 20 74 68 65 20 73 70 61 63 65 73 20 |over the spaces | 00000d20 73 6f 20 74 68 61 74 20 72 32 20 70 6f 69 6e 74 |so that r2 point| 00000d30 73 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f |s to the start o| 00000d40 66 20 74 68 65 20 73 65 63 6f 6e 64 0d 00 5c 15 |f the second..\.| 00000d50 3b 20 20 20 20 20 20 20 70 61 72 61 6d 65 74 65 |; paramete| 00000d60 72 0d 00 5d 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d |r..]R; ---------| 00000d70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000db0 2d 2d 2d 0d 00 5e 04 0d 00 5f 0f 2e 73 70 61 63 |---..^..._..spac| 00000dc0 65 5f 6c 6f 6f 70 0d 00 60 20 20 20 20 20 20 20 |e_loop..` | 00000dd0 20 20 4c 44 52 42 20 20 20 20 72 30 2c 20 5b 72 | LDRB r0, [r| 00000de0 32 5d 2c 20 23 31 0d 00 61 1f 20 20 20 20 20 20 |2], #1..a. | 00000df0 20 20 43 4d 50 20 20 20 20 20 72 30 2c 20 23 97 | CMP r0, #.| 00000e00 28 22 20 22 29 0d 00 62 4f 20 20 20 20 20 20 20 |(" ")..bO | 00000e10 20 42 4c 54 20 20 20 20 20 73 79 6e 74 61 78 5f | BLT syntax_| 00000e20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 |error | 00000e30 20 3b 20 65 72 72 6f 72 20 69 66 20 73 65 63 6f | ; error if seco| 00000e40 6e 64 20 70 61 72 61 6d 65 74 65 72 20 6d 69 73 |nd parameter mis| 00000e50 73 69 6e 67 0d 00 63 1e 20 20 20 20 20 20 20 20 |sing..c. | 00000e60 42 45 51 20 20 20 20 20 73 70 61 63 65 5f 6c 6f |BEQ space_lo| 00000e70 6f 70 0d 00 64 04 0d 00 65 49 20 20 20 20 20 20 |op..d...eI | 00000e80 20 20 53 55 42 20 20 20 20 20 72 34 2c 20 72 32 | SUB r4, r2| 00000e90 2c 20 23 31 20 20 20 20 20 20 20 20 20 20 20 20 |, #1 | 00000ea0 20 20 3b 20 72 34 20 70 6f 69 6e 74 73 20 74 6f | ; r4 points to| 00000eb0 20 6f 75 74 70 75 74 20 63 6f 6d 6d 61 6e 64 0d | output command.| 00000ec0 00 66 04 0d 00 67 52 3b 20 2d 2d 2d 2d 2d 2d 2d |.f...gR; -------| 00000ed0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000f10 2d 2d 2d 2d 2d 0d 00 68 43 3b 20 20 20 20 20 20 |-----..hC; | 00000f20 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 | At this point, | 00000f30 72 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 7a |r1 points to a z| 00000f40 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 74 |ero terminated t| 00000f50 61 73 6b 20 6e 61 6d 65 0d 00 69 47 3b 20 20 20 |ask name..iG; | 00000f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000f70 20 20 20 72 34 20 70 6f 69 6e 74 73 20 74 6f 20 | r4 points to | 00000f80 61 20 63 74 72 6c 2d 63 68 61 72 20 74 65 72 6d |a ctrl-char term| 00000f90 69 6e 61 74 65 64 20 2a 63 6f 6d 6d 61 6e 64 0d |inated *command.| 00000fa0 00 6a 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.jR; -----------| 00000fb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00000ff0 2d 0d 00 6b 04 0d 00 6c 48 20 20 20 20 20 20 20 |-..k...lH | 00001000 20 4d 4f 56 20 20 20 20 20 72 33 2c 20 72 31 20 | MOV r3, r1 | 00001010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001020 20 3b 20 6e 6f 77 20 72 33 20 70 6f 69 6e 74 73 | ; now r3 points| 00001030 20 74 6f 20 74 61 73 6b 20 6e 61 6d 65 0d 00 6d | to task name..m| 00001040 04 0d 00 6e 40 20 20 20 20 20 20 20 20 4d 4f 56 |...n@ MOV| 00001050 20 20 20 20 20 72 30 2c 20 23 30 20 20 20 20 20 | r0, #0 | 00001060 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 7a | ; z| 00001070 65 72 6f 20 3d 3e 20 66 69 72 73 74 20 63 61 6c |ero => first cal| 00001080 6c 0d 00 6f 15 2e 72 65 61 64 5f 74 61 73 6b 5f |l..o..read_task_| 00001090 62 6c 6f 63 6b 73 0d 00 70 29 20 20 20 20 20 20 |blocks..p) | 000010a0 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 20 77 6f | MOV r1, wo| 000010b0 72 6b 73 70 61 63 65 5f 70 6f 69 6e 74 65 72 0d |rkspace_pointer.| 000010c0 00 71 27 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |.q' MOV | 000010d0 20 20 20 72 32 2c 20 23 77 6f 72 6b 73 70 61 63 | r2, #workspac| 000010e0 65 5f 73 69 7a 65 0d 00 72 31 20 20 20 20 20 20 |e_size..r1 | 000010f0 20 20 53 57 49 20 20 20 20 20 22 58 54 61 73 6b | SWI "XTask| 00001100 4d 61 6e 61 67 65 72 5f 45 6e 75 6d 65 72 61 74 |Manager_Enumerat| 00001110 65 54 61 73 6b 73 22 0d 00 73 54 20 20 20 20 20 |eTasks"..sT | 00001120 20 20 20 4d 4f 56 56 53 20 20 20 70 63 2c 20 6c | MOVVS pc, l| 00001130 69 6e 6b 20 20 20 20 20 20 20 20 20 20 20 20 20 |ink | 00001140 20 20 20 3b 20 70 61 73 73 20 6f 6e 20 61 6e 79 | ; pass on any| 00001150 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 | returned error | 00001160 74 6f 20 74 68 65 20 75 73 65 72 0d 00 74 04 0d |to the user..t..| 00001170 00 75 51 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |.uQ MOV | 00001180 20 20 20 72 35 2c 20 77 6f 72 6b 73 70 61 63 65 | r5, workspace| 00001190 5f 70 6f 69 6e 74 65 72 20 20 20 3b 20 70 6f 69 |_pointer ; poi| 000011a0 6e 74 73 20 74 6f 20 73 74 61 72 74 20 6f 66 20 |nts to start of | 000011b0 74 61 73 6b 20 69 6e 66 6f 20 62 6c 6f 63 6b 73 |task info blocks| 000011c0 0d 00 76 04 0d 00 77 52 3b 20 2d 2d 2d 2d 2d 2d |..v...wR; ------| 000011d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001210 2d 2d 2d 2d 2d 2d 0d 00 78 51 3b 20 20 20 20 20 |------..xQ; | 00001220 20 20 48 65 72 65 20 72 35 20 70 6f 69 6e 74 73 | Here r5 points| 00001230 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 | to the start of| 00001240 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 31 | a sequence of 1| 00001250 36 20 62 79 74 65 20 74 61 73 6b 20 64 65 73 63 |6 byte task desc| 00001260 72 69 70 74 69 6f 6e 0d 00 79 3d 3b 20 20 20 20 |ription..y=; | 00001270 20 20 20 62 6c 6f 63 6b 73 20 2d 20 77 6f 72 6b | blocks - work| 00001280 20 74 68 72 6f 75 67 68 20 74 68 65 73 65 2c 20 | through these, | 00001290 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6f 75 72 20 |looking for our | 000012a0 74 61 73 6b 0d 00 7a 52 3b 20 2d 2d 2d 2d 2d 2d |task..zR; ------| 000012b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000012f0 2d 2d 2d 2d 2d 2d 0d 00 7b 04 0d 00 7c 16 2e 63 |------..{...|..c| 00001300 68 65 63 6b 5f 74 61 73 6b 5f 62 6c 6f 63 6b 73 |heck_task_blocks| 00001310 0d 00 7d 53 20 20 20 20 20 20 20 20 43 4d 50 20 |..}S CMP | 00001320 20 20 20 20 72 35 2c 20 72 31 20 20 20 20 20 20 | r5, r1 | 00001330 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 68 61 | ; ha| 00001340 76 65 20 77 65 20 63 68 65 63 6b 65 64 20 6c 61 |ve we checked la| 00001350 73 74 20 6f 66 20 74 68 65 73 65 20 62 6c 6f 63 |st of these bloc| 00001360 6b 73 3f 0d 00 7e 27 20 20 20 20 20 20 20 20 42 |ks?..~' B| 00001370 48 53 20 20 20 20 20 63 68 65 63 6b 65 64 5f 74 |HS checked_t| 00001380 61 73 6b 5f 62 6c 6f 63 6b 73 0d 00 7f 4d 20 20 |ask_blocks...M | 00001390 20 20 20 20 20 20 4c 44 52 20 20 20 20 20 72 36 | LDR r6| 000013a0 2c 20 5b 72 35 2c 20 23 34 5d 20 20 20 20 20 20 |, [r5, #4] | 000013b0 20 20 20 20 20 20 3b 20 72 36 20 70 6f 69 6e 74 | ; r6 point| 000013c0 73 20 74 6f 20 74 61 73 6b 20 6e 61 6d 65 20 72 |s to task name r| 000013d0 65 74 75 72 6e 65 64 0d 00 80 4d 20 20 20 20 20 |eturned...M | 000013e0 20 20 20 4d 4f 56 20 20 20 20 20 72 37 2c 20 23 | MOV r7, #| 000013f0 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |0 | 00001400 20 20 20 3b 20 72 37 20 3d 20 61 6e 20 6f 66 66 | ; r7 = an off| 00001410 73 65 74 20 69 6e 74 6f 20 74 68 65 20 73 74 72 |set into the str| 00001420 69 6e 67 73 0d 00 81 16 2e 63 6f 6d 70 61 72 65 |ings.....compare| 00001430 5f 74 61 73 6b 5f 6e 61 6d 65 0d 00 82 20 20 20 |_task_name... | 00001440 20 20 20 20 20 20 4c 44 52 42 20 20 20 20 72 38 | LDRB r8| 00001450 2c 20 5b 72 33 2c 20 72 37 5d 0d 00 83 20 20 20 |, [r3, r7]... | 00001460 20 20 20 20 20 20 4c 44 52 42 20 20 20 20 72 32 | LDRB r2| 00001470 2c 20 5b 72 36 2c 20 72 37 5d 0d 00 84 51 20 20 |, [r6, r7]...Q | 00001480 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 32 | CMP r2| 00001490 2c 20 23 97 28 22 20 22 29 20 20 20 20 20 20 20 |, #.(" ") | 000014a0 20 20 20 20 3b 20 68 61 76 65 20 77 65 20 72 65 | ; have we re| 000014b0 61 63 68 65 64 20 65 6e 64 20 6f 66 20 72 65 74 |ached end of ret| 000014c0 75 72 6e 65 64 20 6e 61 6d 65 3f 0d 00 85 1a 20 |urned name?.... | 000014d0 20 20 20 20 20 20 20 4d 4f 56 4c 54 20 20 20 72 | MOVLT r| 000014e0 32 2c 20 23 30 0d 00 86 04 0d 00 87 1a 20 20 20 |2, #0........ | 000014f0 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 38 2c | CMP r8,| 00001500 20 72 32 0d 00 88 4b 20 20 20 20 20 20 20 20 41 | r2...K A| 00001510 44 44 4e 45 20 20 20 72 35 2c 20 72 35 2c 20 23 |DDNE r5, r5, #| 00001520 31 36 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |16 ;| 00001530 20 4f 4b 2c 20 73 6f 20 74 68 61 74 20 74 61 73 | OK, so that tas| 00001540 6b 20 77 61 73 6e 27 74 20 72 69 67 68 74 0d 00 |k wasn't right..| 00001550 89 3c 20 20 20 20 20 20 20 20 42 4e 45 20 20 20 |.< BNE | 00001560 20 20 63 68 65 63 6b 5f 74 61 73 6b 5f 62 6c 6f | check_task_blo| 00001570 63 6b 73 20 20 20 20 20 20 20 3b 20 2d 20 74 72 |cks ; - tr| 00001580 79 20 74 68 65 20 6e 65 78 74 0d 00 8a 04 0d 00 |y the next......| 00001590 8b 45 20 20 20 20 20 20 20 20 3b 20 74 68 65 20 |.E ; the | 000015a0 73 74 72 69 6e 67 73 20 6d 61 74 63 68 20 73 6f |strings match so| 000015b0 20 66 61 72 20 2d 20 62 75 74 20 68 61 76 65 20 | far - but have | 000015c0 77 65 20 72 65 61 63 68 65 64 20 74 68 65 20 65 |we reached the e| 000015d0 6e 64 3f 0d 00 8c 04 0d 00 8d 1a 20 20 20 20 20 |nd?........ | 000015e0 20 20 20 43 4d 50 20 20 20 20 20 72 32 2c 20 23 | CMP r2, #| 000015f0 30 0d 00 8e 47 20 20 20 20 20 20 20 20 ec 51 53 |0...G .QS| 00001600 20 20 70 63 2c 20 6c 69 6e 6b 20 20 20 20 20 20 | pc, link | 00001610 20 20 20 20 20 20 20 20 20 20 3b 20 69 66 20 77 | ; if w| 00001620 65 20 68 61 76 65 20 61 20 6d 61 74 63 68 2c 20 |e have a match, | 00001630 65 6e 64 20 68 65 72 65 0d 00 8f 45 20 20 20 20 |end here...E | 00001640 20 20 20 20 41 44 44 20 20 20 20 20 72 37 2c 20 | ADD r7, | 00001650 72 37 2c 20 23 31 20 20 20 20 20 20 20 20 20 20 |r7, #1 | 00001660 20 20 20 20 3b 20 69 6e 63 72 65 6d 65 6e 74 20 | ; increment | 00001670 73 74 72 69 6e 67 20 6f 66 66 73 65 74 0d 00 90 |string offset...| 00001680 42 20 20 20 20 20 20 20 20 42 20 20 20 20 20 20 |B B | 00001690 20 63 6f 6d 70 61 72 65 5f 74 61 73 6b 5f 6e 61 | compare_task_na| 000016a0 6d 65 20 20 20 20 20 20 20 3b 20 63 68 65 63 6b |me ; check| 000016b0 20 6e 65 78 74 20 63 68 61 72 61 63 74 65 72 0d | next character.| 000016c0 00 91 04 0d 00 92 52 3b 20 2d 2d 2d 2d 2d 2d 2d |......R; -------| 000016d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001710 2d 2d 2d 2d 2d 0d 00 93 47 3b 20 20 20 20 20 20 |-----...G; | 00001720 20 48 65 72 65 20 77 65 20 68 61 76 65 20 77 6f | Here we have wo| 00001730 72 6b 65 64 20 74 68 72 6f 75 67 68 20 61 20 63 |rked through a c| 00001740 6f 6d 70 6c 65 74 65 20 73 65 74 20 6f 66 20 72 |omplete set of r| 00001750 65 74 75 72 6e 65 64 20 74 61 73 6b 0d 00 94 4f |eturned task...O| 00001760 3b 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74 |; descript| 00001770 69 6f 6e 20 62 6c 6f 63 6b 73 20 2d 20 63 68 65 |ion blocks - che| 00001780 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54 61 73 |ck to see if Tas| 00001790 6b 4d 61 6e 61 67 65 72 5f 45 6e 75 6d 65 72 61 |kManager_Enumera| 000017a0 74 65 54 61 73 6b 73 20 68 61 73 0d 00 95 47 3b |teTasks has...G;| 000017b0 20 20 20 20 20 20 20 61 6e 79 20 6d 6f 72 65 20 | any more | 000017c0 74 6f 20 67 69 76 65 20 75 73 3b 20 6f 74 68 65 |to give us; othe| 000017d0 72 77 69 73 65 20 65 78 65 63 75 74 65 20 74 68 |rwise execute th| 000017e0 65 20 63 6f 6d 6d 61 6e 64 20 73 75 70 70 6c 69 |e command suppli| 000017f0 65 64 0d 00 96 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d |ed...R; --------| 00001800 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001840 2d 2d 2d 2d 0d 00 97 04 0d 00 98 18 2e 63 68 65 |----.........che| 00001850 63 6b 65 64 5f 74 61 73 6b 5f 62 6c 6f 63 6b 73 |cked_task_blocks| 00001860 0d 00 99 51 20 20 20 20 20 20 20 20 43 4d 4e 20 |...Q CMN | 00001870 20 20 20 20 72 30 2c 20 23 31 20 20 20 20 20 20 | r0, #1 | 00001880 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 61 72 | ; ar| 00001890 65 20 74 68 65 20 61 6e 79 20 6d 6f 72 65 20 62 |e the any more b| 000018a0 6c 6f 63 6b 73 20 74 6f 20 62 65 20 72 65 61 64 |locks to be read| 000018b0 3f 0d 00 9a 24 20 20 20 20 20 20 20 20 42 4e 45 |?...$ BNE| 000018c0 20 20 20 20 20 72 65 61 64 5f 74 61 73 6b 5f 62 | read_task_b| 000018d0 6c 6f 63 6b 73 0d 00 9b 04 0d 00 9c 52 3b 20 2d |locks.......R; -| 000018e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 9d 3f 3b |-----------...?;| 00001930 20 20 20 20 20 20 20 41 74 20 74 68 69 73 20 70 | At this p| 00001940 6f 69 6e 74 2c 20 6f 75 72 20 74 61 73 6b 20 69 |oint, our task i| 00001950 73 20 64 65 66 69 6e 69 74 65 6c 79 20 5f 6e 6f |s definitely _no| 00001960 74 5f 20 72 75 6e 6e 69 6e 67 0d 00 9e 52 3b 20 |t_ running...R; | 00001970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000019b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 9f 04 |------------....| 000019c0 0d 00 a0 43 20 20 20 20 20 20 20 20 4d 4f 56 20 |...C MOV | 000019d0 20 20 20 20 72 30 2c 20 72 34 20 20 20 20 20 20 | r0, r4 | 000019e0 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 72 30 | ; r0| 000019f0 20 70 6f 69 6e 74 73 20 74 6f 20 2a 63 6f 6d 6d | points to *comm| 00001a00 61 6e 64 0d 00 a1 1d 20 20 20 20 20 20 20 20 53 |and.... S| 00001a10 57 49 20 20 20 20 20 22 58 4f 53 5f 43 4c 49 22 |WI "XOS_CLI"| 00001a20 0d 00 a2 4d 20 20 20 20 20 20 20 20 4d 4f 56 20 |...M MOV | 00001a30 20 20 20 20 70 63 2c 20 6c 69 6e 6b 20 20 20 20 | pc, link | 00001a40 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 72 65 | ; re| 00001a50 74 75 72 6e 2c 20 70 61 73 73 69 6e 67 20 6f 6e |turn, passing on| 00001a60 20 61 6e 79 20 72 65 74 75 72 6e 65 64 0d 00 a3 | any returned...| 00001a70 40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |@ | 00001a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001a90 20 20 20 20 20 20 20 20 20 3b 20 65 72 72 6f 72 | ; error| 00001aa0 73 20 74 6f 20 74 68 65 20 75 73 65 72 0d 00 a4 |s to the user...| 00001ab0 04 0d 00 a5 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d |....R; ---------| 00001ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001b00 2d 2d 2d 0d 00 a6 4e 3b 20 20 20 20 20 20 20 54 |---...N; T| 00001b10 61 73 6b 20 6e 61 6d 65 20 62 65 67 61 6e 20 77 |ask name began w| 00001b20 69 74 68 20 61 20 27 22 27 2c 20 73 6f 20 77 65 |ith a '"', so we| 00001b30 20 77 69 6c 6c 20 61 73 73 75 6d 65 20 69 74 20 | will assume it | 00001b40 69 73 20 62 65 69 6e 67 20 67 69 76 65 6e 20 69 |is being given i| 00001b50 6e 0d 00 a7 19 3b 20 20 20 20 20 20 20 64 6f 75 |n....; dou| 00001b60 62 6c 65 20 71 75 6f 74 65 73 0d 00 a8 05 3b 0d |ble quotes....;.| 00001b70 00 a9 4f 3b 20 20 20 20 20 20 20 46 69 6e 64 20 |..O; Find | 00001b80 74 68 65 20 63 6c 6f 73 69 6e 67 20 27 22 27 20 |the closing '"' | 00001b90 28 69 66 20 69 74 20 65 78 69 73 74 73 29 20 61 |(if it exists) a| 00001ba0 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 |nd then return t| 00001bb0 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 0d 00 |o the standard..| 00001bc0 aa 44 3b 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e |.D; comman| 00001bd0 64 20 6c 69 6e 65 20 70 72 6f 63 65 73 73 69 6e |d line processin| 00001be0 67 20 63 6f 64 65 20 28 6f 74 68 65 72 77 69 73 |g code (otherwis| 00001bf0 65 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f |e return an erro| 00001c00 72 29 0d 00 ab 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d |r)...R; --------| 00001c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001c50 2d 2d 2d 2d 0d 00 ac 04 0d 00 ad 14 2e 71 75 6f |----.........quo| 00001c60 74 65 64 5f 74 61 73 6b 6e 61 6d 65 0d 00 ae 4c |ted_taskname...L| 00001c70 20 20 20 20 20 20 20 20 41 44 44 20 20 20 20 20 | ADD | 00001c80 72 31 2c 20 72 31 2c 20 23 31 20 20 20 20 20 20 |r1, r1, #1 | 00001c90 20 20 20 20 20 20 20 20 3b 20 74 61 73 6b 20 6e | ; task n| 00001ca0 61 6d 65 20 73 74 61 72 74 73 20 61 66 74 65 72 |ame starts after| 00001cb0 20 74 68 65 20 27 22 27 0d 00 af 1a 20 20 20 20 | the '"'.... | 00001cc0 20 20 20 20 4d 4f 56 20 20 20 20 20 72 32 2c 20 | MOV r2, | 00001cd0 72 31 0d 00 b0 19 2e 71 75 6f 74 65 64 5f 74 61 |r1.....quoted_ta| 00001ce0 73 6b 6e 61 6d 65 5f 6c 6f 6f 70 0d 00 b1 20 20 |skname_loop... | 00001cf0 20 20 20 20 20 20 20 4c 44 52 42 20 20 20 20 72 | LDRB r| 00001d00 30 2c 20 5b 72 32 5d 2c 20 23 31 0d 00 b2 1f 20 |0, [r2], #1.... | 00001d10 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 72 | CMP r| 00001d20 30 2c 20 23 97 28 22 20 22 29 0d 00 b3 45 20 20 |0, #.(" ")...E | 00001d30 20 20 20 20 20 20 42 4c 54 20 20 20 20 20 62 61 | BLT ba| 00001d40 64 5f 73 74 72 69 6e 67 20 20 20 20 20 20 20 20 |d_string | 00001d50 20 20 20 20 20 20 3b 20 65 72 72 6f 72 20 69 66 | ; error if| 00001d60 20 6e 6f 20 63 6c 6f 73 69 6e 67 20 27 22 27 0d | no closing '"'.| 00001d70 00 b4 20 20 20 20 20 20 20 20 20 43 4d 50 20 20 |.. CMP | 00001d80 20 20 20 72 30 2c 20 23 97 28 22 22 22 22 29 0d | r0, #.("""").| 00001d90 00 b5 28 20 20 20 20 20 20 20 20 42 4e 45 20 20 |..( BNE | 00001da0 20 20 20 71 75 6f 74 65 64 5f 74 61 73 6b 6e 61 | quoted_taskna| 00001db0 6d 65 5f 6c 6f 6f 70 0d 00 b6 24 20 20 20 20 20 |me_loop...$ | 00001dc0 20 20 20 42 20 20 20 20 20 20 20 74 61 73 6b 6e | B taskn| 00001dd0 61 6d 65 5f 73 6b 69 70 70 65 64 0d 00 b7 04 0d |ame_skipped.....| 00001de0 00 b8 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..R; -----------| 00001df0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001e30 2d 0d 00 b9 4c 3b 20 20 20 20 20 20 20 41 6e 20 |-...L; An | 00001e40 65 72 72 6f 72 20 68 61 73 20 6f 63 63 75 72 65 |error has occure| 00001e50 64 20 2d 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 |d - at least one| 00001e60 20 6f 66 20 6f 75 72 20 70 61 72 61 6d 65 74 65 | of our paramete| 00001e70 72 73 20 69 73 20 6d 69 73 73 69 6e 67 0d 00 ba |rs is missing...| 00001e80 05 3b 0d 00 bb 44 3b 20 20 20 20 20 20 20 42 6c |.;...D; Bl| 00001e90 61 6d 65 20 65 76 65 72 79 74 68 69 6e 67 20 6f |ame everything o| 00001ea0 6e 20 74 68 65 20 75 73 65 72 20 77 69 74 68 20 |n the user with | 00001eb0 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 6d |a syntax error m| 00001ec0 65 73 73 61 67 65 0d 00 bc 52 3b 20 2d 2d 2d 2d |essage...R; ----| 00001ed0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001f10 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 bd 04 0d 00 be 17 |--------........| 00001f20 2e 73 79 6e 74 61 78 5f 65 72 72 6f 72 5f 62 6c |.syntax_error_bl| 00001f30 6f 63 6b 0d 00 bf 15 20 20 20 20 20 20 20 20 44 |ock.... D| 00001f40 43 44 20 20 20 20 20 30 0d 00 c0 47 20 20 20 20 |CD 0...G | 00001f50 20 20 20 20 3d 20 20 20 20 20 20 20 22 53 79 6e | = "Syn| 00001f60 74 61 78 3a 20 2a 54 61 73 6b 45 6e 73 75 72 65 |tax: *TaskEnsure| 00001f70 20 3c 74 61 73 6b 20 6e 61 6d 65 3e 20 3c 2a 63 | <task name> <*c| 00001f80 6f 6d 6d 61 6e 64 3e 22 20 2b 20 bd 28 30 29 0d |ommand>" + .(0).| 00001f90 00 c1 11 20 20 20 20 20 20 20 20 41 4c 49 47 4e |... ALIGN| 00001fa0 0d 00 c2 04 0d 00 c3 11 2e 73 79 6e 74 61 78 5f |.........syntax_| 00001fb0 65 72 72 6f 72 0d 00 c4 2a 20 20 20 20 20 20 20 |error...* | 00001fc0 20 41 44 52 20 20 20 20 20 72 30 2c 20 73 79 6e | ADR r0, syn| 00001fd0 74 61 78 5f 65 72 72 6f 72 5f 62 6c 6f 63 6b 0d |tax_error_block.| 00001fe0 00 c5 23 20 20 20 20 20 20 20 20 84 52 53 20 20 |..# .RS | 00001ff0 20 20 70 63 2c 20 6c 69 6e 6b 2c 20 23 61 72 6d | pc, link, #arm| 00002000 5f 56 0d 00 c6 04 0d 00 c7 52 3b 20 2d 2d 2d 2d |_V.......R; ----| 00002010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002050 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 c8 4f 3b 20 20 20 |--------...O; | 00002060 20 20 20 20 41 6e 20 65 72 72 6f 72 20 68 61 73 | An error has| 00002070 20 6f 63 63 75 72 65 64 20 2d 20 74 68 65 20 74 | occured - the t| 00002080 61 73 6b 20 6e 61 6d 65 20 62 65 67 61 6e 20 77 |ask name began w| 00002090 69 74 68 20 61 20 27 22 27 2c 20 62 75 74 20 74 |ith a '"', but t| 000020a0 68 65 72 65 20 69 73 0d 00 c9 1e 3b 20 20 20 20 |here is....; | 000020b0 20 20 20 6e 6f 20 74 65 72 6d 69 6e 61 74 69 6e | no terminatin| 000020c0 67 20 27 22 27 0d 00 ca 05 3b 0d 00 cb 44 3b 20 |g '"'....;...D; | 000020d0 20 20 20 20 20 20 42 6c 61 6d 65 20 65 76 65 72 | Blame ever| 000020e0 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 75 73 |ything on the us| 000020f0 65 72 20 77 69 74 68 20 61 20 27 42 61 64 20 73 |er with a 'Bad s| 00002100 74 72 69 6e 67 27 20 6d 65 73 73 61 67 65 0d 00 |tring' message..| 00002110 cc 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.R; ------------| 00002120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002160 0d 00 cd 04 0d 00 ce 1b 2e 62 61 64 5f 73 74 72 |.........bad_str| 00002170 69 6e 67 5f 65 72 72 6f 72 5f 62 6c 6f 63 6b 0d |ing_error_block.| 00002180 00 cf 17 20 20 20 20 20 20 20 20 44 43 44 20 20 |... DCD | 00002190 20 20 20 32 35 33 0d 00 d0 27 20 20 20 20 20 20 | 253...' | 000021a0 20 20 3d 20 20 20 20 20 20 20 22 42 61 64 20 73 | = "Bad s| 000021b0 74 72 69 6e 67 22 20 2b 20 bd 28 30 29 0d 00 d1 |tring" + .(0)...| 000021c0 11 20 20 20 20 20 20 20 20 41 4c 49 47 4e 0d 00 |. ALIGN..| 000021d0 d2 04 0d 00 d3 0f 2e 62 61 64 5f 73 74 72 69 6e |.......bad_strin| 000021e0 67 0d 00 d4 2e 20 20 20 20 20 20 20 20 41 44 52 |g.... ADR| 000021f0 20 20 20 20 20 72 30 2c 20 62 61 64 5f 73 74 72 | r0, bad_str| 00002200 69 6e 67 5f 65 72 72 6f 72 5f 62 6c 6f 63 6b 0d |ing_error_block.| 00002210 00 d5 23 20 20 20 20 20 20 20 20 84 52 53 20 20 |..# .RS | 00002220 20 20 70 63 2c 20 6c 69 6e 6b 2c 20 23 61 72 6d | pc, link, #arm| 00002230 5f 56 0d 00 d6 04 0d 00 d7 52 3b 20 2d 2d 2d 2d |_V.......R; ----| 00002240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002280 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 d8 37 3b 20 20 20 |--------...7; | 00002290 20 20 20 20 56 65 72 73 69 6f 6e 20 6e 75 6d 62 | Version numb| 000022a0 65 72 20 61 6e 64 20 67 72 61 74 75 69 74 6f 75 |er and gratuitou| 000022b0 73 20 61 75 74 68 6f 72 20 63 72 65 64 69 74 0d |s author credit.| 000022c0 00 d9 52 3b 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |..R; -----------| 000022d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00002310 2d 0d 00 da 04 0d 00 db 36 20 20 20 20 20 20 20 |-.......6 | 00002320 20 3d 20 20 20 20 20 20 20 22 30 2e 30 31 20 28 | = "0.01 (| 00002330 30 32 20 4d 61 72 20 31 39 39 36 29 20 a9 20 41 |02 Mar 1996) . A| 00002340 6e 64 72 65 77 20 4b 65 6d 70 22 0d 00 dc 04 0d |ndrew Kemp".....| 00002350 00 dd 05 5d 0d 00 de 0b ed 20 70 61 73 73 25 0d |...]..... pass%.| 00002360 00 df 05 e1 0d ff |......| 00002366