PiDP-8/I Software

Check-in [60a72125bd]
Log In

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Moved kermit from binary blob media/os8/subsys/k12.tu56 as option k12 to kermit-12 build from source under control of kermit-12.pspec as option kermit-12. TODO: Find someone who can test out this kermit. It's a bit different from what we've had in the past.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | os8pkg
Files: files | file ages | folders
SHA1: 60a72125bd71d789335a4d6b762d9d72a8c04c9a
User & Date: poetnerd 2020-10-29 00:31:50.411
Context
2020-10-29
00:50
Document more of the os8pkg syntax. check-in: 5f5c6f66c7 user: poetnerd tags: os8pkg
00:31
Moved kermit from binary blob media/os8/subsys/k12.tu56 as option k12 to kermit-12 build from source under control of kermit-12.pspec as option kermit-12. TODO: Find someone who can test out this kermit. It's a bit different from what we've had in the past. check-in: 60a72125bd user: poetnerd tags: os8pkg
2020-10-28
16:00
Added bin/os8pkg to the list of scripts installed by "make install" check-in: 61ff141003 user: tangent tags: os8pkg
Changes
Unified Diff Ignore Whitespace Patch
Changes to auto.def.
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
    crt         1  "CRT-style rubout processing"
    dcp         1  "the DCP disassembler"
    e8          1  "Emacs-like Editor"
    focal69     0  "FOCAL,1969"
    fortran-ii  1  "FORTRAN II"
    fortran-iv  1  "FORTRAN IV"
    init        1  "the OS/8 INIT message"
    k12         1  "12-bit Kermit"
    macrel      1  "the MACREL assembler"
    music       0  "*.MU files"
    uwfocal     1  "U/W FOCAL (only)"
    vtedit      0  "the TECO VTEDIT setup"
}

set alloptions {}







|







62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
    crt         1  "CRT-style rubout processing"
    dcp         1  "the DCP disassembler"
    e8          1  "Emacs-like Editor"
    focal69     0  "FOCAL,1969"
    fortran-ii  1  "FORTRAN II"
    fortran-iv  1  "FORTRAN IV"
    init        1  "the OS/8 INIT message"
    kermit-12   1  "12-bit Kermit"
    macrel      1  "the MACREL assembler"
    music       0  "*.MU files"
    uwfocal     1  "U/W FOCAL (only)"
    vtedit      0  "the TECO VTEDIT setup"
}

set alloptions {}
Changes to media/os8/subsys/README.md.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
OS/8. Some of the data on these tapes could potentially be used with
other PDP-8 operating systems, but at minimum, it would require
translating the data from OS/8 tape format.


| DECtape Image File Name | Content Description
| ----------------------------------------------------------------------------
| `k12.tu56`              | [Kermit-12][k12] for OS/8, OS/78, OS/278, and OS/12
| `music.tu56`            | [RFI-based][rfi] music playback programs


## Controlling the Build Process

Most of these files are merged into the OS/8 binary disk image by
default, but can be excluded by giving a `--disable-os8-NAME` flag to







<







13
14
15
16
17
18
19

20
21
22
23
24
25
26
OS/8. Some of the data on these tapes could potentially be used with
other PDP-8 operating systems, but at minimum, it would require
translating the data from OS/8 tape format.


| DECtape Image File Name | Content Description
| ----------------------------------------------------------------------------

| `music.tu56`            | [RFI-based][rfi] music playback programs


## Controlling the Build Process

Most of these files are merged into the OS/8 binary disk image by
default, but can be excluded by giving a `--disable-os8-NAME` flag to
Deleted media/os8/subsys/k12.tu56.

cannot compute difference between binary files

Added scripts/misc/kermit-12-rk05.os8.
















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Script to build Kermit-12 from source to create
# kermit-12.tu56 install image.
# We build with the OS8_TOOLTIME packs: v3d-patched.rk05

mount rk0 $os8mo/v3d-patched.rk05 required scratch
mount rk1 $os8mo/kermit-12.rk05 new
boot rk0

os8 ZERO RKA1:
os8 ZERO RKB1:

# Copy source files onto the tape image.
cpto $src/src/kermit-12/k12mit.pal RKA1:K12MIT.PA
cpto $src/src/kermit-12/k12clr.pal RKA1:K12CLR.PA
cpto $src/src/kermit-12/k12deb.pal RKA1:DEBOO.PA
cpto $src/src/kermit-12/k12dec.pal RKA1:DECODE.PA
cpto $src/src/kermit-12/k12enb.pal RKA1:ENBOO.PA
cpto $src/src/kermit-12/k12enc.pal RKA1:ENCODE.PA
cpto $src/src/kermit-12/k12ipg.pal RKA1:IPLGEN.PA
cpto $src/src/kermit-12/k12ipl.pal RKA1:IPL.PA
cpto $src/src/kermit-12/k12prm.pal RKA1:PARAM.PA
cpto $src/src/kermit-12/k12pch.pal RKA1:K12PCH.PA

pal8 RKA1:K12MIT.BN<RKA1:PARAM.PA,RKA1:K12MIT.PA (EFMW)
pal8 RKA1:K12CLR.BN<RKA1:K12CLR.PA
pal8 RKA1:IPLGEN.BN<RKA1:IPLGEN.PA
os8 LOAD RKA1:K12CLR.BN,RKA1:K12MIT.BN
os8 SAVE RKA1:K12MIT.SV=1

pal8 RKA1:ENBOO.BN<RKA1:ENBOO.PA /E/F
os8 SAVE RKA1:ENBOO.SV=2001

pal8 RKA1:DEBOO.BN<RKA1:DEBOO.PA /E/F
os8 SAVE RKA1:DEBOO.SV=0

pal8 RKA1:ENCODE.BN<RKA1:ENCODE.PA /E/F
os8 SAVE RKA1:ENCODE.SV=2001

pal8 RKA1:DECODE.BN<RKA1:DECODE.PA
os8 SAVE RKA1:DECODE.SV=0
Changes to scripts/os8/ock/dist-rk05.os8.
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
begin enabled music
print Music score files and source code
mount dt1 $os8mi/subsys/music.tu56 ro required
os8 COPY RKB0:<DTA1:*.*
umount dt1
end enabled music

# Kermit-12
begin default k12
mount dt1 $os8mi/subsys/k12.tu56 ro required
os8 COPY RKA0:<DTA1:*.*
umount dt1
end default k12

# FORTRAN IV
begin default fortran-iv
# rk1 holds the FORTRAN IV object image
mount rk1 $os8mo/ock-fiv-obj.rk05
os8 COPY RKA0:<RKB1:*.*
umount rk1
end default fortran-iv







<
<
<
<
<
<
<







146
147
148
149
150
151
152







153
154
155
156
157
158
159
begin enabled music
print Music score files and source code
mount dt1 $os8mi/subsys/music.tu56 ro required
os8 COPY RKB0:<DTA1:*.*
umount dt1
end enabled music








# FORTRAN IV
begin default fortran-iv
# rk1 holds the FORTRAN IV object image
mount rk1 $os8mo/ock-fiv-obj.rk05
os8 COPY RKA0:<RKB1:*.*
umount rk1
end default fortran-iv
Changes to scripts/os8/v3d/dist-rk05.os8.
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
begin enabled music
umount dt1
mount dt1 $os8mi/subsys/music.tu56 ro required
# resume
os8 COPY RKB0:<DTA1:*.*
end enabled music

# Kermit-12
begin default k12
umount dt1
mount dt1 $os8mi/subsys/k12.tu56 ro required
# resume
os8 COPY RKA0:<DTA1:*.*
end default k12

# FORTRAN IV
begin default fortran-iv
umount dt1
mount dt1 $os8mi/subsys/al-4549d-ba-fr4-v3d-1.1978.tu56 ro required
# resume
os8 COPY RKA0:<DTA1:*.*
end default fortran-iv







<
<
<
<
<
<
<
<







79
80
81
82
83
84
85








86
87
88
89
90
91
92
begin enabled music
umount dt1
mount dt1 $os8mi/subsys/music.tu56 ro required
# resume
os8 COPY RKB0:<DTA1:*.*
end enabled music









# FORTRAN IV
begin default fortran-iv
umount dt1
mount dt1 $os8mi/subsys/al-4549d-ba-fr4-v3d-1.1978.tu56 ro required
# resume
os8 COPY RKA0:<DTA1:*.*
end default fortran-iv
Added scripts/os8pkg/kermit-12.pspec.


































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Kermit-12 Package File

format:
rk05
inputs:
src/kermit-12/README.md
src/kermit-12/k12clr.pal
src/kermit-12/k12crf.boo
src/kermit-12/k12crf.enc
src/kermit-12/k12deb.pal
src/kermit-12/k12dec.pal
src/kermit-12/k12enb.pal
src/kermit-12/k12enc.doc
src/kermit-12/k12enc.pal
src/kermit-12/k12fl0.ipl
src/kermit-12/k12fl1.ipl
src/kermit-12/k12glb.boo
src/kermit-12/k12glb.enc
src/kermit-12/k12ip0.odt
src/kermit-12/k12ip1.odt
src/kermit-12/k12ipg.pal
src/kermit-12/k12ipl.doc
src/kermit-12/k12ipl.pal
src/kermit-12/k12mit.ann
src/kermit-12/k12mit.boo
src/kermit-12/k12mit.bwr
src/kermit-12/k12mit.doc
src/kermit-12/k12mit.dsk
src/kermit-12/k12mit.enc
src/kermit-12/k12mit.lst
src/kermit-12/k12mit.not
src/kermit-12/k12mit.pal
src/kermit-12/k12mit.upd
src/kermit-12/k12pch.pal
src/kermit-12/k12pl8.boo
src/kermit-12/k12pl8.enc
src/kermit-12/k12prm.pal
outputs:
SYS:<RKA1:K12MIT.SV
SYS:<RKA1:ENBOO.SV
SYS:<RKA1:DEBOO.SV
SYS:<RKA1:ENCODE.SV
SYS:<RKA1:ENCODE.SV
DSK:<RKA1:K12CLR.BN
DSK:<RKA1:IPLGEN.BN
DSK:<RKA1:PARAM.PA
DSK:<RKA1:IPL.PA
DSK:<RKA1:K12PCH.PA
DSK:<RKA1:K12MIT.PA
Added src/kermit-12/README.md.




















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# KERMIT-12: Kermit Software for the Digital Equipment Corporation PDP-8 and PDP-12

Written by Jerry Sands, Randy Hippe, Martyn Hemmings, Sepp Stadelmann, Richard Schlerf, and Charles Lasner.

The codeline here uses [Columbia Kermit-12 Archive Distribution k12.tar.gz][k12-dist] as upstream.
Another source is [ibiblio.org k12][ibiblio].  The Columbia Archive has two differences: text files k12mit.not,
and k12mit.dsk are more up-to-date.

[kermitproject.org][org-project] says:

Kermit is a robust transport-independent file-transfer protocol and a large collection of software programs
that implement it on a [wide variety of platforms][platforms]. In addition to file transfer, many of these programs also
make network, dialed, and/or serial-port connections and also offer features such as terminal emulation,
character-set conversion, and scripting for automation of any communication or file-management task.
The Kermit Project originated at Columbia University in New York City in 1981 and remained there for 30 years.
Since 2011 it is independent. [CLICK HERE][project] for more about the Kermit Project.

The [Kermit-12 Site at Columbia][columbia-k12] was frozen in 2011, but still has useful information
(even though many links there no longer work.) Excerpts from that page:

Kermit-12 was written for DEC 12-bit processors including PDP-8, the PDP-12 laboratory computer,
and the DECmate I, II, and III, WT-78, VT-78, and VT-278 word processors.

It runs under OS/8, OS/78, OS/278, and OS/12.

File types found in the Kermit-12 distribution are:

| File type | Description
| --------- | -------------------------------------------------
| .ann	    | Announcements (plain ASCII text).
| .boo	    | ASCII-encoded binary encoding to be decoded by k12deb.sv
| .bwr	    | "Beware" file (hints and tips).
| .doc	    | Plain-text ASCII documentation.
| .dsk	    | Description of files (plain text).
| .enc	    | ASCII-encoded 12-bit binary encoding to be decoded by k12dec.sv
| .ipl	    | Initial program ("bootstrap") loader.
| .lst	    | Load map.
| .not	    | Notes.
| .odt	    | Octal Debugging Technique (bootstrapping).
| .pal	    | PAL-8 assembly language source code.
| .upd	    | Update notes.

## Operating Instructions

(Extracted from k12mit.pal)

KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES.

**BRIEF USAGE DESCRIPTION.**

KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT
DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE.

AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE:

1.	CONNECT (TO REMOTE SYSTEM AS TERMINAL).

2.	SEND FILESPEC (TO REMOTE RECEIVER OR SERVER).

3.	RECEIVE FILESPEC (FROM REMOTE SENDER).

4.	GET FILESPEC (FROM REMOTE SERVER).

5.	FINISH (SERVING).

6.	SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED ****

7.	EXIT (TO OPERATING SYSTEM).

8.	HELP (DISPLAYS HELP MESSAGE).

FILESPEC  MAY  BE  ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION,
WHERE THE  FILENAME  AND  EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2
ALPHANUMERICS RESPECTIVELY, AS  NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME
FORMAT).  THE DEVICE:    FIELD  IS  OPTIONAL;   ALL COMMANDS USING THE DEVICE:
FIELD FOR LOCAL DEVICE SPECIFICATION  WILL  USE  THIS  DEVICE AS THE SOURCE OR
DESTINATION AS NECESSARY FOR THE LOCAL  FILES.    IF  THE  DEVICE:    FIELD IS
OMITTED, THE DEFAULT DEVICE DSK:  WILL BE USED.  THE ACTUAL DEVICE USED MAY BE
SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND:

.ASSIGN DEV DSK

WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE.

KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT:    THE  ACTUAL DEFAULT PROMPT
TEXT  IS  PARTIALLY  TAKEN  FROM  THE  ACTUAL MACHINE KERMIT-12  IS  CURRENTLY
EXECUTING  ON.    FOR  EXAMPLE, IF KERMIT-12 HAS DETERMINED THE  CPU  TYPE  AS
PDP-8/E, THE PROMPT WILL BE:

KERMIT-8/E>

THIS  ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH
MESSAGES ORIGINATING  FROM  THE  RESPECTIVE  SYSTEMS.    FUTURE  VERSIONS WILL
SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES.

THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE
ESCAPE CHARACTER.

**COMMAND RESTRICTIONS**

THE  SEND  COMMAND  ALLOWS   DEVICE:FILENAME.EXTENSION  (6.2)  WITH  WILD-CARD
SUBSTITUTION.  A * MAY  BE  GIVEN  FOR  AN  ENTIRE  FIELD  (EITHER FILENAME OR
EXTENSION OR BOTH) ONLY.  A  ?    WILL  MATCH  ANY SINGLE CHARACTER WHICH MUST
EXIST IN THE ACTUAL FILENAME OR EXTENSION,  UNLESS  RIGHT-MOST  IN  THE FIELD.
ALL  MATCHING FILES WILL BE SENT.  NO  OUTBOUND  FILENAME  (AS-NAME)  FACILITY
EXISTS AT THIS TIME.

THE  RECEIVE  COMMAND  ALLOWS  OPTIONAL  DEVICE:   ONLY.   *THE  FILENAME  AND
EXTENSION  ARE  NOT  ALLOWED*.  NAMES OF RECEIVED FILES WILL  BE  MODIFIED  IF
NECESSARY  TO  CONFORM  TO  THE  6.2  FORMAT.   *IMPLEMENTATION RESTRICTION* :
CERTAIN REMOTE  FILENAMES  CONTAINING  NON-ALPHANUMERIC  CHARACTERS  MAY CAUSE
KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL.

THE GET COMMAND  ALLOWS  OPTIONAL  DEVICE:    TO  DETERMINE DESTINATION OF THE
INCOMING FILES.  THE  OUTBOUND  FILESPEC  MUST  CONFORM  TO  LOCAL CONVENTIONS
(FILENAME AND EXTENSION ARE NOT  LIMITED  TO  6.2  FORMAT;  THE DEVICE:  FIELD
WILL NOT BE SENT TO THE  REMOTE  KERMIT  UNLESS  IT  IS  ILLEGAL  WITHIN  OS/8
SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS.    IN  THIS CASE, THE DEFAULT
DEVICE DSK:  APPLIES, AND THE ENTIRE "DEVICE"  FIELD  IS  SENT  ALONG WITH ANY
FILENAME  AND EXTENSION).  CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE  WITH  THIS
IMPLEMENTATION,  AS  IMBEDDED  SPACES  OR  NON-ALPHANUMERIC CHARACTERS ARE NOT
ALLOWED, EVEN  THOUGH  THEY  MAY  BE REQUIRED ON THE REMOTE SYSTEM.  WILD-CARD
CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE.

<^X>  OR  <^Z>  CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT  IS
NORMALLY  A  SLOW  PROCESS,  SINCE  THE CHECKING IS DONE BY A SOFTWARE TIMEOUT
SCHEME.   AT  THE  PRESENT  TIME,  THERE  IS  NO DISTINCTION BETWEEN THESE THO
CHARACTERS, SO IT  IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF
FILES INVOLVED IN THE TRANSFER IS ABORTED.

**DECMATE II/III/III-PLUS CONSIDERATIONS**

FUNCTION KEYS SEND <ESC>  SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE.  ALL SOFT
FUNCTION KEYS ARE THEREFORE INEFFECTIVE  (EXCEPT  FOR HOLD SCREEN WHICH ALWAYS
WORKS).

CONNECT MODE RUNS IN 8-BIT MODE.

THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE.

ANY VALID DECMATE II/III/III-PLUS CHARACTER SET  IS  ALLOWED  WHILE IN CONNECT
MODE  (MCS  TCS  LINE,  ETC.).    ALL   <ESC>  SEQUENCES  ARE  PASSED  TO  THE
SLUSHWARE/FIRMWARE UNMODIFIED.

KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM
CONNECT MODE.


[platforms]: http://www.kermitproject.org/archive.html
[project]: http://www.kermitproject.org/kermit.html
[columbia-k12]: http://www.columbia.edu/kermit/pdp8.html
[org-project]: http://www.kermitproject.org/
[k12-dist]: http://www.columbia.edu/kermit/ftp/archives/k12.tar.gz
[ibiblio]: http://www.ibiblio.org/pub/academic/computer-science/history/pdp-8/kermit/k12/
Added src/kermit-12/k12clr.pal.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/	MEMORY CLEAR

/	THIS FILE  IS  USED TO PRE-CLEAR MEMORY WHEN LOADING KERMIT-12.  THE RESULTING
/	"CLEANER"  CORE-IMAGE  FILE  WILL  BE  SMALLER  WHEN  ENCODED  DUE  TO  REPEAT
/	COMPRESSION OF THE CLEARED  AREAS  OF MEMORY, AS OPPOSED TO RANDOM RELICS LEFT
/	THERE BY OS/8.

/	LAST EDIT:	30-AUG-1990	09:00		CJL

	FIELD	0		/GOING TO FIELD ONE

	*0			/START AT THE BEGINNING

	ZBLOCK	7600		/CLEAR FIELD ZERO

	FIELD	1		/GOING TO FIELD ONE

	*0			/START AT THE BEGINNING

	ZBLOCK	7600		/CLEAR FIELD ONE

	$			/THAT'S ALL FOLK!
Added src/kermit-12/k12crf.boo.






























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
CREF.SV
oX?lP44408030422>2Lg;cXj80PR>24H4QPE2cH85APE<PT<5@\e?RPZ=@`E?@0;=1`E418[1c81
;cX000hg6`HB=c893`H3<a\6>R0?<P\66`H?1S81;SL000\a21DH5A`E41DZ:W4a00<07`0?800[
7P042`0:00PQ1Sl6<chT1b4800lW02F0P820P820P9X0~~~~~~~3]YX<0@2P~6OonO~3RNKb3dML
XYL0~<M_[o7P00~6B0000803o`3`~3P94;0P00~=O`T8180G20lfO[T0a6o46?bLm_ooSO\0O@Ml
AW\PDPokn_md5_F:S@20O`1\B5SoPC2>74`200Ro7A2Pd0oo?g00oRo0P2838@:`203l1?20LaoP
oCmeH400ic>0C;D?P0n5R?J9nTlI2a69Q`ooo[\0~;P87\RC0fNa\VUgXV<7Ti6i9:N?>efnVS
jNUdO?bITH2RAX7R1X;R1X3R^X22A03PROg3PBS?o8T\oH5lZ@2`nbPo\oZgR@c3POW7R@c3?`aS
POS;0<4>9oMSmRP?`TZn22OVm@2`RGO3M_@2e]ISPLg;0:0>RYJj0h<6PdH^18?R1X?RjNUbnj0_
X8?VW8:P321RNJ0_jWbijmR^87QRkf[i>?l?dLm4c^Y84h@oQH28MGBIonZHo`RC4g=Y`B8?ScnT
PgFYPa>RZbP_L_jb:83joJP_P3nT27Gi5:1:LBPVL:JJ5:`XKfhY4fdRZ8?jK06o02P25BQRX6_b
iNIVinQVJQ8V5D0^:10_`1FVJNDVP?cR;O]R5aER@1OS4<cj;LIJ8AOS8AOT;A94aVZR4_aR;BeS
jNTVjJP_nRdSJ7XY;A94enVV[02`~74@8826<C4f8Xn?Yj4i8JX2o]jZ]djY_`@O1UgamcWPKX
:2l@22H84cIc`I0V2?oNLjV`A`l8foZFLjWK8Pl8g_[Q4h;oX2nM2:;X7V:Xa?XCoR:X0OkYIfTS
]@X^IR8ERF`E5CJ1oLTE7[86f>noL:TUIkTQ_@[l_iZnIJUToIWYX2okj[XC6R:Pb_[Xnf\CoR8X
b?[j:2l8Hd8X:o]Z:2oin;:Pj_[g7[:XQ?XCHRV40:1k6bKf72HMhF\0~24olRZ?_kQ02PKcTR
>Nm[7m<47S06cCKf3@<1`^LfDDGo0:066l0_P:2bHOl2H?kboAdTTAbS71adWDB^f=QRAQGV5DH^
5MPR7:1n7A]T083[~3XMLffMMSf=MTemLff24^edP^:=Wdf2lVla:4@8W\2h4lH20>2R0nX<;j
4[A:XLi:fJ0_bRnR4:Wjf:YZ;aP_0BoV;b0_dbnTcTJ^;Z5TX@2`~3O1C_O7coO7coO7coT@R`
10@010@010@002P?lOnRH5obHEhRjP2`;dH^A0\VG@XVJQ8Vlan`l>7o0?l98R0^8nP_Z2:T8TH^
5aMRJQDV5B0^;Q8VRAG35b1n5ADV81OR5a9TTh6\P6[R4PYSR@_7PA;4XH2[OPJF^_j2Z:[j4b4^
_kYX_jP_G1>bKJP_G;6j00P34a=R^P2`02h2IQDVRAG3b<oj::P_ce^R5ADg84CR4V1R5ADE06KR
b=cj4]5:PL3;PGk9:P1PIS0V;j1^8R4^4V]R<30V;oe9lhU\<2Pon4BR5@9_5AEdFQDWPA;4imn[
7<`SH7?b9_m;oP6N8V1R>3P6JcTV=RV6FEPW<OeR:ALV5c<f:B0^4U1^11;TV2fV:O`R=2UREoHV
mSAc>OLV>DX^EQ86<B4^<aDVRCW35VIR>CTV5\P_c3VSH342<HU\>F0`PD3>maP_gV2^5I0_gXV\
5CTW<C54PA;2mRab;JP?eV^RmoLV4R0^8RP_nc:f>JI:P2WT:D0^9i0_m3:RA?[PECPVnOJC0B;V
=XV<X3WWPOS;nHjJ~3m^la`?EcHUXRKP1TIb6@G<:hG<bh]a=R]20_\jP_0K;VRAG35KMRT`9_
5LPoXBRRZ:7j]KN2W@9_5E\b5H5l5;DX\ZP_G:2n5ADV]j`V0QCb8AGWPEc;0>l?E03`5`9_5F0`
8AGR5QMR5QEePKG;02h2IQDVRBk3PL3?`\9;02T6EbTR5QIS8BoRj=Sj:Li:f\b;02T2APC^\=X[
0=X6GWXYf^9:h02`ib4n4d0^inLdinLd48SoZ>OdicFdoojI52QVoH2`P704gh0UX2KV28Sj@414
MH:F8R4^<fIR<99ZE3nD27GiKa\V:4=Rm31TRC33PDS?jGVY6iQ:JVhY<4X^ERl6oj^FRC33=P9_
=\PoA6<R6cISH1\28A_VX3KR=SISlj1^=SHVZl0V0SKclj0_ao>VIUhR<CISX<ojLBPV^cJSPOk9
<GXYX6kY6mi:<hi:=JP_L_fkm;]:@o@VE3nD27Gi@fhY^h2^IS0R<3=TUmZZo?^InP2`mP3`9\P_
mOE;1<`E^P1E;<`C0?l28KSVk;HV]iDVP02`o[@6L8VK7U?0oJ0_U7N[U@9?\JjZ]4H^1_cP]KDg
]4X^2PS^o;H3][MbUKIT^;=:^N0XP8V;][DV][A2]XUk~4U@X0P0P0n`;>eV;5RFagPCb::\T1
0PlmnZV9Ml>1R\`Z0i18053GnJO>kBJ0^X\1RHagn32XmOYgMS1gagX0j`KgnI?inG=@cn:@lo[5
09200>0mmjW]kBKPO[THOVTBP6K`=OFcB0D0oOooP032X2n:k:SoNBWnNRW\c8S2Z2omNRUjNYWl
nb6PSo[knS8XV_[in2V::\T8m`>93<N1m\>93<Lo32Ne32MgPCc2\DZ:D\T6~3RPaB19180534
`jC1PJj1R\aB191Z0620N>\0~2OQjFORBF~7L0W<l[:Pj?Xo:2mZ4RK\4XC_Nj8BmF9j4YCKJZ8B
k6PBkdY002hoc6^P4^HPhNX0D@9jD99jk9\0n0Wg[D3?kDCP04R0^0AoVP2`WP<0X0je]fCo]RJ0
P;T0U`BeUdZgZ2nERJbfPCbXR?^jc8R9UjZYYJZ;UbJ7oS1:2^kK2Rh:QnBZQj?nf`J7Qd?m:0n9
DZ;l:2n8nk:84dJ80;2?0?00~3R@bfnS0PM_9J2^jh]VBfgCJf]dJ1^\\20@40^090b^8@^?HH
]oAj2^h:bn;KPFbi0920093^gJ;:gBKKMb14fn9g80jeRf:Gg6:7c6^g`4oOOZTT060V8LceP:kc
3k;`V_1VOo00SomAD1;mm1;mQP4g8S:<i208SA:]W0<8B2=EZ03PC@?doB26eQ2;B2>]W0<A11::
R@;Bo@26eQ28]A98i303m3:d3EHBf00N033o7bKC78@L_D[C78@9HST9oS1R69:Pd?[m2BH12N4O
7bH9HST9HSW^o21?7RKkdY_kG9^e01214N892F?^kV;jZ2o@dj_YZ2oTjJCTnJ]@ABTA22Kh0;3B
AP4C3CD0m`W_<V8Xm__^9kT;cC^nWVIPhO4_X02fH0D0Q`=61^h6M^20jk@0W0JMSVZMW4JLob90
S?[noBVLWF;mNYVLNRT`R4\0~34@88o6W\a::XZ_[4XDYSnbLC6R8XXOY_Z2nk2:;j`2ng4j95
4i9>X2nQDJ95nI\NDl3hX2nNN;\0~2mhnOb07ni_MYP<SoF^HRiT1^iPP^P5S_D_HRmF=bi^0_
aOBblo=clVIblO1bklEk~37QmV8>M[AW:;8<]UPLXEQmaEP=J4PCMloEkf0fWfR6YB:]H?nX0n
?Z]0P80dE_nBoRUbh:7jEWZB32P?WofY3OdY3_dY3b4^5jP_XH>R:0nB8AORo5^B:82K6_]22_YR
2oUR8giR2P]g8j]:3:A[WFTY:;;kJ80V4f4^P>Lf6=?j6QMRJh03JX2Cn:@VGf<iGjAc755Y5jA4
0>L4b@RSGh1bmj@V0;8;MG:I720^9^9ZB2VBh?Kg9]i:boHWO`2`ik8VOV4^J>Lf6;;kJ6XiJ?Db
aA>T720`Dn1?0N53b8lX<6^KPH[<:PF@4hTlojPoP7NSX9OjPH[<DPZ@400e0=d:THT\Mh5loXVL
384ljVYR4XU\jH4loNUdoA94WobYnoZ@nOUcX?SgmbNB8BOVROo3PH[<:P6@0@9o^?HWmOBB:_=S
PF82l`Qc4]EX6JP_l_4R20QS8`QS90QS4PQS2MEXl02`28Tl2H5l4]I:eGji301PAPC^4=ok2Y3_
8>oWgh6o0>h28YeZ7D<5bj>jL>H?`;[e^DmI6G8En<d@aDQU08nO0?l9PHW\oQPFoH4lo8VL`?kS
nbP?Uh6\JJP?ULZRn\ibF81nROk3POW0::CjDZP?baVT6?Q7P8W\oX4l`?Ok@<SRm\UbmHUlm0Pn
4<7jA?CWPH[<l`R@cUPWb_XWGo8WP5Bnm85lX?7Wl>nK\K6QUV>RkZAjR@2`kH6L9`H^1=kPjMPV
PN_30=SVf^\W>>\30>3bk:0_jMRRjbMddH6\cf2i0<8`a>]XfT:e\l0OYE;fYidHT<0@U0Ragj>?
Y:W`e@3P~4>0RX~3I`S60300O`Sl~3PPSl~3Q`PZ~3Q`Sl~3RPPZ~3RPSh0100R`PZ~3R`Sh0100
Z`PZ~3<PW>0100>PWl~3G0U80300N`Un~3R@Wl~3R@U<0200R@U80300S@U40400\@VP0200\@TN
0300d@Un~3d@Wl~3e`WB~3h0UD~3h0TN0300h@Wl~3n@TN0300<`XZ~3<`[h0100F`ZP0200QP[d
0200R@[d0200X`[B~3X`[l~3[0XN0300\0Yn~3\`[l~3m@[h0100m@[d0200n0[l~3nPYn~3o@YD
~3o@[l~30@_l~310_B~31P]D~31`_l~320_l~320_h010020_d02009@]80300:@^40200:@^P
0200:`\Z~3;0\Z~3;0_h0100;P\Z~3<0_:0200<P\Z~3<P_h0100=@^P0200>0\Z~3>0_h0100
B@^X~3B`_l~3CP_h0100E0\N0300F0]n~3F`_l~3F`_>0100o`ooooo6gc>H5ol0~5;3L38[lQ
?2H10;l1H7T2c[lAO`@20;l1SBl2Q;lQSS40d[l1[HL08[lQ_Bl26[m1dj020;l1h:P0094;h5X3
6[m12`PCm;lQNP0@0;l1P00@0;l1R7h@0;l1nJ0B0;l1NDTSn;lAQZdPo00<XB\Q0;l1XHDSd[l1
nHPR9[lAnEXSC;lQ:J@bo00<C@@d0:X2oooooooo17gPoB<Va]lcV1Oo~6[HL08klQ[JD3Pkl1
_8P29[lAg=D0B0<ah;D2CklQj[D2Dj\[1Mh@Z;l11OdACKlQ1OdCo@0\1@@D;28<NP0@0;l1P:d@
o;l1P50Bf;l1P6HB0klaP4TD0klaFkDRCklQNDTSn;lAXB\Q0;l1XHDSd[l100LbO[l1C@@d0:X2
o8daB;laA0100;l1APM2RKl1oooooooo08L2AHQYRDDVP8ZkWXe[0909RP2`28ekROm2:dIXo_dW
RAW2Z:7jo?\Wo?XWooTWYobRn?abmoabnH5lcOJ;01;VX2;RAS3VRC33mJP_aa:RAR3^5OAR<0XV
m0\V2P\g5Ki:4P4^8X5\o?>b<18T[o:Yl@2`ERORV<gk8TH^l>lW;:YRk\ek084>R^g90^D;0>`;
gn\Wf]:`AP0@eP1002l5AX1@96<b1744^_a?0mh:0clO<d?oMf?o_hhD703321<fol6@9XWj4ohY
P?nY\4L?28KjoAjBZ83jROc3PL3?WO^SVaiR1P;_n_Vi8OP9moZKX2;R8A;V5OIR5ADVRAG3mJP_
]AFS@?Cb5A9dah6\nP2`]lHf]hU<a_<`aZ1^l\Hba\ISPKO;0?425ADV5AEdZP2P~d0`0O3`00
gXX4`0:08B:o\a6ThO40ib<0~~~~~S
Added src/kermit-12/k12crf.enc.








































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
(REMARK Image File Created by PDP-8: 30-Aug-1990)
(REMARK File Date: 23-Jan-1984)
(FILE CREF.SV)
(REMARK File decodes to CREF.SV Version B0. Taken from)
(REMARK DECUS DM-101 OS/278 for DECmate II.)
(REMARK Should work on any OS/8 family system.)
(REMARK A recent assembler is required for assembly of)
(REMARK the KERMIT-12 source programs; Version B0 is the)
(REMARK latest version. This is the companion CREF for PAL8.)
<VVM8620484007040090371P76BT3K8G2109OG88H4KC01E1M25AHG0PC14OLA2P3T8K16>
<L8C0FDG04Q53GGGM4G0E4P05S1Q603GS4DI0O1NICG0UC306DGR0ENI00P61C0RU1G0C4>
<P05O1N600GM4482K8LA71118AJ58BH000060FV00H0M001SG001EG0400GG0367SHJ8FG>
<0F0GI01OFG002B200G240100802D00000X004S1DM9L80G0000X0003IVVVU00003S95P>
<IGVH3GK84NX0008UTNVK0F00000X00030I000003G3VVX0003105P20100000X0008IVS>
<0G0202VO8MDKNSO0FOJU4O67PPVRFVUSD003NQTUB8O10UKNVNVTFEH8M12G8Q200FTBC>
<GI1VU20KHR0S00K006VG3K50VK3VU0VI03VU5G18001I445G027VO021G3RJ7O7VQHQGC>
<0O07PTO0L601VS0V1B8GI4VV88P22O8JU3RVUVUX0008T0682E4M60JRC6P9EPT362BP8>
<6T95DS5UEMR7QBUIJKPFIFSL4981P32G7G650N0CA08N8K0SH001I4JVN41UA1FPI4NVN>
<41NA800FTV52TJFUM8IC6CG5VPP29GOOVJ1J41NU001R0M4SVN1TNIHF1E9BG8C9TVA00>
<CH4RN0THF8RB3QR41NJ801QGBHAKM00R86A1U8RG450V0CA1NT4N95UVQ1QG6GEKS10J0>
<O8G2F7T0NQKNPBLUR1H04U7UV5L073VV9KACUJ78T8OJV148B209EMBKJVSEL7VJ11GJI>
<SOC3SHAHT1VL0SNBA1I2CLBUA5N4BVF52K05VFQHA047VO8ITA19AG2E5H8IS5AC8A8LG>
<JFIRH169MVL2K3MR7G200251GL4A7Q09LMSLN6DPREG9L628GLSG12HS8AO1GL4QBEBQ0>
<2VHHD5UR1E8AU80ONU45COKMQORH165V22GBK5L0ILHH6KO92VHHD6B9EIRKIT7T85UHI>
<Q9K9F91D84LDERKRLG00X000544B0GC462CGJUA5FH5T22CGQV85ERFL9EIVAVS0425IV>
<RS3JD7HEHSK221G8623175PGO7P6U25DT5PGM3Q7U25DNAB9EC6RU8NGHBF8S4GJ5VVQ1>
<AEI11N847NQHB222CNUVA702RKPCS13LD92S9J62N4965B1BI0PVMOL47N0DVCANUBGM9>
<CME0GQNMFSLFTBT5IPCIFT5QFQ1FTQT8GJ46NQ1B56T2VR44PFTSKAP0NQUA20G9HV52P>
<B4QNIHFSIV3T0LQLVE8FFL2K444SM5A2000JRC6PFCOE63MV10000089IVVT8NUT88002>
<DSHPCEDUU0FKQC0UCC7SQOR01K837GJEFT8V8K00D811NV0BG0L00O9FVTG2VONT87D92>
<CE73H0SL7F48RC2R3I6C591BP322KMOE77A0OEK3FG0N0000003K5MNDM9TERC4QSUNDL>
<PDHOGIQVI8UA2DIBC65U7J84N41I4J1F410O720C5E43T0LGI15AQ4K6ME5MFQ1B525VO>
<GLABDHAL25VOOS0B2U8NV42MJ8BTCTP365P51N880000003JSU57NPTUFFJRSUV7NPE8G>
<1004X0105007IHBOIVVR04NP629FBT8004BV4C9261CITC2H6KO9BUC0VVS7U2009VSH2>
<S8127VKAL11248N4COBI2SJAC591BOG25PGIP29HASBU40GLC5F208BM2T0IL4U83Q02D>
<9GI62M8IS5SG50IL8DO15V60Q5Q5VNQHAL22FH1DFSBKAVVL2QS44P6RUKBBILH001GGO>
<9I2ETQ000008N2CPGLP29HBV4APSH8VA5CU9DJ2LOLS8148O92C08LA5F009JFP2MS84L>
<D3I0RO341IVJ2K002CPHGCBVA08HE45GI4QP30OO45UFTDSU8ICOF52NO4H31BS172L0L>
<4MJHBI0K2AN7NNP1OF6FC0JJ89LVV7VE05H24O03GOS2DDHPGDJ2I9CNB1HH5V92IOBJ2>
<THJ4AF20O9EA3G484L9GOMI54NSCD12I9BMUPVM6D13IRRI77IA0LJ148OU44HJC5E8IC>
<SM2OJ64EB3I8BFP2MC6E8608OM67496E861I0U80NNU65DTPG22NSGLNM8I8AN751H8CE>
<82897UOHC0BFQHBB2DCNNDTP15OG24BP8NUR34GSQKRK08A92JP024VSGLT135P20V8IL>
<CE4VIFRE05H2GDM8JQG77741NU4VJA7000007TGUUV03UKJ24MJ6SG09CS11MN4C5DE8P>
<HLN44PB9SG2MFT8S0BB5I4J2LGL5DR97S132NU8L892HUKAK65L5DR9RS132KIRE5E828>
<A8MKLIVA5LPQG22LGL5DRAPS122JH1E5E83DE003VFUL000OBV08OL0O7228AM2OGNE5I>
<HBI0RMK004BH6COASH4PEP0FS0J1BO800CA95E8KM2OOMS892VVKAR119LJKDLF6000H9>
<SHN08AOBR800DMH5T5T4RAN2NO000FJU44GJSG1UEJJJST77U47OHUK4SUV78DCVV7V62>
<HH8NV880204E0MVB07A0OJF12K88G2415QMG8H2S8B369J662KIIL23VS49EKJFC6R2G9>
<1MUH1GP29J1I0V92N9IUA1NAC2DABE4C74K1B65UFVDAU8ICO66RO26DNSG922CDGR6DG>
<608DU45GRT813COR36PNJT813COR2LDM0U0HJCBPVK2M7DSP6C9F664PMV85CU9OM52LR>
<6DM837V266BQT84MSGDQRP1JL3H3BUKBEAVT9T5BM91MUIAK8FVGH5QI8EBELEV809J26>
<1HG8CT9FBD9VIFRNUG01VR000H6VI2FBFQH0HECBEIG04M3PG005VV22QS2THLM5DR9BE>
<00007UDD4N1E4S3O2J5VFQ1AABET4LU0LB3AN2MJI6S1GFOEQNMKLKSIN0LO40VGTMFDH>
<BEQAKMP5OLCPBJ3G8G2S95DJBAIR2MHTMN280000002KL00480002VDME5LJCBI4JEV41>
<P2KIK00V0AHTJUM8IDRSG74AIAG06L4002MNFU9CSRMOG2TQG0E8IDRGV3T8LT9NE1R7E>
<UM7003EN7RJV5VP7UF50B7VI2NJJH801Q0002HTJTPEQRMRS2BUC64NSO96G3VGAD8B6L>
<4F03VT1VO80B1FK2KAHR1FV5SIVQBQHR4COB1FL0NTXIUG35V0VNUGAHSVR5UNIHAD2V6>
<FOP2KIK043UV49E3682FRCH5OC4FRGOAQN1GRNP0AC5AOSHAAI01G0000CHAAI012KG00>
<AOH63LGF83I0SHAAI0136K00EG2RO000015V63QBUC90000000000004N1F62UBT0LQ13>
<VSK2D9GIHR215BNIFDGI5TCNKG9ARCJAC4KEOG9ATSI0S033VF6EK1GIS85E2002A6BQ4>
<K4NLFM002FO9TOAQJ7KTL70G0080IS0FS4Q1C1PS00EK1LL9DPFUQRBG2C00029EIQQIS>
<LNVA59BI4JMR41VA5OH2T8PIK9L5TAJAIIHDKN71OFTP5E18MRS2N0KI3QL8S71VJDMI3>
<JGS7TUA58I992VJP8N21FMI462ES8007OU00000000068IER0VBP04TN5LO56N15M7DJD>
<QIR6MV41NEG0440G00LOSG1CLS86N3OO9DV7LO5E18MBDMU836SG02C0005ESBEIP9MT5>
<MO7FP22RC3NS83BAA5MISMSD1TSOIRVO2MVIVJ2800C4R11LTF81FPI1VVG16NMC1VV03>
<SF2K9507UIUG7T31HJE8H2HG742218Q2MJJGG86I05A2K0S0QD5T0FQ630QOKB6I0AQEE>
<124G412H8I390VKC61LGOGAQJ907460PF8MQ61K0I1M1HS002VTGVHKQ1OGEANM6J871G>
<J5H3147UIOH1HUGAQ0NTC2F0244I3TGV62CM4C4PC8NE1V14UOF9VEUIJUTLO6QG03K14>
<4B0IC4MTONE5UNQHB8BQCN9VA5E8JKQSIVP4K4KA88M12VO000D45332D8D004VERNI6B>
<P8NTLUT4JJ1EUDDFJ9TTG1S41F180BCLG000S7SHN0DO30EQS09QO00QE6JMKE97B9OAE>
<2VVQ0L31FT7UMJGKTJVCNKAE9F91GN200000000GHC24VPBM2OJT8LAIC9AGICDVR44P1>
<LSKAK4JFVA5BM842VBU0LDP1752I2CIEV85A298P8MVPO7G56BSFK2SUMU000009UVSFV>
<I702RJ9UVS0VI15KBJ6SRI05PN0HQ0FB0II5TJVA9HISRV0NH9F8VPJUDVI4PJV2BO7TU>
<U500000OF63TH0NPS4DDP641EB30ASKM3LRI409LJO3GRVVLIUU0R6IM42D81AVLHVLQ0>
<47O5B702815B2VTVU4AFU1AGPAOJQ037IHAFPVKGDJV90T7UI1VH145VQHAGIGE9843V2>
<28BPVGIRIA5O0GD2VDGA5UJ0MBSM4CJUE2JGMGHQLDGCN919R5KV52TI4Q38089UC4S0D>
<PVHHB9M38GN0QPO15L3G0NOD91LV5HNBST4C74L2GBKKG009PTCIC47BSK05TRA800BMA>
<BLISH1POG64QN2II12JVG7UP16LNHCMVRBFS005PRB49VEC4R8DPVHHEP3D2BA6Q1FBB2>
<K2COS08257VG404V15I48V4OBDF41P2KIK02J2F497VVQHA03EVT0L5U83I59A80A642G>
<000ARKKHP2BNFI0PVR4963682RL2D9GIP29UJI0NVL799VA15AFPVIFR1UJVIFSVK1VOJ>
<TP2FOGM4V497VU83I595801E0FG4AS7UQFL5T32KFPGG4J2FSPGGO98QKGPVA1F4BOM10>
<O8C8PGGOI311GI6230J3ARU0006268IS4SG50ILLLTB5V61G00SHN09S8BRVGAV4720VN>
<RRVS1001ESOHAJK0TAGTSNAHGE3V6VG2RKMSP9S8PASGVG36MOLA8I07OU009VVK1P28V>
<SOC3VN41JV68JR03VO7RUA59FI0GD7T8L59CKVT2PPQOT068IFVCG47PUA5A819FL2MB8>
<6A1GVSEG3497VM83V0BUVI05I3VCB4NUN497T70HS8AO7I4FT683I59UC085JJLGB57V8>
<IVFSLO1PA7UJ41T83V37OBTULH3CD9C9HNTQL4N28017MSG4H7S1N083F2T5MOP09UNO0>
<6R0MQFQO3GFLV00N05R7Q1BKIR1VB89TD3I0RPUB0600C4R28TEUQAGGR7V0FKLII39S9>
<Q680O2SK224DVUHVKG59TL8000000000GE0AG00002377HG00008FS7S00001210VG000>
<048E0L00000H1OFO000024A0AG00008H8FO0000125G58000048M7S00000HAO2K00002>
<9I3JG00009787S000015E39000004NM1V00000J28FO00002C94J000009H4Q80000166>
<K8G00004R2AG00000JC9HS00002EH0VG00009Q47S000017BGQ800004U01A00000JO1H>
<S00002F11V000009V4OU000018PG5800005367S00000KMPA000002K65T00000AH4NK0>
<0001AHGQ800005A63U00000LB1HS00002LG0VG0000AMC7S00001BQHV000005FABQ000>
<00LU0FO00002NQ0VG0000AVK2K00001BUGVG00005G23U00000M10D400002O60L00000>
<B0S7S00001C40VG00005GG7S00000M21F800002P56I00000B54K400001CKIK000005I>
<M0L00000MB02K00002PC3U00000B5O1A00001CO2P800005J40L00000MCGVG00002PL5>
<800000B701A00001CS1V000005KI2K00000MIOFO00002QE3U00000BAGOU00001DC0FO>
<00005LM3U00000MMOSS00003VVVVVVUF33RVSOU5O0000000000B1JE8H1NS1S29G006V>
<GC0JP3JGRU1VI0G003FO8Q8NIGGDV13G32391NS5D11P246VGNKHF86GRU39IK0003FOE>
<02K002SH1O1LKGD1NS8B621F86VHF800000RU60000003FOOG1V000DV3U9A0001NSJP6>
<I8VG6VIGO5D1V600AGH5C003FPA2E2GQ8DV5U98G4J1NSNP6MH4O6VJ54L41V600D6K0G>
<005ANVVVVVVVVVS107QBUM4CU67NVPHSBG0000000002MGGSH33FOAQEIGGCDV1F18G4J>
<1NS6S1L9KG41GS0LL4JORU3L2MKIJNAOGA3F0L0DV218VQ96HNS857V9FRG010L040B62>
<45T000003FOO02MGVGDV301503C1NSC04PHG66VHG12960ORU9DIMKIF3FP7ID4HV0DV5>
<88IM001NSL1718D46VJ00G70VGRUD6K0G005AHVO66J90DV8H000001NT2641O8I6VVVV>
<VVVVVVU002GTI5J218IP2RG2SAD7LOQ009I2SA003GHE6KH4NVCAS4CBV7VN4946FQHAG>
<IVHVR5V3VKBVNV6L75V3VGBU7USNSFUE8336RURG0C4NA08HE8PHGP29J0BQVL2M744N4>
<DOG62KNK4C30KBQ61COAE2Q1BAV22BG1C8M83FU2UCHG84LAV7PBU400SLH2FUCBPKH2S>
<HHF0VNM5GLAFRLSQ00EG74AJR805FIG02VC5NRUNFD0Q8A6002DC000019FAHG80CI2CC>
<048SABLVU00EMU20VJVSPV8FRNUOORUI7C3GO0623177VGO7P6L29177VAG2FV1C7KFS4>
<AGQFT47NQHA0CH4VSP0FS1AEJVDKR47N0DS1BVAFP08CVH7RRVBL048N22O962KNM45B1>
<BI4J2KNLVA5BACAV80NKE5A15B3SG6VQ001RER34MV497HGF6R3EK0VI5HJCCF3CG6TN0>
<01F28AM2LOL85DAK0000000X001100O1U07O02MU011C0A0244DV3CVQ87GI00V7X0040>
<ZAC5M3VVVVVVV>
(END CREF.SV)
(REMARK End of File)
Added src/kermit-12/k12deb.pal.








































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
/	OS/8 BOO DECODING PROGRAM

/	LAST EDIT:	22-OCT-1991	12:00:00	CJL

/	MAY BE ASSEMBLED WITH '/F' SWITCH SET.

/	PROGRAM TO  DECODE  OS/8  FILES  FROM  "PRINTABLE"  ASCII  (".BOO")  FORMAT TO
/	BINARY-IMAGE FORMAT.   INTERMEDIATE  "ASCII"  CONVERSION SHOULD BE HARMLESS AS
/	LONG AS ALL PRINTING DATA CHARACTERS ARE NOT MODIFIED.

/	DISTRIBUTED BY CUCCA AS "K12DEB.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE.

/	WRITTEN BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK 11379-2107
/	(718) 894-6499

/	USAGE:

/	THIS PROGRAM OPERATES ON "PRINTABLE" ASCII FILES WHICH  HAVE  BEEN  CREATED BY
/	ENCODING THE CONTENTS OF ARBITRARY (BINARY) FILES.  THE ENCODING FORMAT ALLOWS
/	FOR  CERTAIN  "WHITE  SPACE" MODIFICATIONS SUCH AS LINE WIDTH REFORMATTING  AS
/	LONG  AS  ALL  PRINTING CHARACTERS ARE UNMODIFIED.  EXTRANEOUS <CR>/<LF> PAIRS
/	AND ALL OTHER CONTROL CHARACTERS (<FF>, <VT>, ETC.) ARE IGNORED.

/	WHEN CREATING THE DESCENDANT DECODED FILE,  THE  USER  MAY  SPECIFY EITHER THE
/	IMBEDDED FILENAME OR AN ALTERNATE FILENAME ON EITHER THE DEFAULT (DSK:) DEVICE
/	OR A SPECIFIED DEVICE: 

/	.RUN DEV DEBOO		INVOKE PROGRAM.
/	*INPUT			INPUT IS DECODED INTO IMBEDDED NAME ON DSK: (DEFAULT).
/	*DEV:OUTPUT.EX<INPUT	INPUT IS DECODED INTO OUTPUT.EX ON DEVICE DEV:.
/	*DEV:<INPUT		INPUT IS DECODED INTO IMBEDDED NAME ON DEVICE DEV:.
/	*OUTPUT.EX<INPUT$	INPUT IS  DECODED  INTO  OUTPUT.EX ON DSK:  (DEFAULT).
/				THE <ESC> CHARACTER  WAS  USED  TO  TERMINATE THE LINE
/				(THIS IS SIGNIFIED BY $).  THIS CAUSES PROGRAM EXIT.
/	.			PROGRAM EXITS NORMALLY.

/	INPUT FILE ASSUMES .BO EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION.

/	PROGRAM EXIT IS THE NORMAL  OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE
/	KEYBOARD DURING THE COMMAND, OR ENDING  THE  COMMAND  INPUT LINE WITH AN <ESC>
/	CHARACTER.
/	.BOO FORMAT IMPLEMENTATION DESCRIPTION.

/	THIS  PROGRAM  SUPPORTS  STANDARD .BOO FORMAT ENCODED FILES AND OPTIONALLY THE
/	USE OF LENGTH CORRECTION BYTES AT THE FILE'S END TO ENSURE PROPER  LENGTH.  IF
/	NO  LENGTH CORRECTION FIELDS ARE FOUND, IT IS ASSUMED THEY AREN'T NEEDED;   IT
/	IS THE RESPONIBILITY OF THE ENCODER TO INSERT THESE FIELDS IF NECESSARY.  OS/8
/	FILES PROPERLY  ENCODED  BY THE COMPANION ENBOO-ING PROGRAM (ENBOO AKA K12ENB)
/	WILL CONTAIN SUCH  BYTES AS NECESSARY, AND WILL BE PROPERLY DECODED INTO THEIR
/	ORIGINAL FORM WITHOUT LOSS.  ALL OTHER FILES WILL BE <NUL>-PADDED AS NECESSARY
/	TO ROUND-UP THE FILE SIZE  TO  A  NUMBER  OF  COMPLETE  OS/8  RECORDS;   THEIR
/	ORIGINAL LENGTH WILL BE LOST.

/	**** WARNING **** USE OF  ENBOO-ING  PROGRAMS NOT COMPATIBLE WITH THE OPTIONAL
/	LENGTH  CORRECTION SCHEME CAN PRODUCE FILES  DRASTICALLY  DIFFERENT  FROM  THE
/	ORIGINAL;  AN ENTIRE OS/8 RECORD CONTAINING <NUL> CHARACTERS COULD BE APPENDED
/	TO THE END OF THE  FILES.    BEYOND  THE  WASTE OF DISK SPACE, THESE DEFECTIVE
/	FILES COULD ACTUALLY BE DANGEROUS TO USE UNDER OS/8.

/	ORDINARILY THESE FILES SHOULDN'T EXIST, BUT COULD BE CREATED  BY  METHODS SUCH
/	AS DECODING ON OTHER SYSTEMS FOLLOWED BY USE OF ENCODERS INCOMPATIBLE WITH THE
/	LENGTH CORRECTION SCHEME.  THIS TENDS TO MAKE THE FILE SIZE  WRONG  BY  ONE OR
/	TWO  BYTES,  WHICH  WHEN  DECODED  HERE  WILL CAUSE THE CREATION OF AN  ENTIRE
/	ERRONEOUS  RECORD.    IT IS RECOMMENDED THAT FILES STORED ON OTHER SYSTEMS FOR
/	EVENTUALLY DELIVERY  TO  OS/8  SYSTEMS BE MAINTAINED IN .BOO FORMAT TO PREVENT
/	THIS FORM OF FILE CORRUPTION.

/	ERROR MESSAGES.

/	ANY MESSAGE  PRINTED  IS A FATAL ERROR MESSAGE.  ALL MESSAGES ARE THE STANDARD
/	OS/8 "USER" ERROR  MESSAGES OF THE FORM:  USER ERROR X AT AAAAA WHERE X IS THE
/	ERROR NUMBER AND AAAAA  IS  THE  PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED.
/	THE FOLLOWING USER ERRORS ARE DEFINED:

/	ERROR NUMBER		PROBABLE CAUSE

/	0			TOO MANY OUTPUT FILES.

/	1			NO INPUT FILE OR TOO MANY INPUT FILES.

/	2			IMBEDDED OUTPUT FILENAME FORMAT ERROR.

/	3			I/O ERROR WHILE LOCATING IMBEDDED OUTPUT FILENAME.

/	4			ERROR WHILE FETCHING FILE HANDLER.

/	5			ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.

/	6			OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.

/	7			ERROR WHILE CLOSING THE OUTPUT FILE.

/	8			I/O ERROR WHILE DECODING FILE DATA OR BAD DATA.

/	9			OUTPUT ERROR WHILE DECODING FILE DATA.
/	ASSEMBLY INSTRUCTIONS.

/	IT IS  ASSUMED  THE  SOURCE  FILE  K12DEB.PAL  HAS  BEEN  MOVED AND RENAMED TO
/	DSK:DEBOO.PA.

/	.PAL DEBOO<DEBOO/E/F	ASSEMBLE SOURCE PROGRAM
/	.LOAD DEBOO		LOAD THE BINARY FILE
/	.SAVE DEV DEBOO=0	SAVE THE CORE-IMAGE FILE
/	DEFINITIONS.

	CLOSE=	4		/CLOSE OUTPUT FILE
	DECODE=	5		/CALL COMMAND DECODER
	ENTER=	3		/ENTER TENTATIVE FILE
	FETCH=	1		/FETCH HANDLER
	IHNDBUF=7200		/INPUT HANDLER BUFFER
	INBUFFE=6200		/INPUT BUFFER
	INFILE=	7617		/INPUT FILE INFORMATION HERE
	INQUIRE=12		/INQUIRE ABOUT HANDLER
	NL0001=	CLA IAC		/LOAD AC WITH 0001
	NL0002=	CLA CLL CML RTL	/LOAD AC WITH 0002
	NL7776=	CLA CLL CMA RAL	/LOAD AC WITH 7776
	NL7777=	CLA CMA		/LOAD AC WITH 7777
	OHNDBUF=6600		/OUTPUT HANDLER BUFFER
	OUTBUFF=5600		/OUTPUT BUFFER
	OUTFILE=7600		/OUTPUT FILE INFORMATION HERE
	PRGFLD=	00		/PROGRAM FIELD
	RESET=	13		/RESET SYSTEM TABLES
	SBOOT=	7600		/MONITOR EXIT
	TBLFLD=	10		/COMMAND DECODER TABLE FIELD
	TERMWRD=7642		/TERMINATOR WORD
	USERROR=7		/USER SIGNALLED ERROR
	USR=	7700		/USR ENTRY POINT
	USRFLD=	10		/USR FIELD
	WRITE=	4000		/I/O WRITE BIT
	*0			/START AT THE BEGINNING

	*10			/DEFINE AUTO-INDEX AREA

XR1,	.-.			/AUTO-INDEX NUMBER 1
XR2,	.-.			/AUTO-INDEX NUMBER 2

	*20			/GET PAST AUTO-INDEX AREA

BUFPTR,	.-.			/INPUT BUFFER POINTER
BYTES,	ZBLOCK	3		/DATA BYTES
CHRCNT,	.-.			/CHARACTER COUNTER
CMPCNT,	.-.			/COMPRESSION COUNTER
DANGCNT,.-.			/DANGER COUNT
DATCNT,	.-.			/DATA COUNTER
IDNUMBE,.-.			/INPUT DEVICE NUMBER
INPUT,	.-.			/INPUT HANDLER POINTER
INRECOR,.-.			/INPUT RECORD
FNAME,	ZBLOCK	4		/OUTPUT FILENAME
GETBERR,.-.			/ERROR ROUTINE POINTER FOR GETBYTE ROUTINE
LATEST,	.-.			/LATEST OUTPUT BYTE
ODNUMBE,.-.			/OUTPUT DEVICE NUMBER
ONAME,	ZBLOCK	10		/OUTPUT NAME FIELD
OUTPUT,	.-.			/OUTPUT HANDLER POINTER
OUTRECO,.-.			/OUTPUT RECORD
PUTEMP,	.-.			/INPUT TEMPORARY
PUTPTR,	.-.			/OUTPUT POINTER
TEMPTR,	.-.			/TERMPORARY OUTPUT POINTER
THIRD,	.-.			/THIRD BYTE TEMPORARY

	PAGE			/START AT THE USUAL PLACE

BEGIN,	NOP			/HERE IN CASE WE'RE CHAINED TO
	CLA			/CLEAN UP
START,	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	DECODE			/WANT COMMAND DECODER
	"B^100+"O-300		/.BO IS DEFAULT EXTENSION
	CDF	TBLFLD		/GOTO TABLE FIELD
	TAD I	(TERMWRD)	/GET TERMINATOR WORD
	SPA CLA			/SKIP IF <CR> TERMINATED THE LINE
	DCA	EXITZAP		/ELSE CAUSE EXIT LATER
	TAD I	(OUTFILE)	/GET FIRST OUTPUT FILE DEVICE WORD
	SNA			/SKIP IF FIRST OUTPUT FILE PRESENT
	JMP	TSTMORE		/JUMP IF NOT THERE
	AND	[17]		/JUST DEVICE BITS
ODNULL,	DCA	ODNUMBER	/SAVE OUTPUT DEVICE NUMBER
	TAD I	(OUTFILE+5)	/GET SECOND OUTPUT FILE DEVICE WORD
	SNA			/SKIP IF THERE
	TAD I	(OUTFILE+12)	/ELSE GET THIRD OUTPUT FILE DEVICE WORD
	SZA CLA			/SKIP IF BOTH NOT PRESENT
	JMP	OUTERR		/ELSE COMPLAIN
	TAD I	(INFILE)	/GET FIRST INPUT FILE DEVICE WORD
	SNA			/SKIP IF PRESENT
	JMP	INERR		/JUMP IF NOT
	AND	[17]		/JUST DEVICE BITS
	DCA	IDNUMBER	/SAVE INPUT DEVICE NUMBER
	TAD I	(INFILE+2)	/GET SECOND INPUT FILE DEVICE WORD
	SZA CLA			/SKIP IF ONLY ONE INPUT FILE
	JMP	INERR		/ELSE COMPLAIN
	TAD I	(INFILE+1)	/GET FIRST INPUT FILE STARTING RECORD
	DCA	INRECORD	/SET IT UP
	CDF	PRGFLD		/BACK TO OUR FIELD
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	RESET			/RESET SYSTEM TABLES
	TAD	(IHNDBUFFER+1)	/GET INPUT BUFFER POINTER+TWO-PAGE BIT
	DCA	IHPTR		/STORE IN-LINE
	TAD	IDNUMBER	/GET INPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	FETCH			/FETCH HANDLER
IHPTR,	.-.			/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR		/FETCH ERROR
	TAD	IHPTR		/GET RETURNED ADDRESS
	DCA	INPUT		/STORE AS INPUT HANDLER ADDRESS
	JMS I	(GEOFILE)	/GET OUTPUT FILE INFORMATION
	TAD	(OHNDBUFFER+1)	/GET BUFFER POINTER+TWO-PAGE BIT
	DCA	OHPTR		/STORE IN-LINE
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	FETCH			/FETCH HANDLER
OHPTR,	.-.			/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR		/FETCH ERROR
	TAD	OHPTR		/GET RETURNED ADDRESS
	DCA	OUTPUT		/STORE AS OUTPUT HANDLER ADDRESS
	TAD	(FNAME)		/POINT TO
	DCA	ENTAR1		/STORED FILENAME
	DCA	ENTAR2		/CLEAR SECOND ARGUMENT
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	ENTER			/ENTER TENTATIVE FILENAME
ENTAR1,	.-.			/WILL POINT TO FILENAME
ENTAR2,	.-.			/WILL BE ZERO
	JMP	ENTERR		/ENTER ERROR
	TAD	ENTAR1		/GET RETURNED FIRST RECORD
	DCA	OUTRECORD	/STORE IT
	TAD	ENTAR2		/GET RETURNED EMPTY LENGTH
	IAC			/ADD 2-1 FOR OS/278 CRAZINESS
	DCA	DANGCNT		/STORE AS DANGER COUNT
	JMS I	(DECODIT)	/GO DO THE ACTUAL DECODING
	JMP	PROCERR		/ERROR WHILE DECODING
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	CLOSE			/CLOSE OUTPUT FILE
	FNAME			/POINTER TO FILENAME
OUTCNT,	.-.			/WILL BE ACTUAL COUNT
	JMP	CLSERR		/CLOSE ERROR
EXITZAP,JMP	START		/**** <ESC> TERMINATION **** 0000
	JMP I	(SBOOT)		/EXIT TO MONITOR
/	OUTPUT FILE ERROR WHILE PROCESSING.

OERROR,	TAD	[3]		/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ERROR WHILE PROCESSING INPUT FILE.

PROCERR,NL0002			/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ERROR WHILE CLOSING THE OUTPUT FILE.

CLSERR,	NL0001			/SET INCREMENT
	SKP			/DON'T CLEAR IT

/	OUTPUT FILE TOO LARGE ERROR.

SIZERR,	CLA			/CLEAN UP
	TAD	[3]		/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ENTER ERROR.

ENTERR,	NL0002			/SET INCREMENT
	SKP			/DON'T USE NEXT

/	HANDLER FETCH ERROR.

FERROR,	NL0001			/SET INCREMENT

/	I/O ERROR WHILE PROCESSING IMBEDDED FILENAME.

NIOERR,	IAC			/SET INCREMENT

/	FORMAT ERROR WHILE PROCESSING IMBEDDED FILENAME.

CHARERR,IAC			/SET INCREMENT

/	INPUT FILESPEC ERROR.

INERR,	IAC			/SET INCREMENT

/	OUTPUT FILESPEC ERROR.

OUTERR,	DCA	ERRNUMBER	/STORE ERROR NUMBER
	CDF	PRGFLD		/ENSURE OUR FIELD
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	USERROR			/USER ERROR
ERRNUMB,.-.			/WILL BE PASSED ERROR NUMBER
/	COMES HERE TO TEST FOR NULL LINE.

TSTMORE,TAD I	(OUTFILE+5)	/GET SECOND OUTPUT FILE DEVICE WORD
	SNA			/SKIP IF PRESENT
	TAD I	(OUTFILE+12)	/ELSE GET THIRD OUTPUT FILE DEVICE WORD
	SZA CLA			/SKIP IF NO OUTPUT FILES
	JMP	OUTERR		/ELSE COMPLAIN OF SECOND/THIRD (WITHOUT FIRST) OUTPUT 
	TAD I	(INFILE)	/GET FIRST OUTPUT FILE DEVICE WORD
	SZA CLA			/SKIP IF NO INPUT FILES
	JMP	ODNULL		/JUMP IF INPUT WITHOUT OUTPUT
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMP	EXITZAP		/MIGHT BE LAST TIME, SO GO THERE FIRST

	PAGE
DECODIT,.-.			/DECODING ROUTINE
	TAD	(DECERR)	/SETUP THE
	DCA	GETBERROR	/GETBYTE ERROR ROUTINE
	DCA	DATCNT		/CLEAR DATA COUNT
	NL7777			/SETUP FOR INITIALIZING
	JMS I	(PUTBYTE)	/INITIALIZE OUTPUT FILE
LOOP,	JMS	GETCHR		/GET A CHARACTER
	JMP	ENDIT		/WEREN'T ANY MORE
	TAD	(-176)		/COMPARE TO TILDE
	SZA CLA			/SKIP IF IT MATCHES
	JMP	DATPROCESS	/JUMP IF NOT
	JMS	GETCHR		/GET A CHARACTER
DECERR,	JMP I	DECODIT		/WASN'T ANY
	TAD	(-"0!200)	/REMOVE PRINTING OFFSET
	SNA			/SKIP IF SIGNIFICENT COMPRESSION
	JMP	DATCORRECT	/JUMP IF NOT
	CIA			/INVERT FOR COUNTING
	DCA	CMPCNT		/SAVE COMPRESSION COUNT
	JMS	DATOUT		/OUTPUT DATA FIELD (IF ANY) AND CLEAR DATA COUNT
COMPLP,	JMS I	(PUTBYTE)	/OUTPUT A <NUL> BYTE
	ISZ	CMPCNT		/DONE YET?
	JMP	COMPLP		/NO, KEEP GOING
	JMP	LOOP		/YES, GO BACK FOR MORE FILE ITEMS

/	ZERO-LENGTH COMPRESSION (CORRECTION) FIELD FOUND.

DATCORR,NL7777			/BACKUP
	TAD	DATCNT		/NOW HAVE CORRECTED DATA COUNT
	SPA			/SKIP IF COUNT WASN'T ZERO
	JMP	LOOP		/IGNORE BECAUSE THERE IS NO DATA
	SNA			/SKIP IF ENOUGH TO CORRECT
	JMP I	DECODIT		/TAKE ERROR RETURN IF NOT
	DCA	DATCNT		/STORE CORRECTED COUNT
	JMP	LOOP		/GO BACK FOR MORE FILE ITEMS
/	UN-COMPRESSED DATA FOUND.

DATPROC,JMS	DATOUT		/OUTPUT PREVIOUS DATA FIELD (IF ANY), CLEAR DATA COUNT
	TAD	PUTEMP		/GET LATEST BACK
	TAD	(-"0!200)	/REMOVE DIGIT OFFSET
	CLL RTL			/MOVE UP
	DCA	BYTES		/STORE IT
	JMS	GETCHR		/GET NEXT CHARACTER
	JMP I	DECODIT		/WASN'T ANY
	AND	(17)		/JUST LOW-ORDER BITS
	CLL RTL;RTL		/MOVE UP
	DCA	BYTES+1		/STORE IT
	TAD	PUTEMP		/GET IT AGAIN
	RTR;RTR			/MOVE DOWN
	IAC			/REMOVE DIGIT BIAS
	AND	(3)		/JUST GOOD BITS
	TAD	BYTES		/GET OLD BITS
	DCA	BYTES		/STORE COMPOSITE
	JMS	GETCHR		/GET NEXT CHARACTER
	JMP I	DECODIT		/WASN'T ANY
	TAD	(-"0!200)	/REMOVE DIGIT OFFSET
	RTR			/MOVE DOWN
	AND	(17)		/ISOLATE GOOD BITS
	TAD	BYTES+1		/GET OLD BITS
	DCA	BYTES+1		/STORE COMPOSITE
	TAD	PUTEMP		/GET IT AGAIN
	AND	(3)		/ISOLATE GOOD BITS
	CLL RTL;RTL;RTL		/MOVE UP
	DCA	BYTES+2		/STORE IT
	JMS	GETCHR		/GET NEXT CHARACTER
	JMP I	DECODIT		/WASN'T ANY
	TAD	(-"0!200)	/REMOVE DIGIT OFFSET
	TAD	BYTES+2		/GET OLD BITS
	DCA	BYTES+2		/STORE COMPOSITE
	TAD	(3)		/SETUP THE
	DCA	DATCNT		/DATA COUNT
	JMP	LOOP		/GO GET NEXT FILE ITEM

/	COMES HERE AT END-OF-FILE.

ENDIT,	JMS	DATOUT		/OUTPUT ANY LEFTOVER DATA
	SKP			/DON'T OUTPUT YET
CLOSLUP,JMS I	(PUTBYTE)	/OUTPUT A <NUL> BYTE
	TAD	PUTPTR		/GET THE OUTPUT BUFFER POINTER
	TAD	(-OUTBUFFER)	/COMPARE TO RESET VALUE
	SZA CLA			/SKIP IF IT MATCHES
	JMP	CLOSLUP		/ELSE KEEP GOING
	ISZ	DECODIT		/BUMP TO GOOD RETURN
	JMP I	DECODIT		/RETURN TO CALLER
DATOUT,	.-.			/DATA OUTPUT ROUTINE
	TAD	DATCNT		/GET CURRENT DATA COUNT
	CMA			/SETUP FOR COUNTING
	DCA	DATCNT		/STORE IT
	TAD	(BYTES-1)	/POINT TO
	DCA	XR1		/DATA AREA
	JMP	DATEST		/CHECK BEFORE OUTPUTTING

DATLUP,	TAD I	XR1		/GET A BYTE
	JMS I	(PUTBYTE)	/OUTPUT IT
DATEST,	ISZ	DATCNT		/DONE YET?
	JMP	DATLUP		/NO, KEEP GOING
	JMP I	DATOUT		/YES, RETURN TO CALLER

GETCHR,	.-.			/GET A CHARACTER ROUTINE
GETCAGN,CLA			/GET A CHARACTER
	JMS I	[GETBYTE]	/GET A CHARACTER FROM FILE
	JMP I	GETCHR		/WASN'T ANY, TAKE IMMEDIATE RETURN
	TAD	[-" !200]	/COMPARE TO <SPACE>
	SPA SNA CLA		/SKIP IF NOT CONTROL CHARACTER OR <SPACE>
	JMP	GETCAGN		/GO GET ANOTHER ONE
	TAD	PUTEMP		/GET GOOD CHARACTER
	ISZ	GETCHR		/BUMP RETURN ADDRESS
	JMP I	GETCHR		/RETURN TO CALLER

	PAGE
PUTBYTE,.-.				/OUTPUT A BYTE ROUTINE
	SPA				/ARE WE INITIALIZING?
	JMP	PUTINITIALIZE		/YES
	AND	(377)			/JUST IN CASE
	DCA	LATEST			/SAVE LATEST CHARACTER
	TAD	LATEST			/GET LATEST CHARACTER
	JMP I	PUTNEXT			/GO WHERE YOU SHOULD GO

PUTNEXT,.-.				/EXIT ROUTINE
	JMP I	PUTBYTE			/RETURN TO MAIN CALLER

PUTINIT,CLA				/CLEAN UP
	TAD	OUTRECORD		/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD		/STORE IN-LINE
	DCA I	(OUTCNT)		/CLEAR ACTUAL FILE LENGTH
PUTNEWR,TAD	POUTBUFFER/(OUTBUFFER)	/SETUP THE
	DCA	PUTPTR			/BUFFER POINTER
PUTLOOP,JMS	PUTNEXT			/GET A CHARACTER
	DCA I	PUTPTR			/STORE IT
	TAD	PUTPTR			/GET POINTER VALUE
	DCA	TEMPTR			/SAVE FOR LATER
	ISZ	PUTPTR			/BUMP TO NEXT
	JMS	PUTNEXT			/GET A CHARACTER
	DCA I	PUTPTR			/STORE IT
	JMS	PUTNEXT			/GET A CHARACTER
	RTL;RTL				/MOVE UP
	AND	[7400]			/ISOLATE HIGH NYBBLE
	TAD I	TEMPTR			/ADD ON FIRST BYTE
	DCA I	TEMPTR			/STORE COMPOSITE
	TAD	LATEST			/GET LATEST CHARACTER
	RTR;RTR;RAR			/MOVE UP AND
	AND	[7400]			/ISOLATE LOW NYBBLE
	TAD I	PUTPTR			/ADD ON SECOND BYTE
	DCA I	PUTPTR			/STORE COMPOSITE
	ISZ	PUTPTR			/BUMP TO NEXT
	TAD	PUTPTR			/GET LATEST POINTER VALUE
	TAD	(-2^200-OUTBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	PUTLOOP			/KEEP GOING
	ISZ	DANGCNT			/TOO MANY RECORDS?
	SKP				/SKIP IF NOT
	JMP I	(SIZERR)		/JUMP IF SO
	JMS I	OUTPUT			/CALL I/O HANDLER
	2^100+WRITE			/WRITE SOME PAGES FROM OUTPUT BUFFER
POUTBUF,OUTBUFFER			/BUFFER ADDRESS
PUTRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP I	(OERROR)		/OUTPUT ERROR!
	ISZ I	(OUTCNT)		/BUMP ACTUAL LENGTH
	ISZ	PUTRECORD		/BUMP TO NEXT RECORD
	JMP	PUTNEWRECORD		/KEEP GOING
/	OS/8 FILE UNPACK ROUTINE.

GETBYTE,.-.				/GET A BYTE ROUTINE
	SNA CLA				/INITIALIZING?
	JMP I	PUTC			/NO, GO GET NEXT BYTE
	TAD	INRECORD		/GET STARTING RECORD OF INPUT FILE
	DCA	GETRECORD		/STORE IN-LINE
GETNEWR,JMS I	INPUT			/CALL I/O HANDLER
	2^100				/READ TWO PAGES INTO BUFFER
PINBUFF,INBUFFER			/BUFFER ADDRESS
GETRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP I	GETBERROR		/INPUT ERROR!
	TAD	PINBUFFER/(INBUFFER)	/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
GETLOOP,DCA	THIRD			/CLEAR THIRD BYTE NOW
	JMS	PUTONE			/OBTAIN AND SEND BACK FIRST BYTE
	JMS	PUTONE			/OBTAIN AND SEND BACK SECOND BYTE
	TAD	THIRD			/GET THIRD BYTE
	JMS	PUTC			/SEND IT BACK
	TAD	BUFPTR			/GET THE POINTER
	TAD	(-2^200-INBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	GETLOOP			/KEEP GOING
	ISZ	GETRECORD		/BUMP TO NEXT RECORD
	JMP	GETNEWRECORD		/GO DO ANOTHER ONE

PUTONE,	.-.				/SEND BACK A BYTE ROUTINE
	TAD I	BUFPTR			/GET LATEST WORD
	AND	[7400]			/JUST THIRD-BYTE NYBBLE
	CLL RAL				/MOVE UP
	TAD	THIRD			/GET OLD NYBBLE (IF ANY)
	RTL;RTL				/MOVE UP NYBBLE BITS
	DCA	THIRD			/SAVE FOR NEXT TIME
	TAD I	BUFPTR			/GET LATEST WORD AGAIN
	JMS	PUTC			/SEND BACK CURRENT BYTE
	ISZ	BUFPTR			/BUMP TO NEXT WORD
	JMP I	PUTONE			/RETURN

PUTC,	.-.				/SEND BACK LATEST BYTE ROUTINE
	AND	(177)			/KEEP ONLY GOOD BITS
	DCA	PUTEMP			/SAVE IT
	TAD	PUTEMP			/GET IT BACK
	TAD	(-"Z!300)		/COMPARE TO <^Z>
	SNA CLA				/SKIP IF NOT ASCII <EOF>
	JMP I	GETBYTE			/RETURN IF ASCII MODE <EOF>
	TAD	PUTEMP			/RESTORE THE CHARACTER
	ISZ	GETBYTE			/BUMP PAST <EOF> RETURN
	JMP I	GETBYTE			/RETURN TO MAIN CALLER
	PAGE
GEOFILE,.-.			/GET OUTPUT FILE ROUTINE
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	SZA CLA			/SKIP IF NOT ESTABLISHED YET
	JMP	GOTOD		/JUMP IF DETERMINED ALREADY
	TAD	("D^100+"S-300)	/GET BEGINNING OF "DSK"
	DCA	DEVNAME		/STORE IN-LINE
	TAD	("K^100)	/GET REST OF "DSK"
	DCA	DEVNAME+1	/STORE IN-LINE
	DCA	RETVAL		/CLEAR HANDLER ENTRY WORD
	CDF	PRGFLD		/INDICATE OUR FIELD
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	INQUIRE			/INQUIRE ABOUT HANDLER
DEVNAME,ZBLOCK	2		/WILL BE DEVICE DSK
RETVAL,	.-.			/BECOMES HANDLER ENTRY POINT WORD
	HLT			/DSK: NOT IN SYSTEM IS IMPOSSIBLE!
	TAD	DEVNAME+1	/GET DEVICE NUMBER FOR DSK:
	AND	[17]		/JUST DEVICE BITS
	DCA	ODNUMBER	/STORE OUTPUT DEVICE
GOTOD,	JMS	SCANAME		/SCAN OFF FILE NAME
	CDF	TBLFLD		/BACK TO TABLE FIELD
	TAD I	(OUTFILE+1)	/GET OUTPUT FILE FIRST NAME WORD
	SNA			/SKIP IF PRESENT
	JMP	GFLNAME		/JUMP IF NOT
	DCA	FNAME		/MOVE TO OUR AREA
	TAD I	(OUTFILE+2)	/GET SECOND NAME WORD
	DCA	FNAME+1		/MOVE IT
	TAD I	(OUTFILE+3)	/GET THIRD NAME WORD
	DCA	FNAME+2		/MOVE IT
	TAD I	(OUTFILE+4)	/GET EXTENSION WORD
	DCA	FNAME+3		/MOVE IT
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMP I	GEOFILE		/RETURN

/	WE MUST TAKE THE FILENAME FROM THE IMBEDDED FILENAME SUPPLIED.

GFLNAME,CDF	PRGFLD		/BACK TO OUR FIELD
	TAD	ONAME		/GET THE FIRST CHARACTER
	SNA CLA			/SKIP IF SOMETHING THERE
	JMP I	(CHARERROR)	/COMPLAIN IF NONE THERE
	TAD	(ONAME-1)	/SETUP POINTER
	DCA	XR1		/TO NAME CHARACTERS
	TAD	(FNAME-1)	/SETUP POINTER
	DCA	XR2		/TO PACKED NAME AREA
	TAD	(-4)		/SETUP THE
	DCA	CHRCNT		/MOVE COUNT
CHRLOOP,TAD I	XR1		/GET FIRST CHARACTER
	CLL RTL;RTL;RTL		/MOVE UP
	TAD I	XR1		/ADD ON SECOND CHARACTER
	DCA I	XR2		/STORE THE PAIR
	ISZ	CHRCNT		/DONE YET?
	JMP	CHRLOOP		/NO, KEEP GOING
	JMP I	GEOFILE		/YES, RETURN
SCANAME,.-.			/SCAN OFF FILENAME ROUTINE
	TAD	(NIOERROR)	/SETUP THE
	DCA	GETBERROR	/I/O ERROR HANDLER

/	ZERO OUT THE FILENAME AREA.

	TAD	(-10)		/SETUP THE
	DCA	CHRCNT		/CLEAR COUNTER
	TAD	(ONAME-1)	/SETUP THE
	DCA	XR1		/POINTER
	JMS	CLRNAME		/CLEAR THE NAME BUFFER

/	SETUP FOR SCANNING THE NAME PORTION.

	TAD	(-6)		/SETUP THE
	DCA	CHRCNT		/SCAN COUNT
	TAD	(ONAME-1)	/SETUP THE
	DCA	XR1		/POINTER
	NL7777			/MAKE IT INITIALIZE
FNCAGN,	JMS I	(GETAN)		/GET A CHARACTER
	JMP	GOTSEPARATOR	/GOT "."; GOTO NEXT FIELD
	DCA I	XR1		/STASH THE CHARACTER
	ISZ	CHRCNT		/DONE ALL YET?
	JMP	FNCAGN		/NO, KEEP GOING

/	THROW AWAY EXTRA NAME CHARACTERS.

TOSSNAM,JMS I	(GETAN)		/GET A CHARACTER
	JMP	GOTSEPARATOR	/GOT "."; GOTO NEXT FIELD
	CLA			/THROW AWAY THE CHARACTER
	JMP	TOSSNAME	/KEEP GOING

/	COMES HERE AFTER "." FOUND.

GOTSEPA,JMS	CLRNAME		/CLEAR OUT THE REMAINING NAME FIELD
	NL7776			/SETUP THE
	DCA	CHRCNT		/SCAN COUNT
EXCAGN,	JMS I	(GETAN)		/GET A CHARACTER
	JMP I	(CHARERROR)	/GOT "."; COMPLAIN
	DCA I	XR1		/STASH THE CHARACTER
	ISZ	CHRCNT		/DONE ENOUGH YET?
	JMP	EXCAGN		/NO, KEEP GOING

/	TOSS ANY EXTRA EXTENSION CHARACTERS.

TOSSEXT,JMS I	(GETAN)		/GET A CHARACTER
	JMP I	(CHARERROR)	/GOT "."; COMPLAIN
	CLA			/THROW AWAY THE CHARACTER
	JMP	TOSSEXTENSION	/KEEP GOING

/	COMES HERE WHEN TRAILING <CR> IS FOUND.

GOTCR,	JMS	CLRNAME		/CLEAR ANY REMAINING EXTENSION CHARACTERS
	JMP I	SCANAME		/RETURN
CLRNAME,.-.			/NAME FIELD CLEARING ROUTINE
	TAD	CHRCNT		/GET CHARACTER COUNTER
	SNA CLA			/SKIP IF ANY TO CLEAR
	JMP I	CLRNAME		/ELSE JUST RETURN
	DCA I	XR1		/CLEAR A NAME WORD
	ISZ	CHRCNT		/COUNT IT
	JMP	.-2		/KEEP GOING
	JMP I	CLRNAME		/RETURN

	PAGE
GETCHAR,.-.			/GET A CHARACTER ROUTINE
	JMS I	[GETBYTE]	/GET A CHARACTER
	JMP I	(CHARERROR)	/COMPLAIN IF <EOF> REACHED
	TAD	(-"M!300)	/COMPARE TO <CR>
	SNA			/SKIP IF OTHER
	JMP I	(GOTCR)		/JUMP IF IT MATCHES
	TAD	(-140+"M-300)	/COMPARE TO LOWER-CASE LIMIT
	SPA			/SKIP IF LOWER-CASE
	TAD	(40)		/RESTORE ORIGINAL IF UPPER-CASE
	AND	(77)		/JUST SIX-BIT
	DCA	PUTEMP		/SAVE IN CASE WE NEED IT
	TAD	PUTEMP		/GET IT BACK
	JMP I	GETCHAR		/RETURN

GETAN,	.-.			/GET ALPHANUMERIC ROUTINE
GETNAGN,JMS	GETCHAR		/GET A CHARACTER
	TAD	[-" !200]	/COMPARE TO <SPACE>
	SNA CLA			/SKIP IF OTHER
	JMP	GETNAGN		/JUMP IF IT MATCHES
	TAD	PUTEMP		/GET THE CHARACTER BACK
	TAD	(-".!200)	/COMPARE TO "."
	SNA			/SKIP IF OTHER
	JMP I	GETAN		/TAKE FIRST RETURN IF IT MATCHES
	TAD	(-":+".)	/SUBTRACT UPPER LIMIT
	CLL			/CLEAR LINK FOR TEST
	TAD	(":-"0)		/ADD ON RANGE
	SZL CLA			/SKIP IF NOT NUMERIC
	JMP	GETANOK		/JUMP IF NUMERIC
	TAD	PUTEMP		/GET THE CHARACTER BACK
	TAD	(-"[!300)	/SUBTRACT UPPER LIMIT
	CLL			/CLEAR LINK FOR TEST
	TAD	("[-"A)		/ADD ON RANGE
	SNL CLA			/SKIP IF ALPHABETIC
	JMP I	(CHARERROR)	/ELSE COMPLAIN
GETANOK,TAD	PUTEMP		/GET GOOD ALPHANUMERIC CHARACTER
	ISZ	GETAN		/BUMP TO SKIP RETURN
	JMP I	GETAN		/RETURN

	PAGE
	$			/THAT'S ALL FOLK!
Added src/kermit-12/k12dec.pal.
















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
/	OS/8 DECODING PROGRAM

/	LAST EDIT:	08-JUL-1992	22:00:00	CJL

/	PROGRAM TO  DECODE  OS/8  FILES  FROM "PRINTABLE" ASCII FORMAT TO BINARY-IMAGE
/	FORMAT.  INTERMEDIATE  "ASCII"  CONVERSION  SHOULD  BE HARMLESS AS LONG AS ALL
/	PRINTING DATA CHARACTERS ARE NOT MODIFIED.

/	DISTRIBUTED BY CUCCA AS "K12DEC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE.

/	WRITTEN BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK 11379-2107
/	(718) 894-6499

/	USAGE:

/	THIS PROGRAM OPERATES ON "PRINTABLE"  ASCII  FILES  WHICH HAVE BEEN CREATED BY
/	ENCODING THE CONTENTS OF ARBITRARY (BINARY) FILES.  THE ENCODING FORMAT ALLOWS
/	FOR SOME INNOCUOUS CONTENT MODIFICATION SUCH AS  EXTRANEOUS  WHITE  SPACE  AND
/	EXTRA <CR>/<LF> PAIRS, BUT RIGOROUSLY VALIDATES CERTAIN ASPECTS OF THE FORMAT,
/	SUCH AS A TRAILING CHECKSUM.

/	CERTAIN IMBEDDED COMMANDS ARE USED SUCH AS (REMARK .........) WHICH ALLOWS FOR
/	COMMENTARY LINES WITHIN THE FILE FOR IDENTIFICATION PURPOSES.  THE (FILE ) AND
/	(END )  COMMANDS  CONTAIN  THE  SUGGESTED  FILENAME FOR THE DESCENDANT DECODED
/	FILE.
/	WHEN CREATING THE DESCENDANT DECODED FILE,  THE  USER  MAY  SPECIFY EITHER THE
/	IMBEDDED FILENAME OR AN ALTERNATE FILENAME ON EITHER THE DEFAULT (DSK:) DEVICE
/	OR A SPECIFIED DEVICE: 

/	.RUN DEV DECODE		INVOKE PROGRAM.
/	*INPUT			INPUT IS DECODED INTO IMBEDDED NAME ON DSK: (DEFAULT).
/	*DEV:OUTPUT.EX<INPUT	INPUT IS DECODED INTO OUTPUT.EX ON DEVICE DEV:.
/	*DEV:<INPUT		INPUT IS DECODED INTO IMBEDDED NAME ON DEVICE DEV:.
/	*DEV:<INPUT=NNNN/I	**** SPECIAL IMAGE TRANSFER MODE **** INPUT IS DECODED
/				INTO  RECORD 0000-[NNNN-1] ON DEVICE DEV:.  THE  =NNNN
/				VALUE SHOULD BE CAREFULLY CHOSEN LARGE ENOUGH TO WRITE
/				ALL  DATA  RECORDS,  BUT  NEED NOT BE STATED  EXACTLY.
/				(THE ENCODE PROGRAM  REQUIRES PRECISE STATEMENT OF THE
/				LENGTH  IN IMAGE TRANSFER ENCODING MODE.    ****  NOTE
/				****  THIS  METHOD  VIOLATES ALL OS/8 DEVICE STRUCTURE
/				AND  IS  MEANT  FOR TRANSFER OF COMPLETE DEVICE IMAGES
/				ONLY;  USE WITH CARE!
/	*DEV:<INPUT=NNNN/I/1	**** SPECIAL IMAGE TRANSFER  MODE **** SAME AS REGULAR
/				IMAGE MODE EXCEPT ONLY THE FIRST  HALF  OF THE DATA IS
/				USED.  NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY
/				BECAUSE IT IS USED TO CALCULATE THE APPROX.  1/2 VALUE
/				ACTUALLY  USED  IN  THIS HALF OF THE OVERALL TRANSFER.
/				THIS  MODE  SHOULD  BE USED WITH FILES CREATED FOR THE
/				EXPRESS PURPOSE  OF  TRANSMISSION BY HALVES ONLY;  USE
/				WITH CARE!
/	*DEV:<INPUT=NNNN/I/2	**** SPECIAL IMAGE  TRANSFER MODE **** SAME AS REGULAR
/				IMAGE MODE EXCEPT ONLY THE SECOND  HALF OF THE DATA IS
/				USED.  NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY
/				BECAUSE IT IS USED TO CALCULATE THE STARTING RECORD OF
/				THE APPROX.  1/2 VALUE ACTUALLY USED IN  THIS  HALF OF
/				THE OVERALL TRANSFER.    THIS MODE SHOULD BE USED WITH
/				FILES CREATED FOR THE EXPRESS PURPOSE OF  TRANSMISSION
/				BY HALVES ONLY;  USE WITH CARE!  NOTE THAT  THERE MUST
/				BE TWO  FILES  CREATED,  ONE  USING /I/1 AND THE OTHER
/				USING  /I/2 TO  COMPLETELY  TRANSFER  A  DEVICE  IMAGE
/				UNLESS /I IS USED ALONE!
/	*OUTPUT.EX<INPUT$	INPUT IS  DECODED  INTO  OUTPUT.EX ON DSK:  (DEFAULT).
/				THE <ESC> CHARACTER  WAS  USED  TO  TERMINATE THE LINE
/				(THIS IS SIGNIFIED BY $).  THIS CAUSES PROGRAM EXIT.
/	.			PROGRAM EXITS NORMALLY.
/	INPUT  FILE  ASSUMES  .EN  EXTENSION;  THERE IS NO ASSUMED  OUTPUT  EXTENSION.
/	IMAGE TRANSFER MODE DOESN'T USE OUTPUT FILENAMES, AS THE TRANSFER DESTROYS THE
/	OS/8 FILE STRUCTURE (POSSIBLY PRESENT) ON THE DEVICE.

/	PROGRAM EXIT IS THE NORMAL  OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE
/	KEYBOARD DURING THE COMMAND, OR ENDING  THE  COMMAND  INPUT LINE WITH AN <ESC>
/	CHARACTER.

/	THIS PROGRAM  SUPPORTS  A PROPER SUBSET OF THE ASCII ENCODING SCHEME DISCUSSED
/	BY CHARLES LASNER  AND  FRANK  DA  CRUZ.  THE SCHEME USED IS FIVE-BIT ENCODING
/	WITH COMPRESSION, (AS OPPOSED  TO SIX-BIT WITHOUT COMPRESSION AS USED IN PRIOR
/	VERSIONS).

/	RESTRICTIONS:

/	A)	SUPPORTS ONLY ONE DECODABLE FILE PER ENCODED FILE.

/	B)	IGNORES ALL (END ) COMMANDS.

/	C)	<CR> <LF> < ALWAYS INDICATES ENCODED DATA LINES;  NO CHECK IS MADE FOR
/		WHETHER THE > IS ON THE SAME LINE AS THE <.

/	D) 	PDP-8 GENERATED CHECKSUM DATA MUST  BE  THE  FINAL DATA IN THE FILE IN
/		THE  PROPER  FORMAT:    ZCCCCCCCCCCCC  WHERE  CCCCCCCCCCCC    IS   THE
/		TWELVE-CHARACTER PDP-8 CHECKSUM DATA.

/	IF THE ENCODED FILE IS PASSED THROUGH ANY  INTERMEDIARY  PROCESS THAT MODIFIES
/	THE CONTENTS IN A WAY THAT INTERFERES WITH ANY  OF  THE  ABOVE,  THIS DECODING
/	PROGRAM  WILL  FAIL.   IT IS THE USER'S RESPONSIBILITY TO  EDIT  OUT  UNWANTED
/	CHANGES TO THE ENCODED FILE.  ALL OTHER ASPECTS OF THE  PROTOCOL  ARE  OBEYED,
/	SUCH AS IMBEDDED <FF>, EXTRA <CR> <LF>, OR TRAILING SPACES HAVE NO  EFFECT  ON
/	THE RELIABILITY OF THE DECODING PROCESS, ETC.
/	ERROR MESSAGES.

/	ANY MESSAGE  PRINTED  IS A FATAL ERROR MESSAGE.  ALL MESSAGES ARE THE STANDARD
/	OS/8 "USER" ERROR  MESSAGES OF THE FORM:  USER ERROR X AT AAAAA WHERE X IS THE
/	ERROR NUMBER AND AAAAA  IS  THE  PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED.
/	THE FOLLOWING USER ERRORS ARE DEFINED:

/	ERROR NUMBER		PROBABLE CAUSE

/	0			TOO MANY OUTPUT FILES.

/	1			NO INPUT FILE OR TOO MANY INPUT FILES.

/	2			IMBEDDED OUTPUT FILENAME FORMAT ERROR.

/	3			I/O ERROR WHILE LOCATING IMBEDDED OUTPUT FILENAME.

/	4			ERROR WHILE FETCHING FILE HANDLER.

/	5			ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.

/	6			OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.

/	7			ERROR WHILE CLOSING THE OUTPUT FILE.

/	8			I/O ERROR WHILE DECODING FILE DATA OR BAD DATA.

/	ASSEMBLY INSTRUCTIONS.

/	IT IS  ASSUMED  THE  SOURCE  FILE  K12DEC.PAL  HAS  BEEN  MOVED AND RENAMED TO
/	DSK:DECODE.PA.

/	.PAL DECODE<DECODE	ASSEMBLE SOURCE PROGRAM
/	.LOAD DECODE		LOAD THE BINARY FILE
/	.SAVE DEV DECODE=0	SAVE THE CORE-IMAGE FILE
/	DEFINITIONS.

	CLOSE=	4			/CLOSE OUTPUT FILE
	DECODE=	5			/CALL COMMAND DECODER
	ENTER=	3			/ENTER TENTATIVE FILE
	EQUWRD=	7646			/EQUALS PARAMETER HERE IN TABLE FIELD
	FETCH=	1			/FETCH HANDLER
	IHNDBUF=7200			/INPUT HANDLER BUFFER
	INBUFFE=6200			/INPUT BUFFER
	INFILE=	7617			/INPUT FILE INFORMATION HERE
	INQUIRE=12			/INQUIRE ABOUT HANDLER
	NL0001=	CLA IAC			/LOAD AC WITH 0001
	NL0002=	CLA CLL CML RTL		/LOAD AC WITH 0002
	NL4000=	CLA CLL CML RAR		/LOAD AC WITH 4000
	NL7776=	CLA CLL CMA RAL		/LOAD AC WITH 7776
	NL7777=	CLA CMA			/LOAD AC WITH 7777
	OHNDBUF=6600			/OUTPUT HANDLER BUFFER
	OUTBUFF=5600			/OUTPUT BUFFER
	OUTFILE=7600			/OUTPUT FILE INFORMATION HERE
	PRGFLD=	00			/PROGRAM FIELD
	RESET=	13			/RESET SYSTEM TABLES
	SBOOT=	7600			/MONITOR EXIT
	SWAL=	7643			/A-/L SWITCHES HERE IN TABLE FIELD
	SWY9=	7645			/Y-/9 SWITCHES HERE IN TABLE FIELD
	TBLFLD=	10			/COMMAND DECODER TABLE FIELD
	TERMWRD=7642			/TERMINATOR WORD
	USERROR=7			/USER SIGNALLED ERROR
	USR=	7700			/USR ENTRY POINT
	USRFLD=	10			/USR FIELD
	WIDTH=	107-2			/69 DATA CHARACTERS PER LINE (TOTAL 71)
	WRITE=	4000			/I/O WRITE BIT
	*0				/START AT THE BEGINNING

	*10				/DEFINE AUTO-INDEX AREA

XR1,	.-.				/AUTO-INDEX NUMBER 1
XR2,	.-.				/AUTO-INDEX NUMBER 2

	*20				/GET PAST AUTO-INDEX AREA

BUFPTR,	.-.				/OUTPUT BUFFER POINTER
CCNT,	.-.				/CHECKSUM COUNTER
CHKSUM,	ZBLOCK	5			/CHECKSUM TEMPORARY
CHRCNT,	.-.				/CHARACTER COUNTER
CSUMTMP,.-.				/CHECKSUM TEMPORARY
DANGCNT,.-.				/DANGER COUNT
DATCNT,	.-.				/DATA COUNTER
DSTATE,	.-.				/DATA STATE VARIABLE
IDNUMBE,.-.				/INPUT DEVICE NUMBER
IMSW,	.-.				/IMAGE-MODE SWITCH
INITFLA,.-.				/INITIALIZE INPUT FLAG
INPUT,	.-.				/INPUT HANDLER POINTER
INRECOR,.-.				/INPUT RECORD
FCHKSUM,ZBLOCK	5			/FILE CHECKSUM
FNAME,	ZBLOCK	4			/OUTPUT FILENAME
GWTMP1,	.-.				/GETWORD TEMPORARY
GWTMP2,	.-.				/GETWORD TEMPORARY
GWVALUE,.-.				/LATEST WORD VALUE
ODNUMBE,.-.				/OUTPUT DEVICE NUMBER
OUTPUT,	.-.				/OUTPUT HANDLER POINTER
OUTRECO,.-.				/OUTPUT RECORD
PUTEMP,	.-.				/OUTPUT TEMPORARY
PUTPTR,	.-.				/OUTPUT POINTER
THIRD,	.-.				/THIRD BYTE TEMPORARY

/	STATE TABLE.

P,	SCANIT				/0000 LOOKING FOR "(" OR "<"
	FNDCOMMAND			/0001 FOUND "(" AND NOW LOOKING FOR ")"
	FNDCEND				/0002 FOUND ")" AND NOW LOOKING FOR <CR>
	FNDCR				/0003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET
	STORDATA			/4000 FOUND "<" AND PROCESSING 69 DATA BYTES
	ENDATA				/4001 FOUND 69 DATA BYTES AND NOW LOOKING FOR ">"
	ENDCR				/4002 FOUND ">" AND NOW LOOKING FOR <CR>
	FNDCR/ENDLF			/4003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET
	PAGE				/START AT THE USUAL PLACE

BEGIN,	NOP				/HERE IN CASE WE'RE CHAINED TO
	CLA				/CLEAN UP
START,	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	DECODE				/WANT COMMAND DECODER
	"E^100+"N-300			/.EN IS DEFAULT EXTENSION
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	(TERMWRD)		/GET TERMINATOR WORD
	SPA CLA				/SKIP IF <CR> TERMINATED THE LINE
	DCA	EXITZAP			/ELSE CAUSE EXIT LATER
	DCA	IMSW			/CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH
	TAD I	(OUTFILE)		/GET FIRST OUTPUT FILE DEVICE WORD
	SNA				/SKIP IF FIRST OUTPUT FILE PRESENT
	JMP	TSTMORE			/JUMP IF NOT THERE
	AND	[17]			/JUST DEVICE BITS
ODNULL,	DCA	ODNUMBER		/SAVE OUTPUT DEVICE NUMBER
	TAD I	(OUTFILE+5)		/GET SECOND OUTPUT FILE DEVICE WORD
	SNA				/SKIP IF THERE
	TAD I	(OUTFILE+12)		/ELSE GET THIRD OUTPUT FILE DEVICE WORD
	SZA CLA				/SKIP IF BOTH NOT PRESENT
	JMP I	(OUTERR)		/ELSE COMPLAIN
	TAD I	(INFILE)		/GET FIRST INPUT FILE DEVICE WORD
	SNA				/SKIP IF PRESENT
	JMP I	(INERR)			/JUMP IF NOT
	AND	[17]			/JUST DEVICE BITS
	DCA	IDNUMBER		/SAVE INPUT DEVICE NUMBER
	TAD I	(INFILE+2)		/GET SECOND INPUT FILE DEVICE WORD
	SZA CLA				/SKIP IF ONLY ONE INPUT FILE
	JMP I	(INERR)			/ELSE COMPLAIN
	TAD I	(INFILE+1)		/GET FIRST INPUT FILE STARTING RECORD
	DCA	INRECORD		/SET IT UP
	CDF	PRGFLD			/BACK TO OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	RESET				/RESET SYSTEM TABLES
	TAD	(IHNDBUFFER+1)		/GET INPUT BUFFER POINTER+TWO-PAGE BIT
	DCA	IHPTR			/STORE IN-LINE
	TAD	IDNUMBER		/GET INPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	FETCH				/FETCH HANDLER
IHPTR,	.-.				/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP I	(FERROR)		/FETCH ERROR
	TAD	IHPTR			/GET RETURNED ADDRESS
	DCA	INPUT			/STORE AS INPUT HANDLER ADDRESS
	JMS I	(GEOFILE)		/GET OUTPUT FILE INFORMATION
	TAD	(OHNDBUFFER+1)		/GET BUFFER POINTER+TWO-PAGE BIT
	DCA	OHPTR			/STORE IN-LINE
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	FETCH				/FETCH HANDLER
OHPTR,	.-.				/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP I	(FERROR)		/FETCH ERROR
	TAD	OHPTR			/GET RETURNED ADDRESS
	DCA	OUTPUT			/STORE AS OUTPUT HANDLER ADDRESS
	TAD	IMSW			/GET IMAGE-MODE SWITCH
	SNA CLA				/SKIP IF SET
	JMP	NOIMAGE			/JUMP IF NOT

/	IF /2 IS SET,  THE  DATA  STARTS  HALF-WAY  INTO THE IMAGE.  OTHER IMAGE MODES
/	START AT RECORD 0000.

	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	[SWY9]			/GET /Y-/9 SWITCHES
	AND	(200)			/JUST /2 SWITCH
	SNA CLA				/SKIP IF SET
	JMP	IMAGE1			/JUMP IF /1 OR NEITHER /1, /2 SET
	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
IMAGE1,	DCA	OUTRECORD		/STORE STARTING OUTPUT RECORD
	CDF	PRGFLD			/BACK TO OUR FIELD
	SKP				/DON'T ENTER FILE NAME
NOIMAGE,JMS I	(FENTER)		/ENTER THE TENTATIVE FILE NAME
	DCA	DSTATE			/SET INITIAL DATA STATE
	JMS I	(CLRCHKSUM)		/CLEAR OUT CHECKSUM
	JMS I	(DECODIT)		/GO DO THE ACTUAL DECODING
	JMP I	(PROCERR)		/ERROR WHILE DECODING
	TAD	IMSW			/GET IMAGE-MODE SWITCH
	SZA CLA				/SKIP IF CLEAR
	JMP	EXITZAP			/JUMP IF SET
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	CLOSE				/CLOSE OUTPUT FILE
	FNAME				/POINTER TO FILENAME
OUTCNT,	.-.				/WILL BE ACTUAL COUNT
	JMP I	(CLSERR)		/CLOSE ERROR
EXITZAP,JMP	START			/**** <ESC> TERMINATION **** 0000
	JMP I	(SBOOT)			/EXIT TO MONITOR
/	COMES HERE TO TEST FOR NULL LINE.

TSTMORE,TAD I	(OUTFILE+5)		/GET SECOND OUTPUT FILE DEVICE WORD
	SNA				/SKIP IF PRESENT
	TAD I	(OUTFILE+12)		/ELSE GET THIRD OUTPUT FILE DEVICE WORD
	SZA CLA				/SKIP IF NO OUTPUT FILES
	JMP I	(OUTERR)		/ELSE COMPLAIN OF SECOND/THIRD (WITHOUT FIRST) OUTPUT 
	TAD I	(INFILE)		/GET FIRST OUTPUT FILE DEVICE WORD
	SZA CLA				/SKIP IF NO INPUT FILES
	JMP	ODNULL			/JUMP IF INPUT WITHOUT OUTPUT
	CDF	PRGFLD			/BACK TO OUR FIELD
	JMP	EXITZAP			/MIGHT BE LAST TIME, SO GO THERE FIRST

	PAGE
/	ERROR WHILE PROCESSING INPUT FILE.

PROCERR,NL0002				/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ERROR WHILE CLOSING THE OUTPUT FILE.

CLSERR,	NL0001				/SET INCREMENT
	SKP				/DON'T CLEAR IT

/	OUTPUT FILE TOO LARGE ERROR.

SIZERR,	CLA				/CLEAN UP
	TAD	[3]			/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ENTER ERROR.

ENTERR,	NL0002				/SET INCREMENT
	SKP				/DON'T USE NEXT

/	HANDLER FETCH ERROR.

FERROR,	NL0001				/SET INCREMENT

/	I/O ERROR WHILE PROCESSING (FILE ) COMMAND.

NIOERR,	IAC				/SET INCREMENT

/	FORMAT ERROR WHILE PROCESSING (FILE ) COMMAND.

CHARERR,IAC				/SET INCREMENT

/	INPUT FILESPEC ERROR.

INERR,	IAC				/SET INCREMENT

/	OUTPUT FILESPEC ERROR.

OUTERR,	DCA	ERRNUMBER		/STORE ERROR NUMBER
	CDF	PRGFLD			/ENSURE OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	USERROR				/USER ERROR
ERRNUMB,.-.				/WILL BE PASSED ERROR NUMBER
DECODIT,.-.				/DECODING ROUTINE
	TAD	OUTRECORD		/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD		/STORE IN-LINE
	DCA I	(OUTCNT)		/CLEAR ACTUAL FILE LENGTH
	NL7777				/SETUP THE
	DCA	INITFLAG		/INITIALIZE FLAG
	TAD	(GWLOOP)		/INITIALIZE THE
	DCA I	(GWNEXT)		/DECODE PACK ROUTINE
PUTNEWR,TAD	POUTBUFFER/(OUTBUFFER)	/SETUP THE
	DCA	PUTPTR			/OUTPUT BUFFER POINTER
PUTLOOP,JMS I	(GETWORD)		/GET A WORD
	DCA I	PUTPTR			/STORE IT
	ISZ	PUTPTR			/BUMP TO NEXT
	TAD	PUTPTR			/GET THE POINTER
	TAD	(-2^200-OUTBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	PUTLOOP			/KEEP GOING
	ISZ	DANGCNT			/TOO MANY RECORDS?
	SKP				/SKIP IF NOT
	JMP I	(SIZERROR)		/NOT ENOUGH SPACE AVAILABLE
	JMS I	OUTPUT			/CALL OUTPUT HANDLER
	2^100+WRITE			/WRITE LATEST RECORD
POUTBUF,OUTBUFFER			/OUTPUT BUFFER ADDRESS
PUTRECO,.-.				/WILL BE LATEST RECORD NUMBER
DECERR,	JMP I	DECODIT			/I/O ERROR
	ISZ	PUTRECORD		/BUMP TO NEXT RECORD
	NOP				/JUST IN CASE
	ISZ I	(OUTCNT)		/BUMP ACTUAL LENGTH
	JMP	PUTNEWRECORD		/GO DO ANOTHER ONE

/	GOOD RETURN HERE.

DECBMP,	ISZ	DECODIT			/BUMP TO GOOD RETURN
	JMP I	DECODIT			/RETURN
/	OS/8 FILE UNPACK ROUTINE.

GETBYTE,.-.				/GET A BYTE ROUTINE
	SNA CLA				/INITIALIZING?
	JMP I	PUTC			/NO, GO GET NEXT BYTE
	TAD	INRECORD		/GET STARTING RECORD OF INPUT FILE
	DCA	GETRECORD		/STORE IN-LINE
GETNEWR,JMS I	INPUT			/CALL I/O HANDLER
	2^100				/READ TWO PAGES INTO BUFFER
	INBUFFER			/BUFFER ADDRESS
GETRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP I	GETBYTE			/INPUT ERROR!
	TAD	(INBUFFER)		/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
GETLOOP,DCA	THIRD			/CLEAR THIRD BYTE NOW
	JMS	PUTONE			/OBTAIN AND SEND BACK FIRST BYTE
	JMS	PUTONE			/OBTAIN AND SEND BACK SECOND BYTE
	TAD	THIRD			/GET THIRD BYTE
	JMS	PUTC			/SEND IT BACK
	TAD	BUFPTR			/GET THE POINTER
	TAD	(-2^200-INBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	GETLOOP			/KEEP GOING
	ISZ	GETRECORD		/BUMP TO NEXT RECORD
	JMP	GETNEWRECORD		/GO DO ANOTHER ONE

PUTONE,	.-.				/SEND BACK A BYTE ROUTINE
	TAD I	BUFPTR			/GET LATEST WORD
	AND	(7400)			/JUST THIRD-BYTE NYBBLE
	CLL RAL				/MOVE UP
	TAD	THIRD			/GET OLD NYBBLE (IF ANY)
	RTL;RTL				/MOVE UP NYBBLE BITS
	DCA	THIRD			/SAVE FOR NEXT TIME
	TAD I	BUFPTR			/GET LATEST WORD AGAIN
	JMS	PUTC			/SEND BACK CURRENT BYTE
	ISZ	BUFPTR			/BUMP TO NEXT WORD
	JMP I	PUTONE			/RETURN

PUTC,	.-.				/SEND BACK LATEST BYTE ROUTINE
	AND	(177)			/KEEP ONLY GOOD BITS
	TAD	(-"Z!300)		/COMPARE TO <^Z>
	SNA				/SKIP IF NOT ASCII <EOF>
	JMP	GETEOF			/JUMP IF ASCII MODE <EOF>
	TAD	("Z&37)			/RESTORE THE CHARACTER
	ISZ	GETBYTE			/BUMP PAST <EOF> RETURN
GETEOF,	ISZ	GETBYTE			/BUMP PAST I/O ERROR RETURN
	JMP I	GETBYTE			/RETURN TO MAIN CALLER
	PAGE
/	GET A DECODED WORD ROUTINE.

GETWORD,.-.				/GET A WORD ROUTINE
	JMP I	GWNEXT			/GO WHERE YOU SHOULD GO

GWNEXT,	.-.				/EXIT ROUTINE
	SNL				/SKIP IF CHECKSUM PREVENTED
	JMS I	(DOCHECK)		/ELSE DO CHECKSUM
	JMP I	GETWORD			/RETURN TO MAIN CALLER

/	COMES HERE TO PROCESSED COMPRESSED DATA.

GWX,	JMS I	(GETCHR)		/GET NEXT CHARACTER
	JMS I	(GWORD0)		/GET 12-BIT WORD
	JMS I	(DOCHECK)		/INCLUDE IN CHECKSUM
	DCA	GWVALUE			/SAVE AS COMPRESSED VALUE
	TAD	GWTMP2			/GET LATEST CHARACTER
	AND	[7]			/ISOLATE BITS[9-11]
	CLL RTR;RTR			/BITS[9-11] => AC[0-2]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS	GBIHEXBINARY		/GET A CHARACTER
	CLL RTL;RTL			/BITS[7-11] => AC[3-7]
	TAD	GWTMP1			/ADD ON BITS[0-2]
	JMS I	(DOCHECK)		/INCLUDE IN CHECKSUM
	CLL RTR;RTR			/BITS[0-7] => AC[4-11]
	SNA				/SKIP IF NOT 256
	TAD	[400]			/000 => 256
	CIA				/INVERT FOR COUNTING
	DCA	GWTMP1			/SAVE AS REPEAT COUNTER
GWXLUP,	TAD	GWVALUE			/GET THE VALUE
	STL				/PREVENT CHECKSUMMING IT
	JMS	GWNEXT			/RETURN IT TO THEM
	ISZ	GWTMP1			/DONE ENOUGH?
	JMP	GWXLUP			/NO, KEEP GOING
/	COMES HERE TO INITIATE ANOTHER DATA GROUP.

GWLOOP,	JMS I	(GETCHR)		/GET LATEST FILE CHARACTER
	TAD	(-"Z!200)		/COMPARE TO EOF INDICATOR
	SNA				/SKIP IF OTHER
	JMP	GWZ			/JUMP IF IT MATCHES
	TAD	(-"X+"Z)		/COMPARE TO COMPRESSION INDICATOR
	SNA CLA				/SKIP IF OTHER
	JMP	GWX			/JUMP IF IT MATCHES
	TAD	PUTEMP			/GET THE CHARACTER BACK
	JMS I	(GWORD0)		/GET A 12-BIT WORD
	JMS	GWNEXT			/RETURN IT
	JMS I	(GWORD1)		/GET NEXT 12-BIT WORD
	JMS	GWNEXT			/RETURN IT
	JMS I	(GWORD2)		/GET NEXT 12-BIT WORD
	JMS	GWNEXT			/RETURN IT
	JMS I	(GWORD3)		/GET NEXT 12-BIT WORD
	JMS	GWNEXT			/RETURN IT
	JMS I	(GWORD4)		/GET NEXT 12-BIT WORD
	JMS	GWNEXT			/RETURN IT
	JMP	GWLOOP			/KEEP GOING

/	COMES HERE WHEN EOF INDICATOR FOUND.

GWZ,	TAD	(FCHKSUM-1)		/SETUP THE
	DCA	XR1			/CHECKSUM POINTER
	JMS I	(GETCHR)		/GET NEXT CHARACTER
	JMS I	(GWORD0)		/GET A 12-BIT WORD
	DCA I	XR1			/STORE IT
	JMS I	(GWORD1)		/GET NEXT WORD
	DCA I	XR1			/STORE IT
	JMS I	(GWORD2)		/GET NEXT WORD
	DCA I	XR1			/STORE IT
	JMS I	(GWORD3)		/GET NEXT WORD
	DCA I	XR1			/STORE IT
	JMS I	(GWORD4)		/GET NEXT WORD
	DCA I	XR1			/STORE IT
	TAD	(CHKSUM-1)		/POINT TO
	DCA	XR1			/CALCULATED CHECKSUM
	TAD	(FCHKSUM-1)		/POINT TO
	DCA	XR2			/FILE CHECKSUM
	TAD	[-5]			/SETUP THE
	DCA	CCNT			/COMPARE COUNT
	CLL				/CLEAR LINK FOR TEST
GWCMPLP,RAL				/GET CARRY
	TAD I	XR1			/GET A CALCULATED WORD
	TAD I	XR2			/COMPARE TO FILE WORD
	SZA CLA				/SKIP IF OK
	JMP I	(DECERR)		/ELSE COMPLAIN
	ISZ	CCNT			/DONE ALL?
	JMP	GWCMPLP			/NO, KEEP GOING
/	THE CHECKSUM IS OK, CHECK IF FILE ENDED IN A PLAUSIBLE PLACE.

	TAD	PUTPTR			/GET OUTPUT POINTER
	TAD	(-OUTBUFFER-4)		/COMPARE TO LIMIT
	SMA SZA CLA			/SKIP IF GOOD VALUE
	JMP I	(DECERROR)		/JUMP IF NOT

/	THE FILE ENDED OK, THERE WERE POSSIBLY A  FEW  CHARACTERS  LEFTOVER BECAUSE OF
/	ALIGNMENT  CONSIDERATIONS.    THEY  SHOULD  BE  IGNORED SINCE OS/8  FILES  ARE
/	MULTIPLES OF WHOLE RECORDS.

	JMP I	(DECBMP)		/RETURN WITH ALL OK

GBIHEXB,.-.				/GET BINARY VALUE OF BIHEXADECIMAL CHARACTER
	CLA				/CLEAN UP
	TAD	GBIHEXBINARY		/GET OUR CALLER
	DCA	BIHEXBINARY		/MAKE IT THEIRS
	JMS I	(GETCHR)		/GET A CHARACTER
	SKP				/DON'T EXECUTE HEADER!

BIHEXBI,.-.				/CONVERT BIHEXADECIMAL TO BINARY
	TAD	(-"A!200)		/COMPARE TO ALPHABETIC LIMIT
	SMA				/SKIP IF LESS
	TAD	("9+1-"A)		/ELSE ADD ON ALPHABETIC OFFSET
	TAD	(-"0+"A)		/MAKE IT BINARY, NOT ASCII
	DCA	GWTMP2			/SAVE IT
	TAD	GWTMP2			/GET IT BACK
	JMP I	BIHEXBINARY		/RETURN

	PAGE
/	GET  WORD[0]  ROUTINE.	  AC  MUST  ALREADY  CONTAIN THE FIRST  BI-HEXADECIMAL
/	CHARACTER.

GWORD0,	.-.				/GET 12-BIT WORD[0]
	JMS I	(BIHEXBINARY)		/CONVERT PASSED VALUE TO BINARY
	CLL RTR;RTR;RTR			/BITS[7-11] => AC[0-4]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RTL				/BITS[7-11] => AC[5-9]
	TAD	GWTMP1			/ADD ON BITS[0-4]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	RTR;RAR				/BITS[7-8] => AC[10-11]
	AND	[3]			/ISOLATE BITS[10-11]
	TAD	GWTMP1			/ADD ON BITS[0-9]
	CLL				/CLEAR LINK
	JMP I	GWORD0			/RETURN

/	GET  WORD[1] ROUTINE.  GWORD0 MUST HAVE BEEN CALLED LAST, SO  GWTMP2  CONTAINS
/	THE PREVIOUS CHARACTER.

GWORD1,	.-.				/GET 12-BIT WORD[1]
	TAD	GWTMP2			/GET PREVIOUS CHARACTER
	AND	[7]			/ISOLATE BITS[9-11]
	CLL RTR;RTR			/BITS[9-11] => AC[0-2]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RTL;RTL			/BITS[7-11] => AC[3-7]
	TAD	GWTMP1			/ADD ON BITS[0-2]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RAR				/BITS[7-10] => AC[8-11]
	TAD	GWTMP1			/ADD ON BITS[0-7]
	CLL				/CLEAR LINK
	JMP I	GWORD1			/RETURN
/	GET  WORD[2]  ROUTINE.	GWORD1 MUST HAVE BEEN CALLED LAST, SO GWTMP2  CONTAINS
/	THE PREVIOUS CHARACTER.

GWORD2,	.-.				/GET 12-BIT WORD[2]
	TAD	GWTMP2			/GET PREVIOUS CHARACTER
	RAR;CLA RAR			/BIT[11] => AC[0]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RTL;RTL;RTL			/BITS[7-11] => AC[1-5]
	TAD	GWTMP1			/ADD ON BIT[0]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RAL				/BITS[7-11] => AC[6-10]
	TAD	GWTMP1			/ADD ON BITS[0-5]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	AND	(20)			/ISOLATE BIT[7]
	CLL RTR;RTR			/BIT[7] => AC[11]
	TAD	GWTMP1			/ADD ON BITS[0-10]
	CLL				/CLEAR LINK
	JMP I	GWORD2			/RETURN

/	GET  WORD[3]  ROUTINE.   GWORD2 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS
/	THE PREVIOUS CHARACTER.

GWORD3,	.-.				/GET 12-BIT WORD[3]
	TAD	GWTMP2			/GET PREVIOUS CHARACTER
	CLL RTR;RTR;RAR			/BITS[8-11] => AC[0-3]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RTL;RAL			/BITS[7-11] => AC[4-8]
	TAD	GWTMP1			/ADD ON BITS[0-3]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	RTR				/BITS[7-9] => AC[9-11]
	AND	[7]			/ISOLATE BITS[9-11]
	TAD	GWTMP1			/ADD ON BITS[0-8]
	CLL				/CLEAR LINK
	JMP I	GWORD3			/RETURN
/	GET WORD[4]  ROUTINE.	 GWORD3 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS
/	THE PREVIOUS CHARACTER.

GWORD4,	.-.				/GET 12-BIT WORD[4]
	TAD	GWTMP2			/GET PREVIOUS CHARACTER
	AND	[3]			/ISOLATE BITS[10-11]
	CLL RTR;RAR			/BITS[10-11] => AC[0-1]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	CLL RTL;RTL;RAL			/BITS[7-11] => AC[2-6]
	TAD	GWTMP1			/ADD ON BITS[0-1]
	DCA	GWTMP1			/SAVE FOR NOW
	JMS I	(GBIHEXBINARY)		/GET NEXT CHARACTER IN BINARY
	TAD	GWTMP1			/ADD ON BITS[0-6] TO BITS[7-11]
	CLL				/CLEAR LINK
	JMP I	GWORD4			/RETURN

DOCHECK,.-.				/CHECKSUM ROUTINE
	DCA	CSUMTMP			/SAVE PASSED VALUE
	TAD	(CHKSUM-1)		/SETUP THE
	DCA	XR1			/INPUT POINTER
	TAD	(CHKSUM-1)		/SETUP THE
	DCA	XR2			/OUTPUT POINTER
	TAD	[-5]			/SETUP THE
	DCA	CCNT			/SUM COUNT
	TAD	CSUMTMP			/GET THE VALUE
	CLL RAR				/ADJUST FOR OPENING ITERATION
CSUMLUP,RAL				/GET CARRY
	TAD I	XR1			/ADD ON A WORD
	DCA I	XR2			/STORE BACK
	ISZ	CCNT			/DONE ALL YET?
	JMP	CSUMLUP			/NO, KEEP GOING
	TAD	CSUMTMP			/GET LATEST VALUE
	JMP I	DOCHECK			/RETURN

	PAGE
GETCHR,	.-.				/GET A VALID CHARACTER ROUTINE
GETMORE,TAD	INITFLAG		/GET INITIALIZE FLAG
	JMS I	[GETBYTE]		/GET A CHARACTER
	JMP I	(DECERR)		/I/O ERROR
	JMP I	(DECERR)		/<EOF>
	DCA	PUTEMP			/SAVE THE CHARACTER
	DCA	INITFLAG		/CLEAR INITIALIZE FLAG
	TAD	DSTATE			/GET DATA STATE
	SPA				/SKIP IF NOT ONE OF THE DATA-ORIENTED STATES
	TAD	(4004)			/ADD ON DATA-ORIENTED STATES OFFSET
	TAD	(JMP I	P)		/SETUP JUMP INSTRUCTION
	DCA	.+1			/STORE IN-LINE
	.-.				/AND EXECUTE IT

/	LOOKING FOR OPENING CHARACTER.

SCANIT,	TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-"<!200)		/COMPARE TO OPENING DATA CHARACTER
	SNA				/SKIP IF NO MATCH
	JMP	FNDATA			/JUMP IF IT MATCHES
	TAD	(-"(+"<)		/COMPARE TO OPENING COMMAND CHARACTER
	SNA CLA				/SKIP IF NO MATCH
	ISZ	DSTATE			/INDICATE LOOKING FOR END OF COMMAND
	JMP	GETMORE			/KEEP GOING

/	FOUND OPENING COMMAND CHARACTER.

FNDCOMM,TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-")!200)		/COMPARE TO CLOSING COMMAND CHARACTER
	SNA CLA				/SKIP IF NO MATCH
	ISZ	DSTATE			/INDICATE LOOKING FOR <CR>
	JMP	GETMORE			/KEEP GOING

/	FOUND CLOSING COMMAND CHARACTER.

FNDCEND,TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-"M!300)		/COMPARE TO <CR>
	SNA CLA				/SKIP IF NO MATCH
	ISZ	DSTATE			/INDICATE LOOKING FOR <LF>
	JMP	GETMORE			/KEEP GOING

/	FOUND <CR> AFTER COMMAND.

FNDCR,	TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-"J!300)		/COMPARE TO <LF>
	SNA CLA				/SKIP IF NO MATCH
	DCA	DSTATE			/RESET TO SCANNING STATE
	JMP	GETMORE			/KEEP GOING
/	FOUND OPENING DATA CHARACTER.

FNDATA,	TAD	(-WIDTH)		/SETUP THE
	DCA	DATCNT			/DATA COUNTER
	NL4000				/SETUP THE
	DCA	DSTATE			/NEW STATE
	JMP	GETMORE			/KEEP GOING

/	PROCESSING ONE OF 69 DATA CHARACTERS.

STORDAT,TAD	PUTEMP			/GET THE CHARACTER
	TAD	[-140]			/SUBTRACT UPPER-CASE LIMIT
	SPA				/SKIP IF LOWER-CASE
	TAD	[40]			/RESTORE UPPER-CASE
	TAD	(100)			/RESTORE THE CHARACTER
	DCA	PUTEMP			/SAVE IT BACK
	TAD	PUTEMP			/GET IT AGAIN
	TAD	(-"Z!200-1)		/SUBTRACT UPPER LIMIT
	CLL				/CLEAR LINK FOR TEST
	TAD	("Z-"A+1)		/ADD ON RANGE
	SZL CLA				/SKIP IF NOT ALPHABETIC
	JMP	ALPHAOK			/JUMP IF ALPHABETIC
	TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-"9!200-1)		/ADD ON UPPER LIMIT
	CLL				/CLEAR LINK FOR TEST
	TAD	("9-"0+1)		/ADD ON RANGE
	SNL CLA				/SKIP IF OK
	JMP	GETMORE			/IGNORE IF NOT
ALPHAOK,TAD	PUTEMP			/GET THE CHARACTER
	ISZ	DATCNT			/DONE 69 CHARACTERS?
	SKP				/SKIP IF NOT
	ISZ	DSTATE			/ADVANCE TO NEXT STATE
	JMP I	GETCHR			/RETURN

/	PROCESSED 69 DATA CHARACTERS; NOW LOOKING FOR ENDING DATA CHARACTER.

ENDATA,	TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-">!200)		/COMPARE TO ENDING DATA VALUE
	SNA CLA				/SKIP IF NO MATCH
	ISZ	DSTATE			/ELSE ADVANCE TO NEXT STATE
	JMP	GETMORE			/KEEP GOING

/	FOUND ENDING DATA CHARACTER; NOW LOOKING FOR <CR>.

ENDCR,	TAD	PUTEMP			/GET THE CHARACTER
	TAD	(-"M!300)		/COMPARE TO <CR>
	SNA CLA				/SKIP IF NO MATCH
	ISZ	DSTATE			/ELSE ADVANCE TO NEXT STATE
	JMP	GETMORE			/KEEP GOING
/	FOUND ENDING DATA CHARACTER AND <CR>; NOW LOOKING FOR <LF>.

/ENDLF,	TAD	PUTEMP			/GET THE CHARACTER
/	TAD	(-"J!300)		/COMPARE TO <LF>
/	SNA CLA				/SKIP IF NO MATCH
/	DCA	DSTATE			/RESET TO SCANNING STATE
/	JMP	GETMORE			/KEEP GOING

CLRCHKS,.-.				/CLEAR CALCULATED CHECKSUM ROUTINE
	DCA	CHKSUM+0		/CLEAR LOW-ORDER
	DCA	CHKSUM+1		/CLEAR NEXT
	DCA	CHKSUM+2		/CLEAR NEXT
	DCA	CHKSUM+3		/CLEAR NEXT
	DCA	CHKSUM+4		/CLEAR HIGH-ORDER
	JMP I	CLRCHKSUM		/RETURN

	PAGE
GEOFILE,.-.				/GET OUTPUT FILE ROUTINE
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	SZA CLA				/SKIP IF NOT ESTABLISHED YET
	JMP	GOTOD			/JUMP IF DETERMINED ALREADY
	TAD	("D^100+"S-300)		/GET BEGINNING OF "DSK"
	DCA	DEVNAME			/STORE IN-LINE
	TAD	("K^100)		/GET REST OF "DSK"
	DCA	DEVNAME+1		/STORE IN-LINE
	DCA	RETVAL			/CLEAR HANDLER ENTRY WORD
	CDF	PRGFLD			/INDICATE OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	INQUIRE				/INQUIRE ABOUT HANDLER
DEVNAME,ZBLOCK	2			/WILL BE DEVICE DSK
RETVAL,	.-.				/BECOMES HANDLER ENTRY POINT WORD
	HLT				/DSK: NOT IN SYSTEM IS IMPOSSIBLE!
	TAD	DEVNAME+1		/GET DEVICE NUMBER FOR DSK:
	AND	[17]			/JUST DEVICE BITS
	DCA	ODNUMBER		/STORE OUTPUT DEVICE
GOTOD,	CDF	TBLFLD			/BACK TO TABLE FIELD
	TAD I	(OUTFILE+1)		/GET OUTPUT FILE FIRST NAME WORD
	SNA				/SKIP IF PRESENT
	JMP	GFLNAME			/JUMP IF NOT
	DCA	FNAME			/MOVE TO OUR AREA
	TAD I	(OUTFILE+2)		/GET SECOND NAME WORD
	DCA	FNAME+1			/MOVE IT
	TAD I	(OUTFILE+3)		/GET THIRD NAME WORD
	DCA	FNAME+2			/MOVE IT
	TAD I	(OUTFILE+4)		/GET EXTENSION WORD
	DCA	FNAME+3			/MOVE IT
GEOFXIT,CDF	PRGFLD			/BACK TO OUR FIELD
	JMP I	GEOFILE			/RETURN

/	WE  MUST  TAKE  THE  FILENAME  FROM  THE IMBEDDED (FILE ) COMMAND.   THE  ONLY
/	EXCEPTION IS IF WE ARE DOING AN IMAGE TRANSFER.

GFLNAME,TAD I	(SWAL)			/GET /A-/L SWITCHES
	AND	(10)			/JUST /I BIT
	SZA CLA				/SKIP IF NOT SET
	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	SNA				/SKIP IF SET TO SOMETHING
	JMP	DOFLNAME		/JUMP IF PARAMETERS NOT SET
	CMA				/INVERT IT
	DCA	DANGCNT			/STORE AS DANGER COUNT
	ISZ	IMSW			/SET IMAGE-MODE SWITCH
	TAD I	[SWY9]			/GET /Y-/9 SWITCHES
	AND	(600)			/JUST /1, /2 SWITCHES
	SNA				/SKIP IF EITHER SET
	JMP	GEOFXIT			/JUMP IF NEITHER SET
	AND	[400]			/JUST /1 SWITCH
	SNA CLA				/SKIP IF /1 SET
	JMP	IM2			/JUMP IF /2 SET
	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
	JMP	IMCOMMON		/CONTINUE THERE
IM2,	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
	CIA				/SUBTRACT PART 1 VALUE
	TAD I	[EQUWRD]		/FROM EQUALS PARAMETER
IMCOMMO,CMA				/INVERT IT
	DCA	DANGCNT			/STORE AS DANGER COUNT
	JMP	GEOFXIT			/EXIT THERE

DOFLNAM,CDF	PRGFLD			/BACK TO OUR FIELD
	NL7777				/SETUP THE
	DCA	INITFLAG		/INPUT FILE INITIALIZATION
	JMS I	(SCNFILE)		/SCAN OFF "(FILE"

/	HAVING FOUND THE (FILE ) COMMAND, WE MUST FIND THE FILENAME.

/	ZERO OUT THE FILENAME AREA.

	TAD	(-10)			/SETUP THE
	DCA	CHRCNT			/CLEAR COUNTER
	TAD	(ONAME-1)		/SETUP THE
	DCA	XR1			/POINTER
	JMS I	(CLRNAME)		/CLEAR THE NAME BUFFER

/	SETUP FOR SCANNING THE NAME PORTION.

	TAD	(-6)			/SETUP THE
	DCA	CHRCNT			/SCAN COUNT
	TAD	(ONAME-1)		/SETUP THE
	DCA	XR1			/POINTER
FNCAGN,	JMS I	(GETAN)			/GET A CHARACTER
	JMP	GOTSEPARATOR		/GOT "."; GOTO NEXT FIELD
	DCA I	XR1			/STASH THE CHARACTER
	ISZ	CHRCNT			/DONE ALL YET?
	JMP	FNCAGN			/NO, KEEP GOING

/	THROW AWAY EXTRA NAME CHARACTERS.

TOSSNAM,JMS I	(GETAN)			/GET A CHARACTER
	JMP	GOTSEPARATOR		/GOT "."; GOTO NEXT FIELD
	JMP	TOSSNAME		/KEEP GOING

/	COMES HERE AFTER "." FOUND.

GOTSEPA,JMS I	(CLRNAME)		/CLEAR OUT THE REMAINING NAME FIELD
	NL7776				/SETUP THE
	DCA	CHRCNT			/SCAN COUNT
EXCAGN,	JMS I	(GETAN)			/GET A CHARACTER
	JMP I	[CHARERROR]		/GOT "."; COMPLAIN
	DCA I	XR1			/STASH THE CHARACTER
	ISZ	CHRCNT			/DONE ENOUGH YET?
	JMP	EXCAGN			/NO, KEEP GOING
/	TOSS ANY EXTRA EXTENSION CHARACTERS.

TOSSEXT,JMS I	(GETAN)			/GET A CHARACTER
	JMP I	[CHARERROR]		/GOT "."; COMPLAIN
	JMP	TOSSEXTENSION		/KEEP GOING

/	COMES HERE WHEN TRAILING ")" IS FOUND.

GOTRPAR,JMS I	(CLRNAME)		/CLEAR ANY REMAINING EXTENSION CHARACTERS
	TAD I	(ONAME)			/GET THE FIRST CHARACTER
	SNA CLA				/SKIP IF SOMETHING THERE
	JMP I	[CHARERROR]		/COMPLAIN IF NONE THERE
	TAD	(ONAME-1)		/SETUP POINTER
	DCA	XR1			/TO NAME CHARACTERS
	TAD	(FNAME-1)		/SETUP POINTER
	DCA	XR2			/TO PACKED NAME AREA
	TAD	(-4)			/SETUP THE
	DCA	CHRCNT			/MOVE COUNT
CHRLOOP,TAD I	XR1			/GET FIRST CHARACTER
	CLL RTL;RTL;RTL			/MOVE UP
	TAD I	XR1			/ADD ON SECOND CHARACTER
	DCA I	XR2			/STORE THE PAIR
	ISZ	CHRCNT			/DONE YET?
	JMP	CHRLOOP			/NO, KEEP GOING
	JMP I	GEOFILE			/YES, RETURN

	PAGE
SCNFILE,.-.				/SCAN "(FILE" ROUTINE
MATAGN,	JMS	GETNSPC			/GET A CHARACTER
	TAD	(-"(!200)		/COMPARE TO "("
	SZA CLA				/SKIP IF IT MATCHES
	JMP	MATAGN			/JUMP IF NOT
	JMS	GETNSPC			/GET NEXT CHARACTER
	TAD	(-"F!300)		/COMPARE TO "F"
	SZA CLA				/SKIP IF IT MATCHES
	JMP	MATAGN			/JUMP IF NOT
	JMS	GETNSPC			/GET NEXT CHARACTER
	TAD	(-"I!300)		/COMPARE TO "I"
	SZA CLA				/SKIP IF IT MATCHES
	JMP	MATAGN			/JUMP IF NOT
	JMS	GETNSPC			/GET NEXT CHARACTER
	TAD	(-"L!300)		/COMPARE TO "L"
	SZA CLA				/SKIP IF IT MATCHES
	JMP	MATAGN			/JUMP IF NOT
	JMS	GETNSPC			/GET NEXT CHARACTER
	TAD	(-"E!300)		/COMPARE TO "E"
	SZA CLA				/SKIP IF IT MATCHES
	JMP	MATAGN			/JUMP IF NOT
	JMP I	SCNFILE			/RETURN

CLRNAME,.-.				/NAME FIELD CLEARING ROUTINE
	TAD	CHRCNT			/GET CHARACTER COUNTER
	SNA CLA				/SKIP IF ANY TO CLEAR
	JMP I	CLRNAME			/ELSE JUST RETURN
	DCA I	XR1			/CLEAR A NAME WORD
	ISZ	CHRCNT			/COUNT IT
	JMP	.-2			/KEEP GOING
	JMP I	CLRNAME			/RETURN

GETNSPC,.-.				/GET NON-<SPACE> CHARACTER
GETNAGN,JMS	GETCHAR			/GET A CHARACTER
	TAD	(-" !200)		/COMPARE TO <SPACE>
	SNA CLA				/SKIP IF OTHER
	JMP	GETNAGN			/JUMP IF IT MATCHES
	TAD	PUTEMP			/GET THE CHARACTER BACK
	JMP I	GETNSPC			/RETURN

GETCHAR,.-.				/GET A CHARACTER ROUTINE
	CLA				/CLEAN UP
	TAD	INITFLAG		/GET INITIALIZE FLAG
	JMS I	[GETBYTE]		/GET A CHARACTER
	JMP I	(NIOERROR)		/COMPLAIN IF AN ERROR
	JMP I	[CHARERROR]		/COMPLAIN IF <EOF> REACHED
	TAD	[-140]			/COMPARE TO LOWER-CASE LIMIT
	SPA				/SKIP IF LOWER-CASE
	TAD	[40]			/RESTORE ORIGINAL IF UPPER-CASE
	AND	(77)			/JUST SIX-BIT
	DCA	PUTEMP			/SAVE IN CASE WE NEED IT
	DCA	INITFLAG		/CLEAR INITIALIZE FLAG
	TAD	PUTEMP			/GET IT BACK
	JMP I	GETCHAR			/RETURN
GETAN,	.-.				/GET ALPHANUMERIC ROUTINE
	JMS	GETNSPC			/GET A NON-<SPACE> CHARACTER
	TAD	(-".!200)		/COMPARE TO "."
	SNA				/SKIP IF OTHER
	JMP I	GETAN			/TAKE FIRST RETURN IF IT MATCHES
	TAD	(-")+".)		/COMPARE TO ")"
	SNA				/SKIP IF OTHER
	JMP I	(GOTRPAREN)		/TAKE DEDICATED RETURN IF IT MATCHES
	TAD	(-":+"))		/SUBTRACT UPPER LIMIT
	CLL				/CLEAR LINK FOR TEST
	TAD	(":-"0)			/ADD ON RANGE
	SZL CLA				/SKIP IF NOT NUMERIC
	JMP	GETANOK			/JUMP IF NUMERIC
	TAD	PUTEMP			/GET THE CHARACTER BACK
	TAD	(-"[!300)		/SUBTRACT UPPER LIMIT
	CLL				/CLEAR LINK FOR TEST
	TAD	("[-"A)			/ADD ON RANGE
	SNL CLA				/SKIP IF ALPHABETIC
	JMP I	[CHARERROR]		/ELSE COMPLAIN
GETANOK,TAD	PUTEMP			/GET GOOD ALPHANUMERIC CHARACTER
	ISZ	GETAN			/BUMP TO SKIP RETURN
	JMP I	GETAN			/RETURN

ONAME,	ZBLOCK	10			/OUTPUT NAME FIELD

FENTER, .-.                     	/FILE ENTER ROUTINE
	TAD	(FNAME)			/POINT TO
	DCA	ENTAR1			/STORED FILENAME
	DCA	ENTAR2			/CLEAR SECOND ARGUMENT
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	ENTER				/ENTER TENTATIVE FILENAME
ENTAR1,	.-.				/WILL POINT TO FILENAME
ENTAR2,	.-.				/WILL BE ZERO
	JMP I	(ENTERR)		/ENTER ERROR
	TAD	ENTAR2			/GET RETURNED EMPTY LENGTH
	IAC				/ADD 2-1 FOR OS/278 CRAZINESS
	DCA	DANGCNT			/STORE AS DANGER COUNT
	TAD	ENTAR1			/GET RETURNED FIRST RECORD
	DCA	OUTRECORD		/SETUP OUTPUT RECORD
        JMP I   FENTER          	/RETURN
	PAGE

	$				/THAT'S ALL FOLK!
Added src/kermit-12/k12enb.pal.








































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
/	OS/8 BOO ENCODING PROGRAM

/	LAST EDIT:	01-OCT-1991	15:00:00	CJL

/	MAY BE ASSEMBLED WITH '/F' SWITCH SET.

/	PROGRAM TO ENCODE ANY  TYPE  OF  OS/8  FILE  INTO  "PRINTABLE"  ASCII (".BOO")
/	FORMAT.  THIS IS A  COMMON  DISTRIBUTION FORMAT FOR MANY COLUMBIA KERMIT FILES
/	AND IS AN ALTERNATIVE TO ENCODE FORMAT FOR PDP-8 AND DECMATE USERS.

/	DISTRIBUTED BY CUCCA AS "K12ENB.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE.

/	WRITTEN BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK 11379-2107
/	(718) 894-6499

/	USAGE:

/	.RUN DEV ENBOO		INVOKE PROGRAM
/	*OUTPUT<INPUT		PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <CR>)
/	*OUTPUT<INPUT$		PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <ESC>)
/	.			PROGRAM EXITS NORMALLY

/	INPUT FILE ASSUMES .SV EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION.

/	PROGRAM EXIT  IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE
/	KEYBOARD DURING THE  COMMAND,  OR  ENDING THE COMMAND INPUT LINE WITH AN <ESC>
/	CHARACTER.

/	THIS PROGRAM SUPPORTS THE .BOO FORMAT  FOR  FILE  ENCODING WHICH IS POPULAR IN
/	OTHER  SYSTEMS.  THIS VERSION IMPLEMENTS THE  FILE  LENGTH  PROTECTION  SCHEME
/	DEVELOPED BY CHARLES LASNER TO ENSURE PRECISE FILE LENGTH.

/	MANY .BOO PROGRAMS HAVE PROBLEMS MAINTAINING PRECISE FILE  LENGTH.  THE ACTUAL
/	LENGTH  MAY  BE IMPRECISELY STATED BY ONE OR TWO  BYTES  DUE  TO  AN  INHERENT
/	WEAKNESS  IN  THE  ORIGINAL .BOO ENCODING FORMAT DESIGN.  THIS  IMPLEMENTATION
/	APPENDS CORRECTION BYTES AS NECESSARY TO THE BASIC .BOO FILE TO  ENSURE PROPER
/	DECODING BY PROGRAMS COMPATIBLE WITH THIS EXTENSION.  

/	FILES CREATED BY THIS PROGRAM MAY BE  USED  WITH  EARLIER  .BOO DECODERS;  THE
/	RESULTANT FILES MAY INACCURATELY RECREATE THE ORIGINAL FILES BY AS MUCH AS TWO
/	EXTRANEOUS  TRAILING  BYTES.   THERE WILL BE NO PROBLEMS  (BEYOND  THE  LENGTH
/	ANOMALY)  AS LONG AS THE DECODERS IMPLEMENT ZERO-LENGTH COMPRESSION FIELDS  AS
/	NO  OPERATION.  IT IS POSSIBLE THAT CERTAIN DECODERS COULD ERRONEOUSLY  APPEND
/	MASSIVE  QUANTITIES  OF  ZEROES  ONTO  THE END OF THE DECODED FILES, BUT  THIS
/	ACTION WOULD CERTAINLY BE CAUSED BY DEFECTIVE PROGRAM CODE WITHIN THE DECODER.
/	(ALTHOUGH NOT  LIKELY  SEEN  BEFORE  ENCOUNTERING FILES WITH LENGTH CORRECTION
/	BYTES, THIS WOULD  BE  A  LATENT  BUG  IN  THESE  DECODING  PROGRAMS.  UPDATED
/	VERSIONS SHOULD BE SOUGHT IF THIS PROBLEM SURFACES.)
/	ERROR MESSAGES.

/	ERROR MESSAGES ARE ONE OF TWO VARIETIES:   COMMAND  DECODER  MESSAGES AND USER
/	(PROGRAM-SIGNALLED) MESSAGES.

/	COMMAND  DECODER  MESSAGES  ARE  NON-FATAL  AND  MERELY  REQUIRE RETYPING  THE
/	COMMAND.  ATTEMPTING TO USE MORE THAN ONE OUTPUT FILE  WILL  YIELD THE COMMAND
/	DECODER  MESSAGE  "TOO MANY FILES" AND CAUSE A REPEAT OF THE  COMMAND  DECODER
/	PROMPT REQUIRING  USER  INPUT.  THE USER IS DIRECTED TO OTHER DOCUMENTATION OF
/	THE "SPECIAL" MODE  OF  THE  COMMAND DECODER, AS THAT IS THE ONLY MODE USED BY
/	THIS UTILITY PROGRAM.

/	ANY USER MESSAGE PRINTED IS A  FATAL  ERROR MESSAGE CAUSED BY A PROBLEM BEYOND
/	THE SCOPE OF THE COMMAND DECODER.   ALL  USER  MESSAGES  ARE THE STANDARD OS/8
/	"USER" ERROR MESSAGES OF THE FORM:  "USER  ERROR  X  AT AAAAA", WHERE X IS THE
/	ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE  THE  ERROR  WAS DETECTED.
/	THE FOLLOWING USER ERRORS ARE DEFINED:

/	ERROR NUMBER		PROBABLE CAUSE

/	0			NO OUTPUT FILE.

/	1			INPUT FILE ERROR  (CAN'T  FIND INPUT FILE) OR NO INPUT
/				FILE SPECIFIED OR TOO MANY INPUT FILES SPECIFIED.
/	2			ILLEGAL OUTPUT FILE NAME (WILD CARDS NOT ALLOWED).

/	3			NO OUTPUT FILE NAME (DEVICE ONLY IS NOT ALLOWED).

/	4			ERROR WHILE FETCHING FILE HANDLER.

/	5			ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.

/	6			OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.

/	7			ERROR WHILE CLOSING THE OUTPUT FILE.

/	8			I/O ERROR WHILE ENCODING FILE DATA.

/	9			OUTPUT ERROR WHILE ENCODING FILE DATA.

/	ASSEMBLY INSTRUCTIONS.

/	IT IS  ASSUMED  THE  SOURCE  FILE  K12ENB.PAL  HAS  BEEN  MOVED AND RENAMED TO
/	DSK:ENBOO.PA.

/	.PAL ENBOO<ENBOO/E/F	ASSEMBLE SOURCE PROGRAM
/	.LOAD ENBOO		LOAD THE BINARY FILE
/	.SAVE DEV ENBOO=2001	SAVE THE CORE-IMAGE FILE
/	DEFINITIONS.

	CLOSE=	4		/CLOSE OUTPUT FILE
	DECODE=	5		/CALL COMMAND DECODER
	ENTER=	3		/ENTER TENTATIVE FILE
	FETCH=	1		/FETCH HANDLER
	IHNDBUF=7200		/INPUT HANDLER BUFFER
	INBUFFE=6200		/INPUT BUFFER
	INFILE=	7605		/INPUT FILE INFORMATION HERE
	LOOKUP=	2		/LOOKUP INPUT FILE
	NL0001=	CLA IAC		/LOAD AC WITH 0001
	NL0002=	CLA CLL CML RTL	/LOAD AC WITH 0002
	NL7776=	CLA CLL CMA RAL	/LOAD AC WITH 7776
	NL7777=	CLA CMA		/LOAD AC WITH 7777
	OHNDBUF=6600		/OUTPUT HANDLER BUFFER
	OUTBUFF=5600		/OUTPUT BUFFER
	OUTFILE=7600		/OUTPUT FILE INFORMATION HERE
	PRGFLD=	00		/PROGRAM FIELD
	RESET=	13		/RESET SYSTEM TABLES
	SBOOT=	7600		/MONITOR EXIT
	TBLFLD=	10		/COMMAND DECODER TABLE FIELD
	TERMWRD=7642		/TERMINATOR WORD
	USERROR=7		/USER SIGNALLED ERROR
	USR=	0200		/USR ENTRY POINT
	USRENT=	7700		/USR ENTRY POINT WHEN NON-RESIDENT
	USRFLD=	10		/USR FIELD
	USRIN=	10		/LOCK USR IN CORE
	WIDTH=	114		/LINES MUST BE 76 WIDE OR LESS
	WRITE=	4000		/I/O WRITE BIT
	*0			/START AT THE BEGINNING

	*20			/GET PAST AUTO-INDEX AREA

BUFPTR,	.-.			/OUTPUT BUFFER POINTER
CHAR,	.-.			/LATEST INPUT BYTE
CHARPTR,.-.			/OUTPUT BYTE POINTER
CHARS,	ZBLOCK	3		/OUTPUT BYTES HERE
CMPCNT,	.-.			/MATCH COUNT FOR COMPRESSION
COLUMN,	.-.			/LATEST COLUMN
DANGCNT,.-.			/DANGER COUNT
IDNUMBE,.-.			/INPUT DEVICE NUMBER
IFNAME,	ZBLOCK	4		/INPUT FILENAME
INLEN,	.-.			/INPUT FILE LENGTH
INPTR,	.-.			/INPUT BUFFER POINTER
INPUT,	.-.			/INPUT HANDLER POINTER
INRECOR,.-.			/INPUT RECORD
FNAME,	ZBLOCK	4		/OUTPUT FILENAME
LATEST,	.-.			/LATEST OUTPUT CHARACTER
ODNUMBE,.-.			/OUTPUT DEVICE NUMBER
OUTPUT,	.-.			/OUTPUT HANDLER POINTER
OUTRECO,.-.			/OUTPUT RECORD
PIFTEMP,.-.			/PRINT INPUT FILENAME TEMPORARY
TEMPTR,	.-.			/TEMPORARY POINTER
THIRD,	.-.			/THIRD INPUT BYTE UNPACKING TEMPORARY
	PAGE			/START AT THE USUAL PLACE

BEGIN,	NOP			/IN CASE WE'RE CHAINED TO
	CLA			/CLEAN UP
START,	CIF	USRFLD		/GOTO USR FIELD
	JMS I	(USRENT)	/CALL USR ROUTINE
	USRIN			/GET IT LOCKED IN
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	DECODE			/WANT COMMAND DECODER
	"*^100			/USING SPECIAL MODE
	CDF	TBLFLD		/GOTO TABLE FIELD
	TAD I	(TERMWRD)	/GET TERMINATOR WORD
	SPA CLA			/SKIP IF <CR> TERMINATED THE LINE
	DCA	EXITZAP		/ELSE CAUSE EXIT LATER
	TAD I	(OUTFILE)	/GET OUTPUT FILE DEVICE WORD
	SNA			/SKIP IF FIRST OUTPUT FILE PRESENT
	JMP	TSTMORE		/JUMP IF NOT THERE
	AND	[17]		/JUST DEVICE BITS
	DCA	ODNUMBER	/SAVE OUTPUT DEVICE NUMBER
	TAD I	(INFILE)	/GET FIRST INPUT FILE DEVICE WORD
	SNA			/SKIP IF PRESENT
	JMP	INERR		/JUMP IF NOT
	AND	[17]		/JUST DEVICE BITS
	DCA	IDNUMBER	/SAVE INPUT DEVICE NUMBER
	TAD I	(INFILE+5)	/GET SECOND INPUT FILE DEVICE WORD
	SZA CLA			/SKIP IF ONLY ONE INPUT FILE
	JMP	INERR		/ELSE COMPLAIN
	JMS I	(MIFNAME)	/MOVE INPUT FILENAME WITH ADJUSTED EXTENSION
	TAD I	[OUTFILE+1]	/GET FIRST OUTPUT FILENAME WORD
	SNA CLA			/SKIP IF NAME PRESENT
	JMP	NONAME		/JUMP IF DEVICE ONLY
	JMS I	(MOFNAME)	/MOVE OUTPUT FILENAME
	CDF	PRGFLD		/BACK TO OUR FIELD
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	RESET			/RESET SYSTEM TABLES
	TAD	(OHNDBUFFER+1)	/GET BUFFER POINTER+TWO-PAGE BIT
	DCA	OHPTR		/STORE IN-LINE
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	FETCH			/FETCH HANDLER
OHPTR,	.-.			/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR		/FETCH ERROR
	TAD	OHPTR		/GET RETURNED ADDRESS
	DCA	OUTPUT		/STORE AS OUTPUT HANDLER ADDRESS
	TAD	(IHNDBUFFER+1)	/GET INPUT BUFFER POINTER+TWO-PAGE BIT
	DCA	IHPTR		/STORE IN-LINE
	TAD	IDNUMBER	/GET INPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	FETCH			/FETCH HANDLER
IHPTR,	.-.			/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR		/FETCH ERROR
	TAD	IHPTR		/GET RETURNED ADDRESS
	DCA	INPUT		/STORE AS INPUT HANDLER ADDRESS
	JMS I	(GEIFILE)	/GO LOOKUP INPUT FILE
	TAD	(FNAME)		/POINT TO
	DCA	ENTAR1		/STORED FILENAME
	DCA	ENTAR2		/CLEAR SECOND ARGUMENT
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	ENTER			/ENTER TENTATIVE FILENAME
ENTAR1,	.-.			/WILL POINT TO FILENAME
ENTAR2,	.-.			/WILL BE ZERO
	JMP	ENTERR		/ENTER ERROR
	TAD	ENTAR1		/GET RETURNED FIRST RECORD
	DCA	OUTRECORD	/STORE IT
	TAD	ENTAR2		/GET RETURNED EMPTY LENGTH
	IAC			/ADD 2-1 FOR OS/278 CRAZINESS
	DCA	DANGCNT		/STORE AS DANGER COUNT
	JMS I	(ENCODIT)	/GO DO THE ACTUAL ENCODING
	JMP	PROCERR		/ERROR WHILE ENCODING
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	CLOSE			/CLOSE OUTPUT FILE
	FNAME			/POINTER TO FILENAME
OUTCNT,	.-.			/WILL BE ACTUAL COUNT
	JMP	CLSERR		/CLOSE ERROR
EXITZAP,JMP	START		/**** <ESC> TERMINATION **** 0000
	JMP I	(SBOOT)		/EXIT TO MONITOR
/	OUTPUT FILE ERROR WHILE PROCESSING.

ENCERRO,TAD	[3]		/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ERROR WHILE PROCESSING INPUT FILE.

PROCERR,NL0002			/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ERROR WHILE CLOSING THE OUTPUT FILE.

CLSERR,	NL0001			/SET INCREMENT
	SKP			/DON'T CLEAR IT

/	OUTPUT FILE TOO LARGE ERROR.

SIZERR,	CLA			/CLEAN UP
	TAD	[3]		/SET INCREMENT
	SKP			/DON'T USE NEXT

/	ENTER ERROR.

ENTERR,	NL0002			/SET INCREMENT
	SKP			/DON'T USE NEXT

/	HANDLER FETCH ERROR.

FERROR,	NL0001			/SET INCREMENT

/	NO OUTPUT FILENAME ERROR.

NONAME,	IAC			/SET INCREMENT

/	ILLEGAL OUTPUT FILE NAME ERROR.

BADNAME,IAC			/SET INCREMENT

/	INPUT FILESPEC ERROR.

INERR,	IAC			/SET INCREMENT

/	OUTPUT FILESPEC ERROR.

OUTERR,	DCA	ERRNUMBER	/STORE ERROR NUMBER
	CDF	PRGFLD		/ENSURE OUR FIELD
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	USERROR			/USER ERROR
ERRNUMB,.-.			/WILL BE PASSED ERROR NUMBER
/	COMES HERE TO TEST FOR NULL LINE.

TSTMORE,TAD I	(INFILE)	/GET FIRST INPUT FILE DEVICE WORD
	SZA CLA			/SKIP NO INPUT OR OUTPUT GIVEN
	JMP	OUTERR		/ELSE COMPLAIN
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMP	EXITZAP		/MIGHT BE LAST TIME, SO GO THERE FIRST

	PAGE
ENCODIT,.-.			/ENCODING ROUTINE
	NL7777			/SETUP INITIALIZE VALUE
	JMS I	[DOBYTE]	/INITIALIZE OUTPUT ROUTINE
	JMS I	(PIFNAME)	/OUTPUT THE INPUT FILENAME
	JMS I	(PCRLF)		/OUTPUT <CR>/<LF> AND CLEAR COLUMN COUNTER
	DCA	CMPCNT		/CLEAR COMPRESSION
	TAD	[CHARS]		/SETUP THE
	DCA	CHARPTR		/OUTPUT POINTER
	NL7777			/MAKE IT INITIALIZE
LOOP,	JMS I	(GETBYTE)	/GET LATEST BYTE
	JMP	ENDCHECK	/AREN'T ANY MORE, FINISH THE FILE

/	TEST IF ALREADY WITHIN A DEVELOPING COMPRESSION FIELD.

	TAD	CMPCNT		/GET COMPRESSION COUNT
	SNA CLA			/SKIP IF COMPRESSION IN PROGRESS
	JMP	NOCOMP		/JUMP IF NOT

/	CHECK IF LATEST INPUT BYTE IS ZERO.

	TAD	CHAR		/GET LATEST
	SZA CLA			/SKIP IF SO
	JMP	ENDCOMPRESS	/JUMP IF NOT
SETCOMP,ISZ	CMPCNT		/BUMP COMPRESSION COUNT
	TAD	CMPCNT		/GET LATEST COUNT
	TAD	(-116)		/COMPARE TO MAXIMUM ALLOWED
	SNA CLA			/SKIP IF NOT
	JMS I	(COMPRESSOUT) 	/OUTPUT MAXIMUM COMPRESSION AND CANCEL COMPRESSION
	JMP	LOOP		/GO GET ANOTHER ONE

/	IF LATEST IS NON-ZERO, THEN COMPLETE EXISTING COMPRESSION FIELD.

ENDCOMP,NL7777			/-1
	TAD	CMPCNT		/COMPARE TO COMPRESSION COUNT
	SZA CLA			/SKIP IF TRIVIAL CASE
	JMP	OUTCOMPRESS	/JUMP IF NOT

/	CANCEL TRIVIAL CASE OF ONE BYTE COMPRESSION.

	DCA	CMPCNT		/CLEAR COMPRESSION MODE
	DCA	CHARS		/FIRST BYTE WAS ZERO
	TAD	(CHARS+1)	/SETUP OUTPUT POINTER TO
	DCA	CHARPTR		/STORE INTO SECOND BYTE
	JMP	BYTEINSERT	/CONTINUE THERE
/	OUTPUT LATEST COMPRESSION AND PROCESS NEW NON-ZERO BYTE.

OUTCOMP,JMS I	(COMPRESSOUT)	/OUTPUT COMPRESSION FIELD AND CANCEL COMPRESSION

/	COMES HERE IF NOT WITHIN A COMPRESSION REGION.

NOCOMP,	TAD	CHARPTR		/GET POINTER
	TAD	(-CHARS)	/CHECK IF AT BEGINNING
	SZA CLA			/SKIP IF BUFFER EMPTY
	JMP	BYTEINSERT	/JUMP IF NOT

/	IF AT BEGINNING OF THREE BYTES, TEST IF LATEST STARTS A COMPRESSION FIELD.

	TAD	CHAR		/GET LATEST BYTE
	SNA CLA			/SKIP IF NOT ZERO
	JMP	SETCOMPRESSION	/JUMP IF SO
BYTEINS,TAD	CHAR		/GET LATEST BYTE
	DCA I	CHARPTR		/STORE IT
	ISZ	CHARPTR		/BUMP TO NEXT
	TAD	CHARPTR		/GET THE UPDATED POINTER
	TAD	(-CHARS-2-1)	/COMPARE TO UPPER LIMIT
	SNA CLA			/SKIP IF LESS THAN THREE PRESENT
	JMS I	(OUT3)		/ELSE OUTPUT THE THREE BYTES AND RESET THE BUFFER
	JMP	LOOP		/GO GET ANOTHER ONE

/	COMES HERE AT END OF INPUT.

ENDCHEC,NL7776			/-2
	TAD	CMPCNT		/COMPARE TO COMPRESSION COUNT
	SMA			/SKIP IF AT TRIVIAL CASE OR NO COMPRESSION CURRENTLY
	JMP	ENDFCOMPRESS	/FINISH WITH A COMPRESSION FIELD
	IAC			/CHECK FURTHER
	SZA CLA			/SKIP IF TRIVIAL COMPRESSION AT END
	JMP	NORMEND		/JUMP IF NOT WITHIN COMPRESSION

/	THE TRIVIAL CASE  CONVERTS  TO  AN INCOMPLETE OUTPUT, COMPLETE WITH CORRECTION
/	BYTES TO INDICATE THE SHORT FIELD.

	DCA	CHARS		/MOVE ZERO BYTE TO FIRST POSITION
NORM1,	DCA	CHARS+1		/CLEAR SECOND POSITION
	DCA	CHARS+2		/CLEAR THIRD POSITION
	JMS I	(OUT3)		/OUTPUT THE THREE BYTES
	DCA	CMPCNT		/CLEAR COMPRESSION COUNT
	JMS I	(COMPRESSOUT)	/OUTPUT NULL COMPRESSION FIELD TO CANCEL THIRD BYTE
				/NEXT WILL CANCEL SECOND BYTE

/	COMES HERE IF FILE ENDS ON A COMPRESSION FIELD.

ENDFCOM,JMS I	(COMPRESSOUT)	/OUTPUT COMPRESSION FIELD AND CANCEL COMPRESSION
	JMP	CLOSFILE	/FINISH IT THERE
/	COMES HERE IF FILE ENDS IN SOME FORM OF DATA FIELD.

NORMEND,TAD	CHARPTR		/GET CHARACTER POINTER
	TAD	(-CHARS-2)	/COMPARE TO TWO PRESENT VALUE
	SNA			/SKIP IF NOT THE CASE
	JMP	NORM2		/JUMP IF SO
	IAC			/BUMP TO ONE PRESENT VALUE
	SNA CLA			/SKIP IF NOT THE CASE
	JMP	NORM1		/JUMP IF SO
CLOSFIL,TAD	COLUMN		/GET CURRENT COLUMN COUNTER
	SZA CLA			/SKIP IF AT BEGINNING ALREADY
	JMS I	(PCRLF)		/ELSE OUTPUT <CR>/<LF> NOW
	TAD	("Z&37)		/GET <^Z>
CLOSLUP,JMS I	[DOBYTE]	/OUTPUT A BYTE (^Z OR NULL)
	TAD	BUFPTR		/GET THE OUTPUT BUFFER POINTER
	TAD	(-OUTBUFFER)	/COMPARE TO RESET VALUE
	SZA CLA			/SKIP IF IT MATCHES
	JMP	CLOSLUP		/ELSE KEEP GOING
	ISZ	ENCODIT		/NO ERRORS
	JMP I	ENCODIT		/RETURN

/	COMES HERE IF FILE ENDS WITH ONLY TWO DATA CHARACTERS.

NORM2,	DCA	CHARS+2		/CLEAR THIRD CHARACTER
	JMS I	(OUT3)		/OUTPUT THE THREE BYTES
	JMP	ENDFCOMPRESS	/FINISH IT THERE

	PAGE
/	GET AN INPUT BYTE ROUTINE.

GETBYTE,.-.				/GET A BYTE ROUTINE
	SNA CLA				/INITIALIZING?
	JMP I	PUTC			/NO, GO GET NEXT BYTE
	TAD	INRECORD		/GET INPUT FILE STARTING RECORD
	DCA	GETRECORD		/STORE IN-LINE
GETNEWR,JMS I	INPUT			/CALL INPUT HANDLER
	2^100				/READ TWO PAGES
PINBUFF,INBUFFER			/INTO INPUT BUFFER
GETRECO,.-.				/WILL BE LATEST INPUT FILE RECORD
	JMP I	(PROCERR)		/INPUT READ ERROR, GO COMPLAIN
	TAD	PINBUFFER/(INBUFFER)	/SETUP THE
	DCA	INPTR			/BUFFER POINTER
GETLOOP,DCA	THIRD			/CLEAR THIRD BYTE NOW
	JMS	PUTONE			/OBTAIN AND SEND BACK FIRST BYTE
	JMS	PUTONE			/OBTAIN AND SEND BACK SECOND BYTE
	TAD	THIRD			/GET THIRD BYTE
	JMS	PUTC			/SEND IT BACK
	TAD	INPTR			/GET THE POINTER
	TAD	(-2^200-INBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	GETLOOP			/KEEP GOING
	ISZ	GETRECORD		/BUMP TO NEXT RECORD
	NOP				/JUST IN CASE
	ISZ	INLEN			/DONE ALL INPUT RECORDS?
	JMP	GETNEWRECORD		/NO, KEEP GOING

/	AT END-OF-FILE, SO JUST TAKE IMMEDIATE RETURN.

	JMP I	GETBYTE			/RETURN TO CALLER

PUTONE,	.-.				/SEND BACK A BYTE ROUTINE
	TAD I	INPTR			/GET LATEST WORD
	AND	[7400]			/JUST THIRD-BYTE NYBBLE
	CLL RAL				/MOVE UP
	TAD	THIRD			/GET OLD NYBBLE (IF ANY)
	RTL;RTL				/MOVE UP NYBBLE BITS
	DCA	THIRD			/SAVE FOR NEXT TIME
	TAD I	INPTR			/GET LATEST WORD AGAIN
	JMS	PUTC			/SEND BACK CURRENT BYTE
	ISZ	INPTR			/BUMP TO NEXT WORD
	JMP I	PUTONE			/RETURN

PUTC,	.-.				/SEND BACK LATEST BYTE ROUTINE
	AND	(377)			/KEEP ONLY GOOD BITS
	DCA	CHAR			/SAVE AS LATEST BYTE
	ISZ	GETBYTE			/BUMP PAST <EOF> RETURN
	JMP I	GETBYTE			/RETURN TO MAIN CALLER
/	COMPRESSION FIELD OUTPUT ROUTINE.

COMPRES,.-.			/COMPRESSION OUTPUT ROUTINE
	CLA			/CLEAN UP
	TAD	COLUMN		/GET CURRENT COLUMN COUNTER
	TAD	(-WIDTH+2)	/COMPARE TO UPPER LIMIT
	SMA SZA CLA		/SKIP IF NOT ABOVE LIMIT
	JMS	PCRLF		/ELSE DO <CR>/<LF> FIRST
	TAD	(176)		/GET TILDE VALUE
	JMS I	[DOBYTE]	/OUTPUT IT
	TAD	CMPCNT		/GET COMPRESSION COUNT
	JMS	PDIGIT		/OUTPUT IT
	DCA	CMPCNT		/CLEAR COMPRESSION
	JMP I	COMPRESSOUT	/RETURN

/	DATA FIELD OUTPUT ROUTINE.

OUT3,	.-.			/OUTPUT THREE BYTES ROUTINE
	TAD	COLUMN		/GET CURRENT COLUMN COUNTER
	TAD	(-WIDTH+4)	/COMPARE TO UPPER LIMIT
	SMA SZA CLA		/SKIP IF NOT ABOVE LIMIT
	JMS	PCRLF		/ELSE DO <CR>/<LF> FIRST
	TAD	CHARS		/GET FIRST BYTE
	RTR			/WANT HIGH SIX BITS FIRST
	JMS	PDIGIT		/OUTPUT THEM
	TAD	CHARS		/GET IT AGAIN
	AND	[3]		/JUST TWO LOWEST BITS
	CLL RTR;RTR;RAR		/MOVE UP
	TAD	CHARS+1		/GET SECOND BYTE
	RTR;RTR			/MOVE DOWN
	JMS	PDIGIT		/OUTPUT THEM
	TAD	CHARS+2		/GET THIRD BYTE
	AND	(300)		/JUST TWO HIGHEST BITS NEEDED
	CLL RTL;RTL;RAL		/MOVE INTO POSITION
	TAD	CHARS+1		/GET SECOND BYTE
	RTL			/MOVE UP
	AND	[77]		/JUST DESIRED BITS
	JMS	PDIGIT		/OUTPUT THEM
	TAD	CHARS+2		/GET THIRD BYTE
	AND	[77]		/JUST SIX BITS
	JMS	PDIGIT		/OUTPUT THEM
	TAD	[CHARS]		/RESET THE
	DCA	CHARPTR		/OUTPUT POINTER
	JMP I	OUT3		/RETURN

PDIGIT,	.-.			/PRINT AS A DIGIT INTO FILE ROUTINE
	AND	[177]		/REMOVE JUNK BITS
	TAD	("0&177)	/TURN PASSED VALUE INTO A DIGIT
	JMS I	[DOBYTE]	/OUTPUT IT
	JMP I	PDIGIT		/RETURN
PCRLF,	.-.			/PRINT <CR>/<LF> INTO FILE ROUTINE
	TAD	("M&37)		/GET A <CR>
	JMS I	[DOBYTE]	/OUTPUT IT
	TAD	("J&37)		/GET A <LF>
	JMS I	[DOBYTE]	/OUTPUT IT
	DCA	COLUMN		/CLEAR COLUMN COUNTER
	JMP I	PCRLF		/RETURN

	PAGE
PUTBYTE,.-.			/OUTPUT A BYTE ROUTINE
	SPA			/ARE WE INITIALIZING?
	JMP	PUTINITIALIZE	/YES
	AND	[177]		/JUST IN CASE
	DCA	LATEST		/SAVE LATEST CHARACTER
	TAD	LATEST		/GET LATEST CHARACTER
	JMP I	PUTNEXT		/GO WHERE YOU SHOULD GO

PUTNEXT,.-.			/EXIT ROUTINE
	ISZ	PUTBYTE		/BUMP TO GOOD RETURN
PUTERRO,CLA CLL			/CLEAN UP
	JMP I	PUTBYTE		/RETURN TO MAIN CALLER

PUTINIT,CLA			/CLEAN UP
	TAD	OUTRECORD	/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD	/STORE IN-LINE
	DCA I	(OUTCNT)	/CLEAR ACTUAL FILE LENGTH
PUTNEWR,TAD	(OUTBUFFER)	/SETUP THE
	DCA	BUFPTR		/BUFFER POINTER
PUTLOOP,JMS	PUTNEXT		/GET A CHARACTER
	DCA I	BUFPTR		/STORE IT
	TAD	BUFPTR		/GET POINTER VALUE
	DCA	TEMPTR		/SAVE FOR LATER
	ISZ	BUFPTR		/BUMP TO NEXT
	JMS	PUTNEXT		/GET A CHARACTER
	DCA I	BUFPTR		/STORE IT
	JMS	PUTNEXT		/GET A CHARACTER
	RTL;RTL			/MOVE UP
	AND	[7400]		/ISOLATE HIGH NYBBLE
	TAD I	TEMPTR		/ADD ON FIRST BYTE
	DCA I	TEMPTR		/STORE COMPOSITE
	TAD	LATEST		/GET LATEST CHARACTER
	RTR;RTR;RAR		/MOVE UP AND
	AND	[7400]		/ISOLATE LOW NYBBLE
	TAD I	BUFPTR		/ADD ON SECOND BYTE
	DCA I	BUFPTR		/STORE COMPOSITE
	ISZ	BUFPTR		/BUMP TO NEXT
	TAD	BUFPTR		/GET LATEST POINTER VALUE
	TAD	(-2^200-OUTBUFF)/COMPARE TO LIMIT
	SZA CLA			/SKIP IF AT END
	JMP	PUTLOOP		/KEEP GOING
	ISZ	DANGCNT		/TOO MANY RECORDS?
	SKP			/SKIP IF NOT
	JMP I	(SIZERR)	/JUMP IF SO
	JMS I	OUTPUT		/CALL I/O HANDLER
	2^100+WRITE		/WRITE SOME PAGES FROM OUTPUT BUFFER
	OUTBUFFER		/BUFFER ADDRESS
PUTRECO,.-.			/WILL BE LATEST RECORD NUMBER
	JMP	PUTERROR	/OUTPUT ERROR!
	ISZ I	(OUTCNT)	/BUMP ACTUAL LENGTH
	ISZ	PUTRECORD	/BUMP TO NEXT RECORD
	JMP	PUTNEWRECORD	/KEEP GOING
/	INPUT FILENAME MOVE ROUTINE; USES DEFAULT EXTENSION IF NONE PROVIDED BY USER.

MIFNAME,.-.			/MOVE INPUT FILENAME ROUTINE
	TAD I	(INFILE+1)	/GET FIRST INPUT FILENAME WORD
	DCA	IFNAME		/STASH IT
	TAD I	(INFILE+2)	/GET SECOND INPUT FILENAME WORD
	DCA	IFNAME+1	/STASH IT
	TAD I	(INFILE+3)	/GET THIRD INPUT FILENAME WORD
	DCA	IFNAME+2	/STASH IT
	TAD I	[INFILE+4]	/GET FOURTH INPUT FILENAME WORD
	SNA			/SKIP IF SOMETHING THERE
	TAD	("S^100+"V-300)	/ELSE USE DEFAULT EXTENSION VALUE
	DCA	IFNAME+3	/STASH IT EITHER WAY
	JMP I	MIFNAME		/RETURN

DOBYTE,	.-.			/OUTPUT A BYTE ROUTINE
	JMS	PUTBYTE		/OUTPUT PASSED VALUE
	JMP I	(ENCERROR)	/COULDN'T DO IT
	ISZ	COLUMN		/BUMP COLUMN COUNTER
	JMP I	DOBYTE		/RETURN

	PAGE
/	INPUT FILE ROUTINE.

GEIFILE,.-.			/GET INPUT FILE ROUTINE
	JMS	LUKUP		/TRY TO LOOKUP THE FILE
	SKP			/SKIP IF IT WORKED
	JMP	TRYNULL		/TRY NULL EXTENSION VERSION
NULLOK,	TAD	LARG1		/GET FIRST INPUT RECORD
	DCA	INRECORD	/STASH IT
	TAD	LARG2		/GET NEGATED LENGTH
	DCA	INLEN		/STASH IT
	JMP I	GEIFILE		/RETURN

/	COMES HERE IF LOOKUP FAILED.

TRYNULL,CDF	TBLFLD		/GOTO TABLE FIELD
	TAD I	[INFILE+4]	/GET ORIGINAL FILENAME'S EXTENSION
	CDF	PRGFLD		/BACK TO OUR FIELD
	SZA CLA			/SKIP IF IT WAS NULL ORIGINALLY
	JMP I	(INERR)		/ELSE COMPLAIN OF EXPLICIT LOOKUP FAILURE
	DCA	IFNAME+3	/NOW TRY NULL VERSION INSTEAD OF DEFAULT VERSION
	JMS	LUKUP		/TRY TO LOOK IT UP AGAIN
	JMP	NULLOK		/THAT WORKED!
	JMP I	(INERR)		/COMPLAIN OF LOOKUP FAILURE

LUKUP,	.-.			/LOW-LEVEL LOOKUP ROUTINE
	TAD	(IFNAME)	/GET OUR FILENAME POINTER
	DCA	LARG1		/STORE IN-LINE
	DCA	LARG2		/CLEAR SECOND ARGUMENT
	TAD	IDNUMBER	/GET INPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USR]		/CALL USR ROUTINE
	LOOKUP			/WANT LOOKUP FUNCTION
LARG1,	.-.			/WILL BE POINTER TO OUR FILENAME
LARG2,	.-.			/WILL RETURN FILE LENGTH (HOPEFULLY)
	ISZ	LUKUP		/LOOKUP FAILED, SO BUMP RETURN ADDRESS
	JMP I	LUKUP		/RETURN EITHER WAY
/	INPUT FILENAME PRINT ROUTINE.

PIFNAME,.-.			/PRINT INPUT FILENAME ROUTINE
	TAD	IFNAME		/GET FIRST PAIR
	JMS	PIF2		/PRINT IT
	TAD	IFNAME+1	/GET SECOND PAIR
	JMS	PIF2		/PRINT IT
	TAD	IFNAME+2	/GET THIRD PAIR
	JMS	PIF2		/PRINT IT
	TAD	(".&177)	/GET SEPARATOR
	JMS	PIFOUT		/PRINT IT
	TAD	IFNAME+3	/GET FOURTH PAIR
	JMS	PIF2		/PRINT IT
	JMP I	PIFNAME		/RETURN

PIF2,	.-.			/PRINT A PAIR ROUTINE
	DCA	PIFTEMP		/SAVE PASSED PAIR
	TAD	PIFTEMP		/GET IT BACK
	RTR;RTR;RTR		/MOVE DOWN
	JMS	PIFOUT		/PRINT HIGH-ORDER FIRST
	TAD	PIFTEMP		/GET IT AGAIN
	JMS	PIFOUT		/PRINT LOW-ORDER
	JMP I	PIF2		/RETURN

PIFOUT,	.-.			/FILENAME CHARACTER OUTPUT ROUTINE
	AND	[77]		/JUST SIXBIT
	SNA			/SKIP IF SOMETHING THERE
	JMP I	PIFOUT		/ELSE IGNORE IT
	TAD	[40]		/INVERT IT
	AND	[77]		/REMOVE EXCESS
	TAD	[40]		/INVERT IT AGAIN
	JMS I	[DOBYTE]	/OUTPUT IT
	JMP I	PIFOUT		/RETURN

MOFNAME,.-.			/MOVE OUTPUT FILENAME ROUTINE
	TAD I	[OUTFILE+1]	/GET FIRST OUTPUT FILENAME WORD
	JMS	CHKNAME		/CHECK IF LEGAL
	DCA	FNAME		/STASH IT
	TAD I	(OUTFILE+2)	/GET SECOND OUTPUT FILENAME WORD
	JMS	CHKNAME		/CHECK IF LEGAL
	DCA	FNAME+1		/STASH IT
	TAD I	(OUTFILE+3)	/GET THIRD OUTPUT FILENAME WORD
	JMS	CHKNAME		/CHECK IF LEGAL
	DCA	FNAME+2		/STASH IT
	TAD I	(OUTFILE+4)	/GET FOURTH OUTPUT FILENAME WORD
	JMS	CHKNAME		/CHECK IF LEGAL
	DCA	FNAME+3		/STASH IT
	JMP I	MOFNAME		/RETURN
/	OUTPUT NAME CHECK ROUTINE.

CHKNAME,.-.			/OUTPUT NAME CHECK ROUTINE
	DCA	LUKUP		/SAVE PASSED VALUE
	TAD	LUKUP		/GET IT BACK
	RTR;RTR;RTR		/MOVE DOWN
	JMS	CHKIT		/CHECK HIGH-ORDER AND GET IT BACK
	JMS	CHKIT		/CHECK LOW-ORDER AND GET IT BACK
	JMP I	CHKNAME		/RETURN

CHKIT,	.-.			/ONE CHARACTER CHECK ROUTINE
	AND	[77]		/JUST SIX BITS
	TAD	(-"?!200)	/COMPARE TO "?"
	SZA			/SKIP IF ALREADY BAD
	TAD	(-"*+"?)	/ELSE COMPARE TO "*"
	SNA CLA			/SKIP IF NEITHER BAD CASE
	JMP I	(BADNAME)	/COMPLAIN OF WILD CHARACTER
	TAD	LUKUP		/GET THE PAIR BACK FOR NEXT TIME
	JMP I	CHKIT		/RETURN

	PAGE
	$			/THAT'S ALL FOLK!
Added src/kermit-12/k12enc.doc.


































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: ENCODE/DECODE format description

    The  latest KERMIT-12 binary files are encoded in  a  specialized  format.
This document will describe the internal encoding and related subjects.

OS/8 file considerations.

    All OS/8 files are contiguous multiples of PDP-8 double-page sized logical
records.  These are sometimes known as blocks, but are  more  accurately known
as records.  (The term block is associated with various hardware descriptions,
and means different things to different people, such as DECtape blocks or RK05
blocks,  where  the first means a physical block which just happens to be  1/2
the  size  of  the OS/8 logical record, and the second means a physical sector
which  is  the same size as the OS/8 logical record, but only if the drive  is
attached to an RK8E.  We will therefore avoid this term!)

    Since  PDP-8  pages are 128 12-bit words each, the OS/8 record consists of
256  12-bit  words,  which  can  also  be viewed as 384 8-bit bytes.  For  the
benefit of various existing utilities, there is a standard method of unpacking
the 8-bit bytes yielding  a  stream  of  coherent  8-bit  bytes.    The  PDP-8
convention is to number bits from left to right starting with bit[0].  This is
INCOMPATIBLE with the notation commonly used  in other architectures, which is
usually given as what power of 2  the  bit  represents.  The PDP-8 notation is
used to denote bit position in a manner  consistent  with  significence of the
bit,  and  arbitrarily uses origin 0, which is the  usually  assembly-language
orientation.  Using this notation, the first byte (byte #0)  to be unpacked is
taken from word[0] bits[4-11].  The second byte (byte #1) to  be  unpacked  is
taken  from  word[1] bits[4-11].  The third byte (byte #2) to be  unpacked  is
taken from word[0]  bits[0-3]  concatenated  with word[1] bits[0-3].  All bits
are taken left to  right  as stated.  This method is usually referred to as "3
for 2," and repeated accordingly  will  yield  the correct stream of bytes for
ASCII OS/8 files.  OS/8 absolute  binary  files are images of 8-bit paper-tape
frames packed in the same format.   Although  the  high-order bit "matters" in
absolute binary files, the high-bit is untrustworthy in  ASCII  files.    Both
types of files end with a ^Z character which  will have the high-order bit set
in  the case of the absolute binary files.  The  reason  it  succeeds  in  the
binary  case  is  that  the  paper-tape format treats the high-bit present  as
leader or trailer, not loadable data, etc., so the loader ignores all  leading
high-bit set bytes, and finishes on the first trailing high-bit set byte.  The
binary file  contains  several leader bytes of 0200 octal, and several trailer
bytes of 0200  followed by 232, the code for ^Z.  There is no "fool-proof" way
to derive these formats,  rather these are usually given by the extensions .BN
for binary, and various extensions  (.LS,  .PA, .MA, .DI, .BI, .TX, .DC, etc.)
for ASCII files.  If the  file  is  "known"  to  be  either  ASCII or absolute
binary,  then  these conventions can be used  to  ignore  extraneous  trailing
bytes.  If the file type is unknown,  then  it  must  be treated as an "image"
file, where all data must be preserved.  The  most typical image file is a .SV
file,  which is an image of files organized as pages  and  double-pages,  with
some  trivial absolute loading instructions in a "header" block.  Each  record
of  the  file  is  always  "paired"  off,  i.e.,  the  record  has an  implied
double-page boundary of main memory it is meant to load into.  If  the loading
instructions indicate  a single-page load, then the first page must be loaded;
the second half  of the record is IGNORED.  Notice it is impossible to specify
singular loading of the "odd" page.  OS/8 also supports various other formats,
so it is difficult to  obtain  useful  knowledge  of the "inner" format of the
file.

Encoding considerations.

      If the 8-bit bytes of  an  OS/8 file are unpacked and packed faithfully,
the resultant file will be an accurate copy of the original data.  This is the
basis for an alternate encoding format, perhaps  more  universal in scope, but
it is NOT the method used currently.   The  method chosen here is to treat the
entire file as a contiguous stream of 5-bit bytes spanning words as necessary.
This means that bits are taken from left to right,  five  at  a time, and each
encoded  into  a  "printable"  character  for inclusion into the encoded file.
This  means  that  data  will  form  60-bit  groups  of  12  5-bit  characters
representing five  12-bit words.  The 5-bit encoding is accomplished using the
ASCII  coding  for    an   extension  to  hexadecimal,  which  can  be  called
bi-hexadecimal, or base 32  notation.    In this base, the values are 0-9, and
A-V (just the "natural" extension  of hexadecimal's 0-9, A-F).  The alphabetic
characters  can  be  upper  or lower  case  as  necessary.    This  method  is
theoretically 25% more efficient than hexadecimal ASCII  since  each character
holds 5-bit data rather than 4-bit data.

    Since the 5-bit data has no "good" boundary for  most  computers,  we will
use the "best" case for PDP-8 image data, the 60-bit group as described above.
Once  started,  a  60-bit  group must be completed, thus there are  boundaries
throughout the file every 12 characters.

    At any boundary, the file may have compressed data.  Compressed fields are
indicated  by X (or x) followed by a four character  field.    The  format  is
basically a truncation of the "normal" 60-bit group, but only contains 20 bits
of data.  The first 12 bits are the value of the  data  to  be  repeated.  The
last eight bits are the repeat count.  Values of the repeat count  range  from
1-256, where 256 is implied if the value is zero.  Practical values range from
3-255, since  one  or two values would take less file space uncompressed.  Due
to the boundary  requirements,  compression fields are independent of the data
preceeding them.  The  repeat count limitation to a maximum of 256 was felt to
be a reasonable compromise between compressed field length and adequate repeat
count.  Making the repeat count  even  only  double  the current maximum would
require six character compression fields instead of  five  (including  the X).
As  an implementation restriction, the encoding program only  reads  one  OS/8
record at a time, thus the case of 256  maximum  repetitions  occurs only at a
double-page boundary.  The added complexity required to achieve infrequent and
minimal  improvement  was  considered  to  be  unimportant, but could be added
later.  Thus adjacent repeated values split across boundaries, or split across
logical records will not contribute to a (single) compression field.

    Note that  compression is achieved by locating repeating strings of 12-bit
values;  if  the  file  were  viewed as repeating strings of 8-bit bytes, then
compression would be less  likely, except for cases like 0000 octal, which due
to "symmetry" are compressible via  either  method.    Many  PDP-8 image files
contain "filler" words, i.e., otherwise unloaded  areas which are "pre-filled"
with constant data such as 0000 octal,  or  7402 octal, which is the PDP-8 HLT
instruction.  Image files filled with "large" regions  of repeating strings of
7402 will not compress using 8-bit byte orientation.

Reliability considerations.

    Even with the safeguards of a "robust" character  set,  file validity must
be tested to maintain data integrity.  Towards this  end,  the encoding format
has several additional features.  Unlike other "popular" formats, there  is an
explicit  "command" structure to the encoded file format.  All lines  of  data
start  with  <  and  end  with  >.   This prevents the characters  from  being
"massaged" into unwanted  alternates.   Various systems are known to "destroy"
files which have lines  starting  with  "from",  etc.    By enclosing the data
lines, we prevent these problems.   Additionally, a class of explicit commands
exist which start with ( and  end  with  ).    Instead of implied positioning,
there is a command called (FILE filename.ext),  where  the filename.ext is the
"suggested" name for the decoded file.  The encoding program uses the original
un-encoded file's file name in this field.  After  the  data, there is another
command (END filename.ext) which can be used to validate the  data,  since the
same  file  name  should be in both commands (as implemented in  the  encoding
program).   Several (REMARK {anything}) commands are inserted into the file at
various  points   to  assist  in  reconstructing  the  original  file,  or  in
documenting the fact  that  the  file is an encoded "version" of another file.
Several "frill" REMARK commands  are implemented to indicate the original file
date, and the date of  encoded file creation.  Today's date is always used for
the encoded file creation date.  The original file date may be omitted, if the
system  doesn't  support  Additional  Information  Words  (AIWs),  since  this
optional  feature must be present in order for  the  files  to  have  creation
dates.  The overall encoding format theoretically can be a concatenated series
of  encoded files, each with its own (FILE ) and  (END  )  commands,  but  the
decoding program  only  supports  single-file  decoding  as  an implementation
restriction.

    The file must always end with a good boundary  condition.    If  the  last
field is an X (compression) field, then this is already  satisfied.    If  the
last field is ordinary data, then 1-4 12-bit words of 0000 octal will be added
at the end of the last field if necessary to ensure a  good boundary.  The end
of  file  is  signified  by a single Z (or z) character.  At  this  point,  an
extraneous  record may be in progress.  If it consists of four or less  12-bit
words of 0000 octal, it is discarded.  Any other situation regarding a partial
record indicates defective data in the received encoded file.

    After the single Z (z) character, there are 12 more characters:  an entire
60-bit  group.    This  is  the  file  checksum.    It  is  accomplished  with
pentuple-precision arithmetic.   It  is the sum of all 12-bit data values with
carry into a total of five 12-bit words.  Repeat compression data values are
also added, but only once for each compression field.  The compression field's
repeat count is also added, but  it  is  first  multiplied by 16.  (The repeat
count was expressed originally as *16 so  it  would have its eight significant
bits left-justified).  The entire 60-bit quantity is  expressed  in  two's
complement notation by negating it and encoding the group as  any other 60-bit
group.    Since  most  files  are  relatively  short, the high-order bits  are
generally zero, so most two's complement checksums start with 7777,7777 octal.
The five 12-bit  quantities  holding the checksum are encoded low-order first,
so the right-most characters  in  the  checksum  field tend to be V (v).  This
order  is used merely to  accomodate  multi-precision  arithmetic,  as  anyone
attempting to observe "backwards bytes" on other machines is familiar with.

Future considerations.

    This format is by no means  "perfect,"  but  it  is more robust than most,
with a minimum of efficiency loss, given  the  tradeoffs  involved.   The data
bracketing characters can be changed if required.   The characters W (w) and Y
(y)  are  available  for  this purpose.  Files could  incorporate  a  word  or
character  count,  or  other  validation  technique,  etc.    Each line  could
incorporate  a  local  count.   These and other considerations could create  a
"compromise"  format  that  could  be  more  generic and "pallatable" to other
systems.   The checksum could be limited to 48 bits, which is more amenable to
8 and 16  bit  architectures.    Perhaps  opening  parameters could govern the
contents of the rest  of  the  file, such as whether the checksum was present,
etc.
[end of file]
Added src/kermit-12/k12enc.pal.


































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
/	OS/8 ENCODING PROGRAM

/	LAST EDIT:	08-JUL-1992	22:00:00	CJL

/	MUST BE ASSEMBLED WITH '/F' SWITCH SET.

/	PROGRAM TO ENCODE OS/8 FILES INTO "PRINTABLE" ASCII FORMAT ("ENCODE").

/	DISTRIBUTED BY CUCCA AS "K12ENC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE.

/	WRITTEN BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK 11379-2107
/	(718) 894-6499

/	USAGE:

/	.RUN DEV ENCODE		INVOKE PROGRAM
/	*OUTPUT<INPUT		PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <CR>)
/	*OUTPUT<DEV:=NNNN/I 	****  SPECIAL IMAGE TRANSFER MODE **** INPUT IS RECORD
/				0000-[NNNN-1] ON DEVICE DEV:.  THE =NNNN VALUE MUST BE
/				STATED PRECISELY TO  TRANSFER  THE REQUISITE AMOUNT OF
/				THE DEVICE AS REQUIRED.    THE  VALUE IS GENERALLY THE
/				TOTAL  LENGTH OF THE DEVICE,  BUT  COULD  BE  LESS  AS
/				NECESSARY;  LARGER VALUES WILL GENERALLY  FAIL.   THIS
/				MODE  SHOULD  ONLY  BE  USED  TO  EFFECT  TRANSFER  OF
/				COMPLETE  DEVICE  IMAGES  WHERE  THE  NORMAL OS/8 FILE
/				STRUCTURE IS UNSUITABLE.  IN THIS MODE, THE OS/8  FILE
/				(POSSIBLY PRESENT)  ON  THE  DEVICE  IS IGNORED.  ****
/				NOTE  ****  THIS   METHOD  VIOLATES  ALL  OS/8  DEVICE
/				STRUCTURE AND IS MEANT FOR TRANSFER OF COMPLETE DEVICE
/				IMAGES ONLY;  USE WITH CARE!
/	*OUTPUT<DEV:=NNNN/I/1	**** SPECIAL IMAGE TRANSFER  MODE **** SAME AS REGULAR
/				IMAGE MODE EXCEPT ONLY THE FIRST  HALF  OF THE DATA IS
/				USED.    THE  DECODER  MUST  BE  GIVEN THE  EQUIVALENT
/				PARAMETERS TO TRANSFER THE FIRST HALF.
/	*OUTPUT<DEV:=NNNN/I/2	**** SPECIAL IMAGE  TRANSFER MODE **** SAME AS REGULAR
/				IMAGE MODE EXCEPT ONLY THE SECOND  HALF OF THE DATA IS
/				USED.  NOTE THAT THERE MUST BE TWO  FILES CREATED, ONE
/				USING  /I/1  AND  THE  OTHER  USING /I/2 TO COMPLETELY
/				TRANSFER A DEVICE IMAGE UNLESS /I IS USED ALONE!
/	*OUTPUT<INPUT$		PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <ESC>)
/	.			PROGRAM EXITS NORMALLY

/	INPUT FILE ASSUMES .SV EXTENSION;  THERE IS NO ASSUMED OUTPUT  EXTENSION.   IF
/	IMAGE MODE IS USED, THERE IS NO INPUT FILE SPECIFICATION;  ONLY  A  DEVICE  IS
/	GIVEN ALONG WITH A LENGTH AND THE MANDATORY /I SWITCH.

/	PROGRAM EXIT  IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE
/	KEYBOARD DURING THE  COMMAND,  OR  ENDING THE COMMAND INPUT LINE WITH AN <ESC>
/	CHARACTER.
/	THIS PROGRAM SUPPORTS A SUBSET OF THE  ASCII FILE ENCODING SCHEME DEVELOPED BY
/	CHARLES LASNER AND FRANK DA CRUZ.  THE  SCHEME  USED IS FIVE-BIT ENCODING WITH
/	COMPRESSION,  (AS  OPPOSED  TO  SIX-BIT WITHOUT COMPRESSION AS USED  IN  PRIOR
/	VERSIONS).

/	RESTRICTIONS:

/	A)	NO SUPPORT FOR MULTIPLE DECODABLE FILES PER ENCODED FILE.

/	B)	CREATES ENCODED PDP-8 60-BIT CHECKSUM AT END OF FILE.

/	C)	CUSTOMIZED (REMARK) COMMANDS MUST BE SEPARATELY ADDED BY THE USER.

/	D)	THE FILENAME IN THE (FILE ) AND (END ) COMMANDS WILL BE  IDENTICAL  TO
/		THE ACTUAL INVOKED INPUT FILE.  THE USER MUST SEPARATELY MODIFY  THESE
/		COMMANDS  WHEN  EXPORTING  THE ENCODED FILE TO A SYSTEM WITH DIFFERENT
/		NAMING CONVENTIONS.

/	ERROR MESSAGES.

/	ERROR MESSAGES ARE ONE OF TWO VARIETIES:   COMMAND  DECODER  MESSAGES AND USER
/	(PROGRAM-SIGNALLED) MESSAGES.

/	COMMAND  DECODER  MESSAGES  ARE  NON-FATAL  AND  MERELY  REQUIRE RETYPING  THE
/	COMMAND.  ATTEMPTING TO USE MORE THAN ONE OUTPUT FILE  WILL  YIELD THE COMMAND
/	DECODER  MESSAGE  "TOO MANY FILES" AND CAUSE A REPEAT OF THE  COMMAND  DECODER
/	PROMPT REQUIRING  USER  INPUT.  THE USER IS DIRECTED TO OTHER DOCUMENTATION OF
/	THE "SPECIAL" MODE  OF  THE  COMMAND DECODER, AS THAT IS THE ONLY MODE USED BY
/	THIS UTILITY PROGRAM.

/	ANY USER MESSAGE PRINTED IS A  FATAL  ERROR MESSAGE CAUSED BY A PROBLEM BEYOND
/	THE SCOPE OF THE COMMAND DECODER.   ALL  USER  MESSAGES  ARE THE STANDARD OS/8
/	"USER" ERROR MESSAGES OF THE FORM:  "USER  ERROR  X  AT AAAAA", WHERE X IS THE
/	ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE  THE  ERROR  WAS DETECTED.
/	THE FOLLOWING USER ERRORS ARE DEFINED:

/	ERROR NUMBER		PROBABLE CAUSE

/	0			NO OUTPUT FILE.

/	1			INPUT FILE ERROR  (CAN'T  FIND INPUT FILE) OR NO INPUT
/				FILE SPECIFIED OR TOO MANY INPUT FILES SPECIFIED.
/	2			ILLEGAL OUTPUT FILE NAME (WILD CARDS NOT ALLOWED).

/	3			NO OUTPUT FILE NAME (DEVICE ONLY IS NOT ALLOWED).

/	4			ERROR WHILE FETCHING FILE HANDLER.

/	5			ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.

/	6			OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.

/	7			ERROR WHILE CLOSING THE OUTPUT FILE.

/	8			I/O ERROR WHILE ENCODING FILE DATA.
/	ASSEMBLY INSTRUCTIONS.

/	IT IS  ASSUMED  THE  SOURCE  FILE  K12ENC.PAL  HAS  BEEN  MOVED AND RENAMED TO
/	DSK:ENCODE.PA.

/	.PAL ENCODE<ENCODE/E/F	ASSEMBLE SOURCE PROGRAM
/	.LOAD ENCODE		LOAD THE BINARY FILE
/	.SAVE DEV ENCODE=2001	SAVE THE CORE-IMAGE FILE
/	DEFINITIONS.

	AIWCNT=	1404			/ADDITIONAL INFORMATION WORDS COUNT HERE
	AIWXR=	0017			/POINTER TO ADDITIONAL INFORMATION WORDS
	CLOSE=	4			/CLOSE OUTPUT FILE
	DATEXT=	7777			/DATE EXTENSION HERE
	DATWRD=	7666			/OS/8 DATE WORD
	DECODE=	5			/CALL COMMAND DECODER
	ENTER=	3			/ENTER TENTATIVE FILE
	EQUWRD=	7646			/EQUALS PARAMETER HERE IN TABLE FIELD
	FETCH=	1			/FETCH HANDLER
	IHNDBUF=7200			/INPUT HANDLER BUFFER
	INBUFFE=6200			/INPUT BUFFER
	INFILE=	7605			/INPUT FILE INFORMATION HERE
	LOOKUP=	2			/LOOKUP INPUT FILE
	NL0001=	CLA IAC			/LOAD AC WITH 0001
	NL0002=	CLA CLL CML RTL		/LOAD AC WITH 0002
	NL7776=	CLA CLL CMA RAL		/LOAD AC WITH 7776
	NL7777=	CLA CMA			/LOAD AC WITH 7777
	OHNDBUF=6600			/OUTPUT HANDLER BUFFER
	OUTBUFF=5600			/OUTPUT BUFFER
	OUTFILE=7600			/OUTPUT FILE INFORMATION HERE
	PRGFLD=	00			/PROGRAM FIELD
	RESET=	13			/RESET SYSTEM TABLES
	REVISIO=1			/PROGRAM REVISION
	SBOOT=	7600			/MONITOR EXIT
	SWAL=	7643			/A-/L SWITCHES HERE IN TABLE FIELD
	SWY9=	7645			/Y-/9 SWITCHES HERE IN TABLE FIELD
	TBLFLD=	10			/COMMAND DECODER TABLE FIELD
	TERMWRD=7642			/TERMINATOR WORD
	USERROR=7			/USER SIGNALLED ERROR
	USR=	0200			/USR ENTRY POINT
	USRENT=	7700			/USR ENTRY POINT WHEN NON-RESIDENT
	USRFLD=	10			/USR FIELD
	USRIN=	10			/LOCK USR IN CORE
	VERSION=2			/PROGRAM VERSION
	WIDTH=	107-2			/69 DATA CHARACTERS PER LINE (TOTAL 71)
	WRITE=	4000			/I/O WRITE BIT
	*0				/START AT THE BEGINNING

	*10				/DEFINE AUTO-INDEX AREA

XR1,	.-.				/AUTO-INDEX NUMBER 1
XR2,	.-.				/AUTO-INDEX NUMBER 2

	*20				/GET PAST AUTO-INDEX AREA

BUFPTR,	.-.				/OUTPUT BUFFER POINTER
CCNT,	.-.				/CHECKSUM COUNTER
CHKFLG,	.-.				/CHECKSUMMING ALLOWED FLAG
CHKSUM,	ZBLOCK	5			/CHECKSUM
CMPCNT,	.-.				/MATCH COUNT FOR COMPRESSION
DANGCNT,.-.				/DANGER COUNT
FDATE,	.-.				/FILE DATE
FILLVAL,.-.				/FILL VALUE FOR SPECIAL OUTPUT CHARACTERS
IDNUMBE,.-.				/INPUT DEVICE NUMBER
IFNAME,	ZBLOCK	4			/INPUT FILENAME
IMSW,	.-.				/IMAGE-MODE SWITCH
INLEN,	.-.				/INPUT FILE LENGTH
INPTR,	.-.				/INPUT BUFFER POINTER
INPUT,	.-.				/INPUT HANDLER POINTER
INRECOR,.-.				/INPUT RECORD
FNAME,	ZBLOCK	4			/OUTPUT FILENAME
LATEST,	.-.				/LATEST OUTPUT CHARACTER
OBOUND,	.-.				/OUTPUT BOUNDARY COUNTER
OCTCNT,	.-.				/OCTAL OUTPUT ROUTINE COUNTER
OCTEMP,	.-.				/OCTAL OUTPUT ROUTINE TEMPORARY
ODNUMBE,.-.				/OUTPUT DEVICE NUMBER
OUTPUT,	.-.				/OUTPUT HANDLER POINTER
OUTRECO,.-.				/OUTPUT RECORD
PRTEMP,	.-.				/DATE OUTPUT TEMPORARY
PUTEMP,	.-.				/OUTPUT TEMPORARY
PUTLATE,.-.				/LATEST 5-BIT CHARACTER
PUTPREV,.-.				/PREVIOUS OUTPUT TEMPORARY
QUO,	.-.				/DIVIDE QUOTIENT
REM,	.-.				/DIVIDE REMAINDER
SCRCASE,.-.				/CURRENT MESSAGE CASE
SCRCHAR,.-.				/LATEST MESSAGE CHARACTER
SCRPTR,	.-.				/MESSAGE POINTER
TDATE,	.-.				/TODAY'S DATE
TEMP,	.-.				/TEMPORARY
TEMPTR,	.-.				/TEMPORARY OUTPUT POINTER
WIDCNT,	.-.				/LINE WIDTH COUNTER
	PAGE				/START AT THE USUAL PLACE

BEGIN,	NOP				/IN CASE WE'RE CHAINED TO
	CLA				/CLEAN UP
START,	CIF	USRFLD			/GOTO USR FIELD
	JMS I	(USRENTRY)		/CALL USR ROUTINE
	USRIN				/GET IT LOCKED IN
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	DECODE				/WANT COMMAND DECODER
	"*^100				/USING SPECIAL MODE
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	(TERMWRD)		/GET TERMINATOR WORD
	SPA CLA				/SKIP IF <CR> TERMINATED THE LINE
	DCA	EXITZAP			/ELSE CAUSE EXIT LATER
	DCA	IMSW			/CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH
	TAD I	(OUTFILE)		/GET OUTPUT FILE DEVICE WORD
	SNA				/SKIP IF OUTPUT FILE PRESENT
	JMP	TSTMORE			/JUMP IF NOT THERE
	AND	[17]			/JUST DEVICE BITS
	DCA	ODNUMBER		/SAVE OUTPUT DEVICE NUMBER
	TAD I	(INFILE)		/GET FIRST INPUT FILE DEVICE WORD
	SNA				/SKIP IF PRESENT
	JMP	INERR			/JUMP IF NOT
	AND	[17]			/JUST DEVICE BITS
	DCA	IDNUMBER		/SAVE INPUT DEVICE NUMBER
	TAD I	(INFILE+5)		/GET SECOND INPUT FILE DEVICE WORD
	SZA CLA				/SKIP IF ONLY ONE INPUT FILE
	JMP	INERR			/ELSE COMPLAIN
	JMS I	(MIFNAME)		/MOVE INPUT FILENAME WITH ADJUSTED EXTENSION
	TAD I	[OUTFILE+1]		/GET FIRST OUTPUT FILENAME WORD
	SNA CLA				/SKIP IF NAME PRESENT
	JMP	NONAMERROR		/JUMP IF DEVICE ONLY
	JMS I	(MOFNAME)		/MOVE OUTPUT FILENAME
	CDF	PRGFLD			/BACK TO OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	RESET				/RESET SYSTEM TABLES
	TAD	(OHNDBUFFER+1)		/GET BUFFER POINTER+TWO-PAGE BIT
	DCA	OHPTR			/STORE IN-LINE
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	FETCH				/FETCH HANDLER
OHPTR,	.-.				/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR			/FETCH ERROR
	TAD	OHPTR			/GET RETURNED ADDRESS
	DCA	OUTPUT			/STORE AS OUTPUT HANDLER ADDRESS
	TAD	(IHNDBUFFER+1)		/GET INPUT BUFFER POINTER+TWO-PAGE BIT
	DCA	IHPTR			/STORE IN-LINE
	TAD	IDNUMBER		/GET INPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	FETCH				/FETCH HANDLER
IHPTR,	.-.				/WILL BE BUFFER POINTER+TWO-PAGE BIT
	JMP	FERROR			/FETCH ERROR
	TAD	IHPTR			/GET RETURNED ADDRESS
	DCA	INPUT			/STORE AS INPUT HANDLER ADDRESS
	TAD	IMSW			/GET IMAGE-MODE SWITCH
	SNA CLA				/SKIP IF IMAGE MODE SET
	JMS I	(GEIFILE)		/GO LOOKUP INPUT FILE
	TAD	(FNAME)			/POINT TO
	DCA	ENTAR1			/STORED FILENAME
	DCA	ENTAR2			/CLEAR SECOND ARGUMENT
	JMS I	(INDATE)		/GET INPUT FILE'S DATE
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	ENTER				/ENTER TENTATIVE FILENAME
ENTAR1,	.-.				/WILL POINT TO FILENAME
ENTAR2,	.-.				/WILL BE ZERO
	JMP	ENTERR			/ENTER ERROR
	TAD	ENTAR1			/GET RETURNED FIRST RECORD
	DCA	OUTRECORD		/STORE IT
	TAD	ENTAR2			/GET RETURNED EMPTY LENGTH
	IAC				/ADD 2-1 FOR OS/278 CRAZINESS
	DCA	DANGCNT			/STORE AS DANGER COUNT
	JMS I	(CLRCHKSUM)		/CLEAR THE CHECKSUM
	JMS I	(ENCODIT)		/GO DO THE ACTUAL ENCODING
	JMP	PROCERR			/ERROR WHILE ENCODING
	TAD	ODNUMBER		/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	CLOSE				/CLOSE OUTPUT FILE
	FNAME				/POINTER TO FILENAME
OUTCNT,	.-.				/WILL BE ACTUAL COUNT
	JMP	CLSERR			/CLOSE ERROR
EXITZAP,JMP	START			/**** <ESC> TERMINATION **** 0000
	JMP I	(SBOOT)			/EXIT TO MONITOR
/	ERROR WHILE PROCESSING INPUT FILE.

PROCERR,NL0002				/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ERROR WHILE CLOSING THE OUTPUT FILE.

CLSERR,	NL0001				/SET INCREMENT
	SKP				/DON'T CLEAR IT

/	OUTPUT FILE TOO LARGE ERROR.

SIZERR,	CLA				/CLEAN UP
	TAD	[3]			/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ENTER ERROR.

ENTERR,	NL0002				/SET INCREMENT
	SKP				/DON'T USE NEXT

/	HANDLER FETCH ERROR.

FERROR,	NL0001				/SET INCREMENT

/	NO OUTPUT FILENAME ERROR.

NONAMER,IAC				/SET INCREMENT

/	ILLEGAL OUTPUT FILE NAME ERROR.

BADNAME,IAC				/SET INCREMENT

/	INPUT FILESPEC ERROR.

INERR,	IAC				/SET INCREMENT

/	OUTPUT FILESPEC ERROR.

OUTERR,	DCA	ERRNUMBER		/STORE ERROR NUMBER
	CDF	PRGFLD			/ENSURE OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	USERROR				/USER ERROR
ERRNUMB,.-.				/WILL BE PASSED ERROR NUMBER

/	COMES HERE TO TEST FOR NULL LINE.

TSTMORE,TAD I	(INFILE)		/GET FIRST INPUT FILE DEVICE WORD
	SZA CLA				/SKIP NO INPUT OR OUTPUT GIVEN
	JMP	OUTERR			/ELSE COMPLAIN
	CDF	PRGFLD			/BACK TO OUR FIELD
	JMP	EXITZAP			/MIGHT BE LAST TIME, SO GO THERE FIRST
	PAGE
ENCODIT,.-.				/ENCODING ROUTINE
	TAD	INRECORD		/GET INPUT FILE STARTING RECORD
	DCA	INREC			/STORE IN-LINE
	NL7777				/SETUP INITIALIZE VALUE
	JMS I	[DOBYTE]		/INITIALIZE OUTPUT ROUTINE
	JMS I	(TDMESSAGE)		/OUTPUT TODAY'S DATE MESSAGE
	JMS I	(FDMESSAGE)		/OUTPUT FILE DATE MESSAGE
	JMS I	[SCRIBE]		/OUTPUT THE
	FILMSG				/(FILE MESSAGE
	JMS I	(PIFNAME)		/OUTPUT THE INPUT FILENAME
	JMS I	[SCRIBE]		/OUTPUT THE
	EMSG				/LINE ENDING
	TAD	[-WIDTH]		/SETUP THE
	DCA	WIDCNT			/LINE WIDTH COUNTER
	JMS I	(OUTSETUP)		/SETUP PACKING ROUTINE AND CLEAR FILL
	TAD	[-5]			/INITIALIZE
	DCA	OBOUND			/BOUNDARY COUNTER
ENCLOOP,JMS I	INPUT			/CALL INPUT HANDLER
	2^100				/READ TWO PAGES
PINBUFF,INBUFFER			/INTO INPUT BUFFER
INREC,	.-.				/WILL BE LATEST INPUT FILE RECORD
ENCERRO,JMP I	ENCODIT			/INPUT ERROR, TAKE IMMEDIATE RETURN
	ISZ	INREC			/BUMP TO NEXT RECORD
	NOP				/JUST IN CASE
	TAD	PINBUFFER/(INBUFFER)	/SETUP THE
	DCA	INPTR			/BUFFER POINTER
LOOP,	JMS I	(CHKBND)		/CHECK IF ON A GOOD BOUNDARY
	JMP	NOCOMPRESSION		/COMPRESS IS NOT ALLOWED AT THIS TIME
	TAD	INPTR			/GET CURRENT POINTER
	DCA	XR1			/STASH FOR SEARCH
	DCA	CMPCNT			/CLEAR MATCH COUNT
CMPLUP,	TAD	XR1			/GET INDEX VALUE
	TAD	(-2^200-INBUFFER+1)	/COMPARE TO LIMIT
	SNA CLA				/SKIP IF NOT AT END OF BUFFER
	JMP	CMPEND			/JUMP IF AT END OF BUFFER
	TAD I	XR1			/GET A CANDIDATE WORD
	CIA				/INVERT FOR TEST
	TAD I	INPTR			/COMPARE TO CURRENT TEST VALUE
	SZA CLA				/SKIP IF IT MATCHES
 	JMP	CMPEND			/JUMP IF THIS IS NOT A REPEAT
	ISZ	CMPCNT			/BUMP MATCH COUNT
	JMP	CMPLUP			/TRY TO FIND MORE
/	COMES HERE POSSIBLY WITH SOME COMPRESSED VALUES COUNTED.

CMPEND,	NL7776				/-2
	TAD	CMPCNT			/DID WE FIND ENOUGH MATCHES?
	SPA CLA				/SKIP IF SO
	JMP	NOCOMPRESSION		/FORGET IT
	TAD	("X-"0)			/SETUP COMPRESSION INDICATOR
	JMS I	(OUTSETUP)		/SETUP SPECIAL MODE
	JMS I	(PUT5)			/OUTPUT "X"
	JMS I	(OUTSETUP)		/SETUP NORMAL NUMERICAL MODE
	TAD I	INPTR			/GET THE VALUE
	JMS I	[PUTIT]			/OUTPUT IT
	ISZ	CMPCNT			/ACCOUNT FOR ORIGINAL
	TAD	CMPCNT			/GET COMPRESSION COUNT
	CLL RTL;RTL			/*16
	JMS I	[PUTIT]			/OUTPUT BITS[0-7] ONLY
	JMS I	(OUTSETUP)		/SETUP NORMAL NUMERICAL MODE AGAIN
	TAD	INPTR			/GET INPUT POINTER
	TAD	CMPCNT			/UPDATE PAST ALL COMPRESSED VALUES
	DCA	INPTR			/STORE BACK
	JMP	TEST			/CONTINUE THERE

/	COMES HERE IF NO COMPRESSION FOUND (OR NOT ALLOWED).

NOCOMPR,TAD I	INPTR			/GET LATEST VALUE
	JMS I	[PUTIT]			/OUTPUT IT
	ISZ	INPTR			/BUMP TO NEXT
	ISZ	OBOUND			/BUMP TO NEXT WORD
	JMP	TEST			/KEEP GOING
	TAD	[-5]			/RESET THE
	DCA	OBOUND			/BOUNDARY COUNTER
TEST,	TAD	INPTR			/GET INPUT POINTER
	TAD	(-2^200-INBUFFER)	/COMPARE TO UPPER LIMIT
	SZA CLA				/SKIP IF AT END OF BUFFER
	JMP	LOOP			/ELSE JUST KEEP GOING
	ISZ	INLEN			/DONE ALL INPUT RECORDS?
	JMP	ENCLOOP			/NO, KEEP GOING

/	WE MUST FINISH THE LAST [5 WORDS => 12 BYTES] SEQUENCE.

ENDLUP,	JMS I	(CHKBND)		/AT A GOOD BOUNDARY?
	SKP				/SKIP IF NOT
	JMP	ENDONE			/JUMP IF SO
	JMS I	[PUTIT]			/OUTPUT SOME WASTE BYTES
	ISZ	OBOUND			/AT A GOOD BOUNDARY NOW?
	JMP	ENDLUP			/NO, TRY AGAIN
ENDONE,	TAD	("Z-"0)		/GET END INDICATOR
	JMS I	(OUTSETUP)		/SETUP SPECIAL MODE
	JMS I	(PUT5)			/OUTPUT A "Z"
	JMS I	(INVCHKSUM)		/INVERT THE CHECKSUM
	JMS I	(OUTSETUP)		/SETUP NORMAL NUMERICAL MODE
	JMS I	(CHKOUT)		/OUTPUT THE CHECKSUM
	JMS I	[SCRIBE]		/OUTPUT THE
	ENDMSG				/END MESSAGE
	JMS I	(PIFNAME)		/OUTPUT THE INPUT FILENAME
	JMS I	[SCRIBE]		/OUTPUT THE
	EMSG				/LINE ENDING
	JMS I	[SCRIBE]		/OUTPUT THE
	EOFMSG				/FINAL MESSAGE
	TAD	("Z&37)			/GET <^Z>
CLOSLUP,JMS I	[DOBYTE]		/OUTPUT A BYTE (^Z OR NULL)
	TAD	BUFPTR			/GET THE OUTPUT BUFFER POINTER
	TAD	(-OUTBUFFER)		/COMPARE TO RESET VALUE
	SZA CLA				/SKIP IF IT MATCHES
	JMP	CLOSLUP			/ELSE KEEP GOING
	ISZ	ENCODIT			/NO ERRORS
	JMP I	ENCODIT			/RETURN

	PAGE
PUTIT,	.-.				/WORD OUTPUT ROUTINE
	DCA	PUTEMP			/SAVE PASSED VALUE
	JMS I	(CALCHKSUM)		/UPDATE CHECKSUM
	JMP I	PUTNXT			/GO WHERE YOU SHOULD GO

PUTNXT,	PUT0				/OUTPUT EXIT ROUTINE
	TAD	PUTEMP			/GET LATEST VALUE
	DCA	PUTPREV			/SAVE FOR NEXT TIME
	JMP I	PUTIT			/RETURN TO MAIL CALLER

PUTLUP,	JMS	PUTNXT			/GET ANOTHER WORD
PUT0,	TAD	PUTEMP			/GET WORD[0]
	RTL;RTL;RTL			/BITS[0-4] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[0] AGAIN
	RTR				/BITS[5-9] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	JMS	PUTNXT			/GET ANOTHER WORD
PUT1,	TAD	PUTPREV			/GET WORD[0]
	AND	[3]			/ISOLATE BITS[10-11]
	CLL RTL;RAL			/BITS[10-11] => AC[7-8]
	DCA	PUTPREV			/SAVE FOR NOW
	TAD	PUTEMP			/GET WORD[1]
	RTL;RTL				/BITS[0-2] => AC[9-11]
	AND	[7]			/ISOLATE DESIRED BITS
	TAD	PUTPREV			/ADD ON WORD[0] BITS IN AC[7-8]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[1]
	RTR;RTR				/BITS[3-7] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	JMS	PUTNXT			/GET ANOTHER WORD
PUT2,	TAD	PUTEMP			/GET WORD[2]
	RAL				/BIT[0] => L
	CLA				/CLEAN UP
	TAD	PUTPREV			/GET WORD[1]
	RAL				/BITS[8-11],L => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[2]
	RTR;RTR;RTR			/BITS[1-5] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[2]
	RAR				/BITS[6-10] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	JMS	PUTNXT			/GET ANOTHER WORD
PUT3,	TAD	PUTPREV			/GET WORD[2]
	RAR				/BIT[11] => L
	CLA				/CLEAN UP
	TAD	PUTEMP			/GET WORD[3]
	RTL;RTL;RAL			/L, BITS[0-3] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[3]
	RTR;RAR				/BITS[4-8] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	JMS	PUTNXT			/GET ANOTHER WORD
PUT4,	TAD	PUTPREV			/GET WORD[3]
	AND	[7]			/ISOLATE BITS[9-11]
	CLL RTL				/BITS[9-11] => AC[7-9]
	DCA	PUTPREV			/SAVE FOR NOW
	TAD	PUTEMP			/GET WORD[4]
	RTL;RAL				/BITS[0-1] => AC[10-11]
	AND	[3]			/ISOLATE BITS[10-11]
	TAD	PUTPREV			/ADD ON WORD[3] BITS IN AC[7-9]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[4]
	RTR;RTR;RAR			/BITS[2-6] => AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	TAD	PUTEMP			/GET WORD[4] BITS[7-11] IN AC[7-11]
	JMS	PUT5			/OUTPUT A CHARACTER
	JMP	PUTLUP			/GO DO ANOTHER GROUP OF FIVE WORDS

CHKNL,	.-.				/CHECK IF AT NEW LINE ROUTINE
	TAD	WIDCNT			/GET LINE WIDTH COUNTER
	TAD	(WIDTH)			/COMPARE TO MAXIMIM VALUE
	SZA CLA				/SKIP IF AT MAXIMUM
	ISZ	CHKNL			/TAKE SKIP RETURN IF NOT AT MAXIMUM
	JMP I	CHKNL			/RETURN EITHER WAY

OUTSETU,.-.				/OUTPUT SETUP ROUTINE
	DCA	FILLVALUE		/STORE PASSED FILL VALUE
	TAD	(PUT0)			/SETUP THE
	DCA	PUTNXT			/OUTPUT CO-ROUTINE
	JMP I	OUTSETUP		/RETURN
PUT5,	.-.				/FIVE-BIT OUTPUT ROUTINE
	AND	[37]			/JUST 5 BITS
	DCA	PUTLATEST		/SAVE IT
	JMS	CHKNL			/CHECK IF AT BEGINNING OF LINE
	SKP				/SKIP IF NOT
	JMP	PUTNORMAL		/JUMP IF SO
	TAD	("<&177)		/GET BEGINNING BRACKET
	JMS I	[DOBYTE]		/OUTPUT IT
PUTNORM,TAD	PUTLATEST		/GET LATEST VALUE
	TAD	("0-"9-1)		/COMPARE TO FIRST LIMIT
	SMA CLA				/SKIP IF LESS
	TAD	["A-"9-1]		/CONVERT LARGER VALUES TO A-V
	TAD	PUTLATEST		/ADD ON LATEST VALUE
	TAD	["0&177]		/MAKE IT ASCII
	TAD	FILLVALUE		/ADD ON FILL VALUE FOR SPECIAL MODE
	JMS I	[DOBYTE]		/OUTPUT IT
	ISZ	WIDCNT			/BUMP LINE COUNTER
	TAD	WIDCNT			/GET LINE COUNTER
	SZA CLA				/SKIP IF AT END OF LINE
	JMP I	PUT5			/ELSE JUST RETURN
	TAD	(">&177)		/GET DATA CLOSING CHARACTER
	JMS I	[DOBYTE]		/OUTPUT IT
	TAD	["M&37]			/GET A <CR>
	JMS I	[DOBYTE]		/OUTPUT IT
	TAD	["J&37]			/GET A <LF>
	JMS I	[DOBYTE]		/OUTPUT IT
	TAD	[-WIDTH]		/RESET THE
	DCA	WIDCNT			/LINE WIDTH COUNTER
	JMP I	PUT5			/RETURN

	PAGE
/	MESSAGE PRINT ROUTINE.

SCRIBE,	.-.				/MESSAGE PRINT ROUTINE
	TAD I	SCRIBE			/GET IN-LINE POINTER ARGUMENT
	DCA	SCRPTR			/STASH THE POINTER
	ISZ	SCRIBE			/BUMP PAST ARGUMENT
	TAD	(140)			/INITIALIZE TO
	DCA	SCRCASE			/LOWER-CASE
SCRLUP,	TAD I	SCRPTR			/GET LEFT HALF-WORD
	RTR;RTR;RTR			/MOVE OVER
	JMS	SCRPRNT			/PRINT IT
	TAD I	SCRPTR			/GET RIGHT HALF-WORD
	JMS	SCRPRNT			/PRINT IT
	ISZ	SCRPTR			/BUMP TO NEXT PAIR
	JMP	SCRLUP			/KEEP GOING

SCRPRNT,.-.				/CHARACTER PRINT ROUTINE
	AND	[77]			/JUST SIX BITS
	SNA				/END OF MESSAGE?
	JMP I	SCRIBE			/YES, RETURN TO ORIGINAL CALLER
	DCA	SCRCHAR			/NO, SAVE FOR NOW
	TAD	SCRCHAR			/GET IT BACK
	TAD	(-"%!200)		/IS IT "%"?
	SNA				/SKIP IF NOT
	JMP	SCRCRLF			/JUMP IF IT MATCHES
	TAD	(-"^+100+"%)		/IS IT "^"
	SNA CLA				/SKIP IF NOT
	JMP	SCRFLIP			/JUMP IF IT MATCHES
	TAD	SCRCHAR			/GET THE CHARACTER
	AND	[40]			/DOES CASE MATTER?
	SNA CLA				/SKIP IF NOT
	TAD	SCRCASE			/ELSE GET PREVAILING CASE
	TAD	SCRCHAR			/GET THE CHARACTER
SCRPRLF,JMS I	[DOBYTE]		/OUTPUT THE CHARACTER
	JMP I	SCRPRNT			/RETURN

SCRCRLF,TAD	["M&37]			/GET A <CR>
	JMS I	[DOBYTE]		/OUTPUT IT
	TAD	["J&37]			/GET A <LF>
	JMP	SCRPRLF			/CONTINUE THERE

SCRFLIP,TAD	SCRCASE			/GET CURRENT CASE
	CIA				/INVERT IT
	TAD	(140+100)		/ADD SUM OF POSSIBLE VALUES
	DCA	SCRCASE			/STORE NEW INVERTED CASE
	JMP I	SCRPRNT			/RETURN
PUTBYTE,.-.				/OUTPUT A BYTE ROUTINE
	SPA				/ARE WE INITIALIZING?
	JMP	PUTINITIALIZE		/YES
	AND	(177)			/JUST IN CASE
	DCA	LATEST			/SAVE LATEST CHARACTER
	TAD	LATEST			/GET LATEST CHARACTER
	JMP I	PUTNEXT			/GO WHERE YOU SHOULD GO

PUTNEXT,.-.				/EXIT ROUTINE
	ISZ	PUTBYTE			/BUMP TO GOOD RETURN
PUTERRO,CLA CLL				/CLEAN UP
	JMP I	PUTBYTE			/RETURN TO MAIN CALLER

PUTINIT,CLA				/CLEAN UP
	TAD	OUTRECORD		/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD		/STORE IN-LINE
	DCA I	(OUTCNT)		/CLEAR ACTUAL FILE LENGTH
PUTNEWR,TAD	(OUTBUFFER)		/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
PUTLOOP,JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	TAD	BUFPTR			/GET POINTER VALUE
	DCA	TEMPTR			/SAVE FOR LATER
	ISZ	BUFPTR			/BUMP TO NEXT
	JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	JMS	PUTNEXT			/GET A CHARACTER
	RTL;RTL				/MOVE UP
	AND	[7400]			/ISOLATE HIGH NYBBLE
	TAD I	TEMPTR			/ADD ON FIRST BYTE
	DCA I	TEMPTR			/STORE COMPOSITE
	TAD	LATEST			/GET LATEST CHARACTER
	RTR;RTR;RAR			/MOVE UP AND
	AND	[7400]			/ISOLATE LOW NYBBLE
	TAD I	BUFPTR			/ADD ON SECOND BYTE
	DCA I	BUFPTR			/STORE COMPOSITE
	ISZ	BUFPTR			/BUMP TO NEXT
	TAD	BUFPTR			/GET LATEST POINTER VALUE
	TAD	(-2^200-OUTBUFFERR)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	PUTLOOP			/KEEP GOING
	ISZ	DANGCNT			/TOO MANY RECORDS?
	SKP				/SKIP IF NOT
	JMP I	(SIZERR)		/JUMP IF SO
	JMS I	OUTPUT			/CALL I/O HANDLER
	2^100+WRITE			/WRITE SOME PAGES FROM OUTPUT BUFFER
	OUTBUFFER			/BUFFER ADDRESS
PUTRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP	PUTERROR		/OUTPUT ERROR!
	ISZ I	(OUTCNT)		/BUMP ACTUAL LENGTH
	ISZ	PUTRECORD		/BUMP TO NEXT RECORD
	JMP	PUTNEWRECORD		/KEEP GOING
DOBYTE,	.-.				/OUTPUT A BYTE ROUTINE
	JMS	PUTBYTE			/OUTPUT PASSED VALUE
	JMP I	(ENCERROR)		/COULDN'T DO IT
	JMP I	DOBYTE			/RETURN

	PAGE
/	INPUT FILE ROUTINE.

GEIFILE,.-.				/GET INPUT FILE ROUTINE
	JMS	LUKUP			/TRY TO LOOKUP THE FILE
	SKP				/SKIP IF IT WORKED
	JMP	TRYNULL			/TRY NULL EXTENSION VERSION
NULLOK,	TAD	LARG2			/GET NEGATED LENGTH
	DCA	INLEN			/STASH IT
	TAD	LARG1			/GET FIRST INPUT RECORD
	DCA	INRECORD		/STASH IT
	JMP I	GEIFILE			/RETURN

/	COMES HERE IF LOOKUP FAILED.

TRYNULL,CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	[INFILE+4]		/GET ORIGINAL FILENAME'S EXTENSION
	CDF	PRGFLD			/BACK TO OUR FIELD
	SZA CLA				/SKIP IF IT WAS NULL ORIGINALLY
	JMP I	(INERR)			/ELSE COMPLAIN OF EXPLICIT LOOKUP FAILURE
	DCA	IFNAME+3		/NOW TRY NULL VERSION INSTEAD OF DEFAULT VERSION
	JMS	LUKUP			/TRY TO LOOK IT UP AGAIN
	JMP	NULLOK			/THAT WORKED!
	JMP I	(INERR)			/COMPLAIN OF LOOKUP FAILURE

LUKUP,	.-.				/LOW-LEVEL LOOKUP ROUTINE
	TAD	(IFNAME)		/GET OUR FILENAME POINTER
	DCA	LARG1			/STORE IN-LINE
	DCA	LARG2			/CLEAR SECOND ARGUMENT
	TAD	IDNUMBER		/GET INPUT DEVICE NUMBER
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	[USR]			/CALL USR ROUTINE
	LOOKUP				/WANT LOOKUP FUNCTION
LARG1,	.-.				/WILL BE POINTER TO OUR FILENAME
LARG2,	.-.				/WILL RETURN FILE LENGTH (HOPEFULLY)
	ISZ	LUKUP			/LOOKUP FAILED, SO BUMP RETURN ADDRESS
	JMP I	LUKUP			/RETURN EITHER WAY
/	INPUT FILENAME PRINT ROUTINE.

PIFNAME,.-.				/PRINT INPUT FILENAME ROUTINE
	TAD	IMSW			/GET IMAGE-MODE SWITCH
	SNA CLA				/SKIP IF SET
	JMP	DOIFNAME		/JUMP IF NOT
	JMS I	[SCRIBE]		/OUTPUT THE
	IFMSG				/IMAGE MESSAGE
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CDF	PRGFLD			/BACK TO OUR FIELD
	JMS I	(OCTOUT)		/OUTPUT IT
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	[SWY9]			/GET /Y-/9 SWITCHES
	CDF	PRGFLD			/BACK TO OUR FIELD
	AND	[600]			/JUST /1, /2 BITS
	SNA				/SKIP IF SOMETHING SET
	JMP I	PIFNAME			/JUST RETURN IF NOT
	AND	[400]			/JUST /1 BIT
	SNA CLA				/SKIP IF /1 SET
	JMP	PIFPT2			/JUMP IF /2 SET
	JMS I	[SCRIBE]		/OUTPUT THE
	PT1MSG				/PART ONE MESSAGE
	JMP I	PIFNAME			/RETURN

PIFPT2,	JMS I	[SCRIBE]		/OUTPUT THE
	PT2MSG				/PART TWO MESSAGE
	JMP I	PIFNAME			/RETURN

DOIFNAM,TAD	IFNAME			/GET FIRST PAIR
	JMS	PIF2			/PRINT IT
	TAD	IFNAME+1		/GET SECOND PAIR
	JMS	PIF2			/PRINT IT
	TAD	IFNAME+2		/GET THIRD PAIR
	JMS	PIF2			/PRINT IT
	TAD	(".&177)		/GET SEPARATOR
	JMS	PIFOUT			/PRINT IT
	TAD	IFNAME+3		/GET FOURTH PAIR
	JMS	PIF2			/PRINT IT
	JMP I	PIFNAME			/RETURN

PIF2,	.-.				/PRINT A PAIR ROUTINE
	DCA	SCRCHAR			/SAVE PASSED PAIR
	TAD	SCRCHAR			/GET IT BACK
	RTR;RTR;RTR			/MOVE DOWN
	JMS	PIFOUT			/PRINT HIGH-ORDER FIRST
	TAD	SCRCHAR			/GET IT AGAIN
	JMS	PIFOUT			/PRINT LOW-ORDER
	JMP I	PIF2			/RETURN
PIFOUT,	.-.				/FILENAME CHARACTER OUTPUT ROUTINE
	AND	[77]			/JUST SIXBIT
	SNA				/SKIP IF SOMETHING THERE
	JMP I	PIFOUT			/ELSE IGNORE IT
	TAD	[40]			/INVERT IT
	AND	[77]			/REMOVE EXCESS
	TAD	[40]			/INVERT IT AGAIN
	JMS I	[DOBYTE]		/OUTPUT IT
	JMP I	PIFOUT			/RETURN

MOFNAME,.-.				/MOVE OUTPUT FILENAME ROUTINE
	TAD I	[OUTFILE+1]		/GET FIRST OUTPUT FILENAME WORD
	JMS	CHKNAME			/CHECK IF LEGAL
	DCA	FNAME			/STASH IT
	TAD I	(OUTFILE+2)		/GET SECOND OUTPUT FILENAME WORD
	JMS	CHKNAME			/CHECK IF LEGAL
	DCA	FNAME+1			/STASH IT
	TAD I	(OUTFILE+3)		/GET THIRD OUTPUT FILENAME WORD
	JMS	CHKNAME			/CHECK IF LEGAL
	DCA	FNAME+2			/STASH IT
	TAD I	(OUTFILE+4)		/GET FOURTH OUTPUT FILENAME WORD
	JMS	CHKNAME			/CHECK IF LEGAL
	DCA	FNAME+3			/STASH IT
	JMP I	MOFNAME			/RETURN

/	OUTPUT NAME CHECK ROUTINE.

CHKNAME,.-.				/OUTPUT NAME CHECK ROUTINE
	DCA	LUKUP			/SAVE PASSED VALUE
	TAD	LUKUP			/GET IT BACK
	RTR;RTR;RTR			/MOVE DOWN
	JMS	CHKIT			/CHECK HIGH-ORDER AND GET IT BACK
	JMS	CHKIT			/CHECK LOW-ORDER AND GET IT BACK
	JMP I	CHKNAME			/RETURN

CHKIT,	.-.				/ONE CHARACTER CHECK ROUTINE
	AND	[77]			/JUST SIX BITS
	TAD	(-"?!200)		/COMPARE TO "?"
	SZA				/SKIP IF ALREADY BAD
	TAD	(-"*+"?)		/ELSE COMPARE TO "*"
	SNA CLA				/SKIP IF NEITHER BAD CASE
	JMP I	(BADNAME)		/COMPLAIN OF WILD CHARACTER
	TAD	LUKUP			/GET THE PAIR BACK FOR NEXT TIME
	JMP I	CHKIT			/RETURN
	PAGE
CALCHKS,.-.				/CALCULATE CHECKSUM ROUTINE
	TAD	CHKFLG			/SHOULD WE CHECKSUM?
	SZA CLA				/SKIP IF SO
	JMP I	CALCHKSUM		/JUMP IF NOT
	JMS	CHKSETUP		/SETUP
	TAD	PUTEMP			/GET PASSED VALUE
	CLL RAR				/CLEAR LINK AND MOVE OVER
ADDLUP,	RAL				/MOVE OVER CARRY
	TAD I	XR1			/ADD A WORD
	DCA I	XR2			/STORE BACK
	ISZ	CCNT			/DONE ENOUGH?
	JMP	ADDLUP			/NO, KEEP GOING
	JMP I	CALCHKSUM		/YES, RETURN

CHKOUT,	.-.				/OUTPUT THE CHECKSUM ROUTINE
	JMS	CHKSETUP		/SETUP
	ISZ	CHKFLG			/DISABLE CHECKSUMMING
	TAD I	XR1			/GET A WORD
	JMS I	[PUTIT]			/OUTPUT IT
	ISZ	CCNT			/DONE YET?
	JMP	.-3			/NO, KEEP GOING
	JMP I	CHKOUT			/YES, WE'RE DONE

CLRCHKS,.-.				/CLEAR CHECKSUM ROUTINE
	JMS	CHKSETUP		/SETUP
	DCA I	XR1			/CLEAR A WORD
	ISZ	CCNT			/DONE YET?
	JMP	.-2			/NO, DO ANOTHER
	DCA	CHKFLG			/ENABLE CHECKSUMMING
	JMP I	CLRCHKSUM		/RETURN

INVCHKS,.-.				/CHECKSUM INVERSION ROUTINE
	JMS	CHKSETUP		/SETUP
	STL				/FORCE INITIAL CARRY
COMLUP,	TAD I	XR1			/GET A WORD
	CMA				/INVERT IT
	SZL				/SKIP IF NO CARRY
	CLL IAC				/ELSE ADD ONE AND CLEAR CARRY FOR NEXT TIME
	DCA I	XR2			/STORE BACK
	ISZ	CCNT			/DONE ALL YET?
	JMP	COMLUP			/NO, KEEP GOING
	JMP I	INVCHKSUM		/YES, RETURN

CHKSETU,.-.				/CHECKSUM SETUP ROUTINE
	TAD	(CHKSUM-1)		/POINT TO
	DCA	XR1			/CHECKSUM AREA
	TAD	(CHKSUM-1)		/POINT TO
	DCA	XR2			/CHECKSUM AREA
	TAD	[-5]			/SETUP THE
	DCA	CCNT			/CHECKSUM COUNT
	JMP I	CHKSETUP		/RETURN
/	FILE DATE ROUTINE.

FDMESSA,.-.				/PUT FILE DATE IN MESSAGE ROUTINE
	TAD	FDATE			/GET INPUT FILE'S DATE
	SNA CLA				/SKIP IF ANY
	JMP I	FDMESSAGE		/RETURN IF NONE
	JMS I	[SCRIBE]		/PRINT OUT THE
	DATMSG				/DATE BLURB
	TAD	FDATE			/GET IT BACK
	JMS	PRDATE			/PRINT THE DATE
	JMS I	[SCRIBE]		/PRINT THE
	EMSG				/END MESSAGE
	JMP I	FDMESSAGE		/RETURN

TDMESSA,.-.				/PUT TODAY'S DATE IN MESSAGE ROUTINE
	JMS I	[SCRIBE]		/OUTPUT THE
	REMMSG				/OPENING REMARKS
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	(DATWRD)		/GET DATE WORD
	CDF	PRGFLD			/BACK TO OUR FIELD
	SNA				/SKIP IF THERE
	JMP	NOTDATE			/JUMP IF NOT
	DCA	TDATE			/SAVE TODAY'S DATE
	JMS I	[SCRIBE]		/OUTPUT THE
	ONMSG				/BRIDGING MESSAGE
	TAD	TDATE			/GET TODAY'S DATE
	JMS	PRDATE			/PRINT TODAY'S DATE
NOTDATE,JMS I	[SCRIBE]		/OUTPUT THE
	EMSG				/END MESSAGE
	JMP I	TDMESSAGE		/RETURN
PRDATE,	.-.				/DATE PRINT ROUTINE
	DCA	PRTEMP			/SAVE PASSED VALUE
	TAD	PRTEMP			/GET IT BACK
	RTR;RAR				/MOVE DOWN
	AND	[37]			/JUST DAY BITS
	JMS I	(DEC2)			/PRINT AS TWO DIGITS
	TAD	PRTEMP			/GET DATE AGAIN
	AND	[7400]			/JUST MONTH BITS
	CLL RTL;RTL;RTL			/MOVE DOWN
	TAD	(MONLST-2-1)		/POINT TO PROPER ELEMENT
	DCA	XR1			/STASH THE POINTER
	TAD I	XR1			/GET FIRST PAIR
	DCA I	(MMSG+1)		/STORE IN MESSAGE
	TAD I	XR1			/GET SECOND PAIR
	DCA I	(MMSG+2)		/STORE IN MESSAGE
	JMS I	[SCRIBE]		/OUTPUT THE
	MMSG				/MONTH MESSAGE
	TAD	PRTEMP			/GET DATE AGAIN
	AND	[7]			/JUST YEAR BITS
	DCA	TEMP			/SAVE IT
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD I	(DATWRD)		/GET CURRENT DATE WORD
	CDF	PRGFLD			/BACK TO OUR FIELD
	AND	[7]			/JUST YEAR BITS
	CIA				/INVERT FOR TEST
	TAD	TEMP			/COMPARE TO DESIRED YEAR
	SMA SZA CLA			/SKIP IF THEY MATCH OR ARE EARLIER
	TAD	(-10)			/ELSE BACKUP A GROUP
	TAD	TEMP			/ADD TO YEAR
	DCA	TEMP			/STORE BACK
	TAD I	(DATEXT)		/GET EXTENSION WORD
	AND	[600]			/JUST EXTENSION BITS
	CLL RTR;RTR			/MAKE IT GROUP COUNT
	TAD	TEMP			/ADD ON RELATIVE YEAR
	TAD	(106)			/MAKE IT ABSOLUTE YEAR (70-99)
	JMS I	(DEC2)			/PRINT AS TWO DIGITS
	JMP I	PRDATE			/RETURN

	PAGE
DEC2,	.-.				/PRINT TWO DIGITS ROUTINE
	JMS	DIVIDE			/DIVIDE
	12				/BY 10
	TAD	["0&177]		/MAKE IT ASCII
	JMS I	[DOBYTE]		/OUTPUT IT
	TAD	REM			/GET SECOND DIGIT
	TAD	["0&177]		/MAKE IT ASCII
	JMS I	[DOBYTE]		/OUTPUT IT
	JMP I	DEC2			/RETURN

/	DIVIDE ROUTINE.

DIVIDE,	.-.				/DIVIDE ROUTINE
	DCA	REM			/SAVE IN REMAINDER
	DCA	QUO			/CLEAR QUOTIENT
	TAD	REM			/GET IT BACK
	STL CIA				/INVERT
	SKP				/DON'T FIRST TIME
DVLOOP,	ISZ	QUO			/BUMP UP QUOTIENT
	TAD I	DIVIDE			/ADD ON ARGUMENT
	SNA SZL				/UNDERFLOW?
	JMP	DVLOOP			/NO, KEEP GOING
	CIA				/YES, INVERT IT BACK
	TAD I	DIVIDE			/RESTORE LOST VALUE
	DCA	REM			/SAVE AS REMAINDER
	TAD	QUO			/GET THE QUOTIENT
	ISZ	DIVIDE			/BUMP PAST ARGUMENT
	JMP I	DIVIDE			/RETURN

INDATE,	.-.				/GET INPUT FILE'S DATE WORD
	CDF	TBLFLD			/GOTO TABLE FIELD
	TAD	IMSW			/GET IMAGE-MODE SWITCH
	SNA CLA				/SKIP IF SET
	JMP	NOIMG			/JUMP IF NOT
	TAD I	(DATWRD)		/USE TODAY'S DATE
	JMP	NOAIW			/CONTINUE THERE

NOIMG,	TAD I	(AIWCNT)		/GET AIW COUNT
	SNA				/SKIP IF ANY
	JMP	NOAIW			/JUMP IF NOT
	TAD I	[AIWXR]			/GET ENTRY POINTER
	DCA	TEMP			/STASH FIRST AIW POINTER
	TAD I	TEMP			/GET FIRST AIW
NOAIW,	DCA	FDATE			/SAVE AS FILE'S DATE
	CDF	PRGFLD			/BACK TO OUR FIELD
	JMP I	INDATE			/RETURN
/	INPUT FILENAME MOVE ROUTINE; USES DEFAULT EXTENSION IF NONE PROVIDED BY USER.

MIFNAME,.-.				/MOVE INPUT FILENAME ROUTINE
	TAD I	(INFILE+1)		/GET FIRST INPUT FILENAME WORD
	SNA				/SKIP IF SOMETHING THERE
	JMP	IMTEST			/JUMP IF NOT
IFNAMOK,DCA	IFNAME			/STASH IT
	TAD I	(INFILE+2)		/GET SECOND INPUT FILENAME WORD
	DCA	IFNAME+1		/STASH IT
	TAD I	(INFILE+3)		/GET THIRD INPUT FILENAME WORD
	DCA	IFNAME+2		/STASH IT
	TAD I	[INFILE+4]		/GET FOURTH INPUT FILENAME WORD
	SNA				/SKIP IF SOMETHING THERE
	TAD	("S^100+"V-300)		/ELSE USE DEFAULT EXTENSION VALUE
	DCA	IFNAME+3		/STASH IT EITHER WAY
	JMP I	MIFNAME			/RETURN

/	TEST IF IMAGE-MODE IS SET.  ASSUME /1 AND /2 ARE NOT SET.

IMTEST,	TAD I	(SWAL)			/GET /A-/L SWITCHES
	AND	(10)			/JUST /I BIT
	SZA CLA				/SKIP IF NOT SET
	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	SNA				/SKIP IF SOMETHING THERE
	JMP I	(INERR)			/ELSE COMPLAIN
	CIA				/INVERT IT
	DCA	INLEN			/USE AS INPUT RECORD COUNT
	DCA	INRECORD		/START AT THE BEGINNING OF THE DEVICE
	ISZ	IMSW			/INDICATE IMAGE-MODE SET

/	TEST IF /1 OR /2 IS SET.

	TAD I	[SWY9]			/GET /Y-/9 SWITCHES
	AND	[600]			/JUST /1, /2 SWITCHES
	SNA				/SKIP IF EITHER SET
	JMP	IFNAMOK			/JUMP IF NEITHER SET

/	TEST IF /1 IS SET.  IF NOT, /2 MUST BE SET.

	AND	[400]			/JUST /1 SWITCH
	SNA CLA				/SKIP IF /1 SET
	JMP	IM2			/JUMP IF /2 SET

/	FOR A  FIRST HALF, USE THE ROUNDED-DOWN FIRST HALF LENGTH.  THE DATA STARTS AT
/	RECORD ZERO (ALREADY SET).

	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
IM2ENTR,CIA				/INVERT IT
	DCA	INLEN			/SET COUNT FOR HALF OF THE DEVICE
	JMP	IFNAMOK			/KEEP GOING
/	FOR A SECOND HALF, THE DATA STARTS AT THE HALFWAY POINT (ROUNDED DOWN).

IM2,	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
	DCA	INRECORD		/SETUP STARTING RECORD

/	FOR A SECOND HALF,  THE  COUNT  IS THE ORIGINAL AMOUNT MINUS THE COUNT FOR THE
/	FIRST HALF.

	TAD I	[EQUWRD]		/GET EQUALS PARAMETER
	CLL RAR				/%2
	CIA				/INVERT IT
	TAD I	[EQUWRD]		/SUBTRACT FROM EQUALS PARAMETER
	JMP	IM2ENTRY		/CONTINUE THERE

CHKBND,	.-.				/CHECK IF ON GOOD OUTPUT BOUNDARY ROUTINE
	TAD	OBOUND			/GET BOUNDARY COUNTER
	TAD	(5)			/COMPARE TO BEGINNING VALUE
	SNA CLA				/SKIP IF NOT AT BEGINNING
	ISZ	CHKBND			/SET SKIP RETURN IF AT BEGINNING
	JMP I	CHKBND			/RETURN EITHER WAY

OCTOUT,	.-.				/OCTAL OUTPUT ROUTINE
	DCA	OCTEMP			/SAVE IT
	TAD	(-4)			/SETUP THE
	DCA	OCTCNT			/DIGIT COUNTER
OCTLUP,	TAD	OCTEMP			/GET THE VALUE
	RTL;RAL				/MOVE UP A DIGIT
	DCA	OCTEMP			/STORE BACK
	TAD	OCTEMP			/GET IT AGAIN
	RAL				/PUT INTO CORRECT BITS
	AND	[7]			/JUST ONE DIGIT
	TAD	["0&177]		/MAKE IT ASCII
	JMS I	[DOBYTE]		/OUTPUT IT
	ISZ	OCTCNT			/DONE ENOUGH?
	JMP	OCTLUP			/NO, GO BACK FOR MORE
	JMP I	OCTOUT			/YES, RETURN TO CALLER

	PAGE
/	FILE TEXT MESSAGES.

DATMSG,	TEXT	"(^REMARK F^ILE ^D^ATE: "
EMSG,	TEXT	")%^"
ENDMSG,	TEXT	">%(^END ^"
EOFMSG,	TEXT	"(^REMARK E^ND OF ^F^ILE)%"
FILMSG,	TEXT	"(^FILE "
IFMSG,	TEXT	"^B^LOCK-^I^MAGE-^F^ILE =^"
MMSG,	TEXT	"-^D^EC-19"
ONMSG,	TEXT	": ^"
PT1MSG,	TEXT	" ^F^IRST ^H^ALF"
PT2MSG,	TEXT	" ^S^ECOND ^H^ALF^"
REMMSG,	TEXT	"(^REMARK PDP-8/DEC^MATE ^E^NCODING ^P^ROGRAM ^V^ERSION ^"
	"0+VERSION^100+".-200;	"0+REVISION^100+" -200
	TEXT	"     C^HARLES ^L^ASNER)%"
	TEXT	"(^REMARK I^MAGE ^F^ILE ^C^REATED BY ^PDP^-8"

/	MONTH TEXT TABLE.

MONLST,	TEXT	"J^AN"			/JANUARY
	TEXT	"F^EB"			/FEBRUARY
	TEXT	"M^AR"			/MARCH
	TEXT	"A^PR"			/APRIL
	TEXT	"M^AY"			/MAY
	TEXT	"J^UN"			/JUNE
	TEXT	"J^UL"			/JULY
	TEXT	"A^UG"			/AUGUST
	TEXT	"S^EP"			/SEPTEMBER
	TEXT	"O^CT"			/OCTOBER
	TEXT	"N^OV"			/NOVEMBER
	TEXT	"D^EC"			/DECEMBER
	$				/THAT'S ALL FOLK!
Added src/kermit-12/k12fl0.ipl.














































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
leader for direct load file which must be in lower case

file contains kermit data in ipl encoded format

this file contains data for field zero

!!M!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`\!!!!!!!!
!!"_!!!!!!!N!D!!!R!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`!!_!
UL!>``!!!!!!!!!!!!%!#A3!E!E*1TEB,B%@!!!!!!!!!!?!;!`N9!!."A04!;]!
!+A!EZ?Z3^EC.)/!-!G\#8QT!(U5%9+,+:"!%!$`!#`G`T"`<A#!`A&3!A!`G!%1
P`F`9#:&Y!)(U,F_E*F_EPH_,^99,]H\K>K!9:E7K8):K0]IK!;<F_!!K!F_A*K!
!!\!/A<23A/A@[3A,Z<3,Y@X<4)@"^*]@W02^)K],4<402@38X4243KR\!,40X0W
0[F\@343)F*[]IL+@343[A@3)<9=1@Y!OA!!!!!!!!4PL64PL8T"!IT'[!,;TW,V
TW,VTW9291P5T)[!P5!!T*LKT/[!PJ!!#=5Q6/=6!!!)S5S4!DS7S6+R88Q!1!W!
!!F.S3/!3!_IO!F,/!3!]IO!;/CK!!O!!!\!9-,`9`*Z:!O1!!C1,_9`,^:!O9!!
;I)U;J?J3J3IKDO@!!!!!![!/K3K;S0]YBFY!!_IOKM$!!H\K_<-)G@.4.,-@.4.
[A@.)B,[YB,.`)L+D/OW3WOW!!)!!!,Z<.P/!!<>,>Y+Y+Y+$Y,>"^*]P3!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$)!(=*=QVULV"VE
!!C9O!"X,`_AK"3!O!!!C9O*;8+80_@_+8*W_IO*+83*O*!!!![!*W;U])_IU"KG
U'"X94)439O9H^*V]A*U_I1#])KLY!3[K=3UK=O9!!Y!H][!*&OU!!;9*W<J[A"#
_IL&CU_AL#U*K_+9])*SU/[!O[4KK_4JK_H\K]!!T"P4\9TW[!TW$[Z)_ILB,ZTW
92[%]A91[!,YTW[!P4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Y!I!&$5N#UW3S``
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<X)A_A
LQ,X"[_ILS,X,`_ILS,XYB)G_ALQ)GLV,XP=,X*R"X4=P=!!!!!!!!!!!!!!!!_"
!!FQO!95)5FPY!,`963!O!!!;Q])3Q/Q^)K7*[_AK/3,\!+QO,!!;Q])3Q/Q^)KE
*[_IK=3:\!+QO:!!;Q/Q`)KO3QKJ+QOH!!!!<A,AC!L3)9<@)5<?0?YB0@_AL6,?
YB)6_IL(4?4@K[,@CHY"<?0?973R3R\")6OR3R,AOR,@CHY"Y"<@0@_IL4KY!!!!
!!!!<M)U<N0M@N4M4N1SLFPB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!``
!!;L+LFQK@;M;Q;R,`9O9P,_;N/M]IK@,^_IK=/M3MF/3NK./M,^_AK@3M,`KC\!
+L;MCUKI9Z+M3!O!\!+LO!!!!!!!%4,!;;;;;;;;!!]I,]<(0(<!4(0(<"S+FZ!+
!!!!!!OU,"3UOU!!!!<8,\<1,8S+FZ!"!!])4)\!,19LP)!!!!FO,[9/F+.N"(F*
!".G1=L@,ZP949P9":.G"/.C!!"'``!!!!!!!!!!!!!!!!!!!!E+!#W"-O`'`]-Q
!!;Q)V9U,`F2+QFQKN;R)V9O9P,_;S9WCT/R^)KJ,^]IK<,]_AKNKJ3R)V,\9O9P
\E;SCT/R^)KJ*[_AKN3!\!+RO!\!+QO!!!!!!!!!/RH[])L(,Z]IL&,Y_AOT1W*^
F/3SK`3RL21W*^F/3R3SKU/RH[L2\!3RL,\!OT!!04<<4404<=44F+!!!!F*!"0F
])4444P41=L>P4":0B":0E!!!!!!!!!!!!!!!!!!!!!!!!!!!6`";@!$!/`3`[`]
!!,`;SH_,^]IK;,]_IK@+S,\`!KO).,[^!*[,Z?S3S[A?S).FNK$[A?SF_E*O!+S
,Y_IK$[A+S;S?S,XFN*]FN,XFNK$\!*MFNK$!!!!"^<'\9)P9P]9L",'Y'Y'Y'=O
OT-O,'=O1OOT!!!!]A<R,Q9Q9R,R<M<O,W<N\9,O<O0M]9L=Y+Y+Y+])4M"^<PF0
,V]ILI*^YB,P_AP(4NL34(P(!!!!!!!!!!!!!!!!!!`"`Y!)IJ"A_AI*_/`TU!88
!!)<;PH`KB;S*L;RH_KB?R/R,^YB;Q3RH_KB?R3QK03R[A?R+SF\YB;QH_KB+Q_I
KL\!3PKG,]NK)#_AP\H[K$)#_IO!P\!!!!!!!!!!F`F_C#*"FJF_E*3TOT!!F-QW
F_E*O^!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!67CWG>`@'*'!
!!FO,`9/):9N)NFICR9N,_9V)NFHCR9N)NFQ])CR9N)ZFGCR<'9T["<(,_@^,(H]
CRKJ4'<(H\CR)W_AK=,'_ICRD-)N9:3!O!!![!+RFY5VO!LXAZLRB8LMBVLIH"L@
GPL;H3L5EC!!!!!!!!!!!!!!!!\!9TF+T_"#F*!"!!P-!![A)@"^*]<L,K,L,MF\
<N)F*[]I[A<OF.6JP7!"!D!!"/!!!!``!!!!!!!!!!!!!!!!!!!!!!A==!2Q6)!#
!!FO,`9/):9N)NFIKJFQKE;7+7FP])K.9N[A=N9@+7F+!!"3F*!"7K1=K9O!H_KD
3!)N9:O!\!*FO!FEO!\!,^O!"&7H"47?"/7<!!!!FO,`9/):9N)NFIL+FQ])L.9N
F,H]8.L.H_L.3T)N9:OT\!,^OT[!OT"48%"#8."#8'!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%KAZ9!!$
!!H`9[S+FZ!,9@F+TU":F*!";*1=K+DBF+T_":F*!":_DB)[_IDBH_DBK1)[_ADB
.L,^^)DB,]<O[A@O,\9V,]FHDB\!)Z9])]FGDB,\;Z)]S+FZ!$!!!!DB+Z9X+[Y"
9Y1[[AFD]#)VFCF_BCF-6QF_E*K1)[_IDBFBDBK1)[_AFBY!F+T_":F*!!3!O!FE
O!!!F+T_"#F*!!,BFY;1]I,[O!!!!!!!!!!!!!!!!!!!!!!!!!!!F(6)QW`>;`CG
"%98";:/"#:5"'9>"&:@!!"/9."'9>"&:@!!HJH<HEB&H%FUH4F2H.FBGNB-!!!!
CH])KFCT])3@O@!!;S+S,`Z!,_]93H\!+SOH!!!!;_+_,^Z!*A]93T\!+_OT!!!!
.L,]<?@?,\<?0?]IL=YB)G_IL2,@_A,[L5,@_IL90?FDO`L:\"<@4?L'3`O`!!!!
!!9$0A9)4A1)-)]IPA)$_ALF-)9$)$PA!!!!!!!!!!!!!!!!!!!!`!QWQ4`'!;_F
!!]IKS;(EL#)5!!!O!S*0`9X,_9+-+]IKV<,-+<--+<.-+</[A0_<"<#+<;AKC-+
<#3A4"K@-+]IKZ<+S",^H]KS,+9Y,^FC3!K`S*,+])-+YB)X9X8\K/0[S"]AK$3!
O!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5#5!2(>,5%5"
!!_IOG)X;)EL#)1!!!O!+(<R<"C:C:,"CG,R,`_AK-3)1YK&KR!!S*0R"@Z%,"Y'
Y'<"0RCG4RO:!!S"Y%Z9!^*V]IKT*?"T3!3!O!,S_IKR,_;GKO!!^)L'!^90S*)0
P"!!3Z\!S"OZ[!)X<M@^,L<RD"@R,R;:4RD"@RD"Y'Y'"@/:?:)0Y+Y+Y)"@0R@R
4R,R,`_AL-S"1Y])OZELC)1!!!L$8^4ML+!!!!!!!!!!!!!!!!!!!!!!!!A7?RM!
!!)^`)K.)0*V_A+<_IK.*?FDK80`,__AK,)]S+FZ!%6)!!_)3!9[O!!"!!)T_AKL
,^9I,]9F,\9G,[9B9@HZO=F+6Q"'F*!"C)1=KOO=F_BMF-6QF_E*C_])3=O=!!HY
[AHXO_L1HW])L"F+)!"%F*!"B_1=L+O_0V,U_IL>F+)!"%F*!"C$1=L8O_F>T_";
O_O_3_O_!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Y!&.%W?!&/C3"_!D!N!RQ!@R
":B""/B.!!":B>"/B;!!":AU"/AR!!":AU!!!!F+TU"4F*!"C@1=K7O3CG\"9T33
O3":C="/C:!!!!,`9U,_F2.L,^,_^A[!,]YB9S,\F1OG\!9#)/,[]AL$F>D2";Y!
Y!HZL0,Y_AL0F>T_"#Y![!)[_AFB[!,XNK"%``!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!A!``6-`_QW!+`=`W!B
!!]AK&/!3!9U*NC3O!!!]AK//*3*9U,`C3O*!!;@)U;A/A3A^)K>G@\!K7\!O3!!
!!!!\9)R9R-Q]9KMY+Y+Y+])1Q"^OB!!]I*]*]"^*]?Y3YOP!!!!9Q9R,_;Y,^<2
F0]ACP42L!,]CP\E<2F0]ACP42L*[A?YOZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!O`[6Q'[
!![!*N;V/!<+3!)_*=<)S*0+Y+Y+Y+C6S*0+C64+K+!!S""^]IO!<*,*,`]IKJ*M
_IKN,*"]_I,),*GVO6*<GV*AKH)__AO6,)YB,_<)O6!![!+V;!,^K$!!<(,(*[`!
L%F_AC*R,(FNO\!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'[#A`<
!!FOF_A4*"FJF_AIF_AUF_AS<M*"<IH`H_*$]I*%_AL3H^K<H]])H\,L,M_IKBH^
L&H[L&HZL&<N,N"XYB<P,M_IKT,PFYJC_IL#M$,P*"_AK[[AL%<M,L_IK`,NH\,N
HYL&*MH\<MY!HXHWHVHUK23!O!Y!HXHWHVHUH^L.0TYB0S_AL.*$_IL?F_D^*%_I
K-F_G/K-"$J,"DJ,!!IZ!!!!!!!!(4!!!!!!LWLVLBO@K5MFO!K!O7L#M!L9N>P&
!!,YYB,Z_IK2,Z<B[",Z"X*;<ZS*0BS"])CH3!O!!!CH])O5S*@YS"[",Y"X*;<Y
,YYB,Z_I2$O5KE!!Q:L!Q?^)2$])KM"T<B*#_IK],B"X*:]IK_*U_IK`,BOH\9<X
3HOH!!<B,VYB,W,X_AL/,BH`L/P#,BS*@VS"[",V"X*9<VP#!![",VYB,W"X_A49
P9!!,X_APB,VYB,W_IPBS*0WS"H`PB[",W"X*9<WPB!!!!!!!!!!!!!!!!!!!!O_
!!,KYB,L_IKC,L<M[",L"X,`<LS*0MS"<M*#_IKA\9*'_AKA,KYB,L"=_AKA[A:'
,M])D#3!O!!!D#])OFS*@KS"[",K"X,`<K,KYB,L]I2%])KV*="=_I*#_IOF*'_I
2'OF!!U"L<U'^)2%])L("T<M*#_IL8,M"X*:]IL:*U_IL;,MP#\9:&4#P#!!*8:(
*8:),`<K,`<L:&:':%P>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=!
!!;@*(YB*)*&_AK-+@H`K-O!+@S*>(S"["*("X*8:(O!!!["*(YB*)"X_A37O7!!
*'Z%_IKL,_]1*UH`KLY9:'*&_AO@*(YB*)_IO@S*.)S"H`O@["*)"X*8:)O@!!QB
L$QG3_[!O_!!*9@^*9@]*;@\*;@[@Z:$P&!!])*SU*L9U/42[!P2[!9242P2!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LXLZLYLWLV!2P2
"$"0"/"/"&"$"5``I!"'"*"/"*"4")``.9"&"9"*"5``^`"4"&"/"%``5!"("&"5
``7!"3"&"$"&"*"7"&``7T")"&"-"1``3T``!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"_!P!A"!!N!D"/!R!A!A``!!
!!C;).]IK"O!!!,`]IK.,3D%O'*]D%),"M_AK.O'!!<R9-,RC'O5!!CW]IKL,_]I
KNY"]IKQ,^_AO;CW,]_AKH9.O;,\DIN!,[DI\9)-9-KL!![!Q:OWQ="X9.\G)._I
M`Q;).OW!!<RC;)-`)L.,RD>L'C;,R"=_A1,!*,R,Z]I9,,Y_I[A),9,P%!!QBP>
QG[!4>P>,XDIQ;NZ!!<R,WD>LL,RD>LOPI!!!!!!!!!!"?"$!&`T"0"1`P`]`Q`X
\!QG+!>ZH`<I,I,__IK]U/U'[!F_3)F_2FF_3GF_3]F_2=,IZ',I,^;>F_!!F_1A
KDF_2HF_E*F_1!F_3N,IZ',]9),\D=ET,IZ',I,[9),ZD=ATS+HY!)NZ@X@W8V8V
++,U_AL)+,,T_IL9R:Y!R?Y!3>L-R@L4;AS,PSR:K+;AS,PR;A,Q;CK+!!<J0=9*
4=S*-)=*4JLCS"P=!!!!!!!!!!!!!!!!2Z#,#!-K-CU[VGV"`!`\4O`]3_1C`VY!
!!\!)!<#,`9!,#9!\M,__IK=\E,^_AK_[$,]_IKH[ARX[!RZY"_IK^K`[A_"_AK\
RB!0!#Y"_IK[K]Y/]IKR,\]IKZ,[_IKYL"[.,Z_IKWKXY"Y"Y"Y"Y"Y"Y"Y"Y"Y"
Y"O!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`Y`G(S`!!#A#Y`
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
end of data

After the program exits back to the monitor, you should save the data with:

.SAVE SYS FIELD0.SV 00000-07577=0
Added src/kermit-12/k12fl1.ipl.














































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
leader for direct load file which must be in lower case

file contains kermit data in ipl encoded format

this file contains data for field one

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
H`,_C1S"0^_IK*,]C1S$P\H[,ZC1S$P\!!9)S*-)]IO1;<-)S"?<K3!!!!,`TS[!
CN3S3]3^4"4$4'KB,`TW\9CNO=!!TX4(KP[!T),YD!S"0XS*,WD!,VD!T'T)[!ON
!!T*L"T/[!P!`A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=65Q!(6/%W%!W.('!+&`#=
!!TX,`S"TWS*TWS"\7TW,_TWS*\7TW[!TWS"\(TW,^TWS*\(TW,^TWS"["TW,]TW
S*["TW,]TWS"["TW,]TW\6TW,\TW,[TW,ZTW\6TS[![!O!#%D5#'TT'=)1'?KG'@
91'AT''OD4'VD4'_CU(&)2('_I((L.()92(*+9(+T/J&HOJ.HON$)1N%_IN&L<N'
91N(T'P5<&P6)2P7_IP8P2P9,&P:T/!!!!!!!!!!!!!!!!!!!!"D^%#_!6"!!/!9
#%D5#'Y!$6,Q$7TS$8[!$9TX$:4P$;L:$<4P$=L<$>T)$?,S$@DJ$A)($B,R$CDJ
$D,T$EDJ$FT'$GT)$KT*$MT/'?T"'AT''_CU(&T*('L.()"T(+T/N$T"N&T'N'])
P3"TP5T*P7T/!!$7TW$8\9$>TI$FTG$GTI$KTJ$MTO'?TB'ATG(&TJ(+TON$TBN&
TGP5TJP7TO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
??????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
?>?!?6?/,/08/!?1%1?NV??!?1%1?NY??!?1%1?NYP4!?-*/$?NY?!?1%1?NYP*!
?1%1?NYP-!?1%1?NRS?!?1%1?NYP&!?1%1?NYP"!WRQQ?????!WRSQ?!F?<$?16A
5:1&A*4[A!QWA!A?<6?4*/(A?$?0..6/*$"5*0/4A?1?035?>!A?<6?4*/(A?1?3
*/5&3A?1?035?>?!F?14PYA14PRSA04PYA04PRSA04PXYA04PSXYAA,?&3.*5NRS
AA?7RQ?(AAA!?4?&15&.#&3A?!F?5?:1&A?)&-1]$3_?A'03A)&-1F?!RZZQ?!``
?_???!V?_????!Y?_????!Y?P4_??!-*/$NY_!Y?P*_??!Y?P-_??!RS?_???!Y?
P&_??!Y?P"_??!XY?_???!SXY?_??!?6?/,/08/!?1%1?NV??!?1%1?NY??!?1%1
?NYP4!?-*/$?NY?!?1%1?NYP*!?1%1?NYP-!?1%1?NRS?!?1%1?NYP&!?1%1?NYP
"!?75?NXY??!?%&$?."5&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
F?'?*-&A?"?#035F?!`?*?/7"-*%A$0.."/%?!FI?$?0//&$5*/(A50A)045MA5:
1&A!?$?0/530-N?!A?$?A50A3&563/A50A?!JF?!!!!!!!!!!!`?&?3303A*/A%&
7*$&A/".&!`?%?*4,A'6--B!`?&?3303A$-04*/(A'*-&!`?&?3303A*/A'*-&A/
".&!?3?&$&*7*/(A'*-&[A?!?4?&/%*/(A'*-&[A?!`?'?*-&A/".&A4:/5"9A&3
303!F?4?611035&%A$0.."/%4A"3&[FF?$0//&$5?AI50A3&.05&A4:45&.JAF?4
&/%A%&7['*-/".O&9?AF?3&$&*7&A%&7[?AI'*-&/".&A"/%A&95&/4*0/A?/05?
A"--08&%JF?(&5A%&7['*-/".O&9?F?'*/*4)?AI4&37&3JF?&9*5?AI50A01&3"
5*/(A4:45&.JAF?)&-1?AI5)*4A.&44"(&JFF?&?4$"1&A$)"3"$5&3[A!F?,?&:
#0"3%A*/165A&3303BF!`?6?/"#-&A50A5&--A)045A5)"5A4&44*0/A*4A'*/*4
)&%!`?6?/"#-&A50A-0$"5&A'*-&?!?,?&3.*5N?!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!`?3?&$&*7&A'"*-63&?!`?&?3303A*/A3&$&*7&%A'*-&A/".&
?!?6?/"#-&A50A3&$&*7&ANA)"/%-&3!A&3303?!`?6?/"#-&A50A3&$&*7&ANA*
/46''*$*&/5A%*3&$503:A41"$&!F?3?&.05&A-*/&A*/165A&3303BF?!`?6?/"
#-&A50A3&$&*7&A-"5&45A1"$,&5?!`?6?/"#-&A50A4&/%ANA%*3&$503:A&330
3!`?6?/"#-&A50A4&/%ANA)"/%-&3A&3303!`?6?/"#-&A50A4&/%!`?6?/"#-&A
50A3&$&*7&ANA%"5"A&3303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
end of data

After the program exits back to the monitor, you should save the data with:

.SAVE SYS FIELD1.SV 10000-17577=0
Added src/kermit-12/k12glb.boo.




















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
K12GLB.TE
8@U;<C9@@dP^D44PCD59CUA1BDi5CT=584e1@e9?2C4a;DY1CRda>CPh2C0i>S0`2D=:C0d:3@X_
2EEC@DM5>Pd:3@X_2Bi@@D`P;4\a<Te9E3a4AEHjBc4bCDUD;dD_ARm>;eL92D=BAD5DAB0RDeU=
@Tm<Db8PC4UCE4U>Ab16BDa584m>84ACBcX=2Rl9;TeECTLPBc4bAda2;UA5;4\a<U13B0T92EE@
A45DAB14Dd\jBc4bD4=8;U113@X=2Rl9@e95@EA5Db14Dd\jBc4bD4=8;U1184IBCddPA5=;>T\a
<U13B2i@@B0ZEdUDB21>Cb12@D=;EE0Z;R1DB4DPEE=5DR1=EE=D3@X_2D=BAD5DAB11CUTP@T53
BeE@84I9C4DPATUBDe@P:51BAE=ECD52C5TPATmB84=?CE11DTUCCdhPD5EBD4mCAE<PE4lPDdE5
3@X_2EM8@E@PDTE3ADiDC5TP@dQ1CTM5A2T^3@X=2Rl9@e95@EA5Db14Dd\jAE5E@EA5;UA=85M9
E4PPEE14@EA5A211ATI5@eA5A215DEE1E4EC84m>C5TP@E<P@DhP@E9DBDI1@e@^3@X=2Rl9@DiI
84EAED5DAD@PDeU=@Tm<Db12AEAGADE>85A8AB1CD4E3BD5<84A5C4U=BEA5DU<P@E9585E@A45D
AD@^3@X=2Rl9E4Q585=@AD=9@D`PA4E<BDe9E4EBDb11DTDP8Sa3DShlC4Hn;blR85M8BD=884eE
De@PD595@dE4AB11CT@PADi485A8AB17C4m2@D`=2Rl9DeU=@Tm<Db1DCb12AB15DEE1E4E4;R1?
CTaI84EAED5DAB1CE45DADe5CUAC845>A212C45>Bb1<BDi5Db11CT@P?4I6?Pd:;`U3B45B@D=D
AE9C845BAB11C4a?EdE48495E5M5ADhPE4Q585=@AD=9@D`PA4E<BDe9E4EBDbh=2Pd:;`U1CUTP
DeU=@Tm<84i?E218@EI9CTLP@B1=@E=DAE8PET5<EDDPBDhPBc4bCDUD;TaC85M9C4`P@TDP@dQ1
CTM5A21DCb1185I1C5E53@X_2Dm683Ti>CTPE4lPATmB@dDP@DhP@E=CADe2C5TPAE9BCe8^3@X=
2R4=2T0E<14EFA\Q@B5J8TE5ATdb9dQH@DXjD`hC6b95B51GADI=<RMB;UDiBCYO4a]C?A]B3@X^
;BQA>B\c:Bdf8TMA>B\c:cI:9d199A<KECPUDCT\;UPi3@Y5DT\a<Te9E2i<Da]ICCU=<C0\;U0`
;2i;Cd4K4@d:@1Da4E4h8ThQ@R4`@BdN8295@dm26bL?G5Di9dQ;Ad5:DcdKDCPRA@5>Cb1F@DaE
AB16Ce8P0@d:BU<>4a]B;UDiDcdKDU4i;2iD0@d:0BE59e<>4a]B3@X^EC5L6e4a;2i;DCPRADTi
>CTi6bMA>29>DCTV=c0`<2la<30`G54i9SL`<2la<31LDCTV=c0_<C1LDCTV=e`W14`A3@Y05C8A
DEPRAA0WBTMHBQ9B6eLKB5QGCEM=F5U>3@X_;a]<<2`^D4EBAE5E@EA5;UA=6eTjCPhH6a]=F39O
3@X_;a\`C30\;T]AAB9>?3hWAEPA3@Y05D4AFEl=2Rl_6d``;2i;8EPQ>U<K8TEJBS4bBA]1CePK
9`d:<4`^;5Y;CC0A3@Y5EdEAED5DABiDCA]J8Ti:>U<^6b95FTY9;U116bM:BDEB6eY:<SM96`d:
<5QHCEPUF1]=@BL1Ce15CR19CU1EE216BDa5845>A21DFE1582M=@BLPE4lPDeA1DU@13@XJ~~~~
~?
Added src/kermit-12/k12glb.enc.














































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(REMARK Image File Created by PDP-8: 05-Sep-1990)
(REMARK File Date: 11-Jan-1988)
(FILE K12GLB.TE)
(REMARK File decodes to K12GLB.TEC aka GLOBAL.TEC, a TECO macro for)
(REMARK file maintenance of KERMIT-12 source files.)
<88DGIKOG68I3SI15010K9MA18JGL8H4L9P2EAGQ2056K8FQI628J2GMH98QE2B9JJ0S31>
<69G6EG30G4Q8C2CK390RS5514QL8GAKE0TA1KGDU2IGI0N2842C6B0KMGP99L2K8F1KB9>
<B39CHHAJA4I8NV8L26SBO2V5BL14I3AHA4292I412JQMA45H7IAC12AJ1KIHAE9527C82>
<4IL6443IFA81K815T780AIBQISL6I9O276IP32H3I9H1EAL1IO55K68QG0I4GIK4GALA4>
<8GA4AGG3AEIB6IP32H888D1E2K00RK501A9F8GQL4H0LAH2J881L795J9CHH8K446GN1A>
<1904HH4U16K8IQJ6EGKMGP3A1A80BH438G5AT298I720H7I4121MGP5B9855P104I04AH>
<ALAD2IQ82LAH9I1NOAA2946L2K85252814S1CK88Q1AIO5AGG98OIC0HAKC94IAC2KAA1>
<50L2LAD2D4G94O1CL8OIF887K6H6HA1AI6I94U175A0ILAK1KU92GACIK0JQ56L2I1NOA>
<82C5E90GAH2I6HAKAH729G2P8GOKGH758SI4SA80RK501A9F8GQL4H0LAH2J881L795L8>
<LAH8GAL8GNDAH10ILP58144AL2G8GAL8H214126AHI46LA48H908K8LALA38L10SJP4O1>
<CI842J4G84SL0KA9292HH47PA01N8A02KIUL0P9P902HALAH0I8K248KULIH1C9T2J482>
<KATA48NI588458L2J412G6HA4JH0K41A48J6KIH4LAGII0KQ42L95402LAH24292U8G0D>
<Q2G0L4NKAHA8A8056H2P8CI10J249H2K96ADAL14AH9H40II0HA24CU3AB1U6J74C8NI5>
<T10GLQ4J11L41AD4KO58H85A9238HA4A4G29O248HA4SGG8AH25E824O97G87AC02KIUH>
<9TB522OJQL6GG49SH08HAI0H8HAL2K8HA2TSG59QACA80KALAK85A5682L8H0K8LADAJH>
<L8GGE85244824PP0K9F108IAKSH9H40IE0H23OP307QGD8BPGIL4285A18GQKAD9540I1>
<8H8I0H6F9H2N8HA20L14AHAN4H84SHA591900KQ4B51I842C8H64AH4P9LAK4H857KN01>
<AGD8BOGI970B52JQMA45H7K43QE8L420H0PAOIE0HQ43KG5852J4H854HBC84IL0H94I1>
<739CHHAJA4IKN39H10ILP4O16288258GOKGH758TA48824U4G440AM8J2LA86V1909CJP>
<I14SI741P4L04UL329SI30H94217584QJ8H94Q960B5A54KH4VP901N8A02MI2455809G>
<A495I4DL86H188IKAD329L97GI1K3951ACOE86QI4L47A125QHIJ48JJ5QALAIFJKK9J3>
<D9T46P0RO555K986E9IMCKM5L922HPJICLK5EHM89SK04IR2CILAE153GSJ5QAO83AGKD>
<919D1IIJA59GN5AE8R8JEJI8OS60PE0K22PCN19UQ104D0QD012KOHGK92457388112GF>
<2QGG549234JO1NSJJBIAL89TKGH3Q84AJMF9528S48NG1AJR20L0L9H25C814U19006GD>
<0IN56K9I3CPEIL8L7CUJAAAHAB22S00Q1L01A982FP9L2CGR43F0KLAS64OR2KA2PCN2A>
<4HO6HCKICSP758R29Q3HOH2A5HP6DO30CO15SPG0C1LP58J4O1N6C0IUKOC60IHCE93FS>
<O5671G4KB3I8RNBG842J20Q0512K9I4K95G92N21AAGHQKK8913EQNAI3LGH6TAT2OSM9>
<0RS545V0R4C72OL828LA5AKA42LA45RAK66T5I5781P0RQ6QLHSP21NOA6BO1M96C619E>
<2IQ4BOH27HPU2H8LGG6G188L2G85JLFI1BPF66O4OGMB5OH12M0JLD9L4AI56IH32H4H3>
<CAFMM02F86I63IC8B5LK56H610DA2ILE52LAL21AHA2SL6Q3D12KJH3LP9K3D928MKKKG>
<N1A10RK9QKI92K3EIQ8CKJE0DQ1L9GGM14QLC4B38R0G8IEH7LA12EI82KSL84AHH08IA>
<KOGGE85A48825IL8443974G82E9A09T2J2L0545A11MGAX003IZAEFEFVVVVVVV>
(END K12GLB.TE)
(REMARK End of File)
Added src/kermit-12/k12ip0.odt.






































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
This is an example of an ODT session to manually enter the IPL0.SV program
followed by an explicit SAVE command.  This is identical to loading the
binary produced by IPL0.PA, a customized version of K12IPL.PAL.  Locations
marked with * are modified according to the REC parameter; locations marked
with ** are modified according to the SEN parameter; locations marked with
*** are modified according to the BRATE parameter.  All values in this
example are obtained using default parameters. All commands are normally
terminated with CR except within ODT.  In ODT all commands are terminated
with LF to automatically advance to the next location, except the final
numeric command which terminates with CR to end the loading. The xxxx
indicates the former contents which are to be ignored.  Exit from ODT is
via ^C.

.ODT

10200/xxxx 6032
10201 /xxxx 1236
10202 /xxxx 6413         **
10203 /xxxx 6031
10204 /xxxx 5203
10205 /xxxx 6036
10206 /xxxx 6416         **
10207 /xxxx 6046
10210 /xxxx 6406         *
10211 /xxxx 6201
10212 /xxxx 4236
10213 /xxxx 5212
10214 /xxxx 5217
10215 /xxxx 4236
10216 /xxxx 5232
10217 /xxxx 7106
10220 /xxxx 7006
10221 /xxxx 7006
10222 /xxxx 3635
10223 /xxxx 4236
10224 /xxxx 5232
10225 /xxxx 1635
10226 /xxxx 3635
10227 /xxxx 2235
10230 /xxxx 0177
10231 /xxxx 5215
10232 /xxxx 7600
10233 /xxxx 6203
10234 /xxxx 5632
10235 /xxxx 0000
10236 /xxxx 0007         ***
10237 /xxxx 6401         *
10240 /xxxx 5237
10241 /xxxx 6406         *
10242 /xxxx 0230
10243 /xxxx 1256
10244 /xxxx 7510
10245 /xxxx 5237
10246 /xxxx 1255
10247 /xxxx 7500
10250 /xxxx 5636
10251 /xxxx 0254
10252 /xxxx 2236
10253 /xxxx 5636
10254 /xxxx 0077
10255 /xxxx 7700
10256 /xxxx 7737
^C

.SAVE SYS IPL0 ;10200

IPL0.SV is now ready to run as documented in K12IPL.PAL.
Added src/kermit-12/k12ip1.odt.






































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
This is an example of an ODT session to manually enter the IPL1.SV program
followed by an explicit SAVE command.  This is identical to loading the
binary produced by IPL1.PA, a customized version of K12IPL.PAL.  Locations
marked with * are modified according to the REC parameter; locations marked
with ** are modified according to the SEN parameter; locations marked with
*** are modified according to the BRATE parameter.  All values in this
example are obtained using default parameters. All commands are normally
terminated with CR except within ODT.  In ODT all commands are terminated
with LF to automatically advance to the next location, except the final
numeric command which terminates with CR to end the loading. The xxxx
indicates the former contents which are to be ignored.  Exit from ODT is
via ^C.

.ODT

00200/xxxx 6032
00201 /xxxx 1236
00202 /xxxx 6413         **
00203 /xxxx 6031
00204 /xxxx 5203
00205 /xxxx 6036
00206 /xxxx 6416         **
00207 /xxxx 6046
00210 /xxxx 6406         *
00211 /xxxx 6211
00212 /xxxx 4236
00213 /xxxx 5212
00214 /xxxx 5217
00215 /xxxx 4236
00216 /xxxx 5232
00217 /xxxx 7106
00220 /xxxx 7006
00221 /xxxx 7006
00222 /xxxx 3635
00223 /xxxx 4236
00224 /xxxx 5232
00225 /xxxx 1635
00226 /xxxx 3635
00227 /xxxx 2235
00230 /xxxx 0177
00231 /xxxx 5215
00232 /xxxx 7600
00233 /xxxx 6203
00234 /xxxx 5632
00235 /xxxx 0000
00236 /xxxx 0007         ***
00237 /xxxx 6401         *
00240 /xxxx 5237
00241 /xxxx 6406         *
00242 /xxxx 0230
00243 /xxxx 1256
00244 /xxxx 7510
00245 /xxxx 5237
00246 /xxxx 1255
00247 /xxxx 7500
00250 /xxxx 5636
00251 /xxxx 0254
00252 /xxxx 2236
00253 /xxxx 5636
00254 /xxxx 0077
00255 /xxxx 7700
00256 /xxxx 7737
^C

.SAVE SYS IPL1

IPL1.SV is now ready to run as documented in K12IPL.PAL.
Added src/kermit-12/k12ipg.pal.
























































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
/	IPL GENERATING PROGRAM

/	LAST EDIT:	08-OCT-1991	12:00:00	CJL

/	MUST BE ASSEMBLED WITH '/F' SWITCH SET.

/	THIS  IS  A  UTILITY  NAMED  IPLGEN  (AKA  K12IPG) TO CREATE  FIELD0.IPL  (AKA
/	K12FL0.IPL)  AND  FIELD1.IPL (AKA K12FL1.IPL).  THESE FILES ARE IN TURN  MEANT
/	FOR USE WITH THE DIRECT LOADING PROGRAM IPLOAD (AKA K12IPL).  FUTURE  VERSIONS
/	OF K12MIT.SV MAY "GROW" TO USE FIELD TWO, IN WHICH CASE THIS PROGRAM WILL HAVE
/	TO BE CHANGED.

/	THIS PROGRAM ALWAYS RESIDES IN THE NEXT FIELD  BEYOND  K12MIT.SV,  AND CREATES
/	FILES FOR ALL FIELDS LOWER THAN ITS LOADING FIELD.   THIS CURRENTLY REQUIRES A
/	12K MACHINE TO ENCODE ALL LOCATIONS 00000-07577 AND 10000-17577.

/	USAGE:

/	SINCE K12MIT.SV IS A COMPLETE IMAGE FILE, IT MUST BE  LOADED  FIRST  IN  IMAGE
/	MODE, AND THEN OVERLAYED WITH THE BINARY OF THIS ASSEMBLY:

/	.PAL IPLGEN<IPLGEN/E/F			ASSEMBLE IPLGEN PROGRAM.

/	.LOAD K12MIT.SV/I$*IPLGEN/G=20200	LOAD K12MIT.SV IN IMAGE MODE;  THE $
/						INDICATES USING <ESC> TO TERMINATE
/						THE LINE; THEN LOAD IPLGEN AND START.

/	THE  FILES  SYS:FIELD0.IP AND SYS:FIELD1.IP WILL BE CREATED  AND  THE  PROGRAM
/	EXITS TO THE KEYBOARD MONITOR.  THE RESULTANT FILES  MAY  BE EDITED AS LONG AS
/	THE  RULES  OF  .IPL FORMAT ENCODING ARE OBEYED (ADDITIONAL LOWER-CASE  LEADER
/	COMMENTS  SHOULD  BE ADDED AT THE BEGINNING, AND UNRESTRICTED COMMENTS AT  THE
/	END).

/	ERROR MESSAGES:

/	ERROR NUMBER		PROBABLE CAUSE

/	5			ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.

/	6			OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.

/	7			ERROR WHILE CLOSING THE OUTPUT FILE.

/	8			I/O ERROR WHILE ENCODING FILE DATA.
/	EQUATED SYMBOLS.

	CLOSE=	4			/CLOSE OUTPUT FILE
	DFIELD=	2			/PROGRAM LOADS INTO FIELD TWO (ALSO OUTPUT COUNT)
	DFLD=	DFIELD^10		/PROGRAM FIELD FOR CDF INSTRUCTIONS
	ENTER=	3			/ENTER TENTATIVE FILE
	NL0001=	CLA IAC			/LOAD AC WITH 0001
	NL0002=	CLA CLL CML RTL		/LOAD AC WITH 0002
	NL7777=	CLA CMA			/LOAD AC WITH 7777
	SBOOT=	7600			/MONITOR EXIT
	SYSENTR=7607			/CALL SYS: HANDLER HERE
	USERROR=7			/USER SIGNALLED ERROR
	USRENT=	7700			/USR ENTRY POINT WHEN NON-RESIDENT
	USRFLD=	10			/USR FIELD
	WRITE=	4000			/I/O WRITE BIT
	FIELD	DFIELD			/WHERE WE LOAD

	*20				/GET PAST AUTO-INDEX AREA

BUFPTR,	.-.				/OUTPUT BUFFER POINTER
DANGCNT,.-.				/DANGER COUNT FOR OUTPUT FILE
FCNT,	-DFIELD				/FIELD, FILE COUNTER
FNAME,	FILENAM	FIELD0.IP		/OUTPUT FILE NAME FIELD
LATEST,	.-.				/LATEST OUTPUT CHARACTER
OUTRECO,.-.				/OUTPUT RECORD
SCRCASE,.-.				/CURRENT MESSAGE CASE
SCRCHAR,.-.				/LATEST MESSAGE CHARACTER
SCRPTR,	.-.				/MESSAGE POINTER
TEMPTR,	.-.				/TEMPORARY OUTPUT POINTER
WRDADR,	.-.				/WORD ADDRESS
WRDCNT,	.-.				/WORD COUNTER

DSETUP,	.-.				/DATA FIELD SETUP
DATFLD,	CDF	00+.-.			/WILL BE LATEST DATA FIELD
	JMP I	DSETUP			/RETURN TO CALLER
	PAGE				/START AT THE BEGINNING

BEGIN,	NOP				/IN CASE WE'RE CHAINED TO
LOOP,	TAD	(FNAME)			/POINT TO
	DCA	ENTAR1			/STORED FILENAME
	DCA	ENTAR2			/CLEAR SECOND ARGUMENT
	NL0001				/SYS: IS ALWAYS DEVICE ONE
	CDF	DFLD			/INDICATE OUR CALLING FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	(USRENTRY)		/CALL USR ROUTINE
	ENTER				/ENTER TENTATIVE FILENAME
ENTAR1,	.-.				/WILL POINT TO FILENAME
ENTAR2,	.-.				/WILL BE ZERO
	JMP	ENTERR			/ENTER ERROR
	TAD	ENTAR1			/GET RETURNED FIRST RECORD
	DCA	OUTRECORD		/STORE IT
	TAD	ENTAR2			/GET RETURNED EMPTY LENGTH
	IAC				/ADD 2-1 FOR OS/278 CRAZINESS
	DCA	DANGCNT			/STORE AS DANGER COUNT
	NL7777				/INDICATE INITIALIZATION
	JMS I	[PUTBYTE]		/INITIALIZE OUTPUT FILE
	JMS	LEADER			/OUTPUT LEADER
	JMS I	(DOFLD)			/OUTPUT LATEST FIELD'S DATA
	JMS	TRAILER			/OUTPUT TRAILER
	TAD	("Z&37)			/GET <^Z>
CLOSLUP,JMS I	[PUTBYTE]		/OUTPUT A BYTE (^Z OR NULL)
	TAD	BUFPTR			/GET THE OUTPUT BUFFER POINTER
	TAD	(-OUTBUFFER)		/COMPARE TO RESET VALUE
	SZA CLA				/SKIP IF IT MATCHES
	JMP	CLOSLUP			/ELSE KEEP GOING
	NL0001				/GET SYS:'S DEVICE NUMBER
	CDF	DFLD			/INDICATE OUR CALLING FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	(USRENTRY)		/CALL USR ROUTINE
	CLOSE				/CLOSE OUTPUT FILE
	FNAME				/POINTER TO FILENAME
OUTCNT,	.-.				/WILL BE ACTUAL COUNT
	JMP	CLSERR			/CLOSE ERROR
	ISZ	FNAME+2			/BUMP THE FILENAME
	TAD	DATFLD			/GET CURRENT DATA FIELD
	TAD	(10)			/BUMP TO NEXT FIELD
	DCA	DATFLD			/STORE BACK
	ISZ	FCNT			/DONE ALL FIELDS YET?
	JMP	LOOP			/NO, GO DO IT AGAIN
	CIF CDF	00			/YES, GOTO MONITOR FIELD
	JMP I	[SBOOT]			/EXIT TO MONITOR
/	ERROR WHILE OUTPUTTING THE FILE.

PROCERR,NL0002				/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ERROR WHILE CLOSING THE OUTPUT FILE.

CLSERR,	NL0001				/SET INCREMENT
	SKP				/DON'T CLEAR IT

/	OUTPUT FILE TOO LARGE ERROR.

SIZERR,	CLA				/CLEAN UP
	TAD	(3)			/SET INCREMENT
	SKP				/DON'T USE NEXT

/	ENTER ERROR.

ENTERR,	NL0002				/SET INCREMENT
	TAD	(3)			/ADD ON OFFSET
	DCA	ERRNUMBER		/STORE ERROR NUMBER
	CDF	DFLD			/ENSURE OUR FIELD
	CIF	USRFLD			/GOTO USR FIELD
	JMS I	(USRENTRY)		/CALL USR ROUTINE
	USERROR				/USER ERROR
ERRNUMB,.-.				/WILL BE PASSED ERROR NUMBER
/	LEADER ROUTINE.

LEADER,	.-.				/LEADER ROUTINE
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
	LEADMSG				/FOR LEADER MESSAGE
	TAD	DATFLD			/GET CURRENT FIELD
	RTR;RAR				/MOVE DOWN
	AND	(7)			/JUST FIELD NUMBER
	TAD	(NTABLE)		/POINT TO TABLE ELEMENT
	DCA	MSGPTR			/STASH THE POINTER
	TAD I	MSGPTR			/GET THE MESSAGE ADDRESS
	DCA	MSGPTR			/STORE IN-LINE
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
MSGPTR,	.-.				/WILL POINT TO CORRECT MESSAGE
	JMP I	LEADER			/RETURN

/	TRAILER ROUTINE.

TRAILER,.-.				/TRAILER ROUTINE
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
	SAVEMSG				/END OF FILE MESSAGE
	JMS	OUTFLD			/OUTPUT FIELD DIGIT
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
	SVMSG				/.SV BRIDIGING MESSAGE
	JMS	OUTFLD			/OUTPUT FIELD DIGIT
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
	SV0MSG				/0000 BRIDGING MESSAGE
	JMS	OUTFLD			/OUTPUT FIELD DIGIT
	JMS I	(SCRIBE)		/CALL SCRIBE ROUTINE
	SVEMSG				/FINISHING MESSAGE
	JMP I	TRAILER			/RETURN

OUTFLD,	.-.				/OUTPUT FIELD DIGIT ROUTINE
	TAD	DATFLD			/GET OUTPUT FIELD
	RTR;RAR				/MOVE OVER
	AND	(7)			/JUST FIELD DIGIT
	TAD	("0&177)		/MAKE IT ASCII
	JMS I	[PUTBYTE]		/OUTPUT IT
	JMP I	OUTFLD			/RETURN

	PAGE
DOFLD,	.-.				/DO LATEST FIELD ROUTINE
	DCA	WRDADR			/CLEAR WORD ADDRESS
	TAD	(-7600)			/SETUP THE
	DCA	WRDCNT			/WORD COUNT
WRDLUP,	JMS	DSETUP			/GOTO DATA FIELD
	TAD I	WRDADR			/GET A WORD
	DCA	DSETUP			/SAVE IT
	CDF	DFLD			/BACK TO OUR FIELD
	TAD	DSETUP			/GET THE WORD AGAIN
	RTR;RTR;RTR			/WANT HIGH-ORDER HALF FIRST
	JMS	DOBYTE			/OUTPUT HIGH-ORDER BYTE
	TAD	DSETUP			/GET THE WORD AGAIN
	JMS	DOBYTE			/OUTPUT LOW-ORDER BYTE
	ISZ	WRDADR			/BUMP TO NEXT ADDRESS
	TAD	WRDADR			/GET LATEST ADDRESS
	AND	(37)			/JUST LOW-ORDER BITS
	SNA CLA				/SKIP IF NOT AT GOOD BOUNDARY
	JMS	PUTCRLF			/ELSE OUTPUT LINE BREAK
	ISZ	WRDCNT			/DONE ALL WORD YET?
	JMP	WRDLUP			/NO, KEEP GOING
	JMP I	DOFLD			/YES, RETURN TO CALLER

DOBYTE,	.-.				/OUTPUT A SIX-BIT BYTE ROUTINE
	AND	(77)			/JUST SIX BITS
	TAD	(41)			/ADD ON OFFSET TO MAKE IT PRINTABLE
	JMS I	[PUTBYTE]		/OUTPUT IT
	JMP I	DOBYTE			/RETURN
/	<CR>/<LF> ROUTINE.

PUTCRLF,.-.				/OUTPUT <CR>/<LF> ROUTINE
	TAD	("M&37)			/GET A <CR>
	JMS I	[PUTBYTE]		/OUTPUT IT
	TAD	("J&37)			/GET A <LF>
	JMS I	[PUTBYTE]		/OUTPUT IT
	JMP I	PUTCRLF			/RETURN

/	MESSAGE PRINT ROUTINE.

SCRIBE,	.-.				/MESSAGE PRINT ROUTINE
	TAD I	SCRIBE			/GET IN-LINE POINTER ARGUMENT
	DCA	SCRPTR			/STASH THE POINTER
	ISZ	SCRIBE			/BUMP PAST ARGUMENT
	TAD	(140)			/INITIALIZE TO
	DCA	SCRCASE			/LOWER-CASE
SCRLUP,	TAD I	SCRPTR			/GET LEFT HALF-WORD
	RTR;RTR;RTR			/MOVE OVER
	JMS	SCRPRNT			/PRINT IT
	TAD I	SCRPTR			/GET RIGHT HALF-WORD
	JMS	SCRPRNT			/PRINT IT
	ISZ	SCRPTR			/BUMP TO NEXT PAIR
	JMP	SCRLUP			/KEEP GOING

SCRPRNT,.-.				/CHARACTER PRINT ROUTINE
	AND	(77)			/JUST SIX BITS
	SNA				/END OF MESSAGE?
	JMP I	SCRIBE			/YES, RETURN TO ORIGINAL CALLER
	DCA	SCRCHAR			/NO, SAVE FOR NOW
	TAD	SCRCHAR			/GET IT BACK
	TAD	(-"%!200)		/IS IT "%"?
	SNA				/SKIP IF NOT
	JMP	SCRCRLF			/JUMP IF IT MATCHES
	TAD	(-"^+100+"%)		/IS IT "^"
	SNA CLA				/SKIP IF NOT
	JMP	SCRFLIP			/JUMP IF IT MATCHES
	TAD	SCRCHAR			/GET THE CHARACTER
	AND	(40)			/DOES CASE MATTER?
	SNA CLA				/SKIP IF NOT
	TAD	SCRCASE			/ELSE GET PREVAILING CASE
	TAD	SCRCHAR			/GET THE CHARACTER
        JMS I	[PUTBYTE]		/OUTPUT THE CHARACTER
	JMP I	SCRPRNT			/RETURN

SCRCRLF,JMS	PUTCRLF			/OUTPUT <CR>/<LF>
	JMP I	SCRPRNT			/RETURN

SCRFLIP,TAD	SCRCASE			/GET CURRENT CASE
	CIA				/INVERT IT
	TAD	(140+100)		/ADD SUM OF POSSIBLE VALUES
	DCA	SCRCASE			/STORE NEW INVERTED CASE
	JMP I	SCRPRNT			/RETURN
	PAGE
PUTBYTE,.-.				/OUTPUT A BYTE ROUTINE
	SPA				/ARE WE INITIALIZING?
	JMP	PUTINITIALIZE		/YES
	AND	(177)			/JUST IN CASE
	DCA	LATEST			/SAVE LATEST CHARACTER
	TAD	LATEST			/GET LATEST CHARACTER
	JMP I	PUTNEXT			/GO WHERE YOU SHOULD GO

PUTNEXT,.-.				/EXIT ROUTINE
	JMP I	PUTBYTE			/RETURN TO MAIN CALLER

PUTINIT,CLA				/CLEAN UP
	TAD	OUTRECORD		/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD		/STORE IN-LINE
	DCA I	(OUTCNT)		/CLEAR ACTUAL FILE LENGTH
PUTNEWR,TAD	(OUTBUFFER)		/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
PUTLOOP,JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	TAD	BUFPTR			/GET POINTER VALUE
	DCA	TEMPTR			/SAVE FOR LATER
	ISZ	BUFPTR			/BUMP TO NEXT
	JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	JMS	PUTNEXT			/GET A CHARACTER
	RTL;RTL				/MOVE UP
	AND	(7400)			/ISOLATE HIGH NYBBLE
	TAD I	TEMPTR			/ADD ON FIRST BYTE
	DCA I	TEMPTR			/STORE COMPOSITE
	TAD	LATEST			/GET LATEST CHARACTER
	RTR;RTR;RAR			/MOVE UP AND
	AND	(7400)			/ISOLATE LOW NYBBLE
	TAD I	BUFPTR			/ADD ON SECOND BYTE
	DCA I	BUFPTR			/STORE COMPOSITE
	ISZ	BUFPTR			/BUMP TO NEXT
	TAD	BUFPTR			/GET LATEST POINTER VALUE
	TAD	(-2^200-OUTBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	PUTLOOP			/KEEP GOING
	ISZ	DANGCNT			/TOO MANY RECORDS?
	SKP				/SKIP IF NOT
	JMP I	(SIZERR)		/JUMP IF SO
	CDF	DFLD			/SET OUR FIELD
	CIF	00			/GOING TO SYSTEM FIELD
	JMS I	(SYSENTRY)		/CALL I/O HANDLER
	2^100+DFLD+WRITE		/WRITE SOME PAGES FROM OUTPUT BUFFER
	OUTBUFFER			/BUFFER ADDRESS
PUTRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP I	(PROCERR)		/OUTPUT ERROR!
	ISZ I	(OUTCNT)		/BUMP ACTUAL LENGTH
	ISZ	PUTRECORD		/BUMP TO NEXT RECORD
	JMP	PUTNEWRECORD		/KEEP GOING
	PAGE
/	TEXT MESSAGES.

LEADMSG,TEXT	"LEADER FOR DIRECT LOAD FILE WHICH MUST BE IN LOWER CASE%"
	TEXT	"%FILE CONTAINS KERMIT DATA IN IPL ENCODED FORMAT%%"
	TEXT	"THIS FILE CONTAINS DATA FOR FIELD"
ONEMSG,	TEXT	" ONE%%^"
SAVEMSG,TEXT	"END OF DATA%%^A^FTER THE PROGRAM EXITS BACK TO THE MONITOR, "
	TEXT	"YOU SHOULD SAVE THE DATA WITH:%%.^SAVE SYS FIELD^"
SVMSG,	TEXT	".^SV "
SV0MSG,	TEXT	"0000-"
SVEMSG,	TEXT	"7577=0%"
ZEROMSG,TEXT	" ZERO%%"
/	DIGIT MESSAGE POINTER TABLE.

NTABLE,	ZEROMSG				/POINTER TO ZERO MESSAGE
	ONEMSG				/POINTER TO ONE MESSAGE

	PAGE				/GET TO A GOOD BOUNDARY

	OUTBUFF=.			/OUTPUT BUFFER HERE

	$				/THAT'S ALL FOLK!
Added src/kermit-12/k12ipl.doc.




































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Initial Program Load (.IPL) format description

    Some of the latest KERMIT-12 binary files are encoded in a
specialized format designed to allow direct memory loading without an
elaborate protocol such as KERMIT.  This document will describe the
internal encoding of this format known as IPL, and related subjects.

    The Initial Program Load (.IPL) format is designed expressly for
use with the IPL loading program.  An error-free connection to a
serving host is required as no checking or recovery is performed by
the program. (The program itself is meant to be keyed in on the
target PDP-8 where there is no other means of acquiring KERMIT-12.)
The format is also meant to be "printable" in the same sense as
ENCODE, .BOO, or uuencode files.  This makes the file format more
"friendly" to the host system, and allows simple editing of the file
to insert comments, etc.

    An .IPL file starts with at least one lower-case character (not
counting `) meaning any character in the range 141-177 octal.  Any number
of similar characters may follow immediately to create an arbitrary length
leader, but the lower-case requirement must be strictly enforced.  Once a
non-lower-case character is encountered, it is accepted as the first data
character.  Data characters continue throughout the rest of the file until
the next occurrence of a lower-case character which ends the loading.  Any
characters past this point are ignored and can be freely added as a
trailing comment.

    Throughout the entire .IPL file, control characters and <SPACE>
(000-040 octal) are ignored and may be used within the leader to make
the file comment(s) more readable.  In some loading situations, <NUL>
or <SPACE> characters may be pre-pended to the file to give the
operator sufficient time to run down the hall between machines in
different rooms to start the PDP-8 loading program after first
starting the server.  Data lines are broken every 64 characters with
<CR>/<LF> to make the file more "readable" to the host system.

    Each data character in the body of the file represents six bits of
PDP-8 data encoded in the form (value+041 octal).  This causes 00 octal to
be represented as ! through 77 octal to be represented as `.  Data
characters are taken in pairs where the first character is the upper six
bits and the second is the lower six bits of a twelve bit word.  Loading is
implied to start at 0000 of the loading field and continues through at most
7577.  The operating system generally prohibits loading into 7600-7777.
This is not a problem since KERMIT-12 conforms to these limitations as a
matter of design.  If the loading field is 3 or greater (or possibly 2 in
certain configurations) then the entire field can possibly be loaded.  This
is never recommended because such a file would violate loading restrictions
of certain configurations.  (The general rule is to never load into
x7600-x7777 for any field x in the range 0-7.)

    The loading field itself is not contained in the file data, so it is
the user's responsibility to setup the loading program parameters
accordingly.  File comments (in lower-case if in the leader) often contain
this information to aid the user.  After loading is complete, the loading
program exits to the operating system.  The user must save the recently
loaded data as an image (.SV) file by providing explicit arguments to a
SAVE command.  It is recommended that the appropriate command be contained
in the trailer of the .IPL file as a comment.  Placement at the end of the
file allows the commentary to be in upper-case, thus allowing it to be
given in the exact form required by OS/8.  Certain characters such as "."
are required in the complete documentation of these commands which are not
allowed in the leader area.  The leader can contain a comment referring the
user to the end of the file for the information itself.

[end of file]
Added src/kermit-12/k12ipl.pal.




































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
/	INITIAL PROGRAM LOADER

/	LAST EDIT:	06-OCT-1991	05:00:00	CJL

/	MAY BE ASSEMBLED WITH '/F' SWITCH SET.

/	THIS PROGRAM IS USED TO  LOAD  BINARY  PROGRAMS  IN  .IPL FORMAT DIRECTLY.  AN
/	ERROR-FREE PATH IS ASSUMED BETWEEN THE PDP-8 (OR DECMATE) AND THE DATA SERVER.
/	SUCH A CONNECTION COULD BE ESTABLISHED BETWEEN THE PDP-8 AND A NEARBY PC USING
/	A SHORT RS-232 CABLE WITH NULL MODEM.  THIS UTILITY IS WRITTEN FOR THE EXPRESS
/	PURPOSE OF LOADING KERMIT-12 ON PDP-8 SYSTEMS WITHOUT IT.   ONCE KERMIT-12 HAS
/	BEEN LOADED, ITS USE SUPERSEDES THIS PROGRAM ENTIRELY.

/	THERE IS NO FLOW-CONTROL PROTOCOL PER SE BETWEEN  SYSTEMS,  SINCE  THE UTILITY
/	STORES  DATA  DIRECTLY  INTO  PDP-8  MEMORY  AND  THEREFORE  DOESN'T   REQUIRE
/	SYNCHRONIZATION DELAYS.    INITIAL  SYNCHRONIZATION  CAN  BE  ACCOMPLISHED  BY
/	SENDING A SINGLE  CHARACTER FROM THE PDP-8 TO THE SERVER SIDE WHICH STARTS THE
/	TRANSMISSION.  ALTERNATIVELY THE  PDP-8 PROGRAM CAN BE STARTED FIRST, THEN THE
/	SERVER CAN SEND DATA DIRECTLY TO THE PDP-8;  THIS ASSUMES THE ABILITY TO START
/	THE SERVER TRANSMISSION FROM THE SERVER'S END.

/	THIS  PROGRAM  IS  FOR  ANY MODEL PDP-8 WITH A  KL-STYLE  REMOTE  LINE  SERIAL
/	INTERFACE  OR  EQUIVALENT.   DEFAULT PARAMETER VALUES ARE CONSISTENT WITH  THE
/	DISTRIBUTION SETTINGS FOR KERMIT-12 ITSELF AND ARE EASILY CHANGED.  IT  CAN BE
/	MODIFIED FOR USE ON VARIOUS DECMATE MODELS, BUT WILL BECOME SOMEWHAT LARGER IN
/	THE  PROCESS  DUE  TO  THE  MUCH  GREATER  COMPLEXITY  OF  THE VARIOUS DECMATE
/	COMMUNICATIONS INTERFACES UNLESS THE COMPATIBLE PRINTER PORT IS CHOSEN (DEVICE
/	32/33).

/	THIS PROGRAM SHOULD ONLY BE USED  IF  NO  OTHER  METHOD  IS  AVAILABLE  AS THE
/	ASSUMPTION OF AN ERROR-FREE CONNECTION IS UNRELIABLE.  DISTRIBUTION PATHS SUCH
/	AS INTERNET FTP OR CONTACTING THE AUTHOR CAN  YIELD  COMPLETE  COPIES  OF  THE
/	PROGRAM DISTRIBUTION ON APPROPRIATE MEDIA WHERE APPLICABLE.
/	USAGE:

/	THIS PROGRAM IS  RESTRICTED  TO  A  SINGLE-FIELD  LOAD  ONLY.  SEVERAL VARIANT
/	VERSIONS MUST BE CREATED  TO  COMPLETELY LOAD KERMIT-12.  (AS OF THIS WRITING,
/	ONLY A FIELD ZERO AND  FIELD  ONE VERSION NEED BE CREATED.  HOWEVER, KERMIT-12
/	MAY BECOME LARGER!).  THE EXAMPLE GIVEN BELOW ILLUSTRATES USAGE FOR FIELD ONE.
/	REPEATING THE PROCESS WITH THE INTENDED CONTENTS  OF  ALL  OTHER  FIELDS  WILL
/	(EVENTUALLY) YIELD AN ENTIRE COPY OF KERMIT-12:

/	.R IPL1 (OR RUN DEV IPL1)

/	[PRESS AN APPROPRIATE KEY (SUCH AS CR) TO START WAITING FOR THE TRANSFER]

/	[THE DATA IS TRANSFERRED FROM THE OTHER SYSTEM AT THIS TIME AND THE PROGRAM
/	EXITS AUTOMATICALLY TO THE KEYBOARD MONITOR.]

/	.SAVE DEV FIELD1.SV 10000-17577=0

/	CHANGING  ALL  OF THE ONES IN  THE  ABOVE  EXAMPLE  TO  ZERO  WILL  YIELD  THE
/	FIELD-ZERO LOAD FILE FIELD0.SV AS WELL.   DEV  IS  ANY  CONVENIENT OS/8 DEVICE
/	SUCH AS SYS OR DSK.  (IT ISN'T  CRITICAL SINCE THESE FILES CAN BE DELETED ONCE
/	KERMIT-12 IS CREATED.) ONCE ALL PORTIONS OF KERMIT-12 HAVE  BEEN OBTAINED, THE
/	FOLLOWING COMMANDS WILL COMBINE THEM INTO THE STANDARD RELEASE FILE K12MIT.SV:

/	.LOAD DEV:FIELD1.SV/I,FIELD0.SV/I$	LOAD IMAGE  FILES FIELD1.SV, FIELD0.SV
/						WITH  /I SWITCH SET.  (FUTURE VERSIONS
/						MAY REQUIRE LENGTHENING THE COMMAND TO
/						ADD  MORE  FILES  SUCH  AS  FIELD2.SV,
/						FIELD3.SV,  ETC.)  $  INDICATES  USING
/						<ESC> TO TERMINATE LINE.

/	.SAVE DEV K12MIT=1			SAVE  COMPLETED  FILE ON ANY AVAILABLE
/						DEVICE DEV (PREFERABLY SYS).

/	CREATING THE VARIANT VERSIONS.

/	ONLY  ONE PARAMETER NEED BE CHANGED TO PRODUCE THE VARIOUS VERSIONS  REQUIRED.
/	SETTING  DFIELD=0  CREATES  A  VERSION  USED  TO  OBTAIN  THE FIELD-ZERO DATA.
/	SETTING DFIELD=1  CREATES  THE  FIELD-ONE  VERSION.    LEGAL VALUES FOR DFIELD
/	EXTEND UP TO  SEVEN.    THE  DEFAULT  VALUE IS ZERO.  NOTE THAT THE FIELD-ZERO
/	VERSION LOADS INTO FIELD  ONE  WHILE  ALL OTHER VERSIONS LOAD INTO FIELD ZERO.
/	THIS IS NECESSARY TO ALLOW  UNRESTRICTED  FILE  LOADING  WITHIN  THE  SELECTED
/	FIELD.   (OS/8 ITSELF GENERALLY BARS LOADING INTO 7600-7777 OF ANY FIELD, THUS
/	LOADING IS ACTUALLY RESTRICTED TO 0000-7577 OF THE SELECTED FIELD.)
/	OTHER ASSEMBLY PARAMETERS.

/	SETTING REC= 	XX			SETS THE REMOTE RECEIVE DEVICE CODE TO
/						XX (DEFAULT VALUE IS 40).

/	SETTING SEN=	XY			SETS THE REMOTE  TRANSMIT  DEVICE CODE
/						TO XY (DEFAULT VALUE IS 41).

/	SETTING BRATE=	NN			SETS THE  BAUD  RATE (FOR SYSTEMS THAT
/						SUPPORT  THIS  FEATURE  SUCH  AS   THE
/						VT-78) FROM A TABLE OF VALUES  (00-17)
/						AS FOLLOWS:

/						NN (OCTAL)	BAUD RATE

/						00		50
/						01		75
/						02		110
/						03		134.5
/						04		150
/						05		300
/						06		600
/						07		1200
/						10		1800
/						11		2000
/						12		2400
/						13		3600
/						14		4800
/						15		7200
/						16		9600
/						17		19200

/						(THE  DEFAULT  VALUE  IS  07  FOR 1200
/						BAUD COMMUNICATIONS.)
/	ASSEMBLY INSTRUCTIONS FOR ANY VARIANT VERSION.

/	ASSUMING A  CUSTOMIZED  FILE  SETUP  FOR  LOADING  FIELD  ZERO  DATA IS CALLED
/	IPL0.PA, THE FOLLOWING COMMANDS WILL CREATE IPL0.SV:

/	.PAL IPL0<IPL0/E/F			ASSEMBLE VARIANT FOR FIELD ZERO
/	.LOAD IPL0				LOAD THE BINARY
/	.SAVE DEV IPL0 ;10200=0			SAVE THE IMAGE ON ANY DEV (SUCH AS
/						SYS).

/	NOTE THE NON-STANDARD STARTING ADDRESS FOR THE FIELD ZERO VERSION (10200).

/	ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ONE DATA IS CALLED IPL1.PA,
/	THE FOLLOWING COMMANDS WILL CREATE IPL1.SV:

/	.PAL IPL1<IPL1/E/F			ASSEMBLE VARIANT FOR FIELD ONE
/	.LOAD IPL1				LOAD THE BINARY
/	.SAVE DEV IPL1=0			SAVE  THE  IMAGE  ON  ANY DEV (SUCH AS
/						SYS).

/	IF NECESSARY FOR  FIELD TWO AND FOLLOWING, ADDITIONAL VERSIONS CAN BE CREATED.
/	THE SAVE COMMAND WILL BE THE SAME AS FOR IPL1.
/	EQUATED SYSMBOLS.

/	LOADING FIELD DEFINED HERE.  REMOVE THE / FROM THE APPROPRIATE LINE.

/	DFIELD=	0			/LOAD FIELD ZERO DATA
/	DFIELD=	1			/LOAD FIELD ONE DATA

	IFNDEF	DFIELD	<DFIELD=0>	/DEFINE LOADING FIELD ZERO BY DEFAULT

/	REMOTE LINE RECEIVE DEVICE  CODE  DEFINED  HERE.  REMOVE THE / AND FILL IN THE
/	APPROPRIATE VALUE.

/	REC=	40			/REMOTE RECEIVE DEVICE CODE

	IFNDEF	REC	<REC=	40>	/DEFAULT RECEIVE DEVICE CODE IS 40

/	REMOTE LINE TRANSMIT DEVICE CODE  DEFINED  HERE.  REMOVE THE / AND FILL IN THE
/	APPROPRIATE VALUE.

/	SEN=	41			/REMOTE TRANSMIT DEVICE CODE

	IFNDEF	SEN	<SEN=	41>	/DEFAULT TRANSMIT DEVICE CODE IS 41

/	BAUD RATE CONTROL VALUE DEFINED HERE FOR VT-78, ETC.  REMOVE THE / AND FILL IN
/	THE APPROPRIATE VALUE.

/	BRATE=	7			/BAUD RATE CONTROL VALUE

	IFNDEF	BRATE	<BRATE=	7>	/DEFAULT IS VALUE FOR 1200 BAUD

/	REMOTE LINE IOT DEFINITIONS.

/	RECEIVE DEFINITIONS.

/	RKCCIOT=REC^10+6002		/CLEAR REMOTE INPUT FLAG, AC
	RKRBIOT=REC^10+6006		/READ REMOTE, CLEAR FLAG
	RKSFIOT=REC^10+6001		/SKIP ON REMOTE INPUT FLAG

/	TRANSMIT DEFINITIONS.

	RSBIOT=	SEN^10+6003		/SET BAUD RATE FROM AC[8-11]
	RTLSIOT=SEN^10+6006		/TRANSMIT CHARACTER, CLEAR FLAG
/	RTSFIOT=SEN^10+6001		/SKIP ON TRANSMIT FLAG

/	OTHER DEFINITIONS.

	DATFLD=	DFIELD^10		/LOADING FIELD FOR CDF INSTRUCTIONS
/	THE PROGRAM CODE STARTS HERE.

	IFZERO	DFIELD	<FIELD	1>	/FIELD ZERO VERSION LOADS HERE

	IFNZRO	DFIELD	<FIELD	0>	/ALL OTHER VERSIONS LOAD HERE

	*200				/START AT THE BEGINNING

START,	KCC				/CLEAR KEYBOARD FLAG AND AC
	TAD	INPUT			/GET BAUD RATE CONTROL VALUE
	RSBIOT				/SETUP THE BAUD RATE
/	RKSFIOT				/**** FOR DECMATE PRINTER PORT ONLY ****
	KSF				/WAIT FOR
	JMP	.-1			/KEYBOARD INPUT
	KRB				/GET THE CHARACTER
	RTLSIOT				/OUTPUT TO REMOTE
	TLS				/LET USER SEE IT ALSO
	RKRBIOT				/CLEAR REMOTE INPUT FLAG NOW
	CDF	DATFLD			/SETUP LOADING FIELD
	JMS	INPUT			/TRY TO GET A VALID DATA CHARACTER
	JMP	.-1			/LEADER FOUND, IGNORE IT
	JMP	GOTDATA			/LOAD FIRST DATA CHARACTER THERE

DATLUP,	JMS	INPUT			/TRY TO GET A VALID DATA CHARACTER
	JMP	LOADEND			/TRAILER FOUND, GO FINISH THERE
GOTDATA,CLL RTL;RTL;RTL			/MOVE HALF-WORD UP
	DCA I	LOADPTR			/STORE HIGH-ORDER HALF
	JMS	INPUT			/TRY TO GET A VALID DATA CHARACTER
	JMP	LOADEND			/TRAILER FOUND, GO FINISH THERE
	TAD I	LOADPTR			/COMBINE LATEST WITH PREVIOUS
	DCA I	LOADPTR			/STORE BACK COMPOSITE
	ISZ	LOADPTR			/BUMP TO NEXT
L177,	177				/CONSTANT 0177; HERE JUST IN CASE IT SKIPS
	JMP	DATLUP			/GO BACK FOR MORE

/	COMES HERE WHEN LOADING IS DONE.

LOADEND,CLA!400				/CLEAN UP; ALSO CONSTANT 7600
	CIF CDF 00			/GOING TO MONITOR FIELD
	JMP I	LOADEND/(7600)		/EXIT TO MONITOR

LOADPTR,0000				/LOADING POINTER
INPUT,	BRATE				/INPUT ROUTINE; ALSO HOLDS BAUD RATE VALUE
INPAGN,	RKSFIOT				/ANY REMOTE INPUT?
	JMP	INPAGN			/NO, WAIT FOR IT
	RKRBIOT				/YES, READ IT IN
	AND	L177/(177)		/REMOVE PARITY BIT
	TAD	L7737/(-41)		/COMPARE TO LOWER LIMIT
	SPA				/SKIP IF GREATER THAN THAT
	JMP	INPAGN			/ELSE IGNORE IT
	TAD	L7700/(-100)		/COMPARE TO UPPER LIMIT
	SMA				/SKIP IF IN RANGE
	JMP I	INPUT			/ELSE TAKE IMMEDIATE RETURN ON LEADER/TRAILER
	AND	L77/(77)		/REMOVE JUNK BITS
	ISZ	INPUT			/BUMP RETURN
	JMP I	INPUT			/TAKE SKIP RETURN TO CALLER

L77,	77				/CONSTANT 0077
L7700,	7700				/CONSTANT 7700
L7737,	7737				/CONSTANT 7737

	$				/THAT'S ALL FOLK!
Added src/kermit-12/k12mit.ann.




















































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
Date: Sat, 11 Jul 92 15:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: A few more release files for Kermit-12

    Now available are two new versions of K12DEC and K12ENC, which
have a new feature for image transfer of an entire device optionally
split into two parts.  This comes at the request of a user, and was
quite easy to add.  As before, the sources document how to use the
programs, etc.

    The new files have been installed in the regular places:

BITNET/EARN       Internet
KERMSRV@CUVMA     watsun.cc.columbia.edu     Description

 K12MIT   ANN      kermit/d/k12mit.ann        Announcement of KERMIT-12
 K12MIT   UPD      kermit/d/k12mit.upd        Release update (this) file
 K12ENB   PAL      kermit/d/k12enb.pal        .BOO-format encoding program
 K12DEB   PAL      kermit/d/k12deb.pal        .BOO-format decoding program
 K12MIT   NOT      kermit/d/k12mit.not        Release notes file
 K12MIT   DSK      kermit/d/k12mit.dsk        Description of RX02 diskettes

------------------------------
Date: Wed, 11 Mar 92 15:52:25 EST
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: A few more release files for Kermit-12

    Now available are two new versions of K12DEC and K12ENC, which
have a new feature for image transfer of an entire device.  This
comes at the request of several users, and was quite easy to add.  As
before, the sources document how to use the programs, etc.

    I am working on an upgrade (specifically a handler) for OS/278 to
allow complete transfer of RX50 diskettes as an encoded ASCII-fied
file.  This utility merely handles records available to the normal
file structure, but in the OS/278 RX50 case (from DEC) this is not
the entire disk structure.  In part this is a safety feature, so you
can't access the "slushware" tracks; you can't transfer an entire
image of an RX50 currently.  When the system is upgraded with a
suitable handler, the encoder and decoder gain access to the entire
device; all other system utilities can utilize the entire RX50 as an
effectively larger device.

    If the handler project takes too long (it is actually quite
involved surprisingly enough) I will possibly resort (by popular
demand) to releasing an interim program that does its own RX50 I/O as
a special case of encode and decode.  That would be withdrawn later
when the handler is available.  (DECmates are becoming available to
various people around the world, but they don't have the support
software to get it running; this method would allow them to get their
machines up after they had merely an OS/278 bootable disk (available
from DECUS) and the Kermit-12 files :-).)

    The two new utilities are currently useful for other devices.
For example, an entire OS/8 RX01 or RX02 can be encoded as a file.
With the WPS-oriented handlers installed (commonly available), images
of an RX01 WPS document disk can be encoded/decoded directly.  (This
even includes bootable WPS RX01 systems diskettes, or even RT-11 RX01
disks!)  The existant WPS/COS-style handlers allow transfer of any
RX01 as long as track zero can be ignored.  This is generally the
case on RX01/02, but NOT RX50, thus the above problem.

    The new files have been installed in the regular places:

BITNET/EARN       Internet
KERMSRV@CUVMA     watsun.cc.columbia.edu     Description

 K12MIT   ANN      kermit/d/k12mit.ann        Announcement of KERMIT-12
 K12MIT   UPD      kermit/d/k12mit.upd        Release update (this) file
 K12ENB   PAL      kermit/d/k12enb.pal        .BOO-format encoding program
 K12DEB   PAL      kermit/d/k12deb.pal        .BOO-format decoding program

------------------------------
Date: Mon Oct 21 1991 12:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Release of Additional Kermit-12 Utilities
Keywords: .BOO, PDP-8, PDP-12, VT-78, DECmate, OS/8
Xref: DEC PDP, See PDP

    This is a release of companion utilities to KERMIT-12 for the
purpose of enhancing file distribution.  Two areas are addressed:  1)
Initial program acquisition,  2) Binary file encoding.

1)  Utilities are provided to create and load copies of KERMIT-12 "on
the fly" from a server such as a remote time-sharing system or a
local PC on the other end of a "clean" connection to the PDP-8.

    Unfortunately, most PDP-8 family systems lack a communications
predecessor to KERMIT-12.  Most communications applications were
limited to terminal emulation only, so it is rare that any PDP-8
system has an existing utility sufficient to acquire KERMIT-12.  (Of
course some sites have prior versions of KERMIT-12 already.)

    Assuming an error-free serial connection to the other system, it
is possible to down-load KERMIT-12 directly into the PDP-8 memory
without a protocol.  This is similar to the process used for years by
DEC field service to load paper-tape copies of diagnostics.  Loading
is limited to a single PDP-8 field at a time.  Performing several
load operations yields intermediary image files which can be combined
into K12MIT.SV identical to the release version (except for
irrelevant loading artifacts which is a consequence of the operating
system itself).

    The format chosen for Initial Program Load (.IPL) is an encoding
that yields ASCII files that should pass through any system with
ease.  The scenario of loading is assumed to be either direct
system-to-system, or between a remote system and one of its
terminals.  All control characters (such as CR and LF) are ignored,
thus the encoded files contain frequent line breaks to make the
encoded file pallatable to the serving system.  Strictly lower-case
letter messages are added at the beginning and end of the file to
serve as leader trailer fields as well as file documentation.  Please
note that while spaces are insignificent, the rest of the ASCII
character set is used for loading information, so editing of .IPL
files must scrupulously avoid changes to the "body" of the file.

    A simple program (K12IPL.PAL) is provided for .IPL loading of a
single field.  The user must customize it for local requirements, and
then enter two variant forms of the loader. (Future releases could
require additional variants to be created.  The current release
occupies two fields.)  This process is similar to customizing the
communications requirements of KERMIT-12 itself.  The program is
sufficiently small to allow manual entry into the system debugger
(ODT) directly.  Examples of such an entry session are provided as
K12IP0.ODT and K12IP1.ODT.  The source program may also be retyped by
any available means (TECO, EDIT, etc.) if desired.  Only standard
PDP-8 peripherals are supported such as KL8E, KL8-JA, etc., as
opposed to KERMIT-12 itself which supports various DECmate
communications hardware as well.  It was felt that the greatly
increased complexity of supporting the DECmate communications ports
would make this process too unwieldy.  However, it is possible to
load the data through the DECmate's printer port.  The VT-78 and all
prior PDP-8 models are fully supported.

    Distribution files include K12FL0.IPL and K12FL1.IPL which are
the encoded copies of field zero and field one respectively.
K12IPL.DOC is a discussion of the .IPL encoding format itself.
K12IPG.PAL is the utility used to create K12FL0.IPL and K12FL1.IPL
from the standard release file K12MIT.SV. (K12MIT.SV is itself
distributed in encoded form as K12MIT.ENC and now also K12MIT.BOO
(see below).  K12IPG can be used with other programs for similar
purposes if required.)

2)  Utilities are provided for encoding and decoding arbitrary OS/8
files using the popular .BOO format encoding scheme.  .BOO format
should be compatible across dis-similar systems thus avoiding
intermediary "hazards."

    While quite popular in the MS-DOS world for file distribution
purposes, .BOO format as originally designed has an inherent weakness
that makes reliable use on OS/8 family systems impossible.  I have
designed an extension to the format to make .BOO format sufficiently
reliable to allow implementation of an encoder and decoder for OS/8
systems.  Note that ENCODE format is still the format of choice for
file distribution because of its more robust nature, but the shorter
files created by a .BOO encoder may be desirable in certain
circumstances.  .BOO format files cannot pass through WPFLOP "paths"
to distribute files on DECmates or VT-78, so ENCODE format is
mandatory on systems used this way.

    The relevant problem with .BOO format has to do with file length
anomalies that are a consequence of the format itself.  .BOO files
either end on a repeat compression field or a complete three-byte
data field expressed as four characters, each only six bits
significant.  Should a file end with only one or two eight-bit data
bytes, two or one additional null bytes will be appended to pad out
the last data field.  This leads to files that are one or two bytes
longer than intended.  At least this is the behavior on systems like
MS-DOS which maintain a file byte count.  Since OS/8 files are
multiples of whole records, each of which can be viewed as a
collection of 384 bytes, any change in a file's length of even a
single extra null byte will cause the creation of an extraneous whole
record.  Besides wasting space, it is conceivable that an OS/8 file
corrupted in this manner could actually be dangerous to use!  Note
also that this problem can be cumulative in that repeated
transmission between systems where the file is stored locally in some
decoded form, and then encoded locally before transmission to another
site, can cause the problem to worsen indefinitely.  Clearly, .BOO
format must be firmed up to prevent this form of file corruption
before it can be used safely on PDP-8 systems.  (It has also been
noted that widely distributed .BOO encoding programs exist on certain
systems which exhibit defects such as erroneous appendage of
additional null bytes onto the end of the file not indicated by the
file's contents.  This is clearly a program bug and not an inherent
problem with .BOO format design.)

    The method chosen to correct the existing .BOO anomaly is to
append a correction field to the end of every file requiring it.  The
basic correction unit is ~0 which means literally a repeat
compression field with a count of zero.  This construct is ignored by
most .BOO decoders because it contributes nothing to the file. (At
the bare minimum, .BOO decoders should implement the robustness of
ignoring this type of data.  It is conceivable that due to design
error, a decoding program could "blow up" when encountering this
data.  Imagine a file lengthened by 2^32 null bytes!  The exact
amount of extraneously generated null bytes would likely be 2^{how
many bits wide are integers on the machine} or one less than that.)

    .BOO-encoded files may now contain either ~0 or ~0~0 at the end
to indicate whether one or two bytes are to be "taken back"
respectively.  Tests on MSBPCT.BAS and MSBPCT.C as currently
distributed by CUCCA indicate that these corrections are perfectly
ignored, thus decoded files are erroneously inflated by one or two
bytes.  This is the expected behavior of these older decoders.  When
used with PDP-8 DEBOO.SV (distributed in source form as K12DEB.PAL),
the correct file length is maintained.  PDP-8 ENBOO.SV (distributed
in source form as K12ENB.PAL) is the first encoding program that
creates the correction field as necessary.  It is hoped that this
"pioneering" effort will cause other systems' encoders and decoders
to be similarly updated.

    Overall program operation for the encoder and decoder is
identical to the equivalent programs for ENCODE format.
Documentation is contained in the source files.  As in the ENCODE
format decoding program, the target file name can be taken from the
original file name imbedded within the file, or optionally the user
can specify a target file name as well as a target device.  When
encoding, the imbedded file name will always be the original name of
the file supplied as input to the encoder.  The user can specify any
valid combination of output file name and device for the resultant
encoded file.

    OS/8 files passed through ENBOO/DEBOO are packed/unpacked
according to the standard OS/8 "3 for 2" scheme to ensure byte
accuracy where relevant.  This allows files which are ASCII, but too
"delicate" for ordinary transfer to be sent between unlike systems
with total accuracy.  This includes any file where the precise
placement of CR and LF may be critical, or contains unusual
characters in the file such as BEL or ESC.  A perfect example of this
is the interchange of TECO macros between PDP-8s (used with OS/8
TECO.SV) and IBM-PCs (used with MS-DOS TECO.EXE) with a unix system
as an intermediary storage site.  Both end systems use like line
termination schemes incompatible with the intermediary system.  Since
both systems support .BOO format, the files can still be sent without
loss.

    Most of the existing K12MIT-related files are unchanged.
K12MIT.DSK is updated to reflect all new files pertaining to .IPL or
.BOO utilities.  K12MIT.ANN and K12MIT.UPD are updated per this
announcement.  All files distributed in ENCODE format are replicated
in .BOO format.

    The new files have been installed in the regular places:

BITNET/EARN       Internet
KERMSRV@CUVMA     watsun.cc.columbia.edu     Description

 K12MIT   ANN      kermit/d/k12mit.ann        Announcement of KERMIT-12
 K12MIT   UPD      kermit/d/k12mit.upd        Release update (this) file
 K12MIT   DSK      kermit/d/k12mit.dsk        Description of RX02 diskettes
 K12MIT   NOT      kermit/d/k12mit.not        Release notes file
 K12IPL   PAL      kermit/d/k12ipl.pal        .IPL loading program
 K12IP0   ODT      kermit/d/k12ip0.odt        ODT session creating IPL0.SV
 K12IP1   ODT      kermit/d/k12ip1.odt        ODT session creating IPL1.SV
 K12FL0   IPL      kermit/d/k12fl0.ipl        .IPL encoding of K12mit (FL0)
 K12FL1   IPL      kermit/d/k12fl1.ipl        .IPL encoding of K12mit (FL1)
 K12IPG   PAL      kermit/d/k12ipg.pal        .IPL-format encoding program
 K12IPL   DOC      kermit/d/k12ipl.doc        Description of .IPL format
 K12ENB   PAL      kermit/d/k12enb.pal        .BOO-format encoding program
 K12DEB   PAL      kermit/d/k12deb.pal        .BOO-format decoding program
 K12MIT   BOO      kermit/d/k12mit.boo        .BOO encoding of KERMIT-12
 K12PL8   BOO      kermit/d/k12pl8.boo        .BOO encoding of PAL8 Ver B0
 K12CRF   BOO      kermit/d/k12crf.boo        .BOO encoding of CREF Ver B0
 K12GLB   BOO      kermit/d/k12glb.boo        .BOO encoded TECO file macro

[Ed. - Thanks, Charles!  Additional information can be found in the new
file, k12mit.not (K12MIT NOT), a message from Charles to the "PDP-8 lovers"
mailing list.]

------------------------------
Date: Thu Sep 6 1990 11:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Announcing  KERMIT-12 Version 10g
Keywords: PDP-8, PDP-12, VT-78, DECmate, OS/8
Xref: DEC PDP, See PDP

    This is a maintenance release of KERMIT-12.  A minor problem
relating to incorrect CPU identification messages has been fixed.
The problem only appeared when the CPU was a KK-8A single-board CPU;
this configuration was previously untested.  Thanks to Johnny
Billquist of Sweden for his assistance in pinning down the problem.

    KERMIT-12 operation was not affected in any other way, as only
the DECmate-specific identification is crucial; earlier PDP-8 family
members are treated in a generic fashion except for the "frill" of
model identification (all PDP-8, PDP-12, VT-78 models use
software-compatible port hardware;  all DECmates are incompatible and
must be handled individually).  We are still looking for volunteers
to test the various DECmate III and DECmate III+ configurations.

    The rest of the release concerns the encoding of files into the
"ASCII-fied" format.  The format has been modified to be more robust,
since the original method has proven itself to be problematic in
certain practical circumstances (as reported in K12MIT.BWR).

    The new ENCODing format is based on five-bit encoding with repeat
compression.  As much as 256 repeated 12-bit words will be expressed
in a five character field.  Any repeated 12-bit value can be
compressed, as opposed to simple zero compression, as in other common
encoding schemes.  (PDP-8 files often have repeated strings of the
value 7402 octal, which is the HLT instruction.)

    The only printing characters required to pass through any
distribution "path" are 0-9, A-V, X, and Z. The alphabetic characters
can also be lower-case.  All command lines are framed by ( and );
all data lines are framed by < and >.  These characters can be
changed if required, as they are not part of the data; they could be
replaced by W (w) and Y (y) if necessary.  (Changing the framing
characters requires slight modification of the ENCODing and DECODing
programs.)

    The new format supports a 60-bit file checksum to ensure proper
decoding at the other end.  The former 12-bit checksum could be
compromised on long files.

    The new ENCODing programs creates internal (REMARK commands
stating the ENCODed file's creation date, and the original file's
creation date.  This will aid in distribution of PDP-8 files where
the user wishes to maintain proper file dates.  The date algoritm
used is the one proscribed by the OS/8 DIRECT program. (OS/8 systems
only OPTIONALLY support file dates, and there is an eight-year
"anomaly" associated with identifying the year; the user must
determine the credibility of the year portion of the date.  The value
provided by the ENCODE program for the original file creation date is
always today's year or the previous seven years as necessary; this
field will not be provided if the system doesn't support the required
AIW feature.)

    Overall file size is theoretically as much as 6/5 of the original
encoding format (as the earlier format was based on six-bit
encoding), but actual size varies downward due to slightly less file
overhead (wider lines mean less CR LF; there is now less
automatically generated verbiage), and the random improvement
afforded by simple repeat compression.

    Virtually all K12MIT-related files are re-released at this time.
There are several new files.  Due to the "fragile" nature of TECO
macro files, the file K12GLB.TEC is no longer being distributed
directly; the file K12GLB.ENC is the same file in the new ENCODE
format.

    The new files have been installed in the regular places:

BITNET/EARN       Internet
KERMSRV@CUVMA     watsun.cc.columbia.edu     Description

 K12MIT   ENC      kermit/d/k12mit.enc        Encoded binary of KERMIT-12
 K12MIT   DOC      kermit/d/k12mit.doc        Documentation file
 K12MIT   BWR      kermit/d/k12mit.bwr        Updated "beware" file
 K12MIT   DSK      kermit/d/k12mit.dsk        Description of RX02 diskettes
 K12MIT   ANN      kermit/d/k12mit.ann        Announcement of KERMIT-12
 K12MIT   UPD      kermit/d/k12mit.upd        Release update file
 K12DEC   PAL      kermit/d/k12dec.pal        Decoding program
 K12ENC   PAL      kermit/d/k12enc.pal        Encoding program
 K12PL8   ENC      kermit/d/k12pl8.enc        Encoded binary of PAL8 Ver B0
 K12CRF   ENC      kermit/d/k12crf.enc        Encoded binary of CREF Ver B0
 K12MIT   PAL      kermit/d/k12mit.pal        Main source file of KERMIT-12
 K12PCH   PAL      kermit/d/k12pch.pal        KERMIT-12 source patch file
 K12CLR   PAL      kermit/d/k12clr.pal        Memory clearing file
 K12MIT   LST      kermit/d/k12mit.lst        Symbols-only listing file
 K12PRM   PAL      kermit/d/k12prm.pal        Sample VT-78 config file
 K12GLB   ENC      kermit/d/k12glb.enc        Encoded TECO file macro
 K12ENC   DOC      kermit/d/k12enc.doc        Encoding format description

[Ed. - Many thanks, Charles.  Believe it or not, there are still quite a
few PDP-8 based systems out there, and even some PDP-12s.  You won't find
very many other new software packages that support them!]

------------------------------
Date: 05-October-1989
From: lasner@cunixc.cc.columbia.edu (Charles Lasner)
Subject: Announcing  KERMIT-12 Version 10f
Keywords: PDP-8, PDP-12, VT-78, VT-278, DECmate, OS/8
Xref: DEC PDP, See PDP

    This is to announce the release and availability of a highly
revamped KERMIT program for the complete family of Digital Equipment
Corporation 12-bit computers, known as KERMIT-12 (or K12MIT), Ver.
10f.  Unlike its predecessors (K08MIT and K278, upon which it is
partially based, as well as prior versions of KERMIT-12), KERMIT-12,
as now distributed, will run on any PDP-8 model (8, LINC-8, 8/i, 8/l,
8/e, 8/f, 8/m, 8/a), PDP-12, VT-78, or DECmate (VT-278, aka DECmate
I, DECmate II, DECmate III, DECmate III-plus) under any OS/8 family
member  operating  system.  Proper operation is accomplished
automatically.  Companion utilities are provided to deal with
"ASCII-fied" binary files in ENCODE format (a mechanism designed by
Charles Lasner and Frank da Cruz as a proposed successor to BOO
format); ENCODE format has been employed to distribute the binary
portion of this release of KERMIT-12.

    Due to the myriad port requirements of the various models,
conditional parameters have been provided in the source (as well as a
separate patching file) for models prior to DECmate I.  The program
auto-configures for all models of DECmate;  parameters are available
to select the DECmate ports (DP278, communications, printer, etc.)
where applicable.

    Many improvements have been provided to get this KERMIT "up to
speed" relative to other KERMITs.  KERMIT-12 has been tested
successfully with many KERMIT implementations and will run at the
maximum baud rate (and sometimes beyond the DEC-stated limit!) of the
relevant interface.  Any console terminal configuration acceptable to
OS/8, etc. can be used at any baud rate as long as local flow-control
protocol is obeyed; remote flow control can be disabled at console
speeds higher than the remote line rate.  Connect mode I/O is fully
ring-buffered in all directions with local flow control always
enabled for all console terminal operations.  (This should satisfy
all console terminal requirements ranging from 110-baud teletypes to
built-in 350-Kbaud VT-220 emulators, since any of the gamut of these
ASCII terminals could be the system console terminal for any of the
KERMIT-12 supported computer configurations!).

    KERMIT-12 will run anywhere OS/8 does, so it runs on any perfect
look-alike suitably configured.  Some known compatibles are:

  - TPA made in Hungary, this machine is an 8/l except for the silkscreened
    letters which are Magyar, not English.
  - Fabritek MP-12
  - Intersil Intercept
  - Pacific CyberMetrix PCM-12
  - Digital Computer Controls DCC-112 and DCC-112H
  - Computer Extensions CPU-8 (a drop-in replacement for the 8/e or 8/a cpu
    for a PDP-8/A-400 or -600 hex-wide box)
  - Computer Extensions SBC-8 (a single-board computer -8 compatible based
    on the 6120 like a DECmate, but compatible with -8 peripherals, not
    DECmate peripherals; it also supports up to 16 comm ports)

    Various emulators are available for PDP-10, 15 and the IBM-PC
which will also support KERMIT-12 if suitably configured.

    Distribution files are available from CUCCA.  Testing is under
way for some of the more obscure configurations (e.g., DECmate III
with comm port); volunteers are welcome for this task.  The author
can provide copies to interested parties on virtually all of the
popular PDP-8 media on a time-available basis.

[Ed. - Many thanks, Charles!  The files are in Kermit Distribution area D
with prefix K12, and the previous PDP-8 versions having prefixes K08 and
K278 have been retired.  Internet users may ftp the files as kermit/d/k12*,
and BITNET users can get them from KERMSRV at CUVMA as K12* *.]

------------------------------
Added src/kermit-12/k12mit.boo.














































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
K12MIT.SV
oX?lP0400<P70<074QTP1A8B3a80?ahE7Ph10P`581@?81<53P@P;B080@h430DB80DB4PlB03lN
5Ah>0@8<1B0D3b0C1@h403lN5Ah>0@8<1B0D3b0B1@<52AH582dP104D0B054Q8?4P0a4X20P820
P820VP00~xb\b=RXf:[hWDb<WCX<K9c<FPbM>Pd=;?e\W4aLBPe<nPeM?5d]>PclJPblGBcLWD
[K6bX=C?X<7<c<oGX<?EdmC?cLWJaLBPe\GBdlW?c]>Pe<nP`\F=RZn9c<o3`Lc<fJ33d\G1e<G4
X=O9e<S?eMBPcLo4bLKIbLk7X=C8aJ3=`LW>X=??eM;3aJ2Xbk6bcLWD[]31c:V^SHZ=RZn9`m;5
`MC9c\NPblGBcLWD[K6bX<KBclfPe<S5X=?D`Lk4~~~~~ToojBT86<oJPoRObRT8><noZinI0X
Po_;00P6R@S3:93kV`QSPI_7TP2P0?l2lX3>[K:4_;e4`L=4aZ5:ooH\f:gXW02`mlO4[h2^b?S2
`86<mhTlm\0XmL0Xa\S<P:g[0<T<`Lj\P<3[h03`~s5@L`1e1>=U40SAg62Q1oW100m`coPBcf
RLcfPLcFm^cnmRb9e\kfP<kfPLc7m^cmmRb9alkfoL;fPLb1m^clmRb9PLkfo<;fPLb1m^clmRcE
m^ckmRcjmRcimRcEl^b0P>j0Q;3DQX3cW<4@WR6VWj4@X676[\7C]H7C_X6daH4AaR6Xao7=b:4A
bF6HbR7>AL[^CI[^@i\@A2^XAO_KAZ\@Af_6e<_5eF\AeR^Xeo_Af;_5fB_>0<00~<H`14__0E
@00>6024e0R600kEl0;FlPcGP0kHm`cIk`CJf@[Kk`CLf`[Mb0cNlP;Oj@SP1`;Ql@;Rj@SSl`;T
j@SUaPcVb0cZb@c\cPbN`AbPaQbn]1S5bAc6cA[8La3:cQa3`Ka5a[a62;oBLk3DbKcFc[`0eP3f
el3HgN3XiL3Vi\3Xj\3Yk<3^W\7QX<7VaL7Yb\7^@l_QAL_Ve<_Ye\_^0<00~~~~~~~~~~~~~~~~
~~~~~JWYigWYigWYigWYigWYigWP1`~NWH1gUHigc]LSP90g4:dGGX3GT11a[AinP91g4:dG;l3T
S4ibgWP;P91g4:dG;d3RT11a[Bmn090g4:dGLX37T11a[Bmn@90G4:dG;d3P\C3LWYigP;5m\837
G\>FT61e6@ED2OZ403J<01j8eI=WC^0QPhmgCDhe@e@PCi<S7Qj4dQhe@1iheI=WC^0QT99gCPDU
X917SiAdWH1gGQ>Dn12hkg9<3nn48=?SlJ2ldoLk8=?Sl_Rm8=j2DTTC;G9L89J7L8O78028ThEg
54e1QJ04P5ii7U1FH8PGC3`DdYh?1]:324b19H17NG3>P?mo_YigP5imWYkgP1inWYkgP1indijo
P0UcPgPkP1knbIjoP1inc9joP79l_YigP1inaIjoP1in`IjoP?Qm_YigP;Ml7Yk_P9EgS\ibeh0c
T11a[EimP91g4:dG7X3WT11a[Bmn`8a7C]hPN82gT11a[Bmn@90W4:dG;`3ST11a[G9lP91g4:dG
;d3QT11a[Bmn@9H77WMK7X3WQ4=aSEA`@00@~~~~~~~~~~~~~~~~~~~~~~~~~~~xGYjAC60QPH9g
dRDeP=ioGYHSC4@20lf3@H@cP6QiPhmgST<a2HMC5>233m@T81Ve1@18PhmgU8ld;H0g7]j05>23
QAE5SQA8h80gIH2W~7gPmNTQCB2CRP1C69aE0>CH10gQlNDa;PUB4<@3SNG_6BdT<33h?9Qd<6
C890gQmNTQCB2CRPRC453SQ=@06BQGO5EP9>h2691A>PP>NCQGN4CS;PRA45X3j0gWnNC19PPA=5
4cQ>0FDPDV6?P4ANgYA@3eBDA443cH=1Q3?PDT1jIAV3cW>5e32P57[PQCA?1CDCDhH5JE<UThM>
8145^QF93Q==Q@\N9FRB@g59QAD4EX6N:>R91A>1AC<1Q8<558I>bAC>7SR?7SD138?GA35UQjMD
11QFQQi<PB=^F36UQWM>Db8N:2S5UTABIAZ52GHN:5P?3eP5PD@9Qe<CDhH5JE<UR8M<7Q@X28EC
3BQC`AC5IAYNGY73D41Pb11B@`05^U@0GXWNFB6?DP0PCQ8E84EBSaBQ@4WNG_F1S31P3aDDC84P
3c;D54P182G5ddA?X2=C1RQ>Db85027NG_F1S31P3aD<`h=DH0691A>0RgN5SGADGR\0~KgPnN
@d59QAD6BH0EQCB0gWmNTQCB2CRPQCC5EP941QQ<H261AC>0UGN>@W0553SPQCC5EP9PH1\1Q2<5
P3@5TXCBP3ONG_F1S31P3aDB@h59QAD]2HRCASF9bA1>81D9QACDdP=Pd6A3@05NWYA=e1=P2A>5
2CR@E3D5TXCBICR0gWmNPE><H04?4UQ3BA6535QDD`4P0EC;E060gWmNPE><H04?4eQ>815P2K65
e43BH3IBSaB0gTmNPE><H04?4eQ>815P0K:41C>PDT6?P4CNG_F1S31P3aDCCX40gQmNPE><H04?
4UQ3BA65;EP4E81PDP6?P4@0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~Sdl?1d<FP`lS1d\73e<GBX=C?X<k>c\j^SHZ=RZn9dlGDe<W>aj36c<oG_HVaRLG>`L;<aM>P
a\c?ejg3clkDd\o<X<;IX<C5a\7Ec=B^SHZ_RM?5e=C9c\NPa\c?ekf9\8W4bM?1`\c5dj36c<oG
[L??c]CBclbP`]VPa<G6`MG<e:j=RXf:[hWCaMCDbLk7X<K=clC5_HV`\KNgRM?5e=>Pe<S5X<C5
a\7Ec=BPa\W<aJ3=clC5X=C?X<7C`lW9~22`00~51`00~Kn`l0~6OP00~3;@0S~2<@00~LO`00
P0l[7M3o0?00~70J201009VC<QBN4O8@00~5P0N0kFl03F1Pd`<J00l:00Pi^INm8TU8P3<0^cVG
<``750dHRa:I@200oa02iPocOo3PP63PD_4P?`20497oOkT2AFH01n8;O]T9OYT_oYWm62KlnbVM
P:XI5VVG6J:?::n0VjIn0920OZT9P8X0`0jPdCJPX4?jX7CidRKhmbOC7f9mO0;fdG=8_?[CdbKA
dSOgdECB\D[0dn;gmS?jNcWBdW@UNR8Xb_[BdWBPd^LK72HO04jP0;00~3k`CEkjCG`J`XaPb0
f^;fmL;fmL;f4LH@e6_8P<kD0;39j\[>P<kY0;2L<0E>5EL0202DTl`SUPbE\L;G05`0P4d0C@VB
P<>0Z4n0BkV0P3@XP?^>ZVP0P0\0`0h<of8oNF90T6\0T0Sn?bKm@2JH0;2X=6:YZFNYZ4BSWj\0
~3P0jZZSBbo6<QN>T0Z0nZ0k\0n`Vnc:HVcBO=c4;=cGBPcNLQnR8QcN;8b_[>]X^f]T\00080
n@;=cV\0g@KM2Rh:2^khg@9mO0;B0;00~V0`02g5`B=B_=@FCM09P8P7N`oj0_PH2TP02`V8V;
UiMRo_hgUgHRZ8WkUhTTR@2`080>M[@V2:So0JKJ1WO@4a=RV9Q;oGFB87CbZ0;d2:_j0;[TW;BT
W9R[~23_b0WTFd:`2H1WKY9Z12h:S5n[BPSl89[KjHXPQblPj0g[[Z];kYY;kkZK`0X<7CbmSf
k83fk?Y83ZSQn_Wf;164KR0@mX3hh_J0c]<0\000~C>2P01M@0@SJm\_m?~~~mm`HPX2o`mj9j
Z0obmj;oZ2obmj8Q9^:Pl?XVmB[gg2_gLB9gg0CL0;00~9P@l0L0V05;HDKbT0on8EP6B00;2`
26n`\4=8U_YjX2n>RjC0\>:;0;2`26n`\4=8Y?YjZ2nLVJC0\>:I0;2`\6?8[_Z`ZDZ`Yb\0~2
h>1RP=::6=lV5=hVgR4ngj0oeMjR8AGRZ<Ojg]m4^]nRY`6>g]iS5[5T\L5>5K4[\N12\MnbY`6>
0MoVgjPodkRZ~6k3ARkNaSkNadkC94iN6[~Lo`l0Z`J[L2VO[:J`\FKo;RH_oV:][6<XWo[mZ2nL
[:>\CTV]SDZ\oC:PWoZ\od:R`:j[[2JdZ8Xi[6:0P4_0Zn:00;00~24l0BVYYVVYYV02P?o<LV
al0falM3`HY\N@Z@~4]0_1]2Bd0;00e`Kkd2KGRRai0I0020o8`4k@:bK80;00KPWj3RI:KI=7
B@T1IP<Lgd[if2_Hf4]IIP=>HP<0AP3o0?00~<2PT2P@d^aSol<?<0\0He=2KoDBV`L2V]\JHe
;RH_oV:b=VJc\H=8ZO[m:2nKo::P[OZY\J@enb8^;fKT\^Jc\H=8ZOYjX2n]P:C0\N:0`;j`P2\0
~5\OXi2<OjnBP_aORRX;?k=We2C[:D_k6TdCJTODhY\K94];6Sn]6J`;7Tbl2^\`2`dm\fdm=3
g==TBP2@04T90ND32=?ddm=;7=e:deV`hET`i00`~B5L4?W`=P3]8?n_co0?l2\_iYoBP_V_bR
Z9oj\_\R`:kj3OXR@7[bnK8W\Z1>\PebKH>JX;;WOPVIP;:bn:P_Pj2^\[8V\_MbKGbBKONBKH>J
`6cRKH>J~3OLH6f2oR;aQ_`LJR1PK^1RkW\bjcaRhW;[=;~38?7fl30V<O5Rk>iVm^dVf>kRk^aS
6=cj2P[^2PS_k7e0kdmYmBP_j7fR8NoRX<OkkM9:alM;~=`@oh2?0YH:2P2OZ>lol0emD06`:_
ofVQ\ZI[\BKnXIZa\G?m8Bj`\FCnXIZa\7B?\JBP\NNbNbTQ\>KnXIZ`Z2n[`:j_YT[lJR\2X2ok
n[V30Z:XP?_k0;00~5OgjIPT62JGjI2K>D\`2`C3JLOPVI_@2`~~~3E[IHWMnORH0A06h9o`hV
6BdV;FPY\Bf6oSDV;FLY\Bf6;G0Y2;7h;CURI[6HaS=VPLOVo_dWao`Y\JV:a\M6nk6H=Z0_W<JR
Z;7hc2f26H1TP02`P;7RN3FEP?Nj>O6:Enb:MNR:`MnJ[mZJd]BJ8P2@~:`0hcBVWn@\190I00
c0\0X0hOOB1ljbKZjb;\NbW]9F9j:2nPk^I=JIGF0K0S~2CP000?l?~@70P0L7A80U00KPWo3RHI
;BH]J2VYL:VTUZJFKbT8SOX]X6h]7gJFBRT0DP190I2Z75BHP:_nXiZ0;D8IP6_0IN:0I;V0`;km
P2]5Y`ECWPE>V`D0~2K_nB3QUR;BeRJ<ZJL0ROcBfVBobIcLeJo\fJ\be26K=[`?gR\h2n\e>`
a49@cD9@aP1@~i:STH00=P0?l9>XY\N@^@7dYYm5W0B@6@RAaTR^6XB_jLFDT90Gh6hCZ2Z>7h
o^6HT3ZRX>7hJodbB>7ho>hVX>kWncDVo6LYhL2>>C`V?6HYhO^2^CaRRWW90`000>48^CLV^P4^
>3YTX6?Y0SGbHWjIHTb9L7iI2I2J>ZP_hF69hI2:>Z0_H@2NB_jLFDT90804P6BiP02`B_jL@TT9
0>42N92F:?[bP02`~BAdRE=]g?_jIXA1L6FTh6@U@6AQd6AEl604h03DIP7DEPG`1PjM^Ii4FH
a7BIde6IcF6I[DbH~3Y`R?YK>X29odW`2`\[9Rod0^oQP_Yl1>\ZL[~3_[iRoD0^H1P_\l1>_[<[
~3Jo`bg]iWnmhVgRPog26^9ZP_dMnRX?[be=nRZ=SjgV<i_mVj`MoVg\I:_km;~40`KP23KP24@8
:3oP0k:PiOX80cH3h2\0~>`3Kl4lK?6ZD?02P?\XNV:hR@~2D829_?lg=_h:9PXX?kG;YP[<=P[=
=P[>=Z3nhl72IY^P9Z8:Xl:PI<6OBPXX?kW:YX7m`_bbV\Xh9_eR:H2oBXW:`PP:lb4ghSOkIHkj
Xh4Pch>0Y800\000~~~40P1EAd]7105E0:P?YSNbR2]YR004080;Qo4V`IUXVL62Y_62oj0_S8RT
>8E:\@2PRO73Gd@>`@H^1\7VlJHhlIU;084<15S^?GD2:;?jGW<PP814P?:bZ;7joZHV[P2PB<Kj
?@l6R@o2`@2`^L1>PKW;P3ORk?eWjo4V`O67lITVlL58lL5h1PK^GiT3V@mb2P[^25oPlO4glO52
oj0_c86\>0Q?^B^iR0240<<:oNaDbP2P~@5PRa07\0?@;8SOX?MB:PVo:XSOYNHbVGoj?nX2n;
?:::NLT4B0D0R0n0>TJ00K00<`:PZo[m:2Kl9BKk9RKj8BHOnFVLB[U`AU190I2878B^W:]nK9Q<
L9En2IVn28nLW4\0n0VPmnVnd;[f29o1BZT0A2190I1n78C:_Z_em3:XgOY:0994B@T1P`PLedZn
GKWnF\2n_[^n_T\0~HCN4fP1M>TQQn8`0]<@00lLMI@@Q>C@P0F@1MCX1J081I=0Q><@P0F@0d
0800BPWdDl190I2O78BFTZ^V`HhcTVBBFK2LCX2I0800o`8doV9AJi?moR9PP?kl8Bhbnf9@YY_0
0^H>nR8P`oYMdIQJ00h0nNW?n::PcoYMoYa200j0>^:PHOV0mn9ZA;3o0?00~d2?m<mOhfo0[L
3oHQl00P3hF0Xh0dAVfB:800\22>nXV9=3CoHY:9R`2O1SBP9Z2P=4RMnYo0WYK0[Y80\0000=Pa
hS4`HaR\nPX:kPX8kc1m@:40\2QllWam87bh9kR_B`00030aI_jh9_gA9TlPWjoAQ<3lXZoTS]5?
JB2_n=79BZ2hikT0\000~m;_X?L;YA080>KKDVP<XfP3i2G<PVRL[32P[^2YGXRL[3ULZ4RP2P
PGg0:83kbLURobP_ZFbRZ:gjbG`PZ<SbbKDYUE^b]F2BYcjRX9Gkb24^o\PVU@2`P;GRP?eRP`2P
alMRN\0_a7jY8W62afdY^`2`~~0;X1X=\?06h9OQ>H@FTYORRHOSBHOS:Hk45Rj?mYoT>B:4Cb
X=;joI^Jo0ROnn^Bk:P_XOfYaOZYaOVYaNfVkGLP8NoVk:P_\nnRN6:JZ<;j0nnb@J0_^Z2^a>bV
jjP__nfRnnfBn<FJK?\Yk01^moJImOBITH2TP02nmoJImOBIoLfJlb4nlZ0ocD>RZ=kjO_fHA:P_
S7jYSXbJ@d\:Hd\:03T:~6d`0@~3m_FZhIn[U2F[P82jU\:j0=RjGLFk0?P28OWRZ97jnN4VPOWR
MeX2nHU\hH4l2:OhP81;0:L829CkROS7PH7>n7LPF_PVn24^nJP_@iA;Y02P6L3:7TS?@`Q?[7>P
hD9RZ;cjhGLPFBP__WBRZ;ojhJL[f?OVYjM;0>46mB4^m_LRX<kjhOlYc\:[hHT\mH5lPOGRMeP2
mL9[084>mB4^mWLPX=Sdf02`mj0_hOFb8OKRZ>7kROK3POo9hH6nmWLPF?HVh@2`~=_P\0jP8Q
jn:XX_[[k2J1jn9go`;[RFc\PCc\@V:XX?[HA^:PX?[Z8Bk[G22PX?ZPA^K\22o2P8B00;3228nU
RKcZPGb1j^9go`;ZjV8Qjn8XA?@8]OYLG22X@_:XYO]6Z2m6YD\00@gK1Ze8A?@8aoYck0I2Z2oG
k:9gF@8XfOYdZ2oJk:;2f;i5`VC20;1GAbIGB2KojRKojbI5AVI4gF\0~O1`2O1TLQ;TQ58Z2<
nYoo:Hb0Zin9;4N1O857hWMG0TN0J`213TLQ;TQg8:2Fm9H0\4I4;ZR[n_h@;gCo:J\H[TI5HZ2O
ndLQ;TRX;in9_4R1??nOVh58hWMG0TROJ`0Q3<<V[;j0C[h0\5Sm9eSl9e[k9e[j9oU3M\D0\0Qb
lPWHfPkAe83Ajh0Ai]7AB`00~Vm`[in:[fmJXAd@]3C`1>CP15@`1Do`l0AZ19CP19D`18o`mH
AC1HB@1Do`moDo15CP14o`l0Ae15E03oP?EBA@13A@19EP15o`ncB515C01@o`ncodl0~~~q0@00
~~~rORl08400;B<0CS408200o`3`09X83BP_PH2[0?l2:8gjd\@XQWbba0^2K:0?SHJ[0?463?5R
QYB;0;H8::_joRP_[@6^:;3joJ0_V[Jho:0_Y`fVV_^bj42;n^PXf0cR3:]Z080>6KK;77O03NI^
3JP_?aZl3KH[0?46VPb2b<gjlMdXaYZXlE`PX0_d2O42nBP_2oQRZ:3n2`\Va02`8Mg;9X3>gMe;
mnPX6WW;0?46m]dXjo6RgNj:j02`~6GT<01O<?Ce00kocol?Oo`2K\P7TWonRFj?hRZ;cj3PKM
P7kYR7i9IGi9YWi9_7i9G>Q2A^SRoIdVOP2@OR2DXgjYIgi92GjI07i9[NQ2A_cR2?]Rg3>9j4H^
j?XR2?URg3>8R_S927T;moIgmOEER_@RX<SjRo<RZ=SjF@3>GP3>WLa:Gm?:X8]\lUVlRZ2VRo7;
X?1RXXYZ0>T6g0Tfg8U<20TgjN9:PMc;~<NH]0P2X38SXmIT7M`?_ok_a?_R94m@3n0<0>0<8V
o`0V`P0Vk?kRZ9cji?gRX;kjPocRZ:OjX7O\P7W\0JS__KnZX87_X;_jH@o00P4>Z;[j_0j^:;7j
nbP_^OZRZ;Sj`Hf^nJP_][NZ0@7^0@7^0@7^0@7^0@7^0H3[~~~4n0oVl_700_02?hh0~~~~~~~~
~wRM;5cLoDaJ_Cd=;9c]B[eM?5dXV9[m?5e:3BaLg?e<FPc<W>aJ39cmBP`lo4aHf:SHZ9bLKJ
aM;?RM;5cLoDaHVla<GF];2mRK6nRHV_a<G6`MG<e:3Dcj34aMK9`lFP];2_];6Pe\GBdlW?cXf:
SHZ_RLC5e[>`X=31d\7=aMC5d]>^SHZ=RXW9a\kJd\n9a<GF\k29RHVlSHZ=RXW9a\k4aLJ9d\G3
RKcBaL>mRK>`_XV9[lC5e\W3aJ2c\:39
Added src/kermit-12/k12mit.bwr.
































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
Date: Fri, 1 May 1992 17:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: DECmate I problems and more patching problems

DECmate I problems.

    Attempts to use the distributed Kermit-12 Version 10g on a
DECmate (I) system will certainly fail.  The coding specific to the
DECmate I was never tested until recently.  Two key routines wait for
status flags that never raise because the affected registers do not
generate flag changes/interrupts.  This is unrelated to general
serial data handling which works as originally coded.

    There is a simple patch to the program to alleviate the problem:

.LOAD SYS:KERMIT.SV/I$*$        [load the file in image mode and then
                                 ask for more input.  The $ which is
                                 printed signifies the use of <ESC>
                                 as the command terminator.  The * is
                                 printed by the system command
                                 decoder requesting further input.
                                 The second $ signifies the use of
                                 <ESC> to end input to the command
                                 decoder.  The loader program
                                 terminates and control returns to
                                 the keyboard monitor.]

.ODT                            [call in ODT to patch the program]

7/ 0007 0012                    [change default baud rate to 2400;
                                 this is optional]

353/ 5352 7000                  [make a JMP .-1 into a NOP]
10302/ 5301 7000                [make a JMP .-1 into a NOP]
12243/ 3607 3610                [bump the version number]

^C                              [^C to exit to monitor]

.SAVE SYS KERMIT                [save patched file]

This also updates the release revision from 10g to 10h.  Future
versions will eliminate the overhead of the now defunct routines.

    The only DECmate versions remaining to be tested are:

    DECmate I with DP278B (the system used for testing has DP278A)
    DECmate III without internal modem
    DECmate III with internal modem
    DECmate III+

Patching problems.

    The restrictions placed on patching apparently stem from a bug
going back at least as far as OS/8 V3D (likely further).  Apparently,
when a JSW value of 1 is used (as Kermit-12 does), the GET command
doesn't work.  Apparently, the system confuses the need to save the
contents of 10000-11777 with the need to load it in the first place.
Kermit-12 operates by first placing once-only code in the affected
area, then discarding it in favor of a locked-in copy of the USR
routine.  To avoid overhead, the JSW value of 0001 is set to indicate
there is no need to save this dead code when the USR is swapped in
over it.  Apparently, the GET command sets the =1 too early in the
load process, so the code that uses the USR to carry out the actions
of the GET operation doesn't properly load the Kermit-12 code.

Consequently, the warnings documented in previous chapters of the
.BWR file (below) apply in all cases.  The interaction with CCL sited
below may not apply in all versions, but the GET command problem is
apparently universal.

cjl

------------------------------

Date: Mon, 28 October 1991 20:00:00 EST
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Kermit-12 patching restrictions revisited yet again

    Even more operating system ills (will it ever end?):

    Still further investigation into operating system bugs in OS/278
V2 on DECmates reveals that the problem in even worse that realized
two weeks ago (see previous .BWR article):

    When a SAVE command is executed from OS/278 involving a loaded
handler, the SAVE operation fails!  The contents of the files will be
corrupted in general and will likely become (at least partially) all
zeroes!  The exact scope of the problem has not been ascertained, but
certain loading tests reveal that the command fails even when
accessing additional memory beyond field zero and one.

    All operations to SYS: or any device co-resident with SYS: (or
when DSK:=SYS: which is typically the case in many systems but not a
rule) are unaffected beyond the restrictions reported previously.

    Until recently, SAVE commands were of little interest to the
casual user of OS/278, since program execution and ordinary file
creation are unaffected.  Since there are now several programs to be
loaded and saved by users, the problem is more significent.  Users of
the direct loading method of acquiring  KERMIT-12 are also in the
affected category.

    Clearly all developers and anyone assembling any part of the
KERMIT-12 package should be aware of this problem.  As a precaution,
all persons using the SAVE command for any reason are advised to use
the form involving SYS: only to avoid this problem.  (Advanced users
can determine which handlers are possibly co-resident and are thus
acceptable as well.) The resultant file can always be copied to any
device as required after the fact.

cjl

------------------------------

Date: Thu, 10 October 1991 05:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Kermit-12 patching restrictions revisited and .BOO problems

    More operating system ills regarding file loading:

    Further investigation into operating system bugs in OS/278 V2 on
DECmates reveals that the problem is worse than first realized:

    When using GET or LOAD (ABSLDR) commands, especially when loading
image files such as FIELD0.SV, FIELD1.SV (the partial load files from
direct memory loading of K12MIT), or K12MIT.SV with /I, the JSW and
starting field/address can become "mangled" into unusable values.
One particular case achieved the impossible value of 6303 for a
starting field change instruction (legal values are 6203 through 6273
by 10s).

    Consequently, the general recommendation for SAVE commands as
used in various utilities throughout KERMIT-12 configuration etc., is
to use explicit starting address and loading locations and JSW
values.  In short, always give a complete description of the SAVE
operation under OS/278.  For example, when direct-loading K12MIT
through the printer port into the DECmate, the following commands
should be used:

}LOAD FIELD0.SV/I,FIELD1.SV/I$*$

}SAVE SYS K12MIT.SV 00000-07577,10000-17577;00200=0001

    As discussed earlier, the CCL form of the ABSLDR LOAD command
works even though other seemingly equivalent forms don't.  The
complete SAVE command forces all parameters to be taken explicitly
from the command; no reliance on system "assumptions" or loading
artifacts.  Always use the complete values for loading taken from the
relevant program documentation.

    Most users of KERMIT-12 are running OS/8 V3D, etc., where this
sort of system bug isn't seen.  In the future, all KERMIT-12
documentation will give the "verbose" form of the command to contain
this OS/278 V2-specific problem.

Regarding .BOO format encoding:

    The newest release of KERMIT-12 includes .BOO format encoding of
all binary files and TECO macros as an alternative to ENCODE format.
ENCODE format is still the preferred method of distribution, but .BOO
format allows for use with other systems, such as MS-DOS.  For
example, TECO macros used with OS/8 TECO can be interchanged in .BOO
format with similar files used with MS-DOS TECO.  Intermediary sites,
such as unix systems will not destroy the "delicate" nature of such
files, etc.

    The KERMIT-12 .BOO utilities are NOT totally compatible with
existing .BOO utilities on other systems! Just like OS/8 ENCODE and
DECODE, ENBOO and DEBOO do a perfect encoding/decoding of OS/8 files
into their original form.  When used with "foreign" .BOO decoders,
some unpredictable things might occur.

    Certain other .BOO encoders are known to throw in extraneous null
bytes at the end of the file.  Further, there is a design weakness in
the original .BOO format that causes more null bytes to possibly
appear.  The KERMIT-12 programs utilize a superset of the original
format to ensure correct encoding/decoding.  When passing these files
which now contain "correction bytes" to older decoders, the files are
decoded with inflated lengths because the older decoders don't
recognize the length correction.  When passing files created by older
encoders to the PDP-8, the resultant decoded files will also have
inflated lengths because the older encoders failed to place
correction bytes into the file.

    The general rule for dealing with .BOO files originating from
other systems is that they may have incorrect lengths.  The resultant
files may be (falsely) padded out with extraneous null bytes.  In any
case, since the files generally have no blocking structure, the files
will be padded by OS/8 up to the nearest whole record or multiple of
384 bytes anyway.  Unless the file is ASCII and has a ^Z at the end,
there is no way to determine the original intended file length.
Files may  be padded by null bytes introduced by other systems' bugs,
the inherent weakness of the original .BOO format, or ultimately by
OS/8 padding requirements.

    ASCII files from other systems may be adjusted by using an editor
such as TECO which stops at the ^Z.  A second generation of the
transferred file may be somewhat shorter when processed this way.

    Should a file originating in OS/8 be intended for OS/8 use only
(such as an encoding of a .SV file), it should not be decoded on an
intermediate system, because a re-encoded version may differ from the
encoded original because of ignored correction bytes, bugs, or the
inability to insert correction bytes.  Violating any of these rules
could lead to OS/8 files corrupted into being too long.  It is
conceivable that these altered files are even dangerous to use under
OS/8 because of their inflated lengths. (Certain files are validated
by their restricted size, such as .HN files which must be exactly two
or three blocks long depending on whether they are for one or two
page handlers.  If a one-page handler became three pages in file
length, it could conceivably be confused with a two-page handler,
etc.)

cjl

------------------------------

Date: Sun, 7 October 1990 12:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Kermit-12 patching restrictions

    All Kermit-12 configuration done according to the documentation
works "as advertised." Users are tempted to patch the distributed
image file K12MIT.SV as a "quick and dirty" method to make small
modifications such as changing the default baud rate, etc.  There is
"conventional wisdom" that this can be accomplished using GET, SAVE
commands to allow the use of ODT; this method is ordinarily used with
other OS/8 family programs.  It has been reported that this does NOT
work on OS/278, the usual operating system for the DECmates.  The
following method should be avoided (a work-around is offered later):

.GET SYS KERMIT                 [setup current image for patching]

.ODT                            [call in ODT to patch the program]

7/ 0007 0012                    [change default baud rate to 2400]

^C                              [^C to exit to monitor]

.SAVE SYS KERMIT                [save patched file]

This method follows the exact procedure described in virtually every
OS/8 document regarding patching of image files.  The cited example
changes the default baud rate from 1200 Baud to 2400 Baud by
replacing the value chosen from the DEC standard table for 1200 Baud
with the applicable value for 2400 Baud.  This value is stored within
Kermit-12 as the corresponding twelve-bit word with all high-order
bits zeroed.  (The location used is 000007; this is valid for Version
10g, but could change in later versions.)

    This attempt to make changes the "conventional" way produces a
corrupted image file of K12MIT.SV (renamed to KERMIT.SV in the above
example) when using OS/278 Version 2, the usual operating system on
the DECmate II, etc.  This method probably works in earlier (OS/8
V3D, etc.) systems, however no attempt has been made to trace this
bug in prior systems.  A "fool-proof" method is required that works
in spite of bugs in the operating system.

    A work-around was attempted using OS/278 V2 on a DECmate II hard
disk system:

.LOAD SYS:KERMIT.SV/I           [load the file in image mode]

.ODT                            [call in ODT to patch the program]

7/ 0007 0012                    [change default baud rate to 2400]

^C                              [^C to exit to monitor]

.SAVE SYS KERMIT                [save patched file]

This also fails!

    For reasons not understood yet, the following seemingly
equivalent command DOES work:

.LOAD SYS:KERMIT.SV/I$*$        [load the file in image mode and then
                                 ask for more input.  The $ which is
                                 printed signifies the use of <ESC>
                                 as the command terminator.  The * is
                                 printed by the system command
                                 decoder requesting further input.
                                 The second $ signifies the use of
                                 <ESC> to end input to the command
                                 decoder.  The loader program
                                 terminates and control returns to
                                 the keyboard monitor.]

.ODT                            [call in ODT to patch the program]

7/ 0007 0012                    [change default baud rate to 2400]

^C                              [^C to exit to monitor]

.SAVE SYS KERMIT                [save patched file]

This allows ODT commands to patch the file as intended, and also
causes the subsequent SAVE command to work properly.  All OS/8 family
systems support this command (as long as CCL is enabled), so it will
"always" work.

    For those users who run with CCL turned off, the following
sequence will also work:

.R ABSLDR                       [run the loading program directly]
*KERMIT.SV/I                    [load Kermit in image mode]
*$                              [<ESC> is typed to terminate the
                                 loading process.]

.ODT                            [call in ODT to patch the program]

7/ 0007 0012                    [change default baud rate to 2400]

^C                              [^C to exit to monitor]

.SAVE SYS KERMIT                [save patched file]

    The newer OS/8 family systems generally can't turn off the CCL
mechanism.  Since the R and RU commands are typically disabled on
newer releases, only the CCL command work-around applies.  Users
opting to disable CCL are likely running "older" systems, such as
OS/8 V3D on DECtapes.  On these systems, ANY of the above methods
should work, because the problematic bug didn't exist on those
systems.  Had DEC not gone "backwards" we could have avoided this
entire discussion!

    It is assumed the user will make "correct" patches to KERMIT-12;
at least there is a "safe and proper" mechanism available to
accomplish it!

cjl

------------------------------

Date: Thu, 6 September 1990 12:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Kermit-12 potential problems

    A newly implemented ENCODE/DECODE method should eliminate the
reported problems with regard to passing encoded binary files through
problematic "paths." The method chosen is a variant on the 5-bit
encoding algorithm suggested.  Encoded files now pass right through
all of the WPS-related utilities.  It is necessary to acquire
virtually all files of this re-release of KERMIT-12 since all ENCODed
files are different, as well as the source programs for the
ENCODing/DECODing utilities themselves.  Due to the file being
"bare", the TECO macro K12GLB.TEC is possibly defective when it
arrives at a user site; it will now be ENCODed as K12GLB.ENC to avoid
this problem.

    The KERMIT-12 source files are different due to maintenance work,
requiring the user to obtain the re-released files.  The sources now
include a file to "pre-clear" memory.  This aids in reducing the size
of the ENCODed binary file K12MIT.ENC since undefined areas are no
longer "relics" of random values, rather they are all set to 0000
octal.  The long strings of identical words will be eliminated since
the new encoding format does repeat compression.

    KERMIT-12 has still not been tested on any DECmates other than
the DECmate II, as no volunteers have come forward with the proper
hardware:

    DECmate I with DP278A
    DECmate I with DP278B
    DECmate III without internal modem
    DECmate III with internal modem
    DECmate III+

    A tentative volunteer for the DECmate I with DP278A configuration
has been contacted, but testing has not yet started.

cjl

------------------------------

26-Jul-90  1:15:43-GMT,15259;000000000001
Return-Path: <lasner@cunixf.cc.columbia.edu>
Received: from cunixf.cc.columbia.edu by watsun.cc.columbia.edu (5.59/FCB)
	id AA26223; Wed, 25 Jul 90 21:15:41 EDT
Received: by cunixf.cc.columbia.edu (5.59/FCB)
	id AA11871; Wed, 25 Jul 90 21:16:19 EDT
Date: Wed, 25 Jul 90 21:16:18 EDT
From: Charles Lasner <lasner@cunixf.cc.columbia.edu>
To: fdc@cunixf.cc.columbia.edu
Subject: This was sent out to PDP8-LOVERS
Message-Id: <CMM.0.88.648954978.lasner@cunixf.cc.columbia.edu>

    I thought you might want to see this; it refers to the encoding
problem I reported for a user with the problem (he has no net
capability) in the programs using that encoding scheme we
discussed...

From:	Charles Lasner (cjl)
To:	PDP8-LOVERS
Subj:	Feedback on encoding issues regarding archived files.

    I have written a pair of OS/8 programs to ENCODE and DECODE
binary files into an "ASCII-fied printable" format.  Those of you
familiar with either uuencode/uudecode or .BOO format will understand
my intentions.  They were originally written for the purpose of
distribution of binary (.SV) files of KERMIT-12 by Columbia
University in NY as part of the standard KERMIT collection (K12*.*).
Columbia imposes a restriction on all files: they must be distributed
in ASCII only.  This is to ensure proper distribution regardless of
the "path" taken between Columbia and the end user.  Be advised that
various problematic E-mailers, ASCII-EBCDIC EBCDIC-ASCII
translations, filters for reserved codes, known problematic character
substitutions, etc. are lurking out there! Consider yourself lucky if
you get your sender's copy intact without some form of "cosmetic"
reformatting.  By encoding the binary files into an appropriate
subset of ASCII, these problems hopefully are avoided.  While we
can't prevent ALL problems, we can usually tackle the most likely
ones.

    My original design was based on a discussion I had with Frank da
Cruz of Columbia University (of KERMIT fame) regarding what to
restrict ourselves to in a robust format.  He was "unhappy" with some
of the vulnerabilities of the uuencode and .BOO formats, which while
popular, are not impervious to some "real" problems that have come
up.  We essentially designed an archiving format that was PDP-8
oriented, but not limited to -8s only.  Some of the highlights of the
format are:

a)  File format restricted to "printable" six-bit subset of ASCII
only.  All else ignored; this was to minimize the "garble" factor,
yet maintain a fairly high rate of efficiency: two ASCII characters
equal one PDP-8 12-bit word. (This has proved to be problematic and
is why we are here!)

b)  The archive file contains imbedded commands, not implied ones.
By validating the commands, you can "trust" the contents.  Commands
are available for whatever purpose arises.  Already implemented are
commands to start ("(FILE filename.ext)") and end ("(END
filename.ext)") the imbedded file, and an official comment command
("(REMARK anything)") to help document the contents of the rest of
the file.  This is of course expandable.  My OS/8 programs create all
three types of commands.  The start and end commands also
theoretically allow multiple files in an archive, but I ignore the
end command in the decoder and only allow one file per archive.  I do
support the start command completely, which includes a suggested name
for the file.  This name can be used at the user's option, or can be
locally overridden.  The encoding program inserts the original file
name in this field, as this is of course the most likely name for the
file at the other end.

c)  The archive contains a checksum for its contents to ensure the
validity of the file.

d)  All "white space" character considerations are ignored; imbedded
extraneous space characters, formfeeds, extra CR/LF, etc. are
harmless.  The CR/LF must be present at appropriate intervals, but
this is only a problem with files passed through unix systems that
delete the CR.  Since OS/8 requires the CR and LF to be considered
"printable", this is not a problem;  the use of programs such as
c-KERMIT will insert the CR if configured properly (SET FILE TYPE
TEXT).  Programs such as Rahul Dhesi's FLIP program are available to
correct the problem easily if necessary: FLIP -m *.* or equivalent
will remedy this.

e)  There is an internal record length of 64 characters with framing
characters, to ensure the validity of each record.  This prevents the
file from getting "out of sync" with its original.  This causes each
line to be 68 characters including CR and LF, which is usually
reasonable to most systems.

    Unfortunately, this scheme has proved to be flawed in an
important way that "matters."  This format must deliver files to
OS/278 systems by the prevailing paths of existent systems connected
to DECmates containing only the normally present DEC release
software.  This could include sending the files via DEC-DX through
WPS8, or acquiring the files on either DECmate CP/M-80 or DECmate
MS-DOS, possibly using KERMIT-80, or KERMIT-MS as appropriate.  If a
file is received in the CP/M-80 environment, it can be converted to
WPS8 format using a DEC-supplied program called WPSCONV.  If a file
is received in the MS-DOS environment, it can be converted to WPS8
format using a DEC-supplied program called CONVERT.  Incidentally,
CONVERT can also convert CP/M-80 files as well, using MS-DOS format
as an intermediary;  WPSCONV is known to have bugs, which were
corrected in CONVERT (which requires the MS-DOS hardware, not just
the CP/M-80 hardware).  These CP/M-80 and  MS-DOS files can also come
to the DECmate directly from a Rainbow as well, since the
corresponding Rainbow systems are format compatible with the DECmate.
DECmate MS-DOS additionally supports IBM-PC diskettes (160K or 180K
single-sided only and read-only) as yet another source.  Thus there
are many paths to WPS8 versions of our files.

    The problem with these methods is that apparently there is a bug
in OS/278 WPFLOP, the only distributed conversion program a user
would already have on his OS/278 system. (We haven't actually
isolated the problem to WPFLOP, as the complaining user was taking
the files from MS-DOS via CONVERT then to OS/278 via WPFLOP;
conceivably the problem is in CONVERT, but in any case the problem
exists somewhere in this supported path.)

    The internal encoding used is to break the 12-bit word into two
six-bit halves.  Each half is in the range 00-77 octal.  Adding 041
to the value yields characters in the range of ! through ` or 041
through 140 octal.  The codes for 101-132 are A through Z and can be
replaced by 141-172 for a through z if desired.  This prevents
case-sensitivity which is another possible network anomaly.  We
identified the DECmate problem as an anomaly regarding @ and `.  The
character codes for 100 and 140 are not treated uniquely, so the
resulting OS/278 file is an inaccurate representation of the file.
The decoding program correctly failed the conversion on a checksum
error, so at least the user was aware of the problem!

    As the PDP8-LOVERS, we will hopefully acquire an archive site for
our files, so all of these considerations will apply.  We need a file
format that is "bullet-proof" to avoid problems like this one.  I am
soliciting suggestions for improvements on this encoding scheme (and
any other overall file format suggestions as well) to provide an
effective solution.  The resultant programs will be added to the
KERMIT-12 collection freely distributed by Columbia as well as other
sources (DECUS, etc.).

    Some suggestions have already been made:

1.  Just "quick-fix" the problem by providing an alternate character
to the ` to make it non-anomalous with @.  The available choices are
{ | } and ~ only.  The DEL character (octal 177) is unsuitable for
other reasons; all other characters are either already used, or
unprintable, or lower-case.  This has the advantage of being most
compatible with the existing programs, since the original character
code can be supported as well; the "preferred" character would be
generated by all future versions of the ENCODE program, and existing
files could be trivially edited for compatibility as needed.  This
would have to be tested  -- it is possible that the bug would
persist.  The choice is further narrowed to { and | only, since 175
and 176 are sometimes treated as alternates to ESC.  It is likely
that systems which "mangle" the case of a character which is
alphabetic could also do the same to { | } and ~ making them [ \ ]
and _ respectively.  This makes the entire suggestion unworkable.

2.  Change the format to "Hexafied-ASCII" where each PDP-8 12-bit
word becomes represented by three characters from a 16-character set
such as 0-9,A-F or A-P.  The alphabetic codes would be immune to case
conversion, and virtually every system supports this subset of ASCII.
Instead of 64 characters on a line representing 32 12-bit words, each
line would be 72 characters on a line representing 24 12-bit words
(not counting framing characters and CR/LF).  This also allows for
many additional codes if needed.  This scheme has the drawback of
making the encoded file more inefficient, as the file will generally
be 50% longer than those created by the original six-bit scheme.
This robust scheme is workable.

3.  Modify 2. to include some form of compression.  The easiest is to
incorporate repeat compression.  One simple scheme is to use an
indicator character (R was suggested) as a prefix for an encoded
count.  It could be followed by three characters encoding the value
of the 12-bit word and two characters encoding the value of the
repeat count.  Since this occupies six characters, as does two
adjacent 12-bit encoded words, this scheme saves space when used for
repeat compression lengths greater than two.  The compressed field is
the same length as two compressed "triplets", so overall file
validation techniques wouldn't require special-case checks, as long
as trailing "fill" characters were allowed for the last record before
the short checksum record (which is signalled by its length).  (T was
suggested for this trailer character to be used to pad the last line
with 0-69 characters.) This allows for compressing 3-258 repeated
12-bit words into six characters.  This would benefit files
containing large areas of zeroes or HLT instructions, etc., as this
can be the actual contents of binary files.  If a .BN file created by
PAL8, etc. is loaded and saved, then "junk" areas are created in the
.SV file.  Unfortunately, this is the norm, and the junk increases
the size of the encoded version of the file.  If the .BN file is
loaded AFTER loading an all-zeroes file such as the binary output of:

        *0

        ZBLOCK  7600

        $

or equivalent as necessary (extended memory zeroed if required,
etc.), then the file has all-zeroes gaps in it.  These would repeat
compress out using this scheme.  Incidentally, an additional
advantage of this method is that the resulting "cleaner" core-image
file is slightly easier to disassemble, in case the source is lost.
(Anyone who ever disassembled a .SV file or equivalent understands
what I mean!).  This also makes a binary papertape file (such as a
diagnostic) loaded into a .SV file a little easier to follow when
consulting the write-up, as memory is zeroed in between the locations
referenced in the listing.  The .SV file is smaller when encoded than
the .BN file due to elimination of the paper-tape encoding overhead.
OS/8 files of diagnostics could therefore be more efficiently
archived as .SV files (encoded) than .BN files.

4.  Change to a 5-bit encoding with compression.  This would use 32
codes chosen from A-Z, 0-9 to encode the file five bits at a time per
character.  Five PDP-8 12-bit words would be encoded in 12
characters.  Since PDP-8 binary files are always multiples of 128
12-bit word pages, there would need to be 4.8 "junk words" at the end
of each block to encode the implied length of 130 words/block.  Each
line would be 78 characters (plus framing characters and CR/LF) so
that four lines encodes a PDP-8 page, just as in the original six-bit
scheme (the original scheme used 64 characters per line!).  The last
line of the file would contain 0-77 padding characters as necessary
to maintain the line width as before.  Repeat compression schemes can
be expressed in any way that is a multiple of 12 characters; perhaps
one or two adjacent expressions of repeat compression similar to
above.  Expected efficiency of this scheme is similar to the original
six-bit method, or possibly slightly better; if compression is NEVER
useful, then the file is 1.2 times as large.

    There is an implementation restriction placed on the DECODE
program: it should be relatively short, since it must be distributed
in source form.  It must also be written in a subset of PAL8
compatible with the original PAL8 of the PS/8 days (ugh!) to ensure
viability on any OS/8 family system.  PAL8 Version B0 from OS/278 is
distributed in ENCODed form, so this restriction need not apply to
any other programs such as the ENCODE program or KERMIT-12, etc.  It
has been determined that PAL8 Version B0 and the companion CREF
Version B0 will correctly function on any OS/8 family system on any
PDP-8 member suitably configured to run the operating system the user
already has running. (There is a minor anomaly when using input files
from the TTY: handler; see K12MIT.DOC for a detailed explanation.)
CPU extensions such as BSW and IAC RAL are not present in these
programs, as was the original intention of OS/8 (which eventually was
lost as newer members of DEC's programming staff were ignorant of
this problem!).  It is acceptable to have a "bare-bones" subset of
the DECODE program distributed in "old" PAL8-compatible source form,
along with a "fancier" version written in a more modern PAL8
language, as the binary could then be DECODed with the subset DECODE
program, or the source could be assembled with PAL8 Version B0 to
"bootstrap" the "full" version of the DECODE program as necessary.

    For those of you who can't wait, and want these utilities as they
stand (using the fallible six-bit method), they are available via
anonymous FTP from Columbia University (watsun) as
/w/kermit/d/k12dec.pal and /w/kermit/d/k12enc.pal for the DECODer and
ENCODer respectively.  More information is available in
/w/kermit/d/k12mit.doc or /w/kermit/d/k12mit.pal regarding use of
PAL8 Version B0, other assemblers (such as PAL10 or P?S PAL) or other
KERMIT-12 issues, etc.

Charles Lasner (lasner@cunixf)
cjl

------------------------------

Date: Fri, 4 May 90 13:55:02 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: Kermit-12 problems

    If the release files of KERMIT-12 are brought to DECmate MS-DOS
via any of the various paths that can be used (such as from a Rainbow
in either CP/M RX50 or MS-DOS RX50 format, etc.; in this particular
case the reporting user obtained them using IBM-PC SSDD 180k 5-1/4"
PC-DOS format.) then the files are available as DECmate II MS-DOS or
CP/M-80 files on one of its standard devices (a:,b:,c:,d: floppies or
e:,f:,g:,h: hard disk volumes).

    The ultimate goal is to get these files (un-scathed!) to DECmate
II OS/278 for KERMIT-12 installation.  The standard DEC CONVERT
program alledgedly can convert any combination of MS-DOS or CP/M-80
or WPS/8 from/to each other.  By converting the files to WPS/8
documents, the files can be translated to OS/278 later (using the
OS/278 WPFLOP utility).

    There is a problem with DEC's CONVERT.EXE: it only CORRECTLY
supports Rainbow/DECmate RX50 MS-DOS and CP/M diskettes, so the other
formats (8" CP/M-80 diskettes and one-sided PC diskettes) have to be
pre-converted with the appropriate copy commands to a supported
diskette or hard disk volume first before using CONVERT.  This is not
a big problem, as we are merely using standard procedures, but the
point is that much of this is undocumented or obscure.  (I had to
help the reporting user to copy his files to a "friendlier" device
for CONVERT's benefit which only delayed our discovery of the REAL
problem!)

    The CONVERT program alledgedly supports ASCII/WPS format
conversion from/to any of MS-DOS, CP/M-80, or WPS/8 (but only on
a:,b:,c:,d:,e:,f:,g:,h: logical drives, not on the other hardware or
media possibly hooked up to the DECmate!).  Our purpose is to move
the K12MIT files to WPS/8 format.  This can be attempted with
standard commands of CONVERT, but there apparently is a bug:

    When you boot to OS/278 and retrieve the WPS/8 documents (via
WPFLOP) which are the ENCODed files of KERMIT-12 as OS/278 files,
there is a character anomaly between two encoding characters
(specifically @ and `) that destroys the integrity of the affected
file.  This is possibly due to a bug in OS/278 WPFLOP, but more
likely is a problem with MS-DOS CONVERT.  Regardless of the
perpetrator, this path is not viable to obtain the ENCODed files of
the KERMIT-12 release.

    Fortunately, the source files are not affected, as the anomalous
characters are not part of the PDP-8 assembly language, and only
comments could be affected. (As far as I can tell, there aren't any
affected characters even in the comments!) It is therefore necessary
to assemble KERMIT-12 directly from the sources when installing it on
the DECmate II if obtaining it via any path which includes
CONVERT/WPFLOP.  The other ENCODed files are for PAL8 Version B0 and
CREF Version B0 which are already present on the DECmate II as part
of the standard release of OS/278 for the DECmate II and are thus
superfluous.  All ENCODed files can be recreated from OS/278 itself
using the sources, etc., so the intended release files can be
recreated for distribution to other OS/278 sites (bypassing the
CONVERT/WPFLOP path).  Future versions of the DECODE program will
obviate this problem when an appropriate alternative format is
supported properly which is immune to DEC's glitch.

    A related problem surrounds the GLOBAL TECO macro K12GLB.TEC (aka
GLOBAL.TEC).  Due to the "delicate" nature of TECO macros, they could
get "mangled" by the time they get to a user site.  Future releases
of KERMIT-12 will "protect" the macro by ENCODing it into K12GLB.ENC.
It has also been reported that there are problems running the macro
on certain releases of OS/8 family TECO and on other TECOs for other
machines, and also problems running certain versions of OS/8 TECO on
the DECmates.  The author will investigate this problem eventually,
but the main usage of the macro is for KERMIT-12 source maintainence
on an OS/8 V3D system using the corresponding version of TECO; it is
beyond the scope of KERMIT-12 development to investigate the myriad
releases of TECO and their hardware and operating system
dependencies; perhaps some TECO hackers can assist us!

    An obscure problem indeed!  Users give good feedback...

   Can you suggest a fix for the CONVERT/WPFLOP-induced corruption?
One is to allow the current format as a subset, but use a
substitution character for the garbled character.  Our character set
is the 64 characters from ! through `, so the anomalous occurrences
of @ are problematic.  If we change the preferred character for ` to
a lower-case letter (only octal 141 up is available, so let's assume
the use of a) we avoid the CONVERT/WPFLOP problem.  Newer released
ENCODed files would then be immune to the treachery, but would
require the newer DECODing program (or use TECO to change all
occurrences of a to ` and then use the old DECODE program).

    Should we abandon this inner format altogether?  We could use an
even more robust format like ASCII hex: 0-9 and A-F (allowing a-f as
well!) at the expense of longer files (currently 2 characters=12
bits, but would become 3 characters=12 bits).  This would also hold
up better through EBCDIC network conversion...

cjl
Added src/kermit-12/k12mit.doc.






















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
/	KERMIT FOR DEC 12-BIT MACHINES

/	LAST EDIT:	06-SEP-1990	11:00:00	CJL

	XLIST	OFF
	IFNDEF	OFF	<OFF=	1>	/TURN LISTING OFF
	IFNDEF	ON	<ON=	0>	/TURN LISTING ON
	XLIST	ON;	IFZERO	1	<








***	 **** *********** *********    ***      *** *** *********** *****   ****
***	****  *********** **********   ****    **** *** *********** *****  ******
***   ****    ***	  ***	 ****  ****    **** ***	    ***	      *** ***  ***
***  ****     ***	  ***     ***  *****  ***** ***     ***       *** **   ****
*** ****      ***	  ***     ***  *****  ***** ***     ***       *** **    ***
*******       ***	  ***    ****  ************ ***     ***       ***       **
******	      **********  **********   *** **** *** ***	    *** ***** ***      **
*******	      **********  *********    *** **** *** ***	    *** ***** ***     **
*** ****      ***	  *** ****     ***  **  *** ***     ***       ***    **
***  ****     ***	  ***  ****    ***  **  *** ***     ***       ***   **
***   ****    ***	  ***   ****   ***      *** ***     ***       ***  **
***    ****   *********** ***	 ****  ***	*** ***	    ***       *** *********
***	 **** *********** ***	  **** ***	*** ***	    ***	      *** *********
					>	XLIST	ON



















/	COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF
/	NEW YORK.



/	PERMISSION IS  GRANTED  TO  ANY  INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS
/	DOCUMENT AND THE  PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL
/	PURPOSES.
/	EDIT HISTORY.							/014 CJL

/	052	06-SEP-1990	BUG FIX.			CHARLES LASNER (CJL)

/		SENDING A FILE WHICH  EXACTLY  FILLS  THE LAST DATA PACKET AT THE
/		END OF THE FILE WILL  CAUSE  THE  PACKET  TO  BE SENT TWICE.  THE
/		ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF.

/	051	29-AUG-1990	BUG FIX.			CJL

/		PDP-8/A NOT IDENTIFIED CORRECTLY  IN  CPUID ROUTINE.  THE UPDATED
/		PC IS WHAT IS LOADED  INTO  THE  AC  WHEN 7016 IS EXECUTED ON THE
/		KK-8/A CPU.  THE ROUTINE WAS  CHECKING FOR THE NON-UPDATED VALUE.
/		ALSO  NEW  DOCUMENTATION FOR PRE-CLEARING MEMORY FOR  BENEFIT  OF
/		ENCODED BINARY FILES.
/	050	06-SEP-1989	DECMATE I SUPPORT, ETC.		CJL

/		THIS EDIT IMPLEMENTS DECMATE  I  SUPPORT USING THE DP278-A OR -B.
/		A NEW CONDITIONAL 'PORT' SELECTS  WHICH  PORT  IS TO BE USED.  IF
/		KERMIT-12 IS RUN ON DECMATE I  (WHILE  NOT  CONFIGURED FOR SERIAL
/		PRINTER  PORT  COMMUNICATIONS;    SEE  EDIT  048.)   THEN  REMOTE
/		COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT  ASSEMBLY TIME
/		('PORT=0' OR 'PORT=1').    ADDED  BAUD  RATE PARAMETER 'BRATE' TO
/		SELECT REMOTE COMMUNICATIONS BAUD  RATE  FROM THE STANDARD TABLE;
/		DEFAULTS TO 1200 BAUD ('BRATE=7').
 
/	049	30-AUG-1989	REMOTE FLOW CONTROL, ETC.	CJL

/		THIS  EDIT  IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW  CONTROL  IS
/		ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO  THE REMOTE
/		KERMIT REGARDLESS  OF  STATE.    PREVIOUSLY,  FLOW  CONTROL  ONLY
/		APPLIED TO CONNECT  MODE.  LOCAL FLOW CONTROL (TOWARDS THE REMOTE
/		KERMIT) IS UNNECESSARY AS  LOCAL  BUFFERS  FOR  REMOTE  INPUT ARE
/		ALWAYS AVAILABLE.  CERTAIN ROUTINE  CHANGES  MADE  FOR BENEFIT OF
/		DECMATE I SUPPORT IN A SUBSEQUENT EDIT.

/	048	24-AUG-1989	DECMATE II, ETC. SUPPORT.	CJL

/		ONCE-ONLY CODE ADDED  TO  IMPLEMENT DECMATE II, ETC.  REMOTE LINE
/		SUPPORT  ON  SERIAL  COMMUNICATIONS   PORT.    SELECTED  PORT  IS
/		INDICATED ON OPENING BANNER IF OPERATING ON DECMATE.

/	THIS EDIT PROVIDES BASIC SUPPORT  OF  THE DECMATE II COMMUNICATIONS PORT AS AN
/	AUTOMATIC FEATURE OF THE STANDARD RELEASE  OF  K12MIT.  AUTOMATIC DETECTION OF
/	DECMATE II, ETC.  HARDWARE IS PERFORMED  UNLESS  THE  PDP-8-TYPE  REMOTE  LINE
/	SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS  THE  REMOTE  LINE ('SPRINT' IS
/	SET OR EQUIVALENT).

/	THIS  EDIT INCORPORATES ALL OF THE  INFORMATION  TAKEN  FROM  VARIOUS  SOURCES
/	REGARDING DECMATE PORT INITIALIZATION, ETC.  EVERY  ATTEMPT  HAS  BEEN MADE TO
/	COMPLETELY  SET ALL APPROPRIATE REGISTERS, ETC.  FOR  DECMATE  II,  III,  III+
/	OPERATION.  NO SUPPORT EXISTS FOR THE DECMATE III  BUILT-IN  MODEM  OPTION, AS
/	EXPLICIT  DOCUMENTATION  IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE  IS
/	APPARENTLY USED TO DISABLE THE MODEM).  THESE ROUTINES ARE ONLY  KNOWN TO WORK
/	ON  THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND  THE  III+
/	HAVEN'T BEEN  AVAILABLE  TO  THE  AUTHOR FOR TESTING.  THE INITIALIZATION CODE
/	WILL BE UPDATED  LATER  TO  INCLUDE  PANEL  REQUESTS,  ETC.    TO  CORRECT ANY
/	PROBLEMS, ETC.  DECMATE-SPECIFIC  FEATURES  (SUCH  AS  SETUP COMMANDS) WILL BE
/	ADDED LATER AND ENABLED FROM THESE ROUTINES.

/	THIS EDIT INCORPORATES  NON-INTERRUPT  ROUTINES  WHICH HAVE BEEN TESTED AT THE
/	MAXIMUM COMMUNICATIONS SPEED OF  THE  DECMATE  II  (19200  BAUD).    THEY WILL
/	SUFFICE FOR ALL KERMIT IMPROVEMENTS  SHORT  OF  SLIDING  WINDOWS AT WHICH TIME
/	INTERRUPT-DRIVEN I/O WILL BE REQUIRED.   (INTERRUPT-DRIVEN  I/O  IS ILLEGAL ON
/	CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL  TO THE SYSTEM OR NON-SYSTEM
/	HANDLERS.) 
/	047	21-AUG-1989	CODE CLEANUP.			CJL

/		STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS.  THIS
/		IS  IN  PREPARATION  FOR  EVENTUAL DECMATE II OPERATION,  AND  TO
/		MINIMIZE  K12PCH  PATCH  FILE SIZE.  CERTAIN NON-CONNECT ROUTINES
/		MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION. 

/	046	15-AUG-1989	CODE CLEANUP.			CJL

/		ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL
/		DECMATE USE.  ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR
/		OF 'COMIN'.   ELIMINATION  OF 'OREM' IN FAVOR OF 'COMOUT'.  ADDED
/		STATUS UPDATE ROUTINE ('UPSTATUS')  FOR EVENTUAL DECMATE II, ETC.
/		USAGE.  ELIMINATED PDP-8, DECMATE  I,  DECMATE  II  CONDITIONALS.
/		REORGANIZED  SERIAL  LINE  CONDITIONALS  AND ADDED  NEW  'SPRINT'
/		PARAMETER FOR SERIAL PRINTER  PORT  USAGE AS COMMUNICATIONS PORT.
/		ADDED ONCE-ONLY CODE ADDED TO  AUTOMATICALLY  RECOGNIZE DECMATE I
/		AND II OPERATION UNLESS ASSEMBLED FOR  REMOTE  COMMUNICATIONS  ON
/		SERIAL  PRINTER  PORT  ('SPRINT'  SET).   UPDATED  K12PCH.PAL  TO
/		CORRESPOND   TO  NEW  DEFINITIONS.    DEFINED  EVENTUALLY  NEEDED
/		COMMUNICATIONS PORT  INSTRUCTIONS FOR DECMATE II;  ACTUAL DECMATE
/		II OPERATION WILL  BE  DEFINED  IN A SUBSEQUENT EDIT.  DOCUMENTED
/		NEW LOADING AND SAVING  INSTRUCTIONS  FOR  K12MIT  TO  ALLOW  FOR
/		ONCE-ONLY CODE IN 10000-11777 WITHOUT  SWAPPING  THE CODE OUT FOR
/		THE USR.  THIS ELIMINATES OVERHEAD  WHEN  LOADING  K12MIT, BUT IS
/		DIFFERENT  FROM  THE FORMER INSTRUCTIONS WHICH ASSUMED  NO  OTHER
/		USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR.

/	THIS EDIT  PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION
/	OF K12MIT ON  ANY  MEMBER  OF  THE  DECMATE  FAMILY  (I, II, III, III+).  WHEN
/	6120-TYPE CPU DETECTION OCCURS,  THE  DECMATE I OR II-TYPE COMMUNICATIONS PORT
/	INITIALIZE CODE IS AUTOMATICALLY SELECTED  AS  NECESSARY UNLESS THE PDP-8-TYPE
/	ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET  OR  EQUIVALENT USER SETTINGS, ETC.)
/	FOR THE VT-78-TYPE PRINTER PORT (32/33), IN  WHICH  CASE THE COMMUNICATIONS IS
/	DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND
/	IS ACCOMODATED AS SUCH).

/	SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL  THE PORT
/	SELECTION,  AS  THERE  ARE  AT  LEAST  TWO VARIANT OPTIONS BOARDS (DP-278A AND
/	DP-278B) EACH CONSISTING OF TWO PORTS.
/	045	12-AUG-1989	BUG FIX.  			CJL

/		FINISH,  GET,  AND  RECEIVE  COMMANDS   FAIL  TO  ABORT  PROPERLY
/		(ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT
/		OPERATING MODE ('KMODE') IS NEVER PROPERLY SET,  OR  IS SET AFTER
/		SEVERAL PACKETS HAVE BEEN SENT.  EACH COMMAND  NOW  SETS  ITS OWN
/		OPERATING MODE BEFORE INITIATING ANY PACKETS.

/	044	11-AUG-1989	CODE CLEANUP.			CJL

/		CHANGED  'CCMSG'  TO  'ABMSG'  WITH  CLEARER  MESSAGE.    CHANGED
/		'CCFLAG'  TO  'ABFLAG' FOR CONSISTENCY.  CHANGED ABORT  CHARACTER
/		FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR  CONSISTENCY.  ELIMINATED
/		'ITTY'  AND  'ITTYW'  ROUTINES  BY  USING  'CTLCTST'  AND 'INPUT'
/		ROUTINES ALREADY  AVAILABLE  A/O EDIT 043.  ELIMINATED 'TCHAR' IN
/		FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043.

/	043	07-AUG-1989	CODE CLEANUP, ETC.		CJL

/		REWRITE OF  CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT
/		AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING
/		USER-INTERFACE  REWRITE.     'SCRIBE',  'LININP',  AND  'ESCPRNT'
/		ROUTINES NOW CALL  "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL
/		MESSAGES.

/	042	13-JUN-1989	CODE CLEANUP.			CJL

/		FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN  K278
/		(SOME  OF  THE K278 STUFF IS DEFICIENT!).  CALCULATION OF  PROPER
/		SEQUENCE  NUMBER  FOR NAK CORRECTED OVER FORMER (K08MIT AND K278)
/		VERSIONS.  ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM.

/	041	12-MAY-1989	BUG FIX.			CJL

/		VARIOUS  VERSIONS  (DECMATE)  WON'T  FUNCTION REMOTELY WHILE KL-8
/		VERSIONS WORK  FINE.    ADDED  REMOTE LINE READ IOT TO INITIALIZE
/		REMOTE  LINE  AT   STARTUP  TIME  FOR  VERSIONS  REQUIRING  THIS.
/		CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT
/		IN TWO PLACES.
/	040	07-MAR-1989	COSMETIC CLEANUP.		CJL

/		CLEANUP OF EDIT HISTORY AND OTHER COMMENTS.

/	039	21-MAY-1988	CODE CLEANUP.			CJL

/		ADDED VARIABLE 'INIECHO' TO  ALLOW  DEFAULT CONNECT-MODE STATE TO
/		BE HALF-DUPLEX ("SET LOCAL-ECHO ON").    MODIFIED  INPUT  SERVICE
/		ERROR ADDRESSES TO SIMPLIFY ERROR TABLES.

/	038	19-MAY-1988	CODE CLEANUP.			CJL

/		ELIMINATED  TRAILER FILES DURING ASSEMBLY BY  CREATING  VARIABLES
/		'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER  FILE  (PARAM.PA)  TO
/		CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY  (WHICH
/		WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY).    OVERLAY
/		BY  K12PCH.BN  WILL  DEFAULT TO CREATION OF A DUMMY USER  MESSAGE
/		(WITHIN K12PCH) ENCOURAGING LOCAL  CUSTOMIZATION.  K12MIT.BN WILL
/		CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA.

/	037	21-JAN-1988	BUG FIX.			CJL

/		RESET OS/8 DEVICE CONTROL WORD  TABLE TO DELETE TENTATIVE FILE IN
/		CASE OF PRIOR INPUT SERVICE ERROR.

/	036	20-JAN-1988	BUG FIX.			CJL

/		RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE
/		THE FLAG SET.

/	035	14-JAN-1988	USR RESIDENT CODING.		CJL

/		CALLS TO USR NOW USE 10200 INSTEAD  OF  17700.   NO SWAP OVERHEAD
/		WHEN OPENING OR CLOSING FILES.

/	034	13-JAN-1988	CODE CLEANUP.			CJL

/		ALL  EIGHT-BIT  ORIENTED  CONSOLE  CODE ELIMINATED;  NOW  IGNORES
/		PARITY (JUST SEVEN BITS).

/	033	12-JAN-1988	CODE CLEANUP.			CJL

/		'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED;  NOW USES 'P7CH' FOR ALL
/		CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE).

/	032	12-JAN-1988	CODE CLEANUP.			CJL

/		VARIOUS  ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE
/		BEYOND THE CLASSIC PDP-8.
/	031	11-JAN-1988	CODE CLEANUP.			CJL

/		ELIMINATED 'RTDISP'  AND  CHANGED CALLING CONVENTION FOR DISPATCH
/		ROUTINE.  ALL  CALLERS  NOW  LOCAL  OR VIA LOCAL POINTERS.  ADDED
/		SEVERAL  CONDITIONAL  PARAMETERS  AND    LABELS  FOR  BENEFIT  OF
/		K12PCH.PAL.

/	030	05-JAN-1988	CODE CLEANUP.			CJL

/		CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE
/		EFFICIENT CODE.

/	029	21-DEC-1987	CODE CLEANUP.			CJL

/		CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND
/		REWROTE 'COMMAND' ROUTINE.

/	028	15-DEC-1987	CODE CLEANUP.			CJL

/		COMPLETE REWRITE OF FILE LOOKUP ROUTINE.   'LUKUP' NOW USES FIELD
/		ONE  BUFFER  AND  ITS OWN AUTO-INDEX REGISTER CONSERVING  PROGRAM
/		SPACE.

/	027	05-DEC-1987	CODE CLEANUP.			CJL

/		CHANGED  DISPATCH  ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE.
/		ALL CALLS  MADE COMPATIBLE.  ELIMINATED 'SCANC' CODE.  ELIMINATED
/		CODE WITHIN 'DPARS'  ROUTINE.    'LUKUP' ROUTINE NOW DOES ITS OWN
/		DISK I/O.  ELIMINATED 'BLKIN' ROUTINE.

/	026	27-NOV-1987	NEW CONNECT MODE CODE.		CJL

/		TOTAL  REWRITE  OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT  AND
/		OUTPUT  TERMINAL  ROUTINES.  CONNECT IS NOW FULLY BUFFERED IN ALL
/		DIRECTIONS.   IF  FLOW  CONTROL  IS  OBEYED, ANY BAUD RATE CAN BE
/		ACCOMODATED BOTH LOCALLY  AND  REMOTE  (UP  TO  9600 BAUD TESTED,
/		SHOULD WORK TO AT  LEAST  19200 BAUD BY INSPECTION).  TESTED WITH
/		FAST VT-100 EMULATOR CONSOLE TO  PROVE  ESCAPE  SEQUENCES ARE NOT
/		DROPPED WHEN LOCAL TERMINAL IS FASTER  THAN REMOTE LINE.  LIMITED
/		USE OF SUBROUTINES TO IMPROVE HIGH BAUD  RATE  OPERATION.   ADDED
/		TABLE-DRIVEN ERROR EXIT ROUTINE FOR SEND ROUTINES.

/	THIS EDIT PROVIDES  FULLY  BUFFERED  INPUT/OUTPUT  ROUTINES FOR BOTH LOCAL AND
/	REMOTE PORTS.  NO  INTERRUPTS  ARE  USED  FOR  MAXIMUM COMPATIBILITY WITH OS/8
/	DEVICES (SOME OF WHICH ARE  INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E).  REMOTE
/	FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER
/	IS 3/4 FULL.  WHEN THE BUFFER  REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1>
/	TO ALLOW FURTHER OUTPUT.  REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS;
/	LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY.

/	WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE  BUFFER WILL FILL WITH OUTPUT
/	CHARACTERS.  WHEN THE USER RELEASES THE CONSOLE WITH <DC1>,  THE  BUFFER  WILL
/	RAPIDLY  EMPTY  (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE).    THIS
/	ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE  LINE UP TO
/	THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS.
/	025	24-NOV-1987	NEW FEATURES AND CODE CLEANUP.	CJL

/		PROPER  INTERRUPT  SETUP  FOR  <^C> AND <^P>, ECHO  STATE.    ALL
/		MESSAGES  IN  NEW  FORMAT,  (SOME NEW ONES HAVE BETTER  CONTENT).
/		ELIMINATED  'PRI6B' AND 'REM6B' ROUTINES.  NEW AND IMPROVED INPUT
/		SERVICE ERROR  CODE  MOVED  TO  PROPER  PAGE.    REWROTE  CONNECT
/		ROUTINES TO ALLOW  NON-INTERRUPT BUFFERED I/O LATER.  CREATED NEW
/		VARIABLE 'ESCHAR' AND PARAMETER  'ESCAPE'  TO  SET DEFAULT ESCAPE
/		CHARACTER.  ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE
/		USED  CORRECTLY  BY ALL ROUTINES.   ADDED  'ESCPRNT'  ROUTINE  TO
/		HANDLE  ALL  CASES  (INCLUDING NON-CONTROL CHARACTERS).   DEFAULT
/		ESCAPE  PARAMETER  VALUE  COMPATIBLE  WITH K08V2, BUT IS  A  USER
/		PARAMETER,  CONFIGURED  AS  OTHER PARAMETERS DEFINED IN EDIT 017.
/		CREATED  ESCAPE FUNCTION TABLE FOR EXPANSION LATER.  NOW SUPPORTS
/		ESCAPE C(LOSE)  IN  UPPER  OR LOWER CASE, ESCAPE ESCAPE (SEND ONE
/		ESCAPE CHARACTER).   ALL  BAD  ESCAPE  COMMANDS  WILL ISSUE <BEL>
/		CHARACTER TO WARN USER  THAT COMMAND IS ILLEGAL AND OTHERWISE WAS
/		IGNORED.  CREATED NEW VARIABLE  'ECHOFLAG' TO ALLOW LOCAL ECHO IN
/		CONNECT MODE.

/	024	19-NOV-1987	NEW FEATURES.			CJL

/		NEW  STARTUP MESSAGES AND HELP METHOD  VIA  COMMAND.    CPU  TYPE
/		IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK  FOR  QUIRKS AND
/		MODEL DEPENDENCIES.  THE DEFAULT PROMPT REFLECTS THE  ACTUAL  CPU
/		TYPE (THUS "KERMIT-12>" ON PDP-12).  VERSION, REVISION, AND  DATE
/		NOW EQUATED SYMBOLS.

/	023	18-NOV-1987	NEW CONSOLE I/O PACKAGE.	CJL

/		NEW  CONSOLE  I/O  ROUTINES  WITH  DC1/DC3  SUPPORT  FOR  CONSOLE
/		TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO
/		BE USED DURING CONNECT MODE).  USES FIELD ONE FOR MESSAGE TEXT TO
/		ALLOW FOR MORE PROGRAM  SPACE.    THE  MESSAGES  ARE NOW GIVEN IN
/		UPPER/LOWER SIXBIT FORMAT.  SUPPORT  FOR <^P> RESTART AND <^O> TO
/		FLIP  ECHO.  UPPER-CASE CAN BE  FORCED  BY  CHANGING  A  VARIABLE
/		('UPONLY').

/	022	17-NOV-1987	BUG FIX.			CJL

/		EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM;  NOW  CHECKS  FOR AND
/		IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE.
/	021	17-NOV-1987	CODE CLEANUP.			CJL

/		REWROTE  TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE  CONSISTENCY.
/		RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE").

/	FORMER  CODE  REGARDING  THE  TENTATIVE  FILE  MAXIMUM  LENGTH WAS  ACCEPTABLY
/	ORGANIZED  FOR  ORIGINAL  PS/8, OS/8 CONVENTIONS.  WITH THE EVOLUTION  OF  THE
/	OPERATING  SYSTEM  INTO  OS/78  (VERSIONS  1-4) AND OS/278 (VERSIONS 1-2), THE
/	ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES.

/	THE  ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL  LENGTH
/	OF  THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM).  IF RECORD 7777 IS  PART  OF
/	THE  ACTUAL  LARGEST  EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON
/	THE  DEVICE),  THEN  THE  LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING
/	BUG).  SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS
/	ASSUMED TO BE CORRECT.

/	TESTS WITH THE  DECUS  VERSION  OF  OS/278 (DM-101) REVEAL A DANGEROUS CHANGE:
/	THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS!

/	TO COUNTERACT THIS, EDIT  010  INSERTED  A  DECREMENT  OF  TWO INTO THE LENGTH
/	BEFORE PASSING IT BACK TO  THE  KERMIT FILE WRITING ROUTINE.  THE FILE WRITING
/	ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S
/	COMPLEMENT  NOTATION,  THIS IS THE AMOUNT THAT  WILL  INDICATE  FILE  OVERFLOW
/	SHOULD IT REACH ZERO.

/	THIS HAS NOW BEEN REORGANIZED TO ALLOW THE  ENTER  ROUTINE  TO  SET THE DANGER
/	COUNT  DIRECTLY.  OS/8 USERS MUST ALLOW FOR THE  EXTRA  ROOM  (WHICH  MUST  BE
/	PRESENT  BUT  WILL NOT BE USED), SINCE NO CHECK FOR  SYSTEM  VERSION  WILL  BE
/	PERFORMED.

/	020	16-NOV-1987	NEW ROUTINES AND CODE CLEANUP.	CJL

/		REWROTE  ENTIRE  OUTPUT  FILE    PACK   ROUTINE.    NOW  SUPPORTS
/		ASCII/BINARY  INTERNAL FILE MODE FOR  LATER  USE.    USES  OUTPUT
/		BUFFER IN FIELD ONE (SAME DEFINITIONS  AS  INPUT BUFFER) TO ALLOW
/		MORE PROGRAM SPACE.  END OF FILE  CONVENTION  IN  ASCII  MODE NOW
/		INCLUDES  ENSURING  <^Z>  CHARACTER  PACKED  INTO FILE (OR  NOT).
/		REWROTE  ENTIRE  OUTPUT  FILE  CLOSE  ROUTINE  TO  IMPLEMENT <^Z>
/		SCHEME.  ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE;  USE
/		SPECIAL ROUTINE CALL INSTEAD.  FIXED PACKET WRITE BUG.

/	019	15-NOV-1987	NEW ROUTINES AND CODE CLEANUP.	CJL

/		FIXED UNPACK <^Z> BUG.  REWROTE ENTIRE INPUT FILE UNPACK ROUTINE.
/		NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE.  USES
/		INPUT BUFFER IN FIELD ONE TO ALLOW  MORE  PROGRAM  SPACE.  BUFFER
/		FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE.  END OF
/		FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER
/		OR  NOT.  ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE;  USE
/		SPECIAL ROUTINE CALL INSTEAD.

/	018	09-NOV-1987	BUG FIX AND CODE CLEANUP.	CJL

/		FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE.
/	017	05-NOV-1987	NEW FEATURES.			CJL

/		CONDITIONAL ASSEMBLY  PARAMETERS  ADDED  FOR MACHINE TYPE (PDP-8,
/		DECMATE I, DECMATE  II/III/III+),  REMOTE LINE AND LOCAL TERMINAL
/		INTERFACE DEFINITIONS.

/	016	05-NOV-1987	CODE CLEANUP.			CJL

/		OPTIMIZATION OF CODE, LITERALS, CONSTANTS.

/	015	04-NOV-1987	BUG FIX.			CJL

/		INPUT SERVICE ROUTINE ERROR  DOES JMP INSTEAD OF JMS WHEN CALLING
/		COMMON ERROR HANDLER.

/	014	02-NOV-1987	SOURCE FILE CLEANUP.		CJL

/		SOURCE FILE COSMETICALLY CLEANED UP  AND  RENAMED  TO  K12MIT.PAL
/		WHICH CONFORMS WITH CUCCA NAMING CONVENTION.    NO  ACTUAL BINARY
/		CODE CHANGES BEYOND K08V2.  THIS EDIT  HISTORY  ADDED.    ENTRIES
/		PRIOR TO 014 TRANSCRIBED BY CJL.

/	SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES)  IS  THE INTENDED ENVIRONMENT
/	FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12.

/	ASSEMBLING  THE  SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA  CONFIRMING
/	THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE).

/	013	01-OCT-1987	CHANGE TO VERSION 2.0.		R. SCHLERF (RICH)

/		CHANGED  'RKIOT'/'RTIOT'    TO   43/44  REMOTE  LINE  IOT  (LOCAL
/		PREFERENCE).  CHANGED  'ESCAPE'  CHARACTER  TO  ^]  ('CONX1') FOR
/		GENERIC CONFORMITY.  ADDED  VERSION/COMMAND BANNER AT STARTUP FOR
/		MINI-HELP.    INCORPORATED  K278  CHANGES  003-006,  009-010  (NO
/		INTERRUPTS).  DELETED 'ERRMSG.' NOW USES  'STXERR'  AT 'CLOOP9'+2
/		FOR PROGRAM SPACE.  TO CONFORM TO  GENERIC KERMIT, "BACK ON PDP8"
/		MESSAGE  DELETED AND REPLACED WITH BEEP <^G>.   MESSAGE  "SENDING
/		FILE  XXXXXX.XX  CREATED  ON  DD-MM-YY"  REDUCED TO "SENDING FILE
/		XXXXXX.XX"  TO CONFORM TO GENERIC KERMIT.  PARITY BIT IS  IGNORED
/		ON BOTH REMOTE AND TTY LINES.  OUTPUT PARITY IS SET TO SPACE.

/	PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY:

/	RICHARD SCHLERF (RICH)
/	AMERICAN CYANAMID COMPANY
/	MEDICAL RESEARCH DIVISION
/	LEDERLE LABORATORIES
/	BUILDING 190 ROOM 115H
/	PEARL RIVER, NEW YORK  10965
/	(914) 732-2186 (09:00 TO 16:00)

/	SINCE  PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS  NOT
/	SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION.  FUTURE
/	VERSIONS WILL  INCORPORATE  THE  DECMATE  FEATURES AND THUS OBSOLETE ALL OTHER
/	VERSIONS AT THAT TIME.
/	012	04-JUN-1986	PROGRAM FIX.			SEPP STADELMANN (SSTA)

/		RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC.

/	04-JUN-1986 VERSION RELEASED  TO  CUCCA  BY  MARTYN HEMMINGS (DEC GERMANY) AND
/	SEPP STADELMANN (DEC SWITZERLAND) OF:

/	DIGITAL EQUIPMENT CORPORATION (DEC)
/	146 MAIN STREET
/	MAYNARD, MASS  01754
/	(617) 897-5111

/	CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH
/	DOESN'T REALLY CONFORM TO THE NAMING CONVENTION).

/	CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE.  FILE REPAIRED BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK  11379-2107
/	(718) 894-6499

/	REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA.

/	PROGRAM IS NOW  THE DECMATE II/III (III-PLUS) KERMIT ONLY.  HOOKS WERE LEFT IN
/	FOR PDP-8 VERSION, BUT  NOT  IMPLEMENTED.    K278  DOES  WORK  WITH ADDITIONAL
/	IMPLEMENTATIONS OF KERMIT, BUT RECEIVE  COMMAND DOES NOT WORK.  PROGRAM YIELDS
/	RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO  FLOPPY-BASED DECMATE II SYSTEM.
/	CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS.  K278 DOES
/	NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND.

/	011	04-JUN-1986	NEW FEATURES.			SSTA

/		'PRQ3' CODE CONDITIONALS.  ROM SETUP COMMAND IMPLEMENTED FOR DMII/III.
/		AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT.

/	010	13-MAR-1986	BUG FIX.			MARTYN HEMMINGS (MART)

/		FULL DISK HANDLED WELL.

/	009	13-MAR-1986	BUG FIX.			MART

/		CLEAN UP BREAK AND GET.
/	008	12-MAR-1986	BUG FIX.			MART

/		CLEAR  INPUT  CHARACTERS  FROM  COMMUNICATIONS PORT WHEN IN  IDLE
/		LOOP.

/	007	11-MAR-1986	NEW FEATURES AND BUG FIX.	MARTYN HEMMINGS AND
/								SSEP STADELMANN
/								(MART+SSTA)

/		INTERRUPT DRIVEN AND BUG FIX.

/	006	10-MAR-1986	NEW FEATURE.			MART+SSTA

/		DEVICE PARSE ON GET.

/	005	10-MAR-1986	BUG FIX.			MART+SSTA

/		NO DATE IN FILE WITH <^Z> INTACT.

/	004	10-MAR-1986	NEW FEATURES AND BUG FIX.	MART+SSTA

/		MAXIMUM  RECEIVE  BUFFER  FIXUP  ('RTERMI'),  15  SECOND TIME-OUT
/		DURING CONNECT.

/	003	10-MAR-1986	BUG FIX.			SSTA

/		TWO PAGE HANDLER FIX.

/	K08MIT.PAL  COPIED  TO  DEC  ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO
/	EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL.

/	KERMIT.PAL  AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO  PRODUCE
/	THE RUNNING KERMIT-8.  *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.*

/	002	18-JUL-1985	ORIGINAL RELEASE.		RANDY HIPPE

/	18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF:

/	BUREAU OF ENGRAVING, INC.
/	3311 BROADWAY N.E.
/	MINNEAPOLIS, MN  55413
/	(612) 623-0900 X218

/	CUCCA  RENAMED  FILE  (KER8.PAL)  TO  K08MIT.PAL  WHICH  CONFORMS  TO   NAMING
/	CONVENTION OF KERMIT FILES.

/	K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY.

/	PROGRAM PRONE  TO  GETTING  "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS
/	'CAPAS' BYTE FEATURE  AND  ASCII  TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF
/	FILE DATA.  COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY.  <^C>
/	ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!).  MANY KERMITS WILL NOT
/	WORK WITH K08MIT;  HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20.

/	001	30-JUL-1984	FIRST VERSION (KER8.PAL).	JERRY SANDS
/	HARDWARE HINTS AND KINKS.


/	KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION:

/	PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY.

/	OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT).

/	KL8-COMPATIBLE CONSOLE INTERFACE.

/	7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:).

/	KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT.

/	NOTE:  ASSEMBLY  PARAMETERS  OF  KERMIT-12  ALLOW FOR LOCAL KERMIT CONTROLLING
/	TERMINALS TO BE OTHER  THAN  THE  PRIMARY  OS/8  CONSOLE  DEVICE.   THE ACTUAL
/	HARDWARE MUST STILL CONFORM TO  THE  SAME REQUIREMENTS (THE DEVICE CODES WOULD
/	THEN BE USER-SPECIFIED AND DIFFER FROM  THE  STANDARD  03/04)  AS THE STANDARD
/	CONSOLE INTERFACE AND TERMINAL.

/	SPECIAL DECMATE CONSIDERATIONS:

/	DECMATE  USAGE IS USUALLY OBTAINED BY  ASSEMBLING  FOR  THE  STANDARD  CONSOLE
/	DEVICE  (03/04),  AS  THE  BUILT-IN  FIRMWARE/SLUSHWARE  OF  THE  DECMATES  IS
/	SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S  REQUIREMENTS.
/	(THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.)

/	DECMATE  REMOTE  COMMUNICATIONS  PORTS  ARE    *RADICALLY*    DIFFERENT   FROM
/	KL8-COMPATIBLE PORTS.  THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH
/	DETECTS  THE  USAGE  OF  KERMIT-12  ON  THE    SPECIFIC  DECMATE  SYSTEM,  AND
/	SELF-CONFIGURATION AS APPROPRIATE.  THERE IS ONE EXCEPTION  TO THIS, NAMELY IF
/	THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER  PORT  (32/33), THEN
/	THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED.    THE  STANDARD
/	ASSEMBLY  OF  KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS  PORT.
/	THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE.
/	CONFIGURATION RESTRICTIONS:

/	WHEN  INTERRUPTS  ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T  WORK.
/	THE  NON-INTERRUPT  VERSION  SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU,  SO
/	THIS  SHOULD NOT BE A PROBLEM.  INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE
/	RUN ONLY  ON  SYSTEMS  WHERE  *ALL*  INTENDED  DEVICES CAN HAVE THEIR HANDLERS
/	INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS.  WHEN IN DOUBT,
/	THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION).

/	IF FLOW CONTROL IS  DISABLED  (DUE  TO  XON/XOFF  BEING  UNAVAILABLE) THEN THE
/	CONSOLE BAUD RATE MUST MEET  OR  EXCEED  THE  REMOTE LINE RATE.  THE USER MUST
/	TAKE MINIMAL CARE NOT TO OVERLOAD  THE  INTERNAL BUFFERS OF KERMIT-12, AS THIS
/	WILL YIELD THE ERROR MESSAGE:  KEYBOARD INPUT ERROR!

/	THIS IS NOT LIKELY TO OCCUR UNLESS  ONE  "PLAYS"  WITH  A  KEYBOARD  WHICH CAN
/	GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE  QUITE  ADEQUATE FOR ALL
/	REASONABLE TERMINAL APPLICATIONS.  SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY
/	XON/XOFF  PROTOCOL  (WHILE  KERMIT-12  HAS  IT  ENABLED), THEN INTERNAL BUFFER
/	OVERFLOW WILL YIELD THE ERROR MESSAGE:  REMOTE LINE INPUT ERROR!

/	THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY  MISUSE OF FLOW
/	CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12  WITH  THE
/	CONSOLE  BAUD  RATE  SLOWER  THAN  THE REMOTE LINE BAUD RATE WITH FLOW CONTROL
/	DISABLED).  IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE
/	LINE INPUT  WILL  OCCUR  WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE
/	USER FREEZES/UNFREEZES THE  DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS
/	FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY.

/	FLOW CONTROL IS NOT  YET  SUPPORTED  DURING KERMIT TRANSFERS.  SINCE KERMIT-12
/	DOES  NOT SUPPORT SLIDING WINDOWS,  KERMIT-12  WILL  NEVER  GENERATE  OUTGOING
/	XON/XOFF SEQUENCES.  FUTURE REVISIONS WILL  SUPPORT INCOMING XON/XOFF FROM THE
/	REMOTE KERMIT.  XON/XOFF PROTOCOL DURING CONNECT  MODE IS COMPLETELY AVAILABLE
/	AT THE USER'S OPTION.

/	CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:"  FEATURES,  I.E.    THE
/	PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS
/	<CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS  ONLY).  TERMINALS
/	LACKING LOWER-CASE  SUPPORT  SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE
/	AUTOMATICALLY.  TERMINALS  SUCH  AS  THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE
/	ENABLED, AS KERMIT-12 SUPPORTS  OPTIONAL  OUTPUT FOLDING.  THE UPPER-CASE ONLY
/	OPTION SHOULD BE ENABLED FOR  TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE
/	HOST,  AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE  MESSAGE  CHARACTERS  (WHICH
/	BECOME UPPER-CASE IF THIS OPTION IS SET).   THE <BS> CHARACTER IS REQUIRED FOR
/	VISUAL  RUBOUT  (<BS>  <SPACE>  <BS>)  ONLY.   FUTURE  VERSIONS  WILL  SUPPORT
/	HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT.  ALL TERMINAL  FEATURES  (SUCH
/	AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST  DURING  CONNECT
/	MODE;  THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL
/	BE  TREATED  AS  A SEVEN-BIT CHARACTER ONLY.  IF THE USER PRESSES  THE  ESCAPE
/	CHARACTER TWICE,  THEN  THE  SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT
/	ONCE;  THERE  IS  NO  WAY  TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET.
/	SINCE THE ESCAPE CHARACTER  ITSELF  CAN  BE SET TO ALMOST ANY SEVEN-BIT VALUE,
/	THIS SHOULD NOT BE A SERIOUS LIMITATION.  TERMINALS THAT DON'T "BEEP" WHEN THE
/	<BEL> CHARACTER IS SENT SHOULD NOT  OUTPUT  A  PRINTABLE RENDITION OF THE <^G>
/	CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT
/	DURING VARIOUS MESSAGE SEQUENCES, ETC.
/	KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:

/	1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA.

/	FUNCTIONAL  BAUD RATES INCLUDE 110, 150, 300, 600,  1200,  2400,  4800,  9600,
/	19200, 38400 AND 76800.  2400 BAUD REQUIRES A  REVISION  "B"  OR  BETTER M8650
/	MODULE  (IF  ONE  USES  DEC'S  DOCUMENTATION  OF AVAILABLE SPLIT-LUG OPTIONS).
/	ACTUAL  BAUD  RATES  UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN  KERMIT-12
/	BECOMES  INTERRUPT-DRIVEN.    RATES  OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ
/	BAUD-RATE OSCILLATOR.

/	THE BAUD  RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE
/	A SINGLE SOLDER  JUMPER  TO  IMPLEMENT  THE  PROPER BAUD RATE ABOVE 2400 BAUD.
/	CHANGING BAUD-RATE GENERATOR CRYSTALS  WILL  PRODUCE OTHER RATES AS NECESSARY.
/	(SEND INQUIRIES  TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS
/	INCLUDING UPGRADED BAUD-RATE  OSCILLATORS,  ETC.) KERMIT-12 HAS BEEN TESTED TO
/	9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION).


/	KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:

/	1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY.

/	FUTURE  VERSIONS  OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED  PARITY
/	OPTIONS.  THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE
/	SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT  INTERACTION
/	WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION).

/	ALL BAUD RATES ARE SUPPORTABLE:

/	110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.

/	19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER  "W5" AND THEN
/	SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD.  A WESTERN DIGITAL TR-1602-B
/	OR  EQUIVALENT  UART  IS  REQUIRED TO SUPPORT 19200 BAUD;  MOST OF THE  RECENT
/	PRODUCTION  DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS
/	THIS REQUIREMENT.   EARLY  M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH
/	*CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!).

/	RECEIVE BAUD RATE SHOULD  BE IDENTICAL TO TRANSMIT BAUD RATE.  (DO NOT SET THE
/	RECEIVE=150 BAUD SWITCH!)
/	OTHER INTERFACES:

/	DKC-8/A (8/A OPTION BOARD #1)  INTERFACES  SHOULD  BE SETUP AS PER THE KL8-J/A
/	SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART.  SOME DEC DOCUMENTATION
/	INDICATED A PROHIBITION ON THE USE OF  19200 BAUD, BUT THIS IS OBVIATED BY THE
/	USE OF THE SAME UARTS AS IN THE KL8-J/A.

/	EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD
/	WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES  DO NOT SUPPORT OPTIONS
/	KERMIT-12  WOULD  REQUIRE  TO  BE  DISABLED  ANYWAY.    THESE  INCLUDE  PARITY
/	GENERATION,  FRAMING  ERROR  DETECTION,  ETC.).  TO UTILIZE THESE DEVICES, THE
/	ASSEMBLY PARAMETERS  FOR  USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES
/	SHOULD BE GIVEN  DURING  ASSEMBLY  (SEE ASSEMBLY INSTRUCTIONS).  PROPER DEVICE
/	CODE VALUES MUST BE  OBTAINED  FOR  THE  SELECTED INTERFACE, AS THERE ARE MANY
/	ACTUAL POSSIBILITIES.  (DP-12 DEVICES  ARE  GENERALLY DEVICE 40/41;  PT08/DC02
/	INTERFACES ARE GENERALLY DEVICE 11/12, ETC.)
/	ASSEMBLY INSTRUCTIONS.

/	KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS:


/	P?S/8 METHOD:

/	ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS  THE  SOURCE  FILE,  THE FOLLOWING
/	COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING:

/	.PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8)

/	OPTION SWITCH BREAKDOWN:

/	/A	ALL SYMBOLS IN SYMBOL PRINTOUT.

/	/C	OPTIMIZE  CORE  DURING ASSEMBLY FOR MORE SYMBOLS,  LESS  BUFFERS.
/		THIS OPTION SHOULD BE DELETED IF MORE THAN  8K  IS  AVAILABLE FOR
/		ASSEMBLY.

/	/E	FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.

/	/J	*DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.

/	/L	PERFORM SECOND-PASS LISTING.

/	/M	CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY.

/	/N	ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT.

/	/P	ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT.

/	/Q	ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS.

/	/S	ENABLE SYMBOL TABLE PRINTOUT.

/	/X	ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY.

/	/8	ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY.

/	THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS  TO BE DETERMINED
/	AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED.

/	P?S/8 PAL IS THE PREFERRED METHOD  OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE
/	TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED.   K12MIT COULD GROW TO A SIZE
/	BEYOND THE CAPABILITIES OF OS/8 CREF.  THIS  LIMITATION  CANNOT  APPLY  TO THE
/	P?S/8 DEVELOPMENT ENVIRONMENT.

/	P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE
/	ASSEMBLY  MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS
/	SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY.

/	NOTE:  P?S/8 IS *NOT* A DEC PRODUCT;  IT IS SOLD COMMERCIALLY AND IS AVAILABLE
/	FREE  OF  CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED
/	INSTITUTIONS.  CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8.
/	OS/8 FAMILY OF SYSTEMS METHOD:

/	K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM  DECUS
/	AS PART OF THE OS/278 RELEASE.  PAL8 VERSION B0 WILL RUN ON  ANY  OS/8  FAMILY
/	SYSTEM,  AS  IT  HAS  NO  HARDWARE  DEPENDENCIES  BEYOND  THE  ORIGINAL  PDP-8
/	REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED).
/	THIS ALSO APPLIES TO CREF  VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE
/	IS REQUESTED.  PAL8 VERSION B0  AND  CREF  VERSION B0 ARE AVAILABLE AS PART OF
/	THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY.  SEE THE
/	DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV  AND CREF.SV FROM
/	THESE ENCODED FILES.

/	ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY
/	ORNAMENTED LISTING:

/	.PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW)

/	DEV:  IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE.    STANDARD  EXTENSIONS
/	ARE  ASSUMED  (.BN  FOR  BINARY, .LS FOR LISTING, .PA FOR PAL  SOURCE).    THE
/	KSCR.TM  TEMPORARY  OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO
/	SYS:CREFLS.TM IF  NOT  EXPLICITLY GIVEN.  MANY SYSTEM DEVICES ARE TOO SMALL TO
/	SUPPORT THIS TEMPORARY  FILE,  THUS  THE  FILE  MAY  BE  DIRECTED  TO  ANOTHER
/	AVAILABLE DEVICE WITH SUFFICIENT SPACE.

/	THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC.  TO
/	THE ASSEMBLY.

/	OPTION SWITCH BREAKDOWN:

/	/C	CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE.

/	/E	GENERATED LINKS ARE ERRORS.

/	/F	*DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.

/	/M	USE MAMMOTH SYMBOL TABLE OPTION FOR CREF.

/	/W	FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.

/	LOADING INSTRUCTIONS:

/	.LOAD DEV:K12CLR,K12MIT.BN	THIS LOADS THE BINARY CLEAR AND KERMIT
/	.SAVE DEV K12MIT.SV=1		THIS SAVES THE CORE IMAGE

/	THE  JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT
/	SHOULD NOT BE SAVED/RESTORED  WHEN  THE  USR  IS  LOADED  OVER  THIS  AREA  OR
/	DISMISSED (THE USR IS ACTUALLY  NEVER  DISMISSED  IN NORMAL K12MIT OPERATION).
/	OTHER BITS MAY BE SET AT  THE  USER'S  OPTION,  BUT  ARE UNNECESSARY;  THE BIT
/	INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD  REGARDING  THE DISPOSITION OF
/	10000-11777.  THE  BINARY  FILE  K12CLR.BN  (CREATED  BY ASSEMBLING K12CLR.PA)
/	LOADS ZEROES INTO ALL  OF  MEMORY  TO  CREATE A "CLEAN" CORE IMAGE FILE, WHICH
/	MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION.
/	PASSING SHORT PARAMETER FILES.

/	WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM  (PARAM.PAL)
/	THE FOLLOWING SHOULD BE NOTED:

/	ALWAYS  PUT  THE  SHORT  PARAMETER  FILE  (CONTAINING EQUATED SYMBOLS SUCH  AS
/	USER=1, ETC.) IN FRONT OF K12MIT.PAL.

/	IF TTY:  IS USED FOR DIRECT TYPE-IN OF THESE  PARAMETERS, THE INFORMATION NEED
/	ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1.  SUBSEQUENT  PASSES  REQUIRE THE
/	ENDING <^Z> ONLY.  IF THIS METHOD IS USED, A LISTING WITHOUT  THE  USER  INPUT
/	WHICH  DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED.  NOTE:  IF  BINARY  IS
/	GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT
/	MESSAGE,  ETC.),  THE  INFORMATION MUST BE TYPED IN DURING PASS 2.  THE PASS 3
/	LISTING MAY  CONTAIN  THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF
/	THE INPUT.   PASS  1  INPUT  OF  THE INFORMATION IS EFFECTIVELY IGNORED, AS NO
/	DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.).

/	EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE:

/	DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED
/	DURING PDP-8 PAL8 B0 OPERATION.  THE KL8E TTY:  HANDLER WILL NO LONGER BE ABLE
/	TO BUFFER <^Z> DURING THE ASSEMBLY;  YOU MUST  WAIT UNTIL THE HANDLER ACCESSES
/	THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY.


/	CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE.

/	IF  SO  DESIRED,  A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING  THE
/	FOLLOWING INTO THE PARAMETER FILE:

/	BUFFLD=	10		/THESE PROBABLY
/	FILBUFF=2000		/WON'T CHANGE!

/	GENMSG=	0		/DON'T GENERATE STANDARD (NULL) MESSAGE
/	UMSG=	0		/DON'T GENERATE STANDARD (DUMMY) USER MESSAGE

/	FIELD	BUFFLD%10	/FIELD FOR TEXT MESSAGE

/	*FILBUFFER		/LOCAL MESSAGE LOADS THERE

/LCLMSG,TEXT	"%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%"

/	ZBLOCK	LCLMSG+40-.	/ZERO REST OF MESSAGE AREA

/	TEXT IS IN  UPPER/LOWER-CASE  SIXBIT  WITH  '^'  MEANING SHIFT CASE (INITIALLY
/	LOWER-CASE) AND '%' MEANING <CR>, <LF>.
/	OTHER METHODS:

/	KERMIT-12  *CANNOT*  BE ASSEMBLED  BY  PAL10  (LAST  KNOWN  VERSION  OF  PDP-8
/	CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES:

/	DOES NOT SUPPORT 'RELOC' PSEUDO-OP.

/	DOES NOT SUPPORT PAGE ZERO  REDEFINE  (CAUSES  "Z" ERROR ON SOURCE FILES WHICH
/	DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).

/	INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO  "Q"  ERROR  ON  SOURCE FILES
/	WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).

/	DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION
/	/W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC.

/	DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8
/	OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES.


/	P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10.  PAL10 SUPPORTS MACRO-8 MODE AS AN
/	OPTION AND AUTOMATIC FIELD DUMP BITMAPS;  ALL OTHER KNOWN PAL10 FEATURES EXIST
/	IN  P?S/8  PAL  INCLUDING  THE  SUPPORT  OF  THE  AUTOMATIC FIELD DUMP  BITMAP
/	PSEUDO-OPS ('ENBITS' AND 'NOBITS').

/	OS/8  PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS  SEVERAL  SYNTACTIC
/	QUIRKS (WHICH  ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8
/	PAL  AND  PAL10    IN  CERTAIN  MINOR  WAYS);    REGARDLESS,  PAL8  LACKS  THE
/	COMPATIBILITY PROBLEMS OF PAL10.

/	MAINTAINING SOURCE COMPATIBILITY.

/	KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8
/	PAL AND OS/8 PAL8 (VERSION  B0).    CERTAIN  FORMS  OF  STATEMENTS  SHOULD  BE
/	AVOIDED:

/	TAD			/NOT LEGAL IN PAL8
/	0+TAD			/NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8
/	TAD	(3)+1		/GENERATES SAME AS "TAD (3+1)" IN PAL8
/	-A!-B			/UNARY OPERATOR HANDLED WRONG IN PAL8
/	I+N			/NOT LEGAL IN PAL8
/	N+I			/NOT LEGAL IN PAL8
/	I I			/NOT LEGAL IN PAL8

/	THIS  REQUIREMENT IS EASILY MET BY  KERMIT-12  AS  MOST  OF  THESE  CASES  ARE
/	ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY.

/	THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT  HAS  OTHER DESIRABLE FEATURES, MOST
/	OF WHICH IT SHARES WITH P?S/8 PAL) ARE  TOO SEVERE TO ALLOW USABLE ASSEMBLY OF
/	THIS  PROGRAM.    BETTER  CROSS-ASSEMBLERS  MAY  EXIST  ELSEWHERE  WHICH   ARE
/	SOURCE-COMPATIBLE WITH KERMIT-12.
/	USE OF P?S/8 LANGUAGE EXTENSIONS.

/	P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL
/	FOR  ASSEMBLY  DEVELOPMENT OF KERMIT-12.  THESE INCLUDE LANGUAGE ELEMENTS SUCH
/	AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE
/	VALUE OF 'EXPR'  WILL  BE  DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY
/	WHEN THAT POINT IN  THE  ASSEMBLY  IS  REACHED.   TO ACCESS THESE FEATURES AND
/	STILL  PROVIDE COMPATIBILITY WITH PAL8  (VERSION  B0),  THE  FOLLOWING  CODING
/	TECHNIQUE IS SUGGESTED:


/	IFNDEF	PQS	<PQS=0>	/WILL BE 0 ON PAL8, PAL10


/	IFZERO	PQS	<	/DO PAL8, ETC. STUFF HERE

/	FOO=	(TABLE)		/DEFINE POINTER TO ADDRESS OF TABLE

/	TAD	FOO-1		/GET (POINTER TO ADDRESS OF TABLE)-1
/	DCA	XR1		/SETUP AUTO-INDEX REGISTER

/	WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8.

/			>	/END OF PAL8, ETC. VARIANT


/	IFNZRO	PQS	<	/DO P?S/8 PAL STUFF HERE

/	TAD	(TABLE)-1	/GET (POINTER TO ADDRESS OF TABLE)-1
/	DCA	XR1		/SETUP AUTO-INDEX REGISTER

/	IFNDEF	PASS	<PASS=0>/DEFINE PASS VARIABLE

/	PASS=	PASS+1		/BUMP EVERY ASSEMBLER PASS

/	PAUSE	PASS		/DISPLAY PASS NUMBER

/	IFNZRO	.&4000	<

/	ERROR	1234		/DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS

/			>

/			>	/END OF P?S/8 PAL VARIANT


/	THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR  PERMANENT ELEMENTS WHICH MAY BE
/	MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT  CODING, WHILE THE PAL8 (VERSION
/	B0) VERSION CAN STILL BE USED (VIA DIRECT  OCTAL,  MULTIPLE EQUATE STATEMENTS,
/	CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC.   AS  NECESSARY)  FOR STANDARD
/	ASSEMBLY OF KERMIT-12.
/	ASSEMBLY PARAMETERS.

/	SEVERAL  PARAMETERS  MUST  BE  CHANGED  WITHIN  K12MIT.PA  (OR  PASSED TO  THE
/	ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE  THE  MAIN
/	FILE):

/	SETTING  KEY= [RECEIVE IOT CODE FOR  CONSOLE  KEYBOARD]  DEFINES  THE  CONSOLE
/	KEYBOARD IOT CODE (DEFAULT IS 03).

/	SETTING  TTY=  [TRANSMIT  IOT CODE FOR CONSOLE  OUTPUT]  CHANGES  THE  CONSOLE
/	PRINTER IOT CODE (DEFAULT IS 04).

/	THE FOLLOWING DEFINITIONS ARE  ESSENTIALLY  FOR  KL8-TYPE DEVICES ONLY, AS THE
/	CODE DEMANDS KL8 HARDWARE COMPATIBILITY.    MODELS  OTHER  THAN PDP-8 (SUCH AS
/	DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON  AVAILABLE  INTERFACES  (OTHER
/	SOFTWARE DESIGNATES A SERIAL INTERFACE AS A  LOGICAL  PRINTER  PORT;  DECMATES
/	SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES  THIS.),  OR  DON'T ALLOW
/	USABLE PLUG-IN OPTIONS.

/	IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE:

/	SETTING DEV30=	1 	CREATES DEVICE 30/31 REMOTE LINE IOTS.

/	SETTING DEV40=	1 	CREATES DEVICE 40/41 REMOTE LINE IOTS.

/	SETTING LEDERLE=1 	CREATES DEVICE 43/44  REMOTE  LINE  IOTS (AND A CUSTOM
/				HEADER).

/	SETTING ORIGNAL=1	CREATES  DEVICE  33/34  REMOTE   LINE  IOTS  (ORIGINAL
/				SETTINGS).

/	SETTING SPRINT= 1	CREATES DEVICE 32/33 REMOTE LINE  IOTS (SERIAL PRINTER
/				PORT).

/	SETTING USER=	1	CREATES DEVICE XX/XY REMOTE LINE IOTS.

/	IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT.



/	SETTING USER=	1	REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES:

/		XX=	[RECEIVE IOT DEVICE CODE] (DEFAULT IS 40).

/		XY=	[TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41).
/	SETTING SPRINT= 1	INHIBITS THE BUILT-IN CHECK FOR DECMATE  OPERATION AND
/				USES    THE    SERIAL  PRINTER  PORT  FOUND  ON    ALL
/				WPS-8-CONFIGURED    PDP-8/E,  PDP-8/A  CONFIGURATIONS,
/				VT-78,  AND  ALL DECMATES (VT-278,  DECMATE  II,  III,
/				III+) FOR REMOTE COMMUNICATIONS.

/	THE  USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY  BE
/	PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER
/	IS A  MODEM  (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC.  REQUIRES A
/	GENDER CHANGER.), OR  THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY
/	*ONLY* FOR A PRINTER,  SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN"
/	KEY AS A SCREEN DUMP  TO  THE  SERIAL PRINTER PORT, ETC.  THESE ISSUES ARE NOT
/	RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY
/	KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE  VERSIONS  COULD  REDEFINE THE
/	"PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.).

/	SETTING BRATE= NN	SETS THE DEFAULT BAUD RATE (FOR  SYSTEMS  THAT SUPPORT
/				THIS  FEATURE)  FROM  A  TABLE  OF  VALUES  (0-15)  AS
/				FOLLOWS:

/				NN		BAUD RATE

/				00		50
/				01		75
/				02		110
/				03		134.5
/				04		150
/				05		300
/				06		600
/				07		1200
/				08		1800
/				09		2000
/				10		2400
/				11		3600
/				12		4800
/				13		7200
/				14		9600
/				15		19200

/	SETTING ESCAPE=	NNNN	SETS THE DEFAULT ESCAPE CHARACTER TO NNNN.

/	SETTING FLOW=	1	ENABLES FLOW-CONTROL BY DEFAULT.
/	SETTING FLOW=	0	DISABLES FLOW-CONTROL BY DEFAULT.

/	SETTING FMODE=	0177	SETS THE DEFAULT FILE MODE TO ASCII.
/	SETTING FMODE=	4377	SETS THE DEFAULT FILE MODE TO BINARY.
/	SETTING GENMSG=	0	CAUSES  NO  BINARY TO BE GENERATED WHERE  'LCLMSG'  IS
/				DEFINED.  THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR
/				SUBSEQUENT  OVERLAY  BY  K12PCH.BN TO DEFINE THE LOCAL
/				HEADER MESSAGE.    THIS  PARAMETER  SHOULD  NOT BE SET
/				UNLESS ONE OF  THESE  METHODS IS USED, ELSE THE HEADER
/				MESSAGE  WILL BE UNDEFINED.    (NOTE:    IF  K12PCH.BN
/				GENERATES  A HEADER MESSAGE, THEN  THIS  PARAMETER  IS
/				UNIMPORTANT,  AS  K12PCH.BN  OVERLAYS  THE  BINARY  OF
/				K12MIT.)
/	SETTING GENMSG=	1	CAUSES A HEADER MESSAGE TO BE GENERATED.  THE CONTENTS
/				OF  THE  MESSAGE  ARE CREATED BY SETTING LEDERLE=1  OR
/				UMSG=1.   IF EITHER IS ZERO, A DEFAULT (NULL)  MESSAGE
/				WILL BE GENERATED.

/	SETTING ICLOSE=	1	ENSURES  A  <^Z>  AT  <EOF>  OF  ASCII  INPUT FILES BY
/				DEFAULT.
/	SETTING ICLOSE=	0	CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT.

/	SETTING INIECHO=0	CAUSES A  FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL
/				CHARACTER ECHOING BY DEFAULT.
/	SETTING INIECHO=1	CAUSES A HALF-DUPLEX  CONNECT  MODE  STATE  WITH LOCAL
/				ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT.

/	SETTING LOWER=	0	ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT.
/	SETTING LOWER=	-40	FOLDS  LOWER-CASE  CONSOLE  OUTPUT  TO  UPPER-CASE  BY
/				DEFAULT.

/	SETTING OCLOSE=	0	PREVENTS DEFAULT SENDING OF <^Z>  AT  <EOF>  OF  ASCII
/				FILES.
/	SETTING OCLOSE= 1	CAUSES  <^Z> TO BE SENT AT <EOF>  OF  ASCII  FILES  BY
/				DEFAULT.

/	SETTING PORT=	0	CAUSES THE DP-278 PORT 0 TO BE USED  IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
/	SETTING PORT=	1	CAUSES  THE DP-278 PORT 1 TO BE USED IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).

/	SETTING RETCNT=	NNNN	SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT.
/	SETTING UMSG=	0	PREVENTS THE  LOCAL  USER  HEADER  MESSAGE  FROM BEING
/				GENERATED.
/	SETTING UMSG=	1	CAUSES THE LOCAL  USER HEADER MESSAGE TO BE GENERATED.
/				THE PARAMETER GENMSG=1 IS  REQUIRED  TO  BE  SET.  THE
/				SOURCE MUST BE MODIFIED LOCALLY  TO CHANGE THE MESSAGE
/				TEXT FROM "INSERT LOCAL USER MESSAGE  HERE!,"  AS THIS
/				IS THE DEFAULT CONTENTS.
/	KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES.

/	BRIEF USAGE DESCRIPTION.

/	KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT
/	DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE.

/	AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE:

/	1.	CONNECT (TO REMOTE SYSTEM AS TERMINAL).

/	2.	SEND FILESPEC (TO REMOTE RECEIVER OR SERVER).

/	3.	RECEIVE FILESPEC (FROM REMOTE SENDER).

/	4.	GET FILESPEC (FROM REMOTE SERVER).

/	5.	FINISH (SERVING).

/	6.	SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED ****

/	7.	EXIT (TO OPERATING SYSTEM).

/	8.	HELP (DISPLAYS HELP MESSAGE).

/	FILESPEC  MAY  BE  ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION,
/	WHERE THE  FILENAME  AND  EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2
/	ALPHANUMERICS RESPECTIVELY, AS  NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME
/	FORMAT).  THE DEVICE:    FIELD  IS  OPTIONAL;   ALL COMMANDS USING THE DEVICE:
/	FIELD FOR LOCAL DEVICE SPECIFICATION  WILL  USE  THIS  DEVICE AS THE SOURCE OR
/	DESTINATION AS NECESSARY FOR THE LOCAL  FILES.    IF  THE  DEVICE:    FIELD IS
/	OMITTED, THE DEFAULT DEVICE DSK:  WILL BE USED.  THE ACTUAL DEVICE USED MAY BE
/	SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND:

/	.ASSIGN DEV DSK

/	WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE.

/	KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT:    THE  ACTUAL DEFAULT PROMPT
/	TEXT  IS  PARTIALLY  TAKEN  FROM  THE  ACTUAL MACHINE KERMIT-12  IS  CURRENTLY
/	EXECUTING  ON.    FOR  EXAMPLE, IF KERMIT-12 HAS DETERMINED THE  CPU  TYPE  AS
/	PDP-8/E, THE PROMPT WILL BE:

/	KERMIT-8/E>

/	THIS  ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH
/	MESSAGES ORIGINATING  FROM  THE  RESPECTIVE  SYSTEMS.    FUTURE  VERSIONS WILL
/	SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES.

/	THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE
/	ESCAPE CHARACTER.
/	COMMAND RESTRICTIONS.

/	THE  SEND  COMMAND  ALLOWS   DEVICE:FILENAME.EXTENSION  (6.2)  WITH  WILD-CARD
/	SUBSTITUTION.  A * MAY  BE  GIVEN  FOR  AN  ENTIRE  FIELD  (EITHER FILENAME OR
/	EXTENSION OR BOTH) ONLY.  A  ?    WILL  MATCH  ANY SINGLE CHARACTER WHICH MUST
/	EXIST IN THE ACTUAL FILENAME OR EXTENSION,  UNLESS  RIGHT-MOST  IN  THE FIELD.
/	ALL  MATCHING FILES WILL BE SENT.  NO  OUTBOUND  FILENAME  (AS-NAME)  FACILITY
/	EXISTS AT THIS TIME.

/	THE  RECEIVE  COMMAND  ALLOWS  OPTIONAL  DEVICE:   ONLY.   *THE  FILENAME  AND
/	EXTENSION  ARE  NOT  ALLOWED*.  NAMES OF RECEIVED FILES WILL  BE  MODIFIED  IF
/	NECESSARY  TO  CONFORM  TO  THE  6.2  FORMAT.   *IMPLEMENTATION RESTRICTION* :
/	CERTAIN REMOTE  FILENAMES  CONTAINING  NON-ALPHANUMERIC  CHARACTERS  MAY CAUSE
/	KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL.

/	THE GET COMMAND  ALLOWS  OPTIONAL  DEVICE:    TO  DETERMINE DESTINATION OF THE
/	INCOMING FILES.  THE  OUTBOUND  FILESPEC  MUST  CONFORM  TO  LOCAL CONVENTIONS
/	(FILENAME AND EXTENSION ARE NOT  LIMITED  TO  6.2  FORMAT;  THE DEVICE:  FIELD
/	WILL NOT BE SENT TO THE  REMOTE  KERMIT  UNLESS  IT  IS  ILLEGAL  WITHIN  OS/8
/	SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS.    IN  THIS CASE, THE DEFAULT
/	DEVICE DSK:  APPLIES, AND THE ENTIRE "DEVICE"  FIELD  IS  SENT  ALONG WITH ANY
/	FILENAME  AND EXTENSION).  CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE  WITH  THIS
/	IMPLEMENTATION,  AS  IMBEDDED  SPACES  OR  NON-ALPHANUMERIC CHARACTERS ARE NOT
/	ALLOWED, EVEN  THOUGH  THEY  MAY  BE REQUIRED ON THE REMOTE SYSTEM.  WILD-CARD
/	CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE.

/	<^X>  OR  <^Z>  CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT  IS
/	NORMALLY  A  SLOW  PROCESS,  SINCE  THE CHECKING IS DONE BY A SOFTWARE TIMEOUT
/	SCHEME.   AT  THE  PRESENT  TIME,  THERE  IS  NO DISTINCTION BETWEEN THESE THO
/	CHARACTERS, SO IT  IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF
/	FILES INVOLVED IN THE TRANSFER IS ABORTED.

/	DECMATE II/III/III-PLUS CONSIDERATIONS:

/	FUNCTION KEYS SEND <ESC>  SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE.  ALL SOFT
/	FUNCTION KEYS ARE THEREFORE INEFFECTIVE  (EXCEPT  FOR HOLD SCREEN WHICH ALWAYS
/	WORKS).

/	CONNECT MODE RUNS IN 8-BIT MODE.

/	THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE.

/	ANY VALID DECMATE II/III/III-PLUS CHARACTER SET  IS  ALLOWED  WHILE IN CONNECT
/	MODE  (MCS  TCS  LINE,  ETC.).    ALL   <ESC>  SEQUENCES  ARE  PASSED  TO  THE
/	SLUSHWARE/FIRMWARE UNMODIFIED.

/	KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM
/	CONNECT MODE.
/	DEFINITIONS.							/017 CJL

	*200					/FOR DEFINITIONS	/047 CJL

/	REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY.		/046 CJL

	IFNDEF	DEV30	<DEV30=	0>		/USE DEVICE 30/31 VALUES
	IFNDEF	DEV40	<DEV40=	0>		/USE DEVICE 40/41 VALUES
	IFNDEF	LEDERLE	<LEDERLE=0>		/USE LEDERLE LABS VALUES
	IFNDEF	ORIGNAL	<ORIGNAL=0>		/USE ORIGINAL VALUES
	IFNDEF	SPRINT	<SPRINT=0>		/USE DEVICE 32/33 VALUES
	IFNDEF	USER	<USER=	0>		/USE USER-DEFINED VALUES

	REMOTE=	DEV30+DEV40+LEDERLE+ORIGNAL	/SET REMOTE LINE IOT CODE
	REMOTE=	REMOTE+SPRINT+USER		/SET REMOTE LINE IOT CODE

	IFZERO	REMOTE	<DEV40=	1>		/DEFAULT TO DEVICE 40/41 VERSION

/	DEV30 PARAMETERS.

	IFNZRO	DEV30			<

	IFNDEF	REC	<REC=	30>		/DEVICE 30 INPUT
	IFNDEF	SEN	<SEN=	31>		/DEVICE 31 OUTPUT

					>

/	DEV40 PARAMETERS (DEFAULT).

	IFNZRO	DEV40			<

	IFNDEF	REC	<REC=	40>		/DEVICE 40 INPUT
	IFNDEF	SEN	<SEN=	41>		/DEVICE 41 OUTPUT

					>

/	LEDERLE PARAMETERS.						/038 CJL

	IFNZRO	LEDERLE			<

	IFNDEF	REC	<REC=	43>		/DEVICE 43 INPUT
	IFNDEF	SEN	<SEN=	44>		/DEVICE 44 OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	0>		/DON'T GENERATE USER MESSAGE

					>

/	ORIGNAL PARAMETERS.

	IFNZRO	ORIGNAL			<

	IFNDEF	REC	<REC=	33>		/DEVICE 33 INPUT
	IFNDEF	SEN	<SEN=	34>		/DEVICE 34 OUTPUT

					>
/	SPRINT PARAMETERS.						/046 CJL

	IFNZRO	SPRINT			<

	IFNDEF	REC	<REC=	32>		/DEVICE 32 INPUT
	IFNDEF	SEN	<SEN=	33>		/DEVICE 33 OUTPUT

					>

/	USER PARAMETERS.

	IFNZRO	USER			<

	IFNDEF	XX	<XX=	40>		/DEFAULT TO DEVICE 40
	IFNDEF	XY	<XY=	41>		/DEFAULT TO DEVICE 41
	IFNDEF	REC	<REC=	XX>		/DEVICE XX INPUT
	IFNDEF	SEN	<SEN=	XY>		/DEVICE XY OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	1>		/GENERATE USER MESSAGE

					>

/	REMOTE LINE IOT DEFINITIONS.

/	RECEIVE DEFINITIONS.

	RKRBIOT=REC^10+6006			/READ REMOTE, CLEAR FLAG
	RKSFIOT=REC^10+6001			/SKIP ON REMOTE INPUT FLAG

/	TRANSMIT DEFINITIONS.

	RSBIOT=	SEN^10+6003			/SET BAUD RATE FROM AC[8-11]
	RTLSIOT=SEN^10+6006			/TRANSMIT CHARACTER, CLEAR FLAG
	RTSFIOT=SEN^10+6001			/SKIP ON TRANSMIT FLAG

/	CONSOLE TTY: DEFINITIONS.					/017 CJL

/	KEYBOARD DEFINITIONS.						/017 CJL

	IFNDEF	KEY	<KEY=	03>	/KEYBOARD DEVICE CODE

	KCCIOT=	KEY^10+6002		/CLEAR CONSOLE KEYBOARD FLAG, AC
	KRBIOT=	KEY^10+6006		/READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG
	KRSIOT=	KEY^10+6004		/READ CONSOLE KEYBOARD BUFFER STATIC
	KSFIOT=	KEY^10+6001		/SKIP ON CONSOLE KEYBOARD FLAG

/	TELEPRINTER DEFINITIONS.					/017 CJL

	IFNDEF	TTY	<TTY=	04>	/TELEPRINTER DEVICE CODE

	TLSIOT=	TTY^10+6006		/PRINT CHARACTER, CLEAR FLAG
	TSFIOT=	TTY^10+6001		/SKIP ON TELEPRINTER FLAG
/	DEFAULT ESCAPE CHARACTER DEFINITION.				/025 CJL

	IFNDEF	ESCAPE	<ESCAPE="]&37>	/DEFAULT IS CONTROL-]

/	DEFAULT LOWER-CASE ENABLE DEFINITION.				/030 CJL

	IFNDEF	LOWER	<LOWER=	0/-40>	/LOWER-CASE IS ALLOWED AS IS
					/CHANGE TO -40 IF LOWER-CASE
					/SHOULD BE FOLDED TO UPPER-CASE

/	DEFAULT RETRY COUNT DEFINITION.					/031 CJL

	IFNDEF	RETCNT	<RETCNT=5>	/DEFAULT IS FIVE RETRIES

/	DEFAULT FILE MODE DEFINITION.					/031 CJL

	IFNDEF	FMODE	<FMODE=	0177>	/DEFAULT IS ASCII FILE MODE
					/4377 IS BINARY FILE MODE

/	DEFAULT FLOW-CONTROL MODE DEFINITION.				/031 CJL

	IFNDEF	FLOW	<FLOW=	1>	/DEFAULT IS FLOW-CONTROL ENABLED

/	DEFAULT ASCII INPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	ICLOSE	<ICLOSE=1>	/ENSURE <^Z> AT ASCII <EOF>

/	DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	OCLOSE	<OCLOSE=0>	/<^Z> NOT SENT AT ASCII <EOF>

/	DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS.			/038 CJL

	IFNDEF	GENMSG	<GENMSG=1>	/DEFAULT IS TO GENERATE A MESSAGE
	IFNDEF	UMSG	<UMSG=	0>	/DEFAULT IS NO DUMMY USER MESSAGE
	IFNDEF	LEDERLE	<LEDERLE=0>	/DEFAULT IS NO LEDERLE MESSAGE

/	THE NULL MESSAGE WILL BE GENERATED BY DEFAULT.

/	ECHO DEFINITION.						/039 CJL

	IFNDEF	INIECHO	<INIECHO=0>	/DEFAULT IS NO LOCAL ECHO

/	DEFAULT DECMATE I PORT DEFINITION.				/050 CJL

	IFNDEF	PORT	<PORT=	0>	/DEFAULT IS PORT ZERO 

/	DEFAULT BAUD RATE DEFINITION.					/050 CJL

	IFNDEF	BRATE	<BRATE=	7>	/DEFAULT IS 1200 BAUD
/	STATE DEFINITIONS.

	STDAT=	"D&137			/DATA
	STACK=	"Y&137			/ACK
	STNAK=	"N&137			/NAK
	STSIN=	"S&137			/SEND-INIT
	STBRK=	"B&137			/BREAK LINK
	STFIL=	"F&137			/FILENAME HEADER
	STEOF=	"Z&137			/END OF FILE OR REPLY
	STERR=	"E&137			/ERROR PACKET
	STATT=	"A&137			/FILE ATTRIBUTES
	STRIN=	"R&137			/RECEIVE-INIT
	STEOT=	"B&137			/BREAK TRANSMISSION
	STGEN=	"G&137			/KERMIT GENERIC COMMAND

/	DEFAULT INIT PARAMETERS.

	DEFCK=	"1&177			/DEFAULT 1 CHARACTER CHECKSUM	/014 CJL
	DEFEOL=	15+40			/CR IS DEFAULT <EOL>
	DEFQCTL= "#&177			/"#" IS DEFAULT QCTL

/	BUFFER DEFINITIONS.						/014 CJL

	DECIMAL				/MAKE IT EASIER			/014 CJL

	DEFMAXL=94			/DEFAULT MAXIMUM PACKET SIZE

	LINSIZ=	32			/KEYBOARD LINE BUFFER SIZE

	OCTAL				/BACK TO NORMAL			/014 CJL

	BUFSIZE=200			/128 CHARACTER RING BUFFERS	/026 CJL
					/FOR NO-INTERRUPT CONNECT MODE
/	CONTROL CHARACTER DEFINITIONS.					/023 CJL

	CNTRLA=	"A&37			/<^A> DEFAULT MARK CHARACTER	/023 CJL
	CNTRLB=	"B&37			/<^B>				/046 CJL
	CNTRLC=	"C&37			/<^C> PROGRAM EXIT CHARACTER	/023 CJL
	CNTRLD=	"D&37			/<^D>				/046 CJL
	CNTRLE=	"E&37			/<^E>				/046 CJL
	CNTRLF=	"F&37			/<^F>				/046 CJL
	CNTRLG=	"G&37			/<^G> BELL CHARACTER		/023 CJL
	CNTRLH=	"H&37			/<^H> BACKSPACE CHARACTER	/023 CJL
	CNTRLI=	"I&37			/<^I> HORIZONTAL TAB CHARACTER	/043 CJL
	CNTRLJ=	"J&37			/<^J> LINEFEED CHARACTER	/023 CJL
	CNTRLK=	"K&37			/<^K> VERTICAL TAB CHARACTER	/046 CJL
	CNTRLL=	"L&37			/<^L> FORM FEED CHARACTER	/046 CJL
	CNTRLM=	"M&37			/<^M> CARRIAGE RETURN CHARACTER	/023 CJL
	CNTRLN=	"N&37			/<^N>				/046 CJL
	CNTRLO=	"O&37			/<^O> ECHO FLIP CHARACTER	/023 CJL
	CNTRLP=	"P&37			/<^P> PROGRAM RESTART CHARACTER	/023 CJL
	CNTRLQ=	"Q&37			/<^Q> OUTPUT RESUME CHARACTER	/023 CJL
	CNTRLR=	"R&37			/<^R>				/046 CJL
	CNTRLS=	"S&37			/<^S> OUTPUT WAIT CHARACTER	/023 CJL
	CNTRLT=	"T&37			/<^T>				/046 CJL
	CNTRLU=	"U&37			/<^U>				/046 CJL
	CNTRLV=	"V&37			/<^V>				/046 CJL
	CNTRLW=	"W&37			/<^W>				/046 CJL
	CNTRLX=	"X&37			/<^X> FILE ABORT CHARACTER	/044 CJL
	CNTRLY=	"Y&37			/<^Y>				/046 CJL
	CNTRLZ= "Z&37			/<^Z> ABORT AND <EOF> CHARACTER /044 CJL
	DELETE=	177			/<DEL> DELETE OR <RO> CHARACTER	/034 CJL
	LOWERC=	"C&177+40		/LOWER-CASE C (CLOSE CHARACTER)	/025 CJL
	UPPERC=	"C&177			/UPPER-CASE C (CLOSE CHARACTER)	/025 CJL

/	I/O AND FIELD DEFINITIONS.					/019 CJL

	BUFFLD=	10			/I/O BUFFER FIELD		/019 CJL
	DIRFLD=	10			/DIRECTORY LOOKUP BUFFER FIELD	/028 CJL
	DMIFLD=	10			/DECMATE ONCE-ONLY CODE FIELD	/046 CJL
	MSGFLD=	10			/TEXT MESSAGE FIELD		/023 CJL
	PAGCNT=	2			/I/O BUFFER SIZE IN PAGES	/019 CJL
	PRGFLD=	00			/PROGRAM FIELD			/019 CJL
	USRFLD=	10			/USR FIELD			/020 CJL

/	OS/8 MONITOR DEFINITIONS.					/014 CJL

	SBOOT=	7600			/MONITOR EXIT LOCATION IS 07600	/014 CJL
	USR=	7700			/NON-LOCKED USR ENTRY POINT	/035 CJL
/	USER SERVICE ROUTINE AND HANDLER DEFINITIONS.			/020 CJL

	CLOSE=	4			/CLOSE TENTATIVE OUTPUT FILE	/020 CJL
	ENTER=	3			/ENTER TENTATIVE OUTPUT FILE	/020 CJL
	FETCH=	1			/FETCH HANDLER			/020 CJL
	INQUIRE=12			/INQUIRE ABOUT HANDLER		/020 CJL
	LOOKUP=	2			/LOOKUP FILE			/020 CJL
	RESET=	13			/RESET DEVICE CONTROL WORD TABLE/037 CJL
	USRIN=	10			/LOCK USR IN CORE		/020 CJL
	WRITE=	4000			/I/O CALL WRITE BIT		/020 CJL

/	INSTRUCTION DEFINITIONS.

	CLCL=	6136			/CLEAR CLOCK FLAG (8/A, ETC.)	/046 CJL
	CLSK=	6131			/SKIP ON, CLEAR CLOCK FLAG	/046 CJL
	CLSK8A=	6137			/SKIP ON CLOCK FLAG (8/A, ETC.)	/046 CJL
	COM=	0017			/COMPLEMENT AC
	DCAC=	DCA	.		/CURRENT PAGE DCA INSTRUCTION	/047 CJL
	IAAC=	6171			/"A" REGISTER TO AC
	IACA=	6167			/AC TO "A" REGISTER
	ISZC=	ISZ	.		/CURRENT PAGE ISZ INSTRUCTION	/050 CJL
	JMPC=	JMP	.		/CURRENT PAGE JMP INSTRUCTION	/047 CJL
	JMPIC=	JMP I	.		/CURRENT PAGE JMP I INSTRUCTION	/047 CJL
	JMSC=	JMS	.		/CURRENT PAGE JMS INSTRUCTION	/047 CJL
	JMSIC=	JMS I	.		/CURRENT PAGE JMS I INSTRUCTION	/047 CJL
	LINC=	6141			/GOTO LINC MODE
	PDP=	0002			/GOTO PDP-8 MODE
	PRQ3=	6236			/TYPE THREE PANEL REQUEST	/046 CJL
	TADC=	TAD	.		/CURRENT PAGE TAD INSTRUCTION	/047 CJL
	R3L=	7014			/ROTATE AC (NOT LINK) LEFT 3	/046 CJL

/	NUMERIC LOAD DEFINITIONS.					/014 CJL

	NL0000=	CLA			/LOAD AC WITH 0000		/046 CJL
	NL0001=	CLA IAC			/LOAD AC WITH 0001		/014 CJL
	NL0002=	CLA CLL CML RTL		/LOAD AC WITH 0002		/014 CJL
	NL0003=	CLA STL IAC RAL		/LOAD AC WITH 0003 (8/I ON UP)	/046 CJL
	NL0004=	CLA CLL IAC RTL		/LOAD AC WITH 0004 (8/I ON UP)	/046 CJL
	NL0006=	CLA STL IAC RTL		/LOAD AC WITH 0006 (8/I ON UP)	/046 CJL
	NL0010=	CLA IAC RAL RAR		/LOAD AC WITH 0010 (6120)	/024 CJL
	NL0100=	CLA IAC BSW		/LOAD AC WITH 0100 (8/E ON UP)	/024 CJL
	NL3776=	CLA CLL CMA RAR RAL	/LOAD AC WITH 3776 (8/I OR 8/L)	/024 CJL
	NL3777=	CLA CLL CMA RAR		/LOAD AC WITH 3777		/046 CJL
	NL4000=	CLA CLL CML RAR		/LOAD AC WITH 4000		/014 CJL
	NL5777=	CLA CLL CMA RTR		/LOAD AC WITH 5777		/046 CJL
	NL6000=	CLA STL IAC RTR		/LOAD AC WITH 6000 (8/I ON UP)	/046 CJL
	NL7775=	CLA CLL CMA RTL		/LOAD AC WITH 7775		/014 CJL
	NL7776=	CLA CLL CMA RAL		/LOAD AC WITH 7776		/014 CJL
	NL7777=	CLA CMA			/LOAD AC WITH 7777		/014 CJL
/	DECMATE I COMMUNICATIONS PORT DEFINITIONS.			/050 CJL

	IPORT0=	30		/COMMUNICATIONS PORT 0 INPUT DEVICE CODE

	RKFL0=	IPORT0^10+6000	/SET COMMUNICATIONS PORT 0 INPUT FLAG
	RKSF0=	IPORT0^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG
	RKCC0=	IPORT0^10+6002	/CLEAR AC
	RKIE0=	IPORT0^10+6005	/PORT 0 INPUT INTERRUPT ENABLE PER AC[11]
	RKRB0=	IPORT0^10+6006	/READ COMMUNICATIONS PORT 0 INTO AC

	OPORT0=	31		/COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE

	RTFL0=	OPORT0^10+6000	/SET COMMUNICATIONS PORT 0 OUTPUT FLAG
	RTSF0=	OPORT0^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG
	RTCF0=	OPORT0^10+6002	/NOP
	RTIE0=	OPORT0^10+6005	/PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11]
	RTLS0=	OPORT0^10+6006	/WRITE COMMUNICATIONS PORT 0 FROM AC

	IPORT1=	34		/COMMUNICATIONS PORT 1 INPUT DEVICE CODE

	RKFL1=	IPORT1^10+6000	/SET COMMUNICATIONS PORT 1 INPUT FLAG
	RKSF1=	IPORT1^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG
	RKCC1=	IPORT1^10+6002	/CLEAR AC
	RKIE1=	IPORT1^10+6005	/PORT 1 INPUT INTERRUPT ENABLE PER AC[11]
	RKRB1=	IPORT1^10+6006	/READ COMMUNICATIONS PORT 1 INTO AC

	OPORT1=	35		/COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE

	RTFL1=	OPORT1^10+6000	/SET COMMUNICATIONS PORT 1 OUTPUT FLAG
	RTSF1=	OPORT1^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG
	RTCF1=	OPORT1^10+6002	/NOP
	RTIE1=	OPORT1^10+6005	/PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11]
	RTLS1=	OPORT1^10+6006	/WRITE COMMUNICATIONS PORT 1 FROM AC

	PCON=	36		/PORT STATUS AND CONTROL DEVICE CODE

	SMFL=	PCON^10+6000	/SET MODEM CHANGE FLAG
	MFSK=	PCON^10+6001	/SKIP ON, CLEAR MODEM CHANGE FLAG
	WCON0=	PCON^10+6002	/WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER
	PSR=	PCON^10+6003	/READ PORT STATUS REGISTER
	PMR=	PCON^10+6004	/READ PORT MODEM REGISTER
	MFIE=	PCON^10+6005	/LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11]
	WCON1=	PCON^10+6006	/WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER
	RACD=	PCON^10+6007	/RESET ACTIVE COMMUNICATIONS PORT PER AC[0]
/	DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS.		/046 CJL

	PORTIN=	30		/COMMUNICATIONS PORT INPUT DEVICE CODE

	IFL=	PORTIN^10+6000	/SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG
	ISF=	PORTIN^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG
	ICF=	PORTIN^10+6002	/NOP (CLEAR THE AC?)
	INOP1=	PORTIN^10+6003	/(NOP?)
	IRS=	PORTIN^10+6004	/READ COMMUNICATIONS PORT RECEIVE BUFFER
	IIE=	PORTIN^10+6005	/COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11]
	IRB=	PORTIN^10+6006	/READ COMMUNICATIONS PORT RECEIVE BUFFER
	INOP2=	PORTIN^10+6007	/(NOP?)

	PORTOUT=31		/COMMUNICATIONS PORT OUTPUT DEVICE CODE

	DUMBFL=	PORTOUT^10+6000	/SET COMMUNICATIONS PORT DUMMY FLAG
	DUMBSF=	PORTOUT^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG
	DUMBCF=	PORTOUT^10+6002	/NOP (CLEAR THE AC?)
 	ONOP1=	PORTOUT^10+6003	/(NOP?)
	OPC=	PORTOUT^10+6004	/LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
	DUMBIE=	PORTOUT^10+6005	/COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11]
	OLS=	PORTOUT^10+6006	/LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
	ONOP2=	PORTOUT^10+6007	/(NOP?)

	PORTCON=36		/COMMUNICATIONS PORT CONTROL DEVICE CODE

	MFL=	PORTCON^10+6000	/SET MODEM CHANGE FLAG
	MSF=	PORTCON^10+6001	/SKIP ON, CLEAR MODEM CHANGE FLAG
	MLC=	PORTCON^10+6002	/LOAD MODEM CONTROL REGISTER
	MSB=	PORTCON^10+6003	/LOAD BAUD RATE REGISTER
	MRS=	PORTCON^10+6004	/READ MODEM STATUS REGISTER
	MIE=	PORTCON^10+6005	/MODEM CHANGE INTERRUPT ENABLE PER AC[11]
	MPSCC=	PORTCON^10+6006	/ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
	MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
/	MISCELLANEOUS DEFINITIONS.					/014 CJL

/	STATIC DATE CALCULATIONS.					/024 CJL

/	THESE EQUATIONS CAUSE PRINTABLE  TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN
/	IN OS/8 INTERNAL FORMAT.  PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION,
/	REVISION, REVDATE, AND REVDGRP.  REVDATE  AND  REVDGRP SHOULD BE OBTAINED FROM
/	THE SYSTEM WHEN RELEASING A NEW VERSION  AFTER  FIRST  CORRECTLY  INVOKING THE
/	SYSTEM DATE COMMAND.

/	VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)]

/	REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77]

/	REVDATE=[THE CONTENTS OF 17666 (DATE WORD)]

/	REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)]



	IFNDEF	REVDATE	<REVDATE=4464>	/REVISION DATE (LOCATION 17666)

	IFNDEF	REVDGRP	<REVDGRP=0400>	/REVISION 8 YEAR DATE GROUP (LOCATION 07777)

	IFNDEF	REVISIO	<REVISIO="G&77>	/REVISION OF KERMIT-12

	IFNDEF	VERSION	<VERSION=12>	/VERSION OF KERMIT-12


	DAY=	REVDATE&370%10		/REVISION DAY

	DGROUP=	REVDGRP&600%20		/REVISION DATE GROUP (WHICH 8 YEARS)

	MONTH=	REVDATE&7400%400	/REVISION MONTH

	YEAR=	REVDATE&7+DGROUP+106	/REVISION YEAR (SINCE 1900)
Added src/kermit-12/k12mit.dsk.








































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
        KERMIT-12 Release Disk Information File a/o 11-Jul-1992.

        Description of files on RT-11 format double-density (RX02) diskettes.

Diskette #1     Source Files

   Name      Size   Block     Date
K12MIT.PAL    453     14    6-Sep-90
K12PCH.PAL     50    467    6-Sep-90
K12ENC.PAL     71    517    8-Jul-92
K12DEC.PAL     69    588    8-Jul-92
K12PRM.PAL      3    657    6-Sep-90
K12CLR.PAL      2    660   30-Aug-90
K12ENB.PAL     47    662    1-Oct-91
K12DEB.PAL     45    709   22-Oct-91
K12IPL.PAL     19    754    6-Oct-91
K12IPG.PAL     23    773    8-Oct-91
<Unused>      192    796

  10 files in 782 blocks,  192 free blocks.

Diskette #2     Documentation and Support Files

   Name      Size   Block     Date
K12MIT.ANN     48     14   11-Jul-92
K12MIT.UPD      3     62   11-Jul-92
K12MIT.DOC    135     65    6-Sep-90
K12MIT.NOT     56    200   11-Jul-92
K12MIT.ENC     24    256    6-Sep-90
K12PL8.ENC     24    280   30-Aug-90
K12CRF.ENC     17    304   30-Aug-90
K12GLB.ENC      6    321    5-Sep-90
K12MIT.LST     30    327    6-Sep-90
K12MIT.DSK     52    357   11-Jul-92
K12ENC.DOC     24    409   31-Aug-90
K12MIT.BWR     74    433    1-May-92
K12MIT.BOO     18    507    1-Oct-91
K12PL8.BOO     18    525    1-Oct-91
K12CRF.BOO     12    543    1-Oct-91
K12GLB.BOO      4    555    1-Oct-91
K12IPL.DOC      9    559    6-Oct-91
K12FL0.IPL     18    568    8-Oct-91
K12FL1.IPL     18    586    8-Oct-91
K12IP0.ODT      4    604    6-Oct-91
K12IP1.ODT      4    608    6-Oct-91
<Unused>      376    612

  21 files in 598 blocks,  376 free blocks.

        Description of individual files.

        K12MIT.PAL

            This is the  current  release  of  KERMIT-12  in source form.  The
        beginning of this file  contains  much  information  about  setting up
        various  hardware (KL-8, etc.) and  software  settings  for  KERMIT-12
        internal operation;  the first 30-35 pages of the listing file created
        by  PAL8  are  available  as a stopgap  user  guide  in  the  form  of
        K12MIT.DOC.  It is extremely important to read the section on assembly
        instructions  for  K12MIT,  as  non-default  switches must be set  for
        proper assembly.

            Due to the sorry  state  of  the  predecessor source (K08MIT) this
        file is based on, it has taken an extreme amount of effort to overcome
        many former limitations on many levels;  there are still many problems
        which only development time (when available) will  overcome.  There is
        also a lot of inconsistency of implementation, i.e., some features are
        totally  finalized  (or  are  so written in such a  way  that  only  a
        non-existent  section  of  code  could  "wake  up" the feature), while
        others  are  bound  to  be  "bodily  replaced"  (such as the low-level
        protocol implementation  which can "blow up" when dealing with certain
        atypical (though perfectly  reasonable)  KERMIT  implementations which
        pass data such as  lower-case file name characters, etc.) when time is
        available.
           
            Approx.   2/3  of  the  source  code  and  80% of the current file
        contents have been  written by Charles Lasner taking advantage of over
        20 years of PDP-8  hacking  and  "cook-book"  methods, etc., including
        some never-before-seen techniques "borrowed" from  P?S/8  (P?S/8 is an
        alternate PDP-8 operating system and is copyright CLA Systems).  Every
        new piece of code added to KERMIT-12  usually  represents an exemplary
        method  for  handling  a  given task, often producing  "quantum  leap"
        improvements over the former code;  see the built-in  edit history for
        details.
           
            It should be noted that  KERMIT-12 runs on the minimum OS/8 family
        configuration  of 8K 12-bit words total  main  memory  (including  the
        operating  system;   this could change in  future  versions!)  and  is
        probably the smallest known (in terms of total executable binary code)
        KERMIT implementation.  (If a P?S/8 KERMIT is written, it  will run on
        a smaller machine, only 4K 12-bit words!)

        A rough table of improvements (wish list?) includes:

        a)      100%  rewrite  of  the  command parser to conform to  accepted
                guidelines of most KERMITs.

        b)      100%  rewrite  of the protocol-related features to allow for a
                robust (though minimal) KERMIT implementation that should work
                in all cases.

        c)      Adding in local  feature  improvements  (Connect  mode  parity
                support, VT-100 terminal support, command  files,  etc.) which
                depend  on  the  better  command  processor    to    implement
                efficiently.

        d)      Adding in protocol improvements such as negotiated  parameters
                (eight-bit, repeat-count  compression, file attributes, server
                mode, etc.) and  session  statistics  (internally and visually
                on-line).

        e)      Additional "frills" such as  scripting language, macros, etc.,
                as well as anything else someone can add to this list.

        K12PCH.PAL

            This is the  official  "patch"  file for K12MIT.PAL.  All relevant
        customizing can be accomplished  within K12PCH.PAL, as all conditional
        parameters  and their consequences have  been  copied  to  K12PCH.PAL,
        leaving only the "pure" code behind in K12MIT.PAL.

            A  standard  assembly  of    K12MIT.PAL  producing  K12MIT.BN  (or
        K12MIT.SV via ABSLDR.SV) can be  overlaid  by  K12PCH.BN to accomplish
        any relevant changes to configure a  custom version.  If any parameter
        causes this convention to be violated, please  notify  Charles Lasner,
        as this specification must be met to support the ability for a minimal
        system  to configure KERMIT-12 from K12MIT.SV and K12PCH.BN on  modest
        hardware (such as one pair of RX01 only).

            Use of K12PCH.PAL mandates a local banner message for the  running
        KERMIT.SV  which should be locally modified as necessary.  The default
        message  is    "Insert    Local    User  Message  Here"  to  encourage
        customization.

        K12ENC.PAL

            This is an encoding program (aka ENCODE) to convert OS/8 files  in
        any format  to  a  "printable"  ASCII format suitable for transmission
        through  any  medium    which  doesn't  "mangle"  the  printing  ASCII
        characters from 0 through  9,  and  A  through  V  (or  a  through v).
        Several binary files are distributed in ENCODE format (see elsewhere).

            All characters outside of the  printing  ASCII  character  set are
        ignored except for the necessity for  "white-space"  to  exist between
        the  two  fields  of  the  optional (FILE  XXXXXX.XX)  command,  which
        specifies the name of the original (un-encoded) file.    Several other
        optional commands are supported;  see K12MIT.ENC as an  example of all
        of  them.    When properly decoded (see K12DEC.PAL description below),
        the  original    file   is  totally  restored  except  for  additional
        information words from the directory (not really in the file itself!),
        thus only the creation  date (if the directory is setup to support it)
        is lost.  Users of  ENCODE  are  encouraged  to use the (REMARK .....)
        command to help in the restoration of the file.  Assembly instructions
        as well as usage examples are provided  in  the  source  file.   NOTE:
        output files created by this program can overwrite existing files with
        identical names;  use this utility carefully!

            The format used by  ENCODE  (and  DECODE)  was designed by Charles
        Lasner and Frank da Cruz  to  allow  seven-bit  ASCII  transmission of
        arbitrary binary files (any file where  the  eight-bit  representation
        must be maintained, such as OS/8 files  unpacked/packed  as strings of
        eight-bit  bytes)  through  "hostile  environments," such as seven-bit
        ASCII-only  KERMIT  (alas,  the current sorry state of KERMIT-12),  or
        various network E-mailers.  An optional checksum feature (supported on
        the PDP-8 version) will ensure against data corruption.  The format is
        robust enough to  allow  extraneous  "white-space"  (<space> <HT> <VT>
        <FF>,  <CR>/<LF>,  etc.) to  be  introduced  by  various  intermediate
        "editors" with no loss.

            It is hoped that this format is adopted on many systems, as it was
        designed to overcome some of the  limitations  of  the  former (albeit
        extremely popular) UUENCODE and .BOO formats used elsewhere.

        K12DEC.PAL

            This is an auxiliary utility (aka DECODE)  to  decode  the encoded
        binary  files  created  by  ENCODE  into their original  form.    (See
        description  of  K12ENC.PAL.)  The  files  can  be recreated with  any
        arbitrary  file  name  including  the  original  file name if embedded
        within  the  encoded file (embedded file name commands are optional to
        the    encoded  file  format.),  and  can  be  directed  to  any  OS/8
        file-structured device.

            Since  this  utility  is  potentially to be used on  systems  with
        "ancient"  assemblers, the source file has been restricted in the  use
        of  "frill"  features,  so it can be assembled by virtually any  known
        standard released version of PAL8 associated with any release of PS/8,
        PS/12, OS/8,  OS/12, OS/78, OS/278, etc., and should be used to decode
        K12PL8.ENC and K12CRF.ENC into PAL8.SV AND CREF.SV respectively, which
        will then allow further  assemblies  with  the  latest  PAL8  and CREF
        (Version B0).  Assembly instructions  as  well  as  usage examples are
        contained within the source file.  NOTE:  output files created by this
        program can overwrite existing files with identical  names;   use this
        utility carefully!

        K12PRM.PAL

            This  is  an example of a custom parameter file  ("PARAM"  in  the
        documentation) for use with either K12MIT.PAL or K12PCH.PAL.  It  sets
        most  of  the  common  parameters  to  their likely (possibly default)
        values.   VT-78-specific  parameters  are  given  for SLU2 support;  a
        VT-78-specific  banner  message    is  created  as  an  example  of  a
        user-defined banner message.

        K12CLR.PAL

            This file is a simple memory-clearing file.  All KERMIT-12 loading
        memory  is  pre-cleared by loading  K12MIT.BN  over  the  binary  file
        K12CLR.BN derived from this file.   This  yields  "cleaner" core-image
        files which will compress better when encoded  with ENCODE (K12ENC) or
        ENBOO (K12ENB).

        K12ENB.PAL

            This file is a utility program to encode  any  OS/8 file into .BOO
        format  for  distribution via any "ASCII" path much the  same  as  the
        ENCODE utility.  While not as robust as ENCODE format,  .BOO files are
        generally smaller,  which  may be desirable.  This implementation uses
        length correction bytes  at  the  end  of  any file requiring it.  The
        ultimate decoding program must  support  this  aspect of the format to
        ensure reliable file recreation.

            This utility, as well as the companion  K12DEB (see below) use the
        standard  OS/8  unpacking  scheme  internally  to  ensure proper  file
        representation    on   other  systems.    This  allows  ASCII  (albeit
        "delicate") files  to be encoded/decoded between systems.  This allows
        exchange of such files as TECO macros without loss.

        K12DEB.PAL

            This  file  is a utility program to decode .BOO format files  back
        into their original  (binary)  form.    Length  correction  bytes  are
        supported to ensure proper file decoding.  Any file encoded with ENBOO
        (aka K12ENB) will decode perfectly back into the original form as long
        as the file's contents are intact  other  than  white-space  and other
        insignificent "cosmetic" considerations.

            Files  not  originating from OS/8 (not an exact  multiple  of  384
        bytes) will be padded with null bytes to fill  the  rest  of an entire
        OS/8  record.    Files  stored  this way and then encoded  again  will
        reflect these extra null bytes.  This implementation doesn't check for
        line terminations,  so  files  delivered without proper <CR>/<LF> line
        termination are acceptable.

        K12IPL.PAL

            This  file  is  a utility program to load  portions  of  KERMIT-12
        directly  into  memory without any error checking or recovery  method.
        It  is used to create K12MIT.SV "from the ground up."  Once  K12MIT.SV
        has  been  created,  this  utility  should  be  abandoned  in favor of
        K12MIT.SV  to acquire all further files.  Use this utility only if  no
        other method is available, as it is inherently unreliable.  The safest
        way to use  it is with a local dedicated connection to another machine
        via null modem.

            K12MIT.SV is available split into single-field encoded files to be
        loaded  by this program.  Documentation on the entire loading  process
        is  contained  within the source file.  The binary version(s) of  this
        program can be directly keyed into ODT if desired as the shortest  way
        to  load  K12MIT.SV  if  desired.    (See  K12IP0.ODT  and  K12IP1.ODT
        description below.)

        K12IPG.PAL

            This file is a utility program to generate the  .IPL  format files
        (K12FL0.IPL  and  K12FL1.IPL  from  K12MIT.SV) meant to be loaded with
        IPL0.SV  and  IPL1.SV as created by the user from K12IPL.PAL.   It  is
        primarily  a  development  tool  and  must be modified if K12MIT.SV is
        enlarged to occupy an additional memory field.
  
        K12MIT.ANN

            This is the release announcement file for KERMIT-12.

        K12MIT.UPD

            This is the release update file for KERMIT-12.

        K12MIT.DOC

            This  is  a  collection  of  hints  and  kinks,  etc.    regarding
        KERMIT-12, including hardware-specific recommendations for customizing
        and assembling KERMIT-12  for  a  variety of configurations.  The edit
        history of KERMIT-12 is also included.  (This file is the beginning of
        the file K12MIT.PAL.  It  is  intended  for  those  who  do not obtain
        K12MIT.PAL, the main source code, which  is much longer and beyond the
        filing capabilities of some of the smaller (though supported) systems.
        By using the information in K12MIT.DOC, KERMIT-12 can  be  created  by
        merely obtaining all of the files except K12MIT.PAL.)

        K12MIT.NOT

            This is a collection of release notes for the latest version.  New
        issues raised or solved by  this release will be collected here.  Old,
        but open issues may be retained in this file also.

        K12MIT.ENC

            This is the standard assembly of the distributed K12MIT.PAL (using
        PAL8 Version B0) into K12MIT.BN which is then loaded (using ABSLDR.SV)
        over K12CLR.BN to produce K12MIT.SV which  is then converted to ENCODE
        format  (using  ENCODE.SV (aka K12ENC.SV) as described  above).    All
        parameters are set to their normal defaults including those parameters
        which cause the local banner message to be generated  as  a valid null
        message (in case K12PCH.BN is not loaded over K12MIT.SV).   This  file
        should  first be decoded with DECODE.SV (aka K12DEC.SV) into K12MIT.SV
        and then  overlaid  by K12PCH.BN to create a customized local version.
        The resultant customized  version  should  be  named KERMIT.SV (or any
        other appropriate file name),  and  not  be  named K12MIT.SV, to avoid
        confusion with the standard release  file  of KERMIT-12;  it is likely
        all future releases will use this naming convention.

        K12PL8.ENC

            This is PAL8 Version  B0  from  the  "official"  release of OS/278
        Version 2, i.e., the version  available  as  DECUS  DM-101,  in ENCODE
        format.  It has no actual  dependencies on any cpu hardware extensions
        beyond the classic PDP-8 (as was originally  intended).   PAL8 Version
        B0 and its companion CREF Version B0 (see  below) will run on any OS/8
        family member system.

            There is a minor quirk of PAL8 Version B0 documented in K12MIT.PAL
        regarding interaction with the  TTY:    handler  of  operating systems
        prior to OS/278, but in all other respects this should be treated as a
        replacement for all prior PAL8 releases.    This version supports 128k
        assembly  as  do  several prior versions;   the  listing  format  will
        truncate  one  column  earlier  on  wide  source  file   input  lines.
        K12MIT.PAL  requires  the use of PAL8 Version B0 (or  essentially  any
        2-digit  release just prior to Version B0;  in any  case  no  versions
        prior  to  Version  10A)  for  proper  assembly.   PAL8 Version B0  is
        distributed as a convenience to KERMIT-12 users.

        K12CRF.ENC

            This  is  CREF  Version  B0 from the "official" release of  OS/278
        Version  2,  i.e.,  the  version  available as DECUS DM-101, in ENCODE
        format.   It  has  no  actual  dependencies on any hardware extensions
        beyond the classic PDP-8 (as was originally intended).  Besides fixing
        several long-standing bugs of  CREF,  this  version  is  the  required
        companion to PAL8 Version B0.    This  is  the only known CREF version
        that will format 128k-capable assembly output  correctly,  which was a
        major  sore point for three prior releases,  preventing  their  proper
        use;  many users have had to stick  with  PAL8  V10A and CREF V3 until
        this  release.   CREF Version B0 is distributed as  a  convenience  to
        KERMIT-12 users.

        K12GLB.ENC

            This is a TECO macro K12GLB.TEC (aka  GLOBAL.TEC)  which maintains
        the concordance between K12MIT.PAL and K12PCH.PAL.  It  is distributed
        in ENCODE format to protect the rigid format requirements  of  a  TECO
        macro.   All global symbols required by K12PCH.PAL are equated  within
        K12MIT.PAL in a special format required by GLOBAL.TEC.  The OS/8  MUNG
        command is used  to  update  K12PCH.PAL whenever KERMIT-12 development
        (within  K12MIT.PAL)  dictates.     KERMIT-12  developers  must  fully
        understand how to use this utility.

        K12MIT.LST

            This file is a symbol-table  listing  of K12MIT.PAL minus the code
        listing.    It  is  needed  by   K12GLB.TEC  for  the  maintenance  of
        K12PCH.PAL.    K12MIT.LST  can be created from  K12MIT.PAL  merely  by
        assembling K12MIT.PAL as documented within K12GLB.TEC;  it is provided
        in  the  distribution  for  those  unable  to obtain the  main  source
        (K12MIT.PAL) due to its size.


        K12MIT.DSK

            This file, which explains the KERMIT-12 distribution files as they
        appear on the RT-11-format RX02 release diskettes.

        K12ENC.DOC

            This is a description of the encoding format used for  the ENCODed
        binary files (.ENC) in the KERMIT-12 release.  Related issues and file
        considerations are also  discussed  to foster future encoding formats,
        since the format is subject to possible change.

        K12MIT.BWR

            This file  documents  known  problems  with the current release of
        KERMIT-12  and related  utilities.    Possible  workarounds  are  also
        discussed.

        K12MIT.BOO

            This is the standard assembly of the distributed K12MIT.PAL (using
        PAL8 Version B0) into K12MIT.BN which is then loaded (using ABSLDR.SV)
        over K12CLR.BN to produce K12MIT.SV which is then  converted  to  .BOO
        format  (using  ENBOO.SV  (aka  K12ENB.SV)  as described above).   All
        parameters are set to their normal defaults including those parameters
        which cause the local banner message to be generated as a  valid  null
        message  (in  case K12PCH.BN is not loaded over K12MIT.SV).  This file
        should first  be  decoded with DEBOO.SV (aka K12DEB.SV) into K12MIT.SV
        and then overlaid  by  K12PCH.BN to create a customized local version.
        The resultant customized version  should  be  named  KERMIT.SV (or any
        other appropriate file name), and  not  be  named  K12MIT.SV, to avoid
        confusion with the standard release file  of  KERMIT-12;  it is likely
        all future releases will use this naming convention.

            It is  conceivable  that  distribution "paths" may be "hostile" to
        .BOO format thus  making K12MIT.SV (or other files) undeliverable when
        encoded in .BOO format.  For example, some users acquire KERMIT-12 via
        a path including WPS and  WPFLOP.SV.   .BOO files cannot reliably pass
        through this process.  In this  or  any  other "troublesome" case, the
        ENCODE format equivalent file is recommended for distribution.

        K12PL8.BOO

            This is PAL8 Version  B0  from  the  "official"  release of OS/278
        Version  2, i.e., the version  available  as  DECUS  DM-101,  in  .BOO
        format.  It has no actual  dependencies on any cpu hardware extensions
        beyond the classic PDP-8 (as was originally  intended).   PAL8 Version
        B0 and its companion CREF Version B0 (see  below) will run on any OS/8
        family member system.

            There is a minor quirk of PAL8 Version B0 documented in K12MIT.PAL
        regarding  interaction  with  the  TTY:   handler of operating systems
        prior to OS/278, but in all other respects this should be treated as a
        replacement for all  prior  PAL8 releases.  This version supports 128k
        assembly as do several  prior  versions;    the  listing  format  will
        truncate  one  column  earlier  on   wide  source  file  input  lines.
        K12MIT.PAL requires the use of PAL8  Version  B0  (or  essentially any
        2-digit release just prior to Version B0;    in  any  case no versions
        prior  to  Version  10A)  for proper assembly.   PAL8  Version  B0  is
        distributed as a convenience to KERMIT-12 users.

        K12CRF.BOO

            This  is  CREF  Version B0 from the "official" release  of  OS/278
        Version  2,  i.e.,  the  version  available  as DECUS DM-101, in  .BOO
        format.    It  has  no  actual dependencies on any hardware extensions
        beyond the classic PDP-8 (as was originally intended).  Besides fixing
        several long-standing bugs  of  CREF,  this  version  is  the required
        companion to PAL8 Version  B0.    This  is the only known CREF version
        that will format 128k-capable assembly  output  correctly, which was a
        major sore point for three prior  releases,  preventing  their  proper
        use;  many users have had to  stick  with  PAL8 V10A and CREF V3 until
        this  release.  CREF Version B0 is distributed  as  a  convenience  to
        KERMIT-12 users.

        K12GLB.BOO

            This is a  TECO  macro K12GLB.TEC (aka GLOBAL.TEC) which maintains
        the concordance between K12MIT.PAL  and K12PCH.PAL.  It is distributed
        in .BOO format to protect  the  rigid  format  requirements  of a TECO
        macro.  All global symbols required  by  K12PCH.PAL are equated within
        K12MIT.PAL in a special format required by  GLOBAL.TEC.  The OS/8 MUNG
        command  is  used to update K12PCH.PAL whenever KERMIT-12  development
        (within  K12MIT.PAL)   dictates.    KERMIT-12  developers  must  fully
        understand how to use this utility.

        K12IPL.DOC

            This file  is  a description of the encoding format for .IPL files
        as used in the direct loading method of acquiring K12MIT.SV.

        K12FL0.IPL

            This file is  the  field  zero data of K12MIT.SV encoded into .IPL
        format for use with IPL0.SV (from K12IPL.PAL).

        K12FL1.IPL

            This file is the field  one  data  of  K12MIT.SV encoded into .IPL
        format for use with IPL1.SV (from K12IPL.PAL).

        K12IP0.ODT

            This  file  is a sample of an ODT session used to  create  IPL0.SV
        using  manual  entry  into  ODT and a SAVE command only.  Some  values
        shown  are  default  and  may  need  to  be  customized  according  to
        parameters documented in  K12IPL.PAL.  Using IPL0.SV (and IPL1.SV from
        K12IP1.ODT as described below)  is the shortest way possible to obtain
        K12MIT.SV when no other method is available.

        K12IP1.ODT

            This file is the  field one companion to K12IP0.ODT used to create
        IPL1.SV using similar means to  those  described  for  IPL0.SV.   Both
        IPL0.SV and IPL1.SV are required to directly obtain K12MIT.SV.

[end of file]
Added src/kermit-12/k12mit.enc.










































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
(REMARK Image File Created by PDP-8: 06-Sep-1990)
(REMARK File Date: 06-Sep-1990)
(FILE K12MIT.SV)
(REMARK Standard core-image binary distribution copy of KERMIT-12.)
(REMARK 06-Sep-1990 Version 10g.)
(REMARK File decodes into K12MIT.SV.)
(REMARK Use DECODE.SV [aka K12DEC.SV] to decode into K12MIT.SV.)
<VVM862000400FI000V02280P2191407G289VA7G1S470098C087H80G52CGE0102R0G00>
<50E2310A4G20K8I43OG1OVG2NGU00E0442K408F6800AG7103HV05F1S00S0885880GU8>
<G00L8302AHC8G05K8480802KG02BOI64GG1090G24010480200J800X001GHIMSP25AHN>
<DF92ESGF4SK2E6LJ0CBB4GQF6GVKMDCJ4QOK64LL0CVJALQEMI1KTCU33DPCM5RJACJEM>
<IM750VL6A1J0TPHUFR82S7J9VQJEDLIDCA32DQOM5PKVSJB70QEMK1JSC5N2OHADFPJ1S>
<VJ0SPJ6P786D472SQH65P84TFJAFP2ML1L6CQJ7TP6E6PIBSTIG8QJ65R86C3R4SK3UJP>
<L9T5B2OK2UB5CESQJ4SLOEGLJ7AJ26THA4AJBUC6N9CO6EKLJGCFN5IONED9IDQQAOTK0>
<M6LJOCRJA5P3D09KUC2J700000X003UJVPFT28CG4VTVA58IBU8I343NUSVKBSOI343NU>
<O00O4CH4O8UA5P0QDJ1341F6T9400000NVPSN812MKM95S9FAC2J1KOQL15VUFDRC8LMS>
<S006FEJ3QLVK0PI1FH30CG4VNP29FD302UM60PHMCHQ0BLK00PIDC3J7EG2U0VO000000>
<0000X001AE5AJ003L9O9M206OQ73018BV17001JRIVV41PTM8JJRCG7MMPTHFTJRCH7MM>
<PTN81JRCG7M7PTHFRJRCH7M7PTHFRJRCG7K1PTHFPJRCH7K1PTHFPJRCG7K1PTHFPJREQ>
<N7M5UUFCBTCUONPPTNDBJPEG3K0N00893A0GR7J371106FAKOCVC40Q1J31LQ6J3DCD66>
<V8MGE5448SDUK1OUMD3I31274IJ0EAPJL4B7NA9MFEMGP11D2FL2Q5LMTKCO8B8V66NL3>
<CBFAI26UMVA5TFF8RR0M5NMECS0000000X00070OVK82V02K2003G1G228QG46S00DABO>
<0QR7I1LV803CCUS6P9RODLBCGRD7F1N5DM3ESP06U5SGDV3KGS0G71O9F23H8T4735SOE>
<93KGSN661PMCG3LCP47CPJGPTJ0HK3663FKB872SP4E6LJ8SG1PHPB6EMGUC3D2SOQQ6U>
<25T41PRQJ69NLMCS000QR7M1LVDG3EST075PPGEDJK0TB791R6ES6FCS4D0PPGSBJKHPB>
<7EMGUE3D2SSQUKPQDTDJN00000X000PX0000X0000XF7GBX000LF7BO0UANHOME7LPO0U>
<8121TDQNJO0U8121TDS7JO0U8121TDSBQC0U629O6UMU3O0U8121TDSBP40U8121TDSBP>
<G0U8121TDOSJO0U8121TDSBOK0U8121TDSBO41MOS61SUF7JO1MOSM1S0INJC6U85C18P>
<81C0IJT8031MG041SRANICIE3O3O6U7J9LAE4GO5897JIE0U87HT4KF7820UDLBP6971S>
<1SGF4H4SK2KK1SGF3Q98UENG2AU84TVH084TV3IG3QEVOG3QEVHP81T7FRU40UJNSMVH0>
<G2ROAI6IAIRHP841SMOS3OF0G801SJF1A1856GGL50F04LSKF6A0B0F20KOGU0QBSUG1H>
<T50419H15F067JPO7G3VVFFJPSU0DBRSUF7JO1OFFJPSUF071TF9VJPS0629O7DSFG3GU>
<NIFPSU0E3QUCV7JO1HP7NPSUF071TF2VJPS0S7LS3UF7G3FOFFJPSU0CMVGUV7JO0UANH>
<OME7LPO0U8121TDQNJO0U8121TDS7JO0U8121TDSBQC0U629O6UMU3O0U8121TDSBP40U>
<8121TDSBPG0U8121TDOSJO0U8121TDSBOK0U8121TDSBO40UB53QRNS7JO0U218DSD0L0>
<K00000000X006IX0000X0000INGPS961C1S1F0HT4KING3UU4NHPC1628I037J9K2E27G>
<2B8F0ROUE718D8971S18FG21T6KM82HIG2O01S3F3PP8I7J5LS0G7GDT0A3S145A5A8T0>
<A3S1S0KPBO0000000000001VF1BP4I7KK0IEG10LC91HC0S16H83UU27H56BG1IKOCGG7>
<TS5F4I8UIG0PGUJ4JGU064J0K1VF1BP4I7KK0IEG1H4O5G3G4Q507I9S51H95C971S0C9>
<61FA0U07IDS57114S7G1H4O5T83O1VF1JOIC2O1O2D2O2DIEA0B20594HT40INIDSL841>
<T4K2H406F6J84S49O0545T9CLS37JHOA3A7K2GK7O28AD7L0M0JCKQGADKO4LSJ2JGI04>
<2LN8C963G4RE2M3Q15F4GK654LGM042LN9T0K1H4O5709KB00JGI05C50KSJ4JPQ0U73Q>
<HT00J1GUN2H56AU3HAI042LN8C963G4RE2M3QAU329OIJ47K2GJ2KIOAIKPBOAO4L3Q18>
<A3S0UG2KG58971S16P9L0KR9G9BOG5643Q18A215706HAD613HD6B5F1BP630K0M0340A>
<823A1ABL009BOMU2M88U19140IE85AI0594HT51IG7TSLF3G44C2O2GV0A19GP043QD90>
<A205909HAD697JK0IJG1H4S99I0K80VNILSE0GHGB0A3S0OF1GAGB0329GAU07HDS5939>
<59DF00000X000HVNI9S51H95C5G1G4ICAKGLS0VNGLSI93QA097828A32IAOA4G1H4O5G>
<3G4Q5F03PAU7088O5G51U0I2GOKIM2O5M080JGGO59040AI93Q9S0VNILSE0GHGB0A3S1>
<451H95C5GBC0IE9L8OC91I8KSKG115451L1T4PG4Q0232G4LSIF19KUK2O1GIE2O14SGA>
<L40AI93QA35F07TSLF3G44C2O2GV0918CA9B1C0O1A1AD90808CM5A7G3UUANHO2261C1>
<8FG4OKS4GBC089918D8F96C0AI93Q81VF5BOS1130M0K7O2CAE285M080JGGO5980L4I7>
<KG3UUANHO2261C18FG4OKS40FRPAU7088O5G51U0I2GOKIM2O5M040L060594HT40X000>
<KX0000X0000X0000X0000X0000X0040PKOS7B80ON633I6D4F0TQGM5P87T9IGEPQMETJ>
<K8RM58HADFRKQCBJAEP767D86SOV7RNKC9P2FCBJ0SOAM51KUCDV6CQSTDRJQCTJ9CPVD>
<0JGMA0N2DOPE1LJ7D9A6VHB49BKUD97AAPO67PHNSP3BPNN5G92ECI79SO9ECPKRA1N67>
<PV5DVGUSSBAAPS6CLGGDJJ26ON61PLCD9MN8HAKDRBPOJN2KQJ69FJMA1N3CPTE4NF88J>
<EONMV49BKTD839SQHE8P82S9N35O6MC1L6CDJ4SOND0PJQS9IGFQJD07GEC774G02O0X0>
<00501O000000000X000FVUO0000000000007S00000000B8260006400X000J0VO01U0D>
<5C0TVVO00000000000000400K140I04GIGPP44N127O000000000003O0Q0FTLG003860>
<F9G3BO002K014SNN55TI8HKGE0302DR15U3603T2G8O52P9I101007V00NUDVPGFTN010>
<7U0590401VJ00H1FVPFTG2CHF0083T1EBUI2CNT4NPVONTC61FP7TQJMK0C6CHDABI36K>
<FUA580QDPFO00L04NT04QG000TG1Q0R8KK0T0FUIA0BSMQ8NOFTRD68FGFKJSFTHT3T4A>
<NGMJDKPT2V95UT6H9KLB3R02QCVN7THVL5TNQ96I4997LSKAP9UI9KNA0V923DGS87V01>
<EG0000000000JNQQL7FLLUC20KCORK05MMFCBQSUONLPTJ12O8BQJ68T05T800CP6NAPJ>
<N81FKG004SAC2KSSAG0008P56960HSIR4L5CATFG0403C0004KRI93G140VA5O155JG14>
<0UA5O0Q78L800N0001R061GNVCFP7IP0BI000H41FSOVIVLI0N6000QK26HL9FAAAIIKA>
<KESVX0003T01QKIL6M8VSS8CNG00FL2TAM0O017TQNPMC49JSQJ6IPHUD9JFA0V6I44NQ>
<S89CRV4APA6ENDIBDER000G0001FIR6RPO00DN9DRO5E1BGA1U1DQ1UIFIUIX000R00P0>
<07E2BJ1LQAUK3LI0024ON007EBVVK2K1905O0008J2S9D5P9EFV7VOKN4TNQHE4IIT49N>
<280000EG0JMDD7GHUKD06L6Q1G7EO9I2D4ON64VQ9QV40JKVA205S4ALFG09EL9OIQAJI>
<SO007017UEG0I5ND000QC2EPN9T8045UKAOM5KV85C5K4QNOKOU2175K7EG2TQ9QLBSJK>
<QNQFRLF001J0RQFMOPTN81JR0VBI8VA5E2BSSUPGHT17I0O8EG0NOPTN81F9G0000X000>
<D0E02G02GQIQ2QDIB5VVG0000X002RDTP21UGAU0NN0UNQHBP2USNVVA5F4BRU44H6V85>
<F08JAUKNNNN1FE9OGET6SNN0000000000X0004V08015OBG1GK454MVO02VTGL905O000>
<6M3O89C1R1T4AIOJQV858SI5UO0LGN2O00QOF115G7C7KHAI2FBT8L729JR02M2SP003B>
<0EOFP2LE9C5AIAOBKS00003E0BG8G2MI463DU8A6ROUUS89TVUGAQKMUS891BUKAOT6U9>
<NTBKBFOKVG1DNHTSOB4M55HTG91BEOKM4N0NC9DV2JU07G1DNPTVUKAQELOX0004DR138>
<RMJTHVD9R2EQGPASMV1X000JVVO00QLILEBGL7RAOQO6M4NVCBJ2UBV6LKTCUA59UBUVL>
<2KS7B2AP574LMKD7B1FRUGAJT5C5VTA5R02LDLCHD5AGOSILH40N07C0ALRG000000004>
<9IO1KQXD6G3007IGBU6OSU7DG2CEF3MO74AIU80K0000000ND1C2IQBMG00003DEBTMQ0>
<MNP2KNI00G03O89I7C0B865EU8000015N2V9GEIIHMQ13P94016PI1PBFIV6UO9M5TG1C>
<JCO2E6OG0013FVS00X0009I2G05M0J5RU6VV1J0006M0HLCD1FV58IM2BGLBBB28QM5PH>
<F5VJB4OR8MCTHUI5AIBUV52KR5V7Q1AMQL55H4D9FMON65VN4DCKB6EOV92L94UNQ1AMK>
<G3M05CDO1R02M2S0X00047CCVLS4AOSNPUA5CABSFK2TJ8DH7R574MALV9CDD2GR2FMAE>
<9CAB5AQ3M6FQLKFC0IOQPFM0NCO00F9MRD6J7KRDOJ9P9800004KI00JSNO89KQD7F9K3>
<IMTNKO5IFGGB4V4X000D05FS2QFG0C0EVKNVLVU000NVDCKVSBUV52KQ5V7QHAFIM8NRV>
<G5AS86IVBQ04UHFIUP4MBL0FCH0R5MQGFL0FCKNT44RG0LI5U7QHA1UK0LIDCJR4BRPDK>
<JSIR9FF5MQGFM04R4MRA1G00000VBCDRC25THFU65C2B3E0RG6S1JITEPJ5OM6EBI2TEP>
<G0000U83F2BO661HH5SBEORN2UPNDTM1ESRN3TJOOLN70LO5E1BO89R07QRNP9SNLUA5E>
<G9UU44NFV85SEJMQQ967NHO000000000X0005VGFVG04A5430V850JU7FUF80BLO008DM>
<LUFVL8BB49LMM6FUL8BR2EOIVNH1DC2B37VAK5TH9C58UIOUK1TH5CKNNOGMM2FUL89B1>
<UKALFM09BTACBUBD8G2V85VN7TAGCG2VA5O1FTG0000X0003IVSNT21286B9IVKGIIPRM>
<C00IJ63D5V916TTX001NALKBD6EVRSC9300015N2VTGE46B2Q8MPD25HCB9FSOQI5MB7H>
<CB2Q8MPE3O8HCB2Q8SPCQ5HDHJ37Q0MOSNUFV9CF7U8M6L99HJCF7TOM4HMV859OB3FL2>
<5HHJ12QOCKG2S000780AOPF19LN05FF0SQU62NLR47BBK9O6MVJBTDL79AQI92X0008TG>
<33755CVO22II80200BPG00T811U1UIFHNB5QHEMBM9FDND4997LSKEK1NEIJAMJFB0041>
<30004S00003VVX000BG73G0HO59002004MSBVM1OGPCB92R5KAL6BGL939CAB9DVO8L3B>
<2RQG75LGV55KKK000AAA900AQKGEAJ2S0JVLA6I025LGPN07C09IRG2B4N07C0BURG025>
<B9O56MF09PCR000015N2VTGE46B2Q8MPD2MAIS7GHB6M5MABJV2SRB6PVQMD9CP2QOCRM>
<FM05VDR7Q0BMC2JBH044N6G89E6X00172AK3IO000C00JVR3LI59F40BC7SKLJQ0B6A90>
<0B8IGEAHA71IIMFS1CP9401CVKE28TFL271JVKE3A827BT0HO9MMBUV92715V3ETQG7TO>
<NRCD9FP5JOS7M04EB3O8U9CQ715URBI8UCHABP00O00008S4LPCDPBLO0M711QT84M7S1>
<26MB2IVK65565E2BUI2D908TFL271IOCE3A827BT0IOF0155CVO2PII800I0BG2B4N000>
<155CVO22II800BGPF1KGUA1FLE000000X000BIHQKHGRFRLLVH9G48OBGB9IE0GJ58136>
<3K25CNO001761K26C784APFG02F9JMSU912POIBKJKSL376PC6DDGJ000008KVO8L9CB7>
<S44JUSV003B4AP2VVI05VNHGIJUO0LIN9O00006NOLU5VF409GF315JTG1BTEPG00006Q>
<PFORF7RONRDNHTTSKARJH149NQHB8IRVT05ULD8BFVL2MO7NKM7EVQR7M1DNQDTB34NUT>
<VX0003C0PU0O44S108627IHFG20FT0LP9GGO1I0EV0X000AVG63DG9VOO0QV9801SKAM9>
<K7IAO8GK0002S0P29VUORIVPGA62NIHAQMPCOADJ1GKR6J19MET81VSR0MO8KRD85A4C5>
<6O9509GD9UC5F52LPDIM82BUPVILI5IJ3GBUPC940LFU8IB5F10OAS893EORLVEKE7UM8>
<3SGAGD40N00000000000X001LA0IG0H3N9D84A0801UKBKOHND24IM2440000N018EROM>
<O64PH69C32J2U4NVV858OI4472K5LC801I4JU42VSH1C3O3E0PM17SCACJORJ400P0F09>
<PC07KJLUA5B69F0ED40905O0BPFL2LH5VJADAN003Q8LHG3QO7SH4GFNG800ISUO341NE>
<F808RMTHVT5QRF330NU4NHD6AF330NU661S1N0C1FJJ5SP43V0LO5E102V7SBV2JOIU4N>
<VV85CPI0K73O8NECIN2440000LGQVQJMAP800X000BG5JR3C0000HTVI58Q87IENT056V>
<QHA6IBQB3L5PVUBVFK2KB4F68L5SG0HA8007OGI067AS0008008PVK2LB5VB2GBU64KNR>
<C9HFKOGM3UFPN74KKLO08QA900C8GGEALQSSIVK6P565E2BUI2CBTS44JISS004VHQG9U>
<UTULK4VDS4AO6AA4004954G063U875CLEV3UKNKVA5DR5520024II80321K3IMNNFKLRJ>
<V0BATUNFIBTEV00000X000ES00KQ4R7G0AEH4G7S0HG5K1HO03V21CO842EGJ8001COBK>
<2EGMG001CO6G2EGC8001CO6G00004KLJQ0AEA900C9UGEAIQSIH9NC2OPKIASI0MC9O17>
<8J400001FUOQ2VQAH6QPFQBVFC3K05V722OP2VEAGN9NC0O121ONQU85C75EOQ42QS070>
<17SQPSNOV85CV5ESVO22S07808TFK2B1T01FFDL08JVVX0014G07VUL6FVR1M02NTPVR0>
<4400U858AE04G1HK4RC95E0003P0L3HOII4M6GNVH4LOI006JSHKD81Q0IGF92KTJ7VC1>
<ABEO2SIX0003TM132OOJ63OOLB70LO5E1BO88C07REGG03P84V17O1UIFHTO9E5QU0000>
<1HGCC9FSQS2VLMHIJVI12NKQ6M05V4AVRI6Q6AFU84AUJ8QP7L0FE5RI0000000X00180>
<BNVKLO1N800T016QQQJG1MA9013S9E6P3497IN0LO5E1A4LP29SL2AKPAKA006821UV52>
<S0DI9CIBVV52L94R7QHAMIP43SVA1CGB4PMMSL4MSRA9GAKSHUV85PAB4E44NUDI5PA00>
<EG0LLD01FRA1G01M75HP7LV0AOIBUG8H72B3PDMTRX001M3EGA1VDG02BEIVK1690PD6B>
<UGA4NT0Q9FQ1IDR142RK9VUFU4GVIG92FK2MIJVD9N7UF12FR5QPEPUKAK6FTLHCVLB2P>
<V6M5DR9EQ1RU45NF5R7QHAPITUBOKONQHB1B0CNF4GFQ1ATEK2M4DR1ENUKANSNDJUPER>
<7SAOKJCJUREPO09UUFMJTCV9A8KG2S0S04VF7R9UMFKJVDCQFPU44VIV85CQ91VL2MUIV>
<KFQ92FL2KCIVKOTA608EIB0OT4M00A7400X00033KO0000002NMLTDE3EFQIIP5N0581E>
<BAOAO0LM5LRF2G00NOS89FJUKAI4NPDOF82BSGESIQDUE8IFGSG7O8H9Q81E000257U25>
<P9I4NV341T09FG1RIB9NO5U722BSVL123N55A800C36M0O7NKGH1V12LC0SRE291FL2LS>
<5O87E9CV52LU4T7QHAVIS6T7TM3FEIJRKS00DO9FBOGIUONNV85CSBGPVUMENGHE3I4NU>
<N41T09FA1RIB1NLNGG01Q0IUNH15TG7FUG4R2UO001FFUGBS4NLS89FDUKBS7497TM837>
<VRS7K15TG7E9C6UQV1X000ANFG00BLE44NBVA5A4BLMTJK15QO7EBVMTF497R682RM28B>
<T8L87DG93FK2L05QN22BLGBJT0L87A0P32TJO8HGI81E000262U25QBI4NTB41T09EK1R>
<IVTNA5QN22BLV5124U25BA9E0BJT84GNQHEII8RT88HLQA00D06MRQ1NKGH2F12M70SRE>
<O91FL2MN5R07E9CV52MP4T7QHBD2TIU2TM34AJ1BO8004LR4E9BM90NVDQHFURLM8LI6C>
<H5TQ0000000X000IE0000QFI8VH14I14BUGAHGKVJVT8PE02JV49EHU83Q0I8S3N4LR4F>
<E0003K14HV22940EVT095LPC0028RI4VA5AMBVF20JKJVTANOC68OI5V85PU93U44I8VA>
<5PVI4J9341JVTPVQ0I903N4LR4HEFG0311LGU2CIVEG2TU0015GVUIB1VS4MJVM9D7V9V>
<PCGTSA00F10JIQ2DDHK74Q7K0NKF80O8KQ6UHX000RLTTFJBSAUQNL04DT211G9S2E0JG>
<4A11GAJVVK004C14G9O290KO4HVVJB0250M04I1AFVVRV0KO4A1708JVVA004E12GAJVV>
<B005412G8C250I85C12VVTDJ0I04A160A3VV9CVVU0000000X002T008000000000X002>
<T0VG2U0G0801D08O4S0OG4010VVO00008J8GDUA583E0000NVUA58QB98OIS64V4C885G>
<DJT0L3DOC006U5GC5SC8DEA0025MUA5AMBVF52LDS0FIHAO2VNT0N6KBCBUFK2L7C3DPK>
<BTOT2Q05UKEHRC21HGCLAO01Q0C36TMO707EO6USOGDVA5JVGD21MTM003F32D21JU8LJ>
<9F33EQOQ4Q5S85PUG41C095S9FJSK61CNOVA7A085M1EU400623FES4RK09NDTQBROT30>
<QMU800ROIUQ6TLQPF33EQTQV8X00050NG4602VUC2F0K7UVVUFU3VNTG62CA07F6FVDQ1>
<EGBVFL2LSQ3MGDQ09FP48IVI6B5V4KQBU9F4NSHE2T3I65Q1FQQEPFO00IVI21AHPFP37>
<IVKGJ5V402BU9B9EHP32VHG85USDP4PIT3I65Q1FKO42V66SGCU8L7S012RPFTRVCNQLU>
<KKA5T7Q1B42HCNJVA5DHHCU032US029RB6CBUMJD868NFPCB6KAD868NFOMK0NGD8L8K0>
<06T4USC2ADPI4J11O99QDE5I0RRG00X00078U88M20358P2QEMMDL0VO3VR9RNVOIV44B>
<VLS0001R0201M25VR00B1603NC5VNQHAEESGNTV85BTQ1IVJT8L9VA1HRUG33PS0FQHAU>
<QNVL0V0FQ1ATSC40F00N03UKANALSS3NIHAOIVFP8LE9FLUKAN2M1T39FJUKAMQLNXS08>
<BN00000000000X001JVU7UC7PFO002G0N3U0000000X003TX0040P2AT5N6KPVE57AUD1>
<79APQUKPLAT7399H75FBKUT8AGCONUDLL0CBJ6EP765J85CU3ACOD6FHHD8R26PHBE9LH>
<MCBV9CH5EIRJACVF2SH7E4DHDR9MOBH7LHL2FOJJ26ON61PLET8IGCPT50PHCTDB1GOML>
<KVC5B82OTQOM5PKVSJ37AHMKDV2M8IN2BQO5JP80T1J9DO765BL5D5R9OHNCAP2KOJN3A>
<PQ6IJJUS8R2OMEDGN2E8J26THB4AJ2ECCJ78OME6PKHSBM4INIU5RGTOI2PONQC9PBQS9>
<JB3P6U5786B16G00000ZFKK57VVVVVVV>
(END K12MIT.SV)
(REMARK End of File)
Added src/kermit-12/k12mit.lst.






















































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267

SYMBOLS                                   PAL8-VB0  06-SEP-90 PAGE 181

ABFLAG 0002      CNTRLE 0005      CREST2 0430      DMSEND 0351
ABMSG  4000      CNTRLF 0006      CRLF   4411      DMSER  6730
ABORT  4266      CNTRLG 0007      CSTUFF 5316      DMWAST 0357
ABORT2 4303      CNTRLH 0010      CTLCTS 6466      DM1AND 0710
ABORT3 4317      CNTRLI 0011      CURSEQ 0037      DM1AN2 5722
ABORT9 4321      CNTRLJ 0012      DATWOR 3502      DM1INI 0200
AIWCNT 3501      CNTRLK 0013      DAY    0006      DM1LIS 0600
AIWLUP 3437      CNTRLL 0014      DAYMSG 2145      DM1POR 0234
AIWNUM 2404      CNTRLM 0015      DCAC   3200      DM1SEC 0707
AIWSTO 3440      CNTRLN 0016      DCADAT 3433      DM2INI 0213
AIWTES 3442      CNTRLO 0017      DEFCK  0061      DM2LIS 0467
ALPHA  3247      CNTRLP 0020      DEFDEV 1456      DM234  0360
ALPHA1 3262      CNTRLQ 0021      DEFEOL 0055      DM2460 0361
ALPNM1 3245      CNTRLR 0022      DEFMAX 0136      DM2516 0362
ALPNUM 3237      CNTRLS 0023      DEFQCT 0043      DM3425 0363
AND377 0166      CNTRLT 0024      DELETE 0177      DM50   0332
BININP 0027      CNTRLU 0025      DEVNAM 1460      DNERMS 4071
BRATE  0007      CNTRLV 0026      DEVNUM 0071      DOTAB  6415
BRKXMT 2514      CNTRLW 0027      DEV30  0000      DOUO   6460
BUFCHE 5105      CNTRLX 0030      DEV40  0001      DOUP   6455
BUFFLD 0010      CNTRLY 0031      DFDEV  1437      DPARS  1400
BUFPTR 3761      CNTRLZ 0032      DGROUP 0020      DPAR1  1415
BUFSIZ 0200      COLUMN 0013      DIRBUF 2400      DPAR10 1453
CHKCLR 6453      COM    0017      DIRFLD 0010      DPAR11 1454
CHKUP  6432      COMIN  0630      DIRLIN 2402      DPAR13 1455
CKSUM  0522      COMOUT 0672      DIRREC 3407      DPAR2  1434
CKSUM1 0535      COMWAI 0676      DIRXR  0012      DPAR4  1442
CLCL   6136      CONBUF 3200      DISPAT 0452      DPAR8  1450
CLDMZA 0204      CONCLE 5703      DISPA2 0462      DSFLMS 4105
CLEAR  4521      CONINS 5365      DMIFLD 0010      DUMBCF 6312
CLEAR0 0437      CONNLU 5021      DMINIT 0324      DUMBFL 6310
CLEAR5 0450      CONNMS 4023      DMIOUT 0354      DUMBIE 6315
CLEAR6 0451      CONOUT 5302      DMIPOR 0400      DUMBSF 6311
CLOOP  0200      CONPUT 5676      DMISET 0346      DVNUM  1464
CLOOP1 0217      CONREM 5366      DMISKP 0352      DVNUM5 1500
CLOOP7 0227      CONRES 5705      DMI01  0325      DVNUM9 1507
CLOOP9 0235      CONSRV 5000      DMI02  0326      ECHOFL 5153
CLOSE  0004      CONTEM 5341      DMI03  0327      ECHOSW 0014
CLOSER 4027      CONTES 5330      DMI04  0330      EIGHTB 4422
CLOSIT 4015      CONTLS 5701      DMI05  0331      EIGHT1 4426
CLOSLU 4013      CONTMS 4042      DMI06  0332      EIGHT2 4435
CLOSMS 2040      CONTSF 5677      DMI07  0333      EIGHT5 4437
CLSK   6131      CONUPD 5341      DMI08  0334      EIGHT6 4440
CLSK8A 6137      CONWAI 5367      DMI09  0335      EMPENT 3465
CMDTBL 6000      CON2MS 4050      DMI10  0336      ENTER  0003
CMERMS 4011      CON3MS 4062      DMI11  0337      ENTSTR 2405
CMOUT1 0706      CORESE 5014      DMI12  0340      ESCAPE 0035
CMOUT2 0707      COUTIN 6601      DMI13  0341      ESCFLA 5154
CMOUT3 0711      CPUIDL 2357      DMI14  0342      ESCH   5150
CMOUT4 0712      CPULIS 2042      DMI15  0343      ESCHAR 0101
CMRESE 0674      CPUMSG 4064      DMI16  0344      ESCLIS 5144
CNTRLA 0001      CPUPRM 2277      DMI17  0345      ESCLOS 5113
CNTRLB 0002      CPUTEM 6750      DMPOMS 2147      ESCOMP 5102
CNTRLC 0003      CPUTMS 2134      DMPPMS 2171      ESCPRN 4673
CNTRLD 0004      CRESET 0420      DMPRZA 6640      ESCTEM 4707

SYMBOLS                                   PAL8-VB0  06-SEP-90 PAGE 181-1

ESCTYP 5071      FSERMS 4165      IER31  3123      INPS22 3071
ESPRIN 4704      FSWIT  2134      IFL    6300      INPS30 3116
EXITKE 7577      GENMSG 0001      IIE    6305      INPS40 3124
FCLEMS 4114      GETBYT 3600      ILINK  2200      INPS50 3137
FCMP1  2160      GETCOR 3607      ILINK0 2203      INPS80 3155
FCMP2  2161      GETEND 3663      ILINK1 2217      INPS81 3156
FEND1  1251      GETEOF 3661      ILINK2 2241      INPS90 3200
FEND2  1256      GETFLO 0664      ILINK3 2246      INPS91 3213
FETCH  0001      GETFL1 0665      ILINK4 2253      INPUT  6400
FILBUF 2000      GETIR  0611      ILINK6 2257      INPWAI 6401
FILCLO 4000      GETIR1 0627      ILINK7 2260      INQUIR 0012
FILECN 2400      GETLOO 3614      ILINK8 2261      INREAD 0640
FILENG 3512      GETNEW 3605      ILINK9 2262      INSKIP 0636
FILFND 2506      GETREC 3610      IMAL8  7075      INSTAT 0656
FILMOD 0075      GETSOH 0600      IMAOMN 7047      INTPC  0000
FILN8  4471      GETSRV 2600      IMAUNK 7101      IOCLUP 0241
FILN8C 4521      GETSWT 4454      IMA12  7072      IOTCNT 0306
FINSRV 1530      GETUPZ 3656      IMA5   7100      IPORT0 0030
FIN10  1546      GET6   4517      IMA61  7061      IPORT1 0034
FIN2   1537      GET6F  0061      IMA610 7067      IRB    6306
FIN20  1550      GET6P  0060      IMA612 7066      IRS    6304
FIN5   1542      GET60  4441      IMA8   7077      ISF    6301
FLD1AD 4000      GSRV10 2625      IMA8A  7070      ISZC   2200
FLEN   0070      GSRV12 2630      IMA8E  7071      JMPC   5200
FLENGT 4026      GSRV15 2633      IMA8I  7074      JMPIC  5600
FLEXIT 3477      GSRV20 2636      IMA8IL 7034      JMSC   4200
FLOW   0001      GSRV21 2643      IMA8L  7073      JMSIC  4600
FLOWAI 0702      GSRV22 2644      IMA8S  7076      KCCIOT 6032
FLOWFL 0102      GSRV40 2647      INCHAR 0015      KCCZAP 6501
FMATC  2155      GSRV50 2651      INCHK  0741      KCCZP2 6546
FMATCH 2107      GSRV80 2654      INERTA 3222      KERRLU 5115
FMATF  2156      GSRV90 2626      INFLAG 0020      KERRMS 4375
FMATP  2154      HADR   1520      INIDAT 6364      KERROR 5122
FMATT  2157      HANDNU 1527      INIECH 0000      KEY    0003
FMAT1  2122      HELPMS 4202      INIFLG 0063      KEYBUF 3000
FMAT2  2150      HELPSR 2263      INIOPB 0516      KEYCHE 5221
FMODE  0177      HFETCH 1510      INITEN 0053      KEYDSP 0026
FNAME  3513      HNDADR 0053      INITIA 6600      KEYERR 0103
FNBLK  2510      HNDLR  6600      INITMS 2210      KEYGET 5247
FNDEND 1247      HOLDBF 1000      INITPR 6615      KEYGEX 5274
FNERMS 4127      IAAC   6171      INI612 6674      KEYGNO 5300
FNPTR  0065      IACA   6167      INLUP  0634      KEYINP 5200
FORCEP 0054      ICF    6302      INLUP1 0637      KEYINS 5370
FPACK  4512      ICLOSE 0001      INMSG2 2242      KEYLAT 5155
FPACK0 0240      ICTLZF 4033      INMSG3 2243      KEYPRS 1261
FPACK2 0261      IER02  3020      INOP1  6303      KEYREM 5371
FPACK3 0274      IER05  3027      INOP2  6307      KEYTEM 5341
FPACK4 0312      IER10  3032      INPERR 3141      KEYUPD 5224
FP1    0321      IER11  3034      INPSRV 3000      KGREAD 5252
FP2    0322      IER20  3040      INPS01 3012      KGTEST 5250
FP3    0323      IER21  3044      INPS02 3015      KMODE  0016
FRECMS 4142      IER22  3074      INPS03 3020      KP10   1270
FRSTRE 2401      IER23  3055      INPS05 3023      KP20   1272
FSBLK  0067      IER24  3063      INPS10 3027      KP40   1307
FSENMS 4154      IER30  3121      INPS20 3035      KP45   1322

SYMBOLS                                   PAL8-VB0  06-SEP-90 PAGE 181-2

KP50   1323      MREC   0003      OLS    6316      PRMTMS 4457
KP90   1325      MRS    6364      ON     0000      PROMID 4464
KRBIOT 6036      MSB    6363      ONOP1  6313      PRQ3   6236
KRSIOT 6034      MSEND  0002      ONOP2  6317      PRSERR 0055
KRSZAP 6472      MSF    6361      OPBUF  0466      PRTINI 0255
KSERRO 5244      MSGFLD 0010      OPBUF1 0476      PSEND  0300
KSFIOT 6031      MSGOUT 4665      OPBUF2 0512      PSETF1 0262
KSFLOC 6470      NAKPAK 2551      OPC    6314      PSETF2 0275
KWATCL 5277      NAM    1663      OPORT0 0031      PSKIP  0301
KWATSE 5276      NAMBUF 2560      OPORT1 0035      PSR    6363
LATEST 0017      NAM0   1664      OPRE   1134      PTABLE 0030
LCLMSG 2000      NAM1   1677      OPRE1  1160      PUPSTA 5156
LEDERL 0000      NAM2   1705      OPRE2  1162      PUTBYT 3671
LINBUF 2727      NAM3   1707      OPRE3  1165      PUTC   3646
LINC   6141      NAM4   1713      OP1    0514      PUTCOR 3753
LININP 2000      NAM9   1721      OP2    0515      PUTERR 3703
LINSIZ 0040      NEXTSE 3403      ORIGNA 0000      PUTINI 3706
LIN1   2003      NL0000 7200      OTIME  0751      PUTLOO 3714
LIN10  2056      NL0001 7201      OUTCHA 5072      PUTNEW 3712
LIN2   2032      NL0002 7326      OUTEMP 0630      PUTNEX 3701
LIN5   2037      NL0003 7325      OUTFLA 0021      PUTONE 3631
LIN50  2062      NL0004 7307      OWAIT  0715      PUTREC 3754
LOOKLU 3416      NL0006 7327      OWASTE 0752      PWASTE 0307
LOOKUP 0002      NL0010 7215      PACKIT 2101      P7AGN  6506
LOOK1  1336      NL0100 7203      PACK6  4516      P7CH   6406
LOOK2  1337      NL3776 7354      PACK6F 0057      P7CHAR 6504
LOOK3  1340      NL3777 7350      PACK6P 0056      P7ECHO 6424
LOWER  0000      NL4000 7330      PACK6T 2106      P7OFF  6515
LOWERC 0143      NL5777 7352      PACK60 2063      P7OUT  6535
LPTR   0031      NL6000 7333      PAGCNT 0002      P7TEMP 6561
LUKUP  3400      NL7775 7346      PAKCKS 0036      P7TLS  6540
L11    6522      NL7776 7344      PAKPTR 0035      P7TSF  6536
MACHIN 7000      NL7777 7240      PCON   0036      QFLAG  0040
MACHTE 7102      NODATA 6376      PC8A   7050      RACD   6367
MESMOV 6734      NOECHO 5077      PDP    0002      RATE   0007
MESMVL 6742      NOESCA 5063      PDUMRD 0274      RCAPAS 0052
MFIE   6365      NOESEN 5104      PFNAM  1600      RCHAR  0023
MFL    6360      NOFINI 4412      PFNAM3 1633      RCHKT  0050
MFSK   6361      NOLOCA 5041      PFNAM7 1651      REC    0040
MIE    6365      NOSP   1231      PFNAM9 1655      RECSRV 2663
MLC    6362      NOSP1  1234      PFN10  1660      RECS10 2704
MMOVCN 6751      NOSP3  1244      PFN11  1661      RECS20 2706
MONMSG 2246      NOTFND 4442      PFN15  1662      RECS30 2712
MONTH  0011      NOTYET 0646      PLOAD  0303      RECS60 2715
MOVE   4520      NOWAIT 0705      PMR    6364      RECS80 2717
MOVE0  1341      NUMRC  3263      PORT   0000      RECS90 2726
MOVE1  1345      NUMRC1 3276      PORTCO 0036      REMBUF 3600
MOVE4  0062      NXTFIL 3462      PORTIN 0030      REMCHE 5653
MOVE5  1354      OCLOSE 0000      PORTOU 0031      REMCLE 5730
MOVE6  1355      OCTLZF 3762      PRETEM 1167      REMINE 5440
MOV8   4457      ODNAME 0073      PRGFLD 0000      REMINP 5400
MOV8P  4470      ODNUMB 0074      PRIPAK 2275      REMINS 0107
MPRESE 6367      ODT    0004      PRI8B  4514      REMOTE 0000
MPSCC  6366      OFF    0001      PRI8B0 4400      REMOUT 5600
MQ     0064      OFFLG  0072      PRI8B1 4405      REMPUT 5721

SYMBOLS                                   PAL8-VB0  06-SEP-90 PAGE 181-3

REMREM 0110      RKSFIO 6401      SCRCRL 4651      SNDSV1 2434
REMRES 5535      RKSF0  6301      SCRFLI 4655      SNERTA 2467
REMTEM 5637      RKSF1  6341      SCRIBE 4600      SP     1213
REMTES 5626      RMAXL  0041      SCRLUP 4612      SPACAR 0416
REMTLS 5726      RMPTEM 5705      SCRPRL 4647      SPACK  4511
REMTSF 5724      RMPUT0 5725      SCRPRN 4625      SPACK0 0400
REMUPD 5637      RMPUT1 5727      SCRPTR 4712      SPRINT 0000
REMWAI 0105      RMPUT2 5731      SDERMS 4657      SPZAP  6642
REM8B  4515      RNPAD  0043      SEN    0041      SP1    1216
REM8B0 4411      ROUTIN 6612      SER1   2411      SP3    1226
REM8B1 4416      RPACK  4513      SER2   2417      SRCHLU 3345
REOL   0045      RPADC  0044      SER3   2424      SRCHTA 3340
REPADR 0233      RPERMS 4635      SER4   2430      SRVFIN 1555
REPLAC 0220      RQBIN  0047      SER5   2441      STACK  0131
REPLUP 0222      RQCTL  0046      SER6   2446      STATE  0032
RERRMS 4507      RRBUF  6062      SER7   2454      STATT  0101
RESET  0013      RRDTA  6066      SETBAU 0206      STBRK  0102
RETARG 0233      RREPT  0051      SETINI 4246      STDAT  0104
RETCNT 0005      RRLEN  6063      SHFEMS 4701      STEOF  0132
RETRY  0033      RRSEQ  6064      SLFLAG 2507      STEOT  0102
REVDAT 4464      RRTYP  6065      SLOOP  4076      STERR  0105
REVDGR 0400      RSBIOT 6413      SLOP01 4101      STFIL  0106
REVISI 0007      RSBUF  6222      SLOP05 4112      STGEN  0107
RFLNMS 4521      RSCREN 4603      SLOP10 4115      STNAK  0116
RHFEMS 4541      RSCRIB 4665      SLOP15 4120      STRIN  0122
RIDEMS 4564      RSDTA  6226      SLOP20 4127      STSIN  0123
RIERMS 4616      RSLEN  6223      SLOP25 4132      S00    2451
RIERTS 5136      RSSEQ  6224      SLOP35 4135      TABLEJ 0003
RINBUF 3400      RSTUFF 5614      SLOP90 4200      TADC   1200
RINCHE 5442      RSTYP  6225      SLOP92 4205      TEMP   0022
RINERR 0104      RTCF0  6312      SMFL   6360      TEMPTR 3631
RINGET 5502      RTCF1  6352      SNDEMS 4722      TENTRY 3471
RINGEX 5527      RTERMI 6221      SNDERR 2461      TESTCH 5157
RINGNO 5533      RTFL0  6310      SNDI00 4222      TESTKE 5033
RINGT0 5504      RTFL1  6350      SNDI02 4226      THIRD  3701
RINGT1 5506      RTIE0  6315      SNDI05 4231      THLPMS 2255
RINGT2 5507      RTIE1  6355      SNDI10 4234      TIMEOU 0664
RING2  5507      RTIME  0042      SNDI80 4241      TLSIOT 6046
RININI 6613      RTLSIO 6416      SNDNAK 2526      TRYDM1 6710
RININS 5552      RTLS0  6316      SNDP   1723      TRYDM2 6723
RINREA 5505      RTLS1  6356      SNDPRO 4034      TSFIOT 6041
RINREM 5553      RTRYC  0034      SNDP1  1733      TST612 6635
RINTEM 5554      RTSFIO 6411      SNDP10 4053      TTY    0004
RINTES 5503      RTSF0  6311      SNDP11 4056      UCADDR 0077
RINUPD 5445      RTSF1  6351      SNDP12 4061      UMSG   0000
RINWAI 0106      RWATCL 5532      SNDP15 4064      UPADDR 0100
RKCC0  6302      RWATSE 5531      SNDP2  1734      UPCPRT 6544
RKCC1  6342      R3L    7014      SNDP20 4064      UPERMS 4733
RKFL0  6300      SBOOT  7600      SNDP3  1735      UPONLY 0076
RKFL1  6340      SCANTP 1260      SNDP4  1744      UPPERC 0103
RKIE0  6305      SCAN1  0024      SNDP5  1741      UPRINT 6550
RKIE1  6345      SCAN2  0025      SNDP9  1747      UPSTAT 0723
RKRBIO 6406      SCNEL  1200      SNDP96 4212      UQWAIT 6447
RKRB0  6306      SCRCAS 4710      SNDP98 4217      USEP0  0211
RKRB1  6346      SCRCHA 4711      SNDSRV 2400      USER   0000

SYMBOLS                                   PAL8-VB0  06-SEP-90 PAGE 181-4

USR    7700      
USRENT 0200      
USRFLD 0010      
USRIN  0010      
USRLOA 0000      
VERSIO 0012      
WASTIM 0672      
WCON0  6362      
WCON1  6366      
WILDF  0066      
WRIPAK 3277      
WRITE  4000      
W10    3306      
W20    3321      
W25    3324      
W30    3330      
W35    3331      
W60    3334      
W90    3336      
W92    3337      
XR0    0010      
XR1    0011      
YEAR   0132      
YEARMS 2274      



ERRORS DETECTED: 0
LINKS GENERATED: 0



Added src/kermit-12/k12mit.not.
































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
Date:   7/11/92 15:00 EDT
From:   Charles Lasner (lasner@watsun.cc.columbia.edu)
To:     pdp8-lovers@ai.mit.edu
Subj:   Announcement of new Kermit-12 utilities

    Currently available at watsun.cc.columbia.edu via ftp in
/pub/ftp/kermit/d/k12*.* are two new files: k12enc.pal and
k12dec.pal.  The new files have internal dates of 8-Jul-92.  Several
other documentation files with similar dates are also available.
Anyone who last retrieved Kermit-12 files prior to Feb, 1992 should
retrieve much of the current collection which has changed since then.

    These are the newly updated ENCODE and DECODE programs for moving
around OS/8 binary files in a reliable manner.  There is several new
feature added to both:  the ability to deal with "raw" image data
sent as a single file, and also sent split into two files.  Consider
the following usage:

.R ENCODE
*BIGGY.EN<RXA1:/I=756

When the input specification is a device only AND the /I switch is
given AND a non-zero equals parameter is given (and neither /1 nor /2
are given; see below), then the ENCODEd file is created containing
the entire logical device for the length specified in the equals
parameter.  In the example, the length of an RX01 in OS/8 terms is
used.

    Note that the device need not be an OS/8 "legal" structure, and
there is no individual input file significence either.  The user must
set the length to whatever is appropriate.  Too large a number could
result in program abort due to handler-reported input error.  The
minimum length is 1; a zero-value is the same as leaving out the
parameter.  (This is a restriction of OS/8 itself.)  Input data
always starts at OS/8 logical record 0000.

    Note that the device must be definable within the scope of the
selected OS/8 handler itself, since it is used for all input I/O
using "raw" sequential calls.

    For example, an OS/8 bootable RX01 standard-format diskette would
be acceptable for encoding here, while a WPS document disk would not
be.  The reason is that the handler does not access track zero (not a
WPS issue) and also does all reads in 12-bit mode, while WPS
documents are written in 8-bit mode, portions of which are lost when
using a 12-bit mode handler.

    By using another (user-written) handler that supplies 8-bit
transfers, the WPS document disk CAN be successfully transferred to
ENCODE format intact.  (Note: there are no current 8-bit mode
handlers for RX02 and RX50, just RX01; this is a separate problem
being addressed elsewhere.)

    Output DECODing is accomplished in a symmetrical manner:

.R DECODE
*RXA1:<BIGGY.EN/I=756

When used in this manner, the equals parameter need not be exact, but
must be at least as large as the parameter used when encoding.  A
smaller value can be used to limit the transfer deliberately where
appropriate.  For example, using =7 will only transfer the first
seven records of the ENCODEd file onto the target device.  If the
ENCODEd file contains a valid OS/8 device in complete image form,
this amount will suffice to transfer only the directory to the target
device.  This effectively aborts the transfer, so the user can look
at the directory with DIR, etc., to determine suitability of the
larger transfer, etc.

Warning:

    This usage writes over the output device starting at logical
record 0000 (or higher; see below).  The (possibly present) previous
OS/8 structure will be destroyed.  This is the intended function of
this usage as the new data is meant to be moved to the beginning of
an empty device.

Image splitting:

    As pointed out by a user, if the only device available on a PDP-8
system is being used to acquire an image copy of the media, then this
is likely to be impossible to carry out.  This is the case in some
systems whose only disk device is a pair of RX01, or RX02, or RX50 in
the case of the DECmates.

    The reason is that the image of a device is likely to be larger
(as an ENCODEd file) than the OS/8 capacity of the device itself!
Since the repeat-compression of the encoding process isn't a reliable
phenomena (it's data-dependent), it is likely that some disk-image
files will be too large.  Of course, if less than an entire device
need be transferred, the equals parameter could be set to a shorter
value where appropriate, but this prevents a complete transfer.
(Alternatively, the data should be placed on a disk where the unused
space has a repetitive pattern, such as that left after a format
operation, or all zeroes, etc.  This would allow the
repeat-compression of the ENCODE process to reduce these areas to
insignificent quantities in the ENCODEd file.)  Of course, this still
doesn't address the problem of sending an entire device, such as a
fully-loaded diskette.

    To solve this problem, an additional option has been implemented
to split the data into two nearly equal parts before encoding.
Assuming the worst case of no repeat compression optimization, the
ENCODEd image file representing half of the target disk data should
fit on a bootable OS/8 disk.  This disk would only contain the system
head, the DECODE.SV program, and the ENCODEd data file.  From this
minimal system, the data can be written to another drive.  Then the
entire process can be repeated using a similar disk containing
instead the second-half ENCODEd file.  (There is no hope for a
machine with only one disk!)

    Assuming our original RX01 example again:

.R ENCODE
*BIGGY1.EN<RXA1:/I/1=756
*BIGGY2.EN<RXA1:/I/2=756

This creates two image encoding files, each containing half of the
device image.  (In the case of an odd size, the second half is one
longer than the first half.)  Note that the size must be stated
exactly so that the proper split occurs.

.R DECODE
*RXA1:<BIGGY1.EN/I/1=756
*RXA1:<BIGGY2.EN/I/2=756

This creates the disk image from the ENCODEd files.  Note that the
size must be stated exactly as it was when the original files were
created so that both the length and position of the files (especially
the second-half file) are correct.

    To aid in restoration of the disk, the (FILE statement within the
ENCODEd file indicates that it is a block-image file, not an
individual file with a file name.  Additionally, the =xxxx value used
to create the file is given to guide the decoding process.  If the
ENCODEd files are split files, then it is further indicated that the
file is a first-half or second-half of an image file as necessary.

    As of this version (2.1), the ENCODE program also inserts a
(REMARK indicating the program version and other useful information.

    Overall program operation for all other operations remains
unchanged.  As before, program documentation is contained in the
source files.  Except for the new image transfer features, the
programs are totally compatible with their previous respective
versions.  (Note, the latest and previous versions are NOT compatible
with the original "ancient" version which was "provisionally"
released while the encoding format was still being formulated!  Thus,
there is one incompatible original version, and all following
versions are compatible except for added features.)

cjl

------------------------------
Date:   3/11/92 00:48 EST
From:   Charles Lasner (lasner@watsun.cc.columbia.edu)
To:     pdp8-lovers@ai.mit.edu
Subj:   Announcement of new Kermit-12 utilities

    Currently available at watsun.cc.columbia.edu via ftp in
/pub/ftp/kermit/d/k12*.* are two new files: k12enc.pal and k12dec.pal.
The new files have internal dates of 1-Mar-92.

    These are the newly updated ENCODE and DECODE programs for moving
around OS/8 binary files.  There is a new feature added to both, the
ability to deal with "raw" image data.  Consider the following usage:

.R ENCODE
*BIGGY.EN<RXA1:/I=756

When the input specification is a device only AND the /I switch is
given AND a non-zero equals parameter is given, then the ENCODEd file
is created containing the entire logical device for the length
specified in the equals parameter.  In the example, the length of an
RX01 in OS/8 terms is used.

    Note that the device need not be an OS/8 "legal" structure, and
there is no individual input file significence either.  The user must
set the length to whatever is appropriate.  Too large a number could
result in program abort due to handler-reported input error.  The
minimum length is 1; a zero-value is the same as leaving out the
parameter.  (This is a restriction of OS/8 itself.)  Input data
always starts at OS/8 logical record 0000.

    Note that the device must be definable within the scope of the
selected OS/8 handler itself, since it is used for all input I/O
using "raw" sequential calls.

    For example, an OS/8 bootable RX01 standard-format diskette would
be acceptable for encoding here, while a WPS document disk would not
be.  The reason is that the handler does not access track zero (not a
WPS issue) and also does all reads in 12-bit mode, while WPS
documents are written in 8-bit mode, portions of which are lost when
using a 12-bit mode handler.

    By using another (user-written) handler that supplies 8-bit
transfers, the WPS document disk CAN be successfully transferred to
ENCODE format intact.  (Note: there are no current 8-bit mode
handlers for RX02 and RX50, just RX01; this is a separate problem
being addressed elsewhere.)

    Output DECODing is accomplished in a symmetrical manner:

.R DECODE
*RXA1:<BIGGY.EN/I=756

The equals parameter need not be exact, but must be at least as large
as the parameter used when encoding.  A smaller value can be used to
limit the transfer deliberately where appropriate.  For example,
using =7 will only transfer the first seven records of the encoded
file onto the target device.  If the encoded file contains a valid
OS/8 device in complete image form, this amount will suffice to
transfer only the directory to the target device.  This effectively
aborts the transfer, so the user can look at the directory with DIR,
etc., to determine suitability of the larger transfer, etc.

Warning:

    This usage writes over the output device starting at logical
record 0000.  The (possibly present) previous OS/8 structure will be
destroyed.  This is the intended function of this usage as the new
data is meant to be moved to the beginning of an empty device.

    Overall program operation for all other operations remains
unchanged.  As before, program documentation is contained in the
source files.  Except for the new image transfer feature, the
programs are totally compatible with their previous respective
versions.  (Note, the latest and previous versions are NOT compatible
with older versions!)

    There are no plans to upgrade the .BOO format encode and decode
programs, since the .BOO format has no checksum protection.  This is
deemed a necessary feature in a complete device image transfer, due
to the likelihood of a long file, etc.  Since the maximum length of
an OS/8 file is limited to 4088 records, the raw input will of
necessity be limited to somewhat less than this size of records,
depending on the efficiency of the run-length compression inherent in
the data encoding.

cjl

------------------------------
Date:   10/18/91 20:00 EDT
From:   Charles Lasner (lasner@watsun.cc.columbia.edu)
To:     pdp8-lovers@ai.mit.edu
Subj:   Announcement of additional KERMIT-12 utilities.

    While no changes have been made to the body of KERMIT-12 itself,
several things have been changed/added.

    At the request of the KERMIT distribution service (KERMSRV)
certain files have been slightly modified so they are acceptable to
that bitnet, etc. facility.  (Seems to be a problem with LRECL>80.)
All files are now 80 or less.  Except for the .DOC file, all it took
was a little "cosmetic surgery" on a few lines.  FTP'd copies are
mostly unaffected.  Most of the problems have to do with
interpretation of the inter-page FF character being treated as the
first character of the "record" in this non-stream-oriented system.

    At this time there is no actual doc file, as the file K12MIT.DOC
is merely a truncation of the listing of K12MIT.PAL as passed through
PAL8 and CREF.  Anyone with a system big enough to support a 200K+
long source file can create this file themselves.  In addition, due
to certain quirks within PAL8 and CREF "beating" against unix line
conventions, the file K12MIT.DOC at watsun.cc.columbia.edu was
slightly different from the precise output of the assembly process,
but again, only a cosmetic change.

    Since this file greatly exceeded the KERMSRV restriction, it has
been withdrawn in favor of the source fragment equivalent to it taken
directly from K12MIT.PAL.  This source fragment is short enough that
even an RX01-based OS/8 system can create the listing file from it
thus recreating the original K12MIT.DOC locally.  All this will
disappear in the future when a "proper" doc file appears.  In the
meantime, K12MIT.DOC in whatever form it is available contains
hardware hints and kinks, assembly options, and other info useful to
users and anyone interested in the "innards" of the program, as well
as an edit history of how K12MIT got to be where it is now starting
from its "grandfather" K08MIT.  It ends at the first line of the code
in K12MIT.PAL, but includes all of the special purpose definitions
particular to the various devices supported, such as DECmate I,
DECmate II, etc.  Any changes to customize KERMIT-12 are still
accomplished using the separate patch file K12PCH.PAL which is
unchanged.

    New files cover two areas: 1) direct loading without KERMIT-12,
and 2) .BOO format support.

1)  Many users have the hardware for running KERMIT-12, but don't
already have it or another suitable program to acquire it yet, a real
"catch-22" situation.  Towards that end, a set of utilities has been
provided to directly load KERMIT-12 without already having it.

    Most PDP-8 sites do have access to some other machine.
Hopefully, the serial connection to be used is fairly "clean" and
error-free, or at least some of the time.  These programs depend on
this fact.  This could either be a connection to a remote multi-user
system or something like a null-modem connection to a nearby IBM-PC.
The programs assume only a few things:

    a)  The connection is error free.

    b)  The other end doesn't absolutely require anything be sent to
it to send data to the PDP-8 end.  (The -8 end will not send ^S/^Q or
anything like that because this is unnecessary; all data goes only
into PDP-8 memory directly.)

    c)  The other end will send the data at a time controlled from
its end, or after at most one character sent from the PDP-8 end of
the link.

    The first situation is illustrated by the example of a PC
connected to the -8.  The -8 program is started, and it waits
indefinitely after the -8 user presses any one key.  (The
corresponding character is sent to the PC where it is ignored.)  The
PC end is initiated with a command such as COPY K12FL0.IPL AUX: and
the data goes to the -8.

    The second situation is illustrated by a remote system where a
command such as TYPE K12FL0.IPL is available.  The delimiting CR is
not typed at this time, and will be finished later by the loading
program.  The initial connection up until the TYPE command is not
covered by the loading program itself, so the user must supply a
basic comm program, which is possible to accomplish in about 10 words
or less if the rates are "favorable", or worst-case, a terminal can
be used and the line switched over to the -8 at the appropriate time.
In any case, CR or other appropriate character is hit on the -8 and
the loading program echoes it down the line (and on the console) to
initiate the data down-load.

    d)  The other end is assumed to send the file verbatim without
insertion of <del> characters (octal 177) and upper-case/lower-case
is preserved.

    If all of these assumptions are met, then the down-load
accomplishs a partial acquisition of K12MIT.SV, the primary binary
file of KERMIT-12.  The process must be repeated several times to
acquire all portions.  If a local compare utility is available that
can compare absolute binary files, perhaps the process can be totally
repeated to assure reliable results by comparing runs.

    The method used is borrowed from the field-service use of a
medium-speed serial port reader on the -8 for diagnostic read-in.
This reader is *almost* compatible with the device 01 reader such as
the PC8E.  The difference is that the *real* PC8E is fully
asynchronous, whereas the portable reader just spews out the
characters without any protocol.  The PC8E can't drop any characters
in theory, although there are reports of misadjusted readers that
drop characters at certain crucial data rates.  (The PC8E runs at
full speed if possible, and failing this falls back to a much slower
speed.  All operations depend on the use of the hardware handshakes
of the IOTs etc., so nothing should be lost but throughput.
Misadjusted readers may drop characters when switching over to the
slower mode.)

    The reason the field reader is acceptable is that it is used only
to load diagnostics directly into memory using the RIM and BIN
loaders.  These minimal applications can't possibly fall behind the
reader running at full speed.  This is the same principle used here
to down-load KERMIT-12.

    The loading program is a 46 word long program suitable to be
toggled into ODT and saved as a small core-image program.  The user
starts the program and then (at the appropriate time) presses one key
(usually CR if it matters) and the loader waits for remote input.  As
the other end sends the data, it is directly loaded into memory.
There is a leader/trailer convention, just like paper-tape binary, so
at end-of-load the program exits to OS/8 at 07600.  At this time the
user issues a SAVE command.  This completes the down-load of a single
field of K12MIT.SV.

    At the current time, there are actually two fields of K12MIT.SV,
namely 00000-07577 and 10000-17577, and there are two such loaders.
There is no check for proper field, so the proper loader must be used
with the proper data, else the fields will get cross-loaded and will
certainly fail.

    Once the two fields are obtained as separate .SV files (named
FIELD0.SV and FIELD1.SV) they can be combined using ABSLDR.SV with
the /I switch (image mode) set.  The resultant can be saved as
K12MIT.SV.  This, if all went well, is identical in every way to the
distributed K12MIT.SV (which is only distributed in encoded form; see
below).  Actual file differences will only exist in the extraneous
portions of the file representing the header block past all useful
information and the artifacts of loading which represent 07600-07777
and 17600-17777 which are not used.  This is the normal case for any
OS/8 system when any file is saved.  Merely saving an image twice
will cause this to happen.  At this point, K12MIT.SV can be used as
intended, namely to acquire, via KERMIT protocol, the entire release.
It is recommended that the provisional copy of K12MIT.SV be abandoned
as soon as the encoded copy is decoded since the encoding process
provides some assurances of valid data (using checksumming, etc.).

    This process can be accomplished on any KL-style -8 interface
including PT08, etc., or on the printer port of VT-78 and all
DECmates.  When used on the DECmates, there may be some minor
problems associated with the down-load which may have to be done as
the first use of the printer port after power-on, or some other
restriction.  The loader includes a suggested instruction for DECmate
use if problematic (and raises the program length to 47 words).
Also, due to observed bugs in the operating system (OS/278 only),
there are restrictions on the use of ABSLDR.SV that cause certain
command forms to fail while other seemingly equivalent forms succeed!
This is documented in the latest K12MIT.BWR file in the distribution.
The command form stated in the K12IPL.PAL file is the only known form
that works correctly on these flawed systems.

    The format for down-load files is known as .IPL or Initial
Program Load format.  It consists of a leader containing only
lower-case letters (code 141-177 only) followed by "printable" data
in the range 041 (!) through 140 (`).  Each of the characters
represents six bits of data, to be read left to right as pairs, which
load into PDP-8 12-bit memory.  The implied loading address is
always to start at 0000 of the implied field.  The leader comment
contains documentation of which field of data from K12MIT.SV it is.
The trailer consists of one lower-case character followed by anything
at all.  This is why it is crucial that DEL (177) not appear anywhere
in the body of the file.

    Throughout the file, all codes 040 or less are ignored.  This
allows for spaces in the lower-case leader for better readability,
and for CR/LF throughout the entire file.  CR/LF is added every 32
words (64 characters) to satisfy certain other systems' requirements.
The trailer contains documentation on a suggested SAVE command for
the particular data just obtained.

2)  PDP-8 ENCODE format is the format of choice to obtain binary OS/8
image files because of the validation techniques employed, etc.  This
is the standard method of distributing K12MIT.SV as well as other
"critical" files such as TECO macros and other image files.  In the
MS-DOS world there exists another very popular format known as .BOO
encoding.  It would be useful to support this format on the PDP-8 as
well.

    .BOO format files are smaller because they use six-bit encoding
instead of five-bit encoding, or at least in theory.  Both ENCODE and
.BOO use repeat compression techniques, but ENCODE can compress
12-bit words of any value, while .BOO only compresses zeroes and that
itself is based on a byte-order view of the data.  PDP-8 programs
often include large regions of non-zero words such as 7402 (HLT)
which would not compress when looked at as bytes.  Such files would
show compression ratios quite different from the norm.

    In any case, .BOO format is useful on the PDP-8 because it allows
inter-change with .BOO files created on other systems, such as PCs.
This allows the exchange of unusually formatted files, such as TECO
macros between PDP-8s and PCs.  (Both systems support a viable
version of TECO.)

    The new KERMIT-12 utilities include a .BOO encoder and .BOO
decoder, known as K12ENB.PAL (or ENBOO.PAL) and K12DEB.PAL (or
DEBOO.PAL) respectively.  They use .BOO encoded files unpacked in the
standard OS/8 "3 for 2" order to preserve the original byte contents
when the files originate from other systems.  (Technically, .BOO
format doesn't require this, but the obvious advantages dictate it.
Anything encoded into .BOO format must merely have a 24-bit data
structure encoded into four six-bit characters, so in theory any
encoding of two adjacent PDP-8 12-bit words would be acceptable.  By
additionally supplying the bits in OS/8 pack/unpack order guarantees
the inter-system compatibility as well.)

    There is an inherent weakness in the original .BOO format which
must be addressed.  .BOO format files always end on one of two data
fields: either a repeat-zero compression field, or on a 24-bit field
expressed as four characters.  Should the data in a 24-bit field
consist of only two or even one bytes, there are one or two
extraneous null bytes encoded into the field to complete it.

    Presumably the need to add the extra bytes is to allow validation
of the format.  In any case, only the encoder knows just how many (0,
1, 2) bytes are extraneous.  We can presume that if the last byte is
non-zero, it is significant.  If the last two are both zero, then the
last or possibly both are extraneous with no way to tell.

    On PC systems, the general trend is to ignore these one or two
extra bytes because so far there haven't been any complaints of
failure.  I have personally discovered that a widely used PC .BOO
encoding program (written in C) erroneously adds two null bytes as
a short compression field beyond the data!  This is not a .BOO format
issue, but rather a genuine program bug.  Apparently few PC users are
concerned that encoding their files prevents transparent delivery to
the other end.

    In the OS/8 world, the situation is quite different.  Each OS/8
record is 256 words or 384 bytes.  If even a single byte is added,
this creates an additional all-zeroes record.  Besides wasting space,
it is conceivable that such a file could be dangerous to use under
OS/8 depending on content.  (Certain files, such as .HN files are
partially identified by their length.  File damage, such as
lengthening a file from two to three records will confuse the SET
utility, etc.)  Many files cannot be identified as having been
artifically lengthened (and may be hard to shorten!), so this must be
avoided.

    I have invented a fix for the problem: repeat compression fields
are expressed as ~ followed by a count.  2 means two null bytes and
is thus the smallest "useful" field to be found.  (It takes two
characters to express what would take 2-2/3 characters in encoded
format.  One null would only take 1-1/3 characters, not two, so this
case is vestigial, but must be supported for the benefit of
brain-dead encoders.) The value of 0 means a count of literally zero,
thus ~0 is a "NOP" to a decoder.  I have successfully tested MS-DOS
programs written in BASIC and C that decode .BOO files successfully
even if ~0 is appended to the end with no ill effects.  (They
correctly ignored the appended fields.)

    In my encoding scheme, ~0 at the end of a data field containing
trailing zeroes means to "take back" a null byte. ~0~0 means to take
back two null bytes.  Thus files encoded with ENBOO.PAL either end in
a repeat-compression field as before, or in a data encoding field
possibly followed by ~0 or ~0~0 if necessary.  The corresponding
DEBOO.PAL correctly decodes such files perfectly.

    Should files encoded with ENBOO reach "foreign" systems, they
will do what they always do, i.e., make files one or two bytes too
long occasionally, with no other ill effects.  Files originating from
such systems will certainly be lacking any trailing correction fields
and will cause DEBOO to perform as foolishly as MSBPCT.  Extraneous
null bytes will appear at the end of the file in OS/8 just as in
MS-DOS in this case.  (Note that if the file length is not a multiple
of 384 bytes, additional bytes are added by DEBOO as well, but this
is not a design weakness of .BOO format.  It is caused by the clash
of fixed record size and a variable size format.)

    Hopefully, files originating on OS/8 will be decoded on OS/8 as
well, thus preserving file lengths.  Most "foreign" files will
probably be ASCII, so the ^Z convention will allow removal of
trailing null bytes at either end.  It is hoped that MS-DOS and other
systems "upgrade" their .BOO format files to be compatible with the
PDP-8 version.

    All KERMIT-12 files are available via the normal distribution
"paths" of anonymous FTP and/or KERMSRV.  The user is directed to the
file /ftp/pub/kermit/d/k12mit.dsk as a "roadmap" to the entire
distribution.  Each .PAL file includes assembly instructions.  Most
use non-default option switches and non-default loading and saving
instructions, so each must be carefully read.  The development
support files (TECO macro, .IPL generator, recent copies of PAL8,
CREF, etc.) are included in the total collection.  Development is not
possible on RX01 systems due to inadequate disk space, but RX02's are
barely adequate with a lot of disk exchanges.  (Future versions may
require larger disks for development.)

Charles Lasner (lasner@watsun.cc.columbia.edu)
Added src/kermit-12/k12mit.pal.




















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
/	KERMIT FOR DEC 12-BIT MACHINES

/	LAST EDIT:	06-SEP-1990	11:00:00	CJL

	XLIST	OFF
	IFNDEF	OFF	<OFF=	1>	/TURN LISTING OFF
	IFNDEF	ON	<ON=	0>	/TURN LISTING ON
	XLIST	ON;	IFZERO	1	<








***	 **** *********** *********    ***      *** *** *********** *****   ****
***	****  *********** **********   ****    **** *** *********** *****  ******
***   ****    ***	  ***	 ****  ****    **** ***	    ***	      *** ***  ***
***  ****     ***	  ***     ***  *****  ***** ***     ***       *** **   ****
*** ****      ***	  ***     ***  *****  ***** ***     ***       *** **    ***
*******       ***	  ***    ****  ************ ***     ***       ***       **
******	      **********  **********   *** **** *** ***	    *** ***** ***      **
*******	      **********  *********    *** **** *** ***	    *** ***** ***     **
*** ****      ***	  *** ****     ***  **  *** ***     ***       ***    **
***  ****     ***	  ***  ****    ***  **  *** ***     ***       ***   **
***   ****    ***	  ***   ****   ***      *** ***     ***       ***  **
***    ****   *********** ***	 ****  ***	*** ***	    ***       *** *********
***	 **** *********** ***	  **** ***	*** ***	    ***	      *** *********
					>	XLIST	ON



















/	COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF
/	NEW YORK.



/	PERMISSION IS  GRANTED  TO  ANY  INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS
/	DOCUMENT AND THE  PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL
/	PURPOSES.
/	EDIT HISTORY.							/014 CJL

/	052	06-SEP-1990	BUG FIX.			CHARLES LASNER (CJL)

/		SENDING A FILE WHICH  EXACTLY  FILLS  THE LAST DATA PACKET AT THE
/		END OF THE FILE WILL  CAUSE  THE  PACKET  TO  BE SENT TWICE.  THE
/		ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF.

/	051	29-AUG-1990	BUG FIX.			CJL

/		PDP-8/A NOT IDENTIFIED CORRECTLY  IN  CPUID ROUTINE.  THE UPDATED
/		PC IS WHAT IS LOADED  INTO  THE  AC  WHEN 7016 IS EXECUTED ON THE
/		KK-8/A CPU.  THE ROUTINE WAS  CHECKING FOR THE NON-UPDATED VALUE.
/		ALSO  NEW  DOCUMENTATION FOR PRE-CLEARING MEMORY FOR  BENEFIT  OF
/		ENCODED BINARY FILES.
/	050	06-SEP-1989	DECMATE I SUPPORT, ETC.		CJL

/		THIS EDIT IMPLEMENTS DECMATE  I  SUPPORT USING THE DP278-A OR -B.
/		A NEW CONDITIONAL 'PORT' SELECTS  WHICH  PORT  IS TO BE USED.  IF
/		KERMIT-12 IS RUN ON DECMATE I  (WHILE  NOT  CONFIGURED FOR SERIAL
/		PRINTER  PORT  COMMUNICATIONS;    SEE  EDIT  048.)   THEN  REMOTE
/		COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT  ASSEMBLY TIME
/		('PORT=0' OR 'PORT=1').    ADDED  BAUD  RATE PARAMETER 'BRATE' TO
/		SELECT REMOTE COMMUNICATIONS BAUD  RATE  FROM THE STANDARD TABLE;
/		DEFAULTS TO 1200 BAUD ('BRATE=7').
 
/	049	30-AUG-1989	REMOTE FLOW CONTROL, ETC.	CJL

/		THIS  EDIT  IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW  CONTROL  IS
/		ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO  THE REMOTE
/		KERMIT REGARDLESS  OF  STATE.    PREVIOUSLY,  FLOW  CONTROL  ONLY
/		APPLIED TO CONNECT  MODE.  LOCAL FLOW CONTROL (TOWARDS THE REMOTE
/		KERMIT) IS UNNECESSARY AS  LOCAL  BUFFERS  FOR  REMOTE  INPUT ARE
/		ALWAYS AVAILABLE.  CERTAIN ROUTINE  CHANGES  MADE  FOR BENEFIT OF
/		DECMATE I SUPPORT IN A SUBSEQUENT EDIT.

/	048	24-AUG-1989	DECMATE II, ETC. SUPPORT.	CJL

/		ONCE-ONLY CODE ADDED  TO  IMPLEMENT DECMATE II, ETC.  REMOTE LINE
/		SUPPORT  ON  SERIAL  COMMUNICATIONS   PORT.    SELECTED  PORT  IS
/		INDICATED ON OPENING BANNER IF OPERATING ON DECMATE.

/	THIS EDIT PROVIDES BASIC SUPPORT  OF  THE DECMATE II COMMUNICATIONS PORT AS AN
/	AUTOMATIC FEATURE OF THE STANDARD RELEASE  OF  K12MIT.  AUTOMATIC DETECTION OF
/	DECMATE II, ETC.  HARDWARE IS PERFORMED  UNLESS  THE  PDP-8-TYPE  REMOTE  LINE
/	SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS  THE  REMOTE  LINE ('SPRINT' IS
/	SET OR EQUIVALENT).

/	THIS  EDIT INCORPORATES ALL OF THE  INFORMATION  TAKEN  FROM  VARIOUS  SOURCES
/	REGARDING DECMATE PORT INITIALIZATION, ETC.  EVERY  ATTEMPT  HAS  BEEN MADE TO
/	COMPLETELY  SET ALL APPROPRIATE REGISTERS, ETC.  FOR  DECMATE  II,  III,  III+
/	OPERATION.  NO SUPPORT EXISTS FOR THE DECMATE III  BUILT-IN  MODEM  OPTION, AS
/	EXPLICIT  DOCUMENTATION  IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE  IS
/	APPARENTLY USED TO DISABLE THE MODEM).  THESE ROUTINES ARE ONLY  KNOWN TO WORK
/	ON  THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND  THE  III+
/	HAVEN'T BEEN  AVAILABLE  TO  THE  AUTHOR FOR TESTING.  THE INITIALIZATION CODE
/	WILL BE UPDATED  LATER  TO  INCLUDE  PANEL  REQUESTS,  ETC.    TO  CORRECT ANY
/	PROBLEMS, ETC.  DECMATE-SPECIFIC  FEATURES  (SUCH  AS  SETUP COMMANDS) WILL BE
/	ADDED LATER AND ENABLED FROM THESE ROUTINES.

/	THIS EDIT INCORPORATES  NON-INTERRUPT  ROUTINES  WHICH HAVE BEEN TESTED AT THE
/	MAXIMUM COMMUNICATIONS SPEED OF  THE  DECMATE  II  (19200  BAUD).    THEY WILL
/	SUFFICE FOR ALL KERMIT IMPROVEMENTS  SHORT  OF  SLIDING  WINDOWS AT WHICH TIME
/	INTERRUPT-DRIVEN I/O WILL BE REQUIRED.   (INTERRUPT-DRIVEN  I/O  IS ILLEGAL ON
/	CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL  TO THE SYSTEM OR NON-SYSTEM
/	HANDLERS.) 
/	047	21-AUG-1989	CODE CLEANUP.			CJL

/		STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS.  THIS
/		IS  IN  PREPARATION  FOR  EVENTUAL DECMATE II OPERATION,  AND  TO
/		MINIMIZE  K12PCH  PATCH  FILE SIZE.  CERTAIN NON-CONNECT ROUTINES
/		MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION. 

/	046	15-AUG-1989	CODE CLEANUP.			CJL

/		ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL
/		DECMATE USE.  ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR
/		OF 'COMIN'.   ELIMINATION  OF 'OREM' IN FAVOR OF 'COMOUT'.  ADDED
/		STATUS UPDATE ROUTINE ('UPSTATUS')  FOR EVENTUAL DECMATE II, ETC.
/		USAGE.  ELIMINATED PDP-8, DECMATE  I,  DECMATE  II  CONDITIONALS.
/		REORGANIZED  SERIAL  LINE  CONDITIONALS  AND ADDED  NEW  'SPRINT'
/		PARAMETER FOR SERIAL PRINTER  PORT  USAGE AS COMMUNICATIONS PORT.
/		ADDED ONCE-ONLY CODE ADDED TO  AUTOMATICALLY  RECOGNIZE DECMATE I
/		AND II OPERATION UNLESS ASSEMBLED FOR  REMOTE  COMMUNICATIONS  ON
/		SERIAL  PRINTER  PORT  ('SPRINT'  SET).   UPDATED  K12PCH.PAL  TO
/		CORRESPOND   TO  NEW  DEFINITIONS.    DEFINED  EVENTUALLY  NEEDED
/		COMMUNICATIONS PORT  INSTRUCTIONS FOR DECMATE II;  ACTUAL DECMATE
/		II OPERATION WILL  BE  DEFINED  IN A SUBSEQUENT EDIT.  DOCUMENTED
/		NEW LOADING AND SAVING  INSTRUCTIONS  FOR  K12MIT  TO  ALLOW  FOR
/		ONCE-ONLY CODE IN 10000-11777 WITHOUT  SWAPPING  THE CODE OUT FOR
/		THE USR.  THIS ELIMINATES OVERHEAD  WHEN  LOADING  K12MIT, BUT IS
/		DIFFERENT  FROM  THE FORMER INSTRUCTIONS WHICH ASSUMED  NO  OTHER
/		USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR.

/	THIS EDIT  PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION
/	OF K12MIT ON  ANY  MEMBER  OF  THE  DECMATE  FAMILY  (I, II, III, III+).  WHEN
/	6120-TYPE CPU DETECTION OCCURS,  THE  DECMATE I OR II-TYPE COMMUNICATIONS PORT
/	INITIALIZE CODE IS AUTOMATICALLY SELECTED  AS  NECESSARY UNLESS THE PDP-8-TYPE
/	ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET  OR  EQUIVALENT USER SETTINGS, ETC.)
/	FOR THE VT-78-TYPE PRINTER PORT (32/33), IN  WHICH  CASE THE COMMUNICATIONS IS
/	DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND
/	IS ACCOMODATED AS SUCH).

/	SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL  THE PORT
/	SELECTION,  AS  THERE  ARE  AT  LEAST  TWO VARIANT OPTIONS BOARDS (DP-278A AND
/	DP-278B) EACH CONSISTING OF TWO PORTS.
/	045	12-AUG-1989	BUG FIX.  			CJL

/		FINISH,  GET,  AND  RECEIVE  COMMANDS   FAIL  TO  ABORT  PROPERLY
/		(ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT
/		OPERATING MODE ('KMODE') IS NEVER PROPERLY SET,  OR  IS SET AFTER
/		SEVERAL PACKETS HAVE BEEN SENT.  EACH COMMAND  NOW  SETS  ITS OWN
/		OPERATING MODE BEFORE INITIATING ANY PACKETS.

/	044	11-AUG-1989	CODE CLEANUP.			CJL

/		CHANGED  'CCMSG'  TO  'ABMSG'  WITH  CLEARER  MESSAGE.    CHANGED
/		'CCFLAG'  TO  'ABFLAG' FOR CONSISTENCY.  CHANGED ABORT  CHARACTER
/		FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR  CONSISTENCY.  ELIMINATED
/		'ITTY'  AND  'ITTYW'  ROUTINES  BY  USING  'CTLCTST'  AND 'INPUT'
/		ROUTINES ALREADY  AVAILABLE  A/O EDIT 043.  ELIMINATED 'TCHAR' IN
/		FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043.

/	043	07-AUG-1989	CODE CLEANUP, ETC.		CJL

/		REWRITE OF  CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT
/		AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING
/		USER-INTERFACE  REWRITE.     'SCRIBE',  'LININP',  AND  'ESCPRNT'
/		ROUTINES NOW CALL  "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL
/		MESSAGES.

/	042	13-JUN-1989	CODE CLEANUP.			CJL

/		FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN  K278
/		(SOME  OF  THE K278 STUFF IS DEFICIENT!).  CALCULATION OF  PROPER
/		SEQUENCE  NUMBER  FOR NAK CORRECTED OVER FORMER (K08MIT AND K278)
/		VERSIONS.  ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM.

/	041	12-MAY-1989	BUG FIX.			CJL

/		VARIOUS  VERSIONS  (DECMATE)  WON'T  FUNCTION REMOTELY WHILE KL-8
/		VERSIONS WORK  FINE.    ADDED  REMOTE LINE READ IOT TO INITIALIZE
/		REMOTE  LINE  AT   STARTUP  TIME  FOR  VERSIONS  REQUIRING  THIS.
/		CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT
/		IN TWO PLACES.
/	040	07-MAR-1989	COSMETIC CLEANUP.		CJL

/		CLEANUP OF EDIT HISTORY AND OTHER COMMENTS.

/	039	21-MAY-1988	CODE CLEANUP.			CJL

/		ADDED VARIABLE 'INIECHO' TO  ALLOW  DEFAULT CONNECT-MODE STATE TO
/		BE HALF-DUPLEX ("SET LOCAL-ECHO ON").    MODIFIED  INPUT  SERVICE
/		ERROR ADDRESSES TO SIMPLIFY ERROR TABLES.

/	038	19-MAY-1988	CODE CLEANUP.			CJL

/		ELIMINATED  TRAILER FILES DURING ASSEMBLY BY  CREATING  VARIABLES
/		'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER  FILE  (PARAM.PA)  TO
/		CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY  (WHICH
/		WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY).    OVERLAY
/		BY  K12PCH.BN  WILL  DEFAULT TO CREATION OF A DUMMY USER  MESSAGE
/		(WITHIN K12PCH) ENCOURAGING LOCAL  CUSTOMIZATION.  K12MIT.BN WILL
/		CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA.

/	037	21-JAN-1988	BUG FIX.			CJL

/		RESET OS/8 DEVICE CONTROL WORD  TABLE TO DELETE TENTATIVE FILE IN
/		CASE OF PRIOR INPUT SERVICE ERROR.

/	036	20-JAN-1988	BUG FIX.			CJL

/		RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE
/		THE FLAG SET.

/	035	14-JAN-1988	USR RESIDENT CODING.		CJL

/		CALLS TO USR NOW USE 10200 INSTEAD  OF  17700.   NO SWAP OVERHEAD
/		WHEN OPENING OR CLOSING FILES.

/	034	13-JAN-1988	CODE CLEANUP.			CJL

/		ALL  EIGHT-BIT  ORIENTED  CONSOLE  CODE ELIMINATED;  NOW  IGNORES
/		PARITY (JUST SEVEN BITS).

/	033	12-JAN-1988	CODE CLEANUP.			CJL

/		'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED;  NOW USES 'P7CH' FOR ALL
/		CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE).

/	032	12-JAN-1988	CODE CLEANUP.			CJL

/		VARIOUS  ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE
/		BEYOND THE CLASSIC PDP-8.
/	031	11-JAN-1988	CODE CLEANUP.			CJL

/		ELIMINATED 'RTDISP'  AND  CHANGED CALLING CONVENTION FOR DISPATCH
/		ROUTINE.  ALL  CALLERS  NOW  LOCAL  OR VIA LOCAL POINTERS.  ADDED
/		SEVERAL  CONDITIONAL  PARAMETERS  AND    LABELS  FOR  BENEFIT  OF
/		K12PCH.PAL.

/	030	05-JAN-1988	CODE CLEANUP.			CJL

/		CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE
/		EFFICIENT CODE.

/	029	21-DEC-1987	CODE CLEANUP.			CJL

/		CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND
/		REWROTE 'COMMAND' ROUTINE.

/	028	15-DEC-1987	CODE CLEANUP.			CJL

/		COMPLETE REWRITE OF FILE LOOKUP ROUTINE.   'LUKUP' NOW USES FIELD
/		ONE  BUFFER  AND  ITS OWN AUTO-INDEX REGISTER CONSERVING  PROGRAM
/		SPACE.

/	027	05-DEC-1987	CODE CLEANUP.			CJL

/		CHANGED  DISPATCH  ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE.
/		ALL CALLS  MADE COMPATIBLE.  ELIMINATED 'SCANC' CODE.  ELIMINATED
/		CODE WITHIN 'DPARS'  ROUTINE.    'LUKUP' ROUTINE NOW DOES ITS OWN
/		DISK I/O.  ELIMINATED 'BLKIN' ROUTINE.

/	026	27-NOV-1987	NEW CONNECT MODE CODE.		CJL

/		TOTAL  REWRITE  OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT  AND
/		OUTPUT  TERMINAL  ROUTINES.  CONNECT IS NOW FULLY BUFFERED IN ALL
/		DIRECTIONS.   IF  FLOW  CONTROL  IS  OBEYED, ANY BAUD RATE CAN BE
/		ACCOMODATED BOTH LOCALLY  AND  REMOTE  (UP  TO  9600 BAUD TESTED,
/		SHOULD WORK TO AT  LEAST  19200 BAUD BY INSPECTION).  TESTED WITH
/		FAST VT-100 EMULATOR CONSOLE TO  PROVE  ESCAPE  SEQUENCES ARE NOT
/		DROPPED WHEN LOCAL TERMINAL IS FASTER  THAN REMOTE LINE.  LIMITED
/		USE OF SUBROUTINES TO IMPROVE HIGH BAUD  RATE  OPERATION.   ADDED
/		TABLE-DRIVEN ERROR EXIT ROUTINE FOR SEND ROUTINES.

/	THIS EDIT PROVIDES  FULLY  BUFFERED  INPUT/OUTPUT  ROUTINES FOR BOTH LOCAL AND
/	REMOTE PORTS.  NO  INTERRUPTS  ARE  USED  FOR  MAXIMUM COMPATIBILITY WITH OS/8
/	DEVICES (SOME OF WHICH ARE  INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E).  REMOTE
/	FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER
/	IS 3/4 FULL.  WHEN THE BUFFER  REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1>
/	TO ALLOW FURTHER OUTPUT.  REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS;
/	LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY.

/	WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE  BUFFER WILL FILL WITH OUTPUT
/	CHARACTERS.  WHEN THE USER RELEASES THE CONSOLE WITH <DC1>,  THE  BUFFER  WILL
/	RAPIDLY  EMPTY  (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE).    THIS
/	ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE  LINE UP TO
/	THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS.
/	025	24-NOV-1987	NEW FEATURES AND CODE CLEANUP.	CJL

/		PROPER  INTERRUPT  SETUP  FOR  <^C> AND <^P>, ECHO  STATE.    ALL
/		MESSAGES  IN  NEW  FORMAT,  (SOME NEW ONES HAVE BETTER  CONTENT).
/		ELIMINATED  'PRI6B' AND 'REM6B' ROUTINES.  NEW AND IMPROVED INPUT
/		SERVICE ERROR  CODE  MOVED  TO  PROPER  PAGE.    REWROTE  CONNECT
/		ROUTINES TO ALLOW  NON-INTERRUPT BUFFERED I/O LATER.  CREATED NEW
/		VARIABLE 'ESCHAR' AND PARAMETER  'ESCAPE'  TO  SET DEFAULT ESCAPE
/		CHARACTER.  ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE
/		USED  CORRECTLY  BY ALL ROUTINES.   ADDED  'ESCPRNT'  ROUTINE  TO
/		HANDLE  ALL  CASES  (INCLUDING NON-CONTROL CHARACTERS).   DEFAULT
/		ESCAPE  PARAMETER  VALUE  COMPATIBLE  WITH K08V2, BUT IS  A  USER
/		PARAMETER,  CONFIGURED  AS  OTHER PARAMETERS DEFINED IN EDIT 017.
/		CREATED  ESCAPE FUNCTION TABLE FOR EXPANSION LATER.  NOW SUPPORTS
/		ESCAPE C(LOSE)  IN  UPPER  OR LOWER CASE, ESCAPE ESCAPE (SEND ONE
/		ESCAPE CHARACTER).   ALL  BAD  ESCAPE  COMMANDS  WILL ISSUE <BEL>
/		CHARACTER TO WARN USER  THAT COMMAND IS ILLEGAL AND OTHERWISE WAS
/		IGNORED.  CREATED NEW VARIABLE  'ECHOFLAG' TO ALLOW LOCAL ECHO IN
/		CONNECT MODE.

/	024	19-NOV-1987	NEW FEATURES.			CJL

/		NEW  STARTUP MESSAGES AND HELP METHOD  VIA  COMMAND.    CPU  TYPE
/		IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK  FOR  QUIRKS AND
/		MODEL DEPENDENCIES.  THE DEFAULT PROMPT REFLECTS THE  ACTUAL  CPU
/		TYPE (THUS "KERMIT-12>" ON PDP-12).  VERSION, REVISION, AND  DATE
/		NOW EQUATED SYMBOLS.

/	023	18-NOV-1987	NEW CONSOLE I/O PACKAGE.	CJL

/		NEW  CONSOLE  I/O  ROUTINES  WITH  DC1/DC3  SUPPORT  FOR  CONSOLE
/		TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO
/		BE USED DURING CONNECT MODE).  USES FIELD ONE FOR MESSAGE TEXT TO
/		ALLOW FOR MORE PROGRAM  SPACE.    THE  MESSAGES  ARE NOW GIVEN IN
/		UPPER/LOWER SIXBIT FORMAT.  SUPPORT  FOR <^P> RESTART AND <^O> TO
/		FLIP  ECHO.  UPPER-CASE CAN BE  FORCED  BY  CHANGING  A  VARIABLE
/		('UPONLY').

/	022	17-NOV-1987	BUG FIX.			CJL

/		EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM;  NOW  CHECKS  FOR AND
/		IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE.
/	021	17-NOV-1987	CODE CLEANUP.			CJL

/		REWROTE  TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE  CONSISTENCY.
/		RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE").

/	FORMER  CODE  REGARDING  THE  TENTATIVE  FILE  MAXIMUM  LENGTH WAS  ACCEPTABLY
/	ORGANIZED  FOR  ORIGINAL  PS/8, OS/8 CONVENTIONS.  WITH THE EVOLUTION  OF  THE
/	OPERATING  SYSTEM  INTO  OS/78  (VERSIONS  1-4) AND OS/278 (VERSIONS 1-2), THE
/	ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES.

/	THE  ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL  LENGTH
/	OF  THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM).  IF RECORD 7777 IS  PART  OF
/	THE  ACTUAL  LARGEST  EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON
/	THE  DEVICE),  THEN  THE  LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING
/	BUG).  SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS
/	ASSUMED TO BE CORRECT.

/	TESTS WITH THE  DECUS  VERSION  OF  OS/278 (DM-101) REVEAL A DANGEROUS CHANGE:
/	THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS!

/	TO COUNTERACT THIS, EDIT  010  INSERTED  A  DECREMENT  OF  TWO INTO THE LENGTH
/	BEFORE PASSING IT BACK TO  THE  KERMIT FILE WRITING ROUTINE.  THE FILE WRITING
/	ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S
/	COMPLEMENT  NOTATION,  THIS IS THE AMOUNT THAT  WILL  INDICATE  FILE  OVERFLOW
/	SHOULD IT REACH ZERO.

/	THIS HAS NOW BEEN REORGANIZED TO ALLOW THE  ENTER  ROUTINE  TO  SET THE DANGER
/	COUNT  DIRECTLY.  OS/8 USERS MUST ALLOW FOR THE  EXTRA  ROOM  (WHICH  MUST  BE
/	PRESENT  BUT  WILL NOT BE USED), SINCE NO CHECK FOR  SYSTEM  VERSION  WILL  BE
/	PERFORMED.

/	020	16-NOV-1987	NEW ROUTINES AND CODE CLEANUP.	CJL

/		REWROTE  ENTIRE  OUTPUT  FILE    PACK   ROUTINE.    NOW  SUPPORTS
/		ASCII/BINARY  INTERNAL FILE MODE FOR  LATER  USE.    USES  OUTPUT
/		BUFFER IN FIELD ONE (SAME DEFINITIONS  AS  INPUT BUFFER) TO ALLOW
/		MORE PROGRAM SPACE.  END OF FILE  CONVENTION  IN  ASCII  MODE NOW
/		INCLUDES  ENSURING  <^Z>  CHARACTER  PACKED  INTO FILE (OR  NOT).
/		REWROTE  ENTIRE  OUTPUT  FILE  CLOSE  ROUTINE  TO  IMPLEMENT <^Z>
/		SCHEME.  ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE;  USE
/		SPECIAL ROUTINE CALL INSTEAD.  FIXED PACKET WRITE BUG.

/	019	15-NOV-1987	NEW ROUTINES AND CODE CLEANUP.	CJL

/		FIXED UNPACK <^Z> BUG.  REWROTE ENTIRE INPUT FILE UNPACK ROUTINE.
/		NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE.  USES
/		INPUT BUFFER IN FIELD ONE TO ALLOW  MORE  PROGRAM  SPACE.  BUFFER
/		FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE.  END OF
/		FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER
/		OR  NOT.  ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE;  USE
/		SPECIAL ROUTINE CALL INSTEAD.

/	018	09-NOV-1987	BUG FIX AND CODE CLEANUP.	CJL

/		FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE.
/	017	05-NOV-1987	NEW FEATURES.			CJL

/		CONDITIONAL ASSEMBLY  PARAMETERS  ADDED  FOR MACHINE TYPE (PDP-8,
/		DECMATE I, DECMATE  II/III/III+),  REMOTE LINE AND LOCAL TERMINAL
/		INTERFACE DEFINITIONS.

/	016	05-NOV-1987	CODE CLEANUP.			CJL

/		OPTIMIZATION OF CODE, LITERALS, CONSTANTS.

/	015	04-NOV-1987	BUG FIX.			CJL

/		INPUT SERVICE ROUTINE ERROR  DOES JMP INSTEAD OF JMS WHEN CALLING
/		COMMON ERROR HANDLER.

/	014	02-NOV-1987	SOURCE FILE CLEANUP.		CJL

/		SOURCE FILE COSMETICALLY CLEANED UP  AND  RENAMED  TO  K12MIT.PAL
/		WHICH CONFORMS WITH CUCCA NAMING CONVENTION.    NO  ACTUAL BINARY
/		CODE CHANGES BEYOND K08V2.  THIS EDIT  HISTORY  ADDED.    ENTRIES
/		PRIOR TO 014 TRANSCRIBED BY CJL.

/	SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES)  IS  THE INTENDED ENVIRONMENT
/	FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12.

/	ASSEMBLING  THE  SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA  CONFIRMING
/	THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE).

/	013	01-OCT-1987	CHANGE TO VERSION 2.0.		R. SCHLERF (RICH)

/		CHANGED  'RKIOT'/'RTIOT'    TO   43/44  REMOTE  LINE  IOT  (LOCAL
/		PREFERENCE).  CHANGED  'ESCAPE'  CHARACTER  TO  ^]  ('CONX1') FOR
/		GENERIC CONFORMITY.  ADDED  VERSION/COMMAND BANNER AT STARTUP FOR
/		MINI-HELP.    INCORPORATED  K278  CHANGES  003-006,  009-010  (NO
/		INTERRUPTS).  DELETED 'ERRMSG.' NOW USES  'STXERR'  AT 'CLOOP9'+2
/		FOR PROGRAM SPACE.  TO CONFORM TO  GENERIC KERMIT, "BACK ON PDP8"
/		MESSAGE  DELETED AND REPLACED WITH BEEP <^G>.   MESSAGE  "SENDING
/		FILE  XXXXXX.XX  CREATED  ON  DD-MM-YY"  REDUCED TO "SENDING FILE
/		XXXXXX.XX"  TO CONFORM TO GENERIC KERMIT.  PARITY BIT IS  IGNORED
/		ON BOTH REMOTE AND TTY LINES.  OUTPUT PARITY IS SET TO SPACE.

/	PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY:

/	RICHARD SCHLERF (RICH)
/	AMERICAN CYANAMID COMPANY
/	MEDICAL RESEARCH DIVISION
/	LEDERLE LABORATORIES
/	BUILDING 190 ROOM 115H
/	PEARL RIVER, NEW YORK  10965
/	(914) 732-2186 (09:00 TO 16:00)

/	SINCE  PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS  NOT
/	SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION.  FUTURE
/	VERSIONS WILL  INCORPORATE  THE  DECMATE  FEATURES AND THUS OBSOLETE ALL OTHER
/	VERSIONS AT THAT TIME.
/	012	04-JUN-1986	PROGRAM FIX.			SEPP STADELMANN (SSTA)

/		RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC.

/	04-JUN-1986 VERSION RELEASED  TO  CUCCA  BY  MARTYN HEMMINGS (DEC GERMANY) AND
/	SEPP STADELMANN (DEC SWITZERLAND) OF:

/	DIGITAL EQUIPMENT CORPORATION (DEC)
/	146 MAIN STREET
/	MAYNARD, MASS  01754
/	(617) 897-5111

/	CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH
/	DOESN'T REALLY CONFORM TO THE NAMING CONVENTION).

/	CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE.  FILE REPAIRED BY:

/	CHARLES LASNER (CJL)
/	CLA SYSTEMS
/	72-55 METROPOLITAN AVENUE
/	MIDDLE VILLAGE, NEW YORK  11379-2107
/	(718) 894-6499

/	REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA.

/	PROGRAM IS NOW  THE DECMATE II/III (III-PLUS) KERMIT ONLY.  HOOKS WERE LEFT IN
/	FOR PDP-8 VERSION, BUT  NOT  IMPLEMENTED.    K278  DOES  WORK  WITH ADDITIONAL
/	IMPLEMENTATIONS OF KERMIT, BUT RECEIVE  COMMAND DOES NOT WORK.  PROGRAM YIELDS
/	RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO  FLOPPY-BASED DECMATE II SYSTEM.
/	CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS.  K278 DOES
/	NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND.

/	011	04-JUN-1986	NEW FEATURES.			SSTA

/		'PRQ3' CODE CONDITIONALS.  ROM SETUP COMMAND IMPLEMENTED FOR DMII/III.
/		AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT.

/	010	13-MAR-1986	BUG FIX.			MARTYN HEMMINGS (MART)

/		FULL DISK HANDLED WELL.

/	009	13-MAR-1986	BUG FIX.			MART

/		CLEAN UP BREAK AND GET.
/	008	12-MAR-1986	BUG FIX.			MART

/		CLEAR  INPUT  CHARACTERS  FROM  COMMUNICATIONS PORT WHEN IN  IDLE
/		LOOP.

/	007	11-MAR-1986	NEW FEATURES AND BUG FIX.	MARTYN HEMMINGS AND
/								SSEP STADELMANN
/								(MART+SSTA)

/		INTERRUPT DRIVEN AND BUG FIX.

/	006	10-MAR-1986	NEW FEATURE.			MART+SSTA

/		DEVICE PARSE ON GET.

/	005	10-MAR-1986	BUG FIX.			MART+SSTA

/		NO DATE IN FILE WITH <^Z> INTACT.

/	004	10-MAR-1986	NEW FEATURES AND BUG FIX.	MART+SSTA

/		MAXIMUM  RECEIVE  BUFFER  FIXUP  ('RTERMI'),  15  SECOND TIME-OUT
/		DURING CONNECT.

/	003	10-MAR-1986	BUG FIX.			SSTA

/		TWO PAGE HANDLER FIX.

/	K08MIT.PAL  COPIED  TO  DEC  ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO
/	EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL.

/	KERMIT.PAL  AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO  PRODUCE
/	THE RUNNING KERMIT-8.  *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.*

/	002	18-JUL-1985	ORIGINAL RELEASE.		RANDY HIPPE

/	18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF:

/	BUREAU OF ENGRAVING, INC.
/	3311 BROADWAY N.E.
/	MINNEAPOLIS, MN  55413
/	(612) 623-0900 X218

/	CUCCA  RENAMED  FILE  (KER8.PAL)  TO  K08MIT.PAL  WHICH  CONFORMS  TO   NAMING
/	CONVENTION OF KERMIT FILES.

/	K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY.

/	PROGRAM PRONE  TO  GETTING  "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS
/	'CAPAS' BYTE FEATURE  AND  ASCII  TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF
/	FILE DATA.  COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY.  <^C>
/	ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!).  MANY KERMITS WILL NOT
/	WORK WITH K08MIT;  HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20.

/	001	30-JUL-1984	FIRST VERSION (KER8.PAL).	JERRY SANDS
/	HARDWARE HINTS AND KINKS.


/	KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION:

/	PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY.

/	OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT).

/	KL8-COMPATIBLE CONSOLE INTERFACE.

/	7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:).

/	KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT.

/	NOTE:  ASSEMBLY  PARAMETERS  OF  KERMIT-12  ALLOW FOR LOCAL KERMIT CONTROLLING
/	TERMINALS TO BE OTHER  THAN  THE  PRIMARY  OS/8  CONSOLE  DEVICE.   THE ACTUAL
/	HARDWARE MUST STILL CONFORM TO  THE  SAME REQUIREMENTS (THE DEVICE CODES WOULD
/	THEN BE USER-SPECIFIED AND DIFFER FROM  THE  STANDARD  03/04)  AS THE STANDARD
/	CONSOLE INTERFACE AND TERMINAL.

/	SPECIAL DECMATE CONSIDERATIONS:

/	DECMATE  USAGE IS USUALLY OBTAINED BY  ASSEMBLING  FOR  THE  STANDARD  CONSOLE
/	DEVICE  (03/04),  AS  THE  BUILT-IN  FIRMWARE/SLUSHWARE  OF  THE  DECMATES  IS
/	SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S  REQUIREMENTS.
/	(THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.)

/	DECMATE  REMOTE  COMMUNICATIONS  PORTS  ARE    *RADICALLY*    DIFFERENT   FROM
/	KL8-COMPATIBLE PORTS.  THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH
/	DETECTS  THE  USAGE  OF  KERMIT-12  ON  THE    SPECIFIC  DECMATE  SYSTEM,  AND
/	SELF-CONFIGURATION AS APPROPRIATE.  THERE IS ONE EXCEPTION  TO THIS, NAMELY IF
/	THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER  PORT  (32/33), THEN
/	THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED.    THE  STANDARD
/	ASSEMBLY  OF  KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS  PORT.
/	THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE.
/	CONFIGURATION RESTRICTIONS:

/	WHEN  INTERRUPTS  ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T  WORK.
/	THE  NON-INTERRUPT  VERSION  SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU,  SO
/	THIS  SHOULD NOT BE A PROBLEM.  INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE
/	RUN ONLY  ON  SYSTEMS  WHERE  *ALL*  INTENDED  DEVICES CAN HAVE THEIR HANDLERS
/	INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS.  WHEN IN DOUBT,
/	THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION).

/	IF FLOW CONTROL IS  DISABLED  (DUE  TO  XON/XOFF  BEING  UNAVAILABLE) THEN THE
/	CONSOLE BAUD RATE MUST MEET  OR  EXCEED  THE  REMOTE LINE RATE.  THE USER MUST
/	TAKE MINIMAL CARE NOT TO OVERLOAD  THE  INTERNAL BUFFERS OF KERMIT-12, AS THIS
/	WILL YIELD THE ERROR MESSAGE:  KEYBOARD INPUT ERROR!

/	THIS IS NOT LIKELY TO OCCUR UNLESS  ONE  "PLAYS"  WITH  A  KEYBOARD  WHICH CAN
/	GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE  QUITE  ADEQUATE FOR ALL
/	REASONABLE TERMINAL APPLICATIONS.  SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY
/	XON/XOFF  PROTOCOL  (WHILE  KERMIT-12  HAS  IT  ENABLED), THEN INTERNAL BUFFER
/	OVERFLOW WILL YIELD THE ERROR MESSAGE:  REMOTE LINE INPUT ERROR!

/	THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY  MISUSE OF FLOW
/	CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12  WITH  THE
/	CONSOLE  BAUD  RATE  SLOWER  THAN  THE REMOTE LINE BAUD RATE WITH FLOW CONTROL
/	DISABLED).  IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE
/	LINE INPUT  WILL  OCCUR  WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE
/	USER FREEZES/UNFREEZES THE  DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS
/	FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY.

/	FLOW CONTROL IS NOT  YET  SUPPORTED  DURING KERMIT TRANSFERS.  SINCE KERMIT-12
/	DOES  NOT SUPPORT SLIDING WINDOWS,  KERMIT-12  WILL  NEVER  GENERATE  OUTGOING
/	XON/XOFF SEQUENCES.  FUTURE REVISIONS WILL  SUPPORT INCOMING XON/XOFF FROM THE
/	REMOTE KERMIT.  XON/XOFF PROTOCOL DURING CONNECT  MODE IS COMPLETELY AVAILABLE
/	AT THE USER'S OPTION.

/	CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:"  FEATURES,  I.E.    THE
/	PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS
/	<CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS  ONLY).  TERMINALS
/	LACKING LOWER-CASE  SUPPORT  SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE
/	AUTOMATICALLY.  TERMINALS  SUCH  AS  THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE
/	ENABLED, AS KERMIT-12 SUPPORTS  OPTIONAL  OUTPUT FOLDING.  THE UPPER-CASE ONLY
/	OPTION SHOULD BE ENABLED FOR  TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE
/	HOST,  AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE  MESSAGE  CHARACTERS  (WHICH
/	BECOME UPPER-CASE IF THIS OPTION IS SET).   THE <BS> CHARACTER IS REQUIRED FOR
/	VISUAL  RUBOUT  (<BS>  <SPACE>  <BS>)  ONLY.   FUTURE  VERSIONS  WILL  SUPPORT
/	HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT.  ALL TERMINAL  FEATURES  (SUCH
/	AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST  DURING  CONNECT
/	MODE;  THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL
/	BE  TREATED  AS  A SEVEN-BIT CHARACTER ONLY.  IF THE USER PRESSES  THE  ESCAPE
/	CHARACTER TWICE,  THEN  THE  SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT
/	ONCE;  THERE  IS  NO  WAY  TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET.
/	SINCE THE ESCAPE CHARACTER  ITSELF  CAN  BE SET TO ALMOST ANY SEVEN-BIT VALUE,
/	THIS SHOULD NOT BE A SERIOUS LIMITATION.  TERMINALS THAT DON'T "BEEP" WHEN THE
/	<BEL> CHARACTER IS SENT SHOULD NOT  OUTPUT  A  PRINTABLE RENDITION OF THE <^G>
/	CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT
/	DURING VARIOUS MESSAGE SEQUENCES, ETC.
/	KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:

/	1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA.

/	FUNCTIONAL  BAUD RATES INCLUDE 110, 150, 300, 600,  1200,  2400,  4800,  9600,
/	19200, 38400 AND 76800.  2400 BAUD REQUIRES A  REVISION  "B"  OR  BETTER M8650
/	MODULE  (IF  ONE  USES  DEC'S  DOCUMENTATION  OF AVAILABLE SPLIT-LUG OPTIONS).
/	ACTUAL  BAUD  RATES  UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN  KERMIT-12
/	BECOMES  INTERRUPT-DRIVEN.    RATES  OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ
/	BAUD-RATE OSCILLATOR.

/	THE BAUD  RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE
/	A SINGLE SOLDER  JUMPER  TO  IMPLEMENT  THE  PROPER BAUD RATE ABOVE 2400 BAUD.
/	CHANGING BAUD-RATE GENERATOR CRYSTALS  WILL  PRODUCE OTHER RATES AS NECESSARY.
/	(SEND INQUIRIES  TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS
/	INCLUDING UPGRADED BAUD-RATE  OSCILLATORS,  ETC.) KERMIT-12 HAS BEEN TESTED TO
/	9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION).


/	KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:

/	1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY.

/	FUTURE  VERSIONS  OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED  PARITY
/	OPTIONS.  THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE
/	SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT  INTERACTION
/	WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION).

/	ALL BAUD RATES ARE SUPPORTABLE:

/	110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.

/	19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER  "W5" AND THEN
/	SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD.  A WESTERN DIGITAL TR-1602-B
/	OR  EQUIVALENT  UART  IS  REQUIRED TO SUPPORT 19200 BAUD;  MOST OF THE  RECENT
/	PRODUCTION  DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS
/	THIS REQUIREMENT.   EARLY  M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH
/	*CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!).

/	RECEIVE BAUD RATE SHOULD  BE IDENTICAL TO TRANSMIT BAUD RATE.  (DO NOT SET THE
/	RECEIVE=150 BAUD SWITCH!)
/	OTHER INTERFACES:

/	DKC-8/A (8/A OPTION BOARD #1)  INTERFACES  SHOULD  BE SETUP AS PER THE KL8-J/A
/	SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART.  SOME DEC DOCUMENTATION
/	INDICATED A PROHIBITION ON THE USE OF  19200 BAUD, BUT THIS IS OBVIATED BY THE
/	USE OF THE SAME UARTS AS IN THE KL8-J/A.

/	EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD
/	WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES  DO NOT SUPPORT OPTIONS
/	KERMIT-12  WOULD  REQUIRE  TO  BE  DISABLED  ANYWAY.    THESE  INCLUDE  PARITY
/	GENERATION,  FRAMING  ERROR  DETECTION,  ETC.).  TO UTILIZE THESE DEVICES, THE
/	ASSEMBLY PARAMETERS  FOR  USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES
/	SHOULD BE GIVEN  DURING  ASSEMBLY  (SEE ASSEMBLY INSTRUCTIONS).  PROPER DEVICE
/	CODE VALUES MUST BE  OBTAINED  FOR  THE  SELECTED INTERFACE, AS THERE ARE MANY
/	ACTUAL POSSIBILITIES.  (DP-12 DEVICES  ARE  GENERALLY DEVICE 40/41;  PT08/DC02
/	INTERFACES ARE GENERALLY DEVICE 11/12, ETC.)
/	ASSEMBLY INSTRUCTIONS.

/	KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS:


/	P?S/8 METHOD:

/	ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS  THE  SOURCE  FILE,  THE FOLLOWING
/	COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING:

/	.PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8)

/	OPTION SWITCH BREAKDOWN:

/	/A	ALL SYMBOLS IN SYMBOL PRINTOUT.

/	/C	OPTIMIZE  CORE  DURING ASSEMBLY FOR MORE SYMBOLS,  LESS  BUFFERS.
/		THIS OPTION SHOULD BE DELETED IF MORE THAN  8K  IS  AVAILABLE FOR
/		ASSEMBLY.

/	/E	FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.

/	/J	*DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.

/	/L	PERFORM SECOND-PASS LISTING.

/	/M	CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY.

/	/N	ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT.

/	/P	ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT.

/	/Q	ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS.

/	/S	ENABLE SYMBOL TABLE PRINTOUT.

/	/X	ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY.

/	/8	ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY.

/	THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS  TO BE DETERMINED
/	AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED.

/	P?S/8 PAL IS THE PREFERRED METHOD  OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE
/	TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED.   K12MIT COULD GROW TO A SIZE
/	BEYOND THE CAPABILITIES OF OS/8 CREF.  THIS  LIMITATION  CANNOT  APPLY  TO THE
/	P?S/8 DEVELOPMENT ENVIRONMENT.

/	P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE
/	ASSEMBLY  MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS
/	SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY.

/	NOTE:  P?S/8 IS *NOT* A DEC PRODUCT;  IT IS SOLD COMMERCIALLY AND IS AVAILABLE
/	FREE  OF  CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED
/	INSTITUTIONS.  CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8.
/	OS/8 FAMILY OF SYSTEMS METHOD:

/	K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM  DECUS
/	AS PART OF THE OS/278 RELEASE.  PAL8 VERSION B0 WILL RUN ON  ANY  OS/8  FAMILY
/	SYSTEM,  AS  IT  HAS  NO  HARDWARE  DEPENDENCIES  BEYOND  THE  ORIGINAL  PDP-8
/	REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED).
/	THIS ALSO APPLIES TO CREF  VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE
/	IS REQUESTED.  PAL8 VERSION B0  AND  CREF  VERSION B0 ARE AVAILABLE AS PART OF
/	THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY.  SEE THE
/	DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV  AND CREF.SV FROM
/	THESE ENCODED FILES.

/	ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY
/	ORNAMENTED LISTING:

/	.PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW)

/	DEV:  IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE.    STANDARD  EXTENSIONS
/	ARE  ASSUMED  (.BN  FOR  BINARY, .LS FOR LISTING, .PA FOR PAL  SOURCE).    THE
/	KSCR.TM  TEMPORARY  OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO
/	SYS:CREFLS.TM IF  NOT  EXPLICITLY GIVEN.  MANY SYSTEM DEVICES ARE TOO SMALL TO
/	SUPPORT THIS TEMPORARY  FILE,  THUS  THE  FILE  MAY  BE  DIRECTED  TO  ANOTHER
/	AVAILABLE DEVICE WITH SUFFICIENT SPACE.

/	THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC.  TO
/	THE ASSEMBLY.

/	OPTION SWITCH BREAKDOWN:

/	/C	CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE.

/	/E	GENERATED LINKS ARE ERRORS.

/	/F	*DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.

/	/M	USE MAMMOTH SYMBOL TABLE OPTION FOR CREF.

/	/W	FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.

/	LOADING INSTRUCTIONS:

/	.LOAD DEV:K12CLR,K12MIT.BN	THIS LOADS THE BINARY CLEAR AND KERMIT
/	.SAVE DEV K12MIT.SV=1		THIS SAVES THE CORE IMAGE

/	THE  JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT
/	SHOULD NOT BE SAVED/RESTORED  WHEN  THE  USR  IS  LOADED  OVER  THIS  AREA  OR
/	DISMISSED (THE USR IS ACTUALLY  NEVER  DISMISSED  IN NORMAL K12MIT OPERATION).
/	OTHER BITS MAY BE SET AT  THE  USER'S  OPTION,  BUT  ARE UNNECESSARY;  THE BIT
/	INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD  REGARDING  THE DISPOSITION OF
/	10000-11777.  THE  BINARY  FILE  K12CLR.BN  (CREATED  BY ASSEMBLING K12CLR.PA)
/	LOADS ZEROES INTO ALL  OF  MEMORY  TO  CREATE A "CLEAN" CORE IMAGE FILE, WHICH
/	MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION.
/	PASSING SHORT PARAMETER FILES.

/	WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM  (PARAM.PAL)
/	THE FOLLOWING SHOULD BE NOTED:

/	ALWAYS  PUT  THE  SHORT  PARAMETER  FILE  (CONTAINING EQUATED SYMBOLS SUCH  AS
/	USER=1, ETC.) IN FRONT OF K12MIT.PAL.

/	IF TTY:  IS USED FOR DIRECT TYPE-IN OF THESE  PARAMETERS, THE INFORMATION NEED
/	ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1.  SUBSEQUENT  PASSES  REQUIRE THE
/	ENDING <^Z> ONLY.  IF THIS METHOD IS USED, A LISTING WITHOUT  THE  USER  INPUT
/	WHICH  DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED.  NOTE:  IF  BINARY  IS
/	GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT
/	MESSAGE,  ETC.),  THE  INFORMATION MUST BE TYPED IN DURING PASS 2.  THE PASS 3
/	LISTING MAY  CONTAIN  THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF
/	THE INPUT.   PASS  1  INPUT  OF  THE INFORMATION IS EFFECTIVELY IGNORED, AS NO
/	DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.).

/	EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE:

/	DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED
/	DURING PDP-8 PAL8 B0 OPERATION.  THE KL8E TTY:  HANDLER WILL NO LONGER BE ABLE
/	TO BUFFER <^Z> DURING THE ASSEMBLY;  YOU MUST  WAIT UNTIL THE HANDLER ACCESSES
/	THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY.


/	CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE.

/	IF  SO  DESIRED,  A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING  THE
/	FOLLOWING INTO THE PARAMETER FILE:

/	BUFFLD=	10		/THESE PROBABLY
/	FILBUFF=2000		/WON'T CHANGE!

/	GENMSG=	0		/DON'T GENERATE STANDARD (NULL) MESSAGE
/	UMSG=	0		/DON'T GENERATE STANDARD (DUMMY) USER MESSAGE

/	FIELD	BUFFLD%10	/FIELD FOR TEXT MESSAGE

/	*FILBUFFER		/LOCAL MESSAGE LOADS THERE

/LCLMSG,TEXT	"%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%"

/	ZBLOCK	LCLMSG+40-.	/ZERO REST OF MESSAGE AREA

/	TEXT IS IN  UPPER/LOWER-CASE  SIXBIT  WITH  '^'  MEANING SHIFT CASE (INITIALLY
/	LOWER-CASE) AND '%' MEANING <CR>, <LF>.
/	OTHER METHODS:

/	KERMIT-12  *CANNOT*  BE ASSEMBLED  BY  PAL10  (LAST  KNOWN  VERSION  OF  PDP-8
/	CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES:

/	DOES NOT SUPPORT 'RELOC' PSEUDO-OP.

/	DOES NOT SUPPORT PAGE ZERO  REDEFINE  (CAUSES  "Z" ERROR ON SOURCE FILES WHICH
/	DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).

/	INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO  "Q"  ERROR  ON  SOURCE FILES
/	WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).

/	DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION
/	/W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC.

/	DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8
/	OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES.


/	P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10.  PAL10 SUPPORTS MACRO-8 MODE AS AN
/	OPTION AND AUTOMATIC FIELD DUMP BITMAPS;  ALL OTHER KNOWN PAL10 FEATURES EXIST
/	IN  P?S/8  PAL  INCLUDING  THE  SUPPORT  OF  THE  AUTOMATIC FIELD DUMP  BITMAP
/	PSEUDO-OPS ('ENBITS' AND 'NOBITS').

/	OS/8  PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS  SEVERAL  SYNTACTIC
/	QUIRKS (WHICH  ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8
/	PAL  AND  PAL10    IN  CERTAIN  MINOR  WAYS);    REGARDLESS,  PAL8  LACKS  THE
/	COMPATIBILITY PROBLEMS OF PAL10.

/	MAINTAINING SOURCE COMPATIBILITY.

/	KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8
/	PAL AND OS/8 PAL8 (VERSION  B0).    CERTAIN  FORMS  OF  STATEMENTS  SHOULD  BE
/	AVOIDED:

/	TAD			/NOT LEGAL IN PAL8
/	0+TAD			/NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8
/	TAD	(3)+1		/GENERATES SAME AS "TAD (3+1)" IN PAL8
/	-A!-B			/UNARY OPERATOR HANDLED WRONG IN PAL8
/	I+N			/NOT LEGAL IN PAL8
/	N+I			/NOT LEGAL IN PAL8
/	I I			/NOT LEGAL IN PAL8

/	THIS  REQUIREMENT IS EASILY MET BY  KERMIT-12  AS  MOST  OF  THESE  CASES  ARE
/	ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY.

/	THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT  HAS  OTHER DESIRABLE FEATURES, MOST
/	OF WHICH IT SHARES WITH P?S/8 PAL) ARE  TOO SEVERE TO ALLOW USABLE ASSEMBLY OF
/	THIS  PROGRAM.    BETTER  CROSS-ASSEMBLERS  MAY  EXIST  ELSEWHERE  WHICH   ARE
/	SOURCE-COMPATIBLE WITH KERMIT-12.
/	USE OF P?S/8 LANGUAGE EXTENSIONS.

/	P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL
/	FOR  ASSEMBLY  DEVELOPMENT OF KERMIT-12.  THESE INCLUDE LANGUAGE ELEMENTS SUCH
/	AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE
/	VALUE OF 'EXPR'  WILL  BE  DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY
/	WHEN THAT POINT IN  THE  ASSEMBLY  IS  REACHED.   TO ACCESS THESE FEATURES AND
/	STILL  PROVIDE COMPATIBILITY WITH PAL8  (VERSION  B0),  THE  FOLLOWING  CODING
/	TECHNIQUE IS SUGGESTED:


/	IFNDEF	PQS	<PQS=0>	/WILL BE 0 ON PAL8, PAL10


/	IFZERO	PQS	<	/DO PAL8, ETC. STUFF HERE

/	FOO=	(TABLE)		/DEFINE POINTER TO ADDRESS OF TABLE

/	TAD	FOO-1		/GET (POINTER TO ADDRESS OF TABLE)-1
/	DCA	XR1		/SETUP AUTO-INDEX REGISTER

/	WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8.

/			>	/END OF PAL8, ETC. VARIANT


/	IFNZRO	PQS	<	/DO P?S/8 PAL STUFF HERE

/	TAD	(TABLE)-1	/GET (POINTER TO ADDRESS OF TABLE)-1
/	DCA	XR1		/SETUP AUTO-INDEX REGISTER

/	IFNDEF	PASS	<PASS=0>/DEFINE PASS VARIABLE

/	PASS=	PASS+1		/BUMP EVERY ASSEMBLER PASS

/	PAUSE	PASS		/DISPLAY PASS NUMBER

/	IFNZRO	.&4000	<

/	ERROR	1234		/DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS

/			>

/			>	/END OF P?S/8 PAL VARIANT


/	THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR  PERMANENT ELEMENTS WHICH MAY BE
/	MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT  CODING, WHILE THE PAL8 (VERSION
/	B0) VERSION CAN STILL BE USED (VIA DIRECT  OCTAL,  MULTIPLE EQUATE STATEMENTS,
/	CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC.   AS  NECESSARY)  FOR STANDARD
/	ASSEMBLY OF KERMIT-12.
/	ASSEMBLY PARAMETERS.

/	SEVERAL  PARAMETERS  MUST  BE  CHANGED  WITHIN  K12MIT.PA  (OR  PASSED TO  THE
/	ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE  THE  MAIN
/	FILE):

/	SETTING  KEY= [RECEIVE IOT CODE FOR  CONSOLE  KEYBOARD]  DEFINES  THE  CONSOLE
/	KEYBOARD IOT CODE (DEFAULT IS 03).

/	SETTING  TTY=  [TRANSMIT  IOT CODE FOR CONSOLE  OUTPUT]  CHANGES  THE  CONSOLE
/	PRINTER IOT CODE (DEFAULT IS 04).

/	THE FOLLOWING DEFINITIONS ARE  ESSENTIALLY  FOR  KL8-TYPE DEVICES ONLY, AS THE
/	CODE DEMANDS KL8 HARDWARE COMPATIBILITY.    MODELS  OTHER  THAN PDP-8 (SUCH AS
/	DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON  AVAILABLE  INTERFACES  (OTHER
/	SOFTWARE DESIGNATES A SERIAL INTERFACE AS A  LOGICAL  PRINTER  PORT;  DECMATES
/	SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES  THIS.),  OR  DON'T ALLOW
/	USABLE PLUG-IN OPTIONS.

/	IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE:

/	SETTING DEV30=	1 	CREATES DEVICE 30/31 REMOTE LINE IOTS.

/	SETTING DEV40=	1 	CREATES DEVICE 40/41 REMOTE LINE IOTS.

/	SETTING LEDERLE=1 	CREATES DEVICE 43/44  REMOTE  LINE  IOTS (AND A CUSTOM
/				HEADER).

/	SETTING ORIGNAL=1	CREATES  DEVICE  33/34  REMOTE   LINE  IOTS  (ORIGINAL
/				SETTINGS).

/	SETTING SPRINT= 1	CREATES DEVICE 32/33 REMOTE LINE  IOTS (SERIAL PRINTER
/				PORT).

/	SETTING USER=	1	CREATES DEVICE XX/XY REMOTE LINE IOTS.

/	IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT.



/	SETTING USER=	1	REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES:

/		XX=	[RECEIVE IOT DEVICE CODE] (DEFAULT IS 40).

/		XY=	[TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41).
/	SETTING SPRINT= 1	INHIBITS THE BUILT-IN CHECK FOR DECMATE  OPERATION AND
/				USES    THE    SERIAL  PRINTER  PORT  FOUND  ON    ALL
/				WPS-8-CONFIGURED    PDP-8/E,  PDP-8/A  CONFIGURATIONS,
/				VT-78,  AND  ALL DECMATES (VT-278,  DECMATE  II,  III,
/				III+) FOR REMOTE COMMUNICATIONS.

/	THE  USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY  BE
/	PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER
/	IS A  MODEM  (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC.  REQUIRES A
/	GENDER CHANGER.), OR  THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY
/	*ONLY* FOR A PRINTER,  SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN"
/	KEY AS A SCREEN DUMP  TO  THE  SERIAL PRINTER PORT, ETC.  THESE ISSUES ARE NOT
/	RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY
/	KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE  VERSIONS  COULD  REDEFINE THE
/	"PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.).

/	SETTING BRATE= NN	SETS THE DEFAULT BAUD RATE (FOR  SYSTEMS  THAT SUPPORT
/				THIS  FEATURE)  FROM  A  TABLE  OF  VALUES  (0-15)  AS
/				FOLLOWS:

/				NN		BAUD RATE

/				00		50
/				01		75
/				02		110
/				03		134.5
/				04		150
/				05		300
/				06		600
/				07		1200
/				08		1800
/				09		2000
/				10		2400
/				11		3600
/				12		4800
/				13		7200
/				14		9600
/				15		19200

/	SETTING ESCAPE=	NNNN	SETS THE DEFAULT ESCAPE CHARACTER TO NNNN.

/	SETTING FLOW=	1	ENABLES FLOW-CONTROL BY DEFAULT.
/	SETTING FLOW=	0	DISABLES FLOW-CONTROL BY DEFAULT.

/	SETTING FMODE=	0177	SETS THE DEFAULT FILE MODE TO ASCII.
/	SETTING FMODE=	4377	SETS THE DEFAULT FILE MODE TO BINARY.
/	SETTING GENMSG=	0	CAUSES  NO  BINARY TO BE GENERATED WHERE  'LCLMSG'  IS
/				DEFINED.  THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR
/				SUBSEQUENT  OVERLAY  BY  K12PCH.BN TO DEFINE THE LOCAL
/				HEADER MESSAGE.    THIS  PARAMETER  SHOULD  NOT BE SET
/				UNLESS ONE OF  THESE  METHODS IS USED, ELSE THE HEADER
/				MESSAGE  WILL BE UNDEFINED.    (NOTE:    IF  K12PCH.BN
/				GENERATES  A HEADER MESSAGE, THEN  THIS  PARAMETER  IS
/				UNIMPORTANT,  AS  K12PCH.BN  OVERLAYS  THE  BINARY  OF
/				K12MIT.)
/	SETTING GENMSG=	1	CAUSES A HEADER MESSAGE TO BE GENERATED.  THE CONTENTS
/				OF  THE  MESSAGE  ARE CREATED BY SETTING LEDERLE=1  OR
/				UMSG=1.   IF EITHER IS ZERO, A DEFAULT (NULL)  MESSAGE
/				WILL BE GENERATED.

/	SETTING ICLOSE=	1	ENSURES  A  <^Z>  AT  <EOF>  OF  ASCII  INPUT FILES BY
/				DEFAULT.
/	SETTING ICLOSE=	0	CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT.

/	SETTING INIECHO=0	CAUSES A  FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL
/				CHARACTER ECHOING BY DEFAULT.
/	SETTING INIECHO=1	CAUSES A HALF-DUPLEX  CONNECT  MODE  STATE  WITH LOCAL
/				ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT.

/	SETTING LOWER=	0	ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT.
/	SETTING LOWER=	-40	FOLDS  LOWER-CASE  CONSOLE  OUTPUT  TO  UPPER-CASE  BY
/				DEFAULT.

/	SETTING OCLOSE=	0	PREVENTS DEFAULT SENDING OF <^Z>  AT  <EOF>  OF  ASCII
/				FILES.
/	SETTING OCLOSE= 1	CAUSES  <^Z> TO BE SENT AT <EOF>  OF  ASCII  FILES  BY
/				DEFAULT.

/	SETTING PORT=	0	CAUSES THE DP-278 PORT 0 TO BE USED  IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
/	SETTING PORT=	1	CAUSES  THE DP-278 PORT 1 TO BE USED IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).

/	SETTING RETCNT=	NNNN	SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT.
/	SETTING UMSG=	0	PREVENTS THE  LOCAL  USER  HEADER  MESSAGE  FROM BEING
/				GENERATED.
/	SETTING UMSG=	1	CAUSES THE LOCAL  USER HEADER MESSAGE TO BE GENERATED.
/				THE PARAMETER GENMSG=1 IS  REQUIRED  TO  BE  SET.  THE
/				SOURCE MUST BE MODIFIED LOCALLY  TO CHANGE THE MESSAGE
/				TEXT FROM "INSERT LOCAL USER MESSAGE  HERE!,"  AS THIS
/				IS THE DEFAULT CONTENTS.
/	KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES.

/	BRIEF USAGE DESCRIPTION.

/	KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT
/	DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE.

/	AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE:

/	1.	CONNECT (TO REMOTE SYSTEM AS TERMINAL).

/	2.	SEND FILESPEC (TO REMOTE RECEIVER OR SERVER).

/	3.	RECEIVE FILESPEC (FROM REMOTE SENDER).

/	4.	GET FILESPEC (FROM REMOTE SERVER).

/	5.	FINISH (SERVING).

/	6.	SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED ****

/	7.	EXIT (TO OPERATING SYSTEM).

/	8.	HELP (DISPLAYS HELP MESSAGE).

/	FILESPEC  MAY  BE  ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION,
/	WHERE THE  FILENAME  AND  EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2
/	ALPHANUMERICS RESPECTIVELY, AS  NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME
/	FORMAT).  THE DEVICE:    FIELD  IS  OPTIONAL;   ALL COMMANDS USING THE DEVICE:
/	FIELD FOR LOCAL DEVICE SPECIFICATION  WILL  USE  THIS  DEVICE AS THE SOURCE OR
/	DESTINATION AS NECESSARY FOR THE LOCAL  FILES.    IF  THE  DEVICE:    FIELD IS
/	OMITTED, THE DEFAULT DEVICE DSK:  WILL BE USED.  THE ACTUAL DEVICE USED MAY BE
/	SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND:

/	.ASSIGN DEV DSK

/	WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE.

/	KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT:    THE  ACTUAL DEFAULT PROMPT
/	TEXT  IS  PARTIALLY  TAKEN  FROM  THE  ACTUAL MACHINE KERMIT-12  IS  CURRENTLY
/	EXECUTING  ON.    FOR  EXAMPLE, IF KERMIT-12 HAS DETERMINED THE  CPU  TYPE  AS
/	PDP-8/E, THE PROMPT WILL BE:

/	KERMIT-8/E>

/	THIS  ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH
/	MESSAGES ORIGINATING  FROM  THE  RESPECTIVE  SYSTEMS.    FUTURE  VERSIONS WILL
/	SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES.

/	THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE
/	ESCAPE CHARACTER.
/	COMMAND RESTRICTIONS.

/	THE  SEND  COMMAND  ALLOWS   DEVICE:FILENAME.EXTENSION  (6.2)  WITH  WILD-CARD
/	SUBSTITUTION.  A * MAY  BE  GIVEN  FOR  AN  ENTIRE  FIELD  (EITHER FILENAME OR
/	EXTENSION OR BOTH) ONLY.  A  ?    WILL  MATCH  ANY SINGLE CHARACTER WHICH MUST
/	EXIST IN THE ACTUAL FILENAME OR EXTENSION,  UNLESS  RIGHT-MOST  IN  THE FIELD.
/	ALL  MATCHING FILES WILL BE SENT.  NO  OUTBOUND  FILENAME  (AS-NAME)  FACILITY
/	EXISTS AT THIS TIME.

/	THE  RECEIVE  COMMAND  ALLOWS  OPTIONAL  DEVICE:   ONLY.   *THE  FILENAME  AND
/	EXTENSION  ARE  NOT  ALLOWED*.  NAMES OF RECEIVED FILES WILL  BE  MODIFIED  IF
/	NECESSARY  TO  CONFORM  TO  THE  6.2  FORMAT.   *IMPLEMENTATION RESTRICTION* :
/	CERTAIN REMOTE  FILENAMES  CONTAINING  NON-ALPHANUMERIC  CHARACTERS  MAY CAUSE
/	KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL.

/	THE GET COMMAND  ALLOWS  OPTIONAL  DEVICE:    TO  DETERMINE DESTINATION OF THE
/	INCOMING FILES.  THE  OUTBOUND  FILESPEC  MUST  CONFORM  TO  LOCAL CONVENTIONS
/	(FILENAME AND EXTENSION ARE NOT  LIMITED  TO  6.2  FORMAT;  THE DEVICE:  FIELD
/	WILL NOT BE SENT TO THE  REMOTE  KERMIT  UNLESS  IT  IS  ILLEGAL  WITHIN  OS/8
/	SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS.    IN  THIS CASE, THE DEFAULT
/	DEVICE DSK:  APPLIES, AND THE ENTIRE "DEVICE"  FIELD  IS  SENT  ALONG WITH ANY
/	FILENAME  AND EXTENSION).  CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE  WITH  THIS
/	IMPLEMENTATION,  AS  IMBEDDED  SPACES  OR  NON-ALPHANUMERIC CHARACTERS ARE NOT
/	ALLOWED, EVEN  THOUGH  THEY  MAY  BE REQUIRED ON THE REMOTE SYSTEM.  WILD-CARD
/	CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE.

/	<^X>  OR  <^Z>  CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT  IS
/	NORMALLY  A  SLOW  PROCESS,  SINCE  THE CHECKING IS DONE BY A SOFTWARE TIMEOUT
/	SCHEME.   AT  THE  PRESENT  TIME,  THERE  IS  NO DISTINCTION BETWEEN THESE THO
/	CHARACTERS, SO IT  IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF
/	FILES INVOLVED IN THE TRANSFER IS ABORTED.

/	DECMATE II/III/III-PLUS CONSIDERATIONS:

/	FUNCTION KEYS SEND <ESC>  SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE.  ALL SOFT
/	FUNCTION KEYS ARE THEREFORE INEFFECTIVE  (EXCEPT  FOR HOLD SCREEN WHICH ALWAYS
/	WORKS).

/	CONNECT MODE RUNS IN 8-BIT MODE.

/	THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE.

/	ANY VALID DECMATE II/III/III-PLUS CHARACTER SET  IS  ALLOWED  WHILE IN CONNECT
/	MODE  (MCS  TCS  LINE,  ETC.).    ALL   <ESC>  SEQUENCES  ARE  PASSED  TO  THE
/	SLUSHWARE/FIRMWARE UNMODIFIED.

/	KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM
/	CONNECT MODE.
/	DEFINITIONS.							/017 CJL

	*200					/FOR DEFINITIONS	/047 CJL

/	REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY.		/046 CJL

	IFNDEF	DEV30	<DEV30=	0>		/USE DEVICE 30/31 VALUES
	IFNDEF	DEV40	<DEV40=	0>		/USE DEVICE 40/41 VALUES
	IFNDEF	LEDERLE	<LEDERLE=0>		/USE LEDERLE LABS VALUES
	IFNDEF	ORIGNAL	<ORIGNAL=0>		/USE ORIGINAL VALUES
	IFNDEF	SPRINT	<SPRINT=0>		/USE DEVICE 32/33 VALUES
	IFNDEF	USER	<USER=	0>		/USE USER-DEFINED VALUES

	REMOTE=	DEV30+DEV40+LEDERLE+ORIGNAL	/SET REMOTE LINE IOT CODE
	REMOTE=	REMOTE+SPRINT+USER		/SET REMOTE LINE IOT CODE

	IFZERO	REMOTE	<DEV40=	1>		/DEFAULT TO DEVICE 40/41 VERSION

/	DEV30 PARAMETERS.

	IFNZRO	DEV30			<

	IFNDEF	REC	<REC=	30>		/DEVICE 30 INPUT
	IFNDEF	SEN	<SEN=	31>		/DEVICE 31 OUTPUT

					>

/	DEV40 PARAMETERS (DEFAULT).

	IFNZRO	DEV40			<

	IFNDEF	REC	<REC=	40>		/DEVICE 40 INPUT
	IFNDEF	SEN	<SEN=	41>		/DEVICE 41 OUTPUT

					>

/	LEDERLE PARAMETERS.						/038 CJL

	IFNZRO	LEDERLE			<

	IFNDEF	REC	<REC=	43>		/DEVICE 43 INPUT
	IFNDEF	SEN	<SEN=	44>		/DEVICE 44 OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	0>		/DON'T GENERATE USER MESSAGE

					>

/	ORIGNAL PARAMETERS.

	IFNZRO	ORIGNAL			<

	IFNDEF	REC	<REC=	33>		/DEVICE 33 INPUT
	IFNDEF	SEN	<SEN=	34>		/DEVICE 34 OUTPUT

					>
/	SPRINT PARAMETERS.						/046 CJL

	IFNZRO	SPRINT			<

	IFNDEF	REC	<REC=	32>		/DEVICE 32 INPUT
	IFNDEF	SEN	<SEN=	33>		/DEVICE 33 OUTPUT

					>

/	USER PARAMETERS.

	IFNZRO	USER			<

	IFNDEF	XX	<XX=	40>		/DEFAULT TO DEVICE 40
	IFNDEF	XY	<XY=	41>		/DEFAULT TO DEVICE 41
	IFNDEF	REC	<REC=	XX>		/DEVICE XX INPUT
	IFNDEF	SEN	<SEN=	XY>		/DEVICE XY OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	1>		/GENERATE USER MESSAGE

					>

/	REMOTE LINE IOT DEFINITIONS.

/	RECEIVE DEFINITIONS.

	RKRBIOT=REC^10+6006			/READ REMOTE, CLEAR FLAG
	RKSFIOT=REC^10+6001			/SKIP ON REMOTE INPUT FLAG

/	TRANSMIT DEFINITIONS.

	RSBIOT=	SEN^10+6003			/SET BAUD RATE FROM AC[8-11]
	RTLSIOT=SEN^10+6006			/TRANSMIT CHARACTER, CLEAR FLAG
	RTSFIOT=SEN^10+6001			/SKIP ON TRANSMIT FLAG

/	CONSOLE TTY: DEFINITIONS.					/017 CJL

/	KEYBOARD DEFINITIONS.						/017 CJL

	IFNDEF	KEY	<KEY=	03>	/KEYBOARD DEVICE CODE

	KCCIOT=	KEY^10+6002		/CLEAR CONSOLE KEYBOARD FLAG, AC
	KRBIOT=	KEY^10+6006		/READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG
	KRSIOT=	KEY^10+6004		/READ CONSOLE KEYBOARD BUFFER STATIC
	KSFIOT=	KEY^10+6001		/SKIP ON CONSOLE KEYBOARD FLAG

/	TELEPRINTER DEFINITIONS.					/017 CJL

	IFNDEF	TTY	<TTY=	04>	/TELEPRINTER DEVICE CODE

	TLSIOT=	TTY^10+6006		/PRINT CHARACTER, CLEAR FLAG
	TSFIOT=	TTY^10+6001		/SKIP ON TELEPRINTER FLAG
/	DEFAULT ESCAPE CHARACTER DEFINITION.				/025 CJL

	IFNDEF	ESCAPE	<ESCAPE="]&37>	/DEFAULT IS CONTROL-]

/	DEFAULT LOWER-CASE ENABLE DEFINITION.				/030 CJL

	IFNDEF	LOWER	<LOWER=	0/-40>	/LOWER-CASE IS ALLOWED AS IS
					/CHANGE TO -40 IF LOWER-CASE
					/SHOULD BE FOLDED TO UPPER-CASE

/	DEFAULT RETRY COUNT DEFINITION.					/031 CJL

	IFNDEF	RETCNT	<RETCNT=5>	/DEFAULT IS FIVE RETRIES

/	DEFAULT FILE MODE DEFINITION.					/031 CJL

	IFNDEF	FMODE	<FMODE=	0177>	/DEFAULT IS ASCII FILE MODE
					/4377 IS BINARY FILE MODE

/	DEFAULT FLOW-CONTROL MODE DEFINITION.				/031 CJL

	IFNDEF	FLOW	<FLOW=	1>	/DEFAULT IS FLOW-CONTROL ENABLED

/	DEFAULT ASCII INPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	ICLOSE	<ICLOSE=1>	/ENSURE <^Z> AT ASCII <EOF>

/	DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	OCLOSE	<OCLOSE=0>	/<^Z> NOT SENT AT ASCII <EOF>

/	DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS.			/038 CJL

	IFNDEF	GENMSG	<GENMSG=1>	/DEFAULT IS TO GENERATE A MESSAGE
	IFNDEF	UMSG	<UMSG=	0>	/DEFAULT IS NO DUMMY USER MESSAGE
	IFNDEF	LEDERLE	<LEDERLE=0>	/DEFAULT IS NO LEDERLE MESSAGE

/	THE NULL MESSAGE WILL BE GENERATED BY DEFAULT.

/	ECHO DEFINITION.						/039 CJL

	IFNDEF	INIECHO	<INIECHO=0>	/DEFAULT IS NO LOCAL ECHO

/	DEFAULT DECMATE I PORT DEFINITION.				/050 CJL

	IFNDEF	PORT	<PORT=	0>	/DEFAULT IS PORT ZERO 

/	DEFAULT BAUD RATE DEFINITION.					/050 CJL

	IFNDEF	BRATE	<BRATE=	7>	/DEFAULT IS 1200 BAUD
/	STATE DEFINITIONS.

	STDAT=	"D&137			/DATA
	STACK=	"Y&137			/ACK
	STNAK=	"N&137			/NAK
	STSIN=	"S&137			/SEND-INIT
	STBRK=	"B&137			/BREAK LINK
	STFIL=	"F&137			/FILENAME HEADER
	STEOF=	"Z&137			/END OF FILE OR REPLY
	STERR=	"E&137			/ERROR PACKET
	STATT=	"A&137			/FILE ATTRIBUTES
	STRIN=	"R&137			/RECEIVE-INIT
	STEOT=	"B&137			/BREAK TRANSMISSION
	STGEN=	"G&137			/KERMIT GENERIC COMMAND

/	DEFAULT INIT PARAMETERS.

	DEFCK=	"1&177			/DEFAULT 1 CHARACTER CHECKSUM	/014 CJL
	DEFEOL=	15+40			/CR IS DEFAULT <EOL>
	DEFQCTL= "#&177			/"#" IS DEFAULT QCTL

/	BUFFER DEFINITIONS.						/014 CJL

	DECIMAL				/MAKE IT EASIER			/014 CJL

	DEFMAXL=94			/DEFAULT MAXIMUM PACKET SIZE

	LINSIZ=	32			/KEYBOARD LINE BUFFER SIZE

	OCTAL				/BACK TO NORMAL			/014 CJL

	BUFSIZE=200			/128 CHARACTER RING BUFFERS	/026 CJL
					/FOR NO-INTERRUPT CONNECT MODE
/	CONTROL CHARACTER DEFINITIONS.					/023 CJL

	CNTRLA=	"A&37			/<^A> DEFAULT MARK CHARACTER	/023 CJL
	CNTRLB=	"B&37			/<^B>				/046 CJL
	CNTRLC=	"C&37			/<^C> PROGRAM EXIT CHARACTER	/023 CJL
	CNTRLD=	"D&37			/<^D>				/046 CJL
	CNTRLE=	"E&37			/<^E>				/046 CJL
	CNTRLF=	"F&37			/<^F>				/046 CJL
	CNTRLG=	"G&37			/<^G> BELL CHARACTER		/023 CJL
	CNTRLH=	"H&37			/<^H> BACKSPACE CHARACTER	/023 CJL
	CNTRLI=	"I&37			/<^I> HORIZONTAL TAB CHARACTER	/043 CJL
	CNTRLJ=	"J&37			/<^J> LINEFEED CHARACTER	/023 CJL
	CNTRLK=	"K&37			/<^K> VERTICAL TAB CHARACTER	/046 CJL
	CNTRLL=	"L&37			/<^L> FORM FEED CHARACTER	/046 CJL
	CNTRLM=	"M&37			/<^M> CARRIAGE RETURN CHARACTER	/023 CJL
	CNTRLN=	"N&37			/<^N>				/046 CJL
	CNTRLO=	"O&37			/<^O> ECHO FLIP CHARACTER	/023 CJL
	CNTRLP=	"P&37			/<^P> PROGRAM RESTART CHARACTER	/023 CJL
	CNTRLQ=	"Q&37			/<^Q> OUTPUT RESUME CHARACTER	/023 CJL
	CNTRLR=	"R&37			/<^R>				/046 CJL
	CNTRLS=	"S&37			/<^S> OUTPUT WAIT CHARACTER	/023 CJL
	CNTRLT=	"T&37			/<^T>				/046 CJL
	CNTRLU=	"U&37			/<^U>				/046 CJL
	CNTRLV=	"V&37			/<^V>				/046 CJL
	CNTRLW=	"W&37			/<^W>				/046 CJL
	CNTRLX=	"X&37			/<^X> FILE ABORT CHARACTER	/044 CJL
	CNTRLY=	"Y&37			/<^Y>				/046 CJL
	CNTRLZ= "Z&37			/<^Z> ABORT AND <EOF> CHARACTER /044 CJL
	DELETE=	177			/<DEL> DELETE OR <RO> CHARACTER	/034 CJL
	LOWERC=	"C&177+40		/LOWER-CASE C (CLOSE CHARACTER)	/025 CJL
	UPPERC=	"C&177			/UPPER-CASE C (CLOSE CHARACTER)	/025 CJL

/	I/O AND FIELD DEFINITIONS.					/019 CJL

	BUFFLD=	10			/I/O BUFFER FIELD		/019 CJL
	DIRFLD=	10			/DIRECTORY LOOKUP BUFFER FIELD	/028 CJL
	DMIFLD=	10			/DECMATE ONCE-ONLY CODE FIELD	/046 CJL
	MSGFLD=	10			/TEXT MESSAGE FIELD		/023 CJL
	PAGCNT=	2			/I/O BUFFER SIZE IN PAGES	/019 CJL
	PRGFLD=	00			/PROGRAM FIELD			/019 CJL
	USRFLD=	10			/USR FIELD			/020 CJL

/	OS/8 MONITOR DEFINITIONS.					/014 CJL

	SBOOT=	7600			/MONITOR EXIT LOCATION IS 07600	/014 CJL
	USR=	7700			/NON-LOCKED USR ENTRY POINT	/035 CJL
/	USER SERVICE ROUTINE AND HANDLER DEFINITIONS.			/020 CJL

	CLOSE=	4			/CLOSE TENTATIVE OUTPUT FILE	/020 CJL
	ENTER=	3			/ENTER TENTATIVE OUTPUT FILE	/020 CJL
	FETCH=	1			/FETCH HANDLER			/020 CJL
	INQUIRE=12			/INQUIRE ABOUT HANDLER		/020 CJL
	LOOKUP=	2			/LOOKUP FILE			/020 CJL
	RESET=	13			/RESET DEVICE CONTROL WORD TABLE/037 CJL
	USRIN=	10			/LOCK USR IN CORE		/020 CJL
	WRITE=	4000			/I/O CALL WRITE BIT		/020 CJL

/	INSTRUCTION DEFINITIONS.

	CLCL=	6136			/CLEAR CLOCK FLAG (8/A, ETC.)	/046 CJL
	CLSK=	6131			/SKIP ON, CLEAR CLOCK FLAG	/046 CJL
	CLSK8A=	6137			/SKIP ON CLOCK FLAG (8/A, ETC.)	/046 CJL
	COM=	0017			/COMPLEMENT AC
	DCAC=	DCA	.		/CURRENT PAGE DCA INSTRUCTION	/047 CJL
	IAAC=	6171			/"A" REGISTER TO AC
	IACA=	6167			/AC TO "A" REGISTER
	ISZC=	ISZ	.		/CURRENT PAGE ISZ INSTRUCTION	/050 CJL
	JMPC=	JMP	.		/CURRENT PAGE JMP INSTRUCTION	/047 CJL
	JMPIC=	JMP I	.		/CURRENT PAGE JMP I INSTRUCTION	/047 CJL
	JMSC=	JMS	.		/CURRENT PAGE JMS INSTRUCTION	/047 CJL
	JMSIC=	JMS I	.		/CURRENT PAGE JMS I INSTRUCTION	/047 CJL
	LINC=	6141			/GOTO LINC MODE
	PDP=	0002			/GOTO PDP-8 MODE
	PRQ3=	6236			/TYPE THREE PANEL REQUEST	/046 CJL
	TADC=	TAD	.		/CURRENT PAGE TAD INSTRUCTION	/047 CJL
	R3L=	7014			/ROTATE AC (NOT LINK) LEFT 3	/046 CJL

/	NUMERIC LOAD DEFINITIONS.					/014 CJL

	NL0000=	CLA			/LOAD AC WITH 0000		/046 CJL
	NL0001=	CLA IAC			/LOAD AC WITH 0001		/014 CJL
	NL0002=	CLA CLL CML RTL		/LOAD AC WITH 0002		/014 CJL
	NL0003=	CLA STL IAC RAL		/LOAD AC WITH 0003 (8/I ON UP)	/046 CJL
	NL0004=	CLA CLL IAC RTL		/LOAD AC WITH 0004 (8/I ON UP)	/046 CJL
	NL0006=	CLA STL IAC RTL		/LOAD AC WITH 0006 (8/I ON UP)	/046 CJL
	NL0010=	CLA IAC RAL RAR		/LOAD AC WITH 0010 (6120)	/024 CJL
	NL0100=	CLA IAC BSW		/LOAD AC WITH 0100 (8/E ON UP)	/024 CJL
	NL3776=	CLA CLL CMA RAR RAL	/LOAD AC WITH 3776 (8/I OR 8/L)	/024 CJL
	NL3777=	CLA CLL CMA RAR		/LOAD AC WITH 3777		/046 CJL
	NL4000=	CLA CLL CML RAR		/LOAD AC WITH 4000		/014 CJL
	NL5777=	CLA CLL CMA RTR		/LOAD AC WITH 5777		/046 CJL
	NL6000=	CLA STL IAC RTR		/LOAD AC WITH 6000 (8/I ON UP)	/046 CJL
	NL7775=	CLA CLL CMA RTL		/LOAD AC WITH 7775		/014 CJL
	NL7776=	CLA CLL CMA RAL		/LOAD AC WITH 7776		/014 CJL
	NL7777=	CLA CMA			/LOAD AC WITH 7777		/014 CJL
/	DECMATE I COMMUNICATIONS PORT DEFINITIONS.			/050 CJL

	IPORT0=	30		/COMMUNICATIONS PORT 0 INPUT DEVICE CODE

	RKFL0=	IPORT0^10+6000	/SET COMMUNICATIONS PORT 0 INPUT FLAG
	RKSF0=	IPORT0^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG
	RKCC0=	IPORT0^10+6002	/CLEAR AC
	RKIE0=	IPORT0^10+6005	/PORT 0 INPUT INTERRUPT ENABLE PER AC[11]
	RKRB0=	IPORT0^10+6006	/READ COMMUNICATIONS PORT 0 INTO AC

	OPORT0=	31		/COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE

	RTFL0=	OPORT0^10+6000	/SET COMMUNICATIONS PORT 0 OUTPUT FLAG
	RTSF0=	OPORT0^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG
	RTCF0=	OPORT0^10+6002	/NOP
	RTIE0=	OPORT0^10+6005	/PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11]
	RTLS0=	OPORT0^10+6006	/WRITE COMMUNICATIONS PORT 0 FROM AC

	IPORT1=	34		/COMMUNICATIONS PORT 1 INPUT DEVICE CODE

	RKFL1=	IPORT1^10+6000	/SET COMMUNICATIONS PORT 1 INPUT FLAG
	RKSF1=	IPORT1^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG
	RKCC1=	IPORT1^10+6002	/CLEAR AC
	RKIE1=	IPORT1^10+6005	/PORT 1 INPUT INTERRUPT ENABLE PER AC[11]
	RKRB1=	IPORT1^10+6006	/READ COMMUNICATIONS PORT 1 INTO AC

	OPORT1=	35		/COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE

	RTFL1=	OPORT1^10+6000	/SET COMMUNICATIONS PORT 1 OUTPUT FLAG
	RTSF1=	OPORT1^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG
	RTCF1=	OPORT1^10+6002	/NOP
	RTIE1=	OPORT1^10+6005	/PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11]
	RTLS1=	OPORT1^10+6006	/WRITE COMMUNICATIONS PORT 1 FROM AC

	PCON=	36		/PORT STATUS AND CONTROL DEVICE CODE

	SMFL=	PCON^10+6000	/SET MODEM CHANGE FLAG
	MFSK=	PCON^10+6001	/SKIP ON, CLEAR MODEM CHANGE FLAG
	WCON0=	PCON^10+6002	/WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER
	PSR=	PCON^10+6003	/READ PORT STATUS REGISTER
	PMR=	PCON^10+6004	/READ PORT MODEM REGISTER
	MFIE=	PCON^10+6005	/LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11]
	WCON1=	PCON^10+6006	/WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER
	RACD=	PCON^10+6007	/RESET ACTIVE COMMUNICATIONS PORT PER AC[0]
/	DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS.		/046 CJL

	PORTIN=	30		/COMMUNICATIONS PORT INPUT DEVICE CODE

	IFL=	PORTIN^10+6000	/SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG
	ISF=	PORTIN^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG
	ICF=	PORTIN^10+6002	/NOP (CLEAR THE AC?)
	INOP1=	PORTIN^10+6003	/(NOP?)
	IRS=	PORTIN^10+6004	/READ COMMUNICATIONS PORT RECEIVE BUFFER
	IIE=	PORTIN^10+6005	/COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11]
	IRB=	PORTIN^10+6006	/READ COMMUNICATIONS PORT RECEIVE BUFFER
	INOP2=	PORTIN^10+6007	/(NOP?)

	PORTOUT=31		/COMMUNICATIONS PORT OUTPUT DEVICE CODE

	DUMBFL=	PORTOUT^10+6000	/SET COMMUNICATIONS PORT DUMMY FLAG
	DUMBSF=	PORTOUT^10+6001	/SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG
	DUMBCF=	PORTOUT^10+6002	/NOP (CLEAR THE AC?)
 	ONOP1=	PORTOUT^10+6003	/(NOP?)
	OPC=	PORTOUT^10+6004	/LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
	DUMBIE=	PORTOUT^10+6005	/COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11]
	OLS=	PORTOUT^10+6006	/LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
	ONOP2=	PORTOUT^10+6007	/(NOP?)

	PORTCON=36		/COMMUNICATIONS PORT CONTROL DEVICE CODE

	MFL=	PORTCON^10+6000	/SET MODEM CHANGE FLAG
	MSF=	PORTCON^10+6001	/SKIP ON, CLEAR MODEM CHANGE FLAG
	MLC=	PORTCON^10+6002	/LOAD MODEM CONTROL REGISTER
	MSB=	PORTCON^10+6003	/LOAD BAUD RATE REGISTER
	MRS=	PORTCON^10+6004	/READ MODEM STATUS REGISTER
	MIE=	PORTCON^10+6005	/MODEM CHANGE INTERRUPT ENABLE PER AC[11]
	MPSCC=	PORTCON^10+6006	/ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
	MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
/	MISCELLANEOUS DEFINITIONS.					/014 CJL

/	STATIC DATE CALCULATIONS.					/024 CJL

/	THESE EQUATIONS CAUSE PRINTABLE  TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN
/	IN OS/8 INTERNAL FORMAT.  PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION,
/	REVISION, REVDATE, AND REVDGRP.  REVDATE  AND  REVDGRP SHOULD BE OBTAINED FROM
/	THE SYSTEM WHEN RELEASING A NEW VERSION  AFTER  FIRST  CORRECTLY  INVOKING THE
/	SYSTEM DATE COMMAND.

/	VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)]

/	REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77]

/	REVDATE=[THE CONTENTS OF 17666 (DATE WORD)]

/	REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)]



	IFNDEF	REVDATE	<REVDATE=4464>	/REVISION DATE (LOCATION 17666)

	IFNDEF	REVDGRP	<REVDGRP=0400>	/REVISION 8 YEAR DATE GROUP (LOCATION 07777)

	IFNDEF	REVISIO	<REVISIO="G&77>	/REVISION OF KERMIT-12

	IFNDEF	VERSION	<VERSION=12>	/VERSION OF KERMIT-12


	DAY=	REVDATE&370%10		/REVISION DAY

	DGROUP=	REVDGRP&600%20		/REVISION DATE GROUP (WHICH 8 YEARS)

	MONTH=	REVDATE&7400%400	/REVISION MONTH

	YEAR=	REVDATE&7+DGROUP+106	/REVISION YEAR (SINCE 1900)
	FIELD	PRGFLD%10	/STARTING FIELD				/038 CJL

	*0			/START AT THE BEGINNING			/014 CJL

INTPC,	.-.			/PC FROM INTERRUPT (IF ANY)		/014 CJL
	JMP I	INTPC		/RETURN WITH INTERRUPTS OFF		/014 CJL

ABFLAG,	.-.			/FILE ABORT FLAG			/044 CJL
TABLEJU,.-.			/MATCHING VALUE FOR SRCHTABLE ROUTINE	/025 CJL

	IFNZRO	.-4	<ERROR	.>					/014 CJL
ODT,	ZBLOCK	7-.		/RESERVED FOR OS/8 ODT			/014 CJL
RATE,	BRATE			/BAUD RATE				/050 CJL

	*10			/GET TO AUTO-INDEX AREA			/014 CJL

XR0,	.-.			/AUTO-INDEX ZERO			/014 CJL
XR1,	.-.			/AUTO-INDEX ONE				/014 CJL
DIRXR,	PORT			/DIRECTORY LOOKUP DEDICATED AUTO-INDEX	/028 CJL
				/INITIALIZED FOR DECMATE I ONCE-ONLY	/050 CJL

/	THE REMAINING LOCATIONS THROUGH  000017  MUST  BE USED DIRECTLY ONLY, SO AS TO
/	NOT CAUSE INADVERTANT AUTO-INDEXING.

/	COLUMN COUNTER FOR CONSOLE ROUTINES (NEVER USED INDIRECTLY).	/043 CJL

COLUMN,	.-.			/CONSOLE OUTPUT COLUMN COUNTER		/043 CJL

/	CONSOLE TERMINAL ECHO SWITCH (NEVER USED INDIRECTLY).		/020 CJL

ECHOSW,	0			/0=ECHO, 4000=DON'T ECHO		/020 CJL

/	LATEST (NON-CONNECT MODE) CHARACTER (NEVER USED INDIRECTLY).	/043 CJL

INCHAR,	.-.			/LATEST INPUT CHARACTER FROM CONSOLE	/043 CJL

/	CURRENT KERMIT MODE (NEVER USED INDIRECTLY).			/025 CJL

KMODE,	.-.			/CURRENT MODE OF KERMIT			/025 CJL

/	KERMIT MODE FLAG VALUES.					/014 CJL

/	MLINE=	1		/KERMIT IS ON-LINE
	MSEND=	2		/KERMIT IS IN SEND MODE
	MREC=	3		/KERMIT IS IN RECEIVE MODE

/	LATEST CHARACTER SENT TO OUTPUT FILE (NEVER USED INDIRECTLY).	/020 CJL

LATEST,	.-.			/LATEST CHARACTER SENT TO OUTPUT FILE	/020 CJL
	*20			/GET PAST AUTO-INDEX AREA

INFLAG,	.-.			/DECMATE INPUT AVAILABLE FLAG		/046 CJL
OUTFLAG,.-.			/DECMATE OUTPUT AVAILABLE FLAG		/046 CJL
TEMP,	0
RCHAR,	0			/REMOTE LINE CURRENT INPUT CHAR
SCAN1,	0			/
SCAN2,	0			/
KEYDSP,	0			/DISPATCH ADDRESS FOR KEYWORD MATCH
BININP,	0			/BINARY REGISTER FOR DECIMAL INPUT
PTABLE,	0			/
LPTR,	0			/HOLDS LINE POINTER
STATE,	0			/CURRENT STATE
RETRY,	-RETCNT			/PACKET ERROR RETRY COUNTER		/031 CJL
RTRYC,	0			/USE THIS FOR ACTUAL COUNTER

/	CURRENT PACKET I/O DATA.					/014 CJL

PAKPTR,	0			/POINTER TO OUTPUT PACKET POINTER
PAKCKS,	0			/HOLDS CURRENT OUTPUT PACKET CHECKSUM TOTAL
CURSEQ,	0			/CURRENT SEQ NUMBER
QFLAG,	0			/NON-ZERO WHEN NO CONTROL QUOTING

/	RECEIVE "INIT" REGISTERS.					/014 CJL

RMAXL,	DEFMAXL+40		/MAX LENGTH FOR DATA PACKET (DEFAULT)
RTIME,	0			/TIME-OUT VALUE
RNPAD,	0			/NUMBER OF PADDING CHARS
RPADC,	0			/CHAR USED FOR PADDING
REOL,	DEFEOL			/TERMINATOR CHAR USED FOR END OF PACKET
RQCTL,	DEFQCTL			/CONTROL CHAR PREFIX CHAR
RQBIN,	0			/PARITY CHAR PREFIX CHAR (CHARS GT 177)
RCHKT,	DEFCK			/CHECKSUM TYPE  (DEFAULT TYPE 1)
RREPT,	0			/PREFIX CHAR FOR REPEATED CHARS
RCAPAS,	0			/EXTRA CAPABILITY BIT MASK

/	ZBLOCK	4		/RESERVED FOR EXTRA CAPABILITIES	/022 CJL

	INITEND=.		/END OF INIT REGISTERS			/022 CJL

HNDADR,	0			/FILE DEVICE HANDLER ADDRESS
FORCEP,	0			/FLAG FOR FORCED OUTPUT OF PACKET WHEN THERE IS
				/  NO DATA (JUST SOH, LEN, SEQ, AND CHECKSUM)
PRSERR,	0			/HOLDS PARSE POSITION FOR REPORTING ERRORS
PACK6P,	0			/POINTER TO STORAGE OF 6 BIT CHARS
PACK6F,	0			/FLAG FOR WHICH BYTE TO STORE
GET6P,	0			/POINTER USED IN THE GET6 ROUTINE
GET6F,	0			/FLAG USED IN THE GET6 ROUTINE
MOVE4,	0			/COUNTER FOR "MOVE"
INIFLG,	0			/INIT DONE FLAG
MQ,	.-.			/"MQ" TEMPORARY REGISTER		/032 CJL
/	FILE NAME PARSE REGISTERS.					/014 CJL

FNPTR,	0			/POINTER TO WHERE TO PUT A PARSED FILE NAME
WILDF,	0			/WILD CARD IN FILE NAME FLAG

/	FILE INFORMATION.						/014 CJL

FSBLK,	0			/FILE START BLOCK
FLEN,	0			/FILE LENGTH
DEVNUM,	0			/PARSED DEVICE NUMBER HERE
OFFLG,	0			/OUTPUT FILE OPEN FLAG
ODNAME,	0			/POINTER TO USER SPECIFIED DEVICE FOR OUTPUT
ODNUMB,	0			/OUTPUT DEVICE NUMBER

/	PARITY VARIABLES.						/014 CJL

/MARK,	0200			/SET BIT [8] FOR COMMAND INPUTS 	/A013
/PARITY,0			/PARITY MASK (0=SPACE, 200=MARK)	/AM013

/	INTERNAL FILE MODE FLAG.					/019 CJL

FILMODE,FMODE			/ASCII=0177, BINARY=4377		/019 CJL

/	UPPER-CASE ONLY FLAG.						/023 CJL

UPONLY,	LOWER			/0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL

/	<^C> DISPATCH ADDRESS.						/023 CJL

UCADDRE,SBOOT			/<^C> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL

/	<^P> DISPATCH ADDRESS.						/023 CJL

UPADDRE,CHKCLR			/<^P> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL

/	ESCAPE CHARACTER FOR CONNECT MODE.				/025 CJL

ESCHAR,	ESCAPE			/ESCAPE CHARACTER FOR CONNECT MODE	/025 CJL

/	FLOW CONTROL FLAG.						/026 CJL

FLOWFLA,-FLOW			/0=NO FLOW CONTROL, 7777=FLOW CONTROL	/049 CJL
				/VIA <^S>/<^Q>

/	KEYBOARD INPUT ERROR FLAG.					/026 CJL

KEYERRO,.-.			/0=NO ERROR, NON-ZERO=BAD CHARACTER	/026 CJL
				/OR BUFFER OVERRUN
/	REMOTE LINE INPUT ERROR FLAG.					/026 CJL

RINERRO,.-.			/0=NO ERROR, NON-ZERO=BAD CHARACTER	/026 CJL
				/OR BUFFER OVERRUN

/	REMOTE LINE OUTPUT FLOW CONTROL WAIT FLAG.			/026 CJL

REMWAIT,.-.			/0=DON'T WAIT, 4000=WAIT FOR <^Q>	/026 CJL

/	REMOTE INPUT WAIT FLAG.						/026 CJL

/	FLAG STATES:

/	VALUE			ACTION

/	0000			BUFFER IS LESS THAN  3/4  FULL.   INPUT FREELY ALLOWED
/				WITHOUT FLOW CONTROL RESTRICTIONS.   IF BUFFER BECOMES
/				3/4 FULL AND FLOW CONTROL IS  IN  EFFECT  THEN  CHANGE
/				STATE TO 0001.

/	0001			BUFFER IS NOW 3/4 FULL.  OUTPUT  <^S>  TO  REMOTE  AND
/				THEN CHANGE STATE TO 4000.

/	4000			WAITING FOR BUFFER TO EMPTY TO LESS THAN 1/4 FULL.  IF
/				FLOW  CONTROL  IS BEING OBEYED, THEN BUFFER SHOULD NOW
/				BE EMPTYING.

/	7777			BUFFER  IS  NOW  LESS  THAN 1/4 FULL.  OUTPUT <^Q>  TO
/				REMOTE AND THEN CHANGE STATE TO 0000.

RINWAIT,.-.			/REMOTE INPUT WAIT FLAG			/026 CJL

/	REMOTE LINE OUTPUT BUFFER POINTERS.				/026 CJL

REMINSE,.-.			/REMOTE OUTPUT INSERTION POINTER	/026 CJL
REMREMO,.-.			/REMOTE OUTPUT REMOVAL POINTER		/026 CJL
/	POINTER FOR THE PACKET INPUT AND OUTPUT ROUTINES

	SPACK=	JMS I	.	/SEND A PACKET TO REMOTE
		SPACK0		/PUT IN A POINTER

	FPACK=	JMS I	.	/FORMAT PACKET
		FPACK0		/PUT IN THE POINTER

	RPACK=	JMS I	.	/RECEIVE A PACKET FROM REMOTE
		ILINK		/PUT IN A POINTER

/	POINTERS FOR OUTPUT ROUTINES

	PRI8B=	JMS I	.	/PRINT 8 BIT STRING ON TTY
		PRI8B0		/PUT IN THE POINTER

	REM8B=	JMS I	.	/SEND 8 BIT STRING DOWN REMOTE LINE
		REM8B0		/PUT IN THE POINTER

/	MISC.

	PACK6=	JMS I	.	/DEFINE CALL TO ROUTINE
		PACK60		/POINTER TO ROUTINE

	GET6=	JMS I	.	/DEFINE THE INSTRUCTION
		GET60		/PUT IN THE POINTER

	MOVE=	JMS I	.	/DEFINE CALL TO MOVE ROUTINE
		MOVE0		/POINTER

	CLEAR=	JMS I	.	/DEFINE CALL FOR "CLEAR" ROUTINE
		CLEAR0		/POINTER
	PAGE			/START ON NEW PAGE			/A014 CJL

/	KERMIT-12 PROGRAM STARTS HERE.					/A014 CJL

CLOOP,	JMP I	(INITIALIZE)	/**** INITIALIZED **** CLA CLL		/024 CJL
	JMS I	[CRESET]	/RESET CONSOLE ROUTINE STUFF
	DCA	ABFLAG		/CLEAR ABORT FLAG			/044 CJL
	DCA	REMWAIT		/CLEAR REMOTE FLOW CONTROL WAIT		/049 CJL
CLDMZAP,JMS	DMINIT		/INITIALIZE DECMATE PORT		/048 CJL

/	THE  PREVIOUS  INSTRUCTION  IS  FOR  DECMATE  OPERATION  ONLY.    THE  DEFAULT
/	INSTRUCTION IS FOR KL8 INTERFACES ONLY.

	*CLDMZAP		/OVERLAY DECMATE CODE			/048 CJL

CLDMZAP,NOP			/DON'T INITIALIZE DECMATE PORT		/048 CJL
	TAD	RATE		/GET BAUD RATE
SETBAUD,MSB			/SET REMOTE BAUD RATE			/050 CJL

/	THE PREVIOUS INSTRUCTION IS FOR DECMATE II OPERATION ONLY.	/050 CJL

	*SETBAUD		/OVERLAY DECMATE II CODE		/050 CJL

SETBAUD,NOP			/NOT APPLICABLE ON DECMATE I		/050 CJL

/	THE  PREVIOUS  INSTRUCTION  IS  FOR DECMATE I OPERATION  ONLY.    THE  DEFAULT
/	INSTRUCTION IS FOR KL8 INTERFACES ONLY.

	*SETBAUD		/OVERLAY DECMATE I CODE			/050 CJL

SETBAUD,RSBIOT			/SET REMOTE BAUD RATE			/050 CJL
	JMS I	[SCRIBE]	/DO A					/025 CJL
	CRLF			/<CR>, <LF>				/025 CJL
	JMS I	[SCRIBE]	/GIVE THEM THE				/025 CJL
	PRMTMSG			/PROMPT MESSAGE				/025 CJL
	JMS I	(LININP)	/GET INPUT LINE FROM USER
	TAD	(CMDTBL)	/GET ADDRESS OF PARSE TABLE		/M014 CJL
	DCA	PTABLE		/STORE FOR PARSER
	TAD	(LINBUF)	/GET INPUT LINE BUFFER ADDRESS		/M014 CJL

CLOOP1,	JMS I	(KEYPRS)	/PARSE OFF A KEYWORD
	JMP	CLOOP9		/NO MATCH ON KEYWORD
	JMP	CLOOP		/END OF LINE DETECTED
	DCA	LPTR		/STORE POINTER TO NEXT POS ON LINE
	JMS I	KEYDSP		/DISPATCH TO SERVICE
	JMP	CLOOP7		/ERROR RETURN FROM SERVICE DISPATCH
	TAD	LPTR		/RE-GET COMMAND LINE POINTER
	JMP	CLOOP1		/CONTINUE LINE PARSE

CLOOP7,	SNA			/SKIP IF A RETURNING MESSAGE PASSED	/029 CJL
	JMP	CLOOP		/JUST GO BACK TO COMMAND LOOP		/029 CJL
	DCA	RETARG		/STORE IN-LINE				/029 CJL
	JMS I	[SCRIBE]	/CALL MESSAGE PRINT ROUTINE
RETARG,	.-.			/WILL BE PASSED MESSAGE ADDRESS
	JMP	CLOOP		/KEEP GOING
CLOOP9,	JMS I	[SCRIBE]	/COMPLAIN OF				/025 CJL
	CMERMSG			/BAD COMMAND				/025 CJL
	JMP	CLOOP		/GO AGAIN

/	ROUTINE TO FORMAT A PACKET OF DATA
/	CALL:	FPACK
/		DATA ADDRESS (DATA MUST ALREADY BE CONTROL/QUOTED AND MUST
/			      NOT BE LONGER THAN THE LARGEST PACKET)
/		PACKET TYPE

FPACK0,	0
	CLA CLL			/INSURE CLEAR AC
	TAD I	FPACK0		/GET THE DATA ADDRESS
	DCA	FP1		/STORE IN SOURCE POINTER
	ISZ	FPACK0		/BUMP ARGUMENT POINTER
	TAD I	FPACK0		/NOW GET TYPE
	DCA I	(RSTYP)		/STORE
	ISZ	FPACK0		/BUMP ARGUMENT POINTER
	TAD	(RSDTA		/GET ADDRESS OF DATA BUFFER
	DCA	FP2		/STORE IN DESTINATION POINTER

 	TAD	(40+3		/SET FOR LENGTH COUNTER
	DCA I	(RSLEN)		/STORE IN PACKET
	DCA	FP3		/INIT CHECKSUM
	TAD	CURSEQ		/GET CURRENT SEQ NUMBER
	AND	[77]		/MODULO 64				/014/016 CJL
	TAD	[40]		/TAKE CHAR(SEQUENCE NUMBER)		/014/016 CJL
	DCA I	(RSSEQ)		/PUT INTO PACKET
FPACK2,	TAD I	FP1		/GET A CHAR FROM SOURCE
	SPA			/SKIP IF NOT END
	JMP	FPACK3		/END
	TAD	FP3		/COMBINE WITH CHECKSUM
	DCA	FP3		/AND RETURN
	TAD I	FP1		/GET CHAR BACK AGAIN
	DCA I	FP2		/NOW PUT INTO DESTINATION
	ISZ I	(RSLEN)		/BUMP THE LENGTH
	ISZ	FP1		/BUMP THE SOURCE POINTER
	ISZ	FP2		/BUMP THE DESTINATION POINTER
	JMP	FPACK2		/LOOP
FPACK3,	CLA CLL			/CLEAR THE AC
	TAD	FP3		/GET CALCULATED CHECKSUM
	TAD I	(RSLEN)		/INCLUDE THE LENGTH
	TAD I	(RSSEQ)		/AND THE SEQUENCE
	TAD I	(RSTYP)		/AND THE TYPE
	JMS I	[CKSUM]		/GET IT CORRECT
	DCA I	FP2		/STORE WITH PACKET
	ISZ	FP2		/BUMP PACKET POINTER
	TAD	REOL		/GET ANY END OF LINE TO INCLUDE
	TAD	[-40]		/MAKE IT A REAL CHARACTER		/014/016 CJL
	SNA			/SKIP IF EOL CHAR REQUIRED
	JMP	FPACK4		/NO EOL CHAR
	DCA I	FP2		/STORE EOL CHAR WITH PACKET
	ISZ	FP2		/BUMP POINTER
FPACK4,	NL7777			/SET -1					/032 CJL
	DCA I	FP2		/PACKET NOW COMPLETE
	TAD	RETRY		/SET UP RE-TRY COUNTER
	DCA	RTRYC
	ISZ	CURSEQ		/BUMP SEQUENCE NUMBER FOR NEXT TIME
	NOP			/PROTECT ISZ
	JMP I	FPACK0		/RETURN

FP1,	0			/POINTER TO SOURCE DATA
FP2,	0			/POINTER TO PACKET BUFFER
FP3,	0			/RUNNING CHECKSUM

/	DECMATE INITIALIZE ROUTINE.				/048 CJL

DMINIT,	.-.			/DECMATE PORT INITIALIZE ROUTINE/048 CJL
DMI01,	TAD	DM234/(234)	/GET SCD ENABLE VALUE		/050 CJL
DMI02,	WCON0			/WRITE CONTROL REGISTER 0 (1)	/050 CJL
DMI03,	NL0000			/INDICATE PORT 0 (1)		/050 CJL
DMI04,	RACD			/RESET THE ACTIVE PORT		/050 CJL
DMI05,	ISZ	DMWASTE		/WASTE				/050 CJL
DMI06,	JMP	DMI05		/SOME TIME			/050 CJL
DMI07,	ISZ	DMWASTE		/WASTE				/050 CJL
DMI08,	JMP	DMI07		/SOME TIME			/050 CJL
DMI09,	RTFL0			/SET PORT 0 (1) OUTPUT FLAG	/050 CJL
DMI10,	TAD	DM2516/(2516)	/SETUP FOR 8 BITS, NO PARITY	/050 CJL
DMI11,	JMS	DMSEND		/SEND TO MODE REGISTER 1	/050 CJL
DMI12,	TAD	RATE		/GET BAUD RATE			/050 CJL
DMI13,	TAD	DM2460/(2460)	/ADD ON CLOCK ENABLE VALUES	/050 CJL
DMI14,	JMS	DMSEND		/SEND TO MODE REGISTER 2	/050 CJL
DMI15,	TAD	DM3425/(3425)	/GET ENABLE AND RESET VALUE	/050 CJL
DMI16,	JMS	DMSEND		/SEND TO COMMAND REGISTER	/050 CJL
DMI17,	RKRB0			/DO A DUMMY READ ON PORT 0 (1)	/050 CJL
/	THE  PREVIOUS  INSTRUCTIONS  ARE  FOR  DECMATE	I OPERATION ONLY.  THE DEFAULT
/	INSTRUCTIONS ARE FOR DECMATE II, ETC.  INTERFACES ONLY.

	*DMI01			/OVERLAY DECMATE I CODE		/050 CJL

DMI01,	ISZ	DMWASTE		/WASTE				/048 CJL
DMI02,	JMP	DMI01		/SOME TIME			/048 CJL
DMI03,	ISZ	DMWASTE		/WASTE				/048 CJL
DMI04,	JMP	DMI03		/SOME TIME			/048 CJL
DMI05,	ISF			/SKIP ON AND CLEAR PORT FLAG	/048 CJL
DM50,	50/NOP			/JUST IN CASE			/048 CJL
DMI07,	IRB			/READ THE PORT BUFFER		/048 CJL
DMI08,	CLA			/CLEAN UP			/048 CJL
DMI09,	TAD	DM50/(50)	/GET OUTPUT INTERRUPT VALUE	/048 CJL
DMI10,	MPSCC			/CLEAR OUTPUT INTERRUPT		/048 CJL
DMI11,	TAD	(60-50)		/GET ERROR RESET VALUE		/048 CJL
DMI12,	MPSCC			/CLEAR OVERRUN ERRORS		/048 CJL
DMI13,	TAD	(70-60)		/SET END OF INTERRUPT VALUE	/048 CJL
DMI14,	MPSCC			/CLEAR THE INTERRUPT		/048 CJL
DMI15,	DCA	OUTFLAG		/INDICATE OUTPUT IS AVAILABLE	/048 CJL
DMI16,	DCA	INFLAG		/CLEAR INPUT AVAILABLE FLAG	/048 CJL
DMI17,	JMP I	DMINIT		/RETURN				/048 CJL

/	DECMATE I INITIALIZE CODE CONTINUES HERE.		/050 CJL

DMISET,	RTFL0			/SET PORT 0 (1) OUTPUT FLAG	/050 CJL
	CLA			/CLEAN UP			/050 CJL
	JMP I	DMINIT		/RETURN				/050 CJL

DMSEND,	.-.			/DECMATE I SEND ROUTINE		/050 CJL
DMISKP,	RTSF0			/SKIP ON PORT 0 (1) OUTPUT FLAG	/050 CJL
	JMP	DMISKP		/WAIT FOR IT			/050 CJL
DMIOUT,	RTLS0			/SEND TO PORT 0 (1) REGISTER	/050 CJL
	CLA			/CLEAN UP			/050 CJL
	JMP I	DMSEND		/RETURN				/050 CJL

DMWASTE,.-.			/TIMER TEMPORARY		/050 CJL
DM234,	234			/CONSTANT 0234			/050 CJL
DM2460,	2460			/CONSTANT 2460			/050 CJL
DM2516,	2516			/CONSTANT 2516			/050 CJL
DM3425,	3425			/CONSTANT 3425			/050 CJL

	PAGE
/	ROUTINE TO SEND THE FORMATTED PACKET			/027 CJL
/	ARGUMENTS:  CALL+1 NON-ZERO = AWAIT RESPONSE
/			       ZERO = DO NOT AWAIT RESPONSE
/		    CALL + 2 DISPATCH TABLE-2			/027 CJL

SPACK0,	0
	REM8B;	RSBUF		/SEND PACKET JUST COMPLETED
	TAD I	SPACK0		/DO WE GET A RESPONSE?
	ISZ	SPACK0		/BUMP POINTER PAST ARGUMENT
	SNA CLA			/SKIP IF YES
	JMP I	SPACK0		/ALL DONE HERE
	RPACK			/GET PACKET BACK FROM REMOTE
	TAD I	SPACK0		/DID WE WANT A DISPATCH?
	ISZ	SPACK0		/BUMP PAST ARGUMENT
	SNA			/SKIP IF YES
	JMP I	SPACK0		/EXIT IF NO
	DCA	SPACARG		/STORE IN-LINE				/031 CJL
	JMS	DISPATCH	/CALL DISPATCH ROUTINE			/031 CJL
SPACARG,.-.			/WILL BE DISPATCH TABLE-2		/031 CJL
	JMP I	SPACK0		/NOT FOUND, GOTTA RETURN

/	CONSOLE RESET ROUTINE.						/024 CJL

CRESET,	.-.			/CONSOLE RESET ROUTINE
	CLA CLL			/CLEAN UP
	DCA	ECHOSW		/ENABLE OUTPUT ECHO
	TAD	(UPCPRT)	/ALLOW THEM TO
	DCA	UCADDRESS	/RESTART VIA <^C>
	TAD	[CLOOP]		/ALLOW THEM TO
	DCA	UPADDRESS	/RESTART VIA <^P>
	JMP I	CRESET		/RETURN

/	ALTERNATE CONSOLE RESET ROUTINE.				/025 CJL

CREST2,	.-.			/ALTERNATE CONSOLE RESET ROUTINE
	JMS	CRESET		/CLEAR AC AND ENABLE OUTPUT ECHO
	TAD	(KCCZAP)	/RENDER <^C>
	DCA	UCADDRESS	/TOTALLY HARMLESS
	TAD	(CHKCLR)	/MAKE <^P> PRINT "^P"
	DCA	UPADDRESS	/AND THEN GO AWAY
	JMP I	CREST2		/RETURN
/	ROUTINE TO CLEAR WORDS OF MEMORY
/	ENTER WITH:	AC = MINUS NUMBER OF WORDS TO CLEAR
/		    	MQ = ADDRESS OF WHERE TO START THE CLEAR

CLEAR0,	0
	DCA	CLEAR5		/STORE COUNT OF WORDS
	TAD	MQ		/GET ADDRESS TO CLEAR			/032 CJL
	DCA	CLEAR6		/STORE IN POINTER
	DCA I	CLEAR6		/ZERO A WORD
	ISZ	CLEAR6		/BUMP POINTER
	ISZ	CLEAR5		/BUMP COUNTER
	JMP	.-3		/LOOP
	JMP I	CLEAR0		/DONE

CLEAR5,	0			/TEMP FOR "CLEAR" ROUTINE
CLEAR6,	0			/TEMP FOR "CLEAR" ROUTINE

/	ROUTINE TO DISPATCH TO ROUTINE BASED ON VALUE OF "RRTYP".	/027 CJL

/	CALLING SEQUENCE:

/	CLA			/AC MUST BE CLEAR
/	JMS	DISPATCH	/CALL ROUTINE
/	ADDRESS-2		/DISPATCH TABLE ADDRESS-2
/	NO MATCH RETURN		/RETURNS HERE WITH CLEAR AC IF NO MATCH

/	CALL  WILL DISPATCH TO THE CORRESPONDING ROUTINE ON A MATCH IN  THE  SPECIFIED
/	TABLE (WHICH ENDS WITH ZERO) WITH A CLEAR AC.

DISPATC,.-.			/MATCH "RRTYP" AND DISPATCH ROUTINE
	CLA			/JUST IN CASE				/031 CJL
	TAD I	DISPATCH	/GET PASSED ARGUMENT
	ISZ	DISPATCH	/BUMP PAST THE ARGUMENT
	DCA	DISPA2		/SAVE PASSED ARGUMENT IN-LINE
	TAD I	(RRTYP)		/GET VALUE OF "RRTYP"
	CIA			/INVERT FOR TESTING
	JMS I	[SRCHTABLE]	/CALL TABLE SEARCH ROUTINE
DISPA2,	.-.			/WILL BE TABLE ADDRESS-2
	SNA CLA			/SKIP IF MATCH FOUND
	JMP I	DISPATCH	/RETURN ON NO MATCH
	JMP I	TABLEJUMP	/DISPATCH TO MATCHING ADDRESS
/	ROUTINE TO PUT CHARS INTO A BUFFER TO GET READY TO FORMAT A PACKET.
/	ENTER WITH CHAR IN THE AC; IF THE CHAR NEEDS CONTROL QUOTING, IT WILL BE ADDED
/	EXIT + 2 IF EVERYTHING IS OK
/	EXIT + 1 IF BUFFER IS FULL

OPBUF,	0			/PUT CHARACTERS INTO BUFFER FOR PACKET ROUTINE
	JMS I	(OPRE)		/CHECK FOR PREFIX
	JMP	OPBUF1		/NO PREFIX
	DCA	OP1		/SAVE CONVERTED CHAR
	TAD	RQCTL		/GET QUOTE CHAR TO USE
	DCA I	OP2		/PUT RETURNED PREFIX INTO BUFFER
	ISZ	OP2		/BUMP POINTER
	TAD	OP1		/GET BACK CONVERTED CHAR
OPBUF1,	DCA I	OP2		/PUT INTO BUFFER
	ISZ	OP2		/BUMP POINTER
	NL7777			/SET -1					/032 CJL
	DCA I	OP2		/ALWAYS TERMINATE BUFFER
	TAD	RMAXL		/GET MAX BUFFER LENGTH
	TAD	(-40+HOLDBF-4	/
	CIA
	TAD	OP2		/COMPARE WITH WHAT WE HAVE
	SPA CLA			/SKIP IF NO ROOM
	JMP	OPBUF2		/HAVE ROOM
	JMS	INIOPB		/RESET BUFFER
	JMP I	OPBUF		/TAKE RETURN + 1

OPBUF2,	ISZ	OPBUF		/BUMP RETURN FOR BUFFER NOT FULL
	JMP I	OPBUF		/DONE

OP1,	0			/TEMP LOCATION
OP2,	HOLDBF			/POINTER FOR HOLD BUFFER

/	ROUTINE TO RE-SET THE HOLD BUFFER.

INIOPB,	0
	TAD	(HOLDBF		/RE-SET BUFFER POINTER
	DCA	OP2
	JMP I	INIOPB

/	ROUTINE TO CALCULATE A 1 BYTE CHECKSUM.

CKSUM,	0
	DCA	CKSUM1		/STORE TEMP
	TAD	CKSUM1		/GET BACK
	RTR;RTR;RTR		/GET TWO HIGHEST INTO TWO LOWEST	/032 CJL
	AND	(3		/KEEP ONLY BITS 0-1
	TAD	CKSUM1		/GET ORIGINAL
	AND	[77]		/KEEP ONLY BITS 0-5			/016 CJL
	TAD	[40]		/MAKE A CHAR(CHECKSUM)
	JMP I	CKSUM		/DONE, RETURN IN AC

CKSUM1,	0			/TEMP FOR "CKSUM"
	PAGE
/	ROUTINE TO INPUT CHARS FROM REMOTE UNTIL A "SOH" CHAR IS FOUND.

GETSOH,	0
	JMS	COMIN		/GET A CHARACTER FROM THE REMOTE LINE	/046 CJL
	JMP I	GETSOH		/TIME-OUT
	AND	[177]		/IGNORE PARITY BIT			/034 CJL
	TAD	(-CNTRLA)	/COMPARE WITH "SOH"			/034 CJL
	SZA CLA			/SKIP IF SAME
	JMP	GETSOH+1	/LOOP TILL WE GET ONE
	ISZ	GETSOH		/BUMP FOR GOOD RETURN
	JMP I	GETSOH		/GOT ONE, DONE


/	ROUTINE TO GET A CHAR FROM THE REMOTE LINE AND UPDATE CHECKSUM.

GETIR,	0
	JMS	COMIN		/GET A CHARACTER FROM THE REMOTE LINE	/046 CJL
	JMP I	GETIR		/TIME-OUT RETURN
	DCA	GETIR1		/STORE TEMP
	TAD	GETIR1		/GET CHAR BACK
	TAD I	(ILINK9)	/ADD CHECKSUM
	DCA I	(ILINK9)	/RETURN UPDATED CHECKSUM
	TAD	GETIR1		/RE-GET CURRENT INPUT CHAR
	TAD	[-15]		/CHECK FOR A RETURN
	SNA CLA			/SKIP IF NOT A RETURN
	JMP I	GETIR		/WAS A RETURN, TAKE EXIT + 1
	TAD	GETIR1		/RE-GET CHAR FOR RETURN
	ISZ	GETIR		/BUMP FOR GOOD RETURN
	JMP I	GETIR		/AND RETURN IN THE AC

GETIR1,	0			/TEMP LOCAL TO "GETIR"
/	REMOTE COMMUNICATIONS ROUTINES FOR NON-CONNECT USAGE.		/046 CJL

/	REMOTE INPUT ROUTINE.						/046 CJL

COMIN,	.-.			/REMOTE INPUT ROUTINE			/046 CJL
	CLA			/CLEAN UP				/046 CJL
	TAD	[-15]		/SETUP THE				/049 CJL
	DCA	TIMEOUT		/TIME-OUT FACTOR			/046 CJL
INLUP,	TAD	INFLAG		/IS INPUT AVAILABLE?			/046 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE  II USE ONLY.  THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*INLUP			/OVERLAY DECMATE II CODE		/049 CJL

INLUP,	SKP			/WE'RE NOT A DECMATE II			/049 CJL
	SNA CLA			/SKIP IF INPUT AVAILABLE (ON DECMATE II)/049 CJL
INSKIP,	JMP	NOTYET		/JUMP IF NOT				/049 CJL
INLUP1,	DCA	INFLAG		/CLEAR INPUT AVAILABILITY FLAG		/049 CJL
INREAD,	IRB			/GET THE CHARACTER			/049 CJL

/	THE ABOVE INSTRUCTIONS ARE FOR DECMATE II  USE ONLY.  THE DEFAULT INSTRUCTIONS
/	ARE FOR KL8 INTERFACES.

	*INSKIP			/OVERLAY DECMATE II CODE		/049 CJL

INSKIP,	RKSFIOT			/INPUT FLAG UP?				/049 CJL
INLUP1,	JMP	NOTYET		/NO, CHECK FOR ABORT, ETC.		/049 CJL
INREAD,	RKRBIOT			/YES, READ IN THE CHARACTER		/049 CJL
	AND	[177]		/JUST SEVEN-BIT				/046 CJL
	DCA	RCHAR		/SAVE THE CHARACTER			/046 CJL
	TAD	RCHAR		/GET IT BACK				/046 CJL
	ISZ	COMIN		/BUMP TO GOOD RETURN			/046 CJL
	JMP I	COMIN		/RETURN					/046 CJL

/	COMES HERE IF INPUT NOT AVAILABLE.

NOTYET,	JMS I	(CTLCTST)	/CHECK FOR <^C>, ETC.			/044 CJL
	TAD	[-CNTRLZ]	/COMPARE POSSIBLE CHARACTER TO <^Z>	/044 CJL
	SZA			/SKIP IF IT ALREADY MATCHES		/044 CJL
	TAD	[-CNTRLX+CNTRLZ]/ELSE COMPARE TO <^X>			/044 CJL
	SNA CLA			/SKIP IF NEITHER ABORT CHARACTER	/049 CJL
	ISZ	ABFLAG		/SET ABORT FLAG				/049 CJL
	SKP			/SKIP IF NOT TOO MANY TIMES		/049 CJL
	JMP	.-2		/ENSURE FLAG SETTING			/049 CJL
INSTATU,JMS	UPSTATUS	/UPDATE THE PORT STATUS			/049 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE  II USE ONLY.  THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*INSTATUS		/OVERLAY DECMATE II CODE		/049 CJL

INSTATU,NOP			/WE'RE NOT A DECMATE II			/049 CJL
	ISZ	WASTIME		/WASTE SOME TIME			/046 CJL
	JMP	INLUP		/KEEP TRYING				/046 CJL
	ISZ	TIMEOUT		/WAITING TOO LONG?			/046 CJL
	JMP	INLUP		/NO, KEEP TRYING			/046 CJL
	JMP I	COMIN		/YES, TAKE ERROR RETURN			/046 CJL

/	FLOW-CONTROL STATUS ROUTINE.					/049 CJL

GETFLOW,.-.			/GET FLOW-CONTROL STATUS
GETFL1,	JMS	UPSTATUS	/UPDATE THE CURRENT STATUS

/	THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY.   THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*GETFL1			/OVERLAY DECMATE II CODE

GETFL1,	NOP			/WE'RE NOT A DECMATE II
	JMS I	(RINGET)	/GET REMOTE CHARACTER (IF ANY)
	CLA			/THROW IT AWAY
	TAD	REMWAIT		/GET REMOTE FLOW STATUS
	JMP I	GETFLOW		/RETURN

/	REMOTE OUTPUT ROUTINE.						/046 CJL

COMOUT,	.-.			/REMOTE OUTPUT ROUTINE			/046 CJL
	DCA	OUTEMP		/SAVE PASSED VALUE			/046 CJL
CMRESET,TAD	[-15]		/SETUP THE				/049 CJL
	DCA	OTIME		/TIME-OUT COUNTER			/049 CJL
COMWAIT,JMS	GETFLOW		/GET REMOTE WAIT STATUS			/049 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
/	KL8 INTERFACES.

	*COMWAIT		/OVERLAY DECMATE CODE			/049 CJL

COMWAIT,NL7777			/SETUP FOR FLOW CONTROL FLAG LOAD	/049 CJL
	AND	FLOWFLAG	/SHOULD WE WAIT FOR REMOTE FLOW CONTROL?/049 CJL
	SNA CLA			/SKIP IF SO				/049 CJL
	JMP	NOWAIT		/JUMP IF NOT				/049 CJL
FLOWAIT,JMS	GETFLOW		/GET REMOTE WAIT STATUS			/049 CJL
	SZA CLA			/SKIP IF NOT WAITING			/049 CJL
	JMP	FLOWAIT		/JUMP IF STILL WAITING			/049 CJL
NOWAIT,	TAD	OUTFLAG		/CHECK IF OUTPUT IS AVAILABLE		/049 CJL
CMOUT1,	SNA CLA			/SKIP IF SO				/049 CJL
CMOUT2,	JMP	OWAIT		/JUMP IF NOT				/049 CJL
DM1AND,	DCA	OUTFLAG		/CLEAR OUTPUT AVAILABILITY FLAG		/049 CJL
CMOUT3,	TAD	OUTEMP		/GET THE PASSED VALUE			/049 CJL
CMOUT4,	OLS			/OUTPUT IT				/049 CJL

/	THE ABOVE INSTRUCTIONS ARE FOR DECMATE II  USE ONLY.  THE DEFAULT INSTRUCTIONS
/	ARE FOR KL8 INTERFACES.

	*NOWAIT			/OVERLAY DECMATE II CODE		/049 CJL

NOWAIT,	RTSFIOT			/OUTPUT FLAG UP?			/049 CJL
CMOUT1,	JMP	OWAIT		/NO, WAIT FOR IT THERE			/049 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE I USE  ONLY.   THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*CMOUT1			/OVERLAY DECMATE I CODE			/049 CJL

CMOUT1,	JMP	COMWAIT		/NO, WAIT FOR IT			/049 CJL
CMOUT2,	TAD	OUTEMP		/YES, GET PASSED VALUE			/049 CJL
DM1AND,	AND	[377]		/ENSURE EIGHT BITS (FOR DECMATE I)	/049 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.    THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*DM1AND			/OVERLAY DECMATE I CODE			/049 CJL

DM1AND,	SKP			/WE'RE NOT A DECMATE I			/049 CJL
CMOUT3,	TAD	[400]		/FORCE OUTPUT WRITE FOR DECMATE I	/049 CJL
CMOUT4,	RTLSIOT			/OUTPUT THE CHARACTER			/049 CJL
	CLA			/CLEAN UP				/049 CJL
	JMP I	COMOUT		/RETURN					/049 CJL

/	COMES HERE IF OUTPUT NOT READY.					/049 CJL

OWAIT,	ISZ	OWASTE		/WASTE SOME TIME			/049 CJL
	JMP	COMWAIT		/KEEP TRYING				/049 CJL
	ISZ	OTIME		/WAITING TOO LONG?			/049 CJL
	JMP	COMWAIT		/NO, KEEP TRYING			/049 CJL
	JMS I	(DMINIT)	/YES, RESET EVERYTHING			/049 CJL
	JMP	CMRESET		/TRY, TRY AGAIN				/049 CJL
/	DECMATE II, ETC. STATUS UPDATE ROUTINE.				/046 CJL

UPSTATU,.-.			/UPDATE THE STATUS ROUTINE		/046 CJL
	ISF			/COMMUNICATIONS PORT FLAG UP?		/046 CJL
	JMP I	UPSTATUS	/NO, RETURN				/046 CJL
	NL4000			/SETUP READ OF REGISTER ZERO		/046 CJL
	MPSCC			/TELL THE MPSCC CHIP			/046 CJL
	CLA			/CLEAN UP				/046 CJL
	MPSCC			/READ REGISTER ZERO NOW			/046 CJL
	AND	(5)		/JUST INPUT AND OUTPUT BITS		/046 CJL
	CLL RAR			/MOVE INPUT TO LINK			/046 CJL
	SNA CLA			/SKIP IF OUTPUT INTERRUPT		/046 CJL
	JMP	INCHK		/JUMP IF NOT				/046 CJL
	TAD	(050)		/GET OUTPUT CLEAR VALUE			/046 CJL
	MPSCC			/CLEAR THE OUTPUT INTERRUPT		/046 CJL
	DCA	OUTFLAG		/INDICATE OUTPUT AVAILABLE NOW		/046 CJL
INCHK,	CLA RAL			/GET RECEIVE STATUS			/046 CJL
	SZA			/SKIP IF INPUT NOT AVAILABLE RIGHT NOW	/046 CJL
	DCA	INFLAG		/INDICATE NEW INPUT STATUS		/046 CJL
	CLA			/CLEAN UP EITHER WAY			/046 CJL
	TAD	(070)		/GET END OF INTERRUPT VALUE		/046 CJL
	MPSCC			/CLEAR THE INTERRUPT			/046 CJL
	CLA			/CLEAN UP				/046 CJL
	JMP I	UPSTATUS	/RETURN					/046 CJL

	AND377=	AND	[377]	/INSTRUCTION CONSTANT			/049 CJL
	OUTEMP=	COMIN		/OUTPUT ROUTINE TEMPORARY		/049 CJL
	TIMEOUT=GETFLOW		/TIME-OUT TEMPORARY			/049 CJL
	WASTIME=COMOUT		/TIME-OUT TEMPORARY			/049 CJL

OTIME,	.-.			/TIME-OUT TEMPORARY			/049 CJL
OWASTE,	.-.			/TIME-OUT TEMPORARY			/049 CJL

	PAGE

/	HOLD BUFFER FOR CHAR OUTPUT

	DECIMAL

HOLDBF,	ZBLOCK	92

	OCTAL
/	ROUTINE TO CHECK FOR CONTROL PREFIX.
/	ENTER WITH CHAR TO CHECK IN THE AC.
/	EXIT + 1 WITH CHAR IN THE AC IF NO PREFIX QUOTING.
/	EXIT + 2 WITH PROPER CHAR IN THE AC AND QUOTING IS REQUIRED.

OPRE,	0			/CHECK FOR CONTROL PREFIX ROUTINE
	DCA	PRETEMP		/SAVE THE CHARACTER			/032 CJL
	TAD	QFLAG		/CHECK FOR IN CTRL QUOTE MODE
	SZA CLA			/SKIP IF YES
	JMP	OPRE1		/NO QUOTE PREFIX
	TAD	PRETEMP		/GET THE CHARACTER			/032 CJL
	AND	[7740]		/QUICK CHECK FOR <40			/014/016 CJL
	SNA CLA			/SKIP IF NOT CONTROL
	JMP	OPRE2		/PREFIX QUOTE
	TAD	PRETEMP		/GET THE CHARACTER			/032 CJL
	TAD	(-177		/CHECK FOR "DELETE"
	SNA CLA			/SKIP IF NOT
	JMP	OPRE2		/PREFIX QUOTE
	TAD	PRETEMP		/GET THE CHARACTER			/032 CJL
	CIA			/NEGATE FOR COMPARE
	TAD	RQCTL		/SEE IF SAME AS QUOTE CHAR
	SZA CLA			/SKIP IF PREFIX QUOTE
	JMP	OPRE1		/NO PREFIX QUOTE
	TAD	RQCTL		/PREFIX WITH PREFIX
	JMP	OPRE3		/PREFIX WITH THE PREFIX

OPRE1,	TAD	PRETEMP		/GET THE CHARACTER			/032 CJL
	JMP I	OPRE		/DONE

OPRE2,	TAD	PRETEMP		/GET THE CHARACTER			/032 CJL
	TAD	[100]		/MAKE IT PRINTABLE			/016 CJL
	AND	[177]		/IN CASE IT WAS 177			/014/016 CJL

OPRE3,	ISZ	OPRE		/BUMP FOR PREFIX RETURN
	JMP I	OPRE		/DONE

PRETEMP,.-.			/PREFIX TEMPORARY			/032 CJL

	PAGE								/014 CJL
/	ROUTINE TO SCAN A TEXT LINE FOR KEYWORD DELIMITERS.

/	THIS  ROUTINE EXPECTS THE AC TO POINT TO A TEXT LINE TO  SCAN  AND  FINDS  THE
/	FIRST NON-SPACE, NON-END OF LINE CHAR IN THE LINE AND SETS "SCAN1" TO POINT TO
/	IT.  NEXT WE FIND THE LAST CHAR IN THE LINE THAT IS A  NON-SPACE,  NON-END  OF
/	LINE  AND  STORE  A  POINTER  TO  IT  IN "SCAN2".  KEYWORDS ARE DELIMITED BY A
/	BEGINNING OF  LINE  OR SPACE AT THE BEGINNING AND AN END OF LINE OR A SPACE AT
/	THE END.

/	ENTER:	AC = POINTER TO COMMAND LINE

/	EXIT: (SUCCESS)	SCAN1 = POINTER TO FIRST CHAR OF KEYWORD.
/			SCAN2 = POINTER TO LAST CHAR OF KEYWORD.
/			RETURN = RETURN + 2 (NO WORDS LEFT IN LINE).

/	EXIT: (FAIL)	RETURN = RETURN + 1.

SCNEL,	0			/SCAN ROUTINE
	JMS I	[NOSP]		/FIND FIRST NON-SPACE
	JMP I	SCNEL		/END OF LINE RETURN
	DCA	SCAN1		/RETURN SCAN LINE POINTER
	TAD	SCAN1		/RE-GET SCAN LINE POINTER
	JMS I	[SP]		/FIND FIRST SPACE OR EOL
	NOP			/RETURN HERE ON EOL
	TAD	(-1		/BACK UP TO PREVIOUS CHAR
	DCA	SCAN2		/SET END ELEMENT POINTER
	ISZ	SCNEL		/TAKE SUCCESS RETURN
	JMP I	SCNEL		/DONE


/	ROUTINE TO SCAN THRU A TEXT LINE LOOKING FOR THE NEXT SPACE.
/	ENTER ROUTINE WITH THE LINE POINTER IN THE AC.

/	EXIT:	RETURN + 2 WITH AC = POINTER TO SPACE.
/		RETURN + 1 WITH AC = POINTER TO END OF LINE.

SP,	0			/CHECK FOR A <SPACE> ROUTINE
	DCA	SCANTP		/USE A TEMP POINTER
	SKP			/SKIP INTO LOOP BELOW
SP1,	ISZ	SCANTP		/BUMP LINE POINTER
	TAD I	SCANTP		/GET A CHAR
	SPA			/SKIP IF NOT END OF LINE
	JMP	SP3		/GOT AN END OF LINE
	TAD	[-" !200]	/COMPARE WITH <SP>			/034 CJL
	SZA CLA			/SKIP IF IS A SPACE
	JMP	SP1		/LOOP TILL SPACE OR EOL
	ISZ	SP		/BUMP RETURN FOR SPACE FOUND

SP3,	CLA CLL			/INSURE A CLEAR AC
	TAD	SCANTP		/GET POINTER VALUE
	JMP I	SP		/RETURN IN AC
/	ROUTINE TO SCAN THRU A TEXT LINE FOR THE FIRST NON-SPACE.
/	ENTER ROUTINE WITH POINTER TO THE LINE IN THE AC.

/	EXIT:	RETURN + 2 WITH AC = POINTER TO NON-SPACE.
/		RETURN + 1 WITH AC = POINTER TO END OF LINE.

NOSP,	0			/FIND A NON-<SPACE> ROUTINE
	DCA	SCANTP		/USE A TEMP POINTER
	SKP			/SKIP INTO LOOP BELOW
NOSP1,	ISZ	SCANTP		/BUMP THE LINE POINTER
	TAD I	SCANTP		/GET A CHAR FROM THE LINE
	SPA			/SKIP IF NOT EOL
	JMP	NOSP3		/EXIT IF EOL
	TAD	[-" !200]	/COMPARE WITH <SP>			/034 CJL
	SNA CLA			/SKIP IF NOT SPACE
	JMP	NOSP1		/LOOP TILL SPACE OR EOL
	ISZ	NOSP		/BUMP RETURN FOR SPACE FOUND
NOSP3,	CLA CLL			/INSURE CLEAR AC
	TAD	SCANTP		/GET POINTER
	JMP I	NOSP		/RETURN IN AC



/	ROUTINE TO FIND AN END CHAR IN A STRING.
/	ENTER ROUTINE WITH POINTER TO THE STRING IN THE AC.
/	EXIT WITH THE POINTER TO THE FIRST MINUS CHAR IN THE AC.

FNDEND,	0			/FIND END CHAR ROUTINE
	DCA	SCANTP		/PUT POINTER IN SCANTP
FEND1,	TAD I	SCANTP		/GET A CHAR FROM THE STRING
	SPA CLA			/SKIP IF NOT END
	JMP	FEND2		/EXIT IF END OF STRING
	ISZ	SCANTP		/BUMP THE POINTER
	JMP	FEND1		/LOOP TILL NON-END OF STRING

FEND2,	TAD	SCANTP		/GET POINTER TO NON-END OF STRING
	JMP I	FNDEND		/EXIT WITH POINTER IN AC

SCANTP,	0			/USED IN THE SCAN ROUTINES "SP", "NOSP", "FNDNUL"
/	ROUTINE TO LOOKUP THE KEY WORD POINTED TO BY THE AC IN THE	/014 CJL
/	TABLE POINTED TO BY PTABLE.

/	RETURN + 1 IF NO MATCH IS FOUND WITH AC = ENTRY VALUE.
/	RETURN + 2 IF NO KEYWORD IS FOUND (EOL DETECTED).
/	RETURN + 3 IF MATCH IS FOUND WITH THE NEXT PARSE POSITION IN THE LINE IN
/	THE AC AND THE DISPATCH ADDRESS FROM THE TABLE IN "KEYDSP".

KEYPRS,	.-.			/KEYWORD PARSE ROUTINE
	DCA	LOOK3		/SAVE IN CASE OF FAIL
	TAD	LOOK3		/RE-GET
/	AND	(137)		/MAKE CHARACTER UPPER-CASE, NO PARITY	/MD013
	JMS	SCNEL		/TRY TO SCAN OFF A KEYWORD
	JMP	KP45		/END OF LINE ENCOUNTERED
	TAD	PTABLE		/GET ADDRESS OF TABLE
	DCA	LOOK2		/STORE IN LOCAL POINTER

KP10,	TAD	SCAN1		/GET ADDRESS OF SCAN ELEMENT
	DCA	LOOK1		/INTO LOCAL POINTER

KP20,	TAD I	LOOK1		/GET A CHARACTER FROM THE SCAN ELEMENT
	CIA			/NEGATE FOR COMPARE
	TAD I	LOOK2		/GET A CHAR FROM THE TABLE ELEMENT
	SZA CLA			/SKIP IF MATCH
	JMP	KP90		/NO MATCH, SET TO LOOK AT NEXT TABLE ENTRY
	TAD	LOOK1		/CHECK IF ALL ENTERED CHARS MATCH
	CIA			/NEGATE TO COMPARE
	TAD	SCAN2		/HAVE WE MATCHED TO THE TERMINATOR?
	SNA CLA			/SKIP IF NO
	JMP	KP40		/YES, GOT ENOUGH TO MATCH
	ISZ	LOOK1		/MORE TO MATCH, BUMP SCAN ELEMENT POINTER
	ISZ	LOOK2		/BUMP TABLE ELEMENT POINTER
	JMP	KP20		/CONTINUE MATCH LOOP

KP40,	TAD	LOOK2		/GET CURRENT TABLE POINTER
	JMS	FNDEND		/FIND A NULL MARK
	IAC			/BUMP BY 1
	DCA	LOOK1		/STORE IN A POINTER
	TAD I	LOOK1		/GET DISPATCH ADDRESS
	DCA	KEYDSP		/PUT INTO DISPATCH ADDRESS
	ISZ	KEYPRS		/BUMP RETURN
	ISZ	KEYPRS		/BUMP AGAIN
	CLA CLL IAC		/AC = 1
	TAD	SCAN2		/GET POINTER TO END OF CURRENT KEY
	JMP I	KEYPRS		/RETURN

/	END OF LINE ENCOUNTERED ON PARSE.

KP45,	ISZ	KEYPRS		/BUMP RETURN ONCE FOR EOL

/	NO MATCHES IN THE TABLE HERE.

KP50,	TAD	LOOK3		/GET ORIGINAL AC
	JMP I	KEYPRS		/RETURN
/	FAILURE ON CURRENT TABLE ENTRY, SET FOR NEXT ENTRY (IF	THERE IS ONE)  AND TRY
/	AGAIN.

KP90,	TAD	LOOK2		/GET TABLE POINTER
	JMS	FNDEND		/FIND NEXT TABLE ENTRY
	IAC;IAC			/NEXT ENTRY IS 2 PAST THE NULL
	DCA	LOOK2		/RE-SET LOCAL TABLE POINTER
	TAD I	LOOK2		/CHECK END OF TABLE
	SNA CLA			/SKIP IF NOT END OF THE TABLE
	JMP	KP50		/TAKE NOT FOUND EXIT
	JMP	KP10		/TRY MATCH ON THIS ENTRY

LOOK1,	.-.			/TEMPORARY FOR KEYPRS			/014 CJL
LOOK2,	.-.			/TEMPORARY FOR KEYPRS			/014 CJL
LOOK3,	.-.			/TEMPORARY FOR KEYPRS			/014 CJL

/	ROUTINE TO MOVE WORDS OF MEMORY.				/014 CJL

/	CALLING SEQUENCE:

/	TAD	(DESTINATION)	/GET DESTINATION ADDRESS
/	DCA	MQ		/INTO MQ				/032 CJL
/	TAD	(-COUNT)	/GET -NUMBER OF WORDS TO MOVE
/	DCA	MOVE4		/SETUP MOVE COUNTER
/	TAD	(SOURCE)	/GET SOURCE ADDRESS
/	JMS I	(MOVE0)		/CALL MOVE ROUTINE
/	RETURN			/RETURNS HERE

MOVE0,	.-.			/MOVE ROUTINE				/014 CJL
	DCA	MOVE5		/STORE SOURCE ADDRESS IN LOCAL POINTER
	TAD	MQ		/GET DESTINATION ADDRESS		/032 CJL
	DCA	MOVE6		/STORE IN LOCAL POINTER
MOVE1,	TAD I	MOVE5		/GET A WORD FROM THE SOURCE
	DCA I	MOVE6		/MOVE TO DESTINATION
	ISZ	MOVE5		/BUMP SOURCE POINTER
	ISZ	MOVE6		/BUMP DESTINATION COUNTER
	ISZ	MOVE4		/BUMP COUNTER
	JMP	MOVE1		/LOOP
	JMP I	MOVE0		/DONE

MOVE5,	.-.			/SOURCE POINTER FOR "MOVE"
MOVE6,	.-.			/DESTINATION POINTER FOR "MOVE"

	PAGE								/014 CJL
/	ROUTINE TO PARSE OFF A DEVICE NAME FROM THE COMMAND LINE.	/O14 CJL

/	CALLING SEQUENCE:

/	TAD	(POINTER)	/AC CONTAINS POINTER TO COMMAND LINE
/	JMS I	[DPARS]		/CALL ROUTINE
/	ERROR RETURN		/AC UNCHANGED
/	GOOD RETURN		/AC NOW POINTS TO REST OF LINE

/	DEVNUM=	DEVICE NUMBER TO USE.
/	":" IS THE FIFTH CHARACTER IF NOT USING DEFAULT DEVICE.

DPARS,	.-.			/DEVICE PARSE ROUTINE			/014 CJL
	DCA	DPAR10		/SAVE INITIAL POINTER TO LINE
	TAD	DPAR10		/GET POINTER
	JMS I	[NOSP]		/GET PAST ANY LEADING SPACES
	JMP	DFDEV		/GOT END OF LINE, USE DEFAULT DEVICE
	DCA	DPAR11		/SAVE POINTER TO LINE
	DCA	DEVNAME		/INITIALIZE THE DEVICE NAME		/014 CJL
	DCA	DEVNAME+1	/FOR "INQUIRE" FUNCTION			/014 CJL
	TAD	(DEVNAM)	/GET ADDRESS OF WHERE TO PUT DEVICE NAME/014 CJL
	DCA	PACK6P		/STORE IN PACK6 POINTER
	DCA	PACK6F		/INITIALIZE PACK6 FLAG FOR LOW BYTE	/014 CJL
	TAD	(-4)		/SET UP A COUNTER			/014 CJL
	DCA	DPAR13		/FOR NO MORE THAN 4 CHARS
DPAR1,	TAD I	DPAR11		/GET A CHAR FROM THE LINE
	SNA			/SKIP IF NOT <EOL>			/014 CJL
	JMP	DFDEV		/GOT AN <EOL>, USE DEFAULT DEVICE	/014 CJL
	TAD	(-":!200)	/CHECK FOR ":"				/034 CJL
	SNA CLA			/SKIP IF NOT END OF DEVICE NAME
	JMP	DPAR2		/DEVICE NAME SET UP
	TAD I	DPAR11		/RE-GET CHAR
	ISZ	DPAR11		/BUMP LINE POINTER
	PACK6			/PACK SIX-BIT				/014 CJL
	ISZ	DPAR13		/BUMP CHARACTER COUNTER			/014 CJL
	JMP	DPAR1		/CAN CONTINUE
	TAD I	DPAR11		/GET CHARACTER AFTER THE FOURTH		/014 CJL
	TAD	(-":!200)	/CHECK FOR ":"				/034 CJL
	SZA CLA			/SKIP IF YES, ALL IS OK
	JMP	DFDEV		/USE THE DEFAULT DEVICE
DPAR2,	ISZ	DPAR11		/BUMP POINTER PAST ":"
	TAD	(DEVNAM)	/GET PARSED DEVICE NAME ADDRESS		/014 CJL
	JMP	DPAR4		/DO AN OS/8 "INQUIRE"

DFDEV,	CLA CLL			/CLEAN UP				/019 CJL
	TAD	DPAR10		/GET ORIGINAL AC FOR
	DCA	DPAR11		/RETURN POINTER
DPAR4,	JMS	DVNUM		/GET DEVICE NUMBER
	JMP	DPAR8		/DEVICE NAME ERROR
	DCA	DEVNUM		/RETURN FOR CALLING PROGRAM
	TAD	DPAR11		/GET CURRENT POINTER
	ISZ	DPARS		/BUMP RETURN
	JMP I	DPARS		/RETURN					/014 CJL
DPAR8,	CLA CLL			/INSURE CLEAR AC
	TAD	DPAR10		/GET ORIGINAL AC
	JMP I	DPARS		/TAKE ERROR EXIT

DPAR10,	.-.			/TEMPORARY FOR DPARS			/014 CJL
DPAR11,	.-.			/TEMPORARY FOR DPARS			/014 CJL
DPAR13,	.-.			/TEMPORARY FOR DPARS			/014 CJL
DEFDEV,	DEVICE	DSK		/DEFAULT DEVICE
DEVNAM,	FILENAM	ZZZZZZ.ZZ	/DEFAULT FILENAME			/014 CJL

/	ROUTINE TO RETURN A DEVICE NUMBER FOR A DEVICE NAME.		/014 CJL

/	CALLING SEQUENCE:

/	TAD	(ADDRESS)	/AC=ADDRESS OF DEVICE NAME
/				/*OR* 0000 IF "DSK:" IS TO BE USED
/	ERROR RETURN		/INVALID DEVICE
/	GOOD RETURN		/AC=DEVICE NUMBER

DVNUM,	.-.			/DEVICE NUMBER ROUTINE			/014 CJL
	SNA			/SKIP IF DEVICE NAME SPECIFIED
	TAD	(DEFDEV)	/ELSE USE DEFAULT			/014 CJL
	DCA	DVNUM9		/SAVE IN LOCAL POINTER
	TAD I	DVNUM9		/GET FIRST TWO CHARACTERS OF NAME	/014 CJL
	DCA	DVNUM5		/PUT INTO CALL
	ISZ	DVNUM9		/BUMP POINTER
	TAD I	DVNUM9		/GET LAST TWO CHARACTERS OF NAME	/014 CJL
	DCA	DVNUM5+1	/PUT INTO CALL
	CIF	USRFLD		/GOTO USR FIELD				/020 CJL
	JMS I	[USRENTRY]	/CALL USER SERVICE ROUTINE		/035 CJL
	INQUIRE			/INQUIRE ABOUT HANDLER			/020 CJL
DVNUM5,	.-.			/FIRST TWO BYTES OF DEVICE NAME		/014 CJL
	.-.			/LAST TWO BYTES OF DEVICE NAME		/014 CJL
	0			/ENTRY POINT OF HANDLER RETURNED HERE
	JMP I	DVNUM		/ERROR, TAKE ERROR EXIT
	TAD	DVNUM5+1	/DEVICE NUMBER
	ISZ	DVNUM		/BUMP RETURN FOR NO ERROR
	JMP I	DVNUM		/RETURN

DVNUM9,	.-.			/LOCAL FOR "DVNUM"			/014 CJL
/	DEVICE HANDLER FETCH ROUTINE.					/020 CJL

/	CALLING SEQUENCE:

/	TAD	(HANDLERNUMBER)	/AC CONTAINS DEVICE HANDLER NUMBER
/	JMS I	[HFETCH]	/CALL ROUTINE
/	ERROR RETURN		/COULDN'T LOAD HANDLER
/	GOOD RETURN		/HANDLER LOADED

/	IF THE HANDLER WAS LOADED, THEN HNDADR CONTAINS THE HANDLER ENTRY POINT.

HFETCH,	.-.			/HANDLER FETCH ROUTINE
	DCA	HANDNUMBER	/STORE HANDLER NUMBER
	TAD	(HNDLR+1)	/GET OUR BUFFER+(TWO PAGE ALLOWED)
	DCA	HADR		/STORE IN-LINE
	TAD	HANDNUMBER	/GET HANDLER NUMBER AGAIN
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USRENTRY]	/CALL USER SERVICE ROUTINE		/035 CJL
	FETCH			/FETCH HANDLER
HADR,	.-.			/WILL BE OUR SUGGESTED ADDRESS+TWO PAGES ALLOWED
	SKP			/COULDN'T DO IT
	ISZ	HFETCH		/BUMP TO GOOD RETURN
	CLA CLL			/CLEAN UP
	TAD	HADR		/GET ACTUAL HANDLER ADDRESS
	DCA	HNDADR		/STASH THE POINTER
	JMP I	HFETCH		/RETURN EITHER WAY

HANDNUM,.-.			/HANDLER NUMBER TEMPORARY

/	ROUTINE TO HANDLE THE "FINISH" COMMAND.				/021 CJL

FINSRV,	0
	JMS I	[CREST2]	/SETUP CONSOLE OUTPUT ROUTINES		/025 CJL
	TAD	(MSEND)		/GET SEND MODE VALUE			/045 CJL
	DCA	KMODE		/SETUP PROPER MODE			/045 CJL
	FPACK			/FORMAT A PACKET
	SRVFIN			/PACKET DATA ADDRESS
	STGEN			/PACKET TYPE

FIN2,	SPACK			/SEND PACKET
	1			/AWAIT RESPONSE
	FIN20-2			/DISPATCH LIST FOR RESPONSE		/027 CJL

/	NAK OR UNDEFINED RESPONSE HERE

FIN5,	ISZ	RTRYC		/BUMP RE-TRY COUNTER
	JMP	FIN2		/GET RESPONSE AND TRY AGAIN
	TAD	(NOFINISH)	/FAILED, RETURN MESSAGE			/025 CJL
	JMP I	FINSRV

/	ACK HERE

FIN10,	ISZ	FINSRV		/BUMP FOR NON-ERROR EXIT
	JMP I	FINSRV		/DONE

FIN20,	STACK;	FIN10		/ACK
	STNAK;	FIN5		/NAK
	0

SRVFIN,	"F&137			/SERVER KERMIT COMMAND TO SHUT DOWN
	-1			/END OF DATA

	PAGE
/	ROUTINE TO PARSE OFF A FILE NAME.
/	FILE NAME TO BE PARSED MUST BE LETTERS OR DIGITS AND BE NO MORE THAN
/	SIX CHARS FOR THE NAME AND TWO CHARS FOR THE EXTENSION.

/	ENTER WITH:	AC =	POINTER TO FILE NAME TO PARSE.
/			FNPTR =	POINTER TO WHERE TO PUT THE PARSED FILE NAME.

/	NON-ERROR EXIT: AC =	POINTER TO REMAINDER OF COMMAND LINE.
/				RETURN THE CALL + 2.

/	ERROR EXIT:	AC =	ORIGINAL POINTER.
/				RETURN THE CALL + 1.

PFNAM,	0
	DCA	PFN10		/SAVE POINTER TO FILE NAME STRING
	TAD	FNPTR		/GET POINTER TO FILE NAME BLOCK
	DCA	MQ		/SET FOR "CLEAR" ROUTINE		/032 CJL
	TAD	(-4		/FOUR WORDS TO CLEAR OUT
	CLEAR			/INIT THE FILE NAME BLOCK
	TAD	PFN10		/GET THE STRING POINTER
	JMS I	[NOSP]		/GET PAST ANY LEADING SPACES
	JMP	PFNAM9		/GOT EOL, NO FILE NAME
	DCA	PFN11		/SAVE POINTER
	TAD	FNPTR		/GET FILE NAME BLOCK POINTER
	DCA	PACK6P		/SET UP THE "PACK6" POINTER
	DCA	PACK6F		/INIT THE "PACK6" FLAG
	TAD	(-6		/MAX OF 6 CHARS FOR FILE NAME
	DCA	PFN15		/PUT INTO COUNTER
	DCA	WILDF		/INIT THE WILD CARD FLAG
	JMS	NAM		/MOVE AND PACK FILE NAME
	TAD I	PFN11		/GET THE TERM CHAR
	SPA			/SKIP IF NOT EOL
	JMP	PFNAM7		/EOL MEANS END OF FILE NAME
	TAD	(-".!200)	/COMPARE TO "."				/034 CJL
	SNA			/SKIP IF NO
	JMP	PFNAM3		/GO HANDLE EXTENSION
	TAD	(-" +".)	/COMPARE TO <SP>			/034 CJL
	SZA CLA			/SKIP IF WAS A SPACE
	JMP	PFNAM9		/NOT A SPACE, GOT AN ERROR
	JMP	PFNAM7		/IS A SPACE, END OF FILE NAME
PFNAM3,	ISZ	PFN11		/BUMP PAST THE "."
	TAD	FNPTR		/GET FILE NAME BLOCK POINTER
	TAD	(3)		/POINT TO EXTENSION			/032 CJL
	DCA	PACK6P		/SET "PACK6" POINTER
	DCA	PACK6F		/INIT "PACK6" FLAG
	NL7776			/SET -2					/032 CJL
	DCA	PFN15		/COUNTER FOR 2 EXT CHARS
	JMS	NAM		/NOW DO THE EXTENSION
	TAD I	PFN11		/GET THE TERM CHAR
	SPA			/SKIP IF NOT EOL
	JMP	PFNAM7		/GOT COMPLETE FILE NAME HERE
	TAD	[-" !200]	/COMPARE TO <SP>			/034 CJL
	SZA CLA			/SKIP IF IT WAS
	JMP	PFNAM9		/GOT A FILE NAME ERROR
PFNAM7,	ISZ	PFNAM		/BUMP RETURN FOR GOOD FILE NAME
	CLA CLL			/INSURE CLEAR AC
	TAD	PFN11		/GET CURRENT STRING POINTER
	JMP I	PFNAM		/AND RETURN

PFNAM9,	CLA CLL			/INSURE CLEAR AC
	TAD	PFN10		/GET ORIGINAL STRING POINTER
	JMP I	PFNAM		/TAKE ERROR RETURN

PFN10,	0			/TEMP FOR PFNAM ROUTINE
PFN11,	0			/TEMP FOR PFNAM ROUTINE
PFN15,	0			/TEMP FOR PFNAM ROUTINE
/	LOCAL ROUTINE TO "PFNAM" TO MOVE IN THE FILE NAME OR FILE EXTENSION.
/	ENTER WITH "PFN11" POINTING TO WHERE TO GET THE NAME OR EXTENSION.
/	AND "PFN15" EQUAL TO THE MAX NUMBER OF CHARS (6 FOR NAME, 2 FOR EXT).
/	THIS ROUTINE CHECKS FOR WILD CARD CHARS "*" AND "?" AND PUTS THE
/	"?" CHAR IN FOR ANY CHARS IN THE NAME THAT ARE WILD.  ALSO IF ANY
/	WILD CARD CHARS ARE FOUND THE FLAG "WILDC" IS SET SO BEFORE PARSING
/	ANY FILE NAME THE "WILDC" FLAG SHOULD BE INITIALIZED.

NAM,	0
NAM0,	TAD I	PFN11		/GET A CHAR FROM THE STRING
	JMS I	(ALPNUM)	/MUST BE ALPHA OR NUMBER
	SKP			/NOT A ALPHA NUMERIC
	JMP	NAM3		/IS ALPHA NUMERIC
	TAD	(-"?!200)	/COMPARE TO "?"				/034 CJL
	SNA			/SKIP IF NO
	JMP	NAM2		/YES, JUST PUT IT IN
	TAD	(-"*+"?)	/COMPARE TO "*"				/034 CJL
	SZA CLA			/SKIP IF YES
	JMP I	NAM		/TAKE THE FILE NAME ERROR EXIT
	ISZ	WILDF		/SET FLAG FOR WILD CARD FOUND
NAM1,	TAD	["?&77]		/GET WILD CARD CHARACTER		/034 CJL
	PACK6			/PUT IN NAME BLOCK
	ISZ	PFN15		/BUMP CHAR COUNTER
	JMP	NAM1		/LOOP TILL ALL FILLED
	ISZ	PFN11		/BUMP THE STRING POINTER
	JMP	NAM9		/EXIT WITH "PFN11" POINTING TO NEXT CHAR
NAM2,	ISZ	WILDF		/SET FLAG FOR WILD CARD FOUND
	TAD	["?&77]		/GET WILD CARD CHARACTER		/034 CJL
NAM3,	PACK6			/PUT THE CHAR INTO THE FILE NAME BLOCK
	ISZ	PFN11		/BUMP THE STRING POINTER
	ISZ	PFN15		/BUMP THE CHAR COUNTER
	JMP	NAM0		/LOOP

NAM4,	TAD I	PFN11		/NOW GET TO A TERMINATOR CHAR
	JMS I	(ALPNUM)	/BY FINDING FIRST NON-ALPHNUMERIC
	JMP	NAM9		/NOW WE CAN QUIT
	CLA CLL			/IGNORE EXCESS CHARS
	ISZ	PFN11		/BUMP THE STRING POINTER
	JMP	NAM4		/LOOP

NAM9,	CLA CLL			/LEAVE WITH A CLEAR AC
	JMP I	NAM		/RETURN
/	ROUTINE TO SEND A PACKET.
/	ENTER WITH ADDRESS OF PACKET DATA IN CALL + 1.
/	AND TYPE OF PACKET IN CALL + 2.
/	EXIT CALL + 4 IF ACK RETURNED.
/	EXIT CALL + 3 IF NAK OR OTHER PACKET TYPE RETURNED.

SNDP,	0
	TAD I	SNDP		/GET DATA ADDRESS
	DCA	SNDP1		/STORE IN CALL
	ISZ	SNDP		/BUMP POINTER
	TAD I	SNDP		/GET PACKET TYPE
	DCA	SNDP2		/STORE IN CALL
	ISZ	SNDP		/BUMP

	FPACK			/FORMAT A PACKET
SNDP1,	0			/DATA ADDRESS GOES HERE
SNDP2,	0			/PACKET TYPE GOES HERE

SNDP3,	SPACK			/SEND A DATA PACKET
	1			/GET RESPONSE
	SNDP9-2			/RESPONSE DISPATCH TABLE ADDRESS	/027 CJL

/	HERE ON NOT "NAK" OR "ACK" RESPONSE.

	SKP

/	HERE ON "ACK".

SNDP5,	ISZ	SNDP		/BUMP RETURN

	ISZ	SNDP		/BUMP RETURN
	JMP I	SNDP		/EXIT

/	HERE ON NAK.

SNDP4,	ISZ	RTRYC		/BUMP THE RE-TRY COUNTER
	JMP	SNDP3		/RE-TRY
	JMP I	SNDP		/TAKE RETURN + 3

SNDP9,	STACK;	SNDP5		/ACK
	STACK;	SNDP4		/NAK
	0

	PAGE								/014 CJL
	IFZERO	1	<

/	ROUTINE TO PARSE OFF A DECIMAL NUMBER.
/	ENTER ROUTINE WITH A POINTER TO THE PARSE LINE IN THE AC.
/	EXIT:	RETURN + 1 FOR NO NUMBER.
/		RETURN + 2 FOR INVALID NUMBER.
/		RETURN + 3 FOR VALID NUMBER.

/	IN ALL CASES ON RETURN THE AC WILL CONTAIN A POINTER TO THE NEXT CHAR TO PARSE
/	IN THE LINE.  ANY NUMBER  PARSED  WILL BE CONVERTED TO BINARY AND PUT INTO THE
/	REGISTER "BININP".

DECPRS,	0
	JMS I	[NOSP]		/GET PAST ANY LEADING SPACES
	JMP I	DECPRS		/GOT AN END OF LINE, AC POINTS TO IT
	DCA	DP10		/SAVE POINTER TO LINE
	TAD	DP10		/RE-GET POINTER TO LINE
	DCA	DP11		/STORE IN OUR LINE POINTER
	DCA	BININP		/INIT BINARY REGISTER
	DCA	DP13		/INIT PARSED NUMBER FLAG
	SKP			/SKIP INTO LOOP BELOW
DP1,	ISZ	DP11		/BUMP THE LINE POINTER
	TAD I	DP11		/GET A CHAR FROM THE LINE
	JMS	DECCK		/CHECK FOR PROPER ASCII DECIMAL
	JMP	DP5		/NOT PROPER ASCII DECIMAL
	ISZ	DP13		/FLAG NUMBER INPUT
	TAD	(-"0		/MAKE BINARY
	DCA	DP12		/AND STORE
	TAD	BININP		/GET PREVIOUS INPUT
	JMS	MUL10		/AND MULTIPLY TIMES 10
	SZL			/SKIP IF NO OVERFLOW ENCOUNTERED
	JMP	DP6		/GOT AN OVERFLOW ERROR
	TAD	DP12		/COMBINE WITH CURRENT INPUT
	SZL			/SKIP IF NO OVERFLOW ERROR
	JMP	DP6		/GOT AN OVERFLOW ERROR
	DCA	BININP		/RETURN ACCUMULATED SUM
	JMP	DP1		/LOOP

DP5,	CLA CLL			/AC MAY NOT BE CLEAR
	TAD	DP13		/ANY NUMBERS INPUT YET?
	SNA CLA			/SKIP IF YES
	JMP	DP6		/TAKE THE NO NUMBER INPUT RETURN
	ISZ	DECPRS		/BUMP THE RETURN
	ISZ	DECPRS		/TWICE FOR GOOD NUMBER INPUT RETURN
	TAD	DP11		/GET POINTER TO LINE
	JMP I	DECPRS		/AND RETURN

DP6,	CLA CLL			/AC MAY NOT BE CLEAR
	TAD	DP10		/GET ORIGINAL LINE POINTER
	ISZ	DECPRS		/BUMP THE RETURN
	JMP I	DECPRS		/TAKE THE INVALID NUMBER RETURN

			>
	IFZERO	1	<

DP10,	0			/TEMP FOR DECPRS
DP11,	0			/TEMP FOR DECPRS
DP12,	0			/TEMP FOR DECPRS
DP13,	0			/TEMP FOR DECPRS

/	ROUTINE TO MULTIPLY THE VALUE OF THE AC TIMES 10.
/	VALUE IN THE AC IS ASSUMED BINARY.

/	THE NUMBER IS RETURNED IN THE AC.  IF THE LINK IS SET THE MULTIPLY
/	OVERFLOWED 12 BITS.

MUL10,	0
	DCA	MULTMP		/SAVE THE NUMBER
	TAD	MULTMP		/GET THE NUMBER BACK
	CLL RTL			/MULTIPLY TIMES 4
	TAD	MULTMP		/TIMES 5
	SNL			/SKIP IF ALREADY OVERFLOWED		/025 CJL
	RAL			/TIMES 10
	JMP I	MUL10		/RETURN NUMBER IN AC
				/THE LINK HAS ANY OVERFLOW

MULTMP,	0			/TEMP STORAGE FOR MUL10 ROUTINE



/	ROUTINE TO CHECK FOR A VALID ASCII DECIMAL VALUE.

/	ENTER WITH ASCII CHAR IN THE AC.
/	EXIT RETURN + 1 IF NON-VALID ASCII DECIMAL WITH CHAR IN AC.
/	EXIT RETURN + 2 IF VALID ASCII DECIMAL WITH CHAR IN AC.

DECCK,	0
	DCA	DECCK5		/STORE THE CHAR TO CHECK
	TAD	DECCK5		/GET THE CHAR
	TAD	(-"0		/CHECK FOR LESS THAN 0
	SPA			/SKIP IF NOT LESS THAN 0
	JMP	DECCK1		/NON-ASCII DECIMAL
	TAD	("0-"9-1	/CHECK GREATER THAN 9
	SMA CLA			/SKIP IF LE 9
	JMP	DECCK1		/INVALID ASCII DECIMAL
	ISZ	DECCK		/BUMP RETURN FOR VALID ASCII DECIMAL
DECCK1,	TAD	DECCK5		/RE-GET ORIGINAL CHAR IN AC
	JMP I	DECCK		/RETURN


DECCK5,	0			/TEMP FOR "DECCK" ROUTINE

			>
/	ROUTINE TO INPUT A COMMAND LINE FROM THE KEYBOARD.		/013/014 CJL

LININP,	0
	TAD	(LINBUF		/GET ADDRESS OF LINE BUFFER
	DCA	LIN50		/STORE IN A POINTER
LIN1,	JMS I	(INPUT)		/GET A CHARACTER FROM THE KEYBOARD	/044 CJL
	TAD	(-CNTRLM)	/COMPARE TO <CR>			/034 CJL
	SNA			/SKIP IF NOT A RETURN
	JMP	LIN2		/LINE IS INPUT
	TAD	(-DELETE+CNTRLM)/COMPARE TO <DEL>			/034 CJL
	SNA CLA			/SKIP IF NOT A DELETE
	JMP	LIN5		/OFF TO HANDLE A DELETE
	TAD	LIN50		/GET VALUE OF LINE POINTER
	TAD	(-LINBUF-LINSIZ	/COMPARE WITH END OF LINE BUFFER
	SMA CLA			/SKIP IF ROOM IN LINE BUFFER
	JMP	LIN10		/BEEP FOR FULL BUFFER
	TAD	INCHAR		/GET THE KEYBOARD CHARACTER AGAIN	/044 CJL
	TAD	(-140)		/COMPARE TO LOWER-CASE LIMIT		/034 CJL
	SMA			/SKIP IF BELOW LIMIT			/034 CJL
	TAD	[-40]		/ELSE MAKE IT UPPER-CASE		/034 CJL
	TAD	(140)		/RESTORE THE CHARACTER			/034 CJL
	DCA I	LIN50		/STORE IN THE LINE BUFFER
	ISZ	LIN50		/BUMP THE LINE BUFFER POINTER
	NL7777			/SET -1					/032 CJL
	DCA I	LIN50		/TERMINATE THE LINE
	TAD	INCHAR		/GET THE LATEST KEYBOARD CHARACTER BACK	/044 CJL
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	JMP	LIN1		/LOOP TILL A RETURN TYPED

LIN2,	NL7777			/SET -1					/032 CJL
	DCA I	LIN50		/INSURE STRING TERMINATED
	JMS I	[SCRIBE]	/DO A 					/025 CJL
	CRLF			/<CR>, <LF>				/025 CJL
	JMP I	LININP		/DONE

/	HANDLE A DELETE TYPED IN

LIN5,	TAD	LIN50		/FIND OUT FIRST IF...
	TAD	(-LINBUF	/WE ARE AT THE BEGINNING OF THE LINE
	SNA CLA			/SKIP IF NO
	JMP	LIN1		/JUST IGNORE THE DELETE
	NL7777			/SET -1					/032 CJL
	TAD	LIN50		/GET THE LINE POINTER
	DCA	LIN50		/RETURN BACKED UP
	DCA I	LIN50		/ZERO THE CHAR
	TAD	(CNTRLH)	/GET A <BS>				/025 CJL
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	TAD	[" &177]	/GET A <SPACE>				/025 CJL
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	TAD	(CNTRLH)	/GET A <BS>				/025 CJL
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	JMP	LIN1		/BACK TO INPUT
/	HANDLE FULL LINE BUFFER HERE

LIN10,	CLA CLL			/ENSURE CLEAR AC
	TAD	[CNTRLG]	/GET A <BEL> CHARACTER			/025 CJL
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	JMP	LIN1		/WAIT FOR EITHER RETURN OF DELETE KEY

LIN50,	0			/TEMP POINTER FOR "LININP" ROUTINE
/	ROUTINE TO PACK TWO SIX-BIT CHARACTERS INTO A WORD.		/032 CJL

/	CALLING SEQUENCE:

/	[PACK6PTR => CHARACTER PACKING AREA].
/	[PACK6FLAG=0 IF PACKING INTO HIGH-ORDER BYTE.
/	PACK6FLAG=4000 IF PACKING INTO LOW-ORDER BYTE].

/	TAD	CHAR		/AC CONTAINS CHARACTER TO BE PACKED
/	PACK6			/CALL VIA PAGE ZERO POINTER

/	RETURNS WITH AC CLEAR AND PACK6PTR AND PACK6FLAG UPDATED FOR NEXT PACKING.

PACK60,	.-.			/PACK SIX-BIT ROUTINE
	AND	[77]		/JUST SIX-BIT
	DCA	PACK6TEMP	/SAVE FOR NOW
	NL4000			/SET INVERSION BIT
	TAD	PACK6FLAG	/REVERSE THE FLAG
	DCA	PACK6FLAG	/STORE BACK
	SZL			/WAS IT CLEAR?
	JMP	PACKIT		/NO, GO DO LOW-ORDER
	TAD	PACK6TEMP	/GET THE CHARACTER
	RTL;RTL;RTL		/MOVE UP
	DCA I	PACK6PTR	/STORE IT
	JMP I	PACK60		/RETURN

PACKIT,	TAD I	PACK6PTR	/GET PREVIOUS HIGH-ORDER HALFWORD
	TAD	PACK6TEMP	/ADD ON LATEST
	DCA I	PACK6PTR	/STORE BOTH
	ISZ	PACK6PTR	/BUMP FOR NEXT TIME
	JMP I	PACK60		/RETURN

PACK6TE,.-.			/PACK6 TEMPORARY
/	ROUTINE TO COMPARE TWO FILE NAMES FOR EQUALITY.
/	THE ROUTINE WILL CHECK EACH OF THE 8 FILE NAME CHARS AND IF A
/	CHAR IN THE FIRST FILE NAME (THE ONE WE ARE LOOKING FOR) CONTAINS
/	A "?" IT WILL MATCH ON THE SECOND FILE NAME CHAR.
/	ENTER WITH "FCMP1" POINTING TO THE FILE NAME TO FIND, AND "FCMP2"
/	POINTING TO THE FILE NAME TO TRY AND MATCH.  EXIT + 1 IF NO MATCH
/	AND EXIT + 2 IF MATCH.  (IF NON-ZERO AC ON ENTRY, THE AC IS ASSUMED
/	TO HAVE THE VALUE FOR "FCMP2".)

FMATCH,	0
	SZA			/SKIP IF NO ARGUMENT IN AC
	DCA	FCMP2		/THIS ARGUMENT CAME IN THE AC
	TAD	FCMP1		/GET ADDRESS OF FIRST FILE NAME BLOCK
	DCA	GET6P		/STORE IN A POINTER
	DCA	GET6F		/INIT FLAG FOR "GET6" ROUTINE
	TAD	FCMP2		/GET ADDRESS OF SECOND FILE NAME BLOCK
	DCA	FMATP		/STORE IN A LOCAL POINTER
	DCA	FMATF		/INIT LOCAL FLAG
	TAD	(-10		/8 CHARS TO DO
	DCA	FMATC		/STORE IN LOCAL COUNTER

FMAT1,	NL4000			/SET 4000				/032 CJL
	TAD	FMATF		/GET FLAG
	DCA	FMATF		/RETURN FLAG, LINK CONTAINS STATUS
	TAD I	FMATP		/GET A WORD FROM THE SECOND NAME
	SZL			/SKIP IF HIGH-ORDER WANTED NOW		/032 CJL
	JMP	FSWIT		/JUMP IF LOW-ORDER WANTED NOW		/032 CJL
	RTR;RTR;RTR		/MOVE DOWN HIGH-ORDER			/032 CJL
	SKP			/DON'T BUMP YET				/032 CJL
FSWIT,	ISZ	FMATP		/BUMP THE POINTER			/032 CJL
	AND	[77]		/KEEP ONLY BOTTOM 6 BITS		/016 CJL
	DCA	FMATT		/STORE IN A TEMP
	GET6			/NOW GET A CHAR FROM FIRST NAME
	TAD	(-77		/CHECK IF WILD
	SNA			/SKIP IF NO
	JMP	FMAT2		/NO MATCH CHECK ON A WILD CARD
	TAD	[77]		/RESTORE THE CHARACTER			/014/016 CJL
	CIA			/NEGATE FOR COMPARE
	TAD	FMATT		/COMPARE WITH SECOND FILE NAME
	SZA CLA			/SKIP IF IS A MATCH
	JMP I	FMATCH		/THIS IS NOT A MATCH

FMAT2,	ISZ	FMATC		/BUMP COUNTER
	JMP	FMAT1		/LOOP, MORE TO CHECK
	ISZ	FMATCH		/BUMP RETURN FOR MATCH
	JMP I	FMATCH		/GOT A MATCH

FMATP,	0			/POINTER FOR "FMATCH"
FMATC,	0			/COUNTER FOR "FMATCH"
FMATF,	0			/FLAG FOR "FMATCH"
FMATT,	0			/TEMP FOR "FMATCH"
FCMP1,	0			/POINTER FOR FIRST FILE NAME BLOCK
FCMP2,	0			/POINTER FOR SECOND FILE NAME BLOCK
	PAGE								/014 CJL
/	REMOTE LINK INPUT ROUTINE.
/	CALL = RPACK.

ILINK,	0
	TAD	RETRY		/SET UP A RE-TRY COUNT
	DCA	ILINK6		/RE-TRY COUNT FOR INPUT ERRORS

ILINK0,	JMS I	(GETSOH)	/FIRST GET THE "SOH" BYTE
	JMP	ILINK2		/RETURN HERE ON TIME-OUT
	DCA	ILINK9		/INIT CHECKSUM REGISTER
	TAD	[RRLEN]		/GET REMOTE RECEIVE BUFFER ADDRESS
	DCA	ILINK8		/STORE IN LOCAL POINTER
	JMS I	(GETIR)		/GET A CHAR
	JMP	ILINK2		/GOT A RETURN OR TIME-OUT
	DCA I	ILINK8		/STORE LENGTH IN BUFFER
	TAD I	ILINK8		/GET LENGTH CHAR BACK
	TAD	(-40-1		/CHAR FUNCTION - LENGTH BYTE
	CIA			/NEGATE FOR COUNTER
	DCA	ILINK7		/STORE IN LOCAL COUNTER

ILINK1,	ISZ	ILINK8		/BUMP POINTER
	JMS I	(GETIR)		/GET NEXT CHAR
	JMP	ILINK2		/GOT A RETURN
	DCA I	ILINK8		/STORE IN BUFFER
	ISZ	ILINK7		/BUMP COUNTER
	JMP	ILINK1		/LOOP

	ISZ	ILINK8
	NL7777			/SET -1					/032 CJL
	DCA I	ILINK8
	TAD	ILINK9		/GET CALCULATED CHECKSUM
	JMS I	[CKSUM]		/CALCULATE 1 BYTE CHECKSUM
	CIA			/NEGATE FOR COMPARE
	DCA	ILINK7		/STORE TEMP
	JMS I	(GETIR)		/NOW GET CHECKSUM
	JMP	ILINK2		/GOT A RETURN
	TAD	ILINK7		/COMPARE WITH CALCULATED CHECKSUM
	SNA CLA			/SKIP IF NOT SAME
	JMP	ILINK4		/ARE SAME

ILINK2,	CLA CLL			/INSURE CLEAR AC
	ISZ	ILINK6		/BUMP RE-TRY COUNTER
	JMP	ILINK3		/CAN RE-TRY
	TAD	(RPERMSG)	/GET MESSAGE FOR FATAL PACKET ERROR	/025 CJL
	JMP I	[CLOOP7]	/AND ABORT THE MESS

ILINK3,	TAD	ABFLAG		/GET ABORT FLAG				/044 CJL
	SZA CLA			/SKIP IF NO
	JMP I	(ABORT)		/ABORT THIS
	JMS I	(SNDNAK)	/SEND BACK A "NAK"
	JMP	ILINK0		/AND TRY AGAIN
ILINK4,	TAD	ABFLAG		/GET ABORT FLAG				/044 CJL
	SNA CLA			/SKIP IF YES
	JMP I	ILINK		/NOPE, RETURN
	JMP I	(ABORT)

ILINK6,	0			/LOCAL TO "ILINK"
ILINK7,	0			/LOCAL TO "ILINK"
ILINK8,	0			/LOCAL TO "ILINK"
ILINK9,	0			/LOCAL TO "ILINK"

/	HELP COMMAND ROUTINE.						/024 CJL

HELPSRV,.-.			/HELP ROUTINE
	JMS I	[CRESET]	/RESET CONSOLE ROUTINE STUFF
	JMS I	[SCRIBE]	/GIVE THEM THE
	HELPMSG			/HELP MESSAGE
	TAD	ESCHAR		/GET THE ESCAPE CHARACTER
	JMS I	[ESCPRNT]	/PRINT IT
	JMS I	[SCRIBE]	/DO A
	CRLF			/<CR>, <LF>
	ISZ	HELPSRV		/BUMP PAST ERROR RETURN
	JMP I	HELPSRV		/RETURN

/	ROUTINE TO PRINT THE DATA IN THE RECEIVED PACKET.

PRIPAK,	0
	PRI8B;	RRDTA		/PRINT THE DATA
	JMS I	[SCRIBE]	/DO A					/025 CJL
	CRLF			/<CR>, <LF>				/025 CJL
	JMP I	PRIPAK		/DONE

	PAGE								/014 CJL
/	ROUTINE TO SERVICE A SEND REQUEST.

SNDSRV,	0
	JMS I	[CREST2]	/SETUP CONSOLE OUTPUT ROUTINES		/025 CJL
	TAD	(MSEND)		/FIRST SET MODE TO SEND
	DCA	KMODE		/PUT INTO MODE FLAG
	TAD	LPTR		/GET CURRENT LINE POINTER
	DCA	PRSERR		/SAVE LINE POSITION
	TAD	PRSERR		/GET LINE POSITION
	JMS I	[DPARS]		/TRY TO PARSE OFF A DEVICE NAME
	JMS	SNDERROR	/RETURN A DEVICE NAME ERROR		/026 CJL
SER1,	DCA	PRSERR		/SAVE LINE POINTER			/026 CJL
	TAD	(FNBLK		/GET FILE NAME BLOCK ADDRESS
	DCA	FNPTR		/STORE IN POINTER
	TAD	PRSERR		/GET STRING POINTER
	JMS I	[PFNAM]		/PARSE OFF THE FILE NAME
	JMS	SNDERROR	/FILE NAME PARSE ERROR			/026 CJL
SER2,	DCA	PRSERR		/SAVE THE STRING POINTER		/026 CJL
	TAD	PRSERR		/GET THE STRING POINTER
	JMS I	[NOSP]		/FIND THE END OF STRING
	SKP			/GOT END OF STRING HERE
	JMS	SNDERROR	/SYNTAX ERROR				/026 CJL
SER3,	DCA	PRSERR		/RETURN POINTER				/026 CJL
	TAD	DEVNUM		/GET THE DEVICE NUMBER PARSED
	JMS I	[HFETCH]	/FETCH A HANDLER FOR THIS
	JMS	SNDERROR	/HANDLER FETCH ERROR			/026 CJL
SER4,	DCA	FILFND		/INIT FILE FOUND FLAG
	DCA	INIFLG		/CLEAR THE INIT DONE FLAG
	NL0001			/INITIALIZE DIRECTORY			/028 CJL
	DCA	SLFLAG		/LOOKUP FLAG				/028 CJL
SNDSV1,	TAD	(FNBLK		/GET FILE NAME BLOCK ADDRESS
	DCA I	(FCMP1)		/SET FOR FILE TO FINE
	TAD	SLFLAG		/GET DIRECTORY FLAG			/028 CJL
	JMS I	(LUKUP)		/FIND A MATCH FOR THIS FILE
	JMS	SNDERROR	/DIRECTORY I/O ERROR			/026 CJL
SER5,	JMP	S00		/FILE NOT FOUND				/026 CJL
	ISZ	FILFND		/BUMP FILE FOUND COUNT
	DCA	SLFLAG		/DON'T INITIALIZE LOOKUP AGAIN
	JMS I	(SNDPRO)	/PROCESS THIS FILE FOR SEND
	JMS	SNDERROR	/ERROR IN FILE SEND PROCESS		/026 CJL
SER6,	TAD	WILDF		/WAS WILD CARD FILE SPEC?		/026 CJL
	SZA CLA			/SKIP IF NO
	JMP	SNDSV1		/GOT WILD CARD, TRY FOR NEXT
S00,	TAD	FILFND		/CHECK FOR ANY FILES FOUND
	SNA CLA			/SKIP IF YES
	JMS	SNDERROR	/RETURN FILE NOT FOUND ERROR		/026 CJL
SER7,	JMS	BRKXMT		/BREAK THE SEND				/026 CJL
	TAD	PRSERR		/GET CURRENT CURSOR POSITION
	DCA	LPTR		/UPDATE
	ISZ	SNDSRV		/BUMP RETURN
	JMP I	SNDSRV		/AND DONE
/	SEND ERRORS COME HERE.						/026 CJL

SNDERRO,.-.			/SEND ERROR ROUTINE
	CLA			/CLEAN UP
	TAD	SNDERROR	/GET CALLER
	JMS I	[SRCHTABLE]	/GO MATCH IT
	SNERTABLE-1-1		/IN ERROR TABLE
	JMP I	SNDSRV		/TAKE ERROR EXIT WITH MESSAGE ADDRESS IN AC

/	SEND ERROR MESSAGE DISPATCH TABLE.				/026 CJL

SNERTAB,-SER1;	DNERMSG		/DEVICE NAME ERROR
	-SER2;	FNERMSG		/FILE NAME ERROR
	-SER3;	FSERMSG		/FILE NAME SYNTAX ERROR
	-SER4;	SHFEMSG		/HANDLER FETCH ERROR
	-SER5;	SDERMSG		/DIRECTORY I/O ERROR
	-SER6;	SNDEMSG		/SEND ERROR
	-SER7;	NOTFND		/LOOKUP
	0			/THIS ENDS THE LIST

FILFND,	0			/HOLDS COUNT OF # OF FILES FOUND
SLFLAG,	.-.			/LOOKUP INITIALIZE FLAG			/028 CJL
FNBLK,	0
	0
	0
	0
/	ROUTINE TO RE-SET THE SEND.

BRKXMT,	.-.
	CLA CLL			/INSURE CLEAR AC
	DCA	INIFLG		/CLEAR THE INIT SEND FLAG
	FPACK			/FORMAT A PACKET
	NODATA			/NO DATA FOR THIS PACKET
	STEOT			/"EOT" PACKET TYPE
	SPACK			/SEND THE PACKET
	1			/READ RESPONSE				/042 CJL
	0			/DO NOT DISPATCH			/042 CJL
	JMP I	BRKXMT		/DONE

/	ROUTINE TO SEND OUT A NAK WITHOUT DISTURBING THE NORMAL PACKET BUFFER.

SNDNAK,	0
	NL7777			/-1					/042 CJL
	TAD	CURSEQ		/ADD ON CURRENT SEQUENCE NUMBER		/042 CJL
	AND	[77]		/MODULO 64				/042 CJL
	TAD	[40]		/TAKE CHAR(SEQUENCE NUMBER)		/042 CJL
	DCA	NAKPAK+2	/PUT IN NAK PACKET BUFFER
	TAD	NAKPAK+1	/GET LENGTH
	TAD	NAKPAK+2	/GET SEQ
	TAD	NAKPAK+3	/GET TYPE
	JMS I	[CKSUM]		/CALCULATE CHECKSUM
	DCA	NAKPAK+4	/PUT IN CHECKSUM
	TAD	REOL		/GET ANY EOL REQUIRED
	TAD	[-40]		/UN-CHAR IT				/014/016 CJL
	SNA			/SKIP IF USING
	NL7777			/NO EOL, PUT IN -1 INSTEAD		/032 CJL
	DCA	NAKPAK+5	/PUT EOL IN
	REM8B;	NAKPAK		/SEND NAK TO REMOTE
	JMP I	SNDNAK		/DONE


NAKPAK,	CNTRLA			/MARK					/042 CJL
	" &77+3			/LENGTH OF NAK PACKET			/042 CJL
	.-.			/SEQUENCE NUMBER GOES HERE		/042 CJL
	STNAK			/DATA TYPE
	.-.			/CHECKSUM				/042 CJL
	.-.			/<EOL> IF USED				/042 CJL
	-1			/TERMINATE

/	FILENAME BUFFER.						/014 CJL

NAMBUFF,ZBLOCK	12		/FILENAME.EXTENSION (WITH TERMINATOR) GOES HERE
	PAGE								/014 CJL
/	ROUTINE TO SERVICE A "GET" COMMAND.

GETSRV,	0
	JMS I	[CREST2]	/SETUP CONSOLE OUTPUT ROUTINES		/025 CJL
	TAD	(MREC)		/GET OUR MODE VALUE			/045 CJL
	DCA	KMODE		/SETUP NOW				/045 CJL
	TAD	LPTR		/GET CURRENT LINE POINTER
	DCA	PRSERR		/SAVE
	TAD	PRSERR		/RE-GET IT
	JMS I	[DPARS]		/PARSE OFF THE DEVICE NAME		/006/014 CJL
	JMP	GSRV50		/ERROR IN DEVICE NAME			/006
	JMS I	[NOSP]		/FIND BEGINNING OF A FILE NAME
	JMP	GSRV22		/GOT <EOL>, NO FILE NAME		/006/014 CJL
	DCA	GSRV90		/STORE BEGINNING ADDRESS
	TAD	GSRV90		/NOW WE LOOK FOR
	JMS I	[SP]		/THE END OF THE LINE
	SKP			/GOT THE END OF THE LINE HERE
	JMP	.-2		/NOT END YET, CONTINUE
	DCA	PRSERR		/STORE POINTER TO EOL
	NL7777			/SET -1					/032 CJL
	DCA I	PRSERR		/TERMINATE FILE NAME WITH -1
	DCA	CURSEQ		/RE-SET THE SEQUENCE
	TAD	GSRV90		/GET ADDRESS OF FILE NAME

GSRV10,	FPACK			/FORMAT THE PACKET
GSRV90,	0			/DATA ADDRESS HERE
	STRIN			/RECIEVE INIT PACKET

GSRV12,	SPACK			/SEND THE PACKET
	1			/GET RESPONSE
	GSRV80-2		/DISPATCH TABLE				/027 CJL

/	SERVICE A NAK OR UNDEFINED.

GSRV15,	ISZ	RTRYC		/BUMP THE RE-TRY COUNTER
	JMP	GSRV12		/TRY AGAIN
	JMP I	GETSRV		/GIVE UP

/	SERVICE A SEND/INIT FROM THE REMOTE.

GSRV20,	JMS I	(INPSRV)	/HANDLE JUST LIKE A RECEIVE
	JMP	GSRV21		/ERROR RETURN FROM "INPSRV"
	ISZ	GETSRV		/BUMP RETURN FOR NO ERROR
	TAD	PRSERR		/UPDATE THE CURRENT LINE POINTER
	DCA	LPTR
GSRV21,	JMP I	GETSRV

GSRV22,	CLA CLL			/MAKE SURE WE ARE CLEAR			/009/014 CJL
	TAD	[NOTFND]	/GET ERROR MESSAGE ADDRESS		/025 CJL
	JMP I	GETSRV		/TAKE ERROR RETURN			/009/014 CJL

/	GOT AN ERROR PACKET, DISPLAY ERROR AND ABORT.

GSRV40,	JMS I	[PRIPAK]	/PRINT OUT THE ERROR PACKET
	JMP I	GETSRV		/TAKE THE ERROR EXIT
/	GOT DEVICE ERROR.						/006/014 CJL

GSRV50,	CLA CLL			/ENSURE CLEAR AC			/006/014 CJL
	TAD	(DNERMSG)	/GET ERROR MESSAGE ADDRESS		/025 CJL
	JMP I	GETSRV		/TAKE ERROR RETURN			/006/014 CJL

/	DISPATCH TABLE.

GSRV80,	STERR;	GSRV40		/ERROR PACKET RETURNED
	STSIN;	GSRV20		/SEND INIT PACKET RETURNED
	STNAK;	GSRV15		/NAK PACKET RETURNED
	0			/TERMINATE TABLE
/	ROUTINE TO SERVICE A "RECEIVE" COMMAND.

RECSRV,	0
	JMS I	[CREST2]	/SETUP CONSOLE OUTPUT ROUTINES		/025 CJL
	TAD	(MREC)		/GET OUR MODE VALUE			/045 CJL
	DCA	KMODE		/SETUP NOW				/045 CJL
	TAD	LPTR		/GET CURRENT LINE POINTER
	DCA	PRSERR		/SAVE IT
	TAD	PRSERR		/GET IT BACK
	JMS I	[DPARS]		/PARSE OFF DEVICE NAME			/018 CJL
	JMP	RECS30		/ERROR IN DEVICE NAME			/018 CJL
	JMS I	[NOSP]		/CHECK IF BEGINNING OF FILE NAME	/014 CJL
	SKP			/GOT <EOL> HERE				/018 CJL
	JMP	RECS60		/SOMETHING ELSE ON LINE, ERROR		/014 CJL
	DCA	PRSERR		/SAVE CURRENT LINE POINTER		/018 CJL
	RPACK			/GET SEND/INIT PACKET FROM REMOTE
	JMS I	(DISPATCH)	/DISPATCH BASED ON RRTYP		/031 CJL
	RECS80-2		/TABLE ADDRESS				/027/031 CJL
	JMP	RECS60		/DON'T KNOW WHAT IT IS

/	GOT A SEND INIT PACKET.

RECS10,	JMS I	(INPSRV)	/OFF TO HANDLE INPUT
	JMP	RECS60		/ERROR RETURN

/	TAKE THE NON-ERROR RETURN.

RECS20,	ISZ	RECSRV		/BUMP FOR NON-ERROR RETURN
	TAD	PRSERR		/GET CURRENT CURSOR POSITION		/018 CJL
	DCA	LPTR		/UPDATE IT				/018 CJL
	JMP I	RECSRV

/	GOT ERROR IN DEVICE NAME.					/018 CJL

RECS30,	CLA CLL			/CLEAN UP				/018 CJL
	TAD	(DNERMSG)	/GET ERROR MESSAGE ADDRESS		/025 CJL
	JMP I	RECSRV		/TAKE ERROR RETURN			/018 CJL

/	TAKE THE ERROR RETURN.

RECS60,	CLA
	JMP I	RECSRV		/TAKE ERROR EXIT

/	DISPATCH TABLE.

RECS80,	STSIN;	RECS10		/SEND INIT PACKET DISPATCH
	STEOT;	RECS60		/END OF CONNECTION
	STBRK;	RECS20		/BREAK TRANSMISSION
	0

RECS90,	0			/TEMP FOR "RECSRV"
/	KEYBOARD LINE BUFFER.						/014 CJL

LINBUF,	ZBLOCK	LINSIZE		/LINE BUFFER

	PAGE								/014 CJL
/	ROUTINE TO SERVICE INPUT OF A FILE.

INPSRV,	0
	JMS I	(SETINI)	/SET UP INIT REGISTERS
	DCA	OFFLG		/INITIALIZE OUTPUT FILE FLAG		/036 CJL
	CIF	USRFLD		/GOTO USR FIELD				/037 CJL
	JMS I	[USRENTRY]	/CALL USER SERVICE ROUTINE		/037 CJL
	RESET			/RESET TABLES				/037 CJL
	DCA	CURSEQ		/RE-SET THE SEQUENCE NUMBER

	FPACK			/FORMAT A PACKET
	INIDAT			/PACKET DATA ADDRESS
	STACK			/"ACK" PACKET TYPE


INPS01,	SPACK			/SEND A PACKET
	1			/AWAIT RESPONSE
	INPS91-2		/DISPATCH TABLE ADDRESS			/027 CJL

/	NAK OR UNDEFINED RESPONSE HERE.

INPS02,	ISZ	RTRYC		/GOT A NAK, CHECK RE-TRY COUNT
	JMP	INPS01		/RE-TRY THE INIT
	JMS	INPERROR	/GIVE UP				/025 CJL

	IER02=	.		/ERROR TABLE ADDRESS			/039 CJL

INPS03,	FPACK			/FORMAT A PACKET
	NODATA			/NO DATA
	STACK			/"ACK" PACKET TYPE

INPS05,	SPACK			/SEND A PACKET
	1			/AWAIT RESPONSE
	INPS90-2		/DISPATCH TABLE ADDRESS			/027 CJL
	JMS	INPERROR	/UNDEFINED RESPONSE			/025 CJL

	IER05=	.		/ERROR TABLE ADDRESS			/039 CJL

/	GOT A DATA PACKET, WRITE TO OUTPUT FILE.

INPS10,	TAD	OFFLG		/CHECK THE OUTPUT FILE FLAG
	SNA CLA			/SKIP IF OUTPUT FILE OPEN
	JMS	INPERROR	/ABORT AND EXIT				/025 CJL
IER10,	JMS I	(WRIPAK)	/WRITE THE PACKET TO THE FILE		/039 CJL
	JMS	INPERROR	/ERROR WRITING PACKET			/025 CJL
IER11,	JMP	INPS03		/LOOP					/039 CJL
/	GOT A FILE HEADER PACKET, OPEN FILE.

INPS20,	TAD	OFFLG		/CHECK IF OUTPUT FILE OPEN
	SZA CLA			/SKIP IF NO
	JMS	INPERROR	/ABORT IF FILE ALREADY OPEN		/025 CJL
IER20,	TAD I	[RRLEN]		/GET CURRENT PACKET LENGTH		/039 CJL
	TAD	(-40-3		/CALCULATE LENGTH OF DATA
	SPA			/SKIP IF DATA IN THE PACKET
	JMS	INPERROR	/ELSE AN ERROR				/025 CJL
IER21,	TAD	(RRDTA)		/CALCULATE LAST BYTE IN DATA		/039 CJL
	DCA	INPS81		/STORE IN POINTER
	NL7777			/SET -1					/032 CJL
	DCA I	INPS81		/TERMINATE NAME WITH A MINUS WORD
	TAD	(FNBLK		/GET ADDRESS OF FILE NAME BLOCK
	DCA	FNPTR		/SAVE FOR NAME PARSE
	TAD	(RRDTA		/GET ADDRESS OF DATA IN PACKET
	JMS I	[PFNAM]		/PARSE OFF THE FILE NAME
	JMS	INPERROR	/ERROR IN FILE NAME			/025 CJL

/	GET TARGET DEVICE.

IER23,	CLA CLL			/CLEAR AC FROM FILE NAME PARSE		/039 CJL
	TAD	DEVNUM		/GET DEVICE NUMBER PARSED		/006
	DCA	ODNUMB		/SAVE OUTPUT DEVICE NUMBER
	TAD	ODNUMB		/GET NUMBER BACK
	JMS I	[HFETCH]	/FETCH HANDLER FOR THIS DEVICE
	JMS	INPERROR	/HANDLER FETCH ERROR			/025 CJL
IER24,	TAD	(FNBLK)		/GET ADDRESS OF FILE NAME BLOCK		/039 CJL
	DCA	INPS22		/PUT IN CALL
	TAD	ODNUMB		/GET DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD				/020 CJL
	JMS I	[USRENTRY]	/CALL USER SERVICE ROUTINE		/035 CJL
	ENTER			/ENTER TENTATIVE FILE			/020 CJL
INPS22,	0			/
	0			/
	JMS	INPERROR	/NO DIRECTORY ROOM			/025 CJL
IER22,	TAD	INPS22		/GET NEW FILE START BLOCK		/039 CJL
	DCA	FSBLK		/SAVE
	TAD	INPS22+1	/GET INDICATED MAXIMUM FILE SIZE	/021 CJL
	IAC			/GIVE ONE MORE THAN 2 LESS		/021 CJL
	DCA	FLEN		/SAVE AS DANGER COUNT			/021 CJL
	ISZ	OFFLG		/SET FLAG FOR OUTPUT FILE OPEN
	NL7777			/INDICATE INITIALIZATION		/020 CJL
	JMS I	[PUTBYTE]	/INITIALIZE OUTPUT FILE ROUTINE		/020 CJL
	HLT			/THIS CAN'T HAPPEN!			/020 CJL
	TAD	FNPTR		/GET POINTER TO 6 BIT FILE NAME
	JMS I	[FILN8]		/MAKE 8 BIT FORMATTED STRING
	JMS I	[SCRIBE]	/TELL THEM
	FRECMSG			/WE ARE RECEIVING
	PRI8B;	NAMBUF		/WHICH FILE WE ARE RECEIVING
	JMS I	[SCRIBE]	/DO A
	CRLF			/<CR>, <LF>
	JMP	INPS03		/LOOP
/	GOT AN END OF FILE PACKET.

INPS30,	TAD	OFFLG		/ANY OUTPUT FILE OPEN?
	SNA CLA			/SKIP IF YES
	JMS	INPERROR	/ERROR					/025 CJL
IER30,	JMS I	[FILCLOSE]	/CLOSE THE FILE				/020/039 CJL
	JMS	INPERROR	/ERROR CLOSING THE FILE			/025 CJL
IER31,/	DCA	OFFLG		/RE-SET FILE OPEN FLAG			/D009/039 CJL
	JMP	INPS03		/CONTINUE

/	GOT AN END OF TRANSMISSION PACKET.

INPS40,	TAD	OFFLG		/WAS A FILE OPEN?
	SZA CLA			/SKIP IF NO
	JMS I	[FILCLOSE]	/CLOSE ANY OPEN FILE			/020 CJL
	NOP			/ERROR CLOSING THE FILE **** FIX THIS ****
	FPACK			/FORMAT A PACKET
	NODATA			/NO DATA IN PACKET
	STACK			/"ACK" PACKET TYPE

	SPACK			/SEND THE PACKET
	0			/NO RESPONSE
	ISZ	INPSRV		/BUMP RETURN FOR NO ERROR
	JMP I	INPSRV		/TAKE NON-ERROR EXIT

/	GOT AN ERROR PACKET.

INPS50,	JMS I	[PRIPAK]	/PRINT THE PACKET DATA
	JMP I	INPSRV		/AND TAKE THE ERROR EXIT		/009/014 CJL

/	INPUT ERRORS COME HERE.						/025 CJL

INPERRO,.-.			/INPUT ERROR ROUTINE			/025 CJL
	FPACK			/FORMAT A PACKET			/025 CJL
	NODATA			/NO DATA				/025 CJL
	STBRK			/"BREAK LINK" PACKET TYPE		/025 CJL
	SPACK			/SEND THE PACKET			/025 CJL
	0			/NO RESPONSE				/025 CJL
	TAD	INPERROR	/GET CALLER				/025 CJL
	JMS I	[SRCHTABLE]	/TRY TO FIND A MATCH			/025 CJL
	INERTABLE-1-1		/IN ERROR TABLE				/025 CJL
	SNA			/SKIP IF FOUND PARTICULAR MESSAGE	/025 CJL
	TAD	(RERRMSG)	/ELSE USE GENERAL MESSAGE		/025 CJL
	JMP I	INPSRV		/TAKE ERROR RETURN			/025 CJL

/	TEMPS FOR "INPSRV".

INPS80,	0
INPS81,	0
	PAGE								/014 CJL
/	DISPATCH TABLES FOR "INPSRV".

INPS90,	STDAT;	INPS10		/HANDLE DATA PACKETS
	STEOF;	INPS30		/HANDLE EOF PACKET
	STEOT;	INPS40		/HANDLE END OF TRANSMISSION PACKET
	STFIL;	INPS20		/HANDLE FILE NAME PACKET
	STERR;	INPS50		/HANDLE ERROR PACKET
	0			/TERMINATE TABLE

INPS91,	STNAK;	INPS02		/HANDLE A NAK PACKET
	STFIL;	INPS20		/HANDLE FILE NAME PACKET
	STERR;	INPS50		/HANDLE ERROR PACKET
	0			/TERMINATE TABLE

/	INPUT ERROR MESSAGE DISPATCH TABLE.				/025/039 CJL

INERTAB,-IER05;	UPERMSG		/UNDEFINED PACKET ERROR			/025 CJL
	-IER11;	DSFLMSG		/DISK OVERFLOW ERROR			/042 CJL
	-IER22;	RIDEMSG		/DIRECTORY FULL ERROR			/025 CJL
	-IER23;	RFLNMSG		/RECEIVED FILE NAME ERROR		/025 CJL
	-IER24;	RHFEMSG		/HANDLER FETCH ERROR			/025 CJL
	-IER31;	FCLEMSG		/FILE CLOSE ERROR			/025 CJL
	0			/THIS ENDS THE LIST			/025 CJL
/	ROUTINE TO CHECK FOR AN ALPHABETIC OR NUMERIC CHAR.
/	ENTER WITH THE CHAR IN THE AC.
/	EXIT + 2 IF ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.
/	EXIT + 1 IF NON-ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.

ALPNUM,	0
	JMS	ALPHA		/CHECK FOR ALPHA FIRST
	SKP			/NON-ALPHA RETURN, MUST CHECK NUMERIC
	JMP	ALPNM1		/IS ALPHA, TAKE RETURN + 2
	JMS	NUMRC		/CHECK IF NUMERIC
	SKP			/NOT NUMERIC
ALPNM1,	ISZ	ALPNUM		/BUMP RETURN FOR ALPHA-NUMERIC
	JMP I	ALPNUM		/DONE


/	ROUTINE TO CHECK FOR AN ALPHABETIC CHARACTER.
/	ROUTINE ASSUMES UPPER CASE.
/	ENTER ROUTINE WITH CHAR IN THE AC.
/	EXIT + 2 IF THE CHAR IS ALPHABETIC WITH THE CHAR IN THE AC.
/	EXIT + 1 IF THE CHAR IS NOT ALPHABETIC WITH THE CHAR IN THE AC.

ALPHA,	0
	DCA	ALPHA1		/STORE THE CHAR FOR RETURN
	TAD	ALPHA1		/GET THE CHAR
	TAD	(-"Z!200-1)	/ADD ON UPPER LIMIT			/034 CJL
	CLL			/INIT LINK FOR A FLAG
	TAD	("Z-"A+1
	SZL			/SKIP IF NOT A LETTER
	ISZ	ALPHA		/IS A LETTER, BUMP RETURN
	CLA CLL			/CLEAR AC
	TAD	ALPHA1		/RESTORE CHAR IN THE AC
	JMP I	ALPHA		/TAKE PROPER RETURN

ALPHA1,	0			/TEMP FOR ALPHA ROUTINE

/	ROUTINE TO CHECK FOR A NUMERIC CHARACTER.
/	ENTER WITH THE CHAR TO CHECK IN THE AC.
/	EXIT + 2 IF NUMERIC WITH THE CHAR IN THE AC.
/	EXIT + 1 IF NON-NUMERIC WITH THE CHAR IN THE AC.

NUMRC,	0
	DCA	NUMRC1		/SAVE THE CHAR FOR RETURN
	TAD	NUMRC1		/GET THE CHAR BACK
	TAD	(-"9!200-1)	/ADD ON UPPER LIMIT			/034 CJL
	CLL			/INIT LINK FOR A FLAG
	TAD	["9-"0+1]						/016 CJL
	SZL			/SKIP IF NOT A DIGIT
	ISZ	NUMRC		/BUMP RETURN FOR NUMERIC
	CLA CLL			/CLEAR AC
	TAD	NUMRC1		/RESTORE CHAR IN THE AC
	JMP I	NUMRC		/DONE

NUMRC1,	0			/TEMP FOR NUMRC CHECK ROUTINE
/	ROUTINE TO WRITE THE CURRENT INPUT PACKET TO THE OUTPUT FILE.
/	ENTER:	NOTHING.
/	EXIT:	+ 2 = WRITE SUCCESSFUL.
/		+ 1 = WRITE NOT SUCCESSFUL.

WRIPAK,	0
	TAD I	[RRLEN]		/GET LENGTH OF PACKET
	TAD	(RRDTA-40-3	/CALCULATE END OF BUFFER
	DCA	W90		/PUT INTO POINTER
	DCA I	W90		/ZERO AFTER END OF BUFFER
	TAD	(RRDTA		/GET ADDRESS OF DATA
	DCA	W90		/PUT INTO POINTER

W10,	TAD I	W90		/GET A CHAR FROM PACKET
	SNA			/SKIP IF NOT END
	JMP	W60		/END, EXIT
	CIA			/NEGATE FOR COMPARE
	TAD	RQCTL		/COMPARE WITH CURRENT QUOTE CHAR
	SNA CLA			/SKIP IF NOT QUOTE CHAR
	JMP	W20		/IS QUOTE, HANDLE SPECIAL
	TAD	W92		/WAS LAST CHAR A QUOTE?
	SZA CLA			/SKIP IF NO
	TAD	(-100		/IT WAS, FIX UP THIS CHAR
	JMP	W25		/HANDLE REST BELOW

W20,	TAD	W92		/CURRENT CHAR A QUOTE, CHECK PREVIOUS
	SNA CLA			/SKIP IF YES
	JMP	W30		/JUST THIS CHAR IS QUOTE, SET FLAG

W25,	TAD I	W90		/GET CHAR FROM BUFFER
	JMS I	[PUTBYTE]	/OUTPUT TO FILE				/020 CJL
	JMP I	WRIPAK		/ERROR IN OUTPUT			/M020 CJL
	JMP	W35		/FINISH BELOW

W30,	NL0001 CLL		/GOTA SET FLAG FOR QUOTE CHARACTER	/032 CJL

W35,	DCA	W92		/SET UP QUOTE FLAG
	ISZ	W90		/BUMP POINTER
	JMP	W10		/LOOP

W60,	ISZ	WRIPAK		/BUMP RETURN FOR OK
	JMP I	WRIPAK		/DONE

W90,	0			/POINTER FOR "WRIPAK"
W92,	0			/TEMP FOR "WRIPAK"
/	TABLE SEARCH ROUTINE.						/025 CJL

/	CALLING SEQUENCE:

/	TAD	VALUE			/AC CONTAINS VALUE TO MATCH
/	JMS I	[SRCHTABLE]		/CALL ROUTINE
/	TABLE-2				/ADDRESS(TABLE)-2
/	RETURN				/ALWAYS RETURNS HERE

/	IF AC=0 THEN NO MATCH OCCURRED.

/	IF AC IS NON-ZERO, THEN AC CONTAINS CORRESPONDING VALUE TO MATCH WHICH IS ALSO
/	STORED IN TABLEJUMP.

/	TABLE FORMAT.

/	-VALUE;	CORRESPONDING VALUE	/TABLE PAIR
/	"";	""			/ADDITIONAL PAIRS AS NECESSARY
/	0				/ZERO TERMINATES THE TABLE

SRCHTAB,.-.				/TABLE SEARCH ROUTINE
	DCA	TABLEJUMP		/SAVE PASSED VALUE TO MATCH
	TAD I	SRCHTABLE		/GET PASSED POINTER ARGUMENT
	DCA	XR0			/STASH THE POINTER
	ISZ	SRCHTABLE		/BUMP PAST ARGUMENT
SRCHLUP,ISZ	XR0			/BUMP TO NEXT PAIR
	TAD I	XR0			/GET A TABLE VALUE
	SNA				/END OF TABLE?
	JMP I	SRCHTABLE		/YES, RETURN WITH CLEAR AC
	TAD	TABLEJUMP		/COMPARE TO DESIRED
	SZA CLA				/SKIP IF IT MATCHES
	JMP	SRCHLUP			/JUMP IF NOT
	TAD I	XR0			/GET CORRESPONDING VALUE
	DCA	TABLEJUMP		/STASH IT
	TAD	TABLEJUMP		/GET IT BACK
	JMP I	SRCHTABLE		/RETURN WITH CORRESPONDING VAUE IN AC

	PAGE								/014 CJL
	IFZERO	1	<

/	OS8 DIRECTORY FILE DATA SETUP.
/	ENTER WITH THE DIRECTORY DATE WORD IN THE AC.
/	EXIT WITH THE DATE IN THE BUFFER "DATBUF".

FILD8,	0
	DCA	FILD89		/SAVE THE DATE WORD
	TAD	FILD89		/GET DATA WORD
	AND	(7		/KEEP ONLY YEAR BITS
	TAD	(116		/ADD 78 YEARS
	MQL			/PUT INTO MQ REGISTER
	TAD	(DATEYR		/GET POINTER TO YEAR
	JMS	DECCON		/CONVERT TO ASCII DATE
	TAD	FILD89		/GET DATE WORD BACK
	CLL RTR			/SHIFT DAY DOWN
	RAR
	AND	(37		/KEEP ONLY DAY BITS
	MQL			/PUT IN MQ REGISTER
	TAD	(DATEDA		/GET POINTER TO DAY
	JMS	DECCON		/CONVERT TO ASCII DAY
	TAD	FILD89		/GET DATE WORD BACK
	BSW			/GET MONTH
	CLL RTR			/DOWN
	AND	(17		/KEEP ONLY MONTH BITS
	MQL			/INTO MQ REGISTER
	TAD	(DATEMO		/GET ADDRESS OF WHERE TO PUT MONTH
	JMS	DECCON		/CONVERT
	JMP I	FILD8		/ALL DONE

FILD89,	0			/TEMP FOR "FILD8"


/	ROUTINE  TO CONVERT A BINARY VALUE INTO A  TWO  DIGIT  ASCII  DECIMAL  NUMBER.
/	ENTER WITH WHERE TO STORE THE CONVERTED NUMBER IN THE AC AND THE NUMBER IN THE
/	MQ REGISTER.

DECCON,	0
	DCA	DECC20		/STORE THE POINTER
	TAD	("0&177-1	/GET AN ASCII ZERO
	DCA I	DECC20		/START OUT WITH A ZERO
	MQA			/GET THE BINARY VALUE
DECC01,	ISZ I	DECC20		/BUMP
	TAD	(-12		/SUB 10
	SMA			/SKIP IF NO MORE DIVISION
	JMP	DECC01		/ELSE KEEP GOING
	TAD	(12+"0&177	/CONVERT REMAINDER TO ASCII
	ISZ	DECC20		/BUMP POINTER
	DCA I	DECC20		/STORE
/	JMS	FMTDAT		/FORMAT FOR PRINTING			/D013
	JMP I	DECCON		/DONE

			>
	IFZERO	1	<

DECC20,	0			/LOCAL POINTER TO DECCON

/	ROUTINE TO SET UP THE DATE IN A MM-DD-YY FORMAT  TO  PUT IN FRONT OF A FILE TO
/	PASS THE FILES DATE (TEMPORY AND NOT PART OF THE KERMIT PROTOCOL).

FMTDAT,	0
	TAD	DATEMO		/GET FIRST CHAR OF DATE
	DCA	FDATE		/MOVE IT
	TAD	DATEMO+1
	DCA	FDATE+1
	TAD	DATEDA
	DCA	FDATE+3
	TAD	DATEDA+1
	DCA	FDATE+4
	TAD	DATEYR
	DCA	FDATE+6
	TAD	DATEYR+1
	DCA	FDATE+7
	JMP I	FMTDAT		/QUICK AND DIRTY

DATBUF,	"#&177			/FILE CREATION DATE ATTRIBUTE
	6+40			/LENGTH OF DATE (CHAR(X))
DATEYR,	0			/ASCII YEAR GOES HERE
	0
DATEMO,	0			/ASCII MONTH GOES HERE
	0
DATEDA,	0			/ASCII DAY GOES HERE
	0
	-1			/TERMINATE

/	FORMATTED DATE GOES HERE.

SETDAT,"ANGLEBRACKET&177	/COMMENT SIGN

FDATE,	0
	0
	"-&177
	0
	0
	"-&177
	0
	0
	12
	15
	-1

			>
/	DIRECTORY LOOKUP ROUTINE.					/028 CJL

/	CALLING SEQUENCE:

/	NL0001				/IF INITIALIZING THE DIRECTORY

/	OR

/	CLA				/CLEAR AC IF SUBSEQUENT CALL

/	JMS I	(LUKUP)			/CALL ROUTINE
/	I/O ERROR			/DIRECTORY I/O ERROR RETURN WITH AC DIRTY
/	NOT FOUND			/FILE NOT FOUND RETURN
/	FOUND				/LATEST FILE MATCHES REQUEST

/	SETS FLEN TO -(FILE LENGTH) IN RECORDS.

/	SETS FSBLK TO STARTING RECORD OF FILE.

/	MODIFIES DIRECTORY SEGMENT SLIGHTLY (NOT TO BE WRITTEN BACK).

/	DEPENDS ON DIRXR BEING UNTOUCHED BY OTHER ROUTINES.

LUKUP,	.-.				/DIRECTORY LOOKUP ROUTINE
	SNA				/INITIALIZING DIRECTORY?
	JMP	NXTFILE			/NO, JUST GET ANOTHER FILE IF POSSIBLE
NEXTSEG,DCA	DIRRECORD		/STORE LATEST DIRECTORY SEGMENT RECORD
	JMS I	HNDADR			/CALL I/O HANDLER
	PAGCNT^100+DIRFLD		/READ IN A DIRECTORY SEGMENT
	DIRBUFFER			/DIRECTORY I/O BUFFER
DIRRECO,.-.				/WILL BE LATEST SEGMENT NUMBER
	JMP I	LUKUP			/I/O ERROR, TAKE DIRTY IMMEDIATE RETURN
	CDF	DIRFLD			/GOTO DIRECTORY FIELD
	TAD I	(FRSTRECORD)		/GET FIRST RECORD OF FIRST ENTRY
	DCA	FSBLK			/STASH IT
	TAD	(ENTSTRT-1)		/POINT TO
	DCA	DIRXR			/ENTRIES
LOOKLUP,TAD I	DIRXR			/GET FIRST WORD OF ENTRY
	SNA				/SKIP IF NOT EMPTY
	JMP	EMPENTRY		/JUMP IF EMPTY ENTRY
	DCA	FNAME			/STORE FIRST FILENAME WORD
	TAD I	DIRXR			/GET NEXT
	DCA	FNAME+1			/STORE SECOND FILENAME WORD
	TAD I	DIRXR			/GET NEXT
	DCA	FNAME+2			/STORE THIRD FILENAME WORD
	TAD I	DIRXR			/GET NEXT
	DCA	FNAME+3			/STORE EXTENSION WORD
	NL7777				/BACKUP
	TAD I	(AIWNUMBER)		/GET ADDITIONAL INFORMATION WORD COUNT
	DCA	AIWCNT			/STASH THE COUNTER
DCADATW,DCA	DATWORD			/CLEAR THE DATE WORD
	TAD	DCADATW/(DCA	DATWORD)/GET STORING INSTRUCTION
	DCA	AIWSTORE		/STORE IN-LINE
	JMP	AIWTEST			/START LOOP THERE
AIWLUP,	TAD I	DIRXR		/GET A WORD FROM ENTRY
AIWSTOR,DCA	DATWORD+.-.	/STORE IN PROPER WORD
	ISZ	AIWSTORE	/BUMP TO NEXT INSTRUCTION
AIWTEST,ISZ	AIWCNT		/DONE ALL ADDITIONAL INFORMATION WORDS?
	JMP	AIWLUP		/NO, KEEP GOING
	TAD I	DIRXR		/GET THE FILE LENGTH
	SNA			/SKIP IF VALID
	JMP	TENTRY		/JUMP IF ONLY TENTATIVE FILE (NO LENGTH)
	DCA	FILENGTH	/STORE FILE LENGTH
	CDF	PRGFLD		/BACK TO OUR FIELD
/	JMS I	(FILTER)	/CHECK IF WE LIKE THIS ONE
	TAD	(FNAME)		/POINT TO LATEST FILENAME
	JMS I	(FMATCH)	/CHECK FOR A MATCH
	JMP	NXTFILE		/FORGET THIS ONE, IT DIDN'T MATCH
	TAD	FILENGTH	/GET FILE LENGTH
	DCA	FLEN		/GIVE TO CALLER TO DESTROY
	TAD	(FNAME)		/POINT TO FILENAME
	JMS I	[FILN8]		/PUT IN CHARACTER FORM IN BUFFER
	ISZ	LUKUP		/BUMP TO FILE MATCH RETURN
	JMP	FLEXIT		/EXIT THERE

/	COMES HERE FROM SUBSEQUENT CALL OR MATCH FAILURE.

NXTFILE,CDF	DIRFLD		/GOTO BUFFER FIELD
	TAD	FILENGTH	/GET LATEST FILE LENGTH
	SKP			/DON'T DO EMPTY LENGTH

/	COMES HERE TO BYPASS AN EMPTY ENTRY.

EMPENTR,TAD I	DIRXR		/GET LENGTH OF EMPTY
	CIA			/WANT POSITIVE FORM
	TAD	FSBLK		/UPDATE TO NEXT FILE RECORD
	DCA	FSBLK		/STORE UPDATED VALUE
TENTRY,	ISZ I	(FILECNT)	/DONE WITH THIS SEGMENT?
	JMP	LOOKLUP		/NO, KEEP GOING
	TAD I	(DIRLINK)	/GET LINK TO NEXT SEGMENT
	CDF	PRGFLD		/BACK TO OUR FIELD
	SZA			/END OF DIRECTORY?
	JMP	NEXTSEGMENT	/NO, GO DO NEXT SEGMENT
FLEXIT,	ISZ	LUKUP		/BUMP PAST I/O ERROR EXIT
	JMP I	LUKUP		/RETURN FOR FILE NOT FOUND

AIWCNT,	.-.			/ADDITIONAL INFORMATION WORD COUNTER
DATWORD,.-.			/DATE WORD STORED HERE (0000 IF NONE)
	ZBLOCK	7		/ROOM FOR MORE ADDITIONAL INFORMATION WORDS
FILENGT,.-.			/LATEST FILE LENGTH
FNAME,	ZBLOCK	4		/FILENAME AND EXTENSION STORED HERE

	PAGE
/	OS/8 FILE UNPACK ROUTINE.					/019 CJL

/	THIS ROUTINE UNPACKS BYTES FROM THE INPUT FILE ACCORDING TO THE  CURRENT VALUE
/	OF FILMODE:

/	FILMODE CONTAINS 0177 (ASCII MODE).  ALL BYTES ARE TREATED AS SEVEN-BIT  ASCII
/	CHARACTERS BY STRIPPING THE HIGH-ORDER BIT.  END OF FILE IS THE <^Z> CHARACTER
/	WHICH  WILL  BE  SENT  OR  NOT  ACCORDING  TO  THE  CONTENTS OF OCTLZFLAG.  IF
/	OCTLZFLAG CONTAINS  NON-ZERO,  THEN <^Z> WILL BE SENT AT <EOF>;  THE NEXT CALL
/	WILL YIELD THE  <EOF>  RETURN.   IF OCTLZFLAG CONTAINS ZERO, THEN DETECTION OF
/	<^Z> YIELDS THE <EOF> RETURN IMMEDIATELY.

/	FILMODE CONTAINS 4377 (BINARY  MODE).    ALL  BYTES  ARE  TREATED AS EIGHT-BIT
/	CHARACTERS AND WILL BE SENT  WITHOUT <^Z> CHECK.  THE NEXT CALL AFTER THE LAST
/	BYTE OF THE LAST RECORD HAS BEEN SENT YIELDS THE <EOF> RETURN.

/	CALLING CONSIDERATIONS:

/	OCTLZFLAG MUST BE SETUP ACCORDINGLY IF IN ASCII MODE.

/	FILMODE MUST BE SETUP ACCORDINGLY.

/	FLEN MUST CONTAIN -(FILE LENGTH IN  RECORDS) WHEN INITIALIZING THE INPUT FILE.
/	IT WILL BE MODIFIED BY CALLING THIS ROUTINE.

/	FSBLK MUST CONTAIN THE THE STARTING RECORD WHEN INITIALIZING THE INPUT FILE.

/	HNDADR MUST ALREADY BE SETUP TO CALL THE INPUT HANDLER.

/	CALLING SEQUENCE:

/	CLA				/OR NL7777 IF INITIALIZING THE INPUT FILE
/	JMS I	(GETBYTE)		/CALL ROUTINE
/	I/O ERROR RETURN		/FATAL INPUT ERROR OCCURRED; AC CONTAINS JUNK
/	END OF FILE			/<EOF> OCCURRED
/	GOOD RETURN			/AC CONTAINS LATEST SEVEN/EIGHT-BIT CHARACTER

GETBYTE,.-.				/GET A BYTE ROUTINE
	SNA CLA				/INITIALIZING?
	JMP I	PUTC			/NO, GO GET NEXT BYTE
	TAD	FSBLK			/GET STARTING RECORD OF INPUT FILE
	DCA	GETRECORD		/STORE IN-LINE
GETNEWR,JMS I	HNDADR			/CALL I/O HANDLER
	PAGCNT^100+BUFFLD		/READ SOME PAGES INTO BUFFER FIELD
GETCORE,FILBUFFER			/BUFFER ADDRESS
GETRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP I	GETBYTE			/INPUT ERROR!
	TAD	GETCORE/(FILBUFFER)	/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
GETLOOP,DCA	THIRD			/CLEAR THIRD BYTE NOW
	JMS	PUTONE			/OBTAIN AND SEND BACK FIRST BYTE
	JMS	PUTONE			/OBTAIN AND SEND BACK SECOND BYTE
	TAD	THIRD			/GET THIRD BYTE
	JMS	PUTC			/SEND IT BACK
	TAD	BUFPTR			/GET THE POINTER
	TAD	(-PAGCNT^200-FILBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	GETLOOP			/KEEP GOING
	ISZ	GETRECORD		/BUMP TO NEXT RECORD
	ISZ	FLEN			/DONE ALL RECORDS? (BINARY MODE ONLY)
	JMP	GETNEWRECORD		/NO, GO DO ANOTHER ONE

/	BINARY <EOF> REACHED HERE.

	JMP	GETEOF			/TAKE SKIP RETURN TO MAIN CALLER

PUTONE,	.-.				/SEND BACK A BYTE ROUTINE
	CDF	BUFFLD			/GOTO BUFFER FIELD
	TAD I	BUFPTR			/GET LATEST WORD
	AND	[7400]			/JUST THIRD-BYTE NYBBLE
	CLL RAL				/MOVE UP
	TAD	THIRD			/GET OLD NYBBLE (IF ANY)
	RTL;RTL				/MOVE UP NYBBLE BITS
	DCA	THIRD			/SAVE FOR NEXT TIME
	TAD I	BUFPTR			/GET LATEST WORD AGAIN
	JMS	PUTC			/SEND BACK CURRENT BYTE
	ISZ	BUFPTR			/BUMP TO NEXT WORD
	JMP I	PUTONE			/RETURN

PUTC,	.-.				/SEND BACK LATEST BYTE ROUTINE
	CDF	PRGFLD			/BACK TO OUR FIELD
	RAL				/MOVE UP
	STL RAR				/MOVE DOWN WITH BIT[0] SET
	AND	FILMODE			/KEEP ONLY GOOD BITS
	TAD	[-CNTRLZ]		/COMPARE TO <^Z>
	SNA				/SKIP IF NOT ASCII MODE <EOF>
	JMP	GETEND			/JUMP IF ASCII MODE <EOF>
GETUPZ,	TAD	[CNTRLZ]		/RESTORE THE CHARACTER
	AND	[377]			/ENSURE EIGHT-BIT (MIGHT ALREADY BE SEVEN-BIT)
	ISZ	GETBYTE			/BUMP PAST <EOF> RETURN
GETEOF,	ISZ	GETBYTE			/BUMP PAST I/O ERROR RETURN
	JMP I	GETBYTE			/RETURN TO MAIN CALLER

/	GOT <Z> IN ASCII MODE.

GETEND,	TAD	OCTLZFLAG		/GET <^Z> DISPOSITION FLAG
	SNA CLA				/SKIP IF SET
	JMP	GETEOF			/JUST RETURN <EOF> CONDITION
	TAD	(GETEOF)		/POINT TO <EOF>
	DCA	PUTC			/FOR NEXT TIME
	JMP	GETUPZ			/GIVE THEM BACK <^Z> THIS TIME
/	OS/8 FILE PACK ROUTINE.						/020 CJL

/	THIS ROUTINE PACKS BYTES INTO THE OUTPUT  FILE  ACCORDING TO THE CURRENT VALUE
/	OF FILMODE:

/	FILMODE CONTAINS 0177 (ASCII MODE).  ALL BYTES  ARE TREATED AS SEVEN-BIT ASCII
/	CHARACTERS BY STRIPPING THE HIGH-ORDER BIT.

/	FILMODE  CONTAINS  4377  (BINARY MODE).  ALL BYTES ARE  TREATED  AS  EIGHT-BIT
/	CHARACTERS AND WILL BE WRITTEN AS IS.

/	CALLING CONSIDERATIONS:

/	FILMODE MUST BE SETUP ACCORDINGLY.

/	FLEN  MUST  CONTAIN  -(MAXIMUM  FILE LENGTH IN RECORDS) WHEN INITIALIZING  THE
/	TENTATIVE OUTPUT FILE.  IT WILL BE MODIFIED BY CALLING THIS ROUTINE.

/	FSBLK  MUST CONTAIN THE STARTING RECORD WHEN INITIALIZING THE TENTATIVE OUTPUT
/	FILE.

/	HNDADR MUST ALREADY BE SETUP TO CALL THE OUTPUT HANDLER.

/	CALLING SEQUENCE:

/	NL7777				/ANY NEGATIVE VALUE
/	JMS I	[PUTBYTE]		/CALL ROUTINE TO INITIALIZE
/	IMPOSSIBLE			/CAN'T RETURN HERE
/	GOOD RETURN			/ALWAYS RETURNS HERE

/	OR

/	TAD	(CHAR&377)		/ANY EIGHT-BIT (OR LESS) VALUE
/	JMS I	[PUTBYTE]		/CALL ROUTINE TO PACK A CHARACTER
/	ERROR RETURN			/I/O ERROR WHILE WRITING A BUFFER
/	GOOD RETURN			/CHARACTER PACKED WITH NO ERRORS

/	ALL RETURNS CLEAR THE AC.

PUTBYTE,.-.				/OUTPUT A BYTE ROUTINE
	SPA				/ARE WE INITIALIZING?
	JMP	PUTINITIALIZE		/YES
	AND	FILMODE			/REDUCE TO SEVEN-BIT/EIGHT-BIT
	DCA	LATEST			/SAVE LATEST CHARACTER
	CDF	BUFFLD			/GOTO BUFFER FIELD
	TAD	LATEST			/GET LATEST CHARACTER
	JMP I	PUTNEXT			/GO WHERE YOU SHOULD GO

PUTNEXT,.-.				/EXIT ROUTINE
	ISZ	PUTBYTE			/BUMP TO GOOD RETURN
PUTERRO,CLA CLL				/CLEAN UP
	CDF	PRGFLD			/BACK TO OUR FIELD
	JMP I	PUTBYTE			/RETURN TO MAIN CALLER
PUTINIT,CLA				/CLEAN UP
	TAD	FSBLK			/GET STARTING RECORD OF TENTATIVE FILE
	DCA	PUTRECORD		/STORE IN-LINE
	DCA I	(FLENGTH)		/CLEAR ACTUAL FILE LENGTH
PUTNEWR,TAD	PUTCORE/(FILEBUFFER)	/SETUP THE
	DCA	BUFPTR			/BUFFER POINTER
PUTLOOP,JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	TAD	BUFPTR			/GET POINTER VALUE
	DCA	TEMPTR			/SAVE FOR LATER
	ISZ	BUFPTR			/BUMP TO NEXT
	JMS	PUTNEXT			/GET A CHARACTER
	DCA I	BUFPTR			/STORE IT
	JMS	PUTNEXT			/GET A CHARACTER
	RTL;RTL				/MOVE UP
	AND	[7400]			/ISOLATE HIGH NYBBLE
	TAD I	TEMPTR			/ADD ON FIRST BYTE
	DCA I	TEMPTR			/STORE COMPOSITE
	TAD	LATEST			/GET LATEST CHARACTER
	RTR;RTR;RAR			/MOVE UP AND
	AND	[7400]			/ISOLATE LOW NYBBLE
	TAD I	BUFPTR			/ADD ON SECOND BYTE
	DCA I	BUFPTR			/STORE COMPOSITE
	ISZ	BUFPTR			/BUMP TO NEXT
	TAD	BUFPTR			/GET LATEST POINTER VALUE
	TAD	(-PAGCNT^200-FILBUFFER)	/COMPARE TO LIMIT
	SZA CLA				/SKIP IF AT END
	JMP	PUTLOOP			/KEEP GOING
	CDF	PRGFLD			/BACK TO OUR FIELD
	ISZ	FLEN			/TOO MANY RECORDS?
	SKP				/SKIP IF NOT
	JMP I	PUTBYTE			/TAKE ERROR RETURN
	JMS I	HNDADR			/CALL I/O HANDLER
	PAGCNT^100+BUFFLD+WRITE		/WRITE SOME PAGES FROM BUFFER FIELD
PUTCORE,FILBUFFER			/BUFFER ADDRESS
PUTRECO,.-.				/WILL BE LATEST RECORD NUMBER
	JMP	PUTERROR		/OUTPUT ERROR!
	ISZ I	(FLENGTH)		/BUMP ACTUAL LENGTH
	ISZ	PUTRECORD		/BUMP TO NEXT RECORD
	JMP	PUTNEWRECORD		/KEEP GOING

BUFPTR,	.-.				/INPUT/OUTPUT BUFFER POINTER

/	ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG.

OCTLZFL,OCLOSE				/ZERO=DON'T SEND <^Z> AT <EOF>,
					/NON-ZERO=SEND <^Z> AT <EOF>

	THIRD=	PUTNEXT			/THIRD BYTE TEMPORARY

	TEMPTR=	PUTONE			/TEMPORARY BUFFER POINTER
	PAGE
/	OUTPUT FILE CLOSE ROUTINE					/020 CJL

/	THIS  ROUTINE  CLOSES  THE OPEN OUTPUT FILE ACCORDING TO THE CURRENT VALUE  OF
/	FILMODE:

/	FILMODE  CONTAINS  0177  (ASCII  MODE).  ALL BYTES PRIOR TO CLOSE ARE STRIPPED
/	SEVEN-BIT CHARACTERS.    IF  THE  LAST  CHARACTER SENT TO PUTBYTE (CONTENTS OF
/	LATEST) IS A  <^Z>,  THEN  JUST  CLOSE THE FILE.  IF NOT, THEN IF ICTLZFLAG IS
/	NON-ZERO, INSERT A <^Z>  CHARACTER INTO THE FILE AS <EOF> INDICATOR, ELSE JUST
/	CLOSE THE FILE.

/	FILMODE CONTAINS 4377 (BINARY MODE).    ALL BYTES PRIOR TO CLOSE ARE EIGHT-BIT
/	CHARACTERS.  IF NECESSARY, <NUL> CHARACTERS WILL BE APPENDED TO THE END OF THE
/	LAST BLOCK OF THE FILE TO FILL IT.  THE FILE IS CLOSED OTHERWISE UNMODIFIED.

/	CALLING CONSIDERATIONS.

/	OFFLG MUST BE SET (OUTPUT FILE IS OPEN).

/	FLENGTH MUST CONTAIN THE ACTUAL FILE LENGTH.

/	LATEST MUST CONTAIN THE LAST BYTE SENT  TO  THE OUTPUT FILE VIA PUTBYTE (ASCII
/	MODE ONLY).

/	ICTLZFLAG MUST BE SETUP ACCORDINGLY.

/	FILMODE MUST BE SETUP ACCORDINGLY.

/	CALLING SEQUENCE:

/	CLA CLL			/CLEAR AC
/	JMS I	(FILCLOSE)	/CALL ROUTINE
/	ERROR RETURN		/ERROR WHILE CLOSING FILE
/	GOOD RETURN		/FILE CLOSED PROPERLY

/	ON RETURN, OFFLG WILL BE CLEAR; THE AC WILL BE CLEAR ALSO.

FILCLOS,.-.			/OUTPUT FILE CLOSE ROUTINE
	TAD	FILMODE		/GET CURRENT FILE MODE
	SPA CLA			/SKIP IF ASCII
	JMP	CLOSIT		/JUMP IF BINARY
	TAD	LATEST		/GET LATEST CHARACTER
	TAD	[-CNTRLZ]	/COMPARE TO <^Z>
	SZA CLA			/SKIP IF <^Z> ALREADY IN FILE
	TAD	ICTLZFLAG	/GET <^Z> DISPOSITION FLAG
	SNA CLA			/SKIP IF SET
	JMP	CLOSIT		/JUMP IF NOT
	TAD	[CNTRLZ]	/GET A <^Z>
CLOSLUP,JMS I	[PUTBYTE]	/OUTPUT A BYTE
	JMP	CLOSERROR	/ERROR WHILE WRITING
CLOSIT,	TAD I	(BUFPTR)	/GET THE BUFFER POINTER
	TAD	(-FILBUFFER)	/COMPARE TO RESET VALUE
	SZA CLA			/SKIP IF IT MATCHES
	JMP	CLOSLUP		/ELSE KEEP GOING
	TAD	ODNUMBER	/GET OUTPUT DEVICE NUMBER
	CIF	USRFLD		/GOTO USR FIELD
	JMS I	[USRENTRY]	/CALL USER SERVICE ROUTINE		/035 CJL
	CLOSE			/CLOSE FILE
	FNBLK			/=> FILENAME
FLENGTH,.-.			/ACTUAL FILE LENGTH
CLOSERR,SKP CLA			/ERROR WHILE CLOSING THE FILE
	ISZ	FILCLOSE	/BUMP RETURN IF NO ERRORS
	DCA	OFFLG		/CLEAR OUTPUT FILE OPEN FLAG
	JMP I	FILCLOSE	/RETURN TO CALLER

/	ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG.

ICTLZFL,ICLOSE			/ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z>
				/IF LAST CHARACTER WASN'T <^Z>
/	SEND PROCESSING

SNDPRO,	0
	TAD	INIFLG		/CHECK IF SEND/INIT HAS BEEN DONE
	SZA CLA			/SKIP IF NO
	JMP	SNDP10		/RIGHT INTO FILE TRANSFER
	TAD	(DEFCK		/SET UP DEFAULT CHECKSUM
	DCA	RCHKT
	TAD	(DEFEOL		/GET DEFAULT EOL
	DCA	REOL		/AND SET IT
	TAD	(DEFQCTL	/GET DEFAULT QUOTE CONTROL CHAR
	DCA	RQCTL		/AND SET IT UP
	TAD	(DEFMAXL+40	/GET DEFAULT MAX BUFFER SIZE
	DCA	RMAXL		/SET IT UP
	DCA	CURSEQ		/RE-SET SEQUENCE NUMBER
	JMS I	(SNDI00)	/HANDLE "SEND-INIT"
	JMP I	SNDPRO		/TAKE ERROR RETURN			/014 CJL

/	SEND FILE HEADER DISPATCH ROUTINE

SNDP10,	FPACK			/FORMAT A PACKET
	NAMBUF			/ADDRESS OF FILE HEADER FOR DATA
	STFIL			/"FIL" PACKET TYPE

SNDP11,	SPACK			/SEND A PACKET
	1			/AWAIT RESPONSE
	SNDP96-2		/DISPATCH TABLE ADDRESS			/026 CJL

/	GOT A NAK OR UNDEFINED HERE

SNDP12,	ISZ	RTRYC		/BUMP THE COUNTER
	JMP	SNDP11		/TRY AGAIN
	JMP I	SNDPRO		/TAKE ERROR RETURN			/014 CJL

/	FILE CREATION DATE HANDLING

SNDP15,	IFZERO	1	<

	TAD	RCAPAS		/CHECK IF REMOTE SUPPORTS FILE
	AND	(10		/  ATTRIBUTES
	SNA CLA			/SKIP IF YES
	JMP	SNDP20		/SKIP IF NO
	FPACK			/FORMAT PACKET
	DATBUF			/DATE DATA
	STATT			/"ATT" PACKET TYPE

SNDP16,	SPACK			/SEND THE PACKET
	1			/AWAIT RESPONSE
	SNDP98-2		/DISPATCH TABLE ADDRESS			/027 CJL
	JMP I	SNDPRO		/TAKE ERROR RETURN			/014 CJL

			>
/	GOT ACK HERE

SNDP20,	JMS I	[SCRIBE]	/TELL THEM				/025 CJL
	FSENMSG			/WE ARE SENDING				/025 CJL
	PRI8B;	NAMBUF		/TELL THEM THE NAME OF THE FILE
	JMS I	[SCRIBE]	/DO A					/025 CJL
	CRLF			/<CR>, <LF>				/025 CJL
	JMS	SLOOP
	SKP			/ERROR RETURN
	ISZ	SNDPRO		/BUMP FOR NON-ERROR EXIT
	JMP I	SNDPRO
/	DATA SEND LOOP.
/	ROUTINE TO GET CHARS FROM THE INPUT BUFFER AND SEND THEM TO REMOTE
/	VIA PACKET TRANSFERS.  RETURN + 1 IF ERROR, + 2 IF DONE.

SLOOP,	0
	JMS I	(INIOPB)	/INIT OUTPUT PACKET HOLD BUFFER
	NL7777			/INITIALIZE INPUT FILE ROUTINE		/019 CJL
SLOP01,	JMS I	(GETBYTE)	/GET A FILE CHARACTER			/019 CJL
	JMP I	SLOOP		/FATAL I/O ERROR			/026 CJL
	JMP	SLOP15		/HERE ON EOF
	JMS I	(OPBUF)		/PUT INTO PACKET BUFFER
	SKP			/RETURN HERE ON BUFFER FULL
	JMP	SLOP01		/RETURN HERE IF STILL ROOM

/	PACKET IS FULL HERE, WE MUST SEND IT.

	FPACK			/FORMAT A PACKET
	HOLDBF			/DATA ADDRESS
	STDAT			/"DAT" PACKET TYPE

SLOP05,	SPACK			/SEND PACKET
	1			/AWAIT RESPONSE
	SLOP90-2		/RESPONSE TABLE ADDRESS			/027 CJL

/	HERE ON NAK OR FALL THRU ON UNDEFINED RESPONSE ABOVE.

SLOP10,	ISZ	RTRYC		/BUMP THE RE-TRY COUNTER
	JMP	SLOP05		/TRY AGAIN
	JMP I	SLOOP		/TAKE ERROR RETURN			/026 CJL

/	HERE ON END OF FILE  --  SEND THEM WHAT WE HAVE.

SLOP15,	TAD I	(OP2)		/GET THE POINTER			/052 CJL
	TAD	(-HOLDBF)	/COMPARE TO EMPTY VALUE			/052 CJL
	SNA CLA			/SKIP IF NOT EMPTY			/052 CJL
	JMP	SLOP35		/JUMP IF EMPTY				/052 CJL
	FPACK			/FORMAT A PACKET
	HOLDBF			/ADDRESS OF DATA
	STDAT			/"DAT" PACKET TYPE

SLOP20,	SPACK			/SEND A PACKET
	1			/AWAIT RESPONSE
	SLOP92-2		/DISPATCH TABLE ADDRESS			/027 CJL

/	NAK FOR LAST PACKET.		

SLOP25,	ISZ	RTRYC		/BUMP RE-TRY COUNTER
	JMP	SLOP20		/TRY AGAIN
	JMP I	SLOOP		/TAKE ERROR RETURN			/026 CJL
/	ACK FOR FINAL PACKET, SEND AN EOF PACKET.

SLOP35,	JMS I	[SNDP]		/SEND A PACKET
	NODATA			/NO DATA
	STEOF			/MAKE IT AN EOF PACKET
	JMP I	SLOOP		/NAK, TAKE ERROR RETURN
	JMP I	SLOOP		/OTHER THAN ACK, NAK; TAKE ERROR RETURN	/026 CJL
	ISZ	SLOOP		/EOF ACCEPTED, BUMP FOR GOOD RETURN
	JMP I	SLOOP		/TAKE GOOD RETURN

	PAGE
SLOP90,	STACK;	SLOP01		/ACK, CONTINUE
	STNAK;	SLOP10		/NAK, HANDLE
	0

SLOP92,	STACK;	SLOP35		/ACK, CONTINUE
	STNAK;	SLOP25		/NAK, HANDLE
	0

/	COMMAND DISPATCH TABLE FOR SEND SERVICE.

SNDP96,	STACK;	SNDP15		/FILE HEADER ACKNOWLEDGED
	STNAK;	SNDP12		/NAK RETURNED, RE-TRY
	0			/END OF TABLE

SNDP98,	STACK;	SNDP20		/DATE ATTRIBUTE ACKNOWLEDGED
	0			/END OF TABLE
/	ROUTINE TO HANDLE A "SEND-INIT" COMMAND.
/	RETURN + 1 IF ERROR.
/	RETURN + 2 IF SUCCESSFUL.

SNDI00,	0
	FPACK			/FORMAT A PACKET
	INIDAT			/ADDRESS OF DATA FOR PACKET
	STSIN			/"SIN" PACKET TYPE

SNDI02,	SPACK			/SEND A PACKET
	1			/AWAIT RESPONSE
	SNDI80-2		/RESPONSE TABLE TYPE			/027 CJL

/	HERE ON NAK OR UNDEFINED.

SNDI05,	ISZ	RTRYC		/BUMP RE-TRY COUNTER
	JMP	SNDI02		/TRY AGAIN
	JMP I	SNDI00		/TAKE ERROR EXIT

/	HERE ON ACK.

SNDI10,	JMS	SETINI		/SET UP THE INIT REGISTERS
	NL0001 CLL		/NOW FLAG THE SEND/INIT DONE		/032 CJL
	DCA	INIFLG		/BY MAKING THIS NON-ZERO
	ISZ	SNDI00		/BUMP FOR NON-ERROR RETURN
	JMP I	SNDI00		/BACK TO MAIN SEND PROCESSING

SNDI80,	STACK;	SNDI10		/GOT AN ACK
	STNAK;	SNDI05		/NAK
	0			/END OF TABLE


/	ROUTINE TO MOVE THE SEND/INIT OR RECEIVE/INIT PACKET INTO THE INIT REGISTERS.

SETINI,	0
	TAD	(RMAXL		/GET ADDRESS OF RECEIVE INIT REGISTERS
	DCA	MQ		/SETUP FOR CLEAR ROUTINE		/032 CJL
	TAD	(RMAXL-INITEND)	/GET -(NUMBER OF REGISTERS)		/022 CJL
	CLEAR			/CLEAR OUT A CHUNK OF MEMORY		/M013
/	TAD	(RMAXL		/GET ADDRESS OF RECEIVE INIT REGISTERS
/	DCA	MQ		/SETUP FOR MOVE ROUTINE			/032 CJL
	TAD I	[RRLEN]		/GET LENGTH OF PACKET JUST INPUT
	TAD	(-40-4		/COUNT OF DATA RECEIVED
	TAD	(RMAXL-INITEND)	/COMPARE TO MAXIMUM ALLOWED		/022 CJL
	SMA SZA			/SKIP IF NOT TOO MANY			/022 CJL
	CLA			/ELSE USE ALLOWED MAXIMUM		/022 CJL
	TAD	(INITEND-RMAXL)	/RESTORE VALUE				/022 CJL
	CIA			/MAKE IT NEGATIVE
	DCA	MOVE4		/SAVE FOR "MOVE" ROUTINE
	TAD	(RRDTA		/ADDRESS OF DATA IN PACKET
	MOVE			/MOVE THE INIT REGISTERS
	JMP I	SETINI		/DONE
	IFZERO	1	<						/D013

/	ROUTINE TO SEND THE DATE IN A DATA PACKET.
/	RETURN + 1 IF ERROR, + 2 IF SUCCESSFUL.

DATOUT,	0
	JMS	INIOPB		/INSURE PACKET HOLD BUFFER INITIALIZED
	TAD	(SETDAT		/GET ADDRESS OF DATE
	DCA	DATOU9		/PUT INTO POINTER

DATOU1,	TAD I	DATOU9		/GET A CHAR
	ISZ	DATOU9		/BUMP POINTER
	SPA			/SKIP IF NOT ENT
	JMP	DATOU2		/DONE
	JMS	OPBUF		/PUT INTO HOLD BUFFER
	SKP			/HOLD FULL, SEND IT
	JMP	DATOU1		/LOOP

DATOU2,	CLA CLL			/INSURE CLEAR AC
	FPACK			/FORMAT A PACKET
	HOLDBF			/DATA ADDRESS
	STDAT			/DATA PACKET

DATOU3,	SPACK			/SEND THE PACKET
	1			/GET RESPONSE
	DATOU7-2		/DISPATCH TABLE ADDRESS			/027 CJL

/	HERE ON NAK OR UNDEFINED RESPONSE.

DATOU4,	ISZ	RTRYC		/BUMP RE-TRY COUNTER
	JMP	DATOU3		/TRY AGAIN
	JMP I	DATOUT		/ABORT

/	HERE ON ACK.

DATOU5,	ISZ	DATOUT		/BUMP FOR GOOD RETURN
	JMP I	DATOUT		/EXIT

DATOU7,	STACK;	DATOU5		/ACK
	STNAK;	DATOU4		/NAK
	0

DATOU9,	0			/TEMP POINTER FOR DATOUT

			>						/D013
/	HANDLE AN ABORT REQUEST.

ABORT,	CLA CLL			/INSURE CLEAR AC
	DCA	ABFLAG		/CLEAR ABORT FLAG NOW			/044 CJL
	TAD	KMODE		/GET CURRENT MODE
	TAD	(-MSEND		/IS IT A SEND?
	SZA			/SKIP IF YES
	JMP	ABORT2		/NOT SEND

	JMS I	[SNDP]		/SEND OUT A PACKET
	ABORT9			/WHICH HAS A "D" IN THE DATA
	STEOF			/AND IS AN EOF PACKET
	NOP			/WE GOT NAK BACK HERE
	NOP			/WE GOT NEITHER NAK OR ACK HERE
	JMS I	(BRKXMT)	/BREAK THE SEND
	JMP	ABORT3		/FINISH THE ABORT

ABORT2,	TAD	(MSEND-MREC	/CHECK IF IN RECEIVE MODE
	SZA CLA			/SKIP IF YES
	JMP	ABORT3		/JUST BACK TO COMMAND LOOP
	JMS I	[SNDP]		/SEND A PACKET BACK FOR AN ABORT

	IFZERO	1	<						/D009

	ABORT8			/WHICH HAS AN "X" IN THE DATA
	STACK			/MAKE IT AN ACK PACKET
	NOP			/NAK HERE
	NOP			/NOT NAK OR ACK HERE

			>						/D009

	NODATA			/NO DATA				/A009
	STBRK			/BREAK TRANSMISSION			/A009
	NOP			/NAK HERE				/A009
	CLA			/NOT ACK OR NAK HERE			/A009
	TAD	OFFLG		/GET FILE OPEN FLAG			/A009
	SZA CLA			/IS IT OPEN YET?			/A009
	JMS I	[FILCLOSE]	/CLOSE THE OUTPUT FILE			/020 CJL
	CLA			/ERROR DURING CLOSE **** FIX THIS ****
ABORT3,	TAD	(ABMSG)		/GET MESSAGE ADDRESS			/044 CJL
	JMP I	[CLOOP7]	/DISPLAY THE ABORT

ABORT9,	"D&137			/DATA PACKET FOR SEND ABORT
	-1

	PAGE								/014 CJL
/	ROUTINE TO PRINT 8 BIT CHARS ON THE  TTY.  ENTER ROUTINE WITH THE ADDRESS OF
/	THE TEXT IN THE AC OR IF AC IS  ZERO  THE  ADDRESS  IS  IN THE CALL + 1.  TEXT
/	TERMINATES ON A MINUS WORD.

PRI8B0,	0
	SZA			/SKIP IF ADDRESS NOT IN AC
	JMP	PRI8B1		/ADDRESS IS IN THE AC
	TAD I	PRI8B0		/GET ADDRESS FROM CALL + 1
	ISZ	PRI8B0		/BUMP RETURN POINTER
PRI8B1,	DCA	MQ		/SAVE ADDRESS OF STRING			/032 CJL
	TAD	[P7ECHO]	/GET CONSOLE OUTPUT ROUTINE ADDRESS	/043 CJL
	JMS	EIGHTB		/AND SEND IT
	JMP I	PRI8B0		/ALL DONE

/	ROUTINE TO SEND 8 BIT CHARS DOWN THE REMOTE LINE.    ENTER  ROUTINE  WITH  THE
/	ADDRESS OF THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1.
/	TEXT TERMINATES ON A MINUS WORD.

REM8B0,	0
	SZA			/SKIP IF ADDRESS NOT IN AC
	JMP	REM8B1		/ADDRESS IN AC
	TAD I	REM8B0		/GET ADDRESS FROM CALL + 1
	ISZ	REM8B0		/BUMP RETURN

REM8B1,	DCA	MQ		/SAVE ADDRESS OF STRING			/032 CJL
	TAD	(COMOUT)	/GET ADDRESS OF REMOTE OUTPUT ROUTINE	/046 CJL
	JMS	EIGHTB		/AND SEND THE STRING
	JMP I	REM8B0		/DONE


/	ROUTINE TO SEND 8 BIT DATA.  ENTER WITH ADDRESS OF DATA  IN  THE  MQ  AND  THE
/	ADDRESS  OF  THE ROUTINE TO TAKE EACH BYTE IN THE AC.  TEXT  TERMINATES  ON  A
/	MINUS WORD.

EIGHTB,	0
	DCA	EIGHT5		/STORE POINTER TO ROUTINE
	TAD	MQ		/GET STRING POINTER			/032 CJL
	DCA	EIGHT6		/STORE IN LOCAL POINTER

EIGHT1,	TAD I	EIGHT6		/GET A CHAR
	ISZ	EIGHT6		/BUMP THE POINTER
	SPA			/SKIP IF NOT EOL
	JMP	EIGHT2		/GOT EOL
	JMS I	EIGHT5		/CALL OUTPUT ROUTINE
	CLA CLL			/INSURE CLEAR AC
	JMP	EIGHT1		/LOOP

EIGHT2,	CLA CLL			/CLEAR THE AC
	JMP I	EIGHTB		/DONE

EIGHT5,	0			/POINTER TO ROUTINE TO DO OUTPUT
EIGHT6,	0			/POINTER TO TEXT TO OUTPUT
/	ROUTINE TO UNPACK 6-BT	CHARS FROM MEMORY.  BEFORE  CALLING INIT "GET6P" AS  A
/	POINTER  TO THE STRING LOCATION AND "GET6F" SHOULD BE ZEROED TO START WITH THE
/	TOP BYTE OF THE FIRST MEMORY LOCATION.

GET60,	0
	NL4000			/SET 4000				/032 CJL
	TAD	GET6F		/GET THE FLAG
	DCA	GET6F		/RETURN THE FLAG
	TAD I	GET6P		/GET TWO BYTES
	SZL			/HIGH-ORDER WANTED?			/032 CJL
	JMP	GETSWT		/JUMP IF NOT				/032 CJL
	RTR;RTR;RTR		/MOVE DOWN HIGH-ORDER HALF		/032 CJL
	SKP			/DON'T BUMP POINTER YET			/032 CJL
GETSWT,	ISZ	GET6P		/BUMP TO NEXT WORD			/032 CJL
	AND	[77]		/STRIP UNUSED BITS			/016 CJL
	JMP I	GET60		/DONE


/	LOCAL ROUTINE  TO  "FILN8"  TO  MAKE  THE 6 BIT CHAR IN THE AC INTO 8 BITS AND
/	STORE IN A STRING.

MOV8,	.-.			/6-BIT CHARACTER => 7-BIT CHARACTER	/028 CJL
	SNA			/SKIP IF SOMETHING PASSED		/028 CJL
	TAD	[" &77]		/ELSE SUPPLY A <SPACE>			/025 CJL
	TAD	[" &77]		/INVERT THE CHARACTER			/028 CJL
	AND	[77]		/JUST SIX-BITS				/014/016 CJL
	TAD	[" &77]		/MAKE IT SEVEN-BIT ASCII		/028 CJL
	DCA I	MOV8P		/STORE IN THE STRING			/028 CJL
	ISZ	MOV8P		/BUMP POINTER FOR NEXT TIME		/028 CJL
	JMP I	MOV8		/RETURN					/028 CJL

MOV8P,	0			/POINTER FOR "MOV8" ROUTINE
/	ROUTINE TO PULL A FILE	NAME  IN 6 BIT POINTED TO  BY THE AC  AND PLACE IN THE
/	FILE NAME BUFFER IN  8  BIT  ADDING  IN  THE  "."  TO  SEPARATE  FILE NAME AND
/	EXTENSION.  A MINUS WORD WILL FOLLOW THE NAME.

FILN8,	0
	DCA	GET6P		/SET POINTER FOR "GET6"
	DCA	GET6F		/SET FLAG FOR "GET6"
	TAD	(NAMBUF		/GET ADDRESS OF THE NAME BUFFER
	DCA	MOV8P		/SET IN A POINTER
	TAD	(-6		/6 NAME CHARS TO DO
	DCA	FILN8C		/SAVE IN COUNTER
	GET6			/PULL A CHAR
	SZA			/SKIP IF A SPACE
	JMS	MOV8		/PUT INTO THE BUFFER
	ISZ	FILN8C		/BUMP COUNTER
	JMP	.-4		/LOOP TILL ALL 6 DONE
	TAD	(".&177)	/GET A "."				/034 CJL
	JMS	MOV8		/PUT WITH FILE NAME
	NL7776			/SET -2					/032 CJL
	DCA	FILN8C		/2 EXTENSION CHARS
	GET6			/GET NEXT CHAR
	SZA			/SKIP IF A SPACE
	JMS	MOV8		/PUT WITH NAME
	ISZ	FILN8C		/BUMP COUNTER
	JMP	.-4		/LOOP
	NL7777			/SET -1					/032 CJL
	DCA I	MOV8P		/TERMINATE THE STRING
	JMP I	FILN8		/AND RETURN

FILN8C,	0			/COUNTER FOR "FILN8"

	PAGE
/	CONSOLE I/O ROUTINES, ETC.					/023 CJL

/	CONSOLE MESSAGE PRINT ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	[SCRIBE]	/CALL MESSAGE PRINT ROUTINE
/	MESSAGEADDRESS		/MESSAGE ADDRESS PASSED IN-LINE

/	AC CAN BE DIRTY ON CALL.

/	RETURNS WITH CLEAR AC.

/	MESSAGE FORMAT:

/	ALL UPPER-CASE CHARACTERS ARE ALLOWED  TO  EXIST IN THE MESSAGE EXCEPT '%' AND
/	'^' WHICH ARE RESERVED.  A  ZERO  HALF-WORD TERMINATES THE MESSAGE STRING.  IF
/	'%' IS DETECTED, A <CR> AND <LF>  WILL  BE  OUTPUT.    IF '^' IS DETECTED, THE
/	PREVAILING CASE WILL BE REVERSED.  INITIAL CASE IS LOWER-CASE.  IF 'UPONLY' IS
/	SET  TO  7740,  ALL  CASE CHANGES ARE IGNORED AND  THE  OUTPUT  IS  FORCED  TO
/	UPPER-CASE  ONLY.    THE MESSAGE ADDRESS MUST BE IN FIELD  ONE  AND  MUST  NOT
/	OVERLAP  AREAS  RESERVED FOR OTHER PURPOSES (OS/8 RESIDENT AT 17600-17777, USR
/	LOCATIONS 10000-11777, ETC.).


SCRIBE,	.-.			/CONSOLE MESSAGE PRINT ROUTINE
	CLA			/CLEAN UP				/029 CJL
	TAD	[P7ECHO]	/POINT TO				/043 CJL
RSCRENT,DCA	MSGOUT		/CONSOLE PRINT ROUTINE
	TAD I	SCRIBE		/GET IN-LINE POINTER ARGUMENT
	DCA	SCRPTR		/STASH THE POINTER
	ISZ	SCRIBE		/BUMP PAST ARGUMENT
	TAD	UPONLY		/GET UPPER-ONLY VALUE			/030 CJL
	TAD	[140]		/ADD ON LOWER-CASE VALUE		/030 CJL
	DCA	SCRCASE		/STORE INITIAL CASE VALUE
SCRLUP,	CDF	MSGFLD		/GOTO MESSAGE FIELD
	TAD I	SCRPTR		/GET LEFT HALF-WORD
	RTR;RTR;RTR		/MOVE OVER
	JMS	SCRPRNT		/PRINT IT
	CDF	MSGFLD		/GOTO MESSAGE FIELD
	TAD I	SCRPTR		/GET RIGHT HALF-WORD
	JMS	SCRPRNT		/PRINT IT
	ISZ	SCRPTR		/BUMP TO NEXT PAIR
	JMP	SCRLUP		/KEEP GOING
SCRPRNT,.-.			/CHARACTER PRINT ROUTINE
	CDF	PRGFLD		/BACK TO OUR FIELD
	AND	[77]		/JUST SIX BITS
	SNA			/END OF MESSAGE?
	JMP I	SCRIBE		/YES, RETURN TO ORIGINAL CALLER
	DCA	SCRCHAR		/NO, SAVE FOR NOW
	TAD	SCRCHAR		/GET IT BACK
	TAD	(-"%!200)	/IS IT "%"?
	SNA			/SKIP IF NOT
	JMP	SCRCRLF		/JUMP IF IT MATCHES
	TAD	[-"^+100+"%]	/IS IT "^"
	SNA CLA			/SKIP IF NOT
	JMP	SCRFLIP		/JUMP IF IT MATCHES
	TAD	SCRCHAR		/GET THE CHARACTER
	AND	[40]		/DOES CASE MATTER?
	SNA CLA			/SKIP IF NOT
	TAD	SCRCASE		/ELSE GET PREVAILING CASE
	TAD	SCRCHAR		/GET THE CHARACTER
SCRPRLF,JMS I	MSGOUT		/PRINT THE CHARACTER
	JMP I	SCRPRNT		/RETURN

SCRCRLF,TAD	[CNTRLM]	/GET A <CR>
	JMS I	MSGOUT		/PRINT IT
	TAD	[CNTRLJ]	/GET A <LF>
	JMP	SCRPRLF		/CONTINUE THERE

SCRFLIP,TAD	UPONLY		/GET UPPER-ONLY FLAG
	SZA CLA			/SKIP IF OFF
	JMP I	SCRPRNT		/RETURN IF ON
	TAD	SCRCASE		/GET CURRENT CASE
	CIA			/INVERT IT
	TAD	(140+100)	/ADD SUM OF POSSIBLE VALUES
	DCA	SCRCASE		/STORE NEW INVERTED CASE
	JMP I	SCRPRNT		/RETURN

/	REMOTE LINE MESSAGE PRINT ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	[RSCRIBE]	/CALL MESSAGE PRINT ROUTINE
/	MESSAGEADDRESS		/MESSAGE ADDRESS PASSED IN-LINE

/	AC CAN BE DIRTY ON CALL.

/	RETURNS WITH CLEAR AC.

/	MESSAGE FORMAT AND RESTRICTIONS ARE IDENTICAL TO SCRIBE ROUTINE.

RSCRIBE,.-.			/REMOTE LINE MESSAGE PRINT ROUTINE
	CLA			/CLEAN UP				/029 CJL
	TAD	RSCRIBE		/GET OUR CALLER
	DCA	SCRIBE		/MAKE IT THEIRS
	TAD	(COMOUT)	/POINT TO REMOTE OUTPUT ROUTINE
	JMP	RSCRENTRY	/CONTINUE THERE
/	ESCAPE CHARACTER PRINT ROUTINE.

/	CALLING SEQUENCE:

/	TAD	ESCHAR		/OR OTHER CHARACTER TO PRINT
/	JMS I	[ESCPRNT]	/CALL ROUTINE
/	RETURNS WITH CLEAR AC HERE

/	CAUSES CHARACTER TO PRINT LITERALLY IF CHARACTER>37.
/	CAUSES MESSAGE "CONTROL-" FOLLOWED BY CHARACTER+100 IF CHARACTER<40.

ESCPRNT,.-.			/ESCAPE CHARACTER PRINT ROUTINE
	DCA	ESCTEMP		/SAVE PASSED VALUE
	TAD	ESCTEMP		/GET IT BACK
	TAD	[-40]		/COMPARE TO CONTROL LIMIT
	SMA CLA			/SKIP IF LESS THAN LIMIT
	JMP	ESPRINT		/JUMP IF NOT
	JMS I	[SCRIBE]	/GIVE THEM THE
	CONTMSG			/CONTROL MESSAGE
	TAD	[100]		/MAKE IT UPPER-CASE, NOT CONTROL
ESPRINT,TAD	ESCTEMP		/GET ORIGINAL VALUE
	JMS I	[P7ECHO]	/PRINT IT				/043 CJL
	JMP I	ESCPRNT		/RETURN

	MSGOUT=	RSCRIBE		/OUTPUT ROUTINE POINTER

ESCTEMP,.-.			/TEMPORARY FOR ESCPRNT ROUTINE
SCRCASE,.-.			/CURRENT MESSAGE CASE
SCRCHAR,.-.			/LATEST MESSAGE CHARACTER
SCRPTR,	.-.			/MESSAGE POINTER

	PAGE
/	ROUTINE TO HANDLE THE "CONNECT" COMMAND.			/025 CJL

CONSRV,	.-.			/CONNECT SERVICE ROUTINE
	JMS I	[CREST2]	/SETUP CONSOLE OUTPUT ROUTINES		/025 CJL
	JMS I	[SCRIBE]	/GIVE THE
	CONNMSG			/OPENING MESSAGE
	TAD	ESCHAR		/GET THE CURRENT <ESCAPE> CHARACTER
	JMS I	[ESCPRNT]	/PRINT IT
	JMS I	[SCRIBE]	/GIVE THEM THE
	CON2MSG			/BRIDGING MESSAGE
	JMS I	[SCRIBE]	/PRINT OUT THE
	CPUMSG			/ACTUAL CPU TYPE
	JMS I	[SCRIBE]	/GIVE THEM THE
	CON3MSG			/CLOSING MESSAGE
CORESET,DCA	ESCFLAG		/CLEAR <ESCAPE> SEEN FLAG
	TAD	ESCHAR		/GET THE <ESCAPE> CHARACTER
	DCA	ESCH		/STORE IN SEARCH LIST
	JMS I	(CONRESET)	/RESET CONSOLE ROUTINES
	JMS I	(REMRESET)	/RESET REMOTE LINE ROUTINES
CONNLUP,TAD	KEYERROR	/GET KEYBOARD ERROR FLAG
	SNA			/SKIP IF KEYBOARD ERROR
	TAD	RINERROR	/ELSE GET REMOTE ERROR FLAG
	SZA CLA			/SKIP IF NEITHER KEYBOARD NOR REMOTE LINE ERRORS
	JMP	KERROR		/JUMP IF KEYBOARD ERROR
	JMS I	(CONTEST)	/TEST IF CONSOLE CAN TAKE OUTPUT
	JMP	TESTKEYBOARD	/JUMP IF NOT
	JMS I	(REMINPUT)	/TEST IF ANY REMOTE INPUT
	SKP			/SKIP IF NONE
	JMS I	(CONOUT)	/OUTPUT TO CONSOLE
TESTKEY,TAD	ECHOFLAG	/GET LOCAL ECHO FLAG
	TAD	ESCFLAG		/ADD ON <ESCAPE> SEEN FLAG
	SNA CLA			/SKIP IF LOCAL ECHO POSSIBLY NEEDED
	JMP	NOLOCALECHO	/JUMP IF NOT
	JMS I	(CONTEST)	/TEST IF CONSOLE CAN TAKE OUTPUT
	JMP	BUFCHECK	/JUMP IF NOT
NOLOCAL,JMS I	(REMTEST)	/TEST IF REMOTE CAN TAKE OUTPUT
	JMP	BUFCHECK	/JUMP IF NOT
	JMS I	(KEYINPUT)	/TEST IF ANY KEYBOARD INPUT
	JMP	BUFCHECK	/JUMP IF NOT
	DCA	KEYLATEST	/SAVE FOR LATER
	TAD	KEYLATEST	/GET IT BACK
	AND	[177]		/WANT SEVEN-BIT VERSION FOR TESTS
	CIA			/INVERT IT
	DCA	TESTCHAR	/SAVE FOR LATER
	TAD	ESCFLAG		/<ESCAPE> SEEN LAST TIME?
	SNA CLA			/SKIP IF SO
	JMP	NOESCAPE	/JUMP IF NOT
	TAD	TESTCHAR	/GET TEST VAUE
	JMS I	[SRCHTABLE]	/SEARCH FOR IT
	ESCLIST-1-1		/SEARCH TABLE POINTER
	SNA CLA			/SKIP IF FOUND
	JMP	ESCOMPLAIN	/JUMP IF NOT
	JMP I	TABLEJUMP	/GO WHERE YOU'RE SUPPOSED TO
/	COMES HERE IF PREVIOUS WAS NOT THE <ESCAPE> CHARACTER.

NOESCAP,TAD	TESTCHAR	/GET THE LATEST CHARACTER
	TAD	ESCHAR		/COMPARE TO <ESCAPE> CHARACTER
	SZA CLA			/SKIP IF IT MATCHES
	JMP	OUTCHAR		/JUMP IF NOT
	NL7777			/SET THE
/	DCA	ESCFLAG		/<ESCAPE> SEEN FLAG
/	JMP	BUFCHECK	/CONTINUE THERE
	JMP	NOESENTRY	/CONTINUE THERE

/	COMES HERE IF BOTH PREVIOUS AND LATEST ARE THE <ESCAPE> CHARACTER.

ESCTYPE,DCA	ESCFLAG		/CLEAR THE <ESCAPE> SEEN FLAG AND OUTPUT

/	COMES HERE IF PREVIOUS AND LATEST CHARACTER ARE NOT THE <ESCAPE> CHARACTER.

OUTCHAR,TAD	ECHOFLAG	/GET LOCAL ECHO FLAG
	SNA CLA			/SKIP IF SET
	JMP	NOECHO		/JUMP IF NOT
	TAD	KEYLATEST	/GET LATEST CHARACTER
	JMS I	(CONOUT)	/OUTPUT TO CONSOLE
NOECHO,	TAD	KEYLATEST	/GET LATEST CHARACTER
	JMS I	(REMOUT)	/OUTPUT TO REMOTE
	JMP	BUFCHECK	/CONTINUE THERE

/	COMES HERE IF PREVIOUS WAS THE <ESCAPE> CHARACTER AND THE LATEST IS NOT
/	A VALID <ESCAPE> COMMAND CHARACTER.

ESCOMPL,TAD	[CNTRLG]	/GET A <BEL>
	JMS I	(CONOUT)	/OUTPUT TO CONSOLE
NOESENT,DCA	ESCFLAG		/CLEAR <ESCAPE> SEEN FLAG
BUFCHEC,JMS I	PUPSTATUS	/UPDATE THE PORT STATUS			/047 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
/	KL8 INTERFACES.

	*BUFCHECK		/OVERLAY DECMATE CODE			/047 CJL

BUFCHEC,NOP			/DON'T CHECK PORT STATUS		/047 CJL

	JMS I	(RINUPDATE)	/CHECK FOR MORE REMOTE INPUT
	JMS I	(KEYUPDATE)	/CHECK FOR MORE KEYBOARD INPUT
	JMS I	(REMUPDATE)	/CHECK FOR MORE REMOTE OUTPUT
	JMS I	(CONUPDATE)	/CHECK FOR MORE CONSOLE OUTPUT
	JMP	CONNLUP		/GO BACK FOR MORE

/	COMES HERE ON <ESCAPE> C(LOSE).

ESCLOSE,ISZ	CONSRV		/BUMP TO GOOD RETURN
	JMP I	CONSRV		/RETURN
KERRLUP,JMS I	PUPSTATUS	/UPDATE THE PORT STATUS			/047 CJL

/	THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
/	KL8 INTERFACES.

	*KERRLUP		/OVERLAY DECMATE CODE			/047 CJL

KERRLUP,NOP			/DON'T CHECK PORT STATUS		/047 CJL

	JMS I	(RINUPDATE)	/CHECK FOR MORE REMOTE INPUT
	JMS I	(KEYUPDATE)	/CHECK FOR MORE KEYBOARD INPUT
	JMS I	(REMUPDATE)	/CHECK FOR MORE REMOTE OUTPUT
	JMS I	(CONUPDATE)	/CHECK FOR MORE CONSOLE OUTPUT

/	COMES HERE ON KEYBOARD INPUT ERROR.

KERROR,	JMS I	(CONTEST)	/CONSOLE READY FOR OUTPUT?
	JMP	KERRLUP		/NO, GO WAIT AWHILE
	TAD I	(CONINSERT)	/GET CONSOLE INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD I	(CONREMOVE)	/COMPARE TO CONSOLE REMOVAL POINTER
	SZA CLA			/SKIP IF CONSOLE OUTPUT BUFFER EMPTY
	JMP	KERRLUP		/GO WAIT FOR AWHILE
	TAD	KEYERROR	/KEYBOARD INPUT ERROR?
	SNA CLA			/SKIP IF SO
	JMP	RIERTST		/JUMP IF NOT
	JMS I	[SCRIBE]	/TELL THEM
	KERRMSG			/WE HAD A KEYBOARD ERROR
RIERTST,TAD	RINERROR	/REMOTE INPUT ERROR?
	SNA CLA			/SKIP IF SO
	JMP	CORESET		/JUMP IF NOT
	JMS I	[SCRIBE]	/TELL THEM
	RIERMSG			/WE HAD A REMOTE LINE ERROR
	JMP	CORESET		/RESTART

/	<ESCAPE> CHARACTER SEARCH LIST.

ESCLIST,UPPERC;	ESCLOSE		/<ESCAPE> C(LOSE)
	LOWERC;	ESCLOSE		/<ESCAPE> C(LOSE) (LOWER-CASE)
ESCH,	.-.;	ESCTYPE		/<ESCAPE> <ESCAPE>
	0			/THIS ENDS THE LIST

/	LOCAL ECHO FLAG FOR CONNECT MODE.

ECHOFLA,INIECHO			/0=DON'T ECHO, NON-ZERO=ECHO		/039 CJL
ESCFLAG,.-.			/<ESCAPE> CHARACTER SEEN FLAG
KEYLATE,.-.			/LATEST KEYBOARD CHARACTER
PUPSTAT,UPSTATUS		/POINTER TO DECMATE STATUS UPDATE	/047 CJL
TESTCHA,.-.			/LATEST KEYBOARD TEST CHARACTER
	PAGE
/	CONNECT-MODE SUPPORT ROUTINES.					/047 CJL

/	CONSOLE KEYBOARD ROUTINES.					/047 CJL

/	KEYBOARD INPUT ROUTINE.						/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(KEYINPUT)	/CALL ROUTINE
/	NO INPUT		/RETURN IF NO INPUT
/	INPUT			/RETURN IF INPUT AVAILABLE

/	THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.

/	THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.

KEYINPU,.-.			/KEYBOARD INPUT ROUTINE
	TAD	KEYINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	KEYREMOVE	/COMPARE TO REMOVAL POINTER
	SNA CLA			/SKIP IF BUFFER NOT EMPTY
	JMP	KEYCHECK	/JUMP IF BUFFER EMPTY
	TAD	KEYREMOVE	/GET REMOVAL POINTER
	DCA	KEYTEMP		/SAVE FOR LATER
	NL0001			/SET INCREMENT
	TAD	KEYREMOVE	/UPDATE REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[KEYBUFFER]	/MAKE IT ABSOLUTE
	DCA	KEYREMOVE	/STORE UPDATED POINTER
	CDF	BUFFLD		/GOTO BUFFER FIELD
	TAD I	KEYTEMP		/GET THE LATEST CHARACTER
	CDF	PRGFLD		/BACK TO OUR FIELD
	SKP			/DON'T GET ANOTHER CHARACTER		/047 CJL

/	COMES HERE IF BUFFER IS EMPTY.

KEYCHEC,JMS	KEYGET		/TRY TO GET A CHARACTER NOW		/047 CJL
	ISZ	KEYINPUT	/GOT ONE, SO TAKE SKIP RETURN		/047 CJL
	JMP I	KEYINPUT	/RETURN EITHER WAY
/	KEYBOARD BUFFER UPDATE ROUTINE.					/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(KEYUPDATE)	/CALL ROUTINE

/	RETURNS  WITH  CLEAR  AC.    ANY  KEYBOARD  INPUT  WHICH JUST OCCURRED WILL BE
/	BUFFERED;  CALLS TO KEYINPUT WILL RETRIEVE THE CHARACTERS.

KEYUPDA,.-.			/KEYBOARD BUFFER UPDATE ROUTINE
	JMS	KEYGET		/TRY TO GET A CHARACTER NOW		/047 CJL
	SKP			/GOT ONE, DON'T LEAVE YET		/047 CJL
	JMP I	KEYUPDATE	/CHARACTER NOT AVAILABLE NOW, RETURN	/047 CJL
	CDF	BUFFLD		/GOTO BUFFER FIELD
	DCA I	KEYINSERT	/STORE IN THE BUFFER
	CDF	PRGFLD		/BACK TO OUR FIELD
	NL0001			/SET INCREMENT
	TAD	KEYINSERT	/UPDATE POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[KEYBUFFER]	/MAKE IT ABSOLUTE
	DCA	KEYINSERT	/STORE BACK UPDATED POINTER
	TAD	KEYINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	KEYREMOVE	/COMPARE TO REMOVAL POINTER
	SNA CLA			/SKIP IF NOT EQUAL
KSERROR,ISZ	KEYERROR	/INDICATE KEYBOARD ERROR
	JMP I	KEYUPDATE	/RETURN
	JMP	KSERROR		/MAKE SURE ERROR IS INDICATED
/	KEYBOARD GET A CHARACTER ROUTINE.				/047 CJL

/	CALLING SEQUENCE:

/	JMS	KEYGET		/CALL ROUTINE
/	CHARACTER AVAILABLE	/RETURNS HERE WITH LATEST CHARACTER
/	NO CHARACTER AVAILABLE	/RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL

/	NORMAL RETURN HAS LATEST CHARACTER IN AC.

/	SKIP RETURN HAS CLEAR AC.

/	IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.

KEYGET,	.-.			/KEYBOARD GET A CHARACTER ROUTINE
KGTEST,	KSFIOT			/FLAG UP?
	JMP	KEYGNONE	/NO, TAKE SKIP RETURN
KGREAD,	KRBIOT			/YES, READ THE CHARACTER
	SPA			/SKIP IF NO UART ERRORS
	ISZ	KEYERROR	/INDICATE KEYBOARD ERROR
	SKP			/SKIP IF NOT TOO MANY ERRORS
	JMP	.-2		/ENSURE KEYBOARD ERROR IS INDICATED
	AND	[377]		/JUST EIGHT-BIT
	DCA	KEYTEMP		/SAVE FOR NOW
	TAD	FLOWFLAG	/GET FLOW CONTROL FLAG
	SNA CLA			/SKIP IF SET
	JMP	KEYGEXIT	/JUMP IF NOT
	TAD	KEYTEMP		/GET THE CHARACTER
	AND	[177]		/JUST SEVEN-BIT
	TAD	[-CNTRLS]	/COMPARE TO <^S>
	SNA			/SKIP IF OTHER
	JMP	KWATSET		/JUMP IF IT MATCHES
	TAD	[-CNTRLQ+CNTRLS]/COMPARE TO <^S>
	SNA CLA			/SKIP IF OTHER
	JMP	KWATCLEAR	/JUMP IF IT MATCHES
KEYGEXI,TAD	KEYTEMP		/GET THE CHARACTER
	JMP I	KEYGET		/TAKE IMMEDIATE RETURN

/	COMES HERE ON <^S> TO SET OUTPUT WAIT.

KWATSET,NL4000			/SET WAIT VALUE

/	COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.

KWATCLE,DCA	CONWAIT		/STORE NEW STATE
KEYGNON,ISZ	KEYGET		/BUMP RETURN ADDRESS
	JMP I	KEYGET		/TAKE SKIP RETURN
/	CONSOLE TERMINAL ROUTINES.

/	CONSOLE OUTPUT ROUTINE.

/	CALLING SEQUENCE:

/	TAD	CHAR		/CHARACTER TO OUTPUT IN AC
/	JMS I	(CONOUT)	/CALL ROUTINE
/	RETURN			/RETURNS HERE WITH CLEAR AC

CONOUT,	.-.			/CONSOLE OUTPUT ROUTINE
	DCA	CONTEMP		/SAVE PASSED VALUE
	TAD	CONINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	CONREMOVE	/COMPARE TO REMOVAL POINTER
	TAD	CONWAIT		/ADD ON WAIT STATUS
	SZA CLA			/SKIP IF BUFFER EMPTY AND NOT WAITING	/047 CJL
	JMP	CSTUFF		/JUMP IF CHARACTER MUST BE BUFFERED
	TAD	CONTEMP		/GET PASSED VALUE			/047 CJL
	JMS I	(CONPUT)	/TRY TO OUTPUT THE CHARACTER NOW			/047 CJL
	JMP	CSTUFF		/COULDN'T OUTPUT IT, SO BUFFER IT	/047 CJL
	JMP I	CONOUT		/RETURN

CSTUFF,	TAD	CONTEMP		/GET THE CHARACTER
	CDF	BUFFLD		/GOTO BUFFER FIELD
	DCA I	CONINSERT	/STORE THE CHARACTER
	CDF	PRGFLD		/BACK TO OUR FIELD
	NL0001			/SET INCREMENT
	TAD	CONINSERT	/UPDATE POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[CONBUFFER]	/MAKE IT ABSOLUTE
	DCA	CONINSERT	/STORE BACK UPDATED POINTER
	JMP I	CONOUT		/RETURN

/	CONSOLE OUTPUT TEST ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	(CONTEST)	/CALL ROUTINE
/	NOT READY		/RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
/	READY			/OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW

CONTEST,.-.			/CONSOLE OUTPUT TEST ROUTINE
	NL0001			/SET BUFFER INCREMENT
	TAD	CONINSERT	/GET UPDATED INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	CONREMOVE	/COMPARE TO REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	SZA CLA			/SKIP IF BUFFER IS FULL
	ISZ	CONTEST		/BUMP RETURN IF NOT
	JMP I	CONTEST		/RETURN EITHER WAY
/	CONSOLE OUTPUT BUFFER UPDATE ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	(CONUPDATE)	/CALL ROUTINE
/	RETURN			/RETURN WITH CLEAR AC

/	THE CONSOLE OUTPUT BUFFERING ROUTINES WILL  UPDATE  POINTERS,  ETC.    IF  ANY
/	STATUS HAS CHANGED SINCE THE LAST CALL.

CONUPDA,.-.			/CONSOLE OUTPUT UPDATE ROUTINE
	TAD	CONWAIT		/FLOW CONTROL WAIT SET?
	SZA CLA			/SKIP IF NOT
	JMP I	CONUPDATE	/JUST RETURN IF SO
	TAD	CONINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	CONREMOVE	/COMPARE TO REMOVAL POINTER
	SNA CLA			/SKIP IF BUFFER CONTAINS SOMETHING	/047 CJL
	JMP I	CONUPDATE	/RETURN IF BUFFER EMPTY			/047 CJL
	CDF	BUFFLD		/GOTO BUFFER FIELD
	TAD I	CONREMOVE	/GET A CHARACTER FROM THE BUFFER
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMS I	(CONPUT)	/TRY TO OUTPUT THE CHARACTER NOW	/047 CJL
	JMP I	CONUPDATE	/COULDN'T DO IT, SO JUST RETURN		/047 CJL
	NL0001			/SET BUFFER INCREMENT
	TAD	CONREMOVE	/UPDATE REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[CONBUFFER]	/MAKE IT ABSOLUTE
	DCA	CONREMOVE	/STORE UPDATED POINTER
	JMP I	CONUPDATE	/RETURN

CONINSE,.-.			/CONSOLE OUTPUT INSERTION POINTER
CONREMO,.-.			/CONSOLE OUTPUT REMOVAL POINTER

/	CONSOLE FLOW CONTROL WAIT FLAG.

CONWAIT,.-.			/0=DON'T WAIT, 4000=WAIT FOR <^Q>
KEYINSE,.-.			/KEYBOARD BUFFER INSERTION POINTER
KEYREMO,.-.			/KEYBOARD BUFFER REMOVAL POINTER

	CONTEMP=CONUPDATE	/CONSOLE OUTPUT TEMPORARY

	KEYTEMP=CONUPDATE	/KEYBOARD INPUT TEMPORARY

	PAGE
/	REMOTE LINE ROUTINES.

/	REMOTE LINE INPUT ROUTINE.					/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(REMINPUT)	/CALL ROUTINE
/	NO INPUT		/RETURN IF NO INPUT
/	INPUT			/RETURN IF INPUT AVAILABLE

/	THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.

/	THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.

REMINPU,.-.			/REMOTE LINE INPUT ROUTINE
	TAD	RININSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	RINREMOVE	/COMPARE TO REMOVAL POINTER
	SNA CLA			/SKIP IF BUFFER NOT EMPTY
	JMP	RINCHECK	/JUMP IF BUFFER EMPTY
	TAD	RINREMOVE	/GET REMOVAL POINTER
	DCA	RINTEMP		/SAVE FOR LATER
	NL0001			/SET INCREMENT
	TAD	RINREMOVE	/UPDATE REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	(RINBUFFER)	/MAKE IT ABSOLUTE
	DCA	RINREMOVE	/STORE UPDATED POINTER
	CDF	BUFFLD		/GOTO BUFFER FIELD
	TAD I	RINTEMP		/GET THE LATEST CHARACTER
	CDF	PRGFLD		/BACK TO OUR FIELD
	DCA	RINTEMP		/SAVE FOR LATER
	TAD	FLOWFLAG	/GET FLOW CONTROL FLAG
	SNA CLA			/SKIP IF SET
	JMP	REMINEXIT	/JUMP IF NOT
	NL4000			/SET WAITING VALUE
	TAD	RINWAIT		/ARE WE WAITING TO EMPTY?
	SZA CLA			/SKIP IF SO
	JMP	REMINEXIT	/JUMP IF NOT
	TAD	RININSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	RINREMOVE	/COMPARE TO REMOVAL POINTER
	AND	[BUFSIZE^3%4]	/JUST 3/4 BITS
	SZA CLA			/SKIP IF BUFFER NOW 1/4 FULL (OR LESS)
	JMP	REMINEXIT	/JUMP IF NOT
	NL7777			/SET BUFFER EMPTYING VALUE
	DCA	RINWAIT		/STORE FOR OUTPUT ROUTINE
REMINEX,TAD	RINTEMP		/GET THE CHARACTER
	SKP			/DON'T GET ANOTHER ONE			/047 CJL

/	COMES HERE IF REMOTE LINE INPUT BUFFER IS EMPTY.

RINCHEC,JMS	RINGET		/TRY TO GET A CHARACTER NOW		/047 CJL
	ISZ	REMINPUT	/GOT ONE, SO TAKE SKIP RETURN		/047 CJL
	JMP I	REMINPUT	/RETURN EITHER WAY
/	REMOTE LINE INPUT BUFFER UPDATE ROUTINE.			/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(RINUPDATE)	/CALL ROUTINE

/	RETURNS WITH CLEAR AC.  ANY REMOTE LINE  INPUT  WHICH  JUST  OCCURRED  WILL BE
/	BUFFERED;  CALLS TO REMINPUT WILL RETRIEVE THE CHARACTERS.

RINUPDA,.-.			/REMOTE LINE INPUT BUFFER UPDATE ROUTINE
	JMS	RINGET		/TRY TO GET A CHARACTER NOW		/047 CJL
	SKP			/GOT ONE, DON'T LEAVE YET		/047 CJL
	JMP I	RINUPDATE	/CHARACTER NOT AVAILABLE NOW, RETURN	/047 CJL
	CDF	BUFFLD		/GOTO BUFFER FIELD
	DCA I	RININSERT	/STORE IN THE BUFFER
	CDF	PRGFLD		/BACK TO OUR FIELD
	NL0001			/SET INCREMENT
	TAD	RININSERT	/UPDATE POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	(RINBUFFER)	/MAKE IT ABSOLUTE
	DCA	RININSERT	/STORE BACK UPDATED POINTER
	TAD	RININSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	RINREMOVE	/COMPARE TO REMOVAL POINTER
	SNA			/SKIP IF BUFFER NOT FULL
	ISZ	RINERROR	/INDICATE REMOTE LINE INPUT ERROR
	SKP			/SKIP IF NO OVERFLOW
	JMP	.-2		/ENSURE ERROR IS SET
	TAD	[BUFSIZE^3%4]	/SUBTRACT 1/4 BUFFER'S WORTH
	AND	[BUFSIZE^3%4]	/JUST 3/4 BUFFER BITS
	SNA CLA			/SKIP IF NOT 3/4 FULL
	TAD	FLOWFLAG	/ELSE CHECK IF FLOW CONTROL IS ENABLED
	SNA CLA			/SKIP IF 3/4 FULL AND FLOW CONTROL IS ENABLED
	JMP I	RINUPDATE	/JUST RETURN
	TAD	RINWAIT		/GET INPUT WAIT FLAG
	SNA CLA			/SKIP IF ALREADY SET
	ISZ	RINWAIT		/SET TO <^S> STATE
	JMP I	RINUPDATE	/RETURN
/	REMOTE LINE GET A CHARACTER ROUTINE.				/047 CJL

/	CALLING SEQUENCE:

/	JMS I	(RINGET)	/CALL ROUTINE
/	CHARACTER AVAILABLE	/RETURNS HERE WITH LATEST CHARACTER
/	NO CHARACTER AVAILABLE	/RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL

/	NORMAL RETURN HAS LATEST CHARACTER IN AC.

/	SKIP RETURN HAS CLEAR AC.

/	IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.

RINGET,	.-.			/REMOTE LINE GET A CHARACTER ROUTINE
RINTEST,TAD	INFLAG		/IS INPUT AVAILABLE?
RINGT0,	SNA CLA			/SKIP IF SO
RINREAD,JMP	RINGNONE	/JUMP IF NOT
RINGT1,	DCA	INFLAG		/CLEAR AVAILABILITY FLAG
RINGT2,	IRB			/READ IN THE CHARACTER

/	THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY.  THE  DEFAULT INSTRUCTIONS
/	ARE FOR KL8 INTERFACES.

	*RINTEST		/OVERLAY DECMATE II CODE

RINTEST,RKSFIOT			/FLAG UP?
RINGT0,	JMP	RINGNONE	/NO, TAKE SKIP RETURN
RINREAD,RKRBIOT			/YES, READ THE CHARACTER
RINGT1,	SKP			/NO ERRORS ON DECMATE I

/	THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.    THE DEFAULT INSTRUCTION IS
/	FOR KL8 INTERFACES.

	*RINGT1			/OVERLAY DECMATE I CODE

RINGT1,	SPA			/SKIP IF NO UART ERRORS
RING2,	ISZ	RINERROR	/INDICATE REMOTE LINE INPUT ERROR
	SKP			/SKIP IF NOT TOO MANY ERRORS
	JMP	.-2		/ENSURE REMOTE LINE INPUT ERROR IS INDICATED
	AND	[377]		/JUST EIGHT-BIT
	DCA	RINTEMP		/SAVE FOR NOW
	TAD	FLOWFLAG	/GET FLOW CONTROL FLAG
	SNA CLA			/SKIP IF SET
	JMP	RINGEXIT	/JUMP IF NOT
	TAD	RINTEMP		/GET THE CHARACTER
	AND	[177]		/JUST SEVEN-BIT
	TAD	[-CNTRLS]	/COMPARE TO <^S>
	SNA			/SKIP IF OTHER
	JMP	RWATSET		/JUMP IF IT MATCHES
	TAD	[-CNTRLQ+CNTRLS]/COMPARE TO <^S>
	SNA CLA			/SKIP IF OTHER
	JMP	RWATCLEAR	/JUMP IF IT MATCHES
RINGEXI,TAD	RINTEMP		/GET THE CHARACTER
	JMP I	RINGET		/TAKE IMMEDIATE RETURN
/	COMES HERE ON <^S> TO SET OUTPUT WAIT.

RWATSET,NL4000			/SET WAIT VALUE

/	COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.

RWATCLE,DCA	REMWAIT		/STORE NEW STATE
RINGNON,ISZ	RINGET		/BUMP RETURN ADDRESS
	JMP I	RINGET		/TAKE SKIP RETURN

/	REMOTE LINE RESET ROUTINE.					/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(REMRESET)	/CALL ROUTINE
/	RETURN			/RETURN WITH CLEAR AC

/	RETURNS WITH CLEAR AC AND ALL REMOTE LINE VARIABLES RESET.

REMRESE,.-.			/REMOTE LINE RESET ROUTINE
	TAD	[REMBUFFER]	/SETUP THE REMOTE LINE
	DCA	REMINSERT	/OUTPUT INSERTION POINTER
	TAD	[REMBUFFER]	/SETUP THE REMOTE LINE
	DCA	REMREMOVE	/OUTPUT REMOVAL POINTER
	TAD	(RINBUFFER)	/SETUP THE REMOTE LINE
	DCA	RININSERT	/INPUT INSERTION POINTER
	TAD	(RINBUFFER)	/SETUP THE REMOTE LINE
	DCA	RINREMOVE	/INPUT REMOVAL POINTER
	DCA	REMWAIT		/CLEAR REMOTE OUTPUT WAIT
	DCA	RINWAIT		/CLEAR REMOTE INPUT WAIT
	DCA	RINERROR	/CLEAR REMOTE INPUT ERROR
	JMP I	REMRESET	/RETURN

RININSE,.-.			/REMOTE INPUT INSERTION POINTER
RINREMO,.-.			/REMOTE INPUT REMOVAL POINTER
RINTEMP,.-.			/REMOTE INPUT TEMPORARY			/047 CJL

	PAGE
/	REMOTE LINE OUTPUT ROUTINE.

/	CALLING SEQUENCE:

/	TAD	CHAR		/CHARACTER TO OUTPUT IN AC
/	JMS I	(REMOUT)	/CALL ROUTINE
/	RETURN			/RETURNS HERE WITH CLEAR AC

REMOUT,	.-.			/REMOTE LINE OUTPUT ROUTINE
	DCA	REMTEMP		/SAVE PASSED VALUE
	TAD	REMINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	REMREMOVE	/COMPARE TO REMOVAL POINTER
	TAD	REMWAIT		/ADD ON WAIT STATUS
	SZA CLA			/SKIP IF BUFFER EMPTY AND NOT WAITING	/047 CJL
	JMP	RSTUFF		/JUMP IF CHARACTER MUST BE BUFFERED
	TAD	REMTEMP		/GET PASSED VALUE			/047 CJL
	JMS I	(REMPUT)	/TRY TO OUTPUT THE CHARACTER NOW	/047 CJL
	JMP	RSTUFF		/COULDN'T OUTPUT IT, SO BUFFER IT	/047 CJL
	JMP I	REMOUT		/RETURN

RSTUFF,	TAD	REMTEMP		/GET THE CHARACTER
	CDF	BUFFLD		/GOTO BUFFER FIELD
	DCA I	REMINSERT	/STORE IN BUFFER
	CDF	PRGFLD		/BACK TO OUR FIELD
	NL0001			/SET BUFFER INCREMENT
	TAD	REMINSERT	/BUMP INSERTION POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[REMBUFFER]	/MAKE IT ABSOLUTE
	DCA	REMINSERT	/STORE UPDATED POINTER
	JMP I	REMOUT		/RETURN

/	REMOTE LINE OUTPUT TEST ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	(REMTEST)	/CALL ROUTINE
/	NOT READY		/RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
/	READY			/OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW

/	AC WILL BE CLEARED AFTER THE CALL.

REMTEST,.-.			/REMOTE LINE OUTPUT TEST ROUTINE
	NL0001			/SET BUFFER INCREMENT
	TAD	REMINSERT	/GET INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	REMREMOVE	/COMPARE TO REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	SZA CLA			/SKIP IF BUFFER IS FULL
	ISZ	REMTEST		/BUMP RETURN IF BUFFER IS NOT FULL
	JMP I	REMTEST		/RETURN EITHER WAY
/	REMOTE LINE OUTPUT BUFFER UPDATE ROUTINE.

/	CALLING SEQUENCE:

/	JMS I	(REMUPDATE)	/CALL ROUTINE
/	RETURN			/RETURN WITH CLEAR AC

/	THE REMOTE LINE OUTPUT  BUFFERING  ROUTINES WILL UPDATE POINTERS, ETC.  IF ANY
/	STATUS HAS CHANGED SINCE THE LAST CALL.

REMUPDA,.-.			/REMOTE LINE OUTPUT UPDATE ROUTINE
	TAD	RINWAIT		/GET INPUT WAIT FLAG
	CLL RAL			/MAIN STATE BIT TO LINK
	SNA CLA			/SKIP IF OUTPUT FLOW CHARACTER NEEDED	/047 CJL
	JMP	REMCHECK	/JUMP IF CHARACTER NOT NEEDED NOW	/047 CJL
	TAD	(CNTRLQ)	/ASSUME RELEASE CHARACTER NEEDED	/047 CJL
	SNL			/SKIP IF SO				/047 CJL
	TAD	[CNTRLS-CNTRLQ]	/ELSE CHANGE IT TO HOLD CHARACTER	/047 CJL
	JMS I	(REMPUT)	/TRY TO OUTPUT IT NOW			/047 CJL
	JMP	REMCHECK	/COULDN'T DO IT, FORGET IT FOR NOW	/047 CJL
	CML RAR			/SET NEW STATE VALUE			/047 CJL
	DCA	RINWAIT		/STORE IT
REMCHEC,TAD	REMWAIT		/GET OUTPUT WAIT FLAG
	SZA CLA			/SKIP IF NOT WAITING
	JMP I	REMUPDATE	/JUST RETURN IF WAITING
	TAD	REMINSERT	/GET OUTPUT INSERTION POINTER
	CIA			/INVERT FOR TEST
	TAD	REMREMOVE	/COMPARE TO OUTPUT REMOVAL POINTER
	SNA CLA			/SKIP IF BUFFER CONTAINS SOMETHING	/047 CJL
	JMP I	REMUPDATE	/RETURN IF BUFFER EMPTY			/047 CJL
	CDF	BUFFLD		/GOTO BUFFER FIELD
	TAD I	REMREMOVE	/GET A CHARACTER FROM THE BUFFER
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMS I	(REMPUT)	/TRY TO OUTPUT THE CHARACTER NOW	/047 CJL
	JMP I	REMUPDATE	/COULDN'T DO IT, SO JUST RETURN		/047 CJL
	NL0001			/SET BUFFER INCREMENT
	TAD	REMREMOVE	/BUMP REMOVAL POINTER
	AND	[BUFSIZE-1]	/JUST BUFFER BITS
	TAD	[REMBUFFER]	/MAKE IT ABSOLUTE
	DCA	REMREMOVE	/STORE UPDATED POINTER
	JMP I	REMUPDATE	/RETURN

	REMTEMP=REMUPDATE	/REMOTE OUTPUT TEMPORARY
/	LOW-LEVEL CONSOLE OUTPUT ROUTINE.				/047 CJL

/	CALLING SEQUENCE:

/	[CHARACTER TO OUTPUT IN THE AC]

/	JMS I	(CONPUT)	/CALL ROUTINE
/	NO OUTPUT		/RETURNS HERE IF OUTPUT UNAVAILABLE
/	OUTPUT			/RETURNS HERE IF CHARACTER WAS OUTPUT

CONPUT,	.-.			/CONSOLE OUTPUT ROUTINE
CONTSF,	TSFIOT			/FLAG UP?
	JMP	CONCLEAR	/NO, FORGET IT
CONTLS,	TLSIOT			/YES, OUTPUT THE CHARACTER NOW
	ISZ	CONPUT		/TAKE SKIP RETURN
CONCLEA,CLA			/CLEAN UP
	JMP I	CONPUT		/RETURN EITHER WAY

/	CONSOLE RESET ROUTINE.						/026 CJL

/	CALLING SEQUENCE:

/	JMS I	(CONRESET)	/CALL ROUTINE
/	RETURN			/RETURN WITH CLEAR AC

/	RETURNS WITH CLEAR AC AND ALL CONSOLE VARIABLES RESET.

CONRESE,.-.			/CONSOLE RESET ROUTINE
	TAD	[CONBUFFER]	/SETUP THE
	DCA I	(CONINSERT)	/CONSOLE OUTPUT INSERTION POINTER
	TAD	[CONBUFFER]	/SETUP THE
	DCA I	(CONREMOVE)	/CONSOLE OUTPUT REMOVAL POINTER
	TAD	[KEYBUFFER]	/SETUP THE
	DCA I	(KEYINSERT)	/KEYBOARD INSERTION POINTER
	TAD	[KEYBUFFER]	/SETUP THE
	DCA I	(KEYREMOVE)	/KEYBOARD REMOVAL POINTER
	DCA I	(CONWAIT)	/CLEAR OUTPUT WAIT
	DCA	KEYERROR	/CLEAR KEYBOARD ERROR
	JMP I	CONRESET	/RETURN
/	LOW-LEVEL REMOTE LINE OUTPUT ROUTINE.				/047 CJL

/	CALLING SEQUENCE:

/	[CHARACTER TO OUTPUT IN THE AC]

/	JMS I	(REMPUT)	/CALL ROUTINE
/	NO OUTPUT		/RETURNS HERE IF OUTPUT UNAVAILABLE
/	OUTPUT			/RETURNS HERE IF CHARACTER WAS OUTPUT

REMPUT,	.-.			/REMOTE LINE OUTPUT ROUTINE
DM1AN2,	AND	[377]		/ENSURE EIGHT BIT			/049 CJL

/	THE  ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.  THE DEFAULT INSTRUCTION  IS
/	FOR KL8 INTERFACES.

	*DM1AN2			/OVERLAY DECMATE II CODE		/049 CJL

DM1AN2,	SKP			/WE'RE NOT A DECMATE I			/049 CJL
	TAD	[400]		/SET WRITE BIT				/049 CJL
REMTSF,	DCA	RMPTEMP		/SAVE PASSED VALUE
RMPUT0,	TAD	OUTFLAG		/CHECK IF OUTPUT IS AVAILABLE
REMTLS,	SNA CLA			/SKIP IF SO
RMPUT1,	JMP I	REMPUT		/RETURN IF NOT
REMCLEA,TAD	RMPTEMP		/GET THE PASSED VALUE
RMPUT2,	OLS			/OUTPUT THE CHARACTER NOW

/	THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY.  THE DEFAULT  INSTRUCTIONS
/	ARE FOR KL8 INTERFACES.

	*REMTSF			/OVERLAY DECMATE II CODE

REMTSF,	RTSFIOT			/FLAG UP?
RMPUT0,	JMP	REMCLEAR	/NO, FORGET IT
REMTLS,	RTLSIOT			/YES, OUTPUT THE CHARACTER NOW
RMPUT1,	ISZ	REMPUT		/TAKE SKIP RETURN
REMCLEA,CLA			/CLEAN UP
RMPUT2,	JMP I	REMPUT		/RETURN EITHER WAY

	CLA			/CLEAN UP
	DCA	OUTFLAG		/INDICATE OUTPUT IS UNAVAILABLE
	ISZ	REMPUT		/TAKE SKIP RETURN
	JMP I	REMPUT		/RETURN TO CALLER

	RMPTEMP=CONRESET	/REMOTE OUTPUT TEMPORARY

	PAGE
/	SEVEN-BIT COMMAND TABLES.					/034 CJL

	CMDTBL=	.		/COMMAND TABLE HERE

	"C&177;	"O&177;	"N&177	/\
	"N&177;	"E&177;	"C&177	/ >CONNECT COMMAND
	"T&177;	-1		//
	CONSRV			/CONNECT ROUTINE ADDRESS

	"F&177;	"I&177;	"N&177	/\
	"I&177;	"S&177;	"H&177	/ >FINISH COMMAND
	-1			//
	FINSRV			/FINISH ROUTINE ADDRESS

	"E&177;	"X&177;	"I&177	/EXIT
	"T&177;	-1		/COMMAND
	EXITKERMIT		/EXIT ROUTINE ADDRESS

	"S&177;	"E&177;	"N&177	/SEND
	"D&177;	-1		/COMMAND
	SNDSRV			/SEND ROUTINE ADDRESS

	"G&177;	"E&177;	"T&177	/GET
	-1			/COMMAND
	GETSRV			/GET ROUTINE ADDRESS

	"R&177;	"E&177;	"C&177	/\
	"E&177;	"I&177;	"V&177	/ >RECEIVE COMMAND
	"E&177;	-1		//
	RECSRV			/RECEIVE ROUTINE ADDRESS
	"H&177;	"E&177;	"L&177	/HELP
	"P&177;	-1		/COMMAND
	HELPSRV			/HELP ROUTINE ADDRESS

	-1			/THIS ENDS THE TABLE			/034 CJL

/	REMOTE PACKET INPUT BUFFER.					/014 CJL

RRBUF,	0			/MARK
RRLEN,	0			/PACKET LENGTH
RRSEQ,	0			/PACKET SEQ
RRTYP,	0			/PACKET TYPE

	DECIMAL

RRDTA,	ZBLOCK	91		/DATA GOES HERE

	OCTAL

RTERMI,	0			/ADD LOCATION WHERE TERMINATOR IS STORED/A004
				/ON RECEIVE IF BUFFER IS MAXIMUM LENGTH	/A004

/	REMOTE PACKET OUTPUT BUFFER

RSBUF,	CNTRLA			/PACKET BUFFER (BEGINS WITH "SOH")	/034 CJL
RSLEN,	0			/PACKET LENGTH GOES HERE
RSSEQ,	0			/PACKET SEQUENCE GOES HERE
RSTYP,	0			/PACKET TYPE GOES HERE

	DECIMAL

RSDTA,	ZBLOCK	91		/DATA GOES HERE

	0			/CHECKSUM HERE ON MAX PACKET
	0			/EOL (IF USED HERE ON MAX PACKET)
	0			/INTERNAL TERMINATOR HERE ON MAX PACKET

	OCTAL
/	SEND-INIT PACKET DEFINITION

INIDAT,	DECIMAL

	94+32			/94 CHARS MAX

	OCTAL

	"/&177			/15 SECOND TIME-OUT			/M013/014 CJL
	" &177			/NO PADDING
	0+100&177		/NO PADDING CHAR
	" &177+15		/CR FOR EOL
	"#&177			/QUOTE CHAR
	"N&137			/NO 8TH BIT QUOTING
	"1&177			/CHECK TYPE 1
	" &177			/NO REPEAT CHAR
	" &177+0		/NO EXTRA CAPABILITY
NODATA,	-1			/END OF DATA (USE THIS FOR SENDING NO-DATA)
	PAGE			/GET TO NEXT PAGE			/028 CJL

/	NO-INTERRUPT CONSOLE INPUT/OUTPUT SUPPORT ROUTINES.		/023 CJL

/	MODIFIED FOR FORCED-ECHO AND COLUMN-COUNTING.			/043 CJL

/	CONSOLE INPUT ROUTINE.  RETURNS  LATEST  CHARACTER  WITHOUT  ECHOING.   MAY BE
/	CALLED WITH DIRTY AC.  RETURNS LATEST SEVEN-BIT CHARACTER TYPED WHILE FIELDING
/	POTENTIAL <^S>/<^Q> PROTOCOL.

INPUT,	.-.			/CONSOLE INPUT ROUTINE
INPWAIT,JMS	CHKUP		/TRY TO GET A CHARACTER
	TAD	INCHAR		/GET THE CHARACTER
	SNA			/SKIP IF ANYTHING CAME IN
	JMP	INPWAIT		/WAIT FOR ANYTHING
	JMP I	INPUT		/RETURN WITH LATEST CHARACTER

/	CONSOLE  OUTPUT  ROUTINE.    OUTPUTS  CHARACTER  IN  AC  (INCLUDING  <HT>  VIA
/	SIMULATION).  RETURNS WITH CLEAR AC.  SUBJECT TO CONSOLE ECHO STATUS (ECHOSW).

P7CH,	.-.			/CONSOLE OUTPUT ROUTINE
	TAD	(-CNTRLI)	/COMPARE TO <HT>
	SNA			/SKIP IF OTHER
	JMP	DOTAB		/JUMP IF <HT>
	TAD	L11/(CNTRLI)	/RESTORE THE CHARACTER
	JMS	P7CHAR		/PRINT IT (UPDATING COLUMN COUNT)
	JMP I	P7CH		/RETURN

DOTAB,	TAD	[" &177]	/GET A <SPACE>
	JMS	P7CHAR		/OUTPUT IT
	TAD	COLUMN		/GET CURRENT COLUMN COUNT
	AND	[7]		/JUST TAB BITS
	SZA CLA			/SKIP IF NOW AT NEW TAB STOP
	JMP	DOTAB		/ELSE KEEP GOING
	JMP I	P7CH		/RETURN

/	FORCED-ECHO  CONSOLE  OUTPUT ROUTINE.  SAME AS P7CH BUT CLEARS  ECHOSW  BEFORE
/	OUTPUT OF THE CHARACTER.

P7ECHO,	.-.			/CONSOLE OUTPUT WITH FORCED-ECHO ROUTINE
	DCA	P7TEMP		/SAVE PASSED VALUE
	DCA	ECHOSW		/CLEAR ECHO STATUS
	TAD	P7TEMP		/RESTORE THE CHARACTER
	JMS	P7CH		/CALL MAIN ROUTINE
	JMP I	P7ECHO		/RETURN
CHKUP,	.-.				/CHECK FOR <^C>, ETC. ROUTINE
	JMS	CTLCTST			/CALL LOW-LEVEL INPUT CHECK ROUTINE
	SNA				/SKIP IF ANYTHING CAME BACK
	JMP	CHKCLR			/ELSE FORGET IT
	TAD	(-CNTRLP)		/COMPARE TO <^P>
	SNA				/SKIP IF OTHER
	JMP	DOUP			/GO HANDLE <^P> THERE
	IAC	/TAD	(-CNTRLO+CNTRLP)/COMPARE TO <^O>
	SNA				/SKIP IF OTHER
	JMP	DOUO			/GO HANDLER <^O> THERE
	TAD	(-CNTRLS+CNTRLO)	/COMPARE TO <^S>
	SZA CLA				/SKIP IF IT MATCHES
	JMP I	CHKUP			/RETURN ON UNIMPORTANT CHARACTERS
UQWAIT,	JMS	CTLCTST			/CALL LOW-LEVEL INPUT CHECK ROUTINE
	TAD	(-CNTRLQ)		/COMPARE TO <^Q>
	SZA CLA				/SKIP IF IT MATCHES
	JMP	UQWAIT			/ELSE WAIT FOR <^Q> FOREVER
CHKCLR,	DCA	INCHAR			/OBLITERATE INPUT CHARACTER
	JMP I	CHKUP			/RETURN

/	COMES HERE TO HANDLE <^P>.

DOUP,	TAD	("P&177)		/GET A "P"
	JMS	UPRINT			/PRINT "^P"
	JMP I	UPADDRESS		/GO WHERE YOU SHOULD

/	COMES HERE TO HANDLE <^O>.

DOUO,	TAD	("O&177)		/GET AN "O"
	JMS	UPRINT			/PRINT "^O"
	NL4000				/SET REVERSING BIT
	TAD	ECHOSW			/REVERSE THE ECHO STATE
	DCA	ECHOSW			/STORE BACK
	JMP	CHKCLR			/OBLITERATE <^O> AND RETURN

CTLCTST,.-.				/LOW-LEVEL <^C> TEST ROUTINE
	CLA				/CLEAN UP
KSFLOC,	KSFIOT				/FLAG UP?
	JMP I	CTLCTST			/NO, JUST RETURN
KRSZAP,	KRSIOT				/**** 6120 **** KRBIOT
	AND	[177]			/JUST SEVEN-BIT
	DCA	INCHAR			/SAVE THE CHARACTER
	NL7775				/SET -<^C> VALUE
	TAD	INCHAR			/COMPARE TO CHARACTER
	SNA CLA				/SKIP IF OTHER THAN <^C>
	JMP I	UCADDRESS		/JUMP IF <^C>
KCCZAP,	KCCIOT				/**** 6120 **** 0000
	TAD	INCHAR			/GET THE CHARACTER
	JMP I	CTLCTST			/RETURN
P7CHAR,	.-.			/LOWER-LEVEL CONSOLE PRINT ROUTINE
	DCA	P7TEMP		/SAVE PASSED VALUE
P7AGN,	JMS	CHKUP		/CHECK FOR <^C>, ETC.
	TAD	ECHOSW		/GET CURRENT ECHO STATUS
	SPA CLA			/SKIP IF ECHO ON
	JMP	P7OFF		/JUMP IF ECHO OFF
	TAD	P7TEMP		/GET THE PASSED VALUE BACK
	JMS	P7OUT		/TRY TO OUTPUT IT
	JMP	P7AGN		/COULDN'T OUTPUT, GO WAIT THERE
P7OFF,	JMS	CHKUP		/CHECK FOR <^C>, ETC.
	TAD	P7TEMP		/GET THE CHARACTER BACK
	AND	[140]		/JUST QUADRANT BITS
	SZA CLA			/SKIP IF CONTROL CHARACTER
	ISZ	COLUMN		/BUMP COLUMN IF PRINTING CHARACTER
L11,	CNTRLI/NOP		/JUST IN CASE
	TAD	P7TEMP		/GET THE CHARACTER AGAIN
	TAD	(-CNTRLM)	/COMPARE TO <CR>
	SNA			/SKIP IF NOT <CR>
	DCA	COLUMN		/CLEAR COLUMN COUNT ON <CR>
	TAD	(-CNTRLH+CNTRLM)/COMPARE TO <BS>
	SNA CLA			/SKIP IF OTHER
	NL7777			/SET BACKUP VALUE
	TAD	COLUMN		/UPDATE COLUMN COUNT
	DCA	COLUMN		/STORE BACK
	JMP I	P7CHAR		/RETURN

P7OUT,	.-.			/LOW-LEVEL CONSOLE OUTPUT ROUTINE
P7TSF,	TSFIOT			/FLAG UP?
	JMP I	P7OUT		/NO, TAKE IMMEDIATE RETURN WITH AC INTACT
P7TLS,	TLSIOT			/YES, OUTPUT IT
	CLA			/CLEAN UP
	ISZ	P7OUT		/BUMP RETURN ADDRESS
	JMP I	P7OUT		/TAKE SKIP RETURN TO CALLER

/	COMES HERE TO HANDLE <^C> IF SO ENABLED.

UPCPRT,	TAD	("C&177)	/GET A "C"
	JMS	UPRINT		/PRINT "^C"
KCCZP2,	KCCIOT			/**** 6120 **** 0000
	JMP I	[CLOOP]		/RESTART

UPRINT,	.-.			/"^"<CHARACTER> PRINTING ROUTINE
	DCA	P7TEMP		/SAVE PASSED VALUE
	TAD	("^&177)	/GET AN "^"
	JMS	P7OUT		/OUTPUT IT
	JMP	.-1		/WAIT FOR IT
	TAD	P7TEMP		/GET PASSED VALUE
	JMS	P7OUT		/OUTPUT IT
	JMP	.-1		/WAIT FOR IT
	JMP I	UPRINT		/RETURN

P7TEMP,	.-.			/OUTPUT ROUTINE TEMPORARY
	PAGE

/	HANDLER I/O BUFFER DEFINITIONS.					/014 CJL

	HNDLR=	.		/BUFFER FOR DISK I/O HANDLER		/014 CJL

	*PAGCNT^200+HNDLR	/RESET ORIGIN PAST HANDLER BUFFER	/014 CJL

	IFNZRO	SBOOT-.&4000	<ERROR	.>				/028 CJL

	*SBOOT-1		/JUST BEFORE EXIT ADDRESS		/025 CJL

	EXITKER=.		/WHERE TO EXIT TO			/025 CJL
/	ONCE-ONLY INITIALIZATION CODE.					/024 CJL

	*HNDLR			/OVER AVAILABLE SPACE

INITIAL,CLA CLL			/CLEAN UP
COUTINI,TLSIOT			/RAISE CONSOLE OUTPUT FLAG		/046 CJL
	TAD	INITIA/(CLA CLL)/GET REPLACEMENT INSTRUCTION
	DCA I	[CLOOP]		/DON'T COME BACK TO US
	JMS I	(MACHINE)	/IDENTIFY CPU TYPE
	DCA	CPUTEMP		/SAVE IT
	TAD	CPUTEMP		/GET CPU TYPE
	TAD	(-13)		/COMPARE TO DEADLY 6120 VALUE
	SNA CLA			/SKIP IF OTHER
	JMP	INI6120		/JUMP IF IT MATCHES
ROUTINI,RTLSIOT			/INITIALIZE REMOTE OUTPUT		/046 CJL
RININIT,RKRBIOT			/INITIALIZE REMOTE INPUT		/046 CJL
	CLA			/CLEAN UP
INITPRT,JMS I	[SCRIBE]	/GIVE THEM THE
	INITMSG			/OPENING MESSAGE
	JMS I	[SCRIBE]	/GIVE THEM THE
	DAYMSG			/DAY MESSAGE
	JMS I	[SCRIBE]	/GIVE THEM THE
	MONMSG			/MONTH MESSAGE
	JMS I	[SCRIBE]	/GIVE THEM THE
	YEARMSG			/YEAR MESSAGE
	JMS I	[SCRIBE]	/GIVE THEM THE
	CPUTMSG			/CPU ID MESSAGE
	TAD	CPUTEMP		/*1
	CLL RTL			/*4
	TAD	CPUTEMP		/*5
	TAD	(CPULIST)	/POINT TO PROPER MESSAGE
	DCA	TST6120		/STORE IN-LINE
	JMS I	[SCRIBE]	/TELL THEM THEIR
TST6120,0			/ACTUAL CPU ID
	JMS I	[SCRIBE]	/GIVE THEM THE
	CLOSMSG			/CLOSING MESSAGE
DMPRZAP,JMP	.+3		/**** DECMATE USAGE DETECTED **** 0000
	JMS I	[SCRIBE]	/GIVE THEM THE
SPZAP,	DMPOMSG			/DECMATE PORT MESSAGE
	JMS I	[SCRIBE]	/GIVE THEM THE
	CRLF			/END OF LINE
	JMS I	[SCRIBE]	/GIVE THEM THE
	LCLMSG			/LOCAL PREFERENCE MESSAGE
	JMS I	[SCRIBE]	/TELL THEM THEY CAN
	THLPMSG			/ASK FOR HELP
	TAD	CPUTEMP		/GET CPU TYPE
	CLL RTL			/*4
	TAD	(CPUPRMPT-1)	/POINT TO PROPER ENTRY
	DCA	XR0		/STASH THE POINTER
	TAD	(-4)		/GET MOVE COUNT
	JMS	MESMOVE		/MOVE THE PROPER PROMPT TEXT
	PROMID-1		/TO THERE
	TAD	CPUTEMP		/*1
	CLL RTL			/*4
	TAD	CPUTEMP		/*5
	TAD	(CPUIDLST-1)	/POINT TO PROPER ENTRY
	DCA	XR0		/STASH THE POINTER
	TAD	(-5)		/GET MOVE COUNT
	JMS	MESMOVE		/MOVE THE PROPER CPU ID TEXT
	CPUMSG-1		/TO THERE
	CIF	USRFLD		/GOTO USR FIELD				/035 CJL
	JMS I	(USR)		/CALL USER SERVICE ROUTINE		/035 CJL
	USRIN			/LOCK USR IN				/035 CJL

/	DO FURTHER INITIALIZATION HERE.

	JMP I	[CLOOP]		/GO BACK TO KERMIT PROPER

/	COMES HERE TO INITIALIZE 6120-BASED MACHINES.			/046 CJL

INI6120,DCA I	(KCCZAP)	/ELIMINATE KCCIOT
	DCA I	(KCCZP2)	/ELIMINATE KCCIOT
	ISZ I	(KRSZAP)	/TURN KRSIOT
	ISZ I	(KRSZAP)	/INTO KRBIOT
	TAD	ROUTINITIALIZE	/GET OUTPUT INITIALIZE INSTRUCTION	/046 CJL
	TAD	(-6336)		/COMPARE TO POSSIBLE VALUE		/046 CJL
	SZA CLA			/SKIP IF IT MATCHES SERIAL PRINTER VALUE/046 CJL
	JMP	TRYDM1		/JUMP IF NOT CONFIGURED FOR SERIAL PORT	/046 CJL
	TAD	RININITIALIZE	/GET INPUT INITIALIZE INSTRUCTION	/046 CJL
	TAD	(-6326)		/COMPARE TO POSSIBLE VALUE		/046 CJL
	SNA CLA			/SKIP IF NOT CONFIGURED FOR SERIAL PORT	/046 CJL
	JMP	DMSER		/JUMP IF SERIAL PORT CONFIGURATION	/046 CJL
TRYDM1,	CLSK			/SKIP ON, CLEAR CLOCK FLAG IF DECMATE II/046 CJL
	NOP			/JUST IN CASE				/046 CJL
	CLCL			/CLEAR VT278 CLOCK FLAG			/046 CJL
	NOP			/JUST IN CASE				/046 CJL
	ISZ	TST6120		/WASTE					/046 CJL
	JMP	.-1		/SOME TIME				/046 CJL
	CLSK8A			/VT278 CLOCK FLAG UP?			/046 CJL
	JMP	TRYDM2		/NO, TRY DECMATE II, ETC.		/046 CJL
	DCA	DMPRZAP		/MAKE IT PRINT OUR MESSAGE		/050 CJL
	CIF CDF	DMIFLD		/GOTO DECMATE ONCE-ONLY CODE FIELD	/046 CJL
	JMP I	(DM1INIT)	/CONTINUE THERE				/046 CJL

TRYDM2,	CLSK			/CLOCK FLAG UP?				/046 CJL
	JMP	ROUTINITIALIZE	/NO, MUST BE SOMEBODY ELSE!		/046 CJL
	DCA	DMPRZAP		/MAKE IT PRINT OUR MESSAGE		/048 CJL
	CIF CDF	DMIFLD		/GOTO DECMATE ONCE-ONLY FIELD		/046 CJL
	JMP I	(DM2INIT)	/CONTINUE THERE				/046 CJL

/	COMES HERE IF SERIAL PORT CONFIGURATION ON DECMATE.

DMSER,	DCA	DMPRZAP		/MAKE IT PRINT OUR MESSAGE		/048 CJL
	TAD	(DMPPMSG)	/GET OUR MESSAGE ADDRESS		/048 CJL
	DCA	SPZAP		/STORE IN-LINE				/048 CJL
	JMP	ROUTINITIALIZE	/CONTINUE THERE
MESMOVE,.-.			/MESSAGE MOVE ROUTINE
	DCA	MMOVCNT		/SAVE PASSED COUNT
	TAD I	MESMOVE		/GET THE PASSED ARGUMENT
	DCA	XR1		/SET IT UP
	ISZ	MESMOVE		/BUMP PAST ARGUMENT
	CDF	MSGFLD		/GOTO BUFFER FIELD
MESMVLP,TAD I	XR0		/GET A WORD
	DCA I	XR1		/PUT A WORD
	ISZ	MMOVCNT		/DONE YET?
	JMP	MESMVLP		/NO, GO BACK
	CDF	PRGFLD		/BACK TO OUR FIELD
	JMP I	MESMOVE		/YES, RETURN

CPUTEMP,.-.			/TEMPORARY FOR MACHINE TYPE
MMOVCNT,.-.			/TEMPORARY FOR MOVE COUNT

	PAGE
/	CPU IDENTIFYING ROUTINE.					/024 CJL

/	RETURNS VALUE IN AC ACCORDING TO THE FOLLOWING RULE:

/	AC	CPU TYPE

/	0	UNKNOWN (DCC112, MP-12?)
/	1	PDP-5 (THE INCOMPATIBLE ONE!)
/	2	PDP-8 (THE REAL ONE!)
/	3	PDP-8/S	(THE SLOW ONE!)
/	4	LINC-8 (THE STRANGE ONE!)
/	5	PDP-8/I (THE ORANGE ONE!)
/	6	PDP-8/L (THE STRIPPED-DOWN ONE!)
/	7	PDP-12 (THE GREEN ONE! (BLUE?))
/	10	PDP-8/E (THE FAST ONE!)
/	11	PDP-8/A (THE WIDE ONE!)
/	12	6100 (THE MICRO ONE!)
/	13	6120 (THE HARRIS ONE!)

MACHINE,.-.			/MACHINE IDENTIFYING ROUTINE
	CLA CLL			/THIS WORKS ON EVERYBODY!
	TAD	0		/GET PDP-5 PC
	DCA	MACHTEMP	/SAVE IT
	TAD	(IMA5-1)	/GET PDP-5 NEW PC
	DCA	0		/STORE IT

/	IF WE GET HERE, WE'RE NOT A PDP-5.

	TAD	MACHTEMP	/GET OLD LOCATION ZERO
	DCA	0		/RESTORE IT
	NL3776			/PDP-8/I, L WEIRDNESS
	TAD	(-3776)		/COMPARE TO POSSIBLE VALUE
	SNA CLA			/SKIP IF NOT THOSE TWO
	JMP	IMA8IL		/JUMP IF ONE OF THEM

/	IF WE GET HERE, WE'RE NOT A PDP-8/I OR PDP-8/L.

	NL7776			/SETUP -2
	TAD	(-7776)		/COMPARE TO EXPECTED VALUE
	SZA CLA			/SKIP IF OK
	JMP	IMA8S		/JUMP IF RETARDED BROTHER

/	IF WE GET HERE, WE'RE NOT A PDP-8/S.

	NL0100			/SETUP 0100
	TAD	(-100)		/COMPARE TO EXPECTED VALUE
	SNA CLA			/SKIP IF STRAIGHT PDP-8
	JMP	IMAOMNIBUS	/JUMP IF NEWER CPU
/	IF WE GET HERE, WE ARE A PDP-8, BUT ARE WE A LINC-8?

	NL7777				/SETUP LINC TEST VALUE
	IACA				/LOAD LINC "A" REGISTER
	CLA				/CLEAN UP
	IAAC				/GET IT BACK
	IAC				/ADD ONE
	SNA CLA				/SKIP IF NO LINC HARDWARE
	JMP	IMAL8			/JUMP IF LINC-8

/	SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE A PDP-8.

	JMP	IMA8			/GO TELL THEM WE ARE A PDP-8

/	COMES HERE IF PDP-8/I OR PDP-8/L.

IMA8IL,	NL7777				/SETUP TEST VALUE
	CLA!401				/DO PDP-8/I GROUP THREE EAE CLA
	SZA CLA				/SKIP IF PDP-8/I
	JMP	IMA8L			/JUMP IF NOT

/	IF WE GET HERE, WE ARE A PDP-8/I, BUT ARE WE A PDP-12?

	LINC				/GOTO LINC MODE
	COM				/COMPLEMENT AC IF PDP-12, ELSE A HARMLESS AND
	PDP				/GOTO PDP8 MODE IF PDP-12, ELSE HARMLESS AND
	IAC				/ADD ONE FOR TEST
	SNA CLA				/SKIP IF JUST PDP-8/I
	JMP	IMA12			/JUMP IF ACTUALLY A LINC-8/I

/	SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE JUST A PDP-8/I.

	JMP	IMA8I			/TELL THEM WE ARE A PDP-8/I

IMAOMNI,RTL RTR				/DO STRANGE OMNIBUS INSTRUCTION
PC8A,	SNA				/SKIP IF NOT A MICRO CHIP
	JMP	IMA61			/JUMP IF ONE OF THOSE THINGS
	TAD	(.&7600+16^7777)	/CHECK FOR PDP-8/E VALUE
	SNA				/SKIP IF NOT HIM
	JMP	IMA8E			/JUMP IF IT IS A PDP-8/E (/F OR /M OR 8A-6XX)
	TAD	(.&7600+16-PC8A)	/COMPARE TO PDP-8/A VALUE	/051 CJL
	SNA CLA				/SKIP IF SOMEBODY ELSE
	JMP	IMA8A			/JUMP IF IT MATCHES

/	IF WE GET HERE, SOME STRANGE PROCESSOR IS RUNNING US.

	JMP	IMAUNKNOWN		/YOU FIGURE IT OUT!
/	IF WE GET HERE, WE ARE A 6100 OR 6120.

IMA61,	NL0010			/DO 6120 SPECIAL INSTRUCTION
	TAD	(-10)		/COMPARE TO EXPECTED VALUE
	SNA CLA			/SKIP IF OTHER
	JMP	IMA6120		/JUMP IF IT MATCHES

/	WE APPARENTLY ARE ON A 6100, SO TELL THEM SO.

	JMP	IMA6100		/TELL THEM WE ARE A 6100 MACHINE (VT-78, ETC.)

/	RETURN GAUNTLET.

IMA6120,IAC			/SET 6120 VALUE
IMA6100,IAC			/SET 6100 VALUE
IMA8A,	IAC			/SET PDP-8/A VALUE
IMA8E,	IAC			/SET PDP-8/E VALUE
IMA12,	IAC			/SET PDP-12 VALUE
IMA8L,	IAC			/SET PDP-8/L VALUE
IMA8I,	IAC			/SET PDP-8/I VALUE
IMAL8,	IAC			/SET LINC-8 VALUE
IMA8S,	IAC			/SET PDP-8/S VALUE
IMA8,	IAC			/SET PDP-8 VALUE
IMA5,	IAC			/SET PDP-5 VALUE
IMAUNKN,JMP I	MACHINE		/RETURN

MACHTEM,.-.			/TEMPORARY FOR LOCATION ZERO

	PAGE
	FIELD	PRGFLD%10	/DUMP THE LITERALS NOW
/	LAYOUT OF FIELD ONE (PERMANENT CONTENTS).			/046 CJL

	NOPUNCH				/FOOL THE ASSEMBLER		/046 CJL

	FIELD	USRFLD%10		/USR FIELD			/046 CJL

	*0				/WHERE IT LOADS			/046 CJL

USRLOAD,ZBLOCK	200-.			/GET TO ENTRY POINT		/046 CJL

	USRENTR=.			/LOCKED-IN USR ENTRY POINT	/046 CJL

USRENTR,ZBLOCK	2000-.			/USR OWNS REST OF THIS AREA	/046 CJL

	FILBUFF=.			/FILE I/O DONE HERE		/046 CJL

	FIELD	BUFFLD%10		/FILE I/O BUFFER FIELD		/046 CJL

	*FILBUFFER			/RESET ORIGIN			/046 CJL

FILBUFF,ZBLOCK	PAGCNT^200		/THIS IS THE FILE I/O BUFFER	/046 CJL

	DIRBUFF=.			/DIRECTORY LOOKUP I/O DONE HERE	/028 CJL

	FIELD	DIRFLD%10		/DIRECTORY LOOKUP BUFFER FIELD	/028 CJL

	*DIRBUFFER			/RESET ORIGIN			/028 CJL

FILECNT,.-.				/-(NUMBER OF ENTRIES IN THIS SEGMENT)
FRSTREC,.-.				/FIRST RECORD OF FIRST ENTRY IN THIS SEGMENT
DIRLINK,.-.				/LINK TO NEXT SEGMENT; 0 IF LAST ACTIVE ONE
	.-.				/TENTATIVE ENTRY POINTER STORED HERE
AIWNUMB,.-.				/-(NUMBER OF ADDITIONAL INFORMATION WORDS)

	ENTSTRT=.			/FILE ENTRIES START HERE	/046 CJL

	ZBLOCK	PAGCNT^200+DIRBUFFER-.	/DIRECTORY ENTRIES HERE		/046 CJL

/	CONNECT MODE I/O BUFFERS.					/026 CJL

KEYBUFF,ZBLOCK	BUFSIZE			/KEYBOARD BUFFER		/026 CJL
CONBUFF,ZBLOCK	BUFSIZE			/CONSOLE OUTPUT BUFFER		/026 CJL
RINBUFF,ZBLOCK	BUFSIZE			/REMOTE INPUT BUFFER		/026 CJL
REMBUFF,ZBLOCK	BUFSIZE			/REMOTE OUTPUT BUFFER		/026 CJL

	FLD1ADR=.			/SPACE AVAILABLE FOR TEXT, ETC.	/046 CJL

	ENPUNCH				/UN-FOOL THE ASSEMBLER		/046 CJL
/	DECMATE ONCE-ONLY CODE.						/046 CJL

	FIELD	DMIFLD%10		/DECMATE ONCE-ONLY CODE FIELD	/046 CJL

	*USRLOAD			/OVER USR ROUTINE		/046 CJL

/	PAGE ZERO FOR ONCE-ONLY CODE.					/046 CJL

	*10				/GET TO AUTO-INDEX AREA		/048 CJL

XR0,	.-.				/AUTO-INDEX ZERO		/048 CJL

	*USRENTRY			/OVER USR ENTRY POINT		/046 CJL

/	DECMATE I ONCE-ONLY CODE.					/046 CJL

DM1INIT,JMS I	(DM1PORT)		/INITIALIZE THE REMOTE PORTS	/050 CJL
	TAD	(DM1LIST-1)		/POINT TO REPLACEMENT LIST	/050 CJL
	JMS	REPLACE			/ZAP IN ALL OF OUR PATCHES	/050 CJL
	CDF	PRGFLD			/GOTO MAIN FIELD		/050 CJL
	TAD I	(DIRXR)			/GET PORT SELECTION		/050 CJL
	SNA CLA				/SKIP IF PORT 1 REQUIRED	/050 CJL
	JMP	USEP0			/JUMP IF PORT 0 REQUIRED	/050 CJL
	TAD	(DM1SEC-1)		/POINT TO REPLACEMENT LIST	/050 CJL
	JMS	REPLACE			/ZAP IN SECONDARY PATCHES	/050 CJL
USEP0,	CIF CDF	PRGFLD			/BACK TO REST OF INITIALIZATION	/046 CJL
	JMP I	(INITPRT)		/CONTINUE THERE			/046 CJL

/	DECMATE II, ETC. ONCE-ONLY CODE.				/046 CJL

DM2INIT,JMS I	(DMIPORT)		/INITIALIZE THE REMOTE PORT	/048 CJL
	TAD	(DM2LIST-1)		/POINT TO REPLACEMENT LIST	/048 CJL
	JMS	REPLACE			/ZAP IN ALL OF OUR PATCHES	/048 CJL
	CIF CDF	PRGFLD			/BACK TO REST OF INITIALIZATION	/046 CJL
	JMP I	(INITPRT)		/CONTINUE THERE			/046 CJL

REPLACE,.-.				/REPLACEMENT ROUTINE		/048 CJL
	DCA	XR0			/SAVE PASSED LIST POINTER	/048 CJL
REPLUP,	CDF	DMIFLD			/BACK TO OUR FIELD		/048 CJL
	TAD I	XR0			/GET AN ADDRESS			/048 CJL
	SNA				/SKIP IF NOT AT END OF LIST	/048 CJL
	JMP I	REPLACE			/RETURN IF END OF LIST		/048 CJL
	DCA	REPADR			/STASH THE ADDRESS		/048 CJL
	TAD I	XR0			/GET THE REPLACEMENT VALUE	/048 CJL
	CDF	PRGFLD			/GOTO ZAPPING FIELD		/048 CJL
	DCA I	REPADR			/ZAP IT IN			/048 CJL
	JMP	REPLUP			/KEEP GOING			/048 CJL

REPADR,	.-.				/REPLACEMENT ADDRESS TEMPORARY	/048 CJL
/	DECMATE I PORT INITIALIZE ROUTINE				/050 CJL

DM1PORT,.-.				/DECMATE I PORT INITIALIZE ROUTINE
	TAD	(234)			/GET PORT 0 SCD ENABLE VALUE
	WCON0				/WRITE PORT 0 CONTROL REGISTER
	NL0000				/INDICATE PORT 0
	JMS	PRTINIT			/INITIALIZE PORT 0

/	CHANGE ALL IOTS TO PORT 1 VALUES.

IOCLUP,	ISZ	PSETF1			/BUMP SET FLAG INSTRUCTION
	ISZ	PDUMRD			/BUMP DUMMY READ INSTRUCTION
	ISZ	PSETF2			/BUMP SET FLAG INSTRUCTION
	ISZ	PSKIP			/BUMP SKIP ON FLAG INSTRUCTION
	ISZ	PLOAD			/BUMP LOAD INSTRUCTION
	ISZ	IOTCNT			/DONE YET?
	JMP	IOCLUP			/NO, KEEP GOING

	TAD	(234)			/GET PORT 1 SCD ENABLE VALUE
	WCON1				/WRITE PORT 1 CONTROL REGISTER
	NL4000				/INDICATE PORT 1
	JMS	PRTINIT			/INITIALIZE PORT 1
	JMP I	DM1PORT			/RETURN

PRTINIT,.-.				/LOW-LEVEL PORT INTIALIZE ROUTINE
	RACD				/RESET DESIRED PORT
	ISZ	PWASTE			/WASTE
	JMP	.-1			/SOME TIME
	CLA				/CLEAN UP
PSETF1,	RTFL0				/SET THE FLAG NOW
	TAD	(2516)			/SETUP FOR 8 BITS, NO PARITY, ETC.
	JMS	PSEND			/SEND TO MODE REGISTER 1
	CDF	PRGFLD			/GOTO MAIN FIELD
	TAD I	(RATE)			/GET BAUD RATE NOW
	CDF	DMIFLD			/BACK TO OUR FIELD
	TAD	(2460)			/ADD ON CLOCK ENABLES, ETC.
	JMS	PSEND			/SEND TO MODE REGISTER 2
	TAD	(3425)			/GET ENABLE AND RESET VALUE
	JMS	PSEND			/SEND TO COMMAND REGISTER
PDUMRD,	RKRB0				/DO A DUMMY READ NOW
PSETF2,	RTFL0				/SET THE FLAG NOW
	CLA				/CLEAN UP
	JMP I	PRTINIT			/RETURN

PSEND,	.-.				/PORT WRITE ROUTINE
PSKIP,	RTSF0				/FLAG UP?
	JMP	PSKIP			/NO, WAIT FOR IT
PLOAD,	RTLS0				/YES, LOAD THE VALUE
	CLA				/CLEAN UP
	JMP I	PSEND			/RETURN

IOTCNT,	RKFL0-RKFL1			/INTER-DEVICE IOT COUNT
PWASTE,	0				/TIMER TEMPORARY
	PAGE
/	DECMATE II, ETC. PORT INITIALIZE ROUTINE.			/048 CJL

/	THIS ROUTINE IS MOSTLY  "DARK  GREY MAGIC" WHICH IS PRIMARILY DERIVED FROM THE
/	"OFFICIAL" INFORMATION TAKEN FROM THE ONLY KNOWN DOCUMENTATION, THE DECMATE II
/	PROGRAMMER'S REFERENCE MANUAL:  EK-DECM2-RM-001.  VARIOUS EMPLOYEES OF DIGITAL
/	EQUIPMENT CORPORATION (A MULTI-NATIONAL COMPANY) HAVE ADDITIONALLY CONTRIBUTED
/	TO THIS EFFORT BY PROVIDING PORTIONS OF THE  "SACRED SLUSHWARE NOTES" ON A NOT
/	NECESSARILY  WILLING  BASIS  THROUGH  THEIR RELEASED WORKS, SUCH AS,  BUT  NOT
/	LIMITED TO, THE SOURCES OF THE PARTICULAR VERSION OF KERMIT-8  KNOWN  AS K278.
/	IT  IS  ASSUMED THAT THESE PEOPLE HAVE ACCESS TO BETTER DOCUMENTATION  OF  THE
/	HARDWARE, AND  ESPECIALLY  DOCUMENTATION  OF  THE  THREE  DIFFERENT  MODELS OF
/	DECMATE (II, III, III+) THAT THESE ISSUES APPLY TO.

/	SINCE IT IS NOT KNOWN WHETHER THE K278, ETC.  CODE IS SPECIFIC AND PRECISE, OR
/	MERELY SLOPPY, VARIOUS "QUIRKY" CODING TECHNIQUES HAVE BEEN LEFT "AS IS", WITH
/	COMMENTS   REGARDING  POTENTIAL  VARIANCE  WITH  DOCUMENTATION  NOTED    WHERE
/	NECESSARY.  THE ORDER OF ACCESS TO THE  REGISTERS HAS BEEN LEFT INTACT IN CASE
/	OF POTENTIAL INTERACTION.  SEVERAL CHANGES HAVE BEEN MADE  BEYOND THIS WORK AS
/	A  RESULT  OF  TRIAL-AND-ERROR, AND ALSO HAND DIS-ASSEMBLY OF SEVERAL  DECMATE
/	DISKETTES' CONTENTS.

/	IT IS HOPED THAT FUTURE "NEGOTIATIONS" WITH DEC ALLOW FOR PROPER DISCLOSURE OF
/	THESE ISSUES TO AVOID POTENTIAL SOFTWARE FAILURES  EVIDENT  IN  THESE ROUTINES
/	DUE TO LACK OF PROPER DOCUMENTATION.

DMIPORT,.-.			/COMMUNICATIONS PORT INITIALIZE ROUTINE

/	ACCORDING TO THE DECMATE II MANUAL, THE FOLLOWING INSTRUCTION IS UNDEFINED.

	MPRESET			/RESET MULTIPROTOCOL COMMUNICATIONS CONTROLLER CHIP

/	THE DECMATE III HAS  AN  INTERNAL  MODEM  OPTION WHICH IS NOT AVAILABLE IN THE
/	DECMATE II.  THE INTERFACE  TO THIS DEVICE IS APPARENTLY SHARED WITH THE MPSCC
/	MODEM INTERFACE WE NORMALLY USE, SO THE REGISTER ACCESS MUST BE MORE CAREFULLY
/	DEFINED.  THE APPARENT DIFFERENTIATION IS THE CURRENT VALUE OF THE DATA FIELD,
/	NAMELY EITHER FIELD 0 OR 1.  IT  IS  NOT  KNOWN WHETHER THE THREE-BIT VALUE OF
/	THE DATA FIELD IS SIGNIFICENT (PRESUMABLY FOR FUTURE EXPANSION), OR MERELY THE
/	DATA  FIELD'S  LOW-ORDER  BIT  IS  USED, AS ALL KNOWN EXAMPLES  OF  ALLEDGEDLY
/	FUNCTIONAL CODE USE APPROPRIATE CDF 00 AND CDF 10 ONLY.   APPARENTLY THE MODEM
/	INTERFACE IS REFERRED TO AS "A" AND THE MPSCC INTERFACE IS REFERRED TO AS "B".

	TAD	(030)		/GET RESET VALUE
	CDF	00		/TALKING TO REGISTER 0A
	MPSCC			/RESET COMMUNICATIONS CHIP
	CDF	10		/TALKING TO REGISTER 0B
	MPSCC			/RESET COMMUNICATIONS CHIP
/	ACCORDING  TO  THE  DECMATE II MANUAL, CONTROL	REGISTER  2 "HAS  NO  RELEVANT
/	BITS...  IF IT IS EVER WRITTEN, IT MUST BE WRITTEN WITH ALL ZEROS." APPARENTLY
/	THE  MODEM  INTERFACE  DEMANDS  A  NON-ZERO  VALUE  BE  WRITTEN  TO REGISTER 2
/	(PRESUMABLY TO  DISABLE  IT).  TO SATISFY THE ABOVE REQUIREMENT (WHATEVER THIS
/	IMPLIES!), REGISTER 2(B)  IS  WRITTEN  WITH ALL ZEROS *LAST* IN CASE THIS IS A
/	DECMATE II WHERE THE DATA FIELD CONSIDERATIONS ARE MEANINGLESS.

	CDF	00		/TALKING TO REGISTER 0A
	NL0002			/WANT REGISTER 2A
	MPSCC			/SELECT IT
	TAD	(020-2)		/GET RESET VALUE
	MPSCC			/LOAD IT
	CDF	10		/TALKING TO REGISTER 0B
	NL0002			/WANT REGISTER 2B
	MPSCC			/SELECT IT
	NL0000			/GET RESET VALUE (000)
	MPSCC			/LOAD IT

/	THE K278 CODE DOES NOT HAVE SETUP CODE FOR REGISTER 4B, PRESUMABLY BECAUSE THE
/	CODE PERFORMS A PANEL  REQUEST  (PRQ3) WHICH SETS UP THE EQUIVALENT VALUES FOR
/	ASYNCHRONOUS OPERATION WITH ONE STOP  BIT  AND  NO PARITY.  IT IS NOT KNOWN IF
/	THE DECMATE III EVEN *HAS* A  REGISTER  4B, BUT PRESUMABLY IT IS AVAILABLE FOR
/	LOADING THE RIGHT VALUES COMPATIBLE WITH THE DECMATE II, OR ATTEMPTING TO LOAD
/	IT IS INNOCUOUS. 

	CDF	00		/TALKING TO REGISTER 0A
	NL0004			/WANT REGISTER 4A
	MPSCC			/SELECT IT
	TAD	(104-4)		/SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
	MPSCC			/LOAD IT
	CDF	10		/TALKING TO REGISTER 0B
	NL0004			/WANT REGISTER 4B
	MPSCC			/SELECT IT
	TAD	(104-4)		/SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
	MPSCC			/LOAD IT
/	THE  DOCUMENTED VALUES	(FOR DECMATE II) REGARDING CONTROL REGISTER 1 INDICATE
/	THE PROPER VALUE OF 022, WHERE BIT[9] IS DEFINED AS A ZERO.   THE VALUE OF 026
/	IS  TAKEN  FROM  K278  WHERE  PRESUMABLY  THE  EXTRA BIT IS NECESSARY FOR SOME
/	DECMATE III OBSCURITY.

/	THE FOLLOWING CODE IS  REDUNDANT  FOR  LOADING  REGISTER  0A  BEFORE AND AFTER
/	LOADING REGISTER 0B.  THIS  IS  EITHER A MISTAKE OR OBSCURELY NECESSARY (TAKEN
/	FROM K278).

	CDF	00		/TALKING TO REGISTER 0A
	NL0001			/WANT REGISTER 1A
	MPSCC			/SELECT IT
	TAD	(026-1)		/GET SETUP VALUE
	MPSCC			/LOAD IT
	CDF	10		/TALKING TO REGISTER 0B
	NL0001			/WANT REGISTER 1B
	MPSCC			/SELECT IT
	TAD	(026-1)		/GET SETUP VALUE
	MPSCC			/LOAD IT
	CDF	00		/TALKING TO REGISTER 0A
	NL0001			/WANT REGISTER 1A
	MPSCC			/SELECT IT
	TAD	(026-1)		/GET SETUP VALUE
	MPSCC			/LOAD IT

/	THE DECMATE III INTERNAL MODEM IS PROBABLY ASYNCHRONOUS 8 BIT  ONLY.  ASSUMING
/	THE RECEIVE SIDE OF THE INTERNAL MODEM IS ALWAYS "ENABLED", REGISTER  3A WOULD
/	BE  UNNECESSARY.  THE K278 CODE DOES NOT ADDRESS REGISTER 3 AS  AN  A/B  PAIR,
/	PRESUMABLY  BECAUSE  REGISTER  3 IS NOT DECODED AND IS EFFECTIVELY REGISTER 3B
/	REGARDLESS OF  THE  DATA FIELD.  THIS IS EITHER TRUE, OR THE K278 CODING FAILS
/	TO PROPERLY INITIALIZE THE DECMATE III MPSCC PORT.

	NL0003			/WANT REGISTER 3
	MPSCC			/SELECT IT
	TAD	(301-3)		/SETUP FOR 8 BITS AND ENABLE RECIVER
	MPSCC			/LOAD IT

/	A SIMILAR  SITUATION  EXISTS  FOR  THE  TRANSMITTER  SIDE  OF  THE DECMATE III
/	INTERNAL MODEM.  REGISTER 5 IS UTILIZED ACCORDINGLY.

	TAD	(5-301)		/WANT REGISTER 5
	MPSCC			/SELECT IT
	TAD	(150-5)		/GET TRANSMITTER ENABLE, 8 BITS VALUE
	MPSCC			/LOAD IT

/	THE DECMATE II REFERENCE  MANUAL  INDICATES  THE  PROPER SETTING FOR THE MODEM
/	CONTROL REGISTER AS EITHER 030  OR  130  DEPENDING ON WHETHER BIT[5] INDICATES
/	INTERNAL OR EXTERNAL TIMING (WHERE ONE  OF  THESE  IS ILLEGAL FOR ASYNCHRONOUS
/	OPERATION!).  THE SETTING OF BITS [10]  AND  [11]  WOULD  INDICATE ENABLING OF
/	BOTH  LOCAL  AND  REMOTE LOOPBACKS, YET WE SET  ONLY  THESE  BITS  (ALA  K278)
/	ALLEDGEDLY FOR THE PURPOSE OF SETTING RTS AND DTR  (WHICH  ARE  DOCUMENTED  AS
/	BEING BITS[7] AND [8] RESPECTIVELY).

	NL0003			/SET VALUE
	MLC			/LOAD IT
	CLA			/CLEAN UP

/	THE BAUD RATE SHOULD BE SET HERE IF DESIRED.

/	TAD	BAUD		/GET BAUD RATE
/	MSB			/LOAD IT
	CLA			/CLEAN UP
	JMP I	DMIPORT		/RETURN
/	DECMATE II, ETC. REPLACEMENT LIST.				/048 CJL

DM2LIST,CLDMZAP				/	 *CLDMZAP

		DMINIT&177+JMSC		/CLDMZAP,JMS	 DMINIT

	SETBAUD				/	 *SETBAUD		/050 CJL

		MSB			/SETBAUD,MSB			/050 CJL

	INLUP				/	 *INLUP

		TAD	INFLAG		/INLUP,	 TAD	 INFLAG

	INSKIP				/	 *INSKIP

		NOTYET&177+JMPC		/INSKIP, JMP	 NOTYET
	INLUP1;	DCA	INFLAG		/INLUP1, DCA	 INFLAG
	INREAD;	IRB			/INREAD, IRB

	INSTATUS			/	 *INSTATUS

		UPSTATUS&177+JMSC	/INSTATU,JMS	 UPSTATUS

	GETFL1				/	 *GETFL1

		UPSTATUS&177+JMSC	/GETFL1, JMS	 UPSTATUS

	COMWAIT				/	 *COMWAIT

		GETFLOW&177+JMSC	/COMWAIT,JMS	 GETFLOW

	NOWAIT				/	 *NOWAIT

		TAD	OUTFLAG		/NOWAIT, TAD	 OUTFLAG
	CMOUT1;	SNA CLA			/CMOUT1, SNA CLA
	CMOUT2;	OWAIT&177+JMPC		/CMOUT2, JMP	 OWAIT
	DM1AND;	DCA	OUTFLAG		/DM1AND, DCA	 OUTFLAG
	CMOUT3;	OUTEMP&177+TADC		/CMOUT3, TAD	 OUTEMP
	CMOUT4;	OLS			/CMOUT4, OLS

	BUFCHECK			/	 *BUFCHECK

		PUPSTATUS&177+JMSIC	/BUFCHEC,JMS I	 PUPSTATUS

	KERRLUP				/	 *KERRLUP

		PUPSTATUS&177+JMSIC	/KERRLUP,JMS I	 PUPSTATUS
	RINTEST				/	 *RINTEST

		TAD	INFLAG		/RINTEST,TAD	 INFLAG
	RINGT0;	SNA CLA			/RINGT0, SNA CLA
	RINREAD;RINGNONE&177+JMPC	/RINREAD,JMP	 RINGNONE
	RINGT1;	DCA	INFLAG		/RINGT1, DCA	 INFLAG
	RINGT2;	IRB			/RINGT2, IRB

	REMTSF				/	 *REMTSF

		RMPTEMP&177+DCAC	/REMTSF, DCA	 RMPTEMP
	RMPUT0;	TAD	OUTFLAG		/RMPUT0, TAD	 OUTFLAG
	REMTLS;	SNA CLA			/REMTLS, SNA CLA
	RMPUT1;	REMPUT&177+JMPIC	/RMPUT1, JMP I	 REMPUT
	REMCLEA;RMPTEMP&177+TADC	/REMCLEA,TAD	 RMPTEMP
	RMPUT2;	OLS			/RMPUT2, OLS

	0				/THIS ENDS THE LIST

	PAGE
/	DECMATE I REPLACEMENT LIST.					/050 CJL

DM1LIST,CLDMZAP				/	 *CLDMZAP

		DMINIT&177+JMSC		/CLDMZAP,JMS	 DMINIT

	SETBAUD				/	 *SETBAUD

		NOP			/SETBAUD,NOP

	DMI01				/	 *DMI01

		DM234&177+TADC		/DMI01,	 TAD	 DM234/(234)
	DMI02;	WCON0			/DMI02,	 WCON0
	DMI03;	NL0000			/DMI03,	 NL0000
	DMI04;	RACD			/DMI04,	 RACD
	DMI05;	DMWASTE&177+ISZC	/DMI05,	 ISZ	 DMWASTE
	DMI06;	DMI05&177+JMPC		/DMI06,	 JMP	 DMI05
	DMI07;	DMWASTE&177+ISZC	/DMI07,	 ISZ	 DMWASTE
	DMI08;	DMI07&177+JMPC		/DMI08,	 JMP	 DMI07
	DMI09;	RTFL0			/DMI09,	 RTFL0
	DMI10;	DM2516&177+TADC		/DMI10,	 TAD	 DM2516/(2516)
	DMI11;	DMSEND&177+JMSC		/DMI11,	 JMS	 DMSEND
	DMI12;	TAD	RATE		/DMI12,	 TAD	 RATE
	DMI13;	DM2460&177+TADC		/DMI13,	 TAD	 DM2460/(2460)
	DMI14;	DMSEND&177+JMSC		/DMI14,	 JMS	 DMSEND
	DMI15;	DM3425&177+TADC		/DMI15,	 TAD	 DM3425/(3425)
	DMI16;	DMSEND&177+JMSC		/DMI16,	 JMS	 DMSEND
	DMI17;	RKRB0			/DMI17,	 RKRB0

	DMISET				/	 *DMISET

		RTFL0			/DMISET, RTFL0

	DMISKP				/	 *DMISKP

		RTSF0			/DMISKP, RTSF0
	DMIOUT				/	 *DMIOUT

		RTLS0			/DMIOUT, RTLS0

	INSKIP				/	 *INSKIP

		RKSF0			/INSKIP, RKSF0

	INREAD				/	 *INREAD

		RKRB0			/INREAD, RKRB0

	COMWAIT				/	 *COMWAIT

		GETFLOW&177+JMSC	/COMWAIT,JMS	 GETFLOW

	NOWAIT				/	 *NOWAIT

		RTSF0			/NOWAIT, RTSF0
	CMOUT1;	OWAIT&177+JMPC		/CMOUT1, JMP	 OWAIT

	DM1AND				/	 *DM1AND

		AND377			/DM1AND, AND	 [377]

	CMOUT4				/	 *CMOUT4

		RTLS0			/CMOUT4, RTLS0

	RINTEST				/	 *RINTEST

		RKSF0			/RINTEST,RKSF0

	RINREAD				/	 *RINREAD

		RKRB0			/RINREAD,RKRB0
	RINGT1;	SKP			/RINGT1, SKP

	DM1AN2				/	 *DM1AN2

		AND377			/DM1AN2, AND	 [377]

	REMTSF				/	 *REMTSF

		RTSF0			/REMTSF, RTSF0

	REMTLS				/	 *REMTLS

		RTLS0			/REMTLS, RTLS0

	0				/THIS ENDS THE LIST
/	DECMATE I SECONDARY REPLACEMENT LIST				/050 CJL

DM1SEC,	DMI02				/	 *DMI02

		WCON1			/DMI02,	 WCON1
	DMI03;	NL4000			/DMI03,	 NL4000

	DMI09				/	 *DMI09

		RTFL1			/DMI09,	 RTFL1

	DMI17				/	 *DMI17

		RKRB1			/DMI17,	 RKRB1

	DMISET				/	 *DMISET

		RTFL1			/DMISET, RTFL1

	DMISKP				/	 *DMISKP

		RTSF1			/DMISKP, RTSF1

	DMIOUT				/	 *DMIOUT

		RTLS1			/DMIOUT, RTLS1

	INSKIP				/	 *INSKIP

		RKSF1			/INSKIP, RKSF1

	INREAD				/	 *INREAD

		RKRB1			/INREAD, RKRB1

	NOWAIT				/	 *NOWAIT

		RTSF1			/NOWAIT, RTSF1

	CMOUT4				/	 *CMOUT4

		RTLS1			/CMOUT4, RTLS1

	RINTEST				/	 *RINTEST

		RKSF1			/RINTEST,RKSF1

	RINREAD				/	*RINREAD

		RKRB1			/RINREAD,RKRB1

	REMTSF				/	 *REMTSF

		RTSF1			/REMTSF, RTSF1
	REMTLS				/	 *REMTLS

		RTLS1			/REMTLS, RTLS1

	0				/THIS ENDS THE LIST
/	ONCE-ONLY TEXT MESSAGES.					/024 CJL

	FIELD	BUFFLD%10		/FILE I/O BUFFER FIELD

	*FILBUFFER			/OVER FILE I/O BUFFER

/	LOCAL PREFERENCE MESSAGE.					/024 CJL

/	USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE.

/	THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE.

	XLIST	OFF
	IFZERO	GENMSG			<
	XLIST	ON
LCLMSG,	*LCLMSG+40			/EMPTY HOLE FOR USER MESSAGE	/039 CJL

	XLIST	OFF			>
	IFNZRO	GENMSG			<
	IFNZRO	LEDERLE		<
	XLIST	ON
LCLMSG,	TEXT	"%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%"

	XLIST	OFF		>
	IFNZRO	UMSG		<
	XLIST	ON
LCLMSG,	TEXT	"%^I^NSERT LOCAL USER MESSAGE HERE!%^"

	XLIST	OFF		>
	IFZERO	LEDERLE!UMSG	<
	XLIST	ON
LCLMSG,	TEXT	"^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE

	XLIST	OFF		>
	IFNZRO	LCLMSG+40-.	<
	XLIST	ON
	ZBLOCK	LCLMSG+40-.		/LEAVE PATCHING SPACE

	XLIST	OFF		>
					>
	XLIST	ON
CLOSMSG,TEXT	"^]^"			/CPU TYPE CLOSING MESSAGE
/	CPU IDENTIFICATION LIST; ALL MUST BE 5 WORDS LONG (EXCEPT LAST)./024 CJL

CPULIST,TEXT	"^U^NKNOWN"		/00=UNKNOWN
	TEXT	"^PDP^-5^^"		/01=PDP-5
	TEXT	"^PDP^-8^^"		/02=PDP-8
	TEXT	"^PDP^-8/S"		/03=PDP-8/S
	TEXT	"^LINC^-8^"		/04=LINC-8
	TEXT	"^PDP^-8/I"		/05=PDP-8/I
	TEXT	"^PDP^-8/L"		/06=PDP-8/L
	TEXT	"^PDP^-12^"		/07=PDP-12
	TEXT	"^PDP^-8/E"		/10=PDP-8/E
	TEXT	"^PDP^-8/A"		/11=PDP-8/A
	TEXT	"6100^^^^^"			/12=6100
	TEXT	"6120^"				/13=6120; LAST CAN BE SHORT!
CPUTMSG,TEXT	"%^[C^PU TYPE IS: "		/CPU TYPE MESSAGE
DAYMSG,	DAY%12^66+DAY+6060			/DAY MESSAGE
	TEXT	" "
DMPOMSG,TEXT	" ^[U^SING ^C^OMMUNICATIONS"	/DECMATE PORT MESSAGE
	TEXT	" ^P^ORT^]"
DMPPMSG,TEXT	" ^[U^SING ^P^RINTER ^P^ORT^]^"	/DECMATE SERIAL PORT MESSAGE
INITMSG,TEXT	"%^PS/8 PS/12 OS/8 OS/12 "	/INITIAL MESSAGE
	TEXT	"OS/78 OS/278  K^ERMIT-12  ^V"
INMSG2,	VERSION%12^66+VERSION+6060		/VERSION DIGITS
INMSG3,	"^^100+REVISION				/REVISION
	TEXT	"   "				/END OF MESSAGE
	XLIST	OFF
	IFZERO	MONTH-1		<
	XLIST	ON
MONMSG,	TEXT	"^J^ANUARY ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-2		<
	XLIST	ON
MONMSG,	TEXT	"^F^EBRUARY "			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-3		<
	XLIST	ON
MONMSG,	TEXT	"^M^ARCH ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-4		<
	XLIST	ON
MONMSG,	TEXT	"^A^PRIL ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-5		<
	XLIST	ON
MONMSG,	TEXT	"^M^AY ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-6		<
	XLIST	ON
MONMSG,	TEXT	"^J^UNE "			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-7		<
	XLIST	ON
MONMSG,	TEXT	"^J^ULY "			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-10	<
	XLIST	ON
MONMSG,	TEXT	"^A^UGUST "			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-11	<
	XLIST	ON
MONMSG,	TEXT	"^S^EPTEMBER ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-12	<
	XLIST	ON
MONMSG,	TEXT	"^O^CTOBER ^"			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-13	<
	XLIST	ON
MONMSG,	TEXT	"^N^OVEMBER "			/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-14	<
	XLIST	ON
MONMSG,	TEXT	"^D^ECEMBER "			/MONTH MESSAGE
	XLIST	OFF		>
	IFNZRO	MONMSG+7-.	<
	XLIST	ON

	ZBLOCK	MONMSG+7-.			/EMPTY SPACE FOR ALIGNMENT

	XLIST	OFF		>
	XLIST	ON
THLPMSG,TEXT	"%^T^YPE ^HELP<CR>^ FOR HELP%^"	/TYPE HELP MESSAGE
YEARMSG,TEXT	"19"				/YEAR MESSAGE
	YEAR%12^66+YEAR+6060			/YEAR DIGITS
	TEXT	"^"				/END OF MESSAGE
/	CPU-SPECIFIC PROMPT LIST.					/024 CJL

CPUPRMP,TEXT	"??^>^^^"	/UNKNOWN
	TEXT	"5^>^^^^"	/PDP-5
	TEXT	"8^>^^^^"	/PDP-8
	TEXT	"8^/S>^^"	/PDP-8/S
	TEXT	"LINC-8>"	/LINC-8
	TEXT	"8^/I>^^"	/PDP-8/I
	TEXT	"8^/L>^^"	/PDP-8/L
	TEXT	"12^>^^^"	/PDP-12
	TEXT	"8^/E>^^"	/PDP-8/E
	TEXT	"8^/A>^^"	/PDP-8/A
	TEXT	"78^>^^^"	/6100
	TEXT	"278^>^^"	/6120
/	CPU-SPECIFIC IDENTIFICATION LIST.				/025 CJL

CPUIDLS,TEXT	"^U^NKNOWN"	/UNKNOWN
	TEXT	"^PDP^-5^^"	/PDP-5
	TEXT	"^PDP^-8^^"	/PDP-8
	TEXT	"^PDP^-8/S"	/PDP-8/S
	TEXT	"^LINC^-8^"	/LINC-8
	TEXT	"^PDP^-8/I"	/PDP-8/I
	TEXT	"^PDP^-8/L"	/PDP-8/L
	TEXT	"^PDP^-12^"	/PDP-12
	TEXT	"^PDP^-8/E"	/PDP-8/E
	TEXT	"^PDP^-8/A"	/PDP-8/A
	TEXT	"^VT^-78^^"	/VT-78
	TEXT	"^DEC^MATE"	/6120
	FIELD	MSGFLD%10			/MESSAGE FIELD

	*FLD1ADR				/PERMANENT LOAD ADDRESS	/046 CJL
						/TEXT MESSAGES LOAD HERE/046 CJL

ABMSG,	TEXT	"%^F^ILE ^A^BORT%^"		/FILE ABORT MESSAGE
CMERMSG,TEXT	"?^I^NVALID COMMAND^"		/COMMAND ERROR MESSAGE
CONNMSG,TEXT	"%(^C^ONNECTING TO HOST, TYPE "	/FIRST CONNECT MESSAGE
CONTMSG,TEXT	"^C^ONTROL-^"			/CONTROL CHARACTER MESSAGE
CON2MSG,TEXT	" ^C^ TO RETURN TO ^"		/BRIDGING CONNECT MESSAGE
CON3MSG,TEXT	")%^"				/FINAL CONNECT MESSAGE
CPUMSG,	ZBLOCK	5				/CPU ID MESSAGE GOES HERE
/CRLF,	TEXT	"%"				/<CR>, <LF> MESSAGE
DNERMSG,TEXT	"?^E^RROR IN DEVICE NAME"	/DEVICE NAME ERROR MESSAGE
DSFLMSG,TEXT	"?^D^ISK FULL!"			/DISK OUT OF ROOM ERROR MESSAGE
FCLEMSG,TEXT	"?^E^RROR CLOSING FILE"		/FILE CLOSE ERROR MESSAGE
FNERMSG,	TEXT	"?^E^RROR IN FILE NAME"	/FILE NAME ERROR MESSAGE
FRECMSG,TEXT	"^R^ECEIVING FILE: ^"		/RECEIVING FILE MESSAGE
FSENMSG,TEXT	"^S^ENDING FILE: ^"		/SENDING FILE MESSAGE
FSERMSG,TEXT	"?^F^ILE NAME SYNTAX ERROR"	/FILE NAME ERROR MESSAGE
HELPMSG,TEXT	"%^S^UPPORTED COMMANDS ARE:%%"	/HELP MESSAGE
	TEXT	"^CONNECT^ (TO REMOTE SYSTEM) %"
	TEXT	"^SEND DEV:FILNAM.EX^ %"
	TEXT	"^RECEIVE DEV:^ (FILENAME AND EXTENSION ^NOT^ ALLOWED)%"
	TEXT	"^GET DEV:FILNAM.EX^%"
	TEXT	"^FINISH^ (SERVER)%"
	TEXT	"^EXIT^ (TO OPERATING SYSTEM) %"
	TEXT	"^HELP^ (THIS MESSAGE)%"
	TEXT	"%^E^SCAPE CHARACTER: "
KERRMSG,TEXT	"%^K^EYBOARD INPUT ERROR!%"	/KEYBOARD ERROR MESSAGE

	CRLF=	.-1				/<CR>, <LF> MESSAGE
NOFINIS,TEXT	"?^U^NABLE TO TELL HOST THAT "	/FINISH ERROR MESSAGE
	TEXT	"SESSION IS FINISHED"
NOTFND,	TEXT	"?^U^NABLE TO LOCATE FILE^"	/FILE NOT FOUND MESSAGE
PRMTMSG,TEXT	"^K^ERMIT-^"			/STATIC PORTION OF PROMPT MESSAGE
PROMID,	ZBLOCK	23				/MODIFIED PORTION OF PROMPT MESSAGE
RERRMSG,TEXT	"?^R^ECEIVE FAILURE^"		/GENERAL RECEIVE FAILURE MESSAGE
RFLNMSG,TEXT	"?^E^RROR IN RECEIVED FILE NAME"/RECEIVED NAME ERROR MESSAGE
	TEXT	"^"
RHFEMSG,TEXT	"^U^NABLE TO RECEIVE - HANDLER"	/HANDLER FETCH ERROR MESSAGE
	TEXT	" ERROR^"
RIDEMSG,TEXT	"?^U^NABLE TO RECEIVE -"	/DIRECTORY FULL ERROR MESSAGE
	TEXT	" INSUFFICIENT DIRECTORY SPACE"
RIERMSG,TEXT	"%^R^EMOTE LINE INPUT ERROR!%^"	/REMOTE LINE ERROR MESSAGE
RPERMSG,TEXT	"?^U^NABLE TO RECEIVE LATEST "	/LATEST PACKET ERROR MESSAGE
	TEXT	"PACKET^"
SDERMSG,TEXT	"?^U^NABLE TO SEND - DIRECTORY "/DIRECTORY INPUT ERROR MESSAGE
	TEXT	"ERROR"
SHFEMSG,TEXT	"?^U^NABLE TO SEND - HANDLER "	/HANDLER FETCH ERROR MESSAGE
	TEXT	"ERROR"
SNDEMSG,TEXT	"?^U^NABLE TO SEND"		/GENERAL SEND ERROR MESSAGE
UPERMSG,TEXT	"?^U^NABLE TO RECEIVE - DATA "	/RECEIVED DATA ERROR MESSAGE
	TEXT	"ERROR"

	$					/THAT'S ALL FOLK!
Added src/kermit-12/k12mit.upd.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Date: Sat, 11 Jul 92 15:00:00 EDT
From: Charles Lasner <lasner@watsun.cc.columbia.edu>
Subject: A few more release files for Kermit-12

    Now available are two new versions of K12DEC and K12ENC, which
have a new feature for image transfer of an entire device optionally
split into two parts.  This comes at the request of a user, and was
quite easy to add.  As before, the sources document how to use the
programs, etc.

    The new files have been installed in the regular places:

BITNET/EARN       Internet
KERMSRV@CUVMA     watsun.cc.columbia.edu     Description

 K12MIT   ANN      kermit/d/k12mit.ann        Announcement of KERMIT-12
 K12MIT   UPD      kermit/d/k12mit.upd        Release update (this) file
 K12ENB   PAL      kermit/d/k12enb.pal        .BOO-format encoding program
 K12DEB   PAL      kermit/d/k12deb.pal        .BOO-format decoding program
 K12MIT   NOT      kermit/d/k12mit.not        Release notes file
 K12MIT   DSK      kermit/d/k12mit.dsk        Description of RX02 diskettes

------------------------------
Added src/kermit-12/k12pch.pal.


































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
/	KERMIT-12 PATCH FILE
	XLIST	OFF
	IFNDEF	OFF	<OFF=	1>
	IFNDEF	ON	<ON=	0>
	XLIST	ON

/	INDEPENDENT SOURCE FILE TO ALLOW CUSTOMIZATION OF KERMIT-12.

/	LAST EDIT:	06-SEP-1990	11:00:00	CJL

/	THIS FILE IS PROVIDED TO USERS OF KERMIT-12 TO ALLOW CUSTOMIZED VERSIONS TO BE
/	LOCALLY CREATED WITHOUT MODIFYING THE MAIN SOURCE (K12MIT.PAL).

/	CREATING KERMIT-12 FROM THE STANDARD DISTRIBUTION (AND THIS FILE).

/	KERMIT-12 IS DISTRIBUTED IN SEVERAL  FILES  WHICH  CAN  BE  USED  TO  CREATE A
/	RUNNING KERMIT-12 VIA SEVERAL METHODS.   THE  MOST  DIRECT  METHOD  IS TO JUST
/	ASSEMBLE  THE MAIN SOURCE (K12MIT.PAL) POSSIBLY AUGMENTED  BY  A  HEADER  FILE
/	CONTAINING  CUSTOMIZING PARAMETERS (PARAM.PAL), OR TO MODIFY AND  ASSEMBLE THE
/	MAIN SOURCE FILE TO PRODUCE A CUSTOMIZED RESULT.   THIS  ALSO ALLOWS FOR LOCAL
/	CHANGES TO THE SOURCE ITSELF IF NECESSARY.  THE MAIN  SOURCE  FILE  IS  RATHER
/	LARGE AND MIGHT BE DIFFICULT TO ASSEMBLE, ETC.  ON SMALL  SYSTEMS.  MOST USERS
/	OF  KERMIT-12  WILL  FIND THE STANDARD ASSEMBLY PARAMETERS SUITING THEIR LOCAL
/	REQUIREMENTS, AS  MOST USER-PREFERENCE ITEMS ARE CUSTOMIZABLE VIA THIS METHOD.
/	THE USER OF  A SMALLER SYSTEM IS ENCOURAGED TO ACQUIRE KERMIT-12 FROM A LARGER
/	SYSTEM VIA DIRECT MEDIA  COPY;    AN  ACCURATE LISTING OF KERMIT-12 WITH LOCAL
/	CUSTOMIZATION COULD THEN BE AVAILABLE.

/	SINCE IT IS NOT ALWAYS  POSSIBLE  FOR  SMALLER  INDEPENDENT  USERS  TO ACQUIRE
/	KERMIT-12  FROM OTHER INSTALLATIONS, THIS FILE  (K12PCH.PAL)  WAS  CREATED  TO
/	HANDLE  MOST  PARAMETER  SETTINGS.    VIRTUALLY  ALL  OF  THE  USER-PREFERENCE
/	PARAMETERS, ETC.  HAVE BEEN DUPLICATED HERE TO  ALLOW  INDEPENDENT ASSEMBLY OF
/	THIS FILE WHICH IS SMALL ENOUGH TO ALLOW ASSEMBLY ON MODEST SYSTEMS.

/	NOTE:  USING THE METHOD DESCRIBED BELOW ASSUMES THAT  ALL  CHANGES REQUIRED BY
/	THE USER HAVE  BEEN  UPDATED  WITHIN  K12PCH.PAL  (THIS  FILE), OR PLACED IN A
/	SEPARATE FILE (PARAM.PAL).   SEE  THE  ASSEMBLY  PARAMETERS  SECTION  FOR  ANY
/	CUSTOMIZING INFORMATION.

/	THE STANDARD DISTRIBUTION OF KERMIT-12 INCLUDES A CORE-IMAGE COPY OF K12MIT.SV
/	WITH ALL STANDARD  DEFAULT VALUES SET.  IT IS AVAILABLE AS K12MIT.ENC WHICH IS
/	A "PRINTABLE" ENCODED VERSION  OF  THE SAVE IMAGE.  ASSEMBLING AND RUNNING THE
/	DECODING PROGRAM K12DEC.PAL CAN PRODUCE K12MIT.SV FROM K12MIT.ENC.

/	ASSUMING THE AVAILABILITY OF K12MIT.SV  AND  K12PCH.PAL  ON THE DEFAULT DEVICE
/	DSK:, THE FOLLLOWING CAN BE USED TO CREATE THE RUNNING KERMIT-12:

/	.PAL K12PCH<PARAM,K12PCH/E/F/W	ASSEMBLE CUSTOMIZED PATCH FILE.

/	.LOAD K12MIT.SV/I$K12PCH$	LOAD  IMAGE FILE K12MIT.SV WITH /I SWITCH SET.
/					$ INDICATES  USING  <ESC>  TO  TERMINATE LINE.
/					K12PCH.BN IS LOADED  OVER  K12MIT TO PATCH THE
/					BINARY TO THE DESIRED LOCAL VERSION.

/	.SAVE DEV KERMIT=1		SAVE RUNNING VERSION ON  ANY  AVAILABLE DEVICE
/					DEV (PREFERABLY SYS).

/	.R KERMIT  OR  RUN DEV KERMIT	RUNNING VERSION NOW CAN BE INVOKED.
/	ASSEMBLY PARAMETERS.

/	NOTE:  EDIT NUMBERS PLACED  ON  VARIOUS  SECTIONS  OF  THIS  FILE REFER TO THE
/	CORRESPONDING EDIT NUMBERS WITHIN K12MIT.PAL.  SEE THE K12MIT.PAL EDIT HISTORY
/	FOR FURTHER INFORMATION.

/	SEVERAL PARAMETERS MUST BE CHANGED WITHIN THIS FILE (K12PCH.PAL) (OR PASSED TO
/	THE ASSEMBLER VIA A SHORT FILE INSERTED  INTO  THE  ASSEMBLY STREAM BEFORE THE
/	MAIN FILE):

/	SETTING  KEY= [RECEIVE IOT CODE FOR  CONSOLE  KEYBOARD]  DEFINES  THE  CONSOLE
/	KEYBOARD IOT CODE (DEFAULT IS 03).

/	SETTING  TTY=  [TRANSMIT  IOT CODE FOR CONSOLE  OUTPUT]  CHANGES  THE  CONSOLE
/	PRINTER IOT CODE (DEFAULT IS 04).

/	THE FOLLOWING DEFINITIONS ARE  ESSENTIALLY  FOR  KL8-TYPE DEVICES ONLY, AS THE
/	CODE DEMANDS KL8 HARDWARE COMPATIBILITY.    MODELS  OTHER  THAN PDP-8 (SUCH AS
/	DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON  AVAILABLE  INTERFACES  (OTHER
/	SOFTWARE DESIGNATES A SERIAL INTERFACE AS A  LOGICAL  PRINTER  PORT;  DECMATES
/	SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES  THIS.),  OR  DON'T ALLOW
/	USABLE PLUG-IN OPTIONS.

/	IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE:

/	SETTING DEV30=	1	CREATES DEVICE 30/31 REMOTE LINE IOTS.

/	SETTING DEV40=	1	CREATES DEVICE 40/41 REMOTE LINE IOTS.

/	SETTING LEDERLE=1	CREATES DEVICE 43/44 REMOTE LINE  IOTS  (AND  A CUSTOM
/				HEADER).

/	SETTING ORIGNAL=1	CREATES  DEVICE  33/34  REMOTE  LINE  IOTS   (ORIGINAL
/				SETTINGS).

/	SETTING SPRINT= 1	CREATES DEVICE 32/33 REMOTE LINE IOTS (SERIAL  PRINTER
/				PORT).

/	SETTING USER=	1	CREATES DEVICE XX/XY REMOTE LINE IOTS.

/	IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT.



/	SETTING USER=	1	REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES:

/		XX=	[RECEIVE IOT DEVICE CODE] (DEFAULT IS 40).

/		XY=	[TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41).
/	SETTING SPRINT= 1	INHIBITS THE BUILT-IN CHECK FOR DECMATE  OPERATION AND
/				USES    THE    SERIAL  PRINTER  PORT  FOUND  ON    ALL
/				WPS-8-CONFIGURED    PDP-8/E,  PDP-8/A  CONFIGURATIONS,
/				VT-78,  AND  ALL DECMATES (VT-278,  DECMATE  II,  III,
/				III+) FOR REMOTE COMMUNICATIONS.

/	THE  USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY  BE
/	PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER
/	IS A  MODEM  (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC.  REQUIRES A
/	GENDER CHANGER.), OR  THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY
/	*ONLY* FOR A PRINTER,  SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN"
/	KEY AS A SCREEN DUMP  TO  THE  SERIAL PRINTER PORT, ETC.  THESE ISSUES ARE NOT
/	RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY
/	KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE  VERSIONS  COULD  REDEFINE THE
/	"PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.).

/	SETTING BRATE= NN	SETS THE DEFAULT BAUD RATE (FOR  SYSTEMS  THAT SUPPORT
/				THIS  FEATURE)  FROM  A  TABLE  OF  VALUES  (0-15)  AS
/				FOLLOWS:

/				NN		BAUD RATE

/				00		50
/				01		75
/				02		110
/				03		134.5
/				04		150
/				05		300
/				06		600
/				07		1200
/				08		1800
/				09		2000
/				10		2400
/				11		3600
/				12		4800
/				13		7200
/				14		9600
/				15		19200

/	SETTING ESCAPE=	NNNN	SETS THE DEFAULT ESCAPE CHARACTER TO NNNN.

/	SETTING FLOW=	1	ENABLES FLOW-CONTROL BY DEFAULT.
/	SETTING FLOW=	0	DISABLES FLOW-CONTROL BY DEFAULT.

/	SETTING FMODE=	0177	SETS THE DEFAULT FILE MODE TO ASCII.
/	SETTING FMODE=	4377	SETS THE DEFAULT FILE MODE TO BINARY.
/	SETTING GENMSG=	0	CAUSES  NO  BINARY  TO BE GENERATED WHERE 'LCLMSG'  IS
/				DEFINED.  THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR
/				SUBSEQUENT OVERLAY  BY  K12PCH.BN  TO DEFINE THE LOCAL
/				HEADER MESSAGE.   THIS  PARAMETER  SHOULD  NOT  BE SET
/				UNLESS ONE OF THESE  METHODS  IS USED, ELSE THE HEADER
/				MESSAGE  WILL  BE UNDEFINED.   (NOTE:    IF  K12PCH.BN
/				GENERATES  A  HEADER MESSAGE, THEN THIS  PARAMETER  IS
/				UNIMPORTANT,  AS  K12PCH.BN  OVERLAYS  THE  BINARY  OF
/				K12MIT.)
/	SETTING GENMSG=	1	CAUSES A HEADER MESSAGE TO BE GENERATED.  THE CONTENTS
/				OF  THE  MESSAGE  ARE  CREATED BY SETTING LEDERLE=1 OR
/				UMSG=1.    IF EITHER IS ZERO, A DEFAULT (NULL) MESSAGE
/				WILL BE GENERATED.

/	SETTING ICLOSE=	1	ENSURES A  <^Z>  AT  <EOF>  OF  ASCII  INPUT  FILES BY
/				DEFAULT.
/	SETTING ICLOSE=	0	CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT.

/	SETTING INIECHO=0	CAUSES A FULL-DUPLEX  CONNECT MODE STATE WITH NO LOCAL
/				CHARACTER ECHOING BY DEFAULT.
/	SETTING INIECHO=1	CAUSES A HALF-DUPLEX CONNECT  MODE  STATE  WITH  LOCAL
/				ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT.

/	SETTING LOWER=	0	ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT.
/	SETTING LOWER=	-40	FOLDS  LOWER-CASE  CONSOLE  OUTPUT  TO  UPPER-CASE  BY
/				DEFAULT.

/	SETTING OCLOSE=	0	PREVENTS  DEFAULT SENDING OF <^Z> AT  <EOF>  OF  ASCII
/				FILES.
/	SETTING OCLOSE=	1	CAUSES  <^Z> TO BE SENT AT <EOF>  OF  ASCII  FILES  BY
/				DEFAULT.

/	SETTING PORT=	0	CAUSES THE DP-278 PORT 0 TO BE USED  IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
/	SETTING PORT=	1	CAUSES  THE DP-278 PORT 1 TO BE USED IF  KERMIT-12  IS
/				RUN ON A DECMATE 1 (ASSUMING SPRINT=0).

/	SETTING RETCNT=	NNNN	SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT.

/	SETTING UMSG=	0	PREVENTS THE  LOCAL  USER  HEADER  MESSAGE  FROM BEING
/				GENERATED.
/	SETTING UMSG=	1	CAUSES THE LOCAL  USER HEADER MESSAGE TO BE GENERATED.
/				THE PARAMETER GENMSG=1 IS  REQUIRED  TO  BE  SET.  THE
/				SOURCE MUST BE MODIFIED LOCALLY  TO CHANGE THE MESSAGE
/				TEXT FROM "INSERT LOCAL USER MESSAGE  HERE!,"  AS THIS
/				IS THE DEFAULT CONTENTS.
/	PASSING SHORT PARAMETER FILES.

/	WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM  (PARAM.PAL)
/	THE FOLLOWING SHOULD BE NOTED:

/	ALWAYS  PUT  THE  SHORT  PARAMETER  FILE  (CONTAINING EQUATED SYMBOLS SUCH  AS
/	USER=1, ETC.) IN FRONT OF K12PCH.PAL.

/	IF TTY:  IS USED FOR DIRECT TYPE-IN OF THESE  PARAMETERS, THE INFORMATION NEED
/	ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1.  SUBSEQUENT  PASSES  REQUIRE THE
/	ENDING <^Z> ONLY.  IF THIS METHOD IS USED, A LISTING WITHOUT  THE  USER  INPUT
/	WHICH  DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED.  NOTE:  IF  BINARY  IS
/	GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT
/	MESSAGE,  ETC.),  THE  INFORMATION MUST BE TYPED IN DURING PASS 2.  THE PASS 3
/	LISTING MAY  CONTAIN  THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF
/	THE INPUT.   PASS  1  INPUT  OF  THE INFORMATION IS EFFECTIVELY IGNORED, AS NO
/	DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.).

/	EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE:

/	DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED
/	DURING PDP-8 PAL8 B0 OPERATION.  THE KL8E TTY:  HANDLER WILL NO LONGER BE ABLE
/	TO BUFFER <^Z> DURING THE ASSEMBLY;  YOU MUST  WAIT UNTIL THE HANDLER ACCESSES
/	THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY.


/	CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE.

/	IF  SO  DESIRED,  A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING  THE
/	FOLLOWING INTO THE PARAMETER FILE:

/	BUFFLD=	10		/THESE PROBABLY
/	FILBUFF=2000		/WON'T CHANGE!

/	GENMSG=	0		/DON'T GENERATE STANDARD (NULL) MESSAGE
/	UMSG=	0		/DON'T GENERATE STANDARD (DUMMY) USER MESSAGE

/	FIELD	BUFFLD%10	/FIELD FOR TEXT MESSAGE

/	*FILBUFFER		/LOCAL MESSAGE LOADS THERE

/LCLMSG,TEXT	"%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%"

/	ZBLOCK	LCLMSG+40-.	/ZERO REST OF MESSAGE AREA

/	TEXT IS IN  UPPER/LOWER-CASE  SIXBIT  WITH  '^'  MEANING SHIFT CASE (INITIALLY
/	LOWER-CASE) AND '%' MEANING <CR>, <LF>.
/	MAINTAINING THIS PATCH FILE.

/	IF ANY CHANGES ARE MADE TO K12MIT.PAL ITSELF WHICH MIGHT AFFECT THIS FILE, THE
/	GLOBAL  TECO MACRO (K12GLB.TEC AKA GLOBAL.TEC) SHOULD BE USED TO  RESOLVE  ALL
/	EXTERNAL  REFERENCES  TO ROUTINES, ETC.  IN K12MIT.PAL.  TO UPDATE  THIS  FILE
/	(K12PCH.PAL), THE FOLLOWING METHOD IS REQUIRED:

/	.PAL ,K12MIT<DEV:K12MIT/E/F/N/W		CREATE "SYMBOLS" LISTING FILE ON DSK:
/	.MUNG K12GLB.TEC,K12PCH			UPDATE THIS FILE ON DSK:

/	N.B., DSK:K12PCH.PAL WILL BE UPDATED *WITH NO BACKUP*.  DSK:EQUATE.TMP WILL BE
/	CREATED AS  AN  ARTIFACT.  IT CONTAINS THE ACTUAL EQUATE STATEMENTS WHICH WERE
/	UPDATED IN K12PCH.PAL.

/	THIS  WILL  MODIFY  THE EQUATED SYMBOLS BELOW IN THE SPECIALLY DELIMITED AREA.
/	ONLY EQUATED SYMBOLS (AND ANY WHITESPACE) SHOULD BE PLACED BETWEEN THE SPECIAL
/	DELIMITERS:  "<CR><LF>//"  WHICH  ARE  USED  BY THE MACRO TO LOCATE THE GLOBAL
/	EQUATES TO UPDATE.

/	AS NEW FEATURES ARE ADDED/(DELETED) IN K12MIT.PAL, THE APPROPRIATE DEFINITIONS
/	AND CONDITIONAL ASSEMBLY PARAMETERS SHOULD  BE  ADDED  TO  BOTH K12MIT.PAL AND
/	K12PCH.PAL FOR CONSISTENCY AND USER FLEXIBILITY.
/	DEFINITIONS.							/017 CJL

/	REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY.		/046 CJL

	IFNDEF	DEV30	<DEV30=	0>		/USE DEVICE 30/31 VALUES
	IFNDEF	DEV40	<DEV40=	0>		/USE DEVICE 40/41 VALUES
	IFNDEF	LEDERLE	<LEDERLE=0>		/USE LEDERLE LABS VALUES
	IFNDEF	ORIGNAL	<ORIGNAL=0>		/USE ORIGINAL VALUES
	IFNDEF	SPRINT	<SPRINT=0>		/USE DEVICE 32/33 VALUES
	IFNDEF	USER	<USER=	0>		/USE USER-DEFINED VALUES

	REMOTE=	DEV30+DEV40+LEDERLE+ORIGNAL	/SET REMOTE LINE IOT CODE
	REMOTE=	REMOTE+SPRINT+USER		/SET REMOTE LINE IOT CODE

	IFZERO	REMOTE	<DEV40=	1>		/DEFAULT TO DEVICE 40/41 VERSION

/	DEV30 PARAMETERS.

	IFNZRO	DEV30			<

	IFNDEF	REC	<REC=	30>		/DEVICE 30 INPUT
	IFNDEF	SEN	<SEN=	31>		/DEVICE 31 OUTPUT

					>

/	DEV40 PARAMETERS (DEFAULT).

	IFNZRO	DEV40			<

	IFNDEF	REC	<REC=	40>		/DEVICE 40 INPUT
	IFNDEF	SEN	<SEN=	41>		/DEVICE 41 OUTPUT

					>

/	LEDERLE PARAMETERS.						/038 CJL

	IFNZRO	LEDERLE			<

	IFNDEF	REC	<REC=	43>		/DEVICE 43 INPUT
	IFNDEF	SEN	<SEN=	44>		/DEVICE 44 OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	0>		/DON'T GENERATE USER MESSAGE

					>

/	ORIGNAL PARAMETERS.

	IFNZRO	ORIGNAL			<

	IFNDEF	REC	<REC=	33>		/DEVICE 33 INPUT
	IFNDEF	SEN	<SEN=	34>		/DEVICE 34 OUTPUT

					>
/	SPRINT PARAMETERS.						/046 CJL

	IFNZRO	SPRINT			<

	IFNDEF	REC	<REC=	32>		/DEVICE 32 INPUT
	IFNDEF	SEN	<SEN=	33>		/DEVICE 33 OUTPUT

					>

/	USER PARAMETERS.

	IFNZRO	USER			<

	IFNDEF	XX	<XX=	40>		/DEFAULT TO DEVICE 40
	IFNDEF	XY	<XY=	41>		/DEFAULT TO DEVICE 41
	IFNDEF	REC	<REC=	XX>		/DEVICE XX INPUT
	IFNDEF	SEN	<SEN=	XY>		/DEVICE XY OUTPUT
	IFNDEF	GENMSG	<GENMSG=1>		/GENERATE LOCAL HEADER MESSAGE
	IFNDEF	UMSG	<UMSG=	1>		/GENERATE USER MESSAGE

					>

/	REMOTE LINE IOT DEFINITIONS.

/	RECEIVE DEFINITIONS.

	RKRBIOT=REC^10+6006			/READ REMOTE, CLEAR FLAG
	RKSFIOT=REC^10+6001			/SKIP ON REMOTE INPUT FLAG

/	TRANSMIT DEFINITIONS.

	RSBIOT=	SEN^10+6003			/SET BAUD RATE FROM AC[8-11]
	RTLSIOT=SEN^10+6006			/TRANSMIT CHARACTER, CLEAR FLAG
	RTSFIOT=SEN^10+6001			/SKIP ON TRANSMIT FLAG

/	CONSOLE TTY: DEFINITIONS.					/017 CJL

/	KEYBOARD DEFINITIONS.						/017 CJL

	IFNDEF	KEY	<KEY=	03>	/KEYBOARD DEVICE CODE

	KCCIOT=	KEY^10+6002		/CLEAR CONSOLE KEYBOARD FLAG, AC
	KRBIOT=	KEY^10+6006		/READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG
	KRSIOT=	KEY^10+6004		/READ CONSOLE KEYBOARD BUFFER STATIC
	KSFIOT=	KEY^10+6001		/SKIP ON CONSOLE KEYBOARD FLAG

/	TELEPRINTER DEFINITIONS.					/017 CJL

	IFNDEF	TTY	<TTY=	04>	/TELEPRINTER DEVICE CODE

	TLSIOT=	TTY^10+6006		/PRINT CHARACTER, CLEAR FLAG
	TSFIOT=	TTY^10+6001		/SKIP ON TELEPRINTER FLAG
/	DEFAULT ESCAPE CHARACTER DEFINITION.				/025 CJL

	IFNDEF	ESCAPE	<ESCAPE="]&37>	/DEFAULT IS CONTROL-]

/	DEFAULT LOWER-CASE ENABLE DEFINITION.				/030 CJL

	IFNDEF	LOWER	<LOWER=	0/-40>	/LOWER-CASE IS ALLOWED AS IS
					/CHANGE TO -40 IF LOWER-CASE
					/SHOULD BE FOLDED TO UPPER-CASE

/	DEFAULT RETRY COUNT DEFINITION.					/031 CJL

	IFNDEF	RETCNT	<RETCNT=5>	/DEFAULT IS FIVE RETRIES

/	DEFAULT FILE MODE DEFINITION.					/031 CJL

	IFNDEF	FMODE	<FMODE=	0177>	/DEFAULT IS ASCII FILE MODE
					/4377 IS BINARY FILE MODE

/	DEFAULT FLOW-CONTROL MODE DEFINITION.				/031 CJL

	IFNDEF	FLOW	<FLOW=	1>	/DEFAULT IS FLOW-CONTROL ENABLED

/	DEFAULT ASCII INPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	ICLOSE	<ICLOSE=1>	/ENSURE <^Z> AT ASCII <EOF>

/	DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION.			/031 CJL

	IFNDEF	OCLOSE	<OCLOSE=0>	/<^Z> NOT SENT AT ASCII <EOF>

/	DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS.			/038 CJL

	IFNDEF	GENMSG	<GENMSG=1>	/DEFAULT IS TO GENERATE A MESSAGE
	IFNDEF	UMSG	<UMSG=	0>	/DEFAULT IS NO DUMMY USER MESSAGE
	IFNDEF	LEDERLE	<LEDERLE=0>	/DEFAULT IS NO LEDERLE MESSAGE

/	THE NULL MESSAGE WILL BE GENERATED BY DEFAULT.

/	ECHO DEFINITION.						/039 CJL

	IFNDEF	INIECHO	<INIECHO=0>	/DEFUALT IS NO LOCAL ECHO

/	DEFAULT DECMATE I PORT DEFINITION.				/050 CJL

	IFNDEF	PORT	<PORT=	0>	/DEFAULT IS PORT ZERO 

/	DEFAULT BAUD RATE DEFINITION.					/050 CJL

	IFNDEF	BRATE	<BRATE=	7>	/DEFAULT IS 1200 BAUD

//	GLOBAL EQUATED SYMBOLS FROM K12MIT.PAL.

	BUFFLD=	0010		/I/O BUFFER FIELD
	CMOUT4=	0712		/REMOTE OUTPUT WRITE
	CONTLS=	5701		/CONSOLE OUTPUT WRITE
	CONTSF=	5677		/CONSOLE OUTPUT TEST
	COUTINI=6601		/CONSOLE OUTPUT WRITE
	DAYMSG=	2145		/DAY MESSAGE
	DIRXR=	0012		/DIRECTORY AUTO-INDEX
	ECHOFLA=5153		/ECHO FLAG
	ESCHAR=	0101		/ESCAPE CHARACTER
	FILBUFF=2000		/FILE BUFFER
	FILMODE=0075		/INTERNAL FILE MODE FLAG
	FLOWFLA=0102		/FLOW CONTROL FLAG
	ICTLZFL=4033		/INPUT <^Z> FLAG
	INMSG2=	2242		/INITIAL MESSAGE
	INMSG3=	2243		/INITIAL MESSAGE
	INREAD=	0640		/REMOTE INPUT READ
	INSKIP=	0636		/REMOTE INPUT SKIP
	KCCZAP=	6501		/CONSOLE INPUT CLEAR
	KCCZP2=	6546		/CONSOLE INPUT CLEAR
	KGTEST=	5250		/CONSOLE INPUT TEST
	KGREAD=	5252		/CONSOLE INPUT READ
	KRSZAP=	6472		/CONSOLE KEYBOARD READ
	KSFLOC=	6470		/CONSOLE KEYBOARD SKIP
	LCLMSG=	2000		/LOCAL USER MESSAGE
	MONMSG=	2246		/MONTH MESSAGE
	MSGFLD=	0010		/TEXT MESSAGE FIELD
	NOWAIT=	0705		/REMOTE OUTPUT SKIP
	OCTLZFL=3762		/OUTPUT <^Z> FLAG
	PRGFLD=	0000		/PROGRAM FIELD
	P7TLS=	6540		/CONSOLE OUTPUT WRITE
	P7TSF=	6536		/CONSOLE OUTPUT TEST
	RATE=	0007		/BAUD RATE
	REMTLS=	5726		/REMOTE OUTPUT WRITE
	REMTSF=	5724		/REMOTE OUTPUT TEST
	RETRY=	0033		/RETRY COUNT
	RININIT=6613		/REMOTE INPUT READ
	RINREAD=5505		/REMOTE INPUT READ
	RINTEST=5503		/REMOTE INPUT TEST
	ROUTINI=6612		/REMOTE OUTPUT WRITE
	UPONLY=	0076		/UPPER-CASE ONLY FLAG
	YEARMSG=2274		/YEAR MESSAGE

//	END OF GLOBAL SYMBOLS FROM K12MIT.PAL
/	EQUATED SYMBOLS.

	NL7777=	CLA CMA		/LOAD AC WITH 7777
/	STATIC DATE CALCULATIONS.					/024 CJL

/	THESE EQUATIONS CAUSE PRINTABLE  TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN
/	IN OS/8 INTERNAL FORMAT.  PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION,
/	REVISION, REVDATE, AND REVDGRP.  REVDATE  AND  REVDGRP SHOULD BE OBTAINED FROM
/	THE SYSTEM WHEN RELEASING A NEW VERSION  AFTER  FIRST  CORRECTLY  INVOKING THE
/	SYSTEM DATE COMMAND.

/	VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)]

/	REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77]

/	REVDATE=[THE CONTENTS OF 17666 (DATE WORD)]

/	REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)]



	IFNDEF	REVDATE	<REVDATE=4464>	/REVISION DATE (LOCATION 17666)

	IFNDEF	REVDGRP	<REVDGRP=0400>	/REVISION 8 YEAR DATE GROUP (LOCATION 07777)

	IFNDEF	REVISIO	<REVISIO="G&77>	/REVISION OF KERMIT-12

	IFNDEF	VERSION	<VERSION=12>	/VERSION OF KERMIT-12


	DAY=	REVDATE&370%10		/REVISION DAY

	DGROUP=	REVDGRP&600%20		/REVISION DATE GROUP (WHICH 8 YEARS)

	MONTH=	REVDATE&7400%400	/REVISION MONTH

	YEAR=	REVDATE&7+DGROUP+106	/REVISION YEAR (SINCE 1900)
/	PATCHED LOCATIONS.

	FIELD	PRGFLD%10	/OVER MAIN PROGRAM CODE

	*RATE			/OVER BAUD RATE VALUE

RATE,	BRATE			/BAUD RATE VALUE			/050 CJL

	*RETRY			/OVER PACKET ERROR RETRY COUNTER

RETRY,	-RETCNT			/PACKET ERROR RETRY COUNTER		/031 CJL

	*FILMODE		/OVER INTERNAL FILE MODE FLAG

FILMODE,FMODE			/ASCII=0177, BINARY=4377		/019 CJL

	*UPONLY			/OVER UPPER-CASE ONLY FLAG

/	UPPER-CASE ONLY FLAG.						/023 CJL

UPONLY,	LOWER			/0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL

	*ESCHAR			/OVER ESCAPE CHARACTER FOR CONNECT MODE

/	ESCAPE CHARACTER FOR CONNECT MODE.				/025 CJL

ESCHAR,	ESCAPE			/ESCAPE CHARACTER FOR CONNECT MODE	/025 CJL

	*FLOWFLAG		/OVER FLOW CONTROL FLAG

/	FLOW CONTROL FLAG.						/026 CJL

FLOWFLA,FLOW			/0=NO FLOW CONTROL, NON-ZERO=FLOW	/026 CJL
				/CONTROL VIA <^S>/<^Q>
/	I/O PATCHES.

/	REMOTE LINE (NON-CONNECT) PATCHES.

/	INPUT ROUTINE PATCHES.

	*INSKIP			/OVER REMOTE INPUT SKIP

INSKIP,	RKSFIOT			/FLAG UP YET?				/049 CJL

	*INREAD			/OVER REMOTE INPUT READ

INREAD,	RKRBIOT			/GET THE CHARACTER			/049 CJL

/	OUTPUT ROUTINE PATCHES.

	*NOWAIT			/OVER REMOTE OUTPUT SKIP

NOWAIT,	RTSFIOT			/OUTPUT FLAG UP?			/049 CJL

	*CMOUT4			/OVER REMOTE OUTPUT WRITE

CMOUT4,	RTLSIOT			/YES, OUTPUT THE CHARACTER NOW		/049 CJL

/	INITIALIZATION PATCHES.

	*DIRXR			/OVER DECMATE I PORT SELECT

DIRXR,	PORT			/DECMATE I PORT SELECT VALUE		/050 CJL

	*ROUTINITIALIZE		/OVER REMOTE OUTPUT WRITE

ROUTINI,RTLSIOT			/INITIALIZE REMOTE OUTPUT		/046 CJL

	*RININITIALIZE		/OVER REMOTE INPUT READ

RININIT,RKRBIOT			/INITIALIZE REMOTE INPUT		/046 CJL
/	CONSOLE (NON-CONNECT) PATCHES.

/	INPUT ROUTINE PATCHES.

	*KSFLOC			/OVER CONSOLE INPUT ROUTINE

KSFLOC,	KSFIOT			/SKIP ON KEYBOARD FLAG			/023 CJL

	*KRSZAP			/OVER CONSOLE INPUT ROUTINE

KRSZAP,	KRSIOT			/READ KEYBOARD BUFFER			/023 CJL

	*KCCZAP			/OVER CONSOLE INPUT ROUTINE

KCCZAP,	KCCIOT			/CLEAR KEYBOARD FLAG			/023 CJL

	*KCCZP2			/OVER CONSOLE INPUT ROUTINE

KCCZP2,	KCCIOT			/CLEAR KEYBOARD FLAG, AC		/023 CJL

/	OUTPUT ROUTINE PATCHES.

	*P7TSF			/OVER CONSOLE OUTPUT ROUTINE

P7TSF,	TSFIOT			/TEST IF OUTPUT READY			/023 CJL

	*P7TLS			/OVER CONSOLE OUTPUT ROUTINE

P7TLS,	TLSIOT			/OUTPUT THE CHARACTER			/023 CJL

/	INITIALIZATION PATCH.

	*COUTINIALIZE		/OVER CONSOLE INITIALIZE

COUTINI,TLSIOT			/INITIALIZE CONSOLE OUTPUT FLAG		/046 CJL
/	CONNECT ROUTINE PATCHES.

	*KGTEST			/OVER KEYBOARD TEST

KGTEST,	KSFIOT			/SKIP ON KEYBOARD FLAG			/047 CJL

	*KGREAD			/OVER KEYBOARD READ

KGREAD,	KRBIOT			/READ KEYBOARD BUFFER, CLEAR FLAG	/047 CJL

	*CONTSF			/OVER CONSOLE OUTPUT TEST

CONTSF,	TSFIOT			/SKIP ON CONSOLE OUTPUT FLAG		/047 CJL

	*CONTLS			/OVER CONSOLE OUTPUT WRITE

CONTLS,	TLSIOT			/OUTPUT TO CONSOLE			/047 CJL

	*RINTEST		/OVER REMOTE TEST

RINTEST,RKSFIOT			/SKIP ON REMOTE INPUT FLAG		/047 CJL

	*RINREAD		/OVER REMOTE READ

RINREAD,RKRBIOT			/READ REMOTE CHARACTER			/047 CJL

	*REMTSF			/OVER REMOTE OUTPUT TEST

REMTSF,	RTSFIOT			/SKIP ON REMOTE OUTPUT FLAG		/047 CJL

	*REMTLS			/OVER REMOTE OUTPUT WRITE

REMTLS,	RTLSIOT			/OUTPUT TO REMOTE			/047 CJL

/	ADDITIONAL PATCHES.

	*OCTLZFLAG		/OVER ASCII OUTPUT FILE <^Z> FLAG

/	ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG.

OCTLZFL,OCLOSE			/ZERO=DON'T SEND <^Z> AT <EOF>,
				/NON-ZERO=SEND <^Z> AT <EOF>

	*ICTLZFLAG		/OVER ASCII INPUT FILE <^Z> FLAG

/	ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG.

ICTLZFL,ICLOSE			/ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z>
				/IF LAST CHARACTER WASN'T <^Z>

	*ECHOFLAG		/OVER ECHO FLAG

ECHOFLA,INIECHO			/0=DON'T ECHO, NON-ZERO=ECHO
/	ONCE-ONLY TEXT MESSAGES.					/024 CJL

	FIELD	BUFFLD%10		/FILE I/O BUFFER FIELD

	*FILBUFFER			/OVER FILE I/O BUFFER

/	LOCAL PREFERENCE MESSAGE.					/024 CJL

/	USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE.

/	THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE.

	XLIST	OFF
	IFZERO	GENMSG			<
	XLIST	ON
LCLMSG,	*LCLMSG+40			/EMPTY HOLE FOR USER MESSAGE	/039 CJL

	XLIST	OFF			>
	IFNZRO	GENMSG			<
	IFNZRO	LEDERLE		<
	XLIST	ON
LCLMSG,	TEXT	"%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%"

	XLIST	OFF		>
	IFNZRO	UMSG		<
	XLIST	ON
LCLMSG,	TEXT	"%^I^NSERT LOCAL USER MESSAGE HERE!%^"

	XLIST	OFF		>
	IFZERO	LEDERLE!UMSG	<
	XLIST	ON
LCLMSG,	TEXT	"^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE

	XLIST	OFF		>
	IFNZRO	LCLMSG+40-.	<
	XLIST	ON
	ZBLOCK	LCLMSG+40-.		/LEAVE PATCHING SPACE

	XLIST	OFF		>
					>
	XLIST	ON
	*DAYMSG				/OVER DAY OF THE MONTH MESSAGE

DAYMSG,	DAY%12^66+DAY+6060		/DAY MESSAGE

	*INMSG2				/OVER INITIAL MESSAGE

INMSG2,	VERSION%12^66+VERSION+6060	/VERSION DIGITS

	*INMSG3				/OVER INITIAL MESSAGE

INMSG3,	"^^100+REVISION			/REVISION

	*MONMSG				/OVER MONTH MESSAGE

	XLIST	OFF
	IFZERO	MONTH-1		<
	XLIST	ON
MONMSG,	TEXT	"^J^ANUARY ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-2		<
	XLIST	ON
MONMSG,	TEXT	"^F^EBRUARY "		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-3		<
	XLIST	ON
MONMSG,	TEXT	"^M^ARCH ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-4		<
	XLIST	ON
MONMSG,	TEXT	"^A^PRIL ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-5		<
	XLIST	ON
MONMSG,	TEXT	"^M^AY ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-6		<
	XLIST	ON
MONMSG,	TEXT	"^J^UNE "		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-7		<
	XLIST	ON
MONMSG,	TEXT	"^J^ULY "		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-10	<
	XLIST	ON
MONMSG,	TEXT	"^A^UGUST "		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-11	<
	XLIST	ON
MONMSG,	TEXT	"^S^EPTEMBER ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-12	<
	XLIST	ON
MONMSG,	TEXT	"^O^CTOBER ^"		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-13	<
	XLIST	ON
MONMSG,	TEXT	"^N^OVEMBER "		/MONTH MESSAGE
	XLIST	OFF		>
	IFZERO	MONTH-14	<
	XLIST	ON
MONMSG,	TEXT	"^D^ECEMBER "		/MONTH MESSAGE
	XLIST	OFF		>
	IFNZRO	MONMSG+7-.	<
	XLIST	ON

	ZBLOCK	MONMSG+7-.		/EMPTY SPACE FOR ALIGNMENT

	XLIST	OFF		>
	XLIST	ON

	*YEARMSG			/OVER YEAR MESSAGE

YEARMSG,TEXT	"19"			/YEAR MESSAGE
	YEAR%12^66+YEAR+6060		/YEAR DIGITS

/	END OF PATCH FILE.

	$				/THAT'S ALL FOLK!
Added src/kermit-12/k12pl8.boo.












































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
PAL8.SV
oX?lP40400SA0<076Sh@:`@86RLm?QPZ?cXP21XH6RXb9c`j80PJ61XZ9`PJ60`85aP=9ch86QP_
9B0k90P>60h83QP?21Xi8@PK?QP[7`PG70lj80PJ70l86SP161LZ2`PJ>04L3`PH70lj80\i6cTk
80PJ61Pl42\a:Ph86RLm?QPW?3\030hH5``>61PC>BX>;P0007Tl=`Dg9CHO4BQj~33clb0C`X
:SlK30\n7`\;33T:>0P3?B<12c`O~~~~~ZR\0`30Y0~BLUD40;<4~ZcaDRV^XP~B[4ZP00X<~B
LUH4068<~T1nHQ3810~C@08Q8nH`9FHU;bIk4994^>nJNZ8@40KX4N0Aj6hB4PH`;bIP<9@U8dB6
ojV00;0<\RRZ2f8:3F:b[8IJaBH02P<02`O5ZTZ1Wl\0@0kn2cJ\2f:\44km42nhAZkl2bJ\ARh4
\>:b0;0J\RSFeV;N2f8:2V8<6F:bfHH;3BIJWbH02P>b060;iCJb3BL0i@8<WgCGPJc50;0_nfT9
HCh@X2og2J=Q4N:PmoX9HChBZ2l2POcU0;00[`Qn8?c308h05`K`<>8H66n0ok8?3f8>X6kinBHG
LBhH>2oaB:hG6bHK;bIk5i8I668J6f8Q5n:XkOXI32HK3BKn6I@IHBhJT2o46J;mV9nW]jXIHBhJ
T2o46Z;mV9noX:hJ6RJbo:VP6^8JYfXJ32HG3BKn6Y8_H6WT3^8>3V8?6V9Q6n:HgoXG3bNP6^8?
6W815nJ;6Z813nLH3bNPnN;ih6hJ62H@lOZ>6Z;mV9ol`9h>5cH>63KiSTZ00;00~2aNGMWfSD
0?l3PBS?_lbVo\\Wc4X^2?gP`Ob2bl]dc?\RndH>1PC^`L5RB<7Rn\dVnL4V6:GjcDXn2P[^ZLf3
ZLf4X02Pn?LPn<\Wbl54ZObbbl]dm\\WmO@`BP[^`LaRll42`H><P02`bo9B@<;jlL\Tbl]d`Efc
~HDb2BZ@6Z~BD2TA]ZHZ0;X0mPO`P?lO]Sl08?d?901?[Al0[kH?3IX<0@2P~6SolaK<dkG0<n
RJ\R~4P000~3P000~9h0<0~90@GCoTn0~8H000~6P@0@074;\000~7l0oaG_Y2j?4?VP00@30P
DPokn_l0QOoof082I4;MP180\13H:??lSO0JRB1cT?=00:R0CHZ:>0Y]IJ_RkS5RP9mo90S0KoHH
1`20IfPbjX2PP07PH3ooa3R5?a206`J2Pk^0Q3>15NIoX;hDOf\0P0J1PVInjBJ3869mo`9Po_;m
PbCKjJ?YjGAlo9VAP:96PN86P^86P>:jP8941^j1@2kJ62n[@:8X0OkI@6h_fB8Hf_:j\hX0@0kJ
62nk@:8_NfUj420XeoXQP>:P^__X4N0QPN:P^__X4^0QP^:P^_^:X;j:0;00P`J3ARh4Pn86Pn;Y
jG;kX2nPPnJLP:00809iX2oZO;W[f:hPN68OX6kjnGEo_KZlOJmV6Z3[i_l0?0HlMbT4ON1f:2Tl
OB1f:2V0MKUdLiUb799a>PHLL20k:F:PX?Y_>Y961>i^9bU]OY:`M:WoZiYb799g19j]5j9\Jb0L
769ZJIUX8bHS4cH<>6IWMKUV_YYU^YYT<YH8IOUe89;nX2o1f:iSO9UnHcWmHcWlHcT_HbTbHbUe
LYT8<SH8;cH8o3L8oCL8OSLeiTXiIIX8Id\bjTYRm9Yk798Q7N:P4?;0m?YQY9`L7BKX4N084CIP
Ii^2P@13Io\0APh61^j00;0O7d<P[oXYj2nJGj8O7f<XV_YNZ2nIGJ8XGI8XgISo7RKn7bHOoDVW
7jLNWTZP7^JO7jLO7dMO7bJP7^J7GZ8XaoXco28XcO[k:2o7nZ8PnO:Pb?XNQTYf82J5:kCAN:8O
f6hO83JP7^J5:k8XaOX[7f@OGS8XaO[h:2o3mj:XX?k=0:3n2RH::3oM:;UOh7Z0m^;\mF8XHFTX
Jl\05`9[M`W^kk\Od`CU0\3?jOlbm0oNP?Z?[cl0V@HFX2n0V;B=<JB=8JC`G8TaVD9N:2nDFj8W
P9^PV>K`P8_o0?00<@;4Z2nJ5[:PV_^^<J9J<BK`<HCckZ8aaV8W<IB[FZ8al6Pald[48BhaFF8;
=6H;:3o79jTdF2:P^_[5]bXh:02]8P;C8H:Xd?[69bTQdbS`l8RJ0;07kf;`mVKK1jKfl4<Xj_X7
@2oIP:k`mT8XeoYG9bWHenX7Eb8Wdi_jM?\0F`8WI98Wl9\0F0;`FF8;GF8;l7CkmZ\08P@QG6W1
P9208M30Q[Tg66n0_k8e<69Q=n:HP?\g;bK3<RJQEZUFEYT`HBh_V2ndNjT@_RTA_RTB_RUf:2TM
b2RoHBh_;bHH]?XbVDYK:2Tg=DB?G:Tg@2k2RRZ?bHoaQenUo0l0~61@IJ1RH5ARh41NH512ia
E`8X1YC<b:\0:@8Xo?[8n_XkBRh8En8X>Y9G:2TGb2PHX2mEERTLb2QOZ3oe=j9FE9Wj=j8PE_UK
:2Tgf6\L@2iCnYX070IYJ98U5f9\8`HU8ChS8bC8T_XS9BMYZ9UYDY8U8f8Q9N?0W?XS9BMA5i@G
K22PP?]YJ98U9F<CP6^Qdi3Ic@32c`3<d`29R@29R@29;`I08BhTnfY6Z>o74Z;HaoX@4FHBH6VP
<>8`;f@T^DYo0;00~6X02Pd031c02h[@3F`P2`X02PcP3?X034`@3Da@2PX02Pd031a`35X000
;`JG]GQ@:2UK:2T`HBh_V2n^XJX;NbT@^RX0S@V::\T50@B9ol<Xo_;ooG<Xo?;mng>1n\2XU?[i
VWY?n2WgZ0nBmZN9nl>1mL2Pm?N9f\kkPAbXZ?ZalbN9l\>1n\2X\_[anCO`R7o_RGcbPCaFZ0o1
2Z<>b7Bi2j<?bGBmkZ?]k0;^Rgc[jY_bk_o4a02Pf@3If@2=~2ZZX0ZZX0ZXd0~3aHd00?T?0>`:
~3P800P800P800P800081>0?l]i[Wb2d\RXeOi9R2@2_PQP2:b4:@?4hToSX@?JolY`?kboO`W
385\N?]gJolYf=QRn_T2Z?Sgf<P_UoNRmTmbooZ@nJP_mDmbolROXoNRm?=kPHHS@T4CPA94@DXf
CYEB0DLea@m4e8l3Q4=ARO;3PO70Z?3kRF_3X<Wjg=\W`=]4cl1:POg2o85lRX7>:P:@^o]?eLjR
knigl66i9?2kP?c=O83_0@44>8h`3@1OQOo`f08TI=dQP00Q\=P?:?`o<4:IQ250Xh[k_l3^`geB
_o1On>4CWoS_b83k[2Po[J`WRKG3PKK0Z;OgRKS3PKW0Z:Oj[24n[J0_VjjR[k1b\Jib\ZYiP022
8:\;3@Tg\j1:]:JK0;ZGoi1jQnoe8ZhZX2kR<BmR<3P_0:?o12D:Y0;`CT:0c191e\a3AY3_cLbc
c\l2f]1RfmURg<e[okGk>88<CZn@]P3`h^=XoZP_dn:b9R7<fejRX=?kI=@Z~37Vc0oB0_hl2n
Jg:i[k?<97@9HbFM6P2@:J^k`>G9YJ6l9A[I0?d?m5Kh5@00D<d6P2Poaj0_PLfbOZP?cBdR;LeR
ojP_Vj>XcOhRX87kCC@VPGJbcJ=X=74PX9gjP@2`Y@9?`KjZcDH^1TkPbLTgcDX^2PS^C\X3b\]b
YLYTc<=:O_dYc\>:b\TVb\e2b\ebNL0_=010X`2`0:D:~4J`;<o6;:bf:U@6k>MKU<hRYeni;T
889;Z2mliYkTOh\0m`KjnGT8m?[gkdZPmnKa8:;hO9WWn:Wgld[T0;2YIUZenEn0f;EfMomlf9hc
WVR0NJ8XP?Yf8BhM]FIlWYRK7J:XUOXPZBR<<jIlZIRY<hIoHKUSS:X080;XUoXPBR99X0nN84:N
0;1m]@B`]Z98ZI]g]YJP]NJY0;00:@;0Oo_o0;3nX3nkAk8W9iTWK9;mX1o2oJ=n82oHdh:::\T4
~3k`Zk0;00~6H@;\m6;@kRK\BB961^h6A^3@d2K@D2ke\2ofljT0P0\0R0oHo;950;00~2ndD[
i0oR:RIY9DbEAcEC0202A2P_X?nR`83kO?jIP7GY8?dR:?cknjP_YfJY`h2XLSRB=aaRB7FIP669
HjFZ:bP_W@6^:gaYVgbYMG:I6SET[f6YKacB6aMRJb4>6f\PZ;gjM1VB61]RnQVb61]RJPbFIfBi
<Q9Rb1gk8?TR:=7jn:P_mmRnUWbY<^1:5adVHQ2B315R3A9R3QeR3hUZ5b4^7JP_ef6YI8VZP:ig
7JBg]KEgY`1`770P:?KjKRLYkdRakeCo;_XO5EbOhki002`6>1aV=H1RHa^F;<P_ob2boTX^X9Cj
11_VO2bD84\R:=ojoBP_h_bR@23_njP_nVJinD>i`:jXU1^RFZP_n66iHon[0202mb0_mR0_mB0_
m2P___>Rb;kjIJjK[Zi;8aARZ23bl\0_gB>RA4C^9AAR8bD2A23RlB<VO4>I`B>R7A]Rl2<V8b<f
8fFidgbY5mHZ7am3GZP_janS7GaYef6YHj2^8?Q[J51_B;c`0^\?=2<?V01gP3>@a`c`EC7gI3:F
4\0_Qf6YL3:TScFT:LP_Sf6YLa7Bb23bNJ0_ogFi8<P_obbbX?ok;QeRHbjBHfJI2;KjI3:FfQ3P
Z;Gj7BP_0@SS;WEYWbbRHB`VP]R^0G;Y22hf21df76\P:=Sj8AORJjP?cabRoQbFbcPV?l1122Ok
hgj27AdV;WdPZ=SjHGZJ;VhPX>?h76`P7A`V22<f8`2`7B0^ER0?jf6YJAfR7N=[0?d20d9R10=S
JgL2Z0?g0`A4lgjRkZNoZ]NF7A`R721RodX^::;j1_kRB2S_X@B^oDP^::3j1?cRZ9ojnh>J=JP_
nZ2n=AaVnT6n0@7^1?W[71dPPQbR8B?V7B<TZX:Z7B4^n1bbMfj@71aR81gPn22omb0_mR0_0BS_
mD6b:?CklbP_g`6^:>_jl_5Bg2URj=CjgMQ:X=gVlR<fg2<[g]a2g]Aj0=P?:>dbZ>SjkB9T8BUR
h5ciFm`Vd^fTm@6`0;`;08`0P0fP`X6ZM84?PI5fH:if`PG`1UD?080>?Z]0P80dE_nBoRUbh:7j
EWZB32P?WofY3OdY3_dY3b4^5jP_XH>R:0nB8AORo5^B:82K0?\22_YR2oUR8giR2P]g8j]:3:A[
06T9:;;kJ80V4f4^P>Lf6=?j6QMRJh03JX2Cn:@VGf<iGjAc755Y5jA4P>MDb@RSGh1bmj@VY;9k
MG:I720^9^9ZB2VBh?Kg9]i:boHWO`2`ik8VOV4^J>Lf6;;kJ6XiJ?DbaA>T720`Dn1?0N53b8lX
<6^K0304<70^@;P_oojc4?eS4OaS4V1YP02`14S^X_]2@9;jnZ<XXJ1^XZ<XMj6BEZ:FS`2`~3
::?knD0_n?LRXbVb`7okmP2``<7V`blR`A1>mA0_]4J^m0TV`DH^1<oR`@9_[`2`02l2[`V340US
4@US4PUS7H5\a02`~cOR3lEC\PeNGo9M\?PX40P>H1obVD5SYV>b]V8SmV53iV<aEVGoib26eY
OQ<VOVXYoGBi6BUR:?ckb?_kGjPoY5fR:5fB:5BILaJFnoZCnEai?\<X?l<XG?RICoNb2XU\JdH`
2Seb2PYgPOK325C^mXYl:PJ@~33=5SdBQ?beJYaGJR9`bBmOnI`n^dm82@020Plh6jfZFZlRLV
lRPVJo4W[ZYZ01L6:J0_hQNb650^6U=9P1[VhXRgVmjTdnm5Qe?biXko^cMBBh0RW0PVSg0bY?KV
O7FI;6<Y6f<Y76<YmV<YLQbB299JZPR?jaf621`f21\f22`f8?lR8?kbZ7cio@2`Z:Oj>BFLXCVi
YJ7[0?H65f\P:>ojmoaRjfiR1a=Rn?MRMfRB8n]R8bDfn24^8bPoc?RV9B4nmZP_iRFTn<A:mgLY
D_PV8b4nn<PofONRXJ2>hJ2^8`L`Z=GjX2?S8b=cjbDVmRDWjb4^9OLRZP2`m^]RZ_MVnn\V@@LV
O[HZ~4iPl34mACedK<EoooWb:DMFUb89;nZ2n<^:QeQIYl:i8Q`>JP:n8[7682oO\[`2;0oO\P
oR8XX_[lX2nUi:hP:n8[GfMlUY[oWb:DMFUV\9ZhZhYT79HB`2n:HJU`RZX0H@US8:;8Oo]l^9\0
;`;k49894G894W897G89PGc00;0SX6h822H8nR;8g?XS22NP2>88cF_iAB\080;h@2kgT2oNgT\0
@`WVI[WVi[CV0;0PmR90mN:@kOC]6[0U2_16YORC[lSn2OI42?00_0Cc_K:P`_[0Jb1g_i8@_oHH
_OAj2^h:`>:DeVT0P0\0^0[0Jb1gUY:FU69[A0jDJb0Q_>JE_RJnlcRn_SA>U0JnlcRn_SA>BPh:
U>8:2^kcYXZm`4nHoj_o0O00~3S`on:E;Xc?[mF9;lFG;k=7KjeRJ9`L>1:<o^RZ`Z0I000Pn9
e\9[M`:PnOTf`2K1@C0PA_9J2^jo`FC1USK1_DJ1Q\[hlbQKlbSg0;1\mP^ijG6TKPN1g^OMMW;]
lGEeLYTY:2n>j:mo>;8gOf;oGG8XoY\LMbT4ON3m8bHS;B8]8f8W799m9`Uo8kHM8BhM76907N8@
Z?XSXTZ08n;likRbLZTL5RIOOg\FZ2l1[n[W`8Yb798Q5n8H6BJPnn\H5b8L=FJm8J@Yh2o>8:;8
Oo]lbI[Whh[jF9;WFF8:ff[WfdZPinKM8:8:X7hNO6TP`2oFG:Uo:K:50:1e8994Z2oW8;;0ioCW
0;3alD\HW<of0?3Cc`5f:RJ2`73[f2808`J98l=6o`8S8f>1P<^9o\>12\j@E_;mZGbk^XBQ^lRj
VDbk^XBA^lRjo4?k:0nZBZh8^^JjnR;0nO8P^_J9n<>1ml2Xm__em2OclROf4;oal;;_lG\1~2
k\dWP<gS087\kJ0_bbZRJjP_^gjb:[]T^bZ`;hm:_BPYD2PY]C66P02`Jc8VORPY<[Q:]HB`>BX>
;P0007Tl=`Dg9CHO4BQj0484_UBoF@3l`TXQ`oT__`A0Y@G`nSS`ol?hXnooRR[92Q<1`84^0XCb
nXUlh84lAUKPX>Cg49CjiNHWRN33PGk0Z9cjjnLWRNS3P@K>`:CjjNYeRN33hJP?h^>cX;;jk><W
[>=4^:a:PH[<PB[Y0W4<nm7jg]lY`=7jf=LWf]TWg=\We;Mbe]Egg]dWmOIbmoQbnM1kP659i^:;
ZS3Y@SBIC`PhP;K^?II^RX3kX`3b=XY?Uk5GKDaWY27a8STI0M80AQ<C3M9@AP0@ePY2K;l^Al0^
G010~6oongo`2`C@3@~20E4LXkWaP548X@0SPNV<X`21QIo;XFlfRbkUX[b8T1EUXPV4X5?7TjT0
ZU<PTZT1ZU<:T[lYRU>IT=hXR^N<PbN[R>N5Pj<iXNO1P@MJYNO5P9@=PM5UPPfgYLMUPPV5X<>l
P>A5ZjPmPP<0ViTgPgAGQIUhP>:7T<C;\GYHR<80l00008AP\N@[ZoNGX@0U3?ONX00Q3?A_X00T
3?2oXP0V3>ZlX@0P3>ONX00R3>FDZ0000]VlX@0H3mTUX00P3mI@XP1A3m>lX@1@3]<UX02P3]5e
XP033<lUX0183lflX@0@3ldUX00X3l`UX0103lY@XP083lXiXP003<KTXP063:jJXP0:3ZjlX@06
3ZkNX0053:gNX0093:a:X00:3:ZiX0083:ONX02T3:?NX02D3:=:X02L3:1_X00<39kNX02<39^J
XP083Y^lX@043V?NX00A361_X00D35boXP0F35?NX00B35>iX00@33jJXP043c^JXP003QE@XP00
3_:lT@0A3o8UT0113kfoTP243j[NT00I3:VoTP0L3:U:T00N3:2iT00M39[NT00H39Y_T00J37no
VP0027m@VP002V32V`0015cTTP0035`6TP0135cNT00234i_T0013SCTTP023aONT00430nGT@24
3YLUR0001WblP@0@3W`UP00P3W^lP@103W\UP0203WSNP02237PUP00Q3W?NP021373NP00735eC
P`023S>DR0000040P000P0380Yo9HZE<HZJ9K<N1?:FUM<NVA8O9XP6UiZG:9hXZb@_;1lU6<2S5
nXXZb@4000;9lhXZb@<0~2_@[<cGVOOR:@E_;Ce2ODB3hQd^8fP6BOcRNUcbNVd2N0bK=1Z0oA
bK=6b@NQbjF0P;n1dlG?AeG@CUGcm5GelEE1P7bE@:8Q9^H_NfWX4>0PHO8@H6T_9TCIOj\0l0K`
2Rh:2^i\9`W`OB0Wi9\0X0kjngGloBOnN58Ol6^l_JZ?`O[]oW9Q>BK6RY[7?CHETfR90;V9T\>1
Z<n4:J@0XnZ50?2K7bIn9bTOUTZCn;mc5II0;N9CTiS1`Y8X`fF^RJbm_SNm_TBoZ4Z1a\W0ag>0
_>;4^g;5^WViD[U`K297QBn0m_mG^iD002Fo`eD0m2FPfo[jb3o[n[=8V>o[j[;YlIU5j>WPeZkT
i2KU_dX2P?\0~6P@a@8Mf7@Pkhn?6?mol58`aBJ?hf2@3nl?o_3o00?\f0Pob0P:D0o`V8P8dQ
oP_mX3olnb?D@2I0@3I08BkjoG>PV_Z9i<kinAM^:RJ1n\<>oF=6n>:Y3:;gX2n[mZ:ZZRJP3>J9
3<L<37L<3WBQPJceI2NP<>Kd32H<3BH<NS3cj7h<maOX3>7b37Ca`;h=lcL=mcL=lSL=7CK`39;_
X2njP:]Dgo>kVg]ooOoOFcHm7JkmgO:kWfYmoNl0G@De7igmkoN]i4[odY\00@:0Wh22P023ALl8
P@3oi_oJ^P\:``SaQel0~~~~~S
Added src/kermit-12/k12pl8.enc.














































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
(REMARK Image File Created by PDP-8: 30-Aug-1990)
(REMARK File Date: 23-Jan-1984)
(FILE PAL8.SV)
(REMARK File decodes to PAL8.SV Version B0. Taken from)
(REMARK DECUS DM-101 OS/278 for DECmate II.)
(REMARK Should work on any OS/8 family system.)
(REMARK A recent assembler is required for assembly of)
(REMARK the KERMIT-12 source programs; Version B0 is the)
(REMARK latest version.)
<VVM86204838022000V01381U0AS08CDD4SHUK613U0T1120Q66H2KCJQ7G90K211H8D14>
<UG80640O0BT3017GFH1LSC34MP00970G0C81O0EU61GH4D146O84FLHG4FN10OSK3OI18>
<403I0F06GJG8CA2S8BK20JHG0H1U086750UCG91CORME8I1843330O640IM0L81OOQQ9P>
<3SSC07G1R2340S0BU1G8O6603JOL05O006067ICRN0K95UDJH38K0000063P3U80O7G9A>
<MFPGPO5G3UOB0353I0S3101T28OGNSU00000X003UX000472GC0G601800X000B0SI5A0>
<04MC00X000R5JP1AAD0T800X000BLB04K00C1800X000B0SI5C00CC800X000N41OUCG6>
<0G000X000C4G722OHM61H549B2V5TI23I4VE59K9T021GGTQ012O8UT00IC4H30ONPC11>
<G89A27A39VUS00010P2P6L8GBC2H0R2P6LGIQDH800C5001OB9HDALI0RJS00SG1VSO5M>
<LGGB9B710BUV22LOSHHFOO5ILJI6S11B1EP000GQHCJDCBB6ROGBC2H0KO62365IDM90M>
<O6IB9KV001GKQP000OBDP9B4S6G00N5E329VBBSG6U50032V7TJ17J1447Q1BRJ17J144>
<FQ1BRJ17J144NQHS1CG6V5000012NVFR10HGV000062VNG4C31HSCBG0NVC3P0UO7EK0N>
<PDU91FPOI33POLSF4G8BM3CGRCBSNM8BM34GOC6H1NOGI2VT8LR91IO623DGDJVI1I8CU>
<C4GQV45C88CPVNSOL9TBE8CUC4GQV45C88D9VNSOLFVA08D63ALIJV7A08D63AL746J0O>
<8BM1MFU46J2V5GESGGEC3H0SO7I3BJ146VPHBFI2TOFT811KS7I3BG1C5T8M8DE05OF46>
<3GVQG2V5NPTO11KOCF22NHL3H1L7UVJ2FSTG1GSOBJ1PGO9UD8TE000000006SBNITJT3>
<8001VVI0V52LVDJ1FSV5IPJIAS20FR30IVHUB9IPCOBTGVFI6S1N08R0IO7I85G9FKR6I>
<V5M1U65AAF6U9BGAS2KAIF6OL56DL8000BS0USNOFIQCMJ0RL4NSFIQCMBR7PCVL1T74L>
<O56O4MC1SPC330SGES0002SMBPF82M25SACMV5KPEU16N8000000000X000CIKP21AKQ0>
<400X000B2K0IIARAKO001ENVC03HG3VV1DG3U0GFVL14U00AQ0FGLVTM03E9L80G0000X>
<000373OVUDMBPKQSS0P8IALG0000000800000000100000000000X00037O0000000000>
<X0003A0AD7VV0G000X00040O0000000000000O200002RH1C000000000000001VOFU6I>
<UUGGUG07GJ8O00G021T9FVFVQU07OA3VIR1024P0TQA01005GVM1IHVU0HKGQ12FN6E8A>
<8200H054Q25A72JDMP9U47N9CBS00VS29V06DS0O01R811JO687A180O0FGFC0VVHH0OA>
<0VGG1GRN0LO6E03GJK1C5DNVQG62IRV00380Q0MG8JUDQB868G0FKNVUO1FSBUKGEMR7Q>
<BUIJKPFIFSL4981P32G7G650N0CA08N8K0SH70CA0U80MQU65AM90F53G1DMF408NIR7O>
<O5MKBLAPG03I05MNHHATI81HFIUP7K08F52MNS8981UGBNBN804F22A0VK2TQTQ015OGI>
<GBT0NELOLQGBH80000386A1U8RG450V0CA1NT4N95UVQ1QG6GEKS100008G2F7T0NQKNP>
<BLUR1H04U31VQG7V9FPMVTBRAUFFMJ606NUNVJ001HS4F4NFO20FKJMIA13O1UIEQ98N0>
<4NB5Q9EEBI47072OT23G3GCEP2JUGAK2BF4EN4DO22DQ97IR97TAO9EIFVLASN48E9EVG>
<4LB91E9M0DDGS474ML5KID1H368R16O6672R7ITCMDAV9CMLQIP335S49CMBL481FTUGA>
<O7MOIOSNODV9CCVTIOPVP5HI5UB34CKM75QPE8O8CCHGGONJ11VS623VQC47FP1LLPKJJ>
<9IK12R78CLEL5HAUIBR477228EVK0GGVG5F95GSKGGSC7FEG08J11GHIO5ME210G7Q3MP>
<O01P3E0RG6N0000GFJ3VP0LBP2JVKAJ8IVC7PHVSKAJ8IUVA59I9EP50ITIA4DQBVM3ON>
<UC7Q1V7UQKTOV87L9TQG63QKVE7Q1USFIBTGVT831TA3IBRP8LHP36BUF52MD5UVIHB3I>
<VBP05UFQ1B443QK64TJ21E2K5EMH4U31VRC33TH0T831TE2I5FP8LHB2MGFJ3SIUUA5CA>
<BSF52M35TVQHQGAPK005VJ0KC5F52UTIA3LVBGEG0NMDR1FAOK9C718MQO008BGDEBNNR>
<LUU0FKQF7500NSVVKG6BVKVNL80E7VLS00D691DUGBG14OL3A33A6K467GIN232ACIBRP>
<8L515N4JRG3L0D64F1E0FVS0000132B2FL2SQ45NQ1EDALOHH4MJ333O466NJ5RJ32B39>
<4T1HLAP5KOOOU11HLSPC9OGM64IPC2R38C5V52M7I9P389CFK2LQ5HDBE0S0505D48KD6>
<8GVL2MG5HKIE8GOQE7GHS5PK0060SNFDS3FDBDM0T7M7S7IHBL20VQ0LMF80JO2URP8LL>
<P5F4JUR2MN41P5F4JRQFVQMT0009DP4SJ4I9TV0002B1NG4MB0M9EN1D7GLUTVC00449H>
<1IN4S220DG011NG4OCORV32S05FR3A8OEC4HNV65O08RM5SM3CCLA35B9AQAM4C7628NV>
<J2LKIUP116V226DU44KRS9R950GTHI1BVPGI5THFU65B8GPAJ4IRIA23EGQQHUAS4DV40>
<B1AHA4FVIAV3U3GKNVSX0005C195KO320NI6S130A82U0G3H4LSIGG3APIU80012JSKAV>
<JU8LUH3NP5E10INIA13K9BP50GNHI11HUG2AMAM474CGDFVL2NL4DSLD5AAV8HNU84LC9>
<DP51HNNM11PP09AENQ0031P5KID1H545O6OOHJ4NH148Q27V4AI8H3E9CMJ6K9D4IIC99>
<27OGJ4NU0L7126SIPA50N45O6PUGBG2B94Q32ACIM2ES0J88D63CGPK621JOCO39GH449>
<X1283CBP41OGM4INRSHNQHB3I2BUOLHR10O8M2AB0T8130OO45T14LEDNU0000000X000>
<3180A0380O46C1E0AQ3B0O85G180A0370PS501H0C23A0OK50180A0380O4671H8A0006>
<5TSNHD9514K2BE984C7628NVJ2LEL890N5TI22LQ004ORI59580580E8IFVV50NUFVPVR>
<SK2VHVT7UU823TFL2KKFUD9K97PV07NVA594VRCH4VRP08FBUG7UJ49TMGVNI0VL2L85C>
<BV7I4JUB411UNQHAP3U5VPFS7OGVNSH4VIP085DUKAO4OAE3ICHASJ1DOF9IDBQFN0TKN>
<CFRM8N7LRTBVIVRGC8320K06P1M8DI26G005AX1AG413800000OK4D007VI00ATG00000>
<80200G040X10048078080DVVV65E90M95VKEANI9G20851V2S048G11UI32FS913NO89L>
<PVVU05VHFQVU61J41EU3VM9LPVTMO5M0FKBSVL1VO5M7SHABIUTVM4JSVU3T2V7T8FT94>
<V7VVP2L35TRV9FPIG4S62GHK2I0K28Q1CIIKSAAJ05A79HA0U3A3HTC42GU8IFPCG47HV>
<A5V1I4JDFT0LI9DOVDKO16R9JTC1I0IVLVSP0E8LQ0P58029EVVNBAIPPVFFRLV15GR4I>
<VGP06VPPUFG001809JG2751NO0V18FUBC408J43N980400M3UO6A7VP4O9894408FQ7E5>
<ENVM0BGP7QMVVU0FO7OF9VVSFP2S07B7IGAMNLJ497DE822RFL1TNP29RHI0GN7T8L9PQ>
<POGILNT0L6PASUNIM1TH5BJR56L8G0G0085QMC6N155JL84R9EJ901TQFVT91U3LTSH2L>
<BNA08N664HF4C7JHS0FKC04K9FQ80189O229J0H4JB3PJI6V45SQF60POMFDMHD0RDIR5>
<MSNJFVVEQG7342IJGAVUR001N2HOPFTUKBQCN2O9M23BDIBRT0NKP69BA00000O7G6OBU>
<V42V3TG5MN5PCLV5J094N95HT4M8Q005IJELSO2F5N9EA3KIP3800VVFV91B02K000K3C>
<QE0F50M7V85O2B6GFRT85J92QOMIPKNVVA59N2HIPKNUV85O296M6IS14TJCR2HI6G3HV>
<859RE0G0155U0LC3AV2PNI6S1G4SF4NP4MDSIN0LO409OUAFIHCMQIKP96CLGP7T7UOPQ>
<M35IJCIJ52PLUA5J97JV046G00N8O0000AKK00000009LMPGNSDIHCMQIU82UEIT94PBH>
<9EKNRHP12095VL2BSTPKE9DVG01NNFUKVJS4AUH7NLRVA0RRQU4H0JU4NPBJPV17NLSTU>
<8005L6J6BDFVJE05R3RMUTSNPRC66E4UL017JSKAG0JMS8B1QQQPFI4UL6P1RUKAIKH0H>
<AD8OOPPFI59HAB37DVPC6J3L30008GFT2KN4814K14VK14U485PS000FL5LLC1BD54BL6>
<BNDDNA0QQRL4000012JV0BFUVV001VTUGBNCI7XI9O34R0VRUGAO8VT4VNI13C2QF4AIA>
<G0800002NFNEO000000000000009GMTGNK5K3ESBM297I6S1N0C132Q1MG5K750BQVM2N>
<MJSO01E0003S8NM1FPD2G0000001FND2USGGFCAKID4IL9HA76D8008G28JP8L81FVV0B>
<G2BSJVN815QI40NTUA5VOBTVL2L7IPLC7209E8HOCDP1P549EM40IOD67AII5FP8L7F02>
<OLPFIKRIV4NB5P6391LLBSM3LNI3HGR45O6NOGI3C3BVA5BR5Q235GO46TVK8CM30GRIQ>
<J0PDJPCHHI44NSHCEI40NPUA5D2BSFL2VNTM59D5U46AN045R1R5H221GC44B0Q8961OG>
<TC3T8I8BU44GTVA5DF5GQCIK9F03QTCENKHTLFDBQE0023G3GUA5FC9N94UVF2I7UVTA1>
<5RVQI5FLOJHGNO00CB33GOE66KK0IOR1M8MFP2VV481FTP5FK2KKS131N5U45GH04IVIH>
<BFIVNP8LOHFPP0F40NRVA5VL5JBV6A3LG4ATAA23CIQVA5VH5GQCEVV00120BRV40NMU8>
<1FBSG2UJP8LFHF7V4ANQB5NBIATEN64CGKVA120BPFO2MT48V49P264KGK08P2BP2240N>
<HC8SNP51QO4H3C791MBO64CP3C8TI75IQQEBS45TDCGFJ3SIUVA5EMCFM3MBSLLSM39HU>
<K1H0NU36HT8F905S00NUM0QF4DSOE04O00PVOS0CULBJ35I668GIVG58F5GQE11IL3Q3A>
<8KVP2KFIOEN688VP0H04UFQ1FVPEKH0VI5VU8MFK2VVCBH1R5HI5QB3IPNGHAR9CHHITM>
<G11UKAMKGTUA702C465QBLL7P2O9GM5IK2TM7035P311HE6231Q8E0DFP8LM7228BGDFT>
<8LJP1P7V63GMBCE23U70F12P7HOP7S8EM3KHE0VFQHBC9C6JQ4BG6TUG8SCGS0R11QOE3>
<11H3M8O008EU402MU85EN5GQD4GTC7DU6002VLG34GJ08C1GDCJNVA3G6G1K0INJ4VLUT>
<UJPL9MN4791OOE240NVSINIHAHE0ONUSI7IHAGU0GNTSI7IHAGE0GNSVA59V7TQGCHLVA>
<5VLQG66LGSNUN43O0U07G4NU91O0EQG8GSS8B268EK4ELAL0H1ROGRV0GSITO6SOE23JH>
<007DVHSG2UVP05TNI1O0V52VL4GFIHFQ2UFP8LNV03SKATDFI5SBDO8KVT2MK9NDDHQG6>
<RKVIC8PDPCHKROMSFNLD800FR0P85RFQHBK6TL12C892JVG9BGIRDN5D4JMRUK01005RO>
<000HIK003DC5A0GEJS1F0B92TG6LRU20180DTAG03K08FGAME04G2AM5VRVS8KVS2L1IL>
<H7K06F52KVJV90R7UI1QFT43V228BVL2L150SIG87U44GNJV15N4KBG0005UR0KBT61CN>
<PC8P7SS571D13LAR0PEI002B9UA5R49K6G0GJSO9O0RJV32MJC6H1E1LJG2BA701FGQI3>
<BUB3ENPQ8OE9A50N992O0JJQP4O8ENP80BRMKHT4NCKNB5P23JH0C9LE554257V0FTI2D>
<BF2PDVMMVO00BJMM8JUSO9MGRJV32TI6Q4MKDK2UMM584PHO0G4AFV0809U2B48HU9GMQ>
<O00GO263JG4G7RHFVJVPGG7VB12FU62AB0N0001O2E91525UVK1A92VA53D8FA0AH8KEB>
<N58CLCQHBHS0000001SKBKCNPUG1FGBRRKCH9VG5NVFR003M0DG9C68NKO7GG5TFH1AQE>
<8ONKC29C3P3E0GMFDGFG5ENG00004BSAUC4M20O9C49GIO9315GTP0DS80000000X0010>
<UVM209AG7FULVP82BVDGG841100UD7VK55GMCEJ3MOLM49HVC533SOPM2LQV5VJ0H5MIF>
<PGJ4VKMLFUPEHGP4AFIHFUFP2VR6NVQHAI2BM984NCIH5A9EDGMJUPVKVSPBGHUHGP3V3>
<1PBIFOMJPFEO5CH4RB0HJGK8UN19OAP09VDO4EAHVMP2KIK0300000C31T2J8V52MBILL>
<CA9R94SGCJTCVVF1KTEFK101000GBUEK1LMLAABP64SNICA16MVOMLQLA0031E8KVK2V2>
<45P1HP843AAJT031LFH7H2KR9NID6NNVGSIJVPNOSMTI6SIB5019OO43HSJGT93FD5U9E>
<KHCIOP1N5HI3IB35TKM75P23H88L4KALS48TDGT6231OC463CO8CB120BVV40NUVA4NPF>
<UG03T8L9SJJGIRK69PT9DQ2006UOGN0QVIHBNMUSNSDQP6SO3I2DNO5TSNE9K64CNB68R>
<2ABSE44P3UA5CORS34NH15TNQHBJ44L7OLH1FF5RIA9NO68V22FSFP2MP5TSA3QGAS7L0>
<68O0FUKAQNL068RI6CHITDH55TJIABLU44H55TTQK006UONBDAJFEBTMTCI1C1P7TAR00>
<000007UDK1K2D2JDLVSPTBIVSKVD54NB5P240NUVA58P2S9EMK5IV12NOGMO3L04AR2M8>
<EF0AVT4APC1V0BVKH05VNIHAH2VJT0L9FE9OG25DHBENSNPAB2VSKVD54NB5JAM25OLAS>
<M8OE22BU0L2KM39OAH800IOD668GFP2RVIV5RG0025UFR443GI88N14GIE291QS4SG6U0>
<00327QG211G8421FLV4ARGH3E27A084612UD5UDKA00240NOSG1FFU84RQUU004K7FJ9C>
<QV69PLUC00240NMSG1FBU84TMVD06NIA05F8Q55P4SAVVV617Q402000IUBUCLTV85C4B>
<00DEBN5FVH0QVV315TSUN0LO52O1KKJLG01E0002LO5G06N5RIIPKM5506NP22IG3BS8B>
<BOAAMNOTUHSPRSIV09PKK7FKF6EV4NO2ESIN0KAAE1BGAHSTACIUVO2KONVVVU00G0000>
<007OUNV257V8LJ4VQ9C7VGIPFUR38BT6QR497GE83SKATR4AIAG0200F0B495LG6M9RVK>
<2FP4DJC0F0G87P04HN5LO56NT617GB9CJ0MNN41L1HFH3PIBE7JNTO001MBUPTP3Q8A8T>
<NEG5UUFN97CVMLU6BLISH2JSKAHRV8MVP3GORIFTVV4NCIHFV23IBNS107QBUM4CH34BB>
<2Q8HP4SGS0VCIFDVM4CGTS8B1Q8EE80GTU45AGGHQKBK048TVP3JQMABI4731CTFRFSGM>
<VA703ANOSUM0ISH1POGI2SGOC6FA1FTI30GNC733BAUK44H9VO5CS8GFP2RVIV5CJ3JQS>
<EFQ4M3EE9CM1AMR9PTDNQG6SUMT483GLQG63QBS487S1BB9BIRV4AD8A009EKH04H7QHF>
<JI43U09PTUE004U6VHO67PPVR0006J3JP7COL7G8605QPDG0064F4968O4CBVM4CP3P0D>
<O1I4JVR41S2NP09B7VN59HEQBLIGOND5QP6CBMITCI65R9EHVO3TV52LASIN0GQT2N8NQ>
<VG1FJSG6NB497U6823RVL2VM5TBV8BPNUAVMU45V2BO7TUVH00800BN7PNK07JF01I0IT>
<NT0LIP2K9LVL2TR4VJ2KITRNC1A8BT8UAUP50IGIA4BAOORG0004QR349V9511ILE5RA2>
<2077HA0BG00C0CF4PNE18IBSR726H800245EVFAJQPO01C4552OFVP9FO09UIG0NVQ0E7>
<VV31VKFVFP2KIK0512CM0T0FG4A27VB497O683P30ART0FP7H1AA2SLV6P29U1I0GFRT8>
<L71EMVJSH4V8P0F0DV0AKHV9BQM8IFG0S7T8NOHU7UGAM8NCFOQAOJHKN2LCP0E8LQ0P5>
<802OSFVNB8IRQEVVG5D2BC7QSMQFM9DOVDNQGLNFLJTABF7RLVL5TJVEBS7V6UG904M33>
<JBSBLAIC4K54Q39U08T07BCOUUIRSAN07Q68046RSAB5RR2PMN9JT4288I54SG046I2HH>
<H6K6GQ8A6002DC852DJLV4HVC0HE00000X0003NVRVVFVG03AD0000040AA4OSHE8F398>
<H120028TEIE6801C1L7OSN1NR6QHE5PCRO24A2KJ5K288959JOUL9K04L68GAL6G1IKP0>
<L2VQ56AJ16CDT8K8SSSCG9SAN3JJGML32ECEE70Q0TAQHPOCB2A11M6H4PD0QMROOSJ5K>
<288B31GNIN4MHCAG8UP0EO0H69JF1Q5AU4P0U4U423ROGEBGUK5HV100000005O85GASI>
<PBLTOPE00C4MNN1NG01GGQUG3F00629BO2NS00O9LEK6U00310LPODS00C4AN5H500080>
<AR4DS007HHBCG4K00U85DC98003QHLKORO00EA2MJ09801QGAQ4JL00607B7G4K00UI5C>
<Q6U003OGLJ82A00F52MC09801T0AP8IG007GHB527400O05CCBI00306LBH9K00E1ALE3>
<F001O3ALO6U0060BAMGRO00O2DAO150030ALAGBI00C12L71NG01IIAKC6U00699AHG98>
<00P75A01NG030CL7GDS00CHIKR56G01O4AJCDS007099HGRO00O4D601NG030KKN1BU00>
<C2QIJ1NG01G9AAC5P006118V2J800U153MAD003G0K595000E02FI3F001S8PU815007K>
<36UINS00V14QK3F0030PJA9BU00C3ID90IG01GF9K05P0061R6D0RO00O64PK1NG030QI>
<VTBU00802BVKK001809C2U2002015E2SG00O04LO8300301IN0DS00C0AAE0RO01O0P6G>
<N4007G54BGRO00O14GU6BG03K4H5S2A006023S3F001O88FG15007211THNG00SG47M0I>
<G03K0GU0DS00CGA3O09801OGOEC6U006831O0RO00O1S5QD9G03G2GCS9800002010040>
<000000M8D7PCIQII9HL6P29SFI0NKL559HQADA3IP7G1D99AAV5CHA9A02RSMF4G8RP8L>
<HE8L4L00400U0HSJI59580300001AUNPIED57P7TU82AOMJFL1T9P4E44MICDI80AFNPO>
<L5FJPACV8BG0U90GFQHF8JP426FIDA2N5RG3S0P0AT6N7L8TEGAJIV6NQ5ULFHEGE81AA>
<I83H1C9J2V5TUT00GU8162O89C11F89LDJDVG01NG5S70LO5E183CI9PF01UP4UV4007A>
<0VT5VCNSFVAVS9S63UVGLF5BRU7QO5VD5VH62OSPOQKA7HR3QOAOIES9I068IE9CG7T8L>
<122JO0AKFS50019MOFIFQ9787T9DE9VV2BJC5F408MPAE4JJG9C4OK5OELEP29RQUV4NL>
<5U9FTAHI0POPU07HV80AU7OGLRFHCRLESPA8JG4R14FU2VG3VMILQRM80501DVBGP00NQ>
<FK2MR7UNSHFLJVBI8V65UMBL9T6FHSHCUHBGEQON4DP2EBAVV0AS0X0005P0EL1KGGGVI>
<2VU0VHU7VUS05O8VL5PK06O09VVNV1VNG1V00QFNO1I1QG1C0004VV24DG011NVHVRUG2>
<VGVR5L340D0680I0S8BVKFUVK2KQP2FE87SNV4JECAM82FT61OVTSHHFHAKI1GNNV85AM>
<BR2L9LAT830PI4N1HOCE33GOG7AK7415TBM9QG660NKC310OO6J1G3QFSVEG467UVN823>
<3V4G6BU7M063BV6C6NUSODFSHGQOEPU0GC5RVQ1ATBG3QK7NRRNEDVFVVT7NR5N8UU3NV>
<T5NBBNAFUFNVT002LR4QT3VVTFRQARBI9VUUI00103200JS4210687T2G1041VVVUC3DB>
<N80AHGQV3U3G0000X003UZMBS4DVVVVVVV>
(END PAL8.SV)
(REMARK End of File)
Added src/kermit-12/k12prm.pal.




































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/	K12MIT PARAMETER FILE

/	KERMIT-12 CUSTOM PARAMETER FILE FOR VT-78.

/	LAST EDIT:	06-SEP-1990	11:00:00	CJL

	KEY=	03			/KEYBOARD RECEIVE IOT CODE

	TTY=	04			/CONSOLE TRANSMIT IOT CODE

	USER=	1			/USER XX/XY IOT CODES FOR REMOTE LINE

	XX=	30			/SLU2 RECEIVE IOT DEVICE CODE

	XY=	31			/SLU2 TRANSMIT IOT DEVICE CODE

	BRATE=	07			/USE 1200 BAUD ON SLU2 (FROM BAUD RATE TABLE)

	ESCAPE=	004			/USE <CNTRL/D> AS ESCAPE CHARACTER

	FLOW=	1			/FLOW CONTROL ENABLED

	FMODE=	0177			/ASCII FILE MODE (ONLY ONE THAT WORKS!)

	GENMSG= 0			/DON'T GENERATE LOCAL MESSAGE IN MAIN FILE
					/RATHER CREATE IT HERE IN THIS PARAMETER FILE

	ICLOSE=	1			/ENSURE A <^Z> AT <EOF> OF ASCII INPUT FILES

	INIECHO=0			/FULL-DUPLEX CONNECT MODE

	LOWER=	0			/ALLOW LOWER-CASE CONSOLE OUTPUT

	OCLOSE=	0			/<^Z> NOT SENT AT <EOF> OF ASCII FILES

	RETCNT=	5			/RETRY PACKETS 5 TIMES

	UMSG= 0				/DON'T GENERATE THE LOCAL MESSAGE IN MAIN FILE
					/RATHER CREATE IT HERE IN THIS PARAMETER FILE
	BUFFLD=	10			/THESE PROBABLY

	FILBUFF=2000			/WON'T CHANGE!

	FIELD	BUFFLD%10		/FIELD FOR TEXT MESSAGE

	*FILBUFFER			/LOCAL MESSAGE LOADS THERE

LCLMSG,	TEXT	"%^VT/78 S^ERIAL ^L^INE ^U^NIT 2 ^V^ERSION%"

	ZBLOCK	LCLMSG+40-.		/ZERO REST OF MESSAGE AREA