mirror of
https://github.com/PDP-10/its.git
synced 2026-02-27 01:09:49 +00:00
Added MLDEV/MLSLV devices. These allow access to the file system using
the device DB: both locally and from remote systems.
This commit is contained in:
committed by
Lars Brinkhoff
parent
099d3126bc
commit
a3684d9638
@@ -87,6 +87,7 @@ from scratch.
|
||||
- FTPU, FTP Client
|
||||
- NAME, Shows logged in users and locations, aka FINGER
|
||||
- TALK/WHO/WHOJ/WHOM/USERS, list users.
|
||||
- MLDEV, MLSLV, Allows access to remote systems as devices (e.g. DB:)
|
||||
|
||||
6. A brand new host table is built from the host table source and
|
||||
installed into SYSBIN; HOSTS3 > using H3MAKE.
|
||||
|
||||
@@ -394,6 +394,16 @@ respond "*" ":link sys;ts f,sys;ts name\r"
|
||||
respond "*" ":link sys2;ts n,sys;ts name\r"
|
||||
respond "*" ":link device;tcp syn117,sys;ts name\r"
|
||||
|
||||
respond "*" ":midas device;atsign mldev_sysen2;mldev\r"
|
||||
expect ":KILL"
|
||||
|
||||
respond "*" ":link device;jobdev db,device;atsign mldev\r"
|
||||
|
||||
respond "*" ":midas device;atsign mlslv_sysen2;mlslv\r"
|
||||
expect ":KILL"
|
||||
|
||||
respond "*" ":link device;tcp syn123,device;atsign mlslv\r"
|
||||
|
||||
respond "*" ":link kshack;good ram,.;ram ram\r"
|
||||
respond "*" ":link kshack;ddt bin,.;@ ddt\r"
|
||||
respond "*" $emulator_escape
|
||||
|
||||
154
doc/sysdoc/mldev.protoc
Normal file
154
doc/sysdoc/mldev.protoc
Normal file
@@ -0,0 +1,154 @@
|
||||
MLDEV/MLSLV protocol
|
||||
|
||||
The MLDEV protocol is a binary file transfer protocol used between ITS
|
||||
systems for the transfer of files. It depends heavily upon the ITS job
|
||||
device feature and the ITS system calls and error codes. For a more
|
||||
detailed description of the ITS system calls, read the ITS UUO and
|
||||
symbolic system call manuals.
|
||||
|
||||
The name MLDEV is historical, dating back to the days when this protocol
|
||||
was used mostly to reference ML's file system from AI (and vice versa).
|
||||
The MLDEV server is called MLSLV, for "ML slave".
|
||||
|
||||
ICP is to socket 305 if doing mostly input, 307 if mostly output.
|
||||
User commands:
|
||||
|
||||
Command format: to slave
|
||||
AOBJN pointer (RH = command code)
|
||||
Block of arguments
|
||||
|
||||
Command codes:
|
||||
COPENI==1 OPEN for input
|
||||
arg1: Device
|
||||
arg2: FN1
|
||||
arg3: FN2
|
||||
arg4: SNAME
|
||||
arg5: OPEN mode
|
||||
|
||||
COPENO==2 OPEN for output
|
||||
arg1: Device
|
||||
arg2: FN1
|
||||
arg3: FN2
|
||||
arg4: SNAME
|
||||
arg5: OPEN mode
|
||||
|
||||
CDATA==3 Write data (Word count includes data words and byte count word)
|
||||
arg1: # of bytes of data
|
||||
args: Data, packed ILDB-style into at most 200 words
|
||||
|
||||
CALLOC==4 Read allocate
|
||||
Allocation in bytes
|
||||
|
||||
CICLOS==5 Input CLOSE
|
||||
Ignored argument
|
||||
|
||||
COCLOS==6 Output CLOSE
|
||||
Ignored argument
|
||||
|
||||
CFDELE==7 DELETE or RENAME
|
||||
arg1: Device
|
||||
arg2: FN1
|
||||
arg3: FN2
|
||||
arg4: 0 or new FN1
|
||||
arg5: 0 or new FN2
|
||||
arg6: SNAME
|
||||
|
||||
CRNMWO==10 RENAME while open
|
||||
arg1: new FN1
|
||||
arg2: new FN2
|
||||
|
||||
CNOOP=11 No-op
|
||||
arg: Echoed by the no-op reply
|
||||
|
||||
CACCES==12 ACCESS
|
||||
arg1: Transaction number
|
||||
arg2: Access pointer
|
||||
arg3: New allocation
|
||||
|
||||
CSYSCL==13 Random system call. 11 (decimal) arguments
|
||||
arg1: System call name in sixbit
|
||||
arg2: Flags (control-bit argument)
|
||||
arg3: Number of following arguments that have significance
|
||||
arg4: 1st argument to system call
|
||||
...
|
||||
arg11: 8th argument to system call
|
||||
|
||||
CREUSE==14 Reinitialize yourself, because we are about to be reused
|
||||
by a new creator for a new file
|
||||
Server replies
|
||||
|
||||
Reply format: from slave
|
||||
AOBJN pointer (RH = reply code)
|
||||
Block of arguments
|
||||
|
||||
R==,,-1 Reply codes:
|
||||
|
||||
RDATA==1 Input data (word count includes data words and byte count word)
|
||||
arg1: # of bytes of data
|
||||
args: Data, packed ILDB-style into words.
|
||||
Note: Slave must always send fully populated words except when
|
||||
EOF is reached.
|
||||
|
||||
ROPENI==2 Input OPEN status; 1 or 11 arguments
|
||||
arg1: -1 succeeded >0 OPEN loss number
|
||||
arg2arg11 are present only if arg1 is -1
|
||||
arg2: Real device name (usually SIXBIT/DSK/)
|
||||
arg3: Real FN1
|
||||
arg4: Real FN2
|
||||
arg5: Real SNAME
|
||||
arg6: File length
|
||||
arg7: Byte size open in
|
||||
arg8: File length in byte size written in
|
||||
arg9: Byte size written in
|
||||
arg10: FILDTP - -1 if RFDATE wins on this file
|
||||
arg11: Creation data (if RFDATE wins)
|
||||
|
||||
ROPENO==3 Output OPEN status. 1 or 11 arguments
|
||||
arg1: -1 succeeded >0 OPEN loss number
|
||||
arg2-arg11 present only if arg1 is -1
|
||||
arg2: Real device name
|
||||
arg3: Real FN1
|
||||
arg4: Real FN2
|
||||
arg5: Real SNAME
|
||||
arg6: File length (-1 FILLEN fails on this device)
|
||||
arg7: Byte size open in
|
||||
arg8: File length in byte size written in
|
||||
arg9: Byte size written in
|
||||
arg10: FILDTP - -1 if RFDATE wins on this file
|
||||
arg11: Creation data (if RFDATE wins)
|
||||
|
||||
REOF==4 EOF on input
|
||||
Ignored argument
|
||||
|
||||
RFDELE==5 DELETE/RENAME status. 1st argument:
|
||||
RH: -1 succeeded
|
||||
0 failure code
|
||||
LH: -1 DELETE or RENAME
|
||||
0 RENAME while open
|
||||
If RENAME while open call succeeded, there are 4 more arguments:
|
||||
arg2: Real device name
|
||||
arg3: Real FN1 (as renamed)
|
||||
arg4: Real FN2
|
||||
arg5: Real SNAME
|
||||
|
||||
RNOOP==6 No-op reply
|
||||
arg: Echo argument send by no-op command
|
||||
|
||||
RACCES==7 Acknowledge access
|
||||
arg: Transaction number from CACCES
|
||||
|
||||
RSYSCL==10 Respond to system call. 9 arguments
|
||||
arg1: <error code or 0>,,<# of times call skipped>
|
||||
arg2: 1st value from system call
|
||||
...
|
||||
arg9: 8th value from system call
|
||||
|
||||
RICLOS==11 Respond to input CLOSE
|
||||
|
||||
ROCLOS==12 Respond to output CLOSE
|
||||
|
||||
RIOC==13 Reflect an IOC error
|
||||
arg: IOC error code, right-justified in word
|
||||
|
||||
RREUSE==14 Acknowledge a CREUSE
|
||||
Ignored argument
|
||||
1422
src/sysen2/mldev.103
Executable file
1422
src/sysen2/mldev.103
Executable file
File diff suppressed because it is too large
Load Diff
1422
src/sysen2/mldev.104
Normal file
1422
src/sysen2/mldev.104
Normal file
File diff suppressed because it is too large
Load Diff
824
src/sysen2/mlslv.77
Executable file
824
src/sysen2/mlslv.77
Executable file
@@ -0,0 +1,824 @@
|
||||
;-*-MIDAS-*-
|
||||
|
||||
TITLE BOJ SLAVE -- MLSLV, Works with MLDEV
|
||||
|
||||
.XCREF A,B,C,D,E,TT,I,Q,J,R,W,H,P,T,U
|
||||
|
||||
ICPSOC==123 ;This is the Postel-approved number
|
||||
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
T=6
|
||||
TT=7
|
||||
I=10
|
||||
H=11
|
||||
J=12
|
||||
Q=13
|
||||
W=14
|
||||
P=15
|
||||
IOP=16
|
||||
U=17
|
||||
|
||||
CH==,,-1 ;BIT TYPEOUT MASK FOR CHANNEL NAMES
|
||||
|
||||
CHNETI==1
|
||||
CHNETO==2
|
||||
CHDEV==4
|
||||
|
||||
DEFINE SYSCAL NAME,ARGS
|
||||
.CALL [ SETZ ? SIXBIT /NAME/ ? ARGS ((SETZ))]
|
||||
TERMIN
|
||||
|
||||
MAXLOG==20 ;MAXIMUM # OF LOGIN TRIES
|
||||
BUFL==400 ;SIZE OF BUFFER. SENDING TO MLDEV CAN USE FULL SIZE.
|
||||
|
||||
DEFINE CHECK TAG,LEN
|
||||
IFN .-TAG-<LEN>,.ERR WRONG TABLE LENGTH
|
||||
TERMIN
|
||||
|
||||
LOC 42
|
||||
JSR TSINT
|
||||
LOC 100
|
||||
|
||||
GO: .CLOSE 1, ;CLOSE DISK CHANNEL USED FOR LOADING
|
||||
.SUSET [.RUNAM,,DEBUG]
|
||||
HLLOS DEBUG ;IF WE ARE IN A LOGGED-IN TREE
|
||||
AOSN DEBUG ;SOMEONE MUST BE DEBUGGING MLSLV.
|
||||
.SUSET [.SJNAME,,[SIXBIT/MLSLV/]] ;IF NOT DEBUGGING, RECTIFY JNAME
|
||||
.CALL [ SETZ
|
||||
SIXBIT /SSTATU/
|
||||
2000,,A ;IGNORE THE DIE TIME
|
||||
SETZM SYSDBG]
|
||||
JFCL
|
||||
MOVE P,[-LPDL-1,,PDL-1]
|
||||
SETZM ALLOC
|
||||
SETZM NBFOXF
|
||||
SETZM NBFIXF
|
||||
MOVE A,[440800,,NBUFO]
|
||||
MOVEM A,NBUFOP
|
||||
MOVEI A,NBUFL
|
||||
MOVEM A,NBUFOC
|
||||
.SUSET [.SMASK,,[%PIIOC+%PIRLT+%PIILO+%PIMPV+%PIPDL]]
|
||||
MOVE A,[600000,,[60.*60.]]
|
||||
SKIPN DEBUG ;IF DEBUGGING, DON'T LIGHT FUSE
|
||||
.REALT A,
|
||||
JFCL
|
||||
;Find out what kind of server we're supposed to be
|
||||
.SUSET [.RXJNAME,,A]
|
||||
CAME A,[SIXBIT/TCP/]
|
||||
JRST CHAICP
|
||||
TCPICP: MOVEI A,CHNETI
|
||||
MOVEI B,ICPSOC
|
||||
PUSHJ P,NETWRK"TCPSRV
|
||||
JSR LOGOUT
|
||||
TLZ B,777000 ;Clear network number
|
||||
TDNN B,[177700000] ;Try to reduce to old-style number
|
||||
TRNE B,374
|
||||
JRST GO1 ;Can't
|
||||
LDB A,[000200,,B]
|
||||
LSH A,6
|
||||
LSH B,-9
|
||||
IOR B,A
|
||||
JRST GO1
|
||||
|
||||
CHAICP: MOVEI A,CHNETI
|
||||
MOVEI C,[ASCIZ/MLDEV/]
|
||||
MOVEI D,8
|
||||
PUSHJ P,NETWRK"CHASRV
|
||||
JSR LOGOUT
|
||||
GO1: ANDI B,777 ;Kludgey unique number (low 9 bits of host)
|
||||
MOVEM B,JOBUSR
|
||||
MOVSI D,(SETZ)
|
||||
.REALT D,
|
||||
JFCL
|
||||
JRST GO4 ;Start up
|
||||
|
||||
;ANY CHANGES IN THIS SHOULD BE REPORTED TO INFO-MLDEV@AI AND
|
||||
;UPDATED IN MLSLV ALSO. NEW VERSION MUST THEN BE UPDATED
|
||||
;SIMULTANEOUSLY ON ALL ITS'S AND ON MULTICS.
|
||||
|
||||
;[Next line is inoperative]
|
||||
;ICP IS TO SOCKET 197. IF DOING MOSTLY INPUT, 199. IF MOSTLY OUTPUT
|
||||
|
||||
;COMMAND FORMAT: TO SLAVE
|
||||
;AOBJN POINTER (RH = COMMAND CODE)
|
||||
;BLOCK OF ARGUMENTS
|
||||
|
||||
;COMMAND CODES:
|
||||
COPENI==1 ;OPEN FOR INPUT
|
||||
;ARG1: DEVICE
|
||||
;ARG2: FN1
|
||||
;ARG3: FN2
|
||||
;ARG4: SNAME
|
||||
;ARG5: OPEN MODE
|
||||
|
||||
COPENO==2 ;OPEN FOR OUTPUT
|
||||
;ARG1: DEVICE
|
||||
;ARG2: FN1
|
||||
;ARG3: FN2
|
||||
;ARG4: SNAME
|
||||
;ARG5: OPEN MODE
|
||||
|
||||
CDATA==3 ;WRITE DATA (WD COUNT INCLUDES DATA WDS AND BYTE COUNT WD).
|
||||
;# OF BYTES OF DATA
|
||||
;DATA, PACKED ILDB-STYLE INTO AT MOST 200 WORDS.
|
||||
|
||||
CALLOC==4 ;READ ALLOCATE
|
||||
;ARG: ALLOCATION IN BYTES
|
||||
|
||||
CICLOS==5 ;INPUT CLOSE
|
||||
;ARG: IGNORED
|
||||
|
||||
COCLOS==6 ;OUTPUT CLOSE
|
||||
;ARG: IGNORED
|
||||
|
||||
CFDELE==7 ;.FDELE (DELETE OR RENAME)
|
||||
;ARG1: DEV
|
||||
;ARG2: FN1
|
||||
;ARG3: FN2
|
||||
;ARG4: 0 OR NEW FN1
|
||||
;ARG5: 0 OR NEW FN2
|
||||
;ARG6: SNAME
|
||||
|
||||
CRNMWO==10 ;.FDELE (RENAME WHILE OPEN)
|
||||
;ARG1: NEW FN1
|
||||
;ARG2: NEW FN2
|
||||
|
||||
CNOOP=11 ;NOOP
|
||||
;ARG: ECHOED BY THE NOOP REPLY
|
||||
|
||||
CACCES==12 ;ACCESS
|
||||
;ARG1: TRANSACTION NUMBER.
|
||||
;ARG2: ACCESS POINTER
|
||||
;ARG3: NEW ALLOCATION
|
||||
|
||||
CSYSCL==13 ;RANDOM SYSTEM CALL. 11 (DECIMAL) ARGUMENTS.
|
||||
;ARG1: SYSTEM CALL NAME IN SIXBIT
|
||||
;ARG2: FLAGS (CONTROL-BIT ARGUMENT)
|
||||
;ARG3: NUMBER OF FOLLOWING ARGS THAT HAVE SIGNIFICANCE
|
||||
;ARG4: 1ST ARG TO SYSTEM CALL
|
||||
;...
|
||||
;ARG11: 8TH ARG TO SYSTEM CALL
|
||||
|
||||
CREUSE==14 ;REINITIALIZE YOURSELF, BECAUSE WE ARE ABOUT TO BE REUSED
|
||||
;BY A NEW CREATOR FOR A NEW FILE.
|
||||
|
||||
CLOGIN==15 ;LOGIN USER (RECORD XUNAME FOR SYS: DELETION PURPOSES, ETC.)
|
||||
;ARG1: XUNAME (USED AS "TERMINAL NAME" IN LOGIN CALL)
|
||||
|
||||
CMAX==16 ;LARGEST COMMAND NUMBER, PLUS ONE.
|
||||
|
||||
;REPLIES FROM SLAVE START WITH AN AOBJN POINTER (RH = REPLY CODE)
|
||||
;FOLLOWED BY A BLOCK OF ARGUMENTS
|
||||
|
||||
R==,,-1 ;REPLY CODES:
|
||||
|
||||
RDATA==1 ;INPUT DATA (WD COUNT INCLUDES DATA WDS AND BYTE COUNT WD).
|
||||
;# OF BYTES OF DATA
|
||||
;DATA, PACKED ILDB-STYLE INTO WORDS.
|
||||
;NOTE: SLAVE MUST ALWAYS SEND FULLY POPULATED WORDS
|
||||
;EXCEPT WHEN EOF IS REACHED.
|
||||
|
||||
ROPENI==2 ;INPUT OPEN STATUS. 1 OR 11 ARGUMENTS.
|
||||
;ARG1: -1 => SUCCEEDED; >0 => OPEN LOSS NUMBER
|
||||
;ARG2-ARG11 PRESENT ONLY IF ARG1 IS -1.
|
||||
;ARG2: REAL DEVICE NAME (USUALLY SIXBIT/DSK/)
|
||||
;ARG3: REAL FN1
|
||||
;ARG4: REAL FN2
|
||||
;ARG5: REAL SNAME
|
||||
;ARG6: FILE LENGTH
|
||||
;ARG7: BYTE SIZE OPEN IN
|
||||
;ARG8: FILE LENGTH IN BYTE SIZE WRITTEN IN
|
||||
;ARG9: BYTE SIZE WRITTEN IN
|
||||
;ARG10: FILDTP - -1 IF "RFDATE" WINS ON THIS FILE
|
||||
;ARG11: CREATION DATE (IF "RFDATE" WINS).
|
||||
|
||||
ROPENO==3 ;OUTPUT OPEN STATUS. 1 OR 11 ARGUMENTS.
|
||||
;ARG1: -1 => SUCCEEDED; >0 => OPEN LOSS NUMBER
|
||||
;ARG2-ARG11 PRESENT ONLY IF ARG1 IS -1.
|
||||
;ARG2: REAL DEVICE NAME
|
||||
;ARG3: REAL FN1
|
||||
;ARG4: REAL FN2
|
||||
;ARG5: REAL SNAME
|
||||
;ARG6: FILE LENGTH (-1 => FILLEN FAILS ON THIS DEVICE)
|
||||
;ARG7: BYTE SIZE OPEN IN
|
||||
;ARG8: FILE LENGTH IN BYTE SIZE WRITTEN IN
|
||||
;ARG9: BYTE SIZE WRITTEN IN
|
||||
;ARG10: FILDTP - -1 IF "RFDATE" WINS ON THIS FILE
|
||||
;ARG11: CREATION DATE (IF "RFDATE" WINS).
|
||||
|
||||
REOF==4 ;EOF ON INPUT
|
||||
;ARG: IGNORED
|
||||
|
||||
RFDELE==5 ;.FDELE STATUS. 1ST ARGUMENT:
|
||||
;RH: -1 => SUCCEEDED
|
||||
; >=0 => FAILURE CODE
|
||||
;LH: -1 => DELETE OR RENAME
|
||||
; 0 => RENAME WHILE OPEN
|
||||
;IF RENAME WHILE OPEN CALL SUCCEEDED, THERE ARE 4 MORE ARGS:
|
||||
;ARG2: REAL DEVICE NAME
|
||||
;ARG3: REAL FN1 (AS RENAMED)
|
||||
;ARG4: REAL FN2
|
||||
;ARG5: REAL SNAME
|
||||
|
||||
RNOOP==6 ;NOOP REPLY
|
||||
;ARG: ECHO ARG SENT BY NOOP COMMAND
|
||||
|
||||
RACCES==7 ;ACKNOWLEDGE ACCESS
|
||||
;ARG: TRANSACTION NUMBER FROM CACCES.
|
||||
|
||||
RSYSCL==10 ;RESPOND TO SYSTEM CALL. 9 ARGUMENTS.
|
||||
;ARG1: <ERROR CODE OR 0>,,<# OF TIMES CALL SKIPPED>
|
||||
;ARG2: 1ST VALUE FROM SYSTEM CALL.
|
||||
;...
|
||||
;ARG9: 8TH VALUE FROM SYSTEM CALL.
|
||||
|
||||
RICLOS==11 ;RESPOND TO INPUT-CLOSE.
|
||||
|
||||
ROCLOS==12 ;RESPOND TO OUTPUT CLOSE.
|
||||
|
||||
RIOC==13 ;REFLECT AN IOC ERROR
|
||||
;ARG: IOC ERROR CODE, RIGHT-JUSTIFIED IN WORD.
|
||||
|
||||
RREUSE==14 ;ACKNOWLEDGE A CREUSE. ARG IS MEANINGLESS (NONE RETURNED).
|
||||
|
||||
RLOGIN==15 ;ACKNOWLEDGE A LOGIN. ARG IS MEANINGLESS (NONE RETURNED).
|
||||
|
||||
RMAX==16 ;LAST REPLY CODE + 1.
|
||||
|
||||
GO4: SYSCAL WHYINT,[1000,,CHNETI ? 2000,,A ? 2000,,B ? 2000,,C]
|
||||
JSR LOGOUT
|
||||
CAIN A,%WYCHA
|
||||
HLRZS C ;Non-zero if input available
|
||||
JUMPN C,GO5 ;IF THERE ARE COMMANDS FOR US, HACK THEM.
|
||||
SKIPGE EOFI
|
||||
JRST GO5
|
||||
SKIPE C,ALLOC ;ELSE, IF WE HAVE MORE ALLOCATION, SEND MORE DATA.
|
||||
JRST ALLI1 ;NO COMMANDS AND NO ALLOC => WAIT FOR COMMAND.
|
||||
GO5: PUSHJ P,SYSFRC ;Force system output buffer before waiting
|
||||
HRROI IOP,B ;Read command
|
||||
PUSHJ P,NTIIOT
|
||||
JUMPGE B,BYE2
|
||||
HRRZ A,B
|
||||
CAIL A,CMAX
|
||||
JSR LOGOUT
|
||||
MOVEM B,LCMND'
|
||||
JRST @CMDTB(A)
|
||||
|
||||
;JUMP TO COMMAND HANDLER ROUTINE, LH(B) HAS - # ARGS TO READ OUT OF NET
|
||||
CMDTB: OFFSET -.
|
||||
BYE3
|
||||
COPENI:: OPNI
|
||||
COPENO:: OPNO
|
||||
CDATA:: IOTO
|
||||
CALLOC:: ALLI
|
||||
CICLOS:: CLSI
|
||||
COCLOS:: CLSO
|
||||
CFDELE:: FDEL1
|
||||
CRNMWO:: FDEL2
|
||||
CNOOP:: YNOOP
|
||||
CACCES:: YACCES
|
||||
CSYSCL:: YSYSCL
|
||||
CREUSE:: YREUSE
|
||||
CLOGIN:: LOGIN
|
||||
CMAX:: OFFSET 0
|
||||
|
||||
OPNI: SKIPA A,[ROPENI]
|
||||
OPNO: MOVEI A,ROPENO ;OPENI AND OPENO SAME EXCEPT FOR REPLY CODE.
|
||||
PUSH P,A
|
||||
HRRI B,DEV
|
||||
PUSHJ P,NTIIOB ;READ THE FILENAMES AND MODE.
|
||||
.SUSET [.SSNAME,,SNAME]
|
||||
POP P,B
|
||||
MOVE A,OPNM
|
||||
ANDI A,2
|
||||
MOVEM A,BLOKMD ;WE MUST BE AWARE WHETHER USING BLOCK MODE.
|
||||
SYSCAL OPEN,[4000,,OPNM ? 1000,,CHDEV
|
||||
DEV ? FN1 ? FN2 ? SNAME
|
||||
3000,,C]
|
||||
JRST OPNIL ;IF OPEN LOSES, REPORT THAT.
|
||||
SETZM EOFI ;IT WON, REPORT THAT.
|
||||
HRLI B,-11.
|
||||
|
||||
;REPLY TO A SUCCESSFUL OPEN. B SHOULD HAVE REPLY HEADER, -11.,,<CODE>
|
||||
OPNRCH: SETO C,
|
||||
PUSHJ P,OPNRC1 ;SEND FILE NAMES
|
||||
SYSCAL FILLEN,[ 1000,,CHDEV
|
||||
REPEAT 4,[ ? 2000,,DEVRCH+.RPCNT ]]
|
||||
SETOM DEVRCH
|
||||
MOVEI A,36. ;IF FILLEN FAILED, WE MUST ESTIMATE
|
||||
MOVE B,OPNM ;THE BYTE SIZE: 7 IN UNIT ASCII MODE,
|
||||
TRNN B,6 ;ELSE 36.
|
||||
MOVEI A,7
|
||||
SKIPGE DEVRCH
|
||||
MOVEM A,DEVRCH+1
|
||||
.RSYSI D, ;TEMPORARY CODE TO COMPENSATE FOR OLD SYSTEM
|
||||
CAMG D,[SIXBIT/1040/]
|
||||
JRST [ MOVEM A,DEVRCH+1
|
||||
MOVEM A,DEVRCH+3
|
||||
MOVE A,DEVRCH
|
||||
MOVEM A,DEVRCH+2
|
||||
JRST .+1 ]
|
||||
SKIPLE A,DEVRCH+1
|
||||
CAIL A,37.
|
||||
.VALUE
|
||||
SETOM DEVRCH+4 ;NOW READ THE FILE'S DATE
|
||||
SYSCAL RFDATE,[ 1000,,CHDEV ? 2000,,DEVRCH+5]
|
||||
SETZM DEVRCH+4 ;OR SAY IT HAS NONE.
|
||||
MOVE IOP,[-6,,DEVRCH]
|
||||
PUSHJ P,NETOFR
|
||||
MOVE A,DEVRCH+1
|
||||
MOVEM A,BYTSIZ ;NOW FIGURE OUT HOW TO HACK THIS BYTE SIZE.
|
||||
MOVEI A,36.
|
||||
IDIV A,BYTSIZ
|
||||
MOVEM A,BYTSWD
|
||||
IMULI A,BUFL
|
||||
MOVEM A,BUFSIZ
|
||||
HRLZ A,BYTSIZ
|
||||
LSH A,6
|
||||
IOR A,[440000,,BUF]
|
||||
MOVEM A,BUFBP ;SET UP BP. TO BUFFER'S BEGINNING.
|
||||
SETZM ALLOC
|
||||
JRST GO4
|
||||
|
||||
OPNRC1: MOVE IOP,[-2,,B]
|
||||
PUSHJ P,NETOUT
|
||||
.CALL [SETZ
|
||||
SIXBIT /RCHST/
|
||||
1000,,CHDEV
|
||||
2000,,DEVRCH
|
||||
2000,,DEVRCH+1
|
||||
2000,,DEVRCH+2
|
||||
2000,,DEVRCH+3
|
||||
2000,,DEVRCH+4
|
||||
2000,,DEVRCH+5
|
||||
2000,,DEVRCH+6
|
||||
SETZM DEVRCH+7]
|
||||
JSR LOGOUT
|
||||
MOVE IOP,[-4,,DEVRCH]
|
||||
PUSHJ P,NETOUT
|
||||
POPJ P,
|
||||
|
||||
OPNIL: HRLI B,-1 ;REPLY TO FAILING OPEN.
|
||||
MOVE IOP,[-2,,B]
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4
|
||||
|
||||
ALLI: HRRI B,C
|
||||
PUSHJ P,NTIIOB ;READ ALLOC AMOUNT INTO C
|
||||
MOVEM C,LALLOC'
|
||||
ADDB C,ALLOC ;INCREASE ALLOC
|
||||
SKIPGE EOFI ;CAN'T ACTUALLY TRANSFER ANYTHING IF AT EOF.
|
||||
JRST GO4
|
||||
ALLI1: MOVE B,BUFSIZ
|
||||
CAML C,B
|
||||
MOVE C,B ;WE CAN'T IOT MORE THAN A BUFFERFULL AT ONCE.
|
||||
SKIPN BLOKMD
|
||||
JRST ALLI2 ;NOW GO DO THE XFRS IN UNIT MODE WITH SIOT,
|
||||
MOVN B,C ;OR IN BLOCK MODE WITH IOT.
|
||||
HRLZS B
|
||||
HRRI B,BUF
|
||||
.IOT CHDEV,B
|
||||
MOVEI C,-BUF(B) ;HOW MANY BYTES DID WE GET?
|
||||
SKIPGE B
|
||||
SETOM EOFI ;NOT ALL WE ASKED FOR => AT EOF NOW.
|
||||
JRST ALLI3 ;GO SEND OUR DATA (AND MAYBE EOF) TO MLDEV.
|
||||
|
||||
ALLI2: IDIV C,BYTSWD ;ROUND DOWN BYTE COUNT TO MULTIPLE OF A WORD
|
||||
IMUL C,BYTSWD ;SINCE SUPPOSED TO SEND FULLY POPULATED WORDS
|
||||
JUMPE C,GO5 ;JUMP IF NOT ENOUGH ALLOC TO READ ANYTHING
|
||||
MOVE B,BUFBP
|
||||
MOVE A,C
|
||||
SYSCAL SIOT,[1000,,CHDEV ? B ? A]
|
||||
JSR LOGOUT
|
||||
LDB D,[360600,,B]
|
||||
CAIE D,44 ;MAKE B POINT AT THE FIRST WORD NOT READ INTO AT ALL.
|
||||
AOS B
|
||||
SKIPE A
|
||||
SETOM EOFI
|
||||
SUB C,A
|
||||
|
||||
;NOW WE HAVE READ DATA FROM DEVICE INTO BUFFER.
|
||||
;C HAS # BYTES READ.
|
||||
;B POINTS AT 1ST UNUSED WORD OF BUF.
|
||||
ALLI3: JUMPE C,ALLI4
|
||||
HRLZI IOP,-BUF(B)
|
||||
MOVNS IOP ;- # WORDS CONTAINING DATA.
|
||||
ADD IOP,[-1,,RDATA]
|
||||
MOVEM IOP,HDR0 ;SET UP RDATA CMD CONTAINING THEM AND BYTE COUNT.
|
||||
MOVEM C,HDR1
|
||||
ADD IOP,[-1,,HDR0-RDATA]
|
||||
PUSHJ P,NETOUT ;Translate to bytes and send. But let the system
|
||||
PUSHJ P,BUFFRC ;decide where to put in the packet boundaries.
|
||||
MOVNS C
|
||||
ADDM C,ALLOC ;DEDUCT BYTES SENT FROM ALLOCATION.
|
||||
ALLI4: SKIPL EOFI ;NOW, IF WE REACHED EOF, TELL MLDEV THAT.
|
||||
JRST GO4 ;ELSE HANDLE ANOTHER COMMAND.
|
||||
;NOTE WE MIGHT STILL HAVE SOME ALLOCATION LEFT.
|
||||
;IF SO, THEN WE WILL HANDLE IT AS SOON AS THERE
|
||||
;ARE NO COMMANDS PENDING.
|
||||
|
||||
ALLEOF: HRROI B,REOF ;HERE WHEN WE REACH EOF: SEND REOF REPLY.
|
||||
JRST REPLY1
|
||||
|
||||
IOTO: HRROI IOP,C ;HANDLE CDATA (DATE TO WRITE TO DEVICE)
|
||||
PUSHJ P,NTIIOT ;READ BYTE COUNT.
|
||||
ADD B,[1,,]
|
||||
HRRI B,BUF ;READ THE DATA.
|
||||
PUSHJ P,NTIIOB
|
||||
SKIPE BLOKMD
|
||||
JRST [ .IOT CHDEV,B
|
||||
JRST GO4] ;IN BLOCK MODE, SEND OUT AS WORDS.
|
||||
MOVE B,BUFBP
|
||||
SYSCAL SIOT,[1000,,CHDEV ? B ? C]
|
||||
JSR LOGOUT
|
||||
JRST GO4 ;IN UNIT MODE, SEND OUT AS BYTES.
|
||||
|
||||
CLSI: HRRI B,C
|
||||
PUSHJ P,NTIIOB
|
||||
.CLOSE CHDEV,
|
||||
HRROI IOP,[RICLOS]
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4
|
||||
|
||||
CLSO: HRRI B,C
|
||||
PUSHJ P,NTIIOB
|
||||
.CLOSE CHDEV,
|
||||
HRROI IOP,[ROCLOS]
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4
|
||||
|
||||
;HERE FOR CREUSE COMMAND, WHICH MEANS MLDEV IS ABOUT TO USE US FOR A DIFFERENT FILE
|
||||
;AND WASNTS US TO REINITIALIZE EVERYTHING APPROPRIATE.
|
||||
YREUSE: HRRI B,C ;IGNORE THE ARGUMENT.
|
||||
PUSHJ P,NTIIOB
|
||||
SETZM ALLOC ;DON'T EVEN TRY SENDING OUT MORE DATA.
|
||||
HRROI IOP,[RREUSE]
|
||||
PUSHJ P,NETOFR ;SO JUST ACKNOWLEDGE.
|
||||
JRST GO4
|
||||
|
||||
LOGIN: HRRI B,UNAME ; READ LOGIN ID
|
||||
PUSHJ P,NTIIOB
|
||||
SETZM TRMNAM
|
||||
MOVE A,[440600,,TRMNAM]
|
||||
MOVEM A,TNAMBP
|
||||
MOVEI A,6
|
||||
MOVEM A,TNAMCC ;6 SIXBIT CHARACTERS IN WORD
|
||||
MOVE A,JOBUSR ;THE HOST AT THE OTHER END OF LINE
|
||||
PUSHJ P,OCTPNT
|
||||
MOVEI A,'J
|
||||
PUSHJ P,SIXTYP
|
||||
.SUSET [.RUIND,,A] ;THE USER INDEX IS MORE USEFUL
|
||||
PUSHJ P,OCTPNT
|
||||
MOVEI C,MAXLOG ;MAXIMUM LOGIN TRIES
|
||||
SKIPA B,UNAME
|
||||
LOGIN1: AOS UNAME
|
||||
.CALL [ SETZ
|
||||
SIXBIT /LOGIN/
|
||||
UNAME ;UNAME
|
||||
TRMNAM ; "CONSOLE" (HOST AND USER INDEX)
|
||||
SETZ B ] ; XUNAME
|
||||
SOJG C,LOGIN1 ;KEEP TRYING UNTIL WE MAKE IT
|
||||
HRROI IOP,[RLOGIN] ; AND ACKNOWLEDGE
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4
|
||||
|
||||
;LOGIN UTILITY ROUTINES
|
||||
|
||||
OCTPNT: IDIVI A,10 ;THE NELSON RECURSIVE NUMBER PRINTER
|
||||
HRLM B,(P)
|
||||
SKIPE A
|
||||
PUSHJ P,OCTPNT
|
||||
HLRZ A,(P)
|
||||
ADDI A,'0
|
||||
SIXTYP: SOSL TNAMCC ;MAXIMUM OF 6 CHARACTERS
|
||||
IDPB A,TNAMBP
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
FDEL1: HRRI B,DEV
|
||||
PUSHJ P,NTIIOB
|
||||
MOVEI A,[SETZ ? SIXBIT /RENAME/
|
||||
DEV ? FN1 ? FN2 ? FSNAM
|
||||
FN2+1 ? FN2+2
|
||||
SETZB C]
|
||||
SKIPE SNAME ; 0=>deleting
|
||||
JRST FDEL5
|
||||
HRROI C,%ENSMD ; RETURN "MODE NOT AVAILABLE" ERROR IF NOT LOGGED IN
|
||||
SKIPN UNAME
|
||||
JRST FDEL4
|
||||
MOVEI A,[SETZ ? SIXBIT /DELETE/
|
||||
DEV ? FN1 ? FN2 ? FSNAM
|
||||
SETZB C]
|
||||
FDEL5: .CALL (A)
|
||||
SKIPA ; Leave failure code in C if no skip
|
||||
MOVEI C,-1 ; Set code of -1 to mean succeeded
|
||||
HRROS C ; Set left half to -1 for RENAME/DELETE
|
||||
; Can't return the real name so just return code
|
||||
; Drop through to FDEL4
|
||||
FDEL4: MOVE B,[-1,,RFDELE] ; only sending status word
|
||||
MOVE IOP,[-2,,B] ; Code is in "C".
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4
|
||||
|
||||
FDEL2: HRRI B,FN1
|
||||
PUSHJ P,NTIIOB
|
||||
.CALL [ SETZ ? 'RENMWO ? 1000,,CHDEV ? FN1 ? FN2
|
||||
SETZB C]
|
||||
SKIPA ; If failure leave code in C
|
||||
MOVEI C,-1 ; Otherwise set -1 to mean success
|
||||
; Left half is zero here to mean reply to Rename while open
|
||||
TRNN C,400000 ; RH sign will be on if we succeeded
|
||||
JRST FDEL4 ; jump if call failed.
|
||||
MOVE B,[-5,,RFDELE]
|
||||
PUSHJ P,OPNRC1 ; Get the real file name and send it.
|
||||
PUSHJ P,NETFRC
|
||||
JRST GO4
|
||||
|
||||
YNOOP: HRRI B,C ;GET NOOP ARG
|
||||
PUSHJ P,NTIIOB
|
||||
HRROI B,RNOOP ;NOOP REPLY
|
||||
REPLY1: MOVE IOP,[-2,,B] ;BLKO POINTER FOR NOOP REPLY
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4 ;BACK FOR NEXT COMMAND
|
||||
|
||||
;HANDLE CACCES COMMAND
|
||||
YACCES: HRRI B,B
|
||||
PUSHJ P,NTIIOB ;GET TRANSACTION NUMBER FOR REPLY IN C
|
||||
EXCH B,C ;AND ACCESS POINTER INTO B. NEW ALLOCATION IN D, USED ONLY IF INPUT.
|
||||
.CALL [ SETZ
|
||||
'ACCESS
|
||||
1000,,CHDEV
|
||||
SETZ B] ;PUT IT INTO DEV CHANNEL
|
||||
JSR LOGOUT
|
||||
SETZM EOFI
|
||||
HRROI B,RACCES
|
||||
MOVE IOP,[-2,,B]
|
||||
PUSHJ P,NETOFR ;SEND REPLY
|
||||
MOVE A,OPNM
|
||||
TRNE A,1 ;IF OTHER END IS READING FILE, SEND WHAT WE'VE BEEN ALLOCATED.
|
||||
JRST GO4 ;IF OTHER SIDE IS WRITING, WAIT FOR IT TO SEND MORE DATA.
|
||||
MOVE C,D ;PROCESS NEW ALLOCATION SUPPLIED AS PART OF CACCES COMMAND,
|
||||
MOVEM D,ALLOC
|
||||
JRST ALLI1 ;THEN SEND NEW STUFF.
|
||||
|
||||
;HANDLE REQUEST TO EXECUTE SYSTEM CALL.
|
||||
YSYSCL: HRRI B,YSYSB
|
||||
PUSHJ P,NTIIOB ;READ SYS CALL NAME AND ARGS.
|
||||
MOVEI A,CHDEV ;1ST ARG IS NORMALLY DEV CHANNEL NUMBER,
|
||||
MOVE B,YSYSB
|
||||
CAME B,[SIXBIT/MLINK/]
|
||||
MOVEM A,YSYSB+3 ;BUT FOR "MLINK" CALL, IT IS SENT BY MASTER.
|
||||
MOVEM B,YSYSC+1
|
||||
MOVSI C,-NYSYSI
|
||||
MOVSI D,(SETZ)
|
||||
ANDCAM D,YSYSI(C)
|
||||
AOBJN C,.-1
|
||||
SOS C,YSYSB+2 ;# OF INPUT ARGUMENTS-1
|
||||
IORM D,YSYSI(C) ;SET END OF ARG LIST AT APPROPRIATE PLACE
|
||||
.CALL YSYSC
|
||||
JRST [MOVSS A ? JRST YSYS1]
|
||||
MOVEI A,1 ;SUCCESSFUL CALL RETURNS HERE - SAY WAS 1 SKIP.
|
||||
YSYS1: MOVEM A,YSYSS
|
||||
MOVE IOP,[-YSYSRL,,YSYSR]
|
||||
PUSHJ P,NETOFR ;REPLY, GIVING MASTER VALUES RETURNED.
|
||||
JRST GO4
|
||||
|
||||
TSINT: 0
|
||||
INTPC: 0
|
||||
MOVEM A,TSINTA ;IO INTR, CHECK SOCKET STATES
|
||||
SKIPL A,TSINT
|
||||
JRST TSFW
|
||||
TSINTX: MOVE A,TSINTA
|
||||
.DISMISS INTPC
|
||||
|
||||
TSINTA: 0
|
||||
|
||||
TSFW: TRNN A,%PIIOC ;HERE FOR 1ST WORD INTERRUPT.
|
||||
JSR LOGOUT
|
||||
.SUSET [.RBCHN,,A] ;ONLY ONE WE CAN HANDLE IS AN IOC ERROR
|
||||
CAIE A,CHDEV ;ON THE DEVICE BEING USED.
|
||||
JSR LOGOUT ;IOC ERROR ON NET SOCKET MEANS MLDEV WANTS US TO DIE.
|
||||
MOVSS A
|
||||
ADD A,[.RIOS,,A] ;WHEN THAT HAPPENS, SEND OUT A RIOC COMMAND
|
||||
.SUSET A ;CONTAINING THE IOC ERROR NUMBER.
|
||||
LDB C,[330400,,A]
|
||||
.DISMI [.+1]
|
||||
HRROI B,RIOC
|
||||
MOVE IOP,[-2,,B]
|
||||
PUSHJ P,NETOFR
|
||||
JRST GO4 ;ALSO ABORT WHATEVER WE WERE DOING.
|
||||
|
||||
BYE1: JSR LOGOUT
|
||||
BYE2: JSR LOGOUT
|
||||
BYE3: JSR LOGOUT
|
||||
|
||||
LOGOUT: 0
|
||||
SKIPE DEBUG
|
||||
.VALUE
|
||||
.LOGOUT
|
||||
JRST .-2
|
||||
|
||||
;NETWORK 36-BIT OUTPUT ROUTINES
|
||||
|
||||
NETOFR: PUSHJ P,NETOUT ;Output then force
|
||||
NETFRC: PUSHJ P,BUFFRC ;Force our buffer and system's too
|
||||
SYSFRC: .CALL [ SETZ ? SIXBIT/FORCE/ ? SETZI CHNETO ] ;Send it
|
||||
JSR LOGOUT ;Probably connection closed
|
||||
POPJ P,
|
||||
|
||||
BUFFRC: PUSH P,H ;Force our buffer into system
|
||||
PUSH P,J
|
||||
PUSH P,Q
|
||||
AOSE NBFOXF
|
||||
JRST NETFR1
|
||||
MOVE H,NBFOXW ;Send extra word
|
||||
MOVEI J,0 ;Padded with zeros
|
||||
PUSHJ P,NETOU2
|
||||
NETFR1: PUSHJ P,NETBFO ;Code-convert buffer
|
||||
POPQJH: POP P,Q
|
||||
POP P,J
|
||||
POP P,H
|
||||
POPJ P,
|
||||
|
||||
;Send words, IOP is aobjn pointer
|
||||
NETOUT: PUSH P,H
|
||||
PUSH P,J
|
||||
PUSH P,Q
|
||||
AOSE NBFOXF
|
||||
JRST NETOU1
|
||||
MOVE H,NBFOXW ;Send saved word from last time
|
||||
MOVE J,(IOP) ;Followed by first new word
|
||||
PUSHJ P,NETOU2
|
||||
AOBJP IOP,POPQJH
|
||||
NETOU1: MOVE H,(IOP) ;Send two words
|
||||
AOBJP IOP,NETOU3 ;No more
|
||||
MOVE J,(IOP)
|
||||
PUSHJ P,NETOU2
|
||||
AOBJN IOP,NETOU1
|
||||
JRST POPQJH
|
||||
|
||||
NETOU3: MOVEM H,NBFOXW ;Send this word next time
|
||||
SETOM NBFOXF
|
||||
JRST POPQJH
|
||||
|
||||
;Send pair of 36-bit words in H,J
|
||||
NETOU2: MOVE Q,NBUFOC ;Space in buffer?
|
||||
CAIGE Q,9
|
||||
PUSHJ P,NETBFO ;Make some
|
||||
MOVNI Q,9
|
||||
ADDM Q,NBUFOC
|
||||
REPEAT 9,[
|
||||
ROTC H,8
|
||||
IDPB J,NBUFOP
|
||||
]
|
||||
POPJ P,
|
||||
|
||||
;Send and refresh the buffer -- clobbers Q only
|
||||
NETBFO: MOVEI Q,NBUFL
|
||||
SUB Q,NBUFOC ;Number of 8-bit bytes in buffer
|
||||
JUMPE Q,CPOPJ ;Empty
|
||||
PUSH P,J
|
||||
MOVE J,[440800,,NBUFO]
|
||||
MOVEM J,NBUFOP
|
||||
ADDM Q,NBUFOC
|
||||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI CHNETO ? J ? SETZ Q ]
|
||||
JSR LOGOUT ;Probably connection closed
|
||||
POP P,J
|
||||
POPJ P,
|
||||
|
||||
;Read 36-bit words from network into aobjn pointer in IOP
|
||||
;If an odd number of words, NTIFRC will clean up the extra word
|
||||
;(Calls to NTIFRC must match calls to NETFRC at other end).
|
||||
NTIIOB: MOVE IOP,B
|
||||
PUSHJ P,NTIIOT
|
||||
NTIFRC: SETZM NBFIXF ;Swallow extra word, if any
|
||||
POPJ P,
|
||||
|
||||
NTIIOT: PUSH P,H
|
||||
PUSH P,J
|
||||
PUSH P,Q
|
||||
AOSE NBFIXF ;If have extra word, recieve it first
|
||||
JRST NTIIO1
|
||||
MOVE H,NBFIXW
|
||||
MOVEM H,(IOP)
|
||||
AOBJP IOP,POPQJH
|
||||
NTIIO1: HLRO H,IOP ;Compute how much input we need
|
||||
ASH H,-1 ;Rounded-up negative number of word pairs
|
||||
IMUL H,[-9] ;Number of bytes
|
||||
CAILE H,NBUFL ;Take at most one buffer full
|
||||
MOVEI H,NBUFL
|
||||
PUSH P,H
|
||||
IDIVI H,9 ;Store number of word pairs
|
||||
MOVEM H,NBUFIC
|
||||
POP P,H
|
||||
MOVE J,[440800,,NBUFI]
|
||||
MOVEM J,NBUFIP
|
||||
.CALL [ SETZ ? SIXBIT/SIOT/ ? MOVEI CHNETI ? J ? SETZ H ]
|
||||
JSR LOGOUT ;Probably connection closed
|
||||
SKIPE H
|
||||
JSR LOGOUT ;Failed to transfer, could be TCP conn closed
|
||||
NTIIO2: MOVEI J,0 ;Receive two words into H,J
|
||||
REPEAT 9,[
|
||||
IFN .RPCNT, LSHC H,8
|
||||
ILDB Q,NBUFIP
|
||||
IOR J,Q
|
||||
]
|
||||
MOVEM H,(IOP)
|
||||
AOBJP IOP,NTIIO3
|
||||
MOVEM J,(IOP)
|
||||
AOBJP IOP,POPQJH
|
||||
SOSLE NBUFIC
|
||||
JRST NTIIO2
|
||||
JRST NTIIO1 ;Need another buffer full
|
||||
|
||||
NTIIO3: MOVEM J,NBFIXW ;Save this word for next time
|
||||
SETOM NBFIXF
|
||||
JRST POPQJH
|
||||
|
||||
NBUFL==360. ;Number of 8-bit bytes of network buffer
|
||||
NBUFO: BLOCK NBUFL/4 ;NBUFL must be multiple of 4 and 9
|
||||
NBUFOP: 440800,,NBUFO ;Fill pointer for network buffer
|
||||
NBUFOC: NBUFL ;Bytes remaining
|
||||
NBFOXF: 0 ;-1 => extra word in NBFOXW
|
||||
NBFOXW: 0 ;extra word not sent yet
|
||||
|
||||
NBUFI: BLOCK NBUFL/4
|
||||
NBUFIP: 440800,,NBUFI ;Take pointer for network buffer
|
||||
NBUFIC: 0
|
||||
NBFIXF: 0 ;-1 => extra word in EXTRAW
|
||||
NBFIXW: 0 ;extra word not sent yet
|
||||
|
||||
LPDL==20
|
||||
PDL: BLOCK LPDL+4
|
||||
|
||||
PATCH:
|
||||
PAT: BLOCK 40
|
||||
|
||||
RCH: BLOCK 10 ? STATE=RCH+4 ;THIS IS THE SOCKET STATE
|
||||
|
||||
OPN:
|
||||
DEV: 0
|
||||
FN1: 0
|
||||
FN2: 0
|
||||
SNAME: 0
|
||||
OPNM: 0
|
||||
FSNAM: 0
|
||||
BLOCK 10 ;SLOP FOR NET IOTS INTO HERE
|
||||
|
||||
;LOGIN STUFF
|
||||
|
||||
UNAME: 0
|
||||
TRMNAM: 0
|
||||
TNAMBP: 0 ;BYTE POINTER INTO UNAME
|
||||
TNAMCC: 0 ;SIXBIT CHARACTER COUNT
|
||||
JOBUSR: 0 ;THE FOREIGN USER
|
||||
DEBUG: -1 ;DEBUG FLAG
|
||||
SYSDBG: 0 ;SYSTEM BEING DEBUGGED FLAG
|
||||
VERSIO: .FNAM1
|
||||
.FNAM2
|
||||
|
||||
BLOKMD: 0 ;-1 => DEVICE OPEN IN BLOCK MODE.
|
||||
EOFI: 0 ;-1 => HAVE REACHED EOF ON INPUT
|
||||
ALLOC: 0 ;-1 => ALLOCATION FOR DATA TO MLDEV, IN BYTES.
|
||||
|
||||
HDR0: 0 ;HOLDS -N,,RDATA
|
||||
HDR1: 0 ;HOLDS BYTE COUNT OF RDATA COMMAND.
|
||||
BUF: BLOCK BUFL
|
||||
BUFBP: 0 ;B.P. TO ILDB 1ST BYTE OF BUFFER.
|
||||
BYTSIZ: 0 ;BYTE SIZE WE ARE XFERRING TO DEVICE.
|
||||
BYTSWD: 0 ;# BYTES PER WORD.
|
||||
BUFSIZ: 0 ;BUFFER SIZE IN BYTES.
|
||||
|
||||
YSYSBL==11.
|
||||
YSYSB: BLOCK YSYSBL
|
||||
BLOCK 10 ;SLOP FOR NET IOTS INTO HERE
|
||||
|
||||
YSYSR: 1-YSYSRL,,RSYSCL ;CODE FOR "REPLY TO SYSTEM CALL"
|
||||
YSYSS: 0 ;ERROR CODE,,# SKIPS
|
||||
YSYSV: BLOCK 10 ;VALUES RETURNED BY SYSTEM CALL GO HERE.
|
||||
YSYSRL==.-YSYSR
|
||||
|
||||
YSYSC: SETZ ;BLOCK FILLED IN FOR DOING SYSTEM CALL
|
||||
SIXBIT/GAZONK/ ;NAME OF CALL STORED HERE
|
||||
4000,,YSYSB+1 ;CONTROL BITS
|
||||
3000,,A ;ERROR RETURN ARGUMENT
|
||||
REPEAT 8,2000,,YSYSV+.RPCNT ;COLLECT OUTPUT ARGS
|
||||
YSYSI: NYSYSI==8
|
||||
REPEAT NYSYSI, YSYSB+3+.RPCNT ;INPUT ARGS, SIGN BIT WILL GET TURNED ON IN LAST ONE
|
||||
|
||||
DEVRCH: BLOCK 8 ;SPACE FOR .RCHST ON DSK
|
||||
|
||||
$$HST3==1
|
||||
$$CHAOS==1
|
||||
$$TCP==1
|
||||
$$SERVE==1
|
||||
|
||||
.INSRT SYSENG;NETWRK
|
||||
|
||||
LITTER: CONSTANTS
|
||||
VARS:: VARIABLES
|
||||
|
||||
END GO
|
||||
Reference in New Issue
Block a user