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

  1. ;*** WRAP PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:WRAP"
  6.  
  7. JMP MAIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. WORK1 = $02 ;(16)
  14. WORK2 = $12 ;(16)
  15. WORK3 = $22 ;(14)
  16.  
  17. CHR├╥ = $0D
  18. CHR╘AB = $09
  19. CHR╤UOTE = $22
  20.  
  21. ;SCREEN
  22.  
  23. SCR╘OP┴DDR      = $30 ;(2)
  24. SCR╠INE┴DDR     = $32 ;(2)
  25. CUR╥OW          = $34 ;(1)
  26. CUR├OL          = $35 ;(1)
  27. SCR╥OWS         = $36 ;(1)
  28. SCR├OLS         = $37 ;(1)
  29. SCR╥OW╔NC       = $38 ;(2)
  30. CUR╠EFT═ARGIN   = $3A ;(1)
  31.  
  32. ;DOCUMENT
  33.  
  34. LINE╨TR         = $40 ;(4)
  35. LINE╬UM         = $44 ;(4)
  36. TOS╠INE╨TR      = $48 ;(4)
  37. TOP╠INE╨TR      = $4C ;(4)
  38. BOT╠INE╨TR      = $50 ;(4)
  39. LINE├OUNT       = $54 ;(4)
  40. FILE╠ENGTH      = $58 ;(4)
  41. TARGET╠EN       = $5C ;(1)
  42. WRAP╞LAG        = $5D ;(1) ;128=WRAP,64=SHOW├╥
  43.  
  44. ;MANAGEMENT
  45.  
  46. MODIFIED        = $3B ;(1) ;$00=NO, $FF=MODIFIED
  47. MODE╞LAGS       = $3C ;(1) ;$80=INSERT, $40=INDENT
  48. STATUS╒PDATE    = $3D ;(1) ;128=LINE,64=COL,32=MOD,16=INS,8=BYT,4=FRE,2=NM,1=MSG
  49. MARKED╠INE╨TR   .BUF 4 ;(4)
  50. MARKED╠INE╬UM   .BUF 4 ;(4)
  51. MARKED├OL       .BUF 4 ;(1)
  52.  
  53. ;LINE FORMAT
  54.  
  55. HEAD╬EXT╨TR     = $70 ;(4)
  56. HEAD╨REV╨TR     = $74 ;(4)
  57. HEAD╠INE╠EN     = $78 ;(1)
  58. HEAD╔NDENT      = $79 ;(1)
  59. HEAD╞LAGS       = $7A ;(1) ;$80=CONNECTED, $40=NULL╠INE
  60. HEAD╠ENGTH      = $0B
  61.  
  62. ;KILL BUFFER
  63.  
  64. BUFFER╘OP╨TR    .BUF 4 ;(4)
  65. BUFFER┬OT╨TR    .BUF 4 ;(4)
  66. BUFFER╠INE├OUNT .BUF 4 ;(4)
  67.  
  68. ;DOCUMENT BUFFERS
  69.  
  70. ;=== MAIN ===
  71.  
  72. MAIN = *
  73.    JSR MAIN╔NIT
  74.    LDA #1
  75.    LDY #0
  76.    JSR GETARG
  77.    JSR LOAD╞ILE
  78.    RTS
  79.  
  80. MAIN╔NIT = *
  81.    LDA #$80
  82.    STA WRAP╞LAG
  83.    LDA #75
  84.    STA TARGET╠EN
  85.    RTS
  86.  
  87. ;*** LOAD FILE: USES WORK2 ***
  88.  
  89. LOAD╚EAD  = WORK2+0
  90. LOAD╘AIL  = WORK2+4
  91. LOAD╠INES = WORK2+8
  92. LOAD┬YTES = WORK2+12
  93. LOAD╞CB      = WORK3+0
  94. LOAD╠INE╙CAN = WORK3+1
  95. LOAD╠INE╠EN  = WORK3+2
  96. LOAD┬UF├OUNT = WORK3+3
  97. LOAD┬UF╨TR   = WORK3+4
  98.  
  99. LOAD╞ILE = *  ;( (ZP)=NAME ) : [W2]=HEAD, [W2]=TAIL, [W2]=LINES, [W2]=BYTES
  100.    JSR SAVE╫ORK3
  101.    JSR LOAD╔NIT
  102.    LDA #"R"
  103.    JSR OPEN
  104.    STA LOAD╞CB
  105. -  JSR LOAD╠INE
  106.    BCS +
  107.    JSR LOAD╠INE╫RAP
  108.    JSR LOAD╠INE╙TORE
  109.    JSR LOAD╠INE╧VERFLOW
  110.    JMP -
  111. +  LDA LOAD╠INE╠EN
  112.    BEQ +
  113.    JSR LOAD╠INE╫RAP
  114.    LDA #$00
  115.    STA LINE╞LAGS
  116.    JSR LOAD╠INE╙TORE
  117. +  LDA LOAD╞CB
  118.    JSR CLOSE
  119.    JSR RESTORE╫ORK3
  120.    RTS
  121.  
  122. LOAD╔NIT = *
  123.    LDA #0
  124.    LDX #16+14-1
  125. -  STA LOAD╚EAD,X
  126.    DEX
  127.    BPL -
  128.    RTS
  129.  
  130. LOAD╠INE = *  ;( ) : .├╙=END
  131.    ;TAB EXPANSION WILL GO INTO THIS ROUTINE
  132.    LDX LOAD┬UF╨TR
  133.    LDY LOAD╠INE╠EN
  134.  
  135.    LOAD╬EXT┬YTE = *
  136.    LDA LOAD┬UF├OUNT
  137.    BNE ++
  138.    STY LOAD╠INE╠EN
  139.    JSR LOAD┬UF
  140.    BCC +
  141.    RTS
  142. +  LDY LOAD╠INE╠EN
  143.    LDX LOAD┬UF╨TR
  144. +  NOP
  145.  
  146. -  LDA FILEBUF,X
  147.    STA LINE,Y
  148.    INX
  149.    INY
  150.    CMP #CHR├╥
  151.    BEQ ++
  152.    CPY TARGET╠EN
  153.    BEQ +  ;DETERMINES IF ├╥S WILL GO BEYOND LEN
  154.    BCS ++
  155. +  DEC LOAD┬UF├OUNT
  156.    BNE -
  157.    BEQ LOAD╬EXT┬YTE
  158.  
  159. +  DEC LOAD┬UF├OUNT
  160.    STX LOAD┬UF╨TR
  161.    STY LOAD╠INE╠EN
  162.    CLC
  163.    RTS
  164.  
  165. LOAD┬UF = *  ;( ) : .├╙=EOF
  166.    JSR STOPKEY
  167.    BCS +
  168.    LDA #<FILEBUF
  169.    LDY #>FILEBUF
  170.    STA ZP+0
  171.    STY ZP+1
  172.    LDA #<254
  173.    LDY #>254
  174.    LDX LOAD╞CB
  175.    JSR READ
  176.    BCS +
  177.    BEQ +
  178.    STA LOAD┬UF├OUNT
  179.    LDA #0
  180.    STA LOAD┬UF╨TR
  181.    CLC
  182.    RTS
  183. +  SEC
  184.    RTS
  185.  
  186. LOAD╠INE╫RAP = *
  187.    LDX LOAD╠INE╠EN
  188.    DEX
  189.    LDY #$00
  190.    LDA LINE,X
  191.    CMP #CHR├╥
  192.    BEQ +
  193.    LDY #$80
  194. +  STY LINE╞LAGS
  195.    CMP #CHR├╥
  196.    BNE +
  197. -  STX LINE╠INE╠EN
  198.    STX LOAD╠INE╙CAN
  199.    STX LOAD╠INE╠EN
  200.    RTS
  201.  
  202. +  LDX LOAD╠INE╠EN
  203.    CPX TARGET╠EN
  204.    BCC -
  205.  
  206. +  BIT WRAP╞LAG
  207.    BMI +
  208. -  LDA TARGET╠EN
  209.    STA LOAD╠INE╙CAN
  210.    STA LINE╠INE╠EN
  211.    RTS
  212.  
  213. +  LDX TARGET╠EN
  214. -  DEX
  215.    CPX #255
  216.    BEQ --
  217.    LDA LINE,X
  218.    CMP #" "
  219.    BNE -
  220. +  INX
  221.    STX LOAD╠INE╙CAN
  222.    STX LINE╠INE╠EN
  223.    RTS
  224.  
  225. LOAD╠INE╙TORE = *
  226.    LDA #<LINE
  227.    LDY #>LINE
  228.    STA ZP+0
  229.    STY ZP+1
  230.    LDA LINE╠INE╠EN
  231.    LDY #0
  232.    LDX #STDOUT
  233.    JSR WRITE
  234.    LDA #CHR├╥
  235.    JSR PUTCHAR
  236.    RTS
  237.  
  238. LOAD╠INE╧VERFLOW = *
  239.    LDX LOAD╠INE╙CAN
  240.    LDY #0
  241. -  CPX LOAD╠INE╠EN
  242.    BCS +
  243.    LDA LINE,X
  244.    STA LINE,Y
  245.    INX
  246.    INY
  247.    BNE -
  248. +  STY LOAD╠INE╠EN
  249.    RTS
  250.  
  251. ;=== MANAGEMENT ROUTINES ===
  252.  
  253. WORK3╙AVE .BUF 14
  254.  
  255. SAVE╫ORK3 = *
  256.    LDX #13
  257. -  LDA WORK3,X
  258.    STA WORK3╙AVE,X
  259.    DEX
  260.    BPL -
  261.    RTS
  262.  
  263. RESTORE╫ORK3 = *
  264.    LDX #13
  265. -  LDA WORK3╙AVE,X
  266.    STA WORK3,X
  267.    DEX
  268.    BPL -
  269.    RTS
  270.  
  271. ;=== STANDARD LIBRARY ===
  272.  
  273. PUTS = *
  274.    LDX #STDOUT
  275. FPUTS = *
  276.    STA ZP+0
  277.    STY ZP+1
  278.    LDY #$FF
  279. -  INY
  280.    LDA (ZP),Y
  281.    BNE -
  282.    TYA
  283.    LDY #0
  284.    JMP WRITE
  285. EPUTS = *
  286.    LDX #STDERR
  287.    JMP FPUTS
  288.  
  289. PUTCHAR = *
  290.    STX XSAVE
  291.    STY YSAVE
  292.    LDX #STDOUT
  293.    JSR PUTC
  294.    LDX XSAVE
  295.    LDY YSAVE
  296.    RTS
  297.    XSAVE .BUF 1
  298.    YSAVE .BUF 1
  299.  
  300. PUTC = *
  301.    STA PUTC┬UFFER
  302.    LDA #<PUTC┬UFFER
  303.    LDY #>PUTC┬UFFER
  304.    STA ZP+0
  305.    STY ZP+1
  306.    LDA #1
  307.    LDY #0
  308.    JMP WRITE
  309.    PUTC┬UFFER .BUF 1
  310.  
  311. GETCHAR = *
  312.    LDX #STDIN
  313. GETC = *
  314.    LDA #<GETC┬UFFER
  315.    LDY #>GETC┬UFFER
  316.    STA ZP+0
  317.    STY ZP+1
  318.    LDA #1
  319.    LDY #0
  320.    JSR READ
  321.    BEQ +
  322.    LDA GETC┬UFFER
  323.    RTS
  324. +  SEC
  325.    RTS
  326.    GETC┬UFFER .BUF 1
  327.  
  328. GETARG = *
  329.    STY ZP+1
  330.    ASL
  331.    STA ZP+0
  332.    ROL ZP+1
  333.    CLC
  334.    LDA ACE┴RGV
  335.    ADC ZP+0
  336.    STA ZP+0
  337.    LDA ACE┴RGV+1
  338.    ADC ZP+1
  339.    STA ZP+1
  340.    LDY #0
  341.    LDA (ZP),Y
  342.    TAX
  343.    INY
  344.    LDA (ZP),Y
  345.    STX ZP+0
  346.    STA ZP+1
  347.    RTS
  348.  
  349. ;===BSS===
  350.  
  351. BSS             = *
  352. LINEBUF         = BSS+0  ;(256)
  353. LINE╬EXT╨TR     = LINEBUF+$0 ;(4)
  354. LINE╨REV╨TR     = LINEBUF+$4 ;(4)
  355. LINE╠INE╠EN     = LINEBUF+$8 ;(1)
  356. LINE╔NDENT      = LINEBUF+$9 ;(1)
  357. LINE╞LAGS       = LINEBUF+$A ;(1) ;$80=CONNECTED, $40=TAIL╠INE
  358. LINE            = LINEBUF+$B ;(241)
  359.  
  360. FILEBUF         = LINEBUF+256  ;(256)
  361. TPA╞REEMAP      = FILEBUF+256  ;(256)
  362. BSS┼ND          = TPA╞REEMAP+256
  363.