Home » Archimedes archive » Archimedes World » AW-1991-08.adf » August91 » !AWAug91/Goodies/ADFSFiler/!FreeSpace/!RunImage

!AWAug91/Goodies/ADFSFiler/!FreeSpace/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1991-08.adf » August91
Filename: !AWAug91/Goodies/ADFSFiler/!FreeSpace/!RunImage
Read OK:
File size: 28BF bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > !RunImage
   20REM for !FreeSpace: gets multiple disc free space
   30REM LEN Archimedes World August 1991 Written by Majid Anwar
   40    version$="2.19":date$=" (Feb 1991)"
   50PROCmakecode
   60ONERROR:ONERROROFF:PROCcodeoff:ERROR ERR,REPORT$+" at line "+STR$ERL:END
   70PROCenv
   80PROCinitialise
   90PROCassemble
  100poll_mask%=NOT(&6034D)
  110ON ERROR:PROCerror
  120
  130PROCpollloop
  140
  150PROCcodeoff
  160SYS"Wimp_CloseDown"
  170END
  180
  190DEFPROCpollloop
  200REPEAT
  210SYS"Wimp_Poll",poll_mask%,q% TO reason%
  220PROCdo(TRUE)
  230UNTIL quit%
  240ENDPROC
  250
  260DEFPROCdo(pos%)
  270CASE reason% OF
  280 WHEN 0     :PROCanother
  290             IF !counter%<>0 PROCupcall
  300 WHEN 2     :SYS"Wimp_OpenWindow",,q%
  310 WHEN 3     :CASE q%!0 OF
  320              WHEN info%:SYS"Wimp_CloseWindow",,q%
  330              OTHERWISE:SYS"Wimp_GetPointerInfo",,q%+4
  340                        IF (q%!12 AND1)=1 THEN
  350                         PROCfileropen(q%!0)
  360                         IF NOT(INKEY-1) SYS"Wimp_DeleteWindow",,q%
  370                        ELSE
  380                         IF INKEY-1 PROCbind ELSE SYS"Wimp_DeleteWindow",,q%
  390                        ENDIF
  400             ENDCASE
  410 WHEN 6     :PROCbuttons(q%)
  420 WHEN 9     :PROCmenuselect(q%)
  430 WHEN 17, 18:PROCreceive(q%)
  440ENDCASE
  450ENDPROC
  460
  470DEFPROCanother
  480SYS"XOS_ReadVarVal","FSnum",buffer%,40 TO,,exists%
  490IF exists%<>0 THEN
  500 $q%=STRING$(255,CHR$0):SYS"OS_ReadVarVal","Tail",q%,255:env$=FNgetname0(q%)
  510 PROCdataload(env$):SYS"XOS_CLI","UNSET FSnum"
  520ENDIF
  530ENDPROC
  540
  550DEFPROCupcall
  560Sloop%=0:Dloop%=0:REPEAT
  570 raw$=FNgetname0(data%+Sloop%)
  580 Sloop%+=LENraw$+1
  590 fs%=?(data%+Sloop%):Sloop%+=1
  600 name$=LEFT$(raw$,INSTR(raw$,".")-1)+CHR$0:IF LEFT$(name$,1)<>":" name$=CHR$0
  610 IF FNcompare(name$,fs%) $(data%+Dloop%)=name$:Dloop%+=LENname$:?(data%+Dloop%)=fs%:Dloop%+=1
  620UNTILSloop%>=!counter%
  630
  640loop%=0:REPEAT
  650 raw$=FNgetname0(data%+loop%):name$=raw$:loop%+=LENraw$+1
  660 fs%=?(data%+loop%):loop%+=1
  670 SYS"OS_FSControl",33,fs%,buffer%,40:fs$=FNgetname0(buffer%)
  680 SYS"OS_Args" TO cfs%:SYS"OS_FSControl",14,fs%:SYS"OS_FSControl",20 TO ,,priv%:SYS"OS_FSControl",14,cfs%
  690 !buffer%=priv%:SYS"OS_SetVarVal","PrivateWord",buffer%,4,,1
  700 !buffer%=fs%:SYS"OS_SetVarVal","FSnum",buffer%,4,,1
  710 find$=FNtransname(name$,fs%)
  720 SYS"XOS_CLI","UNSET FSnum"
  730 cli$=fs$+":FREE "+name$
  740 IF FNfind(find$,fs$,FALSE) SYS"OS_CLI",cli$:PROCanother
  750UNTILloop%>=Dloop%
  760!counter%=0
  770ENDPROC
  780
  790DEFFNcompare(name$,fs%): LOCAL found%
  800loop%=0:WHILE (loop%<Dloop%) AND (found%=FALSE)
  810 raw$=FNgetname0(data%+loop%)+CHR$0:loop%+=LENraw$
  820 rawfs%=?(data%+loop%):loop%+=1
  830 IF (raw$=name$) AND (rawfs%=fs%) found%=TRUE
  840ENDWHILE
  850IF found% THEN :=FALSE ELSE :=TRUE
  860
  870DEFPROCinitialise
  880DIM q% &450, icon% &200, menu% 200
  890DIM errorblk% &100, buffer% 40
  900
  910$q%="TASK"
  920SYS"Wimp_Initialise",200, !q%, "Disc Free Space" TO , ourtask%
  930
  940SYS"Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
  950SYS"Wimp_LoadTemplate",,q%,icon%,icon%+169,-1,"infoPD",0
  960SYS"Wimp_CreateWindow",,q% TO info%
  970$(icon%+20)=version$+date$
  980SYS"Wimp_LoadTemplate",,q%,icon%+170,icon%+170,-1,"freespace",0
  990SYS"Wimp_CreateWindow",,q% TO freespace%
 1000SYS"Wimp_LoadTemplate",,q%,icon%+170,icon%+170,-1,"bindwindow",0
 1010SYS"Wimp_CreateWindow",,q% TO bindwindow%
 1020SYS"Wimp_CloseTemplate"
 1030 
 1040quit%=FALSE:ypos%=Y%:xpos%=X%
 1050ENDPROC
 1060
 1070DEFPROCbuttons(q%)
 1080IF (q%!8 AND2)=2 PROCmenu(q%)
 1090ENDPROC
 1100
 1110DEFPROCreceive(q%)
 1120CASE q%!16 OF
 1130 WHEN 0:quit%=TRUE
 1140ENDCASE
 1150ENDPROC
 1160
 1170DEFPROCmenu(q%)
 1180
 1190PROCm_head(menu%,"FreeSpace",10)
 1200PROCm_block(menu%+28,&00,info%,&7000001,"Info")
 1210PROCm_block(menu%+52,&80,-1,&7000001,"Quit")
 1220
 1230SYS"Wimp_CreateMenu",,menu%,q%!0-68,q%!4+20
 1240ENDPROC
 1250
 1260DEFPROCm_block(base%,flag%,ptr%,icfl%,data$)
 1270base%!0=flag%:base%!4=ptr%:base%!8=icfl%:$(base%+12)=data$
 1280ENDPROC
 1290
 1300DEFPROCm_head(base%,data$,width%)
 1310$base%=data$:base%!12=&00070207:base%!16=width%*16:base%!20=44:base%!24=0
 1320ENDPROC
 1330
 1340DEFPROCmenuselect(q%):LOCAL stay
 1350SYS"Wimp_GetPointerInfo",,q%+32:stay=q%!40=1
 1360CASE !q% OF
 1370 WHEN 0   :REMq%!52=info%:SYS"Wimp_GetWindowState",,q%+52:SYS"Wimp_OpenWindow",,q%+52
 1380 WHEN 1   :quit%=TRUE
 1390ENDCASE
 1400IF stay=TRUE PROCmenu(q%+32)
 1410ENDPROC
 1420
 1430DEFPROCdataload(name$)
 1440SYS"XOS_ReadVarVal","FreeData",q%,255:free$=$q%
 1450WHILE ASCRIGHT$(free$,1)<33 free$=LEFT$(free$,LENfree$-1):ENDWHILE
 1460IF INSTR(free$,"free")=0 AND INSTR(free$,"used")=0 ERROR 255,free$
 1470SYS"OS_ReadVarVal","FSnum",buffer%,40
 1480name$=FNtransname(name$,!buffer%)
 1490used$=MID$(free$,INSTR(free$,"used ")+5):free$=LEFT$(free$,INSTR(free$,"Bytes used ")):free$=MID$(free$,INSTR(free$,"free ")+5)
 1500used%=EVAL(LEFT$(used$,INSTR(used$,"=")-1)):free%=EVAL(LEFT$(free$,INSTR(free$,"=")-1))
 1510PROCtotal
 1520ENDPROC
 1530
 1540DEFFNtransname(name$,fs%)
 1550SYS"XOS_ReadVarVal","PrivateWord",buffer%,40 TO,,exists%:IF exists%<>0 THEN priv%=!buffer%
 1560IF name$="" THEN
 1570 SYS"OS_Args" TO cfs%
 1580 SYS"OS_FSControl",14,fs%
 1590 SYS"XOS_GBPB",5,,buffer% TO;V%:?(buffer%+?buffer%+1)=13:name$=":"+$(buffer%+1)
 1600 IF ($(buffer%+1)="""Unset""") OR (V%AND1 =1) THEN
 1610  IF exists%<>0 D%=q%:C%=priv%:CALL Drives ELSE !error=1
 1620  IF !error=0 name$=":"+STR$!q% ELSE name$=":0"
 1630 ENDIF
 1640 SYS"OS_FSControl",14,cfs%
 1650ENDIF
 1660IF LEFT$(name$,1)<>":" name$=":"+name$
 1670IF exists%<>0 THEN
 1680 $q%=name$+CHR$0
 1690 A%=q%:B%=q%+&10:C%=priv%:CALL DescribeDisc
 1700 IF !error=0 q%?&30=13:name$=":"+FNgetname32(q%+&26)
 1710ENDIF
 1720SYS"XOS_CLI","UNSET PrivateWord"
 1730=name$
 1740
 1750DEFFNgetname0(ptr%)
 1760p$=""
 1770WHILE?ptr%<>0
 1780 p$+=CHR$?ptr%
 1790 ptr%+=1
 1800ENDWHILE
 1810=p$
 1820
 1830DEFFNgetname32(ptr%)
 1840p$=""
 1850WHILE?ptr%>32
 1860 p$+=CHR$?ptr%
 1870 ptr%+=1
 1880ENDWHILE
 1890=p$
 1900
 1910DEFFNconv(a%):LOCAL n%,a$
 1920FORn%=0TO3
 1930IF ((a%>>(n%*8))AND&FF)>32 a$+=CHR$((a%>>(n%*8))AND&FF)
 1940NEXT
 1950=a$
 1960
 1970DEFPROCtotal:LOCAL x%,ww%,ix%
 1980SYS"OS_ReadVarVal","FSnum",buffer%,40:fs%=!buffer%
 1990SYS"OS_FSControl",33,fs%,buffer%,40
 2000fs$=FNgetname0(buffer%)
 2010IF INSTR(name$," ")>0 name$=LEFT$(name$,INSTR(name$," ")-1)
 2020IF FNfind(name$,fs$,TRUE) x%=q%!4:ww%=q%!16 ELSE x%=xpos%:ww%=ypos%:ypos%-=44:PROCrangecheck
 2030q%!0=freespace%:SYS"Wimp_GetWindowInfo",,q%
 2040PROCpoke(FNpad(free%),4+q%+88+20+0)
 2050PROCpoke(FNpad(used%),4+q%+88+20+32)
 2060PROCpoke(fs$,4+q%+88+20+64)
 2070PROCpoke(name$,4+q%+72)
 2080ix%=!(4+q%+88+8+128)-!(4+q%+88+0+128):ix%=ix%*used%/(used%+free%)
 2090!(4+q%+88+8+128)=!(4+q%+88+0+128)+ix%
 2100
 2110SYS"Wimp_CreateWindow",,q%+4 TO dummy
 2120q%!0=dummy
 2130q%!8=ww%-(q%!16-q%!8)
 2140q%!12=x%+(q%!12-q%!4)
 2150q%!4=x%:q%!16=ww%:SYS"Wimp_OpenWindow",,q%
 2160
 2170ENDPROC
 2180
 2190DEFPROCpoke(a$,a%):LOCAL n%:a$=LEFT$(a$+CHR$0,12)
 2200a$+=STRING$(12-LENa$,CHR$0)
 2210FORn%=0TOLENa$-1:a%?n%=ASCMID$(a$,n%+1,1):NEXT
 2220ENDPROC
 2230
 2240DEFFNpad(a%):LOCAL a$,n%,i%
 2250a$=STR$a%:i%=(LENa$ DIV3)+((LENa$ MOD3)=0)
 2260IF LENa$<4 :=a$+CHR$0
 2270FORn%=1TOi%
 2280a$=LEFT$(a$,LENa$-3*n%-n%+1)+","+MID$(a$,1+LENa$-3*n%-n%+1)
 2290NEXT
 2300a$+=CHR$0:=LEFT$(a$,12)
 2310
 2320DEFPROCrangecheck
 2330IFypos%<200 THEN
 2340 ypos%=Y%:xpos%+=84
 2350 IFxpos%>1000 xpos%=X%
 2360ENDIF
 2370ENDPROC
 2380
 2390DEFPROCenv
 2400SYS"OS_GetEnv" TO env$:I%=INSTR(env$,"-quit")
 2410I%=INSTR(env$,"""",I%+1):I%=INSTR(env$,"""",I%+1):env$=MID$(env$,I%+1)
 2420WHILELEFT$(env$,1)=" ":env$=MID$(env$,2):ENDWHILE
 2430x$=LEFT$(env$,INSTR(env$," ")-1):y$=MID$(env$,LENx$+1)
 2440X%=EVALx$:Y%=EVALy$
 2450ENDPROC
 2460
 2470DEFFNfind(name$,fs$,del%):LOCAL h%,r2%
 2480name$+=STRING$(12-LENname$,CHR$0)
 2490fs$+=STRING$(12-LENfs$,CHR$0)
 2500PROCinvisible(bindwindow%)
 2510SYS"Wimp_GetWindowState",,q%
 2520h%=q%!28
 2530REPEAT
 2540 q%!0=h%:SYS"Wimp_GetWindowState",,q%
 2550 q%!300=20:q%!304=0:q%!308=0:q%!312=0:q%!316=0
 2560 SYS"Wimp_SendMessage",19,q%+300,h% TO ,,r2%
 2570 IF r2%=ourtask% SYS"Wimp_GetWindowInfo",,q%
 2580 q%?88=13:?(4+q%+88+32+64)=13
 2590 IF r2%=ourtask% AND $(q%+76)=name$ AND $(4+q%+88+20+64)=fs$ AND h%<>info% AND h%<>freespace% THEN
 2600  IF del% SYS"Wimp_DeleteWindow",,q%
 2610  q%!0=bindwindow%:SYS"Wimp_CloseWindow",,q%:=TRUE
 2620 ENDIF
 2630 h%=q%!28
 2640UNTILh%=-1
 2650q%!0=bindwindow%:SYS"Wimp_CloseWindow",,q%
 2660=FALSE
 2670
 2680DEFPROCbind:LOCAL h%,r2%
 2690PROCinvisible(bindwindow%)
 2700SYS"Wimp_GetWindowState",,q%
 2710h%=q%!28
 2720REPEAT
 2730 q%!0=h%:SYS"Wimp_GetWindowState",,q%
 2740 q%!100=20:q%!104=0:q%!108=0:q%!112=0:q%!116=0
 2750 SYS"Wimp_SendMessage",19,q%+100,h% TO ,,r2%
 2760 IF r2%=ourtask% AND h%<>info% AND h%<>freespace% SYS"Wimp_DeleteWindow",,q%
 2770 h%=q%!28
 2780UNTILh%=-1
 2790q%!0=bindwindow%:SYS"Wimp_CloseWindow",,q%
 2800ENDPROC
 2810
 2820DEFPROCinvisible(h%)
 2830q%!0=h%:SYS"Wimp_GetWindowState",,q%
 2840q%!4=-1280:q%!8=-1024:q%!12=-1080:q%!16=-824:q%!28=-2
 2850SYS"Wimp_OpenWindow",,q%
 2860ENDPROC
 2870
 2880DEFPROCfileropen(h%):LOCAL cli$,fs$,disc$
 2890q%!0=h%:SYS"Wimp_GetWindowInfo",,q%
 2900q%?88=13:?(4+q%+88+32+64)=13
 2910fs$=LEFT$($(4+q%+88+20+64),INSTR($(4+q%+88+20+64),CHR$0)-1):disc$=LEFT$($(q%+76),INSTR($(q%+76),CHR$0)-1)
 2920IF fs$="disc" fs$="dfs"
 2930IF fs$="ram" fs$="RAM":disc$="" ELSE disc$+="."
 2940cli$="Filer_OpenDir "+fs$+":"+disc$+"$"
 2950SYS"XOS_CLI",cli$
 2960ENDPROC
 2970
 2980DEFPROCerror
 2990!errorblk%=0:$(errorblk%+4)=REPORT$+CHR$0:SYS"Wimp_ReportError",errorblk%,%10010,"FreeSpace"
 3000!counter%=0
 3010SYS"XOS_CLI","UNSET PrivateWord"
 3020SYS"XOS_CLI","UNSET FSnum"
 3030SYS"XOS_CLI","UNSET Tail"
 3040SYS"XOS_CLI","UNSET FreeData"
 3050ENDPROC
 3060
 3070REM need this code 'cos the silly SYS command only passes r0-r7 (and private word is in r8)
 3080DEFPROCassemble
 3090DIM code% 100
 3100FORpass%=0TO2STEP2
 3110P%=code%
 3120[OPTpass%
 3130.DescribeDisc
 3140MOV   r8,r2
 3150SWI   "XFileCore_DescribeDisc"
 3160MOVVS r8,#1
 3170MOVVC r8,#0
 3180STR   r8,error
 3190LDR   r7,mask
 3200AND   r8,pc,r7
 3210TEQP  pc,r8
 3220MOV   pc,r14
 3230.Drives
 3240MOV   r8,r2
 3250SWI   "XFileCore_Drives"
 3260STR   r0,[r3,#0]
 3270MOVVS r8,#1
 3280MOVVC r8,#0
 3290STR   r8,error
 3300LDR   r7,mask
 3310AND   r8,pc,r7
 3320TEQP  pc,r8
 3330MOV   pc,r14
 3340.error
 3350EQUD  0
 3360.mask
 3370EQUD  NOT(1<<28)
 3380]
 3390NEXT
 3400ENDPROC
 3410
 3420DEFPROCmakecode
 3430SYS"OS_Module",6,,,800 TO ,,code%;flg%
 3440IF -(flg%AND1) THEN ERROR 255,"No room in RMA"
 3450FOR pass%=0 TO 2 STEP 2
 3460P%=code%
 3470[OPT pass%
 3480.vectorcode% TEQ     r0,#3
 3490             MOVNE   pc,r14
 3500.ok          STMDB   r13!,{r0-12}
 3510             MOV     r0,#255
 3520             ADD     r0,r0,#4
 3530             TEQ     r9,r0
 3540             LDMEQIA r13!,{r0-r12}
 3550             MOVEQ   pc,r14
 3560
 3570             LDR     r0,counter%
 3580             MOV     r5,#0
 3590             ADR     r2,data%
 3600             MOV     r4,#&FF
 3610             MOV     r4,r4,lsl#1
 3620             TEQ     r0,r4
 3630             BEQ     leave%
 3640
 3650.loop        LDRB    r3,[r1,r5]
 3660             STRB    r3,[r2,r0]
 3670             ADD     r0,r0,#1
 3680             ADD     r5,r5,#1
 3690             TEQ     r0,r4
 3700             MOVEQ   r3,#0
 3710             STREQB  r3,[r2,r4]
 3720             BEQ     leave%
 3730             TEQ     r3,#0
 3740             BNE     loop
 3750             STRB    r8,[r2,r0]
 3760             ADD     r0,r0,#1
 3770             STR     r0,counter%
 3780.leave%      LDMIA   r13!,{r0-r12}
 3790             MOV     pc,R14
 3800.counter%    EQUD    0
 3810.data%       EQUS    STRING$(128,CHR$0)
 3820             EQUS    STRING$(128,CHR$0)
 3830             EQUS    STRING$(128,CHR$0)
 3840             EQUS    STRING$(128,CHR$0)
 3850]
 3860NEXT
 3870SYS"OS_Claim",&1D,vectorcode%,0
 3880ENDPROC
 3890
 3900DEFPROCcodeoff
 3910SYS"XOS_Module",4,"AliasFree"
 3920SYS"XOS_CLI","UNSET Alias$Free"
 3930SYS"XOS_CLI","UNSET PrivateWord"
 3940SYS"XOS_CLI","UNSET FSnum"
 3950SYS"XOS_CLI","UNSET Tail"
 3960SYS"XOS_CLI","UNSET FreeData"
 3970SYS"XOS_Release",&1D,vectorcode%,0:SYS"XOS_Module",7,,code%
 3980ENDPROC

� > !RunImage
3� for !FreeSpace: gets multiple disc free space
;� � Archimedes World August 1991 Written by Majid Anwar
(+    version$="2.19":date$=" (Feb 1991)"
2
�makecode
<+�::�codeoff:� �,�$+" at line "+Þ:�
F�env
P�initialise
Z
�assemble
dpoll_mask%=�(&6034D)
n� �:�error
x
�
�pollloop
�
��codeoff
�ș"Wimp_CloseDown"
��
�
���pollloop
��
�)ș"Wimp_Poll",poll_mask%,q% � reason%
�
�do(�)
�� quit%
��
�
��do(pos%)
Ȏ reason% �
 � 0     :�another
"'             � !counter%<>0 �upcall
,% � 2     :ș"Wimp_OpenWindow",,q%
6 � 3     :Ȏ q%!0 �
@2              � info%:ș"Wimp_CloseWindow",,q%
J1              :ș"Wimp_GetPointerInfo",,q%+4
T,                        � (q%!12 �1)=1 �
^-                         �fileropen(q%!0)
h?                         � �(�-1) ș"Wimp_DeleteWindow",,q%
r                        �
|D                         � �-1 �bind � ș"Wimp_DeleteWindow",,q%
�                        �
�             �
� � 6     :�buttons(q%)
� � 9     :�menuselect(q%)
� � 17, 18:�receive(q%)
��
��
�
�
��another
�4ș"XOS_ReadVarVal","FSnum",buffer%,40 �,,exists%
�� exists%<>0 �
�D $q%=�255,�0):ș"OS_ReadVarVal","Tail",q%,255:env$=�getname0(q%)
�. �dataload(env$):ș"XOS_CLI","UNSET FSnum"
�
�

&��upcall
0Sloop%=0:Dloop%=0:�
:! raw$=�getname0(data%+Sloop%)
D Sloop%+=�raw$+1
N" fs%=?(data%+Sloop%):Sloop%+=1
X; name$=�raw$,�raw$,".")-1)+�0:� �name$,1)<>":" name$=�0
b] � �compare(name$,fs%) $(data%+Dloop%)=name$:Dloop%+=�name$:?(data%+Dloop%)=fs%:Dloop%+=1
l�Sloop%>=!counter%
v
�
loop%=0:�
�: raw$=�getname0(data%+loop%):name$=raw$:loop%+=�raw$+1
�  fs%=?(data%+loop%):loop%+=1
�> ș"OS_FSControl",33,fs%,buffer%,40:fs$=�getname0(buffer%)
�f ș"OS_Args" � cfs%:ș"OS_FSControl",14,fs%:ș"OS_FSControl",20 � ,,priv%:ș"OS_FSControl",14,cfs%
�? !buffer%=priv%:ș"OS_SetVarVal","PrivateWord",buffer%,4,,1
�7 !buffer%=fs%:ș"OS_SetVarVal","FSnum",buffer%,4,,1
�  find$=�transname(name$,fs%)
� ș"XOS_CLI","UNSET FSnum"
� cli$=fs$+":FREE "+name$
�2 � �find(find$,fs$,�) ș"OS_CLI",cli$:�another
��loop%>=Dloop%
�!counter%=0
�

