1
0
mirror of https://github.com/PDP-10/klh10.git synced 2026-01-11 23:52:54 +00:00

Add klh10-2.0a-aux.tgz.

This commit is contained in:
Olaf Seibert 2015-04-27 22:59:12 +02:00
parent 742b43d025
commit 00b977cfde
63 changed files with 11505 additions and 0 deletions

78
READaux Normal file
View File

@ -0,0 +1,78 @@
/* READaux - README file for KLH10 Auxiliary Distribution
*/
/* $Id: klh10aux.rdm,v 2.1 2001/11/10 10:38:16 klh Exp $
*/
/* Copyright © 2001 Kenneth L. Harrenstien
**
** This file is part of and describes the "Auxiliary Distribution"
** package, built and released as a companion to the KLH10 Distribution.
** The legal text is contained below.
*/
----------------------------
The KLH10 Auxiliary Distribution consists of all the components (both
software and documentation) residing in the "contrib" and "run"
directories of a typical installation of the KLH10 Distribution.
The KLH10 Distribution license does NOT apply to these components.
They are derived from several sources, each of which may have its own
licensing terms. They are included solely for the convenience of
users, and in order to avoid licensing conflicts have been made
available in the form of a separate "Auxiliary Distribution" package.
They are subject to removal if their inclusion causes any legal
problems.
The Auxiliary Distribution package includes the following specific
components:
[1] PDP-10 software (bootstrap and diagnostic binaries) from Digital
Equipment Corporation (now Compaq Corporation). These may be used
only with a valid Digital license such as the "Home Hobbyist License"
(see <http://pdp-10.trailing-edge.com/#license>).
The specific components are identified by various README files in
the following subdirectories.
run/dfkfb/ - Digital (KL10) DFKFB timing test diagnostic binary
run/klnic/ - Digital (KL10 SRI-NIC) bootstrap binaries
run/klt10/ - Digital (KL10 TOPS-10) bootstrap binaries
run/klt20/ - Digital (KL10 TOPS-20) bootstrap binaries
run/kst10/ - Digital (KS10 TOPS-10) bootstrap binaries
run/kst20/ - Digital (KS10 TOPS-20) bootstrap binaries
[2] PDP-10 software derived from the MIT ITS systems. These are
believed to be usable on terms similar to those of the GNU Public
License.
The specific components are listed in the file "run/ksits/README".
run/ksits/ - MIT (KS10 ITS) system binaries
[3] Utility software from other contributors, where terms were not
specifically stated but are believed to be similar to those of
the "BSD" style licenses (e.g. FreeBSD, NetBSD).
More detail is provided in the file "contrib/README" and the
individual subdirectories.
contrib/supdup/ - Unix SUPDUP client and server
contrib/read20/ - Unix DUMPER tape image reader
Disclaimer:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL KENNETH L. HARRENSTIEN BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----------------------------
To reiterate: If there is any likelihood that your intended use may
violate any of the licensing terms of the separate components, you
should NOT use them. If any of the original copyright holders object
to this packaging, I will remove the offending components or simply
stop providing the Auxiliary Distribution altogether.

10
contrib/README Normal file
View File

@ -0,0 +1,10 @@
The following directories contain programs of uncertain lineage where
the original authors gave no explicit instructions as to the terms of
use or redistribution.
Based on history and e-mail exchanges I believe that "BSD" style
licensing terms are probably what was intended, but could be wrong.
supdup/ (Unix C version of ITS SUPDUP)
read20/ (Unix utility to read TOPS-20 DUMPER tape images)

23
contrib/read20/Makefile Normal file
View File

@ -0,0 +1,23 @@
# Quick and dirty makefile for read20.
# Invoke with appropriate system, e.g. "make freebsd"
SRCS= dump.h read20.c
OBJS= read20.o
usage:
@echo 'Use appropriate system as target, eg "make freebsd"'
freebsd:
cc -g -O -o read20 read20.c -lcompat
osfaxp:
cc -g -O -std1 -o read20 read20.c
linux:
cc -g -O -o read20 read20.c
solaris:
gcc -g -O -o read20 read20.c
solaris-cc:
/opt/SUNWspro/bin/cc -g -O -o read20 read20.c

489
contrib/read20/dump.h Normal file
View File

@ -0,0 +1,489 @@
/* Note: the source for DUMPER.MAC changed considerably between v.419, which
implemented formats 3,4,5, and v.563 which implemented 4,5,6.
What follows is a synthesis of info gleaned from both.
*/
/* COMMENT
F O R M A T O F D U M P E R T A P E S
===========================================
EACH PHYSICAL RECORD WRITTEN BY DUMPER CONTAINS ONE OR MORE
LOGICAL RECORDS, EACH OF WHICH IS 518 (1006 OCTAL) WORDS LONG.
EACH LOGICAL RECORD HAS THE FOLLOWING FORMAT:
!=======================================================!
CHKSUM ! CHECKSUM OF ENTIRE 518-WORD RECORD ! +0
!-------------------------------------------------------!
ACCESS ! PAGE ACCESS BITS (CURRENTLY NOT USED) ! +1
!-------------------------------------------------------!
TAPNO !SCD! SAVESET NUMBER ! TAPE NUMBER ! +2
!-------------------------------------------------------!
PAGNO !F1!F2! FILE # IN SET ! PAGE # IN FILE ! +3
!-------------------------------------------------------!
TYP ! RECORD TYPE CODE (NEGATED) ! +4
!-------------------------------------------------------!
SEQ ! RECORD SEQUENCE NUMBER (INCREASES BY 1) ! +5
!=======================================================!
! !
! CONTENTS OF FILE PAGE IF DATA RECORD !
! OTHER TYPES HAVE OTHER INFORMATION HERE !
! !
!=======================================================!
TYPE VALUE MEANING
---- ----- -------
DATA 0 CONTENTS OF FILE PAGE
TPHD 1 NON-CONTINUED SAVESET HEADER
FLHD 2 FILE HEADER (CONTAINS FILESPEC, FDB)
FLTR 3 FILE TRAILER
TPTR 4 TAPE TRAILER (OCCURS ONLY AFTER LAST SAVESET)
USR 5 USER DIRECTORY INFORMATION
CTPH 6 CONTINUED SAVESET HEADER
FILL 7 NO MEANING, USED FOR PADDING
SCD (3 BITS) - 0=NORMAL SAVE, 1=COLLECTION, 2=ARCHIVE, 3=MIGRATION
F1 F2 MEANING
-- -- -------
0 0 OLD-FORMAT TAPE (NO FILE # IN PAGNO BITS 2-17)
1 1 OLD-FORMAT TAPE, CONTINUED FILE
0 1 NEW-FORMAT TAPE (FILE # IN PAGNO BITS 2-17)
1 0 NEW-FORMAT TAPE, CONTINUED FILE
A DUMPER TAPE IS A COLLECTION OF RECORDS ORGANIZED IN THE
FOLLOWING FASHION:
!=======================================================!
! HEADER FOR FIRST SAVESET (TPHD) !
!-------------------------------------------------------!
! USER INFO (USR) OR FILE (SEE BELOW) !
!-------------------------------------------------------!
! USER INFO OR FILE !
!-------------------------------------------------------!
! . !
! . !
! . !
!=======================================================!
! HEADER FOR SECOND SAVESET (TPHD) !
!-------------------------------------------------------!
! USER INFO (USR) OR FILE (SEE BELOW) !
!-------------------------------------------------------!
! USER INFO OR FILE !
!-------------------------------------------------------!
! . !
! . !
! . !
!=======================================================!
! !
! SUBSEQUENT SAVESETS !
! !
!=======================================================!
! !
! LAST SAVESET !
! !
!=======================================================!
! TAPE TRAILER (TPTR) !
!=======================================================!
NOTES:
1. ON LABELED TAPES, THE TPTR RECORD APPEARS ONLY IF
THE SAVESET IS CONTINUED ON ANOTHER TAPE.
2. SOLITARY TAPE MARKS (EOF'S) ARE IGNORED ON INPUT.
TWO CONSECUTIVE TAPE MARKS ARE INTERPRETED AS TPTR.
3. ON LABELED TAPES, EACH SAVESET OCCUPIES EXACTLY ONE FILE.
4. THE FIRST RECORD OF A CONTINUED SAVESET IS CTPH
INSTEAD OF TPHD.
A DISK FILE SAVED ON A DUMPER TAPE ALWAYS HAS THIS
SEQUENCE OF RECORDS:
!=======================================================!
! FILE HEADER (FLHD) !
!-------------------------------------------------------!
! DATA RECORD: 1 PAGE OF FILE (DATA) !
!-------------------------------------------------------!
! DATA RECORD: 1 PAGE OF FILE (DATA) !
!-------------------------------------------------------!
! . !
! . !
! . !
!-------------------------------------------------------!
! FILE TRAILER (FLTR) !
!=======================================================!
END COMMENT
*/
/* Additional notes from DUMPER version 563:
CURFMT==6 ;CURRENT FORMAT NUMBER, DO NOT CHANGE
;6 GAINED "TONEXT" RECORD TYPE
;5 GAINED PASSWORD ENCRYPTION AND OTHER CRDIR%oids
;4 IS THE LOWEST LEGAL TAPE TYPE
Old DUMPERs used record offset 1 (now .FLAG) for a "page access"
word. In all cases it was set to a canned value on write and ignored
on read. This not being very useful, the word has been usurped for a
flag word in tape version 6. However, the bit values of H.HIST must
never be used as flags, since old DUMPERs always set them.
Record type 7 WHEN WRITTEN ON TAPE is always a Filler record and
implies that the rest of the physical record can be discarded. GETREC
does not pass these records back. If GETREC does return record type 7,
it is the SAVEEN (end of saveset) record. Be careful of the
difference. SAVEEN records are generated by reading into an EOF.
Current record header format:
.CHKSM checksum of entire record. Ignore if FL.NCK is set in .FLAG
.FLAG flags (FL.???). FL.HIS is always set for historical reasons.
.TAPNO <STYP>B2 + <SavesetNumber>B17+<TapeNumber>
.PAGNO <OLDFLG>B1 + <FileNumber>B17 + <PageNumberInFile>
.TYP negated record type
.SEQ sequence number (usually increases by one)
STYP = 0 Normal Save, 1 Collection, 2 Archival, 3 Migration
OLDFLG = 1B0 on an old style tape in a TAPEEN (4) record if it isn't *really*
the end of the file, but in fact means to go to the next tape.
The Saveset number is only filled in in
Archival/Collection/Migration savesets.
If, on reading a tape, a sequence number does not increase, but
stays the same or goes down (on tapes with more than one logical
record per physical record), an error was encountered while writing
the tape that didn't show up while reading it. The second physical
record is ignored.
Tape format
Tapes are a group of Savesets, ended by a end-of-tape record
(either TONEXT, indicating the data continued on another tape, or
TAPEEN, meaning end of all data).
They are written as
saveset sequence
EOF (on some types of tapes)
saveset sequence
EOF (on some types of tapes)
...
TAPEEN or TONEXT
EOF
EOF (logical EOT)
Where a saveset sequence consists of
Saveset header (SAVEST)
File header (FILEST) | for each
File data (DATA) |for each page of data | file in the
File trailer (FILEEN) | saveset.
A TONEXT record can occur at ANY point, indicating the next tape
is needed to read the next record. The next tape will start with a
CONTST record (continued saveset).
And also: old tapes will have a FILEST record after a CONTST
record if mid-file, which should be ignored; and FILEEN tapes with
PG.CON set in .PAGNO are treated as TONEXT records (and are handled
that way by GETREC).
Any physical record on tape is made up of 1-15. logical records
(always the same number of records per physical record for any given
tape). SAVEST, CONTST and TAPEEN records are always the first in
their physical records (previous physical records being padded with
FILLER records if needed to accomplish this).
*/
/* DUMPER formats */
#define DFMTV0 0 /* BBN TENEX DUMPER format */
/* 1 */
/* 2 */
#define DFMTV3 3 /* T20 V2 - FDB changes, structures, etc. */
#define DFMTV4 4 /* T20 V3 - new GTDIR blocks */
#define DFMTV5 5 /* T20 V6 - bigger GTDIR blocks, pwd encryption */
#define DFMTV6 6 /* T20 V7 - record type 8, randomness */
/*
EACH PHYSICAL RECORD WRITTEN BY DUMPER CONTAINS ONE OR MORE
LOGICAL RECORDS, EACH OF WHICH IS 518 (1006 OCTAL) WORDS LONG.
(Note: max blocking factor is 15., i.e. no more than 15 logical records
per physical record.)
*/
/* Header of every DUMPER logical record */
#define RECHDR_CKSUM 0 /* Checksum */
#define RECHDR_FLAG 1 /* DV6: flags, previously ACCESS */
#define RECHDR_TAPNO 2 /* Tape number */
#define RECHDR_PAGNO 3 /* Page number */
#define RECHDR_TYP 4 /* Record type (RECTYP_xxx), negated */
#define RECHDR_SEQ 5 /* Record sequence # */
#define RECHDR_LEN 6 /* Header size (# words) */
/* Fields in FLAG:
FL.HIS==(170000);Always set in .FLAG (historical, old page access bits)
FL.NCK==1B0 ; ([563],V6) No real checksum in .CHKSM
*/
/* Fields in TAPNO:
700000,,0 ; high 3 bits are saveset type:
; 0 normal, 1 Collection, 2 Archival, 3 Migration
77777,,0 ; Saveset number
0,,777777 ; Tape number
*/
/* Fields in PAGNO:
400000,,0 ; PGNCFL - continued tape file
; (set in 3(FLTR), 4(TPTR), 2(FLHD))
; [563] PG.CON means TONEXT
200000,,0 ; PGNNFL - File # is valid, if complement of PGNCFL
; [563] PG.NFN always set, even if PG.CON set too.
177777,,0 ; File number (in saveset)
0,,777777 ; Page number in file
F1 F2 MEANING
-- -- -------
0 0 OLD-FORMAT TAPE (NO FILE # IN PAGNO BITS 2-17)
1 1 OLD-FORMAT TAPE, CONTINUED FILE
0 1 NEW-FORMAT TAPE (FILE # IN PAGNO BITS 2-17)
1 0 NEW-FORMAT TAPE, CONTINUED FILE
*/
/* Record types (values negated in header) */
/* [419] [563] */
#define RECTYP_DATA 0 /* DATA DATA data record, file contents */
#define RECTYP_TPHD 1 /* TPHD SAVEST Tape/saveset header */
#define RECTYP_FLHD 2 /* FLHD FILEST File header */
#define RECTYP_FLTR 3 /* FLTR FILEEN File trailer/end */
#define RECTYP_TPTR 4 /* TPTR TAPEEN Tape trailer, saveset end */
#define RECTYP_USR 5 /* USR DIRECT User directory info */
#define RECTYP_CTPH 6 /* CTPH CONTST Continued saveset header */
#define RECTYP_FILL 7 /* FILL FILL,SAVEEN Filler record */
#define RECTYP_FLCT 8 /* TONEXT To next tape rec */
/* (continued file) */
/* Record data formats (512 words following header) */
/* Type 0 (DATA) - File data page, all 512 words */
/* Types 1 and 6 (TPHD, CTPH) - Tape/saveset headers */
/*
0: <tape format> ; FMT - A DFMTVn value
1: <ptr to saveset name> ; PNT - either 3 or 20
2: <TAD of dump> ; TAD
In V4,V5 the saveset name starts at 3.
In V6 there is more data:
3: <sixbit VolID of tape> ; VOL (not used on read)
4: <edit # of DUMPER> ; EDT
20: start of saveset name ; MSG
*/
/* Type 2 (FLHD) - File header */
/*
0: <start of ASCIZ filename spec>
200: <start of FDB block>
*/
/* Type 3 (FLTR) - File trailer */
/*
0: <start of FDB block> - modified to reflect file dumped
;[554] For ARCHIVed files, a tape written by 4.1 DUMPER will have
;[554] 30 FDB words, 10 words for author name, 10 words for last
;[554] writer, then 7 words of archive information. A tape written
;[554] by 6.0 DUMPER has 37 words of FDB, then the author, last writer,
;[554] and archive information. So, check the tape format so we account
;[554] for the correct number of words from FDB-start when looking for
;[554] the archive information.
Note: the 37-word FDB appears to have its own length (in wds) as
the first word.
*/
/* Type 4 (TPTR) - Tape trailer */
/*
Data portion unused
*/
/* Type 5 (USR) - User directory info */
/*
May be only a user name, or full directory info if dumped under
right conditions (wheel, etc).
0: <GTDIR info block> ; V6 fixes all ptrs to offsets before writing;
; V4/V5 only fix for PSW and ACT.
40: <username string> ; UHNAM
60: <password string> ; UHPSW
100: <acct string> ; UHACT
200: <user groups array> ; CDUG (0200 words)
400: <dir groups array> ; CDDG (0200 words)
600: <subdir groups array> ; CDSG (0200 words)
*/
/* Type 7 (FILL) - Filler record (to fill out physical record) */
/*
Data portion unused
*/
/* Type 8 (FLCT) - TONEXT, file continuation (new in V6)
Note: this value was used internally in DUMPER 419 as a made-up
type called SSND (saveset end), returned when physical EOFs
were encountered. DUMPER 563 re-used 7 (FILL) internally for that
purpose.
*/
/*
Data portion apparently unused
*/
/* 5 bytes per 36-bit word */
/* 518 word logical blocks */
#define TAPEBLK 518*5 /* Size of one logical block */
/* Checksum is first word */
#define WdoffChecksum 0
#define BtoffChecksum 0
#define BtlenChecksum 36
/* Page access bits is second word */
#define WdoffAccess 1
#define BtoffAccess 0
#define BtlenAccess 36
/* SCD, first 3 bits in next word */
#define WdoffSCD 2
#define BtoffSCD 0
#define BtlenSCD 3
/* Number of saveset on tape */
#define WdoffSaveSetNum 2
#define BtoffSaveSetNum 3
#define BtlenSaveSetNum 15
/* Tape number of dump */
#define WdoffTapeNum 2
#define BtoffTapeNum 18
#define BtlenTapeNum 18
/* F1, F2 Flag bits */
#define WdoffF1F2 3
#define BtoffF1F2 0
#define BtlenF1F2 2
/* File Number in Set (new format only) */
#define WdoffFileNum 3
#define BtoffFileNum 2
#define BtlenFileNum 16
/* Page Number in file */
#define WdoffPageNum 3
#define BtoffPageNum 18
#define BtlenPageNum 18
/* Record type (2's complement) */
#define WdoffRectype 4
#define BtoffRectype 0
#define BtlenRectype 36
/* Record sequence number */
#define WdoffRecseq 5
#define BtoffRecseq 0
#define BtlenRecseq 36
#define RecHdrlen 6 /* # words in logical record header */
/* SCD Values */
#define SCDNormal 0
#define SCDCollection 1
#define SCDArchive 2
#define SCDMigration 3
/* F1, F2 Values */
#define F1F2Old 0
#define F1F2OldContinue 3
#define F1F2New 1
#define F1F2NewContinue 2
/* Record type values */
#define RectypeData 0
#define RectypeTphd 1
#define RectypeFlhd 2
#define RectypeFltr 3
#define RectypeTptr 4
#define RectypeUsr 5
#define RectypeCtph 6
#define RectypeFill 7
#define RectypeTonext 8 /* V6: "to next tape" */
char *rectypes[] = {
"DATA",
"ISSH",
"FLHD",
"FLTR",
"TPTR",
"UDIR",
"CSSH",
"FILL",
"NEXT"
};
#define BtoffWord 0
#define BtlenWord 36
/* Word offsets for saveset header data (Record types 1, 6) */
#define WdoffSSFormat RecHdrlen+0 /* Saveset format (DUMPER fmt) */
#define WdoffSSNamoff RecHdrlen+1 /* Saveset name offset */
#define WdoffSSDate RecHdrlen+2 /* Saveset date (TAD) */
#define WdoffFLName 6 /* Filename offset (type 2) */
#define WdoffFDB 134 /* FDB offset (type 2) */
#define WdoffFDB_CTL 01+WdoffFDB /* Control word .FBCTL */
#define BtoffFDB_Arc 11 /* archived */
#define BtlenFDB_Arc 1
#define BtoffFDB_Inv 12 /* invisible */
#define BtlenFDB_Inv 1
#define BtoffFDB_Off 13 /* offline */
#define BtlenFDB_Off 1
#define WdoffFDB_PRT 04+WdoffFDB /* protection */
#define BtoffFDB_PRT 18
#define BtlenFDB_PRT 18
#define WdoffFDB_BSZ 011+WdoffFDB /* Number of bits per byte */
#define BtoffFDB_BSZ 6
#define BtlenFDB_BSZ 6
#define WdoffFDB_PGC 011+WdoffFDB /* Number of pages in the file */
#define BtoffFDB_PGC 18
#define BtlenFDB_PGC 18
#define WdoffFDB_Size 012+WdoffFDB /* Number of bytes in the file */
#define BtoffFDB_Size 0
#define BtlenFDB_Size 36
#define WdoffFDB_Wrt 014+WdoffFDB /* Date of last write to file */
#define WdoffFDB_Ref 015+WdoffFDB /* read time */
#define WdoffFDB_PGC_A 022+WdoffFDB /* Pagecount before archive */
#define WdoffFDB_TP1 033+WdoffFDB /* Tape ID for archive run 1 */
#define WdoffFDB_SS1 034+WdoffFDB /* Saveset # for archive run 1 */
#define BtoffFDB_SS 0
#define BtlenFDB_SS 18
#define WdoffFDB_TF1 034+WdoffFDB /* Tape file # for archive run 1 */
#define BtoffFDB_TF 18
#define BtlenFDB_TF 18
#define WdoffFDB_TP2 035+WdoffFDB /* Tape ID for archive run 2 */
#define WdoffFDB_SS2 036+WdoffFDB /* Saveset # for archive run 2 */
#define WdoffFDB_TF2 036+WdoffFDB /* Tape file # for archive run 2 */

1536
contrib/read20/read20.c Normal file

File diff suppressed because it is too large Load Diff

28
contrib/supdup/COPYING Normal file
View File

@ -0,0 +1,28 @@
Date: Wed, 03 Oct 2001 14:17:49 -0400
From: dab@froghouse.org
To: klh@alum.mit.edu
Message-ID: <87y9msy4du.wl@ariki.froghouse.org>
At Wed, 3 Oct 2001 11:43:45 EDT,
Ken Harrenstien <klh@panix.com> wrote:
> Dave, any problems with redistributing this code, or some version of
> supdup, along with the KLH10 distribution? You have the original
> copyright even if it's not explicitly stated. It is probably a good
> idea to add something that clearly says what rights others have (GPL
> or whatever). I can send you the latest if you like.
If I'd thought about it at the time I probably would have used the old
MIT copyright, the same that we put on PC/IP and the C Gateway.
From what I hear, not having actually looked into any of this, the BSD
copyright is pretty much the same thing.
Anyway, you're certainly welcome to redistribute the code as far as
I'm concerned.
Oh, I remember now why I didn't put a copyright on it. It was because
I used the BSD telnet sources as a starting point for the supdup
programs and the BSD code was not free at the time. Not very much
telnet code survived in the end but it is where I started from.
-Dave

32
contrib/supdup/INFO Normal file
View File

@ -0,0 +1,32 @@
This file contains information on know problems, bugs, and misfeatures of
supdup, as well as any other random pieces of information that need to
be somewhere.
SUPDUPD needs a new /bin/login because the standard login trashes the
environment. The /bin/login that we use is included. The only
requirement is that the TERMCAP (and TERMINFO if you're using it) gets
passed through as well as the TERM environment variable.
The server should do the same optimization with character insert and
delete that it does with line insert and delete.
I probably should make use of scroll regions. But this is a pain.
If TTYLOC is defined, then the SUPDUP location feature uses Romkey's
ttyloc code. This could easily be replaced by whatever your
particular machine does about tty location, or left out all together
of course. The user supdup doesn't yet send TTYLOC information.
The banner should tell you to turn off overstrike if necessary.
3600's have this bug where if you position the cursor at the beginning
of the line and do a newline, the first character of the line is erased.
I have programmed around this bug to some extent, but it sometimes
reappears. They also have a bug that if you type a meta character the
character that gets sent is shifted and if you type meta shift character
it sends a lowercase character. There is nothing I can do about this.
For some reason talk, amoung a few other things, core dumps when
supduping in from a lisp machine (either a 3600 or a cadr). I've seen
the same bug a BBN bitgraph. It seems to be a bug with programs which
use curses and is evoked by large screen sizes.

44
contrib/supdup/Makefile Normal file
View File

@ -0,0 +1,44 @@
# Makefile for the supdup server and user.
# Definitions for supdupd.
# TERMINFO Does setup for terminfo.
# TTYLOC Sets your ttyloc from supdup. The code included is specific
# to borax. You would probably want to replace the code in
# those sections with whatever you do locally for ttyloc.
# BANNER
# SBANNER
# DEBUG
#
# Definitions for supdup.
# TERMCAP Uses the termcap database.
# TERMINFO Uses the terminfo database. Exactly one of TERMCAP or
# TERMINFO must be defined and the corresponding library
# (-ltermcap or -lterminfo) must be linked in.
# DEBUG
# This printf string is send as the supdup server's greeting.
# Its `arguments' are the local and remote host names.
# It should output ASCII
sbanner = "%s SUPDUP from %s.\r\nBugs to bug-unix-supdup@ai.mit.edu"
# This printf string is sent before /bin/login is invoked.
# Its `argument' is the local host name.
# It should output SUPDUP codes (eg #o207 rather than #o15 #o10 for newline)
banner ="SunOS Unix (%s)\207%s"
#Uncomment next line if your host isn't running in the ancient past
#lresolv = -lresolv
lresolv =
all: supdup supdupd supdup-login
supdup: supdup.c termcaps.h
cc -g -o supdup -DTERMCAP supdup.c -ltermcap ${lresolv}
supdupd: supdupd.c supdup.h
cc -g -o supdupd supdupd.c ${lresolv} '-DBANNER=${banner}' '-DSBANNER=${sbanner}' -DMIT -DTTYLOC -DKEEPALIVE -DBSD4_3
#in.supdupd: supdupd
supdup-login: supdup-login.c
cc -g -o supdup-login supdup-login.c

1
contrib/supdup/sd.tc Normal file
View File

@ -0,0 +1 @@
setenv TERMCAP 'SD|supdup|SUPDUP virtual terminal:co#132:li#52:am:vb=\177\023:nd=\177\020:MT:cl=\177\022:so=\177\031:se=\177\032:pt:ce=\177\005:ec=\177\006:cd=\175\004:bs:up=\177\041:cm=\177\021%+ %+ :do=\177\014:nl=\177\014:al=\177\025\001:dl=\177\026\001:AL=\177\025%.:DL=\177\026%.:ns:km:pc=\000'

View File

@ -0,0 +1,676 @@
/* Lucid changes and supdup changes merged into
vanilla quotaless sun /bin/login by Mly 9-Jul-87 16:17:01
supdup changes:
pass on envvar TERMCAP if TERM is "supdup"
lucid changes (kdo):
disconnect after > 5 failed login attempts
always prompt for password when insecure login
if compiled with -DPARANOIA, disallows passwords
of length < 6 when insecure !!!!! This includes
null passwords.
*/
/*
* login [ name ]
* login -r hostname (for rlogind)
* login -h hostname (for telnetd, etc.)
*/
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <fcntl.h>
#include <sgtty.h>
#include <utmp.h>
#include <signal.h>
#include <pwd.h>
#include <stdio.h>
#include <lastlog.h>
#include <errno.h>
#include <syslog.h>
#define SCPYN(a, b) strncpy(a, b, sizeof(a))
#define NMAX sizeof(utmp.ut_name)
#define FALSE 0
#define TRUE -1
char QUOTAWARN[] = "/usr/ucb/quota"; /* warn user about quotas */
char CANTRUN[] = "login: Can't run ";
char nolog[] = "/etc/nologin";
char qlog[] = ".hushlogin";
char securetty[] = "/etc/securetty";
char maildir[30] = "/usr/spool/mail/";
char lastlog[] = "/usr/adm/lastlog";
struct passwd nouser = {"", "nope", -1, -1, -1, "", "", "", "" };
struct sgttyb ttyb;
struct utmp utmp;
char minusnam[16] = "-";
/*
* This bounds the time given to login. We initialize it here
* so it can be patched on machines where it's too small.
*/
int timeout = 60;
char homedir[64] = "HOME=";
char shell[64] = "SHELL=";
char term[64] = "TERM=";
char user[20] = "USER=";
char logname[23] = "LOGNAME=";
/* NOTE WELL extra zero at the end of envinit
they are for possible TERMCAP */
char *envinit[] =
{ homedir, shell,
"PATH=:/usr/ucb:/bin:/usr/bin",
user, logname,
term,
/* May be filled in by TERMCAP */
0,
0 };
#define LOG_SECURITY LOG_CRIT
struct passwd *pwd;
struct passwd *getpwnam();
char *strcat(), *rindex(), *index();
int setpwent();
int timedout();
char *ttyname();
char *crypt();
char *getpass();
char *stypeof();
extern char **environ;
extern int errno;
struct tchars tc = {
CINTR, CQUIT, CSTART, CSTOP, CEOT, CBRK
};
struct ltchars ltc = {
CSUSP, CDSUSP, CRPRNT, CFLUSH, CWERASE, CLNEXT
};
int rflag;
char rusername[NMAX+1], lusername[NMAX+1];
char rpassword[NMAX+1];
char name[NMAX+1];
char *rhost;
main(argc, argv)
char *argv[];
{
register char *namep;
int t, f, c, i;
int invalid, quietlog;
/* loseit */
int ttysecure = 0;
/* loseit */
FILE *nlfd;
char *ttyn, *tty;
int ldisc = NTTYDISC, zero = 0;
int locl = LCRTBS|LCTLECH|LDECCTQ;
signal(SIGALRM, timedout);
alarm(timeout);
signal(SIGQUIT, SIG_IGN);
signal(SIGINT, SIG_IGN);
setpriority(PRIO_PROCESS, 0, 0);
for (t = getdtablesize(); t > 3; t--)
close(t);
/*
* -r is used by rlogind to cause the autologin protocol;
* -h is used by other servers to pass the name of the
* remote host to login so that it may be placed in utmp and wtmp
*/
if (argc > 1) {
if (strcmp(argv[1], "-r") == 0) {
rflag = doremotelogin(argv[2]);
SCPYN(utmp.ut_host, argv[2]);
argc = 0;
}
if (strcmp(argv[1], "-h") == 0 && getuid() == 0) {
SCPYN(utmp.ut_host, argv[2]);
argc = 0;
}
}
ioctl(0, TIOCLSET, &zero);
ioctl(0, TIOCNXCL, 0);
ioctl(0, FIONBIO, &zero);
ioctl(0, FIOASYNC, &zero);
ioctl(0, TIOCGETP, &ttyb);
/*
* If talking to an rlogin process,
* propagate the terminal type and
* baud rate across the network.
*/
if (rflag)
doremoteterm(term, &ttyb);
if (ttyb.sg_ospeed >= B1200)
locl |= LCRTERA|LCRTKIL;
ioctl(0, TIOCLSET, &locl);
ioctl(0, TIOCSLTC, &ltc);
ioctl(0, TIOCSETC, &tc);
ioctl(0, TIOCSETP, &ttyb);
ttyn = ttyname(0);
if (ttyn == (char *)0)
ttyn = "/dev/tty??";
tty = rindex(ttyn, '/');
if (tty == NULL)
tty = ttyn;
else
tty++;
/* loseit */
t = 0;
/* loseit */
do {
ldisc = 0;
ioctl(0, TIOCSETD, &ldisc);
invalid = FALSE;
SCPYN(utmp.ut_name, "");
/*
* Name specified, take it.
*/
if (argc > 1) {
SCPYN(utmp.ut_name, argv[1]);
argc = 0;
}
/*
* If remote login take given name,
* otherwise prompt user for something.
*/
if (rflag) {
SCPYN(utmp.ut_name, lusername);
/* autologin failed, prompt for passwd */
if (rflag == -1)
rflag = 0;
} else
getloginname(&utmp);
if (!strcmp(pwd->pw_shell, "/bin/csh")) {
ldisc = NTTYDISC;
ioctl(0, TIOCSETD, &ldisc);
}
/*
* If no remote login authentication and
* a password exists for this user, prompt
* for one and verify it.
*/
/* loseit */
ttysecure = rootterm(tty); /* See if tty believed secure */
/* loseit */
if (!rflag && (*pwd->pw_passwd != '\0'
/* loseit */
/* Always prompt for password if insecure */
|| !ttysecure
/* loseit */
)) {
char *pp;
setpriority(PRIO_PROCESS, 0, -4);
pp = getpass("Password:");
namep = crypt(pp, pwd->pw_passwd);
setpriority(PRIO_PROCESS, 0, 0);
/* loseit */
#ifdef PARANOIA
/* If not secure check that password is long enough
and don't allow no-password logins */
if (!ttysecure) {
if (strlen(pp)<6) invalid = TRUE;
if (*pwd->pw_passwd == '\0') invalid = TRUE;
}
#endif /* loseit PARANOIA */
if (strcmp(namep, pwd->pw_passwd))
invalid = TRUE;
}
/*
* If user not super-user, check for logins disabled.
*/
if (pwd->pw_uid != 0 && (nlfd = fopen(nolog, "r")) > 0) {
while ((c = getc(nlfd)) != EOF)
putchar(c);
fflush(stdout);
sleep(5);
exit(0);
}
/*
* If valid so far and root is logging in,
* see if root logins on this terminal are permitted.
*/
if (!invalid && pwd->pw_uid == 0 &&
!ttysecure) {
syslog(LOG_SECURITY, "ROOT LOGIN REFUSED %s", tty);
invalid = TRUE;
}
if (invalid) {
printf("Login incorrect\n");
/* loseit */
if (++t >= 5)
{
syslog(LOG_SECURITY,
"REPEATED LOGIN FAILURES %s, %s",
tty, utmp.ut_name);
ioctl(0, TIOCHPCL, (struct sgttyb *) 0);
close(0), close(1), close(2);
sleep(10);
exit(1);
}
/* loseit */
}
if (*pwd->pw_shell == '\0')
pwd->pw_shell = "/bin/sh";
if (chdir(pwd->pw_dir) < 0 && !invalid ) {
if (chdir("/") < 0) {
printf("No directory!\n");
invalid = TRUE;
} else {
printf("No directory! %s\n",
"Logging in with home=/");
pwd->pw_dir = "/";
}
}
/*
* Remote login invalid must have been because
* of a restriction of some sort, no extra chances.
*/
if (rflag && invalid)
exit(1);
} while (invalid);
/* committed to login turn off timeout */
alarm(0);
time(&utmp.ut_time);
t = ttyslot();
if (t > 0 && (f = open("/etc/utmp", O_WRONLY)) >= 0) {
lseek(f, (long)(t*sizeof(utmp)), 0);
SCPYN(utmp.ut_line, tty);
write(f, (char *)&utmp, sizeof(utmp));
close(f);
}
if (t > 0 && (f = open("/usr/adm/wtmp", O_WRONLY|O_APPEND)) >= 0) {
write(f, (char *)&utmp, sizeof(utmp));
close(f);
}
quietlog = access(qlog, F_OK) == 0;
if ((f = open(lastlog, O_RDWR)) >= 0) {
struct lastlog ll;
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
if (read(f, (char *) &ll, sizeof ll) == sizeof ll &&
ll.ll_time != 0 && !quietlog) {
printf("Last login: %.*s ",
24-5, (char *)ctime(&ll.ll_time));
if (*ll.ll_host != '\0')
printf("from %.*s\n",
sizeof (ll.ll_host), ll.ll_host);
else
printf("on %.*s\n",
sizeof (ll.ll_line), ll.ll_line);
}
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
time(&ll.ll_time);
SCPYN(ll.ll_line, tty);
SCPYN(ll.ll_host, utmp.ut_host);
write(f, (char *) &ll, sizeof ll);
close(f);
}
chown(ttyn, pwd->pw_uid, pwd->pw_gid);
chmod(ttyn, 0622);
setgid(pwd->pw_gid);
strncpy(name, utmp.ut_name, NMAX);
name[NMAX] = '\0';
initgroups(name, pwd->pw_gid);
setuid(pwd->pw_uid);
strncat(homedir, pwd->pw_dir, sizeof(homedir)-6);
strncat(shell, pwd->pw_shell, sizeof(shell)-7);
if (term[strlen("TERM=")] == 0)
strncat(term, stypeof(ttyn), sizeof(term)-6);
strncat(user, pwd->pw_name, sizeof(user)-6);
strncat(logname, pwd->pw_name, sizeof(user)-9);
environ = envinit;
if ((namep = rindex(pwd->pw_shell, '/')) == NULL)
namep = pwd->pw_shell;
else
namep++;
strcat(minusnam, namep);
umask(022);
if (tty[sizeof("tty")-1] == 'd')
syslog(LOG_INFO, "DIALUP %s, %s", tty, pwd->pw_name);
if (pwd->pw_uid == 0)
syslog(LOG_SECURITY, "ROOT LOGIN %s", tty);
if (!quietlog) {
int pid, w;
struct stat st;
showmotd();
strcat(maildir, pwd->pw_name);
if (stat(maildir, &st) == 0 && st.st_size != 0)
printf("You have %smail.\n",
(st.st_mtime > st.st_atime) ? "new " : "");
if ((pid = vfork()) == 0) {
execl(QUOTAWARN, QUOTAWARN, (char *)0);
write(2, CANTRUN, sizeof(CANTRUN));
_perror(QUOTAWARN);
_exit(127);
} else if (pid == -1) {
fprintf(stderr, CANTRUN);
perror(QUOTAWARN);
} else {
while ((w = wait((int *)NULL)) != pid && w != -1)
;
}
}
signal(SIGALRM, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
signal(SIGINT, SIG_DFL);
signal(SIGTSTP, SIG_IGN);
execlp(pwd->pw_shell, minusnam, (char *)0);
perror(pwd->pw_shell);
printf("No shell\n");
exit(0);
}
getloginname(up)
register struct utmp *up;
{
register char *namep;
char c;
while (up->ut_name[0] == '\0') {
namep = up->ut_name;
printf("login: ");
while ((c = getchar()) != '\n') {
if (c == ' ')
c = '_';
if (c == EOF)
exit(0);
if (namep < up->ut_name+NMAX)
*namep++ = c;
}
}
strncpy(lusername, up->ut_name, NMAX);
lusername[NMAX] = 0;
setpwent();
if ((pwd = getpwnam(lusername)) == NULL)
pwd = &nouser;
endpwent();
}
timedout()
{
printf("Login timed out after %d seconds\n", timeout);
exit(0);
}
int stopmotd;
catch()
{
signal(SIGINT, SIG_IGN);
stopmotd++;
}
rootterm(tty)
char *tty;
{
register FILE *fd;
char buf[100];
if ((fd = fopen(securetty, "r")) == NULL)
return(1);
while (fgets(buf, sizeof buf, fd) != NULL) {
buf[strlen(buf)-1] = '\0';
if (strcmp(tty, buf) == 0) {
fclose(fd);
return(1);
}
}
fclose(fd);
return(0);
}
showmotd()
{
FILE *mf;
register c;
signal(SIGINT, catch);
if ((mf = fopen("/etc/motd","r")) != NULL) {
while ((c = getc(mf)) != EOF && stopmotd == 0)
putchar(c);
fclose(mf);
}
signal(SIGINT, SIG_IGN);
}
#undef UNKNOWN
#define UNKNOWN "su"
char *
stypeof(ttyid)
char *ttyid;
{
static char typebuf[16];
char buf[50];
register FILE *f;
register char *p, *t, *q;
if (ttyid == NULL)
return (UNKNOWN);
/*
* CJL's kludge to make supdup win: If TERM is supdup,
* preserve TERM and TERMCAP. SUPDUP sets them up the right way.
*/
t = (char *) getenv("TERM");
if (t && !strcmp ("supdup", t))
{
p = (char *) getenv ("TERMCAP");
if (p)
{
char **ep;
for (ep = envinit; *ep; ep++);
*ep = p-strlen("TERMCAP=");
}
return (t);
}
f = fopen("/etc/ttytype", "r");
if (f == NULL)
return (UNKNOWN);
/* split off end of name */
for (p = q = ttyid; *p != 0; p++)
if (*p == '/')
q = p + 1;
/* scan the file */
while (fgets(buf, sizeof buf, f) != NULL) {
for (t = buf; *t != ' ' && *t != '\t'; t++)
if (*t == '\0')
goto next;
*t++ = 0;
while (*t == ' ' || *t == '\t')
t++;
for (p = t; *p > ' '; p++)
;
*p = 0;
if (strcmp(q,t) == 0) {
strcpy(typebuf, buf);
fclose(f);
return (typebuf);
}
next: ;
}
fclose (f);
return (UNKNOWN);
}
doremotelogin(host)
char *host;
{
FILE *hostf;
int first = 1;
char domain[256];
if (getdomainname(domain, sizeof(domain)) < 0) {
fprintf(stderr, "login: getdomainname system call missing\n");
goto bad;
}
getstr(rusername, sizeof (rusername), "remuser");
getstr(lusername, sizeof (lusername), "locuser");
getstr(term+5, sizeof(term)-5, "Terminal type");
if (getuid()) {
pwd = &nouser;
goto bad;
}
setpwent();
pwd = getpwnam(lusername);
endpwent();
if (pwd == NULL) {
pwd = &nouser;
goto bad;
}
hostf = pwd->pw_uid ? fopen("/etc/hosts.equiv", "r") : 0;
again:
if (hostf) {
char ahost[32];
int hostmatch, usermatch;
while (fgets(ahost, sizeof (ahost), hostf)) {
char *user;
if ((user = index(ahost, '\n')) != 0)
*user++ = '\0';
if ((user = index(ahost, ' ')) != 0)
*user++ = '\0';
if (ahost[0] == '+' && ahost[1] == 0)
hostmatch = 1;
else if (ahost[0] == '+' && ahost[1] == '@')
hostmatch = innetgr(ahost + 2, host,
(char *)NULL, domain);
else if (ahost[0] == '-' && ahost[1] == '@') {
if (innetgr(ahost+2, host, (char *)NULL,
domain))
break;
}
else if (ahost[0] == '-') {
if (!strcmp(host, ahost+1))
break;
}
else
hostmatch = !strcmp(host, ahost);
if (user) {
if (user[0] == '+' && user[1] == 0)
usermatch = 1;
else if (user[0] == '+' && user[1] == '@')
usermatch = innetgr(user+2, (char *)NULL,
rusername, domain);
else if (user[0] == '-' && user[1] == '@') {
if (innetgr(user+2, (char *)NULL,
rusername, domain))
break;
}
else if (user[0] == '-') {
if (!strcmp(user+1, rusername))
break;
}
else
usermatch = !strcmp(user, rusername);
}
else
usermatch = !strcmp(rusername, lusername);
if (hostmatch && usermatch) {
fclose(hostf);
return (1);
}
}
fclose(hostf);
}
if (first == 1) {
char *rhosts = ".rhosts";
struct stat sbuf;
first = 0;
if (chdir(pwd->pw_dir) < 0)
goto again;
if (lstat(rhosts, &sbuf) < 0)
goto again;
if ((sbuf.st_mode & S_IFMT) == S_IFLNK) {
printf("login: .rhosts is a soft link.\r\n");
goto bad;
}
hostf = fopen(rhosts, "r");
fstat(fileno(hostf), &sbuf);
if (sbuf.st_uid && sbuf.st_uid != pwd->pw_uid) {
printf("login: Bad .rhosts ownership.\r\n");
fclose(hostf);
goto bad;
}
goto again;
}
bad:
return (-1);
}
getstr(buf, cnt, err)
char *buf;
int cnt;
char *err;
{
char c;
do {
if (read(0, &c, 1) != 1)
exit(1);
if (--cnt < 0) {
printf("%s too long\r\n", err);
exit(1);
}
*buf++ = c;
} while (c != 0);
}
char *speeds[] =
{ "0", "50", "75", "110", "134", "150", "200", "300",
"600", "1200", "1800", "2400", "4800", "9600", "19200", "38400" };
#define NSPEEDS (sizeof (speeds) / sizeof (speeds[0]))
doremoteterm(term, tp)
char *term;
struct sgttyb *tp;
{
char *cp = index(term, '/');
register int i;
if (cp) {
*cp++ = 0;
for (i = 0; i < NSPEEDS; i++)
if (!strcmp(speeds[i], cp)) {
tp->sg_ispeed = tp->sg_ospeed = i;
break;
}
}
tp->sg_flags = ECHO|CRMOD|ANYP|XTABS;
}
#ifdef 0
/* Use syslog instead */
logerr(fmt, a1, a2, a3)
char *fmt, *a1, *a2, *a3;
{
#ifdef LOGERR
FILE *cons = fopen("/dev/console", "w");
if (cons != NULL) {
fprintf(cons, fmt, a1, a2, a3);
fprintf(cons, "\n\r");
fclose(cons);
}
#endif
}
#endif /* 0 */

1723
contrib/supdup/supdup.c Normal file

File diff suppressed because it is too large Load Diff

111
contrib/supdup/supdup.h Normal file
View File

@ -0,0 +1,111 @@
/*
* Characters output from user programs are checked for \b, \r, and \n.
* These are translated into SUPDUP cursor movement. Thus this disallows
* the use of these 3 SAIL characters.
* SUPDUP display codes are passed through, but looked at to determine
* the current cursor position. This is necessary for simulating \b, \n, \r
* and the TDBS and TDUP fake SUPDUP codes supplied in the termcap entries.
* Input from the network is checked for ITP escapes, mainly for bucky
* bits and terminal location string.
*/
/* Losing unix doesn't know about the -real- control bit
* there should be some way to conditionalize this on the basis
* of %TOFCI -- except that the existing supdup server loses this information!
* It isn't clear-cut what to do in the server, as %tofci means that the user
* can generate full 9-bit MIT characters, which isn't what the `km' termcap
* flag means. On the other hand, being able to generate 8-bit characters
* (which is sort of what `km' is) isn't the same as %tofci.
* I think the problem is fundamental and cultural and irresolvable.
* unix supdup server uses 0237 as a control escape.
* c-a 001
* m-a 341
* c-m-a 201
* c-1 237 061
* m-1 261
* c-m-1 237 261
* c-m-_ 237 237
*/
/*
* Since various parts of UNIX just can't hack the 0200 bit, we define
* a fake lead-in escape - 0177, to avoid a sail graphic that is used
* sometimes...
*/
#define KLUDGE_ESCAPE 0177
/* ITP bits (from the 12-bit character set */
#define ITP_ASCII 00177 /* ascii part of character */
#define ITP_CTL 00200 /* CONTROL key depressed */
#define ITP_MTA 00400 /* META key depressed */
#define ITP_TOP 04000 /* TOP key depressed */
#define CTL_PREFIX 0237 /* c-m-_ is control prefix */
#define ITP_CHAR(char1,char2) (((char1 & 037) << 7) + char2)
#define ITP_ESCAPE 034 /* ITS ITP codes follow */
#define ITP_CURSORPOS 020 /* user sends vpos/hpos */
#define ITP_FLOW_CONTROL_START 032 /* Set buffer to zero -- ignored */
#define ITP_FLOW_CONTROL_INCREASE 001 /* increase buffer size -- ignored */
#define ITP_FLOW_CONTROL_END 009 /* Set buffer to infinity -- ignored */
#define ITP_PIATY 003 /* user says her screen is messed-up
we don't (can't) hack this */
#define ITP_STOP_OUTPUT 023 /* Ignore it */
#define ITP_RESTART_OUTPUT 022 /* Ignore it */
#define ASCII_CTL_MASK ~(0177-037)
#define ASCII_ESCAPE 033
#define ASCII_PART(char) (char & ITP_ASCII)
#define SUPDUP_ESCAPE 0300
#define SUPDUP_LOGOUT 0301
#define SUPDUP_LOCATION 0302
#define SUPDUP_ESCAPE_KEY 04101
#define SUPDUP_SUSPEND_KEY 04102
#define SUPDUP_CLEAR_KEY 04103
#define SUPDUP_HELP_KEY 04110
#define TDMOV 0200
#define TDMV1 0201 /* not defined in supdup spec AIM 644 */
#define TDEOF 0202
#define TDEOL 0203
#define TDDLF 0204
#define TDCRL 0207
#define TDNOP 0210
#define TDBS 0211 /* not defined in supdup spec AIM 644 */
#define TDLF 0212 /* not defined in supdup spec AIM 644 */
#define TDCR 0213 /* not defined in supdup spec AIM 644 */
#define TDORS 0214
#define TDQOT 0215
#define TDFS 0216
#define TDMV0 0217
#define TDCLR 0220
#define TDBEL 0221
#define TDILP 0223
#define TDDLP 0224
#define TDICP 0225
#define TDDCP 0226
#define TDBOW 0227
#define TDRST 0230
#define TDGRF 0231
#define TDSCU 0232 /* Scroll region up */
#define TDSCD 0233 /* Scroll region down */
#define TDUP 0237 /* Interpreted locally, not in supdup spec at all */
/* These variables are set at initial connection time */
char ttyopt[6];
#define TOERS (ttyopt[0] & 4) /* Terminal can erase */
#define TOMVB (ttyopt[0] & 1) /* can move backwards */
#define TOOVR (ttyopt[1] & 010) /* Over printing */
#define TOMVU (ttyopt[1] & 4) /* can move up */
#define TOFCI (ttyopt[2] & 010) /* Terminal can transmit full 12-bit MIT ascii */
#define TOLID (ttyopt[2] & 2) /* Line insert/delete */
#define TOCID (ttyopt[2] & 1) /* Character insert/delete */
#define TOSA1 (ttyopt[1] & 020) /* send SAIL characters direct */
#define TOMOR (ttyopt[1] & 2) /* Do more processing */
#define TOROL (ttyopt[1] & 1) /* Do scrolling */
#define TPPRN (ttyopt[4] & 2) /* Swap parens and brackets (ignored)*/
short ttyrol; /* How much the terminal scrolls by */

2160
contrib/supdup/supdup.mss Normal file

File diff suppressed because it is too large Load Diff

1487
contrib/supdup/supdupd.c Normal file

File diff suppressed because it is too large Load Diff

171
contrib/supdup/termcap.h Normal file
View File

@ -0,0 +1,171 @@
/*
* termcap.h -- definitions of the variables in which
* the termcap info is kept
*/
#define TCAPDEFS \
TCFLG(am, "has automatic margins"),\
TCFLG(bs, "has ^H backspace"),\
TCFLG(hc, "hardcopy term"),\
TCFLG(km, "has meta key"),\
TCFLG(mi, "safe to move in insert mode"),\
TCFLG(nc, "no working CR"),\
TCFLG(pt, "has hardware tabs"),\
TCFLG(ul, "underscore can overstrike"),\
TCFLG(ns, "wraps rather than scrolls"),\
TCFLG(MT, "has meta key (xterm)"),\
\
TCSTR(al, "Add new blank line"),\
TCSTR(le, "Move back one position"),\
TCSTR(bt, "Back tab"),\
TCSTR(cd, "Clear to end of display"),\
TCSTR(ce, "Clear to end of line"),\
TCSTR(ch, "Like CM but horizontal motion only"),\
TCSTR(cl, "Clear screen"),\
TCSTR(cm, "Cursor motion"),\
TCSTR(cr, "Carriage return (default '^M')"),\
TCSTR(cs, "Change scrolling region (vt100), like CM"),\
TCSTR(cv, "Like CM but vertical only"),\
TCSTR(dc, "Delete character"),\
TCSTR(dl, "Delete line"),\
TCSTR(dm, "Delete mode"),\
TCSTR(do, "Down one line"),\
TCSTR(ed, "End delete mode"),\
TCSTR(ei, "End insert mode"),\
TCSTR(ho, "Home cursor"),\
TCSTR(ic, "Insert character"),\
TCSTR(im, "Insert mode (enter)"),\
TCSTR(is, "Terminal initialization string"),\
TCSTR(ll, "Last line, first column"),\
TCSTR(nd, "Non-destructive space (cursor right)"),\
TCSTR(nw, "Newline (behave like CR + LF)"),\
TCSTR(pc, "Pad character"),\
TCSTR(sf, "Scroll forward"),\
TCSTR(sr, "Scroll reverse"),\
TCSTR(ta, "Tab (other than '^I' or with padding)"),\
TCSTR(te, "String to end programs that use CM"),\
TCSTR(ti, "String to begin programs that use CM"),\
TCSTR(up, "Upline (cursor up)"),\
TCSTR(vb, "Visible bell"),\
TCSTR(ve, "Sequence to end open/visual mode"),\
TCSTR(vs, "Sequence to start open/visual mode"),\
TCSTR(se, "End standout mode"),\
TCSTR(so, "Begin standout mode"),\
TCSTR(DC, "Delete n characters"),\
TCSTR(IC, "Insert n characters"),\
TCSTR(DL, "Delete n lines"),\
TCSTR(AL, "xInsert n lines),\"
\
TCNUM(co, "Number of columns in a line"),\
TCNUM(dB, "Backspace delay"),\
TCNUM(dC, "Carriage return delay"),\
TCNUM(dN, "Newline delay"),\
TCNUM(dT, "Tab delay "),\
TCNUM(li, "Number of lines on screen")
enum tcaps {
#define TCSTR(tc,comm) TC_##tc##_s
#define TCNUM(tc,comm) TC_##tc##_n
#define TCFLG(tc,comm) TC_##tc##_f
TCAPDEFS
#undef TCSTR
#undef TCNUM
#undef TCFLG
};
/* Actually declare the vars now */
#define TCSTR(tc,comm) static char *TC_##tc##_s = NULL;
#define TCNUM(tc,comm) static int TC_##tc##_n = 0;
#define TCFLG(tc,comm) static int TC_##tc##_f = 0;
TCAPDEFS
#undef TCSTR
#undef TCNUM
#undef TCFLG
struct tcent {
char *tcname;
int tctyp;
void *tcval;
};
struct tcent tcaptab[] = {
#define TCSTR(tc,comm) {#tc, TCTYP_STR, (void *)&TC_##tc##_s}
#define TCNUM(tc,comm) {#tc, TCTYP_NUM, (void *)&TC_##tc##_n}}
#define TCFLG(tc,comm) {#tc, TCTYP_FLG, (void *)&TC_##tc##_f}}
TCAPDEFS
#undef TCSTR
#undef TCNUM
#undef TCFLG
}
#define TCSTR(tc) (TC_##tc##_s)
#define TCNUM(tc) (TC_##tc##_n)
#define TCFLG(tc) (TC_##tc##_f)
#define auto_right_margin TCFLG(am) /* Terminal has automatic margins */
#define BS TCFLG(bs) /* Terminal can backspace with '^H' */
#define hard_copy TCFLG(hc) /* Hardcopy terminal */
#define has_meta_key TCFLG(km) /* Has meta key */
#define move_insert_mode TCFLG(mi) /* Safe to move while in insert mode */
#define NC TCFLG(nc) /* No correctly working carriage ret */
#define PT TCFLG(pt) /* Has hardware tabs */
#define transparent_underline TCFLG(ul) /* '_' overstrikes */
#define no_scroll TCFLG(ns) /* Wraps rather than scrolls */
#define also_has_meta_key TCFLG(MT) /* KLH: Another flag for meta key */
/* (xterm is fond of this one) */
#define insert_line TCSTR(al) /* Add new blank line */
#define cursor_left TCSTR(le) /* Move back one position */
#define back_tab TCSTR(bt) /* Back tab */
#define clr_eos TCSTR(cd) /* Clear to end of display */
#define clr_eol TCSTR(ce) /* Clear to end of line */
#define CH TCSTR(ch) /* Like CM but horiz motion only */
#define clear_screen TCSTR(cl) /* Clear screen */
#define cursor_address TCSTR(cm) /* Cursor motion */
#define carriage_return TCSTR(cr) /* Carriage return (default '^M') */
#define CS TCSTR(cs) /* Change scrolling region (vt100), like CM */
#define CV TCSTR(cv) /* Like CM but vertical only */
#define delete_character TCSTR(dc) /* Delete character */
#define delete_line TCSTR(dl) /* Delete line */
#define DM TCSTR(dm) /* Delete mode */
#define cursor_down TCSTR(do) /* Down one line */
#define ED TCSTR(ed) /* End delete mode */
#define EI TCSTR(ei) /* End insert mode */
#define cursor_home TCSTR(ho) /* Home cursor */
#define insert_character TCSTR(ic) /* Insert character */
#define IM TCSTR(im) /* Insert mode (enter) */
#define IS TCSTR(is) /* Terminal initialization string */
#define LL TCSTR(ll) /* Last line, first column */
#define cursor_right TCSTR(nd) /* Non-destructive space (cursor right) */
#if 0 /* Broken? */
# define fresh_line TCSTR(nw) /* Move to start of fresh line */
#endif
#define PC TCSTR(pc) /* Pad character */
#define SF TCSTR(sf) /* Scroll forward */
#define SR TCSTR(sr) /* Scroll reverse */
#define TA TCSTR(ta) /* Tab (other than '^I' or with padding) */
#define TE TCSTR(te) /* String to end programs that use CM */
#define TI TCSTR(ti) /* String to begin programs that use CM */
#define cursor_up TCSTR(up) /* Upline (cursor up) */
#define flash_screen TCSTR(vb) /* Visible bell */
#define VE TCSTR(ve) /* Sequence to end open/visual mode */
#define VS TCSTR(vs) /* Sequence to start open/visual mode */
#define exit_standout_mode TCSTR(se) /* End standout mode */
#define enter_standout_mode TCSTR(so) /* Begin standout mode */
#define parm_dch TCSTR(DC) /* Delete n characters */
#define parm_ich TCSTR(IC) /* Insert n characters */
#define parm_delete_line TCSTR(DL) /* Delete n lines */
#define parm_insert_line TCSTR(AL) /* Insert n lines */
#define columns TCNUM(co) /* co Number of columns in a line */
#define BSdelay TCNUM(dB) /* dB Backspace delay */
#define CRdelay TCNUM(dC) /* dC Carriage return delay */
#define NLdelay TCNUM(dN) /* dN Newline delay */
#define TAdelay TCNUM(dT) /* dT Tab delay */
#define lines TCNUM(li) /* li Number of lines on screen */
/* Things defined to look more like TERMINFO */
#define over_strike 0
#define bell 0

178
contrib/supdup/termcaps.h Normal file
View File

@ -0,0 +1,178 @@
/*
* termcaps.h -- definitions of the variables in which
* the termcap info is kept
* KLH: Totally revised to keep things in sync
*/
/* Define macro of all interesting caps. If compiler chokes,
de-macro it into separate file which can be included multiple times.
*/
#define TCAPDEFS \
TCFLG(am, "has automatic margins"),\
TCFLG(bs, "has ^H backspace"),\
TCFLG(hc, "hardcopy term"),\
TCFLG(km, "has meta key"),\
TCFLG(mi, "safe to move in insert mode"),\
TCFLG(nc, "no working CR"),\
TCFLG(pt, "has hardware tabs"),\
TCFLG(ul, "underscore can overstrike"),\
TCFLG(ns, "wraps rather than scrolls"),\
TCFLG(MT, "has meta key (xterm)"),\
\
TCSTR(al, "Add new blank line"),\
TCSTR(le, "Move back one position"),\
TCSTR(bt, "Back tab"),\
TCSTR(cd, "Clear to end of display"),\
TCSTR(ce, "Clear to end of line"),\
TCSTR(ch, "Like CM but horizontal motion only"),\
TCSTR(cl, "Clear screen"),\
TCSTR(cm, "Cursor motion"),\
TCSTR(cr, "Carriage return (default '^M')"),\
TCSTR(cs, "Change scrolling region (vt100), like CM"),\
TCSTR(cv, "Like CM but vertical only"),\
TCSTR(dc, "Delete character"),\
TCSTR(dl, "Delete line"),\
TCSTR(dm, "Delete mode"),\
TCSTR(do, "Down one line"),\
TCSTR(ed, "End delete mode"),\
TCSTR(ei, "End insert mode"),\
TCSTR(ho, "Home cursor"),\
TCSTR(ic, "Insert character"),\
TCSTR(im, "Insert mode (enter)"),\
TCSTR(is, "Terminal initialization string"),\
TCSTR(ll, "Last line, first column"),\
TCSTR(nd, "Non-destructive space (cursor right)"),\
TCSTR(nw, "Newline (behave like CR + LF)"),\
TCSTR(pc, "Pad character"),\
TCSTR(sf, "Scroll forward"),\
TCSTR(sr, "Scroll reverse"),\
TCSTR(ta, "Tab (other than '^I' or with padding)"),\
TCSTR(te, "String to end programs that use CM"),\
TCSTR(ti, "String to begin programs that use CM"),\
TCSTR(up, "Upline (cursor up)"),\
TCSTR(vb, "Visible bell"),\
TCSTR(ve, "Sequence to end open/visual mode"),\
TCSTR(vs, "Sequence to start open/visual mode"),\
TCSTR(se, "End standout mode"),\
TCSTR(so, "Begin standout mode"),\
TCSTR(DC, "Delete n characters"),\
TCSTR(IC, "Insert n characters"),\
TCSTR(DL, "Delete n lines"),\
TCSTR(AL, "xInsert n lines"),\
\
TCNUM(co, "Number of columns in a line"),\
TCNUM(dB, "Backspace delay"),\
TCNUM(dC, "Carriage return delay"),\
TCNUM(dN, "Newline delay"),\
TCNUM(dT, "Tab delay "),\
TCNUM(li, "Number of lines on screen")
/* Define indices into table. Note type distinction is reflected
in index names, so as to catch improper references.
*/
enum tcaps {
#define TCSTR(tc,comm) TCI_##tc##_s
#define TCNUM(tc,comm) TCI_##tc##_n
#define TCFLG(tc,comm) TCI_##tc##_f
TCAPDEFS
#undef TCSTR
#undef TCNUM
#undef TCFLG
};
struct tcent {
char *tcname;
int tctyp;
union {
char *str;
int num;
int flg;
} tcval;
};
#define TCTYP_STR 0
#define TCTYP_NUM 1
#define TCTYP_FLG 2
struct tcent tcaptab[] = {
#define TCSTR(tc,comm) {#tc, TCTYP_STR}
#define TCNUM(tc,comm) {#tc, TCTYP_NUM}
#define TCFLG(tc,comm) {#tc, TCTYP_FLG}
TCAPDEFS
#undef TCSTR
#undef TCNUM
#undef TCFLG
};
#define TCSTR(tc) (tcaptab[TCI_##tc##_s].tcval.str)
#define TCNUM(tc) (tcaptab[TCI_##tc##_n].tcval.num)
#define TCFLG(tc) (tcaptab[TCI_##tc##_f].tcval.flg)
#define auto_right_margin TCFLG(am) /* Terminal has automatic margins */
#define BS TCFLG(bs) /* Terminal can backspace with '^H' */
#define hard_copy TCFLG(hc) /* Hardcopy terminal */
#define has_meta_key TCFLG(km) /* Has meta key */
#define move_insert_mode TCFLG(mi) /* Safe to move while in insert mode */
#define NC TCFLG(nc) /* No correctly working carriage ret */
#define PT TCFLG(pt) /* Has hardware tabs */
#define transparent_underline TCFLG(ul) /* '_' overstrikes */
#define no_scroll TCFLG(ns) /* Wraps rather than scrolls */
#define also_has_meta_key TCFLG(MT) /* KLH: Another flag for meta key */
/* (xterm is fond of this one) */
#define insert_line TCSTR(al) /* Add new blank line */
#define cursor_left TCSTR(le) /* Move back one position */
#define back_tab TCSTR(bt) /* Back tab */
#define clr_eos TCSTR(cd) /* Clear to end of display */
#define clr_eol TCSTR(ce) /* Clear to end of line */
#define CH TCSTR(ch) /* Like CM but horiz motion only */
#define clear_screen TCSTR(cl) /* Clear screen */
#define cursor_address TCSTR(cm) /* Cursor motion */
#define carriage_return TCSTR(cr) /* Carriage return (default '^M') */
#define CS TCSTR(cs) /* Change scrolling region (vt100), like CM */
#define CV TCSTR(cv) /* Like CM but vertical only */
#define delete_character TCSTR(dc) /* Delete character */
#define delete_line TCSTR(dl) /* Delete line */
#define DM TCSTR(dm) /* Delete mode */
#define cursor_down TCSTR(do) /* Down one line */
#define ED TCSTR(ed) /* End delete mode */
#define EI TCSTR(ei) /* End insert mode */
#define cursor_home TCSTR(ho) /* Home cursor */
#define insert_character TCSTR(ic) /* Insert character */
#define IM TCSTR(im) /* Insert mode (enter) */
#define IS TCSTR(is) /* Terminal initialization string */
#define LL TCSTR(ll) /* Last line, first column */
#define cursor_right TCSTR(nd) /* Non-destructive space (cursor right) */
#if 0 /* Broken? */
# define fresh_line TCSTR(nw) /* Move to start of fresh line */
#else
# define fresh_line (0) /* Move to start of fresh line */
#endif
#define PC TCSTR(pc) /* Pad character */
#define SF TCSTR(sf) /* Scroll forward */
#define SR TCSTR(sr) /* Scroll reverse */
#define TA TCSTR(ta) /* Tab (other than '^I' or with padding) */
#define TE TCSTR(te) /* String to end programs that use CM */
#define TI TCSTR(ti) /* String to begin programs that use CM */
#define cursor_up TCSTR(up) /* Upline (cursor up) */
#define flash_screen TCSTR(vb) /* Visible bell */
#define VE TCSTR(ve) /* Sequence to end open/visual mode */
#define VS TCSTR(vs) /* Sequence to start open/visual mode */
#define exit_standout_mode TCSTR(se) /* End standout mode */
#define enter_standout_mode TCSTR(so) /* Begin standout mode */
#define parm_dch TCSTR(DC) /* Delete n characters */
#define parm_ich TCSTR(IC) /* Insert n characters */
#define parm_delete_line TCSTR(DL) /* Delete n lines */
#define parm_insert_line TCSTR(AL) /* Insert n lines */
#define columns TCNUM(co) /* co Number of columns in a line */
#define BSdelay TCNUM(dB) /* dB Backspace delay */
#define CRdelay TCNUM(dC) /* dC Carriage return delay */
#define NLdelay TCNUM(dN) /* dN Newline delay */
#define TAdelay TCNUM(dT) /* dT Tab delay */
#define lines TCNUM(li) /* li Number of lines on screen */
/* Things defined to look more like TERMINFO */
#define over_strike 0
#define bell 0

1010
contrib/supdup/terminfo.text Normal file

File diff suppressed because it is too large Load Diff

1
contrib/supdup/tsd.tc Normal file
View File

@ -0,0 +1 @@
setenv TERMCAP 'SD|supdup|SUPDUP virtual terminal:co#79:li#48:am:vb=\177\023:nd=\177\020:cl=\177\022:so=\177\031:se=\177\032:pt:ce=\177\005:ec=\177\006:cd=\177\004:bs:up=\177\041:cm=\177\021%+ %+ :nl=\177\014:al=\177\025\001:dl=\177\026\001:AL=\177\025%.:DL=\177\026%.:mi:im=:ei=:ic=\177\027\001:dc=\177\030\001:dm=:ed=:ns:km:'

6
run/dfkfb/README Normal file
View File

@ -0,0 +1,6 @@
The following file is derived from Digital software and subject to
Digital licensing requirements:
dfkfb-all.savh (DFKFB diagnostic)
For usage and KL data, see the documentation file "doc/dfkfb.txt".

BIN
run/dfkfb/dfkfb-all.savh Normal file

Binary file not shown.

19
run/dfkfb/dfkfb.ini Normal file
View File

@ -0,0 +1,19 @@
; KLH10 init file for
; DFKFB - KL10 timing test diagnostic
; Normal load requires DIAMON+SUBKL+DFKFB but all of these are
; already combined in dfkfb-all.savh.
devdef dte0 200 dte master
; Make sure clock is at rate DFKFB expects
set clk_ithzfix=60
set ld_fmt=h36
load dfkfb-all.savh
set sw=400100,,0
; Hi-ho, hi-ho
go
; Quit when done
quit

6
run/klnic/README Normal file
View File

@ -0,0 +1,6 @@
The following files are derived from Digital software and subject to
Digital licensing requirements:
boot-nic.sav (disk bootstrap)
mtboot-nic.sav (tape bootstrap)

BIN
run/klnic/boot-nic.sav Normal file

Binary file not shown.

21
run/klnic/dist-klnic.ini Normal file
View File

@ -0,0 +1,21 @@
; This file is KLH10.INI -- the KLH10 init file that is read and executed
; by default when the KLH10 starts up.
; Define basic device config - one DTE, one disk, one tape
devdef dte0 200 dte master
devdef rh0 540 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=NICDIST-RP06-0.dbd9 dpdma=on
devdef mta0 rh0.1 tm03 fmtr=tm03 type=tu45
; Add one more disk for use as KLH:
devdef rh1 544 rh20
;devdef dsk1 rh1.0 rp type=rp06 format=dbd9 path=KLH-RP06.dbd9
; Define KLNI with address that monitor expects
devdef ni0 564 ni20 ipaddr=192.168.0.251
; Define new HOST device hackery
devdef idler 700 host
; Load disk bootstrap for convenience
load boot-nic.sav

View File

@ -0,0 +1,21 @@
; This file is KLH10.INI -- the KLH10 init file that is read and executed
; by default when the KLH10 starts up.
; Define basic device config - one DTE, one disk, one tape
devdef dte0 200 dte master
devdef rh0 540 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=NICDIST-RP06-0.dbd9 dpdma=on
devdef mta0 rh0.1 tm03 fmtr=tm03 type=tu45
; Add one more disk for use as KLH:
devdef rh1 544 rh20
;devdef dsk1 rh1.0 rp type=rp06 format=dbd9 path=KLH-RP06.dbd9
; Define KLNI with address that monitor expects
devdef ni0 564 ni20 ipaddr=10.0.0.51
; Define new HOST device hackery
devdef idler 700 host
; Load disk bootstrap for convenience
load boot-nic.sav

21
run/klnic/klh10.ini Normal file
View File

@ -0,0 +1,21 @@
; This file is KLH10.INI -- the KLH10 init file that is read and executed
; by default when the KLH10 starts up.
; Define basic device config - one DTE, one disk, one tape
devdef dte0 200 dte master
devdef rh0 540 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=RP06-NIC-0.dbd9 dpdma=on
devdef mta0 rh0.1 tm03 fmtr=tm03 type=tu45
; Add one more disk for use as KLH:
devdef rh1 544 rh20
devdef dsk1 rh1.0 rp type=rp06 format=dbd9 path=RP06-KLH.dbd9
; Define KLNI with address that monitor expects
devdef ni0 564 ni20 ipaddr=192.168.0.251
; Define new HOST device hackery
devdef idler 700 host
; Load disk bootstrap for convenience
load boot-nic.sav

BIN
run/klnic/mtboot-nic.sav Normal file

Binary file not shown.

6
run/klt10/README Normal file
View File

@ -0,0 +1,6 @@
The following files are derived from Digital software and subject to
Digital licensing requirements:
klbddt.exe (bootstrap with DDT)
klboot.exe (disk/tape bootstrap)

BIN
run/klt10/klbddt.exe Normal file

Binary file not shown.

BIN
run/klt10/klboot.exe Normal file

Binary file not shown.

18
run/klt10/klt10.ini Normal file
View File

@ -0,0 +1,18 @@
; Sample KLH10.INI for initial installation
; Define basic device config - one DTE, one disk, one tape.
; Use two RH20s because TOPS-10 doesn't like mixing disk and tape on
; the same controller (TOPS-20 is fine).
; T10 needs DTE ACK delay
devdef dte0 200 dte master ackdly=5
devdef rh0 540 rh20
devdef rh1 544 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9
devdef mta0 rh1.0 tm03 type=tu77
; For DECNET if desired
;
devdef ni0 564 ni20 dedic=0 decnet=1 doarp=0 enaddr=aa:00:04:00:ac:60 dpdelay=12 c3dly=2 rdtmo=3
load klboot.exe

5
run/klt20/README Normal file
View File

@ -0,0 +1,5 @@
The following files are derived from Digital software and subject to
Digital licensing requirements:
boot.sav (disk bootstrap)
mtboot.sav (tape bootstrap)

BIN
run/klt20/boot.sav Normal file

Binary file not shown.

23
run/klt20/inst-klt20.ini Normal file
View File

@ -0,0 +1,23 @@
; Sample KLH10.INI for initial installation
; Define basic device config - one DTE, one disk, one tape.
; Use two RH20s because TOPS-10 doesn't like mixing disk and tape on
; the same controller (TOPS-20 is fine).
devdef dte0 200 dte master
devdef rh0 540 rh20
devdef rh1 544 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9
devdef mta0 rh1.0 tm03 type=tu45
; Need KLNI to avoid LAPRBF BUGCHKs - use valid address if known
;
devdef ni0 564 ni20 ipaddr=10.0.0.51
; Mount installation tape (no ucode or boot to skip)
devmount mta0 bb-h137f-bm.tap
; Load tape bootstrap directly
load mtboot.sav
; Now ready to GO

20
run/klt20/klt20.ini Normal file
View File

@ -0,0 +1,20 @@
; Sample KLH10.INI for initial installation
; Define basic device config - one DTE, one disk, one tape.
; Use two RH20s because TOPS-10 doesn't like mixing disk and tape on
; the same controller (TOPS-20 is fine).
devdef dte0 200 dte master
devdef rh0 540 rh20
devdef rh1 544 rh20
devdef dsk0 rh0.0 rp type=rp06 format=dbd9
devdef mta0 rh1.0 tm03 type=tu45
; Need KLNI to avoid LAPRBF BUGCHKs - use valid address if known
;
devdef ni0 564 ni20 ipaddr=10.0.0.51
; Load disk bootstrap directly
load boot.sav
; Now ready to GO

BIN
run/klt20/mtboot.sav Normal file

Binary file not shown.

BIN
run/ksits/@.ddt-u Normal file

Binary file not shown.

BIN
run/ksits/@.its-647kn-u Normal file

Binary file not shown.

BIN
run/ksits/@.its-647md-u Normal file

Binary file not shown.

BIN
run/ksits/@.its-647pi-u Normal file

Binary file not shown.

BIN
run/ksits/@.nsalv-260-u Normal file

Binary file not shown.

18
run/ksits/README Normal file
View File

@ -0,0 +1,18 @@
The following files are derived from MIT ITS software and subject to
their licensing requirements:
@.ddt-u (DDT standalone)
@.nsalv-260-u (NSALV standalone)
@.its-647pi-u (PI ITS monitor bootstrap)
@.its-647kn-u (KN ITS monitor bootstrap)
@.its-647md-u (MD ITS monitor bootstrap)
itsbin.647pi-u (PI ITS alone, no DDT or SALV)
itsbin.647kn-u (KN ITS alone, no DDT or SALV)
itsbin.647md-u (MD ITS alone, no DDT or SALV)
The "pubits" directory contains various notes left over from the
Public ITS project. One file in particular has been updated:
pubits/doc/distrib.its - various notes on bringing up a new ITS
Read it!

BIN
run/ksits/itsbin.647kn-u Normal file

Binary file not shown.

BIN
run/ksits/itsbin.647md-u Normal file

Binary file not shown.

BIN
run/ksits/itsbin.647pi-u Normal file

Binary file not shown.

31
run/ksits/klh10-kn.ini Normal file
View File

@ -0,0 +1,31 @@
; KLH10 emulator configuration for KN ITS system.
; Define basic KS10 device config - two RH11s each on its own Unibus
devdef rh0 ub1 rh11 addr=776700 br=6 vec=254
devdef rh1 ub3 rh11 addr=772440 br=6 vec=224
; Provide one disk, one tape in config ITS expects
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=PI-ITS-RP06.0-dbd9 iodly=0
devdef mta0 rh1.0 tm02 fmtr=tm03 type=tu45
; ITS wants a 60Hz clock, allow it. Need this until defaults OK.
set clk_ithzfix=60
; Define IMP for MD
devdef imp ub3 lhdh addr=767600 br=6 vec=250 ipaddr=10.134.198.236 gwaddr=10.0.0.1
; Dummy definitions. Only one DZ is still (apparently) needed.
devdef dz0 ub3 dz11 addr=760010 br=5 vec=340
;devdef dz1 ub3 dz11 addr=760020 br=5 vec=350
;devdef chaos ub3 ch11 addr=764140 br=5 vec=270
; Define new HOST device hackery
devdef idler ub3 host addr=777000
; Preload ITS for convenience
load @.its-647kn-u
; Use "GO 774000" to start DDT, else just "GO" to start ITS

31
run/ksits/klh10-md.ini Normal file
View File

@ -0,0 +1,31 @@
; KLH10 emulator configuration for MD ITS system.
; Define basic KS10 device config - two RH11s each on its own Unibus
devdef rh0 ub1 rh11 addr=776700 br=6 vec=254
devdef rh1 ub3 rh11 addr=772440 br=6 vec=224
; Provide one disk, one tape in config ITS expects
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=PI-ITS-RP06.0-dbd9 iodly=0
devdef mta0 rh1.0 tm02 fmtr=tm03 type=tu45
; ITS wants a 60Hz clock, allow it. Need this until defaults OK.
set clk_ithzfix=60
; Define IMP for MD
devdef imp ub3 lhdh addr=767600 br=6 vec=250 ipaddr=192.168.0.203 gwaddr=192.168.0.2
; Dummy definitions. Only one DZ is still (apparently) needed.
devdef dz0 ub3 dz11 addr=760010 br=5 vec=340
;devdef dz1 ub3 dz11 addr=760020 br=5 vec=350
;devdef chaos ub3 ch11 addr=764140 br=5 vec=270
; Define new HOST device hackery
devdef idler ub3 host addr=777000
; Preload ITS for convenience
load @.its-647md-u
; go 774000 ; to start DDT, else "go" to start ITS

31
run/ksits/klh10-pi.ini Normal file
View File

@ -0,0 +1,31 @@
; KLH10 emulator configuration for PI ITS system.
; Define basic KS10 device config - two RH11s each on its own Unibus
devdef rh0 ub1 rh11 addr=776700 br=6 vec=254
devdef rh1 ub3 rh11 addr=772440 br=6 vec=224
; Provide one disk, one tape in config ITS expects
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=PI-ITS-RP06.0-dbd9 iodly=0
devdef mta0 rh1.0 tm02 fmtr=tm03 type=tu45
; ITS wants a 60Hz clock, allow it. Need this until defaults OK.
set clk_ithzfix=60
; Define IMP for PI on ITS.JOSS.COM
devdef imp ub3 lhdh addr=767600 br=6 vec=250 ipaddr=199.34.53.51 gwaddr=199.34.53.50
; Dummy definitions. Only one DZ is still (apparently) needed.
devdef dz0 ub3 dz11 addr=760010 br=5 vec=340
;devdef dz1 ub3 dz11 addr=760020 br=5 vec=350
;devdef chaos ub3 ch11 addr=764140 br=5 vec=270
; Define new HOST device hackery
devdef idler ub3 host addr=777000
; Preload ITS for convenience
load @.its-647pi-u
; go 774000 ; to start DDT, else "go" to start ITS

View File

@ -0,0 +1,21 @@
# Per RFC 1918, there are 3 IP address space blocks assigned for private nets,
# which will never (and can never) be used on the external Internet:
# 10.0.0.0 - 10.255.255.255 (10/8 prefix) 1 class A net
# 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 16 class B nets
# 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) 256 class C nets
#
# IP conventions:
# 0 and 255 reserved for broadcast (IP standard)
# Addresses for setup of Public ITS in Doug Humphrey's co-location facility.
# Reserved 8-address block from 199.34.53.48-55 inclusive.
# .48 # Old bcast
# .49 # Router/Gateway
199.34.53.50 its.joss.com its # Native system
199.34.53.51 pi.its.os.org pi # Public ITS (virtual)
199.34.53.52 dx.its.os.org dx # Digex ITS (virtual)
199.34.53.53 du.its.os.org du # Hack ITS (virtual)
199.34.53.54 unknown.its.os.org # Reserved
# .55 # Subnet broadcast

View File

@ -0,0 +1,188 @@
#!/bin/sh -
# Paranoid ipfw configuration for its.os.org box
[ -f /etc/rc.conf ] && . /etc/rc.conf
ipfw="/sbin/ipfw"
[ "x$firewall_quiet" = "xYES" ] && ipfw="$ipfw -q"
#### configure ####
# 199.34.53.48/29
# 255.255.255.248 <netmask>
# .48 <reserved (old bcast?)>
# 199.34.53.49 <gateway>
# 199.34.53.50 its.joss.com (NATIVE SYSTEM)
# 199.34.53.51 pi.its.os.org (VIRTUAL ITS)
# 199.34.53.52 dx.its.os.org (VIRTUAL ITS)
# 199.34.53.53 du.its.os.org (VIRTUAL ITS)
# 199.34.53.54 ??.its.os.org (VIRTUAL ITS)
# .55 <reserved for bcast>
#
# Addresses. "me" is its.joss.com
#
us=199.34.53.48/29
b0=199.34.53.48
gw=199.34.53.49
me=199.34.53.50
pi=199.34.53.51
dx=199.34.53.52
du=199.34.53.53
qq=199.34.53.54
b1=199.34.53.55
# Name of our interface to the outside world (ethernet, presumably)
#
if=de0
###################
# Clean slate
#
$ipfw -f flush
# Do not accept source routed traffic under any circumstances
#
$ipfw add deny log all from any to any ipoptions ssrr,lsrr,rr
# Allow everything on loopback interface
#
$ipfw add pass all from any to any via lo0
## IP rules ##
# Loopback addresses on non-loopback interfaces are spoofed
#
$ipfw add deny log all from any to 127.0.0.0/8
$ipfw add deny log all from 127.0.0.0/8 to any
# As far as I know there is no reason for any traffic to or from
# any kind of broadcast, class D, class E, or RFC-1597 private
# address to appear on this subnet.
#
# Tuez les tous, Dieu reconnaitra les siens.
#
$ipfw add deny log all from $b0 to any
$ipfw add deny log all from $b1 to any
$ipfw add deny log all from 0.0.0.0 to any
$ipfw add deny log all from 224.0.0.0/3 to any
$ipfw add deny log all from 255.255.255.255 to any
$ipfw add deny log all from any to $b0
$ipfw add deny log all from any to $b1
$ipfw add deny log all from any to 0.0.0.0
$ipfw add deny log all from any to 224.0.0.0/3
$ipfw add deny log all from any to 255.255.255.255
$ipfw add deny log all from 10.0.0.0/8 to any
$ipfw add deny log all from 172.16.0.0/12 to any
$ipfw add deny log all from 192.168.0.0/16 to any
$ipfw add deny log all from any to 10.0.0.0/8
$ipfw add deny log all from any to 172.16.0.0/12
$ipfw add deny log all from any to 192.168.0.0/16
# Don't let anybody else pretend to be this unix machine
#
$ipfw add deny log all from $me to any in recv any
# If anybody actually figures out how to hack ITS into spoofing, we
# probably ought to sign that person up on the spot, but just in case
# some total loser gets lucky, let's make it a little harder for
# spoofed packets to escape from ITS
# Note: this also prevents a misconfigured ITS from causing trouble.
#
$ipfw add deny log all from not $us to any in recv 'tun*'
$ipfw add deny log all from $gw to any in recv 'tun*'
# Last, a little protection in case our first-hop router isn't checking
# addresses as carefully as we are
#
$ipfw add deny log all from any to not $us in recv $if
$ipfw add deny log all from $pi to any in recv $if
$ipfw add deny log all from $dx to any in recv $if
$ipfw add deny log all from $du to any in recv $if
$ipfw add deny log all from $qq to any in recv $if
# Add any other rules to discard known bogus addresses here
## TCP rules
# We do our TCP connection checking on setup, so just let
# any established connection go through
# Most TCP traffic matches this rule, so put it as early as possible
#
$ipfw add pass tcp from any to any established
# Allow TELNET and FTP into the ITS machines
# Don't allow TELNET or FTP to the unix machine
# ITS doesn't support PASV FTP, so neither do we
#
$ipfw add reset log tcp from any to $me telnet,ftp setup
$ipfw add pass tcp from any to any telnet,ftp setup
# Allow SSH & SMTP into the unix box
#
$ipfw add pass tcp from any to $me ssh,smtp setup
# Any connection initiated by the unix machine is ok
#
$ipfw add pass tcp from $me to any setup
# Don't allow any other connections to the unix machine
#
$ipfw add reset log from any to $me setup
# ITS machines are not allowed to initiate connections to the outside world
# Anything else coming from an ITS machine is ok
#
$ipfw add reset log tcp from any to any setup out recv 'tun*' xmit $if
$ipfw add pass tcp from any to any setup recv 'tun*'
# Silently drop IDENT traffic
# (Gee, Dr. Bernstein, let's launch a denial-of-service attack on ourselves!)
#
$ipfw add reset tcp from any to any ident setup
# No other TCP connections allowed
#
$ipfw add reset log tcp from any to any setup
# Please don't even think about turning on SunRPC or NFS
#
$ipfw add deny log udp from any to any sunrpc,nfs
# Don't accept inbound syslog from the outside world
# (no known useful purpose, so don't let bozos fill our log directory)
#
$ipfw add deny log udp from any to any syslog in recv $if
# We need DNS and NTP
#
$ipfw add pass udp from any dns,ntp to any
$ipfw add pass udp from any to any dns,ntp
# Allow useful cases of syslog. Heck, maybe ITS should use it
#
$ipfw add pass udp from $us to $us syslog
# Allow the useful ICMP messages:
# Echo (types 0 & 8, for ping and traceroute)
# Destination Unreachable (type 3)
# Time Exceeded (type 11, primarily for traceroute)
#
# We should NOT accept ICMP Redirects (we're a router)
$ipfw add pass icmp from any to any icmptypes 0,3,8,11
$ipfw add deny icmp from any to any out recv $if xmit 'tun*'
$ipfw add pass icmp from any to any out xmit 'tun*'
# Silently discard ICMP Router Discovery strobes
#
$ipfw add deny icmp from any to any icmptypes 10
# Deny and log everything else. If this turns out to be too
# verbose, consider adding rules to silently drop stuff that
# we understand but don't want. Anything we don't understand
# probably ought to be logged.
#
# If you don't understand it, it's dangerous.
#
$ipfw add deny log all from any to any

View File

@ -0,0 +1,211 @@
#!/bin/sh -
## Paranoid ipfw configuration for its.os.org box
# Suck in the configuration variables.
if [ -f /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
elif [ -f /etc/rc.conf ]; then
. /etc/rc.conf
fi
############
# Set quiet mode if requested
if [ "x$firewall_quiet" = "xYES" ]; then
fwcmd="/sbin/ipfw -q"
else
fwcmd="/sbin/ipfw"
fi
#### configure ####
# 199.34.53.48/29
# 255.255.255.248 <netmask>
# .48 <reserved (old bcast?)>
# 199.34.53.49 <gateway>
# 199.34.53.50 its.joss.com (NATIVE SYSTEM)
# 199.34.53.51 pi.its.os.org (VIRTUAL ITS)
# 199.34.53.52 dx.its.os.org (VIRTUAL ITS)
# 199.34.53.53 du.its.os.org (VIRTUAL ITS)
# 199.34.53.54 ??.its.os.org (VIRTUAL ITS)
# .55 <reserved for bcast>
#
# Addresses. "me" is its.joss.com
#
us=199.34.53.48/29
b0=199.34.53.48
gw=199.34.53.49
me=199.34.53.50
pi=199.34.53.51
dx=199.34.53.52
du=199.34.53.53
qq=199.34.53.54
b1=199.34.53.55
# Name of our interface to the outside world (ethernet, presumably)
#
oif=de0
###################
# Clean slate
#
$fwcmd -f flush
# Do not accept source routed traffic under any circumstances
#
$fwcmd add deny log all from any to any ipoptions ssrr,lsrr,rr
# Allow everything on loopback interface
#
$fwcmd add pass all from any to any via lo0
## IP rules ##
# Loopback addresses on non-loopback interfaces are spoofed
#
$fwcmd add deny log all from any to 127.0.0.0/8
$fwcmd add deny log all from 127.0.0.0/8 to any
# As far as I know there is no reason for any traffic to or from
# any kind of broadcast, class D, class E, or RFC-1597 private
# address to appear on this subnet.
#
# Tuez les tous, Dieu reconnaitra les siens.
#
$fwcmd add deny log all from $b0 to any
$fwcmd add deny log all from $b1 to any
$fwcmd add deny log all from 0.0.0.0 to any
$fwcmd add deny log all from 224.0.0.0/3 to any
$fwcmd add deny log all from 255.255.255.255 to any
$fwcmd add deny log all from any to $b0
$fwcmd add deny log all from any to $b1
$fwcmd add deny log all from any to 0.0.0.0
$fwcmd add deny log all from any to 224.0.0.0/3
$fwcmd add deny log all from any to 255.255.255.255
$fwcmd add deny log all from 10.0.0.0/8 to any
$fwcmd add deny log all from 172.16.0.0/12 to any
#KLH $fwcmd add deny log all from 192.168.0.0/16 to any
$fwcmd add deny log all from any to 10.0.0.0/8
$fwcmd add deny log all from any to 172.16.0.0/12
#KLH $fwcmd add deny log all from any to 192.168.0.0/16
# Don't let anybody else pretend to be this unix machine
#
$fwcmd add deny log all from $me to any in recv any
# If anybody actually figures out how to hack ITS into spoofing, we
# probably ought to sign that person up on the spot, but just in case
# some total loser gets lucky, let's make it a little harder for
# spoofed packets to escape from ITS
# Note: this also prevents a misconfigured ITS from causing trouble.
#
$fwcmd add deny log all from not $us to any in recv 'tun*'
$fwcmd add deny log all from $gw to any in recv 'tun*'
# Last, a little protection in case our first-hop router isn't checking
# addresses as carefully as we are. Prohibit any packets coming into
# the interface which are from our own subnet, except for ICMPs from
# the gateway.
$fwcmd add pass icmp from $gw to $us recv $oif icmptypes 0,3,8,11
$fwcmd add deny log all from $us to any in recv $oif
$fwcmd add deny log all from any to not $us in recv $oif
# Add any other rules to discard known bogus addresses here
## TCP rules
# We do our TCP connection checking on setup, so just let
# any established connection go through
# Most TCP traffic matches this rule, so put it as early as possible
#
$fwcmd add pass tcp from any to any established
#####################
# The intent of the following rules is:
# The only way to access the Unix system from outside is via SSH,
# and later SMTP after mailer is configured.
# The only outside access to PI ITS is via TELNET/SUPDUP.
# (Later FTP? Note ITS doesn't support PASV FTP.)
# Nothing from outside to DU/DX (the dev ITS systems). Access has
# to be via SSH to unix and thence to DU/DX.
# PI cannot go anywhere, either outside or locally.
# Unix and DU/DX can go anywhere, both outside & locally.
# Access from outside - permit only these things
# Allow TELNET/SUPDUP into PI ITS.
# Allow SSH into the unix box. Add SMTP later after mailer is configured.
#
$fwcmd add pass tcp from any to $pi telnet,supdup setup
$fwcmd add pass tcp from any to $me ssh setup
# Any connection initiated by the unix machine or DU, DX is okay.
# All three have full access to all systems plus outside world.
#
$fwcmd add pass tcp from $me to any setup
$fwcmd add pass tcp from $dx to any setup
$fwcmd add pass tcp from $du to any setup
# Don't allow any other connections.
#
$fwcmd add reset log tcp from any to any setup
# For possible later use:
# ITS machines are not allowed to initiate connections to the outside world
# Anything else coming from an ITS machine is ok
#
# $fwcmd add reset log tcp from any to any setup out recv 'tun*' xmit $oif
# $fwcmd add pass tcp from any to any setup recv 'tun*'
# KLH: what's the point of this when the next rule refuses it anyway?
# Silently drop IDENT traffic
# (Gee, Dr. Bernstein, let's launch a denial-of-service attack on ourselves!)
#
$fwcmd add reset tcp from any to any ident setup
# No other TCP connections allowed
#
$fwcmd add reset log tcp from any to any setup
# Please don't even think about turning on SunRPC or NFS
#
$fwcmd add deny log udp from any to any sunrpc,nfs
# Don't accept inbound syslog from the outside world
# (no known useful purpose, so don't let bozos fill our log directory)
#
$fwcmd add deny log udp from any to any syslog in recv $oif
# We need DNS (domain) and NTP
#
$fwcmd add pass udp from any domain,ntp to any
$fwcmd add pass udp from any to any domain,ntp
# Allow useful cases of syslog. Heck, maybe ITS should use it
#
$fwcmd add pass udp from $us to $us syslog
# Allow the useful ICMP messages:
# Echo (types 0 & 8, for ping and traceroute)
# Destination Unreachable (type 3)
# Time Exceeded (type 11, primarily for traceroute)
#
# We should NOT accept ICMP Redirects (we're a router)
$fwcmd add pass icmp from any to any icmptypes 0,3,8,11
$fwcmd add deny icmp from any to any out recv $oif xmit 'tun*'
$fwcmd add pass icmp from any to any out xmit 'tun*'
# Silently discard ICMP Router Discovery strobes
#
$fwcmd add deny icmp from any to any icmptypes 10
# Deny and log everything else. If this turns out to be too
# verbose, consider adding rules to silently drop stuff that
# we understand but don't want. Anything we don't understand
# probably ought to be logged.
#
# If you don't understand it, it's dangerous.
#
$fwcmd add deny log all from any to any

View File

@ -0,0 +1,9 @@
In order to test PI ITS configured for its future home, need to
add explicit routing table entries:
On ITS.JOSS.COM:
# route add -net 192.168.0.0 -interface 199.34.53.50
On other machines:
# route add -net 199.34.53.0 -interface 192.168.0.xx (own address)

View File

@ -0,0 +1,132 @@
NX .
FREE BLOCKS #0=24927
0 . LOGIN 1 ! 4/5/77 14:11:08
0 @ AI-ITS 59 ! 12/17/92 17:04:48
0 @ DDT 4 ! 5/31/89 04:59:14
0 @ ITS 63 ! 12/17/92 17:05:37
0 @ NSALV 13 ! 12/17/92 17:05:03
0 @ SALV38 13 ! 6/4/92 12:32:09
0 AIDSKD 212BIN 3 ! 3/30/86 23:36:29
0 AIDSKD 212BT 1 ! 3/30/86 23:39:54
0 AIITS 644BIN 52 ! 2/26/90 19:46:46
0 AIITS 644ERR 1 ! 2/26/90 19:46:46
0 AISALV 238ERR 1 ! 6/3/88 02:18:28
0 AISALV 253BIN 12 ! 2/26/90 19:37:07
0 AISALV 253ERR 1 ! 2/26/90 19:37:07
0 AISALV 328BIN 12 ! 6/3/88 02:18:28
0 DDT 068BIN 4 ! 7/19/92 13:53:44
0 DSKDMP 216BIN 3 ! 7/20/92 04:35:00
0 DSKDMP 216BT 1 ! 7/20/92 04:35:16
0 ITS 645BIN 53 ! 7/20/92 04:34:15
0 NSALV 260BIN 12 ! 7/20/92 04:35:29
L SALV BIN . NSALV 260BIN
0 TS REDRCT 3 ! 7/15/87 01:36:25
DDT= 774000 Start addr of DDT (DDT data can precede this)
MACDMP= 777700 Loc of bootstrap loader (and start addr)
MACCR= 777777 Loc of ?
0 @ AI-ITS 59 ! 12/17/92 17:04:48
ITSMCH= 'AI' ITSVRS= '1644' 213000(SALV:VERSHN)/ '253'
Has DDT, no bootstrap; start addr is BEG.
This was the last MIT AI KS10 system.
0 @ DDT 4 ! 5/31/89 04:59:14
Assembled by ALAN on 05/31/89 05:00:12
Assembled from file AI: SYSTEM; DDT 68
0 @ ITS 63 ! 12/17/92 17:05:37
ITSMCH= 'NX' ITSVRS= '1645' 213000(SALV:VERSHN)/ '260'
Has DDT, no bootstrap; start addr is BEG.
0 @ NSALV 13 ! 12/17/92 17:05:03
VERSHN/ '260'
Has DDT, no bootstrap; start addr is DDT
0 @ SALV38 13 ! 6/4/92 12:32:09
VERSHN/ '238'
Has DDT, no bootstrap; start addr is DDT
Assembled from SYSTEM;SALV 238, retained just in case NSALV
someday encounters a bug that SALV doesn't have.
0 AIDSKD 212BIN 3 ! 3/30/86 23:36:29
Assembled by ALAN on 03/30/86 23:37:03
Assembled from file AI: SYSTEM; DSKDMP 212
Retained for backup and posterity. Doesn't work on KLH10 due to
I/O race bug.
0 AIDSKD 212BT 1 ! 3/30/86 23:39:54
Assembled by ALAN on 03/30/86 23:40:20
Assembled from file AI: SYSTEM; DSKDMP 212
Retained for backup and posterity.
0 AIITS 644BIN 52 ! 2/26/90 19:46:46
Assembled by ALAN5 on 02/26/90 19:59:44
Assembled from file AI: SYSTEM; ITS 1644
Last MIT AI KS10 system.
0 AIITS 644ERR 1 ! 2/26/90 19:46:46
0 AISALV 238ERR 1 ! 6/3/88 02:18:28
Retained to document @ SALV38.
0 AISALV 253BIN 12 ! 2/26/90 19:37:07
Assembled by ALAN5 on 02/26/90 19:40:13
Assembled from file AI: KSHACK; NSALV 253
AI config, retained for additional backup to NSALV 260.
0 AISALV 253ERR 1 ! 2/26/90 19:37:07
0 DDT 068BIN 4 ! 7/19/92 13:53:44
Assembled by KLH on 07/19/92 13:54:01
Assembled from file AI: SYSTEM; DDT 68
0 DSKDMP 216BIN 3 ! 7/20/92 04:35:00
Assembled by KLH on 07/20/92 04:35:06
Assembled from file NX: SYSTEM; DSKDMP 216
0 DSKDMP 216BT 1 ! 7/20/92 04:35:16
Assembled by KLH on 07/20/92 04:35:20
Assembled from file NX: SYSTEM; DSKDMP 216
0 ITS 645BIN 53 ! 7/20/92 04:34:15
Assembled by KLH on 07/20/92 04:33:50
Assembled from file NX: SYSTEM; ITS 1645
0 NSALV 260BIN 12 ! 7/20/92 04:35:29
Assembled by KLH on 07/20/92 04:35:57
Assembled from file NX: KSHACK; NSALV 260
0 TS REDRCT 3 ! 7/15/87 01:36:25
Assembled by ALAN on 07/15/87 01:36:46
Assembled from file AI: SYSNET; REDRCT 21
This is a utility to manage the gateway tables
inside the running system.
OLD AI snapshot files, version # listed here so as to satisfy
any lingering curiousity about the contents.
All contain DDT, no DSKDMP bootstrap, and start addr of DDT except for
ITS which starts at BEG.
0 @ ODDT 4 ! 1/18/87 13:42:01
Assembled by MOON on 01/18/87 13:43:13
Assembled from file AI: SYSTEM; DDT 51
0 @ NSALV 13 ! 3/19/89 21:15:01 VERSHN/ '245'
0 @ OOSALV 13 ! 3/26/86 23:30:01 VERSHN/ '211'
0 @ OSALV 13 ! 12/1/86 00:00:00 VERSHN/ '229'
0 @ SALV 13 ! 6/2/88 23:42:15 VERSHN/ '238'
0 @ XSALV 13 ! 9/1/90 22:53:26 VERSHN/ '215'
0 @ ITS 58 ! 2/5/90 03:27:50
ITSMCH= 'AI' ITSVRS= '1643' 213000(SALV:VERSHN)/ '238'
0 @ NITS 58 ! 2/28/90 13:05:37
ITSMCH= 'AI' ITSVRS= '1644' 213000(SALV:VERSHN)/ '238'
0 @ OITS 58 ! 1/25/90 20:45:27
ITSMCH= 'AI' ITSVRS= '1633' 213000(SALV:VERSHN)/ '238'
0 @ XITS 55 ! 9/1/90 22:53:22
ITSMCH= 'MD' ITSVRS= '1576' 213000(SALV:VERSHN)/ '215'
0 KSTEST BIN 7 ! 1/22/86 23:49:52
Assembled by JTW on 01/22/86 23:50:47
Assembled from file MC: JTW; KSTEST 179
This is just a standalone hack to allow invoking various
device status or action routines with DDT and $X.
It's not really a diagnostic program.

View File

@ -0,0 +1,823 @@
ITS distribution notes:
Lots of random stuff in random order, some old, some new. Most of it
was personal notes to myself, only vaguely intended for publication,
which I never had time to clean up.
As you read through this stuff, you should be thinking in the back of
your head, "How can we get all this (%*@(%!# crap to work better?"
Here's one suggestion.
Ideally there would be a single file containing all of the runtime
site-dependent config stuff (hostname, address, params for various
progs, etc). Can maintain numerous configs in a single directory
called SYSCNF with a link pointing from the default of "@ DEFS" to
to the file actually in effect, which would be SYSCNF;<machname> <ver>.
ITS would then check this default file on startup for its identity.
Can also force use of a specific config file by depositing something
with DDT in an otherwize zero location prior to startup (its machname
for example, from which the SYSCNF file can be found). This location
can even be known and set by the KLH10 init file!
Notes on system-dependent config stuff:
If you are generating a NEW instance of ITS with a new name,
there are a lot of things you have to do. Read through this
whole section!
To rebuild ITS, do:
:MIDAS SYSTEM;_ITS
and then type the desired machine name, in UPPERCASE.
There are a lot of undefined symbols in EVSYMS at the end;
these can be ignored.
You may want to rename the resulting ITS BIN to ITS <ver><name>, eg
:rename its bin, its 645pi
in order to avoid clobbering it with the next assembly.
To get a KLH10-loadable executable from that:
Extract it from ITS with either:
[a] FTP it out (use image mode) to a file, eg "itsbin.645pi"
[b] Virtual magtape (copy to MT0:, uses coredump mode)
KLH10: devmount mta0 tapeout rw fmt=raw
ITS: :copy system;its 645pi, mt0:
(If get RH11 ERROR, ignore and try again)
KLH10: devunmount mta0
Convert to format of choice, normally U36, with one of:
FTP: ./wfconv -fu < itsbin.645pi > itsbin.645pi-u
Tape: ./wfconv -cu < tapeout.tpr > itsbin.645pi-u
In a fresh KLH10, no config needed:
./kn10-ks /dev/null
load @.ddt-u
load @.nsalv-260-u
load itsbin.645pi-u
dump @.its-645pi-u
quit
Thereafter you can just load @.its-whatever and go.
NEW SYSTEM
==========
Things that must be edited for each new ITS system/machine.
ITS MACHINE NAME:
Pick a good one.
Historically all ITS machine names have been exactly two characters.
Someday we may have a list of just what things actually depend on
this or some other limit, as well as whether digits are permitted.
@DEV - requires 2 characters for other ITSes.
MLDEV - requires 2 characters for other ITSes.
LISP - requires 3 characters due to CAIE checks. Code could
easily be fixed for 6.
Build new ITS
-------------
Modify these files and then rebuild ITS per above instructions.
SET NAME:
The ITS machine name, two characters.
SYSTEM;CONFIG > - define chunk of params for each name.
SYSTEM;ITS > - add to comment at start? Not really needed.
SET NET ADDRESS:
SYSTEM;CONFIG >
IMPUS3 - the IP address.
NM%IMP - Subnet mask for IMPUS3.
IMPUS - old IMP address. Set it to low-order byte of IMPUS3
to avoid breaking any old semi-working stuff..
TTY TABLE:
SYSTEM;TTYTYP >
Machine-name conditionalized; must have machine-specific
entries for hard-wired terminal lines.
Build user config files and programs
------------------------------------
HOSTNAME: Very important -- COMSAT and other things will break if
they can't find their own system name in the host tables!
First edit this file to add hostname(s):
SYSHST;H3TEXT >
Although this used to be dynamically generated, it must now
be done by hand.
Then run:
SYSHST;H3MAKE BIN
which snarfs up H3TEXT and compiles it into SYSBIN;HOSTS3 >.
This can take quite a while depending on how large H3TEXT is.
TELSER: SYSNET;TELSER >
TELSER has hard-coded greeting messages based on hostname. If
it doesn't recognize its own hostname, it uses "Unknown ITS PDP-10".
This can be modified if desired (just before TCPOL:) for hack value.
:MIDAS SYSBIN;_SYSNET;TELSER
MLDEV: SYSEN2:MLDEV >
There are two places in this program which have a hardcoded list
of ITS machines. The name of the new ITS must be added here
if you wish to use the MLDEV device to access the filesystems
of other machines.
These names must exist in HOSTS3 as it uses NETWRK"HSTLOOK to find
the corresponding IP addresses.
Also set DEVICE;JOBDEV <name> symlinked to DEVICE;ATSIGN MLDEV.
MLDEV/MLSLV and known job devices in general:
The maximum size of a device name is 6 SIXBIT characters, although
very old programs sometimes assume 3.
Whenever a program uses a device name that ITS doesn't have
built in, the system runs the "unknown device handler"
which is SYS;ATSIGN DEVICE (source SYSENG;@DEV >).
(Note the binary is a SBLK file -- it exists too briefly)
It then processes this device name as follows:
If "<" or ">" - Returns "No such device" error.
If DSK:DEVICE;JOBDEV <dev> exists - loads and starts that program.
This overrides all the rest of this stuff and is the
preferable way of configuring things.
Otherwise @DEV goes through a lot of trouble to figure out a plausible
interpretation of the device name, using a semi-built-in table of
known "foreign filesystems" and DIR device names, that it checks to
map the device into one of four possible devices:
DSK:DEVICE;ATSIGN DIRDEV - SYSENG;DIRDEV >
DSK:DEVICE;ATSIGN MLDEV - SYSEN2;MLDEV >
DSK:DEVICE;ATSIGN R.I.P. - SYSEN2;RIPDEV >
DSK:DEVICE;ATSIGN RMTDEV - GZ;RMTDEV >
(All are or should be PDUMPed binaries)
These tables are checked as follows:
If either table contains an exact match, use that.
Else if the first 2 chars of the name match something in the foreign
filesys table (here's one 2-char dependency!), it tries
DEVICE;JOBDEV <ffsys>, then DEVICE;ATSIGN MLDEV.
The foreign system will presumably interpret the rest of
the device name (typically DIR or ARC, etc).
The other table is mostly DIR<foo> where <foo> is one of
<ffsys>,DSK,SYS,COM,DIR,DNR.
If there's still no match, it checks for a secondary pack name
using a table of machine names (AI and MX for now) and
a subtable of pack names for each. This seems to be only
for the purpose of returning a "Pack not mounted" error
if the pack is known to normally exist, as opposed to
a "no such device" error.
If still no match, it checks the last letter -- if it's a digit,
it strips it off and starts all over again.
FINALLY, it checks to see whether the request is to open the
directory of a known non-directory device (ie if the
FN1 and FN2 are ".FILE. (DIR)") and cobbles together
a simple reply if so. The known devices for this hack are:
lpt,ptr,ptp,plt,cod,dis,nvd,pdp,tab,stk
MLDEV, when invoked, checks its real device name and performs
some additional munching. It knows about a list of
ITS systems, and for each <ff> in the list:
X<ff> is transformed into <ff>.
DIR<ff> is transformed into <ff>DIR (for consistency?)
The 1st 2 chars (another dependency!) are then checked
and if they match a <ff>, that system is contacted.
<ff> list: AI ML DM MC MX MD KL KS
If there's no match to any of these, then MLDEV tries one
more table before giving up. If the full device name is
one of the following, it substitutes a <ff>dev:
XGP => AIXGP
GLP => MXGLP
DVR => MCDVR
DVS => MCDVS
TPL => MLTPL
Otherwise, it returns "no such device". This means no
foreign filesystem can be contacted unless it IS IN
THE HARDWIRED TABLE of MLDEV!
If <ff> is known, then it uses NETWRK"HSTLOOK to find the
IP address and proceeds to make a connection.
OTHER:
Various programs automatically re-init and PDUMP themselves out when
they detect that the machine name or system version has changed
since the last binary was created. Among these are:
SYS;TS NAME
SYS;TS PEEK
SYS;TS PROBE
SYS1;TS METER
SYS1;TS PRUFD
SYS1;TS SYSMSG
SYS2;TS XXFILE
SYSBIN;FIDO BIN
Other programs that don't automatically repurify themselves, but need to
be invoked properly after assembling:
SYS;TS MIDAS (sblk orig in SYSBIN;MIDAS *BIN, start at PURIFY)
.MAIL.;COMSAT LAUNCH (orig in SYSNET;COMSAT BIN, start at PURIFY)
DUMP remembers the name of the machine it was assembled on, and
complains if the current system isn't it. Just rebuild.
This can be bypassed by setting variable WRONG back to zero
after it's started up.
DUMP needs SYSENG;FSDEFS > and SYSNET;NETWRK > to assemble.
DUMP hacks the file SYSENG;MACRO TAPES.
Also hacks .TAPE0; etc??
FTPS is patched so it doesn't try (and fail) to look up its own host name.
MAINIT+25/ MOVEI A,[ASCIZ /MIT-NX.US.ORACLE.COM/] ? NOP
Patched in SYSBIN;FTPS BIN.
Original binary in SYSBIN;FTPS ORGBIN.
This patch is unnecessary if the NETWRK hostname lookup software
is working (see HOSTS3 below), but the NETHST syscall is buggy
cuz it returns the value of IMPUS, not IMPUS3. Before fixing this,
have to be sure nothing else will break! Sigh!
SYS;NET MAIL - Telnet/supdup server announcement.
Revised for NX, original in NET OMAIL.
Note: there is a long-standing bug in the TELSER/STY interaction such
that the initial %TDORS for a supdup connection happens halfway through
a longish greeting message (NET MAIL) and wipes the rest out after
the 105th char. Note 23 chars in machine greeting, plus a CRLF
or so, to make 130 chars. This may be STY buffer size?
SYS;SYSTEM MAIL - universal DDT startup announcement, if any.
Flushed, original in SYSTEM OMAIL.
SYS;RECORD TIME - Checked & updated to see how long ITS has run.
Various programs that check machine name specially:
DUMP (as noted above)
SYSEN1;PWORD - has table of per-machine specs
INQUIR;INQUIR - similar check
MACLSP - tries to map predefined atom or something, at UDIRSE.
Checks for AI,ML,MC,MD,MX.
MLDEV - checks for known machines using 2-char assumption.
SYSNET;TELSER - Checks machine name to select greeting header.
SYSEN1;SENDER - Checks machine name to see if sending to a known ITS
or not. (Doesn't bother to use host table to check sys type!)
ITS edits or patches:
See also "modlog" which may have more details.
FIXED in SYSTEM;ITS 1646
Quantum timer patch:
This is an ITS bug that skews the quantum counter timing.
UTRNTR+2/ LDB A, [
125603/ SETZ Q,UPQUAN(U) 044000,,UPQUAN(u)
]
FIXED in SYSTEM;IMP 367
NETHST patch:
ANETH2+3/ MOVE B,NIFIPA (from MOVEI B,IMPUS)
Not a bugfix, just a crude firewall patch:
TCPO4+23/ JRST OPNL6 (from CALL PKTGFI)
(prevents outbound TCP opens)
FIXED in SYSTEM;TIME 951
Y2K patch. Replace:
CLCQDT+2/
PUSH P,E-1
PUSH P,E
MOVE E-1,FYEAR
IDIVI E-1,100.
DPB E,[330700,,QDATE] ;YEAR
POP P,E
POP P,E-1
with:
PUSH P,E
MOVE E,FYEAR
SUBI E,1900.
DPB E,[331000,,QDATE] ;YEAR
POP P,E
NSALV bug:
This code in NSALV (part of the INIT startup) is sorta buggy
in that when NDRIVE is 1 it is asking for a reverse BLT...
SETOM DRIVE ;For now, assume all drives on-line.
MOVE A,[DRIVE,,DRIVE+1]
BLT A,DRIVE+NDRIVE-1
DSKDMP bug:
I forget where this is but am making a note so I remember to
someday come back and document it.
There is a race condition on booting where DSKDMP initiates a
disk transfer that clobbers the code it is about to execute
next. It works on a real machine because the CPU is much
faster than the disk.
Patched, but not really needed now that KLH10 can load ITS directly.
DIRECTORY STATUS
================
(NNF = No New Files since final AI/MC snapshot)
OK . - Boot load files. See "bootload.files" for more info.
Most of old AI stuff flushed as useless.
OK .INFO. - NNF, restore all
OK .MAIL. - Empty, must fill for COMSAT (and flush old useless files)
OK .MSGS. - Empty, old msgs all obsolete & discarded.
OK .TAPE0 - Empty is OK; contains some gubbish from KLH dumps.
OK .TECO. - NNF, restore all
OK .TEMP. - NNF, restore all (empty except for a -READ- -THIS- file)
? C - only partially restored
OK CHANNA - NNF, Restore all
OK CRASH - Empty. Note COMSAT crashes will leave a BURNUP file here,
and each use of CRTSTY adds one line to CRTSTY LOG.
OK DEVICE - NNF, Restore all (but not all are needed)
However, file CHAOS HOST# isn't present in Alan's snapshot.
OK DRAGON - NNF, Restore (but not all are needed; lots of junk!)
OK EMACS - NNF, Restore all
OK GREN - PERSONAL, NX-only. Flushed from distrib.
? HACK - New, retain for NX, not needed for distrib
(but update or remove messages)
OK INFO - NNF, Restore all
OK INQUIR - NNF, Restore all
OK JLV - PERSONAL, NX-only. Flushed from distrib.
OK KLH - PERSONAL, NX-only, but may be a few sources that need
to be included for distrib: OUT,NUUOS,OUTDOC,MACROS.
Move to KSC.
(problem; need to update .INSRTs of other progs?)
OK KSC - NNF, restore all.
? KSHACK - Mostly new files. Perhaps restore others?
Note the DEC ucode source is proprietary; exclude it?
OK LISP - NNF, Restore all (needed for INQUIR, sigh)
OK MAINT - NNF, Restore all
This contains DEC diagnostic binaries but leave it for now.
OK MIDAS - NNF except for bugfix: TSRTNS 234
OK MRC - PERSONAL, NX-only. Flushed from distrib.
OK SYS - Mostly NNF, restore all. Lots of possibly superfluous
large PURQIO files, ugh. But don't know which progs might
use which of them...
OK SYS1 - NNF, Restore all
OK SYS2 - NNF, Restore all
OK SYS3 - NNF, Restore all
OK SYSBIN - Mostly NNF, restore. Lots of OBINs that could flush.
OK SYSDOC - NNF, restore all
OK SYSEN1 - NNF, restore all
OK SYSEN2 - NNF, restore all
OK SYSENG - NNF, restore all except for MACRO TAPES (site-specific)
OK SYSHST - Mostly NNF, restore all (new versions of H3TEXT).
OK SYSNET - Mostly NNF, restore all (new version of TELSER).
OK SYSTEM - Several new files; should clean out old versions.
FILE UPDATES AND CHANGES:
========================
This list contains all files added or modified since NX first came up
from the original AI/MC snapshot, with descriptive notes. It does NOT
contain links; many links have a creation time postdating this but
they are almost certainly artifacts of the way link restoral was done.
See "nxmodfiles" for a complete list of all files or links that
postdate the creation of NX.
NX:C;
NX:CHANNA;
NX:CRASH;
0 CRTSTY LOG 0 +333 ! 9/24/99 18:46:17 (9/24/99) KLH
NX:DEVICE;
NX:DRAGON;
0 DRAGON HOARD 4 +90 ! 6/11/92 02:56:32 (15/31/127) -??-
0 RAKASH PFTHMG 4 +578 ! 6/11/92 02:56:32 (10/23/99) -??-
NX:EMACS;
NX:GREN;
0 GREN LOGIN 0 +489 ! 7/23/93 18:50:26 (8/17/93)
0 GREN OSENDS 0 +44 ! 7/23/93 18:55:38 (7/23/93)
0 GREN PLAN 0 +8 ! 7/29/93 12:10:33 (8/17/93)
NX:HACK;
0 KLH10 MSG 3 +157 ! 11/8/92 01:46:07 (11/10/92) -??-
0 KLH10 NEWS 0 +660 ! 5/25/93 15:52:15 (5/25/93) KLH
0 NX NEWS 0 +275 ! 5/3/93 14:24:31 (7/22/93) KLH
NX:INFO;
NX:INQUIR;
NX:KLH;
0 COM INFO 0 +229 ! 1/29/93 00:31:09 (5/20/93)
0 CONFIG 1 7 +1 ! 11/7/92 13:41:12 (9/24/99) -??-
0 CONFIG 2 7 +1 ! 9/24/99 04:04:03 (9/24/99)
0 CONFIG 3 6+1016 ! 9/24/99 04:07:38 (9/24/99)
0 DDT NBIN 3 +458 ! 1/5/93 17:15:15 (5/20/93)
0 DDT NEW 3 +449 ! 1/5/93 17:08:04 (5/20/93)
0 DDT TORIG 3 +458 ! 1/5/93 17:08:45 (4/5/93)
0 FIRST EMACS 0 +3 ! 11/8/92 01:29:21 (10/3/99)
0 ITS BIN 56 +346 ! 10/28/93 11:35:05 (10/28/93)
0 KLH MAIL 1 +86 ! 7/23/93 18:45:00 (10/24/99) .MAIL.
0 KLH10 ARCHIV 0 +866 ! 5/25/93 16:00:15 (10/3/99) .MAIL.
0 KLH10 PEOPLE 0 +384 ! 8/5/93 12:29:21 (8/23/93)
0 MAIL FRMHQM 0 +22 ! 11/9/92 20:42:04 (5/20/93) -??-
0 TEMP FILE 0 +13 ! 7/19/92 10:40:14 (11/8/92)
0 WALL 1 5 +152 ! 12/23/92 15:09:31 (12/23/92)
0 WALL 2 0 ! 1/14/93 00:44:45 (1/14/93)
0 WALL 3 8 +15 ! 1/14/93 00:54:11 (1/14/93)
0 WALL 4 8 +15 ! 1/14/93 03:41:59 (1/14/93)
0 WALL 5 0 +133 ! 1/16/93 06:13:50 (1/16/93)
0 WALL 6 7 +992 ! 1/16/93 06:16:51 (1/16/93)
0 WALL 7 7 +992 ! 1/16/93 06:43:49 (1/16/93)
0 XLINKS 1 2 +12 ! 11/8/92 01:20:54 (12/9/92) -??-
0 _FTPU_ OUTPUT 0 ! 1/28/93 17:58:51 (1/28/93)
NX:KSC;
TS ZOTZ - New, just a ZOTZ BIN patched for 50K (not 500K) loop count
0 TS ZOTZ 3 +317 ! 12/16/92 16:51:33 (9/24/99) KLH
NX:KSHACK;
0 NSALV BIN 11 +437 ! 7/20/92 04:35:29 (7/20/92) KLH
0 NXBOOT ALLFS 0 +22 ! 1/16/93 06:16:18 (4/9/93) KLH
0 NXBOOT FILES 0 +42 ! 1/16/93 06:11:07 (4/9/93) KLH
NX:MAINT;
NX:MIDAS;
0 TS NMIDAS 22 +357 ! 6/23/92 15:10:28 (4/9/93) -??-
0 TSRTNS 234 27 +612 ! 6/23/92 17:23:37 (4/9/93) -??-
NX:MRC;
NX:SYS;
NET MAIL - Telnet/supdup server announcement. Revised for NX,
original in NET OMAIL.
:MSGS TIMES - Used by DDT's :MSGS command to remember the last
time each user invoked it; data file of uname/datim pairs.
TS MIDAS - New, version 458. Old version (433) renamed to TS OMIDAS.
0 :MSGS TIMES 4 ! 10/24/99 01:53:05 (10/24/99) KLH
0 NET MAIL 0 +16 ! 5/3/93 14:28:10 (10/24/99) KLH
0 RECORD TIME 0 ! 6/19/92 17:19:49 (9/24/99) KLH
0 TS MIDAS 22 +357 ! 4/9/93 21:36:42 (9/24/99) KLH
0 TS NAME 16 +108 ! 4/15/93 19:07:13 (10/3/99) KLH
0 TS PEEK 14 +726 ! 4/7/93 19:03:07 (10/24/99) KLH
0 TS PROBE 7 +8 ! 7/23/93 18:54:38 (7/23/93) GREN
NX:SYS1;
0 TS METER 3 +398 ! 5/19/93 19:12:17 (5/20/93) MRC
0 TS PRUFD 0 +506 ! 4/6/93 17:23:25 (4/6/93) KLH
0 TS SYSMSG 2 +568 ! 6/7/93 13:04:43 (6/21/93) KLH
NX:SYS2;
0 TS XXFILE 5 +982 ! 4/5/93 19:59:23 (4/5/93) KLH
NX:SYS3;
NX:SYSBIN;
FTPS BIN Patched with new IP address; orig is FTPS ORGBIN.
MIDAS 458BIN New version, latest.
0 FIDO BIN 3 +430 ! 5/11/93 13:39:52 (5/11/93) KLH
0 FTPS BIN 10 +367 ! 11/7/92 13:40:41 (5/19/93) KLH
0 HOSTS3 2002 68 +757 ! 5/19/93 12:51:50 (10/24/99) KLH
0 MIDAS 458BIN 17 +108 ! 4/9/93 21:26:11 (4/9/93) KLH
0 TELSER BIN 3 +87 ! 5/3/93 13:53:46 (10/24/99) KLH
New version (TELSER 173) with NX greeting.
Old file renamed to TELSER AIBIN.
NX:SYSDOC;
NX:SYSEN1;
NX:SYSEN2;
NX:SYSENG;
Must flush this site-specific weirdo; it will conflict with version
from dump! DUMP maintains this as a directory of all macro tapes
written on the system.
0 MACRO TAPES 40 ! 3/1/93 21:43:22
0 MACRO TAPES 39 +64 ! 9/24/99 04:32:12 (9/24/99) KLH
NX:SYSHST;
New versions of H3TEXT >.
0 H3TEXT 2000 82 +412 ! 5/17/93 18:36:38 (5/17/93) -??-
0 H3TEXT 2002 74 +35 ! 5/17/93 19:33:08 (5/19/93) KLH
NX:SYSNET;
0 TELSER 173 7 +886 ! 5/3/93 13:53:31 (5/3/93) KLH
New version with NX greeting.
NX:SYSTEM;
Several new files; should clean out old versions.
0 CHAOS 289 16 +328 ! 7/19/92 09:31:21 (7/19/92) KLH
0 CONFIG 197 6+1008 ! 7/19/92 11:00:02 (9/24/99) KLH
0 CONFIG 198 6+1016 ! 9/24/99 04:07:38 (9/24/99) KLH
0 DDT BIN 3 +671 ! 7/19/92 13:53:44 (7/19/92) KLH
0 DSKDMP 216 9 +809 ! 7/19/92 13:56:53 (4/21/93) KLH
0 DSKDMP BIN 2 +296 ! 7/20/92 04:35:00 (7/20/92) KLH
0 DSKDMP BT 0 +885 ! 7/20/92 04:35:16 (7/20/92) KLH
0 IMP 366 6 +216 ! 7/20/92 04:20:41 (9/24/99) KLH
0 INET 139 9 +838 ! 7/20/92 04:58:30 (9/24/99) KLH
0 ITS 1645 118 +583 ! 7/19/92 06:12:26 (9/24/99) KLH
0 ITS 645BIN 56 +345 ! 7/20/92 04:30:13 (11/23/92) KLH
0 ITS 645NX 56 +346 ! 9/24/99 04:09:48 (9/24/99) KLH
0 ITS BIN 56 +346 ! 9/24/99 19:00:59 (9/24/99) KLH
0 ITS OBIN 56 +345 ! 1/28/93 00:16:44 (1/28/93) KLH
0 NET 33 2 +725 ! 7/19/92 06:06:21 (9/24/99) KLH
0 TM03S DEFS5 1 +65 ! 7/20/92 04:23:56 (9/24/99) KLH
0 TTYTYP 315 3 +69 ! 7/19/92 11:45:53 (9/24/99) KLH
NX:.;
0 @ AI-ITS 58 +29 ! 12/17/92 17:04:48 (4/9/93) -??-
0 @ ITS 62 +464 ! 12/17/92 17:05:37 (1/14/93) -??-
0 @ NSALV 12 +675 ! 12/17/92 17:05:03 (4/19/93) -??-
0 @ SALV38 12 +540 ! 6/4/92 12:32:09 (1/14/93) -??-
0 DDT 068BIN 3 +671 ! 7/19/92 13:53:44 (4/9/93) -??-
0 DSKDMP 216BIN 2 +296 ! 7/20/92 04:35:00 (4/9/93) -??-
0 DSKDMP 216BT 0 +885 ! 7/20/92 04:35:16 (4/9/93) -??-
0 ITS 645BIN 52 +240 ! 7/20/92 04:34:15 (4/9/93) -??-
0 NSALV 260BIN 11 +437 ! 7/20/92 04:35:29 (4/19/93) -??-
NX:.INFO.;
NX:.MAIL.;
Empty until COMSAT launched for first time.
Most of the old files were useless, but some saved
for posterity.
0 ID 14 0 ! 5/19/93 18:45:58 (7/23/93) KLH
0 LIST EQV 2 +191 ! 5/24/93 15:58:39 (7/23/93)
0 LIST QUEUE 0 +203 ! 5/24/93 15:58:39 (5/24/93)
0 LIST MASTER 0 +203 ! 5/24/93 15:58:39 (8/20/93)
0 LIST REMIND 0 +201 ! 5/19/93 18:45:58 (5/24/93) KLH
0 LISTS MSGS 0 ! 5/19/93 18:45:58 (5/24/93) KLH
0 COMSAT LAUNCH 32 +463 ! 5/19/93 18:45:44 (10/23/99) KLH
0 NAMED ERR000 0 +8 ! 5/19/93 18:46:00 (5/19/93) KLH
0 NAMED ERR001 0 +8 ! 5/24/93 15:58:39 (5/24/93)
0 NAMES 2000 1 +32 ! 5/19/93 17:03:19 (5/24/93) KLH
0 NAMES 2001 1 +59 ! 5/24/93 15:56:18 (8/20/93) KLH
0 STATS 1 1 +738 ! 10/23/99 00:29:02 (10/23/99) -??-
0 XLIST EQV 2 +137 ! 5/19/93 17:04:49 (5/19/93) KLH
0 XLIST MSGS 0 +201 ! 5/19/93 17:07:49 (5/19/93)
0 XLIST QUEUE 0 +201 ! 5/19/93 17:23:04 (5/19/93) KLH
0 XLIST MASTER 0 +203 ! 5/19/93 17:23:04 (5/19/93) KLH
0 XLIST REMIND 0 +201 ! 5/19/93 17:04:47 (5/19/93) KLH
0 XNAMED ERR064 0 +9 ! 5/19/93 16:13:18 (5/19/93) KLH
0 XNAMED ERR065 0 +9 ! 5/19/93 17:04:49 (5/19/93) KLH
L XNAMES 1062 .MAIL.;NAMES 1062 5/17/93 14:55:27 (5/17/93) KLH
0 XNAMES 1064 0 +391 ! 5/17/93 16:53:36 (5/19/93) KLH
0 XNAMES 1065 1 +32 ! 5/19/93 17:03:19 (5/19/93) KLH
0 XSTATS 1 3 +166 ! 5/19/93 18:31:57 (5/19/93) KLH
NX:.TAPE0;
L LAST USE KLH;LIST 990924 9/24/99 04:32:19 (9/24/99) KLH
0 TAPE 0 0 +46 ! 9/24/99 04:32:13 (9/24/99) KLH
0 TAPE 1 0 +10 ! 4/19/93 18:47:27 (4/19/93) -??-
0 TAPE 2 3 +687 ! 4/19/93 18:35:28 (4/19/93) -??-
0 TAPE 3 0 +484 ! 4/21/93 21:07:36 (4/21/93) -??-
NX:.TECO.;
NX:.TEMP.;
Note fucking DUMP gubbish to do FS save/restore properly:
To save stuff, use:
DUMP FULL LINKS
To restore stuff, use:
RELOAD LINKS CRDIR SORRY ???
(Don't use LOAD, use RELOAD!!!)
Fucking DUMP also appears to lose when loading up a new dir when the
first file is a link, even if the CRDIR option is set!!!
Need to create the dir by hand, then continue.
Idea for new DUMP format to preserve stuff better:
Extend file header to 9 words.
Move Dump-check and don't-reap bits to LH of link,,pack#
Add sixbit author name at end.
Must modify:
NSALV - to handle bits and potentially convert author to index.
Potentially store MFD if found, use to generate new
UFDs as needed.
DUMP - to output and read in extended format.
ITS - add new syscall to read/write bytesize and file length?
RFSIZE, SFSIZE arg1 - bytesize, arg2 - # bytes
For SFSIZE, # bytes must be within last word or at start of
next, else error.
if (BS <= 0 || 36 < BS) error;
BPW = 36/BS;
if (((# + BPW-1) / BPW) != FILLEN) error;
Date: Wed, 21 Apr 93 19:10:33 -0400
From: Alan Bawden <Alan@lcs.mit.edu>
To: klh@us
Subject: ITS Turist Tips
Date: Wed, 21 Apr 1993 9:34:08 BST
From: Ken Harrenstien <klh@us.oracle.com>
Sure, but why not run it? The statistics are sometimes interesting.
Also PFTHMG runs hourly, daily, monthly and yearly batch jobs, which
is a useful service in general...
I guess. Now you have to explain what those various batch jobs are
doing there...
Let's see... (Wow, there seem to be more of these than I remember!)
On AI, hourly we have:
DRAGON;HOURLY CNAVRL ==> .MAIL.;COMSAT LAUNCH
Just makes sure COMSAT doesn't stay dead for long.
DRAGON;HOURLY GCMAIL
This is something SRA wrote to garbage collect files from the .MAIL.
directory. I don't remember exactly what it does -- perhaps it deletes
OSTATS files that are older than a few days or something. I do remember
that there was some disagreement about how aggressive this should be.
Penny didn't want it as aggressive as SRA did. Penny won.
DRAGON;HOURLY H3GET
This is something I wrote that keeps the host tables on all the ITS
machines in sync. It checks the host tables on other ITS machines, and if
it finds one that is newer than the local copy, it sucks it over.
DRAGON;HOURLY MODEMS ==> CHANNA;TS MODEMS
This does the same thing as CHANNA;RAKASH MODEMS, this way the damn things
only stay broken for at most an hour.
DRAGON;HOURLY TMPKIL ==> SYS2;TS TMPKIL
I think this has something to do with cleaning up the files on .TEMP. -- I
don't know its algorithm.
DRAGON;HOURLY UPTIME ==> BAWDEN;UPTIME BIN
This is just a little personal hack I wrote to keep track of system uptime.
It just stores the current system uptime in the creation date of some file
on my directory.
Then every night soon after midnight we run:
DRAGON;DAILY BDAY
This mails out the daily birthday greetings mail.
DRAGON;DAILY EXPIRE ==> SYS2;TS GMSGS
This cleans out the expired system messages on .MSGS..
DRAGON;DAILY NO.TS
This searches for files named GUEST*;TS * and USER*;TS * and deletes them.
(People sharing a directory shouldn't create TS files for each other to
trip over by accident.)
On the first of the month, and the first of the year we run:
DRAGON;MNTHLY MNTHLY ==> DRAGON;YEARLY YEARLY
DRAGON;YEARLY YEARLY
This just sends mail to Alan to let him know that Puff has actually run the
monthly and yearly batch jobs, even though normally these are the only
entries.
On MC, we also have HOURLY DIGEST, which is the mailing list digestifier
(and maybe some others I don't remember).
And what's PANDA?
RWK;TS PANDA is the administrator's interface to PWORD. Its lets you turn
people's accounts on and off and stuff like that. Since you aren't going
to run PWORD, you don't need it.
Host table madness:
Several programs will die on startup if they cannot find their own
host address or look up their name using this address.
Amongst them are FTPS.
SYSHST;H3MAKE > - source for a small program that DRAGON is supposed to run
periodically. It invokes
SYSHST;HOSTS3 BIN (compiled from SYSHST;HOSTS3 >)
with appropriate non-trivial args that cause it to snarf up the file
SYSHST;H3TEXT >
and compile it into the binary-format file
SYSBIN;HOSTS3 >
which is used by everything else on ITS to look up host names
via this package:
SYSNET;NETWRK >
Note that COMSAT uses a new roundabout mechanism. Instead of the NETWRK
library it now uses
SYSNET;RESOLV >
which replaces all NETWRK calls and invokes the DQ device, installed as
DEVICE;JOBDEV DQ
compiled from
SYSNET;DQXDEV >
which itself uses NETWRK to look up HOSTS3 information. This DQ
device was intended to be a temporary but more reliable replacement
for
SYSNET;DQDEV >
which is a CSTACY product attempting to do real DNS lookups via UDP.
MIT-NX changes:
A new H3TEXT > was pulled over from
lcs.mit.edu:/hosts/.misc/hosts3.txt
This file is generated automatically by a batch job.
It was edited to remove X-terminals and chaosnet hosts, and
some NX-local names added.
COMSAT configuration:
Must eventually flush its HN$ symbols.
At BUGHST/ must put the IP address of the host that deals with
(BUG RANDOM-PROGRAM) messages.
At DOMGAT/ must put the IP address of a mail relay host. This
host will receive all mail for addresses that we can't
resolve ourselves.
At TCPGAT/ can put IP address of a mail relay to handle *all*
external TCP/IP traffic. This is needed when there is
a firewall host like gatekeeper.us.oracle.com, sigh.
NX .MAIL.
FREE BLOCKS #0=18478
0 ID 703539 0 ! 4/23/85 10:27:26 FLUSHED
0 ID 723380 0 ! 4/23/85 10:27:26 FLUSHED
0 LIST EQV 15 ! 4/19/90 17:41:08 FLUSHED
0 LIST QUEUE 2 ! 4/20/90 11:07:06 FLUSHED
0 LIST MASTER 5 ! 4/20/90 11:05:48 FLUSHED
0 LIST REMIND 1 ! 11/19/85 18:46:42 FLUSHED
0 LISTS MSGS 361 ! 4/20/90 11:05:47 FLUSHED
0 LOCK UNIQUE 1 ! 4/23/85 10:27:24
0 *MSG EXP 2 ! 1/30/90 20:26:07
0 -READ- -THIS- 1 ! 12/19/86 13:47:38
0 .AIOLD NAMES 17 ! 7/27/85 16:35:38
0 .DM NAMES 3 ! 7/22/83 13:31:25
0 .MCNEW NAMES 19 ! 5/17/86 00:45:39
0 .MCOLD NAMES 24 ! 5/5/86 13:41:19
0 .MLOLD NAMES 9 ! 2/21/84 00:53:15
0 BBOARD INFO 1 ! 4/29/84 18:01:28
0 COMSAT BIN 31 ! 12/23/89 16:01:35
0 COMSAT LAUNCH Patched with:
BUGHST/ self
DOMGAT,TCPGAT/gateway
0 COMSAT LUNCH 33 ! 9/19/90 16:17:58 AI Original
0 COMSAT OBIN 28 ! 11/10/89 17:55:53
0 COMSAT OLAUNC 33 ! 11/10/89 17:56:40 FLUSHED (pure version of OBIN)
0 FAILED STUFF 24 ! 3/29/90 22:36:45 FLUSHED
0 MAIL 1 1 ! 9/20/90 18:15:55 FLUSHED (random ALAN stuff)
0 MAIL 2 1 ! 9/20/90 18:15:55 FLUSHED
0 MAILIN 1 1 ! 4/20/90 11:16:56 FLUSHED
0 NAMED ERR094 1 ! 4/5/90 22:19:22 FLUSHED
0 NAMED ERR096 1 ! 4/14/90 02:10:28 FLUSHED
0 NAMED ERR097 1 ! 4/19/90 17:41:08 FLUSHED
0 NAMES 1096 7 ! 4/14/90 02:06:27 FLUSHED
0 NAMES 1097 7 ! 4/19/90 17:36:00 Renamed to .AIKS NAMES
0 NAMES INFO 3 ! 7/24/89 23:41:25
0 OSTATS 1634 51 ! 4/18/90 16:31:55 FLUSHED
0 OSTATS 1635 51 ! 4/19/90 23:07:52 FLUSHED
0 XID 22 0 ! 10/30/89 19:12:43 FLUSHED
0 XLIST EQV 1 ! 10/30/89 22:30:30 FLUSHED
0 XLIST MSGS 0 ! 10/31/89 01:40:09 FLUSHED
0 XLIST QUEUE 1 ! 12/23/89 16:08:06 FLUSHED
0 XLIST MASTER 1 ! 12/23/89 16:08:06 FLUSHED
0 XLIST REMIND 1 ! 10/30/89 19:18:24 FLUSHED
0 XLOCK UNIQUE 1 ! 10/30/89 19:12:40 FLUSHED
0 XNAMED ERR062 1 ! 10/30/89 19:20:18 FLUSHED
0 XNAMED ERR063 1 ! 10/30/89 22:30:29
L XNAMES 1062 .MAIL. NAMES 1062
0 XNAMES 1063 1 ! 10/30/89 22:23:34
0 XSTATS 1 3 ! 12/23/89 16:18:39
NX SYSBIN
FREE BLOCKS #0=18565
0 BIG 0DAT 15 ! 4/20/90 11:26:41
L -READ- -THIS- SYSENG -READ- -THIS-
0 AP BIN 1 ! 3/13/84 05:25:26
0 BOLIO 174 63 ! 12/13/82 20:16:15
0 BOLIO 177 67 ! 12/7/83 03:56:14
0 BOLIOP 191.1 1 ! 1/25/83 03:34:24
0 BOLIOP 191.2 1 ! 4/7/83 00:20:25
0 BOLIOP 191.3 1 ! 6/7/83 20:05:15
0 BOLIOP 191PAT 1 ! 6/7/83 20:06:01
0 BOLIOP 195PAT 1 ! 12/7/83 03:55:56
0 BRANDX 45 58 ! 12/20/82 18:05:01
0 BX45 (PDIR) 1 ! 12/20/82 18:04:59
0 BXL23 (PDIR) 1 ! 8/31/81 01:52:02
0 BXLSB 30 92 ! 12/20/82 18:20:08
0 CHTN BIN 4 ! 10/22/86 22:02:55
0 CNVRT BIN 2 ! 9/29/76 02:35:32
0 CRTSTY BIN 30 ! 8/2/89 20:58:34
0 CRTSTY OBIN 27 ! 7/22/85 13:18:43
0 CTN BIN 28 ! 12/31/84 11:07:05
0 CTN OBIN 28 ! 12/31/83 08:42:22
0 CTN SCRTST 25 ! 3/17/82 04:28:57
0 DDT 545BIN 27 ! 11/26/88 16:04:38
0 DUMP 420BIN 14 ! 6/2/88 17:59:35
0 DUMP 422BIN 14 ! 9/20/88 14:46:06
0 DUMP 442BIN 14 ! 8/4/89 15:17:23
L DUMP BIN SYSBIN DUMP >
0 FIDO BIN 4 ! 5/11/93 13:39:52
0 FILE BIN 8 ! 12/19/86 17:12:14
0 FILE NBIN 8 ! 2/20/89 18:08:25
0 FTPS BIN 11 ! 11/7/92 13:40:41
0 FTPS OBIN 12 ! 8/2/89 21:16:07
0 FTPS ORGBIN 11 ! 11/27/89 00:33:06
0 FTPU BIN 11 ! 8/2/89 21:12:42
0 FTPU OBIN 11 ! 3/5/89 15:00:03
0 GMSGS OBIN 3 ! 2/17/89 03:02:49
0 HOST1 OLD548 3 ! 3/15/83 19:00:48
0 HOSTS2 29 23 ! 5/2/85 19:22:53
0 HOSTS2 31 24 ! 6/16/85 01:54:29
0 HOSTS3 1560 72 ! 4/16/90 05:44:54 FLUSHED
0 HOSTS3 1561 72 ! 4/18/90 05:16:33 FLUSHED
0 HOSTS3 1562 72 ! 4/20/90 05:31:08 Renamed to HOSTS3 AI1562
0 HOSTS3 OLD 82 ! 2/24/89 04:48:23
0 HOSTS3 OLDOLD 71 ! 4/21/87 19:51:20
0 HST3BD 2 53 ! 8/23/85 01:48:56

View File

@ -0,0 +1,40 @@
Instructions for making a system-boot dump tape for ITS:
[0] Remember to write-mount a tape-file name with the KLH10 "W" command.
[1] After starting up DUMP in ITS, patch it so the variable WRONG is 0.
This allows writing on the tape. Sigh.
dump^K!
DUMP .442
*** WRONG VERSION OF DUMP--ASSEMBLED FOR AI BUT RUNNING ON NX ***
*** CERTAIN TAPE OPERATIONS WON'T BE ALLOWED ***
_
6146) .IOT 5,1 $^K
*wrong/'DUMPER$: -1 0
$p
[2] Give the command:
DUMP LIST,LINKS ; Make a WALL > listing, and include links.
At the first FILE= prompt, type "KSHACK;NXBOOT FILES ^F".
This should read in a list of files to dump. (also see note below)
[3] Type RETURN and RETURN to start it going.
[4] When done, do a REWIND, to ensure the tape-file is finalized.
NOTE:
If ^F doesn't work or the file "NXBOOT FILES" doesn't exist, enter the
following directories in response to "FILE=":
.
SYS, SYS1, SYS2, SYS3, SYSBIN
KSHACK, SYSTEM, MIDAS
SYSENG, CHANNA, DEVICE, DRAGON
MAINT (the file MAINT;PART A is a good test program)
If creating a general "core system" dump and not just a minimal boot
set, also add these directories:
EMACS, INFO, INQUIR, KSC
SYSDOC, SYSEN1, SYSEN2, SYSHST, SYSNET

5
run/kst10/README Normal file
View File

@ -0,0 +1,5 @@
The following files are derived from Digital software and subject to
Digital licensing requirements:
ksbddt.exe (bootstrap with DDT)
ksboot.exe (disk/tape bootstrap)

BIN
run/kst10/ksbddt.exe Normal file

Binary file not shown.

BIN
run/kst10/ksboot.exe Normal file

Binary file not shown.

5
run/kst20/README Normal file
View File

@ -0,0 +1,5 @@
The following files are derived from Digital software and subject to
Digital licensing requirements:
smboot-k.sav (disk bootstrap)
smmtbt-k.sav (tape bootstrap)

19
run/kst20/inst-kst20.ini Normal file
View File

@ -0,0 +1,19 @@
; This is a sample KLH10 config file for a KS10 running TOPS-20.
; Define basic KS10 device config - two RH11s each on its own Unibus
devdef rh0 ub1 rh11 addr=776700 br=6 vec=254
devdef rh1 ub3 rh11 addr=772440 br=6 vec=224
; Provide one disk, one tape in config T20 expects
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=T20-RP06.0-dbd9 iodly=0
devdef mta0 rh1.0 tm03 fmtr=tm03 type=tu45
; Mount installation tape, skipping past ucode and defective boot
devmount mta0 bb-d867e-bm.tap fskip=2
; Load fixed tape bootstrap directly
load smmtbt-k.sav
; Now ready to GO

17
run/kst20/kst20.ini Normal file
View File

@ -0,0 +1,17 @@
; This is a sample KLH10 config file for a KS10 running TOPS-20.
; Define basic KS10 device config - two RH11s each on its own Unibus
devdef rh0 ub1 rh11 addr=776700 br=6 vec=254
devdef rh1 ub3 rh11 addr=772440 br=6 vec=224
; Provide one disk, one tape in config T20 expects
devdef dsk0 rh0.0 rp type=rp06 format=dbd9 path=T20-RP06.0-dbd9 iodly=0
devdef mta0 rh1.0 tm03 fmtr=tm03 type=tu45
; Define HOST device hackery if monitor supports it
;devdef idler 700 host
; For convenience, load up disk bootstrap
load smboot-k.sav

BIN
run/kst20/smboot-k.sav Normal file

Binary file not shown.

BIN
run/kst20/smmtbt-k.sav Normal file

Binary file not shown.