home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 3
/
PDCD_3.iso
/
utilities
/
utilss
/
siod
/
!Siod
/
!RunImage
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1993-03-15
|
24KB
|
810 lines
>$.TMP.!Sml.!RunImage
Multitasker for !Sml (c) 1992 Robin Watts
bent to do Siod 2.09
screen% 80*32
indir% 1024
windata% 4096
block% 256
code% 10000
menublock% 2048
cblock% 24
ON ERROR MODE MODE:REPORT:PRINT;" at line ";ERL:END
assemble
initialise
getmodevars
conch
closedown
initialise
"Wimp_Initialise",200,&4B534154,"Siod Tasker"
version%,task%
closedown
"Wimp_CloseDown",task%,&4B534154
conch
setup
loadwindows
initmenus
openwindow(mainwh%,
grabcaret
vdu(12)
!ypos=31
launchsiod
closedown%
closealltasks
setup
size%=(!xmax+1)*(!ymax+1)
closedown%=
!caretowned%=0
prompt%=
taskstarted%=
loadwindows
"Wimp_OpenTemplate",,"<Conch$Dir>.Templates"
9%mainwh%=
doloadtemplate(0,"main")
:%infowh%=
doloadtemplate(1,"info")
"Wimp_CloseTemplate"
doloadtemplate(n%,ident$)
whandle%
"Wimp_LoadTemplate",,windata%+n%*2048,indir%+n%*512,indir%+n%*512+512,-1,
ident$+
(0))),0
"Wimp_CreateWindow",,windata%+n%*2048
whandle%
=whandle%
openwindow(wh%,tooldsize%)
!block%=wh%
tooldsize%
"Wimp_GetWindowInfo",,block%
block%!28=-1
"Wimp_OpenWindow",,block%
"Wimp_Poll",%110001,block%
reason%,block%
reason%
redrawwindow
openwindow(!block%,
closealltasks
mouseclicked
keypressed
menuselected
gaincaret
losecaret
17,18,19
block%!16
closealltasks
&400C1
getmodevars
&808C1
childoutput
&808C2
childstarted
&808C3
childdied
redrawwindow
"Wimp_RedrawWindow",,block%
more%
more%<>0
t. !minx%=(block%!28-block%!4+block%!20)
u. !maxx%=(block%!36-block%!4+block%!20)
v0 !miny%=-(block%!40-block%!16+block%!24)
w2 !maxy%=-(block%!32-block%!16+block%!24)
32+1
redraw
"Wimp_GetRectangle",,block%
more%
closealltasks
taskstarted%
block%!20=1
block%!16=&808C0
block%!0=28
block%!12=0
block%!24=4
"Wimp_SendMessage",17,block%,handle%
taskstarted%=
childdied
assemble
pass%=0
P%=code%
[OPT pass%
.screen
EQUD screen%
EQUD 0
.xmax
EQUD 79
.ymax
EQUD 31
.xwinmax
EQUD 79
.xwinmin
EQUD 0
.ywinmax
EQUD 31
.ywinmin
EQUD 0
.xpos
EQUD 0
.ypos
EQUD 0
.vdusupressed
EQUD 0
.followingbytes
EQUD 0
.numbertocome
EQUD 0
.queueaddr
EQUD queue
.queue
EQUD 0
EQUD 0
EQUD 0
EQUD 0
.bytestoignore
EQUD 0
H \ Enter with Vdu Char in vdu
@ \ No exit Conditions
.dovdu
+ STMFD R13!,{R0-R12,R14}
LDRB R0,vdu
( LDR R1,bytestoignore
CMP R1,#0
" BNE ignorebyte
) LDR R1,followingbytes
CMP R1,#0
! BNE following
) CMP R0,#6 :BEQ vduon
' LDR R1,vdusupressed
+ CMP R1,#1 :BEQ ignore0
* CMP R0,#127:BEQ delete
- CMP R0,#32 :BGE printable
+ CMP R0,#0 :BEQ ignore0
8 CMP R0,#1 :
Q R0,#1 :BEQ ignore
+ CMP R0,#2 :BEQ ignore0
+ CMP R0,#3 :BEQ ignore0
+ CMP R0,#4 :BEQ ignore0
+ CMP R0,#5 :BEQ ignore0
- CMP R0,#7 :BEQ printable
- CMP R0,#8 :BEQ backspace
0 CMP R0,#9 :BEQ forwardspace
, CMP R0,#10 :BEQ linefeed
* CMP R0,#11 :BEQ upline
' CMP R0,#12 :BEQ cls
+ CMP R0,#13 :BEQ creturn
+ CMP R0,#14 :BEQ ignore0
+ CMP R0,#15 :BEQ ignore0
+ CMP R0,#16 :BEQ ignore0
8 CMP R0,#17 :
Q R0,#1 :BEQ ignore
8 CMP R0,#18 :
Q R0,#2 :BEQ ignore
8 CMP R0,#19 :
Q R0,#5 :BEQ ignore
+ CMP R0,#20 :BEQ ignore0
* CMP R0,#21 :BEQ vduoff
8 CMP R0,#22 :
Q R0,#1 :BEQ ignore
8 CMP R0,#23 :
Q R0,#9 :BEQ ignore
8 CMP R0,#24 :
Q R0,#8 :BEQ ignore
8 CMP R0,#25 :
Q R0,#5 :BEQ ignore
) CMP R0,#26 :BEQ vdu26
+ CMP R0,#27 :BEQ ignore0
. CMP R0,#28 :BEQ textwindow
8 CMP R0,#29 :
Q R0,#4 :BEQ ignore
( CMP R0,#30 :BEQ home
' CMP R0,#31 :BEQ tab
.ignore0
* LDMFD R13!,{R0-R12,PC}
.vduon
MOV R0,#0
' STR R0,vdusupressed
B ignore0
.delete
3 MOV R0,#8 :STR R0,vdu:BL dovdu
3 MOV R0,#32 :STR R0,vdu:BL dovdu
3 MOV R0,#8 :STR R0,vdu:BL dovdu
LDR R1,xpos
LDR R2,ypos
" BL changedbox
B ignore0
.backspace
LDR R0,xpos
LDR R1,ypos
" LDR R2,xwinmin
" LDR R3,ywinmin
" LDR R4,xwinmax
" LDR R5,ywinmax
SUB R0,R0,#1
STR R0,xpos
CMP R0,R2
BGE ignore0
MOV R0,R4
STR R0,xpos
SUB R1,R1,#1
STR R1,ypos
CMP R1,R3
BGE ignore0
) BL scrolldownoneline
MOV R1,R3
STR R1,ypos
B ignore0
.forwardspace
LDR R0,xpos
LDR R1,ypos
" LDR R2,xwinmin
" LDR R3,ywinmin
" LDR R4,xwinmax
" LDR R5,ywinmax
ADD R0,R0,#1
STR R0,xpos
CMP R0,R4
BLE ignore0
MOV R0,R2
STR R0,xpos
ADD R1,R1,#1
STR R1,ypos
CMP R1,R5
BLE ignore0
' BL scrolluponeline
MOV R1,R5
STR R1,ypos
B ignore0
.linefeed
MOV R0,#13
STR R0,vdu
BL dovdu
LDR R0,xpos
LDR R1,ypos
$" LDR R2,xwinmin
%" LDR R3,ywinmin
&" LDR R4,xwinmax
'" LDR R5,ywinmax
( ADD R1,R1,#1
STR R1,ypos
CMP R1,R5
BLE ignore0
,' BL scrolluponeline
MOV R1,R5
STR R1,ypos
B ignore0
.upline
LDR R0,xpos
LDR R1,ypos
3" LDR R2,xwinmin
4" LDR R3,ywinmin
5" LDR R4,xwinmax
6" LDR R5,ywinmax
7 SUB R1,R1,#1
STR R1,ypos
CMP R1,R3
BGE ignore0
;) BL scrolldownoneline
MOV R1,R3
STR R1,ypos
B ignore0
@" LDR R1,xwinmax
A" LDR R2,ywinmax
B! BL changedbox
MOV R4,R1
MOV R5,R2
E" LDR R1,xwinmin
F" LDR R2,ywinmin
G! BL changedbox
MOV R3,R2
MOV R2,R1
LDR R6,xmax
K ADD R6,R6,#1
L! LDR R8,screen
MOV R9,#&20
MOV R1,R3
.clslp1
MOV R0,R2
.clslp2
R# MLA R7,R1,R6,R8
S ADD R7,R7,R0
T STRB R9,[R7]
U ADD R0,R0,#1
CMP R0,R4
BLE clslp2
X ADD R1,R1,#1
CMP R1,R5
BLE clslp1
STR R2,xpos
STR R3,ypos
B ignore0
.creturn
_" LDR R0,xwinmin
STR R0,xpos
B ignore0
.vduoff
MOV R0,#1
d' STR R0,vdusupressed
B ignore0
.vdu26
MOV R0,#0
h" STR R0,xwinmin
i" STR R0,ywinmin
STR R0,xpos
STR R0,ypos
LDR R0,xmax
m" STR R0,xwinm