1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-29 13:21:11 +00:00

Added CHARFC/CHARFS: Chaos RFC (?).

Resolves #296.

Source code from MOON; CHARFC 3.
This commit is contained in:
Eric Swenson
2016-12-20 16:49:03 -08:00
committed by Lars Brinkhoff
parent ae86cc010b
commit fad6cbe33a
3 changed files with 228 additions and 0 deletions

View File

@@ -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.

View File

@@ -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"

222
src/sysen3/charfc.3 Executable file
View File

@@ -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 <space> 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