home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / programming / taskinfo / TInfoDemo < prev   
Encoding:
Text File  |  1998-06-09  |  7.4 KB  |  223 lines

  1. In   -
  2. Out  @.!TaskDemo.!RunImage
  3. Type Absolute
  4. Ver  1.02b
  5. Max  64k
  6.  
  7. Pre
  8. ``Message_Quit=0
  9. `Message_MenuWarning=&400C0
  10. ``Message_TaskInfoOpen=&4F6C0
  11. ``Message_TaskInfoMenuWarning=&4F6C1
  12. ``Message_TaskInfoMenuSelection=&4F6C2
  13. ``Message_TaskInfoHelpRequest=&4F6C3
  14. End Pre
  15.  
  16. ; Maybe it would have been easier to understand if I had written it in BASIC?
  17. ; Well now I have (see TaskDemo2). ;-)
  18.  
  19. ; Anyway this is the source for a simple demo app for taskinfo, and what can
  20. ; I say it works, it should really use messagetrans but I can't be bothered.
  21.  
  22. #CodePrefix On
  23. #Library Strings,strcpy.strlen           ; Because I'm too lazy
  24.  
  25. .Start
  26.    LADR    r13,`Stack                    ; Setup a stack
  27.    LMOV    r0,#310
  28.    LDR     r1,`TASK
  29.    ADR     r2,`TaskName
  30.    ADR     r3,`MessageNumbersAllowed
  31.    SWI     "Wimp_Initialise"             ; Initialise wimp task
  32.    STR     r1,`TaskHandle
  33.    ADR     r1,`TemplateFile
  34.    SWI     "Wimp_OpenTemplate"
  35.    ADR     r1,`InfoWindow
  36.    LADR    r2,`Indirected
  37.    LADR    r3,`IndirectedEnd
  38.    MVN     r4,#0
  39.    ADR     r5,`progInfo
  40.    MOV     r6,#0
  41.    SWI     "Wimp_LoadTemplate"
  42.    SWI     "Wimp_CreateWindow"           ; Create info window
  43.    STR     r0,`InfoWindowHandle
  44.    MOV     r0,#6
  45.    MOV     r3,#76
  46.    SWI     "OS_Module"                   ; Menu needs to be in RMA
  47.    STR     r2,`MenuBlock
  48.    ADR     r0,`Menu
  49.    ADD     r3,r0,#76
  50. $CopyMenuToRMA
  51.    LDR     r1,[r0],#4
  52.    STR     r1,[r2],#4                    ; Copy data
  53.    CMP     r0,r3
  54.    BLT     $CopyMenuToRMA                ; Loop till menu copied
  55. >PollingLoop
  56.    LDR     r0,`PollMask
  57.    LADR    r1,`PollBlock
  58.    SWI     "Wimp_Poll"
  59.    CMP     r0,#0
  60.    BLT     PollingLoop
  61.    CMP     r0,#19
  62.    ADDLE   pc,pc,r0,LSL #2
  63.    B       PollingLoop
  64.    B       PollingLoop                   ; Null_Reason_Code
  65.    B       PollingLoop                   ; Redraw_Window_Request
  66.    B       Open_Window_Request           ; Open_Window_Request
  67.    B       PollingLoop                   ; Close_Window_Request
  68.    B       PollingLoop                   ; Pointer_Leaving_Window
  69.    B       PollingLoop                   ; Pointer_Entering_Window
  70.    B       PollingLoop                   ; Mouse_Click
  71.    B       PollingLoop                   ; User_Drag_Box
  72.    B       PollingLoop                   ; Key_Pressed
  73.    B       PollingLoop                   ; Menu_Selection
  74.    B       PollingLoop                   ; Scroll_Request
  75.    B       PollingLoop                   ; Lose_Caret
  76.    B       PollingLoop                   ; Gain_Caret
  77.    B       PollingLoop                   ; Poll word non-zero
  78.    B       PollingLoop                   ; Reserved
  79.    B       PollingLoop                   ; Reserved
  80.    B       PollingLoop                   ; Reserved
  81.    B       User_Message                  ; User_Message
  82.    B       User_Message_Recorded         ; User_Message_Recorded
  83.    B       PollingLoop                   ; User_Message_Acknowledge
  84. >Open_Window_Request
  85.    SWI     "Wimp_OpenWindow"             ; Open a window
  86.    B       PollingLoop
  87. >User_Message
  88.    LDR     r0,[r1,#16]                   ; Read message action
  89.    TEQ     r0,#``Message_Quit
  90.    BEQ     KillTask                      ; If quit message do relevant code
  91.    LDR     r2,`Message_TaskInfoMenuSelection
  92.    TEQ     r0,r2
  93.    BEQ     TaskInfoMenuSelection         ; If menu selection message do code
  94.    B       PollingLoop
  95. >KillTask
  96.    LDR     r0,`TaskHandle
  97.    LDR     r1,`TASK
  98.    SWI     "Wimp_CloseDown"              ; Kill wimp task
  99.    MOV     r0,#7
  100.    LDR     r2,`MenuBlock
  101.    SWI     "OS_Module"                   ; Release menu workspace
  102.    SWI     "OS_Exit"                     ; End
  103. >TaskInfoMenuSelection
  104.    LDR     r2,[r1,#36]
  105.    CMN     r2,#1
  106.    BEQ     PollingLoop                   ; If not submenu ignore
  107.    TEQ     r2,#1
  108.    BEQ     KillTask                      ; Kill task if quit option
  109.    B       PollingLoop
  110. >User_Message_Recorded
  111.    LDR     r0,[r1,#16]                   ; Read message action
  112.    LDR     r2,`Message_TaskInfoOpen
  113.    TEQ     r0,r2
  114.    BEQ     TaskInfoOpen                  ; If open message do code
  115.    LDR     r2,`Message_TaskInfoMenuWarning
  116.    TEQ     r0,r2
  117.    BEQ     TaskInfoMenuWarning           ; If menu warning message do code
  118.    LDR     r2,`Message_TaskInfoHelpRequest
  119.    TEQ     r0,r2
  120.    BEQ     TaskInfoHelpRequest           ; If help request message do code
  121.    B       PollingLoop
  122. >TaskInfoOpen
  123.    LDR     r0,[r1,#20]                   ; Get call type
  124.    TEQ     r0,#1
  125.    BNE     PollingLoop                   ; If not for this task return
  126.    B       SendReply                     ; Reply that we support TaskInfo
  127. >TaskInfoMenuWarning
  128.    LDR     r0,[r1]                       ; Get message size
  129.    LDR     r2,[r1,#4]                    ; Get task handle to reply to
  130.    LDR     r3,[r1,#8]                    ; Get my_ref
  131.    ADD     r1,r1,#8
  132.    SUB     r0,r0,#8
  133.    STR     r0,[r1]                       ; Store message size
  134.    STR     r2,[r1,#4]                    ; Set task handle to reply to
  135.    STR     r3,[r1,#8]                    ; Set my_ref
  136.    LMOV    r0,#`Message_MenuWarning
  137.    STR     r0,[r1,#16]                   ; Store new message action
  138.    LDR     r0,`MenuBlock
  139.    STR     r0,[r1,#20]                   ; Store submenu pointer
  140.    B       SendReply
  141. >TaskInfoHelpRequest
  142.    LDR     r2,[r1,#40]
  143.    CMN     r2,#1
  144.    BEQ     PollingLoop                   ; If not submenu ignore
  145.    TEQ     r2,#0
  146.    ADREQ   r0,`InfoHelp
  147.    ADRNE   r0,`QuitHelp                  ; Get appropriate help message
  148.    ADD     r1,r1,#36                     ; Location to copy string to
  149.    BL      strcpy                        ; Copy help string to message block
  150.    MOV     r2,r1
  151.    BL      strlen                        ; Get string length
  152.    ADD     r1,r1,#40                     ; Add other info size+4
  153.    BIC     r0,r1,#3                      ; Ensure multiple of 4
  154.    SUB     r1,r2,#36                     ; Restore original r1
  155.    STR     r0,[r1]                       ; Store string length
  156.    B       SendReply
  157. >SendReply
  158.    LDR     r2,[r1,#8]
  159.    STR     r2,[r1,#12]                   ; Copy my_ref to your_ref
  160.    MOV     r0,#17                        ; Send as User_Message
  161.    LDR     r2,[r1,#4]                    ; Get task handle to reply to
  162.    SWI     "Wimp_SendMessage"            ; Send reply
  163.    B       PollingLoop
  164. .`TASK
  165.    EQUS    "TASK"
  166. .`TaskName
  167.    EQUZA   "TaskInfo Demonstration"
  168. .`MessageNumbersAllowed
  169. .`Message_TaskInfoOpen
  170.    EQUD    ``Message_TaskInfoOpen
  171. .`Message_TaskInfoMenuWarning
  172.    EQUD    ``Message_TaskInfoMenuWarning
  173. .`Message_TaskInfoMenuSelection
  174.    EQUD    ``Message_TaskInfoMenuSelection
  175. .`Message_TaskInfoHelpRequest
  176.    EQUD    ``Message_TaskInfoHelpRequest
  177.    EQUD    ``Message_Quit
  178. .`TaskHandle
  179.    EQUD    0
  180. .`MenuBlock
  181.    EQUD    0
  182. .`TemplateFile
  183.    EQUZA   "<Obey$Dir>.Templates"
  184. .`progInfo
  185.    EQUZA   "progInfo"
  186. .`InfoHelp
  187.    EQUZ    "Move the pointer right for more info."
  188. .`QuitHelp
  189.    EQUZA   "Click here to quit TaskInfo Demonstration."
  190. .`Menu
  191.    EQUS    "Task"
  192.    EQUD    &00000000
  193.    EQUD    &00000000
  194.    EQUD    &00070207
  195.    EQUD    &00000050
  196.    EQUD    &0000002C
  197.    EQUD    &00000000
  198.    EQUD    &00000000
  199. .`InfoWindowHandle
  200.    EQUD    &00000000
  201.    EQUD    &07000021
  202.    EQUS    "Info"
  203.    EQUD    &00000000
  204.    EQUD    &00000000
  205.    EQUD    &00000080
  206.    EQUD    &00000000
  207.    EQUD    &07000021
  208.    EQUS    "Quit"
  209.    EQUD    &00000000
  210.    EQUD    &00000000
  211. .`InfoWindow
  212.    RES     512
  213. .`Indirected
  214.    RES     512
  215. .`IndirectedEnd
  216. .`PollMask
  217.    EQUD    &00003973                     ; Mask out reason codes
  218. .`PollBlock
  219.    RES     256
  220. .`Stack
  221.    RES     16
  222. #Here Libraries
  223.