 ORG    100H
 XEQ 100H
 LXI    SP,0CBFFH
 MVI    A,9         TAB KEY WILL DELETE LINE
 STA    KILL
 MVI    A,7FH       DEL KEY WILL DELETE 1 CHARACTER
 STA    RUBO
 XRA    A
 STA    MODE
 LHLD     SYSGLO+GLLOW  SYS GLOBAL AREA PLUS GLLOW OFFSET
 SHLD   MMAX
 CALL   CLRS
IDON   LXI    H,EDMS
 CALL   OUTR
CMRT   MVI    A,'>'
 CALL   TVTO
 CALL   DTIN
 CALL   SCNB
 JC     INMD
SCRH   PUSH   B
 LXI    D,CTB4
 LHLD   IPNT
 SHLD  ADDS
 MVI   A,4
 STA    NCHR
 MVI    B,N4C5
 CALL   CTSH
 JZ     MTCH
 MVI    A,1
 STA    NCHR
 MVI    B,N1C5
 CALL   CTSH
 JNZ    WHAT
MTCH   SHLD   TEMP
 LDA    NCHR
 MOV    C,A
 MVI    B,0
 LHLD   IPNT
 DAD    B
 SHLD   IPNT
 MOV    A,M
 CPI    ' '+1
 JNC    WHAT
MTGO  CALL   SCNB
 SHLD   IPNT
 LHLD   TEMP
 POP    B
EXCT   LXI    D,CMRT
 PUSH   D
 PCHL
EDMS   ASC 'EDIT'
 DB     8DH
KILL   DS     1
RUBO   DS     1
MODE   DS     1
MMAX   DS     2
ADDS   DS     2
IPNT   DS     2
OUTR   MOV    A,M
 MVI    B,2
 ORA    A
 JP     OTCH
 SUI    80H
 DCR    B
OTCH PUSH B
 MOV B,A
 CALL   TVTO   PUT B TO SCREEN
 POP    B
 DCR    B
 JZ OTCL
 INX    H
 JMP    OUTR
OTCL MVI A,1AH   LINE FEED TO VDM DRIVER
 CALL TVTO
 RET
TVTO   PUSH B    SAVE REGISTERS
 PUSH D
 PUSH H
 PUSH PSW
 CPI 7FH       DEL?
 JZ T1    MOVE CURSOR 1 SPACE TO LEFT
 CPI 9    TAB?
 JZ T2    SEND 2 CR'S TO VDM DRIVER - ERASING LINE
 CPI 0DH  CR?
 JZ T3    SEND CRLF TO VDM
 MOV B,A
 CALL  0C019H  B TO SCREEN
T4 POP PSW   RESTORE REGISTERS
 POP H
 POP D
 POP B
 RET
T1 MVI B,1     CURSOR 1 TO LEFT
 CALL 0C019H
 JMP T4
T2 MVI B,0DH   ERASE LINE
 CALL 0C019H
 MVI B,0DH
 CALL 0C019H
 JMP T4
T3 MVI B,0AH     CRLF TO SCREEN
 CALL 0C019H
 MVI B,0DH
 CALL 0C019H
 JMP T4
DTIN   LXI    H,IBUF
 SHLD   IPNT
 LDA    KILL
 MOV    E,A
 LDA    RUBO
 MOV    D,A
 LXI    B,100H
NXCH   CALL   TVTI
 CMP    E
 JZ     DTIN
 CMP    D
 JNZ    STOR
 DCR    C
 JM    DTIN
 DCR    B
 DCX    H
 JMP    NXCH
STOR   MOV    M,A
 CPI    0DH
 RZ
 MOV    A,C
 CPI    CMAX
 JZ     NXCH
 MOV    A,M
 INX    H
 INR    C
 INR    B
 JMP    NXCH
IBUF   DS     64
TVTI   PUSH D   SAVE REGISTERS
 PUSH B
 PUSH H
TVT2 CALL 0C01FH   KEYBOARD IN
 JZ TVT2           NOTHING THERE
 ANI 7FH           STRIP OFF MSB
 PUSH PSW
 CALL TVTO   ECHO CHARACTER TO SCREEN
 POP PSW
 POP H
 POP B
 POP D
 RET
