; uuencode for LUnix V0.1 ; ; compatible with GNU shareutils 4.2 (uuencode for UNIX) ; uu and base64 encoding ! .head "uuencode", .param #include "kernel.inc" #define CR 10 enc: bit mode bmi + lda uu_std,x rts + lda uu_base64,x rts encode: ldx #0 - jsr getc bcs + sta buf,x inx cpx #45 bne - + txa bne + jmp enc_loopend + stx n bit mode bmi + lda uu_std,x jsr putc bcs to_out_err + ldy #0 sty tmp2 lda n - cmp #3 bcc + lda buf,y lsr a lsr a tax jsr enc jsr putc to_out_err: bcs out_err lda buf,y asl a asl a asl a asl a sta tmp lda buf+1,y lsr a lsr a lsr a lsr a and #$0f ora tmp and #$3f tax jsr enc jsr putc bcs out_err lda buf+1,y asl a asl a sta tmp lda buf+2,y asl a rol a rol a and #$03 ora tmp and #$3f tax jsr enc jsr putc bcs out_err lda buf+2,y and #$3f tax jsr enc jsr putc bcs out_err iny iny iny sec lda n sbc #3 sta n jmp - + cmp #0 bne + lda #CR jsr putc bcs out_err jmp encode out_err: ldx stderr_ch jsr strout bit io_error_txt sec rts + ldx n beq enc_loopend lda buf,y sta c1 cpx #1 beq + lda buf+1,y .byte $2c + lda #0 sta c2 lda c1 lsr a lsr a tax jsr enc jsr putc bcs out_err lda c1 asl a asl a asl a asl a sta tmp lda c2 lsr a lsr a lsr a lsr a ora tmp and #$3f tax jsr enc jsr putc bcs out_err lda n cmp #1 bne ++ bit mode bmi + lda uu_std .byte $2c + lda #"=" jmp ++ + lda c2 asl a asl a and #$3f tax jsr enc + jsr putc to2_out_err: bcs out_err bit mode bmi + lda uu_std .byte $2c + lda #"=" jsr putc bcs to2_out_err lda #CR jsr putc enc_loopend: bit mode bmi + lda uu_std jsr putc lda #CR jsr putc + rts ; ; ; _sig.userbreak: ldx stderr_ch jsr strout bit interrupted_txt jmp panic _init: lda _base+8 beq how_to sta param+1 ldy #0 sty mode sty param iny lda (param),y beq how_to cmp #"-" bne set_fname iny lda (param),y cmp #"m" bne how_to dec mode iny set_fname: lda #32 - cmp (param),y bne + iny bne - how_to: ldx stderr_ch jsr strout bit how_to_txt jmp panic + sty c1 ldx stdout_ch bit mode bmi + jsr strout bit begin_txt jmp ++ + jsr strout bit begin64_txt + ldx stdout_ch jsr strout bit mode_txt ldy c1 - lda (param),y beq + cmp #33 bcc + jsr putc iny bne - jmp how_to + lda #CR jsr putc lda param+1 jsr mfree jsr encode ldx stdout_ch bit mode bmi + jsr strout bit end_uu_txt lda #0 jmp suicide + jsr strout bit end_base64_txt lda #0 jmp suicide .endofcode uu_std: .byte $60, $21, $22, $23, $24, $25, $26, $27 .byte $28, $29, $2a, $2b, $2c, $2d, $2e, $2f .byte $30, $31, $32, $33, $34, $35, $36, $37 .byte $38, $39, $3a, $3b, $3c, $3d, $3e, $3f .byte $40, $41, $42, $43, $44, $45, $46, $47 .byte $48, $49, $4a, $4b, $4c, $4d, $4e, $4f .byte $50, $51, $52, $53, $54, $55, $56, $57 .byte $58, $59, $5a, $5b, $5c, $5d, $5e, $5f uu_base64: .byte $41, $42, $43, $44, $45, $46, $47, $48 .byte $49, $4a, $4b, $4c, $4d, $4e, $4f, $50 .byte $51, $52, $53, $54, $55, $56, $57, $58 .byte $59, $5a, $61, $62, $63, $64, $65, $66 .byte $67, $68, $69, $6a, $6b, $6c, $6d, $6e .byte $6f, $70, $71, $72, $73, $74, $75, $76 .byte $77, $78, $79, $7a, $30, $31, $32, $33 .byte $34, $35, $36, $37, $38, $39, $2b, $2f io_error_txt: .asc "i/o error\n\0" how_to_txt: .asc "Usage: uuencode [-m] name_of_file\n" .asc " Encode a binary file. Input is\n" .asc " stdin, output is stdout.\n\n" .asc " -m use base64 encoding as of RFC1521\n\0" begin_txt: .byte $62, $65, $67, $69, $6e, 0 ; "begin\0" begin64_txt: .byte $62, $65, $67, $69, $6e ; "begin-base64\0" .byte $2d, $62, $61, $73, $65 .byte $36, $34, 0 mode_txt: .asc " 664 \0" interrupted_txt: .asc "uuencode interrupted\n\0" end_uu_txt: .byte 101,110,100,CR,0 ; "end\n\0" end_base64_txt: .asc "====" ; "====\n\0" .byte CR,0 buf: .buf 80 n: .buf 1 mode: .buf 1 tmp: .buf 1 tmp2: .buf 1 c1: .buf 1 c2: .buf 1