* utility area

OVERWT TEXT 'ArcFile Cannot Overwrite Itself!' 32

NAMCHK LI   R9,>A000
       CB   @SDD+1,@ODD+1
       JNE  NAMCKE
       ABS  @SWPFLG
       JEQ  NAMCKE
NAMCK0 MOV  *R9,*R9
       JEQ  NAMCKE
       MOV  R8,R1
       MOV  R9,R0
       LI   R2,10
NAMCK1 CB   *R1+,*R0+
       JNE  NXTNAM
       DEC  R2
       JNE  NAMCK1
       BLWP @VMBWD
       DATA >79C,OVERWT,32
       B    @ERROR3
NXTNAM AI   R9,18
       JMP  NAMCK0
NAMCKE RT

PRESCN MOV  @>8304,R0
       MOV  @CURBLK,R5
       COC  @H100,R0
       JEQ  EOFCK
       COC  @H8000,R0
       JEQ  VARSCN
       CLR  R0
       LI   R1,>100
       MOV  @>8306,R2
       ANDI R2,>FF
       DIV  R2,R0
       MOV  R1,R1
       JEQ  EOFCK
       LI   R0,>8C0
       S    R1,R0
       MOV  R1,R2
       MOV  R5,R3
PSC1   BLWP @VMBC
       AI   R0,>100
       DEC  R3
       JNE  PSC1
       JMP  EOFCK
VARSCN LI   R0,>7C0
       LI   R3,>8C0
       MOV  R5,R13
VARSC2 BLWP @VSBR
       SRL  R1,8
       CI   R1,>FF
       JEQ  EOREC
       A    R1,R0
       INC  R0
       C    R0,R3
       JLT  VARSC2
       JMP  ABTPSC
EOREC  INC  R0
       C    R0,R3
       JEQ  NXTREC
       MOV  R3,R2
       S    R0,R2
       BLWP @VMBC
NXTREC MOV  R3,R0
       AI   R3,>100
       DEC  R13
       JNE  VARSC2
       JMP  ABTPSC
EOFCK  LI   R0,>6C0
EOFCK2 MOV  R6,R6
       JNE  ABTPSC
       MOVB @>8306,R2
       JEQ  ABTPSC
       SRL  R2,8
       A    R2,R0
       CI   R0,>7C0
       JEQ  ABTPSC
       MOV  R5,R1
       SLA  R1,8
       A    R1,R0
       NEG  R2
       AI   R2,>100
EOFCK3 BLWP @VMBC
ABTPSC RT

BINDEC MOVB @H20,*R2+
       DEC  R3
       JNE  BINDEC
       CI   R1,9
       JH   BINDC3
       CLR  R0
PUTDIG AI   R1,>30
       DEC  R2
       MOVB @>8323,*R2
BINDC2 MOV  R0,R1
       JEQ  FINBIN
BINDC3 CLR  R0
       DIV  @TEN,R0
       JMP  PUTDIG
FINBIN RT

CNTBMP LI   R4,>C8
       LI   R0,>2038
       CLR  R1
CNTBP1 LI   R3,16
       MOV  *R0+,R2
CNTBP2 SLA  R2,1
       JOC  DCIT
       INC  R1
DCIT   DEC  R3
       JNE  CNTBP2
       DECT R4
       JNE  CNTBP1
       CB   @>2011,@B50
       JNE  DCITFN
       SLA  R1,1
DCITFN RT

SXROLL BLWP @VMBRD
       DATA >4A0,>3000,>320
       BLWP @VMBWD
       DATA >478,>3000,>320
       LI   R2,>28
SCROL2 MOVB @H20,@>8C00
       DEC  R2
       JNE  SCROL2
       RT

MORECT TEXT '[More]'
SCRPS  DATA 20
SCROLL MOV  R11,@SCRO99+2
       ABS  @PRTFL
       JNE  SXROLC
       BL   @PTROUT
SXROLC BL   @SXROLL
       DEC  @SCRPS
       JNE  SCROL3
       MOV  @D20,@SCRPS
       BLWP @VMBWD
       DATA >79A,MORECT,6
       LI   R0,>7BF
       LI   R1,'  '
       SETO @NOF9
       BL   @KEYINB
       CLR  @NOF9
       CI   R1,>F00
       JEQ  BRANB3
       CI   R1,>8300
       JNE  SCRO97
