home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / utilities / utilss / siod / !Siod / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1993-03-15  |  24KB  |  810 lines

  1.  >$.TMP.!Sml.!RunImage
  2.  Multitasker for !Sml (c) 1992 Robin Watts
  3.  bent to do Siod 2.09
  4.  screen% 80*32
  5.  indir% 1024
  6.  windata% 4096
  7.  block% 256
  8.  code% 10000
  9.  menublock% 2048
  10.  cblock% 24
  11.  ON ERROR MODE MODE:REPORT:PRINT;" at line ";ERL:END
  12. assemble
  13. initialise
  14. getmodevars
  15. conch
  16. closedown
  17. initialise
  18. "Wimp_Initialise",200,&4B534154,"Siod Tasker" 
  19.  version%,task%
  20. closedown
  21. "Wimp_CloseDown",task%,&4B534154
  22. conch
  23. setup
  24. loadwindows
  25. initmenus
  26. openwindow(mainwh%,
  27. grabcaret
  28. vdu(12)
  29. !ypos=31
  30. launchsiod
  31.  closedown%
  32. closealltasks
  33. setup
  34. size%=(!xmax+1)*(!ymax+1)
  35. closedown%=
  36. !caretowned%=0
  37. prompt%=
  38. taskstarted%=
  39. loadwindows
  40. "Wimp_OpenTemplate",,"<Conch$Dir>.Templates"
  41. 9%mainwh%=
  42. doloadtemplate(0,"main")
  43. :%infowh%=
  44. doloadtemplate(1,"info")
  45. "Wimp_CloseTemplate"
  46. doloadtemplate(n%,ident$)
  47.  whandle%
  48. "Wimp_LoadTemplate",,windata%+n%*2048,indir%+n%*512,indir%+n%*512+512,-1,
  49. ident$+
  50. (0))),0
  51. "Wimp_CreateWindow",,windata%+n%*2048 
  52.  whandle%
  53. =whandle%
  54. openwindow(wh%,tooldsize%)
  55. !block%=wh%
  56.  tooldsize% 
  57. "Wimp_GetWindowInfo",,block%
  58.  block%!28=-1
  59. "Wimp_OpenWindow",,block%
  60. "Wimp_Poll",%110001,block% 
  61.  reason%,block%
  62.  reason% 
  63. redrawwindow
  64. openwindow(!block%,
  65. closealltasks
  66. mouseclicked
  67. keypressed
  68. menuselected
  69. gaincaret
  70. losecaret
  71.  17,18,19
  72.  block%!16 
  73. closealltasks
  74.  &400C1
  75. getmodevars
  76.  &808C1
  77. childoutput
  78.  &808C2
  79. childstarted
  80.  &808C3
  81. childdied
  82. redrawwindow
  83.  "Wimp_RedrawWindow",,block% 
  84.  more%
  85.  more%<>0
  86. t. !minx%=(block%!28-block%!4+block%!20)
  87. u. !maxx%=(block%!36-block%!4+block%!20)
  88. v0 !miny%=-(block%!40-block%!16+block%!24)
  89. w2 !maxy%=-(block%!32-block%!16+block%!24)
  90.  32+1
  91.  redraw
  92.  "Wimp_GetRectangle",,block% 
  93.  more%
  94. closealltasks
  95.  taskstarted% 
  96.  block%!20=1
  97.  block%!16=&808C0
  98.  block%!0=28
  99.  block%!12=0
  100.  block%!24=4
  101. "Wimp_SendMessage",17,block%,handle%
  102.  taskstarted%=
  103. childdied
  104. assemble
  105.  pass%=0 
  106. P%=code%
  107. [OPT pass%
  108. .screen
  109.                  EQUD screen%
  110.                 EQUD 0
  111.     .xmax
  112.                 EQUD 79
  113.     .ymax
  114.                 EQUD 31
  115. .xwinmax
  116.                 EQUD 79
  117. .xwinmin
  118.                 EQUD 0
  119. .ywinmax
  120.                 EQUD 31
  121. .ywinmin
  122.                 EQUD 0
  123.     .xpos
  124.                 EQUD 0
  125.     .ypos
  126.                 EQUD 0
  127. .vdusupressed
  128.                 EQUD 0
  129. .followingbytes
  130.                 EQUD 0
  131. .numbertocome
  132.                 EQUD 0
  133. .queueaddr
  134.                 EQUD queue
  135. .queue
  136.                 EQUD 0
  137.                 EQUD 0
  138.                 EQUD 0
  139.                 EQUD 0
  140. .bytestoignore
  141.                 EQUD 0
  142. H                                        \ Enter with Vdu Char in vdu
  143. @                                        \ No exit Conditions
  144. .dovdu
  145. +                STMFD R13!,{R0-R12,R14}
  146.                 LDRB R0,vdu
  147. (                LDR R1,bytestoignore
  148.                 CMP R1,#0
  149. "                BNE ignorebyte
  150. )                LDR R1,followingbytes
  151.                 CMP R1,#0
  152. !                BNE following
  153. )                CMP R0,#6  :BEQ vduon
  154. '                LDR R1,vdusupressed
  155. +                CMP R1,#1  :BEQ ignore0
  156. *                CMP R0,#127:BEQ delete
  157. -                CMP R0,#32 :BGE printable
  158. +                CMP R0,#0  :BEQ ignore0
  159. 8                CMP R0,#1  :
  160. Q R0,#1     :BEQ ignore
  161. +                CMP R0,#2  :BEQ ignore0
  162. +                CMP R0,#3  :BEQ ignore0
  163. +                CMP R0,#4  :BEQ ignore0
  164. +                CMP R0,#5  :BEQ ignore0
  165. -                CMP R0,#7  :BEQ printable
  166. -                CMP R0,#8  :BEQ backspace
  167. 0                CMP R0,#9  :BEQ forwardspace
  168. ,                CMP R0,#10 :BEQ linefeed
  169. *                CMP R0,#11 :BEQ upline
  170. '                CMP R0,#12 :BEQ cls
  171. +                CMP R0,#13 :BEQ creturn
  172. +                CMP R0,#14 :BEQ ignore0
  173. +                CMP R0,#15 :BEQ ignore0
  174. +                CMP R0,#16 :BEQ ignore0
  175. 8                CMP R0,#17 :
  176. Q R0,#1     :BEQ ignore
  177. 8                CMP R0,#18 :
  178. Q R0,#2     :BEQ ignore
  179. 8                CMP R0,#19 :
  180. Q R0,#5     :BEQ ignore
  181. +                CMP R0,#20 :BEQ ignore0
  182. *                CMP R0,#21 :BEQ vduoff
  183. 8                CMP R0,#22 :
  184. Q R0,#1     :BEQ ignore
  185. 8                CMP R0,#23 :
  186. Q R0,#9     :BEQ ignore
  187. 8                CMP R0,#24 :
  188. Q R0,#8     :BEQ ignore
  189. 8                CMP R0,#25 :
  190. Q R0,#5     :BEQ ignore
  191. )                CMP R0,#26 :BEQ vdu26
  192. +                CMP R0,#27 :BEQ ignore0
  193. .                CMP R0,#28 :BEQ textwindow
  194. 8                CMP R0,#29 :
  195. Q R0,#4     :BEQ ignore
  196. (                CMP R0,#30 :BEQ home
  197. '                CMP R0,#31 :BEQ tab
  198. .ignore0
  199. *                LDMFD R13!,{R0-R12,PC}
  200. .vduon
  201.                 MOV R0,#0
  202. '                STR R0,vdusupressed
  203.                 B   ignore0
  204. .delete
  205. 3                MOV R0,#8  :STR R0,vdu:BL dovdu
  206. 3                MOV R0,#32 :STR R0,vdu:BL dovdu
  207. 3                MOV R0,#8  :STR R0,vdu:BL dovdu
  208.                 LDR R1,xpos
  209.                 LDR R2,ypos
  210. "                BL  changedbox
  211.                 B   ignore0
  212. .backspace
  213.                 LDR R0,xpos
  214.                 LDR R1,ypos
  215. "                LDR R2,xwinmin
  216. "                LDR R3,ywinmin
  217. "                LDR R4,xwinmax
  218. "                LDR R5,ywinmax
  219.                  SUB R0,R0,#1
  220.                 STR R0,xpos
  221.                 CMP R0,R2
  222.                 BGE ignore0
  223.                 MOV R0,R4
  224.                 STR R0,xpos
  225.                  SUB R1,R1,#1
  226.                 STR R1,ypos
  227.                 CMP R1,R3
  228.                 BGE ignore0
  229. )                BL  scrolldownoneline
  230.                 MOV R1,R3
  231.                 STR R1,ypos
  232.                 B   ignore0
  233. .forwardspace
  234.                 LDR R0,xpos
  235.                 LDR R1,ypos
  236. "                LDR R2,xwinmin
  237. "                LDR R3,ywinmin
  238. "                LDR R4,xwinmax
  239. "                LDR R5,ywinmax
  240.                  ADD R0,R0,#1
  241.                 STR R0,xpos
  242.                 CMP R0,R4
  243.                 BLE ignore0
  244.                 MOV R0,R2
  245.                 STR R0,xpos
  246.                  ADD R1,R1,#1
  247.                 STR R1,ypos
  248.                 CMP R1,R5
  249.                 BLE ignore0
  250. '                BL  scrolluponeline
  251.                 MOV R1,R5
  252.                 STR R1,ypos
  253.                 B   ignore0
  254. .linefeed
  255.                 MOV R0,#13
  256.                 STR R0,vdu
  257.                 BL dovdu
  258.                 LDR R0,xpos
  259.                 LDR R1,ypos
  260. $"                LDR R2,xwinmin
  261. %"                LDR R3,ywinmin
  262. &"                LDR R4,xwinmax
  263. '"                LDR R5,ywinmax
  264. (                 ADD R1,R1,#1
  265.                 STR R1,ypos
  266.                 CMP R1,R5
  267.                 BLE ignore0
  268. ,'                BL  scrolluponeline
  269.                 MOV R1,R5
  270.                 STR R1,ypos
  271.                 B   ignore0
  272. .upline
  273.                 LDR R0,xpos
  274.                 LDR R1,ypos
  275. 3"                LDR R2,xwinmin
  276. 4"                LDR R3,ywinmin
  277. 5"                LDR R4,xwinmax
  278. 6"                LDR R5,ywinmax
  279. 7                 SUB R1,R1,#1
  280.                 STR R1,ypos
  281.                 CMP R1,R3
  282.                 BGE ignore0
  283. ;)                BL  scrolldownoneline
  284.                 MOV R1,R3
  285.                 STR R1,ypos
  286.                 B   ignore0
  287. @"                LDR R1,xwinmax
  288. A"                LDR R2,ywinmax
  289. B!                BL changedbox
  290.                 MOV R4,R1
  291.                 MOV R5,R2
  292. E"                LDR R1,xwinmin
  293. F"                LDR R2,ywinmin
  294. G!                BL changedbox
  295.                 MOV R3,R2
  296.                 MOV R2,R1
  297.                 LDR R6,xmax
  298. K                 ADD R6,R6,#1
  299. L!                LDR R8,screen
  300.                 MOV R9,#&20
  301.                 MOV R1,R3
  302. .clslp1
  303.                 MOV R0,R2
  304. .clslp2
  305. R#                MLA R7,R1,R6,R8
  306. S                 ADD R7,R7,R0
  307. T                 STRB R9,[R7]
  308. U                 ADD R0,R0,#1
  309.                 CMP R0,R4
  310.                 BLE clslp2
  311. X                 ADD R1,R1,#1
  312.                 CMP R1,R5
  313.                 BLE clslp1
  314.                 STR R2,xpos
  315.                 STR R3,ypos
  316.                 B   ignore0
  317. .creturn
  318. _"                LDR R0,xwinmin
  319.                 STR R0,xpos
  320.                 B   ignore0
  321. .vduoff
  322.                 MOV R0,#1
  323. d'                STR R0,vdusupressed
  324.                 B   ignore0
  325. .vdu26
  326.                 MOV R0,#0
  327. h"                STR R0,xwinmin
  328. i"                STR R0,ywinmin
  329.                 STR R0,xpos
  330.                 STR R0,ypos
  331.                 LDR R0,xmax
  332. m"                STR R0,xwinm