home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / mag_discs / 17 / qwikcd / !QwikCD / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1994-12-29  |  24KB  |  1,095 lines

  1.  > !RunImage for !QwikCD
  2.  1994 Chris Jackson
  3.  A quick audio CD player!
  4. $+" at line "+
  5. *task%=
  6. Wimp_Initialise("QwikCD",&1000)
  7.  CDFSControl% 16,block% 8,Tracks$(100),Pos%(100)
  8. Quit%=
  9. polls%=0
  10. time%=0
  11. Diddle%=
  12. Repeat%=
  13. Pause%=
  14. Playing%=
  15. col%=6
  16. step%=-1
  17. "Version$="V1.00 (29 Dec 1994)"
  18. LoadSprs("<QwikCD$Dir>.Sprites")
  19.  Fonts% 255
  20.  i%=0 
  21. Fonts%?i%=0
  22. %icon%=
  23. Wimp_CreateIcon("!QwikCD")
  24. LoadMessages("<QwikCD$Dir>.Messages")
  25. LoadScrolly("<QwikCD$Dir>.!RunZTxt")
  26. Wimp_OpenTemplate("<QwikCD$Dir>.Templates")
  27. 1Info%=
  28. Wimp_TempToWin("Info",sprites%,Fonts%)
  29. 5Player%=
  30. Wimp_TempToWin("Player",sprites%,Fonts%)
  31. 5Author%=
  32. Wimp_TempToWin("Author",sprites%,fonts%)
  33. 5Config%=
  34. Wimp_TempToWin("Config",sprites%,Fonts%)
  35. 6NewCD%=
  36. Wimp_TempToWin("NEwCDEh?",sprites%,Fonts%)
  37.  <CDDetails%=
  38. Wimp_TempToWin("YerDetails",sprites%,Fonts%)
  39. !7Scrolly%=
  40. Wimp_TempToWin("Scrolly",sprites%,Fonts%)
  41. Wimp_CloseTemplate
  42. Wimp_PutIconText(Info%,7,Version$)
  43. GatherConfig
  44. LoadConfig
  45. FillInConfig
  46. SetUpMenus
  47. InitCD(Device%)
  48. CheckOutDisc
  49.  OpenControl% 
  50. OpenPlayer
  51. Status(s%)
  52.  s%<>0 
  53.  AutoPlay% 
  54.  "Wimp_Poll",,b% 
  55.  1 : 
  56.  "Wimp_RedrawWindow",,b%
  57.  2 : 
  58. OpenWin
  59.  3 : 
  60. CloseWin
  61.  6 : 
  62. Mouse(b%!12,b%!16,b%!8)
  63.  9 : 
  64.  17,18 : 
  65.  Diddle%<>
  66. FillInfoVers
  67.  Quit%=
  68. User_CloseDown
  69. CloseWin
  70.  b%!0=Scrolly% 
  71. Diddle%=
  72. InfoAt%=InfoSpuff%
  73.  "Wimp_CloseWindow",,b%
  74. OpenWin
  75.  b%!0=NewCD% 
  76. MoOpInWin(CDDetails%,NewCD%,1,b%!28)
  77.  "Wimp_OpenWindow",,b%
  78.  stat%
  79. Status(stat%)
  80.  stat% 
  81.  0 : 
  82. UpdateClock
  83.  1 : 
  84. Pause(3)
  85.  3 : 
  86.  Repeat% 
  87.  Playing% 
  88. Play(First%)
  89. polls%+=1
  90.  polls%>50 
  91. HowBigIsCD(len%)
  92.  len%<>CurrentCDlen% 
  93. CheckOutDisc
  94. polls%=0
  95. UpdateClock
  96.  Pause%=
  97.  Pause%=
  98. SetPauseIcon
  99.  Playing%=
  100.  Playing%=
  101.  "XCD_EnquireAddress",1,,,,,,,CDFSControl% 
  102.  part%;S%
  103. Wimp_PutIconText(Player%,11,"00:00")
  104. Wimp_PutIconText(Player%,11,
  105. MinsAndSecs(part%))
  106. WhichTrack
  107. WhichTrack
  108.  time%
  109.  "XCD_EnquireAddress",0,,,,,,,CDFSControl% 
  110.  time%;S%
  111. Track(time%)
  112.  Tr%<>OldTrack% 
  113. Wimp_PutIconText(Player%,8,
  114. (Tr%))
  115. Wimp_PutIconText(Player%,7,Tracks$(Tr%))
  116. OldTrack%=Tr%
  117. Track(time%)
  118.  (i=100) 
  119.  (Pos%(i)>time%) 
  120.  (Pos%(i)=-1)
  121.  i>Last% i=Last%
  122.  i<First% i=First%
  123. MinsAndSecs(from%)
  124.  mins$,secs$
  125. mins$=
  126. Mins(from%))
  127. secs$=
  128. Secs(from%))
  129. (mins$)<2 mins$="0"+mins$
  130. (secs$)<2 secs$="0"+secs$
  131. =mins$+":"+secs$
  132. Mins(this%)
  133. =(this% 
  134.  16711681)>>16
  135. Secs(this%)
  136. =((this% 
  137.  65535)>>8)
  138. Frames(this%)
  139. =(this% 
  140.  255)
  141. SMins(this%)
  142. SSecs(this%)
  143. User_CloseDown
  144.  i%=0 
  145.  Fonts%?i%>0
  146.  "Font_LoseFont",i%
  147. Fonts%?i%-=1
  148.  "XMessageTrans_CloseFile",u%
  149.  "XOS_Module",7,,u%
  150.  "Wimp_CloseDown"
  151.  b%!16 
  152.  0 : Quit%=
  153.  &502 : 
  154. HelpRequest(b%!32,b%!36)
  155. HelpRequest(win%,ic%)
  156.  begin$,ic$,Help$,type%
  157.  win% 
  158.  Player% : begin$="Player":type%=0
  159.  Info% : begin$="Info":type%=0
  160.  Author% : begin$="Author":type%=0
  161.  -2 : begin$="Bar":ic%=-1:type%=0
  162.  type%=0 
  163. (ic%)
  164.  ic%=-1 ic$=""
  165. %Help$=
  166. LookupMsg(begin$+ic$)+"|M"
  167. Help$=""
  168.  Help$<>"" 
  169. b%!0=(24+
  170. (Help$)+1) 
  171. b%!12=b%!8
  172. b%!16=&503
  173. $(b%+20)=Help$+
  174.  "Wimp_SendMessage",17,b%,b%!4
  175.  pass$,sdot%,a$,b$,c$,entry%
  176. entry%=b%!4
  177. Wimp_MenuSelection(b%,m$,but%)
  178. sdot%=
  179. m$,".",
  180. m$,".")+1)
  181.  sdot%<>0 
  182. pass$=
  183. (m$)-sdot%)
  184. m$,sdot%-1)
  185. LookupMsg("MIconbar")+"."+
  186. LookupMsg("MIconbar1") : 
  187. OpenPlayer
  188. LookupMsg("MIconbar")+"."+
  189. LookupMsg("MIconbar2") : 
  190. OpenConfig
  191. LookupMsg("MPlayer")+"."+
  192. LookupMsg("MPlayer0") : 
  193. PlayTrack(pass$)
  194. (m$)-
  195. m$,".")) 
  196. LookupMsg("MPlayer1") : 
  197. Rewind
  198. LookupMsg("MPlayer2") : 
  199. LookupMsg("MPlayer3") : 
  200. Pause(1)
  201. LookupMsg("MPlayer4") : 
  202. Play(First%)
  203. LookupMsg("MPlayer5") : 
  204. (pass$)<>0 
  205.  entry%<>TICKentry% 
  206.  TICKentry%<>-1 
  207. Wimp_TickMenuEntry(mb%,TICKentry%)
  208. Wimp_TickMenuEntry(mb%,entry%)
  209. TICKentry%=entry%
  210.  but%=1 
  211.  "Wimp_CreateMenu",,M%,x%,y%
  212. PlayTrack(name$)
  213. name$=
  214. name$,
  215. (name$)-1)
  216. i=First%-1
  217.  (i=Last%) 
  218.  (Tracks$(i)=name$)
  219.  Tracks$(i)=name$ 
  220. Play(i):i=1
  221. Rewind
  222.  toplay%
  223.  "XCD_EnquireAddress",0,,,,,,,CDFSControl% 
  224.  part%;S%
  225. toplay%=
  226. Track(part%)
  227.  part%<Pos%(toplay%)+100 toplay%-=1
  228.  toplay%<First% toplay%=Last%
  229. Play(toplay%)
  230.  toplay%
  231.  "XCD_EnquireAddress",0,,,,,,,CDFSControl% 
  232.  part%;S%
  233. toplay%=
  234. Track(part%)+1
  235.  toplay%>Last% toplay%=First%
  236. Play(toplay%)
  237. Mouse(win%,ic%,but%)
  238.  win% 
  239.  -2 :
  240.  but% 
  241.  1,4 : 
  242. OpenPlayer
  243.  2 : 
  244. IconMenu
  245.  Player% :
  246.  but% 
  247.  1,4 :
  248.  ic% 
  249.  15 : 
  250. CheckOutDisc
  251. Wimp_SetButtonState(Player%,15,
  252.  13 : 
  253. Rewind
  254. Wimp_SetButtonState(Player%,13,
  255.  2 : 
  256. Wimp_SetButtonState(Player%,2,
  257.  4 : 
  258. Pause(2)
  259. Wimp_SetButtonState(Player%,4,
  260.  3 : 
  261. Play(First%)
  262. Wimp_SetButtonState(Player%,3,
  263.  1 : 
  264. Wimp_SetButtonState(Player%,1,
  265.  2 : 
  266. PlayerMenu(b%!0,b%!4,
  267. Wimp_GetIconText(Player%,7))
  268.  Info% :
  269.  ic% 
  270.  2 : 
  271. RunHelp
  272.  7 : 
  273.  (but% 
  274.  16) 
  275. diddle
  276.  9 : 
  277. OpenAuthor
  278.  Config% :
  279.  ic% 
  280.  7 : 
  281. FillInConfig:
  282. Wimp_CloseWindow(Config%)
  283.  6 : 
  284. GatherConfig:
  285. SaveConfig:
  286. Wimp_CloseWindow(Config%)
  287.  NewCD% :
  288.  ic% 
  289.  0 : 
  290. SaveNewCD
  291.  2 : 
  292. CloseNewCD
  293. diddle
  294. Diddle%=
  295. Wimp_PutIconText(Scrolly%,1,
  296. 52," "))
  297. InfoAt%=InfoSpuff%
  298. CentreWin(Scrolly%,
  299. FillInfoVers
  300.  Diddle%=-2 
  301. Wimp_PutIconText(Scrolly%,1,
  302. Wimp_GetIconText(Scrolly%,1),51)+
  303. NextChr)
  304. Diddle%=-1
  305. Diddle%=-2
  306. NextChr
  307. ((?InfoAt%)
  308. InfoAt%+=1
  309.  ((?InfoAt%)
  310. &71)=255 InfoAt%=InfoSpuff%
  311. CloseNewCD
  312.  i%,z%
  313. z%=((Last%-First%)*2)+4
  314. !b%=CDDetails%
  315. b%!4=i%
  316.  "Wimp_DeleteIcon",,b%
  317. M    i%+=1
  318.  i%=z%
  319. Wimp_CloseWindow(CDDetails%)
  320. Wimp_CloseWindow(NewCD%)
  321. CopyAllRest(cept$)
  322.  from%,to%,out%,s$
  323. out%=
  324. V!from%=
  325. ("<QwikCD$Dir>.MyCDs")
  326. W to%=
  327. ("<QwikCD$Dir>.MyCDsX")
  328. #from%
  329. s$,4)="{CD=" out%=
  330.  s$=cept$ out%=
  331.  out%=
  332. #to%,s$
  333. #from%
  334. #from%
  335.  "XWimp_StartTask","Delete <QwikCD$Dir>.MyCDs"
  336.  "XWimp_StartTask","Rename <QwikCD$Dir>.MyCDsX <QwikCD$Dir>.MyCDs"
  337.  "XWimp_StartTask","SetType <QwikCD$Dir>.MyCDs Text"
  338. SaveNewCD
  339.  file%,t%,z%,len%
  340. HowBigIsCD(len%)
  341. CopyAllRest("{CD="+
  342. (len%)+"}")
  343. i!file%=
  344. ("<QwikCD$Dir>.MyCDs")
  345. #file%=
  346. #file%
  347. #file%,"{CD="+
  348. (len%)+"}"
  349. #file%,
  350. Wimp_GetIconText(CDDetails%,1)
  351.  t%=First% 
  352.  Last%
  353. #file%,
  354. Wimp_GetIconText(CDDetails%,3+(z%*2))
  355. p    z%+=1
  356. #file%
  357. CloseNewCD
  358. CheckOutDisc
  359. SetUpCDDetails
  360.  last%,tx%,tr%,len%
  361. !b%=CDDetails%
  362.  "Wimp_GetWindowInfo",,b%
  363.  56 per track
  364. |"len%=62+((Last%-First%)*56)+60
  365.  len%<290 len%=290
  366. b%!0=b%!44
  367. b%!4=-len%
  368. b%!8=b%!52
  369. b%!12=b%!56
  370.  "Wimp_SetExtent",CDDetails%,b%
  371. last%=2
  372. Wimp_PutIconText(CDDetails%,1,Tracks$(0))
  373.  First%<>Last% 
  374.  t%=First%+1 
  375.  Last%
  376. ,tr%=
  377. Wimp_CopyIconDown(CDDetails%,last%)
  378. .tx%=
  379. Wimp_CopyIconDown(CDDetails%,last%+1)
  380. last%=tr%
  381. Wimp_PutIconText(CDDetails%,tr%,
  382. (t%)+":")
  383. Wimp_PutIconText(CDDetails%,tx%,Tracks$(t%))
  384. Wimp_PutIconText(CDDetails%,2,
  385. (First%)+":")
  386. Wimp_PutIconText(CDDetails%,3,Tracks$(First%))
  387. OpenNewCD
  388. SetUpCDDetails
  389. CentreWin(NewCD%,
  390. MoOpInWin(CDDetails%,NewCD%,1,-1)
  391. MoOpInWin(win%,in%,ic%,beh%)
  392.  x,y,xx,yy,X,XX,Y,YY
  393. X=b%!4
  394. Y=b%!8
  395. XX=b%!12
  396. YY=b%!16
  397. !b%=in%
  398. b%!4=ic%
  399.  "Wimp_GetIconState",,b%
  400. x=X+b%!8+6
  401. y=YY+b%!12+6
  402. xx=X+b%!16
  403. yy=YY+b%!20-6
  404. b%!0=win%
  405.  "Wimp_GetWindowInfo",,b%
  406. !b%=win%
  407. b%!4=x
  408. b%!8=y
  409. b%!12=xx
  410. b%!16=yy
  411. b%!28=beh%
  412.  "Wimp_OpenWindow",,b%
  413. !b%=in%
  414. b%!4=X
  415. b%!8=Y
  416. b%!12=XX
  417. b%!16=YY
  418. b%!20=0
  419. b%!24=0
  420. b%!28=win%
  421.  "Wimp_OpenWindow",,b%
  422. PlayerMenu(b%!0,b%!4,tick$)
  423. Tplaylist%=
  424. MenuOfArray(1,Tracks$(),100,1,
  425. LookupMsg("Tracks"),tick$,b%!0,b%!4,
  426. Wimp_CreateMenuMsg(1,MPlayer$(),1000,1,MPlayer$(0),">playlist%#","","","")
  427. RunHelp
  428. ("Filer_Run <QwikCD$Dir>.!Help")
  429. IconMenu
  430. Wimp_CreateMenuMsg(0,MIconbar$(),1000,1,MIconbar$(0),">Info%","","","")
  431. OpenAuthor
  432. CentreWin(Author%,
  433. OpenConfig
  434. CentreWin(Config%,
  435. OpenPlayer
  436. CentreWin(Player%,
  437. CentreWin(win%,disp%)
  438.  x,y,xs,ys
  439. b%!0=win%
  440.  "Wimp_GetWindowInfo",,b%
  441. x=(b%!52-b%!44)/2
  442. y=(b%!56-b%!48)/2
  443.  "OS_ReadModeVariable",-1,11 
  444.  ,,xs
  445.  "OS_ReadModeVariable",-1,12 
  446.  ,,ys
  447.     xs+=1
  448.     ys+=1
  449. b%!4=xs-x
  450. b%!8=ys-y
  451. b%!12=xs+x
  452. b%!16=ys+y
  453. b%!28=-1
  454.  disp%=
  455.  "Wimp_OpenWindow",,b%
  456. InitCD(drive%)
  457.  "CDFS_ConvertDriveToDevice",drive% 
  458.  ,physical%
  459. #CDFSControl%!0 =(physical% 
  460. *CDFSControl%!4 =(physical% 
  461.  &18) >> 3
  462. *CDFSControl%!8 =(physical% 
  463.  &e0) >> 5
  464. ,CDFSControl%!12=(physical% 
  465.  &ff00) >> 8
  466. 1CDFSControl%!16=(physical% 
  467.  &ffff0000) >> 16
  468. CheckOutDisc
  469.  i,len$,dcount%
  470. HowBigIsCD(CurrentCDlen%)
  471. EnquireDisc(First%,Last%)
  472. LoadDetails(
  473. (CurrentCDlen%),First%,Last%) 
  474. PutInitData
  475. Wimp_PutIconText(Player%,6,"")
  476. OpenNewCD
  477. Wimp_PutIconText(Player%,14,"/"+
  478. MinsAndSecs(CurrentCDlen%))
  479. old%=0
  480. dcount%=0
  481.  i=First% 
  482.  Last%
  483. EnquireTrack(i,Pos%(i),type%,chans%)
  484.  type%=-1 
  485. dcount%+=1
  486. "Tracks$(i)="Data #"+
  487. (dcount%)
  488.  Last%<100 Tracks$(Last%+1)=""
  489. OldTrack%=0
  490. WhichTrack
  491. PutInitData
  492. Wimp_PutIconText(Player%,6,Tracks$(0))
  493. Wimp_PutIconText(Player%,11,"00:00")
  494. Wimp_PutIconText(Player%,7,Tracks$(First%))
  495. Wimp_PutIconText(Player%,8,
  496. (First%))
  497. LoadDetails(disc$,First%,Last%)
  498.  i,line$,outcome%
  499. !file%=
  500. ("<QwikCD$Dir>.MyCDs")
  501. line$=
  502. #file%
  503.  (line$="{CD="+disc$+"}") 
  504. #file%)
  505.  line$="{CD="+disc$+"}" 
  506. Tracks$(0)=
  507. #file%
  508.  i=First% 
  509.  Last%
  510. Tracks$(i)=
  511. #file%
  512. outcome%=
  513. Tracks$(0)="?"
  514.  i=First% 
  515.  Last%
  516. Tracks$(i)=""
  517. outcome%=
  518. #file%
  519. =outcome%
  520. Play(track%)
  521.  Pause%=
  522. Pause(0):
  523.  "XCD_PlayTrack",track%,255,,,,,,CDFSControl%
  524. 1) Playing%=
  525. Pause(do%)
  526.  Pause%=
  527.  do%=2 do%=0
  528.  Pause%=
  529.  do%=2 do%=1
  530.  Pause%=
  531.  do%=1 
  532.  do%=1 
  533.  do%=0 
  534.  "XCD_AudioPause",do%,,,,,,,CDFSControl%
  535.  do%=3 do%=1
  536.  Pause%=
  537.  do%=0 Pause%=
  538.  Pause%=
  539.  do%=1 Pause%=
  540. SetPauseIcon
  541. SetPauseIcon
  542.  Pause%=
  543. col%=col%+step%
  544.  col%<1 
  545.  col%>5 step%=-step%
  546. Wimp_IconColour(Player%,12,6,col%)
  547. Wimp_IconColour(Player%,12,6,6)
  548. EnquireTrack(track%,
  549.  block%!0,
  550.  data%,
  551.  channels%)
  552.  "XCD_EnquireTrack",track%,block%,,,,,,CDFSControl%
  553. data%=0-(block%?4 
  554. E channels%=2+2*(block%?4 
  555. data%=0
  556. channels%=2
  557. EnquireDisc(
  558.  first%,
  559.  last%)
  560.  "XCD_EnquireTrack",0,block%,,,,,,CDFSControl%
  561. first%=block%?0
  562. last%=block%?1
  563. Playing%=
  564.  Pause%=
  565.  Pause%=
  566. SetPauseIcon
  567.  "XCD_StopDisc",,,,,,,,CDFSControl%
  568. PutInitData
  569. HowBigIsCD(
  570.  length%)
  571.  "XCD_DiscUsed",1,block%,,,,,,CDFSControl%
  572. length%=block%!0
  573. Status(
  574.  status%)
  575.  "XCD_AudioStatus",,,,,,,,CDFSControl% 
  576.  status%;S%
  577.  status%=5 status%=3
  578. OpenDrawer
  579.  "XCD_OpenDrawer",,,,,,,,CDFSControl%
  580. MenuOfArray(type%,array$(),top%,st%,menut$,tick$,x%,y%,l%)
  581.  i%,j%,m%,w%,s$,entries%,entry$
  582. entries%=0
  583. off%=mind%
  584.  menufree%+28>menuend% 
  585.  0,"Can't fit all the entries into the menu."
  586. menutitle$=menut$
  587. menuptr%=menufree%
  588. menut$=
  589. LookupMsg(menut$)
  590. $menuptr%=menut$
  591. menuptr%?12=7
  592. menuptr%?13=2
  593. menuptr%?14=7
  594. menuptr%?15=0
  595. menuptr%!20=44
  596. menuptr%!24=0
  597. menuptr%+=28
  598. i%=st%-1
  599. TICKentry%=-1
  600. }    i%+=1
  601. !entry$=
  602. LookupMsg(array$(i%))
  603.  array$(i%)="" entry$=""
  604. entry$=array$(i%)
  605.  (entry$<>"") 
  606.  (entry$<>"** DEL **") 
  607.   !menuptr%=0
  608.   menuptr%!4=-1
  609. -  menuptr%!8=%111000000000000000000100001
  610. entry$,1)="~" 
  611.     menuptr%!8+=(1<<22)
  612. #    entry$=
  613. entry$,
  614. (entry$)-1)
  615.  entry$=tick$ 
  616. '    
  617.  tick$<>"" TICKentry%=entries%
  618.   entry$+=" "
  619. (entry$)<13 
  620.     $(menuptr%+12)=entry$
  621.      I%=off%
  622.      off%+=
  623. (entry$)+1
  624.      $I%=entry$
  625.      menuptr%!12=I%
  626.      menuptr%!16=-1
  627.       menuptr%!20=
  628. (entry$)+1
  629.      menuptr%!8+=&100
  630. (entry$)>w% w%=
  631. (entry$)
  632.   entries%+=1
  633.   menuptr%+=24
  634.  (i%=top%) 
  635.  (array$(i%)="")
  636. %menuptr%!-24=(menuptr%!-24) 
  637. m%=menufree%
  638. m%!16=(w%*8+6)*2
  639.  TICKentry%<>-1 
  640. Wimp_TickMenuEntry(m%,TICKentry%)
  641.  entries%<>0 
  642.  type%=0 
  643. x%=x%-64
  644. y%=y%+44
  645.  "Wimp_CreateMenu",,m%,x%,y%
  646. menutop%=m%
  647. menufree%=mb%
  648. menufree%=menuptr%
  649.  entries%=0 =1
  650. LoadMessages(f$)
  651.  "MessageTrans_FileInfo",,f$
  652.  G%256
  653.  "OS_Module",6,,,17+
  654. $(u%+16)=f$
  655.  "MessageTrans_OpenFile",u%,u%+16
  656. LookupMsg(i$)
  657. LookupMsgParams(i$,"","","","")
  658. LookupMsgParams(i$,p0$,p1$,p2$,p3$)
  659.  F%,L%,v$
  660.  "XMessageTrans_Lookup",u%,i$,G%,256,p0$,p1$,p2$,p3$
  661. ,,v$,L%;F%
  662. G%?L%=0
  663. Misc_GetZero(G%)
  664. LoadSprs(from$)
  665.  add$,file%
  666.  "Wimp_ReadSysInfo",2 
  667. add$=
  668. (s%?0)+
  669. (s%?1)
  670. file%=
  671. (from$+add$)
  672.  file% 
  673. #file%:from$+=add$
  674.  "OS_File",5,from$ 
  675.  there%,,,,size%
  676.  there%=1 
  677. size%+=16
  678.  sprites% size%
  679. sprites%!0=size%
  680.  "OS_SpriteOp",&10A,sprites%,from$
  681. sprites%=-1
  682. LoadScrolly(from$)
  683.  "OS_File",5,from$ 
  684.  there%,,,,size%
  685. size%+=1
  686.  there%=1 
  687.  InfoSpuff% size%
  688.  "OS_File",16,from$,InfoSpuff%,0 
  689.  ,,,,size%
  690.  InfoSpuff% 
  691. Oops)+1
  692. $(InfoSpuff%)=
  693. Oops+"
  694. P="....,;: Aaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrgggggggggggggghhhhhhhhh :;,...."
  695. LoadConfig
  696.  from$,from%,line$
  697.  from$="<QwikCD$Dir>.!Config"
  698. from%=
  699. (from$)
  700.  from%<1 
  701. SaveConfig(from$):from%=
  702. (from$)
  703. line$=
  704. #from%
  705. ProcessConfig(line$)
  706. #from%
  707. #from%
  708. ProcessConfig(line$)
  709.  before$,after$
  710. before$=
  711. line$,
  712. line$,":"))
  713. &after$=
  714. line$,
  715. (line$)-
  716. (before$))
  717.  before$ 
  718.  "Device" : Device%=
  719. (after$)
  720.  "AutoPlay" : AutoPlay%=(after$="Y")
  721.  "Error on data play" : DataPlay%=(after$="Y")
  722.  "Open control" : OpenControl%=(after$="Y")
  723. GatherConfig
  724. +Device%=
  725. Wimp_GetIconText(Config%,2))
  726. *AutoPlay%=
  727. Wimp_ButtonState(Config%,4)
  728. *DataPlay%=
  729. Wimp_ButtonState(Config%,3)
  730. -OpenControl%=
  731. Wimp_ButtonState(Config%,5)
  732. FillInConfig
  733. Wimp_PutIconText(Config%,2,
  734. (Device%))
  735. Wimp_SetButtonState(Config%,4,AutoPlay%)
  736. Wimp_SetButtonState(Config%,3,DataPlay%)
  737. Wimp_SetButtonState(Config%,5,OpenControl%)
  738. SaveConfig
  739.  to$,to%
  740. to$="<QwikCD$Dir>.!Config"
  741. (to$)
  742. #to%,"; QwikCD Configuration file, 
  743.  1994 Chris Jackson"
  744. #to%,"; Written on "+
  745. #to%,"Device:"+
  746. (Device%)
  747. #to%,"Error on data play:"+
  748. YN(DataPlay%)
  749. #to%,"AutoPlay:"+
  750. YN(AutoPlay%)
  751. #to%,"Open control:"+
  752. YN(OpenControl%)
  753. #from%
  754. YN(i)
  755. "NY",
  756. (i)+1,1)
  757. SetUpMenus
  758.  MPlayer$(7),MIconbar$(6)
  759. SetupMenuArray(MPlayer$(),"MPlayer")
  760. SetupMenuArray(MIconbar$(),"MIconbar")
  761. SetupMenuArray(array$(),b$)
  762. array$(0)=b$
  763. array$(i)=b$+
  764. (i-1)
  765. LookupMsg(array$(i))="-"
  766. array$(i)=""
  767. Wimp_Initialise(name$,space%)
  768.  "Wimp_Initialise",200,&4B534154,name$+
  769.  ,task%
  770.  b% space%,mb% &900,mind% 1000
  771. menufree%=mb%
  772. menuend%=mb%+&900
  773. task$=name$
  774. =task%
  775. Wimp_CreateMenuMsg(type%,array$(),stop%,start%,title$,a$,b$,c$,d$)
  776.  menufree%+28>menuend% 
  777.  0,"Menu area full."
  778.  h%,z%,m%,w%,y%,item$
  779. 8/title$=
  780. LookupMsgParams(title$,a$,b$,c$,d$)
  781. (title$)-2
  782. menutitle$=title$
  783. ;    h%=48
  784. menuptr%=menufree%
  785. $menuptr%=title$
  786. menuptr%?12=7
  787. menuptr%?13=2
  788. menuptr%?14=7
  789. menuptr%?15=0
  790. menuptr%!20=44
  791. menuptr%!24=0
  792. menuptr%+=28
  793. z%=start%
  794. menuitem(
  795. LookupMsgParams(array$(z%),a$,b$,c$,d$))
  796. h%+=44
  797. I    z%+=1
  798.  (array$(z%)="") 
  799.  (array$(z%)="-") 
  800.  (z%=stop%)
  801. K%menuptr%!-24=(menuptr%!-24) 
  802. m%=menufree%
  803. m%!16=(w%*8+6)*2
  804. h%-=44
  805.  type%>=0 
  806.  type%=0 y%=h%+92 
  807.  y%=b%!4+8
  808.  "Wimp_CreateMenu",,m%,!b%-64,y%
  809. menutop%=m%
  810. menufree%=mb%
  811.  menufree%=menuptr%
  812. Wimp_CreateMenu(type%,menustr$,title$)
  813.  menufree%+28>menuend% 
  814.  0,"Menu area full."
  815.  h%,i%,m%,w%,y%,item$
  816.  title$-2
  817. menutitle$=title$
  818. menuptr%=menufree%
  819. $menuptr%=title$
  820. menuptr%?12=7
  821. menuptr%?13=2
  822. menuptr%?14=7
  823. menuptr%?15=0
  824. menuptr%!20=44
  825. menuptr%!24=0
  826. menuptr%+=28
  827. h'item$=
  828. String_GetNext(menustr$,",")
  829. menuitem(item$)
  830. h%+=44
  831.  item$=""
  832. m%=menufree%
  833. m%!16=(w%*8+6)*2
  834. h%-=44
  835.  type%>=0 
  836.  type%=0 y%=h%+92 
  837.  y%=b%!4+8
  838.  +(h%/2)
  839.  "Wimp_CreateMenu",,m%,!b%-64,y%
  840. menutop%=m%
  841. menufree%=mb%
  842.  menufree%=menuptr%
  843. menuitem(item$)
  844.  item$="" 
  845.  menuptr%!-24=(menuptr%!-24) 
  846.  &80:
  847.  menuptr%+24>menuend% 
  848.  0,"Menu area full"
  849.  i%,i1%,flg%,subptr%,L%,I%
  850. flg%=&00
  851. item$,">")
  852. item$,1)="#" 
  853.   item$=
  854. item$,
  855. (item$)-1)
  856.   flg%+=&02
  857.   h%+=26
  858.  i%>0 
  859.   subptr%=
  860. item$,i%+1))
  861.   item$=
  862. item$,i%-1)
  863.   subptr%=-1
  864. menuptr%!0=flg%
  865. menuptr%!4=subptr%
  866. menuptr%!8=&07000021
  867. item$,1)="$" 
  868.   !menuptr%=&04
  869.   menuptr%!8=&108
  870.   i%=
  871. item$,"(")
  872.  i%>0 
  873.     L%=
  874. item$,i%+1)
  875.     item$=
  876. item$,i%-1)
  877.     L%=12
  878.   menuptr%!12=
  879. item$,2)
  880.   menuptr%!16=-1
  881.   menuptr%!20=L%
  882.   item$=
  883. L%," ")
  884. item$,1)="!" 
  885.      item$=
  886. item$,
  887. (item$)-1)
  888.     !menuptr%+=&08
  889. item$,1)="+" 
  890.      item$=
  891. item$,
  892. (item$)-1)
  893.     !menuptr%+=&01
  894. (item$)<=12 
  895.     $(menuptr%+12)=item$
  896. *    I%=
  897. Internal_Workspace(
  898. (item$)+1)
  899.     $I%=item$
  900.     menuptr%!12=I%
  901.     menuptr%!16=-1
  902.     menuptr%!20=
  903. (item$)+1
  904. $    menuptr%!8=menuptr%!8 
  905.  &100
  906. (item$)>w% 
  907. (item$)
  908. menuptr%+=24
  909. Internal_Workspace(L%)
  910.  L% L%
  911. String_GetNext(str$,sep$)
  912. i1%=i%+1
  913. str$+sep$,sep$,i1%)
  914. str$,i1%,i%-i1%)
  915. Wimp_TickMenuEntry(b%,n%)
  916. %b%!(28+24*n%)=b%!(28+24*n%) 
  917. Wimp_MenuSelection(menus%,
  918.  but%)
  919.  "Wimp_GetPointerInfo",,b%+64
  920. but%=b%!72
  921.  "Wimp_DecodeMenu",,menutop%,menus%,
  922. 200," ") 
  923.  ,,,m$
  924.  m$="" 
  925.  m$="Quit" Quit%=
  926. User_CloseDown:
  927. m$=menutitle$+"."+m$
  928. Wimp_ReportMessage(message$,type%)
  929.     !b%=0
  930. $(b%+4)=message$+
  931.  "Wimp_ReportError",b%,type%,task$ 
  932. Wimp_CloseWindow(handle%)
  933. !b%=handle%
  934.  "Wimp_CloseWindow",,b%
  935. Wimp_OpenTemplate(file$)
  936.  "Wimp_OpenTemplate",,file$
  937. Wimp_CloseTemplate
  938.  "Wimp_CloseTemplate"
  939. Wimp_TempToWin(name$,spr%,fonts%)
  940.  size1%,size2%,total%
  941.  "Wimp_LoadTemplate",,0,,,,name$,0 
  942.  ,size1%,size2%
  943. total%=size1%+size2%
  944.  buffer% total%
  945.  "Wimp_LoadTemplate",,b%,buffer%,buffer%+total%,fonts%,name$,0 
  946.  ,,,,,,total%
  947.  total%=0 
  948. Wimp_CloseTemplate:
  949.  0,"Template `"+name$+"` not found":
  950. Wimp_CloseDown:
  951. b%!64=spr%
  952. Wimp_CreateWindow(b%)
  953. Wimp_CreateWindow(b%)
  954.  "Wimp_CreateWindow",,b% 
  955. Misc_GetZero(addr%)
  956.  ?addr%
  957. (?addr%)
  958. addr%+=1
  959. Wimp_CopyIconDown(win%,ic%)
  960.  x0%,y0%,x1%,y1%,flags%
  961. !b%=win%
  962. b%!4=ic%
  963.  "Wimp_GetIconState",,b%
  964. x0%=b%!8
  965. y0%=b%!12
  966. x1%=b%!16
  967. y1%=b%!20
  968. flags%=b%!24
  969.  flags%
  970.   text$=$(b%!28)
  971.   valid%=b%!32
  972. #  B%=
  973. Internal_Workspace(b%!36)
  974.   $B%=text$
  975.   b%!28=B%
  976.  b%!32>0 
  977. +    B%=
  978. Internal_Workspace(
  979. $(b%!32)+1)
  980.     $B%=$(b%!32)
  981.     b%!32=B%
  982.   i%=b%?40
  983.   b%?40=13
  984.   text$=$(b%+28)
  985.   b%?40=i%
  986.   valid%=-1
  987.  (flags% 
  988.  &103)=&103 
  989.  sprite$=
  990. getcommand(valid%,"S",2)) 
  991.  sprite$=text$
  992. si%=y0%-y1%
  993. y0%+=si%
  994. y1%+=si%
  995. !b%=win%
  996. b%!20=flags%
  997. b%!24=b%!28
  998. b%!28=b%!32
  999. b%!32=b%!36
  1000. (text$=
  1001. Wimp_Iconstring(flags%,b%+24)
  1002.  flags% 
  1003.  &100 v%=b%!28 
  1004.  v%=-1
  1005. b%!4=x0%
  1006. b%!8=y0%
  1007. b%!12=x1%
  1008. b%!16=y1%
  1009.  "Wimp_CreateIcon",,b% 
  1010.  "Wimp_ForceRedraw",!b%,b%!4,b%!8,b%!12,b%!16
  1011. Wimp_Iconstring(flg%,p%)
  1012.  i%,i$
  1013.  flg%
  1014. &100 
  1015.  i$=$!p% 
  1016.  i%=p%?12:p%?12=13:i$=$p%:p%?12=i%
  1017. getcommand(v%,c$)
  1018.  v%<=0 
  1019. +$I%=
  1020. ";"+$v%,";"+c$):
  1021.  I%=0 
  1022. $(v%+I%-1),
  1023. $(v%+I%-1)+";",";")-1)
  1024. Wimp_PutIconText(win%,icon%,text$)
  1025. b%!0=win%
  1026. b%!4=icon%
  1027.  "Wimp_GetIconState",,b%
  1028.  $(b%!28)=text$ 
  1029.  ((b%!24) 
  1030.  &100)=0 
  1031.  0,"Icon "+
  1032.  icon%+" is not indirected."
  1033. $(b%!28)=text$
  1034. b%!8=0
  1035. b%!12=0
  1036.  "Wimp_SetIconState",,b%
  1037. Wimp_GetIconText(win%,ic%)
  1038. b%!0=win%
  1039. b%!4=ic%
  1040.  "Wimp_GetIconState",,b%
  1041. =$(b%!28)
  1042. Misc_ConvertToUpper(s$)
  1043.  s$="" =s$
  1044.  I=1 
  1045. char%=
  1046. s$,I))
  1047.  char%>96 
  1048.  char%<123 char%-=32
  1049. (char%)
  1050. Misc_ConvertToLower(s$)
  1051.  s$="" =s$
  1052.  I=1 
  1053. char%=
  1054. s$,I))
  1055.  char%>64 
  1056.  char%<91 char%+=32
  1057. (char%)
  1058. Wimp_CreateIcon(n$)
  1059. !b%=-1
  1060. b%!4=0
  1061. b%!8=0
  1062. b%!12=17*4
  1063. b%!16=34*4
  1064. b%!20=&3102
  1065.  iconname% 13
  1066. $iconname%=n$
  1067. b%!24=iconname%
  1068. b%!28=-1
  1069. b%!32=13
  1070.  "Wimp_CreateIcon",,b% 
  1071. Wimp_IconColour(win%,ic%,back%,fore%)
  1072. !b%=win%
  1073. b%!4=ic%
  1074. g b%!8=(back%<<28)+(fore%<<24)
  1075. b%!12=&FF000000
  1076.  "Wimp_SetIconState",,b%
  1077. Wimp_SetButtonState(win%,ic%,state%)
  1078. m(!b%=win%:b%!4=ic%:b%!8=
  1079. (state%)<<21
  1080. b%!12=1<<21
  1081.  "Wimp_SetIconState",,b%
  1082. Wimp_ButtonState(win%,i%)
  1083. !b%=win%:b%!4=i%
  1084.  "Wimp_GetIconState",,b%
  1085. (b%!(8+16) 
  1086.  1<<21)
  1087. Wimp_DeleteIcon(win%,ic%,state%)
  1088. !b%=win%:b%!4=ic%:
  1089.  state%=
  1090.  b%!8=%100000000000010000000000
  1091.  state%=
  1092.  b%!8=%000000000000010000000000
  1093. b%!12=b%!8
  1094.  "Wimp_SetIconState",,b%
  1095.