home *** CD-ROM | disk | FTP | other *** search
- ;*** UUDECODE PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:UUDECODE"
-
- JMP UUDECODE═AIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHR╠╞ = $0A
- CHR├╥ = $0D
- CHR╤UOTE = $22
-
- ASCII╞ILE .BUF 1
- TEMP .BUF 1
-
- ;******** 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
-
- 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
-
- ;===UUDECODE===
- UUD┴RG = 2
- UUD╬AME = 4
- IN┬UF╠EN = 6
-
- UUDECODE═AIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACE┴RGC+1
- BNE UUD┼NOUGH┴RGS
- LDA ACE┴RGC
- CMP #2
- BCS UUD┼NOUGH┴RGS
-
- UUD╒SAGE = *
- LDA #<UUD╒SAGE═SG
- LDY #>UUD╒SAGE═SG
- JMP PUTS
-
- UUD╒SAGE═SG = *
- .ASC "╒SAGE: UUDECODE FILE1 FILE2 ... FILE╬"
- .BYTE CHR├╥,0
-
- UUD┼NOUGH┴RGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACE═EM╘OP+0
- SBC #<UUD╔N┬UF
- STA IN┬UF╠EN
- LDA ACE═EM╘OP+1
- SBC #>UUD╔N┬UF
- STA IN┬UF╠EN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA UUD┴RG
- STY UUD┴RG+1
- - JSR CHECKSTOP
- LDA UUD┴RG
- LDY UUD┴RG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA UUD╬AME
- STY UUD╬AME+1
- ORA ZP+1
- BEQ UUD┼XIT
- JSR UUD┼CHO
- JSR UUDECODE
- BCC +
- JSR UUD┼RROR
- + INC UUD┴RG
- BNE +
- INC UUD┴RG+1
- + JMP -
-
- UUD┼XIT = *
- RTS
-
- UUD┼RROR = *
- LDA #<UUD┼RROR═SG1
- LDY #>UUD┼RROR═SG1
- JSR EPUTS
- LDA UUD╬AME
- LDY UUD╬AME+1
- JSR EPUTS
- LDA #<UUD┼RROR═SG2
- LDY #>UUD┼RROR═SG2
- JMP EPUTS
-
- UUD┼RROR═SG1 = *
- .ASC "┼RROR ATTEMPTING TO UUDECODE FILE "
- .BYTE CHR╤UOTE,0
- UUD┼RROR═SG2 = *
- .BYTE CHR╤UOTE,CHR├╥,0
-
- UUD┼CHO = *
- LDA #<UUD┼CHO═SG1
- LDY #>UUD┼CHO═SG1
- JSR EPUTS
- LDA UUD╬AME
- LDY UUD╬AME+1
- JSR EPUTS
- LDA #<UUD┼CHO═SG2
- LDY #>UUD┼CHO═SG2
- JMP EPUTS
-
- UUD┼CHO═SG1 = *
- .ASC "UUDECODING FILE "
- .BYTE CHR╤UOTE,0
-
- UUD┼CHO═SG2 = *
- .BYTE CHR╤UOTE
- .ASC "..."
- .BYTE CHR├╥,0
-
- BUF╨TR = 8
- BUF├OUNT = 10
- INFILE = 12
- OUTFILE = 13
-
- UUDECODE = *
- ;** OPEN FILE
- LDA UUD╬AME
- LDY UUD╬AME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- RTS
- + STA INFILE
- ;** DECODE FILE
- JSR UUDECODE┬ODY
- ;** CLOSE FILE
- LDA INFILE
- JSR CLOSE
- RTS
-
- UUDECODE┬ODY = *
- LDA #0
- STA BUF├OUNT
- STA BUF├OUNT+1
- STA HIT╠AST╠INE
- STA LAST╠INE╘ERMINATOR
-
- ;** SEARCH FOR "BEGIN" LINE
- UUD╙EARCH╠INE = *
- JSR GETLINE
- BCC +
- RTS
- + LDX #0
- LDA UUD╔N╠INE
- CMP #"B"
- BEQ +
- LDX #ASCII┬EGIN-PETSCII┬EGIN
- + LDY #0
- - LDA UUD╔N╠INE,Y
- CMP PETSCII┬EGIN,X
- BNE UUD╙EARCH╠INE
- INX
- INY
- CPY #6
- BCC -
- LDY #0
- CPX #ASCII┬EGIN-PETSCII┬EGIN+1
- BCC +
- LDY #$FF
- + STY ASCII╞ILE
- LDA UUD╔N╠INE+9
- CMP #" "
- BNE UUD╙EARCH╠INE
- LDX #0
- - LDA UUD╔N╠INE+6,X
- CMP #"0"
- BCC UUD╙EARCH╠INE
- CMP #"8"
- BCS UUD╙EARCH╠INE
- INX
- CPX #3
- BCC -
- JMP PROCESS┬EGIN
-
- PETSCII┬EGIN = *
- .ASC "BEGIN "
- ASCII┬EGIN = *
- .BYTE $62,$65,$67,$69,$6E,$20
-
- ;** PROCESS "BEGIN" LINE
- PROCESS┬EGIN = *
- LDA ASCII╞ILE
- BEQ +
- ;** JSR CONVERT FILENAME
- + JSR MAKE╨ETSCII╬AME
- JSR DEFAULT╨RG╞ILE
- JSR ECHO┼XTRACT╬AME
- LDA #<UUD╔N╠INE+10
- LDY #>UUD╔N╠INE+10
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN
- BCC OPEN╧K
- LDA ERRNO
- CMP #ACE┼RR╞ILE┼XISTS
- BEQ +
- - JSR REPORT╧PEN┼RROR
- JMP UUD╙EARCH╠INE
- + JSR SCRATCH╞ILE
- LDA #"W"
- JSR OPEN
- BCS -
-
- OPEN╧K = *
- STA OUTFILE
-
- ;** READ UUENCODED DATA
- - JSR GETLINE
- BCS UUD╞INISH╞ILE
- JSR UU├ONVERT╠INE
- BCC +
- ;** REPORT INVALID CHARACTERS
- LDA #<BAD├HARS═SG
- LDY #>BAD├HARS═SG
- JSR EPUTS
- JMP -
- + LDA UUD╔N╠INE
- BEQ UUD╞INISH╞ILE
- JSR UU├RUNCH╠INE
- JSR UU╫RITE╠INE
- JMP -
-
- ;** FINISH WITH FILE
- UUD╞INISH╞ILE = *
- LDA OUTFILE
- JSR CLOSE
- ;** PROCESS FOR ANOTHER FILE
- JMP UUD╙EARCH╠INE
-
- BAD├HARS═SG = *
- .ASC "WARNING: BAD CHARACTERS IN LINE; IGNORING LINE."
- .BYTE CHR├╥,0
-
- ;%%%
- MAKE╨ETSCII╬AME = *
- BIT ASCII╞ILE
- BMI +
- RTS
- + LDX #0
- - LDA UUD╔N╠INE+10,X
- BEQ +
- JSR CONV┴SC2╨ET
- STA UUD╔N╠INE+10,X
- INX
- BNE -
- + RTS
-
- CONV┴SC2╨ET = *
- AND #$7F
- CMP #$60
- BCC +
- CLC
- ADC #$C0-$60
- + TAY
- AND #$7F
- CMP #"A"
- BCS +
- - TYA
- RTS
- + CMP #"Z"+1
- BCS -
- TYA
- EOR #$80
- RTS
-
- DEFAULT╨RG╞ILE = *
- LDX #0
- - LDA UUD╔N╠INE+10,X
- BEQ +
- INX
- BNE -
- + LDA UUD╔N╠INE+8,X
- CMP #","
- BNE +
- RTS
- + LDA #","
- STA UUD╔N╠INE+10,X
- LDA #"P"
- STA UUD╔N╠INE+11,X
- LDA #0
- STA UUD╔N╠INE+12,X
- RTS
-
- ECHO┼XTRACT╬AME = *
- LDA #<ECHO┼XTRACT═SG1
- LDY #>ECHO┼XTRACT═SG1
- JSR EPUTS
- LDA #<UUD╔N╠INE+10
- LDY #>UUD╔N╠INE+10
- JSR EPUTS
- LDA #<ECHO┼XTRACT═SG2
- LDY #>ECHO┼XTRACT═SG2
- JMP EPUTS
-
- ECHO┼XTRACT═SG1 = *
- .ASC "EXTRACTING FILE "
- .BYTE CHR╤UOTE,0
-
- ECHO┼XTRACT═SG2 = *
- .BYTE CHR╤UOTE
- .ASC "..."
- .BYTE CHR├╥,0
-
- REPORT╧PEN┼RROR = *
- LDA ZP
- LDY ZP+1
- JSR EPUTS
- LDA #<REPORT╧PEN┼RROR═SG
- LDY #>REPORT╧PEN┼RROR═SG
- JSR EPUTS
- RTS
-
- REPORT╧PEN┼RROR═SG = *
- .ASC ": CANNOT OPEN; SKIPPING THIS FILE."
- .BYTE CHR├╥,0
-
- SCRATCH╞ILE = *
- LDA #<SCRATCH╞ILE═SG1
- LDY #>SCRATCH╞ILE═SG1
- JSR EPUTS
- LDA #<UUD╔N╠INE+10
- LDY #>UUD╔N╠INE+10
- JSR EPUTS
- LDA #<SCRATCH╞ILE═SG2
- LDY #>SCRATCH╞ILE═SG2
- JSR EPUTS
- JSR GETCHAR
- PHA
- - CMP #CHR├╥
- BEQ +
- JSR GETCHAR
- JMP -
- + LDA #<UUD╔N╠INE+10
- LDY #>UUD╔N╠INE+10
- STA ZP
- STY ZP+1
- PLA
- CMP #"Y"
- BEQ +
- CMP #"┘"
- BEQ +
- RTS
- + JSR REMOVE
- RTS
-
- SCRATCH╞ILE═SG1 = *
- .ASC "╧VERWRITE EXISTING FILE "
- .BYTE CHR╤UOTE,0
- SCRATCH╞ILE═SG2 = *
- .BYTE CHR╤UOTE
- .ASC "? "
- .BYTE 0
-
- CONVERT╞ILL .BUF 1
- CONVERT╠EN = 15
- UU├ONVERT╠INE = *
- LDA #0
- STA CONVERT╞ILL
- LDA UUD╔N╠INE
- BNE +
- CLC
- RTS
- + JSR UU├ONVERT├HAR
- BCC +
- RTS
- + STA UUD╔N╠INE
- LDX #60
- CMP #46
- BCC +
- LDX #84
- + STX CONVERT╠EN
- LDX #0
- - CPX CONVERT╠EN
- BCC +
- CLC
- RTS
- + BIT CONVERT╞ILL
- BMI DO├ONVERT╞ILL
- LDA UUD╔N╠INE+1,X
- BEQ +
- JSR UU├ONVERT├HAR
- BCC CONVERT├ONT
- RTS
- + LDA #$FF
- STA CONVERT╞ILL
-
- DO├ONVERT╞ILL = *
- LDA #0
-
- CONVERT├ONT = *
- STA UUD╔N╠INE+1,X
- INX
- BNE -
- RTS
-
- UU├ONVERT├HAR = *
- CMP #" "
- BCS +
- SEC
- RTS
- + CMP #"_"+1
- BCS +
- SEC
- SBC #" "
- CLC
- RTS
- + CMP #96
- BNE +
- - CLC
- LDA #0
- RTS
- + CMP #"└"
- BEQ -
- BCS +
- SEC
- RTS
- + CMP #"┌"+1
- BCC +
- RTS
- + SEC
- SBC #"┴"-33
- CLC
- RTS
-
- UU├RUNCH╠INE = *
- LDX #0
- LDY #0
- - JSR UU├RUNCH╟ROUP
- CPY UUD╔N╠INE
- BCC -
- RTS
-
- ;POS 76543210 76543210 76543210 76543210
- ;BYT XX111111 XX112222 XX222233 XX333333
- ;BIT 765432 107654 321076 543210
-
- UU├RUNCH╟ROUP = * ;(.╪=╔N4BYTES╧FFSET, .┘=╧UT3BYTES╧FFSET) : .╪++, .┘++
- LDA UUD╔N╠INE+1,X ;*** OUTPUT BYTE 0
- ASL
- ASL
- STA TEMP
- INX
- LDA UUD╔N╠INE+1,X
- LSR
- LSR
- LSR
- LSR
- AND #%00000011
- ORA TEMP
- STA UUD╔N╠INE+1,Y
- INY
- LDA UUD╔N╠INE+1,X ;*** OUTPUT BYTE 1
- ASL
- ASL
- ASL
- ASL
- STA TEMP
- INX
- LDA UUD╔N╠INE+1,X
- LSR
- LSR
- AND #%00001111
- ORA TEMP
- STA UUD╔N╠INE+1,Y
- INY
- LDA UUD╔N╠INE+1,X ;*** OUTPUT BYTE 2
- INX
- ROR
- ROR
- ROR
- AND #%11000000
- STA TEMP
- LDA UUD╔N╠INE+1,X
- INX
- AND #%00111111
- ORA TEMP
- STA UUD╔N╠INE+1,Y
- INY
- RTS
-
- UU╫RITE╠INE = *
- LDA #<UUD╔N╠INE+1
- LDY #>UUD╔N╠INE+1
- STA ZP
- STY ZP+1
- LDA UUD╔N╠INE
- LDY #0
- LDX OUTFILE
- JSR WRITE
- RTS
-
- GETLINE╨OS = 14
- HIT╠AST╠INE .BUF 1
- LAST╠INE╘ERMINATOR .BUF 1
-
- GETLINE = *
- LDA HIT╠AST╠INE
- BEQ +
- SEC
- RTS
- + LDX #0
- STX GETLINE╨OS
-
- ;** TOSS AN ╠╞ THAT FOLLOWS A ├╥
- JSR GET┬YTE
- BCS GETLINE╨ROCESS
- CMP #CHR╠╞
- CLC
- BNE GETLINE╨ROCESS
- LDX LAST╠INE╘ERMINATOR
- CPX #CHR├╥
- CLC
- BNE GETLINE╨ROCESS
-
- GETLINE├HAR = *
- JSR GET┬YTE
- GETLINE╨ROCESS = *
- BCC +
- LDA #$FF
- STA HIT╠AST╠INE
- JMP GETLINE╞INISH
- + CMP #CHR├╥
- BEQ GETLINE╞INISH
- CMP #CHR╠╞
- BEQ GETLINE╞INISH
- LDX GETLINE╨OS
- CPX #98
- BCS +
- STA UUD╔N╠INE,X
- INC GETLINE╨OS
- + JMP GETLINE├HAR
-
- GETLINE╞INISH = *
- STA LAST╠INE╘ERMINATOR
- LDX GETLINE╨OS
- LDA #0
- STA UUD╔N╠INE,X
- CPX #0
- BEQ +
- CLC
- RTS
- + LDA HIT╠AST╠INE
- CMP #1
- RTS
-
- 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 #<UUD╔N┬UF
- LDY #>UUD╔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
-
- ;===THE END===
- UUD┬SS = *
- UUD╔N╠INE = UUD┬SS+0
- UUD╔N┬UF = UUD┬SS+100
-