BRANB3 ABS  @PRTFL
       JNE  BRAN2
       BL   @CLSPTR
BRAN2  B    @CMDFIN
SCRO97 BLWP @VMBWD
       DATA >79A,PROC,6
SCROL3 CLR  @>8374
       BLWP @KSCAN
       CB   @>837C,@H20
       JNE  SCRO99
       CB   @>8375,@FCTN9
       JEQ  SCRO99
       CB   @>8375,@CTRLC
       JEQ  SCRO99
SCRO98 BLWP @KSCAN
       CB   @>837C,@H20
       JNE  SCRO98
SCRO99 B    @0

PTRPRS LI   R2,PRTDEV
       SB   @PTRPAB,@PTRPAB
       MOV  @H798,@PTRPAB+2
       MOVB @D40,@PTRPAB+5
PTRPR2 CB   @H20,*R2+
       JEQ  PTRPZX
       CI   R2,PRTDEV+27
       JNE  PTRPR2
       INC  R2
PTRPZX AI   R2,-1-PRTDEV
       MOV  R2,@PTRPAB+8
       BLWP @VMBWD
       DATA >3A,PRTDEV,27
PTROUT BLWP @VMBWD
       DATA >30,PTRPAB,10
       MOV  @H39,@>8356
       BLWP @DSRLNK
       DATA 8
       JNE  PTREXT
       ABS  @PRTFL
       JNE  PTREXT
       SETO @PRTFL
CLSPTR MOVB @PTR01,@PTRPAB
       JMP  PTROUT
PTREXT MOVB @PTR03,@PTRPAB
       RT

PTR01  BYTE 1
PTR03  BYTE 3
H798   DATA >798
H770   DATA >770
H39    DATA >39
TEN    DATA 10
PTRPAB DATA >0012,>0798,>5028,0,0

ARCLT  TEXT 'ArcFile:'
LIN1   TEXT 'Disk: xxxxxxxxxx Size xxxx Free xxxx'
LIN2   TEXT 'xxxxxxxxxx   xxxx  xxx/xxx         x'
LSTLIN TEXT 'Total Files: xxxx   Total Size: xxxx'
DIS    TEXT ' Dis'
FIX    TEXT '/Fix'
INT    TEXT ' Int'
VAR    TEXT '/Var'
PROG   TEXT ' Program'

DSKCAT BL   @CLS
       LI   R1,LIN1+6
       LI   R0,>2000
       MOV  *R0+,*R1+
       MOV  *R0+,*R1+
       MOV  *R0+,*R1+
       MOV  *R0+,*R1+
       MOV  *R0+,*R1+
       MOV  *R0,R1
       LI   R2,LIN1+21
       LI   R3,5
       BL   @BINDEC
       BL   @CNTBMP
       LI   R2,LIN1+31
       LI   R3,5
       BL   @BINDEC
       BLWP @VMBWD
       DATA >79A,LIN1,36
       JMP  FILSBS
FILLST BLWP @VMBWD
       DATA >79A,ARCLT,8
       BLWP @VMBWD
       DATA >7A3,IFILNM,10
FILSBS ABS  @PRTFL
       JNE  FIXLST
       BL   @PTRPRS
FIXLST BL   @SCROLL
       CLR  R14
       CLR  R15
       LI   R9,>A000
FILLS1 BL   @SCROLL
       LI   R1,LIN2
       MOV  *R9+,*R1+
       JEQ  FILXT
       MOV  *R9+,*R1+
       MOV  *R9+,*R1+
       MOV  *R9+,*R1+
       MOV  *R9+,*R1+
       MOV  *R9+,R1
       COC  @H100,R1
       JNE  CKTYP
       LI   R0,PROG
       LI   R2,LIN2+18
       MOV  *R0+,*R2+
       MOV  *R0+,*R2+
       MOV  *R0+,*R2+
       MOV  *R0,*R2
       MOV  R1,R13
       MOV  *R9,R1
       DEC  R1
       MOVB @2(9),R2
       JNE  FILLSS
       INC  R1
FILLSS AB   R2,R1
       SWPB R1
       LI   R2,LIN2+28
       LI   R3,5
       BL   @BINDEC
       JMP  FILLS2
