home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 5
/
DATAFILE_PDCD5.iso
/
utilities
/
r
/
resource
/
!Resource
/
!RunImage
(
.txt
)
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
RISC OS BBC BASIC V Source
|
1994-06-12
|
35.1 KB
|
1,394 lines
>!RunImage
"ERROR "+
$+" at line "+
Set up variables and dimming memory.
====================================
CFirst=
:Quit%=
:Run%=
:MaxFiles=99:SP=1:ScanItems%=0:ILen=&1000
ISfname$="":ExName$="":ViewFile$="":FType$="":Virtual%=0:DragASprite=0
GTaskN$="Resource Write":Ticked=0:Mod%=
:Cur%=1:Mul$="":Debugging%=0
KModName$="ResourceFiles":View=1:Total=1:Multiple%=0:Next%=0:FileOpen%=0
Block%1024,Block2% 512,Window% &1000,Ind% ILen,FListMenu &1000,Font% 256
Menu% 400,Object$(MaxFiles),Positioned$(MaxFiles),ScanName$(MaxFiles)
ScanPos$(99),ObType%(MaxFiles),ScanLen%(99),ScanType%(99):Free=Ind%
Scale% 32,Trans% 32:Verbose%=
:ModSave$="Module":FailDrag%=
Clear the font memory and start messagetrans file.
==================================================
X=0
256:Font%?X=0:
StartMessage
Now here's the clever bit, I'm calculating how much memory
I've used so I can reduce the wimpslot to the minimum.
===========================================================
"OS_ReadMemMapInfo"
PageSize%:Size%=
:Size%+=8*1024
;Temp=Size%
PageSize%:Size%=Size%
PageSize%:Size%+=1
Temp>(PageSize%/2)
Size%+=1
CSize%=Size%*PageSize%:
=&8000+Size%:
"Wimp_SlotSize",Size%,-1
$OSize%=Size%:Address=Size%+&8000
Error(1,
$+" at line "+
Start the task and kill any other active version of this program.
=================================================================
Block%!0=0
"Wimp_Initialise",310,&4B534154,TaskN$,Block%
WimpVer,THandle%
Kill(TaskN$)
Open the template file and load the windows.
============================================
"Wimp_OpenTemplate",,"<Resource$Dir>.Templates"
!;Main%=
CreateWindow("Main"):File%=
CreateWindow("File")
";Save%=
CreateWindow("Save"):Info%=
CreateWindow("Info")
#IFileInfo%=
CreateWindow("FileInfo"):Choices%=
CreateWindow("Choices")
$EPane%=
CreateWindow("Pane"):Operation%=
CreateWindow("Operation")
Debugging%
Debug%=
CreateWindow("Debug")
"Wimp_CloseTemplate"
Set up the menu, iconbar and blank all the text icons.
======================================================
SetUpMenu(Menu%):
DisplayText:First=
IconBar:
Blank
Icon%=2
IconText(Operation%,Icon%,""):
"Font_FindFont",,"Homerton.Medium",12*16,12*16
FileLHandle%
,FTe=FileLHandle%:
Font%?Te=0
Font%?Te+=1
"Font_LoseFont",Te
Read in the choices and select the pane window accordingly.
===========================================================
Choices("<Resource$Dir>.Choices"):
Select(Pane%,1,Run%)
Select(Pane%,0,Multiple%):
IconText(Pane%,3,Mul$)
Select(Pane%,8,Virtual%)
Debugging%
34Block%!0=Debug%:
"Wimp_GetWindowState",,Block%
"Wimp_OpenWindow",,Block%
Error(2,
$+" at line "+
Right here we go and poll.
==========================
"Wimp_Poll",1,Block%
Reason%
Reason%
Redraw
OpeningWindow
ClosingWindow
Button
DragBoxSave
Keyboard(Block%!24)
MenuSelect
17,18:
Receive
Quit%
Lose all the fonts and close the messagetrans file.
===================================================
L=0
255:Y=Font%?L:
Y>0:
"Font_LoseFont",L:Y-=1:
"Font_LoseFont",Ifhandle%:
"MessageTrans_CloseFile",Filedesc%
ClosingWindow
Block%!0
Main%:
"Wimp_CloseWindow",,Block%:Block%!0=File%
Choices%:
"Wimp_CloseWindow",,Block%:Block%!0=Pane%
"Wimp_CloseWindow",,Block%
OpeningWindow
As I'm using a pane I need to reposition the pane on top of my
choices window. To make it easier I'm using two different
Block%.
==============================================================
Block%!0
Choices%
]Mminx=Block%!4:miny=Block%!8:maxx=Block%!12:maxy=Block%!16:Block2%!0=Pane%
"Wimp_GetWindowState",,Block2%:lx=Block2%!12-Block2%!4
_Ely=Block2%!16-Block2%!8:Block2%!4=minx+26:Block2%!12=Block2%!4+lx
`CBlock2%!16=maxy-24:Block2%!8=Block2%!16-ly:Block2%!28=Block%!28
"Wimp_OpenWindow",,Block2%:Block%!28=Pane%
"Wimp_OpenWindow",,Block%
IconBar
h@!Block%=-5:Block%!4=0:Block%!8=-16:Block%!12=80:Block%!16=82
"Font_FindFont",,"Homerton.Medium",12*16,12*16
Ifhandle%
j4Block%!20=(Ifhandle%<<24)+%11000100001011+(1<<6)
IconSpr% 14,IconText% 14
lF$IconSpr%="sromapps;F17"+
0:$IconText%="Write":Block%!24=IconText%
m"Block%!28=IconSpr%:Block%!32=1
Prioritised to be just right of Apps Icon.
==========================================
"Wimp_CreateIcon",&45000000,Block%
BarIcon%
DragEnd
When a drag has finished, close the window and replace the sprite
=================================================================
WindowDrag%
File%:Block2%!0=WindowDrag%:
"Wimp_CloseWindow",,Block2%
Save%:
DestWindow%
Save%,Main%,File%,Choices%,Pane%,Choices%,Operation%,FileInfo%,Menu%
z0FailDrag%=
PROCIconText(Save%,1,ModSave$)
Block2%!0=Save%:
"Wimp_CloseWindow",,Block2%
~MBlock2%!0=WindowDrag%:Block2%!4=IconDrag%:
"Wimp_GetIconState",,Block2%
ValidText(WindowDrag%,IconDrag%,TextDrag$)
CreateWindow(WName$)
Handle%
"Wimp_LoadTemplate",,Window%,Free,Ind%+ILen,Font%,WName$
,,Free
"Wimp_CreateWindow",,Window%
Handle%
=Handle%
DragBoxSave
"Wimp_GetPointerInfo",,Block%:DestWindow%=Block%!12
+Block%!20=Block%!12:Block%!24=Block%!16
MBlock%!28=Block%!0:Block%!32=Block%!4:Block%!36=0:Block%!0=64:Block%!12=0
8Block%!16=1:Block%!40=FType%:$(Block%+44)=Sfname$+
Replace the sprite and close the window.
========================================
DragEnd
FailDrag%=
"Wimp_SendMessage",18,Block%,Block%!20,Block%!24
FailDrag%=
Receive
Block%!16
0:Quit%=
DataSaveAck
DataLoad
&502:
&40040:
NetMessage
&400C1:
ModeChange
&400CC:
Iconising
DataSaveAck
DragASprite
"DragASprite_Stop"
DestName$=
Strip(Block%+44)
DraggingWindow%
File%:
DataSave_File
Save%:
DataSave_Save
FileInfo%:
DataSave_FileInfo
Pane%:
DataSave_Pane
DataSave_File:
A:A=0:A$=DestName$
A$,9)="Resources"
A$,"."):A=
A$,"."):A$=
A$-A):
Mod%
"Change%=(Positioned$(Cur%)="")
DestName$,A$):DestName$=
DestName$,A-2)
?Positioned$(Cur%)=DestName$:
Change%
Next%+=1:Cur%=Next%
DestName$,A$):DestName$=
DestName$,A-2)
6Positioned$(Next%+1)=DestName$:Next%+=1:Cur%=Next%
=Block%!0=File%:
"Wimp_CloseWindow",,Block%:
DisplayText
Mod%
Mod%=
DataSave_Save
DestName$,9)="Resources"
;TotalLen=0:
f=1
Next%:TotalLen+=
Count(Object$(f)):
TotalLen+=16*1024
@Temp=TotalLen
PageSize%:Slot=TotalLen
PageSize%:Slot+=1:
Temp>(PageSize%/2)
PageSize%+=1
ASlot=Slot*PageSize%:
"Wimp_SlotSize",Size%+Slot,-1
NSize%
NSize%=Size%
Dialogue(1234,"Not enough memory, I need "+
Slot/1024+"k free",1,""):
"Wimp_CreateMenu",-1:
MakeMod:
"Wimp_SlotSize",Size%,-1
NSize%
Size%<>NSize%
Dialogue(1234,"Not been able to free memory",1,"")
"Wimp_CreateMenu",-1
DestName$="<Wimp$Scrap>"
HBlock%!16=3:Block%!36=Size%:
"Wimp_SendMessage",18,Block%,Block%!4
IconText(Save%,1,DestName$)
ModSave$=DestName$
DataSave_FileInfo
Number,A$
DestName$,9)="Resources"
Verbose%
IconText(Operation%,2,"Retrieve")
A$=DestName$
IconDrag%
Verbose%
IconText(Operation%,4,"Retrieving single file")
IconText(Operation%,3,
Right(ScanName$(SP)))
Retrieve(SP)
DestName$="<Wimp$Scrap>"
HBlock%!16=3:Block%!36=Size%:
"Wimp_SendMessage",18,Block%,Block%!4
Verbose%
IconText(Operation%,4,"Retrieving all files")
DestName$<>"<Wimp$Scrap>"
Number=1
ScanItems%
Verbose%
IconText(Operation%,3,
Right(ScanName$(Number)))
CreateDirectorys(A$+ScanPos$(Number))
7DestName$=A$+ScanPos$(Number)+"."+ScanName$(Number)
Retrieve(Number)
CreateDirectorys(A$)
Path$,B$,A
B$=""
A$,"."):Path$=
A$,A):A$=
A$-A)
A$,".")
A<>0
"CDir "+Path$+B$+
A$,A-1)
B$=B$+
A$,A-1)+".":
A$-A)
A$,".")
"CDir "+Path$+B$+
A$,A-1)
Retrieve(Number)
x,N,B$,Name$,Loc,Off,A,B,Finish%:Loc=0:Finish%=
FileOpen%=
(DestName$):X=
ExName$
#X=StartOfData:
"Hourglass_On"
:Ptr%=
GetWord:
Ptr%<>0
#X+Ptr%-4:Load=
GetWord:Exec=
GetWord:Len=
GetWord:Acc=
GetWord
&B$="":A=
A<>0:B$+=
*Name$=
Right(B$):Loc+=1:
Loc=Number
#X:[OPT 0:ALIGN:]:
#X=P%
%Len2=
GetWord:
ClaimSlot(Len)
"OS_GBPB",4,X,Address,Len
"OS_GBPB",2,N,Address,Len:Finish%=
'Off=1:
Off<>Len+1:
#X:Off+=1
"Hourglass_Percentage",100*(Off/Len)
:Finish%=
"Wimp_SlotSize",Size%,-1
Loc>=Number
Finish%=
Finish%:
#N:FileOpen%=
"Settype "+DestName$+" "+
~(ScanType%(Number))
"Hourglass_Off"
ClaimSlot(Extra)
OK%,A$,X:X=Extra
A$="":A$=STR$(X MOD 1024)+" Bytes.":X=X DIV 1024
A$=STR$(X MOD 1024)+"K "+A$:X=X DIV 1024
A$=STR$(X MOD 1024)+"M "+A$:VDU 4:PRINTTAB(0,0);A$:VDU5
9Slot=Extra
PageSize%:Temp=Extra
PageSize%:Slot+=1
Temp>(PageSize%/2)
Slot+=1
ASlot=Slot*PageSize%:
"Wimp_SlotSize",Size%+Slot,-1
NSize%
NSize%=Size%
DataSave_Pane
DestName$,12)="Resources:$."
Select(Pane%,0,
IconText(Pane%,3,DestName$)
Select(Pane%,0,
DisplayText
IconText(Main%,3,
Pad(Cur%,2)):
IconText(Main%,7,Object$(Cur%))
IconText(Main%,9,Positioned$(Cur%))
DataLoad
This is when a file is dragged to one of my windows.
====================================================
Block%!20
FileInfo%:
ExamineFile
Main%,-2:X%=Block%!28:Y%=Block%!32
6>Fname$=
Strip(Block%+44):Sfname$=
FilenameFromFull(Fname$)
7KFType%=Block%!40:Block%!16=4:Block%!12=Block%!8:ObType%(Next%+1)=FType%
"Wimp_SendMessage",17,Block%,Block%!4:Object$(Next%+1)=Fname$
FType%
&1000:FType$="directory"
&2000:
Application
FType$="file_"+
~FType%
ValidText(File%,0,"r1;s"+FType$):
IconText(File%,1,Sfname$)
Wimp_BringUpWindow(Main%,-1)
Selected(Pane%,0)
A<Positioned$(Next%+1)=
Mul$):
Mod% Next%+=1:Cur%=Next%
C2Block%!0=File%:
"Wimp_GetWindowState",,Block%
DJLX=Block%!12-Block%!4:LY=Block%!16-Block%!8:X%-=(LX/2):Block%!12=X%+LX
E8Block%!16=Y%+LY:Block%!4=X%:Block%!8=Y%:Block%!28=-1
"Wimp_OpenWindow",,Block%:
Mod% Cur%=Next%+1
DisplayText
Application:App$=Fname$:A=
App$,".")
A:App$=
App$,
App$-A):A=
App$,"."):
"XWimp_ReadPixTrans",256+40,-1,App$
(R%
(1<<24))=0
FType$=App$
FType$="Application"
ExamineFile
To understand this you need know about the data structure
of the resource data, PRM's Book 2 Page 410
Basically I seek through a module for the SWI "Resource_RegisterFiles"
Please let me know if this fails on a module.
=========================================================
Temp,B$,A,X,Fail%::B$="":Fname$=
Strip(Block%+44):ExName$=Fname$
Y6FType%=Block%!40:
FType%<>&FFA
ScanItems%=0
Verbose%
IconText(Operation%,2,"Examine")
IconText(Operation%,3,
Right(Fname$))
IconText(Operation%,4,"Examining module")
MName$="":X=
Fname$:
`AStart=
GetWord:Initialise=
GetWord:
L=1
3:Title=
GetWord:
Initialise=0
Initialise>
Fail%=
Fail%=
#X=Initialise:C=0
:Temp=
GetWord:C+=4:
C>1024
Temp=&EF061B40
Temp=&EF041B0
C>1024
Fail%=
Fail%=
g&C=0:
#X-8:Temp=
GetWord:C+=4
(Temp
&0FFFFFFF)=&F0000000
Temp=0
C>1024
(Temp
&F000FFFF)=&28F0000
C>1024
Fail%=
Fail%=
Temp=(Temp
&FFFFF000)
m*StartOfData=
#X+Temp+4:
#X=StartOfData
Fail%
Blank:
IconText(FileInfo%,2,"Can't understand")
IconText(FileInfo%,15,"This module")
Verbose%
IconText(Operation%,4,"Does this have Resource Data?")
Verbose%
IconText(Operation%,4,"Found Resource Data")
:Ptr%=
GetWord:
Ptr%<>0
#X+Ptr%-4:Load=
GetWord:Exec=
GetWord:Len=
GetWord:Acc=
GetWord
z&B$="":A=
A<>0:B$+=
{GScanName$(ScanItems%+1)=
Right(B$):ScanPos$(ScanItems%+1)=
Left(B$)
|4ScanLen%(ScanItems%+1)=Len:T$=
~Load:T$=
T$,4,3)
}9ScanType%(ScanItems%+1)=
("&"+T$):
#X=L:ScanItems%+=1
Ptr%=0
#X=Title:MName$="":Temp=
Temp<>0:MName$+=
(Temp):Temp=
ESP=1:
IconText(FileInfo%,2,Fname$):
IconText(FileInfo%,15,MName$)
IconText(FileInfo%,5,
Pad(ScanItems%,2)):
DisplayScan
Verbose%
IconText(Operation%,4,"Finished examine module")
Blank
IconText(FileInfo%,2,""):
IconText(FileInfo%,15,"")
IconText(FileInfo%,5,""):
IconText(FileInfo%,7,"Object :XX")
IconText(FileInfo%,12,""):
IconText(FileInfo%,14,"")
IconText(FileInfo%,21,"")
DisplayScan
IconText(FileInfo%,7,"Object : "+
Pad(SP,2))
IconText(FileInfo%,12,ScanName$(SP))
IconText(FileInfo%,14,ScanPos$(SP))
IconText(FileInfo%,21,
(ScanLen%(SP)))
ValidText(FileInfo%,9,"r1;sfile_"+
~ScanType%(SP))
%ViewType$="file_"+
~ScanType%(SP)
ValidText(Window%,Icon%,Text$)
EBlock2%!0=Window%:Block2%!4=Icon%:
"Wimp_GetIconState",,Block2%
SBlock2%!8=0:Block2%!12=0:$(Block2%!32)=Text$+
"Wimp_SetIconState",,Block2%
Debugging%
=Block%!0=Debug%:Block%!4=8:
"Wimp_GetIconState",,Block%
Window%
Main%:$(Block%!28)="Main"
Info%:$(Block%!28)="Info"
FileInfo%:$(Block%!28)="FileInfo"
Save%:$(Block%!28)="Save"
File%:$(Block%!28)="File"
Choices%:$(Block%!28)="Choices"
Pane%:$(Block%!28)="Pane"
$(Block%!28)="Unknown"
9Block%!8=0:Block%!12=0:
"Wimp_SetIconState",,Block%
=Block%!0=Debug%:Block%!4=9:
"Wimp_GetIconState",,Block%
K$(Block%!28)=
(Icon%):Block%!0=Debug%:Block%!4=9:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
>Block%!0=Debug%:Block%!4=10:
"Wimp_GetIconState",,Block%
I$(Block%!28)=Text$:Block%!0=Debug%:Block%!4=10:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
JBlock%!0=Debug%:Block%!4=13:
"Wimp_GetIconState",,Block%:Block%!4=13
A$(Block%!28)=
Text$):Block%!0=Debug%:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
GetValidText(Window%,Icon%)
EBlock2%!0=Window%:Block2%!4=Icon%:
"Wimp_GetIconState",,Block2%
=$(Block2%!32)
FilenameFromFull(A$)
A$,"."):
A<>0:A$=
A$-A):A=
A$,"."):
Strip(Address%):
A%,A$
9A%=0:A$="":
Address%?A%<>0:A$+=
Address%?A%:A%+=1:
PBlock%!12=Block%!8:Block%!16=&503:Mess$="":HWind%=Block%!32:HIcon%=Block%!36
HWind%
-2:Mess$=
Message("IconBar","","")
Main%:Mess$=
Message("M"+
HIcon%,"","")
File%:Mess$=
Message("F"+
HIcon%,"","")
Save%:Mess$=
Message("S"+
HIcon%,"","")
Info%:Mess$=
Message("I"+
HIcon%,"","")
FileInfo%:Mess$=
Message("FI"+
HIcon%,"","")
Choices%:Mess$=
Message("C"+
HIcon%,"","")
Pane%:Mess$=
Message("P"+
HIcon%,"","")
Operation%:Mess$=
Message("V"+
HIcon%,"","")
WimpVer>=217
MenuOpen%
Menu%
"Wimp_GetMenuState",1,Block2%,HWind%,HIcon%
.Mess$=
Message("Menu"+
(!Block2%+1),"","")
FListMenu
4Mess$="Press select or adjust to view an object"
&Block%!0=256:$(Block%+20)=Mess$+
"Wimp_SendMessage",17,Block%,Block%!4
Wimp_BringUpWindow(window%,pos)
4!Block%=window%:
"Wimp_GetWindowState",,Block%
.Block%!28=pos:
"Wimp_OpenWindow",,Block%
Wimp_CloseWindow(Window%)
1!Block%=Window%:
"Wimp_CloseWindow",,Block%
Button:
SaveChoice%
Block%!12
-2 :
Button_IconBar
FileInfo%:
Button_FileInfo
Info% :
Button_Info
Save% :
Button_Save
File% :
Button_File
Main% :
Button_Main
Choices% :
Button_Choices
Pane% :
Button_Pane
Operation% :
Button_Operation
Button_IconBar
Block%!8
1 :
Wimp_CloseWindow(Main%):
Wimp_CloseWindow(FileInfo%)
2 :
BringUpMenu(Menu%,!Block%-64,MenuSize%)
4 :
Wimp_BringUpWindow(Main%,-1)
Button_FileInfo
Update%=
Block%!16
6:SP-=1:
SP<1
SP=1
Update%=
8:SP+=1:
SP>ScanItems%
SP=ScanItems%
Update%=
Block%!8
ScanItems%>0
7FType$="file_"+
~ScanType%(SP):FType%=ScanType%(SP)
=Sfname$=
GetIconText(FileInfo%,12):
Dragfile(FileInfo%,9)
Block%!8
ScanItems%>0
DSfname$="":FType$="file_FFD":FType%=&FFD:
Dragfile(FileInfo%,29)
Block%!8
2 :
Grey(Menu%,1,1):
Grey(Menu%,4,1)
BringUpMenu(Menu%,Block%!0,Block%!4)
Grey(Menu%,1,0):
Grey(Menu%,4,0)
Update%
DisplayScan
Button_Info
Block%!8
DragBox(Info%,1)
Button_File
Block%!16
0 :
Block%!8
Dragfile(File%,0)
Button_Save
Block%!16
0 : FType$="file_FFA":FType%=&FFA:A$=
GetIconText(Save%,1)
!Sfname$=
FilenameFromFull(A$)
Block%!8
Dragfile(Save%,0)
2 :FType$="file_FFA":FType%=&FFA:DestName$=
GetIconText(Save%,1)
DataSave_Save
Button_Main
Block%!8
BringUpMenu(Menu%,!Block%,Block%!4)
Update%=
Block%!16
2 :
Cur%>1
Cur%-=1:Update%=
4 :
Cur%<Next%
Cur%+=1:Update%=
5 :
Delete:Update%=
8 :
X%,Y%,M%:Block%!28=X%:Block%!32=Y%:Block%!20=Main%:Block%!16=3
/F$(Block%+44)=Object$(Cur%)+
0:Block%!40=ObType%(Cur%):Block%!0=128
"Wimp_SendMessage",17,Block%,THandle%:Mod%=
11:
Next%<>0
SetUpFileList(FListMenu)
BringUpMenu(FListMenu,Block%!0,Block%!4)
Update%
DisplayText
Button_Choices
Block%!8
BringUpMenu(Menu%,!Block%,Block%!4)
>)Ad%=(Block%!8
%1)<>0:
Block%!16
1,2 : SaveChoice%=(Block%!16=1):Virtual%=
Selected(Pane%,8)
@;Mul$=
GetIconText(Pane%,3):Multiple%=
Selected(Pane%,0)
A+Run%=
Selected(Pane%,1):
SaveChoice%
"<Resource$Dir>.Choices"
CDTe$="Multiple File Drag : ":
Multiple%
Te$+="Yes"
Te$+="No"
#X,Te$:Te$="Multiple Directory : "+Mul$:
#X,Te$
E9Te$="Save and Run : ":
Run%
Te$+="Yes"
Te$+="No"
#X,Te$
G8Te$="Virtual : ":
Virtual%
Te$+="Yes"
Te$+="No"
#X,Te$:
#X,"Finish":
"Settype <Resource$Dir>.Choices Text"
Block%!0=Choices%
3 :
IconText(Pane%,3,Mul$):
Select(Pane%,0,Multiple%)
Select(Pane%,1,Run%):Block%!0=Choices%
Ad%
"Wimp_CloseWindow",,Block%:
ClosingWindow
Button_Pane
Block%!8
BringUpMenu(Menu%,!Block%,Block%!4)
Block%!16<>4
Select(Pane%,Block%!16,
Selected(Pane%,Block%!16))
Block%!16
Block%!8
\!FType$="file_FFD":FType%=&FFD
Sfname$=""
Dragfile(Pane%,4)
Button_Operation
Block%!8
BringUpMenu(Menu%,!Block%,Block%!4)
Block%!16
Iconise(Operation%,"Verbose")
Wimp_CloseWindow(Operation%):Verbose%=
Tick(Menu%,2)
Block%!8
DragBox(Operation%,1)
SetUpFileList(ThisMenu)
tGTicked=0:Title$="FileList":$ThisMenu=Title$:Width%=(
(Title$)-2)*16
uDThisMenu!12=&70207:ThisMenu!20=44:ThisMenu!24=0:Pos%=ThisMenu+28
vFFlags%=%0:SubMenuPointer%=-1:MFlags%=&7000021:
Position=1
Next%
wFMFlags%=(FileLHandle%<<24)+&61:
Position=Next%
Flags%=%10000000
x)!Pos%=Flags%:Pos%!4=-1:Pos%!8=MFlags%
yBTemp$=
FilenameFromFull(Object$(Position))+
0:$(Pos%+12)=Temp$
z7Temp%=(
(Temp$)+1)*16:
Width%<Temp%
Width%=Temp%
{<Pos%+=24:
:ThisMenu!16=Width%:MenuSize%=96+(44*MItem%):
Delete
~<Object$(Cur%)="":Positioned$(Cur%)="":
x=Cur%+1
Next%
=Object$(x-1)=Object$(x):Positioned$(x-1)=Positioned$(x):
BObject$(Next%)="":Positioned$(Next%)="":
Cur%>1
Cur%=Cur%-1
Next%>0
Next%=Next%-1
Dragfile(Window%,Icon%)
IWindowDrag%=Window%:IconDrag%=Icon%:Block2%!0=Window%:Block2%!4=Icon%
"Wimp_GetIconState",,Block2%
JTextDrag$=
GetValidText(Window%,Icon%):A=
Convert(TextDrag$),"sfile")
7String$=
TextDrag$,A-1)+
TextDrag$,
TextDrag$-A-9)
8String$="R2;SFile":
ValidText(Window%,Icon%,String$)
NDraggingWindow%=Window%:!Block2%=Window%:
"Wimp_GetWindowState",,Block2%
Dox=Block2%!4-Block2%!20:oy=Block2%!16-Block2%!24:Block2%!4=Icon%
"Wimp_GetIconState",,Block2%:Block2%!4=5:Block2%!8=ox+Block2%!8
Block2%!12=oy+Block2%!12
5Block2%!16=ox+Block2%!16:Block2%!20=oy+Block2%!20
HBlock2%!24=0:Block2%!28=0:Block2%!32=&7FFFFFFF:Block2%!36=Block2%!32
"OS_Byte",161,28
,,C%:
%10
GDragSprite=
"DragASprite_Start",%11000101,1,FType$+
0,Block2%+8
+DragSprite=
"Wimp_DragBox",,Block2%
TextDrag$,1)=
TextDrag$=
TextDrag$)
Grey(Menu%,item%,set%)
>Grey=Menu%+36:Grey+=(24*item%):Flags%=!Grey:Oflags%=Flags%
6Flags%=(Flags%
(1<<22))
set%<<22:!Grey=Flags%
Dialogue(errornumber%,message$,flags%,title$)
1Block%!0=errornumber%:$(Block%+4)=message$+
"Wimp_ReportError",Block%,flags%,title$
,Result%
=Result%
Iconise(window%,Title$)
EBlock%!0=40:Block%!16=&400CA:Block%!20=window%:Block%!24=THandle%
<$(Block%+28)=Title$+
"Wimp_SendMessage",17,Block%,0
Iconising
*Block%!0=56:Block%!24=0:
Block%!20
Main%:$(Block%+28)="Resres":$(Block%+36)="Resource Write"
FileInfo%:$(Block%+28)="Resfin":$(Block%+36)="Module Info"
Choices%:$(Block%+28)="Rescho":$(Block%+36)="Choices"
Operation%:$(Block%+28)="ResOpe":$(Block%+36)="Verbose"
?Block%!12=Block%!8:
"Wimp_SendMessage",17,Block%,Block%!4
WindowTitle(Window%)
GetIconText(Window%,-4)
IconText(Window%,Icon%,Text$)
EBlock2%!0=Window%:Block2%!4=Icon%:
"Wimp_GetIconState",,Block2%
E$(Block2%!28)=Text$:Block2%!0=Window%:Block2%!4=Icon%:Block2%!8=0
0Block2%!12=0:
"Wimp_SetIconState",,Block2%
Debugging%
=Block%!0=Debug%:Block%!4=5:
"Wimp_GetIconState",,Block%
Window%
Main%:$(Block%!28)="Main"
Info%:$(Block%!28)="Info"
FileInfo%:$(Block%!28)="FileInfo"
Save%:$(Block%!28)="Save"
File%:$(Block%!28)="File"
Choices%:$(Block%!28)="Choices"
Pane%:$(Block%!28)="Pane"
$(Block%!28)="Unknown"
9Block%!8=0:Block%!12=0:
"Wimp_SetIconState",,Block%
=Block%!0=Debug%:Block%!4=6:
"Wimp_GetIconState",,Block%
K$(Block%!28)=
(Icon%):Block%!0=Debug%:Block%!4=6:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
=Block%!0=Debug%:Block%!4=7:
"Wimp_GetIconState",,Block%
H$(Block%!28)=Text$:Block%!0=Debug%:Block%!4=7:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
JBlock%!0=Debug%:Block%!4=12:
"Wimp_GetIconState",,Block%:Block%!4=12
A$(Block%!28)=
Text$):Block%!0=Debug%:Block%!8=0:Block%!12=0
"Wimp_SetIconState",,Block%
GetIconText(Window%,Icon%)
EBlock2%!0=Window%:Block2%!4=Icon%:
"Wimp_GetIconState",,Block2%
Text$=$(Block2%!28)
=Text$
Keyboard(Key%):
Te$:Window%=Block%!0:Icon%=Block%!4
Window%
Main%:
Icon%
9:A$=
GetIconText(Main%,9)
A$,11)="Resources:$"
Positioned$(Cur%)=A$
DisplayText
"Wimp_ProcessKey",Key%
Pane%:
Icon%
GetIconText(Pane%,3),12)="Resources:$."
8Te$=
GetIconText(Pane%,3):
Te$,1)<>".":Te$+=".":
IconText(Pane%,3,Te$):
Select(Pane%,0,
Select(Pane%,0,
Save%:
Icon%
1:FType$="file_FFA":FType%=&FFA:DestName$=
GetIconText(Save%,1)
DataSave_Save
"Wimp_ProcessKey",Key%
Key%=13
"Wimp_SetCaretPosition",-1
SetUpMenu(Menu%)
DTicked=0:
Title$,MItem%:$Menu%=Title$:Width%=(
(Title$)-2)*16
8Menu%!12=&70207:Menu%!20=44:Menu%!24=0:Pos%=Menu%+28
Position=1
MItem%
Flags%,SubMenuPointer%,MFlags%,Item$,Font$,size%
Flags%
%10
Ticked+=1
"Font_FindFont",,Font$,size%*16,size%*16
FHandle%
#MFlags%=(FHandle%<<24)+%1100001
Font%?FHandle%>0
"Font_LoseFont",FHandle%
Font%?FHandle%+=1
G!Pos%=Flags%:Pos%!4=SubMenuPointer%:Pos%!8=MFlags%:$(Pos%+12)=Item$
7Temp%=(
(Item$)+1)*16:
Width%<Temp%
Width%=Temp%
CPos%+=24:
:Menu%!16=Width%:MenuSize%=96+(44*MItem%)+(24*Ticked)
BringUpMenu(Data%,Mx%,My%)
>MenuOpen%=Data%:
Next%=0
Data%=Menu%
Grey(Menu%,1,1)
"Wimp_CreateMenu",,Data%,Mx%,My%
Next%=0
Data%=Menu%
Grey(Menu%,1,0)
Resource,6
%00000000,Info%,&7000021,"Info","Homerton.Medium",12
%00000010,Save%,&7000021,"Save","Homerton.Medium",12
%00000000,-1,&7000021,"Verbose","Homerton.Medium",12
%00000000,-1,&7000021,"Choices","Homerton.Medium",12
%00000010,-1,&7000021,"Examine","Homerton.Medium",12
%10000000,-1,&7000021,"Quit","Homerton.Bold.Oblique",12
ModeChange
Here comes my font routines.
============================
X=0
256:
Font%?X<>0:Font%?X-=1:
"Font_LoseFont",X:
"Font_FindFont",,"Homerton.Medium",12*16,12*16
FileLHandle%
FTe=FileLHandle%:
Font%?Te<1
Font%?Te+=1
"Font_LoseFont",Te
SetUpMenu(Menu%):
FontWindow(Main%):
FontWindow(File%)
FontWindow(Save%):
FontWindow(Info%):
FontWindow(FileInfo%)
FontWindow(Choices%):
FontWindow(Pane%)
Debugging%
FontWindow(Debug%)
"Font_LoseFont",Ifhandle%
GBlock%!0=-2:Block%!4=BarIcon%:
"Wimp_DeleteIcon",,Block%:
IconBar
MenuSelect
MenuOpen%
Menu%:
"Wimp_DecodeMenu",,Menu%,Block%,Block2%
$Block2%
"Verbose":
Tick(Menu%,2)
Wimp_BringUpWindow(Operation%,-1):Verbose%=
Wimp_CloseWindow(Operation%):Verbose%=
Tick(Menu%,2)
"Choices":
Wimp_BringUpWindow(Choices%,-1)
#$Block%!0=Choices%:
OpeningWindow
"Examine":
Wimp_BringUpWindow(FileInfo%,-1)
"Quit":Quit%=
FListMenu:Cur%=Block%!0+1:
DisplayText
"Wimp_GetPointerInfo",,Block%
Block%!8=1
BringUpMenu(MenuOpen%,0,0)
DragBox(window%,Flags%)
.K!Block%=window%:
"Wimp_GetWindowState",,Block%:ox%=Block%!4-Block%!20
/Eoy%=Block%!16-Block%!24:Block%!4=0:
"Wimp_GetIconState",,Block%
0ABlock%!4=Flags%:Block%!8=ox%+Block%!8:Block%!12=oy%+Block%!12
1KBlock%!16=ox%+Block%!16:Block%!20=oy%+Block%!20:Block%!24=0:Block%!28=0
2EBlock%!32=&7FFFFFFF:Block%!36=&7FFFFFFF:
"Wimp_DragBox",,Block%
Tick(Menu%,Icon%)
63Tick=Menu%+28:Tick+=(24*Icon%):!Tick=!Tick
Tick(Menu%,Icon%)
:2Tick=Menu%+28:Tick+=(24*Icon%):Tick=!Tick
=(Tick=1)
Pad(V,L)
T$:T$=
T$,"0")+T$
Selected(window%,icon%)
BBBlock%!0=window%:Block%!4=icon%:
"Wimp_GetIconState",,Block%
Flags%=Block%!24
=(Flags%
1<<21)<>0
Select(window%,icon%,state%)
GBBlock%!0=window%:Block%!4=icon%:
"Wimp_GetIconState",,Block%
state%=-1
Flags%=1
Flags%=0
IGBlock%!0=window%:Block%!4=icon%:Block%!8=Flags%<<21:Block%!12=1<<21
"Wimp_SetIconState",,Block%
FontWindow(WHandle%)
"Wimp_WhichIcon",WHandle%,Block%,1<<6,1<<6
OIA=0:
Block%!A<>-1:Icon%=Block%!A:Block2%!0=WHandle%:Block2%!4=Icon%
"Wimp_GetIconState",,Block2%:Flags%=Block2%!24:FHandle%=Flags%>>24
"Font_ReadDefn",FHandle%,Block2%
,,xsize,ysize
"Font_FindFont",,Block2%,xsize,ysize
FHandle%
Font%?FHandle%=0
Font%?FHandle%+=1
"Font_LoseFont",FHandle%
TPBlock2%!0=WHandle%:Block2%!4=Icon%:Block2%!8=FHandle%<<24:Block2%!12=255<<24
"Wimp_SetIconState",,Block2%:A+=4:
StartMessage
YFMName$="<Resource$Dir>.Messages":
"MessageTrans_FileInfo",,MName$
"OS_Module",6,,,17+
MName$
,,Filedesc%
[N$(Filedesc%+16)=MName$:
"MessageTrans_OpenFile",Filedesc%,Filedesc%+16,0
Message(Token$,Par1$,Par2$)
X=0
508
4:Block2%!X=0:
"XMessageTrans_Lookup",Filedesc%,Token$+
0,Block2%,512,Par1$,Par2$
,,Message$
=Message$
Count(Fname$):
Total
Verbose%
IconText(Operation%,2,"Counting")
IconText(Operation%,3,
Right(Fname$))
IconText(Operation%,4,"Total : "+
Total+" bytes")
i3Total=0:
"OS_File",5,Fname$
type,,,,Length%
type=0
1234,"Not found"
type=2
Count(Fname$,0)
Total=Length%
=Total
Count(Dir$,L%)
N%,M%
pGN%=0:
N%<>-1:
"OS_GBPB",10,Dir$,Block2%,1,N%,255,"*"
,,,M%,N%
M%>0
Block2%?16=2
Verbose%
IconText(Operation%,3,
Right(
Strip(Block2%+20)))
Count(Dir$+"."+
Strip(Block2%+20),L%+1)
Total+=Block2%!8
Verbose%
IconText(Operation%,4,"Total : "+
Total+" bytes")
Error(Er%,Ern%,Erm$)
FileOpen%
#N:FileOpen%=
Er%
1:Flag%=%10
2:Flag%=%11
%Block%!0=Ern%:$(Block%+4)=Erm$+
"Wimp_ReportError",Block%,Flag%
,Return%
Return%=2
Quit%=
MakeMod
%ModuleName$=
GetIconText(Main%,1)
Verbose%
IconText(Operation%,2,"Creating")
IconText(Operation%,4,"")
l=1
Next%:file$=Object$(l):path$=Positioned$(l):
9Version$="3.00":Date$="("+
$,5,11)+")":
AssembleCode
Object=1
Next%:Dir$=Object$(Object):Top$=
FileNameFromFull(Dir$)
Dir$,Top$):Rest$=
Dir$,A-1):
"OS_File",5,Dir$
Type
Virtual%
ObType%(Object)=&2000
Verbose%
IconText(Operation%,4,"Virtual application")
IconText(Operation%,3,
Right(Object$(Object)))
Virtual(Object$(Object),"<Wimp$ScrapDir>")
Rest$="<Wimp$ScrapDir>."
Scan("<Wimp$ScrapDir>."+
Right(Object$(Object)),0)
Verbose%
IconText(Operation%,4,"Adding object")
IconText(Operation%,3,
Right(Object$(Object)))
Type=0
1234,"Not found"
Type=2
Scan(Dir$,0)
Type=1
AddFile(Dir$,Positioned$(Object))
Virtual%
ObType%(Object)=&2000
"XOS_Cli","Wipe <Wimp$ScrapDir>."+
Right(Object(Object)) R F ~C ~V"
>Module$=DestName$:
"OS_File",10,Module$,&FFA,,Address,O%
Run%
"OS_Module",11,Address,P%
Scan(Dir$,L%)
N%,M%:N%=0:
N%<>-1:
"OS_GBPB",10,Dir$,Block2%,1,N%,255,"*"
,,,M%,N%:
M%>0
Block2%?16=2
Scan(Dir$+"."+
getname(Block2%+20),L%+1)
AddFile(Dir$+"."+
getname(Block2%+20),Positioned$(Object))
getname(add%)
,b$="":
?add%<>0:b$+=
(?add%):add%+=1:
AddFile(Pos$,Res$)
<DestPosition$=Res$+"."+
Pos$,
Pos$-
Rest$):Fname$=Pos$
"OS_File",5,Fname$
Type,,Load,Exec,Len,Acc
Type=1
[OPT 4
.Pointer
)EQUD Load:EQUD Exec:EQUD Len:EQUD Acc
8EQUS
DestPosition$,
DestPosition$-12):EQUB 0:ALIGN
&EQUD Len+4:
LoadFile(Fname$):ALIGN
.Next EQUD 0
)]:!(Address+Pointer-4)=Next-Pointer+4
LoadFile(A$)
"Load "+A$+" "+
~O%:O%+=Len:P%+=Len
FileNameFromFull(A$)
A$,"."):A=
A$,"."):A$=
A$-A):
AssembleCode
X=4
P%=0:O%=Address
[OPT X
OEQUD 0:EQUD Initialise:EQUD Finalise:EQUD 0:EQUD Title:EQUD Help:EQUD Table
.Title
!EQUS ModuleName$:EQUB 0:ALIGN
.Help
DEQUS ModuleName$:EQUB 9:EQUS Version$:EQUB 32:EQUS Date$:EQUB 32
4EQUS "Resource Filing System Files":EQUB 0:ALIGN
M.Table:EQUS "ModuleFiles":EQUB 0:ALIGN:EQUD 0:EQUD 0:EQUD 0:EQUD FileHelp
EQUD 0
4.FileHelp:EQUS "This is the module "+ModuleName$
@EQUS " which contains the following files :":EQUB 13:EQUB 10
AEQUS "File":EQUB 9:EQUB 9:EQUS"Positioned at":EQUB 13:EQUB 10
ListFiles:EQUB 0:ALIGN
.Initialise
LSTMFD R13!,{R0,R14}:ADR R0,ResourceFiles:SWI "XResourceFS_RegisterFiles"
LDMFD R13!,{R0,R15}
.Finalise
NSTMFD R13!,{R0,R14}:ADR R0,ResourceFiles:SWI "XResourceFS_DeregisterFiles"
LDMFD R13!,{R0,R15}
.ResourceFiles EQUD 0
ListFiles
File,A$,A,B$:
File=1
Next%:A$=Object$(File):A=
A$,".")
A:A$=
A$-A):A=
A$,"."):
Positioned$(File),
Positioned$(File)-10)
A$<8
9+B$
[OPT X
EQUS A$:EQUS B$
EQUB 13:EQUB 10:]:
GetWord
A,B,C,D,E:A=
#X:B=
#X:C=
#X:D=
#X:E=A+(B<<8)+(C<<16)+(D<<24)
Left(T$)
A$,A:A$="":
T$,"."):A=
T$,".")
)A$=A$+
T$,A):T$=
T$-A):
Right(A$):
A:A=
A$,".")
A<>0:A$=
A$-A):A=
A$,"."):
Choices(ChoiceFile$)
1Run%=0:Multiple%=0:Mul$="":
Read(ChoiceFile$)
(Mul$)=32:Mul$=
Mul$,
Mul$-1):
Mul$,12)<>"Resources:$."
Mul$="":Multiple%=0
Read(File$):
X,A$:X=
File$:A$=""
GetLine:
Convert(A$)<>"finish"
Convert(A$),1)<>"#"
A$,":"):L$=
A$,A-1):R$=
A$-A)
Convert(L$):RR$=
Convert(R$):
"multiple file drag":
RR$="yes"
Multiple%=
"save and run":
RR$="yes"
Run%=
"multiple directory":Mul$=R$
"virtual":
RR$="yes"
Virtual%=
Convert(A$)="finish"
GetLine:
A$:A$="":A=
:A$=A$+
A=13
A=10
A$>250
A$>250
1234,"Error in data file, line too long"
Convert(T$)
B$,X:B$="":
X=1
T$:B$+=
T$,X,1))
&20):
(B$)=32:B$=
B$-1):
B$,1)=" ":B$=
Kill(TaskN$):
Ptr%,Task$:Ptr%=0
"TaskManager_EnumerateTasks",Ptr%,Block%,16
Ptr%
+B%=Block%!4:ItHandle%=Block%!0:Task$=""
?B%>31:Task$+=
(?B%):B%+=1:
Task$=TaskN$
ItHandle%<>THandle%
$NBlock%!0=32:Block%!16=0:
"Wimp_SendMessage",17,Block%,ItHandle%:Task$=""
Ptr%<0
Virtual(App$,TempDir$)
Boot%,Run%,Sprites%,NewDir$,File%:NewDir$=TempDir$+"."+
Right(App$)
,9Boot%=
Exist(App$+".!Boot"):Run%=
Exist(App$+".!Run")
-6Sprites%=
Exist(App$+".!Sprites"):
"CDir "+NewDir$
Boot%
//File%=
(NewDir$+".!Boot"):
#File%,"|!Boot"
#File%,"|A Virtual !Boot created by !Resource":
#File%,""
Sprites%
#File%,"IconSprites "+App$+".!Sprites"
#File%,"Filer_Run "+App$+".!Boot":
#File%
"Settype "+NewDir$+".!Boot Obey"
Run%
6-File%=
(NewDir$+".!Run"):
#File%,"|!Run"
#File%,"|A Virtual !Run created by !Resource":
#File%,""
Sprites%
#File%,"IconSprites "+App$+".!Sprites"
#File%,"Filer_Run "+App$+".!Run":
#File%
"Settype "+NewDir$+".!Run Obey"
Exist(File$):
X:X=
(File$):
#X:=(X<>0)
Convert(A$):
A=1
A$,A,1)=
A$,A,1)
&20:
Redraw
0,0);!Block%:
!Window%=!Block%
G<sprite$="Texturiser":
"Wimp_BaseOfSprites"
rom%,ram%
"Wimp_ReadPixTrans",&100,ram%,sprite$,,,,Scale%,Trans%
"OS_SpriteOp",256+40,ram%,sprite$
,,,width%,height%
"Wimp_RedrawWindow",,Block%
flag%
flag%
"Wimp_GetWindowInfo",,Window%
M&X%=Window%!44+Window%!20-Window%!4
X%+width%*2<Block%!28:X%+=width%*2:
O'Y%=Window%!48+Window%!24-Window%!16
Y%+height%*4<Block%!32:Y%+=height%*4:
startY%=Y%
X%<Block%!36
Y%<Block%!40
"OS_SpriteOp",256+52,ram%,sprite$,X%,Y%,0,Scale%,Trans%:Y%+=height%*4
Y%=startY%:X%+=width%*2
"Wimp_GetRectangle",,Block%
flag%