home *** CD-ROM | disk | FTP | other *** search
/ APDL Eductation Resources / APDL Eductation Resources.iso / programs / misc / cambridge / !EgDrive / !RunImage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1993-05-25  |  7.8 KB  |  307 lines

  1.  >!RunImage
  2.  Cambridge Instruction Set Emulator
  3.  Device Driver Shell
  4.  Version 1.00 (25th May 1993)         Copyright 
  5.  A. M. Pereira 1993
  6. CDeviceName$="Example"    : 
  7.  Device name (shown on TaskManager)
  8. /appname$="!EgDrive"      : 
  9.  Directory name
  10.     >dirname$="<EgDrive$Dir>" : 
  11.  Directory variable (see !Run)
  12. =refresh = 10             : 
  13.  Refresh rate (centi-seconds)
  14. 5Author$ ="Ainsley Pereira"       : 
  15.  For info box
  16. 5Version$="1.00 (25th May 1993)"  : 
  17.  For info box
  18.  q% 256, menu 1024
  19.  "Wimp_Initialise",200,&4B534154,DeviceName$+" Driver" 
  20.  wimp_v,task_handle
  21. quit    = 
  22. make_info_box
  23. device_startup
  24. iconbar = 
  25. iconbar
  26.  "OS_ReadMonotonicTime" 
  27.  time
  28.  "Wimp_PollIdle",,q%,time + refresh 
  29.  event
  30.  event 
  31.       
  32.  0 : 
  33. device_refresh
  34. (      
  35.  2 : 
  36.  "Wimp_OpenWindow",,q%
  37.  )      
  38.  3 : 
  39.  "Wimp_CloseWindow",,q%
  40.       
  41.  6 : 
  42. mouse
  43.       
  44.  9 : 
  45. menuselect
  46.       
  47.  17,18 : 
  48. message
  49.  quit
  50. device_closedown
  51.  "Wimp_CloseDown",task_handle,&4B534154
  52. iconbar
  53. !q%   = -1
  54. q%!4  = 0
  55. q%!8  = 0
  56. q%!12 = 68
  57. q%!16 = 68
  58. q%!20 = %11000000011010
  59. $(q%+24)=appname$
  60.  "Wimp_CreateIcon",,q% 
  61.  iconbar
  62. =iconbar
  63. mouse
  64.  q%!12 
  65. 8    
  66.  -2         : 
  67. ibarclick
  68. 9J   
  69.  !Device_window : 
  70. device_click :
  71.  <-| If your driver doesn't need
  72.                                    :
  73.    | a window then take this out
  74. make_info_box
  75.  info 400, indirect 1024
  76. ip=indirect
  77.  Visible area
  78. !info=&18C:info!4=&E6
  79. info!8=&456:info!12=&208
  80.  scroll offsets
  81. info!16=0:info!20=0
  82.  Handle to open behind
  83. info!24=-1
  84.  Window flags
  85. info!28=&84200012
  86.  Colours
  87. info!32=&01070207
  88. info!36=&00020103
  89.  Work area
  90. info!40=0:info!44=-290
  91. info!48=&2CA:info!52=0
  92.  Title icon flags
  93. info!56=&13D
  94.  Workarea 'button' flags
  95. info!60=0
  96.  Sprite area
  97. info!64=1
  98.  min width/height
  99. info!68=1
  100.  title data
  101. info!72=ip
  102. Y%$ip="About this Device Driver"+
  103. Z'ip+=
  104. ("About this Device Driver")+1
  105. [+info!80=
  106. ("About this Device Driver")+1
  107. info!76=ip:Null=ip
  108. ^    ip+=1
  109.  Number of icons
  110. info!84=7
  111.  Icons
  112. icp=info+88
  113.  Icon 0, engraved border
  114. !icp=8:icp!4=-286
  115. icp!8=&2C4:icp!12=-42
  116. icp!16=&1700013D
  117. icp!20=Null
  118. $ip="r4"+
  119. icp!24=ip
  120. ip+=3:icp!28=1
  121. icp+=32
  122.  Icon 1, indented header
  123. !icp=&26:icp!4=-78
  124. icp!8=&17C:icp!12=-14
  125. icp!16=&1700013D
  126. icp!20=ip
  127. q $ip=DeviceName$+" Driver"+
  128. r"ip+=
  129. (DeviceName$+" Driver")+1
  130. s%icp!28=
  131. (DeviceName$+" Driver")+1
  132. $ip="r2"+
  133. 0:indented=ip
  134. icp!24=indented
  135. v    ip+=3
  136. icp+=32
  137.  Icon 2, indented message
  138. !icp=&22:icp!4=-142
  139. icp!8=&2AA:icp!12=-90
  140. icp!16=&1700311D
  141. icp!20=ip
  142. }2$ip="Device Driver for use with !Cambridge"+
  143. ~4ip+=
  144. ("Device Driver for use with !Cambridge")+1
  145. icp!24=indented
  146. 7icp!28=
  147. ("Device Driver for use with !Cambridge")+1
  148. icp+=32
  149.  Icon 3, Author:
  150. !icp=&28:icp!4=-194
  151. icp!8=&A8:icp!12=-162
  152. icp!16=&17000001
  153. $(icp+20)="Author :"+
  154. icp+=32
  155.  Icon 4, Version:
  156. !icp=&28:icp!4=-258
  157. icp!8=&A8:icp!12=-226
  158. icp!16=&17000001
  159. $(icp+20)="Version:"+
  160. icp+=32
  161.  Icon 5, Author field
  162. !icp=&C6:icp!4=-206
  163. icp!8=&2A8:icp!12=-152
  164. icp!16=&1700313D
  165. icp!20=ip:$ip=Author$+
  166. (Author$)+1
  167. icp!24=indented
  168. icp!28=
  169. (Author$)+1
  170. icp+=32
  171.  Icon 6, Version field
  172. !icp=&C6:icp!4=-270
  173. icp!8=&2A8:icp!12=-216
  174. icp!16=&1700313D
  175. icp!20=ip:$ip=Version$+
  176. (Version$)+1
  177. icp!24=indented
  178. icp!28=
  179. (Version$)+1
  180.  "Wimp_CreateWindow",,info 
  181.  infohandle
  182. selecticon(w, i, select)
  183.     !q%=w
  184. q%!4=i
  185.  select 
  186.   q%!8=1<<21:q%!12=1<<21
  187.   q%!8=0:q%!12=1<<21
  188.  "Wimp_SetIconState",,q%
  189. ibarclick
  190.  (q%!8 
  191.  %010)=%010 
  192. menu(q%!0-64,96+(2*44))
  193. menuheader(pointer,width,title$)
  194. menupointer=pointer
  195. $menupointer=title$+
  196. menupointer?12=7
  197. menupointer?13=2
  198. menupointer?14=7
  199. menupointer?15=0
  200. menupointer!16=width
  201. menupointer!20=44
  202. menupointer!24=0
  203. menupointer+=28
  204. menuitem(subm,flags,tflags,text$)
  205. menupointer!0=flags
  206. menupointer!4=subm
  207. menupointer!8=tflags
  208. $(menupointer+12)=text$+
  209. menupointer+=24
  210. menu(x,y)
  211. menuheader(menu, 192, "EgDriver")
  212. menuitem(infohandle, 0, &7000031, "Info")
  213. menuitem(-1, 1<<7, &7000031, "Quit")
  214.  "Wimp_CreateMenu",,menu,x,y
  215. menuselect
  216.  !q% 
  217.  info
  218.  1: quit=
  219.  "Wimp_GetPointerInfo",,q%
  220.  (q%!8 
  221.  %001)=%001 
  222. menu(x,y)
  223. message
  224.  q%!16 
  225.  0: quit=
  226. e(erl,err)
  227. q%!0=err
  228. 2$(q%+4)=
  229. $+" (internal error code "+
  230. (erl)+")"
  231.  "Wimp_ReportError",q%,%011,"Cambridge Emulator" 
  232.  ,fatal
  233.  fatal=2 
  234. reporterror(errnum,errmess$,errflags)
  235. q%!0=errnum
  236. $(q%+4)=errmess$
  237.  "Wimp_ReportError",misc,errflags,"Cambridge Emulator"
  238.  /-------------------------------------------------------------------------\
  239.  |                      Your code starts here                              |
  240.  | You need to provide:                                                    |
  241.  DEF PROCdevice_startup                                               |
  242.  |               - Performs any initialising required                      |
  243.  DEF PROCdevice_refresh                                               |
  244.  |               - Updates the device                                      |
  245.  DEF PROCdevice_closedown                                             |
  246.  |               - Called just before driver is killed                     |
  247.  |                 (You shouldn't drink and drive, :-)                     |
  248.  | If your driver doesn't require startup code just use                    |
  249.  |    DEF PROCdevice_startup                                               |
  250.  |    ENDPROC                                                              |
  251.  | and the same for closedown code (only its DEF PROCdevice_closedown!)    |
  252.  |                                                                         |
  253.  | To avoid variable name clashes, prefix all variable names with Device_  |
  254.  \-------------------------------------------------------------------------/
  255. device_startup
  256.  Device_window 4096, Device_WorkSpace 256
  257.  "Wimp_OpenTemplate",,dirname$+".Templates"
  258.  "Wimp_LoadTemplate",,Device_window+4,Device_window+2048,Device_window+4096,-1,"Example",0
  259.  "Wimp_CreateWindow",,Device_window+4 
  260.  !Device_window
  261.  "Wimp_CloseTemplate"
  262. Device_OldOutput = 0
  263.  "Cambridge_ReadIOState" 
  264.  Device_Input, Device_Output
  265. device_updatewindow
  266.  "Wimp_GetWindowState",,Device_window
  267.  "Wimp_OpenWindow",,Device_window
  268.  Don't forget to take the bit out of the mouse click handler if your driver
  269.  doesn't need a window.
  270. device_closedown
  271. device_refresh
  272.  "Cambridge_ReadIOState" 
  273.  "Cambridge_SetIOState",Device_Input,b  :
  274.  Don't alter Output state
  275.  b<>Device_OldOutput 
  276. device_updatewindow
  277. Device_OldOutput = b
  278. device_updatewindow
  279.  in, out, a, b
  280.  "Cambridge_ReadIOState" 
  281.  in,out  :
  282.  Ensure accuracy
  283.  a=7 
  284.  (in 
  285.  2^a)>0 
  286.     b=
  287.     b=
  288. selecticon(!Device_window, (7-a)+2, b)
  289.  (out 
  290.  2^a)>0 
  291.     b=
  292.     b=
  293. selecticon(!Device_window, (7-a)+12, b)
  294. device_click
  295.  icon, b
  296. icon = q%!16
  297.  icon<2 
  298.  icon>9 
  299. icon-=2 : 
  300. 64icon=7-icon: 
  301.  icon is now bit number for inputs
  302. 7(Device_Input = Device_Input 
  303.  2^icon
  304.  "Cambridge_ReadIOState" 
  305.  "Cambridge_SetIOState",Device_Input,b
  306. device_updatewindow
  307.