home *** CD-ROM | disk | FTP | other *** search
- ;*** MORE TEXT FILE DISPLAYER VERSION 1.00 - BY ├RAIG ┬RUCE - 23-╞EB-94
-
- ;MORE [-HELP] FILE ...
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:MORE"
-
- JMP MAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- CHR┬┼╠ = $07
- CHR╘┴┬ = $09
- CHR╠╞ = $0A
- CHR├╥ = $0D
- CHR┬╙ = $14
- CHR├╠╥ = $93
- TRUE = $FF
- FALSE = $00
-
- ARG = 2 ;(2) ;CURRENT ARGUMENT NUMBER
- NAME = 4 ;(2) ;NAME OF FILE BEING BCODED
- ROW = 6 ;(1) ;CURRENT ROW ON DISPLAY
- ROW┴DDR = 8 ;(2) ;ADDRESS OF CURRENT ROW ON DISPLAY
- ROW╔NC = 10 ;(2) ;INCREMENT BETWEEN SUCCESSIVE ROWS ON DISPLAY
- ROW╚OME = 12 ;(2) ;ADDRESS OF HOME POSITION ON DISPLAY
- SCR╥OWS = 14 ;(1) ;NUMBER OF ROWS ON DISPLAY
- SCR├OLS = 15 ;(1) ;NUMBER OF COLUMNS ON DISPLAY
- FILE╠INE = 16 ;(4) ;LINE NUMBER IN CURRENT FILE
- IN┬UF╨TR = 20 ;(1) ;NEXT BYTE TO EXTRACT FROM INPUT BUFFER
- IN┬UF╓ALID = 21 ;(1) ;NUMBER OF VALID BYTES IN INPUT BUFFER
- IN┬UF╞D = 22 ;(1) ;FILE DESCRIPTOR FOR INPUT
- POS = 23 ;(1) ;SCAN POSITION
- GL┬UF├HAR = 24 ;(1) ;BUFFERED CHARACTER FOR GETLINE
- GL┬UF┼OF = 25 ;(1) ;WHETHER BUFFED CHAR IS EOF FOR GETLINE
- PROMPT├OLOR = 26 ;(1) ;COLOR OF "MORE" PROMPT
- TEXT├OLOR = 27 ;(1) ;COLOR OF REGULAR TEXT
- PROMPT╠EN = 28 ;(1) ;LENGTH OF PROMPT STRING
- CAT╙TR╨TR = 30 ;(2) ;STRING POINTER FOR CAT OPERATION
- CURSOR├OLOR = 32 ;(1) ;COLOR OF CURSOR ON "MORE" PROMPT
- FILE╨ARM = 33 ;(1) ;FLAG THAT A FILENAME HAS APPEARED
-
- ;===MAIN===
-
- MAIN = *
- ;** CHECK FOR LARGE ENOUGH ╘╨┴
- SEC
- LDA #<BSS┼ND
- CMP ACE═EM╘OP+0
- LDA #>BSS┼ND
- SBC ACE═EM╘OP+1
- BCS +
- JMP MAIN╔NIT
- + LDA #<TPA═SG
- LDY #>TPA═SG
- JSR EPUTS
- DIE = *
- LDA #1
- LDX #0
- JMP EXIT
-
- TPA═SG = *
- .ASC "╔NSUFFICIENT PROGRAM SPACE TO RUN MORE"
- .BYTE CHR├╥,0
-
- USAGE = *
- LDA #<USAGE═SG
- LDY #>USAGE═SG
- JSR EPUTS
- JMP DIE
-
- USAGE═SG = *
- .ASC "USAGE: MORE [-HELP] FILE ..."
- .BYTE CHR├╥,0
-
- WINDOW═SG = *
- .ASC "ERROR: DISPLAY MUST HAVE AT LEAST 10 COLUMNS AND 2 ROWS."
- .BYTE CHR├╥,0
-
- MAIN╔NIT = *
- LDA #FALSE
- STA FILE╨ARM
- LDA #0
- STA ARG+0
- STA ARG+1
- JSR WINSIZE
- STA SCR╥OWS
- STX SCR├OLS
- CPX #10
- BCC +
- CMP #2
- BCS ++
- + LDA #<WINDOW═SG
- LDY #>WINDOW═SG
- JSR EPUTS
- JMP DIE
- + LDA SYSWORK+2
- LDY SYSWORK+3
- STA ROW╚OME+0
- STY ROW╚OME+1
- LDA SYSWORK+4
- LDY SYSWORK+5
- STA ROW╔NC+0
- STY ROW╔NC+1
-
- MAIN╬EXT = *
- JSR CHECK╙TOP
- INC ARG+0
- BNE +
- INC ARG+1
- + LDA ARG+0
- LDY ARG+1
- JSR GETARG
- BEQ MAIN┼XIT
- LDA ZP+0
- LDY ZP+1
- STA NAME+0
- STY NAME+1
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE +
- JMP USAGE
- + JSR MORE
- JMP MAIN╬EXT
-
- MAIN┼XIT = *
- LDA FILE╨ARM
- BEQ +
- JSR SCR╙HUTDOWN
- + RTS
-
- CHECK╙TOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- JMP DIE
-
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- MORE = *
- LDA FILE╨ARM
- BNE +
- LDA #TRUE
- STA FILE╨ARM
- JSR SCR╔NIT
- + JSR SCR├LEAR
- LDA #0
- LDX #3
- - STA FILE╠INE,X
- DEX
- BPL -
- LDA NAME+0
- LDY NAME+1
- JSR INIT╟ETBYTE
- BCC +
- LDA #2
- JSR PROMPT
- CMP #"Q"
- BEQ MORE┼XIT
- CMP #$03
- BEQ MORE┼XIT
- RTS
- + JSR GETLINE╔NIT
- BCS +
-
- MORE╬EXT╠INE = *
- JSR GETLINE
- BCS MORE┼╧╞
- JSR PUTLINE
- LDX ROW
- INX
- CPX SCR╥OWS
- BCC MORE╬EXT╠INE
- BIT GL┬UF┼OF
- BMI MORE┼╧╞
- MORE╨ROMPT = *
- LDA #0
- JSR PROMPT
- CMP #"Q"
- BEQ MORE┼XIT
- CMP #$03
- BEQ MORE┼XIT
- CMP #"N"
- BNE +
- LDA IN┬UF╞D
- JSR CLOSE
- RTS
- + CMP #CHR├╥
- BEQ MORE├╥
- CMP #$11
- BEQ MORE├╥
- CMP #"B"
- BEQ MORE┬ACK
- JSR SCR├LEAR
- JMP MORE╬EXT╠INE
-
- MORE┼╧╞ = *
- LDA #1
- JSR PROMPT
- CMP #"Q"
- BEQ MORE┼XIT
- CMP #$03
- BEQ MORE┼XIT
- LDA IN┬UF╞D
- JSR CLOSE
- RTS
-
- MORE┼XIT = *
- LDA IN┬UF╞D
- JSR CLOSE
- JSR SCR╙HUTDOWN
- LDA #0
- LDX #0
- JMP EXIT
-
- MORE├╥ = *
- LDX ROW
- INX
- CPX SCR╥OWS
- BCC +
- LDA #" "
- STA SYSWORK+4
- LDA #$88
- LDX #1
- JSR WINSCROLL
- DEC ROW
- SEC
- LDA ROW┴DDR+0
- SBC ROW╔NC+0
- STA ROW┴DDR+0
- LDA ROW┴DDR+1
- SBC ROW╔NC+1
- STA ROW┴DDR+1
- + JMP MORE╬EXT╠INE
-
- MORE┬ACK = *
- LDA #CHR┬┼╠
- JSR CONPUTCHAR
- JMP MORE╨ROMPT
-
- ;=== STANDARD LIBRARY ===
-
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP+0
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- EPUTCHAR = *
- LDX #STDERR
- JMP PUTC
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP+0
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP+0
- ROL ZP+1
- CLC
- LDA ACE┴RGV+0
- ADC ZP+0
- STA ZP+0
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP+0
- STA ZP+1
- ORA ZP+0
- RTS
-
- INIT╟ETBYTE = * ;( (.┴┘)=FILENAME ) : .├╙=OPEN┼RROR
- STA ZP+0
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCS +
- STA IN┬UF╞D
- LDA #0
- STA IN┬UF╓ALID
- STA IN┬UF╨TR
- CLC
- + RTS
-
- GETBYTE = * ;( ) : .┴=BYTE, .├╙=EOF
- LDX IN┬UF╨TR
- CPX IN┬UF╓ALID
- BCS FILL╔N┬UF
- LDA IN┬UF,X
- INC IN┬UF╨TR
- CLC
- RTS
-
- FILL╔N┬UF = *
- JSR CHECK╙TOP
- LDA #<IN┬UF
- LDY #>IN┬UF
- STA ZP+0
- STY ZP+1
- LDA #<250
- LDY #>250
- LDX IN┬UF╞D
- JSR READ
- BEQ +
- BCS +
- STA IN┬UF╓ALID
- LDA #0
- STA IN┬UF╨TR
- JMP GETBYTE
- + LDA #0
- STA IN┬UF╨TR
- STA IN┬UF╓ALID
- SEC
- RTS
-
- GETLINE╔NIT = *
- LDA #FALSE
- STA GL┬UF┼OF
- JMP GETLINE┼XIT
-
- GETLINE = *
- LDX #0
- STX POS
- SEC
- LDA GL┬UF┼OF
- BNE +
- LDA GL┬UF├HAR
- CLC
- BCC +
-
- GETLINE╬EXT├HAR = *
- JSR GETBYTE
- + BCS GETLINE┼╧╞
- CMP #CHR├╥
- BEQ GETLINE├╥
- CMP #CHR╘┴┬
- BEQ GETLINE╘┴┬
- CMP #CHR├╠╥
- ;BEQ GETLINE├╠╥
- LDX POS
- STA LINE,X
- INX
- STX POS
- CPX SCR├OLS
- BCC GETLINE╬EXT├HAR
- ;** LINE WRAP
- JSR GETBYTE
- CMP #CHR├╥
- BEQ GETLINE├╥
- CLC
- BCC GETLINE┼XIT╬O╟ET
-
- GETLINE┼XIT = *
- JSR GETBYTE
- GETLINE┼XIT╬O╟ET = *
- STA GL┬UF├HAR
- BCC +
- LDA #TRUE
- STA GL┬UF┼OF
- + LDA POS
- STA LINE╠EN
- CLC
- RTS
-
- GETLINE├╥ = *
- INC FILE╠INE+0
- BNE +
- INC FILE╠INE+1
- BNE +
- INC FILE╠INE+2
- BNE +
- INC FILE╠INE+3
- + JMP GETLINE┼XIT
-
- GETLINE┼╧╞ = *
- LDA #TRUE
- STA GL┬UF┼OF
- SEC
- RTS
-
- GL╘AB┴DD .BUF 1
-
- GETLINE╘┴┬ = *
- LDX POS
- LDY #8
- LDA #" "
- - STA LINE,X
- INX
- DEY
- BNE -
- LDA POS
- AND #7
- STA GL╘AB┴DD
- SEC
- LDA #8
- SBC GL╘AB┴DD
- CLC
- ADC POS
- CMP SCR├OLS
- BCC +
- JMP GETLINE┼XIT
- + STA POS
- JMP GETLINE╬EXT├HAR
-
- GETLINE├╠╥ = *
- BRK
-
- SCR╔NIT = *
- JSR CONPALETTE
- LDA SYSWORK+4
- STA PROMPT├OLOR
- LDA SYSWORK+0
- STA TEXT├OLOR
- LDA SYSWORK+1
- STA CURSOR├OLOR
- LDA #$60
- LDX #" "
- LDY SYSWORK+0
- JSR WINCLS
- ;** FALL THROUGH
-
- SCR├LEAR = *
- LDA #$80
- LDX #" "
- JSR WINCLS
- LDA #0
- STA ROW
- LDA ROW╚OME+0
- LDY ROW╚OME+1
- STA ROW┴DDR+0
- STY ROW┴DDR+1
- RTS
-
- SCR╙HUTDOWN = *
- SEC
- LDA SCR╥OWS
- SBC #1
- LDX #0
- JSR CONPOS
- RTS
-
- PUTLINE = *
- LDA ROW┴DDR+0
- LDY ROW┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<LINE
- LDY #>LINE
- STA SYSWORK+2
- STY SYSWORK+3
- LDA #$80
- LDX LINE╠EN
- STX SYSWORK+5
- JSR WINPUT
- INC ROW
- CLC
- LDA ROW┴DDR+0
- ADC ROW╔NC+0
- STA ROW┴DDR+0
- LDA ROW┴DDR+1
- ADC ROW╔NC+1
- STA ROW┴DDR+1
- RTS
-
- SCR╙CROLL = *
- BRK
-
- PROMPT├HAR .BUF 1
-
- PROMPT = * ;(.┴=PROMPT╘YPE 0:MORE,1:EOF,2:ERROR ) : .┴=KEY├HAR
- ;** GET PROMPT STRING
- LDX #0
- STX STRING+0
- ASL
- TAX
- LDA PROMPT╘AB+1,X
- TAY
- LDA PROMPT╘AB+0,X
- JSR CAT╙TRING
- LDA NAME+0
- LDY NAME+1
- JSR CAT╙TRING
- LDA #<PROMPT├OLON
- LDY #>PROMPT├OLON
- JSR CAT╙TRING
- LDA #<NUMBUF
- LDY #>NUMBUF
- STA ZP+0
- STY ZP+1
- LDA #1
- LDX #FILE╠INE
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR CAT╙TRING
- LDA #<PROMPT├LOSE
- LDY #>PROMPT├LOSE
- JSR CAT╙TRING
- STX PROMPT╠EN
- INX
- CPX SCR├OLS
- BCC +
- LDX SCR├OLS
- DEX
- STX PROMPT╠EN
- + JSR RVS╙TRING
- ;** DISPLAY PROMPT
- LDA ROW┴DDR+0
- LDY ROW┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #<STRING
- LDY #>STRING
- STA SYSWORK+2
- STY SYSWORK+3
- LDA #$E0
- LDX PROMPT╠EN
- STX SYSWORK+5
- LDY PROMPT├OLOR
- JSR WINPUT
- ;** DISPLAY CURSOR
- CLC
- LDA ROW┴DDR+0
- ADC PROMPT╠EN
- STA SYSWORK+0
- LDA ROW┴DDR+1
- ADC #0
- STA SYSWORK+1
- LDA #$FF
- LDY CURSOR├OLOR
- JSR WINCURSOR
- ;** GET KEY
- JSR GETKEY
- STA PROMPT├HAR
- ;** ERASE CURSOR
- CLC
- LDA ROW┴DDR+0
- ADC PROMPT╠EN
- STA SYSWORK+0
- LDA ROW┴DDR+1
- ADC #0
- STA SYSWORK+1
- LDA #$00
- JSR WINCURSOR
- ;** ERASE PROMPT
- LDA ROW┴DDR+0
- LDY ROW┴DDR+1
- STA SYSWORK+0
- STY SYSWORK+1
- LDA #" "
- STA SYSWORK+4
- LDA PROMPT╠EN
- STA SYSWORK+5
- LDA #$E0
- LDX #0
- LDY TEXT├OLOR
- JSR WINPUT
- LDA PROMPT├HAR
- RTS
-
- PROMPT╘AB .WORD PROMPT═ORE,PROMPT┼╧╞,PROMPT┼RROR
- PROMPT═ORE = *
- .ASC "--═ORE-- ("
- .BYTE 0
- PROMPT┼╧╞ = *
- .ASC "--┼╧╞-- ("
- .BYTE 0
- PROMPT┼RROR = *
- .ASC "--┼╥╥╧╥!-- ("
- .BYTE 0
- PROMPT├OLON = *
- .ASC ":"
- .BYTE 0
- PROMPT├LOSE = *
- .ASC ")"
- .BYTE 0
-
- CAT╙TRING = * ;( (.┴┘)=STRING ) : .╪=STR╠EN
- STA CAT╙TR╨TR+0
- STY CAT╙TR╨TR+1
- LDX #255
- - INX
- LDA STRING,X
- BNE -
- LDY #0
- - LDA (CAT╙TR╨TR),Y
- STA STRING,X
- BEQ +
- INY
- INX
- BNE -
- + RTS
-
- RVS╙TRING = *
- LDY #0
- RVS╙TRING╬EXT = *
- LDA STRING,Y
- BNE +
- RTS
- + PHA
- SEC
- SBC #32
- AND #%01000000
- BNE +
- PLA
- SEC
- SBC #64
- JMP ++
- + PLA
- CLC
- ADC #64
- + STA STRING,Y
- INY
- JMP RVS╙TRING╬EXT
-
- ;===BSS===
-
- BSS = *
- IN┬UF = BSS+0
- LINE╨REV = IN┬UF+256+0
- LINE╬EXT = IN┬UF+256+4
- LINE╬UM = IN┬UF+256+8
- LINE╠EN = IN┬UF+256+12
- LINE = IN┬UF+256+13
- STRING = LINE╨REV+256
- NUMBUF = STRING+256
- BSS┼ND = NUMBUF+12
-