CMAX   EQU    64
DTOT   PUSH   H
 PUSH   D
 PUSH   B
 PUSH   PSW
DTO1 CALL TVTO
 POP PSW
 POP B
 POP D
 POP H
 RET
NXTC   LXI    B,2
 JC     NXUP
 PUSH   B
 CPI    '-'
 JNZ    CNVV
 POP    B
 MVI    B,1
 PUSH   B
 LHLD   IPNT
 INX    H
 SHLD   IPNT
CNVV   LHLD   IPNT
 MOV    B,H
 MOV    C,L
 CALL   DBCV
 DCR    H
 JP     WHAT
 POP    B
 MOV    C,L
 INR    C
 MOV    A,B
 ORA    A
 JZ     NXUP
 MOV    A,L
NXBK   STA    TEMP
 LHLD   TOPL
 XCHG
 LHLD   PNTR
NATP   DCX    H
 DCX    H
 CALL   OVTS
 JC     NAOK
 XCHG
 SHLD   PNTR
 JMP    NDON
NAOK   MOV    A,M
 CPI    0DH
 JNZ    NATP+1
 INX    H
 SHLD   PNTR
 LDA    TEMP
 DCR    A
 JNZ    NXBK
 JMP    NDON
NXUP   DCR    C
 JZ     NDON
 CALL   NLST
 JC     BOTM
 SHLD   PNTR
 JMP    NXUP
NDON   LDA    MODE
 LHLD   PNTR
 ORA    A
 JNZ    LIST
 CALL   CLRS
 JMP    LNOT
DBCV   LXI    H,0
DBC1   LDAX   B
 CPI    0DH
 RZ
 MOV    D,H
 MOV    E,L
 DAD    H
 DAD    H
 DAD    D
 DAD    H
 SUI    48
 CPI    10
 CMC
 JC     WHAT
 MOV    E,A
 MVI    D,0
 DAD    D
 INX    B
 JMP    DBC1
WHAT   LXI    H,WTMS
 LXI    SP,0CBFFH
 CALL   OUTR
 JMP   CMRT
WTMS ASC 'WHAT?'
 DB     8DH
TEMP   DS     2
TOPL   DS     2
PNTR   DS     2
OVTS   MOV    A,E
 SUB    L
 MOV    A,D
 SBB    H
 RET
NLST   LHLD   PNTR
 MOV    A,M
 INX    H
 CPI    0DH
 RZ
 JNC    NLST+3
 DCX    H
 RET
BOTM   LXI    SP,0CBFFH
 LHLD   EFPN
 SHLD   PNTR
 LXI    H,BTMS
 CALL   OUTR
 JMP    CMRT
BTMS   ASC 'BOTTOM'
 DB     8DH
WAIT CALL 0C01FH   HALTS LISTING UNTIL SPACE BAR HIT
 JZ WAIT
 CPI ' '
 JZ CONT
EFPN   DS     2
LIST   LHLD   PNTR
 CALL   CLRS
 CALL   CRLF
 MVI    D,16
NLS1   DCR    D
 RZ
 CALL LNOT
 CALL 0C01FH
 JZ CONT
 CPI ' '    SPACE BAR STOPS LISTING UNTIL HIT AGAIN
 JZ WAIT
CONT JMP NLS1
CLRS  PUSH B      SAVE REGISTERS AND CLEAR SCREEN
 PUSH D
 PUSH H
 PUSH PSW
 CALL 0C0D5H
 POP PSW
 POP H
 POP D
 POP B
 RET
CRLF PUSH B    SAVE REGISTERS AND CRLF TO SCREEN
 PUSH D
 PUSH H
 PUSH PSW
 MVI A,0DH
 CALL   TVTO
 MVI A,0AH
 CALL TVTO
 POP PSW
 POP H
 POP D
 POP B
 RET
LNOT   MVI    B,1
 MOV    A,M
 CPI    2
 RC
 INX    H
LNO1   INR    B
 CALL   DTOT
 CPI    0DH
 RZ
 JMP    LNOT+2
