home *** CD-ROM | disk | FTP | other *** search
- ;*** UUENCODE PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:UUENCODE"
-
- JMP UUENCODE═AIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHR├╥ = $0D
- CHR╤UOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETC┬UFFER
- LDY #>GETC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETC┬UFFER
- RTS
- + SEC
- RTS
- GETC┬UFFER .BUF 1
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACE┴RGV
- ADC ZP
- STA ZP
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- BASENAME╙TART = LIBWORK
-
- BASENAME = * ;( (ZP)=INNAME ) : UUE╧UT┬UF=OUTNAME
- LDY #255
- STY BASENAME╙TART
- - INY
- LDA (ZP),Y
- BEQ BASENAME─ONE
- CMP #":"
- BEQ +
- CMP #"/"
- BNE -
- + STY BASENAME╙TART
- JMP -
- BASENAME─ONE = *
- LDY BASENAME╙TART
- LDX #255
- - INY
- INX
- LDA (ZP),Y
- STA UUE╧UT┬UF,X
- BNE -
- CPX #2
- BCC +
- LDA UUE╧UT┬UF-2,X
- CMP #","
- BNE +
- LDA #0
- STA UUE╧UT┬UF-2,X
- + RTS
-
- ;===UUENCODE===
- UUE┴RG = 2
- UUE╬AME = 4
- IN┬UF╠EN = 6
-
- UUENCODE═AIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACE┴RGC+1
- BNE UUE┼NOUGH┴RGS
- LDA ACE┴RGC
- CMP #2
- BCS UUE┼NOUGH┴RGS
-
- UUE╒SAGE = *
- LDA #<UUE╒SAGE═SG
- LDY #>UUE╒SAGE═SG
- JMP PUTS
-
- UUE╒SAGE═SG = *
- .ASC "╒SAGE: UUENCODE FILE1 FILE2 ... FILE╬"
- .BYTE CHR├╥
- .BYTE 0
-
- UUE┼NOUGH┴RGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACE═EM╘OP+0
- SBC #<UUE╔N┬UF
- STA IN┬UF╠EN
- LDA ACE═EM╘OP+1
- SBC #>UUE╔N┬UF
- STA IN┬UF╠EN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA UUE┴RG
- STY UUE┴RG+1
- - JSR CHECKSTOP
- LDA UUE┴RG
- LDY UUE┴RG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA UUE╬AME
- STY UUE╬AME+1
- ORA ZP+1
- BEQ UUE┼XIT
- JSR UUE┼CHO
- JSR UUENCODE
- BCC +
- JSR UUE┼RROR
- + INC UUE┴RG
- BNE +
- INC UUE┴RG+1
- + JMP -
-
- UUE┼XIT = *
- RTS
-
- UUE┼RROR = *
- LDA #<UUE┼RROR═SG1
- LDY #>UUE┼RROR═SG1
- JSR EPUTS
- LDA UUE╬AME
- LDY UUE╬AME+1
- JSR EPUTS
- LDA #<UUE┼RROR═SG2
- LDY #>UUE┼RROR═SG2
- JMP EPUTS
-
- UUE┼RROR═SG1 = *
- .ASC "┼RROR ATTEMPTING TO UUENCODE "
- .BYTE CHR╤UOTE
- .BYTE 0
-
- UUE┼RROR═SG2 = *
- .BYTE CHR╤UOTE
- .BYTE CHR├╥
- .BYTE 0
-
- UUE┼CHO = *
- LDA #<UUE┼CHO═SG1
- LDY #>UUE┼CHO═SG1
- JSR EPUTS
- LDA UUE╬AME
- LDY UUE╬AME+1
- JSR EPUTS
- LDA #<UUE┼CHO═SG2
- LDY #>UUE┼CHO═SG2
- JMP EPUTS
-
- UUE┼CHO═SG1 = *
- .ASC "╒UENCODING FILE "
- .BYTE CHR╤UOTE
- .BYTE 0
-
- UUE┼CHO═SG2 = *
- .BYTE CHR╤UOTE
- .ASC "..."
- .BYTE CHR├╥
- .BYTE 0
-
- CHECKSTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
-
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- BUF╨TR = 8
- BUF├OUNT = 10
- INFILE = 12
-
- UUENCODE = *
- ;** OPEN FILE
- LDA UUE╬AME
- LDY UUE╬AME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** ENCODE FILE
- JSR UUENCODE┬ODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UUENCODE┬ODY = *
- LDA #0
- STA BUF├OUNT
- STA BUF├OUNT+1
- ;** HEADER LINE
- LDA #<UUE╚EADER═SG
- LDY #>UUE╚EADER═SG
- JSR PUTS
- LDA UUE╬AME
- LDY UUE╬AME+1
- STA ZP
- STY ZP+1
- JSR BASENAME
- LDA #<UUE╧UT┬UF
- LDY #>UUE╧UT┬UF
- JSR PUTS
- LDA #CHR├╥
- JSR PUTCHAR
- ;** LOOP
- - JSR UU╠INE
- BCC -
- ;** END LINE
- LDA #<UUE┼ND═SG
- LDY #>UUE┼ND═SG
- JSR PUTS
- ;** CRC LINE
- RTS
-
- UUE╚EADER═SG = *
- .ASC "BEGIN 640 "
- .BYTE 0
-
- UUE┼ND═SG = *
- .ASC " "
- .BYTE CHR├╥
- .ASC "END"
- .BYTE CHR├╥,0
-
- GET┬YTE = *
- LDA BUF├OUNT
- ORA BUF├OUNT+1
- BEQ GET┬YTE╞ILL┬UF
- LDY #0
- LDA (BUF╨TR),Y
- INC BUF╨TR
- BNE +
- INC BUF╨TR+1
- + LDX BUF├OUNT
- BNE +
- DEC BUF├OUNT+1
- + DEC BUF├OUNT
- CLC
- RTS
-
- GET┬YTE╞ILL┬UF = *
- JSR CHECKSTOP
- LDA #<UUE╔N┬UF
- LDY #>UUE╔N┬UF
- STA ZP
- STY ZP+1
- STA BUF╨TR
- STY BUF╨TR+1
- LDA IN┬UF╠EN
- LDY IN┬UF╠EN+1
- LDX INFILE
- JSR READ
- BEQ +
- BCS +
- STA BUF├OUNT
- STY BUF├OUNT+1
- JMP GET┬YTE
- + SEC
- RTS
-
- DATALEN = 13
- OUTLINELEN = 14
-
- UU╠INE = *
- LDA #0
- STA DATALEN
- LDA #1
- STA OUTLINELEN
- ;** GET THE LINE
- - JSR GET╞OUR├HARS
- BCS +
- LDA DATALEN
- CMP #45
- BCC -
- CLC
- ;** PUT THE LINE
- + PHP
- LDY OUTLINELEN
- LDA #CHR├╥
- STA UUE╧UT┬UF,Y
- INC OUTLINELEN
- LDA DATALEN
- CMP #0
- BEQ +
- JSR GET╒UCHAR
- STA UUE╧UT┬UF
- LDA #<UUE╧UT┬UF
- LDY #>UUE╧UT┬UF
- STA ZP
- STY ZP+1
- LDA OUTLINELEN
- LDY #0
- LDX #1
- JSR WRITE
- + PLP
- RTS
-
- UUTEMP = 15
- UUBUF .BUF 3
-
- GET╞OUR├HARS = *
- LDX #2
- LDA #0
- - STA UUBUF,X
- DEX
- BPL -
- ;** READ THE BYTES
- LDX #0
- - STX UUTEMP
- JSR GET┬YTE
- BCS +
- LDX UUTEMP
- STA UUBUF,X
- INC DATALEN
- INX
- CPX #3
- BCC -
- CLC
- ;** PUT BYTES INTO OUTPUT LINE
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
- + PHP
- LDX UUTEMP
- CPX #0
- BNE +
- PLP
- RTS
- + LDY OUTLINELEN
- ;** FIRST BYTE
- LDA UUBUF
- LSR
- LSR
- JSR GET╒UCHAR
- STA UUE╧UT┬UF,Y
- INY
-
- ;** SECOND BYTE
- LDA UUBUF
- ASL
- ASL
- ASL
- ASL
- STA UUTEMP
- LDA UUBUF+1
- LSR
- LSR
- LSR
- LSR
- ORA UUTEMP
- JSR GET╒UCHAR
- STA UUE╧UT┬UF,Y
- INY
-
- ;** THIRD BYTE
- LDA UUBUF+1
- ASL
- ASL
- STA UUTEMP
- LDA UUBUF+2
- ASL
- ROL
- ROL
- AND #%00000011
- ORA UUTEMP
- JSR GET╒UCHAR
- STA UUE╧UT┬UF,Y
- INY
-
- ;** FOURTH BYTE
- LDA UUBUF+2
- JSR GET╒UCHAR
- STA UUE╧UT┬UF,Y
- INY
- STY OUTLINELEN
- PLP
- RTS
-
- GET╒UCHAR = *
- AND #%00111111
- BNE +
- LDA #" "
- RTS
- + CLC
- ADC #" "
- CMP #"A"
- BCS +
- RTS
- + CMP #"["
- BCS +
- ADC #128
- + RTS
-
- ;===THE END===
- UUE┼ND = *
- UUE╧UT┬UF = UUE┼ND
- UUE╔N┬UF = UUE╧UT┬UF+80
-