NEW PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF SBIN/GETTY *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/NET.TELNET.I *-------------------------------------- TIMEOUT.MAX .EQ 100 1 sec. *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS .DA #0 ZP .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.MSG.USAGE .DA MSG.USAGE L.MSG.TELNETOPT .DA MSG.TELNETOPT L.MSG.GREETINGS .DA MSG.GREETINGS L.ENV.TERM .DA ENV.TERM .DA 0 End Of Reloc Table *-------------------------------------- CS.INIT ldy #S.PS.ARGC lda (pPs),y cmp #2 bne .90 >PUSHBI 0 lda #1 >SYSCALL GetArg get /dev/xxx >SYSCALL open bcs .9 ldy #S.PS.hStdIn sta (pPs),y iny #S.PS.hStdOut sta (pPs),y iny #S.PS.hStdErr sta (pPs),y >STA.G hDEV lda #2 >SYSCALL GetArg bcs .9 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts .90 >LDYA L.MSG.USAGE >SYSCALL puts lda #0 sec .9 rts *-------------------------------------- CS.RUN >SLEEP >SYSCALL GetChar bcs CS.RUN .11 >SLEEP >SYSCALL GetChar bcc .11 jsr Init.Timeout ldy #0 .1 lda MSG.TELNETOPT,y phy >SYSCALL PutChar ply iny cpy #MSG.TELNETOPT.LEN bne .1 CS.RUN.LOOP .1 >SLEEP >SYSCALL GetChar bcs .4 cmp #IAC beq CS.RUN.IACMODE .4 jsr Wait.Timeout bcc .1 >PUSHWI K.VER >PUSHBI 2 >LDYA L.MSG.GREETINGS >SYSCALL printf bcs .8 unable to send greetings...reset.. lda #2 >SYSCALL GetArg >SYSCALL ExecPS .9 rts .8 clc rts *-------------------------------------- CS.RUN.IACMODE >SLEEP Wait for IAC VERB (or SB) >SYSCALL GetChar bcs CS.RUN.IACMODE >STA.G IAC.VERB .1 >SLEEP Wait for IAC OPT >SYSCALL GetChar bcs .1 >STA.G IAC.OPT >LDA.G IAC.VERB cmp #SB beq CS.RUN.IACSB *-------------------------------------- CS.RUN.IACVERB jmp CS.RUN.LOOP *-------------------------------------- CS.RUN.IACSB .1 >SLEEP >SYSCALL GetChar bcs .1 >STA.G IAC.SB lda #0 sta (pData) reset IAC.SB.DATA .2 >SLEEP >SYSCALL GetChar bcs .2 cmp #IAC beq .4 end of DATA, go wait SE pha ldy #IAC.SB.DATA-1 .3 iny lda (pData),y bne .3 pla sta (pData),y iny lda #0 sta (pData),y bra .2 .4 >SLEEP >SYSCALL GetChar bcs .4 cmp #SE bne .8 >LDA.G IAC.OPT cmp #TELOPT.TTYPE bne .8 >LDA.G IAC.SB cmp #SB.IS bne .8 >PUSHEA.G IAC.SB.DATA >LDYA L.ENV.TERM >SYSCALL SetEnv .8 jmp CS.RUN.LOOP *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? ldy #TimeOut lda (pData),y beq .9 dec sta (pData),y .9 sec do not discard TIMER event rts *-------------------------------------- CS.QUIT >LDA.G hDEV beq .8 >SYSCALL close .8 clc rts *-------------------------------------- Init.Timeout ldy #TimeOut lda #TIMEOUT.MAX sta (pData),y rts *-------------------------------------- Wait.TimeOut sec ldy #TimeOut lda (pData),y beq .9 clc .9 rts *-------------------------------------- CS.END MSG.USAGE .AZ "Usage : GETTY " MSG.TELNETOPT .DA #IAC,#WILL,#TELOPT.BINARY .DA #IAC,#DO,#TELOPT.LINEMODE .DA #IAC,#SB,#TELOPT.LINEMODE,#SB.SEND,#0,#IAC,#SE .DA #IAC,#DONT,#TELOPT.ECHO .DA #IAC,#WILL,#TELOPT.ECHO .DA #IAC,#WILL,#TELOPT.SGA .DA #IAC,#DO,#TELOPT.SGA * .DA #IAC,#DO,#TELOPT.NAWS .DA #IAC,#DO,#TELOPT.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE MSG.TELNETOPT.LEN .EQ *-MSG.TELNETOPT MSG.GREETINGS .AZ "\r\nA2osX-GeTTY %d.%d\r\n" ENV.TERM .AZ "TERM" *-------------------------------------- .DUMMY .OR 0 DS.START IAC.SB.DATA .BS 64 IAC.VERB .BS 1 IAC.OPT .BS 1 IAC.SB .BS 1 hDEV .BS 1 TimeOut .BS 1 DS.END .ED MAN SAVE /A2OSX.SRC/SBIN/GETTY.S ASM