"ݤcompare(name$,fs%): � found%
 *loop%=0:ȕ (loop%<Dloop%) � (found%=�)
*0 raw$=�getname0(data%+loop%)+�0:loop%+=�raw$
4# rawfs%=?(data%+loop%):loop%+=1
>+ � (raw$=name$) � (rawfs%=fs%) found%=�
H�
R� found% � :=� � :=�
\
f��initialise
p$� q% &450, icon% &200, menu% 200
z � errorblk% &100, buffer% 40
�
�$q%="TASK"
�@ș"Wimp_Initialise",200, !q%, "Disc Free Space" � , ourtask%
�
�1ș"Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
�;ș"Wimp_LoadTemplate",,q%,icon%,icon%+169,-1,"infoPD",0
�%ș"Wimp_CreateWindow",,q% � info%
�$(icon%+20)=version$+date$
�Bș"Wimp_LoadTemplate",,q%,icon%+170,icon%+170,-1,"freespace",0
�*ș"Wimp_CreateWindow",,q% � freespace%
�Cș"Wimp_LoadTemplate",,q%,icon%+170,icon%+170,-1,"bindwindow",0
�+ș"Wimp_CreateWindow",,q% � bindwindow%
�ș"Wimp_CloseTemplate"
 
quit%=�:ypos%=Y%:xpos%=X%
�
$
.��buttons(q%)
8� (q%!8 �2)=2 �menu(q%)
B�
L
V��receive(q%)
`Ȏ q%!16 �
j � 0:quit%=�
t�
~�
�
���menu(q%)
�
�!�m_head(menu%,"FreeSpace",10)
�0�m_block(menu%+28,&00,info%,&7000001,"Info")
�-�m_block(menu%+52,&80,-1,&7000001,"Quit")
�
�.ș"Wimp_CreateMenu",,menu%,q%!0-68,q%!4+20
��
�
�+��m_block(base%,flag%,ptr%,icfl%,data$)
�>base%!0=flag%:base%!4=ptr%:base%!8=icfl%:$(base%+12)=data$
�


 ��m_head(base%,data$,width%)
M$base%=data$:base%!12=&00070207:base%!16=width%*16:base%!20=44:base%!24=0
(�
2
<��menuselect(q%):� stay
F/ș"Wimp_GetPointerInfo",,q%+32:stay=q%!40=1
PȎ !q% �
ZT � 0   :�q%!52=info%:SYS"Wimp_GetWindowState",,q%+52:SYS"Wimp_OpenWindow",,q%+52
d � 1   :quit%=�
n�
x� stay=� �menu(q%+32)
��
�
���dataload(name$)
�2ș"XOS_ReadVarVal","FreeData",q%,255:free$=$q%
�-ȕ ��free$,1)<33 free$=�free$,�free$-1):�
�5� �free$,"free")=0 � �free$,"used")=0 � 255,free$
�(ș"OS_ReadVarVal","FSnum",buffer%,40
�$name$=�transname(name$,!buffer%)
�gused$=�free$,�free$,"used ")+5):free$=�free$,�free$,"Bytes used ")):free$=�free$,�free$,"free ")+5)
�Aused%=�(�used$,�used$,"=")-1)):free%=�(�free$,�free$,"=")-1))
�
�total
��
�
ݤtransname(name$,fs%)
Xș"XOS_ReadVarVal","PrivateWord",buffer%,40 �,,exists%:� exists%<>0 � priv%=!buffer%
� name$="" �
" ș"OS_Args" � cfs%
, ș"OS_FSControl",14,fs%
6Q ș"XOS_GBPB",5,,buffer% �;V%:?(buffer%+?buffer%+1)=13:name$=":"+$(buffer%+1)
@/ � ($(buffer%+1)="""Unset""") � (V%�1 =1) �
J5  � exists%<>0 D%=q%:C%=priv%:� Drives � !error=1
T,  � !error=0 name$=":"+�!q% � name$=":0"
^ �
h ș"OS_FSControl",14,cfs%
r�
|$� �name$,1)<>":" name$=":"+name$
�� exists%<>0 �
� $q%=name$+�0
�, A%=q%:B%=q%+&10:C%=priv%:� DescribeDisc
�6 � !error=0 q%?&30=13:name$=":"+�getname32(q%+&26)
��
�#ș"XOS_CLI","UNSET PrivateWord"
�
=name$
�
�ݤgetname0(ptr%)
�	p$=""
�ȕ?ptr%<>0
� p$+=�?ptr%
� ptr%+=1
�
=p$

&ݤgetname32(ptr%)
0	p$=""
:ȕ?ptr%>32
D p$+=�?ptr%
N ptr%+=1
X�
b=p$
l
vݤconv(a%):� n%,a$
��n%=0�3
�3� ((a%>>(n%*8))�&FF)>32 a$+=�((a%>>(n%*8))�&FF)
��
�=a$
�
���total:� x%,ww%,ix%
�5ș"OS_ReadVarVal","FSnum",buffer%,40:fs%=!buffer%
�&ș"OS_FSControl",33,fs%,buffer%,40
�fs$=�getname0(buffer%)
�/� �name$," ")>0 name$=�name$,�name$," ")-1)
�U� �find(name$,fs$,�) x%=q%!4:ww%=q%!16 � x%=xpos%:ww%=ypos%:ypos%-=44:�rangecheck
�.q%!0=freespace%:ș"Wimp_GetWindowInfo",,q%
�#�poke(�pad(free%),4+q%+88+20+0)
$�poke(�pad(used%),4+q%+88+20+32)
�poke(fs$,4+q%+88+20+64)
�poke(name$,4+q%+72)
 Eix%=!(4+q%+88+8+128)-!(4+q%+88+0+128):ix%=ix%*used%/(used%+free%)
*)!(4+q%+88+8+128)=!(4+q%+88+0+128)+ix%
4
>'ș"Wimp_CreateWindow",,q%+4 � dummy
Hq%!0=dummy
Rq%!8=ww%-(q%!16-q%!8)
\q%!12=x%+(q%!12-q%!4)
f-q%!4=x%:q%!16=ww%:ș"Wimp_OpenWindow",,q%
p
z�
�
�$��poke(a$,a%):� n%:a$=�a$+�0,12)
�a$+=�12-�a$,�0)
�$�n%=0��a$-1:a%?n%=��a$,n%+1,1):�
��
�
�ݤpad(a%):� a$,n%,i%
�#a$=�a%:i%=(�a$ �3)+((�a$ �3)=0)
�� �a$<4 :=a$+�0
��n%=1�i%
�2a$=�a$,�a$-3*n%-n%+1)+","+�a$,1+�a$-3*n%-n%+1)
��
�a$+=�0:=�a$,12)
	
	��rangecheck
	�ypos%<200 �
	$ ypos%=Y%:xpos%+=84
	. �xpos%>1000 xpos%=X%
	8�
	B�
	L
	V	��env
	`*ș"OS_GetEnv" � env$:I%=�env$,"-quit")
	j<I%=�env$,"""",I%+1):I%=�env$,"""",I%+1):env$=�env$,I%+1)
	t"ȕ�env$,1)=" ":env$=�env$,2):�
	~*x$=�env$,�env$," ")-1):y$=�env$,�x$+1)
	�X%=�x$:Y%=�y$
	��
	�
	�#ݤfind(name$,fs$,del%):� h%,r2%
	�name$+=�12-�name$,�0)
	�fs$+=�12-�fs$,�0)
	��invisible(bindwindow%)
	�ș"Wimp_GetWindowState",,q%
	�h%=q%!28
	��
	�( q%!0=h%:ș"Wimp_GetWindowState",,q%
	�2 q%!300=20:q%!304=0:q%!308=0:q%!312=0:q%!316=0
. ș"Wimp_SendMessage",19,q%+300,h% � ,,r2%

. � r2%=ourtask% ș"Wimp_GetWindowInfo",,q%
! q%?88=13:?(4+q%+88+32+64)=13
Z � r2%=ourtask% � $(q%+76)=name$ � $(4+q%+88+20+64)=fs$ � h%<>info% � h%<>freespace% �
(&  � del% ș"Wimp_DeleteWindow",,q%
22  q%!0=bindwindow%:ș"Wimp_CloseWindow",,q%:=�
< �
F
 h%=q%!28
P
�h%=-1
Z-q%!0=bindwindow%:ș"Wimp_CloseWindow",,q%
d=�
n
x��bind:� h%,r2%
��invisible(bindwindow%)
�ș"Wimp_GetWindowState",,q%
�h%=q%!28
��
�( q%!0=h%:ș"Wimp_GetWindowState",,q%
�2 q%!100=20:q%!104=0:q%!108=0:q%!112=0:q%!116=0
�. ș"Wimp_SendMessage",19,q%+100,h% � ,,r2%
�J � r2%=ourtask% � h%<>info% � h%<>freespace% ș"Wimp_DeleteWindow",,q%
�
 h%=q%!28
�
�h%=-1
�-q%!0=bindwindow%:ș"Wimp_CloseWindow",,q%
��
�
��invisible(h%)
'q%!0=h%:ș"Wimp_GetWindowState",,q%
9q%!4=-1280:q%!8=-1024:q%!12=-1080:q%!16=-824:q%!28=-2
"ș"Wimp_OpenWindow",,q%
,�
6
@$��fileropen(h%):� cli$,fs$,disc$
J&q%!0=h%:ș"Wimp_GetWindowInfo",,q%
T q%?88=13:?(4+q%+88+32+64)=13
^Sfs$=�$(4+q%+88+20+64),�$(4+q%+88+20+64),�0)-1):disc$=�$(q%+76),�$(q%+76),�0)-1)
h� fs$="disc" fs$="dfs"
r/� fs$="ram" fs$="RAM":disc$="" � disc$+="."
|+cli$="Filer_OpenDir "+fs$+":"+disc$+"$"
�ș"XOS_CLI",cli$
��
�
���error
�W!errorblk%=0:$(errorblk%+4)=�$+�0:ș"Wimp_ReportError",errorblk%,%10010,"FreeSpace"
�!counter%=0
�#ș"XOS_CLI","UNSET PrivateWord"
�ș"XOS_CLI","UNSET FSnum"
�ș"XOS_CLI","UNSET Tail"
� ș"XOS_CLI","UNSET FreeData"
��
�
�]� need this code 'cos the silly SYS command only passes r0-r7 (and private word is in r8)
��assemble
� code% 100
�pass%=0�2�2
&P%=code%
0
[OPTpass%
:.DescribeDisc
DMOV   r8,r2
N"SWI   "XFileCore_DescribeDisc"
XMOVVS r8,#1
bMOVVC r8,#0
lSTR   r8,error
vLDR   r7,mask
��   r8,pc,r7
�TEQP  pc,r8
�MOV   pc,r14
�.Drives
�MOV   r8,r2
�SWI   "XFileCore_Drives"
�STR   r0,[r3,#0]
�MOVVS r8,#1
�MOVVC r8,#0
�STR   r8,error
�LDR   r7,mask
��   r8,pc,r7
�TEQP  pc,r8

MOV   pc,r14


.error

EQUD  0

 	.mask

*EQUD  �(1<<28)

4]

>�

H�

R

\��makecode

f(ș"OS_Module",6,,,800 � ,,code%;flg%

p(� -(flg%�1) � � 255,"No room in RMA"

z� pass%=0 � 2 � 2

�P%=code%

�[OPT pass%

�.vectorcode% TEQ     r0,#3

�             MOVNE   pc,r14

�%.ok          STMDB   r13!,{r0-12}

�              MOV     r0,#255

�!             ADD     r0,r0,#4

�             TEQ     r9,r0

�&             LDMEQIA r13!,{r0-r12}

�             �Q   pc,r14

�

�$             LDR     r0,counter%

�             MOV     r5,#0
!             ADR     r2,data%
              MOV     r4,#&FF
$             MOV     r4,r4,lsl#1
$             TEQ     r0,r4
.             BEQ     leave%
8
B#.loop        LDRB    r3,[r1,r5]
L#             STRB    r3,[r2,r0]
V!             ADD     r0,r0,#1
`!             ADD     r5,r5,#1
j             TEQ     r0,r4
t             �Q   r3,#0
~#             STREQB  r3,[r2,r4]
�             BEQ     leave%
�             TEQ     r3,#0
�             BNE     loop
�#             STRB    r8,[r2,r0]
�!             ADD     r0,r0,#1
�$             STR     r0,counter%
�&.leave%      LDMIA   r13!,{r0-r12}
�             MOV     pc,R14
�.counter%    EQUD    0
�!.data%       EQUS    �128,�0)
�!             EQUS    �128,�0)
�!             EQUS    �128,�0)
!             EQUS    �128,�0)

]
�
"ș"OS_Claim",&1D,vectorcode%,0
(�
2
<
��codeoff
F ș"XOS_Module",4,"AliasFree"
P"ș"XOS_CLI","UNSET Alias$Free"
Z#ș"XOS_CLI","UNSET PrivateWord"
dș"XOS_CLI","UNSET FSnum"
nș"XOS_CLI","UNSET Tail"
x ș"XOS_CLI","UNSET FreeData"
�=ș"XOS_Release",&1D,vectorcode%,0:ș"XOS_Module",7,,code%
��
�
00000000  0d 00 0a 11 f4 20 3e 20  21 52 75 6e 49 6d 61 67  |..... > !RunImag|
00000010  65 0d 00 14 33 f4 20 66  6f 72 20 21 46 72 65 65  |e...3. for !Free|
00000020  53 70 61 63 65 3a 20 67  65 74 73 20 6d 75 6c 74  |Space: gets mult|
00000030  69 70 6c 65 20 64 69 73  63 20 66 72 65 65 20 73  |iple disc free s|
00000040  70 61 63 65 0d 00 1e 3b  f4 20 a9 20 41 72 63 68  |pace...;. . Arch|
00000050  69 6d 65 64 65 73 20 57  6f 72 6c 64 20 41 75 67  |imedes World Aug|
00000060  75 73 74 20 31 39 39 31  20 57 72 69 74 74 65 6e  |ust 1991 Written|
00000070  20 62 79 20 4d 61 6a 69  64 20 41 6e 77 61 72 0d  | by Majid Anwar.|
00000080  00 28 2b 20 20 20 20 76  65 72 73 69 6f 6e 24 3d  |.(+    version$=|
00000090  22 32 2e 31 39 22 3a 64  61 74 65 24 3d 22 20 28  |"2.19":date$=" (|
000000a0  46 65 62 20 31 39 39 31  29 22 0d 00 32 0d f2 6d  |Feb 1991)"..2..m|
000000b0  61 6b 65 63 6f 64 65 0d  00 3c 2b ee 85 3a ee 85  |akecode..<+..:..|
000000c0  87 3a f2 63 6f 64 65 6f  66 66 3a 85 20 9f 2c f6  |.:.codeoff:. .,.|
000000d0  24 2b 22 20 61 74 20 6c  69 6e 65 20 22 2b c3 9e  |$+" at line "+..|
000000e0  3a e0 0d 00 46 08 f2 65  6e 76 0d 00 50 0f f2 69  |:...F..env..P..i|
000000f0  6e 69 74 69 61 6c 69 73  65 0d 00 5a 0d f2 61 73  |nitialise..Z..as|
00000100  73 65 6d 62 6c 65 0d 00  64 18 70 6f 6c 6c 5f 6d  |semble..d.poll_m|
00000110  61 73 6b 25 3d ac 28 26  36 30 33 34 44 29 0d 00  |ask%=.(&6034D)..|
00000120  6e 0e ee 20 85 3a f2 65  72 72 6f 72 0d 00 78 04  |n.. .:.error..x.|
00000130  0d 00 82 0d f2 70 6f 6c  6c 6c 6f 6f 70 0d 00 8c  |.....pollloop...|
00000140  04 0d 00 96 0c f2 63 6f  64 65 6f 66 66 0d 00 a0  |......codeoff...|
00000150  16 c8 99 22 57 69 6d 70  5f 43 6c 6f 73 65 44 6f  |..."Wimp_CloseDo|
00000160  77 6e 22 0d 00 aa 05 e0  0d 00 b4 04 0d 00 be 0e  |wn".............|
00000170  dd f2 70 6f 6c 6c 6c 6f  6f 70 0d 00 c8 05 f5 0d  |..pollloop......|
00000180  00 d2 29 c8 99 22 57 69  6d 70 5f 50 6f 6c 6c 22  |..).."Wimp_Poll"|
00000190  2c 70 6f 6c 6c 5f 6d 61  73 6b 25 2c 71 25 20 b8  |,poll_mask%,q% .|
000001a0  20 72 65 61 73 6f 6e 25  0d 00 dc 0a f2 64 6f 28  | reason%.....do(|
000001b0  b9 29 0d 00 e6 0b fd 20  71 75 69 74 25 0d 00 f0  |.)..... quit%...|
000001c0  05 e1 0d 00 fa 04 0d 01  04 0e dd f2 64 6f 28 70  |............do(p|
000001d0  6f 73 25 29 0d 01 0e 10  c8 8e 20 72 65 61 73 6f  |os%)...... reaso|
000001e0  6e 25 20 ca 0d 01 18 16  20 c9 20 30 20 20 20 20  |n% ..... . 0    |
000001f0  20 3a f2 61 6e 6f 74 68  65 72 0d 01 22 27 20 20  | :.another.."'  |
00000200  20 20 20 20 20 20 20 20  20 20 20 e7 20 21 63 6f  |           . !co|
00000210  75 6e 74 65 72 25 3c 3e  30 20 f2 75 70 63 61 6c  |unter%<>0 .upcal|
00000220  6c 0d 01 2c 25 20 c9 20  32 20 20 20 20 20 3a c8  |l..,% . 2     :.|
00000230  99 22 57 69 6d 70 5f 4f  70 65 6e 57 69 6e 64 6f  |."Wimp_OpenWindo|
00000240  77 22 2c 2c 71 25 0d 01  36 17 20 c9 20 33 20 20  |w",,q%..6. . 3  |
00000250  20 20 20 3a c8 8e 20 71  25 21 30 20 ca 0d 01 40  |   :.. q%!0 ...@|
00000260  32 20 20 20 20 20 20 20  20 20 20 20 20 20 20 c9  |2              .|
00000270  20 69 6e 66 6f 25 3a c8  99 22 57 69 6d 70 5f 43  | info%:.."Wimp_C|
00000280  6c 6f 73 65 57 69 6e 64  6f 77 22 2c 2c 71 25 0d  |loseWindow",,q%.|
00000290  01 4a 31 20 20 20 20 20  20 20 20 20 20 20 20 20  |.J1             |
000002a0  20 7f 3a c8 99 22 57 69  6d 70 5f 47 65 74 50 6f  | .:.."Wimp_GetPo|
000002b0  69 6e 74 65 72 49 6e 66  6f 22 2c 2c 71 25 2b 34  |interInfo",,q%+4|
000002c0  0d 01 54 2c 20 20 20 20  20 20 20 20 20 20 20 20  |..T,            |
000002d0  20 20 20 20 20 20 20 20  20 20 20 20 e7 20 28 71  |            . (q|
000002e0  25 21 31 32 20 80 31 29  3d 31 20 8c 0d 01 5e 2d  |%!12 .1)=1 ...^-|
000002f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000300  20 20 20 20 20 20 20 20  20 f2 66 69 6c 65 72 6f  |         .filero|
00000310  70 65 6e 28 71 25 21 30  29 0d 01 68 3f 20 20 20  |pen(q%!0)..h?   |
00000320  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000330  20 20 20 20 20 20 e7 20  ac 28 a6 2d 31 29 20 c8  |      . .(.-1) .|
00000340  99 22 57 69 6d 70 5f 44  65 6c 65 74 65 57 69 6e  |."Wimp_DeleteWin|
00000350  64 6f 77 22 2c 2c 71 25  0d 01 72 1d 20 20 20 20  |dow",,q%..r.    |
00000360  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000370  20 20 20 20 cc 0d 01 7c  44 20 20 20 20 20 20 20  |    ...|D       |
00000380  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000390  20 20 e7 20 a6 2d 31 20  f2 62 69 6e 64 20 8b 20  |  . .-1 .bind . |
000003a0  c8 99 22 57 69 6d 70 5f  44 65 6c 65 74 65 57 69  |.."Wimp_DeleteWi|
000003b0  6e 64 6f 77 22 2c 2c 71  25 0d 01 86 1d 20 20 20  |ndow",,q%....   |
000003c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000003d0  20 20 20 20 20 cd 0d 01  90 12 20 20 20 20 20 20  |     .....      |
000003e0  20 20 20 20 20 20 20 cb  0d 01 9a 1a 20 c9 20 36  |       ..... . 6|
000003f0  20 20 20 20 20 3a f2 62  75 74 74 6f 6e 73 28 71  |     :.buttons(q|
00000400  25 29 0d 01 a4 1d 20 c9  20 39 20 20 20 20 20 3a  |%).... . 9     :|
00000410  f2 6d 65 6e 75 73 65 6c  65 63 74 28 71 25 29 0d  |.menuselect(q%).|
00000420  01 ae 1a 20 c9 20 31 37  2c 20 31 38 3a f2 72 65  |... . 17, 18:.re|
00000430  63 65 69 76 65 28 71 25  29 0d 01 b8 05 cb 0d 01  |ceive(q%).......|
00000440  c2 05 e1 0d 01 cc 04 0d  01 d6 0d dd f2 61 6e 6f  |.............ano|
00000450  74 68 65 72 0d 01 e0 34  c8 99 22 58 4f 53 5f 52  |ther...4.."XOS_R|
00000460  65 61 64 56 61 72 56 61  6c 22 2c 22 46 53 6e 75  |eadVarVal","FSnu|
00000470  6d 22 2c 62 75 66 66 65  72 25 2c 34 30 20 b8 2c  |m",buffer%,40 .,|
00000480  2c 65 78 69 73 74 73 25  0d 01 ea 12 e7 20 65 78  |,exists%..... ex|
00000490  69 73 74 73 25 3c 3e 30  20 8c 0d 01 f4 44 20 24  |ists%<>0 ....D $|
000004a0  71 25 3d c4 32 35 35 2c  bd 30 29 3a c8 99 22 4f  |q%=.255,.0):.."O|
000004b0  53 5f 52 65 61 64 56 61  72 56 61 6c 22 2c 22 54  |S_ReadVarVal","T|
000004c0  61 69 6c 22 2c 71 25 2c  32 35 35 3a 65 6e 76 24  |ail",q%,255:env$|
000004d0  3d a4 67 65 74 6e 61 6d  65 30 28 71 25 29 0d 01  |=.getname0(q%)..|
000004e0  fe 2e 20 f2 64 61 74 61  6c 6f 61 64 28 65 6e 76  |.. .dataload(env|
000004f0  24 29 3a c8 99 22 58 4f  53 5f 43 4c 49 22 2c 22  |$):.."XOS_CLI","|
00000500  55 4e 53 45 54 20 46 53  6e 75 6d 22 0d 02 08 05  |UNSET FSnum"....|
00000510  cd 0d 02 12 05 e1 0d 02  1c 04 0d 02 26 0c dd f2  |............&...|
00000520  75 70 63 61 6c 6c 0d 02  30 17 53 6c 6f 6f 70 25  |upcall..0.Sloop%|
00000530  3d 30 3a 44 6c 6f 6f 70  25 3d 30 3a f5 0d 02 3a  |=0:Dloop%=0:...:|
00000540  21 20 72 61 77 24 3d a4  67 65 74 6e 61 6d 65 30  |! raw$=.getname0|
00000550  28 64 61 74 61 25 2b 53  6c 6f 6f 70 25 29 0d 02  |(data%+Sloop%)..|
00000560  44 14 20 53 6c 6f 6f 70  25 2b 3d a9 72 61 77 24  |D. Sloop%+=.raw$|
00000570  2b 31 0d 02 4e 22 20 66  73 25 3d 3f 28 64 61 74  |+1..N" fs%=?(dat|
00000580  61 25 2b 53 6c 6f 6f 70  25 29 3a 53 6c 6f 6f 70  |a%+Sloop%):Sloop|
00000590  25 2b 3d 31 0d 02 58 3b  20 6e 61 6d 65 24 3d c0  |%+=1..X; name$=.|
000005a0  72 61 77 24 2c a7 72 61  77 24 2c 22 2e 22 29 2d  |raw$,.raw$,".")-|
000005b0  31 29 2b bd 30 3a e7 20  c0 6e 61 6d 65 24 2c 31  |1)+.0:. .name$,1|
000005c0  29 3c 3e 22 3a 22 20 6e  61 6d 65 24 3d bd 30 0d  |)<>":" name$=.0.|
000005d0  02 62 5d 20 e7 20 a4 63  6f 6d 70 61 72 65 28 6e  |.b] . .compare(n|
000005e0  61 6d 65 24 2c 66 73 25  29 20 24 28 64 61 74 61  |ame$,fs%) $(data|
000005f0  25 2b 44 6c 6f 6f 70 25  29 3d 6e 61 6d 65 24 3a  |%+Dloop%)=name$:|
00000600  44 6c 6f 6f 70 25 2b 3d  a9 6e 61 6d 65 24 3a 3f  |Dloop%+=.name$:?|
00000610  28 64 61 74 61 25 2b 44  6c 6f 6f 70 25 29 3d 66  |(data%+Dloop%)=f|
00000620  73 25 3a 44 6c 6f 6f 70  25 2b 3d 31 0d 02 6c 16  |s%:Dloop%+=1..l.|
00000630  fd 53 6c 6f 6f 70 25 3e  3d 21 63 6f 75 6e 74 65  |.Sloop%>=!counte|
00000640  72 25 0d 02 76 04 0d 02  80 0d 6c 6f 6f 70 25 3d  |r%..v.....loop%=|
00000650  30 3a f5 0d 02 8a 3a 20  72 61 77 24 3d a4 67 65  |0:....: raw$=.ge|
00000660  74 6e 61 6d 65 30 28 64  61 74 61 25 2b 6c 6f 6f  |tname0(data%+loo|
00000670  70 25 29 3a 6e 61 6d 65  24 3d 72 61 77 24 3a 6c  |p%):name$=raw$:l|
00000680  6f 6f 70 25 2b 3d a9 72  61 77 24 2b 31 0d 02 94  |oop%+=.raw$+1...|
00000690  20 20 66 73 25 3d 3f 28  64 61 74 61 25 2b 6c 6f  |  fs%=?(data%+lo|
000006a0  6f 70 25 29 3a 6c 6f 6f  70 25 2b 3d 31 0d 02 9e  |op%):loop%+=1...|
000006b0  3e 20 c8 99 22 4f 53 5f  46 53 43 6f 6e 74 72 6f  |> .."OS_FSContro|
000006c0  6c 22 2c 33 33 2c 66 73  25 2c 62 75 66 66 65 72  |l",33,fs%,buffer|
000006d0  25 2c 34 30 3a 66 73 24  3d a4 67 65 74 6e 61 6d  |%,40:fs$=.getnam|
000006e0  65 30 28 62 75 66 66 65  72 25 29 0d 02 a8 66 20  |e0(buffer%)...f |
000006f0  c8 99 22 4f 53 5f 41 72  67 73 22 20 b8 20 63 66  |.."OS_Args" . cf|
00000700  73 25 3a c8 99 22 4f 53  5f 46 53 43 6f 6e 74 72  |s%:.."OS_FSContr|
00000710  6f 6c 22 2c 31 34 2c 66  73 25 3a c8 99 22 4f 53  |ol",14,fs%:.."OS|
00000720  5f 46 53 43 6f 6e 74 72  6f 6c 22 2c 32 30 20 b8  |_FSControl",20 .|
00000730  20 2c 2c 70 72 69 76 25  3a c8 99 22 4f 53 5f 46  | ,,priv%:.."OS_F|
00000740  53 43 6f 6e 74 72 6f 6c  22 2c 31 34 2c 63 66 73  |SControl",14,cfs|
00000750  25 0d 02 b2 3f 20 21 62  75 66 66 65 72 25 3d 70  |%...? !buffer%=p|
00000760  72 69 76 25 3a c8 99 22  4f 53 5f 53 65 74 56 61  |riv%:.."OS_SetVa|
00000770  72 56 61 6c 22 2c 22 50  72 69 76 61 74 65 57 6f  |rVal","PrivateWo|
00000780  72 64 22 2c 62 75 66 66  65 72 25 2c 34 2c 2c 31  |rd",buffer%,4,,1|
00000790  0d 02 bc 37 20 21 62 75  66 66 65 72 25 3d 66 73  |...7 !buffer%=fs|
000007a0  25 3a c8 99 22 4f 53 5f  53 65 74 56 61 72 56 61  |%:.."OS_SetVarVa|
000007b0  6c 22 2c 22 46 53 6e 75  6d 22 2c 62 75 66 66 65  |l","FSnum",buffe|
000007c0  72 25 2c 34 2c 2c 31 0d  02 c6 20 20 66 69 6e 64  |r%,4,,1...  find|
000007d0  24 3d a4 74 72 61 6e 73  6e 61 6d 65 28 6e 61 6d  |$=.transname(nam|
000007e0  65 24 2c 66 73 25 29 0d  02 d0 1e 20 c8 99 22 58  |e$,fs%).... .."X|
000007f0  4f 53 5f 43 4c 49 22 2c  22 55 4e 53 45 54 20 46  |OS_CLI","UNSET F|
00000800  53 6e 75 6d 22 0d 02 da  1c 20 63 6c 69 24 3d 66  |Snum".... cli$=f|
00000810  73 24 2b 22 3a 46 52 45  45 20 22 2b 6e 61 6d 65  |s$+":FREE "+name|
00000820  24 0d 02 e4 32 20 e7 20  a4 66 69 6e 64 28 66 69  |$...2 . .find(fi|
00000830  6e 64 24 2c 66 73 24 2c  a3 29 20 c8 99 22 4f 53  |nd$,fs$,.) .."OS|
00000840  5f 43 4c 49 22 2c 63 6c  69 24 3a f2 61 6e 6f 74  |_CLI",cli$:.anot|
00000850  68 65 72 0d 02 ee 12 fd  6c 6f 6f 70 25 3e 3d 44  |her.....loop%>=D|
00000860  6c 6f 6f 70 25 0d 02 f8  0f 21 63 6f 75 6e 74 65  |loop%....!counte|
00000870  72 25 3d 30 0d 03 02 05  e1 0d 03 0c 04 0d 03 16  |r%=0............|
00000880  22 dd a4 63 6f 6d 70 61  72 65 28 6e 61 6d 65 24  |"..compare(name$|
00000890  2c 66 73 25 29 3a 20 ea  20 66 6f 75 6e 64 25 0d  |,fs%): . found%.|
000008a0  03 20 2a 6c 6f 6f 70 25  3d 30 3a c8 95 20 28 6c  |. *loop%=0:.. (l|
000008b0  6f 6f 70 25 3c 44 6c 6f  6f 70 25 29 20 80 20 28  |oop%<Dloop%) . (|
000008c0  66 6f 75 6e 64 25 3d a3  29 0d 03 2a 30 20 72 61  |found%=.)..*0 ra|
000008d0  77 24 3d a4 67 65 74 6e  61 6d 65 30 28 64 61 74  |w$=.getname0(dat|
000008e0  61 25 2b 6c 6f 6f 70 25  29 2b bd 30 3a 6c 6f 6f  |a%+loop%)+.0:loo|
000008f0  70 25 2b 3d a9 72 61 77  24 0d 03 34 23 20 72 61  |p%+=.raw$..4# ra|
00000900  77 66 73 25 3d 3f 28 64  61 74 61 25 2b 6c 6f 6f  |wfs%=?(data%+loo|
00000910  70 25 29 3a 6c 6f 6f 70  25 2b 3d 31 0d 03 3e 2b  |p%):loop%+=1..>+|
00000920  20 e7 20 28 72 61 77 24  3d 6e 61 6d 65 24 29 20  | . (raw$=name$) |
00000930  80 20 28 72 61 77 66 73  25 3d 66 73 25 29 20 66  |. (rawfs%=fs%) f|
00000940  6f 75 6e 64 25 3d b9 0d  03 48 05 ce 0d 03 52 18  |ound%=...H....R.|
00000950  e7 20 66 6f 75 6e 64 25  20 8c 20 3a 3d a3 20 8b  |. found% . :=. .|
00000960  20 3a 3d b9 0d 03 5c 04  0d 03 66 10 dd f2 69 6e  | :=...\...f...in|
00000970  69 74 69 61 6c 69 73 65  0d 03 70 24 de 20 71 25  |itialise..p$. q%|
00000980  20 26 34 35 30 2c 20 69  63 6f 6e 25 20 26 32 30  | &450, icon% &20|
00000990  30 2c 20 6d 65 6e 75 25  20 32 30 30 0d 03 7a 20  |0, menu% 200..z |
000009a0  de 20 65 72 72 6f 72 62  6c 6b 25 20 26 31 30 30  |. errorblk% &100|
000009b0  2c 20 62 75 66 66 65 72  25 20 34 30 0d 03 84 04  |, buffer% 40....|
000009c0  0d 03 8e 0e 24 71 25 3d  22 54 41 53 4b 22 0d 03  |....$q%="TASK"..|
000009d0  98 40 c8 99 22 57 69 6d  70 5f 49 6e 69 74 69 61  |.@.."Wimp_Initia|
000009e0  6c 69 73 65 22 2c 32 30  30 2c 20 21 71 25 2c 20  |lise",200, !q%, |
000009f0  22 44 69 73 63 20 46 72  65 65 20 53 70 61 63 65  |"Disc Free Space|
00000a00  22 20 b8 20 2c 20 6f 75  72 74 61 73 6b 25 0d 03  |" . , ourtask%..|
00000a10  a2 04 0d 03 ac 31 c8 99  22 57 69 6d 70 5f 4f 70  |.....1.."Wimp_Op|
00000a20  65 6e 54 65 6d 70 6c 61  74 65 22 2c 2c 22 3c 4f  |enTemplate",,"<O|
00000a30  62 65 79 24 44 69 72 3e  2e 54 65 6d 70 6c 61 74  |bey$Dir>.Templat|
00000a40  65 73 22 0d 03 b6 3b c8  99 22 57 69 6d 70 5f 4c  |es"...;.."Wimp_L|
00000a50  6f 61 64 54 65 6d 70 6c  61 74 65 22 2c 2c 71 25  |oadTemplate",,q%|
00000a60  2c 69 63 6f 6e 25 2c 69  63 6f 6e 25 2b 31 36 39  |,icon%,icon%+169|
00000a70  2c 2d 31 2c 22 69 6e 66  6f 50 44 22 2c 30 0d 03  |,-1,"infoPD",0..|
00000a80  c0 25 c8 99 22 57 69 6d  70 5f 43 72 65 61 74 65  |.%.."Wimp_Create|
00000a90  57 69 6e 64 6f 77 22 2c  2c 71 25 20 b8 20 69 6e  |Window",,q% . in|
00000aa0  66 6f 25 0d 03 ca 1e 24  28 69 63 6f 6e 25 2b 32  |fo%....$(icon%+2|
00000ab0  30 29 3d 76 65 72 73 69  6f 6e 24 2b 64 61 74 65  |0)=version$+date|
00000ac0  24 0d 03 d4 42 c8 99 22  57 69 6d 70 5f 4c 6f 61  |$...B.."Wimp_Loa|
00000ad0  64 54 65 6d 70 6c 61 74  65 22 2c 2c 71 25 2c 69  |dTemplate",,q%,i|
00000ae0  63 6f 6e 25 2b 31 37 30  2c 69 63 6f 6e 25 2b 31  |con%+170,icon%+1|
00000af0  37 30 2c 2d 31 2c 22 66  72 65 65 73 70 61 63 65  |70,-1,"freespace|
00000b00  22 2c 30 0d 03 de 2a c8  99 22 57 69 6d 70 5f 43  |",0...*.."Wimp_C|
00000b10  72 65 61 74 65 57 69 6e  64 6f 77 22 2c 2c 71 25  |reateWindow",,q%|
00000b20  20 b8 20 66 72 65 65 73  70 61 63 65 25 0d 03 e8  | . freespace%...|
00000b30  43 c8 99 22 57 69 6d 70  5f 4c 6f 61 64 54 65 6d  |C.."Wimp_LoadTem|
00000b40  70 6c 61 74 65 22 2c 2c  71 25 2c 69 63 6f 6e 25  |plate",,q%,icon%|
00000b50  2b 31 37 30 2c 69 63 6f  6e 25 2b 31 37 30 2c 2d  |+170,icon%+170,-|
00000b60  31 2c 22 62 69 6e 64 77  69 6e 64 6f 77 22 2c 30  |1,"bindwindow",0|
00000b70  0d 03 f2 2b c8 99 22 57  69 6d 70 5f 43 72 65 61  |...+.."Wimp_Crea|
00000b80  74 65 57 69 6e 64 6f 77  22 2c 2c 71 25 20 b8 20  |teWindow",,q% . |
00000b90  62 69 6e 64 77 69 6e 64  6f 77 25 0d 03 fc 1a c8  |bindwindow%.....|
00000ba0  99 22 57 69 6d 70 5f 43  6c 6f 73 65 54 65 6d 70  |."Wimp_CloseTemp|
00000bb0  6c 61 74 65 22 0d 04 06  05 20 0d 04 10 1d 71 75  |late".... ....qu|
00000bc0  69 74 25 3d a3 3a 79 70  6f 73 25 3d 59 25 3a 78  |it%=.:ypos%=Y%:x|
00000bd0  70 6f 73 25 3d 58 25 0d  04 1a 05 e1 0d 04 24 04  |pos%=X%.......$.|
00000be0  0d 04 2e 11 dd f2 62 75  74 74 6f 6e 73 28 71 25  |......buttons(q%|
00000bf0  29 0d 04 38 1b e7 20 28  71 25 21 38 20 80 32 29  |)..8.. (q%!8 .2)|
00000c00  3d 32 20 f2 6d 65 6e 75  28 71 25 29 0d 04 42 05  |=2 .menu(q%)..B.|
00000c10  e1 0d 04 4c 04 0d 04 56  11 dd f2 72 65 63 65 69  |...L...V...recei|
00000c20  76 65 28 71 25 29 0d 04  60 0e c8 8e 20 71 25 21  |ve(q%)..`... q%!|
00000c30  31 36 20 ca 0d 04 6a 10  20 c9 20 30 3a 71 75 69  |16 ...j. . 0:qui|
00000c40  74 25 3d b9 0d 04 74 05  cb 0d 04 7e 05 e1 0d 04  |t%=...t....~....|
00000c50  88 04 0d 04 92 0e dd f2  6d 65 6e 75 28 71 25 29  |........menu(q%)|
00000c60  0d 04 9c 04 0d 04 a6 21  f2 6d 5f 68 65 61 64 28  |.......!.m_head(|
00000c70  6d 65 6e 75 25 2c 22 46  72 65 65 53 70 61 63 65  |menu%,"FreeSpace|
00000c80  22 2c 31 30 29 0d 04 b0  30 f2 6d 5f 62 6c 6f 63  |",10)...0.m_bloc|
00000c90  6b 28 6d 65 6e 75 25 2b  32 38 2c 26 30 30 2c 69  |k(menu%+28,&00,i|
00000ca0  6e 66 6f 25 2c 26 37 30  30 30 30 30 31 2c 22 49  |nfo%,&7000001,"I|
00000cb0  6e 66 6f 22 29 0d 04 ba  2d f2 6d 5f 62 6c 6f 63  |nfo")...-.m_bloc|
00000cc0  6b 28 6d 65 6e 75 25 2b  35 32 2c 26 38 30 2c 2d  |k(menu%+52,&80,-|
00000cd0  31 2c 26 37 30 30 30 30  30 31 2c 22 51 75 69 74  |1,&7000001,"Quit|
00000ce0  22 29 0d 04 c4 04 0d 04  ce 2e c8 99 22 57 69 6d  |").........."Wim|
00000cf0  70 5f 43 72 65 61 74 65  4d 65 6e 75 22 2c 2c 6d  |p_CreateMenu",,m|
00000d00  65 6e 75 25 2c 71 25 21  30 2d 36 38 2c 71 25 21  |enu%,q%!0-68,q%!|
00000d10  34 2b 32 30 0d 04 d8 05  e1 0d 04 e2 04 0d 04 ec  |4+20............|
00000d20  2b dd f2 6d 5f 62 6c 6f  63 6b 28 62 61 73 65 25  |+..m_block(base%|
00000d30  2c 66 6c 61 67 25 2c 70  74 72 25 2c 69 63 66 6c  |,flag%,ptr%,icfl|
00000d40  25 2c 64 61 74 61 24 29  0d 04 f6 3e 62 61 73 65  |%,data$)...>base|
00000d50  25 21 30 3d 66 6c 61 67  25 3a 62 61 73 65 25 21  |%!0=flag%:base%!|
00000d60  34 3d 70 74 72 25 3a 62  61 73 65 25 21 38 3d 69  |4=ptr%:base%!8=i|
00000d70  63 66 6c 25 3a 24 28 62  61 73 65 25 2b 31 32 29  |cfl%:$(base%+12)|
00000d80  3d 64 61 74 61 24 0d 05  00 05 e1 0d 05 0a 04 0d  |=data$..........|
00000d90  05 14 20 dd f2 6d 5f 68  65 61 64 28 62 61 73 65  |.. ..m_head(base|
00000da0  25 2c 64 61 74 61 24 2c  77 69 64 74 68 25 29 0d  |%,data$,width%).|
00000db0  05 1e 4d 24 62 61 73 65  25 3d 64 61 74 61 24 3a  |..M$base%=data$:|
00000dc0  62 61 73 65 25 21 31 32  3d 26 30 30 30 37 30 32  |base%!12=&000702|
00000dd0  30 37 3a 62 61 73 65 25  21 31 36 3d 77 69 64 74  |07:base%!16=widt|
00000de0  68 25 2a 31 36 3a 62 61  73 65 25 21 32 30 3d 34  |h%*16:base%!20=4|
00000df0  34 3a 62 61 73 65 25 21  32 34 3d 30 0d 05 28 05  |4:base%!24=0..(.|
00000e00  e1 0d 05 32 04 0d 05 3c  1b dd f2 6d 65 6e 75 73  |...2...<...menus|
00000e10  65 6c 65 63 74 28 71 25  29 3a ea 20 73 74 61 79  |elect(q%):. stay|
00000e20  0d 05 46 2f c8 99 22 57  69 6d 70 5f 47 65 74 50  |..F/.."Wimp_GetP|
00000e30  6f 69 6e 74 65 72 49 6e  66 6f 22 2c 2c 71 25 2b  |ointerInfo",,q%+|
00000e40  33 32 3a 73 74 61 79 3d  71 25 21 34 30 3d 31 0d  |32:stay=q%!40=1.|
00000e50  05 50 0c c8 8e 20 21 71  25 20 ca 0d 05 5a 54 20  |.P... !q% ...ZT |
00000e60  c9 20 30 20 20 20 3a f4  71 25 21 35 32 3d 69 6e  |. 0   :.q%!52=in|
00000e70  66 6f 25 3a 53 59 53 22  57 69 6d 70 5f 47 65 74  |fo%:SYS"Wimp_Get|
00000e80  57 69 6e 64 6f 77 53 74  61 74 65 22 2c 2c 71 25  |WindowState",,q%|
00000e90  2b 35 32 3a 53 59 53 22  57 69 6d 70 5f 4f 70 65  |+52:SYS"Wimp_Ope|
00000ea0  6e 57 69 6e 64 6f 77 22  2c 2c 71 25 2b 35 32 0d  |nWindow",,q%+52.|
00000eb0  05 64 13 20 c9 20 31 20  20 20 3a 71 75 69 74 25  |.d. . 1   :quit%|
00000ec0  3d b9 0d 05 6e 05 cb 0d  05 78 19 e7 20 73 74 61  |=...n....x.. sta|
00000ed0  79 3d b9 20 f2 6d 65 6e  75 28 71 25 2b 33 32 29  |y=. .menu(q%+32)|
00000ee0  0d 05 82 05 e1 0d 05 8c  04 0d 05 96 15 dd f2 64  |...............d|
00000ef0  61 74 61 6c 6f 61 64 28  6e 61 6d 65 24 29 0d 05  |ataload(name$)..|
00000f00  a0 32 c8 99 22 58 4f 53  5f 52 65 61 64 56 61 72  |.2.."XOS_ReadVar|
00000f10  56 61 6c 22 2c 22 46 72  65 65 44 61 74 61 22 2c  |Val","FreeData",|
00000f20  71 25 2c 32 35 35 3a 66  72 65 65 24 3d 24 71 25  |q%,255:free$=$q%|
00000f30  0d 05 aa 2d c8 95 20 97  c2 66 72 65 65 24 2c 31  |...-.. ..free$,1|
00000f40  29 3c 33 33 20 66 72 65  65 24 3d c0 66 72 65 65  |)<33 free$=.free|
00000f50  24 2c a9 66 72 65 65 24  2d 31 29 3a ce 0d 05 b4  |$,.free$-1):....|
00000f60  35 e7 20 a7 66 72 65 65  24 2c 22 66 72 65 65 22  |5. .free$,"free"|
00000f70  29 3d 30 20 80 20 a7 66  72 65 65 24 2c 22 75 73  |)=0 . .free$,"us|
00000f80  65 64 22 29 3d 30 20 85  20 32 35 35 2c 66 72 65  |ed")=0 . 255,fre|
00000f90  65 24 0d 05 be 28 c8 99  22 4f 53 5f 52 65 61 64  |e$...(.."OS_Read|
00000fa0  56 61 72 56 61 6c 22 2c  22 46 53 6e 75 6d 22 2c  |VarVal","FSnum",|
00000fb0  62 75 66 66 65 72 25 2c  34 30 0d 05 c8 24 6e 61  |buffer%,40...$na|
00000fc0  6d 65 24 3d a4 74 72 61  6e 73 6e 61 6d 65 28 6e  |me$=.transname(n|
00000fd0  61 6d 65 24 2c 21 62 75  66 66 65 72 25 29 0d 05  |ame$,!buffer%)..|
00000fe0  d2 67 75 73 65 64 24 3d  c1 66 72 65 65 24 2c a7  |.gused$=.free$,.|
00000ff0  66 72 65 65 24 2c 22 75  73 65 64 20 22 29 2b 35  |free$,"used ")+5|
00001000  29 3a 66 72 65 65 24 3d  c0 66 72 65 65 24 2c a7  |):free$=.free$,.|
00001010  66 72 65 65 24 2c 22 42  79 74 65 73 20 75 73 65  |free$,"Bytes use|
00001020  64 20 22 29 29 3a 66 72  65 65 24 3d c1 66 72 65  |d ")):free$=.fre|
00001030  65 24 2c a7 66 72 65 65  24 2c 22 66 72 65 65 20  |e$,.free$,"free |
00001040  22 29 2b 35 29 0d 05 dc  41 75 73 65 64 25 3d a0  |")+5)...Aused%=.|
00001050  28 c0 75 73 65 64 24 2c  a7 75 73 65 64 24 2c 22  |(.used$,.used$,"|
00001060  3d 22 29 2d 31 29 29 3a  66 72 65 65 25 3d a0 28  |=")-1)):free%=.(|
00001070  c0 66 72 65 65 24 2c a7  66 72 65 65 24 2c 22 3d  |.free$,.free$,"=|
00001080  22 29 2d 31 29 29 0d 05  e6 0a f2 74 6f 74 61 6c  |")-1)).....total|
00001090  0d 05 f0 05 e1 0d 05 fa  04 0d 06 04 1a dd a4 74  |...............t|
000010a0  72 61 6e 73 6e 61 6d 65  28 6e 61 6d 65 24 2c 66  |ransname(name$,f|
000010b0  73 25 29 0d 06 0e 58 c8  99 22 58 4f 53 5f 52 65  |s%)...X.."XOS_Re|
000010c0  61 64 56 61 72 56 61 6c  22 2c 22 50 72 69 76 61  |adVarVal","Priva|
000010d0  74 65 57 6f 72 64 22 2c  62 75 66 66 65 72 25 2c  |teWord",buffer%,|
000010e0  34 30 20 b8 2c 2c 65 78  69 73 74 73 25 3a e7 20  |40 .,,exists%:. |
000010f0  65 78 69 73 74 73 25 3c  3e 30 20 8c 20 70 72 69  |exists%<>0 . pri|
00001100  76 25 3d 21 62 75 66 66  65 72 25 0d 06 18 10 e7  |v%=!buffer%.....|
00001110  20 6e 61 6d 65 24 3d 22  22 20 8c 0d 06 22 17 20  | name$="" ...". |
00001120  c8 99 22 4f 53 5f 41 72  67 73 22 20 b8 20 63 66  |.."OS_Args" . cf|
00001130  73 25 0d 06 2c 1c 20 c8  99 22 4f 53 5f 46 53 43  |s%..,. .."OS_FSC|
00001140  6f 6e 74 72 6f 6c 22 2c  31 34 2c 66 73 25 0d 06  |ontrol",14,fs%..|
00001150  36 51 20 c8 99 22 58 4f  53 5f 47 42 50 42 22 2c  |6Q .."XOS_GBPB",|
00001160  35 2c 2c 62 75 66 66 65  72 25 20 b8 3b 56 25 3a  |5,,buffer% .;V%:|
00001170  3f 28 62 75 66 66 65 72  25 2b 3f 62 75 66 66 65  |?(buffer%+?buffe|
00001180  72 25 2b 31 29 3d 31 33  3a 6e 61 6d 65 24 3d 22  |r%+1)=13:name$="|
00001190  3a 22 2b 24 28 62 75 66  66 65 72 25 2b 31 29 0d  |:"+$(buffer%+1).|
000011a0  06 40 2f 20 e7 20 28 24  28 62 75 66 66 65 72 25  |.@/ . ($(buffer%|
000011b0  2b 31 29 3d 22 22 22 55  6e 73 65 74 22 22 22 29  |+1)="""Unset""")|
000011c0  20 84 20 28 56 25 80 31  20 3d 31 29 20 8c 0d 06  | . (V%.1 =1) ...|
000011d0  4a 35 20 20 e7 20 65 78  69 73 74 73 25 3c 3e 30  |J5  . exists%<>0|
000011e0  20 44 25 3d 71 25 3a 43  25 3d 70 72 69 76 25 3a  | D%=q%:C%=priv%:|
000011f0  d6 20 44 72 69 76 65 73  20 8b 20 21 65 72 72 6f  |. Drives . !erro|
00001200  72 3d 31 0d 06 54 2c 20  20 e7 20 21 65 72 72 6f  |r=1..T,  . !erro|
00001210  72 3d 30 20 6e 61 6d 65  24 3d 22 3a 22 2b c3 21  |r=0 name$=":"+.!|
00001220  71 25 20 8b 20 6e 61 6d  65 24 3d 22 3a 30 22 0d  |q% . name$=":0".|
00001230  06 5e 06 20 cd 0d 06 68  1d 20 c8 99 22 4f 53 5f  |.^. ...h. .."OS_|
00001240  46 53 43 6f 6e 74 72 6f  6c 22 2c 31 34 2c 63 66  |FSControl",14,cf|
00001250  73 25 0d 06 72 05 cd 0d  06 7c 24 e7 20 c0 6e 61  |s%..r....|$. .na|
00001260  6d 65 24 2c 31 29 3c 3e  22 3a 22 20 6e 61 6d 65  |me$,1)<>":" name|
00001270  24 3d 22 3a 22 2b 6e 61  6d 65 24 0d 06 86 12 e7  |$=":"+name$.....|
00001280  20 65 78 69 73 74 73 25  3c 3e 30 20 8c 0d 06 90  | exists%<>0 ....|
00001290  11 20 24 71 25 3d 6e 61  6d 65 24 2b bd 30 0d 06  |. $q%=name$+.0..|
000012a0  9a 2c 20 41 25 3d 71 25  3a 42 25 3d 71 25 2b 26  |., A%=q%:B%=q%+&|
000012b0  31 30 3a 43 25 3d 70 72  69 76 25 3a d6 20 44 65  |10:C%=priv%:. De|
000012c0  73 63 72 69 62 65 44 69  73 63 0d 06 a4 36 20 e7  |scribeDisc...6 .|
000012d0  20 21 65 72 72 6f 72 3d  30 20 71 25 3f 26 33 30  | !error=0 q%?&30|
000012e0  3d 31 33 3a 6e 61 6d 65  24 3d 22 3a 22 2b a4 67  |=13:name$=":"+.g|
000012f0  65 74 6e 61 6d 65 33 32  28 71 25 2b 26 32 36 29  |etname32(q%+&26)|
00001300  0d 06 ae 05 cd 0d 06 b8  23 c8 99 22 58 4f 53 5f  |........#.."XOS_|
00001310  43 4c 49 22 2c 22 55 4e  53 45 54 20 50 72 69 76  |CLI","UNSET Priv|
00001320  61 74 65 57 6f 72 64 22  0d 06 c2 0a 3d 6e 61 6d  |ateWord"....=nam|
00001330  65 24 0d 06 cc 04 0d 06  d6 14 dd a4 67 65 74 6e  |e$..........getn|
00001340  61 6d 65 30 28 70 74 72  25 29 0d 06 e0 09 70 24  |ame0(ptr%)....p$|
00001350  3d 22 22 0d 06 ea 0e c8  95 3f 70 74 72 25 3c 3e  |=""......?ptr%<>|
00001360  30 0d 06 f4 0f 20 70 24  2b 3d bd 3f 70 74 72 25  |0.... p$+=.?ptr%|
00001370  0d 06 fe 0c 20 70 74 72  25 2b 3d 31 0d 07 08 05  |.... ptr%+=1....|
00001380  ce 0d 07 12 07 3d 70 24  0d 07 1c 04 0d 07 26 15  |.....=p$......&.|
00001390  dd a4 67 65 74 6e 61 6d  65 33 32 28 70 74 72 25  |..getname32(ptr%|
000013a0  29 0d 07 30 09 70 24 3d  22 22 0d 07 3a 0e c8 95  |)..0.p$=""..:...|
000013b0  3f 70 74 72 25 3e 33 32  0d 07 44 0f 20 70 24 2b  |?ptr%>32..D. p$+|
000013c0  3d bd 3f 70 74 72 25 0d  07 4e 0c 20 70 74 72 25  |=.?ptr%..N. ptr%|
000013d0  2b 3d 31 0d 07 58 05 ce  0d 07 62 07 3d 70 24 0d  |+=1..X....b.=p$.|
000013e0  07 6c 04 0d 07 76 16 dd  a4 63 6f 6e 76 28 61 25  |.l...v...conv(a%|
000013f0  29 3a ea 20 6e 25 2c 61  24 0d 07 80 0b e3 6e 25  |):. n%,a$.....n%|
00001400  3d 30 b8 33 0d 07 8a 33  e7 20 28 28 61 25 3e 3e  |=0.3...3. ((a%>>|
00001410  28 6e 25 2a 38 29 29 80  26 46 46 29 3e 33 32 20  |(n%*8)).&FF)>32 |
00001420  61 24 2b 3d bd 28 28 61  25 3e 3e 28 6e 25 2a 38  |a$+=.((a%>>(n%*8|
00001430  29 29 80 26 46 46 29 0d  07 94 05 ed 0d 07 9e 07  |)).&FF).........|
00001440  3d 61 24 0d 07 a8 04 0d  07 b2 18 dd f2 74 6f 74  |=a$..........tot|
00001450  61 6c 3a ea 20 78 25 2c  77 77 25 2c 69 78 25 0d  |al:. x%,ww%,ix%.|
00001460  07 bc 35 c8 99 22 4f 53  5f 52 65 61 64 56 61 72  |..5.."OS_ReadVar|
00001470  56 61 6c 22 2c 22 46 53  6e 75 6d 22 2c 62 75 66  |Val","FSnum",buf|
00001480  66 65 72 25 2c 34 30 3a  66 73 25 3d 21 62 75 66  |fer%,40:fs%=!buf|
00001490  66 65 72 25 0d 07 c6 26  c8 99 22 4f 53 5f 46 53  |fer%...&.."OS_FS|
000014a0  43 6f 6e 74 72 6f 6c 22  2c 33 33 2c 66 73 25 2c  |Control",33,fs%,|
000014b0  62 75 66 66 65 72 25 2c  34 30 0d 07 d0 1a 66 73  |buffer%,40....fs|
000014c0  24 3d a4 67 65 74 6e 61  6d 65 30 28 62 75 66 66  |$=.getname0(buff|
000014d0  65 72 25 29 0d 07 da 2f  e7 20 a7 6e 61 6d 65 24  |er%).../. .name$|
000014e0  2c 22 20 22 29 3e 30 20  6e 61 6d 65 24 3d c0 6e  |," ")>0 name$=.n|
000014f0  61 6d 65 24 2c a7 6e 61  6d 65 24 2c 22 20 22 29  |ame$,.name$," ")|
00001500  2d 31 29 0d 07 e4 55 e7  20 a4 66 69 6e 64 28 6e  |-1)...U. .find(n|
00001510  61 6d 65 24 2c 66 73 24  2c b9 29 20 78 25 3d 71  |ame$,fs$,.) x%=q|
00001520  25 21 34 3a 77 77 25 3d  71 25 21 31 36 20 8b 20  |%!4:ww%=q%!16 . |
00001530  78 25 3d 78 70 6f 73 25  3a 77 77 25 3d 79 70 6f  |x%=xpos%:ww%=ypo|
00001540  73 25 3a 79 70 6f 73 25  2d 3d 34 34 3a f2 72 61  |s%:ypos%-=44:.ra|
00001550  6e 67 65 63 68 65 63 6b  0d 07 ee 2e 71 25 21 30  |ngecheck....q%!0|
00001560  3d 66 72 65 65 73 70 61  63 65 25 3a c8 99 22 57  |=freespace%:.."W|
00001570  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 49 6e 66  |imp_GetWindowInf|
00001580  6f 22 2c 2c 71 25 0d 07  f8 23 f2 70 6f 6b 65 28  |o",,q%...#.poke(|
00001590  a4 70 61 64 28 66 72 65  65 25 29 2c 34 2b 71 25  |.pad(free%),4+q%|
000015a0  2b 38 38 2b 32 30 2b 30  29 0d 08 02 24 f2 70 6f  |+88+20+0)...$.po|
000015b0  6b 65 28 a4 70 61 64 28  75 73 65 64 25 29 2c 34  |ke(.pad(used%),4|
000015c0  2b 71 25 2b 38 38 2b 32  30 2b 33 32 29 0d 08 0c  |+q%+88+20+32)...|
000015d0  1c f2 70 6f 6b 65 28 66  73 24 2c 34 2b 71 25 2b  |..poke(fs$,4+q%+|
000015e0  38 38 2b 32 30 2b 36 34  29 0d 08 16 18 f2 70 6f  |88+20+64).....po|
000015f0  6b 65 28 6e 61 6d 65 24  2c 34 2b 71 25 2b 37 32  |ke(name$,4+q%+72|
00001600  29 0d 08 20 45 69 78 25  3d 21 28 34 2b 71 25 2b  |).. Eix%=!(4+q%+|
00001610  38 38 2b 38 2b 31 32 38  29 2d 21 28 34 2b 71 25  |88+8+128)-!(4+q%|
00001620  2b 38 38 2b 30 2b 31 32  38 29 3a 69 78 25 3d 69  |+88+0+128):ix%=i|
00001630  78 25 2a 75 73 65 64 25  2f 28 75 73 65 64 25 2b  |x%*used%/(used%+|
00001640  66 72 65 65 25 29 0d 08  2a 29 21 28 34 2b 71 25  |free%)..*)!(4+q%|
00001650  2b 38 38 2b 38 2b 31 32  38 29 3d 21 28 34 2b 71  |+88+8+128)=!(4+q|
00001660  25 2b 38 38 2b 30 2b 31  32 38 29 2b 69 78 25 0d  |%+88+0+128)+ix%.|
00001670  08 34 04 0d 08 3e 27 c8  99 22 57 69 6d 70 5f 43  |.4...>'.."Wimp_C|
00001680  72 65 61 74 65 57 69 6e  64 6f 77 22 2c 2c 71 25  |reateWindow",,q%|
00001690  2b 34 20 b8 20 64 75 6d  6d 79 0d 08 48 0e 71 25  |+4 . dummy..H.q%|
000016a0  21 30 3d 64 75 6d 6d 79  0d 08 52 19 71 25 21 38  |!0=dummy..R.q%!8|
000016b0  3d 77 77 25 2d 28 71 25  21 31 36 2d 71 25 21 38  |=ww%-(q%!16-q%!8|
000016c0  29 0d 08 5c 19 71 25 21  31 32 3d 78 25 2b 28 71  |)..\.q%!12=x%+(q|
000016d0  25 21 31 32 2d 71 25 21  34 29 0d 08 66 2d 71 25  |%!12-q%!4)..f-q%|
000016e0  21 34 3d 78 25 3a 71 25  21 31 36 3d 77 77 25 3a  |!4=x%:q%!16=ww%:|
000016f0  c8 99 22 57 69 6d 70 5f  4f 70 65 6e 57 69 6e 64  |.."Wimp_OpenWind|
00001700  6f 77 22 2c 2c 71 25 0d  08 70 04 0d 08 7a 05 e1  |ow",,q%..p...z..|
00001710  0d 08 84 04 0d 08 8e 24  dd f2 70 6f 6b 65 28 61  |.......$..poke(a|
00001720  24 2c 61 25 29 3a ea 20  6e 25 3a 61 24 3d c0 61  |$,a%):. n%:a$=.a|
00001730  24 2b bd 30 2c 31 32 29  0d 08 98 13 61 24 2b 3d  |$+.0,12)....a$+=|
00001740  c4 31 32 2d a9 61 24 2c  bd 30 29 0d 08 a2 24 e3  |.12-.a$,.0)...$.|
00001750  6e 25 3d 30 b8 a9 61 24  2d 31 3a 61 25 3f 6e 25  |n%=0..a$-1:a%?n%|
00001760  3d 97 c1 61 24 2c 6e 25  2b 31 2c 31 29 3a ed 0d  |=..a$,n%+1,1):..|
00001770  08 ac 05 e1 0d 08 b6 04  0d 08 c0 18 dd a4 70 61  |..............pa|
00001780  64 28 61 25 29 3a ea 20  61 24 2c 6e 25 2c 69 25  |d(a%):. a$,n%,i%|
00001790  0d 08 ca 23 61 24 3d c3  61 25 3a 69 25 3d 28 a9  |...#a$=.a%:i%=(.|
000017a0  61 24 20 81 33 29 2b 28  28 a9 61 24 20 83 33 29  |a$ .3)+((.a$ .3)|
000017b0  3d 30 29 0d 08 d4 13 e7  20 a9 61 24 3c 34 20 3a  |=0)..... .a$<4 :|
000017c0  3d 61 24 2b bd 30 0d 08  de 0c e3 6e 25 3d 31 b8  |=a$+.0.....n%=1.|
000017d0  69 25 0d 08 e8 32 61 24  3d c0 61 24 2c a9 61 24  |i%...2a$=.a$,.a$|
000017e0  2d 33 2a 6e 25 2d 6e 25  2b 31 29 2b 22 2c 22 2b  |-3*n%-n%+1)+","+|
000017f0  c1 61 24 2c 31 2b a9 61  24 2d 33 2a 6e 25 2d 6e  |.a$,1+.a$-3*n%-n|
00001800  25 2b 31 29 0d 08 f2 05  ed 0d 08 fc 13 61 24 2b  |%+1).........a$+|
00001810  3d bd 30 3a 3d c0 61 24  2c 31 32 29 0d 09 06 04  |=.0:=.a$,12)....|
00001820  0d 09 10 10 dd f2 72 61  6e 67 65 63 68 65 63 6b  |......rangecheck|
00001830  0d 09 1a 10 e7 79 70 6f  73 25 3c 32 30 30 20 8c  |.....ypos%<200 .|
00001840  0d 09 24 17 20 79 70 6f  73 25 3d 59 25 3a 78 70  |..$. ypos%=Y%:xp|
00001850  6f 73 25 2b 3d 38 34 0d  09 2e 19 20 e7 78 70 6f  |os%+=84.... .xpo|
00001860  73 25 3e 31 30 30 30 20  78 70 6f 73 25 3d 58 25  |s%>1000 xpos%=X%|
00001870  0d 09 38 05 cd 0d 09 42  05 e1 0d 09 4c 04 0d 09  |..8....B....L...|
00001880  56 09 dd f2 65 6e 76 0d  09 60 2a c8 99 22 4f 53  |V...env..`*.."OS|
00001890  5f 47 65 74 45 6e 76 22  20 b8 20 65 6e 76 24 3a  |_GetEnv" . env$:|
000018a0  49 25 3d a7 65 6e 76 24  2c 22 2d 71 75 69 74 22  |I%=.env$,"-quit"|
000018b0  29 0d 09 6a 3c 49 25 3d  a7 65 6e 76 24 2c 22 22  |)..j<I%=.env$,""|
000018c0  22 22 2c 49 25 2b 31 29  3a 49 25 3d a7 65 6e 76  |"",I%+1):I%=.env|
000018d0  24 2c 22 22 22 22 2c 49  25 2b 31 29 3a 65 6e 76  |$,"""",I%+1):env|
000018e0  24 3d c1 65 6e 76 24 2c  49 25 2b 31 29 0d 09 74  |$=.env$,I%+1)..t|
000018f0  22 c8 95 c0 65 6e 76 24  2c 31 29 3d 22 20 22 3a  |"...env$,1)=" ":|
00001900  65 6e 76 24 3d c1 65 6e  76 24 2c 32 29 3a ce 0d  |env$=.env$,2):..|
00001910  09 7e 2a 78 24 3d c0 65  6e 76 24 2c a7 65 6e 76  |.~*x$=.env$,.env|
00001920  24 2c 22 20 22 29 2d 31  29 3a 79 24 3d c1 65 6e  |$," ")-1):y$=.en|
00001930  76 24 2c a9 78 24 2b 31  29 0d 09 88 11 58 25 3d  |v$,.x$+1)....X%=|
00001940  a0 78 24 3a 59 25 3d a0  79 24 0d 09 92 05 e1 0d  |.x$:Y%=.y$......|
00001950  09 9c 04 0d 09 a6 23 dd  a4 66 69 6e 64 28 6e 61  |......#..find(na|
00001960  6d 65 24 2c 66 73 24 2c  64 65 6c 25 29 3a ea 20  |me$,fs$,del%):. |
00001970  68 25 2c 72 32 25 0d 09  b0 19 6e 61 6d 65 24 2b  |h%,r2%....name$+|
00001980  3d c4 31 32 2d a9 6e 61  6d 65 24 2c bd 30 29 0d  |=.12-.name$,.0).|
00001990  09 ba 15 66 73 24 2b 3d  c4 31 32 2d a9 66 73 24  |...fs$+=.12-.fs$|
000019a0  2c bd 30 29 0d 09 c4 1b  f2 69 6e 76 69 73 69 62  |,.0).....invisib|
000019b0  6c 65 28 62 69 6e 64 77  69 6e 64 6f 77 25 29 0d  |le(bindwindow%).|
000019c0  09 ce 1f c8 99 22 57 69  6d 70 5f 47 65 74 57 69  |....."Wimp_GetWi|
000019d0  6e 64 6f 77 53 74 61 74  65 22 2c 2c 71 25 0d 09  |ndowState",,q%..|
000019e0  d8 0c 68 25 3d 71 25 21  32 38 0d 09 e2 05 f5 0d  |..h%=q%!28......|
000019f0  09 ec 28 20 71 25 21 30  3d 68 25 3a c8 99 22 57  |..( q%!0=h%:.."W|
00001a00  69 6d 70 5f 47 65 74 57  69 6e 64 6f 77 53 74 61  |imp_GetWindowSta|
00001a10  74 65 22 2c 2c 71 25 0d  09 f6 32 20 71 25 21 33  |te",,q%...2 q%!3|
00001a20  30 30 3d 32 30 3a 71 25  21 33 30 34 3d 30 3a 71  |00=20:q%!304=0:q|
00001a30  25 21 33 30 38 3d 30 3a  71 25 21 33 31 32 3d 30  |%!308=0:q%!312=0|
00001a40  3a 71 25 21 33 31 36 3d  30 0d 0a 00 2e 20 c8 99  |:q%!316=0.... ..|
00001a50  22 57 69 6d 70 5f 53 65  6e 64 4d 65 73 73 61 67  |"Wimp_SendMessag|
00001a60  65 22 2c 31 39 2c 71 25  2b 33 30 30 2c 68 25 20  |e",19,q%+300,h% |
00001a70  b8 20 2c 2c 72 32 25 0d  0a 0a 2e 20 e7 20 72 32  |. ,,r2%.... . r2|
00001a80  25 3d 6f 75 72 74 61 73  6b 25 20 c8 99 22 57 69  |%=ourtask% .."Wi|
00001a90  6d 70 5f 47 65 74 57 69  6e 64 6f 77 49 6e 66 6f  |mp_GetWindowInfo|
00001aa0  22 2c 2c 71 25 0d 0a 14  21 20 71 25 3f 38 38 3d  |",,q%...! q%?88=|
00001ab0  31 33 3a 3f 28 34 2b 71  25 2b 38 38 2b 33 32 2b  |13:?(4+q%+88+32+|
00001ac0  36 34 29 3d 31 33 0d 0a  1e 5a 20 e7 20 72 32 25  |64)=13...Z . r2%|
00001ad0  3d 6f 75 72 74 61 73 6b  25 20 80 20 24 28 71 25  |=ourtask% . $(q%|
00001ae0  2b 37 36 29 3d 6e 61 6d  65 24 20 80 20 24 28 34  |+76)=name$ . $(4|
00001af0  2b 71 25 2b 38 38 2b 32  30 2b 36 34 29 3d 66 73  |+q%+88+20+64)=fs|
00001b00  24 20 80 20 68 25 3c 3e  69 6e 66 6f 25 20 80 20  |$ . h%<>info% . |
00001b10  68 25 3c 3e 66 72 65 65  73 70 61 63 65 25 20 8c  |h%<>freespace% .|
00001b20  0d 0a 28 26 20 20 e7 20  64 65 6c 25 20 c8 99 22  |..(&  . del% .."|
00001b30  57 69 6d 70 5f 44 65 6c  65 74 65 57 69 6e 64 6f  |Wimp_DeleteWindo|
00001b40  77 22 2c 2c 71 25 0d 0a  32 32 20 20 71 25 21 30  |w",,q%..22  q%!0|
00001b50  3d 62 69 6e 64 77 69 6e  64 6f 77 25 3a c8 99 22  |=bindwindow%:.."|
00001b60  57 69 6d 70 5f 43 6c 6f  73 65 57 69 6e 64 6f 77  |Wimp_CloseWindow|
00001b70  22 2c 2c 71 25 3a 3d b9  0d 0a 3c 06 20 cd 0d 0a  |",,q%:=...<. ...|
00001b80  46 0d 20 68 25 3d 71 25  21 32 38 0d 0a 50 0a fd  |F. h%=q%!28..P..|
00001b90  68 25 3d 2d 31 0d 0a 5a  2d 71 25 21 30 3d 62 69  |h%=-1..Z-q%!0=bi|
00001ba0  6e 64 77 69 6e 64 6f 77  25 3a c8 99 22 57 69 6d  |ndwindow%:.."Wim|
00001bb0  70 5f 43 6c 6f 73 65 57  69 6e 64 6f 77 22 2c 2c  |p_CloseWindow",,|
00001bc0  71 25 0d 0a 64 06 3d a3  0d 0a 6e 04 0d 0a 78 13  |q%..d.=...n...x.|
00001bd0  dd f2 62 69 6e 64 3a ea  20 68 25 2c 72 32 25 0d  |..bind:. h%,r2%.|
00001be0  0a 82 1b f2 69 6e 76 69  73 69 62 6c 65 28 62 69  |....invisible(bi|
00001bf0  6e 64 77 69 6e 64 6f 77  25 29 0d 0a 8c 1f c8 99  |ndwindow%)......|
00001c00  22 57 69 6d 70 5f 47 65  74 57 69 6e 64 6f 77 53  |"Wimp_GetWindowS|
00001c10  74 61 74 65 22 2c 2c 71  25 0d 0a 96 0c 68 25 3d  |tate",,q%....h%=|
00001c20  71 25 21 32 38 0d 0a a0  05 f5 0d 0a aa 28 20 71  |q%!28........( q|
00001c30  25 21 30 3d 68 25 3a c8  99 22 57 69 6d 70 5f 47  |%!0=h%:.."Wimp_G|
00001c40  65 74 57 69 6e 64 6f 77  53 74 61 74 65 22 2c 2c  |etWindowState",,|
00001c50  71 25 0d 0a b4 32 20 71  25 21 31 30 30 3d 32 30  |q%...2 q%!100=20|
00001c60  3a 71 25 21 31 30 34 3d  30 3a 71 25 21 31 30 38  |:q%!104=0:q%!108|
00001c70  3d 30 3a 71 25 21 31 31  32 3d 30 3a 71 25 21 31  |=0:q%!112=0:q%!1|
00001c80  31 36 3d 30 0d 0a be 2e  20 c8 99 22 57 69 6d 70  |16=0.... .."Wimp|
00001c90  5f 53 65 6e 64 4d 65 73  73 61 67 65 22 2c 31 39  |_SendMessage",19|
00001ca0  2c 71 25 2b 31 30 30 2c  68 25 20 b8 20 2c 2c 72  |,q%+100,h% . ,,r|
00001cb0  32 25 0d 0a c8 4a 20 e7  20 72 32 25 3d 6f 75 72  |2%...J . r2%=our|
00001cc0  74 61 73 6b 25 20 80 20  68 25 3c 3e 69 6e 66 6f  |task% . h%<>info|
00001cd0  25 20 80 20 68 25 3c 3e  66 72 65 65 73 70 61 63  |% . h%<>freespac|
00001ce0  65 25 20 c8 99 22 57 69  6d 70 5f 44 65 6c 65 74  |e% .."Wimp_Delet|
00001cf0  65 57 69 6e 64 6f 77 22  2c 2c 71 25 0d 0a d2 0d  |eWindow",,q%....|
00001d00  20 68 25 3d 71 25 21 32  38 0d 0a dc 0a fd 68 25  | h%=q%!28.....h%|
00001d10  3d 2d 31 0d 0a e6 2d 71  25 21 30 3d 62 69 6e 64  |=-1...-q%!0=bind|
00001d20  77 69 6e 64 6f 77 25 3a  c8 99 22 57 69 6d 70 5f  |window%:.."Wimp_|
00001d30  43 6c 6f 73 65 57 69 6e  64 6f 77 22 2c 2c 71 25  |CloseWindow",,q%|
00001d40  0d 0a f0 05 e1 0d 0a fa  04 0d 0b 04 13 dd f2 69  |...............i|
00001d50  6e 76 69 73 69 62 6c 65  28 68 25 29 0d 0b 0e 27  |nvisible(h%)...'|
00001d60  71 25 21 30 3d 68 25 3a  c8 99 22 57 69 6d 70 5f  |q%!0=h%:.."Wimp_|
00001d70  47 65 74 57 69 6e 64 6f  77 53 74 61 74 65 22 2c  |GetWindowState",|
00001d80  2c 71 25 0d 0b 18 39 71  25 21 34 3d 2d 31 32 38  |,q%...9q%!4=-128|
00001d90  30 3a 71 25 21 38 3d 2d  31 30 32 34 3a 71 25 21  |0:q%!8=-1024:q%!|
00001da0  31 32 3d 2d 31 30 38 30  3a 71 25 21 31 36 3d 2d  |12=-1080:q%!16=-|
00001db0  38 32 34 3a 71 25 21 32  38 3d 2d 32 0d 0b 22 1b  |824:q%!28=-2..".|
00001dc0  c8 99 22 57 69 6d 70 5f  4f 70 65 6e 57 69 6e 64  |.."Wimp_OpenWind|
00001dd0  6f 77 22 2c 2c 71 25 0d  0b 2c 05 e1 0d 0b 36 04  |ow",,q%..,....6.|
00001de0  0d 0b 40 24 dd f2 66 69  6c 65 72 6f 70 65 6e 28  |..@$..fileropen(|
00001df0  68 25 29 3a ea 20 63 6c  69 24 2c 66 73 24 2c 64  |h%):. cli$,fs$,d|
00001e00  69 73 63 24 0d 0b 4a 26  71 25 21 30 3d 68 25 3a  |isc$..J&q%!0=h%:|
00001e10  c8 99 22 57 69 6d 70 5f  47 65 74 57 69 6e 64 6f  |.."Wimp_GetWindo|
00001e20  77 49 6e 66 6f 22 2c 2c  71 25 0d 0b 54 20 71 25  |wInfo",,q%..T q%|
00001e30  3f 38 38 3d 31 33 3a 3f  28 34 2b 71 25 2b 38 38  |?88=13:?(4+q%+88|
00001e40  2b 33 32 2b 36 34 29 3d  31 33 0d 0b 5e 53 66 73  |+32+64)=13..^Sfs|
00001e50  24 3d c0 24 28 34 2b 71  25 2b 38 38 2b 32 30 2b  |$=.$(4+q%+88+20+|
00001e60  36 34 29 2c a7 24 28 34  2b 71 25 2b 38 38 2b 32  |64),.$(4+q%+88+2|
00001e70  30 2b 36 34 29 2c bd 30  29 2d 31 29 3a 64 69 73  |0+64),.0)-1):dis|
00001e80  63 24 3d c0 24 28 71 25  2b 37 36 29 2c a7 24 28  |c$=.$(q%+76),.$(|
00001e90  71 25 2b 37 36 29 2c bd  30 29 2d 31 29 0d 0b 68  |q%+76),.0)-1)..h|
00001ea0  1a e7 20 66 73 24 3d 22  64 69 73 63 22 20 66 73  |.. fs$="disc" fs|
00001eb0  24 3d 22 64 66 73 22 0d  0b 72 2f e7 20 66 73 24  |$="dfs"..r/. fs$|
00001ec0  3d 22 72 61 6d 22 20 66  73 24 3d 22 52 41 4d 22  |="ram" fs$="RAM"|
00001ed0  3a 64 69 73 63 24 3d 22  22 20 8b 20 64 69 73 63  |:disc$="" . disc|
00001ee0  24 2b 3d 22 2e 22 0d 0b  7c 2b 63 6c 69 24 3d 22  |$+="."..|+cli$="|
00001ef0  46 69 6c 65 72 5f 4f 70  65 6e 44 69 72 20 22 2b  |Filer_OpenDir "+|
00001f00  66 73 24 2b 22 3a 22 2b  64 69 73 63 24 2b 22 24  |fs$+":"+disc$+"$|
00001f10  22 0d 0b 86 14 c8 99 22  58 4f 53 5f 43 4c 49 22  |"......"XOS_CLI"|
00001f20  2c 63 6c 69 24 0d 0b 90  05 e1 0d 0b 9a 04 0d 0b  |,cli$...........|
00001f30  a4 0b dd f2 65 72 72 6f  72 0d 0b ae 57 21 65 72  |....error...W!er|
00001f40  72 6f 72 62 6c 6b 25 3d  30 3a 24 28 65 72 72 6f  |rorblk%=0:$(erro|
00001f50  72 62 6c 6b 25 2b 34 29  3d f6 24 2b bd 30 3a c8  |rblk%+4)=.$+.0:.|
00001f60  99 22 57 69 6d 70 5f 52  65 70 6f 72 74 45 72 72  |."Wimp_ReportErr|
00001f70  6f 72 22 2c 65 72 72 6f  72 62 6c 6b 25 2c 25 31  |or",errorblk%,%1|
00001f80  30 30 31 30 2c 22 46 72  65 65 53 70 61 63 65 22  |0010,"FreeSpace"|
00001f90  0d 0b b8 0f 21 63 6f 75  6e 74 65 72 25 3d 30 0d  |....!counter%=0.|
00001fa0  0b c2 23 c8 99 22 58 4f  53 5f 43 4c 49 22 2c 22  |..#.."XOS_CLI","|
00001fb0  55 4e 53 45 54 20 50 72  69 76 61 74 65 57 6f 72  |UNSET PrivateWor|
00001fc0  64 22 0d 0b cc 1d c8 99  22 58 4f 53 5f 43 4c 49  |d"......"XOS_CLI|
00001fd0  22 2c 22 55 4e 53 45 54  20 46 53 6e 75 6d 22 0d  |","UNSET FSnum".|
00001fe0  0b d6 1c c8 99 22 58 4f  53 5f 43 4c 49 22 2c 22  |....."XOS_CLI","|
00001ff0  55 4e 53 45 54 20 54 61  69 6c 22 0d 0b e0 20 c8  |UNSET Tail"... .|
00002000  99 22 58 4f 53 5f 43 4c  49 22 2c 22 55 4e 53 45  |."XOS_CLI","UNSE|
00002010  54 20 46 72 65 65 44 61  74 61 22 0d 0b ea 05 e1  |T FreeData".....|
00002020  0d 0b f4 04 0d 0b fe 5d  f4 20 6e 65 65 64 20 74  |.......]. need t|
00002030  68 69 73 20 63 6f 64 65  20 27 63 6f 73 20 74 68  |his code 'cos th|
00002040  65 20 73 69 6c 6c 79 20  53 59 53 20 63 6f 6d 6d  |e silly SYS comm|
00002050  61 6e 64 20 6f 6e 6c 79  20 70 61 73 73 65 73 20  |and only passes |
00002060  72 30 2d 72 37 20 28 61  6e 64 20 70 72 69 76 61  |r0-r7 (and priva|
00002070  74 65 20 77 6f 72 64 20  69 73 20 69 6e 20 72 38  |te word is in r8|
00002080  29 0d 0c 08 0e dd f2 61  73 73 65 6d 62 6c 65 0d  |)......assemble.|
00002090  0c 12 0f de 20 63 6f 64  65 25 20 31 30 30 0d 0c  |.... code% 100..|
000020a0  1c 10 e3 70 61 73 73 25  3d 30 b8 32 88 32 0d 0c  |...pass%=0.2.2..|
000020b0  26 0c 50 25 3d 63 6f 64  65 25 0d 0c 30 0d 5b 4f  |&.P%=code%..0.[O|
000020c0  50 54 70 61 73 73 25 0d  0c 3a 11 2e 44 65 73 63  |PTpass%..:..Desc|
000020d0  72 69 62 65 44 69 73 63  0d 0c 44 0f 4d 4f 56 20  |ribeDisc..D.MOV |
000020e0  20 20 72 38 2c 72 32 0d  0c 4e 22 53 57 49 20 20  |  r8,r2..N"SWI  |
000020f0  20 22 58 46 69 6c 65 43  6f 72 65 5f 44 65 73 63  | "XFileCore_Desc|
00002100  72 69 62 65 44 69 73 63  22 0d 0c 58 0f 4d 4f 56  |ribeDisc"..X.MOV|
00002110  56 53 20 72 38 2c 23 31  0d 0c 62 0f 4d 4f 56 56  |VS r8,#1..b.MOVV|
00002120  43 20 72 38 2c 23 30 0d  0c 6c 12 53 54 52 20 20  |C r8,#0..l.STR  |
00002130  20 72 38 2c 65 72 72 6f  72 0d 0c 76 11 4c 44 52  | r8,error..v.LDR|
00002140  20 20 20 72 37 2c 6d 61  73 6b 0d 0c 80 10 80 20  |   r7,mask..... |
00002150  20 20 72 38 2c 70 63 2c  72 37 0d 0c 8a 0f 54 45  |  r8,pc,r7....TE|
00002160  51 50 20 20 70 63 2c 72  38 0d 0c 94 10 4d 4f 56  |QP  pc,r8....MOV|
00002170  20 20 20 70 63 2c 72 31  34 0d 0c 9e 0b 2e 44 72  |   pc,r14.....Dr|
00002180  69 76 65 73 0d 0c a8 0f  4d 4f 56 20 20 20 72 38  |ives....MOV   r8|
00002190  2c 72 32 0d 0c b2 1c 53  57 49 20 20 20 22 58 46  |,r2....SWI   "XF|
000021a0  69 6c 65 43 6f 72 65 5f  44 72 69 76 65 73 22 0d  |ileCore_Drives".|
000021b0  0c bc 14 53 54 52 20 20  20 72 30 2c 5b 72 33 2c  |...STR   r0,[r3,|
000021c0  23 30 5d 0d 0c c6 0f 4d  4f 56 56 53 20 72 38 2c  |#0]....MOVVS r8,|
000021d0  23 31 0d 0c d0 0f 4d 4f  56 56 43 20 72 38 2c 23  |#1....MOVVC r8,#|
000021e0  30 0d 0c da 12 53 54 52  20 20 20 72 38 2c 65 72  |0....STR   r8,er|
000021f0  72 6f 72 0d 0c e4 11 4c  44 52 20 20 20 72 37 2c  |ror....LDR   r7,|
00002200  6d 61 73 6b 0d 0c ee 10  80 20 20 20 72 38 2c 70  |mask.....   r8,p|
00002210  63 2c 72 37 0d 0c f8 0f  54 45 51 50 20 20 70 63  |c,r7....TEQP  pc|
00002220  2c 72 38 0d 0d 02 10 4d  4f 56 20 20 20 70 63 2c  |,r8....MOV   pc,|
00002230  72 31 34 0d 0d 0c 0a 2e  65 72 72 6f 72 0d 0d 16  |r14.....error...|
00002240  0b 45 51 55 44 20 20 30  0d 0d 20 09 2e 6d 61 73  |.EQUD  0.. ..mas|
00002250  6b 0d 0d 2a 12 45 51 55  44 20 20 ac 28 31 3c 3c  |k..*.EQUD  .(1<<|
00002260  32 38 29 0d 0d 34 05 5d  0d 0d 3e 05 ed 0d 0d 48  |28)..4.]..>....H|
00002270  05 e1 0d 0d 52 04 0d 0d  5c 0e dd f2 6d 61 6b 65  |....R...\...make|
00002280  63 6f 64 65 0d 0d 66 28  c8 99 22 4f 53 5f 4d 6f  |code..f(.."OS_Mo|
00002290  64 75 6c 65 22 2c 36 2c  2c 2c 38 30 30 20 b8 20  |dule",6,,,800 . |
000022a0  2c 2c 63 6f 64 65 25 3b  66 6c 67 25 0d 0d 70 28  |,,code%;flg%..p(|
000022b0  e7 20 2d 28 66 6c 67 25  80 31 29 20 8c 20 85 20  |. -(flg%.1) . . |
000022c0  32 35 35 2c 22 4e 6f 20  72 6f 6f 6d 20 69 6e 20  |255,"No room in |
000022d0  52 4d 41 22 0d 0d 7a 15  e3 20 70 61 73 73 25 3d  |RMA"..z.. pass%=|
000022e0  30 20 b8 20 32 20 88 20  32 0d 0d 84 0c 50 25 3d  |0 . 2 . 2....P%=|
000022f0  63 6f 64 65 25 0d 0d 8e  0e 5b 4f 50 54 20 70 61  |code%....[OPT pa|
00002300  73 73 25 0d 0d 98 1e 2e  76 65 63 74 6f 72 63 6f  |ss%.....vectorco|
00002310  64 65 25 20 54 45 51 20  20 20 20 20 72 30 2c 23  |de% TEQ     r0,#|
00002320  33 0d 0d a2 1f 20 20 20  20 20 20 20 20 20 20 20  |3....           |
00002330  20 20 4d 4f 56 4e 45 20  20 20 70 63 2c 72 31 34  |  MOVNE   pc,r14|
00002340  0d 0d ac 25 2e 6f 6b 20  20 20 20 20 20 20 20 20  |...%.ok         |
00002350  20 53 54 4d 44 42 20 20  20 72 31 33 21 2c 7b 72  | STMDB   r13!,{r|
00002360  30 2d 31 32 7d 0d 0d b6  20 20 20 20 20 20 20 20  |0-12}...        |
00002370  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 72 30  |      MOV     r0|
00002380  2c 23 32 35 35 0d 0d c0  21 20 20 20 20 20 20 20  |,#255...!       |
00002390  20 20 20 20 20 20 41 44  44 20 20 20 20 20 72 30  |      ADD     r0|
000023a0  2c 72 30 2c 23 34 0d 0d  ca 1e 20 20 20 20 20 20  |,r0,#4....      |
000023b0  20 20 20 20 20 20 20 54  45 51 20 20 20 20 20 72  |       TEQ     r|
000023c0  39 2c 72 30 0d 0d d4 26  20 20 20 20 20 20 20 20  |9,r0...&        |
000023d0  20 20 20 20 20 4c 44 4d  45 51 49 41 20 72 31 33  |     LDMEQIA r13|
000023e0  21 2c 7b 72 30 2d 72 31  32 7d 0d 0d de 1c 20 20  |!,{r0-r12}....  |
000023f0  20 20 20 20 20 20 20 20  20 20 20 ec 51 20 20 20  |           .Q   |
00002400  70 63 2c 72 31 34 0d 0d  e8 04 0d 0d f2 24 20 20  |pc,r14.......$  |
00002410  20 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |           LDR  |
00002420  20 20 20 72 30 2c 63 6f  75 6e 74 65 72 25 0d 0d  |   r0,counter%..|
00002430  fc 1e 20 20 20 20 20 20  20 20 20 20 20 20 20 4d  |..             M|
00002440  4f 56 20 20 20 20 20 72  35 2c 23 30 0d 0e 06 21  |OV     r5,#0...!|
00002450  20 20 20 20 20 20 20 20  20 20 20 20 20 41 44 52  |             ADR|
00002460  20 20 20 20 20 72 32 2c  64 61 74 61 25 0d 0e 10  |     r2,data%...|
00002470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |              MO|
00002480  56 20 20 20 20 20 72 34  2c 23 26 46 46 0d 0e 1a  |V     r4,#&FF...|
00002490  24 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |$             MO|
000024a0  56 20 20 20 20 20 72 34  2c 72 34 2c 6c 73 6c 23  |V     r4,r4,lsl#|
000024b0  31 0d 0e 24 1e 20 20 20  20 20 20 20 20 20 20 20  |1..$.           |
000024c0  20 20 54 45 51 20 20 20  20 20 72 30 2c 72 34 0d  |  TEQ     r0,r4.|
000024d0  0e 2e 1f 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
000024e0  42 45 51 20 20 20 20 20  6c 65 61 76 65 25 0d 0e  |BEQ     leave%..|
000024f0  38 04 0d 0e 42 23 2e 6c  6f 6f 70 20 20 20 20 20  |8...B#.loop     |
00002500  20 20 20 4c 44 52 42 20  20 20 20 72 33 2c 5b 72  |   LDRB    r3,[r|
00002510  31 2c 72 35 5d 0d 0e 4c  23 20 20 20 20 20 20 20  |1,r5]..L#       |
00002520  20 20 20 20 20 20 53 54  52 42 20 20 20 20 72 33  |      STRB    r3|
00002530  2c 5b 72 32 2c 72 30 5d  0d 0e 56 21 20 20 20 20  |,[r2,r0]..V!    |
00002540  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |         ADD    |
00002550  20 72 30 2c 72 30 2c 23  31 0d 0e 60 21 20 20 20  | r0,r0,#1..`!   |
00002560  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002570  20 20 72 35 2c 72 35 2c  23 31 0d 0e 6a 1e 20 20  |  r5,r5,#1..j.  |
00002580  20 20 20 20 20 20 20 20  20 20 20 54 45 51 20 20  |           TEQ  |
00002590  20 20 20 72 30 2c 72 34  0d 0e 74 1b 20 20 20 20  |   r0,r4..t.    |
000025a0  20 20 20 20 20 20 20 20  20 ec 51 20 20 20 72 33  |         .Q   r3|
000025b0  2c 23 30 0d 0e 7e 23 20  20 20 20 20 20 20 20 20  |,#0..~#         |
000025c0  20 20 20 20 53 54 52 45  51 42 20 20 72 33 2c 5b  |    STREQB  r3,[|
000025d0  72 32 2c 72 34 5d 0d 0e  88 1f 20 20 20 20 20 20  |r2,r4]....      |
000025e0  20 20 20 20 20 20 20 42  45 51 20 20 20 20 20 6c  |       BEQ     l|
000025f0  65 61 76 65 25 0d 0e 92  1e 20 20 20 20 20 20 20  |eave%....       |
00002600  20 20 20 20 20 20 54 45  51 20 20 20 20 20 72 33  |      TEQ     r3|
00002610  2c 23 30 0d 0e 9c 1d 20  20 20 20 20 20 20 20 20  |,#0....         |
00002620  20 20 20 20 42 4e 45 20  20 20 20 20 6c 6f 6f 70  |    BNE     loop|
00002630  0d 0e a6 23 20 20 20 20  20 20 20 20 20 20 20 20  |...#            |
00002640  20 53 54 52 42 20 20 20  20 72 38 2c 5b 72 32 2c  | STRB    r8,[r2,|
00002650  72 30 5d 0d 0e b0 21 20  20 20 20 20 20 20 20 20  |r0]...!         |
00002660  20 20 20 20 41 44 44 20  20 20 20 20 72 30 2c 72  |    ADD     r0,r|
00002670  30 2c 23 31 0d 0e ba 24  20 20 20 20 20 20 20 20  |0,#1...$        |
00002680  20 20 20 20 20 53 54 52  20 20 20 20 20 72 30 2c  |     STR     r0,|
00002690  63 6f 75 6e 74 65 72 25  0d 0e c4 26 2e 6c 65 61  |counter%...&.lea|
000026a0  76 65 25 20 20 20 20 20  20 4c 44 4d 49 41 20 20  |ve%      LDMIA  |
000026b0  20 72 31 33 21 2c 7b 72  30 2d 72 31 32 7d 0d 0e  | r13!,{r0-r12}..|
000026c0  ce 1f 20 20 20 20 20 20  20 20 20 20 20 20 20 4d  |..             M|
000026d0  4f 56 20 20 20 20 20 70  63 2c 52 31 34 0d 0e d8  |OV     pc,R14...|
000026e0  1a 2e 63 6f 75 6e 74 65  72 25 20 20 20 20 45 51  |..counter%    EQ|
000026f0  55 44 20 20 20 20 30 0d  0e e2 21 2e 64 61 74 61  |UD    0...!.data|
00002700  25 20 20 20 20 20 20 20  45 51 55 53 20 20 20 20  |%       EQUS    |
00002710  c4 31 32 38 2c bd 30 29  0d 0e ec 21 20 20 20 20  |.128,.0)...!    |
00002720  20 20 20 20 20 20 20 20  20 45 51 55 53 20 20 20  |         EQUS   |
00002730  20 c4 31 32 38 2c bd 30  29 0d 0e f6 21 20 20 20  | .128,.0)...!   |
00002740  20 20 20 20 20 20 20 20  20 20 45 51 55 53 20 20  |          EQUS  |
00002750  20 20 c4 31 32 38 2c bd  30 29 0d 0f 00 21 20 20  |  .128,.0)...!  |
00002760  20 20 20 20 20 20 20 20  20 20 20 45 51 55 53 20  |           EQUS |
00002770  20 20 20 c4 31 32 38 2c  bd 30 29 0d 0f 0a 05 5d  |   .128,.0)....]|
00002780  0d 0f 14 05 ed 0d 0f 1e  22 c8 99 22 4f 53 5f 43  |........".."OS_C|
00002790  6c 61 69 6d 22 2c 26 31  44 2c 76 65 63 74 6f 72  |laim",&1D,vector|
000027a0  63 6f 64 65 25 2c 30 0d  0f 28 05 e1 0d 0f 32 04  |code%,0..(....2.|
000027b0  0d 0f 3c 0d dd f2 63 6f  64 65 6f 66 66 0d 0f 46  |..<...codeoff..F|
000027c0  20 c8 99 22 58 4f 53 5f  4d 6f 64 75 6c 65 22 2c  | .."XOS_Module",|
000027d0  34 2c 22 41 6c 69 61 73  46 72 65 65 22 0d 0f 50  |4,"AliasFree"..P|
000027e0  22 c8 99 22 58 4f 53 5f  43 4c 49 22 2c 22 55 4e  |".."XOS_CLI","UN|
000027f0  53 45 54 20 41 6c 69 61  73 24 46 72 65 65 22 0d  |SET Alias$Free".|
00002800  0f 5a 23 c8 99 22 58 4f  53 5f 43 4c 49 22 2c 22  |.Z#.."XOS_CLI","|
00002810  55 4e 53 45 54 20 50 72  69 76 61 74 65 57 6f 72  |UNSET PrivateWor|
00002820  64 22 0d 0f 64 1d c8 99  22 58 4f 53 5f 43 4c 49  |d"..d..."XOS_CLI|
00002830  22 2c 22 55 4e 53 45 54  20 46 53 6e 75 6d 22 0d  |","UNSET FSnum".|
00002840  0f 6e 1c c8 99 22 58 4f  53 5f 43 4c 49 22 2c 22  |.n..."XOS_CLI","|
00002850  55 4e 53 45 54 20 54 61  69 6c 22 0d 0f 78 20 c8  |UNSET Tail"..x .|
00002860  99 22 58 4f 53 5f 43 4c  49 22 2c 22 55 4e 53 45  |."XOS_CLI","UNSE|
00002870  54 20 46 72 65 65 44 61  74 61 22 0d 0f 82 3d c8  |T FreeData"...=.|
00002880  99 22 58 4f 53 5f 52 65  6c 65 61 73 65 22 2c 26  |."XOS_Release",&|
00002890  31 44 2c 76 65 63 74 6f  72 63 6f 64 65 25 2c 30  |1D,vectorcode%,0|
000028a0  3a c8 99 22 58 4f 53 5f  4d 6f 64 75 6c 65 22 2c  |:.."XOS_Module",|
000028b0  37 2c 2c 63 6f 64 65 25  0d 0f 8c 05 e1 0d ff     |7,,code%.......|
000028bf