CKTYP  LI   R0,INT
       COC  @H0200,R1
       JEQ  CKTYP2
       LI   R0,DIS
CKTYP2 LI   R2,LIN2+18
       MOV  *R0+,*R2+
       MOV  *R0+,*R2+
H0200  EQU  $
       LI   R0,VAR
       COC  @H8000,R1
       JEQ  CKTYP3
       LI   R0,FIX
CKTYP3 MOV  *R0+,*R2+
       MOV  *R0,*R2
       MOV  R1,R13
       MOV  @2(R9),R1
       ANDI R1,>FF
       LI   R2,LIN2+28
       LI   R3,5
       BL   @BINDEC
FILLS2 MOVB @H20,@LIN2+35
       ANDI R13,>800
       JEQ  FILLS3
       MOVB @PROG+1,@LIN2+35
FILLS3 INC  R14
       MOV  *R9+,R1
       INC  R1
       A    R1,R15
       AI   R9,4
       LI   R2,LIN2+12
       LI   R3,5
       BL   @BINDEC
       BLWP @VMBWD
       DATA >79A,LIN2,36
       JMP  FILLS1
FILXT  MOV  R14,R1
       LI   R2,LSTLIN+12
       LI   R3,5
       BL   @BINDEC
       MOV  R15,R1
       LI   R2,LSTLIN+31
       LI   R3,5
       BL   @BINDEC
       BL   @SCROLL
       BLWP @VMBWD
       DATA >79A,LSTLIN,36
       ABS  @PRTFL
       JNE  SXXOLL
       BL   @PTROUT
       BL   @CLSPTR
SXXOLL B    @CMDFN2

H5     DATA >05FF
CLSG   LI   R12,760
       JMP  CLSG1
CLSA   LI   R12,720
CLSG1  LI   R10,>C844
       JMP  CLSE
CLS    LI   R10,>7844
       LI   R12,840
CLSE   MOVB R10,@>8C02
       SWPB R10
       MOVB R10,@>8C02
       LI   R10,'  '
CLS2   MOVB R10,@>8C00
       DEC  R12
       JNE  CLS2
       MOV  @D20,@SCRPS
       RT

KEYIN  LI   R1,'_ '
KEYINB LI   R12,300
       BLWP @VSBW
       MOV  @H5,@>8374
KEYINL BLWP @KSCAN
       CB   @H20,@>837C
       JEQ  KEYINX
       DEC  R12
       JNE  KEYINL
       SWPB R1
       JMP  KEYINB
KEYINX CLR  R1
       MOVB @>8375,R1
CFCTN9 ABS  @NOF9
       JNE  KEYINR
FCTN9  EQU  $+2
       CI   R1,>0F00
       JEQ  KEYINM
CTRLC  EQU  $+2
       CI   R1,>8300
       JNE  KEYINR
KEYINM B    @MAIN
KEYINR RT

READX  B    *R10
READLN MOV  R11,R10
       MOV  R9,R1
       BLWP @VMBW
       CLR  R8       R0=scrnloc
READL1 LI   R1,' _'  R2=maxlen
       MOVB *R9,R1   R8=curlen
       SWPB R1
       BL   @KEYINB  R9=buffer loc
       CI   R1,>7E00
       JH   READL1
       CI   R1,>2000
       JL   CTRLCK
       BLWP @VSBW
       MOVB R1,*R9+
READL2 INC  R0
       INC  R8
       C    R8,R2
       JNE  READL1
       DEC  R0
       DEC  R8
       DEC  R9
       JMP  READL1
CTRLCK CI   R1,>800
       JNE  CKENT
       MOV  R8,R8
       JEQ  READL1
       DEC  R8
       MOVB *R9,R1
       BLWP @VSBW
       DEC  R9
       DEC  R0
       JMP  READL1
CKENT  CI   R1,>D00
       JNE  CKERAS
       MOV  R8,R8
       JNE  CKENT2
       CB   *R9,@H20
       JEQ  READL1
CKENT2 MOVB *R9,R1
       BLWP @VSBW
       JMP  READX
CKERAS CI   R1,>700
       JNE  CKFOR
       S    R8,R0
       S    R8,R9
       CLR  R8
