GET "CGHDR"
LET START(PARMST) BE $(
SELECTINPUT(FINDINPUT("CODE"))
$( LET RELCON = 0
LET B1 = RD16()
LET COUNT = RD16()*2
LET V = GETVEC(COUNT-1)
SELECTOUTPUT(FINDOUTPUT("SYSPRINT"))
WRITEF("LOADER PARMST IS %S *N", PARMST)
FOR I = 1 TO GETBYTE(PARMST, 0) DO
$( LET CH = GETBYTE(PARMST, I)
IF CH='/' THEN BREAK
RELCON := RELCON*16 + ('0'<=CH<='9'->CH-'0',CH-'A'+10)
$)
UNLESS B1=T.HUNK DO
$(
WRITEF("*NFIRST WORD IS %X4", B1)
STOP(8)
$)
IF V=0 DO STOP(9)
FOR I = 0 TO COUNT-1 DO V!I := RD8()
B1 := RD16()
IF B1=T.RELOCB & RELCON~=0 DO
$( B1 := RD16()
FOR I = 1 TO B1 DO
$( LET J = RD16()
LET VAL = ((V!(J+1))<<8) + V!J
VAL := VAL + RELCON
V!J := VAL&255
V!(J+1) := (VAL>>8)&255
$)
$)
SELECTOUTPUT(FINDOUTPUT("LOADF"))
WRITEF("LOC%X4", RELCON)
FOR I = 0 TO COUNT-1 DO
$( IF (I REM 16)=0 DO WRITEF("*NOG%X4", I)
WRITEHEX(V!I, 2)
$)
WRITES("*NSTOR*N")
$)
$)
AND RD8() = VALOF
$( LET VAL = READX()
RESULTIS VAL*16 + READX()
$)
AND READX() = VALOF
$( LET C = ?
C := RDCH() REPEATWHILE C='*S' | C='*N'
RESULTIS '0'<=C<='9' -> C-'0', C-'A'+10
$)
AND RD16() = VALOF
$( LET VAL = RD8()
RESULTIS (RD8()<<8) | VAL
$)