MSCR LHLD     IPNT
 MOV    A,M
 CPI    'P'
 JZ     STMD
 CPI    'L'
 JNZ    WHAT
 XRA    A
STMD   STA    MODE
 RET
TOPR  LHLD   TOPL
 SHLD   PNTR
 LDA    MODE
 ORA    A
 JNZ    LIST
TPLE   CALL   CLRS
 JMP   LNOT
KLRT  LHLD   IPNT
 MOV    A,M
 CPI    ' '+1
 JC     WHAT
 STA    KILL
 RET
NEWF   LXI    H,BF
 SHLD   PNTR
 SHLD   EFPN
 SHLD   TOPL
 MVI    M,1
 CALL   CRLF
 JMP    INMD
INMD   LXI    SP,STAK
 LXI    H,INMS
 CALL   OUTR
INLP   CALL   DTIN
 LXI    H,IBUF
 MOV    A,M
 CPI    0DH
 JZ     IDON
 CALL   NLST
 SHLD   PNTR
 SHLD   MVAD
 CALL   CENT
 JMP    INLP
STAK   EQU    0CBFFH
INMS   ASC 'INPUT'
 DB     8DH
MVAD   DS     2
CENT   LHLD   EFPN
 INR    C
 MVI    B,0
 DAD    B
 XCHG
 LHLD   MMAX
 CALL   OVTS
 JNC    MOFL
MSOK   LHLD   EFPN
 CALL   RMOV
 LHLD   EFPN
 DAD    B
 SHLD   EFPN
 LHLD   IPNT
 DCR    C
 DAD    B
 SHLD   MVAD
 LHLD   IPNT
 XCHG
 LHLD   PNTR
 CALL   LMOV
 RET
MOFL   LXI    H,OFMS
 LXI    SP,STAK
 CALL   CRLF
 CALL   OUTR
 JMP    CMRT
OFMS    ASC 'MEM OVERFLOW'
 DB     8DH
RMOV   PUSH   B
 MOV    B,H
 MOV    C,L
 LHLD   MVAD
NXRM   LDAX   B
 STAX   D
 MOV    A,L
 CMP    C
 JNZ    RMCT
 MOV    A,H
 CMP    B
 JZ     RDON
RMCT   DCX    B
 DCX    D
 JMP    NXRM
RDON   POP    B
 RET
LMOV   PUSH   B
 MOV    B,D
 MOV    C,E
 XCHG
 LHLD   MVAD
 XCHG
LMLP   LDAX   B
 MOV    M,A
 MOV    A,C
 CMP    E
 JNZ   LMCT
 MOV    A,B
 CMP    D
 JZ     LDON
LMCT   INX    H
 INX    B
 JMP    LMLP
LDON   POP    B
 RET
EDCR   LXI    H,BF
 SHLD   PNTR
 SHLD   TOPL
 CALL   EFFN
 SHLD   EFPN
 LHLD   PNTR
 LDA    MODE
 ORA    A
 JNZ    LIST
 CALL   CLRS
 JMP    LNOT
EFFN   LHLD   MMAX
 XCHG
 LHLD   PNTR
EFF1   CALL   OVTS
 JC     MOFL
 MOV    A,M
 CPI    1
 RZ
 INX    H
 JMP    EFF1
INSL   JC     INMD
 DCR    C
 DCR    C
 LXI    H,IBUF+2
 SHLD   IPNT
 CALL   NLST
 SHLD   MVAD
 SHLD   PNTR
 CALL   CENT
 RET
DELE   MVI    C,2
 JC     DLOC
 LHLD   IPNT
 MOV    B,H
 MOV    C,L
 CALL   DBCV
 MOV    C,L
 INR    C
 DCR    H
 JP     WHAT
DLOC   DCR    C
 RZ
 LHLD   EFPN
 SHLD   MVAD
 CALL   NLST
 JC     BOTM
 XCHG
 LHLD   PNTR
 CALL   LMOV
 SHLD   EFPN
 JMP    DLOC