ZAPBUF MOVB @READL1+2,*R9+
       INC  R8
       C    R8,R2
       JNE  ZAPBUF
       S    R8,R9
       CLR  R8
       MOV  R9,R1
       BLWP @VMBW
       JMP  READL1
CKFOR  CI   R1,>900
       JNE  CKDEL
       MOVB *R9+,R1
       BLWP @VSBW
       JMP  READL2
CKDEL  CI   R1,>300
       JNE  CKINS
       MOV  R8,R11
       MOV  R9,R1
CKDEL1 MOVB @1(R1),*R1
       INC  R1
       INC  R11
       C    R11,R2
       JNE  CKDEL1
       DEC  R11
       A    R9,R11
       S    R8,R11
       MOVB @H20,*R11
       MOV  R9,R1
       S    R8,R1
       S    R8,R0
       BLWP @VMBW
       A    R8,R0
CKDEL2 B    @READL1
CKINS  CI   R1,>400
       JNE  CKREDO
       MOV  R9,R1
       S    R8,R1
       MOV  R2,R11
       A    R2,R1
CKINS1 DEC  R1
       DEC  R11
       C    R11,R8
       JEQ  NOWSP
       MOVB @-1(R1),*R1
       JMP  CKINS1
NOWSP  MOVB @H20,*R1
       S    R8,R0
       MOV  R9,R1
       S    R8,R1
       BLWP @VMBW
       A    R8,R0
       JMP  CKDEL2
CKREDO CI   R1,>600
       JNE  CKDEL2
       JMP  REDOHK

SAVR3  DATA 0
GETIN  MOV  R11,R6
       MOV  R3,@SAVR3
GETINR LI   R7,>51D    R7 marks beginning of current disp. line
GETIN1 MOV  *R3+,R1    R3 = branch puller
       JEQ  GETINB
D20    EQU  $+2
       LI   R2,20
       MOV  R7,R0
       BL   *R1
B50    EQU  $+3
GETIN2 AI   R7,>50
       JMP  GETIN1
GETINB ABS  @DSKKTF
       JNE  GETIN$
       BLWP @VMBWD
       DATA >79D,PAKTS,30
       LI   R0,>7BF
       LI   R1,'  '
       BL   @KEYINB
       CI   R1,>600
       JNE  GETIN$
REDOHK MOV  @SAVR3,R3
       BL   @CLSG
       JMP  GETINR
GETIN$ BLWP @VMBWD
       DATA >79D,PROC,30
       ABS  @DEATHF
       JEQ  GETN$$
       LI   R0,>0420
       CLR  R1
       B    R0
GETN$$ B    *R6

GSDRV  LI   R1,SDRV
       LI   R4,SDD
       LI   R5,IDRV
       JMP  GDRV
GODRV  LI   R1,TDRV
       LI   R4,ODD
       LI   R5,ODRV
GDRV   BLWP @VMBW
       AI   R0,21
GSDRV2 MOV  *R4,R1
       BL   @KEYINB
       CI   R1,>600
       JNE  NOHK1
       B    @REDOHK
NOHK1  CI   R1,>D00
       JNE  GSDRV3
       MOVB @1(4),R1
       JMP  GDRV4
GSDRV3 CI   R1,'1'*256
       JL   GSDRV2
       CI   R1,'Z'*256
       JH   GSDRV2
GDRV4  BLWP @VSBW
       MOVB R1,@1(R4)
       AI   R1,->3000
       MOVB R1,*R5
       JMP  GETIN2

GSFIL  LI   R1,SFIL
       LI   R9,IFILNM
       JMP  GFIL2
GOFIL  LI   R1,TFIL
       LI   R9,OFILNM
       LI   R10,IFILNM
       MOV  *R10+,*R9+
       MOV  *R10+,*R9+
       MOV  *R10+,*R9+
       MOV  *R10+,*R9+
       MOV  *R10,*R9
       LI   R9,OFILNM
GFIL2  BLWP @VMBW
       LI   R2,10
       AI   R0,21
       BL   @READLN
GETIN9 JMP  GETIN2

QPRTDV ABS  @PRTFL
       JNE  GETIN9
       LI   R1,PRNTD
       LI   R2,7
       BLWP @VMBW
       LI   R2,27
       AI   R0,8
       LI   R9,PRTDEV
       BL   @READLN
       JMP  GETIN9

