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

  1. ;*** UUENCODE PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:UUENCODE"
  6.  
  7. JMP UUENCODE═AIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $60
  14.  
  15. CHR├╥ = $0D
  16. CHR╤UOTE = $22
  17.  
  18. ;******** STANDARD LIBRARY ********
  19. PUTS = *
  20.    LDX #STDOUT
  21. FPUTS = *
  22.    STA ZP
  23.    STY ZP+1
  24.    LDY #$FF
  25. -  INY
  26.    LDA (ZP),Y
  27.    BNE -
  28.    TYA
  29.    LDY #0
  30.    JMP WRITE
  31. EPUTS = *
  32.    LDX #STDERR
  33.    JMP FPUTS
  34.  
  35. PUTCHAR = *
  36.    LDX #STDOUT
  37. PUTC = *
  38.    STA PUTC┬UFFER
  39.    LDA #<PUTC┬UFFER
  40.    LDY #>PUTC┬UFFER
  41.    STA ZP
  42.    STY ZP+1
  43.    LDA #1
  44.    LDY #0
  45.    JMP WRITE
  46.    PUTC┬UFFER .BUF 1
  47.  
  48. GETCHAR = *
  49.    LDX #STDIN
  50. GETC = *
  51.    LDA #<GETC┬UFFER
  52.    LDY #>GETC┬UFFER
  53.    STA ZP
  54.    STY ZP+1
  55.    LDA #1
  56.    LDY #0
  57.    JSR READ
  58.    BEQ +
  59.    LDA GETC┬UFFER
  60.    RTS
  61. +  SEC
  62.    RTS
  63.    GETC┬UFFER .BUF 1
  64.  
  65. GETARG = *
  66.    STY ZP+1
  67.    ASL
  68.    STA ZP
  69.    ROL ZP+1
  70.    CLC
  71.    LDA ACE┴RGV
  72.    ADC ZP
  73.    STA ZP
  74.    LDA ACE┴RGV+1
  75.    ADC ZP+1
  76.    STA ZP+1
  77.    LDY #0
  78.    LDA (ZP),Y
  79.    TAX
  80.    INY
  81.    LDA (ZP),Y
  82.    STX ZP
  83.    STA ZP+1
  84.    RTS
  85.  
  86. BASENAME╙TART = LIBWORK
  87.  
  88. BASENAME = * ;( (ZP)=INNAME ) : UUE╧UT┬UF=OUTNAME
  89.    LDY #255
  90.    STY BASENAME╙TART
  91. -  INY
  92.    LDA (ZP),Y
  93.    BEQ BASENAME─ONE
  94.    CMP #":"
  95.    BEQ +
  96.    CMP #"/"
  97.    BNE -
  98. +  STY BASENAME╙TART
  99.    JMP -
  100.    BASENAME─ONE = *
  101.    LDY BASENAME╙TART
  102.    LDX #255
  103. -  INY
  104.    INX
  105.    LDA (ZP),Y
  106.    STA UUE╧UT┬UF,X
  107.    BNE -
  108.    CPX #2
  109.    BCC +
  110.    LDA UUE╧UT┬UF-2,X
  111.    CMP #","
  112.    BNE +
  113.    LDA #0
  114.    STA UUE╧UT┬UF-2,X
  115. +  RTS
  116.  
  117. ;===UUENCODE===
  118. UUE┴RG = 2
  119. UUE╬AME = 4
  120. IN┬UF╠EN = 6
  121.  
  122. UUENCODE═AIN = *
  123.    ;** CHECK ARGUMENT COUNT
  124.    LDA ACE┴RGC+1
  125.    BNE UUE┼NOUGH┴RGS
  126.    LDA ACE┴RGC
  127.    CMP #2
  128.    BCS UUE┼NOUGH┴RGS
  129.  
  130. UUE╒SAGE = *
  131.    LDA #<UUE╒SAGE═SG
  132.    LDY #>UUE╒SAGE═SG
  133.    JMP PUTS
  134.  
  135. UUE╒SAGE═SG = *
  136.    .ASC "╒SAGE: UUENCODE FILE1 FILE2 ... FILE╬"
  137.    .BYTE CHR├╥
  138.    .BYTE 0
  139.  
  140. UUE┼NOUGH┴RGS = *
  141.    ;** GET INPUT BUFFER LENGTH
  142.    SEC
  143.    LDA ACE═EM╘OP+0
  144.    SBC #<UUE╔N┬UF
  145.    STA IN┬UF╠EN
  146.    LDA ACE═EM╘OP+1
  147.    SBC #>UUE╔N┬UF
  148.    STA IN┬UF╠EN+1
  149.    ;** MAIN LOOP
  150.    LDA #1
  151.    LDY #0
  152.    STA UUE┴RG
  153.    STY UUE┴RG+1
  154. -  JSR CHECKSTOP
  155.    LDA UUE┴RG
  156.    LDY UUE┴RG+1
  157.    JSR GETARG
  158.    LDA ZP
  159.    LDY ZP+1
  160.    STA UUE╬AME
  161.    STY UUE╬AME+1
  162.    ORA ZP+1
  163.    BEQ UUE┼XIT
  164.    JSR UUE┼CHO
  165.    JSR UUENCODE
  166.    BCC +
  167.    JSR UUE┼RROR
  168. +  INC UUE┴RG
  169.    BNE +
  170.    INC UUE┴RG+1
  171. +  JMP -
  172.  
  173. UUE┼XIT = *
  174.    RTS
  175.  
  176. UUE┼RROR = *
  177.    LDA #<UUE┼RROR═SG1
  178.    LDY #>UUE┼RROR═SG1
  179.    JSR EPUTS
  180.    LDA UUE╬AME
  181.    LDY UUE╬AME+1
  182.    JSR EPUTS
  183.    LDA #<UUE┼RROR═SG2
  184.    LDY #>UUE┼RROR═SG2
  185.    JMP EPUTS
  186.  
  187. UUE┼RROR═SG1 = *
  188.    .ASC "┼RROR ATTEMPTING TO UUENCODE "
  189.    .BYTE CHR╤UOTE
  190.    .BYTE 0
  191.  
  192. UUE┼RROR═SG2 = *
  193.    .BYTE CHR╤UOTE
  194.    .BYTE CHR├╥
  195.    .BYTE 0
  196.  
  197. UUE┼CHO = *
  198.    LDA #<UUE┼CHO═SG1
  199.    LDY #>UUE┼CHO═SG1
  200.    JSR EPUTS
  201.    LDA UUE╬AME
  202.    LDY UUE╬AME+1
  203.    JSR EPUTS
  204.    LDA #<UUE┼CHO═SG2
  205.    LDY #>UUE┼CHO═SG2
  206.    JMP EPUTS
  207.  
  208. UUE┼CHO═SG1 = *
  209.    .ASC "╒UENCODING FILE "
  210.    .BYTE CHR╤UOTE
  211.    .BYTE 0
  212.  
  213. UUE┼CHO═SG2 = *
  214.    .BYTE CHR╤UOTE
  215.    .ASC "..."
  216.    .BYTE CHR├╥
  217.    .BYTE 0
  218.  
  219. CHECKSTOP = *
  220.    JSR STOPKEY
  221.    BCS +
  222.    RTS
  223. +  LDA #<STOPPED═SG
  224.    LDY #>STOPPED═SG
  225.    JSR EPUTS
  226.    LDA #1
  227.    LDX #0
  228.    JMP EXIT
  229.  
  230.    STOPPED═SG = *
  231.    .ASC "<╙TOPPED>"
  232.    .BYTE CHR├╥,0
  233.  
  234. BUF╨TR = 8
  235. BUF├OUNT = 10
  236. INFILE = 12
  237.  
  238. UUENCODE = *
  239.    ;** OPEN FILE
  240.    LDA UUE╬AME
  241.    LDY UUE╬AME+1
  242.    STA ZP
  243.    STY ZP+1
  244.    LDA #"R"
  245.    JSR OPEN
  246.    BCC +
  247.    RTS
  248. +  STA INFILE
  249.    ;** ENCODE FILE
  250.    JSR UUENCODE┬ODY
  251.    ;** CLOSE FILE
  252.    LDA INFILE
  253.    JSR CLOSE
  254.    RTS
  255.  
  256. UUENCODE┬ODY = *
  257.    LDA #0
  258.    STA BUF├OUNT
  259.    STA BUF├OUNT+1
  260.    ;** HEADER LINE
  261.    LDA #<UUE╚EADER═SG
  262.    LDY #>UUE╚EADER═SG
  263.    JSR PUTS
  264.    LDA UUE╬AME
  265.    LDY UUE╬AME+1
  266.    STA ZP
  267.    STY ZP+1
  268.    JSR BASENAME
  269.    LDA #<UUE╧UT┬UF
  270.    LDY #>UUE╧UT┬UF
  271.    JSR PUTS
  272.    LDA #CHR├╥
  273.    JSR PUTCHAR
  274.    ;** LOOP
  275. -  JSR UU╠INE
  276.    BCC -
  277.    ;** END LINE
  278.    LDA #<UUE┼ND═SG
  279.    LDY #>UUE┼ND═SG
  280.    JSR PUTS
  281.    ;** CRC LINE
  282.    RTS
  283.  
  284. UUE╚EADER═SG = *
  285.    .ASC "BEGIN 640 "
  286.    .BYTE 0
  287.  
  288. UUE┼ND═SG = *
  289.    .ASC ""
  290.    .BYTE CHR├╥
  291.    .ASC "END"
  292.    .BYTE CHR├╥,0
  293.  
  294. GET┬YTE = *
  295.    LDA BUF├OUNT
  296.    ORA BUF├OUNT+1
  297.    BEQ GET┬YTE╞ILL┬UF
  298.    LDY #0
  299.    LDA (BUF╨TR),Y
  300.    INC BUF╨TR
  301.    BNE +
  302.    INC BUF╨TR+1
  303. +  LDX BUF├OUNT
  304.    BNE +
  305.    DEC BUF├OUNT+1
  306. +  DEC BUF├OUNT
  307.    CLC
  308.    RTS
  309.  
  310. GET┬YTE╞ILL┬UF = *
  311.    JSR CHECKSTOP
  312.    LDA #<UUE╔N┬UF
  313.    LDY #>UUE╔N┬UF
  314.    STA ZP
  315.    STY ZP+1
  316.    STA BUF╨TR
  317.    STY BUF╨TR+1
  318.    LDA IN┬UF╠EN
  319.    LDY IN┬UF╠EN+1
  320.    LDX INFILE
  321.    JSR READ
  322.    BEQ +
  323.    BCS +
  324.    STA BUF├OUNT
  325.    STY BUF├OUNT+1
  326.    JMP GET┬YTE
  327. +  SEC
  328.    RTS
  329.  
  330. DATALEN = 13
  331. OUTLINELEN = 14
  332.  
  333. UU╠INE = *
  334.    LDA #0
  335.    STA DATALEN
  336.    LDA #1
  337.    STA OUTLINELEN
  338.    ;** GET THE LINE
  339. -  JSR GET╞OUR├HARS
  340.    BCS +
  341.    LDA DATALEN
  342.    CMP #45
  343.    BCC -
  344.    CLC
  345.    ;** PUT THE LINE
  346. +  PHP
  347.    LDY OUTLINELEN
  348.    LDA #CHR├╥
  349.    STA UUE╧UT┬UF,Y
  350.    INC OUTLINELEN
  351.    LDA DATALEN
  352.    CMP #0
  353.    BEQ +
  354.    JSR GET╒UCHAR
  355.    STA UUE╧UT┬UF
  356.    LDA #<UUE╧UT┬UF
  357.    LDY #>UUE╧UT┬UF
  358.    STA ZP
  359.    STY ZP+1
  360.    LDA OUTLINELEN
  361.    LDY #0
  362.    LDX #1
  363.    JSR WRITE
  364. +  PLP
  365.    RTS
  366.  
  367. UUTEMP = 15
  368. UUBUF .BUF 3
  369.  
  370. GET╞OUR├HARS = *
  371.    LDX #2
  372.    LDA #0
  373. -  STA UUBUF,X
  374.    DEX
  375.    BPL -
  376.    ;** READ THE BYTES
  377.    LDX #0
  378. -  STX UUTEMP
  379.    JSR GET┬YTE
  380.    BCS +
  381.    LDX UUTEMP
  382.    STA UUBUF,X
  383.    INC DATALEN
  384.    INX
  385.    CPX #3
  386.    BCC -
  387.    CLC
  388.    ;** PUT BYTES INTO OUTPUT LINE
  389. ;POS  76543210  76543210  76543210  76543210
  390. ;BYT  XX111111  XX112222  XX222233  XX333333
  391. ;BIT    765432    107654    321076    543210
  392. +  PHP
  393.    LDX UUTEMP
  394.    CPX #0
  395.    BNE +
  396.    PLP
  397.    RTS
  398. +  LDY OUTLINELEN
  399.    ;** FIRST BYTE
  400.    LDA UUBUF
  401.    LSR
  402.    LSR
  403.    JSR GET╒UCHAR
  404.    STA UUE╧UT┬UF,Y
  405.    INY
  406.  
  407.    ;** SECOND BYTE
  408.    LDA UUBUF
  409.    ASL
  410.    ASL
  411.    ASL
  412.    ASL
  413.    STA UUTEMP
  414.    LDA UUBUF+1
  415.    LSR
  416.    LSR
  417.    LSR
  418.    LSR
  419.    ORA UUTEMP
  420.    JSR GET╒UCHAR
  421.    STA UUE╧UT┬UF,Y
  422.    INY
  423.  
  424.    ;** THIRD BYTE
  425.    LDA UUBUF+1
  426.    ASL
  427.    ASL
  428.    STA UUTEMP
  429.    LDA UUBUF+2
  430.    ASL
  431.    ROL
  432.    ROL
  433.    AND #%00000011
  434.    ORA UUTEMP
  435.    JSR GET╒UCHAR
  436.    STA UUE╧UT┬UF,Y
  437.    INY
  438.  
  439.    ;** FOURTH BYTE
  440.    LDA UUBUF+2
  441.    JSR GET╒UCHAR
  442.    STA UUE╧UT┬UF,Y
  443.    INY
  444.    STY OUTLINELEN
  445.    PLP
  446.    RTS
  447.  
  448. GET╒UCHAR = *
  449.    AND #%00111111
  450.    BNE +
  451.    LDA #""
  452.    RTS
  453. +  CLC
  454.    ADC #" "
  455.    CMP #"A"
  456.    BCS +
  457.    RTS
  458. +  CMP #"["
  459.    BCS +
  460.    ADC #128
  461. +  RTS
  462.  
  463. ;===THE END===
  464. UUE┼ND = *
  465. UUE╧UT┬UF = UUE┼ND
  466. UUE╔N┬UF = UUE╧UT┬UF+80
  467.