home *** CD-ROM | disk | FTP | other *** search
Text File | 2019-04-13 | 15.8 KB | 1,092 lines |
- ;*** ZED TEXT EDITOR PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:VI"
-
- JMP MAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- WORK1 = $02 ;(16)
- WORK2 = $12 ;(16)
- WORK3 = $22 ;(14)
-
- CHR├╥ = $0D
- CHR╘AB = $09
- CHR╤UOTE = $22
-
- ;SCREEN
-
- SCR╘OP┴DDR = $30 ;(2)
- SCR╠INE┴DDR = $32 ;(2)
- CUR╥OW = $34 ;(1)
- CUR├OL = $35 ;(1)
- SCR╥OWS = $36 ;(1)
- SCR├OLS = $37 ;(1)
- SCR╥OW╔NC = $38 ;(2)
- CUR╠EFT═ARGIN = $3A ;(1)
- STATUS═ARGIN .BUF 1
-
- ;DOCUMENT
-
- LINE╨TR = $40 ;(4)
- LINE╬UM = $44 ;(4)
- TOS╠INE╨TR = $48 ;(4)
- TOP╠INE╨TR = $4C ;(4)
- BOT╠INE╨TR = $50 ;(4)
- LINE├OUNT = $54 ;(4)
- FILE╠ENGTH = $58 ;(4)
- TARGET╠EN = $5C ;(1)
- WRAP╞LAG = $5D ;(1) ;128=WRAP,64=SHOW├╥
-
- ;MANAGEMENT
-
- MODIFIED = $3B ;(1) ;$00=NO, $FF=MODIFIED
- MODE╞LAGS = $3C ;(1) ;$80=INSERT, $40=INDENT
- STATUS╒PDATE = $3D ;(1) ;128=LINE,64=COL,32=MOD,16=INS,8=BYT,4=FRE,2=NM,1=MSG
- MARKED╠INE╨TR .BUF 4 ;(4)
- MARKED╠INE╬UM .BUF 4 ;(4)
- MARKED├OL .BUF 4 ;(1)
-
- ;LINE FORMAT
-
- HEAD┬UFFER = $70 ;(11)
- HEAD╬EXT╨TR = $70 ;(4)
- HEAD╨REV╨TR = $74 ;(4)
- HEAD╠INE╠EN = $78 ;(1)
- HEAD╔NDENT = $79 ;(1)
- HEAD╞LAGS = $7A ;(1) ;$80=CONNECTED, $40=NULL╠INE, $3╞=INDENT
- HEAD╠ENGTH = $0B
-
- ;KILL BUFFER
-
- BUFFER╘OP╨TR .BUF 4 ;(4)
- BUFFER┬OT╨TR .BUF 4 ;(4)
- BUFFER╠INE├OUNT .BUF 4 ;(4)
-
- ;DOCUMENT BUFFERS
-
- ;COLORS
-
- CHAR├OLOR .BYTE $0C ;$0E
- CURSOR├OLOR .BYTE $06
- STATUS├OLOR .BYTE $04
- SEPAR├OLOR .BYTE $0F ;$03
- HILITE├OLOR .BYTE $0D ;$0C
- ALERT├OLOR .BYTE $0F
- BORDER├OLOR .BYTE $00
- BKGND├OLOR .BYTE $00
-
- ;=== NEW ===
-
- SCREEN╔NIT = *
- ;** GET SCREEN PARMS
- JSR WINSIZE
- STA SCR╥OWS
- STX SCR├OLS
- LDA SYSWORK+2
- LDY SYSWORK+3
- STA SCR╘OP┴DDR+0
- STY SCR╘OP┴DDR+1
- LDA SYSWORK+4
- LDY SYSWORK+5
- STA SCR╥OW╔NC+0
- STY SCR╥OW╔NC+1
- ;** GET COLOR PALETTE
- JSR CONPALETTE
- LDX #7
- - LDA SYSWORK,X
- STA CHAR├OLOR,X
- DEX
- BPL -
- ;** CLEAR SCREEN
- LDA #$E0
- LDX #$20
- LDY CHAR├OLOR
- JSR WINCLS
- LDA #2
- LDX #0
- JSR CONPOS
- ;** SET STATUS COLOR
- LDA SCR╘OP┴DDR+0
- LDY SCR╘OP┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA SCR├OLS
- STA SYSWORK+5
- LDA #$60
- LDY STATUS├OLOR
- LDX #0
- JSR WINPUT
- ;** SET SEPARATOR COLOR
- JSR SET╙EPAR┴DDR
- LDA #$60
- LDY SEPAR├OLOR
- LDX #0
- JSR WINPUT
- JSR DISPLAY╙EPARATOR
- LDA #$FF
- STA STATUS╒PDATE
- JSR UPDATE╙TATUS
- RTS
-
- SET╙EPAR┴DDR = *
- CLC
- LDA SCR╘OP┴DDR+0
- ADC SCR╥OW╔NC+0
- STA SYSWORK+0
- LDA SCR╘OP┴DDR+1
- ADC SCR╥OW╔NC+1
- STA SYSWORK+1
- RTS
-
- DISPLAY╙TATUS = *
- LDA SCR╘OP┴DDR+0
- LDY SCR╘OP┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<STATUS╠INE
- LDY #>STATUS╠INE
- CLC
- ADC STATUS═ARGIN
- BCC +
- INY
- + STA SYSWORK+2
- STY SYSWORK+3
- LDA SCR├OLS
- STA SYSWORK+5
- LDA #$80
- LDX SCR├OLS
- JSR WINPUT
- RTS
-
- STATUS╠INE = *
- .ASC "╠:12345678├:241 * ╔NS ╔ND ┬:12345678 ╞:12345678 "
- ; "0----+----1----+----2----+----3----+----4----+----5-"
- .ASC "1234567890123456789012345678"
- ; "---+----6----+----7----+----"
-
- UPDATE╙TATUS = *
- JSR DISPLAY╙TATUS
- RTS
-
- DISPLAY╙EPARATOR = *
- JSR SET╙EPAR┴DDR
- LDA #"-"
- STA SYSWORK+4
- LDA SCR├OLS
- STA SYSWORK+5
- LDA #$80
- LDX #0
- JSR WINPUT
- RTS
-
- ;=== MAIN ===
-
- MAIN = *
- JSR MALLOC╔NIT
- JSR MAIN╔NIT
- JSR SCREEN╔NIT
- JSR DISPLAY╙TATUS
- LDA #1
- LDY #0
- JSR GETARG
- JSR LOAD╞ILE
- JSR DUMP─OC
- RTS
-
- MSG .ASC "┌ED FOR ┴├┼ VERSION ┴├┼-0.01"
- .BYTE CHR├╥,0
-
- MAIN╔NIT = *
- LDX #$7F-$02
- LDA #0
- - STA 2,X
- DEX
- BPL -
- LDA #$80
- STA WRAP╞LAG
- JSR WINSIZE
- STX TARGET╠EN
- RTS
-
- ;*** LOAD FILE: USES WORK2 ***
-
- LOAD╚EAD = WORK2+0
- LOAD╘AIL = WORK2+4
- LOAD╠INES = WORK2+8
- LOAD┬YTES = WORK2+12
- LOAD╞CB = WORK3+0
- LOAD╠INE╙CAN = WORK3+1
- LOAD╠INE╠EN = WORK3+2
- LOAD┬UF├OUNT = WORK3+3
- LOAD┬UF╨TR = WORK3+4
-
- LOAD╞ILE = * ;( (ZP)=NAME ) : [W2]=HEAD, [W2]=TAIL, [W2]=LINES, [W2]=BYTES
- JSR SAVE╫ORK3
- JSR LOAD╔NIT
- LDA #"R"
- JSR OPEN
- STA LOAD╞CB
- - JSR LOAD╠INE
- BCS +
- JSR LOAD╠INE╫RAP
- JSR LOAD╠INE╙TORE
- JSR LOAD╠INE╧VERFLOW
- JMP -
- + LDA LOAD╠INE╠EN
- BEQ +
- JSR LOAD╠INE╫RAP
- LDA #$00
- STA HEAD╞LAGS
- JSR LOAD╠INE╙TORE
- + LDA LOAD╞CB
- JSR CLOSE
- JSR RESTORE╫ORK3
- RTS
-
- LOAD╔NIT = *
- LDA #0
- LDX #16+14-1
- - STA LOAD╚EAD,X
- DEX
- BPL -
- RTS
-
- LOAD╠INE = * ;( ) : .├╙=END
- ;TAB EXPANSION WILL GO INTO THIS ROUTINE
- LDX LOAD┬UF╨TR
- LDY LOAD╠INE╠EN
-
- LOAD╬EXT┬YTE = *
- LDA LOAD┬UF├OUNT
- BNE ++
- STY LOAD╠INE╠EN
- JSR LOAD┬UF
- BCC +
- RTS
- + LDY LOAD╠INE╠EN
- LDX LOAD┬UF╨TR
- + NOP
-
- - LDA FILEBUF,X
- STA LINE,Y
- INX
- INY
- CMP #CHR├╥
- BEQ ++
- CPY TARGET╠EN
- BEQ + ;DETERMINES IF ├╥S WILL GO BEYOND LEN
- BCS ++
- + DEC LOAD┬UF├OUNT
- BNE -
- BEQ LOAD╬EXT┬YTE
-
- + DEC LOAD┬UF├OUNT
- STX LOAD┬UF╨TR
- STY LOAD╠INE╠EN
- CLC
- RTS
-
- LOAD┬UF = * ;( ) : .├╙=EOF
- JSR STOPKEY
- BCS +
- LDA #<FILEBUF
- LDY #>FILEBUF
- STA ZP+0
- STY ZP+1
- LDA #<254
- LDY #>254
- LDX LOAD╞CB
- JSR READ
- BCS +
- BEQ +
- STA LOAD┬UF├OUNT
- LDA #0
- STA LOAD┬UF╨TR
- CLC
- RTS
- + SEC
- RTS
-
- LOAD╠INE╫RAP = *
- LDX LOAD╠INE╠EN
- DEX
- LDY #$00
- LDA LINE,X
- CMP #CHR├╥
- BEQ +
- LDY #$80
- + STY HEAD╞LAGS
- CMP #CHR├╥
- BNE +
- - STX HEAD╠INE╠EN
- STX LOAD╠INE╙CAN
- STX LOAD╠INE╠EN
- RTS
-
- + LDX LOAD╠INE╠EN
- CPX TARGET╠EN
- BCC -
-
- + BIT WRAP╞LAG
- BMI +
- - LDA TARGET╠EN
- STA LOAD╠INE╙CAN
- STA HEAD╠INE╠EN
- RTS
-
- + LDX TARGET╠EN
- - DEX
- CPX #255
- BEQ --
- LDA LINE,X
- CMP #" "
- BNE -
- + INX
- STX LOAD╠INE╙CAN
- STX HEAD╠INE╠EN
- RTS
-
- LOAD╠INE╙TORE = *
- INC LOAD╠INES+0
- BNE +
- INC LOAD╠INES+1
- BNE +
- INC LOAD╠INES+2
- BNE +
- INC LOAD╠INES+3
- + SEC
- BIT HEAD╞LAGS
- BMI +
- CLC
- + LDA LOAD┬YTES+0
- ADC HEAD╠INE╠EN
- STA LOAD┬YTES+0
- BCC +
- INC LOAD┬YTES+1
- BNE +
- INC LOAD┬YTES+2
- BNE +
- INC LOAD┬YTES+3
- + LDX #3
- - LDA #ACE═EM╬ULL
- STA HEAD╬EXT╨TR,X
- LDA LOAD╘AIL,X
- STA HEAD╨REV╨TR,X
- DEX
- BPL -
- JSR STASH╠INE
-
- ;** FIRST LINE TO BE STORED
- LDA LOAD╚EAD+3
- CMP #ACE═EM╬ULL
- BNE +
- LDX #3
- - LDA MP,X
- STA LOAD╚EAD,X
- STA LOAD╘AIL,X
- DEX
- BPL -
- RTS
-
- ;** ADDITIONAL LINES
- + LDX #3
- - LDA MP,X
- LDY LOAD╘AIL,X
- STA LOAD╘AIL,X
- STY MP,X
- DEX
- BPL -
- JSR FETCH╚EAD
- LDX #3
- - LDA LOAD╘AIL,X
- STA HEAD╬EXT╨TR,X
- DEX
- BPL -
- JSR STASH╚EAD
- RTS
-
- LOAD╠INE╧VERFLOW = *
- LDX LOAD╠INE╙CAN
- LDY #0
- - CPX LOAD╠INE╠EN
- BCS +
- LDA LINE,X
- STA LINE,Y
- INX
- INY
- BNE -
- + STY LOAD╠INE╠EN
- RTS
-
- ;=== MANAGEMENT ROUTINES ===
-
- WORK3╙AVE .BUF 14
-
- SAVE╫ORK3 = *
- LDX #13
- - LDA WORK3,X
- STA WORK3╙AVE,X
- DEX
- BPL -
- RTS
-
- RESTORE╫ORK3 = *
- LDX #13
- - LDA WORK3╙AVE,X
- STA WORK3,X
- DEX
- BPL -
- RTS
-
- FETCH╠INE┼XTRA = 6
-
- FETCH╠INE = * ;( [MP]=FAR╠INE ) : HEAD*, LINEBUF
- LDA #<LINEBUF
- LDY #>LINEBUF
- STA ZP+0
- STY ZP+1
- LDA #HEAD╠ENGTH+FETCH╠INE┼XTRA
- LDY #0
- JSR FETCH
- LDX #HEAD╠ENGTH-1
- - LDA LINEBUF,X
- STA HEAD┬UFFER,X
- DEX
- BPL -
- LDA HEAD╠INE╠EN
- CMP #FETCH╠INE┼XTRA+1
- BCC +
- CLC
- ADC #HEAD╠ENGTH
- LDY #0
- JSR FETCH
- + RTS
-
- STASH╠INE = * ;( HEAD*, LINEBUF ) : [MP]=STORED╠INE, .├╙=ERR
- LDA #0
- STA HEAD╔NDENT
- LDX #HEAD╠ENGTH-1
- - LDA HEAD┬UFFER,X
- STA LINEBUF,X
- DEX
- BPL -
- CLC
- LDA HEAD╠INE╠EN
- ADC #HEAD╠ENGTH
- LDY #0
- JSR MALLOC
- BCC +
- RTS
- + LDA #<LINEBUF
- LDY #>LINEBUF
- STA ZP+0
- STY ZP+1
- CLC
- LDA HEAD╠INE╠EN
- ADC #HEAD╠ENGTH
- LDY #0
- JSR STASH
- CLC
- RTS
-
- FETCH╚EAD = * ;( [MP]=FAR╠INE╨TR ) : HEAD┬UFFER
- LDX #HEAD┬UFFER
- LDY #HEAD╠ENGTH
- JSR ZPLOAD
- RTS
-
- STASH╚EAD = * ;( [MP]=FAR╠INE╨TR, HEAD┬UFFER )
- LDX #HEAD┬UFFER
- LDY #HEAD╠ENGTH
- JSR ZPSTORE
- RTS
-
- ;=== DYNAMIC MEMORY ROUTINES ===
-
- MALLOC╫ORK = WORK1
-
- MALLOC╚EAD .BUF 4
- TPA╞REE╞IRST .BUF 1
- TPA╞REE═IN .BUF 1
- TPA╞REE╨AGES .BUF 1
- TPA┴REA╙TART .BUF 1
- TPA┴REA┼ND .BUF 1
-
- ;*** MALLOC╔NIT()
-
- MALLOC╔NIT = *
- LDA #ACE═EM╬ULL
- STA MALLOC╚EAD+3
- LDX #0
- LDA #$FF
- - STA TPA╞REEMAP,X
- INX
- BNE -
- LDX #>BSS┼ND
- LDA #<BSS┼ND
- BEQ +
- INX
- + STX TPA╞REE╞IRST
- STX TPA┴REA╙TART
- LDX ACE═EM╘OP+1
- STX MALLOC╫ORK
- STX TPA┴REA┼ND
- TXA
- SEC
- SBC TPA╞REE╞IRST
- BCS +
- LDA #0
- + STA TPA╞REE╨AGES
- CLC
- ADC #1
- STA TPA╞REE═IN
- LDX TPA╞REE╞IRST
- CPX MALLOC╫ORK
- BCS +
- LDA #$00
- - STA TPA╞REEMAP,X
- INX
- CPX MALLOC╫ORK
- BCC -
- + RTS
-
- LIB╨AGES .BUF 1
-
- LIB╨AGE┴LLOC = * ;( .┴=PAGES ) : [MP]
- STA LIB╨AGES
- LDX #$00
- LDY #ACE═EM╔NTERNAL-1
- JSR PAGEALLOC
- BCS +
- RTS
- + JSR TPA╨AGE┴LLOC
- BCS +
- RTS
- + LDA LIB╨AGES
- LDX #ACE═EM╔NTERNAL
- LDY #$FF
- JSR PAGEALLOC
- BCS +
- RTS
- + LDA #<NOMEM═SG
- LDY #>NOMEM═SG
- JSR EPUTS
- LDA #1
- JMP EXIT
-
- NOMEM═SG = *
- .BYTE CHR├╥
- .ASC "╔NSUFFICIENT MEMORY, ABORTING."
- .BYTE CHR├╥,0
-
- NEWMAX .BUF 1
-
- TPA╨AGE┴LLOC = * ;( LIB╨AGES ) : [MP]
- LDA LIB╨AGES
- CMP TPA╞REE═IN
- BCS TPA╞REEMAP╞ULL
- ;** FIRST FREE
- LDX TPA╞REE╞IRST
- LDA TPA╞REEMAP,X
- BEQ ++
- - INX
- BEQ TPA╞REEMAP╞ULL
- LDA TPA╞REEMAP,X
- BNE -
- STX TPA╞REE╞IRST
- JMP ++
- TPA╞REEMAP╞ULL = *
- LDA LIB╨AGES
- CMP TPA╞REE═IN
- BCS +
- STA TPA╞REE═IN
- + SEC
- RTS
-
- ;** SEARCH
- + DEX
- - LDY LIB╨AGES
- - INX
- BEQ TPA╞REEMAP╞ULL
- LDA TPA╞REEMAP,X
- BNE --
- DEY
- BNE -
-
- ;** ALLOCATE
- STX NEWMAX
- LDY LIB╨AGES
- LDA #$41
- - STA TPA╞REEMAP,X
- DEX
- DEY
- BNE -
- INX
- CPX TPA╞REE╞IRST
- BNE +
- LDY NEWMAX
- INY
- STY TPA╞REE╞IRST
- + SEC
- LDA TPA╞REE╨AGES
- SBC LIB╨AGES
- STA TPA╞REE╨AGES
- LDA #0
- LDY #ACE═EM╔NTERNAL
- STA MP+0
- STX MP+1
- STA MP+2
- STY MP+3
- CLC
- RTS
-
- MALLOC╠EN╙AVE .BUF 3
-
- MALLOC = *
- QUICK═ALLOC = *
- STA MALLOC╠EN╙AVE+0
- STY MALLOC╠EN╙AVE+1
- JSR LIB═ALLOC
- BCS +
- RTS
- + LDX MALLOC╠EN╙AVE+1
- LDA MALLOC╠EN╙AVE+0
- BEQ +
- INX
- + TXA
- CPX #>1024
- BCS +
- LDX #>1024
- + TXA
- STA MALLOC╠EN╙AVE+2
- JSR LIB╨AGE┴LLOC
- BCC +
- RTS
- + LDA #0
- LDY MALLOC╠EN╙AVE+2
- JSR FREE
- LDA MALLOC╠EN╙AVE+0
- LDY MALLOC╠EN╙AVE+1
- JMP MALLOC
-
- ;*** MALLOC( .┴┘=┬YTES ) : [MP]=╞AR╨OINTER
-
- MALLOC═EM╬EXT╨TR = MALLOC╫ORK+0 ;(4)
- MALLOC═EM╠ENGTH = MALLOC╫ORK+4 ;(2)
- MALLOC╠ENGTH = MALLOC╫ORK+6 ;(2)
- MALLOC╤ = MALLOC╫ORK+8 ;(4)
-
- LIB═ALLOC = *
- CLC
- ADC #7
- BCC +
- INY
- + AND #$F8
- STA MALLOC╠ENGTH
- STY MALLOC╠ENGTH+1
- LDX #3
- - LDA MALLOC╚EAD,X
- STA MP,X
- LDA #ACE═EM╬ULL
- STA MALLOC╤,X
- DEX
- BPL -
-
- MALLOC╠OOK = *
- LDA MP+3
- CMP #ACE═EM╬ULL
- BNE +
-
- MALLOC┼RROR┼XIT = *
- LDA #ACE═EM╬ULL
- STA MP+3
- LDA #ACE┼RR╔NSUFFICIENT═EMORY
- STA ERRNO
- SEC
- RTS
-
- + LDX #MALLOC═EM╬EXT╨TR
- LDY #6
- JSR ZPLOAD
- LDA MALLOC═EM╠ENGTH
- CMP MALLOC╠ENGTH
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- BCS MALLOC╟OT┬LOCK
- LDX #3
- - LDA MP,X
- STA MALLOC╤,X
- LDA MALLOC═EM╬EXT╨TR,X
- STA MP,X
- DEX
- BPL -
- JMP MALLOC╠OOK
-
- MALLOC╟OT┬LOCK = *
- LDA MALLOC═EM╠ENGTH
- CMP MALLOC╠ENGTH
- BNE +
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- BEQ MALLOC╘AKE╫HOLE┬LOCK
- + SEC
- LDA MALLOC═EM╠ENGTH
- SBC MALLOC╠ENGTH
- STA MALLOC═EM╠ENGTH
- LDA MALLOC═EM╠ENGTH+1
- SBC MALLOC╠ENGTH+1
- STA MALLOC═EM╠ENGTH+1
- LDX #MALLOC═EM╬EXT╨TR
- LDY #6
- JSR ZPSTORE
- CLC
- LDA MP+0
- ADC MALLOC═EM╠ENGTH
- STA MP+0
- LDA MP+1
- ADC MALLOC═EM╠ENGTH+1
- STA MP+1
- CLC
- RTS
-
- MALLOC╘AKE╫HOLE┬LOCK = *
- LDA MALLOC╤+3
- CMP #ACE═EM╬ULL
- BNE +
- LDX #3
- - LDA MALLOC═EM╬EXT╨TR,X
- STA MALLOC╚EAD,X
- DEX
- BPL -
- CLC
- RTS
- + LDX #3
- - LDA MP,X
- LDY MALLOC╤,X
- STA MALLOC╤,X
- STY MP,X
- DEX
- BPL -
- LDX #MALLOC═EM╬EXT╨TR
- LDY #4
- JSR ZPSTORE
- LDX #3
- - LDA MALLOC╤,X
- STA MP,X
- DEX
- BPL -
- CLC
- RTS
-
- ;*** FREE( [MP]=╞AR╨OINTER, .┴┘=╠ENGTH )