APND   MOV    A,C
 SUI    3
 JC     WHAT
 DCR    C
 DCR    C
 CALL   NLST
 JC     BOTM
 DCX    H
 SHLD   TEMP
 LXI    H,IBUF+1
 SHLD   TEM1
 MVI    B,0
 JMP    CNGO
TEM1   DS     2
CNGO   MOV    A,B
 CMP    C
 JZ     EQUL
 JNC    LESS
 LHLD   TEMP
 ADD    L
 MOV    L,A
 MOV    A,H
 ACI    0
 MOV    H,A
 MOV    A,C
 SUB    B
 SHLD   MVAD
 LHLD   EFPN
 PUSH   B
 MOV    C,A
 MVI    B,0
 DAD    B
 XCHG
 LHLD   MMAX
 CALL   OVTS
 JNC    MOFL
 LHLD   EFPN
 CALL   RMOV
 LHLD   EFPN
 DAD    B
 SHLD   EFPN
 POP    B
 JMP    EQUL
EQUL   LHLD   TEMP
 XCHG
 LHLD   TEM1
 INX    H
EQLP   DCR    C
 JM     CCDN
 MOV    A,M
 STAX   D
 INX    H
 INX    D
 JMP    EQLP
CCDN   LHLD   PNTR
 LDA    MODE
 ORA    A
 JZ     LNOT
 JMP    LIST
LESS   LHLD   TEMP
 MOV    A,L
 ADD    C
 MOV  L,A
 MOV    A,H
 ACI    0
 MOV    H,A
 XCHG
 LHLD   EFPN
 SHLD   MVAD
 LHLD   TEMP
 MOV    A,L
 ADD    B
 MOV    L,A
 MOV    A,H
 ACI    0
 MOV    H,A
 XCHG
 CALL   LMOV
 SHLD   EFPN
 JMP    EQUL
CCRT   JC     WHAT
 LHLD   IPNT
 MOV    D,M
 MVI    B,0
CCR1   INX    H
 MOV    A,M
 CPI    0DH
 JZ     WHAT
 CMP    D
 JZ     LSTR
 INR    B
 JMP    CCR1
LSTR   SHLD   TEM1
 LHLD   IPNT
 INX    H
 SHLD   IPNT
 LHLD   PNTR
STSH   MOV    C,B
 SHLD   TEMP
 XCHG
 LHLD   IPNT
 CALL   SEAR
 JZ     STMT
 LHLD   TEMP
 MOV    A,M
 CPI    0DH
 JZ     CCDN
 JC     BOTM
 INX    H
 JMP    STSH
SEAR   LDAX   D
 CMP    M
 RNZ
 INX    H
 INX    D
 DCR    C
 JNZ    SEAR
 RET
STMT   LHLD   TEM1
 MVI    C,0
STM1   INX    H
 MOV    A,M
 CPI    0DH
 JZ     CNGO
 INR    C
 JMP    STM1
LOC1   LXI    H,IBUF+1
 MVI    B,-2
LNCX   MOV    A,M
 CPI    0DH
 JZ     LOC2
 INR    B
 INX    H
 JMP    LNCX
LOC2   MOV    A,B
 ORA    A
 JM     WHAT
 INR    B
 RET
LOCT   CALL   LOC1
 LXI    H,IBUF+2
 SHLD   IPNT
 CALL   NLST
 JC    BOTM
LNCH   MOV    C,B
 SHLD   TEMP
 XCHG
 LHLD   IPNT
 CALL   SEAR
 JZ     LMTH
 LHLD   TEMP
 INX    H
 MOV    A,M
 CPI    1
 JZ     BOTM
 JMP    LNCH
LMTH  LHLD   TEMP
 DCX    H
 MOV    A,M
 CPI    0DH
 JNZ    LMTH+3
 INX    H
 SHLD   PNTR
LMT1   LDA    MODE
 ORA    A
 JNZ    LIST
 CALL   CLRS
 JMP    LNOT
PRTN MVI C,2
 JC PLP1
 LHLD IPNT
 MOV B,H
 MOV C,L
 CALL DBCV
 MOV C,L
 DCR H
 JP WHAT
 MOV A,C
 INR C
 ORA A
PLP1 CNZ CLRS
 LHLD PNTR