HY     DATA '_Y'
HN     DATA '_N'
PRTFL  DATA 0
PTECT  DATA 0
QPRINT LI   R1,PRNT
       BLWP @VMBW
       LI   R2,PRTFL
QPRTXX MOV  @HN,@QCOMPL+2
       JMP  QCMZZZ
QPROTC LI   R1,PROT
       BLWP @VMBW
       LI   R2,PTECT
       JMP  QPRTXX
QSWAP  SETO @SWPFLG
       CB   @SDD+1,@ODD+1
       JNE  GETIN9
       LI   R1,SWAPD
       BLWP @VMBW
       LI   R2,SWPFLG
       JMP  QPRTXX
QPKALL LI   R1,PAKALL
       INCT R2
       BLWP @VMBW
       JMP  QUPHO
QUPALL LI   R1,EXTALL
       LI   R2,25
       BLWP @VMBW
QUPHO  A    R2,R0
       INC  R0
       LI   R2,ALLFLG
       MOV  @HY,@QCOMPL+2
       JMP  QCOMPS
QCOMPR LI   R1,CMPRS$
       BLWP @VMBW
       LI   R2,PAKFLG
QCOMPT MOV  @HY,@QCOMPL+2
QCMZZZ AI   R0,21
QCOMPS CLR  *R2
QCOMPL LI   R1,'_Y'
       BL   @KEYINB
       CI   R1,>600
       JNE  NOHK2
       B    @REDOHK
NOHK2  CI   R1,>0D00
       JEQ  QCOMPY
CHOSIT CI   R1,'Y'*256
       JEQ  QCOMPM
       CI   R1,'N'*256
       JNE  QCOMPL
       INV  *R2
       JMP  QCOMPM
QCOMPY MOVB @QCOMPL+3,R1
       JMP  CHOSIT
QCOMPM BLWP @VSBW
       JMP  GETIN9

H7C9   DATA >7C9
DELPAB DATA >0700,0,0,0
DELLEN DATA 0
       TEXT 'DSK'
DELNM  TEXT 'x.'

DELETE LI   R3,VDTAB
       BL   @GETIN
       LI   R9,IFILNM
       LI   R2,10
DELX0  CB   @H20,*R9+
       JEQ  DELX1
       DEC  R2
       JNE  DELX0
       INC  R9
DELX1  AI   R9,-1-IFILNM+5
       MOV  R9,@DELLEN
       MOVB @SDD+1,@DELNM
       BLWP @VMBWD
       DATA >7C0,DELPAB,15
       BLWP @VMBWD
       DATA >7CF,IFILNM,10
       MOV  @H7C9,@>8356
       BLWP @DSRLNK
       DATA 8
       JNE  DELX3
ROUTE  B    @ERROR
DELX3  BL   @CLSG
       JMP  DELETE

H7A    DATA >7A
UPPROT LI   R3,PRTTAB
       BL   @GETIN
       BLWP @VMBWD
       DATA >86,IFILNM,10
       MOV  @H7A,@>8356
       MOV  @H86,@>834E
       CLR  @>834C
       ABS  @PTECT
       JNE  PTC1
       SETO @>834C
PTC1   MOVB @IDRV,@>834C
       BLWP @DSRLNK
       DATA >A
       MOVB @>8350,R0
       JNE  RENER
       BL   @CLSG
       JMP  UPPROT

FWPAB  DATA >0500,>1000,0,>2100,10
       TEXT 'DSK'
FWNUM  TEXT 'x.UTIL1     '
D40    BYTE 40

FWEB   LI   R3,FTAB
       BL   @GETIN
       MOVB @SDD+1,@FWNUM
       BLWP @VMBWD
       DATA >7C0,FWPAB,25
       MOV  @H7C9,@>8356
       BLWP @DSRLNK
       DATA 8
       JEQ  ROUTE
       BLWP @VMBRD
       DATA >1000,>E000,>2000
       BLWP @VMBRD
       DATA >100,>3000,>300
       BLWP @VMBWD
       DATA >900,>3000,>300
       LWPI >83E0
       BL   @>E006

