home *** CD-ROM | disk | FTP | other *** search
- In -
- Out @.!TaskDemo.!RunImage
- Type Absolute
- Ver 1.02b
- Max 64k
-
- Pre
- ``Message_Quit=0
- `Message_MenuWarning=&400C0
- ``Message_TaskInfoOpen=&4F6C0
- ``Message_TaskInfoMenuWarning=&4F6C1
- ``Message_TaskInfoMenuSelection=&4F6C2
- ``Message_TaskInfoHelpRequest=&4F6C3
- End Pre
-
- ; Maybe it would have been easier to understand if I had written it in BASIC?
- ; Well now I have (see TaskDemo2). ;-)
-
- ; Anyway this is the source for a simple demo app for taskinfo, and what can
- ; I say it works, it should really use messagetrans but I can't be bothered.
-
- #CodePrefix On
- #Library Strings,strcpy.strlen ; Because I'm too lazy
-
- .Start
- LADR r13,`Stack ; Setup a stack
- LMOV r0,#310
- LDR r1,`TASK
- ADR r2,`TaskName
- ADR r3,`MessageNumbersAllowed
- SWI "Wimp_Initialise" ; Initialise wimp task
- STR r1,`TaskHandle
- ADR r1,`TemplateFile
- SWI "Wimp_OpenTemplate"
- ADR r1,`InfoWindow
- LADR r2,`Indirected
- LADR r3,`IndirectedEnd
- MVN r4,#0
- ADR r5,`progInfo
- MOV r6,#0
- SWI "Wimp_LoadTemplate"
- SWI "Wimp_CreateWindow" ; Create info window
- STR r0,`InfoWindowHandle
- MOV r0,#6
- MOV r3,#76
- SWI "OS_Module" ; Menu needs to be in RMA
- STR r2,`MenuBlock
- ADR r0,`Menu
- ADD r3,r0,#76
- $CopyMenuToRMA
- LDR r1,[r0],#4
- STR r1,[r2],#4 ; Copy data
- CMP r0,r3
- BLT $CopyMenuToRMA ; Loop till menu copied
- >PollingLoop
- LDR r0,`PollMask
- LADR r1,`PollBlock
- SWI "Wimp_Poll"
- CMP r0,#0
- BLT PollingLoop
- CMP r0,#19
- ADDLE pc,pc,r0,LSL #2
- B PollingLoop
- B PollingLoop ; Null_Reason_Code
- B PollingLoop ; Redraw_Window_Request
- B Open_Window_Request ; Open_Window_Request
- B PollingLoop ; Close_Window_Request
- B PollingLoop ; Pointer_Leaving_Window
- B PollingLoop ; Pointer_Entering_Window
- B PollingLoop ; Mouse_Click
- B PollingLoop ; User_Drag_Box
- B PollingLoop ; Key_Pressed
- B PollingLoop ; Menu_Selection
- B PollingLoop ; Scroll_Request
- B PollingLoop ; Lose_Caret
- B PollingLoop ; Gain_Caret
- B PollingLoop ; Poll word non-zero
- B PollingLoop ; Reserved
- B PollingLoop ; Reserved
- B PollingLoop ; Reserved
- B User_Message ; User_Message
- B User_Message_Recorded ; User_Message_Recorded
- B PollingLoop ; User_Message_Acknowledge
- >Open_Window_Request
- SWI "Wimp_OpenWindow" ; Open a window
- B PollingLoop
- >User_Message
- LDR r0,[r1,#16] ; Read message action
- TEQ r0,#``Message_Quit
- BEQ KillTask ; If quit message do relevant code
- LDR r2,`Message_TaskInfoMenuSelection
- TEQ r0,r2
- BEQ TaskInfoMenuSelection ; If menu selection message do code
- B PollingLoop
- >KillTask
- LDR r0,`TaskHandle
- LDR r1,`TASK
- SWI "Wimp_CloseDown" ; Kill wimp task
- MOV r0,#7
- LDR r2,`MenuBlock
- SWI "OS_Module" ; Release menu workspace
- SWI "OS_Exit" ; End
- >TaskInfoMenuSelection
- LDR r2,[r1,#36]
- CMN r2,#1
- BEQ PollingLoop ; If not submenu ignore
- TEQ r2,#1
- BEQ KillTask ; Kill task if quit option
- B PollingLoop
- >User_Message_Recorded
- LDR r0,[r1,#16] ; Read message action
- LDR r2,`Message_TaskInfoOpen
- TEQ r0,r2
- BEQ TaskInfoOpen ; If open message do code
- LDR r2,`Message_TaskInfoMenuWarning
- TEQ r0,r2
- BEQ TaskInfoMenuWarning ; If menu warning message do code
- LDR r2,`Message_TaskInfoHelpRequest
- TEQ r0,r2
- BEQ TaskInfoHelpRequest ; If help request message do code
- B PollingLoop
- >TaskInfoOpen
- LDR r0,[r1,#20] ; Get call type
- TEQ r0,#1
- BNE PollingLoop ; If not for this task return
- B SendReply ; Reply that we support TaskInfo
- >TaskInfoMenuWarning
- LDR r0,[r1] ; Get message size
- LDR r2,[r1,#4] ; Get task handle to reply to
- LDR r3,[r1,#8] ; Get my_ref
- ADD r1,r1,#8
- SUB r0,r0,#8
- STR r0,[r1] ; Store message size
- STR r2,[r1,#4] ; Set task handle to reply to
- STR r3,[r1,#8] ; Set my_ref
- LMOV r0,#`Message_MenuWarning
- STR r0,[r1,#16] ; Store new message action
- LDR r0,`MenuBlock
- STR r0,[r1,#20] ; Store submenu pointer
- B SendReply
- >TaskInfoHelpRequest
- LDR r2,[r1,#40]
- CMN r2,#1
- BEQ PollingLoop ; If not submenu ignore
- TEQ r2,#0
- ADREQ r0,`InfoHelp
- ADRNE r0,`QuitHelp ; Get appropriate help message
- ADD r1,r1,#36 ; Location to copy string to
- BL strcpy ; Copy help string to message block
- MOV r2,r1
- BL strlen ; Get string length
- ADD r1,r1,#40 ; Add other info size+4
- BIC r0,r1,#3 ; Ensure multiple of 4
- SUB r1,r2,#36 ; Restore original r1
- STR r0,[r1] ; Store string length
- B SendReply
- >SendReply
- LDR r2,[r1,#8]
- STR r2,[r1,#12] ; Copy my_ref to your_ref
- MOV r0,#17 ; Send as User_Message
- LDR r2,[r1,#4] ; Get task handle to reply to
- SWI "Wimp_SendMessage" ; Send reply
- B PollingLoop
- .`TASK
- EQUS "TASK"
- .`TaskName
- EQUZA "TaskInfo Demonstration"
- .`MessageNumbersAllowed
- .`Message_TaskInfoOpen
- EQUD ``Message_TaskInfoOpen
- .`Message_TaskInfoMenuWarning
- EQUD ``Message_TaskInfoMenuWarning
- .`Message_TaskInfoMenuSelection
- EQUD ``Message_TaskInfoMenuSelection
- .`Message_TaskInfoHelpRequest
- EQUD ``Message_TaskInfoHelpRequest
- EQUD ``Message_Quit
- .`TaskHandle
- EQUD 0
- .`MenuBlock
- EQUD 0
- .`TemplateFile
- EQUZA "<Obey$Dir>.Templates"
- .`progInfo
- EQUZA "progInfo"
- .`InfoHelp
- EQUZ "Move the pointer right for more info."
- .`QuitHelp
- EQUZA "Click here to quit TaskInfo Demonstration."
- .`Menu
- EQUS "Task"
- EQUD &00000000
- EQUD &00000000
- EQUD &00070207
- EQUD &00000050
- EQUD &0000002C
- EQUD &00000000
- EQUD &00000000
- .`InfoWindowHandle
- EQUD &00000000
- EQUD &07000021
- EQUS "Info"
- EQUD &00000000
- EQUD &00000000
- EQUD &00000080
- EQUD &00000000
- EQUD &07000021
- EQUS "Quit"
- EQUD &00000000
- EQUD &00000000
- .`InfoWindow
- RES 512
- .`Indirected
- RES 512
- .`IndirectedEnd
- .`PollMask
- EQUD &00003973 ; Mask out reason codes
- .`PollBlock
- RES 256
- .`Stack
- RES 16
- #Here Libraries
-