diff --git a/README.md b/README.md index 4a57ebd7..62e8d0bd 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ A list of [known ITS machines](doc/machines.md). - BINPRT, display information about binary executable file. - BYE, say goodbye to user. Used in LOGOUT scripts. - CALPRT, decode a .CALL instructions CALL block. + - CHARFC/CHARFS, Chaos RFC. - CHTN, CFTP, Chaosnet TELNET and FTP support. - COMPLR, lisp compiler. - COMSAT, Mail server. diff --git a/build/build.tcl b/build/build.tcl index 0a5a62cd..8dacc3ea 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -832,6 +832,11 @@ respond "*" ":link syseng;chsdef 999999,system;chsdef >\r" respond "*" ":midas device;chaos itsdev_bawden;itsdev\r" expect ":KILL" +# charfc/charfs +respond "*" ":midas sys1;ts charfc_sysen3;charfc\r" +expect ":KILL" +respond "*" ":link sys1;ts charfs,sys1;ts charfc\r" + # 11sim respond "*" ":midas /t sys1;ts pdp11_syseng;11sim\r" respond "end input with ^C" "45p==0\r" diff --git a/src/sysen3/charfc.3 b/src/sysen3/charfc.3 new file mode 100755 index 00000000..86532a9f --- /dev/null +++ b/src/sysen3/charfc.3 @@ -0,0 +1,222 @@ +;;; -*- Midas -*- + + TITLE CHAOS RFC + +;;; Gumby, 16.11.86: if started with the uname CHARFS (S for SILENT) +;;; won't print e.g. [EOF] on TTY. This is mainly useful for programs +;;; which .VALUE to DDT a CHARFC command (e.g. WHAT, UFIND). + +A=1 +B=2 +C=3 +D=4 +E=5 +F=6 +T=7 +TT=10 +SILENT=16 +P=17 + +TYOC=10 +CHSI=11 +CHSO=12 + +PDL: -20,,. + BLOCK 22 + +DEBUG: 0 + +.INSRT SYSTEM;CHSDEF + +JCLBUF: BLOCK 100 + -1 +CNMBUF: BLOCK 100 ;Copy contact name +BUF: BLOCK %CPMXW ;Misc buffer + +$$HST3==1 +$$HOSTNM==1 +$$SYMLOOK==1 +$$HSTMAP==1 +$$CONNECT==1 +$$ANALYZE==1 +$$CHAOS==1 +.INSRT SYSENG;NETWRK + +GO: MOVE P,PDL + .OPEN TYOC,[.UAO,,'TTY] + .LOSE %LSFIL + .suset [.rxjname,,a] + camn a,[sixbit /CHARFS/] + seto silent, + MOVEI A,HST3PG + MOVEI B,CHSI + PUSHJ P,NETWRK"HSTMAP + .LOSE + .BREAK 12,[5,,JCLBUF] + MOVE A,[440700,,JCLBUF] ;Isolate host name +GHN: ILDB T,A + CAIN T,40 + JRST GHN1 + CAIE T,^M + CAIN T,^C + JRST NHN + CAIE T,^_ + JUMPN T,GHN +NHN: MOVEI TT,[ASCIZ/Usage is: :CHARFC HOST CONTACT NAME/] + PUSHJ P,ASZOUT + .LOGOUT 1, + +GHN1: setz T, + DPB T,A + MOVE B,[440700,,CNMBUF] ;Extract contact name and args + SETOM E ;Upper-caseify flag +GCN: ILDB T,A + CAIE T,^M + CAIN T,^C + JRST GCN1 + CAIE T,^_ + CAIN T,0 + JRST GCN1 + JUMPGE E,GCN0 + CAIN T,40 + AOJA E,GCN0 ;Space ends upper-case part + CAIL T,"a + CAILE T,"z + JRST GCN0 + SUBI T,40 +GCN0: IDPB T,B + JRST GCN + +GCN1: MOVEI A,JCLBUF + PUSHJ P,NETWRK"HSTLOOK + JRST [ MOVEI TT,[ASCIZ/Host not found: /] + PUSHJ P,ASZOUT + MOVEI TT,JCLBUF + PUSHJ P,ASZOUT + .LOGOUT 1, ] + MOVEM A,HOST' + MOVEI A,CHSI + MOVE B,HOST + MOVEI C,CNMBUF + MOVEI D,10 + MOVEI TT,%CORFC + PUSHJ P,OPEN ;Start things up + JRST NETERR ;Lost + CAIE TT,%CSOPN + JRST NOTOPN ;Started but didn't get open + ;Open, copy out whatever string it gives, to EOF + jumpn silent,opn + MOVEI TT,[ASCIZ/Connection open: +/] + PUSHJ P,ASZOUT +OPN: MOVE TT,[440700,,BUF] ;Truncate to 7-bit codes + MOVEI T,%CPMXC + .CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI CHSI ? TT ? SETZ T ] + .LOSE %LSSYS + SUBI T,%CPMXC + MOVNS A,T + MOVE TT,[440700,,BUF] + .CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI TYOC ? TT ? SETZ T ] + .LOSE %LSSYS + CAIN A,%CPMXC + JRST OPN + skipe silent + .logout 1, + MOVEI TT,[ASCIZ/[EOF]/] + PUSHJ P,ASZOUT + .LOGOUT 1, + +RESET: MOVSI T,RESET1 ;Reset the buffer for network debugging + HRR T,C + BLT T,2(C) + MOVEI D,5*12. + MOVE F,[260700,,.+6] + XCT @(P) + .LOSE %LSSYS ;Failed to open + POPJ P, + +RESET1: 512131,,547650 ;Reset the buffer for right thing + 425330,,444646 + 455012,,242602 + 421004,,327120 + 502451,,743542 + 201404,,24206 + 442031,,751564 + 426550,,146132 + 516132,,253212 + 511331,,747122 + 245006,,20142 + 202151,,747400 + +NOTOPN: CAIE TT,%CSCLS + JRST NETERR + .CALL [ SETZ ? 'WHYINT ? MOVEI CHSI ? MOVEM TT ? MOVEM TT ? SETZM TT ] + .LOSE %LSSYS + HLRZS TT ;Number of input packets available + JUMPE TT,NETERR + .CALL [ SETZ ? 'PKTIOT ? MOVEI CHSI ? SETZI BUF ] + .LOSE %LSSYS + LDB T,[$CPKOP BUF] + MOVEI TT,[ASCIZ/Closed: /] + CAIN T,%COCLS + JRST NOTOP1 + MOVEI TT,[ASCIZ/Lost: /] + CAIN T,%COLOS + JRST NOTOP1 + MOVEI TT,[ASCIZ/Forwarded: /] + CAIN T,%COFWD + JRST NOTOP1 + MOVEI TT,[ASCIZ/Answered: /] + CAIN T,%COANS + JRST NOTOP1 +RANPKT: PUSHJ P,OCTOUT + MOVEI TT,[ASCIZ/ type random packet: /] +NOTOP1: skipn silent + PUSHJ P,ASZOUT + LDB A,[$CPKNB BUF] + MOVE B,[440800,,%CPKDT+BUF] +STROU: SOJL A,[.LOGOUT 1,] + ILDB T,B + ANDI T,177 + .IOT TYOC,T + JRST STROU + +OPEN: MOVE F,[440700,,[ASCII/INITIALIZE/]] ;Opcode String (if needed) + MOVE T,(C) + CAMN T,[SIXBIT/BUH,Q/] + PUSHJ P,RESET + JRST NETWRK"CHACN0 + .CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI 1(A) ? F ? SETZ D ] + SKIPA TT,[%COLOS] + AOS (P) + .IOT CHSO,[215] ;Final opcode + .CALL [ SETZ ? SIXBIT/FORCE/ ? SETZI 1(A) ] + SOS (P) + POPJ P, + +NETERR: PUSHJ P,NETWRK"ANALYZE + JFCL + .LOGOUT 1, + +OCTOUT: IDIVI T,8 + HRLM TT,(P) + SKIPE T + PUSHJ P,OCTOUT + HLRZ T,(P) + ADDI T,'0 +PUTCHR: .IOT TYOC,T +CPOPJ: POPJ P, + +ASZOUT: HRLI TT,440700 +ASZOU1: ILDB T,TT + JUMPE T,CPOPJ + .IOT TYOC,T + JRST ASZOU1 + +CONSTANTS +VARIABLES + +HST3PG==<.+1777>/2000 + + END GO +