H7C    DATA >7C
RENAME LI   R3,RTAB
       BL   @GETIN
       BLWP @VMBWD
       DATA >86,IFILNM,20
       MOVB @IDRV,@>834C
       MOV  @H7C,@>8356
       MOV  @H86,@>8350
       MOV  @H90,@>834E
       BLWP @DSRLNK
       DATA >A
       MOVB @>8350,R0
       JNE  RENER
       BL   @CLSG
       JMP  RENAME
RENER  B    @ERR2

VWERR  DATA 0
VPAB   DATA >0014,>8C0,>5050,0
VLEN   DATA 0
       TEXT 'DSK'
VNUM   TEXT 'x.'
B5     BYTE 5

VIEWFL SETO @PRTFL
       LI   R3,DSATAB
       BL   @GETIN
       ABS  @PRTFL
       JNE  NOVWPT
       BL   @PTRPRS
NOVWPT LI   R9,IFILNM
       LI   R2,10
VWX0   CB   @H20,*R9+
       JEQ  VWX1
       DEC  R2
       JNE  VWX0
       INC  R9
VWX1   AI   R9,-1-IFILNM+5
       MOV  R9,@VLEN
       MOVB @SDD+1,@VNUM
       BLWP @VMBWD
       DATA >7C0,VPAB,15
       BLWP @VMBWD
       DATA >7CF,IFILNM,10
       MOV  @H7C9,@>8356
       CLR  @VWERR
       BLWP @DSRLNK
       DATA 8
       JNE  VWX2A
VWXI   SETO @VWERR
       JMP  VWCLOS
VWX2A  LI   R0,>7C0
       LI   R1,>200
       BLWP @VSBW
       BL   @CLS
VWX2   MOV  @H7C9,@>8356
       SETO @SCRPS
       BLWP @DSRLNK
       DATA 8
       JNE  VWX3
       CB   R0,@B5
       JEQ  VWCLOS
       JMP  VWXI
VWX3   LI   R0,>7C5
       BLWP @VSBR
       CB   R1,@D40
       JLE  USE40A
       BL   @SXROLL
USE40A BL   @SXROLL
       CLR  @>8374
       BLWP @KSCAN
       CB   @>837C,@H20
       JNE  VWX4
       CB   @>8375,@FCTN9
       JEQ  VWCLOS
       CB   @>8375,@CTRLC
       JEQ  VWCLOS
USEXXA BLWP @KSCAN
       CB   @>837C,@H20
       JNE  USEXXA
VWX4   SRL  R1,8
       CI   R1,>28
       JLE  USE40B
       MOVB @B50,@PTRPAB+5
       MOV  @H770,@PTRPAB+2
       JMP  USE80A
USE40B MOVB @D40,@PTRPAB+5
       MOV  @H798,@PTRPAB+2
USE80A MOV  R1,R2
       JEQ  USEXXB
       LI   R1,>2000
       LI   R0,>8C0
       BLWP @VMBR
       LI   R0,>798
       CI   R2,40
       JLE  VWX5
       LI   R0,>770
VWX5   BLWP @VMBW
USEXXB ABS  @PRTFL
       JNE  VWX2
       BL   @PTROUT
       JMP  VWX2
VWCLOS MOV  R0,R4
       BL   @SXROLL
       ABS  @PRTFL
       JNE  USEXXC
       BL   @CLSPTR
USEXXC LI   R0,>7C0
       LI   R1,>100
       BLWP @VSBW
       MOV  @H7C9,@>8356
       BLWP @DSRLNK
       DATA 8
       ABS  @VWERR
       JEQ  ENDFIL
       MOV  R4,R0
       B    @ERROR
ENDFIL B    @CMDFIN

VWTR   DATA UTILWS,VWTR1
VWTR1  MOV  *R13,R0
       MOVB @UTILWS+1,@>8C02
       ORI  R0,>8000
       MOVB R0,@>8C02
       RTWP

KSCAN  DATA UTILWS,KSCAN1
KSCAN1 LWPI >83E0
       BL   @>E
       LWPI UTILWS
       RTWP

WTAD4  LI   R1,>4000
WTAD3  MOVB *R14+,R0
       MOVB *R14+,@>8C02
       SOC  R1,R0
       MOVB R0,@>8C02
       MOV  *R14+,R1
       MOV  *R14+,R2
       RT

