home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE-R11-SCR3.ARC / MORE.S < prev    next >
Encoding:
Text File  |  2019-04-13  |  9.5 KB  |  662 lines

  1. ;*** MORE TEXT FILE DISPLAYER VERSION 1.00 - BY ├RAIG ┬RUCE - 23-╞EB-94
  2.  
  3. ;MORE [-HELP] FILE ...
  4.  
  5. .SEQ ACEHEAD.S
  6. .ORG ACE┴PP┴DDRESS
  7. .OBJ "@0:MORE"
  8.  
  9. JMP MAIN
  10. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  11. .BYTE 64,0  ;** STACK,RESERVED
  12.  
  13. ;*** GLOBAL DECLARATIONS
  14.  
  15. CHR┬┼╠ = $07
  16. CHR╘┴┬ = $09
  17. CHR╠╞ = $0A
  18. CHR├╥ = $0D
  19. CHR┬╙ = $14
  20. CHR├╠╥ = $93
  21. TRUE   = $FF
  22. FALSE  = $00
  23.  
  24. ARG         = 2  ;(2)  ;CURRENT ARGUMENT NUMBER
  25. NAME        = 4  ;(2)  ;NAME OF FILE BEING BCODED
  26. ROW         = 6  ;(1)  ;CURRENT ROW ON DISPLAY
  27. ROW┴DDR     = 8  ;(2)  ;ADDRESS OF CURRENT ROW ON DISPLAY
  28. ROW╔NC      = 10 ;(2)  ;INCREMENT BETWEEN SUCCESSIVE ROWS ON DISPLAY
  29. ROW╚OME     = 12 ;(2)  ;ADDRESS OF HOME POSITION ON DISPLAY
  30. SCR╥OWS     = 14 ;(1)  ;NUMBER OF ROWS ON DISPLAY
  31. SCR├OLS     = 15 ;(1)  ;NUMBER OF COLUMNS ON DISPLAY
  32. FILE╠INE    = 16 ;(4)  ;LINE NUMBER IN CURRENT FILE
  33. IN┬UF╨TR    = 20 ;(1)  ;NEXT BYTE TO EXTRACT FROM INPUT BUFFER
  34. IN┬UF╓ALID  = 21 ;(1)  ;NUMBER OF VALID BYTES IN INPUT BUFFER
  35. IN┬UF╞D     = 22 ;(1)  ;FILE DESCRIPTOR FOR INPUT
  36. POS         = 23 ;(1)  ;SCAN POSITION
  37. GL┬UF├HAR   = 24 ;(1)  ;BUFFERED CHARACTER FOR GETLINE
  38. GL┬UF┼OF    = 25 ;(1)  ;WHETHER BUFFED CHAR IS EOF FOR GETLINE
  39. PROMPT├OLOR = 26 ;(1)  ;COLOR OF "MORE" PROMPT
  40. TEXT├OLOR   = 27 ;(1)  ;COLOR OF REGULAR TEXT
  41. PROMPT╠EN   = 28 ;(1)  ;LENGTH OF PROMPT STRING
  42. CAT╙TR╨TR   = 30 ;(2)  ;STRING POINTER FOR CAT OPERATION
  43. CURSOR├OLOR = 32 ;(1)  ;COLOR OF CURSOR ON "MORE" PROMPT
  44. FILE╨ARM    = 33 ;(1)  ;FLAG THAT A FILENAME HAS APPEARED
  45.  
  46. ;===MAIN===
  47.  
  48. MAIN = *
  49.    ;** CHECK FOR LARGE ENOUGH ╘╨┴
  50.    SEC
  51.    LDA #<BSS┼ND
  52.    CMP ACE═EM╘OP+0
  53.    LDA #>BSS┼ND
  54.    SBC ACE═EM╘OP+1
  55.    BCS +
  56.    JMP MAIN╔NIT
  57. +  LDA #<TPA═SG
  58.    LDY #>TPA═SG
  59.    JSR EPUTS
  60. DIE = *
  61.    LDA #1
  62.    LDX #0
  63.    JMP EXIT
  64.  
  65. TPA═SG = *
  66.    .ASC "╔NSUFFICIENT PROGRAM SPACE TO RUN MORE"
  67.    .BYTE CHR├╥,0
  68.  
  69. USAGE = *
  70.    LDA #<USAGE═SG
  71.    LDY #>USAGE═SG
  72.    JSR EPUTS
  73.    JMP DIE
  74.  
  75. USAGE═SG = *
  76.    .ASC "USAGE: MORE [-HELP] FILE ..."
  77.    .BYTE CHR├╥,0
  78.  
  79. WINDOW═SG = *
  80.    .ASC "ERROR: DISPLAY MUST HAVE AT LEAST 10 COLUMNS AND 2 ROWS."
  81.    .BYTE CHR├╥,0
  82.  
  83. MAIN╔NIT = *
  84.    LDA #FALSE
  85.    STA FILE╨ARM
  86.    LDA #0
  87.    STA ARG+0
  88.    STA ARG+1
  89.    JSR WINSIZE
  90.    STA SCR╥OWS
  91.    STX SCR├OLS
  92.    CPX #10
  93.    BCC +
  94.    CMP #2
  95.    BCS ++
  96. +  LDA #<WINDOW═SG
  97.    LDY #>WINDOW═SG
  98.    JSR EPUTS
  99.    JMP DIE
  100. +  LDA SYSWORK+2
  101.    LDY SYSWORK+3
  102.    STA ROW╚OME+0
  103.    STY ROW╚OME+1
  104.    LDA SYSWORK+4
  105.    LDY SYSWORK+5
  106.    STA ROW╔NC+0
  107.    STY ROW╔NC+1
  108.  
  109.    MAIN╬EXT = *
  110.    JSR CHECK╙TOP
  111.    INC ARG+0
  112.    BNE +
  113.    INC ARG+1
  114. +  LDA ARG+0
  115.    LDY ARG+1
  116.    JSR GETARG
  117.    BEQ MAIN┼XIT
  118.    LDA ZP+0
  119.    LDY ZP+1
  120.    STA NAME+0
  121.    STY NAME+1
  122.    LDY #0
  123.    LDA (ZP),Y
  124.    CMP #"-"
  125.    BNE +
  126.    JMP USAGE
  127. +  JSR MORE
  128.    JMP MAIN╬EXT
  129.  
  130. MAIN┼XIT = *
  131.    LDA FILE╨ARM
  132.    BEQ +
  133.    JSR SCR╙HUTDOWN
  134. +  RTS
  135.  
  136. CHECK╙TOP = *
  137.    JSR STOPKEY
  138.    BCS +
  139.    RTS
  140. +  LDA #<STOPPED═SG
  141.    LDY #>STOPPED═SG
  142.    JSR EPUTS
  143.    JMP DIE
  144.  
  145.    STOPPED═SG = *
  146.    .ASC "<╙TOPPED>"
  147.    .BYTE CHR├╥,0
  148.  
  149. MORE = *
  150.    LDA FILE╨ARM
  151.    BNE +
  152.    LDA #TRUE
  153.    STA FILE╨ARM
  154.    JSR SCR╔NIT
  155. +  JSR SCR├LEAR
  156.    LDA #0
  157.    LDX #3
  158. -  STA FILE╠INE,X
  159.    DEX
  160.    BPL -
  161.    LDA NAME+0
  162.    LDY NAME+1
  163.    JSR INIT╟ETBYTE
  164.    BCC +
  165.    LDA #2
  166.    JSR PROMPT
  167.    CMP #"Q"
  168.    BEQ MORE┼XIT
  169.    CMP #$03
  170.    BEQ MORE┼XIT
  171.    RTS
  172. +  JSR GETLINE╔NIT
  173.    BCS +
  174.  
  175.    MORE╬EXT╠INE = *
  176.    JSR GETLINE
  177.    BCS MORE┼╧╞
  178.    JSR PUTLINE
  179.    LDX ROW
  180.    INX
  181.    CPX SCR╥OWS
  182.    BCC MORE╬EXT╠INE
  183.    BIT GL┬UF┼OF
  184.    BMI MORE┼╧╞
  185.    MORE╨ROMPT = *
  186.    LDA #0
  187.    JSR PROMPT
  188.    CMP #"Q"
  189.    BEQ MORE┼XIT
  190.    CMP #$03
  191.    BEQ MORE┼XIT
  192.    CMP #"N"
  193.    BNE +
  194.    LDA IN┬UF╞D
  195.    JSR CLOSE
  196.    RTS
  197. +  CMP #CHR├╥
  198.    BEQ MORE├╥
  199.    CMP #$11
  200.    BEQ MORE├╥
  201.    CMP #"B"
  202.    BEQ MORE┬ACK
  203.    JSR SCR├LEAR
  204.    JMP MORE╬EXT╠INE
  205.  
  206.    MORE┼╧╞ = *
  207.    LDA #1
  208.    JSR PROMPT
  209.    CMP #"Q"
  210.    BEQ MORE┼XIT
  211.    CMP #$03
  212.    BEQ MORE┼XIT
  213.    LDA IN┬UF╞D
  214.    JSR CLOSE
  215.    RTS
  216.  
  217. MORE┼XIT = *
  218.    LDA IN┬UF╞D
  219.    JSR CLOSE
  220.    JSR SCR╙HUTDOWN
  221.    LDA #0
  222.    LDX #0
  223.    JMP EXIT
  224.  
  225. MORE├╥ = *
  226.    LDX ROW
  227.    INX
  228.    CPX SCR╥OWS
  229.    BCC +
  230.    LDA #" "
  231.    STA SYSWORK+4
  232.    LDA #$88
  233.    LDX #1
  234.    JSR WINSCROLL
  235.    DEC ROW
  236.    SEC
  237.    LDA ROW┴DDR+0
  238.    SBC ROW╔NC+0
  239.    STA ROW┴DDR+0
  240.    LDA ROW┴DDR+1
  241.    SBC ROW╔NC+1
  242.    STA ROW┴DDR+1
  243. +  JMP MORE╬EXT╠INE
  244.  
  245. MORE┬ACK = *
  246.    LDA #CHR┬┼╠
  247.    JSR CONPUTCHAR
  248.    JMP MORE╨ROMPT
  249.  
  250. ;=== STANDARD LIBRARY ===
  251.  
  252. PUTS = *
  253.    LDX #STDOUT
  254. FPUTS = *
  255.    STA ZP+0
  256.    STY ZP+1
  257.    LDY #$FF
  258. -  INY
  259.    LDA (ZP),Y
  260.    BNE -
  261.    TYA
  262.    LDY #0
  263.    JMP WRITE
  264. EPUTS = *
  265.    LDX #STDERR
  266.    JMP FPUTS
  267.  
  268. EPUTCHAR = *
  269.    LDX #STDERR
  270.    JMP PUTC
  271. PUTCHAR = *
  272.    LDX #STDOUT
  273. PUTC = *
  274.    STA PUTC┬UFFER
  275.    LDA #<PUTC┬UFFER
  276.    LDY #>PUTC┬UFFER
  277.    STA ZP+0
  278.    STY ZP+1
  279.    LDA #1
  280.    LDY #0
  281.    JMP WRITE
  282.    PUTC┬UFFER .BUF 1
  283.  
  284. GETARG = *
  285.    STY ZP+1
  286.    ASL
  287.    STA ZP+0
  288.    ROL ZP+1
  289.    CLC
  290.    LDA ACE┴RGV+0
  291.    ADC ZP+0
  292.    STA ZP+0
  293.    LDA ACE┴RGV+1
  294.    ADC ZP+1
  295.    STA ZP+1
  296.    LDY #0
  297.    LDA (ZP),Y
  298.    TAX
  299.    INY
  300.    LDA (ZP),Y
  301.    STX ZP+0
  302.    STA ZP+1
  303.    ORA ZP+0
  304.    RTS
  305.  
  306. INIT╟ETBYTE = *  ;( (.┴┘)=FILENAME ) : .├╙=OPEN┼RROR
  307.    STA ZP+0
  308.    STY ZP+1
  309.    LDA #"R"
  310.    JSR OPEN
  311.    BCS +
  312.    STA IN┬UF╞D
  313.    LDA #0
  314.    STA IN┬UF╓ALID
  315.    STA IN┬UF╨TR
  316.    CLC
  317. +  RTS
  318.  
  319. GETBYTE = *  ;( ) : .┴=BYTE, .├╙=EOF
  320.    LDX IN┬UF╨TR
  321.    CPX IN┬UF╓ALID
  322.    BCS FILL╔N┬UF
  323.    LDA IN┬UF,X
  324.    INC IN┬UF╨TR
  325.    CLC
  326.    RTS
  327.  
  328. FILL╔N┬UF = *
  329.    JSR CHECK╙TOP
  330.    LDA #<IN┬UF
  331.    LDY #>IN┬UF
  332.    STA ZP+0
  333.    STY ZP+1
  334.    LDA #<250
  335.    LDY #>250
  336.    LDX IN┬UF╞D
  337.    JSR READ
  338.    BEQ +
  339.    BCS +
  340.    STA IN┬UF╓ALID
  341.    LDA #0
  342.    STA IN┬UF╨TR
  343.    JMP GETBYTE
  344. +  LDA #0
  345.    STA IN┬UF╨TR
  346.    STA IN┬UF╓ALID
  347.    SEC
  348.    RTS
  349.  
  350. GETLINE╔NIT = *
  351.    LDA #FALSE
  352.    STA GL┬UF┼OF
  353.    JMP GETLINE┼XIT
  354.  
  355. GETLINE = *
  356.    LDX #0
  357.    STX POS
  358.    SEC
  359.    LDA GL┬UF┼OF
  360.    BNE +
  361.    LDA GL┬UF├HAR
  362.    CLC
  363.    BCC +
  364.  
  365.    GETLINE╬EXT├HAR = *
  366.    JSR GETBYTE
  367. +  BCS GETLINE┼╧╞
  368.    CMP #CHR├╥
  369.    BEQ GETLINE├╥
  370.    CMP #CHR╘┴┬
  371.    BEQ GETLINE╘┴┬
  372.    CMP #CHR├╠╥
  373.    ;BEQ GETLINE├╠╥
  374.    LDX POS
  375.    STA LINE,X
  376.    INX
  377.    STX POS
  378.    CPX SCR├OLS
  379.    BCC GETLINE╬EXT├HAR
  380.    ;** LINE WRAP
  381.    JSR GETBYTE
  382.    CMP #CHR├╥
  383.    BEQ GETLINE├╥
  384.    CLC
  385.    BCC GETLINE┼XIT╬O╟ET
  386.  
  387. GETLINE┼XIT = *
  388.    JSR GETBYTE
  389.    GETLINE┼XIT╬O╟ET = *
  390.    STA GL┬UF├HAR
  391.    BCC +
  392.    LDA #TRUE
  393.    STA GL┬UF┼OF
  394. +  LDA POS
  395.    STA LINE╠EN
  396.    CLC
  397.    RTS
  398.  
  399. GETLINE├╥ = *
  400.    INC FILE╠INE+0
  401.    BNE +
  402.    INC FILE╠INE+1
  403.    BNE +
  404.    INC FILE╠INE+2
  405.    BNE +
  406.    INC FILE╠INE+3
  407. +  JMP GETLINE┼XIT
  408.  
  409. GETLINE┼╧╞ = *
  410.    LDA #TRUE
  411.    STA GL┬UF┼OF
  412.    SEC
  413.    RTS
  414.  
  415. GL╘AB┴DD .BUF 1
  416.  
  417. GETLINE╘┴┬ = *
  418.    LDX POS
  419.    LDY #8
  420.    LDA #" "
  421. -  STA LINE,X
  422.    INX
  423.    DEY
  424.    BNE -
  425.    LDA POS
  426.    AND #7
  427.    STA GL╘AB┴DD
  428.    SEC
  429.    LDA #8
  430.    SBC GL╘AB┴DD
  431.    CLC
  432.    ADC POS
  433.    CMP SCR├OLS
  434.    BCC +
  435.    JMP GETLINE┼XIT
  436. +  STA POS
  437.    JMP GETLINE╬EXT├HAR
  438.  
  439. GETLINE├╠╥ = *
  440.    BRK
  441.  
  442. SCR╔NIT = *
  443.    JSR CONPALETTE
  444.    LDA SYSWORK+4
  445.    STA PROMPT├OLOR
  446.    LDA SYSWORK+0
  447.    STA TEXT├OLOR
  448.    LDA SYSWORK+1
  449.    STA CURSOR├OLOR
  450.    LDA #$60
  451.    LDX #" "
  452.    LDY SYSWORK+0
  453.    JSR WINCLS
  454.    ;** FALL THROUGH
  455.  
  456. SCR├LEAR = *
  457.    LDA #$80
  458.    LDX #" "
  459.    JSR WINCLS
  460.    LDA #0
  461.    STA ROW
  462.    LDA ROW╚OME+0
  463.    LDY ROW╚OME+1
  464.    STA ROW┴DDR+0
  465.    STY ROW┴DDR+1
  466.    RTS
  467.  
  468. SCR╙HUTDOWN = *
  469.    SEC
  470.    LDA SCR╥OWS
  471.    SBC #1
  472.    LDX #0
  473.    JSR CONPOS
  474.    RTS
  475.  
  476. PUTLINE = *
  477.    LDA ROW┴DDR+0
  478.    LDY ROW┴DDR+1
  479.    STA SYSWORK+0
  480.    STY SYSWORK+1
  481.    LDA #<LINE
  482.    LDY #>LINE
  483.    STA SYSWORK+2
  484.    STY SYSWORK+3
  485.    LDA #$80
  486.    LDX LINE╠EN
  487.    STX SYSWORK+5
  488.    JSR WINPUT
  489.    INC ROW
  490.    CLC
  491.    LDA ROW┴DDR+0
  492.    ADC ROW╔NC+0
  493.    STA ROW┴DDR+0
  494.    LDA ROW┴DDR+1
  495.    ADC ROW╔NC+1
  496.    STA ROW┴DDR+1
  497.    RTS
  498.  
  499. SCR╙CROLL = *
  500.    BRK
  501.  
  502. PROMPT├HAR .BUF 1
  503.  
  504. PROMPT = *  ;(.┴=PROMPT╘YPE0:MORE,1:EOF,2:ERROR) : .┴=KEY├HAR
  505.    ;** GET PROMPT STRING
  506.    LDX #0
  507.    STX STRING+0
  508.    ASL
  509.    TAX
  510.    LDA PROMPT╘AB+1,X
  511.    TAY
  512.    LDA PROMPT╘AB+0,X
  513.    JSR CAT╙TRING
  514.    LDA NAME+0
  515.    LDY NAME+1
  516.    JSR CAT╙TRING
  517.    LDA #<PROMPT├OLON
  518.    LDY #>PROMPT├OLON
  519.    JSR CAT╙TRING
  520.    LDA #<NUMBUF
  521.    LDY #>NUMBUF
  522.    STA ZP+0
  523.    STY ZP+1
  524.    LDA #1
  525.    LDX #FILE╠INE
  526.    JSR UTOA
  527.    LDA #<NUMBUF
  528.    LDY #>NUMBUF
  529.    JSR CAT╙TRING
  530.    LDA #<PROMPT├LOSE
  531.    LDY #>PROMPT├LOSE
  532.    JSR CAT╙TRING
  533.    STX PROMPT╠EN
  534.    INX
  535.    CPX SCR├OLS
  536.    BCC +
  537.    LDX SCR├OLS
  538.    DEX
  539.    STX PROMPT╠EN
  540. +  JSR RVS╙TRING
  541.    ;** DISPLAY PROMPT
  542.    LDA ROW┴DDR+0
  543.    LDY ROW┴DDR+1
  544.    STA SYSWORK+0
  545.    STY SYSWORK+1
  546.    LDA #<STRING
  547.    LDY #>STRING
  548.    STA SYSWORK+2
  549.    STY SYSWORK+3
  550.    LDA #$E0
  551.    LDX PROMPT╠EN
  552.    STX SYSWORK+5
  553.    LDY PROMPT├OLOR
  554.    JSR WINPUT
  555.    ;** DISPLAY CURSOR
  556.    CLC
  557.    LDA ROW┴DDR+0
  558.    ADC PROMPT╠EN
  559.    STA SYSWORK+0
  560.    LDA ROW┴DDR+1
  561.    ADC #0
  562.    STA SYSWORK+1
  563.    LDA #$FF
  564.    LDY CURSOR├OLOR
  565.    JSR WINCURSOR
  566.    ;** GET KEY
  567.    JSR GETKEY
  568.    STA PROMPT├HAR
  569.    ;** ERASE CURSOR
  570.    CLC
  571.    LDA ROW┴DDR+0
  572.    ADC PROMPT╠EN
  573.    STA SYSWORK+0
  574.    LDA ROW┴DDR+1
  575.    ADC #0
  576.    STA SYSWORK+1
  577.    LDA #$00
  578.    JSR WINCURSOR
  579.    ;** ERASE PROMPT
  580.    LDA ROW┴DDR+0
  581.    LDY ROW┴DDR+1
  582.    STA SYSWORK+0
  583.    STY SYSWORK+1
  584.    LDA #" "
  585.    STA SYSWORK+4
  586.    LDA PROMPT╠EN
  587.    STA SYSWORK+5
  588.    LDA #$E0
  589.    LDX #0
  590.    LDY TEXT├OLOR
  591.    JSR WINPUT
  592.    LDA PROMPT├HAR
  593.    RTS
  594.  
  595. PROMPT╘AB .WORD PROMPT═ORE,PROMPT┼╧╞,PROMPT┼RROR
  596. PROMPT═ORE = *
  597.    .ASC "--═ORE-- ("
  598.    .BYTE 0
  599. PROMPT┼╧╞ = *
  600.    .ASC "--┼╧╞-- ("
  601.    .BYTE 0
  602. PROMPT┼RROR = *
  603.    .ASC "--┼╥╥╧╥!-- ("
  604.    .BYTE 0
  605. PROMPT├OLON = *
  606.    .ASC ":"
  607.    .BYTE 0
  608. PROMPT├LOSE = *
  609.    .ASC ")"
  610.    .BYTE 0
  611.  
  612. CAT╙TRING = *  ;( (.┴┘)=STRING ) : .╪=STR╠EN
  613.    STA CAT╙TR╨TR+0
  614.    STY CAT╙TR╨TR+1
  615.    LDX #255
  616. -  INX
  617.    LDA STRING,X
  618.    BNE -
  619.    LDY #0
  620. -  LDA (CAT╙TR╨TR),Y
  621.    STA STRING,X
  622.    BEQ +
  623.    INY
  624.    INX
  625.    BNE -
  626. +  RTS
  627.  
  628. RVS╙TRING = *
  629.    LDY #0
  630.    RVS╙TRING╬EXT = *
  631.    LDA STRING,Y
  632.    BNE +
  633.    RTS
  634. +  PHA
  635.    SEC
  636.    SBC #32
  637.    AND #%01000000
  638.    BNE +
  639.    PLA
  640.    SEC
  641.    SBC #64
  642.    JMP ++
  643. +  PLA
  644.    CLC
  645.    ADC #64
  646. +  STA STRING,Y
  647.    INY
  648.    JMP RVS╙TRING╬EXT
  649.  
  650. ;===BSS===
  651.  
  652. BSS = *
  653. IN┬UF    = BSS+0
  654. LINE╨REV = IN┬UF+256+0
  655. LINE╬EXT = IN┬UF+256+4
  656. LINE╬UM  = IN┬UF+256+8
  657. LINE╠EN  = IN┬UF+256+12
  658. LINE     = IN┬UF+256+13
  659. STRING   = LINE╨REV+256
  660. NUMBUF   = STRING+256
  661. BSS┼ND   = NUMBUF+12
  662.