**********************************************************************
* Name: RFU
* Desc: RF uncompressor
**********************************************************************
ASSEMBLE
CON(1) 8
RPL
xNAME RFU
::
CK1&Dispatch
str
::
CODE
GOSBVL =SAVPTR
A=DAT1 A
D1=A ->str
D1=D1+ 5
A=DAT1 A
C=0 A
LC(1) #F
?A<C A
GOYES rfubad Too small to be RF object
D1=D1+ 5
A=DAT1 A
LC(5) #24652 RF ID
?A#C A
GOYES rfubad
D1=D1+ 5
GOSBVL =ROOM
A=DAT1 A
A=A+CON A,10
?A>=C A
GOYES +
+ GOVLNG =GPPushT/FLp
rfubad LC(5) =SETTYPEERR
GOVLNG =GETPTREVALC
ENDCODE
IT GARBAGE
CODE
GOSBVL =SAVPTR
A=DAT1 A
D1=A
D1=D1+ 15
A=DAT1 A
D1=D1+ 5
CD1EX
RSTK=C
C=A A
RSTK=C
GOSBVL =GETTEMP
GOSBVL =D1=DSKTOP
CD0EX
DAT1=C A
D1=C
C=RSTK
R2=C.F A
C=RSTK
R3=C.F A
GOSUB DORFU
GOSBVL =GETPTRLOOP
DORFU C=R3.F A
D0=C
D=0 X
RFUloop D=D-1 XS
GONC +
LC(3) #700
C=DAT0 B
D0=D0+ 2
D=C X
+ D=D+D B
GOC +
GOTO RFUpat
+ LC(2) 4
GOSUB RFUbits
?A#0 B
GOYES RFUexpand
LC(2) 5
GOSUB RFUbits
?A=0 B
GOYES +
LC(2) #1F
A=A+C B
GOTO RFUexpand
+ LC(2) #5F
GOSBVL =MOVEDOWN
A=R2.F A
LC(5) #5F
A=A-C A
GOC RFUgofail
?A=0 A
RTNYES
R2=A.F A
GOTO RFUloop
RFUgofail GOTO RFUfail
RFUexpand B=A A
C=A A
GOSBVL =MOVEDOWN
C=R2.F A
C=C-B A
GOC RFUgofail
?C=0 A
RTNYES
R2=C.F A
RFUpat LC(2) 2
GOSUB RFUbits
?A#0 B
GOYES +
A=A+CON B,8
+ A=A+CON B,4
R0=A.F A
LC(2) 7
GOSUB RFUbits
CD0EX
R3=C.F A
C=R0.F A
B=C A
A=A+1 A
CD1EX
D1=C
C=C-A A
D0=C
B=B-1 B
- C=DAT0 B
DAT1=C 1
D0=D0+ 1
D1=D1+ 1
B=B-1 B
GONC -
C=R2.F A
A=R0.F A
C=C-A A
GOC RFUshit
?C=0 A
RTNYES
R2=C.F A
C=R3.F A
D0=C
GOTO RFUloop
RFUshit GOTO RFUfail
RFUbits B=C B
A=0 A
-- A=A+A B
D=D-1 XS
GOC ++
- D=D+D B
GONC +
A=A+1 B
+ B=B-1 B
GONC --
RTN
++ LC(3) #700
C=DAT0 B
D0=D0+ 2
D=C X
GONC -
RFUfail LC(5) =SETSIZEERR * This makes no sense in overflows *
GOVLNG =GETPTREVALC * Could cause a crash *
ENDCODE
;
;
**********************************************************************