PLP2 DCR C
 RZ
 SHLD PNTR
 CALL LNOT
 JC BOTM
 JMP PLP2
CTB4 ASC 'EDIT'
 DW EDCR
 ASC 'CLRS'
 DW CLRS
 ASC 'PAGE'
 DW LIST
 ASC 'NEWF'
 DW NEWF
 ASC 'BOTM'
 DW BTMM
 ASC 'MODE'
 DW MSCR
 ASC 'LIST'
 DW LCHR
 ASC 'DLOD'
 DW DLOD
 ASC 'DSAV'
 DW DSAV
 ASC 'A'
 DW APND
 ASC 'D'
 DW DELE
 ASC 'I'
 DW INSL
 ASC 'E'
 DW EDCR
 ASC 'L'
 DW LOCT
 ASC 'N'
 DW NXTC
 ASC 'C'
 DW CCRT
 ASC 'T'
 DW TOPR
 ASC 'P'
 DW PRTN
 ASC 'F'
 DW FIND
 ASC 'R'
 DW RLCR
 ASC 'Q'
 DW MONT
FIND CALL LOC1
 LXI H,IBUF+2
 SHLD IPNT
FIN1 CALL NLST
 SHLD PNTR
 JC BOTM
 MOV C,B
 XCHG
 LHLD IPNT
 CALL SEAR
 LHLD PNTR
 JZ LMT1
 JMP FIN1
BTMM LHLD EFPN
 SHLD PNTR
 RET
RLCR MOV A,C
 SUI 3
 JC WHAT
 DCR C
 DCR C
 LXI H,IBUF+1
 SHLD TEM1
 LHLD PNTR
 SHLD TEMP
 MVI B,0
LNGT MOV A,M
 CPI 13
 JZ CNGO
 JC BOTM
 INX H
 INR B
 JMP LNGT
LCHR CALL CLRS
 LHLD TOPL
 CALL LNOT
 JNC LCHR+6
 RET
SCNB LHLD IPNT
 MOV A,M
 CPI ' '
 RNZ
 INX H
 SHLD IPNT
 JMP SCNB+3
INAD INX D
 DCR C
 JNZ INAD
 INR C
 RET
CTSH LHLD ADDS
 LDA NCHR
 MOV C,A
 CALL SEAR
 CNZ INAD
 LDAX D
 MOV L,A
 INX D
 LDAX D
 MOV H,A
 RZ
 INX D
 DCR B
 JNZ CTSH
 INR B
 RET
N4C5 EQU  9
N1C5 EQU 12
NCHR DS 1
MONT EQU 0C004H
DSAV LXI H,SVMS
 CALL OUTR
 PUSH B
 PUSH D
 PUSH H
 MVI A,PSCO
 LXI D,DSKB
 CALL PSCAN
 JC DR
 JZ DR
 MOV A,E
 CPI 0FFH
 JZ DR
 STA FNUM
 JMP DSAV2
 DB 0AEH
 DW 4C0H
 DB 0
DSKB DS 20
DSAV2 LDA FNUM
 LXI B,6FFFH
 LXI D,BF
 MVI L,01
 CALL SYS
 DB DWROP
 JMP DR
 JMP 100H
FNUM DS 1
DR POP H
 POP D
 POP B
 JMP DSAV
DLOD LXI H,LDMS
 CALL OUTR
 PUSH B
 PUSH D
 PUSH H
 MVI H,PSOP
 LXI D,DSKB
 CALL PSCAN
 JC DL
 JZ DL
 MOV A,E
 CPI 0FFH
 JZ DL
 STA FNUM
 LXI B,6FFFH
 LXI D,BF
 MVI L,01
 CALL SYS
 DB DRDOP
 JMP DL
 POP H
 POP D
 POP B
 JMP EDIT
DL POP H
 POP D
 POP B
 JMP DLOD
SVMS ASC 'ENTER NAME OF SAVE FILE -C/R-'
LDMS ASC 'ENTER NAME OF LOAD FILE -C/R-'
 COPY NPTDEFS
EDIT EQU 100H
BF EQU $
 END




