home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / r / resource / !Resource / !RunImage (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1994-06-12  |  35.1 KB  |  1,394 lines

  1.  >!RunImage
  2. "ERROR "+
  3. $+" at line "+
  4.  Set up variables and dimming memory.
  5.  ====================================
  6. CFirst=
  7. :Quit%=
  8. :Run%=
  9. :MaxFiles=99:SP=1:ScanItems%=0:ILen=&1000
  10. ISfname$="":ExName$="":ViewFile$="":FType$="":Virtual%=0:DragASprite=0
  11. GTaskN$="Resource Write":Ticked=0:Mod%=
  12. :Cur%=1:Mul$="":Debugging%=0
  13. KModName$="ResourceFiles":View=1:Total=1:Multiple%=0:Next%=0:FileOpen%=0
  14.  Block%1024,Block2% 512,Window% &1000,Ind% ILen,FListMenu &1000,Font% 256
  15.  Menu% 400,Object$(MaxFiles),Positioned$(MaxFiles),ScanName$(MaxFiles)
  16.  ScanPos$(99),ObType%(MaxFiles),ScanLen%(99),ScanType%(99):Free=Ind%
  17.  Scale% 32,Trans% 32:Verbose%=
  18. :ModSave$="Module":FailDrag%=
  19.  Clear the font memory and start messagetrans file.
  20.  ==================================================
  21.  X=0 
  22.  256:Font%?X=0:
  23. StartMessage
  24.  Now here's the clever bit,  I'm calculating how much memory
  25.  I've used so I can reduce the wimpslot to the minimum.
  26.  ===========================================================
  27.  "OS_ReadMemMapInfo" 
  28.  PageSize%:Size%=
  29. :Size%+=8*1024
  30. ;Temp=Size% 
  31.  PageSize%:Size%=Size% 
  32.  PageSize%:Size%+=1
  33. Temp>(PageSize%/2) 
  34.  Size%+=1
  35. CSize%=Size%*PageSize%:
  36. =&8000+Size%:
  37.  "Wimp_SlotSize",Size%,-1
  38. $OSize%=Size%:Address=Size%+&8000
  39. Error(1,
  40. $+" at line "+
  41.  Start the task and kill any other active version of this program.
  42.  =================================================================
  43. Block%!0=0
  44.  "Wimp_Initialise",310,&4B534154,TaskN$,Block% 
  45.  WimpVer,THandle%
  46. Kill(TaskN$)
  47.  Open the template file and load the windows.
  48.  ============================================
  49.  "Wimp_OpenTemplate",,"<Resource$Dir>.Templates"
  50. !;Main%=
  51. CreateWindow("Main"):File%=
  52. CreateWindow("File")
  53. ";Save%=
  54. CreateWindow("Save"):Info%=
  55. CreateWindow("Info")
  56. #IFileInfo%=
  57. CreateWindow("FileInfo"):Choices%=
  58. CreateWindow("Choices")
  59. $EPane%=
  60. CreateWindow("Pane"):Operation%=
  61. CreateWindow("Operation")
  62.  Debugging% 
  63.  Debug%=
  64. CreateWindow("Debug")
  65.  "Wimp_CloseTemplate"
  66.  Set up the menu, iconbar and blank all the text icons.
  67.  ======================================================
  68. SetUpMenu(Menu%):
  69. DisplayText:First=
  70. IconBar:
  71. Blank
  72.  Icon%=2 
  73. IconText(Operation%,Icon%,""):
  74.  "Font_FindFont",,"Homerton.Medium",12*16,12*16 
  75.  FileLHandle%
  76. ,FTe=FileLHandle%:
  77.  Font%?Te=0 
  78.  Font%?Te+=1 
  79.  "Font_LoseFont",Te
  80.  Read in the choices and select the pane window accordingly.
  81.  ===========================================================
  82. Choices("<Resource$Dir>.Choices"):
  83. Select(Pane%,1,Run%)
  84. Select(Pane%,0,Multiple%):
  85. IconText(Pane%,3,Mul$)
  86. Select(Pane%,8,Virtual%)
  87.  Debugging% 
  88. 34Block%!0=Debug%:
  89.  "Wimp_GetWindowState",,Block%
  90.  "Wimp_OpenWindow",,Block%
  91. Error(2,
  92. $+" at line "+
  93.  Right here we go and poll.
  94.  ==========================
  95.  "Wimp_Poll",1,Block% 
  96.  Reason%
  97.  Reason% 
  98. Redraw
  99. OpeningWindow
  100. ClosingWindow
  101. Button
  102. DragBoxSave
  103. Keyboard(Block%!24)
  104. MenuSelect
  105.  17,18:
  106. Receive
  107.  Quit%
  108.  Lose all the fonts and close the messagetrans file.
  109.  ===================================================
  110.  L=0 
  111.  255:Y=Font%?L:
  112.  Y>0:
  113.  "Font_LoseFont",L:Y-=1:
  114.  "Font_LoseFont",Ifhandle%:
  115.  "MessageTrans_CloseFile",Filedesc%
  116. ClosingWindow
  117.  Block%!0 
  118.  Main%:
  119.  "Wimp_CloseWindow",,Block%:Block%!0=File%
  120.  Choices%:
  121.  "Wimp_CloseWindow",,Block%:Block%!0=Pane%
  122.  "Wimp_CloseWindow",,Block%
  123. OpeningWindow
  124.  As I'm using a pane I need to reposition the pane on top of my
  125.  choices window.  To make it easier I'm using two different
  126.  Block%.
  127.  ==============================================================
  128.  Block%!0 
  129.  Choices%
  130. ]Mminx=Block%!4:miny=Block%!8:maxx=Block%!12:maxy=Block%!16:Block2%!0=Pane%
  131.  "Wimp_GetWindowState",,Block2%:lx=Block2%!12-Block2%!4
  132. _Ely=Block2%!16-Block2%!8:Block2%!4=minx+26:Block2%!12=Block2%!4+lx
  133. `CBlock2%!16=maxy-24:Block2%!8=Block2%!16-ly:Block2%!28=Block%!28
  134.  "Wimp_OpenWindow",,Block2%:Block%!28=Pane%
  135.  "Wimp_OpenWindow",,Block%
  136. IconBar
  137. h@!Block%=-5:Block%!4=0:Block%!8=-16:Block%!12=80:Block%!16=82
  138.  "Font_FindFont",,"Homerton.Medium",12*16,12*16 
  139.  Ifhandle%
  140. j4Block%!20=(Ifhandle%<<24)+%11000100001011+(1<<6)
  141.  IconSpr% 14,IconText% 14
  142. lF$IconSpr%="sromapps;F17"+
  143. 0:$IconText%="Write":Block%!24=IconText%
  144. m"Block%!28=IconSpr%:Block%!32=1
  145.  Prioritised to be just right of Apps Icon.
  146.  ==========================================
  147.  "Wimp_CreateIcon",&45000000,Block% 
  148.  BarIcon%
  149. DragEnd
  150.  When a drag has finished, close the window and replace the sprite
  151.  =================================================================
  152.  WindowDrag% 
  153.  File%:Block2%!0=WindowDrag%:
  154.  "Wimp_CloseWindow",,Block2%
  155.  Save%:
  156.  DestWindow% 
  157.  Save%,Main%,File%,Choices%,Pane%,Choices%,Operation%,FileInfo%,Menu%
  158. z0FailDrag%=
  159.  PROCIconText(Save%,1,ModSave$)
  160.  Block2%!0=Save%:
  161.  "Wimp_CloseWindow",,Block2%
  162. ~MBlock2%!0=WindowDrag%:Block2%!4=IconDrag%:
  163.  "Wimp_GetIconState",,Block2%
  164. ValidText(WindowDrag%,IconDrag%,TextDrag$)
  165. CreateWindow(WName$)
  166.  Handle%
  167.  "Wimp_LoadTemplate",,Window%,Free,Ind%+ILen,Font%,WName$ 
  168.  ,,Free
  169.  "Wimp_CreateWindow",,Window% 
  170.  Handle%
  171. =Handle%
  172. DragBoxSave
  173.  "Wimp_GetPointerInfo",,Block%:DestWindow%=Block%!12
  174. +Block%!20=Block%!12:Block%!24=Block%!16
  175. MBlock%!28=Block%!0:Block%!32=Block%!4:Block%!36=0:Block%!0=64:Block%!12=0
  176. 8Block%!16=1:Block%!40=FType%:$(Block%+44)=Sfname$+
  177.  Replace the sprite and close the window.
  178.  ========================================
  179. DragEnd
  180.  FailDrag%=
  181.  "Wimp_SendMessage",18,Block%,Block%!20,Block%!24
  182. FailDrag%=
  183. Receive
  184.  Block%!16 
  185.  0:Quit%=
  186. DataSaveAck
  187. DataLoad
  188.  &502:
  189.  &40040:
  190. NetMessage
  191.  &400C1:
  192. ModeChange
  193.  &400CC:
  194. Iconising
  195. DataSaveAck
  196.  DragASprite 
  197.  "DragASprite_Stop"
  198. DestName$=
  199. Strip(Block%+44)
  200.  DraggingWindow% 
  201.  File%:
  202. DataSave_File
  203.  Save%:
  204. DataSave_Save
  205.  FileInfo%:
  206. DataSave_FileInfo
  207.  Pane%:
  208. DataSave_Pane
  209. DataSave_File:
  210.  A:A=0:A$=DestName$
  211. A$,9)="Resources" 
  212. A$,"."):A=
  213. A$,"."):A$=
  214.  A$-A):
  215.  Mod% 
  216. "Change%=(Positioned$(Cur%)="")
  217. DestName$,A$):DestName$=
  218. DestName$,A-2)
  219. ?Positioned$(Cur%)=DestName$:
  220.  Change% 
  221.  Next%+=1:Cur%=Next%
  222. DestName$,A$):DestName$=
  223. DestName$,A-2)
  224. 6Positioned$(Next%+1)=DestName$:Next%+=1:Cur%=Next%
  225. =Block%!0=File%:
  226.  "Wimp_CloseWindow",,Block%:
  227. DisplayText
  228.  Mod% 
  229.  Mod%=
  230. DataSave_Save
  231. DestName$,9)="Resources" 
  232. ;TotalLen=0:
  233.  f=1 
  234.  Next%:TotalLen+=
  235. Count(Object$(f)):
  236. TotalLen+=16*1024
  237. @Temp=TotalLen 
  238.  PageSize%:Slot=TotalLen 
  239.  PageSize%:Slot+=1:
  240.  Temp>(PageSize%/2) 
  241.  PageSize%+=1
  242. ASlot=Slot*PageSize%:
  243.  "Wimp_SlotSize",Size%+Slot,-1 
  244.  NSize%
  245.  NSize%=Size% 
  246. Dialogue(1234,"Not enough memory,  I need "+
  247. Slot/1024+"k free",1,""):
  248.  "Wimp_CreateMenu",-1:
  249. MakeMod:
  250.  "Wimp_SlotSize",Size%,-1 
  251.  NSize%
  252.  Size%<>NSize% 
  253. Dialogue(1234,"Not been able to free memory",1,"")
  254.  "Wimp_CreateMenu",-1
  255.  DestName$="<Wimp$Scrap>" 
  256. HBlock%!16=3:Block%!36=Size%:
  257.  "Wimp_SendMessage",18,Block%,Block%!4
  258. IconText(Save%,1,DestName$)
  259. ModSave$=DestName$
  260. DataSave_FileInfo
  261.  Number,A$
  262. DestName$,9)="Resources" 
  263.  Verbose% 
  264. IconText(Operation%,2,"Retrieve")
  265. A$=DestName$
  266.  IconDrag% 
  267.  Verbose% 
  268. IconText(Operation%,4,"Retrieving single file")
  269. IconText(Operation%,3,
  270. Right(ScanName$(SP)))
  271. Retrieve(SP)
  272.  DestName$="<Wimp$Scrap>" 
  273. HBlock%!16=3:Block%!36=Size%:
  274.  "Wimp_SendMessage",18,Block%,Block%!4
  275.  Verbose% 
  276. IconText(Operation%,4,"Retrieving all files")
  277.  DestName$<>"<Wimp$Scrap>" 
  278.  Number=1 
  279.  ScanItems%
  280.  Verbose% 
  281. IconText(Operation%,3,
  282. Right(ScanName$(Number)))
  283. CreateDirectorys(A$+ScanPos$(Number))
  284. 7DestName$=A$+ScanPos$(Number)+"."+ScanName$(Number)
  285. Retrieve(Number)
  286. CreateDirectorys(A$)
  287.  Path$,B$,A
  288.     B$=""
  289. A$,"."):Path$=
  290. A$,A):A$=
  291.  A$-A)
  292. A$,".")
  293.  A<>0
  294. "CDir "+Path$+B$+
  295. A$,A-1)
  296. B$=B$+
  297. A$,A-1)+".":
  298.  A$-A)
  299. A$,".")
  300. "CDir "+Path$+B$+
  301. A$,A-1)
  302. Retrieve(Number)
  303.  x,N,B$,Name$,Loc,Off,A,B,Finish%:Loc=0:Finish%=
  304. FileOpen%=
  305. (DestName$):X=
  306.  ExName$
  307. #X=StartOfData:
  308.  "Hourglass_On"
  309. :Ptr%=
  310. GetWord:
  311.  Ptr%<>0 
  312. #X+Ptr%-4:Load=
  313. GetWord:Exec=
  314. GetWord:Len=
  315. GetWord:Acc=
  316. GetWord
  317. &B$="":A=
  318.  A<>0:B$+=
  319. *Name$=
  320. Right(B$):Loc+=1:
  321.  Loc=Number 
  322. #X:[OPT 0:ALIGN:]:
  323. #X=P%
  324. %Len2=
  325. GetWord:
  326. ClaimSlot(Len) 
  327.  "OS_GBPB",4,X,Address,Len
  328.  "OS_GBPB",2,N,Address,Len:Finish%=
  329. 'Off=1:
  330.  Off<>Len+1:
  331. #X:Off+=1
  332.  "Hourglass_Percentage",100*(Off/Len)
  333. :Finish%=
  334.  "Wimp_SlotSize",Size%,-1
  335.  Loc>=Number 
  336.  Finish%=
  337.  Finish%:
  338.  #N:FileOpen%=
  339. "Settype "+DestName$+" "+
  340. ~(ScanType%(Number))
  341.  "Hourglass_Off"
  342. ClaimSlot(Extra)
  343.  OK%,A$,X:X=Extra
  344.  A$="":A$=STR$(X MOD 1024)+" Bytes.":X=X DIV 1024
  345.  A$=STR$(X MOD 1024)+"K "+A$:X=X DIV 1024
  346.  A$=STR$(X MOD 1024)+"M "+A$:VDU 4:PRINTTAB(0,0);A$:VDU5
  347. 9Slot=Extra 
  348.  PageSize%:Temp=Extra 
  349.  PageSize%:Slot+=1
  350.  Temp>(PageSize%/2) 
  351.  Slot+=1
  352.  ASlot=Slot*PageSize%:
  353.  "Wimp_SlotSize",Size%+Slot,-1 
  354.  NSize%
  355.  NSize%=Size% 
  356. DataSave_Pane
  357. DestName$,12)="Resources:$." 
  358. Select(Pane%,0,
  359. IconText(Pane%,3,DestName$)
  360. Select(Pane%,0,
  361. DisplayText
  362. IconText(Main%,3,
  363. Pad(Cur%,2)):
  364. IconText(Main%,7,Object$(Cur%))
  365. IconText(Main%,9,Positioned$(Cur%))
  366. DataLoad
  367.  This is when a file is dragged to one of my windows.
  368.  ====================================================
  369.  Block%!20 
  370.  FileInfo%:
  371. ExamineFile
  372.  Main%,-2:X%=Block%!28:Y%=Block%!32
  373. 6>Fname$=
  374. Strip(Block%+44):Sfname$=
  375. FilenameFromFull(Fname$)
  376. 7KFType%=Block%!40:Block%!16=4:Block%!12=Block%!8:ObType%(Next%+1)=FType%
  377.  "Wimp_SendMessage",17,Block%,Block%!4:Object$(Next%+1)=Fname$
  378.  FType% 
  379.  &1000:FType$="directory"
  380.  &2000:
  381. Application
  382.  FType$="file_"+
  383. ~FType%
  384. ValidText(File%,0,"r1;s"+FType$):
  385. IconText(File%,1,Sfname$)
  386. Wimp_BringUpWindow(Main%,-1)
  387. Selected(Pane%,0) 
  388. A<Positioned$(Next%+1)=
  389. Mul$):
  390.  Mod% Next%+=1:Cur%=Next%
  391. C2Block%!0=File%:
  392. "Wimp_GetWindowState",,Block%
  393. DJLX=Block%!12-Block%!4:LY=Block%!16-Block%!8:X%-=(LX/2):Block%!12=X%+LX
  394. E8Block%!16=Y%+LY:Block%!4=X%:Block%!8=Y%:Block%!28=-1
  395.  "Wimp_OpenWindow",,Block%:
  396.  Mod% Cur%=Next%+1
  397. DisplayText
  398. Application:App$=Fname$:A=
  399. App$,".")
  400.  A:App$=
  401. App$,
  402.  App$-A):A=
  403. App$,"."):
  404.  "XWimp_ReadPixTrans",256+40,-1,App$ 
  405.  (R% 
  406.  (1<<24))=0 
  407.  FType$=App$ 
  408.  FType$="Application"
  409. ExamineFile
  410.  To understand this you need know about the data structure
  411.  of the resource data,  PRM's Book 2 Page 410
  412.  Basically I seek through a module for the SWI "Resource_RegisterFiles"
  413.  Please let me know if this fails on a module.
  414.  =========================================================
  415.  Temp,B$,A,X,Fail%::B$="":Fname$=
  416. Strip(Block%+44):ExName$=Fname$
  417. Y6FType%=Block%!40:
  418.  FType%<>&FFA 
  419.  ScanItems%=0
  420.  Verbose% 
  421. IconText(Operation%,2,"Examine")
  422. IconText(Operation%,3,
  423. Right(Fname$))
  424. IconText(Operation%,4,"Examining module")
  425. MName$="":X=
  426.  Fname$:
  427. `AStart=
  428. GetWord:Initialise=
  429. GetWord:
  430.  L=1 
  431.  3:Title=
  432. GetWord:
  433.  Initialise=0 
  434.  Initialise>
  435.  Fail%=
  436.  Fail%=
  437.  #X=Initialise:C=0
  438. :Temp=
  439. GetWord:C+=4:
  440.  C>1024 
  441.  Temp=&EF061B40 
  442.  Temp=&EF041B0
  443.  C>1024 
  444.  Fail%=
  445.  Fail%=
  446. g&C=0:
  447. #X-8:Temp=
  448. GetWord:C+=4
  449.  (Temp 
  450.  &0FFFFFFF)=&F0000000 
  451.  Temp=0
  452.  C>1024 
  453.  (Temp 
  454.  &F000FFFF)=&28F0000
  455.  C>1024 
  456.  Fail%=
  457.  Fail%=
  458. Temp=(Temp 
  459.  &FFFFF000)
  460. m*StartOfData=
  461. #X+Temp+4:
  462. #X=StartOfData
  463.  Fail% 
  464. Blank:
  465. IconText(FileInfo%,2,"Can't understand")
  466. IconText(FileInfo%,15,"This module")
  467.  Verbose% 
  468. IconText(Operation%,4,"Does this have Resource Data?")
  469.  Verbose% 
  470. IconText(Operation%,4,"Found Resource Data")
  471. :Ptr%=
  472. GetWord:
  473.  Ptr%<>0 
  474. #X+Ptr%-4:Load=
  475. GetWord:Exec=
  476. GetWord:Len=
  477. GetWord:Acc=
  478. GetWord
  479. z&B$="":A=
  480.  A<>0:B$+=
  481. {GScanName$(ScanItems%+1)=
  482. Right(B$):ScanPos$(ScanItems%+1)=
  483. Left(B$)
  484. |4ScanLen%(ScanItems%+1)=Len:T$=
  485. ~Load:T$=
  486. T$,4,3)
  487. }9ScanType%(ScanItems%+1)=
  488. ("&"+T$):
  489. #X=L:ScanItems%+=1
  490.  Ptr%=0
  491. #X=Title:MName$="":Temp=
  492.  Temp<>0:MName$+=
  493. (Temp):Temp=
  494. ESP=1:
  495. IconText(FileInfo%,2,Fname$):
  496. IconText(FileInfo%,15,MName$)
  497. IconText(FileInfo%,5,
  498. Pad(ScanItems%,2)):
  499. DisplayScan
  500.  Verbose% 
  501. IconText(Operation%,4,"Finished examine module")
  502. Blank
  503. IconText(FileInfo%,2,""):
  504. IconText(FileInfo%,15,"")
  505. IconText(FileInfo%,5,""):
  506. IconText(FileInfo%,7,"Object :XX")
  507. IconText(FileInfo%,12,""):
  508. IconText(FileInfo%,14,"")
  509. IconText(FileInfo%,21,"")
  510. DisplayScan
  511. IconText(FileInfo%,7,"Object : "+
  512. Pad(SP,2))
  513. IconText(FileInfo%,12,ScanName$(SP))
  514. IconText(FileInfo%,14,ScanPos$(SP))
  515. IconText(FileInfo%,21,
  516. (ScanLen%(SP)))
  517. ValidText(FileInfo%,9,"r1;sfile_"+
  518. ~ScanType%(SP))
  519. %ViewType$="file_"+
  520. ~ScanType%(SP)
  521. ValidText(Window%,Icon%,Text$)
  522. EBlock2%!0=Window%:Block2%!4=Icon%:
  523.  "Wimp_GetIconState",,Block2%
  524. SBlock2%!8=0:Block2%!12=0:$(Block2%!32)=Text$+
  525.  "Wimp_SetIconState",,Block2%
  526.  Debugging% 
  527. =Block%!0=Debug%:Block%!4=8:
  528.  "Wimp_GetIconState",,Block%
  529.  Window% 
  530.  Main%:$(Block%!28)="Main"
  531.  Info%:$(Block%!28)="Info"
  532.  FileInfo%:$(Block%!28)="FileInfo"
  533.  Save%:$(Block%!28)="Save"
  534.  File%:$(Block%!28)="File"
  535.  Choices%:$(Block%!28)="Choices"
  536.  Pane%:$(Block%!28)="Pane"
  537.  $(Block%!28)="Unknown"
  538. 9Block%!8=0:Block%!12=0:
  539.  "Wimp_SetIconState",,Block%
  540. =Block%!0=Debug%:Block%!4=9:
  541.  "Wimp_GetIconState",,Block%
  542. K$(Block%!28)=
  543. (Icon%):Block%!0=Debug%:Block%!4=9:Block%!8=0:Block%!12=0
  544.  "Wimp_SetIconState",,Block%
  545. >Block%!0=Debug%:Block%!4=10:
  546.  "Wimp_GetIconState",,Block%
  547. I$(Block%!28)=Text$:Block%!0=Debug%:Block%!4=10:Block%!8=0:Block%!12=0
  548.  "Wimp_SetIconState",,Block%
  549. JBlock%!0=Debug%:Block%!4=13:
  550.  "Wimp_GetIconState",,Block%:Block%!4=13
  551. A$(Block%!28)=
  552. Text$):Block%!0=Debug%:Block%!8=0:Block%!12=0
  553.  "Wimp_SetIconState",,Block%
  554. GetValidText(Window%,Icon%)
  555. EBlock2%!0=Window%:Block2%!4=Icon%:
  556.  "Wimp_GetIconState",,Block2%
  557. =$(Block2%!32)
  558. FilenameFromFull(A$)
  559. A$,"."):
  560.  A<>0:A$=
  561.  A$-A):A=
  562. A$,"."):
  563. Strip(Address%):
  564.  A%,A$
  565. 9A%=0:A$="":
  566.  Address%?A%<>0:A$+=
  567. Address%?A%:A%+=1:
  568. PBlock%!12=Block%!8:Block%!16=&503:Mess$="":HWind%=Block%!32:HIcon%=Block%!36
  569.  HWind% 
  570.  -2:Mess$=
  571. Message("IconBar","","")
  572.  Main%:Mess$=
  573. Message("M"+
  574. HIcon%,"","")
  575.  File%:Mess$=
  576. Message("F"+
  577. HIcon%,"","")
  578.  Save%:Mess$=
  579. Message("S"+
  580. HIcon%,"","")
  581.  Info%:Mess$=
  582. Message("I"+
  583. HIcon%,"","")
  584.  FileInfo%:Mess$=
  585. Message("FI"+
  586. HIcon%,"","")
  587.  Choices%:Mess$=
  588. Message("C"+
  589. HIcon%,"","")
  590.  Pane%:Mess$=
  591. Message("P"+
  592. HIcon%,"","")
  593.  Operation%:Mess$=
  594. Message("V"+
  595. HIcon%,"","")
  596.  WimpVer>=217 
  597.  MenuOpen% 
  598.  Menu%
  599.  "Wimp_GetMenuState",1,Block2%,HWind%,HIcon%
  600. .Mess$=
  601. Message("Menu"+
  602. (!Block2%+1),"","")
  603.  FListMenu
  604. 4Mess$="Press select or adjust to view an object"
  605. &Block%!0=256:$(Block%+20)=Mess$+
  606.  "Wimp_SendMessage",17,Block%,Block%!4
  607. Wimp_BringUpWindow(window%,pos)
  608. 4!Block%=window%:
  609.  "Wimp_GetWindowState",,Block%
  610. .Block%!28=pos:
  611.  "Wimp_OpenWindow",,Block%
  612. Wimp_CloseWindow(Window%)
  613. 1!Block%=Window%:
  614.  "Wimp_CloseWindow",,Block%
  615. Button:
  616.  SaveChoice%
  617.  Block%!12 
  618.  -2 : 
  619. Button_IconBar
  620.  FileInfo%: 
  621. Button_FileInfo
  622.  Info% : 
  623. Button_Info
  624.  Save% : 
  625. Button_Save
  626.  File% : 
  627. Button_File
  628.  Main% : 
  629. Button_Main
  630.  Choices% : 
  631. Button_Choices
  632.  Pane% : 
  633. Button_Pane
  634.  Operation% : 
  635. Button_Operation
  636. Button_IconBar
  637.  Block%!8 
  638.  1 : 
  639. Wimp_CloseWindow(Main%):
  640. Wimp_CloseWindow(FileInfo%)
  641.  2 : 
  642. BringUpMenu(Menu%,!Block%-64,MenuSize%)
  643.  4 : 
  644. Wimp_BringUpWindow(Main%,-1)
  645. Button_FileInfo
  646. Update%=
  647.  Block%!16 
  648.  6:SP-=1:
  649.  SP<1 
  650.  SP=1 
  651.  Update%=
  652.  8:SP+=1:
  653.  SP>ScanItems% 
  654.  SP=ScanItems% 
  655.  Update%=
  656.  Block%!8 
  657.  ScanItems%>0 
  658. 7FType$="file_"+
  659. ~ScanType%(SP):FType%=ScanType%(SP)
  660. =Sfname$=
  661. GetIconText(FileInfo%,12):
  662. Dragfile(FileInfo%,9)
  663.  Block%!8 
  664.  ScanItems%>0 
  665. DSfname$="":FType$="file_FFD":FType%=&FFD:
  666. Dragfile(FileInfo%,29)
  667.  Block%!8 
  668.  2 : 
  669. Grey(Menu%,1,1):
  670. Grey(Menu%,4,1)
  671. BringUpMenu(Menu%,Block%!0,Block%!4)
  672. Grey(Menu%,1,0):
  673. Grey(Menu%,4,0)
  674.  Update% 
  675. DisplayScan
  676. Button_Info
  677.  Block%!8 
  678. DragBox(Info%,1)
  679. Button_File
  680.  Block%!16 
  681.  0 : 
  682.  Block%!8 
  683. Dragfile(File%,0)
  684. Button_Save
  685.  Block%!16 
  686.  0 : FType$="file_FFA":FType%=&FFA:A$=
  687. GetIconText(Save%,1)
  688. !Sfname$=
  689. FilenameFromFull(A$)
  690.  Block%!8 
  691. Dragfile(Save%,0)
  692.  2 :FType$="file_FFA":FType%=&FFA:DestName$=
  693. GetIconText(Save%,1)
  694. DataSave_Save
  695. Button_Main
  696.  Block%!8 
  697. BringUpMenu(Menu%,!Block%,Block%!4)
  698. Update%=
  699.  Block%!16 
  700.  2 : 
  701.  Cur%>1 
  702.  Cur%-=1:Update%=
  703.  4 : 
  704.  Cur%<Next% 
  705.  Cur%+=1:Update%=
  706.  5 : 
  707. Delete:Update%=
  708.  8 : 
  709.  X%,Y%,M%:Block%!28=X%:Block%!32=Y%:Block%!20=Main%:Block%!16=3
  710. /F$(Block%+44)=Object$(Cur%)+
  711. 0:Block%!40=ObType%(Cur%):Block%!0=128
  712.  "Wimp_SendMessage",17,Block%,THandle%:Mod%=
  713.  11: 
  714.  Next%<>0 
  715. SetUpFileList(FListMenu)
  716. BringUpMenu(FListMenu,Block%!0,Block%!4)
  717.  Update% 
  718. DisplayText
  719. Button_Choices
  720.  Block%!8 
  721. BringUpMenu(Menu%,!Block%,Block%!4)
  722. >)Ad%=(Block%!8 
  723.  %1)<>0:
  724.  Block%!16 
  725.  1,2 : SaveChoice%=(Block%!16=1):Virtual%=
  726. Selected(Pane%,8)
  727. @;Mul$=
  728. GetIconText(Pane%,3):Multiple%=
  729. Selected(Pane%,0)
  730. A+Run%=
  731. Selected(Pane%,1):
  732.  SaveChoice% 
  733. "<Resource$Dir>.Choices"
  734. CDTe$="Multiple File Drag : ":
  735.  Multiple% 
  736.  Te$+="Yes" 
  737.  Te$+="No"
  738.  #X,Te$:Te$="Multiple Directory : "+Mul$:
  739.  #X,Te$
  740. E9Te$="Save and Run : ":
  741.  Run% 
  742.  Te$+="Yes" 
  743.  Te$+="No"
  744.  #X,Te$
  745. G8Te$="Virtual : ":
  746.  Virtual% 
  747.  Te$+="Yes" 
  748.  Te$+="No"
  749.  #X,Te$:
  750.  #X,"Finish":
  751. "Settype <Resource$Dir>.Choices Text"
  752. Block%!0=Choices%
  753.  3 : 
  754. IconText(Pane%,3,Mul$):
  755. Select(Pane%,0,Multiple%)
  756. Select(Pane%,1,Run%):Block%!0=Choices%
  757.  Ad% 
  758.  "Wimp_CloseWindow",,Block%:
  759. ClosingWindow
  760. Button_Pane
  761.  Block%!8 
  762. BringUpMenu(Menu%,!Block%,Block%!4)
  763.  Block%!16<>4 
  764. Select(Pane%,Block%!16,
  765. Selected(Pane%,Block%!16))
  766.  Block%!16 
  767.  Block%!8 
  768. \!FType$="file_FFD":FType%=&FFD
  769. Sfname$=""
  770. Dragfile(Pane%,4)
  771. Button_Operation
  772.  Block%!8 
  773. BringUpMenu(Menu%,!Block%,Block%!4)
  774.  Block%!16 
  775. Iconise(Operation%,"Verbose")
  776. Wimp_CloseWindow(Operation%):Verbose%=
  777. Tick(Menu%,2)
  778.  Block%!8 
  779. DragBox(Operation%,1)
  780. SetUpFileList(ThisMenu)
  781. tGTicked=0:Title$="FileList":$ThisMenu=Title$:Width%=(
  782. (Title$)-2)*16
  783. uDThisMenu!12=&70207:ThisMenu!20=44:ThisMenu!24=0:Pos%=ThisMenu+28
  784. vFFlags%=%0:SubMenuPointer%=-1:MFlags%=&7000021:
  785.  Position=1 
  786.  Next%
  787. wFMFlags%=(FileLHandle%<<24)+&61:
  788.  Position=Next% 
  789.  Flags%=%10000000
  790. x)!Pos%=Flags%:Pos%!4=-1:Pos%!8=MFlags%
  791. yBTemp$=
  792. FilenameFromFull(Object$(Position))+
  793. 0:$(Pos%+12)=Temp$
  794. z7Temp%=(
  795. (Temp$)+1)*16:
  796.  Width%<Temp% 
  797.  Width%=Temp%
  798. {<Pos%+=24:
  799. :ThisMenu!16=Width%:MenuSize%=96+(44*MItem%):
  800. Delete
  801. ~<Object$(Cur%)="":Positioned$(Cur%)="":
  802.  x=Cur%+1 
  803.  Next%
  804. =Object$(x-1)=Object$(x):Positioned$(x-1)=Positioned$(x):
  805. BObject$(Next%)="":Positioned$(Next%)="":
  806.  Cur%>1 
  807.  Cur%=Cur%-1
  808.  Next%>0 
  809.  Next%=Next%-1
  810. Dragfile(Window%,Icon%)
  811. IWindowDrag%=Window%:IconDrag%=Icon%:Block2%!0=Window%:Block2%!4=Icon%
  812.  "Wimp_GetIconState",,Block2%
  813. JTextDrag$=
  814. GetValidText(Window%,Icon%):A=
  815. Convert(TextDrag$),"sfile")
  816. 7String$=
  817. TextDrag$,A-1)+
  818. TextDrag$,
  819.  TextDrag$-A-9)
  820. 8String$="R2;SFile":
  821. ValidText(Window%,Icon%,String$)
  822. NDraggingWindow%=Window%:!Block2%=Window%:
  823.  "Wimp_GetWindowState",,Block2%
  824. Dox=Block2%!4-Block2%!20:oy=Block2%!16-Block2%!24:Block2%!4=Icon%
  825.  "Wimp_GetIconState",,Block2%:Block2%!4=5:Block2%!8=ox+Block2%!8
  826. Block2%!12=oy+Block2%!12
  827. 5Block2%!16=ox+Block2%!16:Block2%!20=oy+Block2%!20
  828. HBlock2%!24=0:Block2%!28=0:Block2%!32=&7FFFFFFF:Block2%!36=Block2%!32
  829.  "OS_Byte",161,28 
  830.  ,,C%:
  831.  %10 
  832. GDragSprite=
  833.  "DragASprite_Start",%11000101,1,FType$+
  834. 0,Block2%+8
  835. +DragSprite=
  836.  "Wimp_DragBox",,Block2%
  837. TextDrag$,1)=
  838.  TextDrag$=
  839. TextDrag$)
  840. Grey(Menu%,item%,set%)
  841. >Grey=Menu%+36:Grey+=(24*item%):Flags%=!Grey:Oflags%=Flags%
  842. 6Flags%=(Flags% 
  843.  (1<<22))
  844.  set%<<22:!Grey=Flags%
  845. Dialogue(errornumber%,message$,flags%,title$)
  846. 1Block%!0=errornumber%:$(Block%+4)=message$+
  847.  "Wimp_ReportError",Block%,flags%,title$ 
  848.  ,Result%
  849. =Result%
  850. Iconise(window%,Title$)
  851. EBlock%!0=40:Block%!16=&400CA:Block%!20=window%:Block%!24=THandle%
  852. <$(Block%+28)=Title$+
  853.  "Wimp_SendMessage",17,Block%,0
  854. Iconising
  855. *Block%!0=56:Block%!24=0:
  856.  Block%!20 
  857.  Main%:$(Block%+28)="Resres":$(Block%+36)="Resource Write"
  858.  FileInfo%:$(Block%+28)="Resfin":$(Block%+36)="Module Info"
  859.  Choices%:$(Block%+28)="Rescho":$(Block%+36)="Choices"
  860.  Operation%:$(Block%+28)="ResOpe":$(Block%+36)="Verbose"
  861. ?Block%!12=Block%!8:
  862.  "Wimp_SendMessage",17,Block%,Block%!4
  863. WindowTitle(Window%)
  864. GetIconText(Window%,-4)
  865. IconText(Window%,Icon%,Text$)
  866. EBlock2%!0=Window%:Block2%!4=Icon%:
  867.  "Wimp_GetIconState",,Block2%
  868. E$(Block2%!28)=Text$:Block2%!0=Window%:Block2%!4=Icon%:Block2%!8=0
  869. 0Block2%!12=0:
  870.  "Wimp_SetIconState",,Block2%
  871.  Debugging% 
  872. =Block%!0=Debug%:Block%!4=5:
  873.  "Wimp_GetIconState",,Block%
  874.  Window% 
  875.  Main%:$(Block%!28)="Main"
  876.  Info%:$(Block%!28)="Info"
  877.  FileInfo%:$(Block%!28)="FileInfo"
  878.  Save%:$(Block%!28)="Save"
  879.  File%:$(Block%!28)="File"
  880.  Choices%:$(Block%!28)="Choices"
  881.  Pane%:$(Block%!28)="Pane"
  882.  $(Block%!28)="Unknown"
  883. 9Block%!8=0:Block%!12=0:
  884.  "Wimp_SetIconState",,Block%
  885. =Block%!0=Debug%:Block%!4=6:
  886.  "Wimp_GetIconState",,Block%
  887. K$(Block%!28)=
  888. (Icon%):Block%!0=Debug%:Block%!4=6:Block%!8=0:Block%!12=0
  889.  "Wimp_SetIconState",,Block%
  890. =Block%!0=Debug%:Block%!4=7:
  891.  "Wimp_GetIconState",,Block%
  892. H$(Block%!28)=Text$:Block%!0=Debug%:Block%!4=7:Block%!8=0:Block%!12=0
  893.  "Wimp_SetIconState",,Block%
  894. JBlock%!0=Debug%:Block%!4=12:
  895.  "Wimp_GetIconState",,Block%:Block%!4=12
  896. A$(Block%!28)=
  897. Text$):Block%!0=Debug%:Block%!8=0:Block%!12=0
  898.  "Wimp_SetIconState",,Block%
  899. GetIconText(Window%,Icon%)
  900. EBlock2%!0=Window%:Block2%!4=Icon%:
  901.  "Wimp_GetIconState",,Block2%
  902. Text$=$(Block2%!28)
  903. =Text$
  904. Keyboard(Key%):
  905.  Te$:Window%=Block%!0:Icon%=Block%!4
  906.  Window% 
  907.  Main%:
  908.  Icon% 
  909.  9:A$=
  910. GetIconText(Main%,9)
  911. A$,11)="Resources:$" 
  912.  Positioned$(Cur%)=A$
  913. DisplayText
  914.  "Wimp_ProcessKey",Key%
  915.  Pane%:
  916.  Icon% 
  917. GetIconText(Pane%,3),12)="Resources:$." 
  918. 8Te$=
  919. GetIconText(Pane%,3):
  920. Te$,1)<>".":Te$+=".":
  921. IconText(Pane%,3,Te$):
  922. Select(Pane%,0,
  923. Select(Pane%,0,
  924.  Save%:
  925.  Icon% 
  926.  1:FType$="file_FFA":FType%=&FFA:DestName$=
  927. GetIconText(Save%,1)
  928. DataSave_Save
  929.  "Wimp_ProcessKey",Key%
  930.  Key%=13 
  931.  "Wimp_SetCaretPosition",-1
  932. SetUpMenu(Menu%)
  933. DTicked=0:
  934.  Title$,MItem%:$Menu%=Title$:Width%=(
  935. (Title$)-2)*16
  936. 8Menu%!12=&70207:Menu%!20=44:Menu%!24=0:Pos%=Menu%+28
  937.  Position=1 
  938.  MItem%
  939.  Flags%,SubMenuPointer%,MFlags%,Item$,Font$,size%
  940.  Flags% 
  941.  %10 
  942.  Ticked+=1
  943.  "Font_FindFont",,Font$,size%*16,size%*16 
  944.  FHandle%
  945. #MFlags%=(FHandle%<<24)+%1100001
  946.  Font%?FHandle%>0 
  947.  "Font_LoseFont",FHandle% 
  948.  Font%?FHandle%+=1
  949. G!Pos%=Flags%:Pos%!4=SubMenuPointer%:Pos%!8=MFlags%:$(Pos%+12)=Item$
  950. 7Temp%=(
  951. (Item$)+1)*16:
  952.  Width%<Temp% 
  953.  Width%=Temp%
  954. CPos%+=24:
  955. :Menu%!16=Width%:MenuSize%=96+(44*MItem%)+(24*Ticked)
  956. BringUpMenu(Data%,Mx%,My%)
  957. >MenuOpen%=Data%:
  958.  Next%=0 
  959.  Data%=Menu% 
  960. Grey(Menu%,1,1)
  961.  "Wimp_CreateMenu",,Data%,Mx%,My%
  962.  Next%=0 
  963.  Data%=Menu% 
  964. Grey(Menu%,1,0)
  965.  Resource,6
  966.  %00000000,Info%,&7000021,"Info","Homerton.Medium",12
  967.  %00000010,Save%,&7000021,"Save","Homerton.Medium",12
  968.  %00000000,-1,&7000021,"Verbose","Homerton.Medium",12
  969.  %00000000,-1,&7000021,"Choices","Homerton.Medium",12
  970.  %00000010,-1,&7000021,"Examine","Homerton.Medium",12
  971.  %10000000,-1,&7000021,"Quit","Homerton.Bold.Oblique",12
  972. ModeChange
  973.  Here comes my font routines.
  974.  ============================
  975.  X=0 
  976.  256:
  977.  Font%?X<>0:Font%?X-=1:
  978. "Font_LoseFont",X:
  979.  "Font_FindFont",,"Homerton.Medium",12*16,12*16 
  980.  FileLHandle%
  981. FTe=FileLHandle%:
  982.  Font%?Te<1 
  983.  Font%?Te+=1 
  984.  "Font_LoseFont",Te
  985. SetUpMenu(Menu%):
  986. FontWindow(Main%):
  987. FontWindow(File%)
  988. FontWindow(Save%):
  989. FontWindow(Info%):
  990. FontWindow(FileInfo%)
  991. FontWindow(Choices%):
  992. FontWindow(Pane%)
  993.  Debugging% 
  994. FontWindow(Debug%)
  995.  "Font_LoseFont",Ifhandle%
  996. GBlock%!0=-2:Block%!4=BarIcon%:
  997.  "Wimp_DeleteIcon",,Block%:
  998. IconBar
  999. MenuSelect
  1000.  MenuOpen% 
  1001.  Menu%:
  1002.  "Wimp_DecodeMenu",,Menu%,Block%,Block2%
  1003.  $Block2% 
  1004.  "Verbose":
  1005. Tick(Menu%,2) 
  1006. Wimp_BringUpWindow(Operation%,-1):Verbose%=
  1007. Wimp_CloseWindow(Operation%):Verbose%=
  1008. Tick(Menu%,2)
  1009.  "Choices":
  1010. Wimp_BringUpWindow(Choices%,-1)
  1011. #$Block%!0=Choices%:
  1012. OpeningWindow
  1013.  "Examine":
  1014. Wimp_BringUpWindow(FileInfo%,-1)
  1015.  "Quit":Quit%=
  1016.  FListMenu:Cur%=Block%!0+1:
  1017. DisplayText
  1018.  "Wimp_GetPointerInfo",,Block%
  1019.  Block%!8=1 
  1020. BringUpMenu(MenuOpen%,0,0)
  1021. DragBox(window%,Flags%)
  1022. .K!Block%=window%:
  1023.  "Wimp_GetWindowState",,Block%:ox%=Block%!4-Block%!20
  1024. /Eoy%=Block%!16-Block%!24:Block%!4=0:
  1025.  "Wimp_GetIconState",,Block%
  1026. 0ABlock%!4=Flags%:Block%!8=ox%+Block%!8:Block%!12=oy%+Block%!12
  1027. 1KBlock%!16=ox%+Block%!16:Block%!20=oy%+Block%!20:Block%!24=0:Block%!28=0
  1028. 2EBlock%!32=&7FFFFFFF:Block%!36=&7FFFFFFF:
  1029.  "Wimp_DragBox",,Block%
  1030. Tick(Menu%,Icon%)
  1031. 63Tick=Menu%+28:Tick+=(24*Icon%):!Tick=!Tick 
  1032. Tick(Menu%,Icon%)
  1033. :2Tick=Menu%+28:Tick+=(24*Icon%):Tick=!Tick 
  1034. =(Tick=1)
  1035. Pad(V,L)
  1036.  T$:T$=
  1037.  T$,"0")+T$
  1038. Selected(window%,icon%)
  1039. BBBlock%!0=window%:Block%!4=icon%:
  1040.  "Wimp_GetIconState",,Block%
  1041. Flags%=Block%!24
  1042. =(Flags% 
  1043.  1<<21)<>0
  1044. Select(window%,icon%,state%)
  1045. GBBlock%!0=window%:Block%!4=icon%:
  1046.  "Wimp_GetIconState",,Block%
  1047.  state%=-1 
  1048.  Flags%=1 
  1049.  Flags%=0
  1050. IGBlock%!0=window%:Block%!4=icon%:Block%!8=Flags%<<21:Block%!12=1<<21
  1051.  "Wimp_SetIconState",,Block%
  1052. FontWindow(WHandle%)
  1053.  "Wimp_WhichIcon",WHandle%,Block%,1<<6,1<<6
  1054. OIA=0:
  1055.  Block%!A<>-1:Icon%=Block%!A:Block2%!0=WHandle%:Block2%!4=Icon%
  1056.  "Wimp_GetIconState",,Block2%:Flags%=Block2%!24:FHandle%=Flags%>>24
  1057.  "Font_ReadDefn",FHandle%,Block2% 
  1058.  ,,xsize,ysize
  1059.  "Font_FindFont",,Block2%,xsize,ysize 
  1060.  FHandle%
  1061.  Font%?FHandle%=0 
  1062.  Font%?FHandle%+=1 
  1063.  "Font_LoseFont",FHandle%
  1064. TPBlock2%!0=WHandle%:Block2%!4=Icon%:Block2%!8=FHandle%<<24:Block2%!12=255<<24
  1065.  "Wimp_SetIconState",,Block2%:A+=4:
  1066. StartMessage
  1067. YFMName$="<Resource$Dir>.Messages":
  1068. "MessageTrans_FileInfo",,MName$
  1069.  "OS_Module",6,,,17+
  1070. MName$ 
  1071.  ,,Filedesc%
  1072. [N$(Filedesc%+16)=MName$:
  1073.  "MessageTrans_OpenFile",Filedesc%,Filedesc%+16,0
  1074. Message(Token$,Par1$,Par2$)
  1075.  X=0 
  1076.  508 
  1077.  4:Block2%!X=0:
  1078.  "XMessageTrans_Lookup",Filedesc%,Token$+
  1079. 0,Block2%,512,Par1$,Par2$ 
  1080.  ,,Message$
  1081. =Message$
  1082. Count(Fname$):
  1083.  Total
  1084.  Verbose% 
  1085. IconText(Operation%,2,"Counting")
  1086. IconText(Operation%,3,
  1087. Right(Fname$))
  1088. IconText(Operation%,4,"Total : "+
  1089. Total+" bytes")
  1090. i3Total=0:
  1091.  "OS_File",5,Fname$ 
  1092.  type,,,,Length%
  1093.  type=0 
  1094.  1234,"Not found"
  1095.  type=2 
  1096. Count(Fname$,0) 
  1097.  Total=Length%
  1098. =Total
  1099. Count(Dir$,L%)
  1100.  N%,M%
  1101. pGN%=0:
  1102.  N%<>-1:
  1103.  "OS_GBPB",10,Dir$,Block2%,1,N%,255,"*" 
  1104.  ,,,M%,N%
  1105.  M%>0 
  1106.  Block2%?16=2 
  1107.  Verbose% 
  1108. IconText(Operation%,3,
  1109. Right(
  1110. Strip(Block2%+20)))
  1111. Count(Dir$+"."+
  1112. Strip(Block2%+20),L%+1)
  1113.  Total+=Block2%!8
  1114.  Verbose% 
  1115. IconText(Operation%,4,"Total : "+
  1116. Total+" bytes")
  1117. Error(Er%,Ern%,Erm$)
  1118.  FileOpen% 
  1119.  #N:FileOpen%=
  1120.  Er% 
  1121.  1:Flag%=%10
  1122.  2:Flag%=%11
  1123. %Block%!0=Ern%:$(Block%+4)=Erm$+
  1124.  "Wimp_ReportError",Block%,Flag% 
  1125.  ,Return%
  1126.  Return%=2 
  1127.  Quit%=
  1128. MakeMod
  1129. %ModuleName$=
  1130. GetIconText(Main%,1)
  1131.  Verbose% 
  1132. IconText(Operation%,2,"Creating")
  1133. IconText(Operation%,4,"")
  1134.  l=1 
  1135.  Next%:file$=Object$(l):path$=Positioned$(l):
  1136. 9Version$="3.00":Date$="("+
  1137. $,5,11)+")":
  1138. AssembleCode
  1139.  Object=1 
  1140.  Next%:Dir$=Object$(Object):Top$=
  1141. FileNameFromFull(Dir$)
  1142. Dir$,Top$):Rest$=
  1143. Dir$,A-1):
  1144.  "OS_File",5,Dir$ 
  1145.  Type
  1146.  Virtual% 
  1147.  ObType%(Object)=&2000 
  1148.  Verbose% 
  1149. IconText(Operation%,4,"Virtual application")
  1150. IconText(Operation%,3,
  1151. Right(Object$(Object)))
  1152. Virtual(Object$(Object),"<Wimp$ScrapDir>")
  1153. Rest$="<Wimp$ScrapDir>."
  1154. Scan("<Wimp$ScrapDir>."+
  1155. Right(Object$(Object)),0)
  1156.  Verbose% 
  1157. IconText(Operation%,4,"Adding object")
  1158. IconText(Operation%,3,
  1159. Right(Object$(Object)))
  1160.  Type=0 
  1161.  1234,"Not found"
  1162.  Type=2 
  1163. Scan(Dir$,0)
  1164.  Type=1 
  1165. AddFile(Dir$,Positioned$(Object))
  1166.  Virtual% 
  1167.  ObType%(Object)=&2000 
  1168.  "XOS_Cli","Wipe <Wimp$ScrapDir>."+
  1169. Right(Object(Object)) R F ~C ~V"
  1170. >Module$=DestName$:
  1171.  "OS_File",10,Module$,&FFA,,Address,O%
  1172.  Run% 
  1173.  "OS_Module",11,Address,P%
  1174. Scan(Dir$,L%)
  1175.  N%,M%:N%=0:
  1176.  N%<>-1:
  1177.  "OS_GBPB",10,Dir$,Block2%,1,N%,255,"*" 
  1178.  ,,,M%,N%:
  1179.  M%>0 
  1180.  Block2%?16=2 
  1181. Scan(Dir$+"."+
  1182. getname(Block2%+20),L%+1)
  1183. AddFile(Dir$+"."+
  1184. getname(Block2%+20),Positioned$(Object))
  1185. getname(add%)
  1186. ,b$="":
  1187.  ?add%<>0:b$+=
  1188. (?add%):add%+=1:
  1189. AddFile(Pos$,Res$)
  1190. <DestPosition$=Res$+"."+
  1191. Pos$,
  1192.  Pos$-
  1193.  Rest$):Fname$=Pos$
  1194.  "OS_File",5,Fname$ 
  1195.  Type,,Load,Exec,Len,Acc
  1196.  Type=1 
  1197. [OPT 4
  1198. .Pointer
  1199. )EQUD Load:EQUD Exec:EQUD Len:EQUD Acc
  1200. 8EQUS 
  1201. DestPosition$,
  1202.  DestPosition$-12):EQUB 0:ALIGN
  1203. &EQUD Len+4:
  1204. LoadFile(Fname$):ALIGN
  1205. .Next EQUD 0
  1206. )]:!(Address+Pointer-4)=Next-Pointer+4
  1207. LoadFile(A$)
  1208. "Load "+A$+" "+
  1209. ~O%:O%+=Len:P%+=Len
  1210. FileNameFromFull(A$)
  1211. A$,"."):A=
  1212. A$,"."):A$=
  1213.  A$-A):
  1214. AssembleCode
  1215.  X=4 
  1216. P%=0:O%=Address
  1217. [OPT X
  1218. OEQUD 0:EQUD Initialise:EQUD Finalise:EQUD 0:EQUD Title:EQUD Help:EQUD Table
  1219. .Title
  1220. !EQUS ModuleName$:EQUB 0:ALIGN
  1221.     .Help
  1222. DEQUS ModuleName$:EQUB 9:EQUS Version$:EQUB 32:EQUS Date$:EQUB 32
  1223. 4EQUS "Resource Filing System Files":EQUB 0:ALIGN
  1224. M.Table:EQUS "ModuleFiles":EQUB 0:ALIGN:EQUD 0:EQUD 0:EQUD 0:EQUD FileHelp
  1225. EQUD 0
  1226. 4.FileHelp:EQUS "This is the module "+ModuleName$
  1227. @EQUS " which contains the following files :":EQUB 13:EQUB 10
  1228. AEQUS "File":EQUB 9:EQUB 9:EQUS"Positioned at":EQUB 13:EQUB 10
  1229. ListFiles:EQUB 0:ALIGN
  1230. .Initialise
  1231. LSTMFD R13!,{R0,R14}:ADR R0,ResourceFiles:SWI "XResourceFS_RegisterFiles"
  1232. LDMFD R13!,{R0,R15}
  1233. .Finalise
  1234. NSTMFD R13!,{R0,R14}:ADR R0,ResourceFiles:SWI "XResourceFS_DeregisterFiles"
  1235. LDMFD R13!,{R0,R15}
  1236. .ResourceFiles EQUD 0
  1237. ListFiles
  1238.  File,A$,A,B$:
  1239.  File=1 
  1240.  Next%:A$=Object$(File):A=
  1241. A$,".")
  1242.  A:A$=
  1243.  A$-A):A=
  1244. A$,"."):
  1245. Positioned$(File),
  1246. Positioned$(File)-10)
  1247.  A$<8 
  1248. 9+B$ 
  1249. [OPT X
  1250. EQUS A$:EQUS B$
  1251. EQUB 13:EQUB 10:]:
  1252. GetWord
  1253. A,B,C,D,E:A=
  1254. #X:B=
  1255. #X:C=
  1256. #X:D=
  1257. #X:E=A+(B<<8)+(C<<16)+(D<<24)
  1258. Left(T$)
  1259.  A$,A:A$="":
  1260. T$,"."):A=
  1261. T$,".")
  1262. )A$=A$+
  1263. T$,A):T$=
  1264.  T$-A):
  1265. Right(A$):
  1266.  A:A=
  1267. A$,".")
  1268.  A<>0:A$=
  1269.  A$-A):A=
  1270. A$,"."):
  1271. Choices(ChoiceFile$)
  1272. 1Run%=0:Multiple%=0:Mul$="":
  1273. Read(ChoiceFile$)
  1274. (Mul$)=32:Mul$=
  1275. Mul$,
  1276.  Mul$-1):
  1277. Mul$,12)<>"Resources:$." 
  1278.  Mul$="":Multiple%=0
  1279. Read(File$):
  1280.  X,A$:X=
  1281.  File$:A$=""
  1282. GetLine:
  1283. Convert(A$)<>"finish" 
  1284. Convert(A$),1)<>"#" 
  1285. A$,":"):L$=
  1286. A$,A-1):R$=
  1287.  A$-A)
  1288. Convert(L$):RR$=
  1289. Convert(R$):
  1290. "multiple file drag":
  1291.  RR$="yes" 
  1292.  Multiple%=
  1293. "save and run":
  1294.  RR$="yes" 
  1295.  Run%=
  1296. "multiple directory":Mul$=R$
  1297. "virtual":
  1298.  RR$="yes" 
  1299.  Virtual%=
  1300. Convert(A$)="finish" 
  1301. GetLine:
  1302.  A$:A$="":A=
  1303. :A$=A$+
  1304.  A=13 
  1305.  A=10 
  1306.  A$>250
  1307.  A$>250 
  1308.  1234,"Error in data file, line too long"
  1309. Convert(T$)
  1310.  B$,X:B$="":
  1311.  X=1 
  1312.  T$:B$+=
  1313. T$,X,1))
  1314.  &20):
  1315. (B$)=32:B$=
  1316.  B$-1):
  1317. B$,1)=" ":B$=
  1318. Kill(TaskN$):
  1319.  Ptr%,Task$:Ptr%=0
  1320.  "TaskManager_EnumerateTasks",Ptr%,Block%,16 
  1321.  Ptr%
  1322.  +B%=Block%!4:ItHandle%=Block%!0:Task$=""
  1323.  ?B%>31:Task$+=
  1324. (?B%):B%+=1:
  1325.  Task$=TaskN$
  1326.  ItHandle%<>THandle% 
  1327. $NBlock%!0=32:Block%!16=0:
  1328.  "Wimp_SendMessage",17,Block%,ItHandle%:Task$=""
  1329.  Ptr%<0
  1330. Virtual(App$,TempDir$)
  1331.  Boot%,Run%,Sprites%,NewDir$,File%:NewDir$=TempDir$+"."+
  1332. Right(App$)
  1333. ,9Boot%=
  1334. Exist(App$+".!Boot"):Run%=
  1335. Exist(App$+".!Run")
  1336. -6Sprites%=
  1337. Exist(App$+".!Sprites"):
  1338. "CDir "+NewDir$
  1339.  Boot% 
  1340. //File%=
  1341. (NewDir$+".!Boot"):
  1342.  #File%,"|!Boot"
  1343.  #File%,"|A Virtual !Boot created by !Resource":
  1344.  #File%,""
  1345.  Sprites% 
  1346.  #File%,"IconSprites "+App$+".!Sprites"
  1347.  #File%,"Filer_Run "+App$+".!Boot":
  1348. #File%
  1349. "Settype "+NewDir$+".!Boot Obey"
  1350.  Run% 
  1351. 6-File%=
  1352. (NewDir$+".!Run"):
  1353.  #File%,"|!Run"
  1354.  #File%,"|A Virtual !Run created by !Resource":
  1355.  #File%,""
  1356.  Sprites% 
  1357.  #File%,"IconSprites "+App$+".!Sprites"
  1358.  #File%,"Filer_Run "+App$+".!Run":
  1359.  #File%
  1360. "Settype "+NewDir$+".!Run Obey"
  1361. Exist(File$):
  1362.  X:X=
  1363. (File$):
  1364.  #X:=(X<>0)
  1365. Convert(A$):
  1366.  A=1 
  1367. A$,A,1)=
  1368. A$,A,1) 
  1369.  &20:
  1370. Redraw
  1371. 0,0);!Block%:
  1372. !Window%=!Block%
  1373. G<sprite$="Texturiser":
  1374.  "Wimp_BaseOfSprites" 
  1375.  rom%,ram%
  1376.  "Wimp_ReadPixTrans",&100,ram%,sprite$,,,,Scale%,Trans% 
  1377.  "OS_SpriteOp",256+40,ram%,sprite$ 
  1378.  ,,,width%,height%
  1379.  "Wimp_RedrawWindow",,Block% 
  1380.  flag%
  1381.  flag%
  1382.  "Wimp_GetWindowInfo",,Window%
  1383. M&X%=Window%!44+Window%!20-Window%!4
  1384. X%+width%*2<Block%!28:X%+=width%*2:
  1385. O'Y%=Window%!48+Window%!24-Window%!16
  1386.  Y%+height%*4<Block%!32:Y%+=height%*4:
  1387. startY%=Y%
  1388.  X%<Block%!36
  1389.  Y%<Block%!40
  1390.  "OS_SpriteOp",256+52,ram%,sprite$,X%,Y%,0,Scale%,Trans%:Y%+=height%*4
  1391. Y%=startY%:X%+=width%*2
  1392.  "Wimp_GetRectangle",,Block% 
  1393.  flag%
  1394.