Home » Archimedes archive » Micro User » MU 1991-07.adf » PD-Stuff » Utilities/!PlaceIt/!PlaceIt

Utilities/!PlaceIt/!PlaceIt

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 » Micro User » MU 1991-07.adf » PD-Stuff
Filename: Utilities/!PlaceIt/!PlaceIt
Read OK:
File size: 11565 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > !PlaceIt
   20REM   by Ian Ashley (pmf@uk.ac.warwick.cs) on 6/10/90
   30REM   Update to 1.03 on 19/1/91
   40
   50space%=&2000                            : REM 8K
   60
   70v_flag=1 << 28
   80
   90stacklen% = 32
  100
  110REM format of each data entry in the linked list (stored as a heap)
  120
  130next                     = 0
  140size                     = 4
  150offset_to_leafname       = 8
  160icon_handle              = 12
  170selected                 = 13
  180x_position               = 16
  190y_position               = 20
  200sprite_name              = 24
  210filetype                 = 40
  220filename                 = 44
  230
  240REM needed to stop errors on first pass
  250
  260background_window_handle = &9000
  270mode_changed             = &9000
  280number_selected          = &9400
  290start_linked_list        = &9800
  300heap_start               = start_linked_list
  310
  320DIM code% space%
  330
  340FOR opt%=12 TO 14 STEP 2
  350P%=&8000
  360O%=code%
  370L%=code%+space%                         : REM Upper limit for assembly
  380[
  390        opt     opt%
  400        adr     r13,stack
  410        ldr     r1,task
  420        mov     r0,#200                 ; last known wimp 2.00
  430        adr     r2,switcher_name        ; r2 -> "Place It"
  440        swi     "XWimp_Initialise"
  450        bvs     startup_error
  460        str     r1,task_handle
  470        bvs     startup_error
  480        bl      define_background_window
  490        bvs     startup_error
  500        bl      define_info_window
  510        bvs     startup_error
  520        bl      set_initial_conditions
  530        bvs     startup_error
  540        bl      load_config_file
  550        bvs     startup_error
  560        b       poll
  570
  580.switcher_name
  590        equs    "Place It"
  600        equb    0
  610        align
  620.task_handle
  630        equd    0
  640.task
  650        equs    "TASK"
  660
  670; -----------------------------------------------------------------------------
  680; report an error using Wimp_ReportError, set could not start up flag then
  690; closedown
  700; entry
  710;       r0 -> error block
  720; exit
  730;       doesn't
  740
  750.startup_error
  760        adr     r1,poll_space
  770        ldr     r2,[r0],#4
  780        str     r2,[r1],#4
  790        adr     r2,startup_error_message
  800.startup_error_loop1
  810        ldrb    r3,[r2],#1
  820        cmp     r3,#0
  830        strneb  r3,[r1],#1
  840        bne     startup_error_loop1
  850.startup_error_loop2
  860        ldrb    r3,[r0],#1
  870        cmp     r3,#0
  880        strneb  r3,[r1],#1
  890        bne     startup_error_loop2
  900.startup_error_loop3
  910        ldrb    r3,[r2],#1
  920        strb    r3,[r1],#1
  930        cmp     r3,#0
  940        bne     startup_error_loop3
  950        adr     r0,poll_space
  960        mov     r1,#2                   ; cancel only
  970        bl      report_error
  980        bl      closedown
  990        swi     "OS_Exit"
 1000.startup_error_message
 1010        equs    "PlaceIt could not startup ("+CHR$0
 1020        equs    ") and must exit immediately"+CHR$0
 1030        align
 1040
 1050; -----------------------------------------------------------------------------
 1060; poll space, workspace and stack
 1070
 1080.poll_space
 1090        equs    STRING$(128,CHR$0)
 1100        equs    STRING$(128,CHR$0)
 1110.workspace
 1120        equs    STRING$(60,CHR$0)
 1130.stack_start
 1140        equs    STRING$(stacklen%,CHR$0)
 1150.stack
 1160
 1170; -----------------------------------------------------------------------------
 1180; wimp poll loop
 1190
 1200.poll
 1210        mov     r0,#%110001             ; Mask
 1220        adr     r1,poll_space
 1230        swi     "XWimp_Poll"
 1240        bvs     fatal_error
 1250        teq     r0,#1
 1260        beq     redraw_window
 1270        teq     r0,#2
 1280        beq     open_window
 1290        teq     r0,#3
 1300        beq     close_window
 1310        teq     r0,#6
 1320        beq     mouse_button
 1330        teq     r0,#7
 1340        beq     drag_end
 1350        teq     r0,#9
 1360        beq     menu_select
 1370        teq     r0,#17
 1380        teqne   r0,#18
 1390        beq     message
 1400        teq     r0,#19
 1410        beq     message_acknowledged
 1420        b       poll
 1430
 1440; -----------------------------------------------------------------------------
 1450; redraw window request has been sent
 1460
 1470.redraw_window
 1480        swi     "XWimp_RedrawWindow"
 1490        bvs     fatal_error
 1500        b       poll
 1510
 1520; -----------------------------------------------------------------------------
 1530; open window request has been sent
 1540
 1550.open_window
 1560        adr     r2,mode_changed-&1000
 1570        add     r2,r2,#&1000
 1580        ldrb    r0,[r2]
 1590        teq     r0,#1                   ; see if mode has just changed
 1600        adreq   r1,background_window_handle-&1000
 1610        addeq   r1,r1,#&1000
 1620        moveq   r0,#0
 1630        streqb  r0,[r2]
 1640        swi     "XWimp_OpenWindow"
 1650        bvs     fatal_error
 1660        b       poll
 1670
 1680; -----------------------------------------------------------------------------
 1690; close window request has been sent
 1700
 1710.close_window
 1720        swi     "XWimp_CloseWindow"
 1730        bvs     fatal_error
 1740        b       poll
 1750
 1760; -----------------------------------------------------------------------------
 1770; mouse click request has been sent
 1780
 1790.mouse_button
 1800        ldr     r0,[r1,#12]             ; r0=window handle of click
 1810        adr     r2,background_window_handle-&1000
 1820        add     r2,r2,#&1000
 1830        ldr     r2,[r2]
 1840        cmp     r0,r2                   ; is it on our window ?
 1850        bne     poll                    ; poll if not
 1860        ldr     r0,[r1,#8]              ; r0=button state
 1870        tst     r0,#2                   ; see if middle button clicked
 1880        bne     open_menu               ; if so open menu
 1890        ldr     r2,[r1,#16]             ; r2=icon handle clicked on
 1900        cmn     r2,#1                   ; see if not on icon
 1910        moveq   r0,r0,lsl #8            ; if shift button state to right pos
 1920        tst     r0,#%101                ; see if button doubled clicked
 1930        bne     double_clicked
 1940        tst     r0,#%101 * 16           ; see if drag started
 1950        bne     drag_started
 1960        tst     r0,#%001 * 256          ; see if adjust clicked
 1970        bne     adjust_clicked
 1980.select_clicked
 1990        cmn     r2,#1                   ; see if on workarea
 2000        bleq    unselect_all            ; if so unselect all
 2010        beq     poll                    ; then poll
 2020        bl      find_icon
 2030        ldrb    r3,[r4,#selected]
 2040        teq     r3,#1                   ; see if selected
 2050        beq     poll                    ; if so poll
 2060        bl      unselect_all
 2070        bl      select_icon             ; select icon
 2080        mov     r2,#1
 2090        adr     r3,number_selected-&1000
 2100        add     r3,r3,#&1000
 2110        strb    r2,[r3]
 2120        strb    r2,[r4,#selected]
 2130        b       poll
 2140.adjust_clicked
 2150        cmn     r2,#1                   ; see if on workarea
 2160        beq     poll                    ; if so poll
 2170        bl      find_icon
 2180        ldrb    r3,[r4,#selected]
 2190        teq     r3,#1                   ; see if icon unselected
 2200                                        ; or selected by menu
 2210        blne    select_icon
 2220        bleq    unselect_icon
 2230        movne   r3,#1
 2240        moveq   r3,#0
 2250        strb    r3,[r4,#selected]
 2260        adr     r4,number_selected-&1000
 2270        add     r4,r4,#&1000
 2280        ldrb    r3,[r4]
 2290        addne   r3,r3,#1
 2300        subeq   r3,r3,#1
 2310        strb    r3,[r4]
 2320        b       poll
 2330.drag_started
 2340        teq     r0,#1 * 16              ; see if adjust used in drag
 2350        moveq   r0,#&ff
 2360        movne   r0,#0
 2370        strb    r0,delete_after_drag
 2380        ldmia   r1,{r0,r2}
 2390        str     r0,drag_x_start
 2400        str     r2,drag_y_start
 2410        mov     r0,#129                 ; scan keyboard
 2420        mov     r1,#&ff                 ; scan for both shifts
 2430        mov     r2,r1
 2440        swi     "XOS_Byte"
 2450        bvs     fatal_error
 2460        teq     r2,#&ff                 ; see if either shift pressed
 2470        streqb  r2,delete_after_drag    ; if so store so as know to delete
 2480                                        ; icon when drag has finished
 2490        adr     r1,poll_space
 2500        ldr     r2,[r1,#16]
 2510        bl      find_icon
 2520        ldrb    r0,[r4,#selected]
 2530        teq     r0,#1                   ; see if already selected
 2540        movne   r0,#1
 2550        strneb  r0,[r4,#selected]
 2560        ldrneb  r0,number_selected
 2570        addne   r0,r0,#1
 2580        strneb  r0,number_selected
 2590        blne    select_icon
 2600        adr     r1,workspace
 2610        mov     r0,#5                   ; drag fixed size rotating box
 2620        str     r0,[r1,#4]
 2630        ldr     r2,screen_maxx          ; r2 will be min x of selected icons
 2640        ldr     r3,screen_maxy          ; r3 will be min y of selected icons
 2650        mov     r4,#0                   ; r4 will be max x of selected icons
 2660        mov     r5,r4                   ; r5 will be min y of selected icons
 2670        adr     r6,start_linked_list-&1400
 2680        add     r6,r6,#&1400
 2690        ldr     r6,[r6]
 2700.drag_started_loop
 2710        ldrb    r0,[r6,#selected]
 2720        teq     r0,#0
 2730        beq     drag_started_loop_skip
 2740        ldr     r0,[r6,#x_position]
 2750        cmp     r0,r2
 2760        movlt   r2,r0
 2770        cmp     r0,r4
 2780        movgt   r4,r0
 2790        ldr     r0,[r6,#y_position]
 2800        cmp     r0,r3
 2810        movlt   r3,r0
 2820        cmp     r0,r5
 2830        movgt   r5,r0
 2840.drag_started_loop_skip
 2850        ldr     r6,[r6,#next]
 2860        teq     r6,#0
 2870        bne     drag_started_loop
 2880        sub     r2,r2,#8
 2890        str     r2,[r1,#8]
 2900        sub     r3,r3,#4
 2910        str     r3,[r1,#12]
 2920        add     r4,r4,#160+10
 2930        str     r4,[r1,#16]
 2940        add     r5,r5,#108+4
 2950        str     r5,[r1,#20]
 2960
 2970        adr     r6,drag_x_min
 2980        stmia   r6,{r2-r5}              ; store for later use
 2990
 3000        ldr     r6,drag_x_start
 3010        ldr     r7,drag_y_start
 3020
 3030        ldr     r0,screen_maxx
 3040        sub     r0,r0,r6
 3050        add     r0,r0,r4
 3060        str     r0,[r1,#32]             ; max x of parent box
 3070
 3080        ldr     r0,screen_maxy
 3090        sub     r0,r0,r7
 3100        add     r0,r0,r5
 3110        str     r0,[r1,#36]             ; max y of parent box
 3120
 3130        sub     r0,r2,r6
 3140        str     r0,[r1,#24]             ; min x of parent box
 3150
 3160        sub     r0,r3,r7
 3170        str     r0,[r1,#28]             ; min y of parent box
 3180
 3190        swi     "XWimp_DragBox"
 3200        bvs     fatal_error
 3210        b       poll
 3220.drag_x_start
 3230        equd    0
 3240.drag_y_start
 3250        equd    0
 3260.drag_x_min
 3270        equd    0
 3280.drag_y_min
 3290        equd    0
 3300.drag_x_max
 3310        equd    0
 3320.drag_y_max
 3330        equd    0
 3340.double_clicked
 3350        str     r0,button_state
 3360        mov     r3,r2
 3370        mov     r0,#129                 ; scan keyboard
 3380        mov     r1,#&ff                 ; scan for both shifts
 3390        mov     r2,r1
 3400        swi     "XOS_Byte"
 3410        bvs     fatal_error
 3420        mov     r5,r2
 3430        mov     r2,r3
 3440        bl      find_icon
 3450        ldrb    r3,[r4,#selected]
 3460        teq     r3,#1                   ; see if selected
 3470        bleq    unselect_icon
 3480        ldreqb  r3,number_selected
 3490        subeq   r3,r3,#1
 3500        streqb  r3,number_selected
 3510        adr     r1,poll_space+&400
 3520        sub     r1,r1,#&400
 3530        mov     r0,#5                   ; dataopen message
 3540        str     r0,[r1,#16]
 3550        ldr     r0,background_window_handle
 3560        str     r0,[r1,#20]
 3570        ldr     r0,[r4,#x_position]
 3580        str     r0,[r1,#28]
 3590        ldr     r0,[r4,#y_position]
 3600        str     r0,[r1,#32]
 3610        mov     r0,#0                   ; we are originating the message
 3620        str     r0,[r1,#12]
 3630        str     r0,[r1,#36]
 3640        ldr     r0,[r4,#filetype]
 3650        teq     r5,#&ff                 ; see if either shift was pressed
 3660        bne     no_shift
 3670        cmp     r0,#&2000               ; see if application
 3680        subeq   r0,r0,#&1000            ; if so set it to directory
 3690.no_shift
 3700        str     r0,[r1,#40]
 3710        add     r0,r4,#filename
 3720        add     r2,r1,#44
 3730.double_clicked_loop
 3740        ldrb    r3,[r0],#1
 3750        strb    r3,[r2],#1
 3760        teq     r3,#0
 3770        bne     double_clicked_loop
 3780        sub     r2,r2,r1                ; r2 = length of message
 3790        add     r2,r2,#3
 3800        bic     r2,r2,#3                ; word align
 3810        str     r2,[r1]
 3820        mov     r0,#18                  ; reply needed
 3830        mov     r2,#0                   ; broadcast message
 3840        swi     "XWimp_SendMessage"
 3850        bvs     fatal_error
 3860        ldr     r0,[r1,#8]
 3870        ldr     r2,button_state         ; must load this first as stored
 3880                                        ; at same address as message_myref
 3890        str     r0,message_myref
 3900        tst     r2,#1                   ; see if adjust double clicked
 3910        blne    remove_icon
 3920        mov     r0,#42
 3930        strb    r0,delete_after_drag    ; tell us no drag occured
 3940        b       poll
 3950
 3960; -----------------------------------------------------------------------------
 3970; remove icon from screen and linked list
 3980; entry
 3990;       r4 -> linked list entry
 4000
 4010.remove_icon
 4020        stmfd   r13!,{r0-r4,r14}
 4030        adr     r1,start_linked_list-&1000
 4040        add     r1,r1,#&1000
 4050.remove_icon_loop
 4060        ldr     r2,[r1,#next]
 4070        teq     r2,r4                   ; see if found linked list entry before
 4080                                        ; the one we are deleting
 4090        movne   r1,r2
 4100        bne     remove_icon_loop
 4110        ldr     r2,[r4,#next]           ; remove the entry from the
 4120        str     r2,[r1,#next]           ; linked list
 4130        bl      delete_icon
 4140        bl      free_heap_block
 4150        ldrb    r2,number_of_icons
 4160        sub     r2,r2,#1
 4170        strb    r2,number_of_icons
 4180        ldmfd   r13!,{r0-r4,pc}
 4190
 4200; -----------------------------------------------------------------------------
 4210; delete an icon and update screen
 4220; entry
 4230;       r4 -> linked list entry
 4240
 4250.delete_icon
 4260        stmfd   r13!,{r0-r4}
 4270        adr     r1,delete_space
 4280        ldr     r0,background_window_handle
 4290        str     r0,[r1]
 4300        ldrb    r0,[r4,#icon_handle]
 4310        str     r0,[r1,#4]
 4320        swi     "XWimp_DeleteIcon"
 4330        bvs     fatal_error
 4340        ldr     r0,background_window_handle
 4350        ldr     r1,[r4,#x_position]
 4360        ldr     r2,[r4,#y_position]
 4370        add     r3,r1,#10*16
 4380        add     r4,r2,#108
 4390        swi     "XWimp_ForceRedraw"
 4400        bvs     fatal_error
 4410        ldmfd   r13!,{r0-r4}
 4420        movs    pc,r14
 4430.delete_space
 4440        equd    0
 4450        equd    0
 4460
 4470; -----------------------------------------------------------------------------
 4480; open the menu
 4490
 4500.open_menu
 4510        ldrb    r2,number_selected
 4520        teq     r2,#0                   ; see if no icon selected
 4530        teqne   r2,#&ff                 ; or icon selected by menu
 4540        bne     icons_selected
 4550        teq     r2,#&ff
 4560        bleq    unselect_menu_selected_icon
 4570        ldr     r2,[r1,#16]             ; icon clicked on
 4580        cmn     r2,#1                   ; see if on icon
 4590        beq     icons_selected          ; skip if not
 4600        bl      find_icon
 4610        mov     r3,#2
 4620        strb    r3,[r4,#selected]       ; mark as selected by menu
 4630        ldrb    r2,[r4,#icon_handle]
 4640        bl      select_icon
 4650        mvn     r3,#0
 4660        strb    r3,number_selected
 4670.icons_selected
 4680        ldrb    r2,number_of_icons
 4690        teq     r2,#0                   ; see if no icons on backdrop
 4700        ldr     r3,select_all_flags
 4710        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons
 4720        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
 4730        str     r3,select_all_flags
 4740
 4750        ldrb    r2,number_selected
 4760        teq     r2,#0                   ; see if no icons selected
 4770        ldr     r3,clear_selection_flags
 4780        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons selected
 4790        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
 4800        str     r3,clear_selection_flags
 4810
 4820        ldr     r3,remove_flags
 4830        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons
 4840        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
 4850        str     r3,remove_flags
 4860
 4870        ldr     r2,[r1]                 ; r2 = mouse x coordinate
 4880        sub     r2,r2,#144              ; x coordinate to open menu at
 4890        ldr     r3,[r1,#4]              ; r3 = mouse y coordinate
 4900        add     r3,r3,#16               ; y coordinate to open menu at
 4910        adr     r1,main_menu
 4920        swi     "XWimp_CreateMenu"
 4930        bvs     fatal_error
 4940        b       poll
 4950
 4960; -----------------------------------------------------------------------------
 4970; menu data blocks
 4980
 4990.main_menu
 5000        FNstring("Place It")
 5010        equb    7
 5020        equb    2
 5030        equb    7
 5040        equb    0
 5050        equd    256
 5060        equd    44
 5070        equd    0
 5080
 5090        equd    0
 5100.info_window_handle
 5110        equd    -1
 5120        equd    1+(1 << 5)+(7 << 24)
 5130        FNstring("Info")
 5140
 5150        equd    0
 5160        equd    display_menu
 5170        equd    1+(1 << 5)+(7 << 24)
 5180        FNstring("Display")
 5190
 5200        equd    0
 5210        equd    -1
 5220.remove_flags
 5230        equd    1+(1 << 5)+(7 << 24)
 5240        FNstring("Remove")
 5250
 5260        equd    0
 5270        equd    -1
 5280.select_all_flags
 5290        equd    1+(1 << 5)+(7 << 24)
 5300        FNstring("Select all")
 5310
 5320        equd    0
 5330        equd    -1
 5340.clear_selection_flags
 5350        equd    1+(1 << 5)+(1 << 8)+(7 << 24)
 5360        equd    clear_selection_indirected
 5370        equd    -1
 5380        equd    16
 5390
 5400        equd    0
 5410        equd    -1
 5420        equd    1+(1 << 5)+(1 << 8)+(7 << 24)
 5430        equd    save_backdrop_indirected
 5440        equd    -1
 5450        equd    14
 5460
 5470        equd    &80                     ; last menu item
 5480        equd    -1
 5490        equd    1+(1 << 5)+(7 << 24)
 5500        FNstring("Quit")
 5510.end_main_menu
 5520
 5530.display_menu
 5540        FNstring("Display")
 5550        equb    7
 5560        equb    2
 5570        equb    7
 5580        equb    0
 5590        equd    176
 5600        equd    44
 5610        equd    0
 5620
 5630.black_text_tick
 5640        equd    1
 5650        equd    -1
 5660        equd    1+(1 << 5)+(7 << 24)
 5670        FNstring("Black text")
 5680
 5690.white_text_tick
 5700        equd    &80                     ; last menu item
 5710        equd    -1
 5720        equd    1+(1 << 5)+(7 << 24)
 5730        FNstring("White text")
 5740
 5750.clear_selection_indirected
 5760        equs    "Clear selection"+CHR$0
 5770.save_backdrop_indirected
 5780        equs    "Save backdrop"+CHR$0
 5790        align
 5800
 5810; -----------------------------------------------------------------------------
 5820; Our drag operation has ended
 5830
 5840.drag_end
 5850        adr     r1,workspace+&400
 5860        sub     r1,r1,#&400
 5870        swi     "XWimp_GetPointerInfo"
 5880        bvs     fatal_error
 5890        ldr     r0,[r1,#12]
 5900        ldr     r3,background_window_handle
 5910        teq     r0,r3                   ; see if dragged onto our window
 5920        bne     get_task_name
 5930        ldmia   r1,{r0,r2}              ; get coords where drag ended
 5940        str     r3,[r1]                 ; store window handle at r1
 5950        ldr     r3,drag_x_start
 5960        ldr     r4,drag_y_start
 5970        sub     r3,r0,r3
 5980        sub     r4,r2,r4
 5990        adr     r5,start_linked_list-&1000
 6000        add     r5,r5,#&1000
 6010        ldr     r5,[r5]
 6020.drag_end_loop
 6030        ldrb    r0,[r5,#selected]
 6040        teq     r0,#0
 6050        beq     drag_end_loop_skip
 6060        ldrb    r0,[r5,#icon_handle]
 6070        str     r0,[r1,#4]
 6080        swi     "XWimp_DeleteIcon"
 6090        bvs     fatal_error
 6100        ldr     r0,[r5,#x_position]
 6110        add     r0,r0,r3
 6120        str     r0,[r5,#x_position]
 6130        str     r0,[r1,#4]
 6140        add     r0,r0,#10*16
 6150        str     r0,[r1,#12]
 6160        ldr     r0,[r5,#y_position]
 6170        add     r0,r0,r4
 6180        str     r0,[r5,#y_position]
 6190        str     r0,[r1,#8]
 6200        add     r0,r0,#108
 6210        str     r0,[r1,#16]
 6220        ldr     r0,icon_flags
 6230        str     r0,[r1,#20]
 6240        ldr     r0,[r5,#offset_to_leafname]
 6250        add     r0,r0,r5
 6260        str     r0,[r1,#24]
 6270        add     r0,r5,#sprite_name
 6280        str     r0,[r1,#28]
 6290        mov     r0,#12
 6300        str     r0,[r1,#32]
 6310        swi     "XWimp_CreateIcon"
 6320        bvs     fatal_error
 6330        strb    r0,[r5,#icon_handle]
 6340.drag_end_loop_skip
 6350        ldr     r5,[r5,#next]
 6360        teq     r5,#0
 6370        bne     drag_end_loop
 6380        adr     r0,drag_x_min                   ; get initial coordinates of
 6390        ldmia   r0,{r1-r4}                      ; box dragged
 6400        ldr     r0,background_window_handle
 6410        swi     "XWimp_ForceRedraw"
 6420        bvs     fatal_error
 6430        bl      unselect_all
 6440        b       poll
 6450.get_task_name
 6460        adr     r1,poll_space+&800
 6470        sub     r1,r1,#&800
 6480        swi     "XWimp_GetPointerInfo"
 6490        bvs     fatal_error
 6500        ldr     r2,[r1,#12]
 6510        str     r2,datasave_window_handle ; store window handle
 6520        ldr     r3,[r1,#16]
 6530        str     r3,datasave_icon_handle ; store icon handle
 6540        ldr     r0,[r1,#0]
 6550        str     r0,datasave_mouse_x     ; store mouse x
 6560        ldr     r0,[r1,#4]
 6570        str     r0,datasave_mouse_y     ; store mouse y
 6580
 6590        adr     r1,workspace+&400
 6600        mov     r0,#24                  ; length of message block
 6610        str     r0,[r1,#-&400]!
 6620        mov     r0,#0
 6630        str     r0,[r1,#12]             ; original message
 6640        mov     r0,#&40000
 6650        add     r0,r0,#&c6              ; message_tasknamerq
 6660        str     r0,[r1,#16]
 6670        mov     r0,#19                  ; use to find task handle of window
 6680                                        ; r2,3 already set
 6690        swi     "XWimp_SendMessage"     ; no message will be sent but r2 = task
 6700        bvs     fatal_error             ; handle of window
 6710        str     r2,[r1,#20]
 6720        mov     r0,#17                  ; no reply wanted
 6730        mov     r2,#0                   ; broadcast message
 6740        swi     "XWimp_SendMessage"
 6750        bvs     fatal_error
 6760        ldr     r0,[r1,#8]
 6770        str     r0,message_myref
 6780        b       poll
 6790
 6800.tasknameis
 6810        ldr     r0,start_filer_name
 6820        ldr     r2,[r1,#28]
 6830        teq     r0,r2                   ; see if the same
 6840        bne     send_dataload_message
 6850        ldrb    r0,[r1,#32]
 6860        teq     r0,#ASC"r"
 6870        bne     send_dataload_message
 6880        ldrb    r0,[r1,#33]
 6890        teq     r0,#0
 6900        bne     send_dataload_message
 6910        mov     r0,#1
 6920        strb    r0,save_to_filer        ; set flag (message type)
 6930        b       send_datasaveload_message
 6940.start_filer_name
 6950        equs    "File"
 6960.send_dataload_message
 6970        mov     r0,#3
 6980        strb    r0,save_to_filer        ; set flag (message type)
 6990.send_datasaveload_message
 7000        adr     r4,start_linked_list-&1000
 7010        add     r4,r4,#&1000
 7020        ldr     r4,[r4]
 7030.send_datasaveload_message_loop
 7040        adr     r1,poll_space+&800
 7050        sub     r1,r1,#&800
 7060        ldrb    r0,[r4,#selected]
 7070        teq     r0,#0                   ; see if selected
 7080        beq     send_datasaveload_message_not_selected
 7090        bl      unselect_icon
 7100        ldrb    r0,number_selected
 7110        sub     r0,r0,#1
 7120        strb    r0,number_selected
 7130        ldr     r0,[r4,#filetype]
 7140        str     r0,[r1,#40]
 7150        mov     r0,#17                  ; read catalogue info, no path
 7160        add     r1,r4,#filename
 7170        mov     r6,r4                   ; preserve r4
 7180        swi     "XOS_File"
 7190        movvs   r4,r6                   ; restore r4
 7200        adrvs   r14,send_datasaveload_message_not_selected
 7210        bvs     report_error_ok
 7220        teq     r0,#0
 7230        bne     send_datasaveload_message_skip
 7240        mov     r4,r6                   ; restore r4
 7250        mov     r0,#19                  ; generate error
 7260        swi     "XOS_File"
 7270        bl      report_error_ok
 7280        b       send_datasaveload_message_not_selected
 7290.send_datasaveload_message_skip
 7300        adr     r1,poll_space+&800
 7310        sub     r1,r1,#&800             ; reset r1
 7320        str     r4,[r1,#36]             ; store length of file
 7330        mov     r4,r6                   ; restore r4
 7340        ldrb    r5,save_to_filer
 7350        teq     r5,#1                   ; see if saving to filer
 7360        ldreq   r2,[r4,#offset_to_leafname]
 7370        addeq   r2,r2,r4                ; if so use leafname
 7380        addne   r2,r4,#filename         ; not so use full name
 7390        add     r3,r1,#44
 7400.send_datasaveload_message_loop2
 7410        ldrb    r5,[r2],#1
 7420        strb    r5,[r3],#1
 7430        teq     r5,#0
 7440        bne     send_datasaveload_message_loop2
 7450        sub     r3,r3,r1                ; r3 = message length
 7460        add     r3,r3,#3
 7470        bic     r3,r3,#3                ; round up to word boundary
 7480        str     r3,[r1]
 7490        mov     r0,#0                   ; we are originating the message
 7500        str     r0,[r1,#12]
 7510        ldrb    r0,save_to_filer
 7520        str     r0,[r1,#16]             ; set message type
 7530        ldr     r0,datasave_mouse_x
 7540        str     r0,[r1,#28]
 7550        ldr     r0,datasave_mouse_y
 7560        str     r0,[r1,#32]
 7570        mov     r0,#18                  ; reply needed
 7580        ldr     r2,datasave_window_handle ; r2 = destination window handle
 7590        str     r2,[r1,#20]
 7600        ldr     r3,datasave_icon_handle ; r3 = destination window handle
 7610                                        ; incase on iconbar
 7620        str     r3,[r1,#24]
 7630        swi     "XWimp_SendMessage"
 7640        bvs     fatal_error
 7650        ldr     r0,[r1,#8]
 7660        str     r0,message_myref
 7670        str     r4,datasave_where_up_to
 7680        b       poll                    ; poll to receive message reply
 7690.send_datasaveload_message_continue
 7700        ldr     r4,datasave_where_up_to
 7710.send_datasaveload_message_not_selected
 7720        adr     r1,poll_space+&800
 7730        sub     r1,r1,#&800
 7740        ldr     r4,[r4]
 7750.send_datasaveload_message_continue2
 7760        teq     r4,#0
 7770        bne     send_datasaveload_message_loop
 7780        b       poll
 7790
 7800.datasave_where_up_to
 7810        equd    0
 7820.datasave_window_handle
 7830        equd    0
 7840.datasave_icon_handle
 7850        equd    0
 7860.datasave_mouse_x
 7870        equd    0
 7880.datasave_mouse_y
 7890        equd    0
 7900
 7910; -----------------------------------------------------------------------------
 7920; The user has clicked on our meny
 7930
 7940.menu_select
 7950        adr     r1,pointer_info
 7960        swi     "XWimp_GetPointerInfo"
 7970        bvs     fatal_error
 7980        adr     r1,poll_space+&800
 7990        sub     r1,r1,#&800
 8000        ldr     r0,[r1]                 ; r0 = first menu entry
 8010        cmn     r0,#1                   ; see if on menu entry
 8020        addne   pc,pc,r0,lsl #2         ; was so dispatch to correct routine
 8030        b       poll                    ; not on menu entry so poll
 8040.jump_table
 8050        b       poll                    ; info
 8060        b       menu_display            ; display submenu
 8070        b       remove                  ; remove
 8080        b       select_all              ; select_all
 8090        b       clear_selection         ; clear_selection
 8100        b       save_backdrop           ; save_backdrop
 8110        b       closedown_and_exit      ; quit
 8120
 8130; -----------------------------------------------------------------------------
 8140; an entry on the display menu has been selected
 8150
 8160.menu_display
 8170        ldr     r0,[r1,#4]
 8180        cmp     r0,#0                   ; sort where clicked
 8190        blt     poll                    ; not menu item on click on display
 8200                                        ; in main menu so poll again
 8210        moveq   r0,#1
 8220        movgt   r0,#0
 8230        str     r0,black_text_tick
 8240
 8250        strb    r0,icon_text_colour
 8260
 8270        moveq   r0,#&80
 8280        movne   r0,#&81
 8290        str     r0,white_text_tick
 8300
 8310        ldr     r0,icon_flags
 8320        bic     r0,r0,#7 << 24
 8330        eoreq   r0,r0,#7 << 24
 8340        str     r0,icon_flags
 8350
 8360        adr     r1,workspace+&800
 8370        ldr     r0,background_window_handle
 8380        str     r0,[r1,#-&800]!
 8390        moveq   r0,#7 << 24
 8400        movne   r0,#0
 8410        str     r0,[r1,#8]
 8420        mov     r0,#15 << 24
 8430        str     r0,[r1,#12]
 8440        ldr     r4,start_linked_list
 8450        teq     r4,#0                   ; see if no icons at all
 8460        beq     see_if_reopen_menu
 8470.menu_display_loop
 8480        ldrb    r0,[r4,#icon_handle]
 8490        str     r0,[r1,#4]
 8500        swi     "XWimp_SetIconState"
 8510        bvs     fatal_error
 8520        ldr     r4,[r4,#next]
 8530        teq     r4,#0
 8540        bne     menu_display_loop
 8550        b       see_if_reopen_menu
 8560
 8570; -----------------------------------------------------------------------------
 8580; the remove menu option has been selected
 8590
 8600.remove
 8610        adr     r5,start_linked_list-&c00
 8620        ldr     r4,[r5,#&c00]!
 8630.remove_loop
 8640        ldr     r6,[r4,#next]           ; must be read here as freeing a block
 8650                                        ; changes the value of [r4+next]
 8660        ldrb    r2,[r4,#selected]
 8670        teq     r2,#0
 8680        streq   r4,[r5,#next]           ; store linked list pointer in last
 8690                                        ; not removed data set if not removing
 8700        moveq   r5,r4                   ; update last not removed data set
 8710                                        ; pointer if not removing
 8720        beq     not_remove
 8730        bl      delete_icon
 8740        bl      free_heap_block
 8750        ldrb    r2,number_of_icons
 8760        sub     r2,r2,#1
 8770        strb    r2,number_of_icons
 8780.not_remove
 8790        movs    r4,r6                   ; move along list
 8800        teq     r4,#0                   ; see if at end
 8810        bne     remove_loop
 8820        str     r4,[r5,#next]           ; mark end of linked list
 8830        strb    r4,number_selected
 8840        b       see_if_reopen_menu
 8850
 8860; -----------------------------------------------------------------------------
 8870; the select all menu option has been selected
 8880
 8890.select_all
 8900        ldr     r4,start_linked_list
 8910.select_all_loop
 8920        ldrb    r2,[r4,#icon_handle]
 8930        bl      select_icon
 8940        mov     r2,#1
 8950        strb    r2,[r4,#selected]
 8960        ldr     r4,[r4]
 8970        teq     r4,#0
 8980        bne     select_all_loop
 8990        ldrb    r2,number_of_icons
 9000        strb    r2,number_selected
 9010        b       see_if_reopen_menu
 9020
 9030; -----------------------------------------------------------------------------
 9040; the clear selecton menu option has been selected
 9050
 9060.clear_selection
 9070        bl      unselect_all
 9080        b       see_if_reopen_menu
 9090
 9100; -----------------------------------------------------------------------------
 9110; the save backdrop menu entry has been selected.
 9120
 9130.save_backdrop
 9140        mov     r0,#&80
 9150        adr     r1,config_filename
 9160        swi     "XOS_Find"
 9170        adrvs   r14,poll+&800
 9180        subvs   r14,r14,#&800           ; cause it to return to poll loop
 9190        bvs     report_error_ok
 9200        mov     r1,r0                   ; r1 = file handle
 9210        ldrb    r0,icon_text_colour     ; store icon text colour
 9220        swi     "XOS_BPut"
 9230        bvs     error_while_writing
 9240        ldrb    r0,number_of_icons      ; store number of icons
 9250        swi     "XOS_BPut"
 9260        bvs     error_while_writing
 9270        ldr     r2,start_linked_list
 9280        teq     r2,#0
 9290        beq     end_of_save
 9300.save_backdrop_loop
 9310        mov     r0,#2                   ; write bytes using current seq pointer
 9320                                        ; r1 = file handle
 9330        ldr     r5,[r2,#next]           ; get pointer to next entry
 9340        ldr     r3,[r2,#size]!
 9350        sub     r3,r3,#4
 9360        swi     "XOS_GBPB"
 9370        bvs     error_while_writing
 9380        movs    r2,r5                   ; r2 -> next entry, set flags
 9390        teq     r2,#0
 9400        bne     save_backdrop_loop
 9410.end_of_save
 9420        mov     r0,#2                   ; write bytes using current seq pointer
 9430        adr     r2,zero                 ; r2 -> &00000000
 9440        mov     r3,#4
 9450        swi     "XOS_GBPB"
 9460        bvs     error_while_writing
 9470        mov     r0,#0                   ; close file
 9480        swi     "XOS_Find"
 9490        blvs    report_error_ok
 9500        b       see_if_reopen_menu
 9510.error_while_writing
 9520        mov     r2,r0                   ; store error pointer
 9530        mov     r0,#0                   ; close file
 9540        swi     "XOS_Find"              ; ignore any errors
 9550        mov     r0,r2                   ; restore error pointer
 9560        bl      report_error_ok
 9570        b       poll
 9580.zero
 9590        equd    0
 9600.config_filename
 9610        equs    "<PlaceIt$Dir>.!Config"+CHR$0
 9620        align
 9630
 9640; -----------------------------------------------------------------------------
 9650; see if adjust was clicked on. if so reopen menu
 9660
 9670.see_if_reopen_menu
 9680        ldr     r0,pointer_info+8       ; r0 = button state
 9690        tst     r0,#1                   ; see if adjust pressed
 9700        beq     poll                    ; wasn't so poll
 9710        adr     r1,pointer_info         ; r1 -> click coordinates
 9720        mvn     r0,#0
 9730        str     r0,[r1,#16]             ; no icon was clicked on
 9740        b       open_menu               ; reopen menu
 9750
 9760.pointer_info
 9770        equs    STRING$(24,CHR$0)
 9780
 9790; -----------------------------------------------------------------------------
 9800; The nice wimp has sent us a message
 9810
 9820.message
 9830        ldr     r11,[r1,#16]            ; message ID
 9840        teq     r11,#0                  ; see if closedown
 9850        beq     closedown_and_exit
 9860        mov     r0,#&c1
 9870        add     r0,r0,#&40000
 9880        teq     r11,r0                  ; see if mode change message
 9890        bleq    read_screen_size        ; this call preserves flags
 9900        beq     poll
 9910        add     r0,r0,#6                ; see if tasknameis
 9920        teq     r11,r0
 9930        beq     tasknameis
 9940        teq     r11,#2                  ; see if datasaveack
 9950        beq     datasaveack
 9960        teq     r11,#4                  ; see if dataloadack
 9970        beq     dataloadack
 9980        teq     r11,#3                  ; see if dataload
 9990        bne     poll
10000
10010; -----------------------------------------------------------------------------
10020; we have received a dataload message. see if we can handle it
10030
10040.dataload
10050        ldr     r0,[r1,#12]             ; r0 = your_ref
10060        cmp     r0,#0                   ; check sent by filer
10070        bne     poll                    ; poll if not
10080        ldr     r3,[r1]                 ; r3 = length of message block
10090        sub     r3,r3,#44-filename      ; r3 = amount of storage needed
10100        bl      get_heap_block
10110        teq     r2,#0
10120        beq     no_more_memory_error
10130        str     r3,[r2,#size]
10140        adr     r4,start_linked_list-&c00
10150        add     r4,r4,#&c00
10160.dataload_loop1
10170        ldr     r5,[r4,#next]
10180        teq     r5,#0
10190        movne   r4,r5
10200        bne     dataload_loop1
10210        str     r2,[r4,#next]           ; store pointer to next data set
10220        str     r5,[r2,#next]           ; r5 = 0, mark next data set as last
10230        mov     r4,r2
10240        ldr     r0,[r1,#40]             ; r0 = filetype of file to be loaded
10250        str     r0,[r4,#filetype]
10260        add     r0,r1,#44               ; r0 -> filename to be loaded
10270        add     r2,r4,#filename
10280        sub     r5,r2,r4
10290.dataload_loop2
10300        ldrb    r3,[r0],#1
10310        strb    r3,[r2],#1
10320        teq     r3,#ASC"."
10330        subeq   r5,r2,r4                ; r5 = offset to leafname
10340        teq     r3,#0
10350        bne     dataload_loop2
10360        str     r5,[r4,#offset_to_leafname]
10370        add     r5,r5,r4                ; r5 -> leafname, to use as sprite text
10380        mov     r2,r1
10390        adr     r1,workspace+&c00
10400        sub     r1,r1,#&c00
10410        ldr     r0,background_window_handle
10420        str     r0,[r1]
10430        ldr     r0,[r2,#28]             ; r0 = x coordinate where drag ended
10440        sub     r0,r0,#5*16
10450        str     r0,[r1,#4]              ; min x of icon
10460        str     r0,[r4,#x_position]
10470        add     r0,r0,#10*16
10480        str     r0,[r1,#12]             ; max x of icon
10490        ldr     r0,[r2,#32]             ; r0 = y coordinate where drag ended
10500        sub     r0,r0,#54
10510        str     r0,[r1,#8]              ; min y of icon
10520        str     r0,[r4,#y_position]
10530        add     r0,r0,#108
10540        str     r0,[r1,#16]             ; max y of icon
10550        ldr     r0,icon_flags
10560        str     r0,[r1,#20]
10570        str     r5,[r1,#24]             ; store pointer to sprite text
10580        add     r0,r4,#sprite_name
10590        str     r0,[r1,#28]             ; store pointer to validation string
10600        mov     r2,#11
10610        str     r2,[r1,#32]
10620        mov     r2,#ASC"S"
10630        strb    r2,[r0],#1
10640        ldr     r3,[r4,#filetype]
10650        cmp     r3,#&1000               ; see if has no filetype
10660        bge     no_filetype
10670        mov     r2,#ASC"f"
10680        strb    r2,[r0],#1
10690        mov     r2,#ASC"i"
10700        strb    r2,[r0],#1
10710        mov     r2,#ASC"l"
10720        strb    r2,[r0],#1
10730        mov     r2,#ASC"e"
10740        strb    r2,[r0],#1
10750        mov     r1,r0                   ; r1 = buffer to store converted number
10760        mov     r0,r3                   ; r0 = filetype
10770        mov     r2,#5                   ; size of buffer
10780        swi     "XOS_ConvertHex4"
10790        bvs     fatal_error
10800        mov     r2,#ASC"_"
10810        strb    r2,[r0]
10820        sub     r2,r0,#4                ; r2 -> sprite name
10830        bl      see_if_sprite_exists
10840        movvs   r0,r2                   ; r0 -> where to put sprite name
10850        adrvs   r2,file_xxx             ; sprite wasn't found so use
10860        bvs     no_filetype_loop        ; file_xxx instead
10870        b       finish_dataload
10880.application
10890        ldr     r2,[r4,#offset_to_leafname]
10900        add     r2,r2,r4
10910        bl      see_if_sprite_exists
10920        adrvs   r2,application_sprite   ; use "application" as sprite name
10930                                        ; as sprite could not be found
10940        b       no_filetype_loop
10950
10960.application_sprite
10970        equs    "application"+CHR$0
10980.directory
10990        equs    "directory"+CHR$0
11000.file_xxx
11010        equs    "file_xxx"+CHR$0
11020        align
11030
11040.no_filetype
11050        cmp     r3,#&2000
11060        adrlt   r2,directory
11070        beq     application
11080        adrgt   r2,file_xxx
11090.no_filetype_loop
11100        ldrb    r3,[r2],#1
11110        strb    r3,[r0],#1
11120        teq     r3,#0
11130        bne     no_filetype_loop
11140
11150.finish_dataload
11160        adr     r1,workspace+&c00
11170        sub     r1,r1,#&c00
11180        swi     "XWimp_CreateIcon"
11190        bvs     fatal_error
11200        strb    r0,[r4,#icon_handle]
11210        mov     r0,#0
11220        strb    r0,[r4,#selected]
11230        ldr     r0,[r1]                 ; r0 = window handle
11240        ldr     r2,[r1,#8]              ; r2 = min y
11250        ldr     r3,[r1,#12]             ; r3 = max x
11260        ldr     r4,[r1,#16]             ; r4 = max y
11270        ldr     r1,[r1,#4]              ; r1 = min x
11280        swi     "XWimp_ForceRedraw"
11290        bvs     fatal_error
11300        ldrb    r0,number_of_icons
11310        add     r0,r0,#1
11320        strb    r0,number_of_icons
11330        adr     r1,poll_space+&c00
11340        sub     r1,r1,#&c00
11350        ldr     r0,[r1,#12]
11360        strb    r0,[r1,#8]
11370        ldr     r2,[r1,#4]              ; reply to sender
11380        mov     r0,#17                  ; no reply needed
11390        swi     "XWimp_SendMessage"
11400        bvs     fatal_error
11410        b       poll
11420
11430.no_more_memory_error
11440        adr     r0,no_more_memory_error_block
11450        bl      report_error_ok
11460        b       poll
11470.no_more_memory_error_block
11480        equd    0
11490        equs    "Not enough free memory"+CHR$0
11500        align
11510.icon_flags
11520        equd    1+(1 << 1)+(1 << 3)+(1 << 5)+(1 << 8)+(10 << 12)+(7 << 24)+(4 << 28)
11530
11540; -----------------------------------------------------------------------------
11550; we have received a datasaveack message
11560
11570.datasaveack
11580        ldr     r0,[r1,#12]
11590        ldr     r2,message_myref
11600        teq     r0,r2                   ; check we originated it
11610        bne     poll
11620        swi     "XHourglass_On"         ; don't report errors as may have
11630                                        ; been unplugged
11640        mov     r0,#26                  ; copy
11650        add     r2,r1,#44               ; r2 -> destination filename
11660        ldr     r1,datasave_where_up_to
11670        add     r1,r1,#filename         ; r1 -> source filename
11680        mov     r3,#1                   ; flags for copy
11690        swi     "XOS_FSControl"
11700        bvc     copy_ok
11710        swi     "XHourglass_Off"        ; don't report errors as may have
11720                                        ; been unplugged
11730        bl      report_error_ok
11740        b       send_datasaveload_message_continue
11750.copy_ok
11760        swi     "XHourglass_Off"        ; don't report errors as may have
11770                                        ; been unplugged
11780        adr     r1,poll_space+&c00
11790        sub     r1,r1,#&c00
11800        ldr     r0,[r1,#12]
11810        str     r0,[r1,#8]
11820        mov     r0,#3                   ; dataload message
11830        str     r0,[r1,#16]
11840        mov     r0,#18                  ; reply needed
11850        ldr     r2,[r1,#4]              ; reply to sender
11860        swi     "XWimp_SendMessage"
11870        bvs     fatal_error
11880        ldr     r0,[r1,#8]
11890        str     r0,message_myref
11900        b       poll                    ; poll so that we receive reply
11910
11920; -----------------------------------------------------------------------------
11930; we have received a dataloadack message
11940
11950.dataloadack
11960        ldr     r0,[r1,#12]
11970        ldr     r2,message_myref
11980        teq     r0,r2                   ; check we originated it
11990        bne     poll
12000        ldrb    r0,delete_after_drag
12010        teq     r0,#42                  ; see if response to dataopen message
12020        beq     poll                    ; if so just poll
12030        teq     r0,#&ff                 ; see whether to delete icon
12040        ldreq   r4,datasave_where_up_to
12050        ldr     r0,[r4,#next]           ; this will be changed by freeing heap
12060                                        ; block
12070        bleq    remove_icon
12080        mov     r4,r0
12090        adr     r1,poll_space+&c00
12100        sub     r1,r1,#&c00
12110        b       send_datasaveload_message_continue2
12120
12130; -----------------------------------------------------------------------------
12140; see if a sprite exists in the wimp_sprite pool
12150; entry
12160;       r2 -> sprite name
12170; exit
12180;       v unset => sprite found
12190;           set => sprite not found
12200
12210.see_if_sprite_exists
12220        stmfd   r13!,{r0,r3-r6}
12230        mov     r0,#40                  ; read sprite info
12240        swi     "XWimp_SpriteOp"
12250        ldmfd   r13!,{r0,r3-r6}
12260        mov     pc,r14
12270
12280; -----------------------------------------------------------------------------
12290; The nice wimp has sent us a message acknowledgement
12300
12310.message_acknowledged
12320        ldr     r0,[r1,#8]
12330        ldr     r2,message_myref
12340        cmp     r0,r2                   ; see if one our message
12350        bne     poll                    ; poll otherwise, can this happen ?
12360        ldr     r0,[r1,#16]
12370        teq     r0,#1                   ; see if datasave message
12380        beq     datasave_not_acknowledged
12390        teq     r0,#3                   ; see if dataload message
12400        beq     dataload_not_acknowledged
12410        teq     r0,#5                   ; see if dataopen message
12420        bne     poll                    ; if not poll
12430        ldr     r0,[r1,#40]             ; get filetype
12440        cmp     r0,#&1000               ; see if directory
12450        adreq   r2,filer_opendir_command
12460        adrne   r2,run_command
12470        add     r0,r1,#30               ; r0 -> where to put command
12480.message_ack_loop
12490        ldrb    r3,[r2],#1
12500        teq     r3,#0
12510        strneb  r3,[r0],#1
12520        bne     message_ack_loop
12530        add     r0,r1,#30               ; r0 -> command
12540        swi     "XWimp_StartTask"
12550        bvs     fatal_error
12560        b       poll
12570.filer_opendir_command
12580        equs    "Filer_OpenDir "+CHR$0
12590.run_command
12600        equs    "Run           "+CHR$0
12610        align
12620
12630.datasave_not_acknowledged
12640        beq     send_datasaveload_message_continue
12650
12660.dataload_not_acknowledged
12670        b       send_datasaveload_message_continue
12680
12690; -----------------------------------------------------------------------------
12700; heap handling routines
12710
12720; -----------------------------------------------------------------------------
12730; get a heap block. If fails try and extend wimp_slot
12740; entry
12750;       r3 = size wanted
12760; exit
12770;       r2 -> heap block if succeeded
12780;       r2 = 0 if failed, r3 corrupted in this case
12790
12800.get_heap_block
12810        stmfd   r13!,{r0-r1,r4-r6,r14}
12820        mov     r6,r3
12830        mov     r0,#2                   ; get heap block
12840        adr     r1,heap_start-&800
12850        add     r1,r1,#&800
12860        swi     "XOS_Heap"
12870        ldmvcfd r13!,{r0-r1,r4-r6,pc}   ; if succeeded return
12880        mvn     r0,#0
12890        mov     r1,r0
12900        swi     "XWimp_SlotSize"
12910        bvs     fatal_error
12920        mov     r5,r0                   ; store old size
12930        add     r0,r0,#8*1024           ; we want some more memory
12940        mvn     r1,#0
12950        swi     "XWimp_SlotSize"
12960        movvs   r2,#0                   ; r2 = 0 if failed
12970        ldmvsfd r13!,{r0-r1,r4-r6,pc}   ; then return
12980        sub     r3,r0,r5                ; r3 = amount of new memory we got
12990        adr     r1,heap_start-&800
13000        add     r1,r1,#&800
13010        mov     r0,#5                   ; extend heap
13020        swi     "XOS_Heap"
13030        bvs     fatal_error
13040        mov     r0,#2                   ; get heap block
13050        mov     r3,r6
13060        swi     "XOS_Heap"
13070        bvs     fatal_error             ; we should succeed this time
13080        ldmfd   r13!,{r0-r1,r4-r6,pc}
13090
13100; -----------------------------------------------------------------------------
13110; free a heap block
13120; entry
13130;       r4 -> heap block
13140
13150.free_heap_block
13160        stmfd   r13!,{r0-r2}
13170        mov     r0,#3                   ; free heap block
13180        adr     r1,heap_start-&400
13190        add     r1,r1,#&400
13200        mov     r2,r4
13210        swi     "XOS_Heap"
13220        bvs     fatal_error
13230        ldmfd   r13!,{r0-r2}
13240        mov     pc,r14
13250
13260; -----------------------------------------------------------------------------
13270; search the linked list for an icon
13280; entry
13290;       r2 = icon handle
13300; exit
13310;       r4 -> data entry in linked list
13320
13330.find_icon
13340        stmfd   r13!,{r3}
13350        ldr     r4,start_linked_list
13360.find_icon_loop
13370        ldrb    r3,[r4,#icon_handle]
13380        teq     r3,r2
13390        ldmeqfd r13!,{r3}
13400        moveq   pc,r14
13410        ldr     r4,[r4,#next]
13420        b       find_icon_loop
13430
13440; -----------------------------------------------------------------------------
13450; select an icon on the background
13460; entry
13470;       r2 = icon handle
13480
13490.select_icon
13500        stmfd   r13!,{r1,r3}
13510        adr     r1,workspace+&1000
13520        sub     r1,r1,#&1000
13530        ldr     r3,background_window_handle
13540        str     r3,[r1]
13550        str     r2,[r1,#4]
13560        mov     r3,#1 << 21
13570        str     r3,[r1,#8]
13580        str     r3,[r1,#12]
13590        swi     "XWimp_SetIconState"
13600        bvs     fatal_error
13610        ldmfd   r13!,{r1,r3}
13620        movs    pc,r14
13630
13640; -----------------------------------------------------------------------------
13650; unselect the sprite selected by menu
13660
13670.unselect_menu_selected_icon
13680        stmfd   r13!,{r3-r4,r14}
13690        ldr     r4,start_linked_list
13700.unselect_menu_selected_icon_loop
13710        ldrb    r3,[r4,#selected]
13720        teq     r3,#2                   ; see if menu selected
13730        ldrne   r4,[r4,#next]
13740        bne     unselect_menu_selected_icon_loop
13750        bl      unselect_icon
13760        mov     r3,#0
13770        strb    r3,number_selected
13780        ldmfd   r13!,{r3-r4,pc}
13790
13800; -----------------------------------------------------------------------------
13810; unselect an icon on the background. and unsets flags in data entry
13820; entry
13830;       r4 -> data_entry
13840
13850.unselect_icon
13860        stmfd   r13!,{r1,r3}
13870        ldrb    r3,[r4,#selected]
13880        teq     r3,#1                   ; see if selected
13890        ldmnefd r13!,{r1,r3}            ; not so restore r1,r3
13900        movnes  pc,r14                  ; then return
13910        adr     r1,workspace+&1000
13920        sub     r1,r1,#&1000
13930        ldr     r3,background_window_handle
13940        str     r3,[r1]
13950        ldrb    r3,[r4,#icon_handle]
13960        str     r3,[r1,#4]
13970        mov     r3,#0
13980        str     r3,[r1,#8]
13990        mov     r3,#1 << 21
14000        str     r3,[r1,#12]
14010        swi     "XWimp_SetIconState"
14020        bvs     fatal_error
14030        mov     r3,#0
14040        strb    r3,[r4,#selected]       ; store as unselected
14050        ldmfd   r13!,{r1,r3}
14060        movs    pc,r14
14070
14080; -----------------------------------------------------------------------------
14090; unselect all icons and set number of selected icons to zero
14100
14110.unselect_all
14120        stmfd   r13!,{r2,r4,r14}
14130        ldr     r4,start_linked_list
14140        teq     r4,#0                   ; see if no icons exist
14150        ldmeqfd r13!,{r2,r4,pc}         ; if so return
14160.clear_selection_loop
14170        bl      unselect_icon
14180        ldr     r4,[r4]
14190        teq     r4,#0
14200        bne     clear_selection_loop
14210        strb    r4,number_selected
14220        ldmfd   r13!,{r2,r4,pc}^
14230
14240; -----------------------------------------------------------------------------
14250; This routine reads the screen size in external coordinates
14260
14270.read_screen_size
14280        stmfd   r13!,{r14}
14290        mvn     r0,#0                   ; read about current mode
14300        mov     r1,#4                   ; r1 = XEigFactor
14310        swi     "XOS_ReadModeVariable"
14320        bvs     fatal_error
14330        mov     r3,r2
14340        mov     r1,#11                  ; r1 = XWindLimit
14350        swi     "XOS_ReadModeVariable"
14360        bvs     fatal_error
14370        mov     r2,r2,lsl r3
14380        str     r2,screen_maxx
14390        str     r2,workarea_maxx
14400        mov     r1,#5                   ; r1 = YEigFactor
14410        swi     "XOS_ReadModeVariable"
14420        bvs     fatal_error
14430        mov     r3,r2
14440        mov     r1,#12                  ; r1 = YWindLimit
14450        swi     "XOS_ReadModeVariable"
14460        bvs     fatal_error
14470        mov     r2,r2,lsl r3
14480        str     r2,screen_maxy
14490        str     r2,workarea_maxy
14500        str     r2,scroll_y
14510        mov     r0,#1
14520        strb    r0,mode_changed
14530        ldmfd   r13!,{pc}^              ; preserve flags
14540
14550; -----------------------------------------------------------------------------
14560; closedown and exit
14570
14580.closedown_and_exit
14590        bl      closedown
14600        swi     "OS_Exit"
14610
14620; -----------------------------------------------------------------------------
14630; either we could not start up, the user wants us to closedown or we have
14640; had a module finalisation call
14650
14660.closedown
14670        adr     r1,task_handle+&1000
14680        sub     r1,r1,#&1000
14690        ldr     r0,[r1]
14700        ldr     r1,[r1,#task-task_handle]
14710        swi     "XWimp_CloseDown"       ; close down if so
14720        mov     pc,r14
14730
14740; -----------------------------------------------------------------------------
14750; misc flags and data
14760
14770.mode_changed
14780        equb    0
14790.icon_text_colour
14800        equb    1
14810.delete_after_drag
14820        equb    0
14830.number_of_icons
14840        equb    0
14850.number_selected
14860        equb    0
14870.save_to_filer
14880        equb    0
14890        align
14900.button_state
14910.heap_entry_length
14920.message_myref
14930        equd    0
14940
14950; -----------------------------------------------------------------------------
14960; define the background window. v set if error occurred
14970
14980.define_background_window
14990        stmfd   r13!,{r14}
15000        bl      read_screen_size
15010        adr     r1,background_window
15020        swi     "XWimp_CreateWindow"
15030        ldmvsfd r13!,{pc}
15040        adr     r1,background_window_handle
15050        str     r0,[r1]
15060        swi     "XWimp_OpenWindow"
15070        ldmfd   r13!,{pc}
15080
15090; -----------------------------------------------------------------------------
15100; background window data block
15110
15120.background_window_handle
15130        equd    0
15140.background_window
15150        equd    0
15160        equd    136
15170.screen_maxx
15180        equd    0
15190.screen_maxy
15200        equd    0
15210        equd    0
15220.scroll_y
15230        equd    0
15240        equd    -2                      ; open at bottom
15250        equd    (1 << 4)+(1 << 11)+(1 << 31)
15260        equb    &ff
15270        equb    0
15280        equb    7
15290        equb    4                       ; window background colour
15300        equb    0
15310        equb    0
15320        equb    0
15330        equb    0
15340.workarea_coords
15350        equd    0
15360        equd    136
15370.workarea_maxx
15380        equd    0
15390.workarea_maxy
15400        equd    0
15410        equd    0
15420        equd    3 << 12                 ; workarea button type = 3
15430        equd    1                       ; use wimp sprite area
15440        equd    0
15450        equs    STRING$(12,CHR$0)       ; no title
15460        equd    0                       ; no icons defined orignally
15470
15480; -----------------------------------------------------------------------------
15490; define the info window and store it's handle. v set if error occured
15500
15510.define_info_window
15520        stmfd   r13!,{r14}
15530        adr     r1,info_window
15540        swi     "XWimp_CreateWindow"
15550        strvc   r0,info_window_handle
15560        ldmfd   r13!,{pc}               ; v will be set if error occured
15570
15580; -----------------------------------------------------------------------------
15590; information about info window
15600
15610.window_title
15620        equs    "About this program"+CHR$0
15630.end_window_title
15640        align
15650.name
15660        equs    "Place It"+CHR$0
15670.end_name
15680        align
15690.purpose
15700        equs    "Place files on the backdrop"+CHR$0
15710.end_purpose
15720        align
15730.author
15740        equs    "pmf@uk.ac.warwick.cs"+CHR$0
15750.end_author
15760        align
15770.version
15780        equs    "1.03 (19-Jan-91)"+CHR$0
15790.end_version
15800        align
15810
15820.info_window
15830        equd    0
15840        equd    0
15850        equd    636
15860        equd    216
15870        equd    0
15880        equd    0
15890        equd    -1
15900        equd    (1 << 31)+(1 << 26)+(1 << 4)+(1 << 1)
15910        equb    7
15920        equb    2
15930        equb    7
15940        equb    1
15950        equd    0
15960        equd    0
15970        equd    -216
15980        equd    636
15990        equd    0
16000        equd    (1 << 8)+(1 << 4)+(1 << 3)+1
16010        equd    0
16020        equd    0
16030        equd    0
16040        equd    window_title
16050        equd    -1
16060        equd    end_window_title-window_title
16070        equd    8
16080        equd    58
16090        equd    -48
16100        equd    154
16110        equd    -8
16120        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
16130        FNstring("Name")
16140        equd    14
16150        equd    -100
16160        equd    154
16170        equd    -60
16180        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
16190        FNstring("Purpose")
16200        equd    30
16210        equd    -152
16220        equd    154
16230        equd    -112
16240        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
16250        FNstring("Author")
16260        equd    14
16270        equd    -200
16280        equd    154
16290        equd    -160
16300        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
16310        FNstring("Version")
16320        equd    154
16330        equd    -52
16340        equd    630
16350        equd    -4
16360        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
16370        equd    name
16380        equd    -1
16390        equd    end_name-name
16400        equd    154
16410        equd    -104
16420        equd    630
16430        equd    -56
16440        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
16450        equd    purpose
16460        equd    -1
16470        equd    end_purpose-purpose
16480        equd    154
16490        equd    -156
16500        equd    630
16510        equd    -108
16520        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
16530        equd    author
16540        equd    -1
16550        equd    end_author-author
16560        equd    154
16570        equd    -208
16580        equd    630
16590        equd    -160
16600        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
16610        equd    version
16620        equd    -1
16630        equd    end_version-version
16640
16650; -----------------------------------------------------------------------------
16660; set initial conditions
16670
16680.set_initial_conditions
16690        mvn     r0,#0
16700        mov     r1,r0
16710        swi     "XWimp_SlotSize"
16720        movvs   pc,r14
16730        adr     r1,heap_start
16740        sub     r3,r0,r1
16750        add     r3,r3,#&8000            ; r3 = amount of memory spare
16760        mov     r0,#0                   ; initialise heap
16770        str     r0,start_linked_list
16780        swi     "XOS_Heap"
16790        mov     pc,r14                  ; return with v set accordingly
16800
16810; -----------------------------------------------------------------------------
16820; load the !Config file if it exists
16830
16840.load_config_file
16850        stmfd   r13!,{r14}
16860        mov     r0,#&47                 ; open file, complain if is a directory
16870                                        ; no search path
16880        adr     r1,config_filename+&800
16890        sub     r1,r1,#&800
16900        swi     "XOS_Find"
16910        ldmvsfd r13!,{pc}
16920        movs    r1,r0                   ; r1 = filehandle, set flags
16930        ldmeqfd r13!,{pc}               ; if file not found return
16940        swi     "XOS_BGet"              ; get icon text colour
16950        bvs     read_error
16960        bcs     config_file_ended_unexpectedly
16970        strb    r0,icon_text_colour
16980        str     r0,black_text_tick
16990
17000        rsb     r2,r0,#&81
17010        str     r2,white_text_tick
17020
17030        teq     r0,#0                   ; see if icon text white
17040        ldreq   r0,icon_flags
17050        biceq   r0,r0,#7 << 24          ; see text colour white
17060        streq   r0,icon_flags
17070
17080        swi     "XOS_BGet"              ; get number of icons
17090        bvs     read_error
17100        bcs     config_file_ended_unexpectedly
17110        strb    r0,number_of_icons
17120        adr     r5,start_linked_list
17130        teq     r0,#0
17140        beq     load_config_file_done
17150
17160.load_config_file_loop
17170        mov     r0,#4                   ; read bytes using current csp
17180        adr     r2,heap_entry_length
17190        mov     r3,#4                   ; read four bytes
17200        swi     "XOS_GBPB"
17210        bvs     read_error
17220        bcs     config_file_ended_unexpectedly
17230        ldr     r3,heap_entry_length
17240        teq     r3,#0
17250        beq     load_config_file_done
17260        bl      get_heap_block
17270        teq     r2,#0
17280        adreq   r0,ran_out_of_memory_during_load
17290        beq     read_error
17300        str     r2,[r5,#next]           ; store pointer to next data set
17310        mov     r5,r2                   ; update previous data set pointer
17320        str     r3,[r2,#size]
17330        add     r2,r2,#offset_to_leafname ; skip next ans size entries
17340        sub     r3,r3,#offset_to_leafname ; in linked list entry
17350        swi     "XOS_GBPB"
17360        bvs     read_error
17370        bcs     config_file_ended_unexpectedly
17380        b       load_config_file_loop
17390
17400.load_config_file_done
17410        mov     r0,#0
17420        strb    r0,number_selected      ; no icons selected
17430        str     r0,[r5,#next]           ; mark end of linked list
17440        mov     r0,#0
17450        swi     "XOS_Find"
17460        blvs    report_error_ok
17470        ldr     r4,start_linked_list
17480        teq     r4,#0
17490        ldmeqfd r13!,{pc}
17500
17510.load_config_file_loop2
17520        mov     r0,#0
17530        strb    r0,[r4,#selected]       ; mark icon as unselected
17540        ldr     r0,[r4,#filetype]
17550        teq     r0,#&2000               ; see if application
17560        bleq    boot_application
17570        ldr     r4,[r4,#next]
17580        teq     r4,#0
17590        bne     load_config_file_loop2
17600
17610        ldr     r4,start_linked_list
17620        adr     r1,workspace+&1400
17630        sub     r1,r1,#&1400
17640        ldr     r0,background_window_handle
17650        str     r0,[r1]
17660.load_config_file_loop3
17670        ldr     r0,[r4,#x_position]
17680        str     r0,[r1,#4]
17690        add     r0,r0,#10*16
17700        str     r0,[r1,#12]
17710        ldr     r0,[r4,#y_position]
17720        str     r0,[r1,#8]
17730        add     r0,r0,#108
17740        str     r0,[r1,#16]
17750        ldr     r0,icon_flags
17760        str     r0,[r1,#20]
17770        ldr     r0,[r4,#offset_to_leafname]
17780        add     r0,r0,r4
17790        str     r0,[r1,#24]
17800        add     r0,r4,#sprite_name
17810        str     r0,[r1,#28]
17820        mov     r0,#12
17830        str     r0,[r1,#32]
17840        swi     "XWimp_CreateIcon"
17850        ldmvsfd r13!,{pc}
17860        strb    r0,[r4,#icon_handle]
17870        ldr     r4,[r4,#next]
17880        teq     r4,#0
17890        bne     load_config_file_loop3
17900        ldmfd   r13!,{pc}
17910
17920.read_error
17930        mov     r2,r0                   ; store error pointer
17940        mov     r0,#0                   ; close file
17950        swi     "XOS_Find"              ; ignore errors
17960        mov     r0,r2                   ; restore error pointer
17970        bl      report_error_ok
17980        ldmfd   r13!,{pc}
17990
18000.config_file_ended_unexpectedly
18010        adr     r0,config_file_ended_unexpectedly_error
18020        b       read_error
18030.config_file_ended_unexpectedly_error
18040        equd    0
18050        equs    "The config file ended unexpectedly. I recommend deleting the "
18060        equs    "config file and starting again"+CHR$0
18070        align
18080
18090.ran_out_of_memory_during_load
18100        equd    0
18110        equs    "Ran out of memory during load. I recomend you quit me"+CHR$0
18120        align
18130
18140; -----------------------------------------------------------------------------
18150; run a the !Boot file in the application directory
18160; if this can't be found do *IconSprites !Sprites instead
18170; entry
18180;       r4 -> linked list entry
18190
18200.boot_application
18210        stmfd   r13!,{r0-r3,r5-r7,r14}
18220        add     r2,r4,#sprite_name+1
18230        bl      see_if_sprite_exists
18240        ldmvcfd r13!,{r0-r3,r5-r7,pc}   ; sprite exists so return
18250        adr     r0,poll_space+&1400+4   ; +4 to allow for "Run " infront
18260        sub     r0,r0,#&1400
18270        add     r1,r4,#filename
18280.boot_application_loop
18290        ldrb    r2,[r1],#1
18300        strb    r2,[r0],#1
18310        teq     r2,#0
18320        bne     boot_application_loop
18330        mov     r2,#ASC"."
18340        strb    r2,[r0,#-1]             ; replace CHR$0 with "."
18350        mov     r7,r0                   ; store leafname pointer
18360        adr     r1,pling_boot           ; r1 -> !Boot
18370.boot_application_loop2
18380        ldrb    r2,[r1],#1
18390        strb    r2,[r0],#1
18400        teq     r2,#0
18410        bne     boot_application_loop2
18420        mov     r0,#17                  ; read catalogue info no path
18430        adr     r1,poll_space+&1400+4
18440        sub     r1,r1,#&1400
18450        mov     r6,r4                   ; preserve r4
18460        swi     "XOS_File"
18470        mov     r4,r6                   ; restore r4
18480        bvc     catalogue_read_ok
18490        bl      report_error_ok
18500        ldmfd   r13!,{r0-r3,r5-r7,pc}
18510.catalogue_read_ok
18520        teq     r0,#0                   ; see if object found
18530        beq     pling_boot_not_found
18540        adr     r0,poll_space+&1400
18550        sub     r0,r0,#&1400
18560        ldr     r2,run                  ; r2 = "Run "
18570        str     r2,[r0]
18580        swi     "XWimp_StartTask"
18590        bvs     fatal_error
18600        ldmfd   r13!,{r0-r3,r5-r7,pc}
18610.run
18620        equs    "Run "
18630
18640.pling_boot_not_found
18650        adr     r1,pling_sprites        ; r1 -> !Sprites
18660.boot_application_loop3
18670        ldrb    r2,[r1],#1
18680        strb    r2,[r7],#1
18690        teq     r2,#0
18700        bne     boot_application_loop3
18710        mov     r0,#11                  ; merge sprites (ie *IconSprites)
18720        adr     r2,poll_space+&1400+4
18730        sub     r2,r2,#&1400
18740        swi     "XWimp_SpriteOp"
18750        blvs    report_error_ok
18760        ldmfd   r13!,{r0-r3,r5-r7,pc}
18770
18780.pling_boot
18790        equs    "!Boot"+CHR$0
18800.pling_sprites
18810        equs    "!Sprites"+CHR$0
18820        align
18830
18840; -----------------------------------------------------------------------------
18850; report an error using Wimp_ReportError then closedown
18860; entry
18870;       r0 -> error block
18880; exit
18890;       doesn't
18900
18910.fatal_error
18920        adr     r1,poll_space+&1800
18930        sub     r1,r1,#&1800
18940        ldr     r2,[r0],#4
18950        str     r2,[r1],#4
18960        adr     r2,fatal_error_message
18970.fatal_error_loop1
18980        ldrb    r3,[r2],#1
18990        cmp     r3,#0
19000        strneb  r3,[r1],#1
19010        bne     fatal_error_loop1
19020.fatal_error_loop2
19030        ldrb    r3,[r0],#1
19040        cmp     r3,#0
19050        strneb  r3,[r1],#1
19060        bne     fatal_error_loop2
19070.fatal_error_loop3
19080        ldrb    r3,[r2],#1
19090        strb    r3,[r1],#1
19100        cmp     r3,#0
19110        bne     fatal_error_loop3
19120        adr     r0,poll_space+&1800
19130        sub     r0,r0,#&1800
19140        mov     r1,#2                   ; cancel only
19150        bl      report_error
19160        bl      closedown
19170        swi     "OS_Exit"
19180.fatal_error_message
19190        equs    "PlaceIt has suffered a fatal internal error ("+CHR$0
19200        equs    ") and must exit immediately"+CHR$0
19210        align
19220
19230; -----------------------------------------------------------------------------
19240; report an error using Wimp_ReportError
19250; entry
19260;       r0 -> error block
19270;       r1 =  flags for error window
19280;          bit 0 set ==> provide 'OK' box in error window
19290;          bit 1 set ==> provide 'Cancel' box
19300;          bit 2 set ==> highlight 'Cancel' box (otherwise highlight 'OK')
19310;          bit 3 set ==> don't wait for confirmation if this is a 'text' error
19320;          bit 4 set ==> omit 'Error from ' message in title bar
19330;          bit 5 set ==> return with r1=0 immediately if buttons not clicked
19340;                        the error window is also left open
19350;          bit 6 set ==> select OK/Cancel depending on r1, close error window
19360;          bits 7..31 reserved (must be 0)
19370; exit
19380;       r1 = return status
19390;               1 ==> 'OK' was selected
19400;               2 ==> 'Cancel' was selected
19410;       flags preserved
19420;       r2 corrupted
19430
19440.report_error_ok
19450        mov     r1,#1
19460.report_error
19470        stmfd   r13!,{r14}
19480        adr     r2,switcher_name+&1800
19490        sub     r2,r2,#&1800            ; r2 -> "PlaceIt"
19500        swi     "Wimp_ReportError"
19510        ldmfd   r13!,{pc}^              ; preserve flags
19520
19530; -----------------------------------------------------------------------------
19540; information about the linked list and heap
19550
19560.start_linked_list
19570        equd    0
19580.heap_start
19590]
19600NEXT
19610PRINT ~O%-code%;" = ";(O%-code%)/1024;" K"
19620OSCLI "Save !RunImage "+STR$~code%+" "+STR$~O%
19630*SetType !RunImage Absolute
19640*Key 1 TWINO 8|M
19650*Key 2 Load !PlaceIt|M
19660*Key 3 SAVE|MRUN|M
19670*Key 4 *DeskTop|M
19680END
19690
19700DEF FNstring(text$)
19710IF LEN(text$)>12 THEN ERROR 0,text$+" is longer than 12 characters"
19720[       opt    opt%
19730        equs    text$
19740]
19750IF LEN(text$)<12 THEN
19760[       opt    opt%
19770        equs    STRING$(12-LEN(text$),CHR$0)
19780]
19790ENDIF
19800=0

� > !PlaceIt
7�   by Ian Ashley (pmf@uk.ac.warwick.cs) on 6/10/90
!�   Update to 1.03 on 19/1/91
(
22space%=&2000                            : � 8K
<
Fv_flag=1 << 28
P
Zstacklen% = 32
d
nE� format of each data entry in the linked list (stored as a heap)
x
� next                     = 0
� size                     = 4
� offset_to_leafname       = 8
�!icon_handle              = 12
�!selected                 = 13
�!x_position               = 16
�!y_position               = 20
�!sprite_name              = 24
�!filetype                 = 40
�!filename                 = 44
�
�)� needed to stop errors on first pass
�
$background_window_handle = &9000
$mode_changed             = &9000
$number_selected          = &9400
"$start_linked_list        = &9800
,0heap_start               = start_linked_list
6
@� code% space%
J
T� opt%=12 � 14 � 2
^P%=&8000
hO%=code%
rHL%=code%+space%                         : � Upper limit for assembly
|[
�        opt     opt%
�        adr     r13,stack
�        ldr     r1,task
�B        mov     r0,#200                 ; last known wimp 2.00
�>        adr     r2,switcher_name        ; r2 -> "Place It"
�&        swi     "XWimp_Initialise"
�!        bvs     startup_error
�"        str     r1,task_handle
�!        bvs     startup_error
�,        bl      define_background_window
�!        bvs     startup_error
�&        bl      define_info_window
�!        bvs     startup_error
*        bl      set_initial_conditions
!        bvs     startup_error
$        bl      load_config_file
&!        bvs     startup_error
0        b       poll
:
D.switcher_name
N        equs    "Place It"
X        equb    0
b        align
l.task_handle
v        equd    0
�	.task
�        equs    "TASK"
�
�S; -----------------------------------------------------------------------------
�N; report an error using Wimp_ReportError, set could not start up flag then
�; closedown
�; entry
�;       r0 -> error block
�
; exit
�;       doesn't
�
�.startup_error
�!        adr     r1,poll_space
        ldr     r2,[r0],#4
        str     r2,[r1],#4
,        adr     r2,startup_error_message
 .startup_error_loop1
*        ldrb    r3,[r2],#1
4        cmp     r3,#0
>        strneb  r3,[r1],#1
H'        bne     startup_error_loop1
R.startup_error_loop2
\        ldrb    r3,[r0],#1
f        cmp     r3,#0
p        strneb  r3,[r1],#1
z'        bne     startup_error_loop2
�.startup_error_loop3
�        ldrb    r3,[r2],#1
�        strb    r3,[r1],#1
�        cmp     r3,#0
�'        bne     startup_error_loop3
�!        adr     r0,poll_space
�9        mov     r1,#2                   ; cancel only
�         bl      report_error
�        bl      closedown
�        swi     "OS_Exit"
�.startup_error_message
�4        equs    "PlaceIt could not startup ("+�0
�4        equs    ") and must exit immediately"+�0
        align

S; -----------------------------------------------------------------------------
$%; poll space, workspace and stack
.
8.poll_space
B        equs    �128,�0)
L        equs    �128,�0)
V.workspace
`        equs    �60,�0)
j.stack_start
t"        equs    �stacklen%,�0)
~
.stack
�
�S; -----------------------------------------------------------------------------
�; wimp poll loop
�
�	.poll
�2        mov     r0,#%110001             ; Mask
�!        adr     r1,poll_space
�         swi     "XWimp_Poll"
�        bvs     fatal_error
�        teq     r0,#1
�!        beq     redraw_window
�        teq     r0,#2
        beq     open_window

        teq     r0,#3
         beq     close_window
        teq     r0,#6
(         beq     mouse_button
2        teq     r0,#7
<        beq     drag_end
F        teq     r0,#9
P        beq     menu_select
Z        teq     r0,#17
d        teqne   r0,#18
n        beq     message
x        teq     r0,#19
�(        beq     message_acknowledged
�        b       poll
�
�S; -----------------------------------------------------------------------------
�); redraw window request has been sent
�
�.redraw_window
�(        swi     "XWimp_RedrawWindow"
�        bvs     fatal_error
�        b       poll
�
�S; -----------------------------------------------------------------------------
�'; open window request has been sent

.open_window
)        adr     r2,mode_changed-&1000
"         add     r2,r2,#&1000
,        ldrb    r0,[r2]
6J        teq     r0,#1                   ; see if mode has just changed
@5        adreq   r1,background_window_handle-&1000
J         addeq   r1,r1,#&1000
T        moveq   r0,#0
^        streqb  r0,[r2]
h&        swi     "XWimp_OpenWindow"
r        bvs     fatal_error
|        b       poll
�
�S; -----------------------------------------------------------------------------
�(; close window request has been sent
�
�.close_window
�'        swi     "XWimp_CloseWindow"
�        bvs     fatal_error
�        b       poll
�
�S; -----------------------------------------------------------------------------
�'; mouse click request has been sent
�
�.mouse_button
G        ldr     r0,[r1,#12]             ; r0=window handle of click
5        adr     r2,background_window_handle-&1000
         add     r2,r2,#&1000
&        ldr     r2,[r2]
0C        cmp     r0,r2                   ; is it on our window ?
:9        bne     poll                    ; poll if not
D=        ldr     r0,[r1,#8]              ; r0=button state
NJ        tst     r0,#2                   ; see if middle button clicked
X=        bne     open_menu               ; if so open menu
bG        ldr     r2,[r1,#16]             ; r2=icon handle clicked on
l@        cmn     r2,#1                   ; see if not on icon
vP        moveq   r0,r0,lsl #8            ; if shift button state to right pos
�K        tst     r0,#%101                ; see if button doubled clicked
�"        bne     double_clicked
�A        tst     r0,#%101 * 16           ; see if drag started
�         bne     drag_started
�C        tst     r0,#%001 * 256          ; see if adjust clicked
�"        bne     adjust_clicked
�.select_clicked
�@        cmn     r2,#1                   ; see if on workarea
�@        bleq    unselect_all            ; if so unselect all
�7        beq     poll                    ; then poll
�        bl      find_icon
�%        ldrb    r3,[r4,#selected]
�=        teq     r3,#1                   ; see if selected
8        beq     poll                    ; if so poll
         bl      unselect_all
9        bl      select_icon             ; select icon
         mov     r2,#1
*,        adr     r3,number_selected-&1000
4         add     r3,r3,#&1000
>        strb    r2,[r3]
H%        strb    r2,[r4,#selected]
R        b       poll
\.adjust_clicked
f@        cmn     r2,#1                   ; see if on workarea
p8        beq     poll                    ; if so poll
z        bl      find_icon
�%        ldrb    r3,[r4,#selected]
�D        teq     r3,#1                   ; see if icon unselected
�A                                        ; or selected by menu
�        blne    select_icon
�!        bleq    unselect_icon
�        movne   r3,#1
�        moveq   r3,#0
�%        strb    r3,[r4,#selected]
�,        adr     r4,number_selected-&1000
�         add     r4,r4,#&1000
�        ldrb    r3,[r4]
�        addne   r3,r3,#1
�        subeq   r3,r3,#1
	        strb    r3,[r4]
	        b       poll
	.drag_started
	$H        teq     r0,#1 * 16              ; see if adjust used in drag
	.        moveq   r0,#&ff
	8        movne   r0,#0
	B(        strb    r0,delete_after_drag
	L        ldmia   r1,{r0,r2}
	V#        str     r0,drag_x_start
	`#        str     r2,drag_y_start
	j;        mov     r0,#129                 ; scan keyboard
	tB        mov     r1,#&ff                 ; scan for both shifts
	~        mov     r2,r1
	�        swi     "XOS_Byte"
	�        bvs     fatal_error
	�I        teq     r2,#&ff                 ; see if either shift pressed
	�N        streqb  r2,delete_after_drag    ; if so store so as know to delete
	�I                                        ; icon when drag has finished
	�!        adr     r1,poll_space
	�        ldr     r2,[r1,#16]
	�        bl      find_icon
	�%        ldrb    r0,[r4,#selected]
	�E        teq     r0,#1                   ; see if already selected
	�        movne   r0,#1
	�%        strneb  r0,[r4,#selected]
&        ldrneb  r0,number_selected

        addne   r0,r0,#1
&        strneb  r0,number_selected
        blne    select_icon
(         adr     r1,workspace
2J        mov     r0,#5                   ; drag fixed size rotating box
<        str     r0,[r1,#4]
FP        ldr     r2,screen_maxx          ; r2 will be min x of selected icons
PP        ldr     r3,screen_maxy          ; r3 will be min y of selected icons
ZP        mov     r4,#0                   ; r4 will be max x of selected icons
dP        mov     r5,r4                   ; r5 will be min y of selected icons
n.        adr     r6,start_linked_list-&1400
x         add     r6,r6,#&1400
�        ldr     r6,[r6]
�.drag_started_loop
�%        ldrb    r0,[r6,#selected]
�        teq     r0,#0
�*        beq     drag_started_loop_skip
�'        ldr     r0,[r6,#x_position]
�        cmp     r0,r2
�        movlt   r2,r0
�        cmp     r0,r4
�        movgt   r4,r0
�'        ldr     r0,[r6,#y_position]
�        cmp     r0,r3
�        movlt   r3,r0
        cmp     r0,r5
        movgt   r5,r0
.drag_started_loop_skip
"!        ldr     r6,[r6,#next]
,        teq     r6,#0
6%        bne     drag_started_loop
@        sub     r2,r2,#8
J        str     r2,[r1,#8]
T        sub     r3,r3,#4
^        str     r3,[r1,#12]
h!        add     r4,r4,#160+10
r        str     r4,[r1,#16]
|         add     r5,r5,#108+4
�        str     r5,[r1,#20]
�
�!        adr     r6,drag_x_min
�A        stmia   r6,{r2-r5}              ; store for later use
�
�#        ldr     r6,drag_x_start
�#        ldr     r7,drag_y_start
�
�"        ldr     r0,screen_maxx
�        sub     r0,r0,r6
�        add     r0,r0,r4
�A        str     r0,[r1,#32]             ; max x of parent box
�
"        ldr     r0,screen_maxy
        sub     r0,r0,r7
        add     r0,r0,r5
&A        str     r0,[r1,#36]             ; max y of parent box
0
:        sub     r0,r2,r6
DA        str     r0,[r1,#24]             ; min x of parent box
N
X        sub     r0,r3,r7
bA        str     r0,[r1,#28]             ; min y of parent box
l
v#        swi     "XWimp_DragBox"
�        bvs     fatal_error
�        b       poll
�.drag_x_start
�        equd    0
�.drag_y_start
�        equd    0
�.drag_x_min
�        equd    0
�.drag_y_min
�        equd    0
�.drag_x_max
�        equd    0
�.drag_y_max

        equd    0

.double_clicked

#        str     r0,button_state

         mov     r3,r2

*;        mov     r0,#129                 ; scan keyboard

4B        mov     r1,#&ff                 ; scan for both shifts

>        mov     r2,r1

H        swi     "XOS_Byte"

R        bvs     fatal_error

\        mov     r5,r2

f        mov     r2,r3

p        bl      find_icon

z%        ldrb    r3,[r4,#selected]

�=        teq     r3,#1                   ; see if selected

�!        bleq    unselect_icon

�&        ldreqb  r3,number_selected

�        subeq   r3,r3,#1

�&        streqb  r3,number_selected

�&        adr     r1,poll_space+&400

�        sub     r1,r1,#&400

�>        mov     r0,#5                   ; dataopen message

�        str     r0,[r1,#16]

�/        ldr     r0,background_window_handle

�        str     r0,[r1,#20]

�'        ldr     r0,[r4,#x_position]

�        str     r0,[r1,#28]
'        ldr     r0,[r4,#y_position]
        str     r0,[r1,#32]
L        mov     r0,#0                   ; we are originating the message
$        str     r0,[r1,#12]
.        str     r0,[r1,#36]
8%        ldr     r0,[r4,#filetype]
BM        teq     r5,#&ff                 ; see if either shift was pressed
L        bne     no_shift
V@        cmp     r0,#&2000               ; see if application
`G        subeq   r0,r0,#&1000            ; if so set it to directory
j
.no_shift
t        str     r0,[r1,#40]
~#        add     r0,r4,#filename
�        add     r2,r1,#44
�.double_clicked_loop
�        ldrb    r3,[r0],#1
�        strb    r3,[r2],#1
�        teq     r3,#0
�'        bne     double_clicked_loop
�D        sub     r2,r2,r1                ; r2 = length of message
�        add     r2,r2,#3
�8        bic     r2,r2,#3                ; word align
�        str     r2,[r1]
�:        mov     r0,#18                  ; reply needed
�?        mov     r2,#0                   ; broadcast message
'        swi     "XWimp_SendMessage"

        bvs     fatal_error
        ldr     r0,[r1,#8]
L        ldr     r2,button_state         ; must load this first as stored
(N                                        ; at same address as message_myref
2$        str     r0,message_myref
<J        tst     r2,#1                   ; see if adjust double clicked
F        blne    remove_icon
P        mov     r0,#42
ZE        strb    r0,delete_after_drag    ; tell us no drag occured
d        b       poll
n
xS; -----------------------------------------------------------------------------
�-; remove icon from screen and linked list
�; entry
�#;       r4 -> linked list entry
�
�.remove_icon
�$        stmfd   r13!,{r0-r4,r14}
�.        adr     r1,start_linked_list-&1000
�         add     r1,r1,#&1000
�.remove_icon_loop
�!        ldr     r2,[r1,#next]
�S        teq     r2,r4                   ; see if found linked list entry before
�E                                        ; the one we are deleting
�        movne   r1,r2
$        bne     remove_icon_loop
G        ldr     r2,[r4,#next]           ; remove the entry from the
9        str     r2,[r1,#next]           ; linked list
"        bl      delete_icon
,#        bl      free_heap_block
6&        ldrb    r2,number_of_icons
@        sub     r2,r2,#1
J&        strb    r2,number_of_icons
T#        ldmfd   r13!,{r0-r4,pc}
^
hS; -----------------------------------------------------------------------------
r&; delete an icon and update screen
|; entry
�#;       r4 -> linked list entry
�
�.delete_icon
�         stmfd   r13!,{r0-r4}
�#        adr     r1,delete_space
�/        ldr     r0,background_window_handle
�        str     r0,[r1]
�(        ldrb    r0,[r4,#icon_handle]
�        str     r0,[r1,#4]
�&        swi     "XWimp_DeleteIcon"
�        bvs     fatal_error
�/        ldr     r0,background_window_handle
�'        ldr     r1,[r4,#x_position]
'        ldr     r2,[r4,#y_position]
         add     r3,r1,#10*16
        add     r4,r2,#108
&'        swi     "XWimp_ForceRedraw"
0        bvs     fatal_error
:         ldmfd   r13!,{r0-r4}
D        movs    pc,r14
N.delete_space
X        equd    0
b        equd    0
l
vS; -----------------------------------------------------------------------------
�; open the menu
�
�.open_menu
�&        ldrb    r2,number_selected
�E        teq     r2,#0                   ; see if no icon selected
�F        teqne   r2,#&ff                 ; or icon selected by menu
�"        bne     icons_selected
�        teq     r2,#&ff
�/        bleq    unselect_menu_selected_icon
�=        ldr     r2,[r1,#16]             ; icon clicked on
�<        cmn     r2,#1                   ; see if on icon
�9        beq     icons_selected          ; skip if not
�        bl      find_icon
        mov     r3,#2
F        strb    r3,[r4,#selected]       ; mark as selected by menu
(        ldrb    r2,[r4,#icon_handle]
         bl      select_icon
*        mvn     r3,#0
4&        strb    r3,number_selected
>.icons_selected
H&        ldrb    r2,number_of_icons
RI        teq     r2,#0                   ; see if no icons on backdrop
\'        ldr     r3,select_all_flags
fH        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons
pH        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
z'        str     r3,select_all_flags
�
�&        ldrb    r2,number_selected
�F        teq     r2,#0                   ; see if no icons selected
�,        ldr     r3,clear_selection_flags
�Q        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons selected
�H        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
�,        str     r3,clear_selection_flags
�
�#        ldr     r3,remove_flags
�H        orreq   r3,r3,#1 << 22          ; set shaded bit if no icons
�H        bicne   r3,r3,#1 << 22          ; unset shaded bit otherwise
�#        str     r3,remove_flags
�
E        ldr     r2,[r1]                 ; r2 = mouse x coordinate
J        sub     r2,r2,#144              ; x coordinate to open menu at
E        ldr     r3,[r1,#4]              ; r3 = mouse y coordinate
$J        add     r3,r3,#16               ; y coordinate to open menu at
.         adr     r1,main_menu
8&        swi     "XWimp_CreateMenu"
B        bvs     fatal_error
L        b       poll
V
`S; -----------------------------------------------------------------------------
j; menu data blocks
t
~.main_menu
�        �string("Place It")
�        equb    7
�        equb    2
�        equb    7
�        equb    0
�        equd    256
�        equd    44
�        equd    0
�
�        equd    0
�.info_window_handle
�        equd    -1
(        equd    1+(1 << 5)+(7 << 24)

        �string("Info")

        equd    0
(         equd    display_menu
2(        equd    1+(1 << 5)+(7 << 24)
<        �string("Display")
F
P        equd    0
Z        equd    -1
d.remove_flags
n(        equd    1+(1 << 5)+(7 << 24)
x        �string("Remove")
�
�        equd    0
�        equd    -1
�.select_all_flags
�(        equd    1+(1 << 5)+(7 << 24)
�!        �string("Select all")
�
�        equd    0
�        equd    -1
�.clear_selection_flags
�1        equd    1+(1 << 5)+(1 << 8)+(7 << 24)
�.        equd    clear_selection_indirected
�        equd    -1
        equd    16

        equd    0
"        equd    -1
,1        equd    1+(1 << 5)+(1 << 8)+(7 << 24)
6,        equd    save_backdrop_indirected
@        equd    -1
J        equd    14
T
^<        equd    &80                     ; last menu item
h        equd    -1
r(        equd    1+(1 << 5)+(7 << 24)
|        �string("Quit")
�.end_main_menu
�
�.display_menu
�        �string("Display")
�        equb    7
�        equb    2
�        equb    7
�        equb    0
�        equd    176
�        equd    44
�        equd    0
�
�.black_text_tick
        equd    1
        equd    -1
(        equd    1+(1 << 5)+(7 << 24)
&!        �string("Black text")
0
:.white_text_tick
D<        equd    &80                     ; last menu item
N        equd    -1
X(        equd    1+(1 << 5)+(7 << 24)
b!        �string("White text")
l
v.clear_selection_indirected
�(        equs    "Clear selection"+�0
�.save_backdrop_indirected
�&        equs    "Save backdrop"+�0
�        align
�
�S; -----------------------------------------------------------------------------
�"; Our drag operation has ended
�
�
.drag_end
�%        adr     r1,workspace+&400
�        sub     r1,r1,#&400
�*        swi     "XWimp_GetPointerInfo"
�        bvs     fatal_error
        ldr     r0,[r1,#12]
/        ldr     r3,background_window_handle
L        teq     r0,r3                   ; see if dragged onto our window
 !        bne     get_task_name
*I        ldmia   r1,{r0,r2}              ; get coords where drag ended
4G        str     r3,[r1]                 ; store window handle at r1
>#        ldr     r3,drag_x_start
H#        ldr     r4,drag_y_start
R        sub     r3,r0,r3
\        sub     r4,r2,r4
f.        adr     r5,start_linked_list-&1000
p         add     r5,r5,#&1000
z        ldr     r5,[r5]
�.drag_end_loop
�%        ldrb    r0,[r5,#selected]
�        teq     r0,#0
�&        beq     drag_end_loop_skip
�(        ldrb    r0,[r5,#icon_handle]
�        str     r0,[r1,#4]
�&        swi     "XWimp_DeleteIcon"
�        bvs     fatal_error
�'        ldr     r0,[r5,#x_position]
�        add     r0,r0,r3
�'        str     r0,[r5,#x_position]
�        str     r0,[r1,#4]
�         add     r0,r0,#10*16
        str     r0,[r1,#12]
'        ldr     r0,[r5,#y_position]
        add     r0,r0,r4
$'        str     r0,[r5,#y_position]
.        str     r0,[r1,#8]
8        add     r0,r0,#108
B        str     r0,[r1,#16]
L!        ldr     r0,icon_flags
V        str     r0,[r1,#20]
`/        ldr     r0,[r5,#offset_to_leafname]
j        add     r0,r0,r5
t        str     r0,[r1,#24]
~&        add     r0,r5,#sprite_name
�        str     r0,[r1,#28]
�        mov     r0,#12
�        str     r0,[r1,#32]
�&        swi     "XWimp_CreateIcon"
�        bvs     fatal_error
�(        strb    r0,[r5,#icon_handle]
�.drag_end_loop_skip
�!        ldr     r5,[r5,#next]
�        teq     r5,#0
�!        bne     drag_end_loop
�P        adr     r0,drag_x_min                   ; get initial coordinates of
�A        ldmia   r0,{r1-r4}                      ; box dragged
/        ldr     r0,background_window_handle

'        swi     "XWimp_ForceRedraw"
        bvs     fatal_error
         bl      unselect_all
(        b       poll
2.get_task_name
<&        adr     r1,poll_space+&800
F        sub     r1,r1,#&800
P*        swi     "XWimp_GetPointerInfo"
Z        bvs     fatal_error
d        ldr     r2,[r1,#12]
nC        str     r2,datasave_window_handle ; store window handle
x        ldr     r3,[r1,#16]
�?        str     r3,datasave_icon_handle ; store icon handle
�        ldr     r0,[r1,#0]
�;        str     r0,datasave_mouse_x     ; store mouse x
�        ldr     r0,[r1,#4]
�;        str     r0,datasave_mouse_y     ; store mouse y
�
�%        adr     r1,workspace+&400
�E        mov     r0,#24                  ; length of message block
�#        str     r0,[r1,#-&400]!
�        mov     r0,#0
�>        str     r0,[r1,#12]             ; original message
�        mov     r0,#&40000
�@        add     r0,r0,#&c6              ; message_tasknamerq
        str     r0,[r1,#16]
O        mov     r0,#19                  ; use to find task handle of window
>                                        ; r2,3 already set
"S        swi     "XWimp_SendMessage"     ; no message will be sent but r2 = task
,>        bvs     fatal_error             ; handle of window
6        str     r2,[r1,#20]
@=        mov     r0,#17                  ; no reply wanted
J?        mov     r2,#0                   ; broadcast message
T'        swi     "XWimp_SendMessage"
^        bvs     fatal_error
h        ldr     r0,[r1,#8]
r$        str     r0,message_myref
|        b       poll
�
�.tasknameis
�'        ldr     r0,start_filer_name
�        ldr     r2,[r1,#28]
�=        teq     r0,r2                   ; see if the same
�)        bne     send_dataload_message
�        ldrb    r0,[r1,#32]
�        teq     r0,#�"r"
�)        bne     send_dataload_message
�        ldrb    r0,[r1,#33]
�        teq     r0,#0
�)        bne     send_dataload_message
�        mov     r0,#1
E        strb    r0,save_to_filer        ; set flag (message type)
-        b       send_datasaveload_message
.start_filer_name
&        equs    "File"
0.send_dataload_message
:        mov     r0,#3
DE        strb    r0,save_to_filer        ; set flag (message type)
N.send_datasaveload_message
X.        adr     r4,start_linked_list-&1000
b         add     r4,r4,#&1000
l        ldr     r4,[r4]
v#.send_datasaveload_message_loop
�&        adr     r1,poll_space+&800
�        sub     r1,r1,#&800
�%        ldrb    r0,[r4,#selected]
�=        teq     r0,#0                   ; see if selected
�:        beq     send_datasaveload_message_not_selected
�!        bl      unselect_icon
�&        ldrb    r0,number_selected
�        sub     r0,r0,#1
�&        strb    r0,number_selected
�%        ldr     r0,[r4,#filetype]
�        str     r0,[r1,#40]
�J        mov     r0,#17                  ; read catalogue info, no path
�#        add     r1,r4,#filename
9        mov     r6,r4                   ; preserve r4
        swi     "XOS_File"
8        movvs   r4,r6                   ; restore r4
 >        adrvs   r14,send_datasaveload_message_not_selected
*#        bvs     report_error_ok
4        teq     r0,#0
>2        bne     send_datasaveload_message_skip
H8        mov     r4,r6                   ; restore r4
R<        mov     r0,#19                  ; generate error
\        swi     "XOS_File"
f#        bl      report_error_ok
p:        b       send_datasaveload_message_not_selected
z#.send_datasaveload_message_skip
�&        adr     r1,poll_space+&800
�6        sub     r1,r1,#&800             ; reset r1
�B        str     r4,[r1,#36]             ; store length of file
�8        mov     r4,r6                   ; restore r4
�$        ldrb    r5,save_to_filer
�D        teq     r5,#1                   ; see if saving to filer
�/        ldreq   r2,[r4,#offset_to_leafname]
�@        addeq   r2,r2,r4                ; if so use leafname
�B        addne   r2,r4,#filename         ; not so use full name
�        add     r3,r1,#44
�$.send_datasaveload_message_loop2
�        ldrb    r5,[r2],#1
�        strb    r5,[r3],#1
        teq     r5,#0
3        bne     send_datasaveload_message_loop2
A        sub     r3,r3,r1                ; r3 = message length
$        add     r3,r3,#3
.G        bic     r3,r3,#3                ; round up to word boundary
8        str     r3,[r1]
BL        mov     r0,#0                   ; we are originating the message
L        str     r0,[r1,#12]
V$        ldrb    r0,save_to_filer
`>        str     r0,[r1,#16]             ; set message type
j'        ldr     r0,datasave_mouse_x
t        str     r0,[r1,#28]
~'        ldr     r0,datasave_mouse_y
�        str     r0,[r1,#32]
�:        mov     r0,#18                  ; reply needed
�N        ldr     r2,datasave_window_handle ; r2 = destination window handle
�        str     r2,[r1,#20]
�L        ldr     r3,datasave_icon_handle ; r3 = destination window handle
�?                                        ; incase on iconbar
�        str     r3,[r1,#24]
�'        swi     "XWimp_SendMessage"
�        bvs     fatal_error
�        ldr     r0,[r1,#8]
�$        str     r0,message_myref
�+        str     r4,datasave_where_up_to
K        b       poll                    ; poll to receive message reply

'.send_datasaveload_message_continue
+        ldr     r4,datasave_where_up_to
+.send_datasaveload_message_not_selected
(&        adr     r1,poll_space+&800
2        sub     r1,r1,#&800
<        ldr     r4,[r4]
F(.send_datasaveload_message_continue2
P        teq     r4,#0
Z2        bne     send_datasaveload_message_loop
d        b       poll
n
x.datasave_where_up_to
�        equd    0
�.datasave_window_handle
�        equd    0
�.datasave_icon_handle
�        equd    0
�.datasave_mouse_x
�        equd    0
�.datasave_mouse_y
�        equd    0
�
�S; -----------------------------------------------------------------------------
�&; The user has clicked on our meny
�
.menu_select
#        adr     r1,pointer_info
*        swi     "XWimp_GetPointerInfo"
"        bvs     fatal_error
,&        adr     r1,poll_space+&800
6        sub     r1,r1,#&800
@C        ldr     r0,[r1]                 ; r0 = first menu entry
JB        cmn     r0,#1                   ; see if on menu entry
TP        addne   pc,pc,r0,lsl #2         ; was so dispatch to correct routine
^G        b       poll                    ; not on menu entry so poll
h.jump_table
r2        b       poll                    ; info
|=        b       menu_display            ; display submenu
�4        b       remove                  ; remove
�8        b       select_all              ; select_all
�=        b       clear_selection         ; clear_selection
�;        b       save_backdrop           ; save_backdrop
�2        b       closedown_and_exit      ; quit
�
�S; -----------------------------------------------------------------------------
�4; an entry on the display menu has been selected
�
�.menu_display
�        ldr     r0,[r1,#4]
�@        cmp     r0,#0                   ; sort where clicked
�O        blt     poll                    ; not menu item on click on display
 H                                        ; in main menu so poll again
         moveq   r0,#1
         movgt   r0,#0
 &&        str     r0,black_text_tick
 0
 :'        strb    r0,icon_text_colour
 D
 N        moveq   r0,#&80
 X        movne   r0,#&81
 b&        str     r0,white_text_tick
 l
 v!        ldr     r0,icon_flags
 �"        bic     r0,r0,#7 << 24
 �"        eoreq   r0,r0,#7 << 24
 �!        str     r0,icon_flags
 �
 �%        adr     r1,workspace+&800
 �/        ldr     r0,background_window_handle
 �#        str     r0,[r1,#-&800]!
 �        moveq   r0,#7 << 24
 �        movne   r0,#0
 �        str     r0,[r1,#8]
 �         mov     r0,#15 << 24
 �        str     r0,[r1,#12]
 �(        ldr     r4,start_linked_list
!D        teq     r4,#0                   ; see if no icons at all
!&        beq     see_if_reopen_menu
!.menu_display_loop
! (        ldrb    r0,[r4,#icon_handle]
!*        str     r0,[r1,#4]
!4(        swi     "XWimp_SetIconState"
!>        bvs     fatal_error
!H!        ldr     r4,[r4,#next]
!R        teq     r4,#0
!\%        bne     menu_display_loop
!f&        b       see_if_reopen_menu
!p
!zS; -----------------------------------------------------------------------------
!�.; the remove menu option has been selected
!�
!�.remove
!�-        adr     r5,start_linked_list-&c00
!�"        ldr     r4,[r5,#&c00]!
!�.remove_loop
!�R        ldr     r6,[r4,#next]           ; must be read here as freeing a block
!�L                                        ; changes the value of [r4+next]
!�%        ldrb    r2,[r4,#selected]
!�        teq     r2,#0
!�O        streq   r4,[r5,#next]           ; store linked list pointer in last
!�R                                        ; not removed data set if not removing
!�N        moveq   r5,r4                   ; update last not removed data set
"E                                        ; pointer if not removing
"        beq     not_remove
"        bl      delete_icon
"$#        bl      free_heap_block
".&        ldrb    r2,number_of_icons
"8        sub     r2,r2,#1
"B&        strb    r2,number_of_icons
"L.not_remove
"V=        movs    r4,r6                   ; move along list
"`;        teq     r4,#0                   ; see if at end
"j        bne     remove_loop
"tE        str     r4,[r5,#next]           ; mark end of linked list
"~&        strb    r4,number_selected
"�&        b       see_if_reopen_menu
"�
"�S; -----------------------------------------------------------------------------
"�2; the select all menu option has been selected
"�
"�.select_all
"�(        ldr     r4,start_linked_list
"�.select_all_loop
"�(        ldrb    r2,[r4,#icon_handle]
"�        bl      select_icon
"�        mov     r2,#1
"�%        strb    r2,[r4,#selected]
#        ldr     r4,[r4]
#
        teq     r4,#0
##        bne     select_all_loop
#&        ldrb    r2,number_of_icons
#(&        strb    r2,number_selected
#2&        b       see_if_reopen_menu
#<
#FS; -----------------------------------------------------------------------------
#P6; the clear selecton menu option has been selected
#Z
#d.clear_selection
#n         bl      unselect_all
#x&        b       see_if_reopen_menu
#�
#�S; -----------------------------------------------------------------------------
#�5; the save backdrop menu entry has been selected.
#�
#�.save_backdrop
#�        mov     r0,#&80
#�&        adr     r1,config_filename
#�        swi     "XOS_Find"
#�!        adrvs   r14,poll+&800
#�M        subvs   r14,r14,#&800           ; cause it to return to poll loop
#�#        bvs     report_error_ok
#�>        mov     r1,r0                   ; r1 = file handle
#�D        ldrb    r0,icon_text_colour     ; store icon text colour
$        swi     "XOS_BPut"
$'        bvs     error_while_writing
$C        ldrb    r0,number_of_icons      ; store number of icons
$"        swi     "XOS_BPut"
$,'        bvs     error_while_writing
$6(        ldr     r2,start_linked_list
$@        teq     r2,#0
$J        beq     end_of_save
$T.save_backdrop_loop
$^S        mov     r0,#2                   ; write bytes using current seq pointer
$h>                                        ; r1 = file handle
$rG        ldr     r5,[r2,#next]           ; get pointer to next entry
$|"        ldr     r3,[r2,#size]!
$�        sub     r3,r3,#4
$�        swi     "XOS_GBPB"
$�'        bvs     error_while_writing
$�I        movs    r2,r5                   ; r2 -> next entry, set flags
$�        teq     r2,#0
$�&        bne     save_backdrop_loop
$�.end_of_save
$�S        mov     r0,#2                   ; write bytes using current seq pointer
$�=        adr     r2,zero                 ; r2 -> &00000000
$�        mov     r3,#4
$�        swi     "XOS_GBPB"
$�'        bvs     error_while_writing
$�8        mov     r0,#0                   ; close file
%        swi     "XOS_Find"
%#        blvs    report_error_ok
%&        b       see_if_reopen_menu
%&.error_while_writing
%0A        mov     r2,r0                   ; store error pointer
%:8        mov     r0,#0                   ; close file
%D?        swi     "XOS_Find"              ; ignore any errors
%NC        mov     r0,r2                   ; restore error pointer
%X#        bl      report_error_ok
%b        b       poll
%l	.zero
%v        equd    0
%�.config_filename
%�.        equs    "<PlaceIt$Dir>.!Config"+�0
%�        align
%�
%�S; -----------------------------------------------------------------------------
%�5; see if adjust was clicked on. if so reopen menu
%�
%�.see_if_reopen_menu
%�?        ldr     r0,pointer_info+8       ; r0 = button state
%�C        tst     r0,#1                   ; see if adjust pressed
%�<        beq     poll                    ; wasn't so poll
%�E        adr     r1,pointer_info         ; r1 -> click coordinates
%�        mvn     r0,#0
&D        str     r0,[r1,#16]             ; no icon was clicked on
&9        b       open_menu               ; reopen menu
&
& .pointer_info
&*        equs    �24,�0)
&4
&>S; -----------------------------------------------------------------------------
&H); The nice wimp has sent us a message
&R
&\.message
&f8        ldr     r11,[r1,#16]            ; message ID
&p>        teq     r11,#0                  ; see if closedown
&z&        beq     closedown_and_exit
&�        mov     r0,#&c1
&�!        add     r0,r0,#&40000
&�H        teq     r11,r0                  ; see if mode change message
&�G        bleq    read_screen_size        ; this call preserves flags
&�        beq     poll
&�?        add     r0,r0,#6                ; see if tasknameis
&�        teq     r11,r0
&�        beq     tasknameis
&�@        teq     r11,#2                  ; see if datasaveack
&�        beq     datasaveack
&�@        teq     r11,#4                  ; see if dataloadack
&�        beq     dataloadack
&�=        teq     r11,#3                  ; see if dataload
'        bne     poll
'
'S; -----------------------------------------------------------------------------
'$B; we have received a dataload message. see if we can handle it
'.
'8
.dataload
'B;        ldr     r0,[r1,#12]             ; r0 = your_ref
'LA        cmp     r0,#0                   ; check sent by filer
'V9        bne     poll                    ; poll if not
'`J        ldr     r3,[r1]                 ; r3 = length of message block
'jK        sub     r3,r3,#44-filename      ; r3 = amount of storage needed
't"        bl      get_heap_block
'~        teq     r2,#0
'�(        beq     no_more_memory_error
'�!        str     r3,[r2,#size]
'�-        adr     r4,start_linked_list-&c00
'�        add     r4,r4,#&c00
'�.dataload_loop1
'�!        ldr     r5,[r4,#next]
'�        teq     r5,#0
'�        movne   r4,r5
'�"        bne     dataload_loop1
'�L        str     r2,[r4,#next]           ; store pointer to next data set
'�P        str     r5,[r2,#next]           ; r5 = 0, mark next data set as last
'�        mov     r4,r2
(P        ldr     r0,[r1,#40]             ; r0 = filetype of file to be loaded
(
%        str     r0,[r4,#filetype]
(I        add     r0,r1,#44               ; r0 -> filename to be loaded
(#        add     r2,r4,#filename
((        sub     r5,r2,r4
(2.dataload_loop2
(<        ldrb    r3,[r0],#1
(F        strb    r3,[r2],#1
(P        teq     r3,#�"."
(ZE        subeq   r5,r2,r4                ; r5 = offset to leafname
(d        teq     r3,#0
(n"        bne     dataload_loop2
(x/        str     r5,[r4,#offset_to_leafname]
(�S        add     r5,r5,r4                ; r5 -> leafname, to use as sprite text
(�        mov     r2,r1
(�%        adr     r1,workspace+&c00
(�        sub     r1,r1,#&c00
(�/        ldr     r0,background_window_handle
(�        str     r0,[r1]
(�P        ldr     r0,[r2,#28]             ; r0 = x coordinate where drag ended
(�        sub     r0,r0,#5*16
(�;        str     r0,[r1,#4]              ; min x of icon
(�'        str     r0,[r4,#x_position]
(�         add     r0,r0,#10*16
(�;        str     r0,[r1,#12]             ; max x of icon
(�P        ldr     r0,[r2,#32]             ; r0 = y coordinate where drag ended
)        sub     r0,r0,#54
);        str     r0,[r1,#8]              ; min y of icon
)'        str     r0,[r4,#y_position]
)"        add     r0,r0,#108
),;        str     r0,[r1,#16]             ; max y of icon
)6!        ldr     r0,icon_flags
)@        str     r0,[r1,#20]
)JJ        str     r5,[r1,#24]             ; store pointer to sprite text
)T&        add     r0,r4,#sprite_name
)^P        str     r0,[r1,#28]             ; store pointer to validation string
)h        mov     r2,#11
)r        str     r2,[r1,#32]
)|        mov     r2,#�"S"
)�        strb    r2,[r0],#1
)�%        ldr     r3,[r4,#filetype]
)�D        cmp     r3,#&1000               ; see if has no filetype
)�        bge     no_filetype
)�        mov     r2,#�"f"
)�        strb    r2,[r0],#1
)�        mov     r2,#�"i"
)�        strb    r2,[r0],#1
)�        mov     r2,#�"l"
)�        strb    r2,[r0],#1
)�        mov     r2,#�"e"
)�        strb    r2,[r0],#1
)�S        mov     r1,r0                   ; r1 = buffer to store converted number
*;        mov     r0,r3                   ; r0 = filetype
*<        mov     r2,#5                   ; size of buffer
*%        swi     "XOS_ConvertHex4"
*&        bvs     fatal_error
*0        mov     r2,#�"_"
*:        strb    r2,[r0]
*D?        sub     r2,r0,#4                ; r2 -> sprite name
*N(        bl      see_if_sprite_exists
*XL        movvs   r0,r2                   ; r0 -> where to put sprite name
*bH        adrvs   r2,file_xxx             ; sprite wasn't found so use
*l>        bvs     no_filetype_loop        ; file_xxx instead
*v#        b       finish_dataload
*�.application
*�/        ldr     r2,[r4,#offset_to_leafname]
*�        add     r2,r2,r4
*�(        bl      see_if_sprite_exists
*�N        adrvs   r2,application_sprite   ; use "application" as sprite name
*�J                                        ; as sprite could not be found
*�$        b       no_filetype_loop
*�
*�.application_sprite
*�$        equs    "application"+�0
*�.directory
*�"        equs    "directory"+�0
*�
.file_xxx
+!        equs    "file_xxx"+�0
+        align
+
+ .no_filetype
+*        cmp     r3,#&2000
+4         adrlt   r2,directory
+>        beq     application
+H        adrgt   r2,file_xxx
+R.no_filetype_loop
+\        ldrb    r3,[r2],#1
+f        strb    r3,[r0],#1
+p        teq     r3,#0
+z$        bne     no_filetype_loop
+�
+�.finish_dataload
+�%        adr     r1,workspace+&c00
+�        sub     r1,r1,#&c00
+�&        swi     "XWimp_CreateIcon"
+�        bvs     fatal_error
+�(        strb    r0,[r4,#icon_handle]
+�        mov     r0,#0
+�%        strb    r0,[r4,#selected]
+�@        ldr     r0,[r1]                 ; r0 = window handle
+�8        ldr     r2,[r1,#8]              ; r2 = min y
+�8        ldr     r3,[r1,#12]             ; r3 = max x
+�8        ldr     r4,[r1,#16]             ; r4 = max y
,8        ldr     r1,[r1,#4]              ; r1 = min x
,'        swi     "XWimp_ForceRedraw"
,        bvs     fatal_error
,$&        ldrb    r0,number_of_icons
,.        add     r0,r0,#1
,8&        strb    r0,number_of_icons
,B&        adr     r1,poll_space+&c00
,L        sub     r1,r1,#&c00
,V        ldr     r0,[r1,#12]
,`        strb    r0,[r1,#8]
,j=        ldr     r2,[r1,#4]              ; reply to sender
,t=        mov     r0,#17                  ; no reply needed
,~'        swi     "XWimp_SendMessage"
,�        bvs     fatal_error
,�        b       poll
,�
,�.no_more_memory_error
,�1        adr     r0,no_more_memory_error_block
,�#        bl      report_error_ok
,�        b       poll
,�.no_more_memory_error_block
,�        equd    0
,�/        equs    "Not enough free memory"+�0
,�        align
,�.icon_flags
-X        equd    1+(1 << 1)+(1 << 3)+(1 << 5)+(1 << 8)+(10 << 12)+(7 << 24)+(4 << 28)
-

-S; -----------------------------------------------------------------------------
-,; we have received a datasaveack message
-(
-2.datasaveack
-<        ldr     r0,[r1,#12]
-F$        ldr     r2,message_myref
-PD        teq     r0,r2                   ; check we originated it
-Z        bne     poll
-dM        swi     "XHourglass_On"         ; don't report errors as may have
-n<                                        ; been unplugged
-x2        mov     r0,#26                  ; copy
-�H        add     r2,r1,#44               ; r2 -> destination filename
-�+        ldr     r1,datasave_where_up_to
-�C        add     r1,r1,#filename         ; r1 -> source filename
-�<        mov     r3,#1                   ; flags for copy
-�#        swi     "XOS_FSControl"
-�        bvc     copy_ok
-�M        swi     "XHourglass_Off"        ; don't report errors as may have
-�<                                        ; been unplugged
-�#        bl      report_error_ok
-�6        b       send_datasaveload_message_continue
-�.copy_ok
-�M        swi     "XHourglass_Off"        ; don't report errors as may have
-�<                                        ; been unplugged
.&        adr     r1,poll_space+&c00
.        sub     r1,r1,#&c00
.        ldr     r0,[r1,#12]
."        str     r0,[r1,#8]
.,>        mov     r0,#3                   ; dataload message
.6        str     r0,[r1,#16]
.@:        mov     r0,#18                  ; reply needed
.J=        ldr     r2,[r1,#4]              ; reply to sender
.T'        swi     "XWimp_SendMessage"
.^        bvs     fatal_error
.h        ldr     r0,[r1,#8]
.r$        str     r0,message_myref
.|K        b       poll                    ; poll so that we receive reply
.�
.�S; -----------------------------------------------------------------------------
.�,; we have received a dataloadack message
.�
.�.dataloadack
.�        ldr     r0,[r1,#12]
.�$        ldr     r2,message_myref
.�D        teq     r0,r2                   ; check we originated it
.�        bne     poll
.�(        ldrb    r0,delete_after_drag
.�Q        teq     r0,#42                  ; see if response to dataopen message
.�=        beq     poll                    ; if so just poll
.�H        teq     r0,#&ff                 ; see whether to delete icon
/+        ldreq   r4,datasave_where_up_to
/R        ldr     r0,[r4,#next]           ; this will be changed by freeing heap
/3                                        ; block
/&        bleq    remove_icon
/0        mov     r4,r0
/:&        adr     r1,poll_space+&c00
/D        sub     r1,r1,#&c00
/N7        b       send_datasaveload_message_continue2
/X
/bS; -----------------------------------------------------------------------------
/l4; see if a sprite exists in the wimp_sprite pool
/v; entry
/�;       r2 -> sprite name
/�
; exit
/�#;       v unset => sprite found
/�';           set => sprite not found
/�
/�.see_if_sprite_exists
/�#        stmfd   r13!,{r0,r3-r6}
/�>        mov     r0,#40                  ; read sprite info
/�$        swi     "XWimp_SpriteOp"
/�#        ldmfd   r13!,{r0,r3-r6}
/�        mov     pc,r14
/�
/�S; -----------------------------------------------------------------------------
09; The nice wimp has sent us a message acknowledgement
0
0.message_acknowledged
0         ldr     r0,[r1,#8]
0*$        ldr     r2,message_myref
04D        cmp     r0,r2                   ; see if one our message
0>O        bne     poll                    ; poll otherwise, can this happen ?
0H        ldr     r0,[r1,#16]
0RE        teq     r0,#1                   ; see if datasave message
0\-        beq     datasave_not_acknowledged
0fE        teq     r0,#3                   ; see if dataload message
0p-        beq     dataload_not_acknowledged
0zE        teq     r0,#5                   ; see if dataopen message
0�9        bne     poll                    ; if not poll
0�:        ldr     r0,[r1,#40]             ; get filetype
0�>        cmp     r0,#&1000               ; see if directory
0�,        adreq   r2,filer_opendir_command
0�"        adrne   r2,run_command
0�H        add     r0,r1,#30               ; r0 -> where to put command
0�.message_ack_loop
0�        ldrb    r3,[r2],#1
0�        teq     r3,#0
0�        strneb  r3,[r0],#1
0�$        bne     message_ack_loop
0�;        add     r0,r1,#30               ; r0 -> command
0�%        swi     "XWimp_StartTask"
1        bvs     fatal_error
1        b       poll
1.filer_opendir_command
1$'        equs    "Filer_OpenDir "+�0
1..run_command
18'        equs    "Run           "+�0
1B        align
1L
1V.datasave_not_acknowledged
1`6        beq     send_datasaveload_message_continue
1j
1t.dataload_not_acknowledged
1~6        b       send_datasaveload_message_continue
1�
1�S; -----------------------------------------------------------------------------
1�; heap handling routines
1�
1�S; -----------------------------------------------------------------------------
1�9; get a heap block. If fails try and extend wimp_slot
1�; entry
1�;       r3 = size wanted
1�
; exit
1�);       r2 -> heap block if succeeded
1�7;       r2 = 0 if failed, r3 corrupted in this case
1�
2.get_heap_block
2
*        stmfd   r13!,{r0-r1,r4-r6,r14}
2        mov     r6,r3
2<        mov     r0,#2                   ; get heap block
2(&        adr     r1,heap_start-&800
22        add     r1,r1,#&800
2<        swi     "XOS_Heap"
2FA        ldmvcfd r13!,{r0-r1,r4-r6,pc}   ; if succeeded return
2P        mvn     r0,#0
2Z        mov     r1,r0
2d$        swi     "XWimp_SlotSize"
2n        bvs     fatal_error
2x<        mov     r5,r0                   ; store old size
2�F        add     r0,r0,#8*1024           ; we want some more memory
2�        mvn     r1,#0
2�$        swi     "XWimp_SlotSize"
2�>        movvs   r2,#0                   ; r2 = 0 if failed
2�9        ldmvsfd r13!,{r0-r1,r4-r6,pc}   ; then return
2�N        sub     r3,r0,r5                ; r3 = amount of new memory we got
2�&        adr     r1,heap_start-&800
2�        add     r1,r1,#&800
2�9        mov     r0,#5                   ; extend heap
2�        swi     "XOS_Heap"
2�        bvs     fatal_error
2�<        mov     r0,#2                   ; get heap block
2�        mov     r3,r6
3        swi     "XOS_Heap"
3I        bvs     fatal_error             ; we should succeed this time
3)        ldmfd   r13!,{r0-r1,r4-r6,pc}
3"
3,S; -----------------------------------------------------------------------------
36; free a heap block
3@; entry
3J;       r4 -> heap block
3T
3^.free_heap_block
3h         stmfd   r13!,{r0-r2}
3r=        mov     r0,#3                   ; free heap block
3|&        adr     r1,heap_start-&400
3�        add     r1,r1,#&400
3�        mov     r2,r4
3�        swi     "XOS_Heap"
3�        bvs     fatal_error
3�         ldmfd   r13!,{r0-r2}
3�        mov     pc,r14
3�
3�S; -----------------------------------------------------------------------------
3�(; search the linked list for an icon
3�; entry
3�;       r2 = icon handle
3�
; exit
3�+;       r4 -> data entry in linked list
4
4.find_icon
4        stmfd   r13!,{r3}
4&(        ldr     r4,start_linked_list
40.find_icon_loop
4:(        ldrb    r3,[r4,#icon_handle]
4D        teq     r3,r2
4N        ldmeqfd r13!,{r3}
4X        moveq   pc,r14
4b!        ldr     r4,[r4,#next]
4l"        b       find_icon_loop
4v
4�S; -----------------------------------------------------------------------------
4�&; select an icon on the background
4�; entry
4�;       r2 = icon handle
4�
4�.select_icon
4�         stmfd   r13!,{r1,r3}
4�&        adr     r1,workspace+&1000
4�         sub     r1,r1,#&1000
4�/        ldr     r3,background_window_handle
4�        str     r3,[r1]
4�        str     r2,[r1,#4]
4�        mov     r3,#1 << 21
5        str     r3,[r1,#8]
5        str     r3,[r1,#12]
5(        swi     "XWimp_SetIconState"
5         bvs     fatal_error
5*         ldmfd   r13!,{r1,r3}
54        movs    pc,r14
5>
5HS; -----------------------------------------------------------------------------
5R*; unselect the sprite selected by menu
5\
5f .unselect_menu_selected_icon
5p$        stmfd   r13!,{r3-r4,r14}
5z(        ldr     r4,start_linked_list
5�%.unselect_menu_selected_icon_loop
5�%        ldrb    r3,[r4,#selected]
5�B        teq     r3,#2                   ; see if menu selected
5�!        ldrne   r4,[r4,#next]
5�4        bne     unselect_menu_selected_icon_loop
5�!        bl      unselect_icon
5�        mov     r3,#0
5�&        strb    r3,number_selected
5�#        ldmfd   r13!,{r3-r4,pc}
5�
5�S; -----------------------------------------------------------------------------
5�H; unselect an icon on the background. and unsets flags in data entry
5�; entry
6;       r4 -> data_entry
6
6.unselect_icon
6$         stmfd   r13!,{r1,r3}
6.%        ldrb    r3,[r4,#selected]
68=        teq     r3,#1                   ; see if selected
6BB        ldmnefd r13!,{r1,r3}            ; not so restore r1,r3
6L9        movnes  pc,r14                  ; then return
6V&        adr     r1,workspace+&1000
6`         sub     r1,r1,#&1000
6j/        ldr     r3,background_window_handle
6t        str     r3,[r1]
6~(        ldrb    r3,[r4,#icon_handle]
6�        str     r3,[r1,#4]
6�        mov     r3,#0
6�        str     r3,[r1,#8]
6�        mov     r3,#1 << 21
6�        str     r3,[r1,#12]
6�(        swi     "XWimp_SetIconState"
6�        bvs     fatal_error
6�        mov     r3,#0
6�A        strb    r3,[r4,#selected]       ; store as unselected
6�         ldmfd   r13!,{r1,r3}
6�        movs    pc,r14
6�
7S; -----------------------------------------------------------------------------
7
A; unselect all icons and set number of selected icons to zero
7
7.unselect_all
7($        stmfd   r13!,{r2,r4,r14}
72(        ldr     r4,start_linked_list
7<C        teq     r4,#0                   ; see if no icons exist
7F:        ldmeqfd r13!,{r2,r4,pc}         ; if so return
7P.clear_selection_loop
7Z!        bl      unselect_icon
7d        ldr     r4,[r4]
7n        teq     r4,#0
7x(        bne     clear_selection_loop
7�&        strb    r4,number_selected
7�$        ldmfd   r13!,{r2,r4,pc}^
7�
7�S; -----------------------------------------------------------------------------
7�@; This routine reads the screen size in external coordinates
7�
7�.read_screen_size
7�        stmfd   r13!,{r14}
7�E        mvn     r0,#0                   ; read about current mode
7�=        mov     r1,#4                   ; r1 = XEigFactor
7�*        swi     "XOS_ReadModeVariable"
7�        bvs     fatal_error
7�        mov     r3,r2
8=        mov     r1,#11                  ; r1 = XWindLimit
8*        swi     "XOS_ReadModeVariable"
8        bvs     fatal_error
8"         mov     r2,r2,lsl r3
8,"        str     r2,screen_maxx
86$        str     r2,workarea_maxx
8@=        mov     r1,#5                   ; r1 = YEigFactor
8J*        swi     "XOS_ReadModeVariable"
8T        bvs     fatal_error
8^        mov     r3,r2
8h=        mov     r1,#12                  ; r1 = YWindLimit
8r*        swi     "XOS_ReadModeVariable"
8|        bvs     fatal_error
8�         mov     r2,r2,lsl r3
8�"        str     r2,screen_maxy
8�$        str     r2,workarea_maxy
8�        str     r2,scroll_y
8�        mov     r0,#1
8�#        strb    r0,mode_changed
8�<        ldmfd   r13!,{pc}^              ; preserve flags
8�
8�S; -----------------------------------------------------------------------------
8�; closedown and exit
8�
8�.closedown_and_exit
8�        bl      closedown
9        swi     "OS_Exit"
9
9S; -----------------------------------------------------------------------------
9&M; either we could not start up, the user wants us to closedown or we have
90$; had a module finalisation call
9:
9D.closedown
9N(        adr     r1,task_handle+&1000
9X         sub     r1,r1,#&1000
9b        ldr     r0,[r1]
9l-        ldr     r1,[r1,#task-task_handle]
9v>        swi     "XWimp_CloseDown"       ; close down if so
9�        mov     pc,r14
9�
9�S; -----------------------------------------------------------------------------
9�; misc flags and data
9�
9�.mode_changed
9�        equb    0
9�.icon_text_colour
9�        equb    1
9�.delete_after_drag
9�        equb    0
9�.number_of_icons
9�        equb    0
:.number_selected
:        equb    0
:.save_to_filer
:         equb    0
:*        align
:4.button_state
:>.heap_entry_length
:H.message_myref
:R        equd    0
:\
:fS; -----------------------------------------------------------------------------
:p;; define the background window. v set if error occurred
:z
:�.define_background_window
:�        stmfd   r13!,{r14}
:�$        bl      read_screen_size
:�(        adr     r1,background_window
:�(        swi     "XWimp_CreateWindow"
:�        ldmvsfd r13!,{pc}
:�/        adr     r1,background_window_handle
:�        str     r0,[r1]
:�&        swi     "XWimp_OpenWindow"
:�        ldmfd   r13!,{pc}
:�
:�S; -----------------------------------------------------------------------------
:�"; background window data block
;
;.background_window_handle
;        equd    0
;$.background_window
;.        equd    0
;8        equd    136
;B.screen_maxx
;L        equd    0
;V.screen_maxy
;`        equd    0
;j        equd    0
;t
.scroll_y
;~        equd    0
;�<        equd    -2                      ; open at bottom
;�0        equd    (1 << 4)+(1 << 11)+(1 << 31)
;�        equb    &ff
;�        equb    0
;�        equb    7
;�F        equb    4                       ; window background colour
;�        equb    0
;�        equb    0
;�        equb    0
;�        equb    0
;�.workarea_coords
;�        equd    0
<        equd    136
<
.workarea_maxx
<        equd    0
<.workarea_maxy
<(        equd    0
<2        equd    0
<<F        equd    3 << 12                 ; workarea button type = 3
<FB        equd    1                       ; use wimp sprite area
<P        equd    0
<Z,        equs    �12,�0)       ; no title
<dH        equd    0                       ; no icons defined orignally
<n
<xS; -----------------------------------------------------------------------------
<�J; define the info window and store it's handle. v set if error occured
<�
<�.define_info_window
<�        stmfd   r13!,{r14}
<�"        adr     r1,info_window
<�(        swi     "XWimp_CreateWindow"
<�)        strvc   r0,info_window_handle
<�L        ldmfd   r13!,{pc}               ; v will be set if error occured
<�
<�S; -----------------------------------------------------------------------------
<�#; information about info window
<�
<�.window_title
=+        equs    "About this program"+�0
=.end_window_title
=        align
="	.name
=,!        equs    "Place It"+�0
=6
.end_name
=@        align
=J.purpose
=T4        equs    "Place files on the backdrop"+�0
=^.end_purpose
=h        align
=r.author
=|-        equs    "pmf@uk.ac.warwick.cs"+�0
=�.end_author
=�        align
=�.version
=�)        equs    "1.03 (19-Jan-91)"+�0
=�.end_version
=�        align
=�
=�.info_window
=�        equd    0
=�        equd    0
=�        equd    636
=�        equd    216
=�        equd    0
>        equd    0
>        equd    -1
>9        equd    (1 << 31)+(1 << 26)+(1 << 4)+(1 << 1)
>&        equb    7
>0        equb    2
>:        equb    7
>D        equb    1
>N        equd    0
>X        equd    0
>b        equd    -216
>l        equd    636
>v        equd    0
>�0        equd    (1 << 8)+(1 << 4)+(1 << 3)+1
>�        equd    0
>�        equd    0
>�        equd    0
>�         equd    window_title
>�        equd    -1
>�1        equd    end_window_title-window_title
>�        equd    8
>�        equd    58
>�        equd    -48
>�        equd    154
>�        equd    -8
>�3        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
?        �string("Name")
?        equd    14
?        equd    -100
?         equd    154
?*        equd    -60
?43        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
?>        �string("Purpose")
?H        equd    30
?R        equd    -152
?\        equd    154
?f        equd    -112
?p3        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
?z        �string("Author")
?�        equd    14
?�        equd    -200
?�        equd    154
?�        equd    -160
?�3        equd    (&17 << 24)+(1 << 4)+(1 << 3)+1
?�        �string("Version")
?�        equd    154
?�        equd    -52
?�        equd    630
?�        equd    -4
?�L        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
?�        equd    name
?�        equd    -1
@!        equd    end_name-name
@        equd    154
@        equd    -104
@$        equd    630
@.        equd    -56
@8L        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
@B        equd    purpose
@L        equd    -1
@V'        equd    end_purpose-purpose
@`        equd    154
@j        equd    -156
@t        equd    630
@~        equd    -108
@�L        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
@�        equd    author
@�        equd    -1
@�%        equd    end_author-author
@�        equd    154
@�        equd    -208
@�        equd    630
@�        equd    -160
@�L        equd    (7 << 24)+(1 << 8)+(1 << 5)+(1 << 4)+(1 << 3)+(1 << 2)+1
@�        equd    version
@�        equd    -1
@�'        equd    end_version-version
A
A
S; -----------------------------------------------------------------------------
A; set initial conditions
A
A(.set_initial_conditions
A2        mvn     r0,#0
A<        mov     r1,r0
AF$        swi     "XWimp_SlotSize"
AP        movvs   pc,r14
AZ!        adr     r1,heap_start
Ad        sub     r3,r0,r1
AnI        add     r3,r3,#&8000            ; r3 = amount of memory spare
Ax=        mov     r0,#0                   ; initialise heap
A�(        str     r0,start_linked_list
A�        swi     "XOS_Heap"
A�K        mov     pc,r14                  ; return with v set accordingly
A�
A�S; -----------------------------------------------------------------------------
A�(; load the !Config file if it exists
A�
A�.load_config_file
A�        stmfd   r13!,{r14}
A�S        mov     r0,#&47                 ; open file, complain if is a directory
A�<                                        ; no search path
A�+        adr     r1,config_filename+&800
A�        sub     r1,r1,#&800
B        swi     "XOS_Find"
B        ldmvsfd r13!,{pc}
BH        movs    r1,r0                   ; r1 = filehandle, set flags
B"F        ldmeqfd r13!,{pc}               ; if file not found return
B,B        swi     "XOS_BGet"              ; get icon text colour
B6        bvs     read_error
B@2        bcs     config_file_ended_unexpectedly
BJ'        strb    r0,icon_text_colour
BT&        str     r0,black_text_tick
B^
Bh        rsb     r2,r0,#&81
Br&        str     r2,white_text_tick
B|
B�D        teq     r0,#0                   ; see if icon text white
B�!        ldreq   r0,icon_flags
B�C        biceq   r0,r0,#7 << 24          ; see text colour white
B�!        streq   r0,icon_flags
B�
B�A        swi     "XOS_BGet"              ; get number of icons
B�        bvs     read_error
B�2        bcs     config_file_ended_unexpectedly
B�&        strb    r0,number_of_icons
B�(        adr     r5,start_linked_list
B�        teq     r0,#0
B�)        beq     load_config_file_done
B�
C.load_config_file_loop
CJ        mov     r0,#4                   ; read bytes using current csp
C(        adr     r2,heap_entry_length
C&=        mov     r3,#4                   ; read four bytes
C0        swi     "XOS_GBPB"
C:        bvs     read_error
CD2        bcs     config_file_ended_unexpectedly
CN(        ldr     r3,heap_entry_length
CX        teq     r3,#0
Cb)        beq     load_config_file_done
Cl"        bl      get_heap_block
Cv        teq     r2,#0
C�4        adreq   r0,ran_out_of_memory_during_load
C�        beq     read_error
C�L        str     r2,[r5,#next]           ; store pointer to next data set
C�N        mov     r5,r2                   ; update previous data set pointer
C�!        str     r3,[r2,#size]
C�J        add     r2,r2,#offset_to_leafname ; skip next ans size entries
C�D        sub     r3,r3,#offset_to_leafname ; in linked list entry
C�        swi     "XOS_GBPB"
C�        bvs     read_error
C�2        bcs     config_file_ended_unexpectedly
C�)        b       load_config_file_loop
C�
C�.load_config_file_done
D        mov     r0,#0
D?        strb    r0,number_selected      ; no icons selected
DE        str     r0,[r5,#next]           ; mark end of linked list
D         mov     r0,#0
D*        swi     "XOS_Find"
D4#        blvs    report_error_ok
D>(        ldr     r4,start_linked_list
DH        teq     r4,#0
DR        ldmeqfd r13!,{pc}
D\
Df.load_config_file_loop2
Dp        mov     r0,#0
DzE        strb    r0,[r4,#selected]       ; mark icon as unselected
D�%        ldr     r0,[r4,#filetype]
D�@        teq     r0,#&2000               ; see if application
D�$        bleq    boot_application
D�!        ldr     r4,[r4,#next]
D�        teq     r4,#0
D�*        bne     load_config_file_loop2
D�
D�(        ldr     r4,start_linked_list
D�&        adr     r1,workspace+&1400
D�         sub     r1,r1,#&1400
D�/        ldr     r0,background_window_handle
D�        str     r0,[r1]
D�.load_config_file_loop3
E'        ldr     r0,[r4,#x_position]
E        str     r0,[r1,#4]
E         add     r0,r0,#10*16
E$        str     r0,[r1,#12]
E.'        ldr     r0,[r4,#y_position]
E8        str     r0,[r1,#8]
EB        add     r0,r0,#108
EL        str     r0,[r1,#16]
EV!        ldr     r0,icon_flags
E`        str     r0,[r1,#20]
Ej/        ldr     r0,[r4,#offset_to_leafname]
Et        add     r0,r0,r4
E~        str     r0,[r1,#24]
E�&        add     r0,r4,#sprite_name
E�        str     r0,[r1,#28]
E�        mov     r0,#12
E�        str     r0,[r1,#32]
E�&        swi     "XWimp_CreateIcon"
E�        ldmvsfd r13!,{pc}
E�(        strb    r0,[r4,#icon_handle]
E�!        ldr     r4,[r4,#next]
E�        teq     r4,#0
E�*        bne     load_config_file_loop3
E�        ldmfd   r13!,{pc}
E�
F.read_error
F
A        mov     r2,r0                   ; store error pointer
F8        mov     r0,#0                   ; close file
F;        swi     "XOS_Find"              ; ignore errors
F(C        mov     r0,r2                   ; restore error pointer
F2#        bl      report_error_ok
F<        ldmfd   r13!,{pc}
FF
FP#.config_file_ended_unexpectedly
FZ;        adr     r0,config_file_ended_unexpectedly_error
Fd        b       read_error
Fn).config_file_ended_unexpectedly_error
Fx        equd    0
F�S        equs    "The config file ended unexpectedly. I recommend deleting the "
F�7        equs    "config file and starting again"+�0
F�        align
F�
F�".ran_out_of_memory_during_load
F�        equd    0
F�N        equs    "Ran out of memory during load. I recomend you quit me"+�0
F�        align
F�
F�S; -----------------------------------------------------------------------------
F�7; run a the !Boot file in the application directory
F�=; if this can't be found do *IconSprites !Sprites instead
F�; entry
G#;       r4 -> linked list entry
G
G.boot_application
G"*        stmfd   r13!,{r0-r3,r5-r7,r14}
G,(        add     r2,r4,#sprite_name+1
G6(        bl      see_if_sprite_exists
G@E        ldmvcfd r13!,{r0-r3,r5-r7,pc}   ; sprite exists so return
GJL        adr     r0,poll_space+&1400+4   ; +4 to allow for "Run " infront
GT         sub     r0,r0,#&1400
G^#        add     r1,r4,#filename
Gh.boot_application_loop
Gr        ldrb    r2,[r1],#1
G|        strb    r2,[r0],#1
G�        teq     r2,#0
G�)        bne     boot_application_loop
G�        mov     r2,#�"."
G�A        strb    r2,[r0,#-1]             ; replace �0 with "."
G�D        mov     r7,r0                   ; store leafname pointer
G�9        adr     r1,pling_boot           ; r1 -> !Boot
G�.boot_application_loop2
G�        ldrb    r2,[r1],#1
G�        strb    r2,[r0],#1
G�        teq     r2,#0
G�*        bne     boot_application_loop2
G�I        mov     r0,#17                  ; read catalogue info no path
G�)        adr     r1,poll_space+&1400+4
H         sub     r1,r1,#&1400
H9        mov     r6,r4                   ; preserve r4
H        swi     "XOS_File"
H&8        mov     r4,r6                   ; restore r4
H0%        bvc     catalogue_read_ok
H:#        bl      report_error_ok
HD)        ldmfd   r13!,{r0-r3,r5-r7,pc}
HN.catalogue_read_ok
HXA        teq     r0,#0                   ; see if object found
Hb(        beq     pling_boot_not_found
Hl'        adr     r0,poll_space+&1400
Hv         sub     r0,r0,#&1400
H�9        ldr     r2,run                  ; r2 = "Run "
H�        str     r2,[r0]
H�%        swi     "XWimp_StartTask"
H�        bvs     fatal_error
H�)        ldmfd   r13!,{r0-r3,r5-r7,pc}
H�.run
H�        equs    "Run "
H�
H�.pling_boot_not_found
H�<        adr     r1,pling_sprites        ; r1 -> !Sprites
H�.boot_application_loop3
H�        ldrb    r2,[r1],#1
H�        strb    r2,[r7],#1
I        teq     r2,#0
I*        bne     boot_application_loop3
IM        mov     r0,#11                  ; merge sprites (ie *IconSprites)
I )        adr     r2,poll_space+&1400+4
I*         sub     r2,r2,#&1400
I4$        swi     "XWimp_SpriteOp"
I>#        blvs    report_error_ok
IH)        ldmfd   r13!,{r0-r3,r5-r7,pc}
IR
I\.pling_boot
If        equs    "!Boot"+�0
Ip.pling_sprites
Iz!        equs    "!Sprites"+�0
I�        align
I�
I�S; -----------------------------------------------------------------------------
I�;; report an error using Wimp_ReportError then closedown
I�; entry
I�;       r0 -> error block
I�
; exit
I�;       doesn't
I�
I�.fatal_error
I�'        adr     r1,poll_space+&1800
I�         sub     r1,r1,#&1800
I�        ldr     r2,[r0],#4
J        str     r2,[r1],#4
J*        adr     r2,fatal_error_message
J.fatal_error_loop1
J$        ldrb    r3,[r2],#1
J.        cmp     r3,#0
J8        strneb  r3,[r1],#1
JB%        bne     fatal_error_loop1
JL.fatal_error_loop2
JV        ldrb    r3,[r0],#1
J`        cmp     r3,#0
Jj        strneb  r3,[r1],#1
Jt%        bne     fatal_error_loop2
J~.fatal_error_loop3
J�        ldrb    r3,[r2],#1
J�        strb    r3,[r1],#1
J�        cmp     r3,#0
J�%        bne     fatal_error_loop3
J�'        adr     r0,poll_space+&1800
J�         sub     r0,r0,#&1800
J�9        mov     r1,#2                   ; cancel only
J�         bl      report_error
J�        bl      closedown
J�        swi     "OS_Exit"
J�.fatal_error_message
J�F        equs    "PlaceIt has suffered a fatal internal error ("+�0
K4        equs    ") and must exit immediately"+�0
K
        align
K
KS; -----------------------------------------------------------------------------
K(,; report an error using Wimp_ReportError
K2; entry
K<;       r0 -> error block
KF(;       r1 =  flags for error window
KP=;          bit 0 set ==> provide 'OK' box in error window
KZ1;          bit 1 set ==> provide 'Cancel' box
KdN;          bit 2 set ==> highlight 'Cancel' box (otherwise highlight 'OK')
KnR;          bit 3 set ==> don't wait for confirmation if this is a 'text' error
KxD;          bit 4 set ==> omit 'Error from ' message in title bar
K�P;          bit 5 set ==> return with r1=0 immediately if buttons not clicked
K�?;                        the error window is also left open
K�Q;          bit 6 set ==> select OK/Cancel depending on r1, close error window
K�.;          bits 7..31 reserved (must be 0)
K�
; exit
K�;       r1 = return status
K�+;               1 ==> 'OK' was selected
K�/;               2 ==> 'Cancel' was selected
K�;       flags preserved
K�;       r2 corrupted
K�
K�.report_error_ok
K�        mov     r1,#1
L.report_error
L        stmfd   r13!,{r14}
L*        adr     r2,switcher_name+&1800
L"=        sub     r2,r2,#&1800            ; r2 -> "PlaceIt"
L,&        swi     "Wimp_ReportError"
L6<        ldmfd   r13!,{pc}^              ; preserve flags
L@
LJS; -----------------------------------------------------------------------------
LT0; information about the linked list and heap
L^
Lh.start_linked_list
Lr        equd    0
L|.heap_start
L�]
L��
L�*� ~O%-code%;" = ";(O%-code%)/1024;" K"
L�(� "Save !RunImage "+�~code%+" "+�~O%
L�*SetType !RunImage Absolute
L�*Key 1 TWINO 8|M
L�*Key 2 Load !PlaceIt|M
L�*Key 3 SAVE|MRUN|M
L�*Key 4 *DeskTop|M
L��
L�
L�� �string(text$)
L�=� �(text$)>12 � � 0,text$+" is longer than 12 characters"
M[       opt    opt%
M        equs    text$
M]
M&� �(text$)<12 �
M0[       opt    opt%
M:$        equs    �12-�(text$),�0)
MD]
MN�
MX=0
�
00000000  0d 00 0a 10 f4 20 3e 20  21 50 6c 61 63 65 49 74  |..... > !PlaceIt|
00000010  0d 00 14 37 f4 20 20 20  62 79 20 49 61 6e 20 41  |...7.   by Ian A|
00000020  73 68 6c 65 79 20 28 70  6d 66 40 75 6b 2e 61 63  |shley (pmf@uk.ac|
00000030  2e 77 61 72 77 69 63 6b  2e 63 73 29 20 6f 6e 20  |.warwick.cs) on |
00000040  36 2f 31 30 2f 39 30 0d  00 1e 21 f4 20 20 20 55  |6/10/90...!.   U|
00000050  70 64 61 74 65 20 74 6f  20 31 2e 30 33 20 6f 6e  |pdate to 1.03 on|
00000060  20 31 39 2f 31 2f 39 31  0d 00 28 04 0d 00 32 32  | 19/1/91..(...22|
00000070  73 70 61 63 65 25 3d 26  32 30 30 30 20 20 20 20  |space%=&2000    |
00000080  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000090  20 20 20 20 20 20 20 20  3a 20 f4 20 38 4b 0d 00  |        : . 8K..|
000000a0  3c 04 0d 00 46 12 76 5f  66 6c 61 67 3d 31 20 3c  |<...F.v_flag=1 <|
000000b0  3c 20 32 38 0d 00 50 04  0d 00 5a 12 73 74 61 63  |< 28..P...Z.stac|
000000c0  6b 6c 65 6e 25 20 3d 20  33 32 0d 00 64 04 0d 00  |klen% = 32..d...|
000000d0  6e 45 f4 20 66 6f 72 6d  61 74 20 6f 66 20 65 61  |nE. format of ea|
000000e0  63 68 20 64 61 74 61 20  65 6e 74 72 79 20 69 6e  |ch data entry in|
000000f0  20 74 68 65 20 6c 69 6e  6b 65 64 20 6c 69 73 74  | the linked list|
00000100  20 28 73 74 6f 72 65 64  20 61 73 20 61 20 68 65  | (stored as a he|
00000110  61 70 29 0d 00 78 04 0d  00 82 20 6e 65 78 74 20  |ap)..x.... next |
00000120  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000130  20 20 20 20 3d 20 30 0d  00 8c 20 73 69 7a 65 20  |    = 0... size |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000150  20 20 20 20 3d 20 34 0d  00 96 20 6f 66 66 73 65  |    = 4... offse|
00000160  74 5f 74 6f 5f 6c 65 61  66 6e 61 6d 65 20 20 20  |t_to_leafname   |
00000170  20 20 20 20 3d 20 38 0d  00 a0 21 69 63 6f 6e 5f  |    = 8...!icon_|
00000180  68 61 6e 64 6c 65 20 20  20 20 20 20 20 20 20 20  |handle          |
00000190  20 20 20 20 3d 20 31 32  0d 00 aa 21 73 65 6c 65  |    = 12...!sele|
000001a0  63 74 65 64 20 20 20 20  20 20 20 20 20 20 20 20  |cted            |
000001b0  20 20 20 20 20 3d 20 31  33 0d 00 b4 21 78 5f 70  |     = 13...!x_p|
000001c0  6f 73 69 74 69 6f 6e 20  20 20 20 20 20 20 20 20  |osition         |
000001d0  20 20 20 20 20 20 3d 20  31 36 0d 00 be 21 79 5f  |      = 16...!y_|
000001e0  70 6f 73 69 74 69 6f 6e  20 20 20 20 20 20 20 20  |position        |
000001f0  20 20 20 20 20 20 20 3d  20 32 30 0d 00 c8 21 73  |       = 20...!s|
00000200  70 72 69 74 65 5f 6e 61  6d 65 20 20 20 20 20 20  |prite_name      |
00000210  20 20 20 20 20 20 20 20  3d 20 32 34 0d 00 d2 21  |        = 24...!|
00000220  66 69 6c 65 74 79 70 65  20 20 20 20 20 20 20 20  |filetype        |
00000230  20 20 20 20 20 20 20 20  20 3d 20 34 30 0d 00 dc  |         = 40...|
00000240  21 66 69 6c 65 6e 61 6d  65 20 20 20 20 20 20 20  |!filename       |
00000250  20 20 20 20 20 20 20 20  20 20 3d 20 34 34 0d 00  |          = 44..|
00000260  e6 04 0d 00 f0 29 f4 20  6e 65 65 64 65 64 20 74  |.....). needed t|
00000270  6f 20 73 74 6f 70 20 65  72 72 6f 72 73 20 6f 6e  |o stop errors on|
00000280  20 66 69 72 73 74 20 70  61 73 73 0d 00 fa 04 0d  | first pass.....|
00000290  01 04 24 62 61 63 6b 67  72 6f 75 6e 64 5f 77 69  |..$background_wi|
000002a0  6e 64 6f 77 5f 68 61 6e  64 6c 65 20 3d 20 26 39  |ndow_handle = &9|
000002b0  30 30 30 0d 01 0e 24 6d  6f 64 65 5f 63 68 61 6e  |000...$mode_chan|
000002c0  67 65 64 20 20 20 20 20  20 20 20 20 20 20 20 20  |ged             |
000002d0  3d 20 26 39 30 30 30 0d  01 18 24 6e 75 6d 62 65  |= &9000...$numbe|
000002e0  72 5f 73 65 6c 65 63 74  65 64 20 20 20 20 20 20  |r_selected      |
000002f0  20 20 20 20 3d 20 26 39  34 30 30 0d 01 22 24 73  |    = &9400.."$s|
00000300  74 61 72 74 5f 6c 69 6e  6b 65 64 5f 6c 69 73 74  |tart_linked_list|
00000310  20 20 20 20 20 20 20 20  3d 20 26 39 38 30 30 0d  |        = &9800.|
00000320  01 2c 30 68 65 61 70 5f  73 74 61 72 74 20 20 20  |.,0heap_start   |
00000330  20 20 20 20 20 20 20 20  20 20 20 20 3d 20 73 74  |            = st|
00000340  61 72 74 5f 6c 69 6e 6b  65 64 5f 6c 69 73 74 0d  |art_linked_list.|
00000350  01 36 04 0d 01 40 12 de  20 63 6f 64 65 25 20 73  |.6...@.. code% s|
00000360  70 61 63 65 25 0d 01 4a  04 0d 01 54 16 e3 20 6f  |pace%..J...T.. o|
00000370  70 74 25 3d 31 32 20 b8  20 31 34 20 88 20 32 0d  |pt%=12 . 14 . 2.|
00000380  01 5e 0c 50 25 3d 26 38  30 30 30 0d 01 68 0c 4f  |.^.P%=&8000..h.O|
00000390  25 3d 63 6f 64 65 25 0d  01 72 48 4c 25 3d 63 6f  |%=code%..rHL%=co|
000003a0  64 65 25 2b 73 70 61 63  65 25 20 20 20 20 20 20  |de%+space%      |
000003b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000003c0  20 20 20 3a 20 f4 20 55  70 70 65 72 20 6c 69 6d  |   : . Upper lim|
000003d0  69 74 20 66 6f 72 20 61  73 73 65 6d 62 6c 79 0d  |it for assembly.|
000003e0  01 7c 05 5b 0d 01 86 18  20 20 20 20 20 20 20 20  |.|.[....        |
000003f0  6f 70 74 20 20 20 20 20  6f 70 74 25 0d 01 90 1d  |opt     opt%....|
00000400  20 20 20 20 20 20 20 20  61 64 72 20 20 20 20 20  |        adr     |
00000410  72 31 33 2c 73 74 61 63  6b 0d 01 9a 1b 20 20 20  |r13,stack....   |
00000420  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 31 2c  |     ldr     r1,|
00000430  74 61 73 6b 0d 01 a4 42  20 20 20 20 20 20 20 20  |task...B        |
00000440  6d 6f 76 20 20 20 20 20  72 30 2c 23 32 30 30 20  |mov     r0,#200 |
00000450  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000460  3b 20 6c 61 73 74 20 6b  6e 6f 77 6e 20 77 69 6d  |; last known wim|
00000470  70 20 32 2e 30 30 0d 01  ae 3e 20 20 20 20 20 20  |p 2.00...>      |
00000480  20 20 61 64 72 20 20 20  20 20 72 32 2c 73 77 69  |  adr     r2,swi|
00000490  74 63 68 65 72 5f 6e 61  6d 65 20 20 20 20 20 20  |tcher_name      |
000004a0  20 20 3b 20 72 32 20 2d  3e 20 22 50 6c 61 63 65  |  ; r2 -> "Place|
000004b0  20 49 74 22 0d 01 b8 26  20 20 20 20 20 20 20 20  | It"...&        |
000004c0  73 77 69 20 20 20 20 20  22 58 57 69 6d 70 5f 49  |swi     "XWimp_I|
000004d0  6e 69 74 69 61 6c 69 73  65 22 0d 01 c2 21 20 20  |nitialise"...!  |
000004e0  20 20 20 20 20 20 62 76  73 20 20 20 20 20 73 74  |      bvs     st|
000004f0  61 72 74 75 70 5f 65 72  72 6f 72 0d 01 cc 22 20  |artup_error..." |
00000500  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00000510  31 2c 74 61 73 6b 5f 68  61 6e 64 6c 65 0d 01 d6  |1,task_handle...|
00000520  21 20 20 20 20 20 20 20  20 62 76 73 20 20 20 20  |!        bvs    |
00000530  20 73 74 61 72 74 75 70  5f 65 72 72 6f 72 0d 01  | startup_error..|
00000540  e0 2c 20 20 20 20 20 20  20 20 62 6c 20 20 20 20  |.,        bl    |
00000550  20 20 64 65 66 69 6e 65  5f 62 61 63 6b 67 72 6f  |  define_backgro|
00000560  75 6e 64 5f 77 69 6e 64  6f 77 0d 01 ea 21 20 20  |und_window...!  |
00000570  20 20 20 20 20 20 62 76  73 20 20 20 20 20 73 74  |      bvs     st|
00000580  61 72 74 75 70 5f 65 72  72 6f 72 0d 01 f4 26 20  |artup_error...& |
00000590  20 20 20 20 20 20 20 62  6c 20 20 20 20 20 20 64  |       bl      d|
000005a0  65 66 69 6e 65 5f 69 6e  66 6f 5f 77 69 6e 64 6f  |efine_info_windo|
000005b0  77 0d 01 fe 21 20 20 20  20 20 20 20 20 62 76 73  |w...!        bvs|
000005c0  20 20 20 20 20 73 74 61  72 74 75 70 5f 65 72 72  |     startup_err|
000005d0  6f 72 0d 02 08 2a 20 20  20 20 20 20 20 20 62 6c  |or...*        bl|
000005e0  20 20 20 20 20 20 73 65  74 5f 69 6e 69 74 69 61  |      set_initia|
000005f0  6c 5f 63 6f 6e 64 69 74  69 6f 6e 73 0d 02 12 21  |l_conditions...!|
00000600  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
00000610  73 74 61 72 74 75 70 5f  65 72 72 6f 72 0d 02 1c  |startup_error...|
00000620  24 20 20 20 20 20 20 20  20 62 6c 20 20 20 20 20  |$        bl     |
00000630  20 6c 6f 61 64 5f 63 6f  6e 66 69 67 5f 66 69 6c  | load_config_fil|
00000640  65 0d 02 26 21 20 20 20  20 20 20 20 20 62 76 73  |e..&!        bvs|
00000650  20 20 20 20 20 73 74 61  72 74 75 70 5f 65 72 72  |     startup_err|
00000660  6f 72 0d 02 30 18 20 20  20 20 20 20 20 20 62 20  |or..0.        b |
00000670  20 20 20 20 20 20 70 6f  6c 6c 0d 02 3a 04 0d 02  |      poll..:...|
00000680  44 12 2e 73 77 69 74 63  68 65 72 5f 6e 61 6d 65  |D..switcher_name|
00000690  0d 02 4e 1e 20 20 20 20  20 20 20 20 65 71 75 73  |..N.        equs|
000006a0  20 20 20 20 22 50 6c 61  63 65 20 49 74 22 0d 02  |    "Place It"..|
000006b0  58 15 20 20 20 20 20 20  20 20 65 71 75 62 20 20  |X.        equb  |
000006c0  20 20 30 0d 02 62 11 20  20 20 20 20 20 20 20 61  |  0..b.        a|
000006d0  6c 69 67 6e 0d 02 6c 10  2e 74 61 73 6b 5f 68 61  |lign..l..task_ha|
000006e0  6e 64 6c 65 0d 02 76 15  20 20 20 20 20 20 20 20  |ndle..v.        |
000006f0  65 71 75 64 20 20 20 20  30 0d 02 80 09 2e 74 61  |equd    0.....ta|
00000700  73 6b 0d 02 8a 1a 20 20  20 20 20 20 20 20 65 71  |sk....        eq|
00000710  75 73 20 20 20 20 22 54  41 53 4b 22 0d 02 94 04  |us    "TASK"....|
00000720  0d 02 9e 53 3b 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...S; ----------|
00000730  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000770  2d 2d 2d 0d 02 a8 4e 3b  20 72 65 70 6f 72 74 20  |---...N; report |
00000780  61 6e 20 65 72 72 6f 72  20 75 73 69 6e 67 20 57  |an error using W|
00000790  69 6d 70 5f 52 65 70 6f  72 74 45 72 72 6f 72 2c  |imp_ReportError,|
000007a0  20 73 65 74 20 63 6f 75  6c 64 20 6e 6f 74 20 73  | set could not s|
000007b0  74 61 72 74 20 75 70 20  66 6c 61 67 20 74 68 65  |tart up flag the|
000007c0  6e 0d 02 b2 0f 3b 20 63  6c 6f 73 65 64 6f 77 6e  |n....; closedown|
000007d0  0d 02 bc 0b 3b 20 65 6e  74 72 79 0d 02 c6 1d 3b  |....; entry....;|
000007e0  20 20 20 20 20 20 20 72  30 20 2d 3e 20 65 72 72  |       r0 -> err|
000007f0  6f 72 20 62 6c 6f 63 6b  0d 02 d0 0a 3b 20 65 78  |or block....; ex|
00000800  69 74 0d 02 da 13 3b 20  20 20 20 20 20 20 64 6f  |it....;       do|
00000810  65 73 6e 27 74 0d 02 e4  04 0d 02 ee 12 2e 73 74  |esn't.........st|
00000820  61 72 74 75 70 5f 65 72  72 6f 72 0d 02 f8 21 20  |artup_error...! |
00000830  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
00000840  31 2c 70 6f 6c 6c 5f 73  70 61 63 65 0d 03 02 1e  |1,poll_space....|
00000850  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
00000860  72 32 2c 5b 72 30 5d 2c  23 34 0d 03 0c 1e 20 20  |r2,[r0],#4....  |
00000870  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 32  |      str     r2|
00000880  2c 5b 72 31 5d 2c 23 34  0d 03 16 2c 20 20 20 20  |,[r1],#4...,    |
00000890  20 20 20 20 61 64 72 20  20 20 20 20 72 32 2c 73  |    adr     r2,s|
000008a0  74 61 72 74 75 70 5f 65  72 72 6f 72 5f 6d 65 73  |tartup_error_mes|
000008b0  73 61 67 65 0d 03 20 18  2e 73 74 61 72 74 75 70  |sage.. ..startup|
000008c0  5f 65 72 72 6f 72 5f 6c  6f 6f 70 31 0d 03 2a 1e  |_error_loop1..*.|
000008d0  20 20 20 20 20 20 20 20  6c 64 72 62 20 20 20 20  |        ldrb    |
000008e0  72 33 2c 5b 72 32 5d 2c  23 31 0d 03 34 19 20 20  |r3,[r2],#1..4.  |
000008f0  20 20 20 20 20 20 63 6d  70 20 20 20 20 20 72 33  |      cmp     r3|
00000900  2c 23 30 0d 03 3e 1e 20  20 20 20 20 20 20 20 73  |,#0..>.        s|
00000910  74 72 6e 65 62 20 20 72  33 2c 5b 72 31 5d 2c 23  |trneb  r3,[r1],#|
00000920  31 0d 03 48 27 20 20 20  20 20 20 20 20 62 6e 65  |1..H'        bne|
00000930  20 20 20 20 20 73 74 61  72 74 75 70 5f 65 72 72  |     startup_err|
00000940  6f 72 5f 6c 6f 6f 70 31  0d 03 52 18 2e 73 74 61  |or_loop1..R..sta|
00000950  72 74 75 70 5f 65 72 72  6f 72 5f 6c 6f 6f 70 32  |rtup_error_loop2|
00000960  0d 03 5c 1e 20 20 20 20  20 20 20 20 6c 64 72 62  |..\.        ldrb|
00000970  20 20 20 20 72 33 2c 5b  72 30 5d 2c 23 31 0d 03  |    r3,[r0],#1..|
00000980  66 19 20 20 20 20 20 20  20 20 63 6d 70 20 20 20  |f.        cmp   |
00000990  20 20 72 33 2c 23 30 0d  03 70 1e 20 20 20 20 20  |  r3,#0..p.     |
000009a0  20 20 20 73 74 72 6e 65  62 20 20 72 33 2c 5b 72  |   strneb  r3,[r|
000009b0  31 5d 2c 23 31 0d 03 7a  27 20 20 20 20 20 20 20  |1],#1..z'       |
000009c0  20 62 6e 65 20 20 20 20  20 73 74 61 72 74 75 70  | bne     startup|
000009d0  5f 65 72 72 6f 72 5f 6c  6f 6f 70 32 0d 03 84 18  |_error_loop2....|
000009e0  2e 73 74 61 72 74 75 70  5f 65 72 72 6f 72 5f 6c  |.startup_error_l|
000009f0  6f 6f 70 33 0d 03 8e 1e  20 20 20 20 20 20 20 20  |oop3....        |
00000a00  6c 64 72 62 20 20 20 20  72 33 2c 5b 72 32 5d 2c  |ldrb    r3,[r2],|
00000a10  23 31 0d 03 98 1e 20 20  20 20 20 20 20 20 73 74  |#1....        st|
00000a20  72 62 20 20 20 20 72 33  2c 5b 72 31 5d 2c 23 31  |rb    r3,[r1],#1|
00000a30  0d 03 a2 19 20 20 20 20  20 20 20 20 63 6d 70 20  |....        cmp |
00000a40  20 20 20 20 72 33 2c 23  30 0d 03 ac 27 20 20 20  |    r3,#0...'   |
00000a50  20 20 20 20 20 62 6e 65  20 20 20 20 20 73 74 61  |     bne     sta|
00000a60  72 74 75 70 5f 65 72 72  6f 72 5f 6c 6f 6f 70 33  |rtup_error_loop3|
00000a70  0d 03 b6 21 20 20 20 20  20 20 20 20 61 64 72 20  |...!        adr |
00000a80  20 20 20 20 72 30 2c 70  6f 6c 6c 5f 73 70 61 63  |    r0,poll_spac|
00000a90  65 0d 03 c0 39 20 20 20  20 20 20 20 20 6d 6f 76  |e...9        mov|
00000aa0  20 20 20 20 20 72 31 2c  23 32 20 20 20 20 20 20  |     r1,#2      |
00000ab0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 63  |             ; c|
00000ac0  61 6e 63 65 6c 20 6f 6e  6c 79 0d 03 ca 20 20 20  |ancel only...   |
00000ad0  20 20 20 20 20 20 62 6c  20 20 20 20 20 20 72 65  |      bl      re|
00000ae0  70 6f 72 74 5f 65 72 72  6f 72 0d 03 d4 1d 20 20  |port_error....  |
00000af0  20 20 20 20 20 20 62 6c  20 20 20 20 20 20 63 6c  |      bl      cl|
00000b00  6f 73 65 64 6f 77 6e 0d  03 de 1d 20 20 20 20 20  |osedown....     |
00000b10  20 20 20 73 77 69 20 20  20 20 20 22 4f 53 5f 45  |   swi     "OS_E|
00000b20  78 69 74 22 0d 03 e8 1a  2e 73 74 61 72 74 75 70  |xit".....startup|
00000b30  5f 65 72 72 6f 72 5f 6d  65 73 73 61 67 65 0d 03  |_error_message..|
00000b40  f2 34 20 20 20 20 20 20  20 20 65 71 75 73 20 20  |.4        equs  |
00000b50  20 20 22 50 6c 61 63 65  49 74 20 63 6f 75 6c 64  |  "PlaceIt could|
00000b60  20 6e 6f 74 20 73 74 61  72 74 75 70 20 28 22 2b  | not startup ("+|
00000b70  bd 30 0d 03 fc 34 20 20  20 20 20 20 20 20 65 71  |.0...4        eq|
00000b80  75 73 20 20 20 20 22 29  20 61 6e 64 20 6d 75 73  |us    ") and mus|
00000b90  74 20 65 78 69 74 20 69  6d 6d 65 64 69 61 74 65  |t exit immediate|
00000ba0  6c 79 22 2b bd 30 0d 04  06 11 20 20 20 20 20 20  |ly"+.0....      |
00000bb0  20 20 61 6c 69 67 6e 0d  04 10 04 0d 04 1a 53 3b  |  align.......S;|
00000bc0  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00000bd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000c00  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 04  |--------------..|
00000c10  24 25 3b 20 70 6f 6c 6c  20 73 70 61 63 65 2c 20  |$%; poll space, |
00000c20  77 6f 72 6b 73 70 61 63  65 20 61 6e 64 20 73 74  |workspace and st|
00000c30  61 63 6b 0d 04 2e 04 0d  04 38 0f 2e 70 6f 6c 6c  |ack......8..poll|
00000c40  5f 73 70 61 63 65 0d 04  42 1c 20 20 20 20 20 20  |_space..B.      |
00000c50  20 20 65 71 75 73 20 20  20 20 c4 31 32 38 2c bd  |  equs    .128,.|
00000c60  30 29 0d 04 4c 1c 20 20  20 20 20 20 20 20 65 71  |0)..L.        eq|
00000c70  75 73 20 20 20 20 c4 31  32 38 2c bd 30 29 0d 04  |us    .128,.0)..|
00000c80  56 0e 2e 77 6f 72 6b 73  70 61 63 65 0d 04 60 1b  |V..workspace..`.|
00000c90  20 20 20 20 20 20 20 20  65 71 75 73 20 20 20 20  |        equs    |
00000ca0  c4 36 30 2c bd 30 29 0d  04 6a 10 2e 73 74 61 63  |.60,.0)..j..stac|
00000cb0  6b 5f 73 74 61 72 74 0d  04 74 22 20 20 20 20 20  |k_start..t"     |
00000cc0  20 20 20 65 71 75 73 20  20 20 20 c4 73 74 61 63  |   equs    .stac|
00000cd0  6b 6c 65 6e 25 2c bd 30  29 0d 04 7e 0a 2e 73 74  |klen%,.0)..~..st|
00000ce0  61 63 6b 0d 04 88 04 0d  04 92 53 3b 20 2d 2d 2d  |ack.......S; ---|
00000cf0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000d30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 04 9c 14 3b 20  |----------....; |
00000d40  77 69 6d 70 20 70 6f 6c  6c 20 6c 6f 6f 70 0d 04  |wimp poll loop..|
00000d50  a6 04 0d 04 b0 09 2e 70  6f 6c 6c 0d 04 ba 32 20  |.......poll...2 |
00000d60  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
00000d70  30 2c 23 25 31 31 30 30  30 31 20 20 20 20 20 20  |0,#%110001      |
00000d80  20 20 20 20 20 20 20 3b  20 4d 61 73 6b 0d 04 c4  |       ; Mask...|
00000d90  21 20 20 20 20 20 20 20  20 61 64 72 20 20 20 20  |!        adr    |
00000da0  20 72 31 2c 70 6f 6c 6c  5f 73 70 61 63 65 0d 04  | r1,poll_space..|
00000db0  ce 20 20 20 20 20 20 20  20 20 73 77 69 20 20 20  |.         swi   |
00000dc0  20 20 22 58 57 69 6d 70  5f 50 6f 6c 6c 22 0d 04  |  "XWimp_Poll"..|
00000dd0  d8 1f 20 20 20 20 20 20  20 20 62 76 73 20 20 20  |..        bvs   |
00000de0  20 20 66 61 74 61 6c 5f  65 72 72 6f 72 0d 04 e2  |  fatal_error...|
00000df0  19 20 20 20 20 20 20 20  20 74 65 71 20 20 20 20  |.        teq    |
00000e00  20 72 30 2c 23 31 0d 04  ec 21 20 20 20 20 20 20  | r0,#1...!      |
00000e10  20 20 62 65 71 20 20 20  20 20 72 65 64 72 61 77  |  beq     redraw|
00000e20  5f 77 69 6e 64 6f 77 0d  04 f6 19 20 20 20 20 20  |_window....     |
00000e30  20 20 20 74 65 71 20 20  20 20 20 72 30 2c 23 32  |   teq     r0,#2|
00000e40  0d 05 00 1f 20 20 20 20  20 20 20 20 62 65 71 20  |....        beq |
00000e50  20 20 20 20 6f 70 65 6e  5f 77 69 6e 64 6f 77 0d  |    open_window.|
00000e60  05 0a 19 20 20 20 20 20  20 20 20 74 65 71 20 20  |...        teq  |
00000e70  20 20 20 72 30 2c 23 33  0d 05 14 20 20 20 20 20  |   r0,#3...     |
00000e80  20 20 20 20 62 65 71 20  20 20 20 20 63 6c 6f 73  |    beq     clos|
00000e90  65 5f 77 69 6e 64 6f 77  0d 05 1e 19 20 20 20 20  |e_window....    |
00000ea0  20 20 20 20 74 65 71 20  20 20 20 20 72 30 2c 23  |    teq     r0,#|
00000eb0  36 0d 05 28 20 20 20 20  20 20 20 20 20 62 65 71  |6..(         beq|
00000ec0  20 20 20 20 20 6d 6f 75  73 65 5f 62 75 74 74 6f  |     mouse_butto|
00000ed0  6e 0d 05 32 19 20 20 20  20 20 20 20 20 74 65 71  |n..2.        teq|
00000ee0  20 20 20 20 20 72 30 2c  23 37 0d 05 3c 1c 20 20  |     r0,#7..<.  |
00000ef0  20 20 20 20 20 20 62 65  71 20 20 20 20 20 64 72  |      beq     dr|
00000f00  61 67 5f 65 6e 64 0d 05  46 19 20 20 20 20 20 20  |ag_end..F.      |
00000f10  20 20 74 65 71 20 20 20  20 20 72 30 2c 23 39 0d  |  teq     r0,#9.|
00000f20  05 50 1f 20 20 20 20 20  20 20 20 62 65 71 20 20  |.P.        beq  |
00000f30  20 20 20 6d 65 6e 75 5f  73 65 6c 65 63 74 0d 05  |   menu_select..|
00000f40  5a 1a 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |Z.        teq   |
00000f50  20 20 72 30 2c 23 31 37  0d 05 64 1a 20 20 20 20  |  r0,#17..d.    |
00000f60  20 20 20 20 74 65 71 6e  65 20 20 20 72 30 2c 23  |    teqne   r0,#|
00000f70  31 38 0d 05 6e 1b 20 20  20 20 20 20 20 20 62 65  |18..n.        be|
00000f80  71 20 20 20 20 20 6d 65  73 73 61 67 65 0d 05 78  |q     message..x|
00000f90  1a 20 20 20 20 20 20 20  20 74 65 71 20 20 20 20  |.        teq    |
00000fa0  20 72 30 2c 23 31 39 0d  05 82 28 20 20 20 20 20  | r0,#19...(     |
00000fb0  20 20 20 62 65 71 20 20  20 20 20 6d 65 73 73 61  |   beq     messa|
00000fc0  67 65 5f 61 63 6b 6e 6f  77 6c 65 64 67 65 64 0d  |ge_acknowledged.|
00000fd0  05 8c 18 20 20 20 20 20  20 20 20 62 20 20 20 20  |...        b    |
00000fe0  20 20 20 70 6f 6c 6c 0d  05 96 04 0d 05 a0 53 3b  |   poll.......S;|
00000ff0  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00001000  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001030  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 05  |--------------..|
00001040  aa 29 3b 20 72 65 64 72  61 77 20 77 69 6e 64 6f  |.); redraw windo|
00001050  77 20 72 65 71 75 65 73  74 20 68 61 73 20 62 65  |w request has be|
00001060  65 6e 20 73 65 6e 74 0d  05 b4 04 0d 05 be 12 2e  |en sent.........|
00001070  72 65 64 72 61 77 5f 77  69 6e 64 6f 77 0d 05 c8  |redraw_window...|
00001080  28 20 20 20 20 20 20 20  20 73 77 69 20 20 20 20  |(        swi    |
00001090  20 22 58 57 69 6d 70 5f  52 65 64 72 61 77 57 69  | "XWimp_RedrawWi|
000010a0  6e 64 6f 77 22 0d 05 d2  1f 20 20 20 20 20 20 20  |ndow"....       |
000010b0  20 62 76 73 20 20 20 20  20 66 61 74 61 6c 5f 65  | bvs     fatal_e|
000010c0  72 72 6f 72 0d 05 dc 18  20 20 20 20 20 20 20 20  |rror....        |
000010d0  62 20 20 20 20 20 20 20  70 6f 6c 6c 0d 05 e6 04  |b       poll....|
000010e0  0d 05 f0 53 3b 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...S; ----------|
000010f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001130  2d 2d 2d 0d 05 fa 27 3b  20 6f 70 65 6e 20 77 69  |---...'; open wi|
00001140  6e 64 6f 77 20 72 65 71  75 65 73 74 20 68 61 73  |ndow request has|
00001150  20 62 65 65 6e 20 73 65  6e 74 0d 06 04 04 0d 06  | been sent......|
00001160  0e 10 2e 6f 70 65 6e 5f  77 69 6e 64 6f 77 0d 06  |...open_window..|
00001170  18 29 20 20 20 20 20 20  20 20 61 64 72 20 20 20  |.)        adr   |
00001180  20 20 72 32 2c 6d 6f 64  65 5f 63 68 61 6e 67 65  |  r2,mode_change|
00001190  64 2d 26 31 30 30 30 0d  06 22 20 20 20 20 20 20  |d-&1000.."      |
000011a0  20 20 20 61 64 64 20 20  20 20 20 72 32 2c 72 32  |   add     r2,r2|
000011b0  2c 23 26 31 30 30 30 0d  06 2c 1b 20 20 20 20 20  |,#&1000..,.     |
000011c0  20 20 20 6c 64 72 62 20  20 20 20 72 30 2c 5b 72  |   ldrb    r0,[r|
000011d0  32 5d 0d 06 36 4a 20 20  20 20 20 20 20 20 74 65  |2]..6J        te|
000011e0  71 20 20 20 20 20 72 30  2c 23 31 20 20 20 20 20  |q     r0,#1     |
000011f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00001200  73 65 65 20 69 66 20 6d  6f 64 65 20 68 61 73 20  |see if mode has |
00001210  6a 75 73 74 20 63 68 61  6e 67 65 64 0d 06 40 35  |just changed..@5|
00001220  20 20 20 20 20 20 20 20  61 64 72 65 71 20 20 20  |        adreq   |
00001230  72 31 2c 62 61 63 6b 67  72 6f 75 6e 64 5f 77 69  |r1,background_wi|
00001240  6e 64 6f 77 5f 68 61 6e  64 6c 65 2d 26 31 30 30  |ndow_handle-&100|
00001250  30 0d 06 4a 20 20 20 20  20 20 20 20 20 61 64 64  |0..J         add|
00001260  65 71 20 20 20 72 31 2c  72 31 2c 23 26 31 30 30  |eq   r1,r1,#&100|
00001270  30 0d 06 54 19 20 20 20  20 20 20 20 20 6d 6f 76  |0..T.        mov|
00001280  65 71 20 20 20 72 30 2c  23 30 0d 06 5e 1b 20 20  |eq   r0,#0..^.  |
00001290  20 20 20 20 20 20 73 74  72 65 71 62 20 20 72 30  |      streqb  r0|
000012a0  2c 5b 72 32 5d 0d 06 68  26 20 20 20 20 20 20 20  |,[r2]..h&       |
000012b0  20 73 77 69 20 20 20 20  20 22 58 57 69 6d 70 5f  | swi     "XWimp_|
000012c0  4f 70 65 6e 57 69 6e 64  6f 77 22 0d 06 72 1f 20  |OpenWindow"..r. |
000012d0  20 20 20 20 20 20 20 62  76 73 20 20 20 20 20 66  |       bvs     f|
000012e0  61 74 61 6c 5f 65 72 72  6f 72 0d 06 7c 18 20 20  |atal_error..|.  |
000012f0  20 20 20 20 20 20 62 20  20 20 20 20 20 20 70 6f  |      b       po|
00001300  6c 6c 0d 06 86 04 0d 06  90 53 3b 20 2d 2d 2d 2d  |ll.......S; ----|
00001310  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001350  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 06 9a 28 3b 20 63  |---------...(; c|
00001360  6c 6f 73 65 20 77 69 6e  64 6f 77 20 72 65 71 75  |lose window requ|
00001370  65 73 74 20 68 61 73 20  62 65 65 6e 20 73 65 6e  |est has been sen|
00001380  74 0d 06 a4 04 0d 06 ae  11 2e 63 6c 6f 73 65 5f  |t.........close_|
00001390  77 69 6e 64 6f 77 0d 06  b8 27 20 20 20 20 20 20  |window...'      |
000013a0  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
000013b0  5f 43 6c 6f 73 65 57 69  6e 64 6f 77 22 0d 06 c2  |_CloseWindow"...|
000013c0  1f 20 20 20 20 20 20 20  20 62 76 73 20 20 20 20  |.        bvs    |
000013d0  20 66 61 74 61 6c 5f 65  72 72 6f 72 0d 06 cc 18  | fatal_error....|
000013e0  20 20 20 20 20 20 20 20  62 20 20 20 20 20 20 20  |        b       |
000013f0  70 6f 6c 6c 0d 06 d6 04  0d 06 e0 53 3b 20 2d 2d  |poll.......S; --|
00001400  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001440  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 06 ea 27 3b  |-----------...';|
00001450  20 6d 6f 75 73 65 20 63  6c 69 63 6b 20 72 65 71  | mouse click req|
00001460  75 65 73 74 20 68 61 73  20 62 65 65 6e 20 73 65  |uest has been se|
00001470  6e 74 0d 06 f4 04 0d 06  fe 11 2e 6d 6f 75 73 65  |nt.........mouse|
00001480  5f 62 75 74 74 6f 6e 0d  07 08 47 20 20 20 20 20  |_button...G     |
00001490  20 20 20 6c 64 72 20 20  20 20 20 72 30 2c 5b 72  |   ldr     r0,[r|
000014a0  31 2c 23 31 32 5d 20 20  20 20 20 20 20 20 20 20  |1,#12]          |
000014b0  20 20 20 3b 20 72 30 3d  77 69 6e 64 6f 77 20 68  |   ; r0=window h|
000014c0  61 6e 64 6c 65 20 6f 66  20 63 6c 69 63 6b 0d 07  |andle of click..|
000014d0  12 35 20 20 20 20 20 20  20 20 61 64 72 20 20 20  |.5        adr   |
000014e0  20 20 72 32 2c 62 61 63  6b 67 72 6f 75 6e 64 5f  |  r2,background_|
000014f0  77 69 6e 64 6f 77 5f 68  61 6e 64 6c 65 2d 26 31  |window_handle-&1|
00001500  30 30 30 0d 07 1c 20 20  20 20 20 20 20 20 20 61  |000...         a|
00001510  64 64 20 20 20 20 20 72  32 2c 72 32 2c 23 26 31  |dd     r2,r2,#&1|
00001520  30 30 30 0d 07 26 1b 20  20 20 20 20 20 20 20 6c  |000..&.        l|
00001530  64 72 20 20 20 20 20 72  32 2c 5b 72 32 5d 0d 07  |dr     r2,[r2]..|
00001540  30 43 20 20 20 20 20 20  20 20 63 6d 70 20 20 20  |0C        cmp   |
00001550  20 20 72 30 2c 72 32 20  20 20 20 20 20 20 20 20  |  r0,r2         |
00001560  20 20 20 20 20 20 20 20  20 20 3b 20 69 73 20 69  |          ; is i|
00001570  74 20 6f 6e 20 6f 75 72  20 77 69 6e 64 6f 77 20  |t on our window |
00001580  3f 0d 07 3a 39 20 20 20  20 20 20 20 20 62 6e 65  |?..:9        bne|
00001590  20 20 20 20 20 70 6f 6c  6c 20 20 20 20 20 20 20  |     poll       |
000015a0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 70  |             ; p|
000015b0  6f 6c 6c 20 69 66 20 6e  6f 74 0d 07 44 3d 20 20  |oll if not..D=  |
000015c0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 30  |      ldr     r0|
000015d0  2c 5b 72 31 2c 23 38 5d  20 20 20 20 20 20 20 20  |,[r1,#8]        |
000015e0  20 20 20 20 20 20 3b 20  72 30 3d 62 75 74 74 6f  |      ; r0=butto|
000015f0  6e 20 73 74 61 74 65 0d  07 4e 4a 20 20 20 20 20  |n state..NJ     |
00001600  20 20 20 74 73 74 20 20  20 20 20 72 30 2c 23 32  |   tst     r0,#2|
00001610  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001620  20 20 20 3b 20 73 65 65  20 69 66 20 6d 69 64 64  |   ; see if midd|
00001630  6c 65 20 62 75 74 74 6f  6e 20 63 6c 69 63 6b 65  |le button clicke|
00001640  64 0d 07 58 3d 20 20 20  20 20 20 20 20 62 6e 65  |d..X=        bne|
00001650  20 20 20 20 20 6f 70 65  6e 5f 6d 65 6e 75 20 20  |     open_menu  |
00001660  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 69  |             ; i|
00001670  66 20 73 6f 20 6f 70 65  6e 20 6d 65 6e 75 0d 07  |f so open menu..|
00001680  62 47 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |bG        ldr   |
00001690  20 20 72 32 2c 5b 72 31  2c 23 31 36 5d 20 20 20  |  r2,[r1,#16]   |
000016a0  20 20 20 20 20 20 20 20  20 20 3b 20 72 32 3d 69  |          ; r2=i|
000016b0  63 6f 6e 20 68 61 6e 64  6c 65 20 63 6c 69 63 6b  |con handle click|
000016c0  65 64 20 6f 6e 0d 07 6c  40 20 20 20 20 20 20 20  |ed on..l@       |
000016d0  20 63 6d 6e 20 20 20 20  20 72 32 2c 23 31 20 20  | cmn     r2,#1  |
000016e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016f0  20 3b 20 73 65 65 20 69  66 20 6e 6f 74 20 6f 6e  | ; see if not on|
00001700  20 69 63 6f 6e 0d 07 76  50 20 20 20 20 20 20 20  | icon..vP       |
00001710  20 6d 6f 76 65 71 20 20  20 72 30 2c 72 30 2c 6c  | moveq   r0,r0,l|
00001720  73 6c 20 23 38 20 20 20  20 20 20 20 20 20 20 20  |sl #8           |
00001730  20 3b 20 69 66 20 73 68  69 66 74 20 62 75 74 74  | ; if shift butt|
00001740  6f 6e 20 73 74 61 74 65  20 74 6f 20 72 69 67 68  |on state to righ|
00001750  74 20 70 6f 73 0d 07 80  4b 20 20 20 20 20 20 20  |t pos...K       |
00001760  20 74 73 74 20 20 20 20  20 72 30 2c 23 25 31 30  | tst     r0,#%10|
00001770  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00001780  20 3b 20 73 65 65 20 69  66 20 62 75 74 74 6f 6e  | ; see if button|
00001790  20 64 6f 75 62 6c 65 64  20 63 6c 69 63 6b 65 64  | doubled clicked|
000017a0  0d 07 8a 22 20 20 20 20  20 20 20 20 62 6e 65 20  |..."        bne |
000017b0  20 20 20 20 64 6f 75 62  6c 65 5f 63 6c 69 63 6b  |    double_click|
000017c0  65 64 0d 07 94 41 20 20  20 20 20 20 20 20 74 73  |ed...A        ts|
000017d0  74 20 20 20 20 20 72 30  2c 23 25 31 30 31 20 2a  |t     r0,#%101 *|
000017e0  20 31 36 20 20 20 20 20  20 20 20 20 20 20 3b 20  | 16           ; |
000017f0  73 65 65 20 69 66 20 64  72 61 67 20 73 74 61 72  |see if drag star|
00001800  74 65 64 0d 07 9e 20 20  20 20 20 20 20 20 20 62  |ted...         b|
00001810  6e 65 20 20 20 20 20 64  72 61 67 5f 73 74 61 72  |ne     drag_star|
00001820  74 65 64 0d 07 a8 43 20  20 20 20 20 20 20 20 74  |ted...C        t|
00001830  73 74 20 20 20 20 20 72  30 2c 23 25 30 30 31 20  |st     r0,#%001 |
00001840  2a 20 32 35 36 20 20 20  20 20 20 20 20 20 20 3b  |* 256          ;|
00001850  20 73 65 65 20 69 66 20  61 64 6a 75 73 74 20 63  | see if adjust c|
00001860  6c 69 63 6b 65 64 0d 07  b2 22 20 20 20 20 20 20  |licked..."      |
00001870  20 20 62 6e 65 20 20 20  20 20 61 64 6a 75 73 74  |  bne     adjust|
00001880  5f 63 6c 69 63 6b 65 64  0d 07 bc 13 2e 73 65 6c  |_clicked.....sel|
00001890  65 63 74 5f 63 6c 69 63  6b 65 64 0d 07 c6 40 20  |ect_clicked...@ |
000018a0  20 20 20 20 20 20 20 63  6d 6e 20 20 20 20 20 72  |       cmn     r|
000018b0  32 2c 23 31 20 20 20 20  20 20 20 20 20 20 20 20  |2,#1            |
000018c0  20 20 20 20 20 20 20 3b  20 73 65 65 20 69 66 20  |       ; see if |
000018d0  6f 6e 20 77 6f 72 6b 61  72 65 61 0d 07 d0 40 20  |on workarea...@ |
000018e0  20 20 20 20 20 20 20 62  6c 65 71 20 20 20 20 75  |       bleq    u|
000018f0  6e 73 65 6c 65 63 74 5f  61 6c 6c 20 20 20 20 20  |nselect_all     |
00001900  20 20 20 20 20 20 20 3b  20 69 66 20 73 6f 20 75  |       ; if so u|
00001910  6e 73 65 6c 65 63 74 20  61 6c 6c 0d 07 da 37 20  |nselect all...7 |
00001920  20 20 20 20 20 20 20 62  65 71 20 20 20 20 20 70  |       beq     p|
00001930  6f 6c 6c 20 20 20 20 20  20 20 20 20 20 20 20 20  |oll             |
00001940  20 20 20 20 20 20 20 3b  20 74 68 65 6e 20 70 6f  |       ; then po|
00001950  6c 6c 0d 07 e4 1d 20 20  20 20 20 20 20 20 62 6c  |ll....        bl|
00001960  20 20 20 20 20 20 66 69  6e 64 5f 69 63 6f 6e 0d  |      find_icon.|
00001970  07 ee 25 20 20 20 20 20  20 20 20 6c 64 72 62 20  |..%        ldrb |
00001980  20 20 20 72 33 2c 5b 72  34 2c 23 73 65 6c 65 63  |   r3,[r4,#selec|
00001990  74 65 64 5d 0d 07 f8 3d  20 20 20 20 20 20 20 20  |ted]...=        |
000019a0  74 65 71 20 20 20 20 20  72 33 2c 23 31 20 20 20  |teq     r3,#1   |
000019b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000019c0  3b 20 73 65 65 20 69 66  20 73 65 6c 65 63 74 65  |; see if selecte|
000019d0  64 0d 08 02 38 20 20 20  20 20 20 20 20 62 65 71  |d...8        beq|
000019e0  20 20 20 20 20 70 6f 6c  6c 20 20 20 20 20 20 20  |     poll       |
000019f0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 69  |             ; i|
00001a00  66 20 73 6f 20 70 6f 6c  6c 0d 08 0c 20 20 20 20  |f so poll...    |
00001a10  20 20 20 20 20 62 6c 20  20 20 20 20 20 75 6e 73  |     bl      uns|
00001a20  65 6c 65 63 74 5f 61 6c  6c 0d 08 16 39 20 20 20  |elect_all...9   |
00001a30  20 20 20 20 20 62 6c 20  20 20 20 20 20 73 65 6c  |     bl      sel|
00001a40  65 63 74 5f 69 63 6f 6e  20 20 20 20 20 20 20 20  |ect_icon        |
00001a50  20 20 20 20 20 3b 20 73  65 6c 65 63 74 20 69 63  |     ; select ic|
00001a60  6f 6e 0d 08 20 19 20 20  20 20 20 20 20 20 6d 6f  |on.. .        mo|
00001a70  76 20 20 20 20 20 72 32  2c 23 31 0d 08 2a 2c 20  |v     r2,#1..*, |
00001a80  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
00001a90  33 2c 6e 75 6d 62 65 72  5f 73 65 6c 65 63 74 65  |3,number_selecte|
00001aa0  64 2d 26 31 30 30 30 0d  08 34 20 20 20 20 20 20  |d-&1000..4      |
00001ab0  20 20 20 61 64 64 20 20  20 20 20 72 33 2c 72 33  |   add     r3,r3|
00001ac0  2c 23 26 31 30 30 30 0d  08 3e 1b 20 20 20 20 20  |,#&1000..>.     |
00001ad0  20 20 20 73 74 72 62 20  20 20 20 72 32 2c 5b 72  |   strb    r2,[r|
00001ae0  33 5d 0d 08 48 25 20 20  20 20 20 20 20 20 73 74  |3]..H%        st|
00001af0  72 62 20 20 20 20 72 32  2c 5b 72 34 2c 23 73 65  |rb    r2,[r4,#se|
00001b00  6c 65 63 74 65 64 5d 0d  08 52 18 20 20 20 20 20  |lected]..R.     |
00001b10  20 20 20 62 20 20 20 20  20 20 20 70 6f 6c 6c 0d  |   b       poll.|
00001b20  08 5c 13 2e 61 64 6a 75  73 74 5f 63 6c 69 63 6b  |.\..adjust_click|
00001b30  65 64 0d 08 66 40 20 20  20 20 20 20 20 20 63 6d  |ed..f@        cm|
00001b40  6e 20 20 20 20 20 72 32  2c 23 31 20 20 20 20 20  |n     r2,#1     |
00001b50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00001b60  73 65 65 20 69 66 20 6f  6e 20 77 6f 72 6b 61 72  |see if on workar|
00001b70  65 61 0d 08 70 38 20 20  20 20 20 20 20 20 62 65  |ea..p8        be|
00001b80  71 20 20 20 20 20 70 6f  6c 6c 20 20 20 20 20 20  |q     poll      |
00001b90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00001ba0  69 66 20 73 6f 20 70 6f  6c 6c 0d 08 7a 1d 20 20  |if so poll..z.  |
00001bb0  20 20 20 20 20 20 62 6c  20 20 20 20 20 20 66 69  |      bl      fi|
00001bc0  6e 64 5f 69 63 6f 6e 0d  08 84 25 20 20 20 20 20  |nd_icon...%     |
00001bd0  20 20 20 6c 64 72 62 20  20 20 20 72 33 2c 5b 72  |   ldrb    r3,[r|
00001be0  34 2c 23 73 65 6c 65 63  74 65 64 5d 0d 08 8e 44  |4,#selected]...D|
00001bf0  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
00001c00  72 33 2c 23 31 20 20 20  20 20 20 20 20 20 20 20  |r3,#1           |
00001c10  20 20 20 20 20 20 20 20  3b 20 73 65 65 20 69 66  |        ; see if|
00001c20  20 69 63 6f 6e 20 75 6e  73 65 6c 65 63 74 65 64  | icon unselected|
00001c30  0d 08 98 41 20 20 20 20  20 20 20 20 20 20 20 20  |...A            |
00001c40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001c50  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 6f 72  |            ; or|
00001c60  20 73 65 6c 65 63 74 65  64 20 62 79 20 6d 65 6e  | selected by men|
00001c70  75 0d 08 a2 1f 20 20 20  20 20 20 20 20 62 6c 6e  |u....        bln|
00001c80  65 20 20 20 20 73 65 6c  65 63 74 5f 69 63 6f 6e  |e    select_icon|
00001c90  0d 08 ac 21 20 20 20 20  20 20 20 20 62 6c 65 71  |...!        bleq|
00001ca0  20 20 20 20 75 6e 73 65  6c 65 63 74 5f 69 63 6f  |    unselect_ico|
00001cb0  6e 0d 08 b6 19 20 20 20  20 20 20 20 20 6d 6f 76  |n....        mov|
00001cc0  6e 65 20 20 20 72 33 2c  23 31 0d 08 c0 19 20 20  |ne   r3,#1....  |
00001cd0  20 20 20 20 20 20 6d 6f  76 65 71 20 20 20 72 33  |      moveq   r3|
00001ce0  2c 23 30 0d 08 ca 25 20  20 20 20 20 20 20 20 73  |,#0...%        s|
00001cf0  74 72 62 20 20 20 20 72  33 2c 5b 72 34 2c 23 73  |trb    r3,[r4,#s|
00001d00  65 6c 65 63 74 65 64 5d  0d 08 d4 2c 20 20 20 20  |elected]...,    |
00001d10  20 20 20 20 61 64 72 20  20 20 20 20 72 34 2c 6e  |    adr     r4,n|
00001d20  75 6d 62 65 72 5f 73 65  6c 65 63 74 65 64 2d 26  |umber_selected-&|
00001d30  31 30 30 30 0d 08 de 20  20 20 20 20 20 20 20 20  |1000...         |
00001d40  61 64 64 20 20 20 20 20  72 34 2c 72 34 2c 23 26  |add     r4,r4,#&|
00001d50  31 30 30 30 0d 08 e8 1b  20 20 20 20 20 20 20 20  |1000....        |
00001d60  6c 64 72 62 20 20 20 20  72 33 2c 5b 72 34 5d 0d  |ldrb    r3,[r4].|
00001d70  08 f2 1c 20 20 20 20 20  20 20 20 61 64 64 6e 65  |...        addne|
00001d80  20 20 20 72 33 2c 72 33  2c 23 31 0d 08 fc 1c 20  |   r3,r3,#1.... |
00001d90  20 20 20 20 20 20 20 73  75 62 65 71 20 20 20 72  |       subeq   r|
00001da0  33 2c 72 33 2c 23 31 0d  09 06 1b 20 20 20 20 20  |3,r3,#1....     |
00001db0  20 20 20 73 74 72 62 20  20 20 20 72 33 2c 5b 72  |   strb    r3,[r|
00001dc0  34 5d 0d 09 10 18 20 20  20 20 20 20 20 20 62 20  |4]....        b |
00001dd0  20 20 20 20 20 20 70 6f  6c 6c 0d 09 1a 11 2e 64  |      poll.....d|
00001de0  72 61 67 5f 73 74 61 72  74 65 64 0d 09 24 48 20  |rag_started..$H |
00001df0  20 20 20 20 20 20 20 74  65 71 20 20 20 20 20 72  |       teq     r|
00001e00  30 2c 23 31 20 2a 20 31  36 20 20 20 20 20 20 20  |0,#1 * 16       |
00001e10  20 20 20 20 20 20 20 3b  20 73 65 65 20 69 66 20  |       ; see if |
00001e20  61 64 6a 75 73 74 20 75  73 65 64 20 69 6e 20 64  |adjust used in d|
00001e30  72 61 67 0d 09 2e 1b 20  20 20 20 20 20 20 20 6d  |rag....        m|
00001e40  6f 76 65 71 20 20 20 72  30 2c 23 26 66 66 0d 09  |oveq   r0,#&ff..|
00001e50  38 19 20 20 20 20 20 20  20 20 6d 6f 76 6e 65 20  |8.        movne |
00001e60  20 20 72 30 2c 23 30 0d  09 42 28 20 20 20 20 20  |  r0,#0..B(     |
00001e70  20 20 20 73 74 72 62 20  20 20 20 72 30 2c 64 65  |   strb    r0,de|
00001e80  6c 65 74 65 5f 61 66 74  65 72 5f 64 72 61 67 0d  |lete_after_drag.|
00001e90  09 4c 1e 20 20 20 20 20  20 20 20 6c 64 6d 69 61  |.L.        ldmia|
00001ea0  20 20 20 72 31 2c 7b 72  30 2c 72 32 7d 0d 09 56  |   r1,{r0,r2}..V|
00001eb0  23 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |#        str    |
00001ec0  20 72 30 2c 64 72 61 67  5f 78 5f 73 74 61 72 74  | r0,drag_x_start|
00001ed0  0d 09 60 23 20 20 20 20  20 20 20 20 73 74 72 20  |..`#        str |
00001ee0  20 20 20 20 72 32 2c 64  72 61 67 5f 79 5f 73 74  |    r2,drag_y_st|
00001ef0  61 72 74 0d 09 6a 3b 20  20 20 20 20 20 20 20 6d  |art..j;        m|
00001f00  6f 76 20 20 20 20 20 72  30 2c 23 31 32 39 20 20  |ov     r0,#129  |
00001f10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00001f20  20 73 63 61 6e 20 6b 65  79 62 6f 61 72 64 0d 09  | scan keyboard..|
00001f30  74 42 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |tB        mov   |
00001f40  20 20 72 31 2c 23 26 66  66 20 20 20 20 20 20 20  |  r1,#&ff       |
00001f50  20 20 20 20 20 20 20 20  20 20 3b 20 73 63 61 6e  |          ; scan|
00001f60  20 66 6f 72 20 62 6f 74  68 20 73 68 69 66 74 73  | for both shifts|
00001f70  0d 09 7e 19 20 20 20 20  20 20 20 20 6d 6f 76 20  |..~.        mov |
00001f80  20 20 20 20 72 32 2c 72  31 0d 09 88 1e 20 20 20  |    r2,r1....   |
00001f90  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 4f  |     swi     "XO|
00001fa0  53 5f 42 79 74 65 22 0d  09 92 1f 20 20 20 20 20  |S_Byte"....     |
00001fb0  20 20 20 62 76 73 20 20  20 20 20 66 61 74 61 6c  |   bvs     fatal|
00001fc0  5f 65 72 72 6f 72 0d 09  9c 49 20 20 20 20 20 20  |_error...I      |
00001fd0  20 20 74 65 71 20 20 20  20 20 72 32 2c 23 26 66  |  teq     r2,#&f|
00001fe0  66 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f               |
00001ff0  20 20 3b 20 73 65 65 20  69 66 20 65 69 74 68 65  |  ; see if eithe|
00002000  72 20 73 68 69 66 74 20  70 72 65 73 73 65 64 0d  |r shift pressed.|
00002010  09 a6 4e 20 20 20 20 20  20 20 20 73 74 72 65 71  |..N        streq|
00002020  62 20 20 72 32 2c 64 65  6c 65 74 65 5f 61 66 74  |b  r2,delete_aft|
00002030  65 72 5f 64 72 61 67 20  20 20 20 3b 20 69 66 20  |er_drag    ; if |
00002040  73 6f 20 73 74 6f 72 65  20 73 6f 20 61 73 20 6b  |so store so as k|
00002050  6e 6f 77 20 74 6f 20 64  65 6c 65 74 65 0d 09 b0  |now to delete...|
00002060  49 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |I               |
00002070  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002080  20 20 20 20 20 20 20 20  20 3b 20 69 63 6f 6e 20  |         ; icon |
00002090  77 68 65 6e 20 64 72 61  67 20 68 61 73 20 66 69  |when drag has fi|
000020a0  6e 69 73 68 65 64 0d 09  ba 21 20 20 20 20 20 20  |nished...!      |
000020b0  20 20 61 64 72 20 20 20  20 20 72 31 2c 70 6f 6c  |  adr     r1,pol|
000020c0  6c 5f 73 70 61 63 65 0d  09 c4 1f 20 20 20 20 20  |l_space....     |
000020d0  20 20 20 6c 64 72 20 20  20 20 20 72 32 2c 5b 72  |   ldr     r2,[r|
000020e0  31 2c 23 31 36 5d 0d 09  ce 1d 20 20 20 20 20 20  |1,#16]....      |
000020f0  20 20 62 6c 20 20 20 20  20 20 66 69 6e 64 5f 69  |  bl      find_i|
00002100  63 6f 6e 0d 09 d8 25 20  20 20 20 20 20 20 20 6c  |con...%        l|
00002110  64 72 62 20 20 20 20 72  30 2c 5b 72 34 2c 23 73  |drb    r0,[r4,#s|
00002120  65 6c 65 63 74 65 64 5d  0d 09 e2 45 20 20 20 20  |elected]...E    |
00002130  20 20 20 20 74 65 71 20  20 20 20 20 72 30 2c 23  |    teq     r0,#|
00002140  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00002150  20 20 20 20 3b 20 73 65  65 20 69 66 20 61 6c 72  |    ; see if alr|
00002160  65 61 64 79 20 73 65 6c  65 63 74 65 64 0d 09 ec  |eady selected...|
00002170  19 20 20 20 20 20 20 20  20 6d 6f 76 6e 65 20 20  |.        movne  |
00002180  20 72 30 2c 23 31 0d 09  f6 25 20 20 20 20 20 20  | r0,#1...%      |
00002190  20 20 73 74 72 6e 65 62  20 20 72 30 2c 5b 72 34  |  strneb  r0,[r4|
000021a0  2c 23 73 65 6c 65 63 74  65 64 5d 0d 0a 00 26 20  |,#selected]...& |
000021b0  20 20 20 20 20 20 20 6c  64 72 6e 65 62 20 20 72  |       ldrneb  r|
000021c0  30 2c 6e 75 6d 62 65 72  5f 73 65 6c 65 63 74 65  |0,number_selecte|
000021d0  64 0d 0a 0a 1c 20 20 20  20 20 20 20 20 61 64 64  |d....        add|
000021e0  6e 65 20 20 20 72 30 2c  72 30 2c 23 31 0d 0a 14  |ne   r0,r0,#1...|
000021f0  26 20 20 20 20 20 20 20  20 73 74 72 6e 65 62 20  |&        strneb |
00002200  20 72 30 2c 6e 75 6d 62  65 72 5f 73 65 6c 65 63  | r0,number_selec|
00002210  74 65 64 0d 0a 1e 1f 20  20 20 20 20 20 20 20 62  |ted....        b|
00002220  6c 6e 65 20 20 20 20 73  65 6c 65 63 74 5f 69 63  |lne    select_ic|
00002230  6f 6e 0d 0a 28 20 20 20  20 20 20 20 20 20 61 64  |on..(         ad|
00002240  72 20 20 20 20 20 72 31  2c 77 6f 72 6b 73 70 61  |r     r1,workspa|
00002250  63 65 0d 0a 32 4a 20 20  20 20 20 20 20 20 6d 6f  |ce..2J        mo|
00002260  76 20 20 20 20 20 72 30  2c 23 35 20 20 20 20 20  |v     r0,#5     |
00002270  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00002280  64 72 61 67 20 66 69 78  65 64 20 73 69 7a 65 20  |drag fixed size |
00002290  72 6f 74 61 74 69 6e 67  20 62 6f 78 0d 0a 3c 1e  |rotating box..<.|
000022a0  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
000022b0  72 30 2c 5b 72 31 2c 23  34 5d 0d 0a 46 50 20 20  |r0,[r1,#4]..FP  |
000022c0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 32  |      ldr     r2|
000022d0  2c 73 63 72 65 65 6e 5f  6d 61 78 78 20 20 20 20  |,screen_maxx    |
000022e0  20 20 20 20 20 20 3b 20  72 32 20 77 69 6c 6c 20  |      ; r2 will |
000022f0  62 65 20 6d 69 6e 20 78  20 6f 66 20 73 65 6c 65  |be min x of sele|
00002300  63 74 65 64 20 69 63 6f  6e 73 0d 0a 50 50 20 20  |cted icons..PP  |
00002310  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 33  |      ldr     r3|
00002320  2c 73 63 72 65 65 6e 5f  6d 61 78 79 20 20 20 20  |,screen_maxy    |
00002330  20 20 20 20 20 20 3b 20  72 33 20 77 69 6c 6c 20  |      ; r3 will |
00002340  62 65 20 6d 69 6e 20 79  20 6f 66 20 73 65 6c 65  |be min y of sele|
00002350  63 74 65 64 20 69 63 6f  6e 73 0d 0a 5a 50 20 20  |cted icons..ZP  |
00002360  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 34  |      mov     r4|
00002370  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
00002380  20 20 20 20 20 20 3b 20  72 34 20 77 69 6c 6c 20  |      ; r4 will |
00002390  62 65 20 6d 61 78 20 78  20 6f 66 20 73 65 6c 65  |be max x of sele|
000023a0  63 74 65 64 20 69 63 6f  6e 73 0d 0a 64 50 20 20  |cted icons..dP  |
000023b0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 35  |      mov     r5|
000023c0  2c 72 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r4             |
000023d0  20 20 20 20 20 20 3b 20  72 35 20 77 69 6c 6c 20  |      ; r5 will |
000023e0  62 65 20 6d 69 6e 20 79  20 6f 66 20 73 65 6c 65  |be min y of sele|
000023f0  63 74 65 64 20 69 63 6f  6e 73 0d 0a 6e 2e 20 20  |cted icons..n.  |
00002400  20 20 20 20 20 20 61 64  72 20 20 20 20 20 72 36  |      adr     r6|
00002410  2c 73 74 61 72 74 5f 6c  69 6e 6b 65 64 5f 6c 69  |,start_linked_li|
00002420  73 74 2d 26 31 34 30 30  0d 0a 78 20 20 20 20 20  |st-&1400..x     |
00002430  20 20 20 20 61 64 64 20  20 20 20 20 72 36 2c 72  |    add     r6,r|
00002440  36 2c 23 26 31 34 30 30  0d 0a 82 1b 20 20 20 20  |6,#&1400....    |
00002450  20 20 20 20 6c 64 72 20  20 20 20 20 72 36 2c 5b  |    ldr     r6,[|
00002460  72 36 5d 0d 0a 8c 16 2e  64 72 61 67 5f 73 74 61  |r6].....drag_sta|
00002470  72 74 65 64 5f 6c 6f 6f  70 0d 0a 96 25 20 20 20  |rted_loop...%   |
00002480  20 20 20 20 20 6c 64 72  62 20 20 20 20 72 30 2c  |     ldrb    r0,|
00002490  5b 72 36 2c 23 73 65 6c  65 63 74 65 64 5d 0d 0a  |[r6,#selected]..|
000024a0  a0 19 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |..        teq   |
000024b0  20 20 72 30 2c 23 30 0d  0a aa 2a 20 20 20 20 20  |  r0,#0...*     |
000024c0  20 20 20 62 65 71 20 20  20 20 20 64 72 61 67 5f  |   beq     drag_|
000024d0  73 74 61 72 74 65 64 5f  6c 6f 6f 70 5f 73 6b 69  |started_loop_ski|
000024e0  70 0d 0a b4 27 20 20 20  20 20 20 20 20 6c 64 72  |p...'        ldr|
000024f0  20 20 20 20 20 72 30 2c  5b 72 36 2c 23 78 5f 70  |     r0,[r6,#x_p|
00002500  6f 73 69 74 69 6f 6e 5d  0d 0a be 19 20 20 20 20  |osition]....    |
00002510  20 20 20 20 63 6d 70 20  20 20 20 20 72 30 2c 72  |    cmp     r0,r|
00002520  32 0d 0a c8 19 20 20 20  20 20 20 20 20 6d 6f 76  |2....        mov|
00002530  6c 74 20 20 20 72 32 2c  72 30 0d 0a d2 19 20 20  |lt   r2,r0....  |
00002540  20 20 20 20 20 20 63 6d  70 20 20 20 20 20 72 30  |      cmp     r0|
00002550  2c 72 34 0d 0a dc 19 20  20 20 20 20 20 20 20 6d  |,r4....        m|
00002560  6f 76 67 74 20 20 20 72  34 2c 72 30 0d 0a e6 27  |ovgt   r4,r0...'|
00002570  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
00002580  72 30 2c 5b 72 36 2c 23  79 5f 70 6f 73 69 74 69  |r0,[r6,#y_positi|
00002590  6f 6e 5d 0d 0a f0 19 20  20 20 20 20 20 20 20 63  |on]....        c|
000025a0  6d 70 20 20 20 20 20 72  30 2c 72 33 0d 0a fa 19  |mp     r0,r3....|
000025b0  20 20 20 20 20 20 20 20  6d 6f 76 6c 74 20 20 20  |        movlt   |
000025c0  72 33 2c 72 30 0d 0b 04  19 20 20 20 20 20 20 20  |r3,r0....       |
000025d0  20 63 6d 70 20 20 20 20  20 72 30 2c 72 35 0d 0b  | cmp     r0,r5..|
000025e0  0e 19 20 20 20 20 20 20  20 20 6d 6f 76 67 74 20  |..        movgt |
000025f0  20 20 72 35 2c 72 30 0d  0b 18 1b 2e 64 72 61 67  |  r5,r0.....drag|
00002600  5f 73 74 61 72 74 65 64  5f 6c 6f 6f 70 5f 73 6b  |_started_loop_sk|
00002610  69 70 0d 0b 22 21 20 20  20 20 20 20 20 20 6c 64  |ip.."!        ld|
00002620  72 20 20 20 20 20 72 36  2c 5b 72 36 2c 23 6e 65  |r     r6,[r6,#ne|
00002630  78 74 5d 0d 0b 2c 19 20  20 20 20 20 20 20 20 74  |xt]..,.        t|
00002640  65 71 20 20 20 20 20 72  36 2c 23 30 0d 0b 36 25  |eq     r6,#0..6%|
00002650  20 20 20 20 20 20 20 20  62 6e 65 20 20 20 20 20  |        bne     |
00002660  64 72 61 67 5f 73 74 61  72 74 65 64 5f 6c 6f 6f  |drag_started_loo|
00002670  70 0d 0b 40 1c 20 20 20  20 20 20 20 20 73 75 62  |p..@.        sub|
00002680  20 20 20 20 20 72 32 2c  72 32 2c 23 38 0d 0b 4a  |     r2,r2,#8..J|
00002690  1e 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |.        str    |
000026a0  20 72 32 2c 5b 72 31 2c  23 38 5d 0d 0b 54 1c 20  | r2,[r1,#8]..T. |
000026b0  20 20 20 20 20 20 20 73  75 62 20 20 20 20 20 72  |       sub     r|
000026c0  33 2c 72 33 2c 23 34 0d  0b 5e 1f 20 20 20 20 20  |3,r3,#4..^.     |
000026d0  20 20 20 73 74 72 20 20  20 20 20 72 33 2c 5b 72  |   str     r3,[r|
000026e0  31 2c 23 31 32 5d 0d 0b  68 21 20 20 20 20 20 20  |1,#12]..h!      |
000026f0  20 20 61 64 64 20 20 20  20 20 72 34 2c 72 34 2c  |  add     r4,r4,|
00002700  23 31 36 30 2b 31 30 0d  0b 72 1f 20 20 20 20 20  |#160+10..r.     |
00002710  20 20 20 73 74 72 20 20  20 20 20 72 34 2c 5b 72  |   str     r4,[r|
00002720  31 2c 23 31 36 5d 0d 0b  7c 20 20 20 20 20 20 20  |1,#16]..|       |
00002730  20 20 61 64 64 20 20 20  20 20 72 35 2c 72 35 2c  |  add     r5,r5,|
00002740  23 31 30 38 2b 34 0d 0b  86 1f 20 20 20 20 20 20  |#108+4....      |
00002750  20 20 73 74 72 20 20 20  20 20 72 35 2c 5b 72 31  |  str     r5,[r1|
00002760  2c 23 32 30 5d 0d 0b 90  04 0d 0b 9a 21 20 20 20  |,#20].......!   |
00002770  20 20 20 20 20 61 64 72  20 20 20 20 20 72 36 2c  |     adr     r6,|
00002780  64 72 61 67 5f 78 5f 6d  69 6e 0d 0b a4 41 20 20  |drag_x_min...A  |
00002790  20 20 20 20 20 20 73 74  6d 69 61 20 20 20 72 36  |      stmia   r6|
000027a0  2c 7b 72 32 2d 72 35 7d  20 20 20 20 20 20 20 20  |,{r2-r5}        |
000027b0  20 20 20 20 20 20 3b 20  73 74 6f 72 65 20 66 6f  |      ; store fo|
000027c0  72 20 6c 61 74 65 72 20  75 73 65 0d 0b ae 04 0d  |r later use.....|
000027d0  0b b8 23 20 20 20 20 20  20 20 20 6c 64 72 20 20  |..#        ldr  |
000027e0  20 20 20 72 36 2c 64 72  61 67 5f 78 5f 73 74 61  |   r6,drag_x_sta|
000027f0  72 74 0d 0b c2 23 20 20  20 20 20 20 20 20 6c 64  |rt...#        ld|
00002800  72 20 20 20 20 20 72 37  2c 64 72 61 67 5f 79 5f  |r     r7,drag_y_|
00002810  73 74 61 72 74 0d 0b cc  04 0d 0b d6 22 20 20 20  |start......."   |
00002820  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 30 2c  |     ldr     r0,|
00002830  73 63 72 65 65 6e 5f 6d  61 78 78 0d 0b e0 1c 20  |screen_maxx.... |
00002840  20 20 20 20 20 20 20 73  75 62 20 20 20 20 20 72  |       sub     r|
00002850  30 2c 72 30 2c 72 36 0d  0b ea 1c 20 20 20 20 20  |0,r0,r6....     |
00002860  20 20 20 61 64 64 20 20  20 20 20 72 30 2c 72 30  |   add     r0,r0|
00002870  2c 72 34 0d 0b f4 41 20  20 20 20 20 20 20 20 73  |,r4...A        s|
00002880  74 72 20 20 20 20 20 72  30 2c 5b 72 31 2c 23 33  |tr     r0,[r1,#3|
00002890  32 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |2]             ;|
000028a0  20 6d 61 78 20 78 20 6f  66 20 70 61 72 65 6e 74  | max x of parent|
000028b0  20 62 6f 78 0d 0b fe 04  0d 0c 08 22 20 20 20 20  | box......."    |
000028c0  20 20 20 20 6c 64 72 20  20 20 20 20 72 30 2c 73  |    ldr     r0,s|
000028d0  63 72 65 65 6e 5f 6d 61  78 79 0d 0c 12 1c 20 20  |creen_maxy....  |
000028e0  20 20 20 20 20 20 73 75  62 20 20 20 20 20 72 30  |      sub     r0|
000028f0  2c 72 30 2c 72 37 0d 0c  1c 1c 20 20 20 20 20 20  |,r0,r7....      |
00002900  20 20 61 64 64 20 20 20  20 20 72 30 2c 72 30 2c  |  add     r0,r0,|
00002910  72 35 0d 0c 26 41 20 20  20 20 20 20 20 20 73 74  |r5..&A        st|
00002920  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 33 36  |r     r0,[r1,#36|
00002930  5d 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |]             ; |
00002940  6d 61 78 20 79 20 6f 66  20 70 61 72 65 6e 74 20  |max y of parent |
00002950  62 6f 78 0d 0c 30 04 0d  0c 3a 1c 20 20 20 20 20  |box..0...:.     |
00002960  20 20 20 73 75 62 20 20  20 20 20 72 30 2c 72 32  |   sub     r0,r2|
00002970  2c 72 36 0d 0c 44 41 20  20 20 20 20 20 20 20 73  |,r6..DA        s|
00002980  74 72 20 20 20 20 20 72  30 2c 5b 72 31 2c 23 32  |tr     r0,[r1,#2|
00002990  34 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |4]             ;|
000029a0  20 6d 69 6e 20 78 20 6f  66 20 70 61 72 65 6e 74  | min x of parent|
000029b0  20 62 6f 78 0d 0c 4e 04  0d 0c 58 1c 20 20 20 20  | box..N...X.    |
000029c0  20 20 20 20 73 75 62 20  20 20 20 20 72 30 2c 72  |    sub     r0,r|
000029d0  33 2c 72 37 0d 0c 62 41  20 20 20 20 20 20 20 20  |3,r7..bA        |
000029e0  73 74 72 20 20 20 20 20  72 30 2c 5b 72 31 2c 23  |str     r0,[r1,#|
000029f0  32 38 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |28]             |
00002a00  3b 20 6d 69 6e 20 79 20  6f 66 20 70 61 72 65 6e  |; min y of paren|
00002a10  74 20 62 6f 78 0d 0c 6c  04 0d 0c 76 23 20 20 20  |t box..l...v#   |
00002a20  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 57  |     swi     "XW|
00002a30  69 6d 70 5f 44 72 61 67  42 6f 78 22 0d 0c 80 1f  |imp_DragBox"....|
00002a40  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
00002a50  66 61 74 61 6c 5f 65 72  72 6f 72 0d 0c 8a 18 20  |fatal_error.... |
00002a60  20 20 20 20 20 20 20 62  20 20 20 20 20 20 20 70  |       b       p|
00002a70  6f 6c 6c 0d 0c 94 11 2e  64 72 61 67 5f 78 5f 73  |oll.....drag_x_s|
00002a80  74 61 72 74 0d 0c 9e 15  20 20 20 20 20 20 20 20  |tart....        |
00002a90  65 71 75 64 20 20 20 20  30 0d 0c a8 11 2e 64 72  |equd    0.....dr|
00002aa0  61 67 5f 79 5f 73 74 61  72 74 0d 0c b2 15 20 20  |ag_y_start....  |
00002ab0  20 20 20 20 20 20 65 71  75 64 20 20 20 20 30 0d  |      equd    0.|
00002ac0  0c bc 0f 2e 64 72 61 67  5f 78 5f 6d 69 6e 0d 0c  |....drag_x_min..|
00002ad0  c6 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
00002ae0  20 20 30 0d 0c d0 0f 2e  64 72 61 67 5f 79 5f 6d  |  0.....drag_y_m|
00002af0  69 6e 0d 0c da 15 20 20  20 20 20 20 20 20 65 71  |in....        eq|
00002b00  75 64 20 20 20 20 30 0d  0c e4 0f 2e 64 72 61 67  |ud    0.....drag|
00002b10  5f 78 5f 6d 61 78 0d 0c  ee 15 20 20 20 20 20 20  |_x_max....      |
00002b20  20 20 65 71 75 64 20 20  20 20 30 0d 0c f8 0f 2e  |  equd    0.....|
00002b30  64 72 61 67 5f 79 5f 6d  61 78 0d 0d 02 15 20 20  |drag_y_max....  |
00002b40  20 20 20 20 20 20 65 71  75 64 20 20 20 20 30 0d  |      equd    0.|
00002b50  0d 0c 13 2e 64 6f 75 62  6c 65 5f 63 6c 69 63 6b  |....double_click|
00002b60  65 64 0d 0d 16 23 20 20  20 20 20 20 20 20 73 74  |ed...#        st|
00002b70  72 20 20 20 20 20 72 30  2c 62 75 74 74 6f 6e 5f  |r     r0,button_|
00002b80  73 74 61 74 65 0d 0d 20  19 20 20 20 20 20 20 20  |state.. .       |
00002b90  20 6d 6f 76 20 20 20 20  20 72 33 2c 72 32 0d 0d  | mov     r3,r2..|
00002ba0  2a 3b 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |*;        mov   |
00002bb0  20 20 72 30 2c 23 31 32  39 20 20 20 20 20 20 20  |  r0,#129       |
00002bc0  20 20 20 20 20 20 20 20  20 20 3b 20 73 63 61 6e  |          ; scan|
00002bd0  20 6b 65 79 62 6f 61 72  64 0d 0d 34 42 20 20 20  | keyboard..4B   |
00002be0  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 31 2c  |     mov     r1,|
00002bf0  23 26 66 66 20 20 20 20  20 20 20 20 20 20 20 20  |#&ff            |
00002c00  20 20 20 20 20 3b 20 73  63 61 6e 20 66 6f 72 20  |     ; scan for |
00002c10  62 6f 74 68 20 73 68 69  66 74 73 0d 0d 3e 19 20  |both shifts..>. |
00002c20  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
00002c30  32 2c 72 31 0d 0d 48 1e  20 20 20 20 20 20 20 20  |2,r1..H.        |
00002c40  73 77 69 20 20 20 20 20  22 58 4f 53 5f 42 79 74  |swi     "XOS_Byt|
00002c50  65 22 0d 0d 52 1f 20 20  20 20 20 20 20 20 62 76  |e"..R.        bv|
00002c60  73 20 20 20 20 20 66 61  74 61 6c 5f 65 72 72 6f  |s     fatal_erro|
00002c70  72 0d 0d 5c 19 20 20 20  20 20 20 20 20 6d 6f 76  |r..\.        mov|
00002c80  20 20 20 20 20 72 35 2c  72 32 0d 0d 66 19 20 20  |     r5,r2..f.  |
00002c90  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 32  |      mov     r2|
00002ca0  2c 72 33 0d 0d 70 1d 20  20 20 20 20 20 20 20 62  |,r3..p.        b|
00002cb0  6c 20 20 20 20 20 20 66  69 6e 64 5f 69 63 6f 6e  |l      find_icon|
00002cc0  0d 0d 7a 25 20 20 20 20  20 20 20 20 6c 64 72 62  |..z%        ldrb|
00002cd0  20 20 20 20 72 33 2c 5b  72 34 2c 23 73 65 6c 65  |    r3,[r4,#sele|
00002ce0  63 74 65 64 5d 0d 0d 84  3d 20 20 20 20 20 20 20  |cted]...=       |
00002cf0  20 74 65 71 20 20 20 20  20 72 33 2c 23 31 20 20  | teq     r3,#1  |
00002d00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002d10  20 3b 20 73 65 65 20 69  66 20 73 65 6c 65 63 74  | ; see if select|
00002d20  65 64 0d 0d 8e 21 20 20  20 20 20 20 20 20 62 6c  |ed...!        bl|
00002d30  65 71 20 20 20 20 75 6e  73 65 6c 65 63 74 5f 69  |eq    unselect_i|
00002d40  63 6f 6e 0d 0d 98 26 20  20 20 20 20 20 20 20 6c  |con...&        l|
00002d50  64 72 65 71 62 20 20 72  33 2c 6e 75 6d 62 65 72  |dreqb  r3,number|
00002d60  5f 73 65 6c 65 63 74 65  64 0d 0d a2 1c 20 20 20  |_selected....   |
00002d70  20 20 20 20 20 73 75 62  65 71 20 20 20 72 33 2c  |     subeq   r3,|
00002d80  72 33 2c 23 31 0d 0d ac  26 20 20 20 20 20 20 20  |r3,#1...&       |
00002d90  20 73 74 72 65 71 62 20  20 72 33 2c 6e 75 6d 62  | streqb  r3,numb|
00002da0  65 72 5f 73 65 6c 65 63  74 65 64 0d 0d b6 26 20  |er_selected...& |
00002db0  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
00002dc0  31 2c 70 6f 6c 6c 5f 73  70 61 63 65 2b 26 34 30  |1,poll_space+&40|
00002dd0  30 0d 0d c0 1f 20 20 20  20 20 20 20 20 73 75 62  |0....        sub|
00002de0  20 20 20 20 20 72 31 2c  72 31 2c 23 26 34 30 30  |     r1,r1,#&400|
00002df0  0d 0d ca 3e 20 20 20 20  20 20 20 20 6d 6f 76 20  |...>        mov |
00002e00  20 20 20 20 72 30 2c 23  35 20 20 20 20 20 20 20  |    r0,#5       |
00002e10  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 64 61  |            ; da|
00002e20  74 61 6f 70 65 6e 20 6d  65 73 73 61 67 65 0d 0d  |taopen message..|
00002e30  d4 1f 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |..        str   |
00002e40  20 20 72 30 2c 5b 72 31  2c 23 31 36 5d 0d 0d de  |  r0,[r1,#16]...|
00002e50  2f 20 20 20 20 20 20 20  20 6c 64 72 20 20 20 20  |/        ldr    |
00002e60  20 72 30 2c 62 61 63 6b  67 72 6f 75 6e 64 5f 77  | r0,background_w|
00002e70  69 6e 64 6f 77 5f 68 61  6e 64 6c 65 0d 0d e8 1f  |indow_handle....|
00002e80  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
00002e90  72 30 2c 5b 72 31 2c 23  32 30 5d 0d 0d f2 27 20  |r0,[r1,#20]...' |
00002ea0  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
00002eb0  30 2c 5b 72 34 2c 23 78  5f 70 6f 73 69 74 69 6f  |0,[r4,#x_positio|
00002ec0  6e 5d 0d 0d fc 1f 20 20  20 20 20 20 20 20 73 74  |n]....        st|
00002ed0  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 32 38  |r     r0,[r1,#28|
00002ee0  5d 0d 0e 06 27 20 20 20  20 20 20 20 20 6c 64 72  |]...'        ldr|
00002ef0  20 20 20 20 20 72 30 2c  5b 72 34 2c 23 79 5f 70  |     r0,[r4,#y_p|
00002f00  6f 73 69 74 69 6f 6e 5d  0d 0e 10 1f 20 20 20 20  |osition]....    |
00002f10  20 20 20 20 73 74 72 20  20 20 20 20 72 30 2c 5b  |    str     r0,[|
00002f20  72 31 2c 23 33 32 5d 0d  0e 1a 4c 20 20 20 20 20  |r1,#32]...L     |
00002f30  20 20 20 6d 6f 76 20 20  20 20 20 72 30 2c 23 30  |   mov     r0,#0|
00002f40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002f50  20 20 20 3b 20 77 65 20  61 72 65 20 6f 72 69 67  |   ; we are orig|
00002f60  69 6e 61 74 69 6e 67 20  74 68 65 20 6d 65 73 73  |inating the mess|
00002f70  61 67 65 0d 0e 24 1f 20  20 20 20 20 20 20 20 73  |age..$.        s|
00002f80  74 72 20 20 20 20 20 72  30 2c 5b 72 31 2c 23 31  |tr     r0,[r1,#1|
00002f90  32 5d 0d 0e 2e 1f 20 20  20 20 20 20 20 20 73 74  |2]....        st|
00002fa0  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 33 36  |r     r0,[r1,#36|
00002fb0  5d 0d 0e 38 25 20 20 20  20 20 20 20 20 6c 64 72  |]..8%        ldr|
00002fc0  20 20 20 20 20 72 30 2c  5b 72 34 2c 23 66 69 6c  |     r0,[r4,#fil|
00002fd0  65 74 79 70 65 5d 0d 0e  42 4d 20 20 20 20 20 20  |etype]..BM      |
00002fe0  20 20 74 65 71 20 20 20  20 20 72 35 2c 23 26 66  |  teq     r5,#&f|
00002ff0  66 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f               |
00003000  20 20 3b 20 73 65 65 20  69 66 20 65 69 74 68 65  |  ; see if eithe|
00003010  72 20 73 68 69 66 74 20  77 61 73 20 70 72 65 73  |r shift was pres|
00003020  73 65 64 0d 0e 4c 1c 20  20 20 20 20 20 20 20 62  |sed..L.        b|
00003030  6e 65 20 20 20 20 20 6e  6f 5f 73 68 69 66 74 0d  |ne     no_shift.|
00003040  0e 56 40 20 20 20 20 20  20 20 20 63 6d 70 20 20  |.V@        cmp  |
00003050  20 20 20 72 30 2c 23 26  32 30 30 30 20 20 20 20  |   r0,#&2000    |
00003060  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 65 65  |           ; see|
00003070  20 69 66 20 61 70 70 6c  69 63 61 74 69 6f 6e 0d  | if application.|
00003080  0e 60 47 20 20 20 20 20  20 20 20 73 75 62 65 71  |.`G        subeq|
00003090  20 20 20 72 30 2c 72 30  2c 23 26 31 30 30 30 20  |   r0,r0,#&1000 |
000030a0  20 20 20 20 20 20 20 20  20 20 20 3b 20 69 66 20  |           ; if |
000030b0  73 6f 20 73 65 74 20 69  74 20 74 6f 20 64 69 72  |so set it to dir|
000030c0  65 63 74 6f 72 79 0d 0e  6a 0d 2e 6e 6f 5f 73 68  |ectory..j..no_sh|
000030d0  69 66 74 0d 0e 74 1f 20  20 20 20 20 20 20 20 73  |ift..t.        s|
000030e0  74 72 20 20 20 20 20 72  30 2c 5b 72 31 2c 23 34  |tr     r0,[r1,#4|
000030f0  30 5d 0d 0e 7e 23 20 20  20 20 20 20 20 20 61 64  |0]..~#        ad|
00003100  64 20 20 20 20 20 72 30  2c 72 34 2c 23 66 69 6c  |d     r0,r4,#fil|
00003110  65 6e 61 6d 65 0d 0e 88  1d 20 20 20 20 20 20 20  |ename....       |
00003120  20 61 64 64 20 20 20 20  20 72 32 2c 72 31 2c 23  | add     r2,r1,#|
00003130  34 34 0d 0e 92 18 2e 64  6f 75 62 6c 65 5f 63 6c  |44.....double_cl|
00003140  69 63 6b 65 64 5f 6c 6f  6f 70 0d 0e 9c 1e 20 20  |icked_loop....  |
00003150  20 20 20 20 20 20 6c 64  72 62 20 20 20 20 72 33  |      ldrb    r3|
00003160  2c 5b 72 30 5d 2c 23 31  0d 0e a6 1e 20 20 20 20  |,[r0],#1....    |
00003170  20 20 20 20 73 74 72 62  20 20 20 20 72 33 2c 5b  |    strb    r3,[|
00003180  72 32 5d 2c 23 31 0d 0e  b0 19 20 20 20 20 20 20  |r2],#1....      |
00003190  20 20 74 65 71 20 20 20  20 20 72 33 2c 23 30 0d  |  teq     r3,#0.|
000031a0  0e ba 27 20 20 20 20 20  20 20 20 62 6e 65 20 20  |..'        bne  |
000031b0  20 20 20 64 6f 75 62 6c  65 5f 63 6c 69 63 6b 65  |   double_clicke|
000031c0  64 5f 6c 6f 6f 70 0d 0e  c4 44 20 20 20 20 20 20  |d_loop...D      |
000031d0  20 20 73 75 62 20 20 20  20 20 72 32 2c 72 32 2c  |  sub     r2,r2,|
000031e0  72 31 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r1              |
000031f0  20 20 3b 20 72 32 20 3d  20 6c 65 6e 67 74 68 20  |  ; r2 = length |
00003200  6f 66 20 6d 65 73 73 61  67 65 0d 0e ce 1c 20 20  |of message....  |
00003210  20 20 20 20 20 20 61 64  64 20 20 20 20 20 72 32  |      add     r2|
00003220  2c 72 32 2c 23 33 0d 0e  d8 38 20 20 20 20 20 20  |,r2,#3...8      |
00003230  20 20 62 69 63 20 20 20  20 20 72 32 2c 72 32 2c  |  bic     r2,r2,|
00003240  23 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#3              |
00003250  20 20 3b 20 77 6f 72 64  20 61 6c 69 67 6e 0d 0e  |  ; word align..|
00003260  e2 1b 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |..        str   |
00003270  20 20 72 32 2c 5b 72 31  5d 0d 0e ec 3a 20 20 20  |  r2,[r1]...:   |
00003280  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
00003290  23 31 38 20 20 20 20 20  20 20 20 20 20 20 20 20  |#18             |
000032a0  20 20 20 20 20 3b 20 72  65 70 6c 79 20 6e 65 65  |     ; reply nee|
000032b0  64 65 64 0d 0e f6 3f 20  20 20 20 20 20 20 20 6d  |ded...?        m|
000032c0  6f 76 20 20 20 20 20 72  32 2c 23 30 20 20 20 20  |ov     r2,#0    |
000032d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000032e0  20 62 72 6f 61 64 63 61  73 74 20 6d 65 73 73 61  | broadcast messa|
000032f0  67 65 0d 0f 00 27 20 20  20 20 20 20 20 20 73 77  |ge...'        sw|
00003300  69 20 20 20 20 20 22 58  57 69 6d 70 5f 53 65 6e  |i     "XWimp_Sen|
00003310  64 4d 65 73 73 61 67 65  22 0d 0f 0a 1f 20 20 20  |dMessage"....   |
00003320  20 20 20 20 20 62 76 73  20 20 20 20 20 66 61 74  |     bvs     fat|
00003330  61 6c 5f 65 72 72 6f 72  0d 0f 14 1e 20 20 20 20  |al_error....    |
00003340  20 20 20 20 6c 64 72 20  20 20 20 20 72 30 2c 5b  |    ldr     r0,[|
00003350  72 31 2c 23 38 5d 0d 0f  1e 4c 20 20 20 20 20 20  |r1,#8]...L      |
00003360  20 20 6c 64 72 20 20 20  20 20 72 32 2c 62 75 74  |  ldr     r2,but|
00003370  74 6f 6e 5f 73 74 61 74  65 20 20 20 20 20 20 20  |ton_state       |
00003380  20 20 3b 20 6d 75 73 74  20 6c 6f 61 64 20 74 68  |  ; must load th|
00003390  69 73 20 66 69 72 73 74  20 61 73 20 73 74 6f 72  |is first as stor|
000033a0  65 64 0d 0f 28 4e 20 20  20 20 20 20 20 20 20 20  |ed..(N          |
000033b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000033c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
000033d0  61 74 20 73 61 6d 65 20  61 64 64 72 65 73 73 20  |at same address |
000033e0  61 73 20 6d 65 73 73 61  67 65 5f 6d 79 72 65 66  |as message_myref|
000033f0  0d 0f 32 24 20 20 20 20  20 20 20 20 73 74 72 20  |..2$        str |
00003400  20 20 20 20 72 30 2c 6d  65 73 73 61 67 65 5f 6d  |    r0,message_m|
00003410  79 72 65 66 0d 0f 3c 4a  20 20 20 20 20 20 20 20  |yref..<J        |
00003420  74 73 74 20 20 20 20 20  72 32 2c 23 31 20 20 20  |tst     r2,#1   |
00003430  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003440  3b 20 73 65 65 20 69 66  20 61 64 6a 75 73 74 20  |; see if adjust |
00003450  64 6f 75 62 6c 65 20 63  6c 69 63 6b 65 64 0d 0f  |double clicked..|
00003460  46 1f 20 20 20 20 20 20  20 20 62 6c 6e 65 20 20  |F.        blne  |
00003470  20 20 72 65 6d 6f 76 65  5f 69 63 6f 6e 0d 0f 50  |  remove_icon..P|
00003480  1a 20 20 20 20 20 20 20  20 6d 6f 76 20 20 20 20  |.        mov    |
00003490  20 72 30 2c 23 34 32 0d  0f 5a 45 20 20 20 20 20  | r0,#42..ZE     |
000034a0  20 20 20 73 74 72 62 20  20 20 20 72 30 2c 64 65  |   strb    r0,de|
000034b0  6c 65 74 65 5f 61 66 74  65 72 5f 64 72 61 67 20  |lete_after_drag |
000034c0  20 20 20 3b 20 74 65 6c  6c 20 75 73 20 6e 6f 20  |   ; tell us no |
000034d0  64 72 61 67 20 6f 63 63  75 72 65 64 0d 0f 64 18  |drag occured..d.|
000034e0  20 20 20 20 20 20 20 20  62 20 20 20 20 20 20 20  |        b       |
000034f0  70 6f 6c 6c 0d 0f 6e 04  0d 0f 78 53 3b 20 2d 2d  |poll..n...xS; --|
00003500  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003540  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 0f 82 2d 3b  |-----------...-;|
00003550  20 72 65 6d 6f 76 65 20  69 63 6f 6e 20 66 72 6f  | remove icon fro|
00003560  6d 20 73 63 72 65 65 6e  20 61 6e 64 20 6c 69 6e  |m screen and lin|
00003570  6b 65 64 20 6c 69 73 74  0d 0f 8c 0b 3b 20 65 6e  |ked list....; en|
00003580  74 72 79 0d 0f 96 23 3b  20 20 20 20 20 20 20 72  |try...#;       r|
00003590  34 20 2d 3e 20 6c 69 6e  6b 65 64 20 6c 69 73 74  |4 -> linked list|
000035a0  20 65 6e 74 72 79 0d 0f  a0 04 0d 0f aa 10 2e 72  | entry.........r|
000035b0  65 6d 6f 76 65 5f 69 63  6f 6e 0d 0f b4 24 20 20  |emove_icon...$  |
000035c0  20 20 20 20 20 20 73 74  6d 66 64 20 20 20 72 31  |      stmfd   r1|
000035d0  33 21 2c 7b 72 30 2d 72  34 2c 72 31 34 7d 0d 0f  |3!,{r0-r4,r14}..|
000035e0  be 2e 20 20 20 20 20 20  20 20 61 64 72 20 20 20  |..        adr   |
000035f0  20 20 72 31 2c 73 74 61  72 74 5f 6c 69 6e 6b 65  |  r1,start_linke|
00003600  64 5f 6c 69 73 74 2d 26  31 30 30 30 0d 0f c8 20  |d_list-&1000... |
00003610  20 20 20 20 20 20 20 20  61 64 64 20 20 20 20 20  |        add     |
00003620  72 31 2c 72 31 2c 23 26  31 30 30 30 0d 0f d2 15  |r1,r1,#&1000....|
00003630  2e 72 65 6d 6f 76 65 5f  69 63 6f 6e 5f 6c 6f 6f  |.remove_icon_loo|
00003640  70 0d 0f dc 21 20 20 20  20 20 20 20 20 6c 64 72  |p...!        ldr|
00003650  20 20 20 20 20 72 32 2c  5b 72 31 2c 23 6e 65 78  |     r2,[r1,#nex|
00003660  74 5d 0d 0f e6 53 20 20  20 20 20 20 20 20 74 65  |t]...S        te|
00003670  71 20 20 20 20 20 72 32  2c 72 34 20 20 20 20 20  |q     r2,r4     |
00003680  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00003690  73 65 65 20 69 66 20 66  6f 75 6e 64 20 6c 69 6e  |see if found lin|
000036a0  6b 65 64 20 6c 69 73 74  20 65 6e 74 72 79 20 62  |ked list entry b|
000036b0  65 66 6f 72 65 0d 0f f0  45 20 20 20 20 20 20 20  |efore...E       |
000036c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000036e0  20 3b 20 74 68 65 20 6f  6e 65 20 77 65 20 61 72  | ; the one we ar|
000036f0  65 20 64 65 6c 65 74 69  6e 67 0d 0f fa 19 20 20  |e deleting....  |
00003700  20 20 20 20 20 20 6d 6f  76 6e 65 20 20 20 72 31  |      movne   r1|
00003710  2c 72 32 0d 10 04 24 20  20 20 20 20 20 20 20 62  |,r2...$        b|
00003720  6e 65 20 20 20 20 20 72  65 6d 6f 76 65 5f 69 63  |ne     remove_ic|
00003730  6f 6e 5f 6c 6f 6f 70 0d  10 0e 47 20 20 20 20 20  |on_loop...G     |
00003740  20 20 20 6c 64 72 20 20  20 20 20 72 32 2c 5b 72  |   ldr     r2,[r|
00003750  34 2c 23 6e 65 78 74 5d  20 20 20 20 20 20 20 20  |4,#next]        |
00003760  20 20 20 3b 20 72 65 6d  6f 76 65 20 74 68 65 20  |   ; remove the |
00003770  65 6e 74 72 79 20 66 72  6f 6d 20 74 68 65 0d 10  |entry from the..|
00003780  18 39 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |.9        str   |
00003790  20 20 72 32 2c 5b 72 31  2c 23 6e 65 78 74 5d 20  |  r2,[r1,#next] |
000037a0  20 20 20 20 20 20 20 20  20 20 3b 20 6c 69 6e 6b  |          ; link|
000037b0  65 64 20 6c 69 73 74 0d  10 22 1f 20 20 20 20 20  |ed list..".     |
000037c0  20 20 20 62 6c 20 20 20  20 20 20 64 65 6c 65 74  |   bl      delet|
000037d0  65 5f 69 63 6f 6e 0d 10  2c 23 20 20 20 20 20 20  |e_icon..,#      |
000037e0  20 20 62 6c 20 20 20 20  20 20 66 72 65 65 5f 68  |  bl      free_h|
000037f0  65 61 70 5f 62 6c 6f 63  6b 0d 10 36 26 20 20 20  |eap_block..6&   |
00003800  20 20 20 20 20 6c 64 72  62 20 20 20 20 72 32 2c  |     ldrb    r2,|
00003810  6e 75 6d 62 65 72 5f 6f  66 5f 69 63 6f 6e 73 0d  |number_of_icons.|
00003820  10 40 1c 20 20 20 20 20  20 20 20 73 75 62 20 20  |.@.        sub  |
00003830  20 20 20 72 32 2c 72 32  2c 23 31 0d 10 4a 26 20  |   r2,r2,#1..J& |
00003840  20 20 20 20 20 20 20 73  74 72 62 20 20 20 20 72  |       strb    r|
00003850  32 2c 6e 75 6d 62 65 72  5f 6f 66 5f 69 63 6f 6e  |2,number_of_icon|
00003860  73 0d 10 54 23 20 20 20  20 20 20 20 20 6c 64 6d  |s..T#        ldm|
00003870  66 64 20 20 20 72 31 33  21 2c 7b 72 30 2d 72 34  |fd   r13!,{r0-r4|
00003880  2c 70 63 7d 0d 10 5e 04  0d 10 68 53 3b 20 2d 2d  |,pc}..^...hS; --|
00003890  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000038d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 10 72 26 3b  |-----------..r&;|
000038e0  20 64 65 6c 65 74 65 20  61 6e 20 69 63 6f 6e 20  | delete an icon |
000038f0  61 6e 64 20 75 70 64 61  74 65 20 73 63 72 65 65  |and update scree|
00003900  6e 0d 10 7c 0b 3b 20 65  6e 74 72 79 0d 10 86 23  |n..|.; entry...#|
00003910  3b 20 20 20 20 20 20 20  72 34 20 2d 3e 20 6c 69  |;       r4 -> li|
00003920  6e 6b 65 64 20 6c 69 73  74 20 65 6e 74 72 79 0d  |nked list entry.|
00003930  10 90 04 0d 10 9a 10 2e  64 65 6c 65 74 65 5f 69  |........delete_i|
00003940  63 6f 6e 0d 10 a4 20 20  20 20 20 20 20 20 20 73  |con...         s|
00003950  74 6d 66 64 20 20 20 72  31 33 21 2c 7b 72 30 2d  |tmfd   r13!,{r0-|
00003960  72 34 7d 0d 10 ae 23 20  20 20 20 20 20 20 20 61  |r4}...#        a|
00003970  64 72 20 20 20 20 20 72  31 2c 64 65 6c 65 74 65  |dr     r1,delete|
00003980  5f 73 70 61 63 65 0d 10  b8 2f 20 20 20 20 20 20  |_space.../      |
00003990  20 20 6c 64 72 20 20 20  20 20 72 30 2c 62 61 63  |  ldr     r0,bac|
000039a0  6b 67 72 6f 75 6e 64 5f  77 69 6e 64 6f 77 5f 68  |kground_window_h|
000039b0  61 6e 64 6c 65 0d 10 c2  1b 20 20 20 20 20 20 20  |andle....       |
000039c0  20 73 74 72 20 20 20 20  20 72 30 2c 5b 72 31 5d  | str     r0,[r1]|
000039d0  0d 10 cc 28 20 20 20 20  20 20 20 20 6c 64 72 62  |...(        ldrb|
000039e0  20 20 20 20 72 30 2c 5b  72 34 2c 23 69 63 6f 6e  |    r0,[r4,#icon|
000039f0  5f 68 61 6e 64 6c 65 5d  0d 10 d6 1e 20 20 20 20  |_handle]....    |
00003a00  20 20 20 20 73 74 72 20  20 20 20 20 72 30 2c 5b  |    str     r0,[|
00003a10  72 31 2c 23 34 5d 0d 10  e0 26 20 20 20 20 20 20  |r1,#4]...&      |
00003a20  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
00003a30  5f 44 65 6c 65 74 65 49  63 6f 6e 22 0d 10 ea 1f  |_DeleteIcon"....|
00003a40  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
00003a50  66 61 74 61 6c 5f 65 72  72 6f 72 0d 10 f4 2f 20  |fatal_error.../ |
00003a60  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
00003a70  30 2c 62 61 63 6b 67 72  6f 75 6e 64 5f 77 69 6e  |0,background_win|
00003a80  64 6f 77 5f 68 61 6e 64  6c 65 0d 10 fe 27 20 20  |dow_handle...'  |
00003a90  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 31  |      ldr     r1|
00003aa0  2c 5b 72 34 2c 23 78 5f  70 6f 73 69 74 69 6f 6e  |,[r4,#x_position|
00003ab0  5d 0d 11 08 27 20 20 20  20 20 20 20 20 6c 64 72  |]...'        ldr|
00003ac0  20 20 20 20 20 72 32 2c  5b 72 34 2c 23 79 5f 70  |     r2,[r4,#y_p|
00003ad0  6f 73 69 74 69 6f 6e 5d  0d 11 12 20 20 20 20 20  |osition]...     |
00003ae0  20 20 20 20 61 64 64 20  20 20 20 20 72 33 2c 72  |    add     r3,r|
00003af0  31 2c 23 31 30 2a 31 36  0d 11 1c 1e 20 20 20 20  |1,#10*16....    |
00003b00  20 20 20 20 61 64 64 20  20 20 20 20 72 34 2c 72  |    add     r4,r|
00003b10  32 2c 23 31 30 38 0d 11  26 27 20 20 20 20 20 20  |2,#108..&'      |
00003b20  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
00003b30  5f 46 6f 72 63 65 52 65  64 72 61 77 22 0d 11 30  |_ForceRedraw"..0|
00003b40  1f 20 20 20 20 20 20 20  20 62 76 73 20 20 20 20  |.        bvs    |
00003b50  20 66 61 74 61 6c 5f 65  72 72 6f 72 0d 11 3a 20  | fatal_error..: |
00003b60  20 20 20 20 20 20 20 20  6c 64 6d 66 64 20 20 20  |        ldmfd   |
00003b70  72 31 33 21 2c 7b 72 30  2d 72 34 7d 0d 11 44 1a  |r13!,{r0-r4}..D.|
00003b80  20 20 20 20 20 20 20 20  6d 6f 76 73 20 20 20 20  |        movs    |
00003b90  70 63 2c 72 31 34 0d 11  4e 11 2e 64 65 6c 65 74  |pc,r14..N..delet|
00003ba0  65 5f 73 70 61 63 65 0d  11 58 15 20 20 20 20 20  |e_space..X.     |
00003bb0  20 20 20 65 71 75 64 20  20 20 20 30 0d 11 62 15  |   equd    0..b.|
00003bc0  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
00003bd0  30 0d 11 6c 04 0d 11 76  53 3b 20 2d 2d 2d 2d 2d  |0..l...vS; -----|
00003be0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00003c20  2d 2d 2d 2d 2d 2d 2d 2d  0d 11 80 13 3b 20 6f 70  |--------....; op|
00003c30  65 6e 20 74 68 65 20 6d  65 6e 75 0d 11 8a 04 0d  |en the menu.....|
00003c40  11 94 0e 2e 6f 70 65 6e  5f 6d 65 6e 75 0d 11 9e  |....open_menu...|
00003c50  26 20 20 20 20 20 20 20  20 6c 64 72 62 20 20 20  |&        ldrb   |
00003c60  20 72 32 2c 6e 75 6d 62  65 72 5f 73 65 6c 65 63  | r2,number_selec|
00003c70  74 65 64 0d 11 a8 45 20  20 20 20 20 20 20 20 74  |ted...E        t|
00003c80  65 71 20 20 20 20 20 72  32 2c 23 30 20 20 20 20  |eq     r2,#0    |
00003c90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00003ca0  20 73 65 65 20 69 66 20  6e 6f 20 69 63 6f 6e 20  | see if no icon |
00003cb0  73 65 6c 65 63 74 65 64  0d 11 b2 46 20 20 20 20  |selected...F    |
00003cc0  20 20 20 20 74 65 71 6e  65 20 20 20 72 32 2c 23  |    teqne   r2,#|
00003cd0  26 66 66 20 20 20 20 20  20 20 20 20 20 20 20 20  |&ff             |
00003ce0  20 20 20 20 3b 20 6f 72  20 69 63 6f 6e 20 73 65  |    ; or icon se|
00003cf0  6c 65 63 74 65 64 20 62  79 20 6d 65 6e 75 0d 11  |lected by menu..|
00003d00  bc 22 20 20 20 20 20 20  20 20 62 6e 65 20 20 20  |."        bne   |
00003d10  20 20 69 63 6f 6e 73 5f  73 65 6c 65 63 74 65 64  |  icons_selected|
00003d20  0d 11 c6 1b 20 20 20 20  20 20 20 20 74 65 71 20  |....        teq |
00003d30  20 20 20 20 72 32 2c 23  26 66 66 0d 11 d0 2f 20  |    r2,#&ff.../ |
00003d40  20 20 20 20 20 20 20 62  6c 65 71 20 20 20 20 75  |       bleq    u|
00003d50  6e 73 65 6c 65 63 74 5f  6d 65 6e 75 5f 73 65 6c  |nselect_menu_sel|
00003d60  65 63 74 65 64 5f 69 63  6f 6e 0d 11 da 3d 20 20  |ected_icon...=  |
00003d70  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 32  |      ldr     r2|
00003d80  2c 5b 72 31 2c 23 31 36  5d 20 20 20 20 20 20 20  |,[r1,#16]       |
00003d90  20 20 20 20 20 20 3b 20  69 63 6f 6e 20 63 6c 69  |      ; icon cli|
00003da0  63 6b 65 64 20 6f 6e 0d  11 e4 3c 20 20 20 20 20  |cked on...<     |
00003db0  20 20 20 63 6d 6e 20 20  20 20 20 72 32 2c 23 31  |   cmn     r2,#1|
00003dc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003dd0  20 20 20 3b 20 73 65 65  20 69 66 20 6f 6e 20 69  |   ; see if on i|
00003de0  63 6f 6e 0d 11 ee 39 20  20 20 20 20 20 20 20 62  |con...9        b|
00003df0  65 71 20 20 20 20 20 69  63 6f 6e 73 5f 73 65 6c  |eq     icons_sel|
00003e00  65 63 74 65 64 20 20 20  20 20 20 20 20 20 20 3b  |ected          ;|
00003e10  20 73 6b 69 70 20 69 66  20 6e 6f 74 0d 11 f8 1d  | skip if not....|
00003e20  20 20 20 20 20 20 20 20  62 6c 20 20 20 20 20 20  |        bl      |
00003e30  66 69 6e 64 5f 69 63 6f  6e 0d 12 02 19 20 20 20  |find_icon....   |
00003e40  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 33 2c  |     mov     r3,|
00003e50  23 32 0d 12 0c 46 20 20  20 20 20 20 20 20 73 74  |#2...F        st|
00003e60  72 62 20 20 20 20 72 33  2c 5b 72 34 2c 23 73 65  |rb    r3,[r4,#se|
00003e70  6c 65 63 74 65 64 5d 20  20 20 20 20 20 20 3b 20  |lected]       ; |
00003e80  6d 61 72 6b 20 61 73 20  73 65 6c 65 63 74 65 64  |mark as selected|
00003e90  20 62 79 20 6d 65 6e 75  0d 12 16 28 20 20 20 20  | by menu...(    |
00003ea0  20 20 20 20 6c 64 72 62  20 20 20 20 72 32 2c 5b  |    ldrb    r2,[|
00003eb0  72 34 2c 23 69 63 6f 6e  5f 68 61 6e 64 6c 65 5d  |r4,#icon_handle]|
00003ec0  0d 12 20 1f 20 20 20 20  20 20 20 20 62 6c 20 20  |.. .        bl  |
00003ed0  20 20 20 20 73 65 6c 65  63 74 5f 69 63 6f 6e 0d  |    select_icon.|
00003ee0  12 2a 19 20 20 20 20 20  20 20 20 6d 76 6e 20 20  |.*.        mvn  |
00003ef0  20 20 20 72 33 2c 23 30  0d 12 34 26 20 20 20 20  |   r3,#0..4&    |
00003f00  20 20 20 20 73 74 72 62  20 20 20 20 72 33 2c 6e  |    strb    r3,n|
00003f10  75 6d 62 65 72 5f 73 65  6c 65 63 74 65 64 0d 12  |umber_selected..|
00003f20  3e 13 2e 69 63 6f 6e 73  5f 73 65 6c 65 63 74 65  |>..icons_selecte|
00003f30  64 0d 12 48 26 20 20 20  20 20 20 20 20 6c 64 72  |d..H&        ldr|
00003f40  62 20 20 20 20 72 32 2c  6e 75 6d 62 65 72 5f 6f  |b    r2,number_o|
00003f50  66 5f 69 63 6f 6e 73 0d  12 52 49 20 20 20 20 20  |f_icons..RI     |
00003f60  20 20 20 74 65 71 20 20  20 20 20 72 32 2c 23 30  |   teq     r2,#0|
00003f70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003f80  20 20 20 3b 20 73 65 65  20 69 66 20 6e 6f 20 69  |   ; see if no i|
00003f90  63 6f 6e 73 20 6f 6e 20  62 61 63 6b 64 72 6f 70  |cons on backdrop|
00003fa0  0d 12 5c 27 20 20 20 20  20 20 20 20 6c 64 72 20  |..\'        ldr |
00003fb0  20 20 20 20 72 33 2c 73  65 6c 65 63 74 5f 61 6c  |    r3,select_al|
00003fc0  6c 5f 66 6c 61 67 73 0d  12 66 48 20 20 20 20 20  |l_flags..fH     |
00003fd0  20 20 20 6f 72 72 65 71  20 20 20 72 33 2c 72 33  |   orreq   r3,r3|
00003fe0  2c 23 31 20 3c 3c 20 32  32 20 20 20 20 20 20 20  |,#1 << 22       |
00003ff0  20 20 20 3b 20 73 65 74  20 73 68 61 64 65 64 20  |   ; set shaded |
00004000  62 69 74 20 69 66 20 6e  6f 20 69 63 6f 6e 73 0d  |bit if no icons.|
00004010  12 70 48 20 20 20 20 20  20 20 20 62 69 63 6e 65  |.pH        bicne|
00004020  20 20 20 72 33 2c 72 33  2c 23 31 20 3c 3c 20 32  |   r3,r3,#1 << 2|
00004030  32 20 20 20 20 20 20 20  20 20 20 3b 20 75 6e 73  |2          ; uns|
00004040  65 74 20 73 68 61 64 65  64 20 62 69 74 20 6f 74  |et shaded bit ot|
00004050  68 65 72 77 69 73 65 0d  12 7a 27 20 20 20 20 20  |herwise..z'     |
00004060  20 20 20 73 74 72 20 20  20 20 20 72 33 2c 73 65  |   str     r3,se|
00004070  6c 65 63 74 5f 61 6c 6c  5f 66 6c 61 67 73 0d 12  |lect_all_flags..|
00004080  84 04 0d 12 8e 26 20 20  20 20 20 20 20 20 6c 64  |.....&        ld|
00004090  72 62 20 20 20 20 72 32  2c 6e 75 6d 62 65 72 5f  |rb    r2,number_|
000040a0  73 65 6c 65 63 74 65 64  0d 12 98 46 20 20 20 20  |selected...F    |
000040b0  20 20 20 20 74 65 71 20  20 20 20 20 72 32 2c 23  |    teq     r2,#|
000040c0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000040d0  20 20 20 20 3b 20 73 65  65 20 69 66 20 6e 6f 20  |    ; see if no |
000040e0  69 63 6f 6e 73 20 73 65  6c 65 63 74 65 64 0d 12  |icons selected..|
000040f0  a2 2c 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.,        ldr   |
00004100  20 20 72 33 2c 63 6c 65  61 72 5f 73 65 6c 65 63  |  r3,clear_selec|
00004110  74 69 6f 6e 5f 66 6c 61  67 73 0d 12 ac 51 20 20  |tion_flags...Q  |
00004120  20 20 20 20 20 20 6f 72  72 65 71 20 20 20 72 33  |      orreq   r3|
00004130  2c 72 33 2c 23 31 20 3c  3c 20 32 32 20 20 20 20  |,r3,#1 << 22    |
00004140  20 20 20 20 20 20 3b 20  73 65 74 20 73 68 61 64  |      ; set shad|
00004150  65 64 20 62 69 74 20 69  66 20 6e 6f 20 69 63 6f  |ed bit if no ico|
00004160  6e 73 20 73 65 6c 65 63  74 65 64 0d 12 b6 48 20  |ns selected...H |
00004170  20 20 20 20 20 20 20 62  69 63 6e 65 20 20 20 72  |       bicne   r|
00004180  33 2c 72 33 2c 23 31 20  3c 3c 20 32 32 20 20 20  |3,r3,#1 << 22   |
00004190  20 20 20 20 20 20 20 3b  20 75 6e 73 65 74 20 73  |       ; unset s|
000041a0  68 61 64 65 64 20 62 69  74 20 6f 74 68 65 72 77  |haded bit otherw|
000041b0  69 73 65 0d 12 c0 2c 20  20 20 20 20 20 20 20 73  |ise...,        s|
000041c0  74 72 20 20 20 20 20 72  33 2c 63 6c 65 61 72 5f  |tr     r3,clear_|
000041d0  73 65 6c 65 63 74 69 6f  6e 5f 66 6c 61 67 73 0d  |selection_flags.|
000041e0  12 ca 04 0d 12 d4 23 20  20 20 20 20 20 20 20 6c  |......#        l|
000041f0  64 72 20 20 20 20 20 72  33 2c 72 65 6d 6f 76 65  |dr     r3,remove|
00004200  5f 66 6c 61 67 73 0d 12  de 48 20 20 20 20 20 20  |_flags...H      |
00004210  20 20 6f 72 72 65 71 20  20 20 72 33 2c 72 33 2c  |  orreq   r3,r3,|
00004220  23 31 20 3c 3c 20 32 32  20 20 20 20 20 20 20 20  |#1 << 22        |
00004230  20 20 3b 20 73 65 74 20  73 68 61 64 65 64 20 62  |  ; set shaded b|
00004240  69 74 20 69 66 20 6e 6f  20 69 63 6f 6e 73 0d 12  |it if no icons..|
00004250  e8 48 20 20 20 20 20 20  20 20 62 69 63 6e 65 20  |.H        bicne |
00004260  20 20 72 33 2c 72 33 2c  23 31 20 3c 3c 20 32 32  |  r3,r3,#1 << 22|
00004270  20 20 20 20 20 20 20 20  20 20 3b 20 75 6e 73 65  |          ; unse|
00004280  74 20 73 68 61 64 65 64  20 62 69 74 20 6f 74 68  |t shaded bit oth|
00004290  65 72 77 69 73 65 0d 12  f2 23 20 20 20 20 20 20  |erwise...#      |
000042a0  20 20 73 74 72 20 20 20  20 20 72 33 2c 72 65 6d  |  str     r3,rem|
000042b0  6f 76 65 5f 66 6c 61 67  73 0d 12 fc 04 0d 13 06  |ove_flags.......|
000042c0  45 20 20 20 20 20 20 20  20 6c 64 72 20 20 20 20  |E        ldr    |
000042d0  20 72 32 2c 5b 72 31 5d  20 20 20 20 20 20 20 20  | r2,[r1]        |
000042e0  20 20 20 20 20 20 20 20  20 3b 20 72 32 20 3d 20  |         ; r2 = |
000042f0  6d 6f 75 73 65 20 78 20  63 6f 6f 72 64 69 6e 61  |mouse x coordina|
00004300  74 65 0d 13 10 4a 20 20  20 20 20 20 20 20 73 75  |te...J        su|
00004310  62 20 20 20 20 20 72 32  2c 72 32 2c 23 31 34 34  |b     r2,r2,#144|
00004320  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00004330  78 20 63 6f 6f 72 64 69  6e 61 74 65 20 74 6f 20  |x coordinate to |
00004340  6f 70 65 6e 20 6d 65 6e  75 20 61 74 0d 13 1a 45  |open menu at...E|
00004350  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
00004360  72 33 2c 5b 72 31 2c 23  34 5d 20 20 20 20 20 20  |r3,[r1,#4]      |
00004370  20 20 20 20 20 20 20 20  3b 20 72 33 20 3d 20 6d  |        ; r3 = m|
00004380  6f 75 73 65 20 79 20 63  6f 6f 72 64 69 6e 61 74  |ouse y coordinat|
00004390  65 0d 13 24 4a 20 20 20  20 20 20 20 20 61 64 64  |e..$J        add|
000043a0  20 20 20 20 20 72 33 2c  72 33 2c 23 31 36 20 20  |     r3,r3,#16  |
000043b0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 79  |             ; y|
000043c0  20 63 6f 6f 72 64 69 6e  61 74 65 20 74 6f 20 6f  | coordinate to o|
000043d0  70 65 6e 20 6d 65 6e 75  20 61 74 0d 13 2e 20 20  |pen menu at...  |
000043e0  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
000043f0  31 2c 6d 61 69 6e 5f 6d  65 6e 75 0d 13 38 26 20  |1,main_menu..8& |
00004400  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
00004410  58 57 69 6d 70 5f 43 72  65 61 74 65 4d 65 6e 75  |XWimp_CreateMenu|
00004420  22 0d 13 42 1f 20 20 20  20 20 20 20 20 62 76 73  |"..B.        bvs|
00004430  20 20 20 20 20 66 61 74  61 6c 5f 65 72 72 6f 72  |     fatal_error|
00004440  0d 13 4c 18 20 20 20 20  20 20 20 20 62 20 20 20  |..L.        b   |
00004450  20 20 20 20 70 6f 6c 6c  0d 13 56 04 0d 13 60 53  |    poll..V...`S|
00004460  3b 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; --------------|
00004470  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000044a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000044b0  13 6a 16 3b 20 6d 65 6e  75 20 64 61 74 61 20 62  |.j.; menu data b|
000044c0  6c 6f 63 6b 73 0d 13 74  04 0d 13 7e 0e 2e 6d 61  |locks..t...~..ma|
000044d0  69 6e 5f 6d 65 6e 75 0d  13 88 1f 20 20 20 20 20  |in_menu....     |
000044e0  20 20 20 a4 73 74 72 69  6e 67 28 22 50 6c 61 63  |   .string("Plac|
000044f0  65 20 49 74 22 29 0d 13  92 15 20 20 20 20 20 20  |e It")....      |
00004500  20 20 65 71 75 62 20 20  20 20 37 0d 13 9c 15 20  |  equb    7.... |
00004510  20 20 20 20 20 20 20 65  71 75 62 20 20 20 20 32  |       equb    2|
00004520  0d 13 a6 15 20 20 20 20  20 20 20 20 65 71 75 62  |....        equb|
00004530  20 20 20 20 37 0d 13 b0  15 20 20 20 20 20 20 20  |    7....       |
00004540  20 65 71 75 62 20 20 20  20 30 0d 13 ba 17 20 20  | equb    0....  |
00004550  20 20 20 20 20 20 65 71  75 64 20 20 20 20 32 35  |      equd    25|
00004560  36 0d 13 c4 16 20 20 20  20 20 20 20 20 65 71 75  |6....        equ|
00004570  64 20 20 20 20 34 34 0d  13 ce 15 20 20 20 20 20  |d    44....     |
00004580  20 20 20 65 71 75 64 20  20 20 20 30 0d 13 d8 04  |   equd    0....|
00004590  0d 13 e2 15 20 20 20 20  20 20 20 20 65 71 75 64  |....        equd|
000045a0  20 20 20 20 30 0d 13 ec  17 2e 69 6e 66 6f 5f 77  |    0.....info_w|
000045b0  69 6e 64 6f 77 5f 68 61  6e 64 6c 65 0d 13 f6 16  |indow_handle....|
000045c0  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
000045d0  2d 31 0d 14 00 28 20 20  20 20 20 20 20 20 65 71  |-1...(        eq|
000045e0  75 64 20 20 20 20 31 2b  28 31 20 3c 3c 20 35 29  |ud    1+(1 << 5)|
000045f0  2b 28 37 20 3c 3c 20 32  34 29 0d 14 0a 1b 20 20  |+(7 << 24)....  |
00004600  20 20 20 20 20 20 a4 73  74 72 69 6e 67 28 22 49  |      .string("I|
00004610  6e 66 6f 22 29 0d 14 14  04 0d 14 1e 15 20 20 20  |nfo")........   |
00004620  20 20 20 20 20 65 71 75  64 20 20 20 20 30 0d 14  |     equd    0..|
00004630  28 20 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |(         equd  |
00004640  20 20 64 69 73 70 6c 61  79 5f 6d 65 6e 75 0d 14  |  display_menu..|
00004650  32 28 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |2(        equd  |
00004660  20 20 31 2b 28 31 20 3c  3c 20 35 29 2b 28 37 20  |  1+(1 << 5)+(7 |
00004670  3c 3c 20 32 34 29 0d 14  3c 1e 20 20 20 20 20 20  |<< 24)..<.      |
00004680  20 20 a4 73 74 72 69 6e  67 28 22 44 69 73 70 6c  |  .string("Displ|
00004690  61 79 22 29 0d 14 46 04  0d 14 50 15 20 20 20 20  |ay")..F...P.    |
000046a0  20 20 20 20 65 71 75 64  20 20 20 20 30 0d 14 5a  |    equd    0..Z|
000046b0  16 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
000046c0  20 2d 31 0d 14 64 11 2e  72 65 6d 6f 76 65 5f 66  | -1..d..remove_f|
000046d0  6c 61 67 73 0d 14 6e 28  20 20 20 20 20 20 20 20  |lags..n(        |
000046e0  65 71 75 64 20 20 20 20  31 2b 28 31 20 3c 3c 20  |equd    1+(1 << |
000046f0  35 29 2b 28 37 20 3c 3c  20 32 34 29 0d 14 78 1d  |5)+(7 << 24)..x.|
00004700  20 20 20 20 20 20 20 20  a4 73 74 72 69 6e 67 28  |        .string(|
00004710  22 52 65 6d 6f 76 65 22  29 0d 14 82 04 0d 14 8c  |"Remove").......|
00004720  15 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
00004730  20 30 0d 14 96 16 20 20  20 20 20 20 20 20 65 71  | 0....        eq|
00004740  75 64 20 20 20 20 2d 31  0d 14 a0 15 2e 73 65 6c  |ud    -1.....sel|
00004750  65 63 74 5f 61 6c 6c 5f  66 6c 61 67 73 0d 14 aa  |ect_all_flags...|
00004760  28 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |(        equd   |
00004770  20 31 2b 28 31 20 3c 3c  20 35 29 2b 28 37 20 3c  | 1+(1 << 5)+(7 <|
00004780  3c 20 32 34 29 0d 14 b4  21 20 20 20 20 20 20 20  |< 24)...!       |
00004790  20 a4 73 74 72 69 6e 67  28 22 53 65 6c 65 63 74  | .string("Select|
000047a0  20 61 6c 6c 22 29 0d 14  be 04 0d 14 c8 15 20 20  | all")........  |
000047b0  20 20 20 20 20 20 65 71  75 64 20 20 20 20 30 0d  |      equd    0.|
000047c0  14 d2 16 20 20 20 20 20  20 20 20 65 71 75 64 20  |...        equd |
000047d0  20 20 20 2d 31 0d 14 dc  1a 2e 63 6c 65 61 72 5f  |   -1.....clear_|
000047e0  73 65 6c 65 63 74 69 6f  6e 5f 66 6c 61 67 73 0d  |selection_flags.|
000047f0  14 e6 31 20 20 20 20 20  20 20 20 65 71 75 64 20  |..1        equd |
00004800  20 20 20 31 2b 28 31 20  3c 3c 20 35 29 2b 28 31  |   1+(1 << 5)+(1|
00004810  20 3c 3c 20 38 29 2b 28  37 20 3c 3c 20 32 34 29  | << 8)+(7 << 24)|
00004820  0d 14 f0 2e 20 20 20 20  20 20 20 20 65 71 75 64  |....        equd|
00004830  20 20 20 20 63 6c 65 61  72 5f 73 65 6c 65 63 74  |    clear_select|
00004840  69 6f 6e 5f 69 6e 64 69  72 65 63 74 65 64 0d 14  |ion_indirected..|
00004850  fa 16 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
00004860  20 20 2d 31 0d 15 04 16  20 20 20 20 20 20 20 20  |  -1....        |
00004870  65 71 75 64 20 20 20 20  31 36 0d 15 0e 04 0d 15  |equd    16......|
00004880  18 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
00004890  20 20 30 0d 15 22 16 20  20 20 20 20 20 20 20 65  |  0..".        e|
000048a0  71 75 64 20 20 20 20 2d  31 0d 15 2c 31 20 20 20  |qud    -1..,1   |
000048b0  20 20 20 20 20 65 71 75  64 20 20 20 20 31 2b 28  |     equd    1+(|
000048c0  31 20 3c 3c 20 35 29 2b  28 31 20 3c 3c 20 38 29  |1 << 5)+(1 << 8)|
000048d0  2b 28 37 20 3c 3c 20 32  34 29 0d 15 36 2c 20 20  |+(7 << 24)..6,  |
000048e0  20 20 20 20 20 20 65 71  75 64 20 20 20 20 73 61  |      equd    sa|
000048f0  76 65 5f 62 61 63 6b 64  72 6f 70 5f 69 6e 64 69  |ve_backdrop_indi|
00004900  72 65 63 74 65 64 0d 15  40 16 20 20 20 20 20 20  |rected..@.      |
00004910  20 20 65 71 75 64 20 20  20 20 2d 31 0d 15 4a 16  |  equd    -1..J.|
00004920  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
00004930  31 34 0d 15 54 04 0d 15  5e 3c 20 20 20 20 20 20  |14..T...^<      |
00004940  20 20 65 71 75 64 20 20  20 20 26 38 30 20 20 20  |  equd    &80   |
00004950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004960  20 20 3b 20 6c 61 73 74  20 6d 65 6e 75 20 69 74  |  ; last menu it|
00004970  65 6d 0d 15 68 16 20 20  20 20 20 20 20 20 65 71  |em..h.        eq|
00004980  75 64 20 20 20 20 2d 31  0d 15 72 28 20 20 20 20  |ud    -1..r(    |
00004990  20 20 20 20 65 71 75 64  20 20 20 20 31 2b 28 31  |    equd    1+(1|
000049a0  20 3c 3c 20 35 29 2b 28  37 20 3c 3c 20 32 34 29  | << 5)+(7 << 24)|
000049b0  0d 15 7c 1b 20 20 20 20  20 20 20 20 a4 73 74 72  |..|.        .str|
000049c0  69 6e 67 28 22 51 75 69  74 22 29 0d 15 86 12 2e  |ing("Quit").....|
000049d0  65 6e 64 5f 6d 61 69 6e  5f 6d 65 6e 75 0d 15 90  |end_main_menu...|
000049e0  04 0d 15 9a 11 2e 64 69  73 70 6c 61 79 5f 6d 65  |......display_me|
000049f0  6e 75 0d 15 a4 1e 20 20  20 20 20 20 20 20 a4 73  |nu....        .s|
00004a00  74 72 69 6e 67 28 22 44  69 73 70 6c 61 79 22 29  |tring("Display")|
00004a10  0d 15 ae 15 20 20 20 20  20 20 20 20 65 71 75 62  |....        equb|
00004a20  20 20 20 20 37 0d 15 b8  15 20 20 20 20 20 20 20  |    7....       |
00004a30  20 65 71 75 62 20 20 20  20 32 0d 15 c2 15 20 20  | equb    2....  |
00004a40  20 20 20 20 20 20 65 71  75 62 20 20 20 20 37 0d  |      equb    7.|
00004a50  15 cc 15 20 20 20 20 20  20 20 20 65 71 75 62 20  |...        equb |
00004a60  20 20 20 30 0d 15 d6 17  20 20 20 20 20 20 20 20  |   0....        |
00004a70  65 71 75 64 20 20 20 20  31 37 36 0d 15 e0 16 20  |equd    176.... |
00004a80  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 34  |       equd    4|
00004a90  34 0d 15 ea 15 20 20 20  20 20 20 20 20 65 71 75  |4....        equ|
00004aa0  64 20 20 20 20 30 0d 15  f4 04 0d 15 fe 14 2e 62  |d    0.........b|
00004ab0  6c 61 63 6b 5f 74 65 78  74 5f 74 69 63 6b 0d 16  |lack_text_tick..|
00004ac0  08 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
00004ad0  20 20 31 0d 16 12 16 20  20 20 20 20 20 20 20 65  |  1....        e|
00004ae0  71 75 64 20 20 20 20 2d  31 0d 16 1c 28 20 20 20  |qud    -1...(   |
00004af0  20 20 20 20 20 65 71 75  64 20 20 20 20 31 2b 28  |     equd    1+(|
00004b00  31 20 3c 3c 20 35 29 2b  28 37 20 3c 3c 20 32 34  |1 << 5)+(7 << 24|
00004b10  29 0d 16 26 21 20 20 20  20 20 20 20 20 a4 73 74  |)..&!        .st|
00004b20  72 69 6e 67 28 22 42 6c  61 63 6b 20 74 65 78 74  |ring("Black text|
00004b30  22 29 0d 16 30 04 0d 16  3a 14 2e 77 68 69 74 65  |")..0...:..white|
00004b40  5f 74 65 78 74 5f 74 69  63 6b 0d 16 44 3c 20 20  |_text_tick..D<  |
00004b50  20 20 20 20 20 20 65 71  75 64 20 20 20 20 26 38  |      equd    &8|
00004b60  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00004b70  20 20 20 20 20 20 3b 20  6c 61 73 74 20 6d 65 6e  |      ; last men|
00004b80  75 20 69 74 65 6d 0d 16  4e 16 20 20 20 20 20 20  |u item..N.      |
00004b90  20 20 65 71 75 64 20 20  20 20 2d 31 0d 16 58 28  |  equd    -1..X(|
00004ba0  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
00004bb0  31 2b 28 31 20 3c 3c 20  35 29 2b 28 37 20 3c 3c  |1+(1 << 5)+(7 <<|
00004bc0  20 32 34 29 0d 16 62 21  20 20 20 20 20 20 20 20  | 24)..b!        |
00004bd0  a4 73 74 72 69 6e 67 28  22 57 68 69 74 65 20 74  |.string("White t|
00004be0  65 78 74 22 29 0d 16 6c  04 0d 16 76 1f 2e 63 6c  |ext")..l...v..cl|
00004bf0  65 61 72 5f 73 65 6c 65  63 74 69 6f 6e 5f 69 6e  |ear_selection_in|
00004c00  64 69 72 65 63 74 65 64  0d 16 80 28 20 20 20 20  |directed...(    |
00004c10  20 20 20 20 65 71 75 73  20 20 20 20 22 43 6c 65  |    equs    "Cle|
00004c20  61 72 20 73 65 6c 65 63  74 69 6f 6e 22 2b bd 30  |ar selection"+.0|
00004c30  0d 16 8a 1d 2e 73 61 76  65 5f 62 61 63 6b 64 72  |.....save_backdr|
00004c40  6f 70 5f 69 6e 64 69 72  65 63 74 65 64 0d 16 94  |op_indirected...|
00004c50  26 20 20 20 20 20 20 20  20 65 71 75 73 20 20 20  |&        equs   |
00004c60  20 22 53 61 76 65 20 62  61 63 6b 64 72 6f 70 22  | "Save backdrop"|
00004c70  2b bd 30 0d 16 9e 11 20  20 20 20 20 20 20 20 61  |+.0....        a|
00004c80  6c 69 67 6e 0d 16 a8 04  0d 16 b2 53 3b 20 2d 2d  |lign.......S; --|
00004c90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00004cd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 16 bc 22 3b  |-----------...";|
00004ce0  20 4f 75 72 20 64 72 61  67 20 6f 70 65 72 61 74  | Our drag operat|
00004cf0  69 6f 6e 20 68 61 73 20  65 6e 64 65 64 0d 16 c6  |ion has ended...|
00004d00  04 0d 16 d0 0d 2e 64 72  61 67 5f 65 6e 64 0d 16  |......drag_end..|
00004d10  da 25 20 20 20 20 20 20  20 20 61 64 72 20 20 20  |.%        adr   |
00004d20  20 20 72 31 2c 77 6f 72  6b 73 70 61 63 65 2b 26  |  r1,workspace+&|
00004d30  34 30 30 0d 16 e4 1f 20  20 20 20 20 20 20 20 73  |400....        s|
00004d40  75 62 20 20 20 20 20 72  31 2c 72 31 2c 23 26 34  |ub     r1,r1,#&4|
00004d50  30 30 0d 16 ee 2a 20 20  20 20 20 20 20 20 73 77  |00...*        sw|
00004d60  69 20 20 20 20 20 22 58  57 69 6d 70 5f 47 65 74  |i     "XWimp_Get|
00004d70  50 6f 69 6e 74 65 72 49  6e 66 6f 22 0d 16 f8 1f  |PointerInfo"....|
00004d80  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
00004d90  66 61 74 61 6c 5f 65 72  72 6f 72 0d 17 02 1f 20  |fatal_error.... |
00004da0  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
00004db0  30 2c 5b 72 31 2c 23 31  32 5d 0d 17 0c 2f 20 20  |0,[r1,#12].../  |
00004dc0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 33  |      ldr     r3|
00004dd0  2c 62 61 63 6b 67 72 6f  75 6e 64 5f 77 69 6e 64  |,background_wind|
00004de0  6f 77 5f 68 61 6e 64 6c  65 0d 17 16 4c 20 20 20  |ow_handle...L   |
00004df0  20 20 20 20 20 74 65 71  20 20 20 20 20 72 30 2c  |     teq     r0,|
00004e00  72 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r3              |
00004e10  20 20 20 20 20 3b 20 73  65 65 20 69 66 20 64 72  |     ; see if dr|
00004e20  61 67 67 65 64 20 6f 6e  74 6f 20 6f 75 72 20 77  |agged onto our w|
00004e30  69 6e 64 6f 77 0d 17 20  21 20 20 20 20 20 20 20  |indow.. !       |
00004e40  20 62 6e 65 20 20 20 20  20 67 65 74 5f 74 61 73  | bne     get_tas|
00004e50  6b 5f 6e 61 6d 65 0d 17  2a 49 20 20 20 20 20 20  |k_name..*I      |
00004e60  20 20 6c 64 6d 69 61 20  20 20 72 31 2c 7b 72 30  |  ldmia   r1,{r0|
00004e70  2c 72 32 7d 20 20 20 20  20 20 20 20 20 20 20 20  |,r2}            |
00004e80  20 20 3b 20 67 65 74 20  63 6f 6f 72 64 73 20 77  |  ; get coords w|
00004e90  68 65 72 65 20 64 72 61  67 20 65 6e 64 65 64 0d  |here drag ended.|
00004ea0  17 34 47 20 20 20 20 20  20 20 20 73 74 72 20 20  |.4G        str  |
00004eb0  20 20 20 72 33 2c 5b 72  31 5d 20 20 20 20 20 20  |   r3,[r1]      |
00004ec0  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00004ed0  72 65 20 77 69 6e 64 6f  77 20 68 61 6e 64 6c 65  |re window handle|
00004ee0  20 61 74 20 72 31 0d 17  3e 23 20 20 20 20 20 20  | at r1..>#      |
00004ef0  20 20 6c 64 72 20 20 20  20 20 72 33 2c 64 72 61  |  ldr     r3,dra|
00004f00  67 5f 78 5f 73 74 61 72  74 0d 17 48 23 20 20 20  |g_x_start..H#   |
00004f10  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 34 2c  |     ldr     r4,|
00004f20  64 72 61 67 5f 79 5f 73  74 61 72 74 0d 17 52 1c  |drag_y_start..R.|
00004f30  20 20 20 20 20 20 20 20  73 75 62 20 20 20 20 20  |        sub     |
00004f40  72 33 2c 72 30 2c 72 33  0d 17 5c 1c 20 20 20 20  |r3,r0,r3..\.    |
00004f50  20 20 20 20 73 75 62 20  20 20 20 20 72 34 2c 72  |    sub     r4,r|
00004f60  32 2c 72 34 0d 17 66 2e  20 20 20 20 20 20 20 20  |2,r4..f.        |
00004f70  61 64 72 20 20 20 20 20  72 35 2c 73 74 61 72 74  |adr     r5,start|
00004f80  5f 6c 69 6e 6b 65 64 5f  6c 69 73 74 2d 26 31 30  |_linked_list-&10|
00004f90  30 30 0d 17 70 20 20 20  20 20 20 20 20 20 61 64  |00..p         ad|
00004fa0  64 20 20 20 20 20 72 35  2c 72 35 2c 23 26 31 30  |d     r5,r5,#&10|
00004fb0  30 30 0d 17 7a 1b 20 20  20 20 20 20 20 20 6c 64  |00..z.        ld|
00004fc0  72 20 20 20 20 20 72 35  2c 5b 72 35 5d 0d 17 84  |r     r5,[r5]...|
00004fd0  12 2e 64 72 61 67 5f 65  6e 64 5f 6c 6f 6f 70 0d  |..drag_end_loop.|
00004fe0  17 8e 25 20 20 20 20 20  20 20 20 6c 64 72 62 20  |..%        ldrb |
00004ff0  20 20 20 72 30 2c 5b 72  35 2c 23 73 65 6c 65 63  |   r0,[r5,#selec|
00005000  74 65 64 5d 0d 17 98 19  20 20 20 20 20 20 20 20  |ted]....        |
00005010  74 65 71 20 20 20 20 20  72 30 2c 23 30 0d 17 a2  |teq     r0,#0...|
00005020  26 20 20 20 20 20 20 20  20 62 65 71 20 20 20 20  |&        beq    |
00005030  20 64 72 61 67 5f 65 6e  64 5f 6c 6f 6f 70 5f 73  | drag_end_loop_s|
00005040  6b 69 70 0d 17 ac 28 20  20 20 20 20 20 20 20 6c  |kip...(        l|
00005050  64 72 62 20 20 20 20 72  30 2c 5b 72 35 2c 23 69  |drb    r0,[r5,#i|
00005060  63 6f 6e 5f 68 61 6e 64  6c 65 5d 0d 17 b6 1e 20  |con_handle].... |
00005070  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00005080  30 2c 5b 72 31 2c 23 34  5d 0d 17 c0 26 20 20 20  |0,[r1,#4]...&   |
00005090  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 57  |     swi     "XW|
000050a0  69 6d 70 5f 44 65 6c 65  74 65 49 63 6f 6e 22 0d  |imp_DeleteIcon".|
000050b0  17 ca 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |...        bvs  |
000050c0  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 17  |   fatal_error..|
000050d0  d4 27 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.'        ldr   |
000050e0  20 20 72 30 2c 5b 72 35  2c 23 78 5f 70 6f 73 69  |  r0,[r5,#x_posi|
000050f0  74 69 6f 6e 5d 0d 17 de  1c 20 20 20 20 20 20 20  |tion]....       |
00005100  20 61 64 64 20 20 20 20  20 72 30 2c 72 30 2c 72  | add     r0,r0,r|
00005110  33 0d 17 e8 27 20 20 20  20 20 20 20 20 73 74 72  |3...'        str|
00005120  20 20 20 20 20 72 30 2c  5b 72 35 2c 23 78 5f 70  |     r0,[r5,#x_p|
00005130  6f 73 69 74 69 6f 6e 5d  0d 17 f2 1e 20 20 20 20  |osition]....    |
00005140  20 20 20 20 73 74 72 20  20 20 20 20 72 30 2c 5b  |    str     r0,[|
00005150  72 31 2c 23 34 5d 0d 17  fc 20 20 20 20 20 20 20  |r1,#4]...       |
00005160  20 20 61 64 64 20 20 20  20 20 72 30 2c 72 30 2c  |  add     r0,r0,|
00005170  23 31 30 2a 31 36 0d 18  06 1f 20 20 20 20 20 20  |#10*16....      |
00005180  20 20 73 74 72 20 20 20  20 20 72 30 2c 5b 72 31  |  str     r0,[r1|
00005190  2c 23 31 32 5d 0d 18 10  27 20 20 20 20 20 20 20  |,#12]...'       |
000051a0  20 6c 64 72 20 20 20 20  20 72 30 2c 5b 72 35 2c  | ldr     r0,[r5,|
000051b0  23 79 5f 70 6f 73 69 74  69 6f 6e 5d 0d 18 1a 1c  |#y_position]....|
000051c0  20 20 20 20 20 20 20 20  61 64 64 20 20 20 20 20  |        add     |
000051d0  72 30 2c 72 30 2c 72 34  0d 18 24 27 20 20 20 20  |r0,r0,r4..$'    |
000051e0  20 20 20 20 73 74 72 20  20 20 20 20 72 30 2c 5b  |    str     r0,[|
000051f0  72 35 2c 23 79 5f 70 6f  73 69 74 69 6f 6e 5d 0d  |r5,#y_position].|
00005200  18 2e 1e 20 20 20 20 20  20 20 20 73 74 72 20 20  |...        str  |
00005210  20 20 20 72 30 2c 5b 72  31 2c 23 38 5d 0d 18 38  |   r0,[r1,#8]..8|
00005220  1e 20 20 20 20 20 20 20  20 61 64 64 20 20 20 20  |.        add    |
00005230  20 72 30 2c 72 30 2c 23  31 30 38 0d 18 42 1f 20  | r0,r0,#108..B. |
00005240  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00005250  30 2c 5b 72 31 2c 23 31  36 5d 0d 18 4c 21 20 20  |0,[r1,#16]..L!  |
00005260  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 30  |      ldr     r0|
00005270  2c 69 63 6f 6e 5f 66 6c  61 67 73 0d 18 56 1f 20  |,icon_flags..V. |
00005280  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00005290  30 2c 5b 72 31 2c 23 32  30 5d 0d 18 60 2f 20 20  |0,[r1,#20]..`/  |
000052a0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 30  |      ldr     r0|
000052b0  2c 5b 72 35 2c 23 6f 66  66 73 65 74 5f 74 6f 5f  |,[r5,#offset_to_|
000052c0  6c 65 61 66 6e 61 6d 65  5d 0d 18 6a 1c 20 20 20  |leafname]..j.   |
000052d0  20 20 20 20 20 61 64 64  20 20 20 20 20 72 30 2c  |     add     r0,|
000052e0  72 30 2c 72 35 0d 18 74  1f 20 20 20 20 20 20 20  |r0,r5..t.       |
000052f0  20 73 74 72 20 20 20 20  20 72 30 2c 5b 72 31 2c  | str     r0,[r1,|
00005300  23 32 34 5d 0d 18 7e 26  20 20 20 20 20 20 20 20  |#24]..~&        |
00005310  61 64 64 20 20 20 20 20  72 30 2c 72 35 2c 23 73  |add     r0,r5,#s|
00005320  70 72 69 74 65 5f 6e 61  6d 65 0d 18 88 1f 20 20  |prite_name....  |
00005330  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 30  |      str     r0|
00005340  2c 5b 72 31 2c 23 32 38  5d 0d 18 92 1a 20 20 20  |,[r1,#28]....   |
00005350  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
00005360  23 31 32 0d 18 9c 1f 20  20 20 20 20 20 20 20 73  |#12....        s|
00005370  74 72 20 20 20 20 20 72  30 2c 5b 72 31 2c 23 33  |tr     r0,[r1,#3|
00005380  32 5d 0d 18 a6 26 20 20  20 20 20 20 20 20 73 77  |2]...&        sw|
00005390  69 20 20 20 20 20 22 58  57 69 6d 70 5f 43 72 65  |i     "XWimp_Cre|
000053a0  61 74 65 49 63 6f 6e 22  0d 18 b0 1f 20 20 20 20  |ateIcon"....    |
000053b0  20 20 20 20 62 76 73 20  20 20 20 20 66 61 74 61  |    bvs     fata|
000053c0  6c 5f 65 72 72 6f 72 0d  18 ba 28 20 20 20 20 20  |l_error...(     |
000053d0  20 20 20 73 74 72 62 20  20 20 20 72 30 2c 5b 72  |   strb    r0,[r|
000053e0  35 2c 23 69 63 6f 6e 5f  68 61 6e 64 6c 65 5d 0d  |5,#icon_handle].|
000053f0  18 c4 17 2e 64 72 61 67  5f 65 6e 64 5f 6c 6f 6f  |....drag_end_loo|
00005400  70 5f 73 6b 69 70 0d 18  ce 21 20 20 20 20 20 20  |p_skip...!      |
00005410  20 20 6c 64 72 20 20 20  20 20 72 35 2c 5b 72 35  |  ldr     r5,[r5|
00005420  2c 23 6e 65 78 74 5d 0d  18 d8 19 20 20 20 20 20  |,#next]....     |
00005430  20 20 20 74 65 71 20 20  20 20 20 72 35 2c 23 30  |   teq     r5,#0|
00005440  0d 18 e2 21 20 20 20 20  20 20 20 20 62 6e 65 20  |...!        bne |
00005450  20 20 20 20 64 72 61 67  5f 65 6e 64 5f 6c 6f 6f  |    drag_end_loo|
00005460  70 0d 18 ec 50 20 20 20  20 20 20 20 20 61 64 72  |p...P        adr|
00005470  20 20 20 20 20 72 30 2c  64 72 61 67 5f 78 5f 6d  |     r0,drag_x_m|
00005480  69 6e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |in              |
00005490  20 20 20 20 20 3b 20 67  65 74 20 69 6e 69 74 69  |     ; get initi|
000054a0  61 6c 20 63 6f 6f 72 64  69 6e 61 74 65 73 20 6f  |al coordinates o|
000054b0  66 0d 18 f6 41 20 20 20  20 20 20 20 20 6c 64 6d  |f...A        ldm|
000054c0  69 61 20 20 20 72 30 2c  7b 72 31 2d 72 34 7d 20  |ia   r0,{r1-r4} |
000054d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000054e0  20 20 20 20 20 3b 20 62  6f 78 20 64 72 61 67 67  |     ; box dragg|
000054f0  65 64 0d 19 00 2f 20 20  20 20 20 20 20 20 6c 64  |ed.../        ld|
00005500  72 20 20 20 20 20 72 30  2c 62 61 63 6b 67 72 6f  |r     r0,backgro|
00005510  75 6e 64 5f 77 69 6e 64  6f 77 5f 68 61 6e 64 6c  |und_window_handl|
00005520  65 0d 19 0a 27 20 20 20  20 20 20 20 20 73 77 69  |e...'        swi|
00005530  20 20 20 20 20 22 58 57  69 6d 70 5f 46 6f 72 63  |     "XWimp_Forc|
00005540  65 52 65 64 72 61 77 22  0d 19 14 1f 20 20 20 20  |eRedraw"....    |
00005550  20 20 20 20 62 76 73 20  20 20 20 20 66 61 74 61  |    bvs     fata|
00005560  6c 5f 65 72 72 6f 72 0d  19 1e 20 20 20 20 20 20  |l_error...      |
00005570  20 20 20 62 6c 20 20 20  20 20 20 75 6e 73 65 6c  |   bl      unsel|
00005580  65 63 74 5f 61 6c 6c 0d  19 28 18 20 20 20 20 20  |ect_all..(.     |
00005590  20 20 20 62 20 20 20 20  20 20 20 70 6f 6c 6c 0d  |   b       poll.|
000055a0  19 32 12 2e 67 65 74 5f  74 61 73 6b 5f 6e 61 6d  |.2..get_task_nam|
000055b0  65 0d 19 3c 26 20 20 20  20 20 20 20 20 61 64 72  |e..<&        adr|
000055c0  20 20 20 20 20 72 31 2c  70 6f 6c 6c 5f 73 70 61  |     r1,poll_spa|
000055d0  63 65 2b 26 38 30 30 0d  19 46 1f 20 20 20 20 20  |ce+&800..F.     |
000055e0  20 20 20 73 75 62 20 20  20 20 20 72 31 2c 72 31  |   sub     r1,r1|
000055f0  2c 23 26 38 30 30 0d 19  50 2a 20 20 20 20 20 20  |,#&800..P*      |
00005600  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
00005610  5f 47 65 74 50 6f 69 6e  74 65 72 49 6e 66 6f 22  |_GetPointerInfo"|
00005620  0d 19 5a 1f 20 20 20 20  20 20 20 20 62 76 73 20  |..Z.        bvs |
00005630  20 20 20 20 66 61 74 61  6c 5f 65 72 72 6f 72 0d  |    fatal_error.|
00005640  19 64 1f 20 20 20 20 20  20 20 20 6c 64 72 20 20  |.d.        ldr  |
00005650  20 20 20 72 32 2c 5b 72  31 2c 23 31 32 5d 0d 19  |   r2,[r1,#12]..|
00005660  6e 43 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |nC        str   |
00005670  20 20 72 32 2c 64 61 74  61 73 61 76 65 5f 77 69  |  r2,datasave_wi|
00005680  6e 64 6f 77 5f 68 61 6e  64 6c 65 20 3b 20 73 74  |ndow_handle ; st|
00005690  6f 72 65 20 77 69 6e 64  6f 77 20 68 61 6e 64 6c  |ore window handl|
000056a0  65 0d 19 78 1f 20 20 20  20 20 20 20 20 6c 64 72  |e..x.        ldr|
000056b0  20 20 20 20 20 72 33 2c  5b 72 31 2c 23 31 36 5d  |     r3,[r1,#16]|
000056c0  0d 19 82 3f 20 20 20 20  20 20 20 20 73 74 72 20  |...?        str |
000056d0  20 20 20 20 72 33 2c 64  61 74 61 73 61 76 65 5f  |    r3,datasave_|
000056e0  69 63 6f 6e 5f 68 61 6e  64 6c 65 20 3b 20 73 74  |icon_handle ; st|
000056f0  6f 72 65 20 69 63 6f 6e  20 68 61 6e 64 6c 65 0d  |ore icon handle.|
00005700  19 8c 1e 20 20 20 20 20  20 20 20 6c 64 72 20 20  |...        ldr  |
00005710  20 20 20 72 30 2c 5b 72  31 2c 23 30 5d 0d 19 96  |   r0,[r1,#0]...|
00005720  3b 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |;        str    |
00005730  20 72 30 2c 64 61 74 61  73 61 76 65 5f 6d 6f 75  | r0,datasave_mou|
00005740  73 65 5f 78 20 20 20 20  20 3b 20 73 74 6f 72 65  |se_x     ; store|
00005750  20 6d 6f 75 73 65 20 78  0d 19 a0 1e 20 20 20 20  | mouse x....    |
00005760  20 20 20 20 6c 64 72 20  20 20 20 20 72 30 2c 5b  |    ldr     r0,[|
00005770  72 31 2c 23 34 5d 0d 19  aa 3b 20 20 20 20 20 20  |r1,#4]...;      |
00005780  20 20 73 74 72 20 20 20  20 20 72 30 2c 64 61 74  |  str     r0,dat|
00005790  61 73 61 76 65 5f 6d 6f  75 73 65 5f 79 20 20 20  |asave_mouse_y   |
000057a0  20 20 3b 20 73 74 6f 72  65 20 6d 6f 75 73 65 20  |  ; store mouse |
000057b0  79 0d 19 b4 04 0d 19 be  25 20 20 20 20 20 20 20  |y.......%       |
000057c0  20 61 64 72 20 20 20 20  20 72 31 2c 77 6f 72 6b  | adr     r1,work|
000057d0  73 70 61 63 65 2b 26 34  30 30 0d 19 c8 45 20 20  |space+&400...E  |
000057e0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 30  |      mov     r0|
000057f0  2c 23 32 34 20 20 20 20  20 20 20 20 20 20 20 20  |,#24            |
00005800  20 20 20 20 20 20 3b 20  6c 65 6e 67 74 68 20 6f  |      ; length o|
00005810  66 20 6d 65 73 73 61 67  65 20 62 6c 6f 63 6b 0d  |f message block.|
00005820  19 d2 23 20 20 20 20 20  20 20 20 73 74 72 20 20  |..#        str  |
00005830  20 20 20 72 30 2c 5b 72  31 2c 23 2d 26 34 30 30  |   r0,[r1,#-&400|
00005840  5d 21 0d 19 dc 19 20 20  20 20 20 20 20 20 6d 6f  |]!....        mo|
00005850  76 20 20 20 20 20 72 30  2c 23 30 0d 19 e6 3e 20  |v     r0,#0...> |
00005860  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00005870  30 2c 5b 72 31 2c 23 31  32 5d 20 20 20 20 20 20  |0,[r1,#12]      |
00005880  20 20 20 20 20 20 20 3b  20 6f 72 69 67 69 6e 61  |       ; origina|
00005890  6c 20 6d 65 73 73 61 67  65 0d 19 f0 1e 20 20 20  |l message....   |
000058a0  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
000058b0  23 26 34 30 30 30 30 0d  19 fa 40 20 20 20 20 20  |#&40000...@     |
000058c0  20 20 20 61 64 64 20 20  20 20 20 72 30 2c 72 30  |   add     r0,r0|
000058d0  2c 23 26 63 36 20 20 20  20 20 20 20 20 20 20 20  |,#&c6           |
000058e0  20 20 20 3b 20 6d 65 73  73 61 67 65 5f 74 61 73  |   ; message_tas|
000058f0  6b 6e 61 6d 65 72 71 0d  1a 04 1f 20 20 20 20 20  |knamerq....     |
00005900  20 20 20 73 74 72 20 20  20 20 20 72 30 2c 5b 72  |   str     r0,[r|
00005910  31 2c 23 31 36 5d 0d 1a  0e 4f 20 20 20 20 20 20  |1,#16]...O      |
00005920  20 20 6d 6f 76 20 20 20  20 20 72 30 2c 23 31 39  |  mov     r0,#19|
00005930  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005940  20 20 3b 20 75 73 65 20  74 6f 20 66 69 6e 64 20  |  ; use to find |
00005950  74 61 73 6b 20 68 61 6e  64 6c 65 20 6f 66 20 77  |task handle of w|
00005960  69 6e 64 6f 77 0d 1a 18  3e 20 20 20 20 20 20 20  |indow...>       |
00005970  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00005990  20 3b 20 72 32 2c 33 20  61 6c 72 65 61 64 79 20  | ; r2,3 already |
000059a0  73 65 74 0d 1a 22 53 20  20 20 20 20 20 20 20 73  |set.."S        s|
000059b0  77 69 20 20 20 20 20 22  58 57 69 6d 70 5f 53 65  |wi     "XWimp_Se|
000059c0  6e 64 4d 65 73 73 61 67  65 22 20 20 20 20 20 3b  |ndMessage"     ;|
000059d0  20 6e 6f 20 6d 65 73 73  61 67 65 20 77 69 6c 6c  | no message will|
000059e0  20 62 65 20 73 65 6e 74  20 62 75 74 20 72 32 20  | be sent but r2 |
000059f0  3d 20 74 61 73 6b 0d 1a  2c 3e 20 20 20 20 20 20  |= task..,>      |
00005a00  20 20 62 76 73 20 20 20  20 20 66 61 74 61 6c 5f  |  bvs     fatal_|
00005a10  65 72 72 6f 72 20 20 20  20 20 20 20 20 20 20 20  |error           |
00005a20  20 20 3b 20 68 61 6e 64  6c 65 20 6f 66 20 77 69  |  ; handle of wi|
00005a30  6e 64 6f 77 0d 1a 36 1f  20 20 20 20 20 20 20 20  |ndow..6.        |
00005a40  73 74 72 20 20 20 20 20  72 32 2c 5b 72 31 2c 23  |str     r2,[r1,#|
00005a50  32 30 5d 0d 1a 40 3d 20  20 20 20 20 20 20 20 6d  |20]..@=        m|
00005a60  6f 76 20 20 20 20 20 72  30 2c 23 31 37 20 20 20  |ov     r0,#17   |
00005a70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00005a80  20 6e 6f 20 72 65 70 6c  79 20 77 61 6e 74 65 64  | no reply wanted|
00005a90  0d 1a 4a 3f 20 20 20 20  20 20 20 20 6d 6f 76 20  |..J?        mov |
00005aa0  20 20 20 20 72 32 2c 23  30 20 20 20 20 20 20 20  |    r2,#0       |
00005ab0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 62 72  |            ; br|
00005ac0  6f 61 64 63 61 73 74 20  6d 65 73 73 61 67 65 0d  |oadcast message.|
00005ad0  1a 54 27 20 20 20 20 20  20 20 20 73 77 69 20 20  |.T'        swi  |
00005ae0  20 20 20 22 58 57 69 6d  70 5f 53 65 6e 64 4d 65  |   "XWimp_SendMe|
00005af0  73 73 61 67 65 22 0d 1a  5e 1f 20 20 20 20 20 20  |ssage"..^.      |
00005b00  20 20 62 76 73 20 20 20  20 20 66 61 74 61 6c 5f  |  bvs     fatal_|
00005b10  65 72 72 6f 72 0d 1a 68  1e 20 20 20 20 20 20 20  |error..h.       |
00005b20  20 6c 64 72 20 20 20 20  20 72 30 2c 5b 72 31 2c  | ldr     r0,[r1,|
00005b30  23 38 5d 0d 1a 72 24 20  20 20 20 20 20 20 20 73  |#8]..r$        s|
00005b40  74 72 20 20 20 20 20 72  30 2c 6d 65 73 73 61 67  |tr     r0,messag|
00005b50  65 5f 6d 79 72 65 66 0d  1a 7c 18 20 20 20 20 20  |e_myref..|.     |
00005b60  20 20 20 62 20 20 20 20  20 20 20 70 6f 6c 6c 0d  |   b       poll.|
00005b70  1a 86 04 0d 1a 90 0f 2e  74 61 73 6b 6e 61 6d 65  |........taskname|
00005b80  69 73 0d 1a 9a 27 20 20  20 20 20 20 20 20 6c 64  |is...'        ld|
00005b90  72 20 20 20 20 20 72 30  2c 73 74 61 72 74 5f 66  |r     r0,start_f|
00005ba0  69 6c 65 72 5f 6e 61 6d  65 0d 1a a4 1f 20 20 20  |iler_name....   |
00005bb0  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 32 2c  |     ldr     r2,|
00005bc0  5b 72 31 2c 23 32 38 5d  0d 1a ae 3d 20 20 20 20  |[r1,#28]...=    |
00005bd0  20 20 20 20 74 65 71 20  20 20 20 20 72 30 2c 72  |    teq     r0,r|
00005be0  32 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2               |
00005bf0  20 20 20 20 3b 20 73 65  65 20 69 66 20 74 68 65  |    ; see if the|
00005c00  20 73 61 6d 65 0d 1a b8  29 20 20 20 20 20 20 20  | same...)       |
00005c10  20 62 6e 65 20 20 20 20  20 73 65 6e 64 5f 64 61  | bne     send_da|
00005c20  74 61 6c 6f 61 64 5f 6d  65 73 73 61 67 65 0d 1a  |taload_message..|
00005c30  c2 1f 20 20 20 20 20 20  20 20 6c 64 72 62 20 20  |..        ldrb  |
00005c40  20 20 72 30 2c 5b 72 31  2c 23 33 32 5d 0d 1a cc  |  r0,[r1,#32]...|
00005c50  1c 20 20 20 20 20 20 20  20 74 65 71 20 20 20 20  |.        teq    |
00005c60  20 72 30 2c 23 97 22 72  22 0d 1a d6 29 20 20 20  | r0,#."r"...)   |
00005c70  20 20 20 20 20 62 6e 65  20 20 20 20 20 73 65 6e  |     bne     sen|
00005c80  64 5f 64 61 74 61 6c 6f  61 64 5f 6d 65 73 73 61  |d_dataload_messa|
00005c90  67 65 0d 1a e0 1f 20 20  20 20 20 20 20 20 6c 64  |ge....        ld|
00005ca0  72 62 20 20 20 20 72 30  2c 5b 72 31 2c 23 33 33  |rb    r0,[r1,#33|
00005cb0  5d 0d 1a ea 19 20 20 20  20 20 20 20 20 74 65 71  |]....        teq|
00005cc0  20 20 20 20 20 72 30 2c  23 30 0d 1a f4 29 20 20  |     r0,#0...)  |
00005cd0  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 73 65  |      bne     se|
00005ce0  6e 64 5f 64 61 74 61 6c  6f 61 64 5f 6d 65 73 73  |nd_dataload_mess|
00005cf0  61 67 65 0d 1a fe 19 20  20 20 20 20 20 20 20 6d  |age....        m|
00005d00  6f 76 20 20 20 20 20 72  30 2c 23 31 0d 1b 08 45  |ov     r0,#1...E|
00005d10  20 20 20 20 20 20 20 20  73 74 72 62 20 20 20 20  |        strb    |
00005d20  72 30 2c 73 61 76 65 5f  74 6f 5f 66 69 6c 65 72  |r0,save_to_filer|
00005d30  20 20 20 20 20 20 20 20  3b 20 73 65 74 20 66 6c  |        ; set fl|
00005d40  61 67 20 28 6d 65 73 73  61 67 65 20 74 79 70 65  |ag (message type|
00005d50  29 0d 1b 12 2d 20 20 20  20 20 20 20 20 62 20 20  |)...-        b  |
00005d60  20 20 20 20 20 73 65 6e  64 5f 64 61 74 61 73 61  |     send_datasa|
00005d70  76 65 6c 6f 61 64 5f 6d  65 73 73 61 67 65 0d 1b  |veload_message..|
00005d80  1c 15 2e 73 74 61 72 74  5f 66 69 6c 65 72 5f 6e  |...start_filer_n|
00005d90  61 6d 65 0d 1b 26 1a 20  20 20 20 20 20 20 20 65  |ame..&.        e|
00005da0  71 75 73 20 20 20 20 22  46 69 6c 65 22 0d 1b 30  |qus    "File"..0|
00005db0  1a 2e 73 65 6e 64 5f 64  61 74 61 6c 6f 61 64 5f  |..send_dataload_|
00005dc0  6d 65 73 73 61 67 65 0d  1b 3a 19 20 20 20 20 20  |message..:.     |
00005dd0  20 20 20 6d 6f 76 20 20  20 20 20 72 30 2c 23 33  |   mov     r0,#3|
00005de0  0d 1b 44 45 20 20 20 20  20 20 20 20 73 74 72 62  |..DE        strb|
00005df0  20 20 20 20 72 30 2c 73  61 76 65 5f 74 6f 5f 66  |    r0,save_to_f|
00005e00  69 6c 65 72 20 20 20 20  20 20 20 20 3b 20 73 65  |iler        ; se|
00005e10  74 20 66 6c 61 67 20 28  6d 65 73 73 61 67 65 20  |t flag (message |
00005e20  74 79 70 65 29 0d 1b 4e  1e 2e 73 65 6e 64 5f 64  |type)..N..send_d|
00005e30  61 74 61 73 61 76 65 6c  6f 61 64 5f 6d 65 73 73  |atasaveload_mess|
00005e40  61 67 65 0d 1b 58 2e 20  20 20 20 20 20 20 20 61  |age..X.        a|
00005e50  64 72 20 20 20 20 20 72  34 2c 73 74 61 72 74 5f  |dr     r4,start_|
00005e60  6c 69 6e 6b 65 64 5f 6c  69 73 74 2d 26 31 30 30  |linked_list-&100|
00005e70  30 0d 1b 62 20 20 20 20  20 20 20 20 20 61 64 64  |0..b         add|
00005e80  20 20 20 20 20 72 34 2c  72 34 2c 23 26 31 30 30  |     r4,r4,#&100|
00005e90  30 0d 1b 6c 1b 20 20 20  20 20 20 20 20 6c 64 72  |0..l.        ldr|
00005ea0  20 20 20 20 20 72 34 2c  5b 72 34 5d 0d 1b 76 23  |     r4,[r4]..v#|
00005eb0  2e 73 65 6e 64 5f 64 61  74 61 73 61 76 65 6c 6f  |.send_datasavelo|
00005ec0  61 64 5f 6d 65 73 73 61  67 65 5f 6c 6f 6f 70 0d  |ad_message_loop.|
00005ed0  1b 80 26 20 20 20 20 20  20 20 20 61 64 72 20 20  |..&        adr  |
00005ee0  20 20 20 72 31 2c 70 6f  6c 6c 5f 73 70 61 63 65  |   r1,poll_space|
00005ef0  2b 26 38 30 30 0d 1b 8a  1f 20 20 20 20 20 20 20  |+&800....       |
00005f00  20 73 75 62 20 20 20 20  20 72 31 2c 72 31 2c 23  | sub     r1,r1,#|
00005f10  26 38 30 30 0d 1b 94 25  20 20 20 20 20 20 20 20  |&800...%        |
00005f20  6c 64 72 62 20 20 20 20  72 30 2c 5b 72 34 2c 23  |ldrb    r0,[r4,#|
00005f30  73 65 6c 65 63 74 65 64  5d 0d 1b 9e 3d 20 20 20  |selected]...=   |
00005f40  20 20 20 20 20 74 65 71  20 20 20 20 20 72 30 2c  |     teq     r0,|
00005f50  23 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#0              |
00005f60  20 20 20 20 20 3b 20 73  65 65 20 69 66 20 73 65  |     ; see if se|
00005f70  6c 65 63 74 65 64 0d 1b  a8 3a 20 20 20 20 20 20  |lected...:      |
00005f80  20 20 62 65 71 20 20 20  20 20 73 65 6e 64 5f 64  |  beq     send_d|
00005f90  61 74 61 73 61 76 65 6c  6f 61 64 5f 6d 65 73 73  |atasaveload_mess|
00005fa0  61 67 65 5f 6e 6f 74 5f  73 65 6c 65 63 74 65 64  |age_not_selected|
00005fb0  0d 1b b2 21 20 20 20 20  20 20 20 20 62 6c 20 20  |...!        bl  |
00005fc0  20 20 20 20 75 6e 73 65  6c 65 63 74 5f 69 63 6f  |    unselect_ico|
00005fd0  6e 0d 1b bc 26 20 20 20  20 20 20 20 20 6c 64 72  |n...&        ldr|
00005fe0  62 20 20 20 20 72 30 2c  6e 75 6d 62 65 72 5f 73  |b    r0,number_s|
00005ff0  65 6c 65 63 74 65 64 0d  1b c6 1c 20 20 20 20 20  |elected....     |
00006000  20 20 20 73 75 62 20 20  20 20 20 72 30 2c 72 30  |   sub     r0,r0|
00006010  2c 23 31 0d 1b d0 26 20  20 20 20 20 20 20 20 73  |,#1...&        s|
00006020  74 72 62 20 20 20 20 72  30 2c 6e 75 6d 62 65 72  |trb    r0,number|
00006030  5f 73 65 6c 65 63 74 65  64 0d 1b da 25 20 20 20  |_selected...%   |
00006040  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 30 2c  |     ldr     r0,|
00006050  5b 72 34 2c 23 66 69 6c  65 74 79 70 65 5d 0d 1b  |[r4,#filetype]..|
00006060  e4 1f 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |..        str   |
00006070  20 20 72 30 2c 5b 72 31  2c 23 34 30 5d 0d 1b ee  |  r0,[r1,#40]...|
00006080  4a 20 20 20 20 20 20 20  20 6d 6f 76 20 20 20 20  |J        mov    |
00006090  20 72 30 2c 23 31 37 20  20 20 20 20 20 20 20 20  | r0,#17         |
000060a0  20 20 20 20 20 20 20 20  20 3b 20 72 65 61 64 20  |         ; read |
000060b0  63 61 74 61 6c 6f 67 75  65 20 69 6e 66 6f 2c 20  |catalogue info, |
000060c0  6e 6f 20 70 61 74 68 0d  1b f8 23 20 20 20 20 20  |no path...#     |
000060d0  20 20 20 61 64 64 20 20  20 20 20 72 31 2c 72 34  |   add     r1,r4|
000060e0  2c 23 66 69 6c 65 6e 61  6d 65 0d 1c 02 39 20 20  |,#filename...9  |
000060f0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 36  |      mov     r6|
00006100  2c 72 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r4             |
00006110  20 20 20 20 20 20 3b 20  70 72 65 73 65 72 76 65  |      ; preserve|
00006120  20 72 34 0d 1c 0c 1e 20  20 20 20 20 20 20 20 73  | r4....        s|
00006130  77 69 20 20 20 20 20 22  58 4f 53 5f 46 69 6c 65  |wi     "XOS_File|
00006140  22 0d 1c 16 38 20 20 20  20 20 20 20 20 6d 6f 76  |"...8        mov|
00006150  76 73 20 20 20 72 34 2c  72 36 20 20 20 20 20 20  |vs   r4,r6      |
00006160  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00006170  65 73 74 6f 72 65 20 72  34 0d 1c 20 3e 20 20 20  |estore r4.. >   |
00006180  20 20 20 20 20 61 64 72  76 73 20 20 20 72 31 34  |     adrvs   r14|
00006190  2c 73 65 6e 64 5f 64 61  74 61 73 61 76 65 6c 6f  |,send_datasavelo|
000061a0  61 64 5f 6d 65 73 73 61  67 65 5f 6e 6f 74 5f 73  |ad_message_not_s|
000061b0  65 6c 65 63 74 65 64 0d  1c 2a 23 20 20 20 20 20  |elected..*#     |
000061c0  20 20 20 62 76 73 20 20  20 20 20 72 65 70 6f 72  |   bvs     repor|
000061d0  74 5f 65 72 72 6f 72 5f  6f 6b 0d 1c 34 19 20 20  |t_error_ok..4.  |
000061e0  20 20 20 20 20 20 74 65  71 20 20 20 20 20 72 30  |      teq     r0|
000061f0  2c 23 30 0d 1c 3e 32 20  20 20 20 20 20 20 20 62  |,#0..>2        b|
00006200  6e 65 20 20 20 20 20 73  65 6e 64 5f 64 61 74 61  |ne     send_data|
00006210  73 61 76 65 6c 6f 61 64  5f 6d 65 73 73 61 67 65  |saveload_message|
00006220  5f 73 6b 69 70 0d 1c 48  38 20 20 20 20 20 20 20  |_skip..H8       |
00006230  20 6d 6f 76 20 20 20 20  20 72 34 2c 72 36 20 20  | mov     r4,r6  |
00006240  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006250  20 3b 20 72 65 73 74 6f  72 65 20 72 34 0d 1c 52  | ; restore r4..R|
00006260  3c 20 20 20 20 20 20 20  20 6d 6f 76 20 20 20 20  |<        mov    |
00006270  20 72 30 2c 23 31 39 20  20 20 20 20 20 20 20 20  | r0,#19         |
00006280  20 20 20 20 20 20 20 20  20 3b 20 67 65 6e 65 72  |         ; gener|
00006290  61 74 65 20 65 72 72 6f  72 0d 1c 5c 1e 20 20 20  |ate error..\.   |
000062a0  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 4f  |     swi     "XO|
000062b0  53 5f 46 69 6c 65 22 0d  1c 66 23 20 20 20 20 20  |S_File"..f#     |
000062c0  20 20 20 62 6c 20 20 20  20 20 20 72 65 70 6f 72  |   bl      repor|
000062d0  74 5f 65 72 72 6f 72 5f  6f 6b 0d 1c 70 3a 20 20  |t_error_ok..p:  |
000062e0  20 20 20 20 20 20 62 20  20 20 20 20 20 20 73 65  |      b       se|
000062f0  6e 64 5f 64 61 74 61 73  61 76 65 6c 6f 61 64 5f  |nd_datasaveload_|
00006300  6d 65 73 73 61 67 65 5f  6e 6f 74 5f 73 65 6c 65  |message_not_sele|
00006310  63 74 65 64 0d 1c 7a 23  2e 73 65 6e 64 5f 64 61  |cted..z#.send_da|
00006320  74 61 73 61 76 65 6c 6f  61 64 5f 6d 65 73 73 61  |tasaveload_messa|
00006330  67 65 5f 73 6b 69 70 0d  1c 84 26 20 20 20 20 20  |ge_skip...&     |
00006340  20 20 20 61 64 72 20 20  20 20 20 72 31 2c 70 6f  |   adr     r1,po|
00006350  6c 6c 5f 73 70 61 63 65  2b 26 38 30 30 0d 1c 8e  |ll_space+&800...|
00006360  36 20 20 20 20 20 20 20  20 73 75 62 20 20 20 20  |6        sub    |
00006370  20 72 31 2c 72 31 2c 23  26 38 30 30 20 20 20 20  | r1,r1,#&800    |
00006380  20 20 20 20 20 20 20 20  20 3b 20 72 65 73 65 74  |         ; reset|
00006390  20 72 31 0d 1c 98 42 20  20 20 20 20 20 20 20 73  | r1...B        s|
000063a0  74 72 20 20 20 20 20 72  34 2c 5b 72 31 2c 23 33  |tr     r4,[r1,#3|
000063b0  36 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |6]             ;|
000063c0  20 73 74 6f 72 65 20 6c  65 6e 67 74 68 20 6f 66  | store length of|
000063d0  20 66 69 6c 65 0d 1c a2  38 20 20 20 20 20 20 20  | file...8       |
000063e0  20 6d 6f 76 20 20 20 20  20 72 34 2c 72 36 20 20  | mov     r4,r6  |
000063f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006400  20 3b 20 72 65 73 74 6f  72 65 20 72 34 0d 1c ac  | ; restore r4...|
00006410  24 20 20 20 20 20 20 20  20 6c 64 72 62 20 20 20  |$        ldrb   |
00006420  20 72 35 2c 73 61 76 65  5f 74 6f 5f 66 69 6c 65  | r5,save_to_file|
00006430  72 0d 1c b6 44 20 20 20  20 20 20 20 20 74 65 71  |r...D        teq|
00006440  20 20 20 20 20 72 35 2c  23 31 20 20 20 20 20 20  |     r5,#1      |
00006450  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 73  |             ; s|
00006460  65 65 20 69 66 20 73 61  76 69 6e 67 20 74 6f 20  |ee if saving to |
00006470  66 69 6c 65 72 0d 1c c0  2f 20 20 20 20 20 20 20  |filer.../       |
00006480  20 6c 64 72 65 71 20 20  20 72 32 2c 5b 72 34 2c  | ldreq   r2,[r4,|
00006490  23 6f 66 66 73 65 74 5f  74 6f 5f 6c 65 61 66 6e  |#offset_to_leafn|
000064a0  61 6d 65 5d 0d 1c ca 40  20 20 20 20 20 20 20 20  |ame]...@        |
000064b0  61 64 64 65 71 20 20 20  72 32 2c 72 32 2c 72 34  |addeq   r2,r2,r4|
000064c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000064d0  3b 20 69 66 20 73 6f 20  75 73 65 20 6c 65 61 66  |; if so use leaf|
000064e0  6e 61 6d 65 0d 1c d4 42  20 20 20 20 20 20 20 20  |name...B        |
000064f0  61 64 64 6e 65 20 20 20  72 32 2c 72 34 2c 23 66  |addne   r2,r4,#f|
00006500  69 6c 65 6e 61 6d 65 20  20 20 20 20 20 20 20 20  |ilename         |
00006510  3b 20 6e 6f 74 20 73 6f  20 75 73 65 20 66 75 6c  |; not so use ful|
00006520  6c 20 6e 61 6d 65 0d 1c  de 1d 20 20 20 20 20 20  |l name....      |
00006530  20 20 61 64 64 20 20 20  20 20 72 33 2c 72 31 2c  |  add     r3,r1,|
00006540  23 34 34 0d 1c e8 24 2e  73 65 6e 64 5f 64 61 74  |#44...$.send_dat|
00006550  61 73 61 76 65 6c 6f 61  64 5f 6d 65 73 73 61 67  |asaveload_messag|
00006560  65 5f 6c 6f 6f 70 32 0d  1c f2 1e 20 20 20 20 20  |e_loop2....     |
00006570  20 20 20 6c 64 72 62 20  20 20 20 72 35 2c 5b 72  |   ldrb    r5,[r|
00006580  32 5d 2c 23 31 0d 1c fc  1e 20 20 20 20 20 20 20  |2],#1....       |
00006590  20 73 74 72 62 20 20 20  20 72 35 2c 5b 72 33 5d  | strb    r5,[r3]|
000065a0  2c 23 31 0d 1d 06 19 20  20 20 20 20 20 20 20 74  |,#1....        t|
000065b0  65 71 20 20 20 20 20 72  35 2c 23 30 0d 1d 10 33  |eq     r5,#0...3|
000065c0  20 20 20 20 20 20 20 20  62 6e 65 20 20 20 20 20  |        bne     |
000065d0  73 65 6e 64 5f 64 61 74  61 73 61 76 65 6c 6f 61  |send_datasaveloa|
000065e0  64 5f 6d 65 73 73 61 67  65 5f 6c 6f 6f 70 32 0d  |d_message_loop2.|
000065f0  1d 1a 41 20 20 20 20 20  20 20 20 73 75 62 20 20  |..A        sub  |
00006600  20 20 20 72 33 2c 72 33  2c 72 31 20 20 20 20 20  |   r3,r3,r1     |
00006610  20 20 20 20 20 20 20 20  20 20 20 3b 20 72 33 20  |           ; r3 |
00006620  3d 20 6d 65 73 73 61 67  65 20 6c 65 6e 67 74 68  |= message length|
00006630  0d 1d 24 1c 20 20 20 20  20 20 20 20 61 64 64 20  |..$.        add |
00006640  20 20 20 20 72 33 2c 72  33 2c 23 33 0d 1d 2e 47  |    r3,r3,#3...G|
00006650  20 20 20 20 20 20 20 20  62 69 63 20 20 20 20 20  |        bic     |
00006660  72 33 2c 72 33 2c 23 33  20 20 20 20 20 20 20 20  |r3,r3,#3        |
00006670  20 20 20 20 20 20 20 20  3b 20 72 6f 75 6e 64 20  |        ; round |
00006680  75 70 20 74 6f 20 77 6f  72 64 20 62 6f 75 6e 64  |up to word bound|
00006690  61 72 79 0d 1d 38 1b 20  20 20 20 20 20 20 20 73  |ary..8.        s|
000066a0  74 72 20 20 20 20 20 72  33 2c 5b 72 31 5d 0d 1d  |tr     r3,[r1]..|
000066b0  42 4c 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |BL        mov   |
000066c0  20 20 72 30 2c 23 30 20  20 20 20 20 20 20 20 20  |  r0,#0         |
000066d0  20 20 20 20 20 20 20 20  20 20 3b 20 77 65 20 61  |          ; we a|
000066e0  72 65 20 6f 72 69 67 69  6e 61 74 69 6e 67 20 74  |re originating t|
000066f0  68 65 20 6d 65 73 73 61  67 65 0d 1d 4c 1f 20 20  |he message..L.  |
00006700  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 30  |      str     r0|
00006710  2c 5b 72 31 2c 23 31 32  5d 0d 1d 56 24 20 20 20  |,[r1,#12]..V$   |
00006720  20 20 20 20 20 6c 64 72  62 20 20 20 20 72 30 2c  |     ldrb    r0,|
00006730  73 61 76 65 5f 74 6f 5f  66 69 6c 65 72 0d 1d 60  |save_to_filer..`|
00006740  3e 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |>        str    |
00006750  20 72 30 2c 5b 72 31 2c  23 31 36 5d 20 20 20 20  | r0,[r1,#16]    |
00006760  20 20 20 20 20 20 20 20  20 3b 20 73 65 74 20 6d  |         ; set m|
00006770  65 73 73 61 67 65 20 74  79 70 65 0d 1d 6a 27 20  |essage type..j' |
00006780  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
00006790  30 2c 64 61 74 61 73 61  76 65 5f 6d 6f 75 73 65  |0,datasave_mouse|
000067a0  5f 78 0d 1d 74 1f 20 20  20 20 20 20 20 20 73 74  |_x..t.        st|
000067b0  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 32 38  |r     r0,[r1,#28|
000067c0  5d 0d 1d 7e 27 20 20 20  20 20 20 20 20 6c 64 72  |]..~'        ldr|
000067d0  20 20 20 20 20 72 30 2c  64 61 74 61 73 61 76 65  |     r0,datasave|
000067e0  5f 6d 6f 75 73 65 5f 79  0d 1d 88 1f 20 20 20 20  |_mouse_y....    |
000067f0  20 20 20 20 73 74 72 20  20 20 20 20 72 30 2c 5b  |    str     r0,[|
00006800  72 31 2c 23 33 32 5d 0d  1d 92 3a 20 20 20 20 20  |r1,#32]...:     |
00006810  20 20 20 6d 6f 76 20 20  20 20 20 72 30 2c 23 31  |   mov     r0,#1|
00006820  38 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |8               |
00006830  20 20 20 3b 20 72 65 70  6c 79 20 6e 65 65 64 65  |   ; reply neede|
00006840  64 0d 1d 9c 4e 20 20 20  20 20 20 20 20 6c 64 72  |d...N        ldr|
00006850  20 20 20 20 20 72 32 2c  64 61 74 61 73 61 76 65  |     r2,datasave|
00006860  5f 77 69 6e 64 6f 77 5f  68 61 6e 64 6c 65 20 3b  |_window_handle ;|
00006870  20 72 32 20 3d 20 64 65  73 74 69 6e 61 74 69 6f  | r2 = destinatio|
00006880  6e 20 77 69 6e 64 6f 77  20 68 61 6e 64 6c 65 0d  |n window handle.|
00006890  1d a6 1f 20 20 20 20 20  20 20 20 73 74 72 20 20  |...        str  |
000068a0  20 20 20 72 32 2c 5b 72  31 2c 23 32 30 5d 0d 1d  |   r2,[r1,#20]..|
000068b0  b0 4c 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.L        ldr   |
000068c0  20 20 72 33 2c 64 61 74  61 73 61 76 65 5f 69 63  |  r3,datasave_ic|
000068d0  6f 6e 5f 68 61 6e 64 6c  65 20 3b 20 72 33 20 3d  |on_handle ; r3 =|
000068e0  20 64 65 73 74 69 6e 61  74 69 6f 6e 20 77 69 6e  | destination win|
000068f0  64 6f 77 20 68 61 6e 64  6c 65 0d 1d ba 3f 20 20  |dow handle...?  |
00006900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00006920  20 20 20 20 20 20 3b 20  69 6e 63 61 73 65 20 6f  |      ; incase o|
00006930  6e 20 69 63 6f 6e 62 61  72 0d 1d c4 1f 20 20 20  |n iconbar....   |
00006940  20 20 20 20 20 73 74 72  20 20 20 20 20 72 33 2c  |     str     r3,|
00006950  5b 72 31 2c 23 32 34 5d  0d 1d ce 27 20 20 20 20  |[r1,#24]...'    |
00006960  20 20 20 20 73 77 69 20  20 20 20 20 22 58 57 69  |    swi     "XWi|
00006970  6d 70 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 0d  |mp_SendMessage".|
00006980  1d d8 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |...        bvs  |
00006990  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 1d  |   fatal_error..|
000069a0  e2 1e 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |..        ldr   |
000069b0  20 20 72 30 2c 5b 72 31  2c 23 38 5d 0d 1d ec 24  |  r0,[r1,#8]...$|
000069c0  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
000069d0  72 30 2c 6d 65 73 73 61  67 65 5f 6d 79 72 65 66  |r0,message_myref|
000069e0  0d 1d f6 2b 20 20 20 20  20 20 20 20 73 74 72 20  |...+        str |
000069f0  20 20 20 20 72 34 2c 64  61 74 61 73 61 76 65 5f  |    r4,datasave_|
00006a00  77 68 65 72 65 5f 75 70  5f 74 6f 0d 1e 00 4b 20  |where_up_to...K |
00006a10  20 20 20 20 20 20 20 62  20 20 20 20 20 20 20 70  |       b       p|
00006a20  6f 6c 6c 20 20 20 20 20  20 20 20 20 20 20 20 20  |oll             |
00006a30  20 20 20 20 20 20 20 3b  20 70 6f 6c 6c 20 74 6f  |       ; poll to|
00006a40  20 72 65 63 65 69 76 65  20 6d 65 73 73 61 67 65  | receive message|
00006a50  20 72 65 70 6c 79 0d 1e  0a 27 2e 73 65 6e 64 5f  | reply...'.send_|
00006a60  64 61 74 61 73 61 76 65  6c 6f 61 64 5f 6d 65 73  |datasaveload_mes|
00006a70  73 61 67 65 5f 63 6f 6e  74 69 6e 75 65 0d 1e 14  |sage_continue...|
00006a80  2b 20 20 20 20 20 20 20  20 6c 64 72 20 20 20 20  |+        ldr    |
00006a90  20 72 34 2c 64 61 74 61  73 61 76 65 5f 77 68 65  | r4,datasave_whe|
00006aa0  72 65 5f 75 70 5f 74 6f  0d 1e 1e 2b 2e 73 65 6e  |re_up_to...+.sen|
00006ab0  64 5f 64 61 74 61 73 61  76 65 6c 6f 61 64 5f 6d  |d_datasaveload_m|
00006ac0  65 73 73 61 67 65 5f 6e  6f 74 5f 73 65 6c 65 63  |essage_not_selec|
00006ad0  74 65 64 0d 1e 28 26 20  20 20 20 20 20 20 20 61  |ted..(&        a|
00006ae0  64 72 20 20 20 20 20 72  31 2c 70 6f 6c 6c 5f 73  |dr     r1,poll_s|
00006af0  70 61 63 65 2b 26 38 30  30 0d 1e 32 1f 20 20 20  |pace+&800..2.   |
00006b00  20 20 20 20 20 73 75 62  20 20 20 20 20 72 31 2c  |     sub     r1,|
00006b10  72 31 2c 23 26 38 30 30  0d 1e 3c 1b 20 20 20 20  |r1,#&800..<.    |
00006b20  20 20 20 20 6c 64 72 20  20 20 20 20 72 34 2c 5b  |    ldr     r4,[|
00006b30  72 34 5d 0d 1e 46 28 2e  73 65 6e 64 5f 64 61 74  |r4]..F(.send_dat|
00006b40  61 73 61 76 65 6c 6f 61  64 5f 6d 65 73 73 61 67  |asaveload_messag|
00006b50  65 5f 63 6f 6e 74 69 6e  75 65 32 0d 1e 50 19 20  |e_continue2..P. |
00006b60  20 20 20 20 20 20 20 74  65 71 20 20 20 20 20 72  |       teq     r|
00006b70  34 2c 23 30 0d 1e 5a 32  20 20 20 20 20 20 20 20  |4,#0..Z2        |
00006b80  62 6e 65 20 20 20 20 20  73 65 6e 64 5f 64 61 74  |bne     send_dat|
00006b90  61 73 61 76 65 6c 6f 61  64 5f 6d 65 73 73 61 67  |asaveload_messag|
00006ba0  65 5f 6c 6f 6f 70 0d 1e  64 18 20 20 20 20 20 20  |e_loop..d.      |
00006bb0  20 20 62 20 20 20 20 20  20 20 70 6f 6c 6c 0d 1e  |  b       poll..|
00006bc0  6e 04 0d 1e 78 19 2e 64  61 74 61 73 61 76 65 5f  |n...x..datasave_|
00006bd0  77 68 65 72 65 5f 75 70  5f 74 6f 0d 1e 82 15 20  |where_up_to.... |
00006be0  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 30  |       equd    0|
00006bf0  0d 1e 8c 1b 2e 64 61 74  61 73 61 76 65 5f 77 69  |.....datasave_wi|
00006c00  6e 64 6f 77 5f 68 61 6e  64 6c 65 0d 1e 96 15 20  |ndow_handle.... |
00006c10  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 30  |       equd    0|
00006c20  0d 1e a0 19 2e 64 61 74  61 73 61 76 65 5f 69 63  |.....datasave_ic|
00006c30  6f 6e 5f 68 61 6e 64 6c  65 0d 1e aa 15 20 20 20  |on_handle....   |
00006c40  20 20 20 20 20 65 71 75  64 20 20 20 20 30 0d 1e  |     equd    0..|
00006c50  b4 15 2e 64 61 74 61 73  61 76 65 5f 6d 6f 75 73  |...datasave_mous|
00006c60  65 5f 78 0d 1e be 15 20  20 20 20 20 20 20 20 65  |e_x....        e|
00006c70  71 75 64 20 20 20 20 30  0d 1e c8 15 2e 64 61 74  |qud    0.....dat|
00006c80  61 73 61 76 65 5f 6d 6f  75 73 65 5f 79 0d 1e d2  |asave_mouse_y...|
00006c90  15 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
00006ca0  20 30 0d 1e dc 04 0d 1e  e6 53 3b 20 2d 2d 2d 2d  | 0.......S; ----|
00006cb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00006cf0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 1e f0 26 3b 20 54  |---------...&; T|
00006d00  68 65 20 75 73 65 72 20  68 61 73 20 63 6c 69 63  |he user has clic|
00006d10  6b 65 64 20 6f 6e 20 6f  75 72 20 6d 65 6e 79 0d  |ked on our meny.|
00006d20  1e fa 04 0d 1f 04 10 2e  6d 65 6e 75 5f 73 65 6c  |........menu_sel|
00006d30  65 63 74 0d 1f 0e 23 20  20 20 20 20 20 20 20 61  |ect...#        a|
00006d40  64 72 20 20 20 20 20 72  31 2c 70 6f 69 6e 74 65  |dr     r1,pointe|
00006d50  72 5f 69 6e 66 6f 0d 1f  18 2a 20 20 20 20 20 20  |r_info...*      |
00006d60  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
00006d70  5f 47 65 74 50 6f 69 6e  74 65 72 49 6e 66 6f 22  |_GetPointerInfo"|
00006d80  0d 1f 22 1f 20 20 20 20  20 20 20 20 62 76 73 20  |..".        bvs |
00006d90  20 20 20 20 66 61 74 61  6c 5f 65 72 72 6f 72 0d  |    fatal_error.|
00006da0  1f 2c 26 20 20 20 20 20  20 20 20 61 64 72 20 20  |.,&        adr  |
00006db0  20 20 20 72 31 2c 70 6f  6c 6c 5f 73 70 61 63 65  |   r1,poll_space|
00006dc0  2b 26 38 30 30 0d 1f 36  1f 20 20 20 20 20 20 20  |+&800..6.       |
00006dd0  20 73 75 62 20 20 20 20  20 72 31 2c 72 31 2c 23  | sub     r1,r1,#|
00006de0  26 38 30 30 0d 1f 40 43  20 20 20 20 20 20 20 20  |&800..@C        |
00006df0  6c 64 72 20 20 20 20 20  72 30 2c 5b 72 31 5d 20  |ldr     r0,[r1] |
00006e00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006e10  3b 20 72 30 20 3d 20 66  69 72 73 74 20 6d 65 6e  |; r0 = first men|
00006e20  75 20 65 6e 74 72 79 0d  1f 4a 42 20 20 20 20 20  |u entry..JB     |
00006e30  20 20 20 63 6d 6e 20 20  20 20 20 72 30 2c 23 31  |   cmn     r0,#1|
00006e40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006e50  20 20 20 3b 20 73 65 65  20 69 66 20 6f 6e 20 6d  |   ; see if on m|
00006e60  65 6e 75 20 65 6e 74 72  79 0d 1f 54 50 20 20 20  |enu entry..TP   |
00006e70  20 20 20 20 20 61 64 64  6e 65 20 20 20 70 63 2c  |     addne   pc,|
00006e80  70 63 2c 72 30 2c 6c 73  6c 20 23 32 20 20 20 20  |pc,r0,lsl #2    |
00006e90  20 20 20 20 20 3b 20 77  61 73 20 73 6f 20 64 69  |     ; was so di|
00006ea0  73 70 61 74 63 68 20 74  6f 20 63 6f 72 72 65 63  |spatch to correc|
00006eb0  74 20 72 6f 75 74 69 6e  65 0d 1f 5e 47 20 20 20  |t routine..^G   |
00006ec0  20 20 20 20 20 62 20 20  20 20 20 20 20 70 6f 6c  |     b       pol|
00006ed0  6c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |l               |
00006ee0  20 20 20 20 20 3b 20 6e  6f 74 20 6f 6e 20 6d 65  |     ; not on me|
00006ef0  6e 75 20 65 6e 74 72 79  20 73 6f 20 70 6f 6c 6c  |nu entry so poll|
00006f00  0d 1f 68 0f 2e 6a 75 6d  70 5f 74 61 62 6c 65 0d  |..h..jump_table.|
00006f10  1f 72 32 20 20 20 20 20  20 20 20 62 20 20 20 20  |.r2        b    |
00006f20  20 20 20 70 6f 6c 6c 20  20 20 20 20 20 20 20 20  |   poll         |
00006f30  20 20 20 20 20 20 20 20  20 20 20 3b 20 69 6e 66  |           ; inf|
00006f40  6f 0d 1f 7c 3d 20 20 20  20 20 20 20 20 62 20 20  |o..|=        b  |
00006f50  20 20 20 20 20 6d 65 6e  75 5f 64 69 73 70 6c 61  |     menu_displa|
00006f60  79 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 64  |y            ; d|
00006f70  69 73 70 6c 61 79 20 73  75 62 6d 65 6e 75 0d 1f  |isplay submenu..|
00006f80  86 34 20 20 20 20 20 20  20 20 62 20 20 20 20 20  |.4        b     |
00006f90  20 20 72 65 6d 6f 76 65  20 20 20 20 20 20 20 20  |  remove        |
00006fa0  20 20 20 20 20 20 20 20  20 20 3b 20 72 65 6d 6f  |          ; remo|
00006fb0  76 65 0d 1f 90 38 20 20  20 20 20 20 20 20 62 20  |ve...8        b |
00006fc0  20 20 20 20 20 20 73 65  6c 65 63 74 5f 61 6c 6c  |      select_all|
00006fd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00006fe0  73 65 6c 65 63 74 5f 61  6c 6c 0d 1f 9a 3d 20 20  |select_all...=  |
00006ff0  20 20 20 20 20 20 62 20  20 20 20 20 20 20 63 6c  |      b       cl|
00007000  65 61 72 5f 73 65 6c 65  63 74 69 6f 6e 20 20 20  |ear_selection   |
00007010  20 20 20 20 20 20 3b 20  63 6c 65 61 72 5f 73 65  |      ; clear_se|
00007020  6c 65 63 74 69 6f 6e 0d  1f a4 3b 20 20 20 20 20  |lection...;     |
00007030  20 20 20 62 20 20 20 20  20 20 20 73 61 76 65 5f  |   b       save_|
00007040  62 61 63 6b 64 72 6f 70  20 20 20 20 20 20 20 20  |backdrop        |
00007050  20 20 20 3b 20 73 61 76  65 5f 62 61 63 6b 64 72  |   ; save_backdr|
00007060  6f 70 0d 1f ae 32 20 20  20 20 20 20 20 20 62 20  |op...2        b |
00007070  20 20 20 20 20 20 63 6c  6f 73 65 64 6f 77 6e 5f  |      closedown_|
00007080  61 6e 64 5f 65 78 69 74  20 20 20 20 20 20 3b 20  |and_exit      ; |
00007090  71 75 69 74 0d 1f b8 04  0d 1f c2 53 3b 20 2d 2d  |quit.......S; --|
000070a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000070e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 1f cc 34 3b  |-----------...4;|
000070f0  20 61 6e 20 65 6e 74 72  79 20 6f 6e 20 74 68 65  | an entry on the|
00007100  20 64 69 73 70 6c 61 79  20 6d 65 6e 75 20 68 61  | display menu ha|
00007110  73 20 62 65 65 6e 20 73  65 6c 65 63 74 65 64 0d  |s been selected.|
00007120  1f d6 04 0d 1f e0 11 2e  6d 65 6e 75 5f 64 69 73  |........menu_dis|
00007130  70 6c 61 79 0d 1f ea 1e  20 20 20 20 20 20 20 20  |play....        |
00007140  6c 64 72 20 20 20 20 20  72 30 2c 5b 72 31 2c 23  |ldr     r0,[r1,#|
00007150  34 5d 0d 1f f4 40 20 20  20 20 20 20 20 20 63 6d  |4]...@        cm|
00007160  70 20 20 20 20 20 72 30  2c 23 30 20 20 20 20 20  |p     r0,#0     |
00007170  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00007180  73 6f 72 74 20 77 68 65  72 65 20 63 6c 69 63 6b  |sort where click|
00007190  65 64 0d 1f fe 4f 20 20  20 20 20 20 20 20 62 6c  |ed...O        bl|
000071a0  74 20 20 20 20 20 70 6f  6c 6c 20 20 20 20 20 20  |t     poll      |
000071b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
000071c0  6e 6f 74 20 6d 65 6e 75  20 69 74 65 6d 20 6f 6e  |not menu item on|
000071d0  20 63 6c 69 63 6b 20 6f  6e 20 64 69 73 70 6c 61  | click on displa|
000071e0  79 0d 20 08 48 20 20 20  20 20 20 20 20 20 20 20  |y. .H           |
000071f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00007200  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 69  |             ; i|
00007210  6e 20 6d 61 69 6e 20 6d  65 6e 75 20 73 6f 20 70  |n main menu so p|
00007220  6f 6c 6c 20 61 67 61 69  6e 0d 20 12 19 20 20 20  |oll again. ..   |
00007230  20 20 20 20 20 6d 6f 76  65 71 20 20 20 72 30 2c  |     moveq   r0,|
00007240  23 31 0d 20 1c 19 20 20  20 20 20 20 20 20 6d 6f  |#1. ..        mo|
00007250  76 67 74 20 20 20 72 30  2c 23 30 0d 20 26 26 20  |vgt   r0,#0. && |
00007260  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
00007270  30 2c 62 6c 61 63 6b 5f  74 65 78 74 5f 74 69 63  |0,black_text_tic|
00007280  6b 0d 20 30 04 0d 20 3a  27 20 20 20 20 20 20 20  |k. 0.. :'       |
00007290  20 73 74 72 62 20 20 20  20 72 30 2c 69 63 6f 6e  | strb    r0,icon|
000072a0  5f 74 65 78 74 5f 63 6f  6c 6f 75 72 0d 20 44 04  |_text_colour. D.|
000072b0  0d 20 4e 1b 20 20 20 20  20 20 20 20 6d 6f 76 65  |. N.        move|
000072c0  71 20 20 20 72 30 2c 23  26 38 30 0d 20 58 1b 20  |q   r0,#&80. X. |
000072d0  20 20 20 20 20 20 20 6d  6f 76 6e 65 20 20 20 72  |       movne   r|
000072e0  30 2c 23 26 38 31 0d 20  62 26 20 20 20 20 20 20  |0,#&81. b&      |
000072f0  20 20 73 74 72 20 20 20  20 20 72 30 2c 77 68 69  |  str     r0,whi|
00007300  74 65 5f 74 65 78 74 5f  74 69 63 6b 0d 20 6c 04  |te_text_tick. l.|
00007310  0d 20 76 21 20 20 20 20  20 20 20 20 6c 64 72 20  |. v!        ldr |
00007320  20 20 20 20 72 30 2c 69  63 6f 6e 5f 66 6c 61 67  |    r0,icon_flag|
00007330  73 0d 20 80 22 20 20 20  20 20 20 20 20 62 69 63  |s. ."        bic|
00007340  20 20 20 20 20 72 30 2c  72 30 2c 23 37 20 3c 3c  |     r0,r0,#7 <<|
00007350  20 32 34 0d 20 8a 22 20  20 20 20 20 20 20 20 65  | 24. ."        e|
00007360  6f 72 65 71 20 20 20 72  30 2c 72 30 2c 23 37 20  |oreq   r0,r0,#7 |
00007370  3c 3c 20 32 34 0d 20 94  21 20 20 20 20 20 20 20  |<< 24. .!       |
00007380  20 73 74 72 20 20 20 20  20 72 30 2c 69 63 6f 6e  | str     r0,icon|
00007390  5f 66 6c 61 67 73 0d 20  9e 04 0d 20 a8 25 20 20  |_flags. ... .%  |
000073a0  20 20 20 20 20 20 61 64  72 20 20 20 20 20 72 31  |      adr     r1|
000073b0  2c 77 6f 72 6b 73 70 61  63 65 2b 26 38 30 30 0d  |,workspace+&800.|
000073c0  20 b2 2f 20 20 20 20 20  20 20 20 6c 64 72 20 20  | ./        ldr  |
000073d0  20 20 20 72 30 2c 62 61  63 6b 67 72 6f 75 6e 64  |   r0,background|
000073e0  5f 77 69 6e 64 6f 77 5f  68 61 6e 64 6c 65 0d 20  |_window_handle. |
000073f0  bc 23 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |.#        str   |
00007400  20 20 72 30 2c 5b 72 31  2c 23 2d 26 38 30 30 5d  |  r0,[r1,#-&800]|
00007410  21 0d 20 c6 1f 20 20 20  20 20 20 20 20 6d 6f 76  |!. ..        mov|
00007420  65 71 20 20 20 72 30 2c  23 37 20 3c 3c 20 32 34  |eq   r0,#7 << 24|
00007430  0d 20 d0 19 20 20 20 20  20 20 20 20 6d 6f 76 6e  |. ..        movn|
00007440  65 20 20 20 72 30 2c 23  30 0d 20 da 1e 20 20 20  |e   r0,#0. ..   |
00007450  20 20 20 20 20 73 74 72  20 20 20 20 20 72 30 2c  |     str     r0,|
00007460  5b 72 31 2c 23 38 5d 0d  20 e4 20 20 20 20 20 20  |[r1,#8]. .      |
00007470  20 20 20 6d 6f 76 20 20  20 20 20 72 30 2c 23 31  |   mov     r0,#1|
00007480  35 20 3c 3c 20 32 34 0d  20 ee 1f 20 20 20 20 20  |5 << 24. ..     |
00007490  20 20 20 73 74 72 20 20  20 20 20 72 30 2c 5b 72  |   str     r0,[r|
000074a0  31 2c 23 31 32 5d 0d 20  f8 28 20 20 20 20 20 20  |1,#12]. .(      |
000074b0  20 20 6c 64 72 20 20 20  20 20 72 34 2c 73 74 61  |  ldr     r4,sta|
000074c0  72 74 5f 6c 69 6e 6b 65  64 5f 6c 69 73 74 0d 21  |rt_linked_list.!|
000074d0  02 44 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |.D        teq   |
000074e0  20 20 72 34 2c 23 30 20  20 20 20 20 20 20 20 20  |  r4,#0         |
000074f0  20 20 20 20 20 20 20 20  20 20 3b 20 73 65 65 20  |          ; see |
00007500  69 66 20 6e 6f 20 69 63  6f 6e 73 20 61 74 20 61  |if no icons at a|
00007510  6c 6c 0d 21 0c 26 20 20  20 20 20 20 20 20 62 65  |ll.!.&        be|
00007520  71 20 20 20 20 20 73 65  65 5f 69 66 5f 72 65 6f  |q     see_if_reo|
00007530  70 65 6e 5f 6d 65 6e 75  0d 21 16 16 2e 6d 65 6e  |pen_menu.!...men|
00007540  75 5f 64 69 73 70 6c 61  79 5f 6c 6f 6f 70 0d 21  |u_display_loop.!|
00007550  20 28 20 20 20 20 20 20  20 20 6c 64 72 62 20 20  | (        ldrb  |
00007560  20 20 72 30 2c 5b 72 34  2c 23 69 63 6f 6e 5f 68  |  r0,[r4,#icon_h|
00007570  61 6e 64 6c 65 5d 0d 21  2a 1e 20 20 20 20 20 20  |andle].!*.      |
00007580  20 20 73 74 72 20 20 20  20 20 72 30 2c 5b 72 31  |  str     r0,[r1|
00007590  2c 23 34 5d 0d 21 34 28  20 20 20 20 20 20 20 20  |,#4].!4(        |
000075a0  73 77 69 20 20 20 20 20  22 58 57 69 6d 70 5f 53  |swi     "XWimp_S|
000075b0  65 74 49 63 6f 6e 53 74  61 74 65 22 0d 21 3e 1f  |etIconState".!>.|
000075c0  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
000075d0  66 61 74 61 6c 5f 65 72  72 6f 72 0d 21 48 21 20  |fatal_error.!H! |
000075e0  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
000075f0  34 2c 5b 72 34 2c 23 6e  65 78 74 5d 0d 21 52 19  |4,[r4,#next].!R.|
00007600  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
00007610  72 34 2c 23 30 0d 21 5c  25 20 20 20 20 20 20 20  |r4,#0.!\%       |
00007620  20 62 6e 65 20 20 20 20  20 6d 65 6e 75 5f 64 69  | bne     menu_di|
00007630  73 70 6c 61 79 5f 6c 6f  6f 70 0d 21 66 26 20 20  |splay_loop.!f&  |
00007640  20 20 20 20 20 20 62 20  20 20 20 20 20 20 73 65  |      b       se|
00007650  65 5f 69 66 5f 72 65 6f  70 65 6e 5f 6d 65 6e 75  |e_if_reopen_menu|
00007660  0d 21 70 04 0d 21 7a 53  3b 20 2d 2d 2d 2d 2d 2d  |.!p..!zS; ------|
00007670  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000076b0  2d 2d 2d 2d 2d 2d 2d 0d  21 84 2e 3b 20 74 68 65  |-------.!..; the|
000076c0  20 72 65 6d 6f 76 65 20  6d 65 6e 75 20 6f 70 74  | remove menu opt|
000076d0  69 6f 6e 20 68 61 73 20  62 65 65 6e 20 73 65 6c  |ion has been sel|
000076e0  65 63 74 65 64 0d 21 8e  04 0d 21 98 0b 2e 72 65  |ected.!...!...re|
000076f0  6d 6f 76 65 0d 21 a2 2d  20 20 20 20 20 20 20 20  |move.!.-        |
00007700  61 64 72 20 20 20 20 20  72 35 2c 73 74 61 72 74  |adr     r5,start|
00007710  5f 6c 69 6e 6b 65 64 5f  6c 69 73 74 2d 26 63 30  |_linked_list-&c0|
00007720  30 0d 21 ac 22 20 20 20  20 20 20 20 20 6c 64 72  |0.!."        ldr|
00007730  20 20 20 20 20 72 34 2c  5b 72 35 2c 23 26 63 30  |     r4,[r5,#&c0|
00007740  30 5d 21 0d 21 b6 10 2e  72 65 6d 6f 76 65 5f 6c  |0]!.!...remove_l|
00007750  6f 6f 70 0d 21 c0 52 20  20 20 20 20 20 20 20 6c  |oop.!.R        l|
00007760  64 72 20 20 20 20 20 72  36 2c 5b 72 34 2c 23 6e  |dr     r6,[r4,#n|
00007770  65 78 74 5d 20 20 20 20  20 20 20 20 20 20 20 3b  |ext]           ;|
00007780  20 6d 75 73 74 20 62 65  20 72 65 61 64 20 68 65  | must be read he|
00007790  72 65 20 61 73 20 66 72  65 65 69 6e 67 20 61 20  |re as freeing a |
000077a0  62 6c 6f 63 6b 0d 21 ca  4c 20 20 20 20 20 20 20  |block.!.L       |
000077b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000077d0  20 3b 20 63 68 61 6e 67  65 73 20 74 68 65 20 76  | ; changes the v|
000077e0  61 6c 75 65 20 6f 66 20  5b 72 34 2b 6e 65 78 74  |alue of [r4+next|
000077f0  5d 0d 21 d4 25 20 20 20  20 20 20 20 20 6c 64 72  |].!.%        ldr|
00007800  62 20 20 20 20 72 32 2c  5b 72 34 2c 23 73 65 6c  |b    r2,[r4,#sel|
00007810  65 63 74 65 64 5d 0d 21  de 19 20 20 20 20 20 20  |ected].!..      |
00007820  20 20 74 65 71 20 20 20  20 20 72 32 2c 23 30 0d  |  teq     r2,#0.|
00007830  21 e8 4f 20 20 20 20 20  20 20 20 73 74 72 65 71  |!.O        streq|
00007840  20 20 20 72 34 2c 5b 72  35 2c 23 6e 65 78 74 5d  |   r4,[r5,#next]|
00007850  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00007860  72 65 20 6c 69 6e 6b 65  64 20 6c 69 73 74 20 70  |re linked list p|
00007870  6f 69 6e 74 65 72 20 69  6e 20 6c 61 73 74 0d 21  |ointer in last.!|
00007880  f2 52 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.R              |
00007890  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000078a0  20 20 20 20 20 20 20 20  20 20 3b 20 6e 6f 74 20  |          ; not |
000078b0  72 65 6d 6f 76 65 64 20  64 61 74 61 20 73 65 74  |removed data set|
000078c0  20 69 66 20 6e 6f 74 20  72 65 6d 6f 76 69 6e 67  | if not removing|
000078d0  0d 21 fc 4e 20 20 20 20  20 20 20 20 6d 6f 76 65  |.!.N        move|
000078e0  71 20 20 20 72 35 2c 72  34 20 20 20 20 20 20 20  |q   r5,r4       |
000078f0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 75 70  |            ; up|
00007900  64 61 74 65 20 6c 61 73  74 20 6e 6f 74 20 72 65  |date last not re|
00007910  6d 6f 76 65 64 20 64 61  74 61 20 73 65 74 0d 22  |moved data set."|
00007920  06 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.E              |
00007930  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00007940  20 20 20 20 20 20 20 20  20 20 3b 20 70 6f 69 6e  |          ; poin|
00007950  74 65 72 20 69 66 20 6e  6f 74 20 72 65 6d 6f 76  |ter if not remov|
00007960  69 6e 67 0d 22 10 1e 20  20 20 20 20 20 20 20 62  |ing."..        b|
00007970  65 71 20 20 20 20 20 6e  6f 74 5f 72 65 6d 6f 76  |eq     not_remov|
00007980  65 0d 22 1a 1f 20 20 20  20 20 20 20 20 62 6c 20  |e."..        bl |
00007990  20 20 20 20 20 64 65 6c  65 74 65 5f 69 63 6f 6e  |     delete_icon|
000079a0  0d 22 24 23 20 20 20 20  20 20 20 20 62 6c 20 20  |."$#        bl  |
000079b0  20 20 20 20 66 72 65 65  5f 68 65 61 70 5f 62 6c  |    free_heap_bl|
000079c0  6f 63 6b 0d 22 2e 26 20  20 20 20 20 20 20 20 6c  |ock.".&        l|
000079d0  64 72 62 20 20 20 20 72  32 2c 6e 75 6d 62 65 72  |drb    r2,number|
000079e0  5f 6f 66 5f 69 63 6f 6e  73 0d 22 38 1c 20 20 20  |_of_icons."8.   |
000079f0  20 20 20 20 20 73 75 62  20 20 20 20 20 72 32 2c  |     sub     r2,|
00007a00  72 32 2c 23 31 0d 22 42  26 20 20 20 20 20 20 20  |r2,#1."B&       |
00007a10  20 73 74 72 62 20 20 20  20 72 32 2c 6e 75 6d 62  | strb    r2,numb|
00007a20  65 72 5f 6f 66 5f 69 63  6f 6e 73 0d 22 4c 0f 2e  |er_of_icons."L..|
00007a30  6e 6f 74 5f 72 65 6d 6f  76 65 0d 22 56 3d 20 20  |not_remove."V=  |
00007a40  20 20 20 20 20 20 6d 6f  76 73 20 20 20 20 72 34  |      movs    r4|
00007a50  2c 72 36 20 20 20 20 20  20 20 20 20 20 20 20 20  |,r6             |
00007a60  20 20 20 20 20 20 3b 20  6d 6f 76 65 20 61 6c 6f  |      ; move alo|
00007a70  6e 67 20 6c 69 73 74 0d  22 60 3b 20 20 20 20 20  |ng list."`;     |
00007a80  20 20 20 74 65 71 20 20  20 20 20 72 34 2c 23 30  |   teq     r4,#0|
00007a90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00007aa0  20 20 20 3b 20 73 65 65  20 69 66 20 61 74 20 65  |   ; see if at e|
00007ab0  6e 64 0d 22 6a 1f 20 20  20 20 20 20 20 20 62 6e  |nd."j.        bn|
00007ac0  65 20 20 20 20 20 72 65  6d 6f 76 65 5f 6c 6f 6f  |e     remove_loo|
00007ad0  70 0d 22 74 45 20 20 20  20 20 20 20 20 73 74 72  |p."tE        str|
00007ae0  20 20 20 20 20 72 34 2c  5b 72 35 2c 23 6e 65 78  |     r4,[r5,#nex|
00007af0  74 5d 20 20 20 20 20 20  20 20 20 20 20 3b 20 6d  |t]           ; m|
00007b00  61 72 6b 20 65 6e 64 20  6f 66 20 6c 69 6e 6b 65  |ark end of linke|
00007b10  64 20 6c 69 73 74 0d 22  7e 26 20 20 20 20 20 20  |d list."~&      |
00007b20  20 20 73 74 72 62 20 20  20 20 72 34 2c 6e 75 6d  |  strb    r4,num|
00007b30  62 65 72 5f 73 65 6c 65  63 74 65 64 0d 22 88 26  |ber_selected.".&|
00007b40  20 20 20 20 20 20 20 20  62 20 20 20 20 20 20 20  |        b       |
00007b50  73 65 65 5f 69 66 5f 72  65 6f 70 65 6e 5f 6d 65  |see_if_reopen_me|
00007b60  6e 75 0d 22 92 04 0d 22  9c 53 3b 20 2d 2d 2d 2d  |nu."...".S; ----|
00007b70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007bb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 22 a6 32 3b 20 74  |---------.".2; t|
00007bc0  68 65 20 73 65 6c 65 63  74 20 61 6c 6c 20 6d 65  |he select all me|
00007bd0  6e 75 20 6f 70 74 69 6f  6e 20 68 61 73 20 62 65  |nu option has be|
00007be0  65 6e 20 73 65 6c 65 63  74 65 64 0d 22 b0 04 0d  |en selected."...|
00007bf0  22 ba 0f 2e 73 65 6c 65  63 74 5f 61 6c 6c 0d 22  |"...select_all."|
00007c00  c4 28 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.(        ldr   |
00007c10  20 20 72 34 2c 73 74 61  72 74 5f 6c 69 6e 6b 65  |  r4,start_linke|
00007c20  64 5f 6c 69 73 74 0d 22  ce 14 2e 73 65 6c 65 63  |d_list."...selec|
00007c30  74 5f 61 6c 6c 5f 6c 6f  6f 70 0d 22 d8 28 20 20  |t_all_loop.".(  |
00007c40  20 20 20 20 20 20 6c 64  72 62 20 20 20 20 72 32  |      ldrb    r2|
00007c50  2c 5b 72 34 2c 23 69 63  6f 6e 5f 68 61 6e 64 6c  |,[r4,#icon_handl|
00007c60  65 5d 0d 22 e2 1f 20 20  20 20 20 20 20 20 62 6c  |e]."..        bl|
00007c70  20 20 20 20 20 20 73 65  6c 65 63 74 5f 69 63 6f  |      select_ico|
00007c80  6e 0d 22 ec 19 20 20 20  20 20 20 20 20 6d 6f 76  |n."..        mov|
00007c90  20 20 20 20 20 72 32 2c  23 31 0d 22 f6 25 20 20  |     r2,#1.".%  |
00007ca0  20 20 20 20 20 20 73 74  72 62 20 20 20 20 72 32  |      strb    r2|
00007cb0  2c 5b 72 34 2c 23 73 65  6c 65 63 74 65 64 5d 0d  |,[r4,#selected].|
00007cc0  23 00 1b 20 20 20 20 20  20 20 20 6c 64 72 20 20  |#..        ldr  |
00007cd0  20 20 20 72 34 2c 5b 72  34 5d 0d 23 0a 19 20 20  |   r4,[r4].#..  |
00007ce0  20 20 20 20 20 20 74 65  71 20 20 20 20 20 72 34  |      teq     r4|
00007cf0  2c 23 30 0d 23 14 23 20  20 20 20 20 20 20 20 62  |,#0.#.#        b|
00007d00  6e 65 20 20 20 20 20 73  65 6c 65 63 74 5f 61 6c  |ne     select_al|
00007d10  6c 5f 6c 6f 6f 70 0d 23  1e 26 20 20 20 20 20 20  |l_loop.#.&      |
00007d20  20 20 6c 64 72 62 20 20  20 20 72 32 2c 6e 75 6d  |  ldrb    r2,num|
00007d30  62 65 72 5f 6f 66 5f 69  63 6f 6e 73 0d 23 28 26  |ber_of_icons.#(&|
00007d40  20 20 20 20 20 20 20 20  73 74 72 62 20 20 20 20  |        strb    |
00007d50  72 32 2c 6e 75 6d 62 65  72 5f 73 65 6c 65 63 74  |r2,number_select|
00007d60  65 64 0d 23 32 26 20 20  20 20 20 20 20 20 62 20  |ed.#2&        b |
00007d70  20 20 20 20 20 20 73 65  65 5f 69 66 5f 72 65 6f  |      see_if_reo|
00007d80  70 65 6e 5f 6d 65 6e 75  0d 23 3c 04 0d 23 46 53  |pen_menu.#<..#FS|
00007d90  3b 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; --------------|
00007da0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007dd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00007de0  23 50 36 3b 20 74 68 65  20 63 6c 65 61 72 20 73  |#P6; the clear s|
00007df0  65 6c 65 63 74 6f 6e 20  6d 65 6e 75 20 6f 70 74  |electon menu opt|
00007e00  69 6f 6e 20 68 61 73 20  62 65 65 6e 20 73 65 6c  |ion has been sel|
00007e10  65 63 74 65 64 0d 23 5a  04 0d 23 64 14 2e 63 6c  |ected.#Z..#d..cl|
00007e20  65 61 72 5f 73 65 6c 65  63 74 69 6f 6e 0d 23 6e  |ear_selection.#n|
00007e30  20 20 20 20 20 20 20 20  20 62 6c 20 20 20 20 20  |         bl     |
00007e40  20 75 6e 73 65 6c 65 63  74 5f 61 6c 6c 0d 23 78  | unselect_all.#x|
00007e50  26 20 20 20 20 20 20 20  20 62 20 20 20 20 20 20  |&        b      |
00007e60  20 73 65 65 5f 69 66 5f  72 65 6f 70 65 6e 5f 6d  | see_if_reopen_m|
00007e70  65 6e 75 0d 23 82 04 0d  23 8c 53 3b 20 2d 2d 2d  |enu.#...#.S; ---|
00007e80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00007ec0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 23 96 35 3b 20  |----------.#.5; |
00007ed0  74 68 65 20 73 61 76 65  20 62 61 63 6b 64 72 6f  |the save backdro|
00007ee0  70 20 6d 65 6e 75 20 65  6e 74 72 79 20 68 61 73  |p menu entry has|
00007ef0  20 62 65 65 6e 20 73 65  6c 65 63 74 65 64 2e 0d  | been selected..|
00007f00  23 a0 04 0d 23 aa 12 2e  73 61 76 65 5f 62 61 63  |#...#...save_bac|
00007f10  6b 64 72 6f 70 0d 23 b4  1b 20 20 20 20 20 20 20  |kdrop.#..       |
00007f20  20 6d 6f 76 20 20 20 20  20 72 30 2c 23 26 38 30  | mov     r0,#&80|
00007f30  0d 23 be 26 20 20 20 20  20 20 20 20 61 64 72 20  |.#.&        adr |
00007f40  20 20 20 20 72 31 2c 63  6f 6e 66 69 67 5f 66 69  |    r1,config_fi|
00007f50  6c 65 6e 61 6d 65 0d 23  c8 1e 20 20 20 20 20 20  |lename.#..      |
00007f60  20 20 73 77 69 20 20 20  20 20 22 58 4f 53 5f 46  |  swi     "XOS_F|
00007f70  69 6e 64 22 0d 23 d2 21  20 20 20 20 20 20 20 20  |ind".#.!        |
00007f80  61 64 72 76 73 20 20 20  72 31 34 2c 70 6f 6c 6c  |adrvs   r14,poll|
00007f90  2b 26 38 30 30 0d 23 dc  4d 20 20 20 20 20 20 20  |+&800.#.M       |
00007fa0  20 73 75 62 76 73 20 20  20 72 31 34 2c 72 31 34  | subvs   r14,r14|
00007fb0  2c 23 26 38 30 30 20 20  20 20 20 20 20 20 20 20  |,#&800          |
00007fc0  20 3b 20 63 61 75 73 65  20 69 74 20 74 6f 20 72  | ; cause it to r|
00007fd0  65 74 75 72 6e 20 74 6f  20 70 6f 6c 6c 20 6c 6f  |eturn to poll lo|
00007fe0  6f 70 0d 23 e6 23 20 20  20 20 20 20 20 20 62 76  |op.#.#        bv|
00007ff0  73 20 20 20 20 20 72 65  70 6f 72 74 5f 65 72 72  |s     report_err|
00008000  6f 72 5f 6f 6b 0d 23 f0  3e 20 20 20 20 20 20 20  |or_ok.#.>       |
00008010  20 6d 6f 76 20 20 20 20  20 72 31 2c 72 30 20 20  | mov     r1,r0  |
00008020  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00008030  20 3b 20 72 31 20 3d 20  66 69 6c 65 20 68 61 6e  | ; r1 = file han|
00008040  64 6c 65 0d 23 fa 44 20  20 20 20 20 20 20 20 6c  |dle.#.D        l|
00008050  64 72 62 20 20 20 20 72  30 2c 69 63 6f 6e 5f 74  |drb    r0,icon_t|
00008060  65 78 74 5f 63 6f 6c 6f  75 72 20 20 20 20 20 3b  |ext_colour     ;|
00008070  20 73 74 6f 72 65 20 69  63 6f 6e 20 74 65 78 74  | store icon text|
00008080  20 63 6f 6c 6f 75 72 0d  24 04 1e 20 20 20 20 20  | colour.$..     |
00008090  20 20 20 73 77 69 20 20  20 20 20 22 58 4f 53 5f  |   swi     "XOS_|
000080a0  42 50 75 74 22 0d 24 0e  27 20 20 20 20 20 20 20  |BPut".$.'       |
000080b0  20 62 76 73 20 20 20 20  20 65 72 72 6f 72 5f 77  | bvs     error_w|
000080c0  68 69 6c 65 5f 77 72 69  74 69 6e 67 0d 24 18 43  |hile_writing.$.C|
000080d0  20 20 20 20 20 20 20 20  6c 64 72 62 20 20 20 20  |        ldrb    |
000080e0  72 30 2c 6e 75 6d 62 65  72 5f 6f 66 5f 69 63 6f  |r0,number_of_ico|
000080f0  6e 73 20 20 20 20 20 20  3b 20 73 74 6f 72 65 20  |ns      ; store |
00008100  6e 75 6d 62 65 72 20 6f  66 20 69 63 6f 6e 73 0d  |number of icons.|
00008110  24 22 1e 20 20 20 20 20  20 20 20 73 77 69 20 20  |$".        swi  |
00008120  20 20 20 22 58 4f 53 5f  42 50 75 74 22 0d 24 2c  |   "XOS_BPut".$,|
00008130  27 20 20 20 20 20 20 20  20 62 76 73 20 20 20 20  |'        bvs    |
00008140  20 65 72 72 6f 72 5f 77  68 69 6c 65 5f 77 72 69  | error_while_wri|
00008150  74 69 6e 67 0d 24 36 28  20 20 20 20 20 20 20 20  |ting.$6(        |
00008160  6c 64 72 20 20 20 20 20  72 32 2c 73 74 61 72 74  |ldr     r2,start|
00008170  5f 6c 69 6e 6b 65 64 5f  6c 69 73 74 0d 24 40 19  |_linked_list.$@.|
00008180  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
00008190  72 32 2c 23 30 0d 24 4a  1f 20 20 20 20 20 20 20  |r2,#0.$J.       |
000081a0  20 62 65 71 20 20 20 20  20 65 6e 64 5f 6f 66 5f  | beq     end_of_|
000081b0  73 61 76 65 0d 24 54 17  2e 73 61 76 65 5f 62 61  |save.$T..save_ba|
000081c0  63 6b 64 72 6f 70 5f 6c  6f 6f 70 0d 24 5e 53 20  |ckdrop_loop.$^S |
000081d0  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
000081e0  30 2c 23 32 20 20 20 20  20 20 20 20 20 20 20 20  |0,#2            |
000081f0  20 20 20 20 20 20 20 3b  20 77 72 69 74 65 20 62  |       ; write b|
00008200  79 74 65 73 20 75 73 69  6e 67 20 63 75 72 72 65  |ytes using curre|
00008210  6e 74 20 73 65 71 20 70  6f 69 6e 74 65 72 0d 24  |nt seq pointer.$|
00008220  68 3e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |h>              |
00008230  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00008240  20 20 20 20 20 20 20 20  20 20 3b 20 72 31 20 3d  |          ; r1 =|
00008250  20 66 69 6c 65 20 68 61  6e 64 6c 65 0d 24 72 47  | file handle.$rG|
00008260  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
00008270  72 35 2c 5b 72 32 2c 23  6e 65 78 74 5d 20 20 20  |r5,[r2,#next]   |
00008280  20 20 20 20 20 20 20 20  3b 20 67 65 74 20 70 6f  |        ; get po|
00008290  69 6e 74 65 72 20 74 6f  20 6e 65 78 74 20 65 6e  |inter to next en|
000082a0  74 72 79 0d 24 7c 22 20  20 20 20 20 20 20 20 6c  |try.$|"        l|
000082b0  64 72 20 20 20 20 20 72  33 2c 5b 72 32 2c 23 73  |dr     r3,[r2,#s|
000082c0  69 7a 65 5d 21 0d 24 86  1c 20 20 20 20 20 20 20  |ize]!.$..       |
000082d0  20 73 75 62 20 20 20 20  20 72 33 2c 72 33 2c 23  | sub     r3,r3,#|
000082e0  34 0d 24 90 1e 20 20 20  20 20 20 20 20 73 77 69  |4.$..        swi|
000082f0  20 20 20 20 20 22 58 4f  53 5f 47 42 50 42 22 0d  |     "XOS_GBPB".|
00008300  24 9a 27 20 20 20 20 20  20 20 20 62 76 73 20 20  |$.'        bvs  |
00008310  20 20 20 65 72 72 6f 72  5f 77 68 69 6c 65 5f 77  |   error_while_w|
00008320  72 69 74 69 6e 67 0d 24  a4 49 20 20 20 20 20 20  |riting.$.I      |
00008330  20 20 6d 6f 76 73 20 20  20 20 72 32 2c 72 35 20  |  movs    r2,r5 |
00008340  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00008350  20 20 3b 20 72 32 20 2d  3e 20 6e 65 78 74 20 65  |  ; r2 -> next e|
00008360  6e 74 72 79 2c 20 73 65  74 20 66 6c 61 67 73 0d  |ntry, set flags.|
00008370  24 ae 19 20 20 20 20 20  20 20 20 74 65 71 20 20  |$..        teq  |
00008380  20 20 20 72 32 2c 23 30  0d 24 b8 26 20 20 20 20  |   r2,#0.$.&    |
00008390  20 20 20 20 62 6e 65 20  20 20 20 20 73 61 76 65  |    bne     save|
000083a0  5f 62 61 63 6b 64 72 6f  70 5f 6c 6f 6f 70 0d 24  |_backdrop_loop.$|
000083b0  c2 10 2e 65 6e 64 5f 6f  66 5f 73 61 76 65 0d 24  |...end_of_save.$|
000083c0  cc 53 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |.S        mov   |
000083d0  20 20 72 30 2c 23 32 20  20 20 20 20 20 20 20 20  |  r0,#2         |
000083e0  20 20 20 20 20 20 20 20  20 20 3b 20 77 72 69 74  |          ; writ|
000083f0  65 20 62 79 74 65 73 20  75 73 69 6e 67 20 63 75  |e bytes using cu|
00008400  72 72 65 6e 74 20 73 65  71 20 70 6f 69 6e 74 65  |rrent seq pointe|
00008410  72 0d 24 d6 3d 20 20 20  20 20 20 20 20 61 64 72  |r.$.=        adr|
00008420  20 20 20 20 20 72 32 2c  7a 65 72 6f 20 20 20 20  |     r2,zero    |
00008430  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00008440  32 20 2d 3e 20 26 30 30  30 30 30 30 30 30 0d 24  |2 -> &00000000.$|
00008450  e0 19 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |..        mov   |
00008460  20 20 72 33 2c 23 34 0d  24 ea 1e 20 20 20 20 20  |  r3,#4.$..     |
00008470  20 20 20 73 77 69 20 20  20 20 20 22 58 4f 53 5f  |   swi     "XOS_|
00008480  47 42 50 42 22 0d 24 f4  27 20 20 20 20 20 20 20  |GBPB".$.'       |
00008490  20 62 76 73 20 20 20 20  20 65 72 72 6f 72 5f 77  | bvs     error_w|
000084a0  68 69 6c 65 5f 77 72 69  74 69 6e 67 0d 24 fe 38  |hile_writing.$.8|
000084b0  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
000084c0  72 30 2c 23 30 20 20 20  20 20 20 20 20 20 20 20  |r0,#0           |
000084d0  20 20 20 20 20 20 20 20  3b 20 63 6c 6f 73 65 20  |        ; close |
000084e0  66 69 6c 65 0d 25 08 1e  20 20 20 20 20 20 20 20  |file.%..        |
000084f0  73 77 69 20 20 20 20 20  22 58 4f 53 5f 46 69 6e  |swi     "XOS_Fin|
00008500  64 22 0d 25 12 23 20 20  20 20 20 20 20 20 62 6c  |d".%.#        bl|
00008510  76 73 20 20 20 20 72 65  70 6f 72 74 5f 65 72 72  |vs    report_err|
00008520  6f 72 5f 6f 6b 0d 25 1c  26 20 20 20 20 20 20 20  |or_ok.%.&       |
00008530  20 62 20 20 20 20 20 20  20 73 65 65 5f 69 66 5f  | b       see_if_|
00008540  72 65 6f 70 65 6e 5f 6d  65 6e 75 0d 25 26 18 2e  |reopen_menu.%&..|
00008550  65 72 72 6f 72 5f 77 68  69 6c 65 5f 77 72 69 74  |error_while_writ|
00008560  69 6e 67 0d 25 30 41 20  20 20 20 20 20 20 20 6d  |ing.%0A        m|
00008570  6f 76 20 20 20 20 20 72  32 2c 72 30 20 20 20 20  |ov     r2,r0    |
00008580  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00008590  20 73 74 6f 72 65 20 65  72 72 6f 72 20 70 6f 69  | store error poi|
000085a0  6e 74 65 72 0d 25 3a 38  20 20 20 20 20 20 20 20  |nter.%:8        |
000085b0  6d 6f 76 20 20 20 20 20  72 30 2c 23 30 20 20 20  |mov     r0,#0   |
000085c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000085d0  3b 20 63 6c 6f 73 65 20  66 69 6c 65 0d 25 44 3f  |; close file.%D?|
000085e0  20 20 20 20 20 20 20 20  73 77 69 20 20 20 20 20  |        swi     |
000085f0  22 58 4f 53 5f 46 69 6e  64 22 20 20 20 20 20 20  |"XOS_Find"      |
00008600  20 20 20 20 20 20 20 20  3b 20 69 67 6e 6f 72 65  |        ; ignore|
00008610  20 61 6e 79 20 65 72 72  6f 72 73 0d 25 4e 43 20  | any errors.%NC |
00008620  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
00008630  30 2c 72 32 20 20 20 20  20 20 20 20 20 20 20 20  |0,r2            |
00008640  20 20 20 20 20 20 20 3b  20 72 65 73 74 6f 72 65  |       ; restore|
00008650  20 65 72 72 6f 72 20 70  6f 69 6e 74 65 72 0d 25  | error pointer.%|
00008660  58 23 20 20 20 20 20 20  20 20 62 6c 20 20 20 20  |X#        bl    |
00008670  20 20 72 65 70 6f 72 74  5f 65 72 72 6f 72 5f 6f  |  report_error_o|
00008680  6b 0d 25 62 18 20 20 20  20 20 20 20 20 62 20 20  |k.%b.        b  |
00008690  20 20 20 20 20 70 6f 6c  6c 0d 25 6c 09 2e 7a 65  |     poll.%l..ze|
000086a0  72 6f 0d 25 76 15 20 20  20 20 20 20 20 20 65 71  |ro.%v.        eq|
000086b0  75 64 20 20 20 20 30 0d  25 80 14 2e 63 6f 6e 66  |ud    0.%...conf|
000086c0  69 67 5f 66 69 6c 65 6e  61 6d 65 0d 25 8a 2e 20  |ig_filename.%.. |
000086d0  20 20 20 20 20 20 20 65  71 75 73 20 20 20 20 22  |       equs    "|
000086e0  3c 50 6c 61 63 65 49 74  24 44 69 72 3e 2e 21 43  |<PlaceIt$Dir>.!C|
000086f0  6f 6e 66 69 67 22 2b bd  30 0d 25 94 11 20 20 20  |onfig"+.0.%..   |
00008700  20 20 20 20 20 61 6c 69  67 6e 0d 25 9e 04 0d 25  |     align.%...%|
00008710  a8 53 3b 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.S; ------------|
00008720  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00008760  2d 0d 25 b2 35 3b 20 73  65 65 20 69 66 20 61 64  |-.%.5; see if ad|
00008770  6a 75 73 74 20 77 61 73  20 63 6c 69 63 6b 65 64  |just was clicked|
00008780  20 6f 6e 2e 20 69 66 20  73 6f 20 72 65 6f 70 65  | on. if so reope|
00008790  6e 20 6d 65 6e 75 0d 25  bc 04 0d 25 c6 17 2e 73  |n menu.%...%...s|
000087a0  65 65 5f 69 66 5f 72 65  6f 70 65 6e 5f 6d 65 6e  |ee_if_reopen_men|
000087b0  75 0d 25 d0 3f 20 20 20  20 20 20 20 20 6c 64 72  |u.%.?        ldr|
000087c0  20 20 20 20 20 72 30 2c  70 6f 69 6e 74 65 72 5f  |     r0,pointer_|
000087d0  69 6e 66 6f 2b 38 20 20  20 20 20 20 20 3b 20 72  |info+8       ; r|
000087e0  30 20 3d 20 62 75 74 74  6f 6e 20 73 74 61 74 65  |0 = button state|
000087f0  0d 25 da 43 20 20 20 20  20 20 20 20 74 73 74 20  |.%.C        tst |
00008800  20 20 20 20 72 30 2c 23  31 20 20 20 20 20 20 20  |    r0,#1       |
00008810  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 73 65  |            ; se|
00008820  65 20 69 66 20 61 64 6a  75 73 74 20 70 72 65 73  |e if adjust pres|
00008830  73 65 64 0d 25 e4 3c 20  20 20 20 20 20 20 20 62  |sed.%.<        b|
00008840  65 71 20 20 20 20 20 70  6f 6c 6c 20 20 20 20 20  |eq     poll     |
00008850  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00008860  20 77 61 73 6e 27 74 20  73 6f 20 70 6f 6c 6c 0d  | wasn't so poll.|
00008870  25 ee 45 20 20 20 20 20  20 20 20 61 64 72 20 20  |%.E        adr  |
00008880  20 20 20 72 31 2c 70 6f  69 6e 74 65 72 5f 69 6e  |   r1,pointer_in|
00008890  66 6f 20 20 20 20 20 20  20 20 20 3b 20 72 31 20  |fo         ; r1 |
000088a0  2d 3e 20 63 6c 69 63 6b  20 63 6f 6f 72 64 69 6e  |-> click coordin|
000088b0  61 74 65 73 0d 25 f8 19  20 20 20 20 20 20 20 20  |ates.%..        |
000088c0  6d 76 6e 20 20 20 20 20  72 30 2c 23 30 0d 26 02  |mvn     r0,#0.&.|
000088d0  44 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |D        str    |
000088e0  20 72 30 2c 5b 72 31 2c  23 31 36 5d 20 20 20 20  | r0,[r1,#16]    |
000088f0  20 20 20 20 20 20 20 20  20 3b 20 6e 6f 20 69 63  |         ; no ic|
00008900  6f 6e 20 77 61 73 20 63  6c 69 63 6b 65 64 20 6f  |on was clicked o|
00008910  6e 0d 26 0c 39 20 20 20  20 20 20 20 20 62 20 20  |n.&.9        b  |
00008920  20 20 20 20 20 6f 70 65  6e 5f 6d 65 6e 75 20 20  |     open_menu  |
00008930  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00008940  65 6f 70 65 6e 20 6d 65  6e 75 0d 26 16 04 0d 26  |eopen menu.&...&|
00008950  20 11 2e 70 6f 69 6e 74  65 72 5f 69 6e 66 6f 0d  | ..pointer_info.|
00008960  26 2a 1b 20 20 20 20 20  20 20 20 65 71 75 73 20  |&*.        equs |
00008970  20 20 20 c4 32 34 2c bd  30 29 0d 26 34 04 0d 26  |   .24,.0).&4..&|
00008980  3e 53 3b 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |>S; ------------|
00008990  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000089d0  2d 0d 26 48 29 3b 20 54  68 65 20 6e 69 63 65 20  |-.&H); The nice |
000089e0  77 69 6d 70 20 68 61 73  20 73 65 6e 74 20 75 73  |wimp has sent us|
000089f0  20 61 20 6d 65 73 73 61  67 65 0d 26 52 04 0d 26  | a message.&R..&|
00008a00  5c 0c 2e 6d 65 73 73 61  67 65 0d 26 66 38 20 20  |\..message.&f8  |
00008a10  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 31  |      ldr     r1|
00008a20  31 2c 5b 72 31 2c 23 31  36 5d 20 20 20 20 20 20  |1,[r1,#16]      |
00008a30  20 20 20 20 20 20 3b 20  6d 65 73 73 61 67 65 20  |      ; message |
00008a40  49 44 0d 26 70 3e 20 20  20 20 20 20 20 20 74 65  |ID.&p>        te|
00008a50  71 20 20 20 20 20 72 31  31 2c 23 30 20 20 20 20  |q     r11,#0    |
00008a60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00008a70  73 65 65 20 69 66 20 63  6c 6f 73 65 64 6f 77 6e  |see if closedown|
00008a80  0d 26 7a 26 20 20 20 20  20 20 20 20 62 65 71 20  |.&z&        beq |
00008a90  20 20 20 20 63 6c 6f 73  65 64 6f 77 6e 5f 61 6e  |    closedown_an|
00008aa0  64 5f 65 78 69 74 0d 26  84 1b 20 20 20 20 20 20  |d_exit.&..      |
00008ab0  20 20 6d 6f 76 20 20 20  20 20 72 30 2c 23 26 63  |  mov     r0,#&c|
00008ac0  31 0d 26 8e 21 20 20 20  20 20 20 20 20 61 64 64  |1.&.!        add|
00008ad0  20 20 20 20 20 72 30 2c  72 30 2c 23 26 34 30 30  |     r0,r0,#&400|
00008ae0  30 30 0d 26 98 48 20 20  20 20 20 20 20 20 74 65  |00.&.H        te|
00008af0  71 20 20 20 20 20 72 31  31 2c 72 30 20 20 20 20  |q     r11,r0    |
00008b00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00008b10  73 65 65 20 69 66 20 6d  6f 64 65 20 63 68 61 6e  |see if mode chan|
00008b20  67 65 20 6d 65 73 73 61  67 65 0d 26 a2 47 20 20  |ge message.&.G  |
00008b30  20 20 20 20 20 20 62 6c  65 71 20 20 20 20 72 65  |      bleq    re|
00008b40  61 64 5f 73 63 72 65 65  6e 5f 73 69 7a 65 20 20  |ad_screen_size  |
00008b50  20 20 20 20 20 20 3b 20  74 68 69 73 20 63 61 6c  |      ; this cal|
00008b60  6c 20 70 72 65 73 65 72  76 65 73 20 66 6c 61 67  |l preserves flag|
00008b70  73 0d 26 ac 18 20 20 20  20 20 20 20 20 62 65 71  |s.&..        beq|
00008b80  20 20 20 20 20 70 6f 6c  6c 0d 26 b6 3f 20 20 20  |     poll.&.?   |
00008b90  20 20 20 20 20 61 64 64  20 20 20 20 20 72 30 2c  |     add     r0,|
00008ba0  72 30 2c 23 36 20 20 20  20 20 20 20 20 20 20 20  |r0,#6           |
00008bb0  20 20 20 20 20 3b 20 73  65 65 20 69 66 20 74 61  |     ; see if ta|
00008bc0  73 6b 6e 61 6d 65 69 73  0d 26 c0 1a 20 20 20 20  |sknameis.&..    |
00008bd0  20 20 20 20 74 65 71 20  20 20 20 20 72 31 31 2c  |    teq     r11,|
00008be0  72 30 0d 26 ca 1e 20 20  20 20 20 20 20 20 62 65  |r0.&..        be|
00008bf0  71 20 20 20 20 20 74 61  73 6b 6e 61 6d 65 69 73  |q     tasknameis|
00008c00  0d 26 d4 40 20 20 20 20  20 20 20 20 74 65 71 20  |.&.@        teq |
00008c10  20 20 20 20 72 31 31 2c  23 32 20 20 20 20 20 20  |    r11,#2      |
00008c20  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 73 65  |            ; se|
00008c30  65 20 69 66 20 64 61 74  61 73 61 76 65 61 63 6b  |e if datasaveack|
00008c40  0d 26 de 1f 20 20 20 20  20 20 20 20 62 65 71 20  |.&..        beq |
00008c50  20 20 20 20 64 61 74 61  73 61 76 65 61 63 6b 0d  |    datasaveack.|
00008c60  26 e8 40 20 20 20 20 20  20 20 20 74 65 71 20 20  |&.@        teq  |
00008c70  20 20 20 72 31 31 2c 23  34 20 20 20 20 20 20 20  |   r11,#4       |
00008c80  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 65 65  |           ; see|
00008c90  20 69 66 20 64 61 74 61  6c 6f 61 64 61 63 6b 0d  | if dataloadack.|
00008ca0  26 f2 1f 20 20 20 20 20  20 20 20 62 65 71 20 20  |&..        beq  |
00008cb0  20 20 20 64 61 74 61 6c  6f 61 64 61 63 6b 0d 26  |   dataloadack.&|
00008cc0  fc 3d 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |.=        teq   |
00008cd0  20 20 72 31 31 2c 23 33  20 20 20 20 20 20 20 20  |  r11,#3        |
00008ce0  20 20 20 20 20 20 20 20  20 20 3b 20 73 65 65 20  |          ; see |
00008cf0  69 66 20 64 61 74 61 6c  6f 61 64 0d 27 06 18 20  |if dataload.'.. |
00008d00  20 20 20 20 20 20 20 62  6e 65 20 20 20 20 20 70  |       bne     p|
00008d10  6f 6c 6c 0d 27 10 04 0d  27 1a 53 3b 20 2d 2d 2d  |oll.'...'.S; ---|
00008d20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00008d60  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 27 24 42 3b 20  |----------.'$B; |
00008d70  77 65 20 68 61 76 65 20  72 65 63 65 69 76 65 64  |we have received|
00008d80  20 61 20 64 61 74 61 6c  6f 61 64 20 6d 65 73 73  | a dataload mess|
00008d90  61 67 65 2e 20 73 65 65  20 69 66 20 77 65 20 63  |age. see if we c|
00008da0  61 6e 20 68 61 6e 64 6c  65 20 69 74 0d 27 2e 04  |an handle it.'..|
00008db0  0d 27 38 0d 2e 64 61 74  61 6c 6f 61 64 0d 27 42  |.'8..dataload.'B|
00008dc0  3b 20 20 20 20 20 20 20  20 6c 64 72 20 20 20 20  |;        ldr    |
00008dd0  20 72 30 2c 5b 72 31 2c  23 31 32 5d 20 20 20 20  | r0,[r1,#12]    |
00008de0  20 20 20 20 20 20 20 20  20 3b 20 72 30 20 3d 20  |         ; r0 = |
00008df0  79 6f 75 72 5f 72 65 66  0d 27 4c 41 20 20 20 20  |your_ref.'LA    |
00008e00  20 20 20 20 63 6d 70 20  20 20 20 20 72 30 2c 23  |    cmp     r0,#|
00008e10  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00008e20  20 20 20 20 3b 20 63 68  65 63 6b 20 73 65 6e 74  |    ; check sent|
00008e30  20 62 79 20 66 69 6c 65  72 0d 27 56 39 20 20 20  | by filer.'V9   |
00008e40  20 20 20 20 20 62 6e 65  20 20 20 20 20 70 6f 6c  |     bne     pol|
00008e50  6c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |l               |
00008e60  20 20 20 20 20 3b 20 70  6f 6c 6c 20 69 66 20 6e  |     ; poll if n|
00008e70  6f 74 0d 27 60 4a 20 20  20 20 20 20 20 20 6c 64  |ot.'`J        ld|
00008e80  72 20 20 20 20 20 72 33  2c 5b 72 31 5d 20 20 20  |r     r3,[r1]   |
00008e90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00008ea0  72 33 20 3d 20 6c 65 6e  67 74 68 20 6f 66 20 6d  |r3 = length of m|
00008eb0  65 73 73 61 67 65 20 62  6c 6f 63 6b 0d 27 6a 4b  |essage block.'jK|
00008ec0  20 20 20 20 20 20 20 20  73 75 62 20 20 20 20 20  |        sub     |
00008ed0  72 33 2c 72 33 2c 23 34  34 2d 66 69 6c 65 6e 61  |r3,r3,#44-filena|
00008ee0  6d 65 20 20 20 20 20 20  3b 20 72 33 20 3d 20 61  |me      ; r3 = a|
00008ef0  6d 6f 75 6e 74 20 6f 66  20 73 74 6f 72 61 67 65  |mount of storage|
00008f00  20 6e 65 65 64 65 64 0d  27 74 22 20 20 20 20 20  | needed.'t"     |
00008f10  20 20 20 62 6c 20 20 20  20 20 20 67 65 74 5f 68  |   bl      get_h|
00008f20  65 61 70 5f 62 6c 6f 63  6b 0d 27 7e 19 20 20 20  |eap_block.'~.   |
00008f30  20 20 20 20 20 74 65 71  20 20 20 20 20 72 32 2c  |     teq     r2,|
00008f40  23 30 0d 27 88 28 20 20  20 20 20 20 20 20 62 65  |#0.'.(        be|
00008f50  71 20 20 20 20 20 6e 6f  5f 6d 6f 72 65 5f 6d 65  |q     no_more_me|
00008f60  6d 6f 72 79 5f 65 72 72  6f 72 0d 27 92 21 20 20  |mory_error.'.!  |
00008f70  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 33  |      str     r3|
00008f80  2c 5b 72 32 2c 23 73 69  7a 65 5d 0d 27 9c 2d 20  |,[r2,#size].'.- |
00008f90  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
00008fa0  34 2c 73 74 61 72 74 5f  6c 69 6e 6b 65 64 5f 6c  |4,start_linked_l|
00008fb0  69 73 74 2d 26 63 30 30  0d 27 a6 1f 20 20 20 20  |ist-&c00.'..    |
00008fc0  20 20 20 20 61 64 64 20  20 20 20 20 72 34 2c 72  |    add     r4,r|
00008fd0  34 2c 23 26 63 30 30 0d  27 b0 13 2e 64 61 74 61  |4,#&c00.'...data|
00008fe0  6c 6f 61 64 5f 6c 6f 6f  70 31 0d 27 ba 21 20 20  |load_loop1.'.!  |
00008ff0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 35  |      ldr     r5|
00009000  2c 5b 72 34 2c 23 6e 65  78 74 5d 0d 27 c4 19 20  |,[r4,#next].'.. |
00009010  20 20 20 20 20 20 20 74  65 71 20 20 20 20 20 72  |       teq     r|
00009020  35 2c 23 30 0d 27 ce 19  20 20 20 20 20 20 20 20  |5,#0.'..        |
00009030  6d 6f 76 6e 65 20 20 20  72 34 2c 72 35 0d 27 d8  |movne   r4,r5.'.|
00009040  22 20 20 20 20 20 20 20  20 62 6e 65 20 20 20 20  |"        bne    |
00009050  20 64 61 74 61 6c 6f 61  64 5f 6c 6f 6f 70 31 0d  | dataload_loop1.|
00009060  27 e2 4c 20 20 20 20 20  20 20 20 73 74 72 20 20  |'.L        str  |
00009070  20 20 20 72 32 2c 5b 72  34 2c 23 6e 65 78 74 5d  |   r2,[r4,#next]|
00009080  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 6f  |           ; sto|
00009090  72 65 20 70 6f 69 6e 74  65 72 20 74 6f 20 6e 65  |re pointer to ne|
000090a0  78 74 20 64 61 74 61 20  73 65 74 0d 27 ec 50 20  |xt data set.'.P |
000090b0  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
000090c0  35 2c 5b 72 32 2c 23 6e  65 78 74 5d 20 20 20 20  |5,[r2,#next]    |
000090d0  20 20 20 20 20 20 20 3b  20 72 35 20 3d 20 30 2c  |       ; r5 = 0,|
000090e0  20 6d 61 72 6b 20 6e 65  78 74 20 64 61 74 61 20  | mark next data |
000090f0  73 65 74 20 61 73 20 6c  61 73 74 0d 27 f6 19 20  |set as last.'.. |
00009100  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
00009110  34 2c 72 32 0d 28 00 50  20 20 20 20 20 20 20 20  |4,r2.(.P        |
00009120  6c 64 72 20 20 20 20 20  72 30 2c 5b 72 31 2c 23  |ldr     r0,[r1,#|
00009130  34 30 5d 20 20 20 20 20  20 20 20 20 20 20 20 20  |40]             |
00009140  3b 20 72 30 20 3d 20 66  69 6c 65 74 79 70 65 20  |; r0 = filetype |
00009150  6f 66 20 66 69 6c 65 20  74 6f 20 62 65 20 6c 6f  |of file to be lo|
00009160  61 64 65 64 0d 28 0a 25  20 20 20 20 20 20 20 20  |aded.(.%        |
00009170  73 74 72 20 20 20 20 20  72 30 2c 5b 72 34 2c 23  |str     r0,[r4,#|
00009180  66 69 6c 65 74 79 70 65  5d 0d 28 14 49 20 20 20  |filetype].(.I   |
00009190  20 20 20 20 20 61 64 64  20 20 20 20 20 72 30 2c  |     add     r0,|
000091a0  72 31 2c 23 34 34 20 20  20 20 20 20 20 20 20 20  |r1,#44          |
000091b0  20 20 20 20 20 3b 20 72  30 20 2d 3e 20 66 69 6c  |     ; r0 -> fil|
000091c0  65 6e 61 6d 65 20 74 6f  20 62 65 20 6c 6f 61 64  |ename to be load|
000091d0  65 64 0d 28 1e 23 20 20  20 20 20 20 20 20 61 64  |ed.(.#        ad|
000091e0  64 20 20 20 20 20 72 32  2c 72 34 2c 23 66 69 6c  |d     r2,r4,#fil|
000091f0  65 6e 61 6d 65 0d 28 28  1c 20 20 20 20 20 20 20  |ename.((.       |
00009200  20 73 75 62 20 20 20 20  20 72 35 2c 72 32 2c 72  | sub     r5,r2,r|
00009210  34 0d 28 32 13 2e 64 61  74 61 6c 6f 61 64 5f 6c  |4.(2..dataload_l|
00009220  6f 6f 70 32 0d 28 3c 1e  20 20 20 20 20 20 20 20  |oop2.(<.        |
00009230  6c 64 72 62 20 20 20 20  72 33 2c 5b 72 30 5d 2c  |ldrb    r3,[r0],|
00009240  23 31 0d 28 46 1e 20 20  20 20 20 20 20 20 73 74  |#1.(F.        st|
00009250  72 62 20 20 20 20 72 33  2c 5b 72 32 5d 2c 23 31  |rb    r3,[r2],#1|
00009260  0d 28 50 1c 20 20 20 20  20 20 20 20 74 65 71 20  |.(P.        teq |
00009270  20 20 20 20 72 33 2c 23  97 22 2e 22 0d 28 5a 45  |    r3,#.".".(ZE|
00009280  20 20 20 20 20 20 20 20  73 75 62 65 71 20 20 20  |        subeq   |
00009290  72 35 2c 72 32 2c 72 34  20 20 20 20 20 20 20 20  |r5,r2,r4        |
000092a0  20 20 20 20 20 20 20 20  3b 20 72 35 20 3d 20 6f  |        ; r5 = o|
000092b0  66 66 73 65 74 20 74 6f  20 6c 65 61 66 6e 61 6d  |ffset to leafnam|
000092c0  65 0d 28 64 19 20 20 20  20 20 20 20 20 74 65 71  |e.(d.        teq|
000092d0  20 20 20 20 20 72 33 2c  23 30 0d 28 6e 22 20 20  |     r3,#0.(n"  |
000092e0  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 64 61  |      bne     da|
000092f0  74 61 6c 6f 61 64 5f 6c  6f 6f 70 32 0d 28 78 2f  |taload_loop2.(x/|
00009300  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
00009310  72 35 2c 5b 72 34 2c 23  6f 66 66 73 65 74 5f 74  |r5,[r4,#offset_t|
00009320  6f 5f 6c 65 61 66 6e 61  6d 65 5d 0d 28 82 53 20  |o_leafname].(.S |
00009330  20 20 20 20 20 20 20 61  64 64 20 20 20 20 20 72  |       add     r|
00009340  35 2c 72 35 2c 72 34 20  20 20 20 20 20 20 20 20  |5,r5,r4         |
00009350  20 20 20 20 20 20 20 3b  20 72 35 20 2d 3e 20 6c  |       ; r5 -> l|
00009360  65 61 66 6e 61 6d 65 2c  20 74 6f 20 75 73 65 20  |eafname, to use |
00009370  61 73 20 73 70 72 69 74  65 20 74 65 78 74 0d 28  |as sprite text.(|
00009380  8c 19 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |..        mov   |
00009390  20 20 72 32 2c 72 31 0d  28 96 25 20 20 20 20 20  |  r2,r1.(.%     |
000093a0  20 20 20 61 64 72 20 20  20 20 20 72 31 2c 77 6f  |   adr     r1,wo|
000093b0  72 6b 73 70 61 63 65 2b  26 63 30 30 0d 28 a0 1f  |rkspace+&c00.(..|
000093c0  20 20 20 20 20 20 20 20  73 75 62 20 20 20 20 20  |        sub     |
000093d0  72 31 2c 72 31 2c 23 26  63 30 30 0d 28 aa 2f 20  |r1,r1,#&c00.(./ |
000093e0  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
000093f0  30 2c 62 61 63 6b 67 72  6f 75 6e 64 5f 77 69 6e  |0,background_win|
00009400  64 6f 77 5f 68 61 6e 64  6c 65 0d 28 b4 1b 20 20  |dow_handle.(..  |
00009410  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 30  |      str     r0|
00009420  2c 5b 72 31 5d 0d 28 be  50 20 20 20 20 20 20 20  |,[r1].(.P       |
00009430  20 6c 64 72 20 20 20 20  20 72 30 2c 5b 72 32 2c  | ldr     r0,[r2,|
00009440  23 32 38 5d 20 20 20 20  20 20 20 20 20 20 20 20  |#28]            |
00009450  20 3b 20 72 30 20 3d 20  78 20 63 6f 6f 72 64 69  | ; r0 = x coordi|
00009460  6e 61 74 65 20 77 68 65  72 65 20 64 72 61 67 20  |nate where drag |
00009470  65 6e 64 65 64 0d 28 c8  1f 20 20 20 20 20 20 20  |ended.(..       |
00009480  20 73 75 62 20 20 20 20  20 72 30 2c 72 30 2c 23  | sub     r0,r0,#|
00009490  35 2a 31 36 0d 28 d2 3b  20 20 20 20 20 20 20 20  |5*16.(.;        |
000094a0  73 74 72 20 20 20 20 20  72 30 2c 5b 72 31 2c 23  |str     r0,[r1,#|
000094b0  34 5d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4]              |
000094c0  3b 20 6d 69 6e 20 78 20  6f 66 20 69 63 6f 6e 0d  |; min x of icon.|
000094d0  28 dc 27 20 20 20 20 20  20 20 20 73 74 72 20 20  |(.'        str  |
000094e0  20 20 20 72 30 2c 5b 72  34 2c 23 78 5f 70 6f 73  |   r0,[r4,#x_pos|
000094f0  69 74 69 6f 6e 5d 0d 28  e6 20 20 20 20 20 20 20  |ition].(.       |
00009500  20 20 61 64 64 20 20 20  20 20 72 30 2c 72 30 2c  |  add     r0,r0,|
00009510  23 31 30 2a 31 36 0d 28  f0 3b 20 20 20 20 20 20  |#10*16.(.;      |
00009520  20 20 73 74 72 20 20 20  20 20 72 30 2c 5b 72 31  |  str     r0,[r1|
00009530  2c 23 31 32 5d 20 20 20  20 20 20 20 20 20 20 20  |,#12]           |
00009540  20 20 3b 20 6d 61 78 20  78 20 6f 66 20 69 63 6f  |  ; max x of ico|
00009550  6e 0d 28 fa 50 20 20 20  20 20 20 20 20 6c 64 72  |n.(.P        ldr|
00009560  20 20 20 20 20 72 30 2c  5b 72 32 2c 23 33 32 5d  |     r0,[r2,#32]|
00009570  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00009580  30 20 3d 20 79 20 63 6f  6f 72 64 69 6e 61 74 65  |0 = y coordinate|
00009590  20 77 68 65 72 65 20 64  72 61 67 20 65 6e 64 65  | where drag ende|
000095a0  64 0d 29 04 1d 20 20 20  20 20 20 20 20 73 75 62  |d.)..        sub|
000095b0  20 20 20 20 20 72 30 2c  72 30 2c 23 35 34 0d 29  |     r0,r0,#54.)|
000095c0  0e 3b 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |.;        str   |
000095d0  20 20 72 30 2c 5b 72 31  2c 23 38 5d 20 20 20 20  |  r0,[r1,#8]    |
000095e0  20 20 20 20 20 20 20 20  20 20 3b 20 6d 69 6e 20  |          ; min |
000095f0  79 20 6f 66 20 69 63 6f  6e 0d 29 18 27 20 20 20  |y of icon.).'   |
00009600  20 20 20 20 20 73 74 72  20 20 20 20 20 72 30 2c  |     str     r0,|
00009610  5b 72 34 2c 23 79 5f 70  6f 73 69 74 69 6f 6e 5d  |[r4,#y_position]|
00009620  0d 29 22 1e 20 20 20 20  20 20 20 20 61 64 64 20  |.)".        add |
00009630  20 20 20 20 72 30 2c 72  30 2c 23 31 30 38 0d 29  |    r0,r0,#108.)|
00009640  2c 3b 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |,;        str   |
00009650  20 20 72 30 2c 5b 72 31  2c 23 31 36 5d 20 20 20  |  r0,[r1,#16]   |
00009660  20 20 20 20 20 20 20 20  20 20 3b 20 6d 61 78 20  |          ; max |
00009670  79 20 6f 66 20 69 63 6f  6e 0d 29 36 21 20 20 20  |y of icon.)6!   |
00009680  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 30 2c  |     ldr     r0,|
00009690  69 63 6f 6e 5f 66 6c 61  67 73 0d 29 40 1f 20 20  |icon_flags.)@.  |
000096a0  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 30  |      str     r0|
000096b0  2c 5b 72 31 2c 23 32 30  5d 0d 29 4a 4a 20 20 20  |,[r1,#20].)JJ   |
000096c0  20 20 20 20 20 73 74 72  20 20 20 20 20 72 35 2c  |     str     r5,|
000096d0  5b 72 31 2c 23 32 34 5d  20 20 20 20 20 20 20 20  |[r1,#24]        |
000096e0  20 20 20 20 20 3b 20 73  74 6f 72 65 20 70 6f 69  |     ; store poi|
000096f0  6e 74 65 72 20 74 6f 20  73 70 72 69 74 65 20 74  |nter to sprite t|
00009700  65 78 74 0d 29 54 26 20  20 20 20 20 20 20 20 61  |ext.)T&        a|
00009710  64 64 20 20 20 20 20 72  30 2c 72 34 2c 23 73 70  |dd     r0,r4,#sp|
00009720  72 69 74 65 5f 6e 61 6d  65 0d 29 5e 50 20 20 20  |rite_name.)^P   |
00009730  20 20 20 20 20 73 74 72  20 20 20 20 20 72 30 2c  |     str     r0,|
00009740  5b 72 31 2c 23 32 38 5d  20 20 20 20 20 20 20 20  |[r1,#28]        |
00009750  20 20 20 20 20 3b 20 73  74 6f 72 65 20 70 6f 69  |     ; store poi|
00009760  6e 74 65 72 20 74 6f 20  76 61 6c 69 64 61 74 69  |nter to validati|
00009770  6f 6e 20 73 74 72 69 6e  67 0d 29 68 1a 20 20 20  |on string.)h.   |
00009780  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 32 2c  |     mov     r2,|
00009790  23 31 31 0d 29 72 1f 20  20 20 20 20 20 20 20 73  |#11.)r.        s|
000097a0  74 72 20 20 20 20 20 72  32 2c 5b 72 31 2c 23 33  |tr     r2,[r1,#3|
000097b0  32 5d 0d 29 7c 1c 20 20  20 20 20 20 20 20 6d 6f  |2].)|.        mo|
000097c0  76 20 20 20 20 20 72 32  2c 23 97 22 53 22 0d 29  |v     r2,#."S".)|
000097d0  86 1e 20 20 20 20 20 20  20 20 73 74 72 62 20 20  |..        strb  |
000097e0  20 20 72 32 2c 5b 72 30  5d 2c 23 31 0d 29 90 25  |  r2,[r0],#1.).%|
000097f0  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
00009800  72 33 2c 5b 72 34 2c 23  66 69 6c 65 74 79 70 65  |r3,[r4,#filetype|
00009810  5d 0d 29 9a 44 20 20 20  20 20 20 20 20 63 6d 70  |].).D        cmp|
00009820  20 20 20 20 20 72 33 2c  23 26 31 30 30 30 20 20  |     r3,#&1000  |
00009830  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 73  |             ; s|
00009840  65 65 20 69 66 20 68 61  73 20 6e 6f 20 66 69 6c  |ee if has no fil|
00009850  65 74 79 70 65 0d 29 a4  1f 20 20 20 20 20 20 20  |etype.)..       |
00009860  20 62 67 65 20 20 20 20  20 6e 6f 5f 66 69 6c 65  | bge     no_file|
00009870  74 79 70 65 0d 29 ae 1c  20 20 20 20 20 20 20 20  |type.)..        |
00009880  6d 6f 76 20 20 20 20 20  72 32 2c 23 97 22 66 22  |mov     r2,#."f"|
00009890  0d 29 b8 1e 20 20 20 20  20 20 20 20 73 74 72 62  |.)..        strb|
000098a0  20 20 20 20 72 32 2c 5b  72 30 5d 2c 23 31 0d 29  |    r2,[r0],#1.)|
000098b0  c2 1c 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |..        mov   |
000098c0  20 20 72 32 2c 23 97 22  69 22 0d 29 cc 1e 20 20  |  r2,#."i".)..  |
000098d0  20 20 20 20 20 20 73 74  72 62 20 20 20 20 72 32  |      strb    r2|
000098e0  2c 5b 72 30 5d 2c 23 31  0d 29 d6 1c 20 20 20 20  |,[r0],#1.)..    |
000098f0  20 20 20 20 6d 6f 76 20  20 20 20 20 72 32 2c 23  |    mov     r2,#|
00009900  97 22 6c 22 0d 29 e0 1e  20 20 20 20 20 20 20 20  |."l".)..        |
00009910  73 74 72 62 20 20 20 20  72 32 2c 5b 72 30 5d 2c  |strb    r2,[r0],|
00009920  23 31 0d 29 ea 1c 20 20  20 20 20 20 20 20 6d 6f  |#1.)..        mo|
00009930  76 20 20 20 20 20 72 32  2c 23 97 22 65 22 0d 29  |v     r2,#."e".)|
00009940  f4 1e 20 20 20 20 20 20  20 20 73 74 72 62 20 20  |..        strb  |
00009950  20 20 72 32 2c 5b 72 30  5d 2c 23 31 0d 29 fe 53  |  r2,[r0],#1.).S|
00009960  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
00009970  72 31 2c 72 30 20 20 20  20 20 20 20 20 20 20 20  |r1,r0           |
00009980  20 20 20 20 20 20 20 20  3b 20 72 31 20 3d 20 62  |        ; r1 = b|
00009990  75 66 66 65 72 20 74 6f  20 73 74 6f 72 65 20 63  |uffer to store c|
000099a0  6f 6e 76 65 72 74 65 64  20 6e 75 6d 62 65 72 0d  |onverted number.|
000099b0  2a 08 3b 20 20 20 20 20  20 20 20 6d 6f 76 20 20  |*.;        mov  |
000099c0  20 20 20 72 30 2c 72 33  20 20 20 20 20 20 20 20  |   r0,r3        |
000099d0  20 20 20 20 20 20 20 20  20 20 20 3b 20 72 30 20  |           ; r0 |
000099e0  3d 20 66 69 6c 65 74 79  70 65 0d 2a 12 3c 20 20  |= filetype.*.<  |
000099f0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 32  |      mov     r2|
00009a00  2c 23 35 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#5             |
00009a10  20 20 20 20 20 20 3b 20  73 69 7a 65 20 6f 66 20  |      ; size of |
00009a20  62 75 66 66 65 72 0d 2a  1c 25 20 20 20 20 20 20  |buffer.*.%      |
00009a30  20 20 73 77 69 20 20 20  20 20 22 58 4f 53 5f 43  |  swi     "XOS_C|
00009a40  6f 6e 76 65 72 74 48 65  78 34 22 0d 2a 26 1f 20  |onvertHex4".*&. |
00009a50  20 20 20 20 20 20 20 62  76 73 20 20 20 20 20 66  |       bvs     f|
00009a60  61 74 61 6c 5f 65 72 72  6f 72 0d 2a 30 1c 20 20  |atal_error.*0.  |
00009a70  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 32  |      mov     r2|
00009a80  2c 23 97 22 5f 22 0d 2a  3a 1b 20 20 20 20 20 20  |,#."_".*:.      |
00009a90  20 20 73 74 72 62 20 20  20 20 72 32 2c 5b 72 30  |  strb    r2,[r0|
00009aa0  5d 0d 2a 44 3f 20 20 20  20 20 20 20 20 73 75 62  |].*D?        sub|
00009ab0  20 20 20 20 20 72 32 2c  72 30 2c 23 34 20 20 20  |     r2,r0,#4   |
00009ac0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00009ad0  32 20 2d 3e 20 73 70 72  69 74 65 20 6e 61 6d 65  |2 -> sprite name|
00009ae0  0d 2a 4e 28 20 20 20 20  20 20 20 20 62 6c 20 20  |.*N(        bl  |
00009af0  20 20 20 20 73 65 65 5f  69 66 5f 73 70 72 69 74  |    see_if_sprit|
00009b00  65 5f 65 78 69 73 74 73  0d 2a 58 4c 20 20 20 20  |e_exists.*XL    |
00009b10  20 20 20 20 6d 6f 76 76  73 20 20 20 72 30 2c 72  |    movvs   r0,r|
00009b20  32 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2               |
00009b30  20 20 20 20 3b 20 72 30  20 2d 3e 20 77 68 65 72  |    ; r0 -> wher|
00009b40  65 20 74 6f 20 70 75 74  20 73 70 72 69 74 65 20  |e to put sprite |
00009b50  6e 61 6d 65 0d 2a 62 48  20 20 20 20 20 20 20 20  |name.*bH        |
00009b60  61 64 72 76 73 20 20 20  72 32 2c 66 69 6c 65 5f  |adrvs   r2,file_|
00009b70  78 78 78 20 20 20 20 20  20 20 20 20 20 20 20 20  |xxx             |
00009b80  3b 20 73 70 72 69 74 65  20 77 61 73 6e 27 74 20  |; sprite wasn't |
00009b90  66 6f 75 6e 64 20 73 6f  20 75 73 65 0d 2a 6c 3e  |found so use.*l>|
00009ba0  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
00009bb0  6e 6f 5f 66 69 6c 65 74  79 70 65 5f 6c 6f 6f 70  |no_filetype_loop|
00009bc0  20 20 20 20 20 20 20 20  3b 20 66 69 6c 65 5f 78  |        ; file_x|
00009bd0  78 78 20 69 6e 73 74 65  61 64 0d 2a 76 23 20 20  |xx instead.*v#  |
00009be0  20 20 20 20 20 20 62 20  20 20 20 20 20 20 66 69  |      b       fi|
00009bf0  6e 69 73 68 5f 64 61 74  61 6c 6f 61 64 0d 2a 80  |nish_dataload.*.|
00009c00  10 2e 61 70 70 6c 69 63  61 74 69 6f 6e 0d 2a 8a  |..application.*.|
00009c10  2f 20 20 20 20 20 20 20  20 6c 64 72 20 20 20 20  |/        ldr    |
00009c20  20 72 32 2c 5b 72 34 2c  23 6f 66 66 73 65 74 5f  | r2,[r4,#offset_|
00009c30  74 6f 5f 6c 65 61 66 6e  61 6d 65 5d 0d 2a 94 1c  |to_leafname].*..|
00009c40  20 20 20 20 20 20 20 20  61 64 64 20 20 20 20 20  |        add     |
00009c50  72 32 2c 72 32 2c 72 34  0d 2a 9e 28 20 20 20 20  |r2,r2,r4.*.(    |
00009c60  20 20 20 20 62 6c 20 20  20 20 20 20 73 65 65 5f  |    bl      see_|
00009c70  69 66 5f 73 70 72 69 74  65 5f 65 78 69 73 74 73  |if_sprite_exists|
00009c80  0d 2a a8 4e 20 20 20 20  20 20 20 20 61 64 72 76  |.*.N        adrv|
00009c90  73 20 20 20 72 32 2c 61  70 70 6c 69 63 61 74 69  |s   r2,applicati|
00009ca0  6f 6e 5f 73 70 72 69 74  65 20 20 20 3b 20 75 73  |on_sprite   ; us|
00009cb0  65 20 22 61 70 70 6c 69  63 61 74 69 6f 6e 22 20  |e "application" |
00009cc0  61 73 20 73 70 72 69 74  65 20 6e 61 6d 65 0d 2a  |as sprite name.*|
00009cd0  b2 4a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.J              |
00009ce0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00009cf0  20 20 20 20 20 20 20 20  20 20 3b 20 61 73 20 73  |          ; as s|
00009d00  70 72 69 74 65 20 63 6f  75 6c 64 20 6e 6f 74 20  |prite could not |
00009d10  62 65 20 66 6f 75 6e 64  0d 2a bc 24 20 20 20 20  |be found.*.$    |
00009d20  20 20 20 20 62 20 20 20  20 20 20 20 6e 6f 5f 66  |    b       no_f|
00009d30  69 6c 65 74 79 70 65 5f  6c 6f 6f 70 0d 2a c6 04  |iletype_loop.*..|
00009d40  0d 2a d0 17 2e 61 70 70  6c 69 63 61 74 69 6f 6e  |.*...application|
00009d50  5f 73 70 72 69 74 65 0d  2a da 24 20 20 20 20 20  |_sprite.*.$     |
00009d60  20 20 20 65 71 75 73 20  20 20 20 22 61 70 70 6c  |   equs    "appl|
00009d70  69 63 61 74 69 6f 6e 22  2b bd 30 0d 2a e4 0e 2e  |ication"+.0.*...|
00009d80  64 69 72 65 63 74 6f 72  79 0d 2a ee 22 20 20 20  |directory.*."   |
00009d90  20 20 20 20 20 65 71 75  73 20 20 20 20 22 64 69  |     equs    "di|
00009da0  72 65 63 74 6f 72 79 22  2b bd 30 0d 2a f8 0d 2e  |rectory"+.0.*...|
00009db0  66 69 6c 65 5f 78 78 78  0d 2b 02 21 20 20 20 20  |file_xxx.+.!    |
00009dc0  20 20 20 20 65 71 75 73  20 20 20 20 22 66 69 6c  |    equs    "fil|
00009dd0  65 5f 78 78 78 22 2b bd  30 0d 2b 0c 11 20 20 20  |e_xxx"+.0.+..   |
00009de0  20 20 20 20 20 61 6c 69  67 6e 0d 2b 16 04 0d 2b  |     align.+...+|
00009df0  20 10 2e 6e 6f 5f 66 69  6c 65 74 79 70 65 0d 2b  | ..no_filetype.+|
00009e00  2a 1d 20 20 20 20 20 20  20 20 63 6d 70 20 20 20  |*.        cmp   |
00009e10  20 20 72 33 2c 23 26 32  30 30 30 0d 2b 34 20 20  |  r3,#&2000.+4  |
00009e20  20 20 20 20 20 20 20 61  64 72 6c 74 20 20 20 72  |       adrlt   r|
00009e30  32 2c 64 69 72 65 63 74  6f 72 79 0d 2b 3e 1f 20  |2,directory.+>. |
00009e40  20 20 20 20 20 20 20 62  65 71 20 20 20 20 20 61  |       beq     a|
00009e50  70 70 6c 69 63 61 74 69  6f 6e 0d 2b 48 1f 20 20  |pplication.+H.  |
00009e60  20 20 20 20 20 20 61 64  72 67 74 20 20 20 72 32  |      adrgt   r2|
00009e70  2c 66 69 6c 65 5f 78 78  78 0d 2b 52 15 2e 6e 6f  |,file_xxx.+R..no|
00009e80  5f 66 69 6c 65 74 79 70  65 5f 6c 6f 6f 70 0d 2b  |_filetype_loop.+|
00009e90  5c 1e 20 20 20 20 20 20  20 20 6c 64 72 62 20 20  |\.        ldrb  |
00009ea0  20 20 72 33 2c 5b 72 32  5d 2c 23 31 0d 2b 66 1e  |  r3,[r2],#1.+f.|
00009eb0  20 20 20 20 20 20 20 20  73 74 72 62 20 20 20 20  |        strb    |
00009ec0  72 33 2c 5b 72 30 5d 2c  23 31 0d 2b 70 19 20 20  |r3,[r0],#1.+p.  |
00009ed0  20 20 20 20 20 20 74 65  71 20 20 20 20 20 72 33  |      teq     r3|
00009ee0  2c 23 30 0d 2b 7a 24 20  20 20 20 20 20 20 20 62  |,#0.+z$        b|
00009ef0  6e 65 20 20 20 20 20 6e  6f 5f 66 69 6c 65 74 79  |ne     no_filety|
00009f00  70 65 5f 6c 6f 6f 70 0d  2b 84 04 0d 2b 8e 14 2e  |pe_loop.+...+...|
00009f10  66 69 6e 69 73 68 5f 64  61 74 61 6c 6f 61 64 0d  |finish_dataload.|
00009f20  2b 98 25 20 20 20 20 20  20 20 20 61 64 72 20 20  |+.%        adr  |
00009f30  20 20 20 72 31 2c 77 6f  72 6b 73 70 61 63 65 2b  |   r1,workspace+|
00009f40  26 63 30 30 0d 2b a2 1f  20 20 20 20 20 20 20 20  |&c00.+..        |
00009f50  73 75 62 20 20 20 20 20  72 31 2c 72 31 2c 23 26  |sub     r1,r1,#&|
00009f60  63 30 30 0d 2b ac 26 20  20 20 20 20 20 20 20 73  |c00.+.&        s|
00009f70  77 69 20 20 20 20 20 22  58 57 69 6d 70 5f 43 72  |wi     "XWimp_Cr|
00009f80  65 61 74 65 49 63 6f 6e  22 0d 2b b6 1f 20 20 20  |eateIcon".+..   |
00009f90  20 20 20 20 20 62 76 73  20 20 20 20 20 66 61 74  |     bvs     fat|
00009fa0  61 6c 5f 65 72 72 6f 72  0d 2b c0 28 20 20 20 20  |al_error.+.(    |
00009fb0  20 20 20 20 73 74 72 62  20 20 20 20 72 30 2c 5b  |    strb    r0,[|
00009fc0  72 34 2c 23 69 63 6f 6e  5f 68 61 6e 64 6c 65 5d  |r4,#icon_handle]|
00009fd0  0d 2b ca 19 20 20 20 20  20 20 20 20 6d 6f 76 20  |.+..        mov |
00009fe0  20 20 20 20 72 30 2c 23  30 0d 2b d4 25 20 20 20  |    r0,#0.+.%   |
00009ff0  20 20 20 20 20 73 74 72  62 20 20 20 20 72 30 2c  |     strb    r0,|
0000a000  5b 72 34 2c 23 73 65 6c  65 63 74 65 64 5d 0d 2b  |[r4,#selected].+|
0000a010  de 40 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.@        ldr   |
0000a020  20 20 72 30 2c 5b 72 31  5d 20 20 20 20 20 20 20  |  r0,[r1]       |
0000a030  20 20 20 20 20 20 20 20  20 20 3b 20 72 30 20 3d  |          ; r0 =|
0000a040  20 77 69 6e 64 6f 77 20  68 61 6e 64 6c 65 0d 2b  | window handle.+|
0000a050  e8 38 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.8        ldr   |
0000a060  20 20 72 32 2c 5b 72 31  2c 23 38 5d 20 20 20 20  |  r2,[r1,#8]    |
0000a070  20 20 20 20 20 20 20 20  20 20 3b 20 72 32 20 3d  |          ; r2 =|
0000a080  20 6d 69 6e 20 79 0d 2b  f2 38 20 20 20 20 20 20  | min y.+.8      |
0000a090  20 20 6c 64 72 20 20 20  20 20 72 33 2c 5b 72 31  |  ldr     r3,[r1|
0000a0a0  2c 23 31 32 5d 20 20 20  20 20 20 20 20 20 20 20  |,#12]           |
0000a0b0  20 20 3b 20 72 33 20 3d  20 6d 61 78 20 78 0d 2b  |  ; r3 = max x.+|
0000a0c0  fc 38 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |.8        ldr   |
0000a0d0  20 20 72 34 2c 5b 72 31  2c 23 31 36 5d 20 20 20  |  r4,[r1,#16]   |
0000a0e0  20 20 20 20 20 20 20 20  20 20 3b 20 72 34 20 3d  |          ; r4 =|
0000a0f0  20 6d 61 78 20 79 0d 2c  06 38 20 20 20 20 20 20  | max y.,.8      |
0000a100  20 20 6c 64 72 20 20 20  20 20 72 31 2c 5b 72 31  |  ldr     r1,[r1|
0000a110  2c 23 34 5d 20 20 20 20  20 20 20 20 20 20 20 20  |,#4]            |
0000a120  20 20 3b 20 72 31 20 3d  20 6d 69 6e 20 78 0d 2c  |  ; r1 = min x.,|
0000a130  10 27 20 20 20 20 20 20  20 20 73 77 69 20 20 20  |.'        swi   |
0000a140  20 20 22 58 57 69 6d 70  5f 46 6f 72 63 65 52 65  |  "XWimp_ForceRe|
0000a150  64 72 61 77 22 0d 2c 1a  1f 20 20 20 20 20 20 20  |draw".,..       |
0000a160  20 62 76 73 20 20 20 20  20 66 61 74 61 6c 5f 65  | bvs     fatal_e|
0000a170  72 72 6f 72 0d 2c 24 26  20 20 20 20 20 20 20 20  |rror.,$&        |
0000a180  6c 64 72 62 20 20 20 20  72 30 2c 6e 75 6d 62 65  |ldrb    r0,numbe|
0000a190  72 5f 6f 66 5f 69 63 6f  6e 73 0d 2c 2e 1c 20 20  |r_of_icons.,..  |
0000a1a0  20 20 20 20 20 20 61 64  64 20 20 20 20 20 72 30  |      add     r0|
0000a1b0  2c 72 30 2c 23 31 0d 2c  38 26 20 20 20 20 20 20  |,r0,#1.,8&      |
0000a1c0  20 20 73 74 72 62 20 20  20 20 72 30 2c 6e 75 6d  |  strb    r0,num|
0000a1d0  62 65 72 5f 6f 66 5f 69  63 6f 6e 73 0d 2c 42 26  |ber_of_icons.,B&|
0000a1e0  20 20 20 20 20 20 20 20  61 64 72 20 20 20 20 20  |        adr     |
0000a1f0  72 31 2c 70 6f 6c 6c 5f  73 70 61 63 65 2b 26 63  |r1,poll_space+&c|
0000a200  30 30 0d 2c 4c 1f 20 20  20 20 20 20 20 20 73 75  |00.,L.        su|
0000a210  62 20 20 20 20 20 72 31  2c 72 31 2c 23 26 63 30  |b     r1,r1,#&c0|
0000a220  30 0d 2c 56 1f 20 20 20  20 20 20 20 20 6c 64 72  |0.,V.        ldr|
0000a230  20 20 20 20 20 72 30 2c  5b 72 31 2c 23 31 32 5d  |     r0,[r1,#12]|
0000a240  0d 2c 60 1e 20 20 20 20  20 20 20 20 73 74 72 62  |.,`.        strb|
0000a250  20 20 20 20 72 30 2c 5b  72 31 2c 23 38 5d 0d 2c  |    r0,[r1,#8].,|
0000a260  6a 3d 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |j=        ldr   |
0000a270  20 20 72 32 2c 5b 72 31  2c 23 34 5d 20 20 20 20  |  r2,[r1,#4]    |
0000a280  20 20 20 20 20 20 20 20  20 20 3b 20 72 65 70 6c  |          ; repl|
0000a290  79 20 74 6f 20 73 65 6e  64 65 72 0d 2c 74 3d 20  |y to sender.,t= |
0000a2a0  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
0000a2b0  30 2c 23 31 37 20 20 20  20 20 20 20 20 20 20 20  |0,#17           |
0000a2c0  20 20 20 20 20 20 20 3b  20 6e 6f 20 72 65 70 6c  |       ; no repl|
0000a2d0  79 20 6e 65 65 64 65 64  0d 2c 7e 27 20 20 20 20  |y needed.,~'    |
0000a2e0  20 20 20 20 73 77 69 20  20 20 20 20 22 58 57 69  |    swi     "XWi|
0000a2f0  6d 70 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 0d  |mp_SendMessage".|
0000a300  2c 88 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |,..        bvs  |
0000a310  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 2c  |   fatal_error.,|
0000a320  92 18 20 20 20 20 20 20  20 20 62 20 20 20 20 20  |..        b     |
0000a330  20 20 70 6f 6c 6c 0d 2c  9c 04 0d 2c a6 19 2e 6e  |  poll.,...,...n|
0000a340  6f 5f 6d 6f 72 65 5f 6d  65 6d 6f 72 79 5f 65 72  |o_more_memory_er|
0000a350  72 6f 72 0d 2c b0 31 20  20 20 20 20 20 20 20 61  |ror.,.1        a|
0000a360  64 72 20 20 20 20 20 72  30 2c 6e 6f 5f 6d 6f 72  |dr     r0,no_mor|
0000a370  65 5f 6d 65 6d 6f 72 79  5f 65 72 72 6f 72 5f 62  |e_memory_error_b|
0000a380  6c 6f 63 6b 0d 2c ba 23  20 20 20 20 20 20 20 20  |lock.,.#        |
0000a390  62 6c 20 20 20 20 20 20  72 65 70 6f 72 74 5f 65  |bl      report_e|
0000a3a0  72 72 6f 72 5f 6f 6b 0d  2c c4 18 20 20 20 20 20  |rror_ok.,..     |
0000a3b0  20 20 20 62 20 20 20 20  20 20 20 70 6f 6c 6c 0d  |   b       poll.|
0000a3c0  2c ce 1f 2e 6e 6f 5f 6d  6f 72 65 5f 6d 65 6d 6f  |,...no_more_memo|
0000a3d0  72 79 5f 65 72 72 6f 72  5f 62 6c 6f 63 6b 0d 2c  |ry_error_block.,|
0000a3e0  d8 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
0000a3f0  20 20 30 0d 2c e2 2f 20  20 20 20 20 20 20 20 65  |  0.,./        e|
0000a400  71 75 73 20 20 20 20 22  4e 6f 74 20 65 6e 6f 75  |qus    "Not enou|
0000a410  67 68 20 66 72 65 65 20  6d 65 6d 6f 72 79 22 2b  |gh free memory"+|
0000a420  bd 30 0d 2c ec 11 20 20  20 20 20 20 20 20 61 6c  |.0.,..        al|
0000a430  69 67 6e 0d 2c f6 0f 2e  69 63 6f 6e 5f 66 6c 61  |ign.,...icon_fla|
0000a440  67 73 0d 2d 00 58 20 20  20 20 20 20 20 20 65 71  |gs.-.X        eq|
0000a450  75 64 20 20 20 20 31 2b  28 31 20 3c 3c 20 31 29  |ud    1+(1 << 1)|
0000a460  2b 28 31 20 3c 3c 20 33  29 2b 28 31 20 3c 3c 20  |+(1 << 3)+(1 << |
0000a470  35 29 2b 28 31 20 3c 3c  20 38 29 2b 28 31 30 20  |5)+(1 << 8)+(10 |
0000a480  3c 3c 20 31 32 29 2b 28  37 20 3c 3c 20 32 34 29  |<< 12)+(7 << 24)|
0000a490  2b 28 34 20 3c 3c 20 32  38 29 0d 2d 0a 04 0d 2d  |+(4 << 28).-...-|
0000a4a0  14 53 3b 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.S; ------------|
0000a4b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000a4f0  2d 0d 2d 1e 2c 3b 20 77  65 20 68 61 76 65 20 72  |-.-.,; we have r|
0000a500  65 63 65 69 76 65 64 20  61 20 64 61 74 61 73 61  |eceived a datasa|
0000a510  76 65 61 63 6b 20 6d 65  73 73 61 67 65 0d 2d 28  |veack message.-(|
0000a520  04 0d 2d 32 10 2e 64 61  74 61 73 61 76 65 61 63  |..-2..datasaveac|
0000a530  6b 0d 2d 3c 1f 20 20 20  20 20 20 20 20 6c 64 72  |k.-<.        ldr|
0000a540  20 20 20 20 20 72 30 2c  5b 72 31 2c 23 31 32 5d  |     r0,[r1,#12]|
0000a550  0d 2d 46 24 20 20 20 20  20 20 20 20 6c 64 72 20  |.-F$        ldr |
0000a560  20 20 20 20 72 32 2c 6d  65 73 73 61 67 65 5f 6d  |    r2,message_m|
0000a570  79 72 65 66 0d 2d 50 44  20 20 20 20 20 20 20 20  |yref.-PD        |
0000a580  74 65 71 20 20 20 20 20  72 30 2c 72 32 20 20 20  |teq     r0,r2   |
0000a590  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000a5a0  3b 20 63 68 65 63 6b 20  77 65 20 6f 72 69 67 69  |; check we origi|
0000a5b0  6e 61 74 65 64 20 69 74  0d 2d 5a 18 20 20 20 20  |nated it.-Z.    |
0000a5c0  20 20 20 20 62 6e 65 20  20 20 20 20 70 6f 6c 6c  |    bne     poll|
0000a5d0  0d 2d 64 4d 20 20 20 20  20 20 20 20 73 77 69 20  |.-dM        swi |
0000a5e0  20 20 20 20 22 58 48 6f  75 72 67 6c 61 73 73 5f  |    "XHourglass_|
0000a5f0  4f 6e 22 20 20 20 20 20  20 20 20 20 3b 20 64 6f  |On"         ; do|
0000a600  6e 27 74 20 72 65 70 6f  72 74 20 65 72 72 6f 72  |n't report error|
0000a610  73 20 61 73 20 6d 61 79  20 68 61 76 65 0d 2d 6e  |s as may have.-n|
0000a620  3c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |<               |
0000a630  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000a640  20 20 20 20 20 20 20 20  20 3b 20 62 65 65 6e 20  |         ; been |
0000a650  75 6e 70 6c 75 67 67 65  64 0d 2d 78 32 20 20 20  |unplugged.-x2   |
0000a660  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
0000a670  23 32 36 20 20 20 20 20  20 20 20 20 20 20 20 20  |#26             |
0000a680  20 20 20 20 20 3b 20 63  6f 70 79 0d 2d 82 48 20  |     ; copy.-.H |
0000a690  20 20 20 20 20 20 20 61  64 64 20 20 20 20 20 72  |       add     r|
0000a6a0  32 2c 72 31 2c 23 34 34  20 20 20 20 20 20 20 20  |2,r1,#44        |
0000a6b0  20 20 20 20 20 20 20 3b  20 72 32 20 2d 3e 20 64  |       ; r2 -> d|
0000a6c0  65 73 74 69 6e 61 74 69  6f 6e 20 66 69 6c 65 6e  |estination filen|
0000a6d0  61 6d 65 0d 2d 8c 2b 20  20 20 20 20 20 20 20 6c  |ame.-.+        l|
0000a6e0  64 72 20 20 20 20 20 72  31 2c 64 61 74 61 73 61  |dr     r1,datasa|
0000a6f0  76 65 5f 77 68 65 72 65  5f 75 70 5f 74 6f 0d 2d  |ve_where_up_to.-|
0000a700  96 43 20 20 20 20 20 20  20 20 61 64 64 20 20 20  |.C        add   |
0000a710  20 20 72 31 2c 72 31 2c  23 66 69 6c 65 6e 61 6d  |  r1,r1,#filenam|
0000a720  65 20 20 20 20 20 20 20  20 20 3b 20 72 31 20 2d  |e         ; r1 -|
0000a730  3e 20 73 6f 75 72 63 65  20 66 69 6c 65 6e 61 6d  |> source filenam|
0000a740  65 0d 2d a0 3c 20 20 20  20 20 20 20 20 6d 6f 76  |e.-.<        mov|
0000a750  20 20 20 20 20 72 33 2c  23 31 20 20 20 20 20 20  |     r3,#1      |
0000a760  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 66  |             ; f|
0000a770  6c 61 67 73 20 66 6f 72  20 63 6f 70 79 0d 2d aa  |lags for copy.-.|
0000a780  23 20 20 20 20 20 20 20  20 73 77 69 20 20 20 20  |#        swi    |
0000a790  20 22 58 4f 53 5f 46 53  43 6f 6e 74 72 6f 6c 22  | "XOS_FSControl"|
0000a7a0  0d 2d b4 1b 20 20 20 20  20 20 20 20 62 76 63 20  |.-..        bvc |
0000a7b0  20 20 20 20 63 6f 70 79  5f 6f 6b 0d 2d be 4d 20  |    copy_ok.-.M |
0000a7c0  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
0000a7d0  58 48 6f 75 72 67 6c 61  73 73 5f 4f 66 66 22 20  |XHourglass_Off" |
0000a7e0  20 20 20 20 20 20 20 3b  20 64 6f 6e 27 74 20 72  |       ; don't r|
0000a7f0  65 70 6f 72 74 20 65 72  72 6f 72 73 20 61 73 20  |eport errors as |
0000a800  6d 61 79 20 68 61 76 65  0d 2d c8 3c 20 20 20 20  |may have.-.<    |
0000a810  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
0000a830  20 20 20 20 3b 20 62 65  65 6e 20 75 6e 70 6c 75  |    ; been unplu|
0000a840  67 67 65 64 0d 2d d2 23  20 20 20 20 20 20 20 20  |gged.-.#        |
0000a850  62 6c 20 20 20 20 20 20  72 65 70 6f 72 74 5f 65  |bl      report_e|
0000a860  72 72 6f 72 5f 6f 6b 0d  2d dc 36 20 20 20 20 20  |rror_ok.-.6     |
0000a870  20 20 20 62 20 20 20 20  20 20 20 73 65 6e 64 5f  |   b       send_|
0000a880  64 61 74 61 73 61 76 65  6c 6f 61 64 5f 6d 65 73  |datasaveload_mes|
0000a890  73 61 67 65 5f 63 6f 6e  74 69 6e 75 65 0d 2d e6  |sage_continue.-.|
0000a8a0  0c 2e 63 6f 70 79 5f 6f  6b 0d 2d f0 4d 20 20 20  |..copy_ok.-.M   |
0000a8b0  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 48  |     swi     "XH|
0000a8c0  6f 75 72 67 6c 61 73 73  5f 4f 66 66 22 20 20 20  |ourglass_Off"   |
0000a8d0  20 20 20 20 20 3b 20 64  6f 6e 27 74 20 72 65 70  |     ; don't rep|
0000a8e0  6f 72 74 20 65 72 72 6f  72 73 20 61 73 20 6d 61  |ort errors as ma|
0000a8f0  79 20 68 61 76 65 0d 2d  fa 3c 20 20 20 20 20 20  |y have.-.<      |
0000a900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
0000a920  20 20 3b 20 62 65 65 6e  20 75 6e 70 6c 75 67 67  |  ; been unplugg|
0000a930  65 64 0d 2e 04 26 20 20  20 20 20 20 20 20 61 64  |ed...&        ad|
0000a940  72 20 20 20 20 20 72 31  2c 70 6f 6c 6c 5f 73 70  |r     r1,poll_sp|
0000a950  61 63 65 2b 26 63 30 30  0d 2e 0e 1f 20 20 20 20  |ace+&c00....    |
0000a960  20 20 20 20 73 75 62 20  20 20 20 20 72 31 2c 72  |    sub     r1,r|
0000a970  31 2c 23 26 63 30 30 0d  2e 18 1f 20 20 20 20 20  |1,#&c00....     |
0000a980  20 20 20 6c 64 72 20 20  20 20 20 72 30 2c 5b 72  |   ldr     r0,[r|
0000a990  31 2c 23 31 32 5d 0d 2e  22 1e 20 20 20 20 20 20  |1,#12]..".      |
0000a9a0  20 20 73 74 72 20 20 20  20 20 72 30 2c 5b 72 31  |  str     r0,[r1|
0000a9b0  2c 23 38 5d 0d 2e 2c 3e  20 20 20 20 20 20 20 20  |,#8]..,>        |
0000a9c0  6d 6f 76 20 20 20 20 20  72 30 2c 23 33 20 20 20  |mov     r0,#3   |
0000a9d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000a9e0  3b 20 64 61 74 61 6c 6f  61 64 20 6d 65 73 73 61  |; dataload messa|
0000a9f0  67 65 0d 2e 36 1f 20 20  20 20 20 20 20 20 73 74  |ge..6.        st|
0000aa00  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 31 36  |r     r0,[r1,#16|
0000aa10  5d 0d 2e 40 3a 20 20 20  20 20 20 20 20 6d 6f 76  |]..@:        mov|
0000aa20  20 20 20 20 20 72 30 2c  23 31 38 20 20 20 20 20  |     r0,#18     |
0000aa30  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
0000aa40  65 70 6c 79 20 6e 65 65  64 65 64 0d 2e 4a 3d 20  |eply needed..J= |
0000aa50  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
0000aa60  32 2c 5b 72 31 2c 23 34  5d 20 20 20 20 20 20 20  |2,[r1,#4]       |
0000aa70  20 20 20 20 20 20 20 3b  20 72 65 70 6c 79 20 74  |       ; reply t|
0000aa80  6f 20 73 65 6e 64 65 72  0d 2e 54 27 20 20 20 20  |o sender..T'    |
0000aa90  20 20 20 20 73 77 69 20  20 20 20 20 22 58 57 69  |    swi     "XWi|
0000aaa0  6d 70 5f 53 65 6e 64 4d  65 73 73 61 67 65 22 0d  |mp_SendMessage".|
0000aab0  2e 5e 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |.^.        bvs  |
0000aac0  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 2e  |   fatal_error..|
0000aad0  68 1e 20 20 20 20 20 20  20 20 6c 64 72 20 20 20  |h.        ldr   |
0000aae0  20 20 72 30 2c 5b 72 31  2c 23 38 5d 0d 2e 72 24  |  r0,[r1,#8]..r$|
0000aaf0  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
0000ab00  72 30 2c 6d 65 73 73 61  67 65 5f 6d 79 72 65 66  |r0,message_myref|
0000ab10  0d 2e 7c 4b 20 20 20 20  20 20 20 20 62 20 20 20  |..|K        b   |
0000ab20  20 20 20 20 70 6f 6c 6c  20 20 20 20 20 20 20 20  |    poll        |
0000ab30  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 70 6f  |            ; po|
0000ab40  6c 6c 20 73 6f 20 74 68  61 74 20 77 65 20 72 65  |ll so that we re|
0000ab50  63 65 69 76 65 20 72 65  70 6c 79 0d 2e 86 04 0d  |ceive reply.....|
0000ab60  2e 90 53 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..S; -----------|
0000ab70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000abb0  2d 2d 0d 2e 9a 2c 3b 20  77 65 20 68 61 76 65 20  |--...,; we have |
0000abc0  72 65 63 65 69 76 65 64  20 61 20 64 61 74 61 6c  |received a datal|
0000abd0  6f 61 64 61 63 6b 20 6d  65 73 73 61 67 65 0d 2e  |oadack message..|
0000abe0  a4 04 0d 2e ae 10 2e 64  61 74 61 6c 6f 61 64 61  |.......dataloada|
0000abf0  63 6b 0d 2e b8 1f 20 20  20 20 20 20 20 20 6c 64  |ck....        ld|
0000ac00  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 31 32  |r     r0,[r1,#12|
0000ac10  5d 0d 2e c2 24 20 20 20  20 20 20 20 20 6c 64 72  |]...$        ldr|
0000ac20  20 20 20 20 20 72 32 2c  6d 65 73 73 61 67 65 5f  |     r2,message_|
0000ac30  6d 79 72 65 66 0d 2e cc  44 20 20 20 20 20 20 20  |myref...D       |
0000ac40  20 74 65 71 20 20 20 20  20 72 30 2c 72 32 20 20  | teq     r0,r2  |
0000ac50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000ac60  20 3b 20 63 68 65 63 6b  20 77 65 20 6f 72 69 67  | ; check we orig|
0000ac70  69 6e 61 74 65 64 20 69  74 0d 2e d6 18 20 20 20  |inated it....   |
0000ac80  20 20 20 20 20 62 6e 65  20 20 20 20 20 70 6f 6c  |     bne     pol|
0000ac90  6c 0d 2e e0 28 20 20 20  20 20 20 20 20 6c 64 72  |l...(        ldr|
0000aca0  62 20 20 20 20 72 30 2c  64 65 6c 65 74 65 5f 61  |b    r0,delete_a|
0000acb0  66 74 65 72 5f 64 72 61  67 0d 2e ea 51 20 20 20  |fter_drag...Q   |
0000acc0  20 20 20 20 20 74 65 71  20 20 20 20 20 72 30 2c  |     teq     r0,|
0000acd0  23 34 32 20 20 20 20 20  20 20 20 20 20 20 20 20  |#42             |
0000ace0  20 20 20 20 20 3b 20 73  65 65 20 69 66 20 72 65  |     ; see if re|
0000acf0  73 70 6f 6e 73 65 20 74  6f 20 64 61 74 61 6f 70  |sponse to dataop|
0000ad00  65 6e 20 6d 65 73 73 61  67 65 0d 2e f4 3d 20 20  |en message...=  |
0000ad10  20 20 20 20 20 20 62 65  71 20 20 20 20 20 70 6f  |      beq     po|
0000ad20  6c 6c 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ll              |
0000ad30  20 20 20 20 20 20 3b 20  69 66 20 73 6f 20 6a 75  |      ; if so ju|
0000ad40  73 74 20 70 6f 6c 6c 0d  2e fe 48 20 20 20 20 20  |st poll...H     |
0000ad50  20 20 20 74 65 71 20 20  20 20 20 72 30 2c 23 26  |   teq     r0,#&|
0000ad60  66 66 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ff              |
0000ad70  20 20 20 3b 20 73 65 65  20 77 68 65 74 68 65 72  |   ; see whether|
0000ad80  20 74 6f 20 64 65 6c 65  74 65 20 69 63 6f 6e 0d  | to delete icon.|
0000ad90  2f 08 2b 20 20 20 20 20  20 20 20 6c 64 72 65 71  |/.+        ldreq|
0000ada0  20 20 20 72 34 2c 64 61  74 61 73 61 76 65 5f 77  |   r4,datasave_w|
0000adb0  68 65 72 65 5f 75 70 5f  74 6f 0d 2f 12 52 20 20  |here_up_to./.R  |
0000adc0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 30  |      ldr     r0|
0000add0  2c 5b 72 34 2c 23 6e 65  78 74 5d 20 20 20 20 20  |,[r4,#next]     |
0000ade0  20 20 20 20 20 20 3b 20  74 68 69 73 20 77 69 6c  |      ; this wil|
0000adf0  6c 20 62 65 20 63 68 61  6e 67 65 64 20 62 79 20  |l be changed by |
0000ae00  66 72 65 65 69 6e 67 20  68 65 61 70 0d 2f 1c 33  |freeing heap./.3|
0000ae10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
0000ae30  20 20 20 20 20 20 20 20  3b 20 62 6c 6f 63 6b 0d  |        ; block.|
0000ae40  2f 26 1f 20 20 20 20 20  20 20 20 62 6c 65 71 20  |/&.        bleq |
0000ae50  20 20 20 72 65 6d 6f 76  65 5f 69 63 6f 6e 0d 2f  |   remove_icon./|
0000ae60  30 19 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |0.        mov   |
0000ae70  20 20 72 34 2c 72 30 0d  2f 3a 26 20 20 20 20 20  |  r4,r0./:&     |
0000ae80  20 20 20 61 64 72 20 20  20 20 20 72 31 2c 70 6f  |   adr     r1,po|
0000ae90  6c 6c 5f 73 70 61 63 65  2b 26 63 30 30 0d 2f 44  |ll_space+&c00./D|
0000aea0  1f 20 20 20 20 20 20 20  20 73 75 62 20 20 20 20  |.        sub    |
0000aeb0  20 72 31 2c 72 31 2c 23  26 63 30 30 0d 2f 4e 37  | r1,r1,#&c00./N7|
0000aec0  20 20 20 20 20 20 20 20  62 20 20 20 20 20 20 20  |        b       |
0000aed0  73 65 6e 64 5f 64 61 74  61 73 61 76 65 6c 6f 61  |send_datasaveloa|
0000aee0  64 5f 6d 65 73 73 61 67  65 5f 63 6f 6e 74 69 6e  |d_message_contin|
0000aef0  75 65 32 0d 2f 58 04 0d  2f 62 53 3b 20 2d 2d 2d  |ue2./X../bS; ---|
0000af00  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000af40  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 2f 6c 34 3b 20  |----------./l4; |
0000af50  73 65 65 20 69 66 20 61  20 73 70 72 69 74 65 20  |see if a sprite |
0000af60  65 78 69 73 74 73 20 69  6e 20 74 68 65 20 77 69  |exists in the wi|
0000af70  6d 70 5f 73 70 72 69 74  65 20 70 6f 6f 6c 0d 2f  |mp_sprite pool./|
0000af80  76 0b 3b 20 65 6e 74 72  79 0d 2f 80 1d 3b 20 20  |v.; entry./..;  |
0000af90  20 20 20 20 20 72 32 20  2d 3e 20 73 70 72 69 74  |     r2 -> sprit|
0000afa0  65 20 6e 61 6d 65 0d 2f  8a 0a 3b 20 65 78 69 74  |e name./..; exit|
0000afb0  0d 2f 94 23 3b 20 20 20  20 20 20 20 76 20 75 6e  |./.#;       v un|
0000afc0  73 65 74 20 3d 3e 20 73  70 72 69 74 65 20 66 6f  |set => sprite fo|
0000afd0  75 6e 64 0d 2f 9e 27 3b  20 20 20 20 20 20 20 20  |und./.';        |
0000afe0  20 20 20 73 65 74 20 3d  3e 20 73 70 72 69 74 65  |   set => sprite|
0000aff0  20 6e 6f 74 20 66 6f 75  6e 64 0d 2f a8 04 0d 2f  | not found./.../|
0000b000  b2 19 2e 73 65 65 5f 69  66 5f 73 70 72 69 74 65  |...see_if_sprite|
0000b010  5f 65 78 69 73 74 73 0d  2f bc 23 20 20 20 20 20  |_exists./.#     |
0000b020  20 20 20 73 74 6d 66 64  20 20 20 72 31 33 21 2c  |   stmfd   r13!,|
0000b030  7b 72 30 2c 72 33 2d 72  36 7d 0d 2f c6 3e 20 20  |{r0,r3-r6}./.>  |
0000b040  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 30  |      mov     r0|
0000b050  2c 23 34 30 20 20 20 20  20 20 20 20 20 20 20 20  |,#40            |
0000b060  20 20 20 20 20 20 3b 20  72 65 61 64 20 73 70 72  |      ; read spr|
0000b070  69 74 65 20 69 6e 66 6f  0d 2f d0 24 20 20 20 20  |ite info./.$    |
0000b080  20 20 20 20 73 77 69 20  20 20 20 20 22 58 57 69  |    swi     "XWi|
0000b090  6d 70 5f 53 70 72 69 74  65 4f 70 22 0d 2f da 23  |mp_SpriteOp"./.#|
0000b0a0  20 20 20 20 20 20 20 20  6c 64 6d 66 64 20 20 20  |        ldmfd   |
0000b0b0  72 31 33 21 2c 7b 72 30  2c 72 33 2d 72 36 7d 0d  |r13!,{r0,r3-r6}.|
0000b0c0  2f e4 1a 20 20 20 20 20  20 20 20 6d 6f 76 20 20  |/..        mov  |
0000b0d0  20 20 20 70 63 2c 72 31  34 0d 2f ee 04 0d 2f f8  |   pc,r14./.../.|
0000b0e0  53 3b 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |S; -------------|
0000b0f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000b130  0d 30 02 39 3b 20 54 68  65 20 6e 69 63 65 20 77  |.0.9; The nice w|
0000b140  69 6d 70 20 68 61 73 20  73 65 6e 74 20 75 73 20  |imp has sent us |
0000b150  61 20 6d 65 73 73 61 67  65 20 61 63 6b 6e 6f 77  |a message acknow|
0000b160  6c 65 64 67 65 6d 65 6e  74 0d 30 0c 04 0d 30 16  |ledgement.0...0.|
0000b170  19 2e 6d 65 73 73 61 67  65 5f 61 63 6b 6e 6f 77  |..message_acknow|
0000b180  6c 65 64 67 65 64 0d 30  20 1e 20 20 20 20 20 20  |ledged.0 .      |
0000b190  20 20 6c 64 72 20 20 20  20 20 72 30 2c 5b 72 31  |  ldr     r0,[r1|
0000b1a0  2c 23 38 5d 0d 30 2a 24  20 20 20 20 20 20 20 20  |,#8].0*$        |
0000b1b0  6c 64 72 20 20 20 20 20  72 32 2c 6d 65 73 73 61  |ldr     r2,messa|
0000b1c0  67 65 5f 6d 79 72 65 66  0d 30 34 44 20 20 20 20  |ge_myref.04D    |
0000b1d0  20 20 20 20 63 6d 70 20  20 20 20 20 72 30 2c 72  |    cmp     r0,r|
0000b1e0  32 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2               |
0000b1f0  20 20 20 20 3b 20 73 65  65 20 69 66 20 6f 6e 65  |    ; see if one|
0000b200  20 6f 75 72 20 6d 65 73  73 61 67 65 0d 30 3e 4f  | our message.0>O|
0000b210  20 20 20 20 20 20 20 20  62 6e 65 20 20 20 20 20  |        bne     |
0000b220  70 6f 6c 6c 20 20 20 20  20 20 20 20 20 20 20 20  |poll            |
0000b230  20 20 20 20 20 20 20 20  3b 20 70 6f 6c 6c 20 6f  |        ; poll o|
0000b240  74 68 65 72 77 69 73 65  2c 20 63 61 6e 20 74 68  |therwise, can th|
0000b250  69 73 20 68 61 70 70 65  6e 20 3f 0d 30 48 1f 20  |is happen ?.0H. |
0000b260  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
0000b270  30 2c 5b 72 31 2c 23 31  36 5d 0d 30 52 45 20 20  |0,[r1,#16].0RE  |
0000b280  20 20 20 20 20 20 74 65  71 20 20 20 20 20 72 30  |      teq     r0|
0000b290  2c 23 31 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#1             |
0000b2a0  20 20 20 20 20 20 3b 20  73 65 65 20 69 66 20 64  |      ; see if d|
0000b2b0  61 74 61 73 61 76 65 20  6d 65 73 73 61 67 65 0d  |atasave message.|
0000b2c0  30 5c 2d 20 20 20 20 20  20 20 20 62 65 71 20 20  |0\-        beq  |
0000b2d0  20 20 20 64 61 74 61 73  61 76 65 5f 6e 6f 74 5f  |   datasave_not_|
0000b2e0  61 63 6b 6e 6f 77 6c 65  64 67 65 64 0d 30 66 45  |acknowledged.0fE|
0000b2f0  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
0000b300  72 30 2c 23 33 20 20 20  20 20 20 20 20 20 20 20  |r0,#3           |
0000b310  20 20 20 20 20 20 20 20  3b 20 73 65 65 20 69 66  |        ; see if|
0000b320  20 64 61 74 61 6c 6f 61  64 20 6d 65 73 73 61 67  | dataload messag|
0000b330  65 0d 30 70 2d 20 20 20  20 20 20 20 20 62 65 71  |e.0p-        beq|
0000b340  20 20 20 20 20 64 61 74  61 6c 6f 61 64 5f 6e 6f  |     dataload_no|
0000b350  74 5f 61 63 6b 6e 6f 77  6c 65 64 67 65 64 0d 30  |t_acknowledged.0|
0000b360  7a 45 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |zE        teq   |
0000b370  20 20 72 30 2c 23 35 20  20 20 20 20 20 20 20 20  |  r0,#5         |
0000b380  20 20 20 20 20 20 20 20  20 20 3b 20 73 65 65 20  |          ; see |
0000b390  69 66 20 64 61 74 61 6f  70 65 6e 20 6d 65 73 73  |if dataopen mess|
0000b3a0  61 67 65 0d 30 84 39 20  20 20 20 20 20 20 20 62  |age.0.9        b|
0000b3b0  6e 65 20 20 20 20 20 70  6f 6c 6c 20 20 20 20 20  |ne     poll     |
0000b3c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
0000b3d0  20 69 66 20 6e 6f 74 20  70 6f 6c 6c 0d 30 8e 3a  | if not poll.0.:|
0000b3e0  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
0000b3f0  72 30 2c 5b 72 31 2c 23  34 30 5d 20 20 20 20 20  |r0,[r1,#40]     |
0000b400  20 20 20 20 20 20 20 20  3b 20 67 65 74 20 66 69  |        ; get fi|
0000b410  6c 65 74 79 70 65 0d 30  98 3e 20 20 20 20 20 20  |letype.0.>      |
0000b420  20 20 63 6d 70 20 20 20  20 20 72 30 2c 23 26 31  |  cmp     r0,#&1|
0000b430  30 30 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |000             |
0000b440  20 20 3b 20 73 65 65 20  69 66 20 64 69 72 65 63  |  ; see if direc|
0000b450  74 6f 72 79 0d 30 a2 2c  20 20 20 20 20 20 20 20  |tory.0.,        |
0000b460  61 64 72 65 71 20 20 20  72 32 2c 66 69 6c 65 72  |adreq   r2,filer|
0000b470  5f 6f 70 65 6e 64 69 72  5f 63 6f 6d 6d 61 6e 64  |_opendir_command|
0000b480  0d 30 ac 22 20 20 20 20  20 20 20 20 61 64 72 6e  |.0."        adrn|
0000b490  65 20 20 20 72 32 2c 72  75 6e 5f 63 6f 6d 6d 61  |e   r2,run_comma|
0000b4a0  6e 64 0d 30 b6 48 20 20  20 20 20 20 20 20 61 64  |nd.0.H        ad|
0000b4b0  64 20 20 20 20 20 72 30  2c 72 31 2c 23 33 30 20  |d     r0,r1,#30 |
0000b4c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
0000b4d0  72 30 20 2d 3e 20 77 68  65 72 65 20 74 6f 20 70  |r0 -> where to p|
0000b4e0  75 74 20 63 6f 6d 6d 61  6e 64 0d 30 c0 15 2e 6d  |ut command.0...m|
0000b4f0  65 73 73 61 67 65 5f 61  63 6b 5f 6c 6f 6f 70 0d  |essage_ack_loop.|
0000b500  30 ca 1e 20 20 20 20 20  20 20 20 6c 64 72 62 20  |0..        ldrb |
0000b510  20 20 20 72 33 2c 5b 72  32 5d 2c 23 31 0d 30 d4  |   r3,[r2],#1.0.|
0000b520  19 20 20 20 20 20 20 20  20 74 65 71 20 20 20 20  |.        teq    |
0000b530  20 72 33 2c 23 30 0d 30  de 1e 20 20 20 20 20 20  | r3,#0.0..      |
0000b540  20 20 73 74 72 6e 65 62  20 20 72 33 2c 5b 72 30  |  strneb  r3,[r0|
0000b550  5d 2c 23 31 0d 30 e8 24  20 20 20 20 20 20 20 20  |],#1.0.$        |
0000b560  62 6e 65 20 20 20 20 20  6d 65 73 73 61 67 65 5f  |bne     message_|
0000b570  61 63 6b 5f 6c 6f 6f 70  0d 30 f2 3b 20 20 20 20  |ack_loop.0.;    |
0000b580  20 20 20 20 61 64 64 20  20 20 20 20 72 30 2c 72  |    add     r0,r|
0000b590  31 2c 23 33 30 20 20 20  20 20 20 20 20 20 20 20  |1,#30           |
0000b5a0  20 20 20 20 3b 20 72 30  20 2d 3e 20 63 6f 6d 6d  |    ; r0 -> comm|
0000b5b0  61 6e 64 0d 30 fc 25 20  20 20 20 20 20 20 20 73  |and.0.%        s|
0000b5c0  77 69 20 20 20 20 20 22  58 57 69 6d 70 5f 53 74  |wi     "XWimp_St|
0000b5d0  61 72 74 54 61 73 6b 22  0d 31 06 1f 20 20 20 20  |artTask".1..    |
0000b5e0  20 20 20 20 62 76 73 20  20 20 20 20 66 61 74 61  |    bvs     fata|
0000b5f0  6c 5f 65 72 72 6f 72 0d  31 10 18 20 20 20 20 20  |l_error.1..     |
0000b600  20 20 20 62 20 20 20 20  20 20 20 70 6f 6c 6c 0d  |   b       poll.|
0000b610  31 1a 1a 2e 66 69 6c 65  72 5f 6f 70 65 6e 64 69  |1...filer_opendi|
0000b620  72 5f 63 6f 6d 6d 61 6e  64 0d 31 24 27 20 20 20  |r_command.1$'   |
0000b630  20 20 20 20 20 65 71 75  73 20 20 20 20 22 46 69  |     equs    "Fi|
0000b640  6c 65 72 5f 4f 70 65 6e  44 69 72 20 22 2b bd 30  |ler_OpenDir "+.0|
0000b650  0d 31 2e 10 2e 72 75 6e  5f 63 6f 6d 6d 61 6e 64  |.1...run_command|
0000b660  0d 31 38 27 20 20 20 20  20 20 20 20 65 71 75 73  |.18'        equs|
0000b670  20 20 20 20 22 52 75 6e  20 20 20 20 20 20 20 20  |    "Run        |
0000b680  20 20 20 22 2b bd 30 0d  31 42 11 20 20 20 20 20  |   "+.0.1B.     |
0000b690  20 20 20 61 6c 69 67 6e  0d 31 4c 04 0d 31 56 1e  |   align.1L..1V.|
0000b6a0  2e 64 61 74 61 73 61 76  65 5f 6e 6f 74 5f 61 63  |.datasave_not_ac|
0000b6b0  6b 6e 6f 77 6c 65 64 67  65 64 0d 31 60 36 20 20  |knowledged.1`6  |
0000b6c0  20 20 20 20 20 20 62 65  71 20 20 20 20 20 73 65  |      beq     se|
0000b6d0  6e 64 5f 64 61 74 61 73  61 76 65 6c 6f 61 64 5f  |nd_datasaveload_|
0000b6e0  6d 65 73 73 61 67 65 5f  63 6f 6e 74 69 6e 75 65  |message_continue|
0000b6f0  0d 31 6a 04 0d 31 74 1e  2e 64 61 74 61 6c 6f 61  |.1j..1t..dataloa|
0000b700  64 5f 6e 6f 74 5f 61 63  6b 6e 6f 77 6c 65 64 67  |d_not_acknowledg|
0000b710  65 64 0d 31 7e 36 20 20  20 20 20 20 20 20 62 20  |ed.1~6        b |
0000b720  20 20 20 20 20 20 73 65  6e 64 5f 64 61 74 61 73  |      send_datas|
0000b730  61 76 65 6c 6f 61 64 5f  6d 65 73 73 61 67 65 5f  |aveload_message_|
0000b740  63 6f 6e 74 69 6e 75 65  0d 31 88 04 0d 31 92 53  |continue.1...1.S|
0000b750  3b 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; --------------|
0000b760  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000b790  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
0000b7a0  31 9c 1c 3b 20 68 65 61  70 20 68 61 6e 64 6c 69  |1..; heap handli|
0000b7b0  6e 67 20 72 6f 75 74 69  6e 65 73 0d 31 a6 04 0d  |ng routines.1...|
0000b7c0  31 b0 53 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |1.S; -----------|
0000b7d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000b810  2d 2d 0d 31 ba 39 3b 20  67 65 74 20 61 20 68 65  |--.1.9; get a he|
0000b820  61 70 20 62 6c 6f 63 6b  2e 20 49 66 20 66 61 69  |ap block. If fai|
0000b830  6c 73 20 74 72 79 20 61  6e 64 20 65 78 74 65 6e  |ls try and exten|
0000b840  64 20 77 69 6d 70 5f 73  6c 6f 74 0d 31 c4 0b 3b  |d wimp_slot.1..;|
0000b850  20 65 6e 74 72 79 0d 31  ce 1c 3b 20 20 20 20 20  | entry.1..;     |
0000b860  20 20 72 33 20 3d 20 73  69 7a 65 20 77 61 6e 74  |  r3 = size want|
0000b870  65 64 0d 31 d8 0a 3b 20  65 78 69 74 0d 31 e2 29  |ed.1..; exit.1.)|
0000b880  3b 20 20 20 20 20 20 20  72 32 20 2d 3e 20 68 65  |;       r2 -> he|
0000b890  61 70 20 62 6c 6f 63 6b  20 69 66 20 73 75 63 63  |ap block if succ|
0000b8a0  65 65 64 65 64 0d 31 ec  37 3b 20 20 20 20 20 20  |eeded.1.7;      |
0000b8b0  20 72 32 20 3d 20 30 20  69 66 20 66 61 69 6c 65  | r2 = 0 if faile|
0000b8c0  64 2c 20 72 33 20 63 6f  72 72 75 70 74 65 64 20  |d, r3 corrupted |
0000b8d0  69 6e 20 74 68 69 73 20  63 61 73 65 0d 31 f6 04  |in this case.1..|
0000b8e0  0d 32 00 13 2e 67 65 74  5f 68 65 61 70 5f 62 6c  |.2...get_heap_bl|
0000b8f0  6f 63 6b 0d 32 0a 2a 20  20 20 20 20 20 20 20 73  |ock.2.*        s|
0000b900  74 6d 66 64 20 20 20 72  31 33 21 2c 7b 72 30 2d  |tmfd   r13!,{r0-|
0000b910  72 31 2c 72 34 2d 72 36  2c 72 31 34 7d 0d 32 14  |r1,r4-r6,r14}.2.|
0000b920  19 20 20 20 20 20 20 20  20 6d 6f 76 20 20 20 20  |.        mov    |
0000b930  20 72 36 2c 72 33 0d 32  1e 3c 20 20 20 20 20 20  | r6,r3.2.<      |
0000b940  20 20 6d 6f 76 20 20 20  20 20 72 30 2c 23 32 20  |  mov     r0,#2 |
0000b950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000b960  20 20 3b 20 67 65 74 20  68 65 61 70 20 62 6c 6f  |  ; get heap blo|
0000b970  63 6b 0d 32 28 26 20 20  20 20 20 20 20 20 61 64  |ck.2(&        ad|
0000b980  72 20 20 20 20 20 72 31  2c 68 65 61 70 5f 73 74  |r     r1,heap_st|
0000b990  61 72 74 2d 26 38 30 30  0d 32 32 1f 20 20 20 20  |art-&800.22.    |
0000b9a0  20 20 20 20 61 64 64 20  20 20 20 20 72 31 2c 72  |    add     r1,r|
0000b9b0  31 2c 23 26 38 30 30 0d  32 3c 1e 20 20 20 20 20  |1,#&800.2<.     |
0000b9c0  20 20 20 73 77 69 20 20  20 20 20 22 58 4f 53 5f  |   swi     "XOS_|
0000b9d0  48 65 61 70 22 0d 32 46  41 20 20 20 20 20 20 20  |Heap".2FA       |
0000b9e0  20 6c 64 6d 76 63 66 64  20 72 31 33 21 2c 7b 72  | ldmvcfd r13!,{r|
0000b9f0  30 2d 72 31 2c 72 34 2d  72 36 2c 70 63 7d 20 20  |0-r1,r4-r6,pc}  |
0000ba00  20 3b 20 69 66 20 73 75  63 63 65 65 64 65 64 20  | ; if succeeded |
0000ba10  72 65 74 75 72 6e 0d 32  50 19 20 20 20 20 20 20  |return.2P.      |
0000ba20  20 20 6d 76 6e 20 20 20  20 20 72 30 2c 23 30 0d  |  mvn     r0,#0.|
0000ba30  32 5a 19 20 20 20 20 20  20 20 20 6d 6f 76 20 20  |2Z.        mov  |
0000ba40  20 20 20 72 31 2c 72 30  0d 32 64 24 20 20 20 20  |   r1,r0.2d$    |
0000ba50  20 20 20 20 73 77 69 20  20 20 20 20 22 58 57 69  |    swi     "XWi|
0000ba60  6d 70 5f 53 6c 6f 74 53  69 7a 65 22 0d 32 6e 1f  |mp_SlotSize".2n.|
0000ba70  20 20 20 20 20 20 20 20  62 76 73 20 20 20 20 20  |        bvs     |
0000ba80  66 61 74 61 6c 5f 65 72  72 6f 72 0d 32 78 3c 20  |fatal_error.2x< |
0000ba90  20 20 20 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |       mov     r|
0000baa0  35 2c 72 30 20 20 20 20  20 20 20 20 20 20 20 20  |5,r0            |
0000bab0  20 20 20 20 20 20 20 3b  20 73 74 6f 72 65 20 6f  |       ; store o|
0000bac0  6c 64 20 73 69 7a 65 0d  32 82 46 20 20 20 20 20  |ld size.2.F     |
0000bad0  20 20 20 61 64 64 20 20  20 20 20 72 30 2c 72 30  |   add     r0,r0|
0000bae0  2c 23 38 2a 31 30 32 34  20 20 20 20 20 20 20 20  |,#8*1024        |
0000baf0  20 20 20 3b 20 77 65 20  77 61 6e 74 20 73 6f 6d  |   ; we want som|
0000bb00  65 20 6d 6f 72 65 20 6d  65 6d 6f 72 79 0d 32 8c  |e more memory.2.|
0000bb10  19 20 20 20 20 20 20 20  20 6d 76 6e 20 20 20 20  |.        mvn    |
0000bb20  20 72 31 2c 23 30 0d 32  96 24 20 20 20 20 20 20  | r1,#0.2.$      |
0000bb30  20 20 73 77 69 20 20 20  20 20 22 58 57 69 6d 70  |  swi     "XWimp|
0000bb40  5f 53 6c 6f 74 53 69 7a  65 22 0d 32 a0 3e 20 20  |_SlotSize".2.>  |
0000bb50  20 20 20 20 20 20 6d 6f  76 76 73 20 20 20 72 32  |      movvs   r2|
0000bb60  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
0000bb70  20 20 20 20 20 20 3b 20  72 32 20 3d 20 30 20 69  |      ; r2 = 0 i|
0000bb80  66 20 66 61 69 6c 65 64  0d 32 aa 39 20 20 20 20  |f failed.2.9    |
0000bb90  20 20 20 20 6c 64 6d 76  73 66 64 20 72 31 33 21  |    ldmvsfd r13!|
0000bba0  2c 7b 72 30 2d 72 31 2c  72 34 2d 72 36 2c 70 63  |,{r0-r1,r4-r6,pc|
0000bbb0  7d 20 20 20 3b 20 74 68  65 6e 20 72 65 74 75 72  |}   ; then retur|
0000bbc0  6e 0d 32 b4 4e 20 20 20  20 20 20 20 20 73 75 62  |n.2.N        sub|
0000bbd0  20 20 20 20 20 72 33 2c  72 30 2c 72 35 20 20 20  |     r3,r0,r5   |
0000bbe0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
0000bbf0  33 20 3d 20 61 6d 6f 75  6e 74 20 6f 66 20 6e 65  |3 = amount of ne|
0000bc00  77 20 6d 65 6d 6f 72 79  20 77 65 20 67 6f 74 0d  |w memory we got.|
0000bc10  32 be 26 20 20 20 20 20  20 20 20 61 64 72 20 20  |2.&        adr  |
0000bc20  20 20 20 72 31 2c 68 65  61 70 5f 73 74 61 72 74  |   r1,heap_start|
0000bc30  2d 26 38 30 30 0d 32 c8  1f 20 20 20 20 20 20 20  |-&800.2..       |
0000bc40  20 61 64 64 20 20 20 20  20 72 31 2c 72 31 2c 23  | add     r1,r1,#|
0000bc50  26 38 30 30 0d 32 d2 39  20 20 20 20 20 20 20 20  |&800.2.9        |
0000bc60  6d 6f 76 20 20 20 20 20  72 30 2c 23 35 20 20 20  |mov     r0,#5   |
0000bc70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000bc80  3b 20 65 78 74 65 6e 64  20 68 65 61 70 0d 32 dc  |; extend heap.2.|
0000bc90  1e 20 20 20 20 20 20 20  20 73 77 69 20 20 20 20  |.        swi    |
0000bca0  20 22 58 4f 53 5f 48 65  61 70 22 0d 32 e6 1f 20  | "XOS_Heap".2.. |
0000bcb0  20 20 20 20 20 20 20 62  76 73 20 20 20 20 20 66  |       bvs     f|
0000bcc0  61 74 61 6c 5f 65 72 72  6f 72 0d 32 f0 3c 20 20  |atal_error.2.<  |
0000bcd0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 30  |      mov     r0|
0000bce0  2c 23 32 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#2             |
0000bcf0  20 20 20 20 20 20 3b 20  67 65 74 20 68 65 61 70  |      ; get heap|
0000bd00  20 62 6c 6f 63 6b 0d 32  fa 19 20 20 20 20 20 20  | block.2..      |
0000bd10  20 20 6d 6f 76 20 20 20  20 20 72 33 2c 72 36 0d  |  mov     r3,r6.|
0000bd20  33 04 1e 20 20 20 20 20  20 20 20 73 77 69 20 20  |3..        swi  |
0000bd30  20 20 20 22 58 4f 53 5f  48 65 61 70 22 0d 33 0e  |   "XOS_Heap".3.|
0000bd40  49 20 20 20 20 20 20 20  20 62 76 73 20 20 20 20  |I        bvs    |
0000bd50  20 66 61 74 61 6c 5f 65  72 72 6f 72 20 20 20 20  | fatal_error    |
0000bd60  20 20 20 20 20 20 20 20  20 3b 20 77 65 20 73 68  |         ; we sh|
0000bd70  6f 75 6c 64 20 73 75 63  63 65 65 64 20 74 68 69  |ould succeed thi|
0000bd80  73 20 74 69 6d 65 0d 33  18 29 20 20 20 20 20 20  |s time.3.)      |
0000bd90  20 20 6c 64 6d 66 64 20  20 20 72 31 33 21 2c 7b  |  ldmfd   r13!,{|
0000bda0  72 30 2d 72 31 2c 72 34  2d 72 36 2c 70 63 7d 0d  |r0-r1,r4-r6,pc}.|
0000bdb0  33 22 04 0d 33 2c 53 3b  20 2d 2d 2d 2d 2d 2d 2d  |3"..3,S; -------|
0000bdc0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000be00  2d 2d 2d 2d 2d 2d 0d 33  36 17 3b 20 66 72 65 65  |------.36.; free|
0000be10  20 61 20 68 65 61 70 20  62 6c 6f 63 6b 0d 33 40  | a heap block.3@|
0000be20  0b 3b 20 65 6e 74 72 79  0d 33 4a 1c 3b 20 20 20  |.; entry.3J.;   |
0000be30  20 20 20 20 72 34 20 2d  3e 20 68 65 61 70 20 62  |    r4 -> heap b|
0000be40  6c 6f 63 6b 0d 33 54 04  0d 33 5e 14 2e 66 72 65  |lock.3T..3^..fre|
0000be50  65 5f 68 65 61 70 5f 62  6c 6f 63 6b 0d 33 68 20  |e_heap_block.3h |
0000be60  20 20 20 20 20 20 20 20  73 74 6d 66 64 20 20 20  |        stmfd   |
0000be70  72 31 33 21 2c 7b 72 30  2d 72 32 7d 0d 33 72 3d  |r13!,{r0-r2}.3r=|
0000be80  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
0000be90  72 30 2c 23 33 20 20 20  20 20 20 20 20 20 20 20  |r0,#3           |
0000bea0  20 20 20 20 20 20 20 20  3b 20 66 72 65 65 20 68  |        ; free h|
0000beb0  65 61 70 20 62 6c 6f 63  6b 0d 33 7c 26 20 20 20  |eap block.3|&   |
0000bec0  20 20 20 20 20 61 64 72  20 20 20 20 20 72 31 2c  |     adr     r1,|
0000bed0  68 65 61 70 5f 73 74 61  72 74 2d 26 34 30 30 0d  |heap_start-&400.|
0000bee0  33 86 1f 20 20 20 20 20  20 20 20 61 64 64 20 20  |3..        add  |
0000bef0  20 20 20 72 31 2c 72 31  2c 23 26 34 30 30 0d 33  |   r1,r1,#&400.3|
0000bf00  90 19 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |..        mov   |
0000bf10  20 20 72 32 2c 72 34 0d  33 9a 1e 20 20 20 20 20  |  r2,r4.3..     |
0000bf20  20 20 20 73 77 69 20 20  20 20 20 22 58 4f 53 5f  |   swi     "XOS_|
0000bf30  48 65 61 70 22 0d 33 a4  1f 20 20 20 20 20 20 20  |Heap".3..       |
0000bf40  20 62 76 73 20 20 20 20  20 66 61 74 61 6c 5f 65  | bvs     fatal_e|
0000bf50  72 72 6f 72 0d 33 ae 20  20 20 20 20 20 20 20 20  |rror.3.         |
0000bf60  6c 64 6d 66 64 20 20 20  72 31 33 21 2c 7b 72 30  |ldmfd   r13!,{r0|
0000bf70  2d 72 32 7d 0d 33 b8 1a  20 20 20 20 20 20 20 20  |-r2}.3..        |
0000bf80  6d 6f 76 20 20 20 20 20  70 63 2c 72 31 34 0d 33  |mov     pc,r14.3|
0000bf90  c2 04 0d 33 cc 53 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |...3.S; --------|
0000bfa0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000bfe0  2d 2d 2d 2d 2d 0d 33 d6  28 3b 20 73 65 61 72 63  |-----.3.(; searc|
0000bff0  68 20 74 68 65 20 6c 69  6e 6b 65 64 20 6c 69 73  |h the linked lis|
0000c000  74 20 66 6f 72 20 61 6e  20 69 63 6f 6e 0d 33 e0  |t for an icon.3.|
0000c010  0b 3b 20 65 6e 74 72 79  0d 33 ea 1c 3b 20 20 20  |.; entry.3..;   |
0000c020  20 20 20 20 72 32 20 3d  20 69 63 6f 6e 20 68 61  |    r2 = icon ha|
0000c030  6e 64 6c 65 0d 33 f4 0a  3b 20 65 78 69 74 0d 33  |ndle.3..; exit.3|
0000c040  fe 2b 3b 20 20 20 20 20  20 20 72 34 20 2d 3e 20  |.+;       r4 -> |
0000c050  64 61 74 61 20 65 6e 74  72 79 20 69 6e 20 6c 69  |data entry in li|
0000c060  6e 6b 65 64 20 6c 69 73  74 0d 34 08 04 0d 34 12  |nked list.4...4.|
0000c070  0e 2e 66 69 6e 64 5f 69  63 6f 6e 0d 34 1c 1d 20  |..find_icon.4.. |
0000c080  20 20 20 20 20 20 20 73  74 6d 66 64 20 20 20 72  |       stmfd   r|
0000c090  31 33 21 2c 7b 72 33 7d  0d 34 26 28 20 20 20 20  |13!,{r3}.4&(    |
0000c0a0  20 20 20 20 6c 64 72 20  20 20 20 20 72 34 2c 73  |    ldr     r4,s|
0000c0b0  74 61 72 74 5f 6c 69 6e  6b 65 64 5f 6c 69 73 74  |tart_linked_list|
0000c0c0  0d 34 30 13 2e 66 69 6e  64 5f 69 63 6f 6e 5f 6c  |.40..find_icon_l|
0000c0d0  6f 6f 70 0d 34 3a 28 20  20 20 20 20 20 20 20 6c  |oop.4:(        l|
0000c0e0  64 72 62 20 20 20 20 72  33 2c 5b 72 34 2c 23 69  |drb    r3,[r4,#i|
0000c0f0  63 6f 6e 5f 68 61 6e 64  6c 65 5d 0d 34 44 19 20  |con_handle].4D. |
0000c100  20 20 20 20 20 20 20 74  65 71 20 20 20 20 20 72  |       teq     r|
0000c110  33 2c 72 32 0d 34 4e 1d  20 20 20 20 20 20 20 20  |3,r2.4N.        |
0000c120  6c 64 6d 65 71 66 64 20  72 31 33 21 2c 7b 72 33  |ldmeqfd r13!,{r3|
0000c130  7d 0d 34 58 1a 20 20 20  20 20 20 20 20 6d 6f 76  |}.4X.        mov|
0000c140  65 71 20 20 20 70 63 2c  72 31 34 0d 34 62 21 20  |eq   pc,r14.4b! |
0000c150  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
0000c160  34 2c 5b 72 34 2c 23 6e  65 78 74 5d 0d 34 6c 22  |4,[r4,#next].4l"|
0000c170  20 20 20 20 20 20 20 20  62 20 20 20 20 20 20 20  |        b       |
0000c180  66 69 6e 64 5f 69 63 6f  6e 5f 6c 6f 6f 70 0d 34  |find_icon_loop.4|
0000c190  76 04 0d 34 80 53 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |v..4.S; --------|
0000c1a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000c1e0  2d 2d 2d 2d 2d 0d 34 8a  26 3b 20 73 65 6c 65 63  |-----.4.&; selec|
0000c1f0  74 20 61 6e 20 69 63 6f  6e 20 6f 6e 20 74 68 65  |t an icon on the|
0000c200  20 62 61 63 6b 67 72 6f  75 6e 64 0d 34 94 0b 3b  | background.4..;|
0000c210  20 65 6e 74 72 79 0d 34  9e 1c 3b 20 20 20 20 20  | entry.4..;     |
0000c220  20 20 72 32 20 3d 20 69  63 6f 6e 20 68 61 6e 64  |  r2 = icon hand|
0000c230  6c 65 0d 34 a8 04 0d 34  b2 10 2e 73 65 6c 65 63  |le.4...4...selec|
0000c240  74 5f 69 63 6f 6e 0d 34  bc 20 20 20 20 20 20 20  |t_icon.4.       |
0000c250  20 20 73 74 6d 66 64 20  20 20 72 31 33 21 2c 7b  |  stmfd   r13!,{|
0000c260  72 31 2c 72 33 7d 0d 34  c6 26 20 20 20 20 20 20  |r1,r3}.4.&      |
0000c270  20 20 61 64 72 20 20 20  20 20 72 31 2c 77 6f 72  |  adr     r1,wor|
0000c280  6b 73 70 61 63 65 2b 26  31 30 30 30 0d 34 d0 20  |kspace+&1000.4. |
0000c290  20 20 20 20 20 20 20 20  73 75 62 20 20 20 20 20  |        sub     |
0000c2a0  72 31 2c 72 31 2c 23 26  31 30 30 30 0d 34 da 2f  |r1,r1,#&1000.4./|
0000c2b0  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
0000c2c0  72 33 2c 62 61 63 6b 67  72 6f 75 6e 64 5f 77 69  |r3,background_wi|
0000c2d0  6e 64 6f 77 5f 68 61 6e  64 6c 65 0d 34 e4 1b 20  |ndow_handle.4.. |
0000c2e0  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
0000c2f0  33 2c 5b 72 31 5d 0d 34  ee 1e 20 20 20 20 20 20  |3,[r1].4..      |
0000c300  20 20 73 74 72 20 20 20  20 20 72 32 2c 5b 72 31  |  str     r2,[r1|
0000c310  2c 23 34 5d 0d 34 f8 1f  20 20 20 20 20 20 20 20  |,#4].4..        |
0000c320  6d 6f 76 20 20 20 20 20  72 33 2c 23 31 20 3c 3c  |mov     r3,#1 <<|
0000c330  20 32 31 0d 35 02 1e 20  20 20 20 20 20 20 20 73  | 21.5..        s|
0000c340  74 72 20 20 20 20 20 72  33 2c 5b 72 31 2c 23 38  |tr     r3,[r1,#8|
0000c350  5d 0d 35 0c 1f 20 20 20  20 20 20 20 20 73 74 72  |].5..        str|
0000c360  20 20 20 20 20 72 33 2c  5b 72 31 2c 23 31 32 5d  |     r3,[r1,#12]|
0000c370  0d 35 16 28 20 20 20 20  20 20 20 20 73 77 69 20  |.5.(        swi |
0000c380  20 20 20 20 22 58 57 69  6d 70 5f 53 65 74 49 63  |    "XWimp_SetIc|
0000c390  6f 6e 53 74 61 74 65 22  0d 35 20 1f 20 20 20 20  |onState".5 .    |
0000c3a0  20 20 20 20 62 76 73 20  20 20 20 20 66 61 74 61  |    bvs     fata|
0000c3b0  6c 5f 65 72 72 6f 72 0d  35 2a 20 20 20 20 20 20  |l_error.5*      |
0000c3c0  20 20 20 6c 64 6d 66 64  20 20 20 72 31 33 21 2c  |   ldmfd   r13!,|
0000c3d0  7b 72 31 2c 72 33 7d 0d  35 34 1a 20 20 20 20 20  |{r1,r3}.54.     |
0000c3e0  20 20 20 6d 6f 76 73 20  20 20 20 70 63 2c 72 31  |   movs    pc,r1|
0000c3f0  34 0d 35 3e 04 0d 35 48  53 3b 20 2d 2d 2d 2d 2d  |4.5>..5HS; -----|
0000c400  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000c440  2d 2d 2d 2d 2d 2d 2d 2d  0d 35 52 2a 3b 20 75 6e  |--------.5R*; un|
0000c450  73 65 6c 65 63 74 20 74  68 65 20 73 70 72 69 74  |select the sprit|
0000c460  65 20 73 65 6c 65 63 74  65 64 20 62 79 20 6d 65  |e selected by me|
0000c470  6e 75 0d 35 5c 04 0d 35  66 20 2e 75 6e 73 65 6c  |nu.5\..5f .unsel|
0000c480  65 63 74 5f 6d 65 6e 75  5f 73 65 6c 65 63 74 65  |ect_menu_selecte|
0000c490  64 5f 69 63 6f 6e 0d 35  70 24 20 20 20 20 20 20  |d_icon.5p$      |
0000c4a0  20 20 73 74 6d 66 64 20  20 20 72 31 33 21 2c 7b  |  stmfd   r13!,{|
0000c4b0  72 33 2d 72 34 2c 72 31  34 7d 0d 35 7a 28 20 20  |r3-r4,r14}.5z(  |
0000c4c0  20 20 20 20 20 20 6c 64  72 20 20 20 20 20 72 34  |      ldr     r4|
0000c4d0  2c 73 74 61 72 74 5f 6c  69 6e 6b 65 64 5f 6c 69  |,start_linked_li|
0000c4e0  73 74 0d 35 84 25 2e 75  6e 73 65 6c 65 63 74 5f  |st.5.%.unselect_|
0000c4f0  6d 65 6e 75 5f 73 65 6c  65 63 74 65 64 5f 69 63  |menu_selected_ic|
0000c500  6f 6e 5f 6c 6f 6f 70 0d  35 8e 25 20 20 20 20 20  |on_loop.5.%     |
0000c510  20 20 20 6c 64 72 62 20  20 20 20 72 33 2c 5b 72  |   ldrb    r3,[r|
0000c520  34 2c 23 73 65 6c 65 63  74 65 64 5d 0d 35 98 42  |4,#selected].5.B|
0000c530  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
0000c540  72 33 2c 23 32 20 20 20  20 20 20 20 20 20 20 20  |r3,#2           |
0000c550  20 20 20 20 20 20 20 20  3b 20 73 65 65 20 69 66  |        ; see if|
0000c560  20 6d 65 6e 75 20 73 65  6c 65 63 74 65 64 0d 35  | menu selected.5|
0000c570  a2 21 20 20 20 20 20 20  20 20 6c 64 72 6e 65 20  |.!        ldrne |
0000c580  20 20 72 34 2c 5b 72 34  2c 23 6e 65 78 74 5d 0d  |  r4,[r4,#next].|
0000c590  35 ac 34 20 20 20 20 20  20 20 20 62 6e 65 20 20  |5.4        bne  |
0000c5a0  20 20 20 75 6e 73 65 6c  65 63 74 5f 6d 65 6e 75  |   unselect_menu|
0000c5b0  5f 73 65 6c 65 63 74 65  64 5f 69 63 6f 6e 5f 6c  |_selected_icon_l|
0000c5c0  6f 6f 70 0d 35 b6 21 20  20 20 20 20 20 20 20 62  |oop.5.!        b|
0000c5d0  6c 20 20 20 20 20 20 75  6e 73 65 6c 65 63 74 5f  |l      unselect_|
0000c5e0  69 63 6f 6e 0d 35 c0 19  20 20 20 20 20 20 20 20  |icon.5..        |
0000c5f0  6d 6f 76 20 20 20 20 20  72 33 2c 23 30 0d 35 ca  |mov     r3,#0.5.|
0000c600  26 20 20 20 20 20 20 20  20 73 74 72 62 20 20 20  |&        strb   |
0000c610  20 72 33 2c 6e 75 6d 62  65 72 5f 73 65 6c 65 63  | r3,number_selec|
0000c620  74 65 64 0d 35 d4 23 20  20 20 20 20 20 20 20 6c  |ted.5.#        l|
0000c630  64 6d 66 64 20 20 20 72  31 33 21 2c 7b 72 33 2d  |dmfd   r13!,{r3-|
0000c640  72 34 2c 70 63 7d 0d 35  de 04 0d 35 e8 53 3b 20  |r4,pc}.5...5.S; |
0000c650  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000c690  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 0d 35 f2  |-------------.5.|
0000c6a0  48 3b 20 75 6e 73 65 6c  65 63 74 20 61 6e 20 69  |H; unselect an i|
0000c6b0  63 6f 6e 20 6f 6e 20 74  68 65 20 62 61 63 6b 67  |con on the backg|
0000c6c0  72 6f 75 6e 64 2e 20 61  6e 64 20 75 6e 73 65 74  |round. and unset|
0000c6d0  73 20 66 6c 61 67 73 20  69 6e 20 64 61 74 61 20  |s flags in data |
0000c6e0  65 6e 74 72 79 0d 35 fc  0b 3b 20 65 6e 74 72 79  |entry.5..; entry|
0000c6f0  0d 36 06 1c 3b 20 20 20  20 20 20 20 72 34 20 2d  |.6..;       r4 -|
0000c700  3e 20 64 61 74 61 5f 65  6e 74 72 79 0d 36 10 04  |> data_entry.6..|
0000c710  0d 36 1a 12 2e 75 6e 73  65 6c 65 63 74 5f 69 63  |.6...unselect_ic|
0000c720  6f 6e 0d 36 24 20 20 20  20 20 20 20 20 20 73 74  |on.6$         st|
0000c730  6d 66 64 20 20 20 72 31  33 21 2c 7b 72 31 2c 72  |mfd   r13!,{r1,r|
0000c740  33 7d 0d 36 2e 25 20 20  20 20 20 20 20 20 6c 64  |3}.6.%        ld|
0000c750  72 62 20 20 20 20 72 33  2c 5b 72 34 2c 23 73 65  |rb    r3,[r4,#se|
0000c760  6c 65 63 74 65 64 5d 0d  36 38 3d 20 20 20 20 20  |lected].68=     |
0000c770  20 20 20 74 65 71 20 20  20 20 20 72 33 2c 23 31  |   teq     r3,#1|
0000c780  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c790  20 20 20 3b 20 73 65 65  20 69 66 20 73 65 6c 65  |   ; see if sele|
0000c7a0  63 74 65 64 0d 36 42 42  20 20 20 20 20 20 20 20  |cted.6BB        |
0000c7b0  6c 64 6d 6e 65 66 64 20  72 31 33 21 2c 7b 72 31  |ldmnefd r13!,{r1|
0000c7c0  2c 72 33 7d 20 20 20 20  20 20 20 20 20 20 20 20  |,r3}            |
0000c7d0  3b 20 6e 6f 74 20 73 6f  20 72 65 73 74 6f 72 65  |; not so restore|
0000c7e0  20 72 31 2c 72 33 0d 36  4c 39 20 20 20 20 20 20  | r1,r3.6L9      |
0000c7f0  20 20 6d 6f 76 6e 65 73  20 20 70 63 2c 72 31 34  |  movnes  pc,r14|
0000c800  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c810  20 20 3b 20 74 68 65 6e  20 72 65 74 75 72 6e 0d  |  ; then return.|
0000c820  36 56 26 20 20 20 20 20  20 20 20 61 64 72 20 20  |6V&        adr  |
0000c830  20 20 20 72 31 2c 77 6f  72 6b 73 70 61 63 65 2b  |   r1,workspace+|
0000c840  26 31 30 30 30 0d 36 60  20 20 20 20 20 20 20 20  |&1000.6`        |
0000c850  20 73 75 62 20 20 20 20  20 72 31 2c 72 31 2c 23  | sub     r1,r1,#|
0000c860  26 31 30 30 30 0d 36 6a  2f 20 20 20 20 20 20 20  |&1000.6j/       |
0000c870  20 6c 64 72 20 20 20 20  20 72 33 2c 62 61 63 6b  | ldr     r3,back|
0000c880  67 72 6f 75 6e 64 5f 77  69 6e 64 6f 77 5f 68 61  |ground_window_ha|
0000c890  6e 64 6c 65 0d 36 74 1b  20 20 20 20 20 20 20 20  |ndle.6t.        |
0000c8a0  73 74 72 20 20 20 20 20  72 33 2c 5b 72 31 5d 0d  |str     r3,[r1].|
0000c8b0  36 7e 28 20 20 20 20 20  20 20 20 6c 64 72 62 20  |6~(        ldrb |
0000c8c0  20 20 20 72 33 2c 5b 72  34 2c 23 69 63 6f 6e 5f  |   r3,[r4,#icon_|
0000c8d0  68 61 6e 64 6c 65 5d 0d  36 88 1e 20 20 20 20 20  |handle].6..     |
0000c8e0  20 20 20 73 74 72 20 20  20 20 20 72 33 2c 5b 72  |   str     r3,[r|
0000c8f0  31 2c 23 34 5d 0d 36 92  19 20 20 20 20 20 20 20  |1,#4].6..       |
0000c900  20 6d 6f 76 20 20 20 20  20 72 33 2c 23 30 0d 36  | mov     r3,#0.6|
0000c910  9c 1e 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |..        str   |
0000c920  20 20 72 33 2c 5b 72 31  2c 23 38 5d 0d 36 a6 1f  |  r3,[r1,#8].6..|
0000c930  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
0000c940  72 33 2c 23 31 20 3c 3c  20 32 31 0d 36 b0 1f 20  |r3,#1 << 21.6.. |
0000c950  20 20 20 20 20 20 20 73  74 72 20 20 20 20 20 72  |       str     r|
0000c960  33 2c 5b 72 31 2c 23 31  32 5d 0d 36 ba 28 20 20  |3,[r1,#12].6.(  |
0000c970  20 20 20 20 20 20 73 77  69 20 20 20 20 20 22 58  |      swi     "X|
0000c980  57 69 6d 70 5f 53 65 74  49 63 6f 6e 53 74 61 74  |Wimp_SetIconStat|
0000c990  65 22 0d 36 c4 1f 20 20  20 20 20 20 20 20 62 76  |e".6..        bv|
0000c9a0  73 20 20 20 20 20 66 61  74 61 6c 5f 65 72 72 6f  |s     fatal_erro|
0000c9b0  72 0d 36 ce 19 20 20 20  20 20 20 20 20 6d 6f 76  |r.6..        mov|
0000c9c0  20 20 20 20 20 72 33 2c  23 30 0d 36 d8 41 20 20  |     r3,#0.6.A  |
0000c9d0  20 20 20 20 20 20 73 74  72 62 20 20 20 20 72 33  |      strb    r3|
0000c9e0  2c 5b 72 34 2c 23 73 65  6c 65 63 74 65 64 5d 20  |,[r4,#selected] |
0000c9f0  20 20 20 20 20 20 3b 20  73 74 6f 72 65 20 61 73  |      ; store as|
0000ca00  20 75 6e 73 65 6c 65 63  74 65 64 0d 36 e2 20 20  | unselected.6.  |
0000ca10  20 20 20 20 20 20 20 6c  64 6d 66 64 20 20 20 72  |       ldmfd   r|
0000ca20  31 33 21 2c 7b 72 31 2c  72 33 7d 0d 36 ec 1a 20  |13!,{r1,r3}.6.. |
0000ca30  20 20 20 20 20 20 20 6d  6f 76 73 20 20 20 20 70  |       movs    p|
0000ca40  63 2c 72 31 34 0d 36 f6  04 0d 37 00 53 3b 20 2d  |c,r14.6...7.S; -|
0000ca50  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000ca90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 37 0a 41  |------------.7.A|
0000caa0  3b 20 75 6e 73 65 6c 65  63 74 20 61 6c 6c 20 69  |; unselect all i|
0000cab0  63 6f 6e 73 20 61 6e 64  20 73 65 74 20 6e 75 6d  |cons and set num|
0000cac0  62 65 72 20 6f 66 20 73  65 6c 65 63 74 65 64 20  |ber of selected |
0000cad0  69 63 6f 6e 73 20 74 6f  20 7a 65 72 6f 0d 37 14  |icons to zero.7.|
0000cae0  04 0d 37 1e 11 2e 75 6e  73 65 6c 65 63 74 5f 61  |..7...unselect_a|
0000caf0  6c 6c 0d 37 28 24 20 20  20 20 20 20 20 20 73 74  |ll.7($        st|
0000cb00  6d 66 64 20 20 20 72 31  33 21 2c 7b 72 32 2c 72  |mfd   r13!,{r2,r|
0000cb10  34 2c 72 31 34 7d 0d 37  32 28 20 20 20 20 20 20  |4,r14}.72(      |
0000cb20  20 20 6c 64 72 20 20 20  20 20 72 34 2c 73 74 61  |  ldr     r4,sta|
0000cb30  72 74 5f 6c 69 6e 6b 65  64 5f 6c 69 73 74 0d 37  |rt_linked_list.7|
0000cb40  3c 43 20 20 20 20 20 20  20 20 74 65 71 20 20 20  |<C        teq   |
0000cb50  20 20 72 34 2c 23 30 20  20 20 20 20 20 20 20 20  |  r4,#0         |
0000cb60  20 20 20 20 20 20 20 20  20 20 3b 20 73 65 65 20  |          ; see |
0000cb70  69 66 20 6e 6f 20 69 63  6f 6e 73 20 65 78 69 73  |if no icons exis|
0000cb80  74 0d 37 46 3a 20 20 20  20 20 20 20 20 6c 64 6d  |t.7F:        ldm|
0000cb90  65 71 66 64 20 72 31 33  21 2c 7b 72 32 2c 72 34  |eqfd r13!,{r2,r4|
0000cba0  2c 70 63 7d 20 20 20 20  20 20 20 20 20 3b 20 69  |,pc}         ; i|
0000cbb0  66 20 73 6f 20 72 65 74  75 72 6e 0d 37 50 19 2e  |f so return.7P..|
0000cbc0  63 6c 65 61 72 5f 73 65  6c 65 63 74 69 6f 6e 5f  |clear_selection_|
0000cbd0  6c 6f 6f 70 0d 37 5a 21  20 20 20 20 20 20 20 20  |loop.7Z!        |
0000cbe0  62 6c 20 20 20 20 20 20  75 6e 73 65 6c 65 63 74  |bl      unselect|
0000cbf0  5f 69 63 6f 6e 0d 37 64  1b 20 20 20 20 20 20 20  |_icon.7d.       |
0000cc00  20 6c 64 72 20 20 20 20  20 72 34 2c 5b 72 34 5d  | ldr     r4,[r4]|
0000cc10  0d 37 6e 19 20 20 20 20  20 20 20 20 74 65 71 20  |.7n.        teq |
0000cc20  20 20 20 20 72 34 2c 23  30 0d 37 78 28 20 20 20  |    r4,#0.7x(   |
0000cc30  20 20 20 20 20 62 6e 65  20 20 20 20 20 63 6c 65  |     bne     cle|
0000cc40  61 72 5f 73 65 6c 65 63  74 69 6f 6e 5f 6c 6f 6f  |ar_selection_loo|
0000cc50  70 0d 37 82 26 20 20 20  20 20 20 20 20 73 74 72  |p.7.&        str|
0000cc60  62 20 20 20 20 72 34 2c  6e 75 6d 62 65 72 5f 73  |b    r4,number_s|
0000cc70  65 6c 65 63 74 65 64 0d  37 8c 24 20 20 20 20 20  |elected.7.$     |
0000cc80  20 20 20 6c 64 6d 66 64  20 20 20 72 31 33 21 2c  |   ldmfd   r13!,|
0000cc90  7b 72 32 2c 72 34 2c 70  63 7d 5e 0d 37 96 04 0d  |{r2,r4,pc}^.7...|
0000cca0  37 a0 53 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |7.S; -----------|
0000ccb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000ccf0  2d 2d 0d 37 aa 40 3b 20  54 68 69 73 20 72 6f 75  |--.7.@; This rou|
0000cd00  74 69 6e 65 20 72 65 61  64 73 20 74 68 65 20 73  |tine reads the s|
0000cd10  63 72 65 65 6e 20 73 69  7a 65 20 69 6e 20 65 78  |creen size in ex|
0000cd20  74 65 72 6e 61 6c 20 63  6f 6f 72 64 69 6e 61 74  |ternal coordinat|
0000cd30  65 73 0d 37 b4 04 0d 37  be 15 2e 72 65 61 64 5f  |es.7...7...read_|
0000cd40  73 63 72 65 65 6e 5f 73  69 7a 65 0d 37 c8 1e 20  |screen_size.7.. |
0000cd50  20 20 20 20 20 20 20 73  74 6d 66 64 20 20 20 72  |       stmfd   r|
0000cd60  31 33 21 2c 7b 72 31 34  7d 0d 37 d2 45 20 20 20  |13!,{r14}.7.E   |
0000cd70  20 20 20 20 20 6d 76 6e  20 20 20 20 20 72 30 2c  |     mvn     r0,|
0000cd80  23 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#0              |
0000cd90  20 20 20 20 20 3b 20 72  65 61 64 20 61 62 6f 75  |     ; read abou|
0000cda0  74 20 63 75 72 72 65 6e  74 20 6d 6f 64 65 0d 37  |t current mode.7|
0000cdb0  dc 3d 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |.=        mov   |
0000cdc0  20 20 72 31 2c 23 34 20  20 20 20 20 20 20 20 20  |  r1,#4         |
0000cdd0  20 20 20 20 20 20 20 20  20 20 3b 20 72 31 20 3d  |          ; r1 =|
0000cde0  20 58 45 69 67 46 61 63  74 6f 72 0d 37 e6 2a 20  | XEigFactor.7.* |
0000cdf0  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
0000ce00  58 4f 53 5f 52 65 61 64  4d 6f 64 65 56 61 72 69  |XOS_ReadModeVari|
0000ce10  61 62 6c 65 22 0d 37 f0  1f 20 20 20 20 20 20 20  |able".7..       |
0000ce20  20 62 76 73 20 20 20 20  20 66 61 74 61 6c 5f 65  | bvs     fatal_e|
0000ce30  72 72 6f 72 0d 37 fa 19  20 20 20 20 20 20 20 20  |rror.7..        |
0000ce40  6d 6f 76 20 20 20 20 20  72 33 2c 72 32 0d 38 04  |mov     r3,r2.8.|
0000ce50  3d 20 20 20 20 20 20 20  20 6d 6f 76 20 20 20 20  |=        mov    |
0000ce60  20 72 31 2c 23 31 31 20  20 20 20 20 20 20 20 20  | r1,#11         |
0000ce70  20 20 20 20 20 20 20 20  20 3b 20 72 31 20 3d 20  |         ; r1 = |
0000ce80  58 57 69 6e 64 4c 69 6d  69 74 0d 38 0e 2a 20 20  |XWindLimit.8.*  |
0000ce90  20 20 20 20 20 20 73 77  69 20 20 20 20 20 22 58  |      swi     "X|
0000cea0  4f 53 5f 52 65 61 64 4d  6f 64 65 56 61 72 69 61  |OS_ReadModeVaria|
0000ceb0  62 6c 65 22 0d 38 18 1f  20 20 20 20 20 20 20 20  |ble".8..        |
0000cec0  62 76 73 20 20 20 20 20  66 61 74 61 6c 5f 65 72  |bvs     fatal_er|
0000ced0  72 6f 72 0d 38 22 20 20  20 20 20 20 20 20 20 6d  |ror.8"         m|
0000cee0  6f 76 20 20 20 20 20 72  32 2c 72 32 2c 6c 73 6c  |ov     r2,r2,lsl|
0000cef0  20 72 33 0d 38 2c 22 20  20 20 20 20 20 20 20 73  | r3.8,"        s|
0000cf00  74 72 20 20 20 20 20 72  32 2c 73 63 72 65 65 6e  |tr     r2,screen|
0000cf10  5f 6d 61 78 78 0d 38 36  24 20 20 20 20 20 20 20  |_maxx.86$       |
0000cf20  20 73 74 72 20 20 20 20  20 72 32 2c 77 6f 72 6b  | str     r2,work|
0000cf30  61 72 65 61 5f 6d 61 78  78 0d 38 40 3d 20 20 20  |area_maxx.8@=   |
0000cf40  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 31 2c  |     mov     r1,|
0000cf50  23 35 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#5              |
0000cf60  20 20 20 20 20 3b 20 72  31 20 3d 20 59 45 69 67  |     ; r1 = YEig|
0000cf70  46 61 63 74 6f 72 0d 38  4a 2a 20 20 20 20 20 20  |Factor.8J*      |
0000cf80  20 20 73 77 69 20 20 20  20 20 22 58 4f 53 5f 52  |  swi     "XOS_R|
0000cf90  65 61 64 4d 6f 64 65 56  61 72 69 61 62 6c 65 22  |eadModeVariable"|
0000cfa0  0d 38 54 1f 20 20 20 20  20 20 20 20 62 76 73 20  |.8T.        bvs |
0000cfb0  20 20 20 20 66 61 74 61  6c 5f 65 72 72 6f 72 0d  |    fatal_error.|
0000cfc0  38 5e 19 20 20 20 20 20  20 20 20 6d 6f 76 20 20  |8^.        mov  |
0000cfd0  20 20 20 72 33 2c 72 32  0d 38 68 3d 20 20 20 20  |   r3,r2.8h=    |
0000cfe0  20 20 20 20 6d 6f 76 20  20 20 20 20 72 31 2c 23  |    mov     r1,#|
0000cff0  31 32 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |12              |
0000d000  20 20 20 20 3b 20 72 31  20 3d 20 59 57 69 6e 64  |    ; r1 = YWind|
0000d010  4c 69 6d 69 74 0d 38 72  2a 20 20 20 20 20 20 20  |Limit.8r*       |
0000d020  20 73 77 69 20 20 20 20  20 22 58 4f 53 5f 52 65  | swi     "XOS_Re|
0000d030  61 64 4d 6f 64 65 56 61  72 69 61 62 6c 65 22 0d  |adModeVariable".|
0000d040  38 7c 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |8|.        bvs  |
0000d050  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 38  |   fatal_error.8|
0000d060  86 20 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |.         mov   |
0000d070  20 20 72 32 2c 72 32 2c  6c 73 6c 20 72 33 0d 38  |  r2,r2,lsl r3.8|
0000d080  90 22 20 20 20 20 20 20  20 20 73 74 72 20 20 20  |."        str   |
0000d090  20 20 72 32 2c 73 63 72  65 65 6e 5f 6d 61 78 79  |  r2,screen_maxy|
0000d0a0  0d 38 9a 24 20 20 20 20  20 20 20 20 73 74 72 20  |.8.$        str |
0000d0b0  20 20 20 20 72 32 2c 77  6f 72 6b 61 72 65 61 5f  |    r2,workarea_|
0000d0c0  6d 61 78 79 0d 38 a4 1f  20 20 20 20 20 20 20 20  |maxy.8..        |
0000d0d0  73 74 72 20 20 20 20 20  72 32 2c 73 63 72 6f 6c  |str     r2,scrol|
0000d0e0  6c 5f 79 0d 38 ae 19 20  20 20 20 20 20 20 20 6d  |l_y.8..        m|
0000d0f0  6f 76 20 20 20 20 20 72  30 2c 23 31 0d 38 b8 23  |ov     r0,#1.8.#|
0000d100  20 20 20 20 20 20 20 20  73 74 72 62 20 20 20 20  |        strb    |
0000d110  72 30 2c 6d 6f 64 65 5f  63 68 61 6e 67 65 64 0d  |r0,mode_changed.|
0000d120  38 c2 3c 20 20 20 20 20  20 20 20 6c 64 6d 66 64  |8.<        ldmfd|
0000d130  20 20 20 72 31 33 21 2c  7b 70 63 7d 5e 20 20 20  |   r13!,{pc}^   |
0000d140  20 20 20 20 20 20 20 20  20 20 20 3b 20 70 72 65  |           ; pre|
0000d150  73 65 72 76 65 20 66 6c  61 67 73 0d 38 cc 04 0d  |serve flags.8...|
0000d160  38 d6 53 3b 20 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |8.S; -----------|
0000d170  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000d1b0  2d 2d 0d 38 e0 18 3b 20  63 6c 6f 73 65 64 6f 77  |--.8..; closedow|
0000d1c0  6e 20 61 6e 64 20 65 78  69 74 0d 38 ea 04 0d 38  |n and exit.8...8|
0000d1d0  f4 17 2e 63 6c 6f 73 65  64 6f 77 6e 5f 61 6e 64  |...closedown_and|
0000d1e0  5f 65 78 69 74 0d 38 fe  1d 20 20 20 20 20 20 20  |_exit.8..       |
0000d1f0  20 62 6c 20 20 20 20 20  20 63 6c 6f 73 65 64 6f  | bl      closedo|
0000d200  77 6e 0d 39 08 1d 20 20  20 20 20 20 20 20 73 77  |wn.9..        sw|
0000d210  69 20 20 20 20 20 22 4f  53 5f 45 78 69 74 22 0d  |i     "OS_Exit".|
0000d220  39 12 04 0d 39 1c 53 3b  20 2d 2d 2d 2d 2d 2d 2d  |9...9.S; -------|
0000d230  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000d270  2d 2d 2d 2d 2d 2d 0d 39  26 4d 3b 20 65 69 74 68  |------.9&M; eith|
0000d280  65 72 20 77 65 20 63 6f  75 6c 64 20 6e 6f 74 20  |er we could not |
0000d290  73 74 61 72 74 20 75 70  2c 20 74 68 65 20 75 73  |start up, the us|
0000d2a0  65 72 20 77 61 6e 74 73  20 75 73 20 74 6f 20 63  |er wants us to c|
0000d2b0  6c 6f 73 65 64 6f 77 6e  20 6f 72 20 77 65 20 68  |losedown or we h|
0000d2c0  61 76 65 0d 39 30 24 3b  20 68 61 64 20 61 20 6d  |ave.90$; had a m|
0000d2d0  6f 64 75 6c 65 20 66 69  6e 61 6c 69 73 61 74 69  |odule finalisati|
0000d2e0  6f 6e 20 63 61 6c 6c 0d  39 3a 04 0d 39 44 0e 2e  |on call.9:..9D..|
0000d2f0  63 6c 6f 73 65 64 6f 77  6e 0d 39 4e 28 20 20 20  |closedown.9N(   |
0000d300  20 20 20 20 20 61 64 72  20 20 20 20 20 72 31 2c  |     adr     r1,|
0000d310  74 61 73 6b 5f 68 61 6e  64 6c 65 2b 26 31 30 30  |task_handle+&100|
0000d320  30 0d 39 58 20 20 20 20  20 20 20 20 20 73 75 62  |0.9X         sub|
0000d330  20 20 20 20 20 72 31 2c  72 31 2c 23 26 31 30 30  |     r1,r1,#&100|
0000d340  30 0d 39 62 1b 20 20 20  20 20 20 20 20 6c 64 72  |0.9b.        ldr|
0000d350  20 20 20 20 20 72 30 2c  5b 72 31 5d 0d 39 6c 2d  |     r0,[r1].9l-|
0000d360  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
0000d370  72 31 2c 5b 72 31 2c 23  74 61 73 6b 2d 74 61 73  |r1,[r1,#task-tas|
0000d380  6b 5f 68 61 6e 64 6c 65  5d 0d 39 76 3e 20 20 20  |k_handle].9v>   |
0000d390  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 57  |     swi     "XW|
0000d3a0  69 6d 70 5f 43 6c 6f 73  65 44 6f 77 6e 22 20 20  |imp_CloseDown"  |
0000d3b0  20 20 20 20 20 3b 20 63  6c 6f 73 65 20 64 6f 77  |     ; close dow|
0000d3c0  6e 20 69 66 20 73 6f 0d  39 80 1a 20 20 20 20 20  |n if so.9..     |
0000d3d0  20 20 20 6d 6f 76 20 20  20 20 20 70 63 2c 72 31  |   mov     pc,r1|
0000d3e0  34 0d 39 8a 04 0d 39 94  53 3b 20 2d 2d 2d 2d 2d  |4.9...9.S; -----|
0000d3f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000d430  2d 2d 2d 2d 2d 2d 2d 2d  0d 39 9e 19 3b 20 6d 69  |--------.9..; mi|
0000d440  73 63 20 66 6c 61 67 73  20 61 6e 64 20 64 61 74  |sc flags and dat|
0000d450  61 0d 39 a8 04 0d 39 b2  11 2e 6d 6f 64 65 5f 63  |a.9...9...mode_c|
0000d460  68 61 6e 67 65 64 0d 39  bc 15 20 20 20 20 20 20  |hanged.9..      |
0000d470  20 20 65 71 75 62 20 20  20 20 30 0d 39 c6 15 2e  |  equb    0.9...|
0000d480  69 63 6f 6e 5f 74 65 78  74 5f 63 6f 6c 6f 75 72  |icon_text_colour|
0000d490  0d 39 d0 15 20 20 20 20  20 20 20 20 65 71 75 62  |.9..        equb|
0000d4a0  20 20 20 20 31 0d 39 da  16 2e 64 65 6c 65 74 65  |    1.9...delete|
0000d4b0  5f 61 66 74 65 72 5f 64  72 61 67 0d 39 e4 15 20  |_after_drag.9.. |
0000d4c0  20 20 20 20 20 20 20 65  71 75 62 20 20 20 20 30  |       equb    0|
0000d4d0  0d 39 ee 14 2e 6e 75 6d  62 65 72 5f 6f 66 5f 69  |.9...number_of_i|
0000d4e0  63 6f 6e 73 0d 39 f8 15  20 20 20 20 20 20 20 20  |cons.9..        |
0000d4f0  65 71 75 62 20 20 20 20  30 0d 3a 02 14 2e 6e 75  |equb    0.:...nu|
0000d500  6d 62 65 72 5f 73 65 6c  65 63 74 65 64 0d 3a 0c  |mber_selected.:.|
0000d510  15 20 20 20 20 20 20 20  20 65 71 75 62 20 20 20  |.        equb   |
0000d520  20 30 0d 3a 16 12 2e 73  61 76 65 5f 74 6f 5f 66  | 0.:...save_to_f|
0000d530  69 6c 65 72 0d 3a 20 15  20 20 20 20 20 20 20 20  |iler.: .        |
0000d540  65 71 75 62 20 20 20 20  30 0d 3a 2a 11 20 20 20  |equb    0.:*.   |
0000d550  20 20 20 20 20 61 6c 69  67 6e 0d 3a 34 11 2e 62  |     align.:4..b|
0000d560  75 74 74 6f 6e 5f 73 74  61 74 65 0d 3a 3e 16 2e  |utton_state.:>..|
0000d570  68 65 61 70 5f 65 6e 74  72 79 5f 6c 65 6e 67 74  |heap_entry_lengt|
0000d580  68 0d 3a 48 12 2e 6d 65  73 73 61 67 65 5f 6d 79  |h.:H..message_my|
0000d590  72 65 66 0d 3a 52 15 20  20 20 20 20 20 20 20 65  |ref.:R.        e|
0000d5a0  71 75 64 20 20 20 20 30  0d 3a 5c 04 0d 3a 66 53  |qud    0.:\..:fS|
0000d5b0  3b 20 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |; --------------|
0000d5c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000d5f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
0000d600  3a 70 3b 3b 20 64 65 66  69 6e 65 20 74 68 65 20  |:p;; define the |
0000d610  62 61 63 6b 67 72 6f 75  6e 64 20 77 69 6e 64 6f  |background windo|
0000d620  77 2e 20 76 20 73 65 74  20 69 66 20 65 72 72 6f  |w. v set if erro|
0000d630  72 20 6f 63 63 75 72 72  65 64 0d 3a 7a 04 0d 3a  |r occurred.:z..:|
0000d640  84 1d 2e 64 65 66 69 6e  65 5f 62 61 63 6b 67 72  |...define_backgr|
0000d650  6f 75 6e 64 5f 77 69 6e  64 6f 77 0d 3a 8e 1e 20  |ound_window.:.. |
0000d660  20 20 20 20 20 20 20 73  74 6d 66 64 20 20 20 72  |       stmfd   r|
0000d670  31 33 21 2c 7b 72 31 34  7d 0d 3a 98 24 20 20 20  |13!,{r14}.:.$   |
0000d680  20 20 20 20 20 62 6c 20  20 20 20 20 20 72 65 61  |     bl      rea|
0000d690  64 5f 73 63 72 65 65 6e  5f 73 69 7a 65 0d 3a a2  |d_screen_size.:.|
0000d6a0  28 20 20 20 20 20 20 20  20 61 64 72 20 20 20 20  |(        adr    |
0000d6b0  20 72 31 2c 62 61 63 6b  67 72 6f 75 6e 64 5f 77  | r1,background_w|
0000d6c0  69 6e 64 6f 77 0d 3a ac  28 20 20 20 20 20 20 20  |indow.:.(       |
0000d6d0  20 73 77 69 20 20 20 20  20 22 58 57 69 6d 70 5f  | swi     "XWimp_|
0000d6e0  43 72 65 61 74 65 57 69  6e 64 6f 77 22 0d 3a b6  |CreateWindow".:.|
0000d6f0  1d 20 20 20 20 20 20 20  20 6c 64 6d 76 73 66 64  |.        ldmvsfd|
0000d700  20 72 31 33 21 2c 7b 70  63 7d 0d 3a c0 2f 20 20  | r13!,{pc}.:./  |
0000d710  20 20 20 20 20 20 61 64  72 20 20 20 20 20 72 31  |      adr     r1|
0000d720  2c 62 61 63 6b 67 72 6f  75 6e 64 5f 77 69 6e 64  |,background_wind|
0000d730  6f 77 5f 68 61 6e 64 6c  65 0d 3a ca 1b 20 20 20  |ow_handle.:..   |
0000d740  20 20 20 20 20 73 74 72  20 20 20 20 20 72 30 2c  |     str     r0,|
0000d750  5b 72 31 5d 0d 3a d4 26  20 20 20 20 20 20 20 20  |[r1].:.&        |
0000d760  73 77 69 20 20 20 20 20  22 58 57 69 6d 70 5f 4f  |swi     "XWimp_O|
0000d770  70 65 6e 57 69 6e 64 6f  77 22 0d 3a de 1d 20 20  |penWindow".:..  |
0000d780  20 20 20 20 20 20 6c 64  6d 66 64 20 20 20 72 31  |      ldmfd   r1|
0000d790  33 21 2c 7b 70 63 7d 0d  3a e8 04 0d 3a f2 53 3b  |3!,{pc}.:...:.S;|
0000d7a0  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
0000d7b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000d7e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 3a  |--------------.:|
0000d7f0  fc 22 3b 20 62 61 63 6b  67 72 6f 75 6e 64 20 77  |."; background w|
0000d800  69 6e 64 6f 77 20 64 61  74 61 20 62 6c 6f 63 6b  |indow data block|
0000d810  0d 3b 06 04 0d 3b 10 1d  2e 62 61 63 6b 67 72 6f  |.;...;...backgro|
0000d820  75 6e 64 5f 77 69 6e 64  6f 77 5f 68 61 6e 64 6c  |und_window_handl|
0000d830  65 0d 3b 1a 15 20 20 20  20 20 20 20 20 65 71 75  |e.;..        equ|
0000d840  64 20 20 20 20 30 0d 3b  24 16 2e 62 61 63 6b 67  |d    0.;$..backg|
0000d850  72 6f 75 6e 64 5f 77 69  6e 64 6f 77 0d 3b 2e 15  |round_window.;..|
0000d860  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000d870  30 0d 3b 38 17 20 20 20  20 20 20 20 20 65 71 75  |0.;8.        equ|
0000d880  64 20 20 20 20 31 33 36  0d 3b 42 10 2e 73 63 72  |d    136.;B..scr|
0000d890  65 65 6e 5f 6d 61 78 78  0d 3b 4c 15 20 20 20 20  |een_maxx.;L.    |
0000d8a0  20 20 20 20 65 71 75 64  20 20 20 20 30 0d 3b 56  |    equd    0.;V|
0000d8b0  10 2e 73 63 72 65 65 6e  5f 6d 61 78 79 0d 3b 60  |..screen_maxy.;`|
0000d8c0  15 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000d8d0  20 30 0d 3b 6a 15 20 20  20 20 20 20 20 20 65 71  | 0.;j.        eq|
0000d8e0  75 64 20 20 20 20 30 0d  3b 74 0d 2e 73 63 72 6f  |ud    0.;t..scro|
0000d8f0  6c 6c 5f 79 0d 3b 7e 15  20 20 20 20 20 20 20 20  |ll_y.;~.        |
0000d900  65 71 75 64 20 20 20 20  30 0d 3b 88 3c 20 20 20  |equd    0.;.<   |
0000d910  20 20 20 20 20 65 71 75  64 20 20 20 20 2d 32 20  |     equd    -2 |
0000d920  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000d930  20 20 20 20 20 3b 20 6f  70 65 6e 20 61 74 20 62  |     ; open at b|
0000d940  6f 74 74 6f 6d 0d 3b 92  30 20 20 20 20 20 20 20  |ottom.;.0       |
0000d950  20 65 71 75 64 20 20 20  20 28 31 20 3c 3c 20 34  | equd    (1 << 4|
0000d960  29 2b 28 31 20 3c 3c 20  31 31 29 2b 28 31 20 3c  |)+(1 << 11)+(1 <|
0000d970  3c 20 33 31 29 0d 3b 9c  17 20 20 20 20 20 20 20  |< 31).;..       |
0000d980  20 65 71 75 62 20 20 20  20 26 66 66 0d 3b a6 15  | equb    &ff.;..|
0000d990  20 20 20 20 20 20 20 20  65 71 75 62 20 20 20 20  |        equb    |
0000d9a0  30 0d 3b b0 15 20 20 20  20 20 20 20 20 65 71 75  |0.;..        equ|
0000d9b0  62 20 20 20 20 37 0d 3b  ba 46 20 20 20 20 20 20  |b    7.;.F      |
0000d9c0  20 20 65 71 75 62 20 20  20 20 34 20 20 20 20 20  |  equb    4     |
0000d9d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000d9e0  20 20 3b 20 77 69 6e 64  6f 77 20 62 61 63 6b 67  |  ; window backg|
0000d9f0  72 6f 75 6e 64 20 63 6f  6c 6f 75 72 0d 3b c4 15  |round colour.;..|
0000da00  20 20 20 20 20 20 20 20  65 71 75 62 20 20 20 20  |        equb    |
0000da10  30 0d 3b ce 15 20 20 20  20 20 20 20 20 65 71 75  |0.;..        equ|
0000da20  62 20 20 20 20 30 0d 3b  d8 15 20 20 20 20 20 20  |b    0.;..      |
0000da30  20 20 65 71 75 62 20 20  20 20 30 0d 3b e2 15 20  |  equb    0.;.. |
0000da40  20 20 20 20 20 20 20 65  71 75 62 20 20 20 20 30  |       equb    0|
0000da50  0d 3b ec 14 2e 77 6f 72  6b 61 72 65 61 5f 63 6f  |.;...workarea_co|
0000da60  6f 72 64 73 0d 3b f6 15  20 20 20 20 20 20 20 20  |ords.;..        |
0000da70  65 71 75 64 20 20 20 20  30 0d 3c 00 17 20 20 20  |equd    0.<..   |
0000da80  20 20 20 20 20 65 71 75  64 20 20 20 20 31 33 36  |     equd    136|
0000da90  0d 3c 0a 12 2e 77 6f 72  6b 61 72 65 61 5f 6d 61  |.<...workarea_ma|
0000daa0  78 78 0d 3c 14 15 20 20  20 20 20 20 20 20 65 71  |xx.<..        eq|
0000dab0  75 64 20 20 20 20 30 0d  3c 1e 12 2e 77 6f 72 6b  |ud    0.<...work|
0000dac0  61 72 65 61 5f 6d 61 78  79 0d 3c 28 15 20 20 20  |area_maxy.<(.   |
0000dad0  20 20 20 20 20 65 71 75  64 20 20 20 20 30 0d 3c  |     equd    0.<|
0000dae0  32 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |2.        equd  |
0000daf0  20 20 30 0d 3c 3c 46 20  20 20 20 20 20 20 20 65  |  0.<<F        e|
0000db00  71 75 64 20 20 20 20 33  20 3c 3c 20 31 32 20 20  |qud    3 << 12  |
0000db10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
0000db20  20 77 6f 72 6b 61 72 65  61 20 62 75 74 74 6f 6e  | workarea button|
0000db30  20 74 79 70 65 20 3d 20  33 0d 3c 46 42 20 20 20  | type = 3.<FB   |
0000db40  20 20 20 20 20 65 71 75  64 20 20 20 20 31 20 20  |     equd    1  |
0000db50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000db60  20 20 20 20 20 3b 20 75  73 65 20 77 69 6d 70 20  |     ; use wimp |
0000db70  73 70 72 69 74 65 20 61  72 65 61 0d 3c 50 15 20  |sprite area.<P. |
0000db80  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 30  |       equd    0|
0000db90  0d 3c 5a 2c 20 20 20 20  20 20 20 20 65 71 75 73  |.<Z,        equs|
0000dba0  20 20 20 20 c4 31 32 2c  bd 30 29 20 20 20 20 20  |    .12,.0)     |
0000dbb0  20 20 3b 20 6e 6f 20 74  69 74 6c 65 0d 3c 64 48  |  ; no title.<dH|
0000dbc0  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000dbd0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
0000dbe0  20 20 20 20 20 20 20 20  3b 20 6e 6f 20 69 63 6f  |        ; no ico|
0000dbf0  6e 73 20 64 65 66 69 6e  65 64 20 6f 72 69 67 6e  |ns defined orign|
0000dc00  61 6c 6c 79 0d 3c 6e 04  0d 3c 78 53 3b 20 2d 2d  |ally.<n..<xS; --|
0000dc10  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000dc50  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 3c 82 4a 3b  |-----------.<.J;|
0000dc60  20 64 65 66 69 6e 65 20  74 68 65 20 69 6e 66 6f  | define the info|
0000dc70  20 77 69 6e 64 6f 77 20  61 6e 64 20 73 74 6f 72  | window and stor|
0000dc80  65 20 69 74 27 73 20 68  61 6e 64 6c 65 2e 20 76  |e it's handle. v|
0000dc90  20 73 65 74 20 69 66 20  65 72 72 6f 72 20 6f 63  | set if error oc|
0000dca0  63 75 72 65 64 0d 3c 8c  04 0d 3c 96 17 2e 64 65  |cured.<...<...de|
0000dcb0  66 69 6e 65 5f 69 6e 66  6f 5f 77 69 6e 64 6f 77  |fine_info_window|
0000dcc0  0d 3c a0 1e 20 20 20 20  20 20 20 20 73 74 6d 66  |.<..        stmf|
0000dcd0  64 20 20 20 72 31 33 21  2c 7b 72 31 34 7d 0d 3c  |d   r13!,{r14}.<|
0000dce0  aa 22 20 20 20 20 20 20  20 20 61 64 72 20 20 20  |."        adr   |
0000dcf0  20 20 72 31 2c 69 6e 66  6f 5f 77 69 6e 64 6f 77  |  r1,info_window|
0000dd00  0d 3c b4 28 20 20 20 20  20 20 20 20 73 77 69 20  |.<.(        swi |
0000dd10  20 20 20 20 22 58 57 69  6d 70 5f 43 72 65 61 74  |    "XWimp_Creat|
0000dd20  65 57 69 6e 64 6f 77 22  0d 3c be 29 20 20 20 20  |eWindow".<.)    |
0000dd30  20 20 20 20 73 74 72 76  63 20 20 20 72 30 2c 69  |    strvc   r0,i|
0000dd40  6e 66 6f 5f 77 69 6e 64  6f 77 5f 68 61 6e 64 6c  |nfo_window_handl|
0000dd50  65 0d 3c c8 4c 20 20 20  20 20 20 20 20 6c 64 6d  |e.<.L        ldm|
0000dd60  66 64 20 20 20 72 31 33  21 2c 7b 70 63 7d 20 20  |fd   r13!,{pc}  |
0000dd70  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 76  |             ; v|
0000dd80  20 77 69 6c 6c 20 62 65  20 73 65 74 20 69 66 20  | will be set if |
0000dd90  65 72 72 6f 72 20 6f 63  63 75 72 65 64 0d 3c d2  |error occured.<.|
0000dda0  04 0d 3c dc 53 3b 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..<.S; ---------|
0000ddb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000ddf0  2d 2d 2d 2d 0d 3c e6 23  3b 20 69 6e 66 6f 72 6d  |----.<.#; inform|
0000de00  61 74 69 6f 6e 20 61 62  6f 75 74 20 69 6e 66 6f  |ation about info|
0000de10  20 77 69 6e 64 6f 77 0d  3c f0 04 0d 3c fa 11 2e  | window.<...<...|
0000de20  77 69 6e 64 6f 77 5f 74  69 74 6c 65 0d 3d 04 2b  |window_title.=.+|
0000de30  20 20 20 20 20 20 20 20  65 71 75 73 20 20 20 20  |        equs    |
0000de40  22 41 62 6f 75 74 20 74  68 69 73 20 70 72 6f 67  |"About this prog|
0000de50  72 61 6d 22 2b bd 30 0d  3d 0e 15 2e 65 6e 64 5f  |ram"+.0.=...end_|
0000de60  77 69 6e 64 6f 77 5f 74  69 74 6c 65 0d 3d 18 11  |window_title.=..|
0000de70  20 20 20 20 20 20 20 20  61 6c 69 67 6e 0d 3d 22  |        align.="|
0000de80  09 2e 6e 61 6d 65 0d 3d  2c 21 20 20 20 20 20 20  |..name.=,!      |
0000de90  20 20 65 71 75 73 20 20  20 20 22 50 6c 61 63 65  |  equs    "Place|
0000dea0  20 49 74 22 2b bd 30 0d  3d 36 0d 2e 65 6e 64 5f  | It"+.0.=6..end_|
0000deb0  6e 61 6d 65 0d 3d 40 11  20 20 20 20 20 20 20 20  |name.=@.        |
0000dec0  61 6c 69 67 6e 0d 3d 4a  0c 2e 70 75 72 70 6f 73  |align.=J..purpos|
0000ded0  65 0d 3d 54 34 20 20 20  20 20 20 20 20 65 71 75  |e.=T4        equ|
0000dee0  73 20 20 20 20 22 50 6c  61 63 65 20 66 69 6c 65  |s    "Place file|
0000def0  73 20 6f 6e 20 74 68 65  20 62 61 63 6b 64 72 6f  |s on the backdro|
0000df00  70 22 2b bd 30 0d 3d 5e  10 2e 65 6e 64 5f 70 75  |p"+.0.=^..end_pu|
0000df10  72 70 6f 73 65 0d 3d 68  11 20 20 20 20 20 20 20  |rpose.=h.       |
0000df20  20 61 6c 69 67 6e 0d 3d  72 0b 2e 61 75 74 68 6f  | align.=r..autho|
0000df30  72 0d 3d 7c 2d 20 20 20  20 20 20 20 20 65 71 75  |r.=|-        equ|
0000df40  73 20 20 20 20 22 70 6d  66 40 75 6b 2e 61 63 2e  |s    "pmf@uk.ac.|
0000df50  77 61 72 77 69 63 6b 2e  63 73 22 2b bd 30 0d 3d  |warwick.cs"+.0.=|
0000df60  86 0f 2e 65 6e 64 5f 61  75 74 68 6f 72 0d 3d 90  |...end_author.=.|
0000df70  11 20 20 20 20 20 20 20  20 61 6c 69 67 6e 0d 3d  |.        align.=|
0000df80  9a 0c 2e 76 65 72 73 69  6f 6e 0d 3d a4 29 20 20  |...version.=.)  |
0000df90  20 20 20 20 20 20 65 71  75 73 20 20 20 20 22 31  |      equs    "1|
0000dfa0  2e 30 33 20 28 31 39 2d  4a 61 6e 2d 39 31 29 22  |.03 (19-Jan-91)"|
0000dfb0  2b bd 30 0d 3d ae 10 2e  65 6e 64 5f 76 65 72 73  |+.0.=...end_vers|
0000dfc0  69 6f 6e 0d 3d b8 11 20  20 20 20 20 20 20 20 61  |ion.=..        a|
0000dfd0  6c 69 67 6e 0d 3d c2 04  0d 3d cc 10 2e 69 6e 66  |lign.=...=...inf|
0000dfe0  6f 5f 77 69 6e 64 6f 77  0d 3d d6 15 20 20 20 20  |o_window.=..    |
0000dff0  20 20 20 20 65 71 75 64  20 20 20 20 30 0d 3d e0  |    equd    0.=.|
0000e000  15 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e010  20 30 0d 3d ea 17 20 20  20 20 20 20 20 20 65 71  | 0.=..        eq|
0000e020  75 64 20 20 20 20 36 33  36 0d 3d f4 17 20 20 20  |ud    636.=..   |
0000e030  20 20 20 20 20 65 71 75  64 20 20 20 20 32 31 36  |     equd    216|
0000e040  0d 3d fe 15 20 20 20 20  20 20 20 20 65 71 75 64  |.=..        equd|
0000e050  20 20 20 20 30 0d 3e 08  15 20 20 20 20 20 20 20  |    0.>..       |
0000e060  20 65 71 75 64 20 20 20  20 30 0d 3e 12 16 20 20  | equd    0.>..  |
0000e070  20 20 20 20 20 20 65 71  75 64 20 20 20 20 2d 31  |      equd    -1|
0000e080  0d 3e 1c 39 20 20 20 20  20 20 20 20 65 71 75 64  |.>.9        equd|
0000e090  20 20 20 20 28 31 20 3c  3c 20 33 31 29 2b 28 31  |    (1 << 31)+(1|
0000e0a0  20 3c 3c 20 32 36 29 2b  28 31 20 3c 3c 20 34 29  | << 26)+(1 << 4)|
0000e0b0  2b 28 31 20 3c 3c 20 31  29 0d 3e 26 15 20 20 20  |+(1 << 1).>&.   |
0000e0c0  20 20 20 20 20 65 71 75  62 20 20 20 20 37 0d 3e  |     equb    7.>|
0000e0d0  30 15 20 20 20 20 20 20  20 20 65 71 75 62 20 20  |0.        equb  |
0000e0e0  20 20 32 0d 3e 3a 15 20  20 20 20 20 20 20 20 65  |  2.>:.        e|
0000e0f0  71 75 62 20 20 20 20 37  0d 3e 44 15 20 20 20 20  |qub    7.>D.    |
0000e100  20 20 20 20 65 71 75 62  20 20 20 20 31 0d 3e 4e  |    equb    1.>N|
0000e110  15 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e120  20 30 0d 3e 58 15 20 20  20 20 20 20 20 20 65 71  | 0.>X.        eq|
0000e130  75 64 20 20 20 20 30 0d  3e 62 18 20 20 20 20 20  |ud    0.>b.     |
0000e140  20 20 20 65 71 75 64 20  20 20 20 2d 32 31 36 0d  |   equd    -216.|
0000e150  3e 6c 17 20 20 20 20 20  20 20 20 65 71 75 64 20  |>l.        equd |
0000e160  20 20 20 36 33 36 0d 3e  76 15 20 20 20 20 20 20  |   636.>v.      |
0000e170  20 20 65 71 75 64 20 20  20 20 30 0d 3e 80 30 20  |  equd    0.>.0 |
0000e180  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 28  |       equd    (|
0000e190  31 20 3c 3c 20 38 29 2b  28 31 20 3c 3c 20 34 29  |1 << 8)+(1 << 4)|
0000e1a0  2b 28 31 20 3c 3c 20 33  29 2b 31 0d 3e 8a 15 20  |+(1 << 3)+1.>.. |
0000e1b0  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 30  |       equd    0|
0000e1c0  0d 3e 94 15 20 20 20 20  20 20 20 20 65 71 75 64  |.>..        equd|
0000e1d0  20 20 20 20 30 0d 3e 9e  15 20 20 20 20 20 20 20  |    0.>..       |
0000e1e0  20 65 71 75 64 20 20 20  20 30 0d 3e a8 20 20 20  | equd    0.>.   |
0000e1f0  20 20 20 20 20 20 65 71  75 64 20 20 20 20 77 69  |      equd    wi|
0000e200  6e 64 6f 77 5f 74 69 74  6c 65 0d 3e b2 16 20 20  |ndow_title.>..  |
0000e210  20 20 20 20 20 20 65 71  75 64 20 20 20 20 2d 31  |      equd    -1|
0000e220  0d 3e bc 31 20 20 20 20  20 20 20 20 65 71 75 64  |.>.1        equd|
0000e230  20 20 20 20 65 6e 64 5f  77 69 6e 64 6f 77 5f 74  |    end_window_t|
0000e240  69 74 6c 65 2d 77 69 6e  64 6f 77 5f 74 69 74 6c  |itle-window_titl|
0000e250  65 0d 3e c6 15 20 20 20  20 20 20 20 20 65 71 75  |e.>..        equ|
0000e260  64 20 20 20 20 38 0d 3e  d0 16 20 20 20 20 20 20  |d    8.>..      |
0000e270  20 20 65 71 75 64 20 20  20 20 35 38 0d 3e da 17  |  equd    58.>..|
0000e280  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000e290  2d 34 38 0d 3e e4 17 20  20 20 20 20 20 20 20 65  |-48.>..        e|
0000e2a0  71 75 64 20 20 20 20 31  35 34 0d 3e ee 16 20 20  |qud    154.>..  |
0000e2b0  20 20 20 20 20 20 65 71  75 64 20 20 20 20 2d 38  |      equd    -8|
0000e2c0  0d 3e f8 33 20 20 20 20  20 20 20 20 65 71 75 64  |.>.3        equd|
0000e2d0  20 20 20 20 28 26 31 37  20 3c 3c 20 32 34 29 2b  |    (&17 << 24)+|
0000e2e0  28 31 20 3c 3c 20 34 29  2b 28 31 20 3c 3c 20 33  |(1 << 4)+(1 << 3|
0000e2f0  29 2b 31 0d 3f 02 1b 20  20 20 20 20 20 20 20 a4  |)+1.?..        .|
0000e300  73 74 72 69 6e 67 28 22  4e 61 6d 65 22 29 0d 3f  |string("Name").?|
0000e310  0c 16 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
0000e320  20 20 31 34 0d 3f 16 18  20 20 20 20 20 20 20 20  |  14.?..        |
0000e330  65 71 75 64 20 20 20 20  2d 31 30 30 0d 3f 20 17  |equd    -100.? .|
0000e340  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000e350  31 35 34 0d 3f 2a 17 20  20 20 20 20 20 20 20 65  |154.?*.        e|
0000e360  71 75 64 20 20 20 20 2d  36 30 0d 3f 34 33 20 20  |qud    -60.?43  |
0000e370  20 20 20 20 20 20 65 71  75 64 20 20 20 20 28 26  |      equd    (&|
0000e380  31 37 20 3c 3c 20 32 34  29 2b 28 31 20 3c 3c 20  |17 << 24)+(1 << |
0000e390  34 29 2b 28 31 20 3c 3c  20 33 29 2b 31 0d 3f 3e  |4)+(1 << 3)+1.?>|
0000e3a0  1e 20 20 20 20 20 20 20  20 a4 73 74 72 69 6e 67  |.        .string|
0000e3b0  28 22 50 75 72 70 6f 73  65 22 29 0d 3f 48 16 20  |("Purpose").?H. |
0000e3c0  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 33  |       equd    3|
0000e3d0  30 0d 3f 52 18 20 20 20  20 20 20 20 20 65 71 75  |0.?R.        equ|
0000e3e0  64 20 20 20 20 2d 31 35  32 0d 3f 5c 17 20 20 20  |d    -152.?\.   |
0000e3f0  20 20 20 20 20 65 71 75  64 20 20 20 20 31 35 34  |     equd    154|
0000e400  0d 3f 66 18 20 20 20 20  20 20 20 20 65 71 75 64  |.?f.        equd|
0000e410  20 20 20 20 2d 31 31 32  0d 3f 70 33 20 20 20 20  |    -112.?p3    |
0000e420  20 20 20 20 65 71 75 64  20 20 20 20 28 26 31 37  |    equd    (&17|
0000e430  20 3c 3c 20 32 34 29 2b  28 31 20 3c 3c 20 34 29  | << 24)+(1 << 4)|
0000e440  2b 28 31 20 3c 3c 20 33  29 2b 31 0d 3f 7a 1d 20  |+(1 << 3)+1.?z. |
0000e450  20 20 20 20 20 20 20 a4  73 74 72 69 6e 67 28 22  |       .string("|
0000e460  41 75 74 68 6f 72 22 29  0d 3f 84 16 20 20 20 20  |Author").?..    |
0000e470  20 20 20 20 65 71 75 64  20 20 20 20 31 34 0d 3f  |    equd    14.?|
0000e480  8e 18 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
0000e490  20 20 2d 32 30 30 0d 3f  98 17 20 20 20 20 20 20  |  -200.?..      |
0000e4a0  20 20 65 71 75 64 20 20  20 20 31 35 34 0d 3f a2  |  equd    154.?.|
0000e4b0  18 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e4c0  20 2d 31 36 30 0d 3f ac  33 20 20 20 20 20 20 20  | -160.?.3       |
0000e4d0  20 65 71 75 64 20 20 20  20 28 26 31 37 20 3c 3c  | equd    (&17 <<|
0000e4e0  20 32 34 29 2b 28 31 20  3c 3c 20 34 29 2b 28 31  | 24)+(1 << 4)+(1|
0000e4f0  20 3c 3c 20 33 29 2b 31  0d 3f b6 1e 20 20 20 20  | << 3)+1.?..    |
0000e500  20 20 20 20 a4 73 74 72  69 6e 67 28 22 56 65 72  |    .string("Ver|
0000e510  73 69 6f 6e 22 29 0d 3f  c0 17 20 20 20 20 20 20  |sion").?..      |
0000e520  20 20 65 71 75 64 20 20  20 20 31 35 34 0d 3f ca  |  equd    154.?.|
0000e530  17 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e540  20 2d 35 32 0d 3f d4 17  20 20 20 20 20 20 20 20  | -52.?..        |
0000e550  65 71 75 64 20 20 20 20  36 33 30 0d 3f de 16 20  |equd    630.?.. |
0000e560  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 2d  |       equd    -|
0000e570  34 0d 3f e8 4c 20 20 20  20 20 20 20 20 65 71 75  |4.?.L        equ|
0000e580  64 20 20 20 20 28 37 20  3c 3c 20 32 34 29 2b 28  |d    (7 << 24)+(|
0000e590  31 20 3c 3c 20 38 29 2b  28 31 20 3c 3c 20 35 29  |1 << 8)+(1 << 5)|
0000e5a0  2b 28 31 20 3c 3c 20 34  29 2b 28 31 20 3c 3c 20  |+(1 << 4)+(1 << |
0000e5b0  33 29 2b 28 31 20 3c 3c  20 32 29 2b 31 0d 3f f2  |3)+(1 << 2)+1.?.|
0000e5c0  18 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e5d0  20 6e 61 6d 65 0d 3f fc  16 20 20 20 20 20 20 20  | name.?..       |
0000e5e0  20 65 71 75 64 20 20 20  20 2d 31 0d 40 06 21 20  | equd    -1.@.! |
0000e5f0  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 65  |       equd    e|
0000e600  6e 64 5f 6e 61 6d 65 2d  6e 61 6d 65 0d 40 10 17  |nd_name-name.@..|
0000e610  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000e620  31 35 34 0d 40 1a 18 20  20 20 20 20 20 20 20 65  |154.@..        e|
0000e630  71 75 64 20 20 20 20 2d  31 30 34 0d 40 24 17 20  |qud    -104.@$. |
0000e640  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 36  |       equd    6|
0000e650  33 30 0d 40 2e 17 20 20  20 20 20 20 20 20 65 71  |30.@..        eq|
0000e660  75 64 20 20 20 20 2d 35  36 0d 40 38 4c 20 20 20  |ud    -56.@8L   |
0000e670  20 20 20 20 20 65 71 75  64 20 20 20 20 28 37 20  |     equd    (7 |
0000e680  3c 3c 20 32 34 29 2b 28  31 20 3c 3c 20 38 29 2b  |<< 24)+(1 << 8)+|
0000e690  28 31 20 3c 3c 20 35 29  2b 28 31 20 3c 3c 20 34  |(1 << 5)+(1 << 4|
0000e6a0  29 2b 28 31 20 3c 3c 20  33 29 2b 28 31 20 3c 3c  |)+(1 << 3)+(1 <<|
0000e6b0  20 32 29 2b 31 0d 40 42  1b 20 20 20 20 20 20 20  | 2)+1.@B.       |
0000e6c0  20 65 71 75 64 20 20 20  20 70 75 72 70 6f 73 65  | equd    purpose|
0000e6d0  0d 40 4c 16 20 20 20 20  20 20 20 20 65 71 75 64  |.@L.        equd|
0000e6e0  20 20 20 20 2d 31 0d 40  56 27 20 20 20 20 20 20  |    -1.@V'      |
0000e6f0  20 20 65 71 75 64 20 20  20 20 65 6e 64 5f 70 75  |  equd    end_pu|
0000e700  72 70 6f 73 65 2d 70 75  72 70 6f 73 65 0d 40 60  |rpose-purpose.@`|
0000e710  17 20 20 20 20 20 20 20  20 65 71 75 64 20 20 20  |.        equd   |
0000e720  20 31 35 34 0d 40 6a 18  20 20 20 20 20 20 20 20  | 154.@j.        |
0000e730  65 71 75 64 20 20 20 20  2d 31 35 36 0d 40 74 17  |equd    -156.@t.|
0000e740  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000e750  36 33 30 0d 40 7e 18 20  20 20 20 20 20 20 20 65  |630.@~.        e|
0000e760  71 75 64 20 20 20 20 2d  31 30 38 0d 40 88 4c 20  |qud    -108.@.L |
0000e770  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 28  |       equd    (|
0000e780  37 20 3c 3c 20 32 34 29  2b 28 31 20 3c 3c 20 38  |7 << 24)+(1 << 8|
0000e790  29 2b 28 31 20 3c 3c 20  35 29 2b 28 31 20 3c 3c  |)+(1 << 5)+(1 <<|
0000e7a0  20 34 29 2b 28 31 20 3c  3c 20 33 29 2b 28 31 20  | 4)+(1 << 3)+(1 |
0000e7b0  3c 3c 20 32 29 2b 31 0d  40 92 1a 20 20 20 20 20  |<< 2)+1.@..     |
0000e7c0  20 20 20 65 71 75 64 20  20 20 20 61 75 74 68 6f  |   equd    autho|
0000e7d0  72 0d 40 9c 16 20 20 20  20 20 20 20 20 65 71 75  |r.@..        equ|
0000e7e0  64 20 20 20 20 2d 31 0d  40 a6 25 20 20 20 20 20  |d    -1.@.%     |
0000e7f0  20 20 20 65 71 75 64 20  20 20 20 65 6e 64 5f 61  |   equd    end_a|
0000e800  75 74 68 6f 72 2d 61 75  74 68 6f 72 0d 40 b0 17  |uthor-author.@..|
0000e810  20 20 20 20 20 20 20 20  65 71 75 64 20 20 20 20  |        equd    |
0000e820  31 35 34 0d 40 ba 18 20  20 20 20 20 20 20 20 65  |154.@..        e|
0000e830  71 75 64 20 20 20 20 2d  32 30 38 0d 40 c4 17 20  |qud    -208.@.. |
0000e840  20 20 20 20 20 20 20 65  71 75 64 20 20 20 20 36  |       equd    6|
0000e850  33 30 0d 40 ce 18 20 20  20 20 20 20 20 20 65 71  |30.@..        eq|
0000e860  75 64 20 20 20 20 2d 31  36 30 0d 40 d8 4c 20 20  |ud    -160.@.L  |
0000e870  20 20 20 20 20 20 65 71  75 64 20 20 20 20 28 37  |      equd    (7|
0000e880  20 3c 3c 20 32 34 29 2b  28 31 20 3c 3c 20 38 29  | << 24)+(1 << 8)|
0000e890  2b 28 31 20 3c 3c 20 35  29 2b 28 31 20 3c 3c 20  |+(1 << 5)+(1 << |
0000e8a0  34 29 2b 28 31 20 3c 3c  20 33 29 2b 28 31 20 3c  |4)+(1 << 3)+(1 <|
0000e8b0  3c 20 32 29 2b 31 0d 40  e2 1b 20 20 20 20 20 20  |< 2)+1.@..      |
0000e8c0  20 20 65 71 75 64 20 20  20 20 76 65 72 73 69 6f  |  equd    versio|
0000e8d0  6e 0d 40 ec 16 20 20 20  20 20 20 20 20 65 71 75  |n.@..        equ|
0000e8e0  64 20 20 20 20 2d 31 0d  40 f6 27 20 20 20 20 20  |d    -1.@.'     |
0000e8f0  20 20 20 65 71 75 64 20  20 20 20 65 6e 64 5f 76  |   equd    end_v|
0000e900  65 72 73 69 6f 6e 2d 76  65 72 73 69 6f 6e 0d 41  |ersion-version.A|
0000e910  00 04 0d 41 0a 53 3b 20  2d 2d 2d 2d 2d 2d 2d 2d  |...A.S; --------|
0000e920  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000e960  2d 2d 2d 2d 2d 0d 41 14  1c 3b 20 73 65 74 20 69  |-----.A..; set i|
0000e970  6e 69 74 69 61 6c 20 63  6f 6e 64 69 74 69 6f 6e  |nitial condition|
0000e980  73 0d 41 1e 04 0d 41 28  1b 2e 73 65 74 5f 69 6e  |s.A...A(..set_in|
0000e990  69 74 69 61 6c 5f 63 6f  6e 64 69 74 69 6f 6e 73  |itial_conditions|
0000e9a0  0d 41 32 19 20 20 20 20  20 20 20 20 6d 76 6e 20  |.A2.        mvn |
0000e9b0  20 20 20 20 72 30 2c 23  30 0d 41 3c 19 20 20 20  |    r0,#0.A<.   |
0000e9c0  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 31 2c  |     mov     r1,|
0000e9d0  72 30 0d 41 46 24 20 20  20 20 20 20 20 20 73 77  |r0.AF$        sw|
0000e9e0  69 20 20 20 20 20 22 58  57 69 6d 70 5f 53 6c 6f  |i     "XWimp_Slo|
0000e9f0  74 53 69 7a 65 22 0d 41  50 1a 20 20 20 20 20 20  |tSize".AP.      |
0000ea00  20 20 6d 6f 76 76 73 20  20 20 70 63 2c 72 31 34  |  movvs   pc,r14|
0000ea10  0d 41 5a 21 20 20 20 20  20 20 20 20 61 64 72 20  |.AZ!        adr |
0000ea20  20 20 20 20 72 31 2c 68  65 61 70 5f 73 74 61 72  |    r1,heap_star|
0000ea30  74 0d 41 64 1c 20 20 20  20 20 20 20 20 73 75 62  |t.Ad.        sub|
0000ea40  20 20 20 20 20 72 33 2c  72 30 2c 72 31 0d 41 6e  |     r3,r0,r1.An|
0000ea50  49 20 20 20 20 20 20 20  20 61 64 64 20 20 20 20  |I        add    |
0000ea60  20 72 33 2c 72 33 2c 23  26 38 30 30 30 20 20 20  | r3,r3,#&8000   |
0000ea70  20 20 20 20 20 20 20 20  20 3b 20 72 33 20 3d 20  |         ; r3 = |
0000ea80  61 6d 6f 75 6e 74 20 6f  66 20 6d 65 6d 6f 72 79  |amount of memory|
0000ea90  20 73 70 61 72 65 0d 41  78 3d 20 20 20 20 20 20  | spare.Ax=      |
0000eaa0  20 20 6d 6f 76 20 20 20  20 20 72 30 2c 23 30 20  |  mov     r0,#0 |
0000eab0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000eac0  20 20 3b 20 69 6e 69 74  69 61 6c 69 73 65 20 68  |  ; initialise h|
0000ead0  65 61 70 0d 41 82 28 20  20 20 20 20 20 20 20 73  |eap.A.(        s|
0000eae0  74 72 20 20 20 20 20 72  30 2c 73 74 61 72 74 5f  |tr     r0,start_|
0000eaf0  6c 69 6e 6b 65 64 5f 6c  69 73 74 0d 41 8c 1e 20  |linked_list.A.. |
0000eb00  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
0000eb10  58 4f 53 5f 48 65 61 70  22 0d 41 96 4b 20 20 20  |XOS_Heap".A.K   |
0000eb20  20 20 20 20 20 6d 6f 76  20 20 20 20 20 70 63 2c  |     mov     pc,|
0000eb30  72 31 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |r14             |
0000eb40  20 20 20 20 20 3b 20 72  65 74 75 72 6e 20 77 69  |     ; return wi|
0000eb50  74 68 20 76 20 73 65 74  20 61 63 63 6f 72 64 69  |th v set accordi|
0000eb60  6e 67 6c 79 0d 41 a0 04  0d 41 aa 53 3b 20 2d 2d  |ngly.A...A.S; --|
0000eb70  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000ebb0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 41 b4 28 3b  |-----------.A.(;|
0000ebc0  20 6c 6f 61 64 20 74 68  65 20 21 43 6f 6e 66 69  | load the !Confi|
0000ebd0  67 20 66 69 6c 65 20 69  66 20 69 74 20 65 78 69  |g file if it exi|
0000ebe0  73 74 73 0d 41 be 04 0d  41 c8 15 2e 6c 6f 61 64  |sts.A...A...load|
0000ebf0  5f 63 6f 6e 66 69 67 5f  66 69 6c 65 0d 41 d2 1e  |_config_file.A..|
0000ec00  20 20 20 20 20 20 20 20  73 74 6d 66 64 20 20 20  |        stmfd   |
0000ec10  72 31 33 21 2c 7b 72 31  34 7d 0d 41 dc 53 20 20  |r13!,{r14}.A.S  |
0000ec20  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 30  |      mov     r0|
0000ec30  2c 23 26 34 37 20 20 20  20 20 20 20 20 20 20 20  |,#&47           |
0000ec40  20 20 20 20 20 20 3b 20  6f 70 65 6e 20 66 69 6c  |      ; open fil|
0000ec50  65 2c 20 63 6f 6d 70 6c  61 69 6e 20 69 66 20 69  |e, complain if i|
0000ec60  73 20 61 20 64 69 72 65  63 74 6f 72 79 0d 41 e6  |s a directory.A.|
0000ec70  3c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |<               |
0000ec80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000ec90  20 20 20 20 20 20 20 20  20 3b 20 6e 6f 20 73 65  |         ; no se|
0000eca0  61 72 63 68 20 70 61 74  68 0d 41 f0 2b 20 20 20  |arch path.A.+   |
0000ecb0  20 20 20 20 20 61 64 72  20 20 20 20 20 72 31 2c  |     adr     r1,|
0000ecc0  63 6f 6e 66 69 67 5f 66  69 6c 65 6e 61 6d 65 2b  |config_filename+|
0000ecd0  26 38 30 30 0d 41 fa 1f  20 20 20 20 20 20 20 20  |&800.A..        |
0000ece0  73 75 62 20 20 20 20 20  72 31 2c 72 31 2c 23 26  |sub     r1,r1,#&|
0000ecf0  38 30 30 0d 42 04 1e 20  20 20 20 20 20 20 20 73  |800.B..        s|
0000ed00  77 69 20 20 20 20 20 22  58 4f 53 5f 46 69 6e 64  |wi     "XOS_Find|
0000ed10  22 0d 42 0e 1d 20 20 20  20 20 20 20 20 6c 64 6d  |".B..        ldm|
0000ed20  76 73 66 64 20 72 31 33  21 2c 7b 70 63 7d 0d 42  |vsfd r13!,{pc}.B|
0000ed30  18 48 20 20 20 20 20 20  20 20 6d 6f 76 73 20 20  |.H        movs  |
0000ed40  20 20 72 31 2c 72 30 20  20 20 20 20 20 20 20 20  |  r1,r0         |
0000ed50  20 20 20 20 20 20 20 20  20 20 3b 20 72 31 20 3d  |          ; r1 =|
0000ed60  20 66 69 6c 65 68 61 6e  64 6c 65 2c 20 73 65 74  | filehandle, set|
0000ed70  20 66 6c 61 67 73 0d 42  22 46 20 20 20 20 20 20  | flags.B"F      |
0000ed80  20 20 6c 64 6d 65 71 66  64 20 72 31 33 21 2c 7b  |  ldmeqfd r13!,{|
0000ed90  70 63 7d 20 20 20 20 20  20 20 20 20 20 20 20 20  |pc}             |
0000eda0  20 20 3b 20 69 66 20 66  69 6c 65 20 6e 6f 74 20  |  ; if file not |
0000edb0  66 6f 75 6e 64 20 72 65  74 75 72 6e 0d 42 2c 42  |found return.B,B|
0000edc0  20 20 20 20 20 20 20 20  73 77 69 20 20 20 20 20  |        swi     |
0000edd0  22 58 4f 53 5f 42 47 65  74 22 20 20 20 20 20 20  |"XOS_BGet"      |
0000ede0  20 20 20 20 20 20 20 20  3b 20 67 65 74 20 69 63  |        ; get ic|
0000edf0  6f 6e 20 74 65 78 74 20  63 6f 6c 6f 75 72 0d 42  |on text colour.B|
0000ee00  36 1e 20 20 20 20 20 20  20 20 62 76 73 20 20 20  |6.        bvs   |
0000ee10  20 20 72 65 61 64 5f 65  72 72 6f 72 0d 42 40 32  |  read_error.B@2|
0000ee20  20 20 20 20 20 20 20 20  62 63 73 20 20 20 20 20  |        bcs     |
0000ee30  63 6f 6e 66 69 67 5f 66  69 6c 65 5f 65 6e 64 65  |config_file_ende|
0000ee40  64 5f 75 6e 65 78 70 65  63 74 65 64 6c 79 0d 42  |d_unexpectedly.B|
0000ee50  4a 27 20 20 20 20 20 20  20 20 73 74 72 62 20 20  |J'        strb  |
0000ee60  20 20 72 30 2c 69 63 6f  6e 5f 74 65 78 74 5f 63  |  r0,icon_text_c|
0000ee70  6f 6c 6f 75 72 0d 42 54  26 20 20 20 20 20 20 20  |olour.BT&       |
0000ee80  20 73 74 72 20 20 20 20  20 72 30 2c 62 6c 61 63  | str     r0,blac|
0000ee90  6b 5f 74 65 78 74 5f 74  69 63 6b 0d 42 5e 04 0d  |k_text_tick.B^..|
0000eea0  42 68 1e 20 20 20 20 20  20 20 20 72 73 62 20 20  |Bh.        rsb  |
0000eeb0  20 20 20 72 32 2c 72 30  2c 23 26 38 31 0d 42 72  |   r2,r0,#&81.Br|
0000eec0  26 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |&        str    |
0000eed0  20 72 32 2c 77 68 69 74  65 5f 74 65 78 74 5f 74  | r2,white_text_t|
0000eee0  69 63 6b 0d 42 7c 04 0d  42 86 44 20 20 20 20 20  |ick.B|..B.D     |
0000eef0  20 20 20 74 65 71 20 20  20 20 20 72 30 2c 23 30  |   teq     r0,#0|
0000ef00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000ef10  20 20 20 3b 20 73 65 65  20 69 66 20 69 63 6f 6e  |   ; see if icon|
0000ef20  20 74 65 78 74 20 77 68  69 74 65 0d 42 90 21 20  | text white.B.! |
0000ef30  20 20 20 20 20 20 20 6c  64 72 65 71 20 20 20 72  |       ldreq   r|
0000ef40  30 2c 69 63 6f 6e 5f 66  6c 61 67 73 0d 42 9a 43  |0,icon_flags.B.C|
0000ef50  20 20 20 20 20 20 20 20  62 69 63 65 71 20 20 20  |        biceq   |
0000ef60  72 30 2c 72 30 2c 23 37  20 3c 3c 20 32 34 20 20  |r0,r0,#7 << 24  |
0000ef70  20 20 20 20 20 20 20 20  3b 20 73 65 65 20 74 65  |        ; see te|
0000ef80  78 74 20 63 6f 6c 6f 75  72 20 77 68 69 74 65 0d  |xt colour white.|
0000ef90  42 a4 21 20 20 20 20 20  20 20 20 73 74 72 65 71  |B.!        streq|
0000efa0  20 20 20 72 30 2c 69 63  6f 6e 5f 66 6c 61 67 73  |   r0,icon_flags|
0000efb0  0d 42 ae 04 0d 42 b8 41  20 20 20 20 20 20 20 20  |.B...B.A        |
0000efc0  73 77 69 20 20 20 20 20  22 58 4f 53 5f 42 47 65  |swi     "XOS_BGe|
0000efd0  74 22 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |t"              |
0000efe0  3b 20 67 65 74 20 6e 75  6d 62 65 72 20 6f 66 20  |; get number of |
0000eff0  69 63 6f 6e 73 0d 42 c2  1e 20 20 20 20 20 20 20  |icons.B..       |
0000f000  20 62 76 73 20 20 20 20  20 72 65 61 64 5f 65 72  | bvs     read_er|
0000f010  72 6f 72 0d 42 cc 32 20  20 20 20 20 20 20 20 62  |ror.B.2        b|
0000f020  63 73 20 20 20 20 20 63  6f 6e 66 69 67 5f 66 69  |cs     config_fi|
0000f030  6c 65 5f 65 6e 64 65 64  5f 75 6e 65 78 70 65 63  |le_ended_unexpec|
0000f040  74 65 64 6c 79 0d 42 d6  26 20 20 20 20 20 20 20  |tedly.B.&       |
0000f050  20 73 74 72 62 20 20 20  20 72 30 2c 6e 75 6d 62  | strb    r0,numb|
0000f060  65 72 5f 6f 66 5f 69 63  6f 6e 73 0d 42 e0 28 20  |er_of_icons.B.( |
0000f070  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
0000f080  35 2c 73 74 61 72 74 5f  6c 69 6e 6b 65 64 5f 6c  |5,start_linked_l|
0000f090  69 73 74 0d 42 ea 19 20  20 20 20 20 20 20 20 74  |ist.B..        t|
0000f0a0  65 71 20 20 20 20 20 72  30 2c 23 30 0d 42 f4 29  |eq     r0,#0.B.)|
0000f0b0  20 20 20 20 20 20 20 20  62 65 71 20 20 20 20 20  |        beq     |
0000f0c0  6c 6f 61 64 5f 63 6f 6e  66 69 67 5f 66 69 6c 65  |load_config_file|
0000f0d0  5f 64 6f 6e 65 0d 42 fe  04 0d 43 08 1a 2e 6c 6f  |_done.B...C...lo|
0000f0e0  61 64 5f 63 6f 6e 66 69  67 5f 66 69 6c 65 5f 6c  |ad_config_file_l|
0000f0f0  6f 6f 70 0d 43 12 4a 20  20 20 20 20 20 20 20 6d  |oop.C.J        m|
0000f100  6f 76 20 20 20 20 20 72  30 2c 23 34 20 20 20 20  |ov     r0,#4    |
0000f110  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
0000f120  20 72 65 61 64 20 62 79  74 65 73 20 75 73 69 6e  | read bytes usin|
0000f130  67 20 63 75 72 72 65 6e  74 20 63 73 70 0d 43 1c  |g current csp.C.|
0000f140  28 20 20 20 20 20 20 20  20 61 64 72 20 20 20 20  |(        adr    |
0000f150  20 72 32 2c 68 65 61 70  5f 65 6e 74 72 79 5f 6c  | r2,heap_entry_l|
0000f160  65 6e 67 74 68 0d 43 26  3d 20 20 20 20 20 20 20  |ength.C&=       |
0000f170  20 6d 6f 76 20 20 20 20  20 72 33 2c 23 34 20 20  | mov     r3,#4  |
0000f180  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000f190  20 3b 20 72 65 61 64 20  66 6f 75 72 20 62 79 74  | ; read four byt|
0000f1a0  65 73 0d 43 30 1e 20 20  20 20 20 20 20 20 73 77  |es.C0.        sw|
0000f1b0  69 20 20 20 20 20 22 58  4f 53 5f 47 42 50 42 22  |i     "XOS_GBPB"|
0000f1c0  0d 43 3a 1e 20 20 20 20  20 20 20 20 62 76 73 20  |.C:.        bvs |
0000f1d0  20 20 20 20 72 65 61 64  5f 65 72 72 6f 72 0d 43  |    read_error.C|
0000f1e0  44 32 20 20 20 20 20 20  20 20 62 63 73 20 20 20  |D2        bcs   |
0000f1f0  20 20 63 6f 6e 66 69 67  5f 66 69 6c 65 5f 65 6e  |  config_file_en|
0000f200  64 65 64 5f 75 6e 65 78  70 65 63 74 65 64 6c 79  |ded_unexpectedly|
0000f210  0d 43 4e 28 20 20 20 20  20 20 20 20 6c 64 72 20  |.CN(        ldr |
0000f220  20 20 20 20 72 33 2c 68  65 61 70 5f 65 6e 74 72  |    r3,heap_entr|
0000f230  79 5f 6c 65 6e 67 74 68  0d 43 58 19 20 20 20 20  |y_length.CX.    |
0000f240  20 20 20 20 74 65 71 20  20 20 20 20 72 33 2c 23  |    teq     r3,#|
0000f250  30 0d 43 62 29 20 20 20  20 20 20 20 20 62 65 71  |0.Cb)        beq|
0000f260  20 20 20 20 20 6c 6f 61  64 5f 63 6f 6e 66 69 67  |     load_config|
0000f270  5f 66 69 6c 65 5f 64 6f  6e 65 0d 43 6c 22 20 20  |_file_done.Cl"  |
0000f280  20 20 20 20 20 20 62 6c  20 20 20 20 20 20 67 65  |      bl      ge|
0000f290  74 5f 68 65 61 70 5f 62  6c 6f 63 6b 0d 43 76 19  |t_heap_block.Cv.|
0000f2a0  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
0000f2b0  72 32 2c 23 30 0d 43 80  34 20 20 20 20 20 20 20  |r2,#0.C.4       |
0000f2c0  20 61 64 72 65 71 20 20  20 72 30 2c 72 61 6e 5f  | adreq   r0,ran_|
0000f2d0  6f 75 74 5f 6f 66 5f 6d  65 6d 6f 72 79 5f 64 75  |out_of_memory_du|
0000f2e0  72 69 6e 67 5f 6c 6f 61  64 0d 43 8a 1e 20 20 20  |ring_load.C..   |
0000f2f0  20 20 20 20 20 62 65 71  20 20 20 20 20 72 65 61  |     beq     rea|
0000f300  64 5f 65 72 72 6f 72 0d  43 94 4c 20 20 20 20 20  |d_error.C.L     |
0000f310  20 20 20 73 74 72 20 20  20 20 20 72 32 2c 5b 72  |   str     r2,[r|
0000f320  35 2c 23 6e 65 78 74 5d  20 20 20 20 20 20 20 20  |5,#next]        |
0000f330  20 20 20 3b 20 73 74 6f  72 65 20 70 6f 69 6e 74  |   ; store point|
0000f340  65 72 20 74 6f 20 6e 65  78 74 20 64 61 74 61 20  |er to next data |
0000f350  73 65 74 0d 43 9e 4e 20  20 20 20 20 20 20 20 6d  |set.C.N        m|
0000f360  6f 76 20 20 20 20 20 72  35 2c 72 32 20 20 20 20  |ov     r5,r2    |
0000f370  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
0000f380  20 75 70 64 61 74 65 20  70 72 65 76 69 6f 75 73  | update previous|
0000f390  20 64 61 74 61 20 73 65  74 20 70 6f 69 6e 74 65  | data set pointe|
0000f3a0  72 0d 43 a8 21 20 20 20  20 20 20 20 20 73 74 72  |r.C.!        str|
0000f3b0  20 20 20 20 20 72 33 2c  5b 72 32 2c 23 73 69 7a  |     r3,[r2,#siz|
0000f3c0  65 5d 0d 43 b2 4a 20 20  20 20 20 20 20 20 61 64  |e].C.J        ad|
0000f3d0  64 20 20 20 20 20 72 32  2c 72 32 2c 23 6f 66 66  |d     r2,r2,#off|
0000f3e0  73 65 74 5f 74 6f 5f 6c  65 61 66 6e 61 6d 65 20  |set_to_leafname |
0000f3f0  3b 20 73 6b 69 70 20 6e  65 78 74 20 61 6e 73 20  |; skip next ans |
0000f400  73 69 7a 65 20 65 6e 74  72 69 65 73 0d 43 bc 44  |size entries.C.D|
0000f410  20 20 20 20 20 20 20 20  73 75 62 20 20 20 20 20  |        sub     |
0000f420  72 33 2c 72 33 2c 23 6f  66 66 73 65 74 5f 74 6f  |r3,r3,#offset_to|
0000f430  5f 6c 65 61 66 6e 61 6d  65 20 3b 20 69 6e 20 6c  |_leafname ; in l|
0000f440  69 6e 6b 65 64 20 6c 69  73 74 20 65 6e 74 72 79  |inked list entry|
0000f450  0d 43 c6 1e 20 20 20 20  20 20 20 20 73 77 69 20  |.C..        swi |
0000f460  20 20 20 20 22 58 4f 53  5f 47 42 50 42 22 0d 43  |    "XOS_GBPB".C|
0000f470  d0 1e 20 20 20 20 20 20  20 20 62 76 73 20 20 20  |..        bvs   |
0000f480  20 20 72 65 61 64 5f 65  72 72 6f 72 0d 43 da 32  |  read_error.C.2|
0000f490  20 20 20 20 20 20 20 20  62 63 73 20 20 20 20 20  |        bcs     |
0000f4a0  63 6f 6e 66 69 67 5f 66  69 6c 65 5f 65 6e 64 65  |config_file_ende|
0000f4b0  64 5f 75 6e 65 78 70 65  63 74 65 64 6c 79 0d 43  |d_unexpectedly.C|
0000f4c0  e4 29 20 20 20 20 20 20  20 20 62 20 20 20 20 20  |.)        b     |
0000f4d0  20 20 6c 6f 61 64 5f 63  6f 6e 66 69 67 5f 66 69  |  load_config_fi|
0000f4e0  6c 65 5f 6c 6f 6f 70 0d  43 ee 04 0d 43 f8 1a 2e  |le_loop.C...C...|
0000f4f0  6c 6f 61 64 5f 63 6f 6e  66 69 67 5f 66 69 6c 65  |load_config_file|
0000f500  5f 64 6f 6e 65 0d 44 02  19 20 20 20 20 20 20 20  |_done.D..       |
0000f510  20 6d 6f 76 20 20 20 20  20 72 30 2c 23 30 0d 44  | mov     r0,#0.D|
0000f520  0c 3f 20 20 20 20 20 20  20 20 73 74 72 62 20 20  |.?        strb  |
0000f530  20 20 72 30 2c 6e 75 6d  62 65 72 5f 73 65 6c 65  |  r0,number_sele|
0000f540  63 74 65 64 20 20 20 20  20 20 3b 20 6e 6f 20 69  |cted      ; no i|
0000f550  63 6f 6e 73 20 73 65 6c  65 63 74 65 64 0d 44 16  |cons selected.D.|
0000f560  45 20 20 20 20 20 20 20  20 73 74 72 20 20 20 20  |E        str    |
0000f570  20 72 30 2c 5b 72 35 2c  23 6e 65 78 74 5d 20 20  | r0,[r5,#next]  |
0000f580  20 20 20 20 20 20 20 20  20 3b 20 6d 61 72 6b 20  |         ; mark |
0000f590  65 6e 64 20 6f 66 20 6c  69 6e 6b 65 64 20 6c 69  |end of linked li|
0000f5a0  73 74 0d 44 20 19 20 20  20 20 20 20 20 20 6d 6f  |st.D .        mo|
0000f5b0  76 20 20 20 20 20 72 30  2c 23 30 0d 44 2a 1e 20  |v     r0,#0.D*. |
0000f5c0  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
0000f5d0  58 4f 53 5f 46 69 6e 64  22 0d 44 34 23 20 20 20  |XOS_Find".D4#   |
0000f5e0  20 20 20 20 20 62 6c 76  73 20 20 20 20 72 65 70  |     blvs    rep|
0000f5f0  6f 72 74 5f 65 72 72 6f  72 5f 6f 6b 0d 44 3e 28  |ort_error_ok.D>(|
0000f600  20 20 20 20 20 20 20 20  6c 64 72 20 20 20 20 20  |        ldr     |
0000f610  72 34 2c 73 74 61 72 74  5f 6c 69 6e 6b 65 64 5f  |r4,start_linked_|
0000f620  6c 69 73 74 0d 44 48 19  20 20 20 20 20 20 20 20  |list.DH.        |
0000f630  74 65 71 20 20 20 20 20  72 34 2c 23 30 0d 44 52  |teq     r4,#0.DR|
0000f640  1d 20 20 20 20 20 20 20  20 6c 64 6d 65 71 66 64  |.        ldmeqfd|
0000f650  20 72 31 33 21 2c 7b 70  63 7d 0d 44 5c 04 0d 44  | r13!,{pc}.D\..D|
0000f660  66 1b 2e 6c 6f 61 64 5f  63 6f 6e 66 69 67 5f 66  |f..load_config_f|
0000f670  69 6c 65 5f 6c 6f 6f 70  32 0d 44 70 19 20 20 20  |ile_loop2.Dp.   |
0000f680  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
0000f690  23 30 0d 44 7a 45 20 20  20 20 20 20 20 20 73 74  |#0.DzE        st|
0000f6a0  72 62 20 20 20 20 72 30  2c 5b 72 34 2c 23 73 65  |rb    r0,[r4,#se|
0000f6b0  6c 65 63 74 65 64 5d 20  20 20 20 20 20 20 3b 20  |lected]       ; |
0000f6c0  6d 61 72 6b 20 69 63 6f  6e 20 61 73 20 75 6e 73  |mark icon as uns|
0000f6d0  65 6c 65 63 74 65 64 0d  44 84 25 20 20 20 20 20  |elected.D.%     |
0000f6e0  20 20 20 6c 64 72 20 20  20 20 20 72 30 2c 5b 72  |   ldr     r0,[r|
0000f6f0  34 2c 23 66 69 6c 65 74  79 70 65 5d 0d 44 8e 40  |4,#filetype].D.@|
0000f700  20 20 20 20 20 20 20 20  74 65 71 20 20 20 20 20  |        teq     |
0000f710  72 30 2c 23 26 32 30 30  30 20 20 20 20 20 20 20  |r0,#&2000       |
0000f720  20 20 20 20 20 20 20 20  3b 20 73 65 65 20 69 66  |        ; see if|
0000f730  20 61 70 70 6c 69 63 61  74 69 6f 6e 0d 44 98 24  | application.D.$|
0000f740  20 20 20 20 20 20 20 20  62 6c 65 71 20 20 20 20  |        bleq    |
0000f750  62 6f 6f 74 5f 61 70 70  6c 69 63 61 74 69 6f 6e  |boot_application|
0000f760  0d 44 a2 21 20 20 20 20  20 20 20 20 6c 64 72 20  |.D.!        ldr |
0000f770  20 20 20 20 72 34 2c 5b  72 34 2c 23 6e 65 78 74  |    r4,[r4,#next|
0000f780  5d 0d 44 ac 19 20 20 20  20 20 20 20 20 74 65 71  |].D..        teq|
0000f790  20 20 20 20 20 72 34 2c  23 30 0d 44 b6 2a 20 20  |     r4,#0.D.*  |
0000f7a0  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 6c 6f  |      bne     lo|
0000f7b0  61 64 5f 63 6f 6e 66 69  67 5f 66 69 6c 65 5f 6c  |ad_config_file_l|
0000f7c0  6f 6f 70 32 0d 44 c0 04  0d 44 ca 28 20 20 20 20  |oop2.D...D.(    |
0000f7d0  20 20 20 20 6c 64 72 20  20 20 20 20 72 34 2c 73  |    ldr     r4,s|
0000f7e0  74 61 72 74 5f 6c 69 6e  6b 65 64 5f 6c 69 73 74  |tart_linked_list|
0000f7f0  0d 44 d4 26 20 20 20 20  20 20 20 20 61 64 72 20  |.D.&        adr |
0000f800  20 20 20 20 72 31 2c 77  6f 72 6b 73 70 61 63 65  |    r1,workspace|
0000f810  2b 26 31 34 30 30 0d 44  de 20 20 20 20 20 20 20  |+&1400.D.       |
0000f820  20 20 73 75 62 20 20 20  20 20 72 31 2c 72 31 2c  |  sub     r1,r1,|
0000f830  23 26 31 34 30 30 0d 44  e8 2f 20 20 20 20 20 20  |#&1400.D./      |
0000f840  20 20 6c 64 72 20 20 20  20 20 72 30 2c 62 61 63  |  ldr     r0,bac|
0000f850  6b 67 72 6f 75 6e 64 5f  77 69 6e 64 6f 77 5f 68  |kground_window_h|
0000f860  61 6e 64 6c 65 0d 44 f2  1b 20 20 20 20 20 20 20  |andle.D..       |
0000f870  20 73 74 72 20 20 20 20  20 72 30 2c 5b 72 31 5d  | str     r0,[r1]|
0000f880  0d 44 fc 1b 2e 6c 6f 61  64 5f 63 6f 6e 66 69 67  |.D...load_config|
0000f890  5f 66 69 6c 65 5f 6c 6f  6f 70 33 0d 45 06 27 20  |_file_loop3.E.' |
0000f8a0  20 20 20 20 20 20 20 6c  64 72 20 20 20 20 20 72  |       ldr     r|
0000f8b0  30 2c 5b 72 34 2c 23 78  5f 70 6f 73 69 74 69 6f  |0,[r4,#x_positio|
0000f8c0  6e 5d 0d 45 10 1e 20 20  20 20 20 20 20 20 73 74  |n].E..        st|
0000f8d0  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 34 5d  |r     r0,[r1,#4]|
0000f8e0  0d 45 1a 20 20 20 20 20  20 20 20 20 61 64 64 20  |.E.         add |
0000f8f0  20 20 20 20 72 30 2c 72  30 2c 23 31 30 2a 31 36  |    r0,r0,#10*16|
0000f900  0d 45 24 1f 20 20 20 20  20 20 20 20 73 74 72 20  |.E$.        str |
0000f910  20 20 20 20 72 30 2c 5b  72 31 2c 23 31 32 5d 0d  |    r0,[r1,#12].|
0000f920  45 2e 27 20 20 20 20 20  20 20 20 6c 64 72 20 20  |E.'        ldr  |
0000f930  20 20 20 72 30 2c 5b 72  34 2c 23 79 5f 70 6f 73  |   r0,[r4,#y_pos|
0000f940  69 74 69 6f 6e 5d 0d 45  38 1e 20 20 20 20 20 20  |ition].E8.      |
0000f950  20 20 73 74 72 20 20 20  20 20 72 30 2c 5b 72 31  |  str     r0,[r1|
0000f960  2c 23 38 5d 0d 45 42 1e  20 20 20 20 20 20 20 20  |,#8].EB.        |
0000f970  61 64 64 20 20 20 20 20  72 30 2c 72 30 2c 23 31  |add     r0,r0,#1|
0000f980  30 38 0d 45 4c 1f 20 20  20 20 20 20 20 20 73 74  |08.EL.        st|
0000f990  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 31 36  |r     r0,[r1,#16|
0000f9a0  5d 0d 45 56 21 20 20 20  20 20 20 20 20 6c 64 72  |].EV!        ldr|
0000f9b0  20 20 20 20 20 72 30 2c  69 63 6f 6e 5f 66 6c 61  |     r0,icon_fla|
0000f9c0  67 73 0d 45 60 1f 20 20  20 20 20 20 20 20 73 74  |gs.E`.        st|
0000f9d0  72 20 20 20 20 20 72 30  2c 5b 72 31 2c 23 32 30  |r     r0,[r1,#20|
0000f9e0  5d 0d 45 6a 2f 20 20 20  20 20 20 20 20 6c 64 72  |].Ej/        ldr|
0000f9f0  20 20 20 20 20 72 30 2c  5b 72 34 2c 23 6f 66 66  |     r0,[r4,#off|
0000fa00  73 65 74 5f 74 6f 5f 6c  65 61 66 6e 61 6d 65 5d  |set_to_leafname]|
0000fa10  0d 45 74 1c 20 20 20 20  20 20 20 20 61 64 64 20  |.Et.        add |
0000fa20  20 20 20 20 72 30 2c 72  30 2c 72 34 0d 45 7e 1f  |    r0,r0,r4.E~.|
0000fa30  20 20 20 20 20 20 20 20  73 74 72 20 20 20 20 20  |        str     |
0000fa40  72 30 2c 5b 72 31 2c 23  32 34 5d 0d 45 88 26 20  |r0,[r1,#24].E.& |
0000fa50  20 20 20 20 20 20 20 61  64 64 20 20 20 20 20 72  |       add     r|
0000fa60  30 2c 72 34 2c 23 73 70  72 69 74 65 5f 6e 61 6d  |0,r4,#sprite_nam|
0000fa70  65 0d 45 92 1f 20 20 20  20 20 20 20 20 73 74 72  |e.E..        str|
0000fa80  20 20 20 20 20 72 30 2c  5b 72 31 2c 23 32 38 5d  |     r0,[r1,#28]|
0000fa90  0d 45 9c 1a 20 20 20 20  20 20 20 20 6d 6f 76 20  |.E..        mov |
0000faa0  20 20 20 20 72 30 2c 23  31 32 0d 45 a6 1f 20 20  |    r0,#12.E..  |
0000fab0  20 20 20 20 20 20 73 74  72 20 20 20 20 20 72 30  |      str     r0|
0000fac0  2c 5b 72 31 2c 23 33 32  5d 0d 45 b0 26 20 20 20  |,[r1,#32].E.&   |
0000fad0  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 57  |     swi     "XW|
0000fae0  69 6d 70 5f 43 72 65 61  74 65 49 63 6f 6e 22 0d  |imp_CreateIcon".|
0000faf0  45 ba 1d 20 20 20 20 20  20 20 20 6c 64 6d 76 73  |E..        ldmvs|
0000fb00  66 64 20 72 31 33 21 2c  7b 70 63 7d 0d 45 c4 28  |fd r13!,{pc}.E.(|
0000fb10  20 20 20 20 20 20 20 20  73 74 72 62 20 20 20 20  |        strb    |
0000fb20  72 30 2c 5b 72 34 2c 23  69 63 6f 6e 5f 68 61 6e  |r0,[r4,#icon_han|
0000fb30  64 6c 65 5d 0d 45 ce 21  20 20 20 20 20 20 20 20  |dle].E.!        |
0000fb40  6c 64 72 20 20 20 20 20  72 34 2c 5b 72 34 2c 23  |ldr     r4,[r4,#|
0000fb50  6e 65 78 74 5d 0d 45 d8  19 20 20 20 20 20 20 20  |next].E..       |
0000fb60  20 74 65 71 20 20 20 20  20 72 34 2c 23 30 0d 45  | teq     r4,#0.E|
0000fb70  e2 2a 20 20 20 20 20 20  20 20 62 6e 65 20 20 20  |.*        bne   |
0000fb80  20 20 6c 6f 61 64 5f 63  6f 6e 66 69 67 5f 66 69  |  load_config_fi|
0000fb90  6c 65 5f 6c 6f 6f 70 33  0d 45 ec 1d 20 20 20 20  |le_loop3.E..    |
0000fba0  20 20 20 20 6c 64 6d 66  64 20 20 20 72 31 33 21  |    ldmfd   r13!|
0000fbb0  2c 7b 70 63 7d 0d 45 f6  04 0d 46 00 0f 2e 72 65  |,{pc}.E...F...re|
0000fbc0  61 64 5f 65 72 72 6f 72  0d 46 0a 41 20 20 20 20  |ad_error.F.A    |
0000fbd0  20 20 20 20 6d 6f 76 20  20 20 20 20 72 32 2c 72  |    mov     r2,r|
0000fbe0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
0000fbf0  20 20 20 20 3b 20 73 74  6f 72 65 20 65 72 72 6f  |    ; store erro|
0000fc00  72 20 70 6f 69 6e 74 65  72 0d 46 14 38 20 20 20  |r pointer.F.8   |
0000fc10  20 20 20 20 20 6d 6f 76  20 20 20 20 20 72 30 2c  |     mov     r0,|
0000fc20  23 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#0              |
0000fc30  20 20 20 20 20 3b 20 63  6c 6f 73 65 20 66 69 6c  |     ; close fil|
0000fc40  65 0d 46 1e 3b 20 20 20  20 20 20 20 20 73 77 69  |e.F.;        swi|
0000fc50  20 20 20 20 20 22 58 4f  53 5f 46 69 6e 64 22 20  |     "XOS_Find" |
0000fc60  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 69  |             ; i|
0000fc70  67 6e 6f 72 65 20 65 72  72 6f 72 73 0d 46 28 43  |gnore errors.F(C|
0000fc80  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
0000fc90  72 30 2c 72 32 20 20 20  20 20 20 20 20 20 20 20  |r0,r2           |
0000fca0  20 20 20 20 20 20 20 20  3b 20 72 65 73 74 6f 72  |        ; restor|
0000fcb0  65 20 65 72 72 6f 72 20  70 6f 69 6e 74 65 72 0d  |e error pointer.|
0000fcc0  46 32 23 20 20 20 20 20  20 20 20 62 6c 20 20 20  |F2#        bl   |
0000fcd0  20 20 20 72 65 70 6f 72  74 5f 65 72 72 6f 72 5f  |   report_error_|
0000fce0  6f 6b 0d 46 3c 1d 20 20  20 20 20 20 20 20 6c 64  |ok.F<.        ld|
0000fcf0  6d 66 64 20 20 20 72 31  33 21 2c 7b 70 63 7d 0d  |mfd   r13!,{pc}.|
0000fd00  46 46 04 0d 46 50 23 2e  63 6f 6e 66 69 67 5f 66  |FF..FP#.config_f|
0000fd10  69 6c 65 5f 65 6e 64 65  64 5f 75 6e 65 78 70 65  |ile_ended_unexpe|
0000fd20  63 74 65 64 6c 79 0d 46  5a 3b 20 20 20 20 20 20  |ctedly.FZ;      |
0000fd30  20 20 61 64 72 20 20 20  20 20 72 30 2c 63 6f 6e  |  adr     r0,con|
0000fd40  66 69 67 5f 66 69 6c 65  5f 65 6e 64 65 64 5f 75  |fig_file_ended_u|
0000fd50  6e 65 78 70 65 63 74 65  64 6c 79 5f 65 72 72 6f  |nexpectedly_erro|
0000fd60  72 0d 46 64 1e 20 20 20  20 20 20 20 20 62 20 20  |r.Fd.        b  |
0000fd70  20 20 20 20 20 72 65 61  64 5f 65 72 72 6f 72 0d  |     read_error.|
0000fd80  46 6e 29 2e 63 6f 6e 66  69 67 5f 66 69 6c 65 5f  |Fn).config_file_|
0000fd90  65 6e 64 65 64 5f 75 6e  65 78 70 65 63 74 65 64  |ended_unexpected|
0000fda0  6c 79 5f 65 72 72 6f 72  0d 46 78 15 20 20 20 20  |ly_error.Fx.    |
0000fdb0  20 20 20 20 65 71 75 64  20 20 20 20 30 0d 46 82  |    equd    0.F.|
0000fdc0  53 20 20 20 20 20 20 20  20 65 71 75 73 20 20 20  |S        equs   |
0000fdd0  20 22 54 68 65 20 63 6f  6e 66 69 67 20 66 69 6c  | "The config fil|
0000fde0  65 20 65 6e 64 65 64 20  75 6e 65 78 70 65 63 74  |e ended unexpect|
0000fdf0  65 64 6c 79 2e 20 49 20  72 65 63 6f 6d 6d 65 6e  |edly. I recommen|
0000fe00  64 20 64 65 6c 65 74 69  6e 67 20 74 68 65 20 22  |d deleting the "|
0000fe10  0d 46 8c 37 20 20 20 20  20 20 20 20 65 71 75 73  |.F.7        equs|
0000fe20  20 20 20 20 22 63 6f 6e  66 69 67 20 66 69 6c 65  |    "config file|
0000fe30  20 61 6e 64 20 73 74 61  72 74 69 6e 67 20 61 67  | and starting ag|
0000fe40  61 69 6e 22 2b bd 30 0d  46 96 11 20 20 20 20 20  |ain"+.0.F..     |
0000fe50  20 20 20 61 6c 69 67 6e  0d 46 a0 04 0d 46 aa 22  |   align.F...F."|
0000fe60  2e 72 61 6e 5f 6f 75 74  5f 6f 66 5f 6d 65 6d 6f  |.ran_out_of_memo|
0000fe70  72 79 5f 64 75 72 69 6e  67 5f 6c 6f 61 64 0d 46  |ry_during_load.F|
0000fe80  b4 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |..        equd  |
0000fe90  20 20 30 0d 46 be 4e 20  20 20 20 20 20 20 20 65  |  0.F.N        e|
0000fea0  71 75 73 20 20 20 20 22  52 61 6e 20 6f 75 74 20  |qus    "Ran out |
0000feb0  6f 66 20 6d 65 6d 6f 72  79 20 64 75 72 69 6e 67  |of memory during|
0000fec0  20 6c 6f 61 64 2e 20 49  20 72 65 63 6f 6d 65 6e  | load. I recomen|
0000fed0  64 20 79 6f 75 20 71 75  69 74 20 6d 65 22 2b bd  |d you quit me"+.|
0000fee0  30 0d 46 c8 11 20 20 20  20 20 20 20 20 61 6c 69  |0.F..        ali|
0000fef0  67 6e 0d 46 d2 04 0d 46  dc 53 3b 20 2d 2d 2d 2d  |gn.F...F.S; ----|
0000ff00  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
0000ff40  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 46 e6 37 3b 20 72  |---------.F.7; r|
0000ff50  75 6e 20 61 20 74 68 65  20 21 42 6f 6f 74 20 66  |un a the !Boot f|
0000ff60  69 6c 65 20 69 6e 20 74  68 65 20 61 70 70 6c 69  |ile in the appli|
0000ff70  63 61 74 69 6f 6e 20 64  69 72 65 63 74 6f 72 79  |cation directory|
0000ff80  0d 46 f0 3d 3b 20 69 66  20 74 68 69 73 20 63 61  |.F.=; if this ca|
0000ff90  6e 27 74 20 62 65 20 66  6f 75 6e 64 20 64 6f 20  |n't be found do |
0000ffa0  2a 49 63 6f 6e 53 70 72  69 74 65 73 20 21 53 70  |*IconSprites !Sp|
0000ffb0  72 69 74 65 73 20 69 6e  73 74 65 61 64 0d 46 fa  |rites instead.F.|
0000ffc0  0b 3b 20 65 6e 74 72 79  0d 47 04 23 3b 20 20 20  |.; entry.G.#;   |
0000ffd0  20 20 20 20 72 34 20 2d  3e 20 6c 69 6e 6b 65 64  |    r4 -> linked|
0000ffe0  20 6c 69 73 74 20 65 6e  74 72 79 0d 47 0e 04 0d  | list entry.G...|
0000fff0  47 18 15 2e 62 6f 6f 74  5f 61 70 70 6c 69 63 61  |G...boot_applica|
00010000  74 69 6f 6e 0d 47 22 2a  20 20 20 20 20 20 20 20  |tion.G"*        |
00010010  73 74 6d 66 64 20 20 20  72 31 33 21 2c 7b 72 30  |stmfd   r13!,{r0|
00010020  2d 72 33 2c 72 35 2d 72  37 2c 72 31 34 7d 0d 47  |-r3,r5-r7,r14}.G|
00010030  2c 28 20 20 20 20 20 20  20 20 61 64 64 20 20 20  |,(        add   |
00010040  20 20 72 32 2c 72 34 2c  23 73 70 72 69 74 65 5f  |  r2,r4,#sprite_|
00010050  6e 61 6d 65 2b 31 0d 47  36 28 20 20 20 20 20 20  |name+1.G6(      |
00010060  20 20 62 6c 20 20 20 20  20 20 73 65 65 5f 69 66  |  bl      see_if|
00010070  5f 73 70 72 69 74 65 5f  65 78 69 73 74 73 0d 47  |_sprite_exists.G|
00010080  40 45 20 20 20 20 20 20  20 20 6c 64 6d 76 63 66  |@E        ldmvcf|
00010090  64 20 72 31 33 21 2c 7b  72 30 2d 72 33 2c 72 35  |d r13!,{r0-r3,r5|
000100a0  2d 72 37 2c 70 63 7d 20  20 20 3b 20 73 70 72 69  |-r7,pc}   ; spri|
000100b0  74 65 20 65 78 69 73 74  73 20 73 6f 20 72 65 74  |te exists so ret|
000100c0  75 72 6e 0d 47 4a 4c 20  20 20 20 20 20 20 20 61  |urn.GJL        a|
000100d0  64 72 20 20 20 20 20 72  30 2c 70 6f 6c 6c 5f 73  |dr     r0,poll_s|
000100e0  70 61 63 65 2b 26 31 34  30 30 2b 34 20 20 20 3b  |pace+&1400+4   ;|
000100f0  20 2b 34 20 74 6f 20 61  6c 6c 6f 77 20 66 6f 72  | +4 to allow for|
00010100  20 22 52 75 6e 20 22 20  69 6e 66 72 6f 6e 74 0d  | "Run " infront.|
00010110  47 54 20 20 20 20 20 20  20 20 20 73 75 62 20 20  |GT         sub  |
00010120  20 20 20 72 30 2c 72 30  2c 23 26 31 34 30 30 0d  |   r0,r0,#&1400.|
00010130  47 5e 23 20 20 20 20 20  20 20 20 61 64 64 20 20  |G^#        add  |
00010140  20 20 20 72 31 2c 72 34  2c 23 66 69 6c 65 6e 61  |   r1,r4,#filena|
00010150  6d 65 0d 47 68 1a 2e 62  6f 6f 74 5f 61 70 70 6c  |me.Gh..boot_appl|
00010160  69 63 61 74 69 6f 6e 5f  6c 6f 6f 70 0d 47 72 1e  |ication_loop.Gr.|
00010170  20 20 20 20 20 20 20 20  6c 64 72 62 20 20 20 20  |        ldrb    |
00010180  72 32 2c 5b 72 31 5d 2c  23 31 0d 47 7c 1e 20 20  |r2,[r1],#1.G|.  |
00010190  20 20 20 20 20 20 73 74  72 62 20 20 20 20 72 32  |      strb    r2|
000101a0  2c 5b 72 30 5d 2c 23 31  0d 47 86 19 20 20 20 20  |,[r0],#1.G..    |
000101b0  20 20 20 20 74 65 71 20  20 20 20 20 72 32 2c 23  |    teq     r2,#|
000101c0  30 0d 47 90 29 20 20 20  20 20 20 20 20 62 6e 65  |0.G.)        bne|
000101d0  20 20 20 20 20 62 6f 6f  74 5f 61 70 70 6c 69 63  |     boot_applic|
000101e0  61 74 69 6f 6e 5f 6c 6f  6f 70 0d 47 9a 1c 20 20  |ation_loop.G..  |
000101f0  20 20 20 20 20 20 6d 6f  76 20 20 20 20 20 72 32  |      mov     r2|
00010200  2c 23 97 22 2e 22 0d 47  a4 41 20 20 20 20 20 20  |,#.".".G.A      |
00010210  20 20 73 74 72 62 20 20  20 20 72 32 2c 5b 72 30  |  strb    r2,[r0|
00010220  2c 23 2d 31 5d 20 20 20  20 20 20 20 20 20 20 20  |,#-1]           |
00010230  20 20 3b 20 72 65 70 6c  61 63 65 20 bd 30 20 77  |  ; replace .0 w|
00010240  69 74 68 20 22 2e 22 0d  47 ae 44 20 20 20 20 20  |ith ".".G.D     |
00010250  20 20 20 6d 6f 76 20 20  20 20 20 72 37 2c 72 30  |   mov     r7,r0|
00010260  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00010270  20 20 20 3b 20 73 74 6f  72 65 20 6c 65 61 66 6e  |   ; store leafn|
00010280  61 6d 65 20 70 6f 69 6e  74 65 72 0d 47 b8 39 20  |ame pointer.G.9 |
00010290  20 20 20 20 20 20 20 61  64 72 20 20 20 20 20 72  |       adr     r|
000102a0  31 2c 70 6c 69 6e 67 5f  62 6f 6f 74 20 20 20 20  |1,pling_boot    |
000102b0  20 20 20 20 20 20 20 3b  20 72 31 20 2d 3e 20 21  |       ; r1 -> !|
000102c0  42 6f 6f 74 0d 47 c2 1b  2e 62 6f 6f 74 5f 61 70  |Boot.G...boot_ap|
000102d0  70 6c 69 63 61 74 69 6f  6e 5f 6c 6f 6f 70 32 0d  |plication_loop2.|
000102e0  47 cc 1e 20 20 20 20 20  20 20 20 6c 64 72 62 20  |G..        ldrb |
000102f0  20 20 20 72 32 2c 5b 72  31 5d 2c 23 31 0d 47 d6  |   r2,[r1],#1.G.|
00010300  1e 20 20 20 20 20 20 20  20 73 74 72 62 20 20 20  |.        strb   |
00010310  20 72 32 2c 5b 72 30 5d  2c 23 31 0d 47 e0 19 20  | r2,[r0],#1.G.. |
00010320  20 20 20 20 20 20 20 74  65 71 20 20 20 20 20 72  |       teq     r|
00010330  32 2c 23 30 0d 47 ea 2a  20 20 20 20 20 20 20 20  |2,#0.G.*        |
00010340  62 6e 65 20 20 20 20 20  62 6f 6f 74 5f 61 70 70  |bne     boot_app|
00010350  6c 69 63 61 74 69 6f 6e  5f 6c 6f 6f 70 32 0d 47  |lication_loop2.G|
00010360  f4 49 20 20 20 20 20 20  20 20 6d 6f 76 20 20 20  |.I        mov   |
00010370  20 20 72 30 2c 23 31 37  20 20 20 20 20 20 20 20  |  r0,#17        |
00010380  20 20 20 20 20 20 20 20  20 20 3b 20 72 65 61 64  |          ; read|
00010390  20 63 61 74 61 6c 6f 67  75 65 20 69 6e 66 6f 20  | catalogue info |
000103a0  6e 6f 20 70 61 74 68 0d  47 fe 29 20 20 20 20 20  |no path.G.)     |
000103b0  20 20 20 61 64 72 20 20  20 20 20 72 31 2c 70 6f  |   adr     r1,po|
000103c0  6c 6c 5f 73 70 61 63 65  2b 26 31 34 30 30 2b 34  |ll_space+&1400+4|
000103d0  0d 48 08 20 20 20 20 20  20 20 20 20 73 75 62 20  |.H.         sub |
000103e0  20 20 20 20 72 31 2c 72  31 2c 23 26 31 34 30 30  |    r1,r1,#&1400|
000103f0  0d 48 12 39 20 20 20 20  20 20 20 20 6d 6f 76 20  |.H.9        mov |
00010400  20 20 20 20 72 36 2c 72  34 20 20 20 20 20 20 20  |    r6,r4       |
00010410  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 70 72  |            ; pr|
00010420  65 73 65 72 76 65 20 72  34 0d 48 1c 1e 20 20 20  |eserve r4.H..   |
00010430  20 20 20 20 20 73 77 69  20 20 20 20 20 22 58 4f  |     swi     "XO|
00010440  53 5f 46 69 6c 65 22 0d  48 26 38 20 20 20 20 20  |S_File".H&8     |
00010450  20 20 20 6d 6f 76 20 20  20 20 20 72 34 2c 72 36  |   mov     r4,r6|
00010460  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00010470  20 20 20 3b 20 72 65 73  74 6f 72 65 20 72 34 0d  |   ; restore r4.|
00010480  48 30 25 20 20 20 20 20  20 20 20 62 76 63 20 20  |H0%        bvc  |
00010490  20 20 20 63 61 74 61 6c  6f 67 75 65 5f 72 65 61  |   catalogue_rea|
000104a0  64 5f 6f 6b 0d 48 3a 23  20 20 20 20 20 20 20 20  |d_ok.H:#        |
000104b0  62 6c 20 20 20 20 20 20  72 65 70 6f 72 74 5f 65  |bl      report_e|
000104c0  72 72 6f 72 5f 6f 6b 0d  48 44 29 20 20 20 20 20  |rror_ok.HD)     |
000104d0  20 20 20 6c 64 6d 66 64  20 20 20 72 31 33 21 2c  |   ldmfd   r13!,|
000104e0  7b 72 30 2d 72 33 2c 72  35 2d 72 37 2c 70 63 7d  |{r0-r3,r5-r7,pc}|
000104f0  0d 48 4e 16 2e 63 61 74  61 6c 6f 67 75 65 5f 72  |.HN..catalogue_r|
00010500  65 61 64 5f 6f 6b 0d 48  58 41 20 20 20 20 20 20  |ead_ok.HXA      |
00010510  20 20 74 65 71 20 20 20  20 20 72 30 2c 23 30 20  |  teq     r0,#0 |
00010520  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00010530  20 20 3b 20 73 65 65 20  69 66 20 6f 62 6a 65 63  |  ; see if objec|
00010540  74 20 66 6f 75 6e 64 0d  48 62 28 20 20 20 20 20  |t found.Hb(     |
00010550  20 20 20 62 65 71 20 20  20 20 20 70 6c 69 6e 67  |   beq     pling|
00010560  5f 62 6f 6f 74 5f 6e 6f  74 5f 66 6f 75 6e 64 0d  |_boot_not_found.|
00010570  48 6c 27 20 20 20 20 20  20 20 20 61 64 72 20 20  |Hl'        adr  |
00010580  20 20 20 72 30 2c 70 6f  6c 6c 5f 73 70 61 63 65  |   r0,poll_space|
00010590  2b 26 31 34 30 30 0d 48  76 20 20 20 20 20 20 20  |+&1400.Hv       |
000105a0  20 20 73 75 62 20 20 20  20 20 72 30 2c 72 30 2c  |  sub     r0,r0,|
000105b0  23 26 31 34 30 30 0d 48  80 39 20 20 20 20 20 20  |#&1400.H.9      |
000105c0  20 20 6c 64 72 20 20 20  20 20 72 32 2c 72 75 6e  |  ldr     r2,run|
000105d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000105e0  20 20 3b 20 72 32 20 3d  20 22 52 75 6e 20 22 0d  |  ; r2 = "Run ".|
000105f0  48 8a 1b 20 20 20 20 20  20 20 20 73 74 72 20 20  |H..        str  |
00010600  20 20 20 72 32 2c 5b 72  30 5d 0d 48 94 25 20 20  |   r2,[r0].H.%  |
00010610  20 20 20 20 20 20 73 77  69 20 20 20 20 20 22 58  |      swi     "X|
00010620  57 69 6d 70 5f 53 74 61  72 74 54 61 73 6b 22 0d  |Wimp_StartTask".|
00010630  48 9e 1f 20 20 20 20 20  20 20 20 62 76 73 20 20  |H..        bvs  |
00010640  20 20 20 66 61 74 61 6c  5f 65 72 72 6f 72 0d 48  |   fatal_error.H|
00010650  a8 29 20 20 20 20 20 20  20 20 6c 64 6d 66 64 20  |.)        ldmfd |
00010660  20 20 72 31 33 21 2c 7b  72 30 2d 72 33 2c 72 35  |  r13!,{r0-r3,r5|
00010670  2d 72 37 2c 70 63 7d 0d  48 b2 08 2e 72 75 6e 0d  |-r7,pc}.H...run.|
00010680  48 bc 1a 20 20 20 20 20  20 20 20 65 71 75 73 20  |H..        equs |
00010690  20 20 20 22 52 75 6e 20  22 0d 48 c6 04 0d 48 d0  |   "Run ".H...H.|
000106a0  19 2e 70 6c 69 6e 67 5f  62 6f 6f 74 5f 6e 6f 74  |..pling_boot_not|
000106b0  5f 66 6f 75 6e 64 0d 48  da 3c 20 20 20 20 20 20  |_found.H.<      |
000106c0  20 20 61 64 72 20 20 20  20 20 72 31 2c 70 6c 69  |  adr     r1,pli|
000106d0  6e 67 5f 73 70 72 69 74  65 73 20 20 20 20 20 20  |ng_sprites      |
000106e0  20 20 3b 20 72 31 20 2d  3e 20 21 53 70 72 69 74  |  ; r1 -> !Sprit|
000106f0  65 73 0d 48 e4 1b 2e 62  6f 6f 74 5f 61 70 70 6c  |es.H...boot_appl|
00010700  69 63 61 74 69 6f 6e 5f  6c 6f 6f 70 33 0d 48 ee  |ication_loop3.H.|
00010710  1e 20 20 20 20 20 20 20  20 6c 64 72 62 20 20 20  |.        ldrb   |
00010720  20 72 32 2c 5b 72 31 5d  2c 23 31 0d 48 f8 1e 20  | r2,[r1],#1.H.. |
00010730  20 20 20 20 20 20 20 73  74 72 62 20 20 20 20 72  |       strb    r|
00010740  32 2c 5b 72 37 5d 2c 23  31 0d 49 02 19 20 20 20  |2,[r7],#1.I..   |
00010750  20 20 20 20 20 74 65 71  20 20 20 20 20 72 32 2c  |     teq     r2,|
00010760  23 30 0d 49 0c 2a 20 20  20 20 20 20 20 20 62 6e  |#0.I.*        bn|
00010770  65 20 20 20 20 20 62 6f  6f 74 5f 61 70 70 6c 69  |e     boot_appli|
00010780  63 61 74 69 6f 6e 5f 6c  6f 6f 70 33 0d 49 16 4d  |cation_loop3.I.M|
00010790  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
000107a0  72 30 2c 23 31 31 20 20  20 20 20 20 20 20 20 20  |r0,#11          |
000107b0  20 20 20 20 20 20 20 20  3b 20 6d 65 72 67 65 20  |        ; merge |
000107c0  73 70 72 69 74 65 73 20  28 69 65 20 2a 49 63 6f  |sprites (ie *Ico|
000107d0  6e 53 70 72 69 74 65 73  29 0d 49 20 29 20 20 20  |nSprites).I )   |
000107e0  20 20 20 20 20 61 64 72  20 20 20 20 20 72 32 2c  |     adr     r2,|
000107f0  70 6f 6c 6c 5f 73 70 61  63 65 2b 26 31 34 30 30  |poll_space+&1400|
00010800  2b 34 0d 49 2a 20 20 20  20 20 20 20 20 20 73 75  |+4.I*         su|
00010810  62 20 20 20 20 20 72 32  2c 72 32 2c 23 26 31 34  |b     r2,r2,#&14|
00010820  30 30 0d 49 34 24 20 20  20 20 20 20 20 20 73 77  |00.I4$        sw|
00010830  69 20 20 20 20 20 22 58  57 69 6d 70 5f 53 70 72  |i     "XWimp_Spr|
00010840  69 74 65 4f 70 22 0d 49  3e 23 20 20 20 20 20 20  |iteOp".I>#      |
00010850  20 20 62 6c 76 73 20 20  20 20 72 65 70 6f 72 74  |  blvs    report|
00010860  5f 65 72 72 6f 72 5f 6f  6b 0d 49 48 29 20 20 20  |_error_ok.IH)   |
00010870  20 20 20 20 20 6c 64 6d  66 64 20 20 20 72 31 33  |     ldmfd   r13|
00010880  21 2c 7b 72 30 2d 72 33  2c 72 35 2d 72 37 2c 70  |!,{r0-r3,r5-r7,p|
00010890  63 7d 0d 49 52 04 0d 49  5c 0f 2e 70 6c 69 6e 67  |c}.IR..I\..pling|
000108a0  5f 62 6f 6f 74 0d 49 66  1e 20 20 20 20 20 20 20  |_boot.If.       |
000108b0  20 65 71 75 73 20 20 20  20 22 21 42 6f 6f 74 22  | equs    "!Boot"|
000108c0  2b bd 30 0d 49 70 12 2e  70 6c 69 6e 67 5f 73 70  |+.0.Ip..pling_sp|
000108d0  72 69 74 65 73 0d 49 7a  21 20 20 20 20 20 20 20  |rites.Iz!       |
000108e0  20 65 71 75 73 20 20 20  20 22 21 53 70 72 69 74  | equs    "!Sprit|
000108f0  65 73 22 2b bd 30 0d 49  84 11 20 20 20 20 20 20  |es"+.0.I..      |
00010900  20 20 61 6c 69 67 6e 0d  49 8e 04 0d 49 98 53 3b  |  align.I...I.S;|
00010910  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
00010920  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00010950  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 49  |--------------.I|
00010960  a2 3b 3b 20 72 65 70 6f  72 74 20 61 6e 20 65 72  |.;; report an er|
00010970  72 6f 72 20 75 73 69 6e  67 20 57 69 6d 70 5f 52  |ror using Wimp_R|
00010980  65 70 6f 72 74 45 72 72  6f 72 20 74 68 65 6e 20  |eportError then |
00010990  63 6c 6f 73 65 64 6f 77  6e 0d 49 ac 0b 3b 20 65  |closedown.I..; e|
000109a0  6e 74 72 79 0d 49 b6 1d  3b 20 20 20 20 20 20 20  |ntry.I..;       |
000109b0  72 30 20 2d 3e 20 65 72  72 6f 72 20 62 6c 6f 63  |r0 -> error bloc|
000109c0  6b 0d 49 c0 0a 3b 20 65  78 69 74 0d 49 ca 13 3b  |k.I..; exit.I..;|
000109d0  20 20 20 20 20 20 20 64  6f 65 73 6e 27 74 0d 49  |       doesn't.I|
000109e0  d4 04 0d 49 de 10 2e 66  61 74 61 6c 5f 65 72 72  |...I...fatal_err|
000109f0  6f 72 0d 49 e8 27 20 20  20 20 20 20 20 20 61 64  |or.I.'        ad|
00010a00  72 20 20 20 20 20 72 31  2c 70 6f 6c 6c 5f 73 70  |r     r1,poll_sp|
00010a10  61 63 65 2b 26 31 38 30  30 0d 49 f2 20 20 20 20  |ace+&1800.I.    |
00010a20  20 20 20 20 20 73 75 62  20 20 20 20 20 72 31 2c  |     sub     r1,|
00010a30  72 31 2c 23 26 31 38 30  30 0d 49 fc 1e 20 20 20  |r1,#&1800.I..   |
00010a40  20 20 20 20 20 6c 64 72  20 20 20 20 20 72 32 2c  |     ldr     r2,|
00010a50  5b 72 30 5d 2c 23 34 0d  4a 06 1e 20 20 20 20 20  |[r0],#4.J..     |
00010a60  20 20 20 73 74 72 20 20  20 20 20 72 32 2c 5b 72  |   str     r2,[r|
00010a70  31 5d 2c 23 34 0d 4a 10  2a 20 20 20 20 20 20 20  |1],#4.J.*       |
00010a80  20 61 64 72 20 20 20 20  20 72 32 2c 66 61 74 61  | adr     r2,fata|
00010a90  6c 5f 65 72 72 6f 72 5f  6d 65 73 73 61 67 65 0d  |l_error_message.|
00010aa0  4a 1a 16 2e 66 61 74 61  6c 5f 65 72 72 6f 72 5f  |J...fatal_error_|
00010ab0  6c 6f 6f 70 31 0d 4a 24  1e 20 20 20 20 20 20 20  |loop1.J$.       |
00010ac0  20 6c 64 72 62 20 20 20  20 72 33 2c 5b 72 32 5d  | ldrb    r3,[r2]|
00010ad0  2c 23 31 0d 4a 2e 19 20  20 20 20 20 20 20 20 63  |,#1.J..        c|
00010ae0  6d 70 20 20 20 20 20 72  33 2c 23 30 0d 4a 38 1e  |mp     r3,#0.J8.|
00010af0  20 20 20 20 20 20 20 20  73 74 72 6e 65 62 20 20  |        strneb  |
00010b00  72 33 2c 5b 72 31 5d 2c  23 31 0d 4a 42 25 20 20  |r3,[r1],#1.JB%  |
00010b10  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 66 61  |      bne     fa|
00010b20  74 61 6c 5f 65 72 72 6f  72 5f 6c 6f 6f 70 31 0d  |tal_error_loop1.|
00010b30  4a 4c 16 2e 66 61 74 61  6c 5f 65 72 72 6f 72 5f  |JL..fatal_error_|
00010b40  6c 6f 6f 70 32 0d 4a 56  1e 20 20 20 20 20 20 20  |loop2.JV.       |
00010b50  20 6c 64 72 62 20 20 20  20 72 33 2c 5b 72 30 5d  | ldrb    r3,[r0]|
00010b60  2c 23 31 0d 4a 60 19 20  20 20 20 20 20 20 20 63  |,#1.J`.        c|
00010b70  6d 70 20 20 20 20 20 72  33 2c 23 30 0d 4a 6a 1e  |mp     r3,#0.Jj.|
00010b80  20 20 20 20 20 20 20 20  73 74 72 6e 65 62 20 20  |        strneb  |
00010b90  72 33 2c 5b 72 31 5d 2c  23 31 0d 4a 74 25 20 20  |r3,[r1],#1.Jt%  |
00010ba0  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 66 61  |      bne     fa|
00010bb0  74 61 6c 5f 65 72 72 6f  72 5f 6c 6f 6f 70 32 0d  |tal_error_loop2.|
00010bc0  4a 7e 16 2e 66 61 74 61  6c 5f 65 72 72 6f 72 5f  |J~..fatal_error_|
00010bd0  6c 6f 6f 70 33 0d 4a 88  1e 20 20 20 20 20 20 20  |loop3.J..       |
00010be0  20 6c 64 72 62 20 20 20  20 72 33 2c 5b 72 32 5d  | ldrb    r3,[r2]|
00010bf0  2c 23 31 0d 4a 92 1e 20  20 20 20 20 20 20 20 73  |,#1.J..        s|
00010c00  74 72 62 20 20 20 20 72  33 2c 5b 72 31 5d 2c 23  |trb    r3,[r1],#|
00010c10  31 0d 4a 9c 19 20 20 20  20 20 20 20 20 63 6d 70  |1.J..        cmp|
00010c20  20 20 20 20 20 72 33 2c  23 30 0d 4a a6 25 20 20  |     r3,#0.J.%  |
00010c30  20 20 20 20 20 20 62 6e  65 20 20 20 20 20 66 61  |      bne     fa|
00010c40  74 61 6c 5f 65 72 72 6f  72 5f 6c 6f 6f 70 33 0d  |tal_error_loop3.|
00010c50  4a b0 27 20 20 20 20 20  20 20 20 61 64 72 20 20  |J.'        adr  |
00010c60  20 20 20 72 30 2c 70 6f  6c 6c 5f 73 70 61 63 65  |   r0,poll_space|
00010c70  2b 26 31 38 30 30 0d 4a  ba 20 20 20 20 20 20 20  |+&1800.J.       |
00010c80  20 20 73 75 62 20 20 20  20 20 72 30 2c 72 30 2c  |  sub     r0,r0,|
00010c90  23 26 31 38 30 30 0d 4a  c4 39 20 20 20 20 20 20  |#&1800.J.9      |
00010ca0  20 20 6d 6f 76 20 20 20  20 20 72 31 2c 23 32 20  |  mov     r1,#2 |
00010cb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00010cc0  20 20 3b 20 63 61 6e 63  65 6c 20 6f 6e 6c 79 0d  |  ; cancel only.|
00010cd0  4a ce 20 20 20 20 20 20  20 20 20 62 6c 20 20 20  |J.         bl   |
00010ce0  20 20 20 72 65 70 6f 72  74 5f 65 72 72 6f 72 0d  |   report_error.|
00010cf0  4a d8 1d 20 20 20 20 20  20 20 20 62 6c 20 20 20  |J..        bl   |
00010d00  20 20 20 63 6c 6f 73 65  64 6f 77 6e 0d 4a e2 1d  |   closedown.J..|
00010d10  20 20 20 20 20 20 20 20  73 77 69 20 20 20 20 20  |        swi     |
00010d20  22 4f 53 5f 45 78 69 74  22 0d 4a ec 18 2e 66 61  |"OS_Exit".J...fa|
00010d30  74 61 6c 5f 65 72 72 6f  72 5f 6d 65 73 73 61 67  |tal_error_messag|
00010d40  65 0d 4a f6 46 20 20 20  20 20 20 20 20 65 71 75  |e.J.F        equ|
00010d50  73 20 20 20 20 22 50 6c  61 63 65 49 74 20 68 61  |s    "PlaceIt ha|
00010d60  73 20 73 75 66 66 65 72  65 64 20 61 20 66 61 74  |s suffered a fat|
00010d70  61 6c 20 69 6e 74 65 72  6e 61 6c 20 65 72 72 6f  |al internal erro|
00010d80  72 20 28 22 2b bd 30 0d  4b 00 34 20 20 20 20 20  |r ("+.0.K.4     |
00010d90  20 20 20 65 71 75 73 20  20 20 20 22 29 20 61 6e  |   equs    ") an|
00010da0  64 20 6d 75 73 74 20 65  78 69 74 20 69 6d 6d 65  |d must exit imme|
00010db0  64 69 61 74 65 6c 79 22  2b bd 30 0d 4b 0a 11 20  |diately"+.0.K.. |
00010dc0  20 20 20 20 20 20 20 61  6c 69 67 6e 0d 4b 14 04  |       align.K..|
00010dd0  0d 4b 1e 53 3b 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.K.S; ----------|
00010de0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00010e20  2d 2d 2d 0d 4b 28 2c 3b  20 72 65 70 6f 72 74 20  |---.K(,; report |
00010e30  61 6e 20 65 72 72 6f 72  20 75 73 69 6e 67 20 57  |an error using W|
00010e40  69 6d 70 5f 52 65 70 6f  72 74 45 72 72 6f 72 0d  |imp_ReportError.|
00010e50  4b 32 0b 3b 20 65 6e 74  72 79 0d 4b 3c 1d 3b 20  |K2.; entry.K<.; |
00010e60  20 20 20 20 20 20 72 30  20 2d 3e 20 65 72 72 6f  |      r0 -> erro|
00010e70  72 20 62 6c 6f 63 6b 0d  4b 46 28 3b 20 20 20 20  |r block.KF(;    |
00010e80  20 20 20 72 31 20 3d 20  20 66 6c 61 67 73 20 66  |   r1 =  flags f|
00010e90  6f 72 20 65 72 72 6f 72  20 77 69 6e 64 6f 77 0d  |or error window.|
00010ea0  4b 50 3d 3b 20 20 20 20  20 20 20 20 20 20 62 69  |KP=;          bi|
00010eb0  74 20 30 20 73 65 74 20  3d 3d 3e 20 70 72 6f 76  |t 0 set ==> prov|
00010ec0  69 64 65 20 27 4f 4b 27  20 62 6f 78 20 69 6e 20  |ide 'OK' box in |
00010ed0  65 72 72 6f 72 20 77 69  6e 64 6f 77 0d 4b 5a 31  |error window.KZ1|
00010ee0  3b 20 20 20 20 20 20 20  20 20 20 62 69 74 20 31  |;          bit 1|
00010ef0  20 73 65 74 20 3d 3d 3e  20 70 72 6f 76 69 64 65  | set ==> provide|
00010f00  20 27 43 61 6e 63 65 6c  27 20 62 6f 78 0d 4b 64  | 'Cancel' box.Kd|
00010f10  4e 3b 20 20 20 20 20 20  20 20 20 20 62 69 74 20  |N;          bit |
00010f20  32 20 73 65 74 20 3d 3d  3e 20 68 69 67 68 6c 69  |2 set ==> highli|
00010f30  67 68 74 20 27 43 61 6e  63 65 6c 27 20 62 6f 78  |ght 'Cancel' box|
00010f40  20 28 6f 74 68 65 72 77  69 73 65 20 68 69 67 68  | (otherwise high|
00010f50  6c 69 67 68 74 20 27 4f  4b 27 29 0d 4b 6e 52 3b  |light 'OK').KnR;|
00010f60  20 20 20 20 20 20 20 20  20 20 62 69 74 20 33 20  |          bit 3 |
00010f70  73 65 74 20 3d 3d 3e 20  64 6f 6e 27 74 20 77 61  |set ==> don't wa|
00010f80  69 74 20 66 6f 72 20 63  6f 6e 66 69 72 6d 61 74  |it for confirmat|
00010f90  69 6f 6e 20 69 66 20 74  68 69 73 20 69 73 20 61  |ion if this is a|
00010fa0  20 27 74 65 78 74 27 20  65 72 72 6f 72 0d 4b 78  | 'text' error.Kx|
00010fb0  44 3b 20 20 20 20 20 20  20 20 20 20 62 69 74 20  |D;          bit |
00010fc0  34 20 73 65 74 20 3d 3d  3e 20 6f 6d 69 74 20 27  |4 set ==> omit '|
00010fd0  45 72 72 6f 72 20 66 72  6f 6d 20 27 20 6d 65 73  |Error from ' mes|
00010fe0  73 61 67 65 20 69 6e 20  74 69 74 6c 65 20 62 61  |sage in title ba|
00010ff0  72 0d 4b 82 50 3b 20 20  20 20 20 20 20 20 20 20  |r.K.P;          |
00011000  62 69 74 20 35 20 73 65  74 20 3d 3d 3e 20 72 65  |bit 5 set ==> re|
00011010  74 75 72 6e 20 77 69 74  68 20 72 31 3d 30 20 69  |turn with r1=0 i|
00011020  6d 6d 65 64 69 61 74 65  6c 79 20 69 66 20 62 75  |mmediately if bu|
00011030  74 74 6f 6e 73 20 6e 6f  74 20 63 6c 69 63 6b 65  |ttons not clicke|
00011040  64 0d 4b 8c 3f 3b 20 20  20 20 20 20 20 20 20 20  |d.K.?;          |
00011050  20 20 20 20 20 20 20 20  20 20 20 20 20 20 74 68  |              th|
00011060  65 20 65 72 72 6f 72 20  77 69 6e 64 6f 77 20 69  |e error window i|
00011070  73 20 61 6c 73 6f 20 6c  65 66 74 20 6f 70 65 6e  |s also left open|
00011080  0d 4b 96 51 3b 20 20 20  20 20 20 20 20 20 20 62  |.K.Q;          b|
00011090  69 74 20 36 20 73 65 74  20 3d 3d 3e 20 73 65 6c  |it 6 set ==> sel|
000110a0  65 63 74 20 4f 4b 2f 43  61 6e 63 65 6c 20 64 65  |ect OK/Cancel de|
000110b0  70 65 6e 64 69 6e 67 20  6f 6e 20 72 31 2c 20 63  |pending on r1, c|
000110c0  6c 6f 73 65 20 65 72 72  6f 72 20 77 69 6e 64 6f  |lose error windo|
000110d0  77 0d 4b a0 2e 3b 20 20  20 20 20 20 20 20 20 20  |w.K..;          |
000110e0  62 69 74 73 20 37 2e 2e  33 31 20 72 65 73 65 72  |bits 7..31 reser|
000110f0  76 65 64 20 28 6d 75 73  74 20 62 65 20 30 29 0d  |ved (must be 0).|
00011100  4b aa 0a 3b 20 65 78 69  74 0d 4b b4 1e 3b 20 20  |K..; exit.K..;  |
00011110  20 20 20 20 20 72 31 20  3d 20 72 65 74 75 72 6e  |     r1 = return|
00011120  20 73 74 61 74 75 73 0d  4b be 2b 3b 20 20 20 20  | status.K.+;    |
00011130  20 20 20 20 20 20 20 20  20 20 20 31 20 3d 3d 3e  |           1 ==>|
00011140  20 27 4f 4b 27 20 77 61  73 20 73 65 6c 65 63 74  | 'OK' was select|
00011150  65 64 0d 4b c8 2f 3b 20  20 20 20 20 20 20 20 20  |ed.K./;         |
00011160  20 20 20 20 20 20 32 20  3d 3d 3e 20 27 43 61 6e  |      2 ==> 'Can|
00011170  63 65 6c 27 20 77 61 73  20 73 65 6c 65 63 74 65  |cel' was selecte|
00011180  64 0d 4b d2 1b 3b 20 20  20 20 20 20 20 66 6c 61  |d.K..;       fla|
00011190  67 73 20 70 72 65 73 65  72 76 65 64 0d 4b dc 18  |gs preserved.K..|
000111a0  3b 20 20 20 20 20 20 20  72 32 20 63 6f 72 72 75  |;       r2 corru|
000111b0  70 74 65 64 0d 4b e6 04  0d 4b f0 14 2e 72 65 70  |pted.K...K...rep|
000111c0  6f 72 74 5f 65 72 72 6f  72 5f 6f 6b 0d 4b fa 19  |ort_error_ok.K..|
000111d0  20 20 20 20 20 20 20 20  6d 6f 76 20 20 20 20 20  |        mov     |
000111e0  72 31 2c 23 31 0d 4c 04  11 2e 72 65 70 6f 72 74  |r1,#1.L...report|
000111f0  5f 65 72 72 6f 72 0d 4c  0e 1e 20 20 20 20 20 20  |_error.L..      |
00011200  20 20 73 74 6d 66 64 20  20 20 72 31 33 21 2c 7b  |  stmfd   r13!,{|
00011210  72 31 34 7d 0d 4c 18 2a  20 20 20 20 20 20 20 20  |r14}.L.*        |
00011220  61 64 72 20 20 20 20 20  72 32 2c 73 77 69 74 63  |adr     r2,switc|
00011230  68 65 72 5f 6e 61 6d 65  2b 26 31 38 30 30 0d 4c  |her_name+&1800.L|
00011240  22 3d 20 20 20 20 20 20  20 20 73 75 62 20 20 20  |"=        sub   |
00011250  20 20 72 32 2c 72 32 2c  23 26 31 38 30 30 20 20  |  r2,r2,#&1800  |
00011260  20 20 20 20 20 20 20 20  20 20 3b 20 72 32 20 2d  |          ; r2 -|
00011270  3e 20 22 50 6c 61 63 65  49 74 22 0d 4c 2c 26 20  |> "PlaceIt".L,& |
00011280  20 20 20 20 20 20 20 73  77 69 20 20 20 20 20 22  |       swi     "|
00011290  57 69 6d 70 5f 52 65 70  6f 72 74 45 72 72 6f 72  |Wimp_ReportError|
000112a0  22 0d 4c 36 3c 20 20 20  20 20 20 20 20 6c 64 6d  |".L6<        ldm|
000112b0  66 64 20 20 20 72 31 33  21 2c 7b 70 63 7d 5e 20  |fd   r13!,{pc}^ |
000112c0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 70  |             ; p|
000112d0  72 65 73 65 72 76 65 20  66 6c 61 67 73 0d 4c 40  |reserve flags.L@|
000112e0  04 0d 4c 4a 53 3b 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..LJS; ---------|
000112f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00011330  2d 2d 2d 2d 0d 4c 54 30  3b 20 69 6e 66 6f 72 6d  |----.LT0; inform|
00011340  61 74 69 6f 6e 20 61 62  6f 75 74 20 74 68 65 20  |ation about the |
00011350  6c 69 6e 6b 65 64 20 6c  69 73 74 20 61 6e 64 20  |linked list and |
00011360  68 65 61 70 0d 4c 5e 04  0d 4c 68 16 2e 73 74 61  |heap.L^..Lh..sta|
00011370  72 74 5f 6c 69 6e 6b 65  64 5f 6c 69 73 74 0d 4c  |rt_linked_list.L|
00011380  72 15 20 20 20 20 20 20  20 20 65 71 75 64 20 20  |r.        equd  |
00011390  20 20 30 0d 4c 7c 0f 2e  68 65 61 70 5f 73 74 61  |  0.L|..heap_sta|
000113a0  72 74 0d 4c 86 05 5d 0d  4c 90 05 ed 0d 4c 9a 2a  |rt.L..].L....L.*|
000113b0  f1 20 7e 4f 25 2d 63 6f  64 65 25 3b 22 20 3d 20  |. ~O%-code%;" = |
000113c0  22 3b 28 4f 25 2d 63 6f  64 65 25 29 2f 31 30 32  |";(O%-code%)/102|
000113d0  34 3b 22 20 4b 22 0d 4c  a4 28 ff 20 22 53 61 76  |4;" K".L.(. "Sav|
000113e0  65 20 21 52 75 6e 49 6d  61 67 65 20 22 2b c3 7e  |e !RunImage "+.~|
000113f0  63 6f 64 65 25 2b 22 20  22 2b c3 7e 4f 25 0d 4c  |code%+" "+.~O%.L|
00011400  ae 1f 2a 53 65 74 54 79  70 65 20 21 52 75 6e 49  |..*SetType !RunI|
00011410  6d 61 67 65 20 41 62 73  6f 6c 75 74 65 0d 4c b8  |mage Absolute.L.|
00011420  14 2a 4b 65 79 20 31 20  54 57 49 4e 4f 20 38 7c  |.*Key 1 TWINO 8||
00011430  4d 0d 4c c2 1a 2a 4b 65  79 20 32 20 4c 6f 61 64  |M.L..*Key 2 Load|
00011440  20 21 50 6c 61 63 65 49  74 7c 4d 0d 4c cc 16 2a  | !PlaceIt|M.L..*|
00011450  4b 65 79 20 33 20 53 41  56 45 7c 4d 52 55 4e 7c  |Key 3 SAVE|MRUN||
00011460  4d 0d 4c d6 15 2a 4b 65  79 20 34 20 2a 44 65 73  |M.L..*Key 4 *Des|
00011470  6b 54 6f 70 7c 4d 0d 4c  e0 05 e0 0d 4c ea 04 0d  |kTop|M.L....L...|
00011480  4c f4 14 dd 20 a4 73 74  72 69 6e 67 28 74 65 78  |L... .string(tex|
00011490  74 24 29 0d 4c fe 3d e7  20 a9 28 74 65 78 74 24  |t$).L.=. .(text$|
000114a0  29 3e 31 32 20 8c 20 85  20 30 2c 74 65 78 74 24  |)>12 . . 0,text$|
000114b0  2b 22 20 69 73 20 6c 6f  6e 67 65 72 20 74 68 61  |+" is longer tha|
000114c0  6e 20 31 32 20 63 68 61  72 61 63 74 65 72 73 22  |n 12 characters"|
000114d0  0d 4d 08 17 5b 20 20 20  20 20 20 20 6f 70 74 20  |.M..[       opt |
000114e0  20 20 20 6f 70 74 25 0d  4d 12 19 20 20 20 20 20  |   opt%.M..     |
000114f0  20 20 20 65 71 75 73 20  20 20 20 74 65 78 74 24  |   equs    text$|
00011500  0d 4d 1c 05 5d 0d 4d 26  13 e7 20 a9 28 74 65 78  |.M..].M&.. .(tex|
00011510  74 24 29 3c 31 32 20 8c  0d 4d 30 17 5b 20 20 20  |t$)<12 ..M0.[   |
00011520  20 20 20 20 6f 70 74 20  20 20 20 6f 70 74 25 0d  |    opt    opt%.|
00011530  4d 3a 24 20 20 20 20 20  20 20 20 65 71 75 73 20  |M:$        equs |
00011540  20 20 20 c4 31 32 2d a9  28 74 65 78 74 24 29 2c  |   .12-.(text$),|
00011550  bd 30 29 0d 4d 44 05 5d  0d 4d 4e 05 cd 0d 4d 58  |.0).MD.].MN...MX|
00011560  06 3d 30 0d ff                                    |.=0..|
00011565