H4000  EQU  $+2
WTAD2  LI   R1,>4000
WTAD   MOV  *R13,R0
       MOVB @UTILWS+1,@>8C02
       SOC  R1,R0
       MOVB R0,@>8C02
       MOV  @2(R13),R1
       MOV  @4(R13),R2
       RT

VSBW   DATA UTILWS,$+2
       BL   @WTAD2
       MOVB R1,@>8C00
       RTWP

VSBR   DATA UTILWS,VSBR1
VSBR1  CLR  R1
       BL   @WTAD
       MOVB @>8800,@2(R13)
       RTWP

VMBRD  DATA UTILWS,$+2
       CLR  R1
       BL   @WTAD3
       JMP  VMBR2
VMBR   DATA UTILWS,$+2
       CLR  R1
       BL   @WTAD
VMBR2  MOVB @>8800,*R1+
       DEC  R2
       JNE  VMBR2
       RTWP

VMBC   DATA UTILWS,$+2
       BL   @WTAD2
       CLR  R1
VMBC2  MOVB R1,@>8C00
       DEC  R2
       JNE  VMBC2
       RTWP

VMBWD  DATA UTILWS,$+2
       BL   @WTAD4
       JMP  VMBW2
VMBW   DATA UTILWS,$+2
       BL   @WTAD2
VMBW2  MOVB *R1+,@>8C00
       DEC  R2
       JNE  VMBW2
       RTWP

PNTR   EQU  >8356
SCLEN  EQU  >8355
CRULST EQU  >83D0
SADDR  EQU  >83D2
GPLWS  EQU  >83E0
H20    DATA >2000
DECMAL TEXT '.'
HZZ    BYTE >AA
SAVTKX DATA 0
DSRLNK DATA DLNKWS,DLENTR

DLENTR MOV  *R14+,R5
       MOV  @TKX,@SAVTKX
       SZCB @H20,R15
       MOV  @PNTR,R0
       MOV  R0,R9
       AI   R9,-8
       BLWP @VSBR
       MOVB R1,R3
       SRL  R3,8
       SETO R4
       LI   R2,NAMBUF
LNK$LP INC  R0
       INC  R4
       CI   R4,7
       JGT  LNKERR
       C    R4,R3
       JEQ  LNK$LN
       BLWP @VSBR
       MOVB R1,*R2+
       CB   R1,@DECMAL
       JNE  LNK$LP
LNK$LN MOV  R4,R4
       JEQ  LNKERR
       CLR  @CRULST
       MOV  R4,@SCLEN-1
       INC  R4
       A    R4,@PNTR
SROM   LWPI GPLWS
       CLR  R1
       LI   R12,>1200
       JMP  NOOFF2
NOROM  SBZ  0
NOOFF  AI   R12,>100
       CLR  @CRULST
       CI   R12,>1200
       JEQ  NODSR
       CI   R12,>2000
       JNE  NOOFF2
       LI   R12,>1000
NOOFF2 MOV  R12,@CRULST
       SBO  0
       LI   R2,>4000
       CB   *R2,@HZZ
       JNE  NOROM
       A    @TYPE,R2
       JMP  SGO2
SGO    MOV  @SADDR,R2
       SBO  0
SGO2   MOV  *R2,R2
       JEQ  NOROM
       MOV  R2,@SADDR
       INCT R2
       MOV  *R2+,R9
       MOVB @SCLEN,R5
       JEQ  NAME2
       CB   R5,*R2+
       JNE  SGO
       SRL  R5,8
       LI   R6,NAMBUF
NAME1  CB   *R6+,*R2+
       JNE  SGO
       DEC  R5
       JNE  NAME1
NAME2  INC  R1
       BL   *R9
TKX    JMP  SGO
       SBZ  0
       LWPI DLNKWS
       MOV  @SAVTKX,@TKX
       MOV  R9,R0
       BLWP @VSBR
       SRL  R1,13
       JNE  IOERRZ
       RTWP

NODSR  LWPI DLNKWS
LNKERR CLR  R1
IOERRZ SWPB R1
       MOVB R1,*R13
       SOCB @H20,R15
       RTWP
UTILWS EQU  >8380
DLNKWS DATA 0,0,0,0,0
TYPE   DATA 0,0,0,0,0,0,0,0,0,0,0
NAMBUF EQU  >8340
SLAST  EQU  $
