Kermit ][ (file 2 of 3) Minimum to get it running

Ben Cranston zben at umd5
Sun Oct 19 12:44:26 AEST 1986


This is a mimimal subset of the stuff to get it working.  The rest of
the stuff mentioned in the documentation will follow tomorrow night.
Best of luck and happy Kermiting.

------------  cut here  ------------
: Run this shell script with "sh" not "csh"
PATH=/bin:/usr/bin:/usr/ucb:/etc:$PATH
export PATH
all=FALSE
if [ x$1 = x-a ]; then
	all=TRUE
fi
echo Extracting README
sed 's/^X//' <<'//go.sysin dd *' >README
The KERMIT Basic program is hypervariable for the different serial cards.
The invariant portion is in A-KERMSHELL and the variant portions are in
files named MIC.T, SUP.T, CCS.T, COM.T, and NOV.T in text form.  They are
EXECed in when the program is built.  Therefore do NOT waste your time
getting A-KERMIT down unless you have a MicroModem card (the default).

You need to get these files down to the Apple.  Whatever scheme you can
think of: Xmodem, ASCII capture with careful proofreading (:-), or even
manual data entry [:-(].

A-KERMSHELL             BASIC shell for Kermit program
A-TXBIN                 Text to binary translator
XX-KERMITA-T             Hex for KERMITA machine code
GOKERM                  EXEC to start up Kermit
ETXBIN                  EXEC to start up Text to binary translator
KERMIT-SETSAVE          Set/Show parameter save file
[CARD].T                Additional BASIC for one of the supported serial cards.

If you don't have an assembler you can manually enter the T-B routine through
the [call -151] monitor - it is only 49 bytes long.

The A-x files are Basic programs packaged in EXEC files.  When you EXEC one
of them, the BASIC program is materialized onto the disk and locked.  Do 
this for A-KERMSHELL and A-TXBIN.

The shell KERMSHELL plus the additional BASIC in one of the card-specific
files results in the actual KERMIT program.  When I tested this version I
typed:

]LOAD KERMSHELL
]EXEC SUP.T
]SAVE KERMIT
]LOCK KERMIT

This completes the BASIC part of Kermit, but we still need the machine code
portion (KERMITA).  Even if one reassembles from KERMITA.S one would still 
need to link in the SET40 character set (for which there is no source), 
so in any case we need to get the Text to Binary program operational.

There are two ways to make the T-B routine.  One way is to reassemble from
the source T-B.S which I reverse-engineered from the original binary file.

The other way is to enter it manually, from the hex listing in the left
column of file DIS-T-B in this directory.  To do this:

]CALL -151
*95C7: A2 01 20 0C FD C9 8D F0 F9
*95D0: C9 8A F0 F5 C9 BA 10 1A
*95D8: 38 E9 B0 E0 00 F0 0B 0A
*95E0: 0A 0A 0A 8D C5 95 CA 4C
*95E8: C9 95 18 6D C5 95 8D C6 
*95F0: 95 60 38 E9 07 4C D8 95
*<ctl-D>BSAVE T-B,A$95C7,L49

Needless to say the <ctl-D> symbol means to hold the CTRL key down and
type the D key (we are calling a DOS command from inside the monitor).

Next, EXEC the ETXBIN script.  If all goes well it will ask you for
the name of the hex-text file to convert.  We will be unpacking the
XX-KERMITA-T file, so answer the question with X-KERMITA without the
trailing -T suffix.  When it finishes translation it will ask to
store memory to a binary file.  Say YES.  It will ask for the binary
file name.  Give it KERMITA for the binary file name.

Now, there is only one thing left to do before trying it out.  Rename
the file KERMIT-SETSAVE into KERMIT/SETSAVE (because Unix didn't let me
put the slash in its name).

]RENAME KERMIT-SETSAVE,KERMIT/SETSAVE

Your disk should look something like this:

 A 002 HELLO
 T 095 A-KERMSHELL
 T 012 A-TXBIN
 T 050 X-KERMITA-T
 T 002 GOKERM
 T 002 ETXBIN
 T 002 KERMIT/SETSAVE
 T 009 SUP.T
*A 066 KERMSHELL
*A 009 TXBIN
*A 071 KERMIT
 B 002 T-B
 B 026 KERMITA

To call in the Kermit, type:

]EXEC GOKERM

and if everything went well you should be in the Kermit program.

The first thing to do is set up the parameters.  The default parameter
file KERMIT/SETSAVE will in general have the wrong serial card name,
the wrong slot, the wrong baud rate, and the wrong parity.  In addition 
it will have local echoing turned on.  Use the Kermit SET command to change
the parameters to reasonable ones.  For communications with Unix systems
I strongly recommend PARITY NONE, as this is the usual default.  Use the
SHOW command to make sure everything is correct.  Then use the SET SAVE
command to cause the KERMIT/SETSAVE file to be rewritten.

That's about it - refer to the included documentation for more details and
for a description of the other files of the distribution.  The converse of
the hex to binary program we used above is the binary to hex program which
consists of EBITXT, BITXT, and the B-T machine language file.  Like T-B we
didn't get the source, so I reverse engineered it.  You can assemble it
yourself or type it in manually much as described above.  The disassembled
files for B-T and T-B are in files DIS-B-T and DIS-T-B in this distribution.

I also added my own disassembler (in file A-DIS) because it is so handy.
To get it to disassemble B-T and T-B I found I had to move the Basic program
area before loading it, in this fashion:

]HIMEM: 38340
]POKE 104,138
]POKE 138*256,0
]LOAD DIS
]BLOAD T-B
]RUN
XFIRST: 95C7
LAST:  95F7
XFILE:  DIS-T-B

The HIMEM and the POKEs came from the EBITXT and ETXBIN scripts and I really
can't tell you exactly what they do.  They just seem to work.  Ask a real
Apple guru sometime...

-zben
9/8/86

p.s. here is a list of the name-translations done:

ON ORIGINAL                                 THIS
APPLE DISK                              DISTRIBUTION
-----------                             ------------
*A HELLO                                A-HELLO
*T GOKERM                               GOKERM
*T GOKERMIL                             GOKERMIL
*A FROGPROG                             A-FROGPROG
*B FROGPIX                              X-FROGPIX-T
*A KERMIT                               A-KERMIT
*B KERMITA                              X-KERMITA-T
*T KERMITA.S                            KERMITA.S
*B SET40                                X-SET40-T
 T KERMIT/SETSAVE                       KERMIT-SETSAVE
*A KERMSHELL                            A-KERMSHELL
*T MIC.T                                MIC.T
*T SUP.T                                SUP.T
*T CCS.T                                CCS.T
*T COM.T                                COM.T
*T NOV.T                                NOV.T
*T B2T                                  B2T
*T EBITXT                               EBITXT
*A BITXT                                A-BITXT
*T ETXBIN                               ETXBIN
*A TXBIN                                A-TXBIN
*B B-T                                  B-T.S  and  DIS-B-T
*B T-B                                  T-B.S  and  DIS-T-B
*A TEXTTOPRINT                          A-TEXTTOPRINT
*A P/U-GO                               A-P-U-GO
*A P/U                                  A-P-U
*B PACK/UNPACK                          X-PACK-UNPACK-T
*B BIN2TXT                              X-BIN2TXT-T
*B TXT2BIN                              X-TXT2BIN-T

***  END OF README  ***
//go.sysin dd *
if [ `wc -c < README` != 6635 ]; then
	made=FALSE
	echo error transmitting README --
	echo length should be 6635, not `wc -c < README`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 README
	echo -n '	'; ls -ld README
fi
echo Extracting a-kermshell
sed 's/^X//' <<'//go.sysin dd *' >a-kermshell
NEW
10  REM
30  REM     BASIC CODE BY R.LICHY-             LAST MOD   4/85
32  REM  ASM CODE BY T.WHITTAKER-LAST MOD 12/84
35  REM     MODIFIED FOR SERDAC BY R. HOLLEY 7/85
37  REM  KERMSHELL 8.3
50  REM
90  POKE 33,40
110 KERM = 2065
120  POKE KE + 30,0
150 D$ =  CHR$ (13) +  CHR$ (4):Q$ =  CHR$ (17):FF$ =  CHR$ (6):H$ =  CHR$ (8)
151 CO$ = "COMMUNICATION LINE PROBLEMS.  TRY"
152 DI$ = "DISCONNECTING AND REDIALING."
153 AC$ = "AMBIGUOUS SET COMMAND "
154 AS$ = "********************"
155 BL$ =  CHR$ (7) +  CHR$ (7)
156 TC$ = "TRANSFER COMPLETED"
160 USE$ = "USE ESC CHAR TO RETURN TO APPLE KERMIT"
161 NSUP$ = "PARITY NOT SUPPORTED ON CARD"
162 OO$ = "MUST BE SET ON OR OFF"
164 AB$ = "TRANSFER ABORTED "
166 BS$ = BL$ + BL$ + BL$ + BL$ + BL$
168 UR$ = "UNRECOGNIZED STATUS CODE"
170 FIRST = 1
190 PHNUM$ = "31108"
210 TIMEO = 10
230 PD = 0:EOL = 13
250 FW$ = "ON":MARK = 1
270 NPAD = 0:MB = 94
275 QUOTE$ = "#":CK$ = "1":B8$ = "&"
276  REM    SEE STMTS 6625, 7694-7, AND 9390-9398 FOR SETTINGS OF RPT$
280  PRINT D$"PR#0": TEXT
290  HOME : VTAB (10): HTAB (12): PRINT "KERMIT-]"; CHR$ (91);" VERS 2.8"
310  PRINT : PRINT  TAB( 15)" APRIL 1985"
330  VTAB (15): PRINT  TAB( 3)" UNIVERSITY OF WISCONSIN - MADISON"
350  VTAB (16): PRINT  TAB( 9)"PUBLIC DOMAIN SOFTWARE"
359  PRINT : PRINT : PRINT
360  PRINT : PRINT "    MODIFIED FOR SERDAC USE -- 7/85"
370  PRINT D$"BLOAD KERMITA
390  PRINT D$"OPEN KERMIT/SETSAVE": PRINT D$"READKERMIT/SETSAVE"
410  INPUT BAUD: INPUT LECHO$: INPUT PRITY$: INPUT SLOT: INPUT CARD$: INPUT MARK: INPUT TIMEO: INPUT FW$: INPUT DEBUG$: INPUT DRIVE: INPUT PHNUM$: INPUT SC$: INPUT VI$: INPUT ES: INPUT EOL: INPUT RT$
430  PRINT D$"CLOSEKERMIT/SETSAVE"
435 P3$ = ",":P2$ = "%": GOSUB 9600
437 PH$ = P1$
450  IF LECHO$ = "ON" THEN  POKE KERM + 11,255
470  HOME
489 VL$ = VI$: GOTO 3332: REM  SET VIDEO
490  ONERR  GOTO 510
510  PRINT : PRINT "KERMIT-]"; CHR$ (91);">";
512 RESP$ = "":CH$ = ""
513  GET CHAR$
514  IF CHAR$ =  CHR$ (8) AND  LEN (RE$) = 0 THEN 513
515  PRINT CH$;
516  IF  LEN (RE$) = 1 AND CH$ =  CHR$ (8) THEN RE$ = "": GOTO 513
518  IF CHAR$ =  CHR$ (8) THEN RE$ =  LEFT$ (RE$, LEN (RE$) - 1): GOTO 513
520  IF CH$ <  >  CHR$ (13) THEN RE$ = RE$ + CHAR$: GOTO 513
530  REM
550  REM  **********COMMAND PARSER******
570  REM
590 WNUM = 1:CMD$ = "":PARM$ = "":VLUE$ = ""
610  IF RESP$ = "" THEN 490
620  PRINT
730  FOR I = 1 TO  LEN (RESP$)
770 CHAR$ =  MID$ (RESP$,I,1)
790  IF CHAR$ = " " AND PCHAR$ = " " THEN 950
800  IF CH$ = " " AND WNUM = 3 THEN 910
810  IF CHAR$ = " " THEN WNUM = WNUM + 1: GOTO 930
830  IF CHAR$ = "?" AND I = 1 THEN 1210
850  IF CHAR$ = "?" AND PCHAR$ <  > " " THEN WNUM = WNUM + 1
870  IF WNUM = 1 THEN CMD$ = CMD$ + CHAR$
890  IF WNUM = 2 THEN PARM$ = PARM$ + CHAR$
910  IF WNUM > 2 THEN VLUE$ = VLUE$ + CHAR$
930 PCHAR$ = CHAR$
950  NEXT I
970 LSTR =  LEN (CMD$):LPARM =  LEN (PARM$):LVLUE =  LEN (VLUE$)
980  IF  LEFT$ (RESP$,1) =  CHR$ (4) THEN 1137
982  IF CMD$ = "S" THEN  PRINT "AMBIGUOUS COMMAND": PRINT "(SET, SEND, STATUS, OR SHOW)?": GOTO 490
983  IF CMD$ = "SE" THEN  PRINT "AMBIGUOUS COMMAND (SET OR SEND)?": GOTO 490
990  IF  LEFT$ ("CONNECT",LSTR) = CMD$ THEN 3750
1000  IF  LEFT$ ("BREAK", LEN (CMD$)) = CMD$ THEN 3711
1010  IF  LEFT$ ("QUIT",LSTR) = CMD$ OR  LEFT$ ("EXIT",LSTR) = CMD$ THEN 9430
1030  IF  LEFT$ ("RECEIVE",LSTR) = CMD$ THEN 7530
1050  IF  LEFT$ ("SHOW",LSTR) = CMD$ AND LSTR > 1 THEN 3410
1060  IF  LEFT$ ("STATUS",LSTR) = CMD$ AND LSTR > 1 THEN 3410
1070  IF  LEFT$ ("SET",LSTR) = CMD$ AND LSTR > 2 THEN 1510
1090  IF  LEFT$ ("SEND",LSTR) = CMD$ AND LSTR > 2 THEN 6510
1110  IF  LEFT$ ("HELP",LSTR) = CMD$ OR CMD$ = "?" THEN 1210
1111  IF LSTR < 4 THEN 1130: REM  CHECK FOR D2
1112 PA$ =  RIGHT$ (CMD$,3)
1114 CMD$ =  LEFT$ (CMD$, LEN (CMD$) - 3)
1116  IF  LEFT$ ("RECEIVE", LEN (CMD$)) = CMD$ AND (PA$ = ",D1" OR PA$ = ",D2") THEN 7530
1130  PRINT BL$: INPUT "INVALID COMMAND, DO YOU WANT HELP?";ANS$: IF  LEFT$ (ANS$,1) <  > "Y" THEN 490
1131  GOTO 1210
1132  REM ****************
1134  REM  DO DOS COMMAND
1136  REM *****************
1137  ONERR  GOTO 1145
1138  IF  LEFT$ (RESP$,1) <  >  CHR$ (4) THEN  ONERR  GOTO 490:GOT0730
1140  PRINT RE$
1144  GOTO 490
1145 X =  PEEK (222): IF X = 11 OR X = 16 THEN  PRINT : PRINT "SYNTAX ERROR": PRINT BL$: PRINT : GOTO 490
1147  PRINT : PRINT "DOS COMMAND CANNOT BE EXECUTED": PRINT BL$: PRINT : GOTO 490
1150  REM
1170  REM ******** HELP SCREEN *********
1190  REM
1210  PRINT  CHR$ (16): PRINT  TAB( 15)"HELP SCREEN"
1230  VTAB 3: PRINT "VALID KERMIT-]"; CHR$ (91);" COMMANDS ARE:"
1240  PRINT : PRINT
1250  PRINT "CONNECT        CONNECTS APPLE TO HOST"
1270  PRINT "EXIT / QUIT    RETURNS CONTROL TO BASIC"
1290  PRINT "HELP / ?       PRINTS THIS SCREEN"
1310  PRINT "SET            SETS COMM OPTIONS"
1330  PRINT "SEND           SEND APPLE FILE TO HOST"
1350  PRINT "RECEIVE        RECEIVES FILE FROM HOST"
1370  PRINT "SHOW / STATUS  DISPLAYS COMM PARAMETERS"
1380  PRINT "BREAK          TRANSMIT BREAK (SSC ONLY)"
1390  PRINT "<CTRL-D> CMND  DO LOCAL DOS COMMAND"
1410  VTAB (24)
1430  GOTO 490
1450  REM
1470  REM ********** SET COMMAND *****
1490  REM
1510  IF PARM$ <  > "?" AND PARM$ <  > "" THEN 1850
1530  PRINT  CHR$ (16);"POSSIBLE SET COMMANDS ARE:"
1550  PRINT : PRINT "BAUD"
1570  PRINT "LOCAL-ECHO"
1590  PRINT "PARITY"
1610  PRINT "SLOT"
1630  PRINT "CARD"
1650  PRINT "MARK"
1670  PRINT "TIMEOUT"
1690  PRINT "FILE-WARNING"
1710  PRINT "DEBUG"
1720  PRINT "EOL"
1750  PRINT "SAVE"
1770  PRINT "PHONE #"
1780  PRINT "SCROLL"
1785  PRINT "VIDEO"
1786  PRINT "ESCAPE"
1788  PRINT "DRIVE"
1789  PRINT "REPEAT-PROC"
1790  PRINT : PRINT
1810  GOTO 490
1830  REM   ----------------  SET BAUD
1850  IF  LEFT$ ("BAUD",LPARM) <  > PARM$ THEN 1950
1870  IF VLUE$ = "?" OR  NOT (VL$ = "300" OR VL$ = "1200" OR VL$ = "2400" OR VL$ = "4800" OR VL$ = "9600") THEN  PRINT "BAUD MUST BE: 300,1200,2400,4800 OR 9600": GOTO 490
1890 BAUD =  VAL (VLUE$)
1900 FIRST = 1
1910  GOTO 490
1930  REM   ----------------  SET LOCAL ECHO
1950  IF  NOT ( LEFT$ ("LOCAL-ECHO",LPARM) = PARM$ OR  LEFT$ ("ECHO",LPARM) = PARM$) THEN 2110
1960  IF PA$ = "E" THEN  PRINT AC$: PRINT "(ECHO, EOL, OR ESCAPE?)": GOTO 490
1970  IF VLUE$ = "?" THEN  PRINT "ON OFF": GOTO 490
1990  IF  NOT (VLUE$ = "ON" OR VLUE$ = "OFF") THEN  PRINT OO$: GOTO 490
2010 LECHO$ = VLUE$
2030  IF LECHO$ = "ON" THEN  POKE KERM + 11,255
2050  IF LECHO$ = "OFF" THEN  POKE KERM + 11,0
2060 FIRST = 1
2070  GOTO 490
2090  REM   ----------------  SET PARITY
2110  IF  LEFT$ ("PARITY",LPARM) <  > PARM$ THEN 2240
2120  IF PA$ = "P" THEN  PRINT AC$;"(PHONE OR PARITY?)": GOTO 490
2130  IF VLUE$ = "?" THEN  PRINT "ODD EVEN MARK SPACE, OR NONE": GOTO 490
2140 FIRST = 1
2150  IF  LEFT$ ("EVEN",LVLUE) = VLUE$ THEN PRITY$ = "EVEN": GOTO 490
2170  IF  LEFT$ ("ODD",LVLUE) = VLUE$ THEN PRITY$ = "ODD": GOTO 490
2175  IF  LEFT$ ("MARK",LVLUE) = VLUE$ THEN PRITY$ = "MARK": GOTO 490
2177  IF  LEFT$ ("SPACE",LVLUE) = VLUE$ THEN PR$ = "SPACE": GOTO 490
2190  IF  LEFT$ ("NONE",LVLUE) = VLUE$ THEN PRITY$ = "NONE": GOTO 490
2210  PRINT "INVALID PARITY": GOTO 490
2230  REM    ----------------  SET SLOT
2240  IF PA$ = "S" THEN  PRINT AC$;"(SLOT OR SAVE?)": GOTO 490
2250  IF  LEFT$ ("SLOT",LPARM) <  > PARM$ THEN 2355
2270  IF VLUE$ = "?" THEN  PRINT "1 2 3 4 5 6 7": GOTO 490
2290 VLUE =  VAL (VLUE$)
2310  IF VLUE < 1 OR VLUE > 7 THEN  PRINT "INVALID SLOT NUMBER": GOTO 490
2330 SLOT = VLUE
2340 FIRST = 1
2350  GOTO 490
2353  REM  ------- DRIVE TOGGLE
2355  IF  LEFT$ ("DRIVE",LP) <  > PA$ THEN 2390
2356  IF PA$ = "D" THEN  PRINT AC$;"(DRIVE OR DEBUG?)": GOTO 490
2357  IF VL$ = "?" OR  NOT (VL$ = "1" OR VL$ = "2") THEN  PRINT "SWITCH DEFAULT DRIVE TO 1 OR 2": PRINT "(NOT SET SAVED)": GOTO 490
2365  PRINT "DEFAULT DRIVE = ";VL$
2366  PRINT D$"OPEN A";BS$;",D";VL$: PRINT D$"DELETE A";BS$: GOTO 490
2370  REM ----------------CARD TYPE
2390  IF  LEFT$ ("CARD",LPARM) <  > PARM$ THEN 2570
2410  IF VLUE$ = "?" THEN  PRINT "MICROMODEM": PRINT "SUPER SERIAL": PRINT "COMMUNICATIONS": PRINT "CCS": PRINT "NOVATION": GOTO 490
2420 FIRST = 1
2425  POKE KE + 30,0
2430  IF  LEFT$ ("MICROMODEM",LVLUE) = VLUE$ THEN CARD$ = "MICROMODEM": GOTO 490
2450  IF  LEFT$ ("SUPER SERIAL",LVLUE) = VLUE$ THEN CARD$ = "SUPER SERIAL": GOTO 490
2470  IF  LEFT$ ("CCS",LVLUE) = VLUE$ THEN CARD$ = "CCS": GOTO 490
2500  IF  LEFT$ ("COMMUNICATIONS",LV) = VLUE$ THEN CARD$ = "COMMUNICATIONS": GOTO 490
2510  IF  LEFT$ ("NOVATION",LVLUE) = VLUE$ THEN CARD$ = "NOVATION": GOTO 490
2530  PRINT "INVALID CARD TYPE": GOTO 490
2550  REM     ----------------  MARK
2570  IF  LEFT$ ("MARK",LPARM) <  > PARM$ THEN 2630
2590  IF VLUE$ = "?" THEN  PRINT "ASCII VALUE FOR START OF PACKET": PRINT "(THE DEFAULT IS 1)": GOTO 490
2610 MARK =  VAL (VLUE$): GOTO 490
2630  REM      ---------------  TIMEO
2650  IF  LEFT$ ("TIMEOUT",LPARM) <  > PARM$ THEN 2790
2670  IF VLUE$ = "?" THEN  PRINT "TIMEOUT SHOULD BE A NUMBER FROM": PRINT "0 TO 15. (THE DEFAULT IS 10)": PRINT "IF THE HOST SYSTEM IS SLOW, SET TIMEOUT TO 15": GOTO 490
2690 VLUE =  VAL (VLUE$)
2710  IF VLUE < 0 OR VLUE > 60 THEN  PRINT "TIMEOUT MUST BE BETWEEN 0 AND 60": GOTO 490
2730 TI = VL: GOTO 490
2750  REM       --------------  FILE-WARNING
2770  IF VLUE$ = "?" THEN  PRINT "ON OR OFF": PRINT "THIS CHECKS FOR A FILE ALREADY EXISTING": PRINT "ON YOUR DISK WHEN THE APPLE IS RECEIVING A FILE": PRINT "(THE DEFAULT IS 'ON')": GOTO 490
2790  IF  LEFT$ ("FILE-WARNING",LPARM) <  > PARM$ THEN 2850
2810  IF  NOT (VLUE$ = "ON" OR VLUE$ = "OFF") THEN  PRINT OO$: GOTO 490
2830 FW$ = VLUE$: GOTO 490
2850  REM --------------- DEBUG
2870  IF  NOT ( LEFT$ ("DEBUG",LPARM) = PARM$ AND LPAR > 1) THEN 2962
2890  IF VLUE$ = "?" THEN  PRINT "ON OR OFF": PRINT "THIS IS AN AID IN MODIFYING THE KERMIT": PRINT "PROGRAM ITSELF. IN ALL OTHER CASES": PRINT "DEBUG SHOULD BE OFF": GOTO 490
2900  IF  NOT (VL$ = "ON" OR VL$ = "OFF") THEN  PRINT OO$: GOTO 490
2910  IF VLUE$ = "ON" THEN  POKE KERM + 10,255
2930  IF VLUE$ = "OFF" THEN  POKE KERM + 10,0
2950 DEBUG$ = VLUE$
2952  GOTO 490
2960  REM     --------EOL
2962  IF  NOT ( LEFT$ ("EOL",LPARM) = PARM$) THEN 2972
2964  IF VL$ = "?" OR  NOT ( VAL (VL$) > 1 AND  VAL (VL$) < 128) THEN  PRINT "EOL IS THE DECIMAL ASCII VALUE FOR THE": PRINT "LINE TERMINATOR OF THE REMOTE KERMIT": PRINT "THE DEFAULT IS 13 (CARRIAGE RETURN)": GOTO 490
2966 EOL =  VAL (VL$): GOTO 490
2970  REM  ------ REPEAT PROCESSING
2972  IF  NOT ( LEFT$ ("REPEAT-PROC",LPARM) = PA$) THEN 3000
2974  IF VL$ = "?" THEN  PRINT "ON OR OFF.  NORMALLY ON.": PRINT "IF WHILE RECEIVING, YOU SEE MESSAGE": PRINT "'REC BUFFER OVERFLOW,' SET REPEAT-PROC": PRINT "TO 'OFF' AND RESTART TRANSFER.": GOTO 490
2976  IF  NOT (VL$ = "ON" OR VL$ = "OFF") THEN  PRINT OO$: GOTO 490
2978 RT$ = VL$: GOTO 490
2990  REM ---------SET SAVE
3000  IF  NOT ( LEFT$ ("SAVE",LPARM) = PARM$ AND LPARM > 1) THEN 3250
3010  IF VL$ = "?" THEN  PRINT "SAVES ALL SET PARAMETERS": GOTO 510
3015 P2$ = ",":P3$ = "%": GOSUB 9600
3017 XX$ = PH$:PH$ = P1$
3020  PRINT D$"DELETE KERMIT/SETSAVE"
3030  PRINT D$"OPENKERMIT/SETSAVE": PRINT D$"WRITEKERMIT/SETSAVE"
3050  PRINT BAUD: PRINT LECHO$: PRINT PRITY$: PRINT SLOT: PRINT CARD$: PRINT MARK: PRINT TIMEO: PRINT FW$: PRINT DEBUG$: PRINT DRIVE: PRINT PHNUM$: PRINT SC$: PRINT VI$: PRINT ES: PRINT EOL: PRINT RT$
3070  PRINT D$"CLOSEKERMIT/SETSAVE"
3075 PH$ = XX$
3090  GOTO 490
3230  REM ---------SET PHONE #
3250  IF  NOT ( LEFT$ ("PHONE #",LPARM) = PARM$ AND LPARM > 1) THEN 3312
3270  IF VLUE$ = "?" THEN  PRINT "ENTER PHONE # OR MODEM COMMAND PLUS #": PRINT "THIS IS USED FOR AUTODIAL MODEMS ONLY": PRINT "ENTER 'NONE' OTHERWISE": GOTO 490
3280  IF VL$ = "" OR VL$ = " " THEN PH$ = "NONE": GOTO 490
3290 PHNUM$ = VLUE$
3292 FIRST = 1
3310  GOTO 490
3311  REM ----------SCROLL
3312  IF  NOT ( LEFT$ ("SCROLL",LPARM) = PARM$ AND LPARM > 1) THEN 3320
3314  IF VLUE$ = "?" THEN  PRINT "ON OR OFF": GOTO 490
3316  IF  NOT (VLUE$ = "ON" OR VLUE$ = "OFF") THEN  PRINT OO$: GOTO 490
3318 SCROLL$ = VLUE$: GOTO 490
3319  REM ------------SET VIDEO
3320  IF  LEFT$ ("VIDEO",LPARM) <  > PARM$ THEN 3352
3321  IF VLUE$ <  > "?" THEN 3332
3322  HOME : PRINT "POSSIBLE SET VIDEO VALUES ARE:": PRINT " I,N,A,M,T,W,4,7": PRINT : PRINT "I  INVERSE VIDEO"
3323  PRINT "N  NORMAL VIDEO"
3324  PRINT : PRINT "A  AUTO LINE FEED"
3325  PRINT "M  NO AUTO LINE FEED"
3326  PRINT : PRINT "T  TRUNCATE RIGHT MARGIN"
3327  PRINT "W  WRAP LINE AROUND"
3328  PRINT : PRINT "4  40 COLUMN DISPLAY"
3329  PRINT "7  70 COLUMN DISPLAY"
3330  GOTO 490
3332  FOR I = 1 TO  LEN (VLUE$):A$ =  MID$ (VLUE$,I,1)
3333  IF A$ = "I" THEN  POKE KE + 15,127
3334  IF A$ = "N" THEN  POKE KE + 15,0
3335  IF A$ = "T" THEN  POKE KE + 14,1
3336  IF A$ = "W" THEN  POKE KE + 14,0
3337  IF A$ = "A" THEN  POKE KE + 13,1
3338  IF A$ = "M" THEN  POKE KE + 13,0
3339  IF A$ = "7" THEN  POKE KE + 16,0
3340  IF A$ = "4" THEN  POKE KE + 16,255
3345  NEXT I
3346 VI$ = VL$
3347  CALL KE + 23
3350  GOTO 490
3351  REM  ------ ESCAPE
3352  IF  LEFT$ ("ESCAPE",LP) <  > PA$ THEN 3360
3353  IF VL$ = "?" THEN  PRINT "ESCAPE CODE VALUE IS DECIMAL ASCII": PRINT "BETWEEN 1 AND 127, 27 IS THE DEFAULT": GOTO 490
3354  IF  VAL (VL$) < 1 OR  VAL (VL$) > 127 THEN  PRINT "ESC MUST BE BETWEEN 1 AND 127.": PRINT "27 IS DEFAULT": GOTO 490
3355 ES =  VAL (VL$):ES$ = VL$:ES = ES + 128
3356 FIRST = 1
3359  GOTO 490
3360  PRINT "INVALID SET COMMAND": GOTO 490
3365  REM
3370  REM    *********STATUS/SHOW SCREEN ********************
3390  REM
3410  PRINT : PRINT  CHR$ (16) CHR$ (10);"          STATUS OF KERMIT-]"; CHR$ (91): PRINT
3430  PRINT "  (USE 'SET SAVE' TO SAVE THIS STATUS)": PRINT
3450  PRINT "BAUD RATE......"BA
3470  PRINT "LOCAL-ECHO....."LE$
3490  PRINT "PARITY........."PR$
3510  PRINT "SLOT..........."SL
3530  PRINT "CARD..........."CA$
3550  PRINT "MARK..........."MA
3570  PRINT "TIMEOUT........"TI
3590  PRINT "FILE-WARNING..."FW$
3610  PRINT "DEBUG.........."DE$
3650  PRINT "PHONE #........"PH$
3655  PRINT "SCROLL........."SC$
3660  PRINT "VIDEO.........."VI$
3665  PRINT "ESCAPE........."ES - 128
3666  PRINT "EOL............"EO
3668  PRINT "REPEAT-PROC...."RT$
3670  PRINT
3690  PRINT : GOTO 490
3710  REM   *********SEND A BREAK****
3711 ZZ$ = ""
3712  IF PA$ <  > "?" THEN 3714
3713  PRINT : PRINT "IF YOU HAVE SUPER SERIAL CARD,": PRINT "USE BREAK TO DIS/CONNECT NON-UNIVAC HOST": PRINT :GOT0490
3714  IF  LEFT$ (CA$,3) <  > "SUP" THEN  PRINT : PRINT "WRONG EQUIP FOR THIS COMMAND": PRINT "FOR BREAK, CONNECT--": PRINT "THEN TYPE: CTL-SHIFT-P": PRINT : GOTO 490
3715  IF FIRST THEN CMD$ = "SKIP":ZZ$ = "Y": GOTO 3730
3716  PRINT : INPUT "DISCONNECT HOST (NON-UNIVAC) (Y/N)?";ZZ$
3717  IF  LEFT$ (ZZ$,1) <  > "Y" THEN  PRINT D$;"PR#";SL: PRINT  CHR$ (1);"B": PRINT D$;"PR#0": CALL KE + 23:CMD$ = "":ZZ$ = "": CALL KERM + 3: GOTO 490
3719  GOTO 4390
3730  REM    *********** CONNECT ********
3750  REM
3751  PRINT
3752  IF PARM$ <  > "?" THEN 3810
3754  PRINT "CONNECT IS USED EITHER TO INITIALLY"
3755  PRINT "CONNECT TO A HOST OR TO RECONNECT"
3756  PRINT "AFTER PREVIOUSLY LOGGING ON"
3758  GOTO 490
3810  POKE KERM - 9,0: REM   RESET PACKET COUNTER
3811  POKE KE - 2,EOL
3820  POKE KE - 11,TI: REM  TIMEOUT
3830  IF  NOT FIRST THEN  CALL KERM + 3: GOTO 490
3840  POKE KE + 31,ES: REM  ESCAPE CHAR
3850 FIRST = 0
5730  REM
5750  REM  *******  NEW  CARDS  *****
5770  REM
5790  REM
6170  PRINT "KERMIT IS NOT CURRENTLY CONFIGURED FOR THIS CARD": GOTO 490
6190  REM
6210  REM  SUBROUTINE TO POKE KERM
6230  REM
6250  POKE KERM - 12,STREG%: REM   STATUS REGISTER
6270  POKE KERM - 13,TRREG%: REM   TRANS REG
6290  POKE KERM - 14,RCREG%: REM   RECEIVE REG
6310  POKE KERM - 15,TBIT%: REM  TRANSMIT BIT
6330  POKE KERM - 16,RBIT%: REM  RECEIVE BIT
6350  RETURN
6370  REM  ***********SEND*************
6390  REM
6410  IF  PEEK (222) = 6 THEN  PRINT "FILE NOT ON DISK";BS$: GOTO 490
6430  IF  PEEK (222) = 5 THEN  GOTO 6930: REM   EOF
6450  IF  PEEK (222) = 8 THEN  PRINT BS$: PRINT "I/O ERROR, ";AB$: GOTO 6930
6470  IF  PEEK (222) = 13 THEN  PRINT "FILE NOT A TEXT FILE. ";BS$: GOTO 490
6490  PRINT : PRINT "ERROR #"; PEEK (222);" AT LINE "; PEEK (218) + 256 *  PEEK (219): PRINT D$"CLOSE": GOTO 490
6510  ONERR  GOTO 6410
6511  IF PA$ = "?" THEN  PRINT "SEND A TEXT FILE TO THE HOST": PRINT "EX. SEND LETTER": GOTO 510
6512  IF VL$ <  > "" THEN PA$ = PA$ + " " + VL$
6530  IF PARM$ = "" THEN  INPUT "ENTER FILE TO SEND: ";PARM$: GOTO 6530
6531 F$ = PA$
6532  IF  RIGHT$ (PA$,3) = ",D1" OR  RIGHT$ (PA$,3) = ",D2" THEN F$ =  LEFT$ (PA$, LEN (PA$) - 3)
6570  PRINT D$;"VERIFY";PA$
6575  GOSUB 9500
6590  PRINT D$;"OPEN ";PA$
6610  PRINT D$;"READ ";F$
6620  POKE KERM + 12,0: REM   SEND MODE
6625 RPT$ =  CHR$ (32): POKE KE - 8,0: REM  SET RPT$ FOR SEND
6630 DTA$ =  CHR$ (MB + 32) +  CHR$ (TIMEO + 32) +  CHR$ (NPD + 32) +  CHR$ (PD + 64) +  CHR$ (EOL + 32) + QUOTE$ + B8$ + CK$ + RPT$
6650 TYPE$ = "S"
6710  GOSUB 7130
6730  GOSUB 8870: REM  SEND INIT HANDLER
6750 TYPE$ = "F":DTA$ = F$
6770  GOSUB 7130
6790 TYPE$ = "D"
6810 DTA$ = ""
6830 X =  FRE (0)
6850  CALL KERM + 6,DTA$: REM  ONE LINE
6870  IF SC$ = "ON" THEN  PRINT "X";DTA$;
6890  GOSUB 7130
6910  GOTO 6790
6930 TYPE$ = "Z":DTA$ = "": REM  EOF
6950  GOSUB 7130
6955  IF  PEEK (222) = 8 GOTO 6990
6970  PRINT : PRINT AS$: PRINT "*";: PRINT TC$;: PRINT "*": PRINT AS$: PRINT BS$: PRINT
6990 TYPE$ = "B":DTA$ = "": REM  EOT (BREAK)
7010  CALL KERM,TYPE$,DTA$
7030  PRINT D$;"CLOSE "
7050  GOTO 490
7070  REM  --------------------------
7090  REM   SEND PACKET TO KERM
7110  REM   HANDLE RETURNED STATUS CODES
7130  CALL KERM,TYPE$,DTA$
7150  IF TYPE$ = "Y" THEN  RETURN
7170  IF TYPE$ = "1" THEN  PRINT AB$;"BY USER": POP : GOTO 6990
7190  IF TYPE$ = "2" THEN  PRINT BS$: PRINT AB$;"DUE TO TIMEOUT": POP : GOTO 6990
7210  IF TYPE$ = "N" THEN  PRINT : PRINT BS$: PRINT AB$;"DUE TO": PRINT CO$: PRINT DI$: POP : GOTO 3070
7230  PRINT UR$: POP : GOTO 6990
7250  REM ---------------------------
7270  REM
7290  REM   **********  RECEIVE  ********
7310  REM
7330  IF  PEEK (222) = 5 THEN  GOTO 8090: REM  SHORT FILE IS ON DISK
7350  IF  PEEK (222) = 6 THEN  GOTO 8250: REM  FILE NOT FOUND, OK TO WRITE A NEW ONE
7370  PRINT "ERROR #"; PEEK (222);" AT LINE " PEEK (218) +  PEEK (219) * 256
7390 TYPE$ = "E": PRINT D$;"CLOSE ";F$
7410  CALL KERM,TYPE$,DTA$
7430  IF  PEEK (222) = 4 THEN  PRINT "DISK IS WRITE PROTECTED. ";AB$
7450  IF  PEEK (222) = 8 THEN  PRINT BS$: PRINT "I/O ERROR. ";AB$
7470  IF  PEEK (222) = 9 THEN  PRINT BS$: PRINT "DISK FULL.  PREMATURE END OF TRANSFER."
7490  IF  PEEK (222) = 13 THEN  PRINT "FILE TYPE MISMATCH. ";AB$
7510  GOTO 490
7530  ONERR  GOTO 7330
7535  IF (PA$ <  > "" AND PA$ <  > "?" AND PA$ <  > ",D1" AND PA$ <  > ",D2") THEN 1130
7540  IF PA$ = "?" THEN  PRINT "RECEIVE A FILE FROM THE HOST": GOTO 510
7550  POKE KER - 11,30
7570  IF SC$ = "ON" THEN  PRINT D$;"MON O"
7590  REM
7610  REM - GET REMOTE'S SEND-INIT-------
7630 TYPE$ = "0"
7650  POKE KERM + 12,255: REM  SET RECV MODE
7670  GOSUB 8530
7690  IF TYPE$ <  > "S" THEN  GOSUB 8710
7694  REM  DEFINE REPEAT PROCESSING DESIRED
7695  IF RT$ = "ON" THEN RPT$ =  CHR$ (126): POKE KE - 8,126: GOTO 7750
7697 RPT$ =  CHR$ (32): POKE KE - 8,0
7710  REM
7730  REM   -NEXT POKE VALUES FROM REMOTE'S SEND INIT PACKET AND SEND APPLE'S INITIAL CONNECTION PARMS------
7750  GOSUB 8870: REM  SEND INIT HANDLER
7770 TYPE$ = "Y"
7780 DTA$ =  CHR$ (MB + 32) +  CHR$ (TI + 32) +  CHR$ (32) +  CHR$ (64) +  CHR$ (EOL + 32) + QU$ + B8$ + CK$ + RPT$
7790  GOSUB 8530
7810  REM
7830  REM --KERM SHOULD COME BACK WITH AN F PACKET---------------
7850  IF TYPE$ = "S" THEN DTA$ = "":TYPE$ = "0": GOSUB 8530
7870  IF TYPE$ = "S" OR TYPE$ = "Z" THEN DTA$ = "":TYPE$ = "Y": GOSUB 8530: GOTO 7870
7890  IF TYPE$ <  > "F" THEN  GOSUB 8690
7910 F$ = "": FOR I = 1 TO  LEN (DTA$)
7930 CHAR$ =  MID$ (DTA$,I,1)
7950  IF CHAR$ = "." AND I =  LEN (DTA$) THEN  GOTO 8010
7970 F$ = F$ + CHAR$
7990  NEXT I
8010  IF FW$ = "OFF" THEN  GOTO 8250
8030  REM
8050  REM  CHECK FOR FILE ALREADY ON DISK
8070  PRINT D$"VERIFY ";F$;PA$: REM   WILL ERROR IF NO FILE
8090  PRINT : PRINT : PRINT : PRINT : PRINT BS$: PRINT "FILE '";F$;"' ALREADY EXISTS": PRINT : PRINT : PRINT : PRINT "A)APPEND": PRINT "B)OVERWRITE": PRINT "C)ENTER A NEW NAME": PRINT : PRINT : PRINT
8110  INPUT "ENTER CHOICE: ";ANS$
8130  IF ANS$ = "A" THEN  PRINT D$;"APPEND ";F$: GOSUB 9500: GOTO 8270
8150  IF ANS$ = "C" THEN  INPUT "ENTER NEW FILE NAME: ";F$: GOTO 8070
8170  IF ANS$ = "B" THEN  PRINT D$;"DELETE ";F$: GOTO 8250
8190  GOTO 8090
8210  REM
8230  REM  -------- GET DATA-------
8250  GOSUB 9500
8255  PRINT D$;"OPEN ";F$
8270  PRINT D$;"WRITE ";F$
8290 DTA$ = ""
8310 TYPE$ = "Y": GOSUB 8530: REM  TELL KERM READY FOR DATA
8330  REM
8350  REM -------GET DATA PACKETS---
8370  IF  NOT (TYPE$ = "D" OR TYPE$ = "Z") THEN  GOSUB 8710
8390  IF TYPE$ = "D" THEN  PRINT DTA$;
8410  IF TYPE$ = "Z" THEN  PRINT D$;"CLOSE ";F$:TYPE$ = "Y":DTA$ = "": GOSUB 8530: GOTO 7870
8430 TYPE$ = "Y":DTA$ = "": GOSUB 8530: REM  GET NEXT PACKET
8450  GOTO 8390
8470  REM  ------------------------------
8490  REM   SEND PACKET TO KERM, CHECK STATUS CODES
8510  REM
8530  CALL KERM,TYPE$,DTA$
8550  IF (TYPE$ = "D" OR TYPE$ = "S" OR TYPE$ = "F" OR TYPE$ = "Z") THEN  RETURN
8570  PRINT D$;"CLOSE ": PRINT D$;"NOMON O"
8590  PRINT
8610  IF TYPE$ = "N" THEN  PRINT : PRINT BS$: PRINT AB$;"DUE TO": PRINT CO$: PRINT DI$: GOTO 8730
8630  IF TYPE$ = "1" THEN  PRINT AB$;"BY USER": GOTO 8730
8650  IF TYPE$ = "2" THEN  PRINT BS$: PRINT AB$;"DUE TO TIMEOUT.": GOTO 8730
8670  IF TYPE$ = "B" THEN  PRINT AS$: PRINT "*";: PRINT TC$;: PRINT "*": PRINT AS$: PRINT BS$:TY$ = "9": GOTO 8750
8675  IF TY$ = "4" THEN  PRINT "REC BUFFER OVERFLOW.  ";AB$;BS$: PRINT : PRINT "TRY SETTING REPEAT-PROC TO 'OFF'": PRINT "AND RESTART TRANSFER": GOTO 8730
8680  IF TY$ = "E" GOTO 8710
8690  PRINT BS$: PRINT UR$: PRINT "CODE=";TY$: PRINT AB$: GOTO 8730
8710  PRINT : PRINT "UNEXPECTED PACKET TYPE ";TYPE$: PRINT AB$: PRINT BS$
8730 TYPE$ = "E"
8750 DTA$ = "": REM  NOTHING...
8770  CALL KERM,TYPE$,DTA$
8790  POP : PRINT D$;"NOMON O": GOTO 490
8810  REM  ------------------------------
8830  REM  ******* SEND INIT HANDLER ***
8850  REM
8870 LDTA =  LEN (DTA$)
8890  IF LDTA = 0 THEN  RETURN
8910 TMP$ =  LEFT$ (DTA$,1):RMB =  ASC (TMP$) - 32
8930  IF RMB <  = 96 THEN  POKE KERM - 1,RMB
8935  IF RMB <  = 96 AND RMB > 5 THEN  POKE 2258,RMB - 5: REM   TEMP FIX
8950  IF LDTA < 2 THEN  RETURN
8970 TMP$ =  MID$ (DTA$,2,1):TMOUT =  ASC (TMP$) - 32
8990  POKE KERM - 11,TMOUT
9010  IF LDTA < 3 THEN  RETURN
9030 TMP$ =  MID$ (DTA$,3,1):RNPAD =  ASC (TMP$) - 32
9050  IF RNPAD > 0 THEN  POKE KERM - 4,RNPAD
9070  IF LDTA < 4 THEN  RETURN
9090 TMP$ =  MID$ (DTA$,4,1):RPAD =  ASC (TMP$) - 64
9110  IF RPAD > 0 THEN  POKE KERM - 3,RPAD
9130  IF LDTA < 5 THEN  RETURN
9150 TMP$ =  MID$ (DTA$,5,1):EOL =  ASC (TMP$) - 32
9170  POKE KERM - 2,EOL
9190  IF LDTA < 6 THEN  RETURN
9210 RQU$ =  MID$ (DTA$,6,1)
9230  IF  PEEK (KE + 12) = 255 AND  NOT (RQU$ =  CHR$ (32)) THEN  POKE KE - 6, ASC (RQU$): REM   REC ONLY
9250  IF LDTA < 7 THEN  RETURN
9270 R8B$ =  MID$ (DTA$,7,1)
9290  IF  NOT (R8B$ = "N" OR R8B$ =  CHR$ (32)) THEN  POKE KE - 7, ASC (R8B$)
9292  IF R8B$ = "Y" THEN  POKE KE - 7, ASC (B8$): REM  B8$ SET IN STMT 275
9350  IF LDTA < 9 THEN  RETURN
9370 TMP$ =  MID$ (DTA$,9,1):RPT =  ASC (TMP$)
9390  IF ( PEEK (KE + 12) = 0 OR RT$ = "OFF") THEN  RETURN
9392  IF RPT = 126 THEN  RETURN
9395 RPT$ =  CHR$ (RPT)
9397  IF RPT = 32 THEN  POKE KE - 8,0: REM  NO REP CHAR
9398  IF RPT <  > 32 THEN  POKE KE - 8,RPT
9410  RETURN
9430  TEXT : PRINT D$;"PR#0": POKE 104,8: POKE 8 * 256,0: END
9500  IF SC$ = "OFF" AND DE$ = "OFF" THEN  PRINT : PRINT : PRINT "TRANSMISSION IN PROGRESS -- WAIT": PRINT : PRINT
9505  RETURN
9600  REM   PHNUM$ COMMA SUBR
9605 P1$ = ""
9610  FOR I = 1 TO  LEN (PH$)
9615 XX$ =  MID$ (PH$,I,1)
9620  IF XX$ <  > P2$ THEN P1$ = P1$ + XX$: GOTO 9630
9625 P1$ = P1$ + P3$
9630  NEXT I
9640  RETURN
SAVE KERMSHELL
LOCK KERMSHELL
//go.sysin dd *
if [ `wc -c < a-kermshell` != 23880 ]; then
	made=FALSE
	echo error transmitting a-kermshell --
	echo length should be 23880, not `wc -c < a-kermshell`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 a-kermshell
	echo -n '	'; ls -ld a-kermshell
fi
echo Extracting a-txbin
sed 's/^X//' <<'//go.sysin dd *' >a-txbin
NEW
5  REM  PROGRAM TXBIN
10  POKE 33,40
15  INPUT Z$: REM  DUMMY READ OF ETXBIN FILE
20  REM   PROGRAM TO CONVERT HEX TEXT FILE TO BINARY FILE
25  REM  THIS PROGRAM REQUIRES DATA OUTPUT VIA PROGRAM BITXT
27  REM       DO NOT RUN THIS PROGRAM DIRECTLY. USE EXEC FILE SUCH AS ETXBIN, WHICH SETS HIMEM AT $95C4 AND LOADS PROGRAM AT $8A00
30  REM     DO NOT USE THIS PROGRAM IF BINARY FILE BEGIN ADDRESS < $300 OR > $89FF
35  REM  ROBERT M. HOLLEY, JR. - SERDAC - 7/85
40 D$ =  CHR$ (13) +  CHR$ (4)
43 BL$ =  CHR$ (7)
45 TB = 38343
60  PRINT D$"BLOAD T-B,A$95C7
80  HOME
85  PRINT "       HEX-TEXT FILE TO BINARY": PRINT
90  PRINT "             SERDAC 7/85": PRINT : PRINT
100  PRINT "NAME OF HEX-TEXT FILE": INPUT "DO NOT INCLUDE -T SUFFIX:";F$
120  IF  LEN (F$) < 1 THEN  PRINT : GOTO 100
140  PRINT : PRINT
160  HTAB (12): INVERSE : PRINT "TEXT --> BINARY": NORMAL : PRINT : HTAB (4): INVERSE : FLASH : PRINT "TRANSLATION IN PROGRESS -- WAIT": NORMAL
180  ONERR  GOTO 2000
185 SOUR = 1
200  PRINT D$"VERIFY ";F$;"-T"
220  PRINT D$"OPEN ";F$;"-T"
240  PRINT D$"READ ";F$;"-T"
260  INPUT XB: INPUT TL
265 SOUR = 2
280  FOR X = 0 TO TL - 1
300  CALL TB
320  POKE XB + X, PEEK (38342)
340  NEXT X
360  PRINT D$"CLOSE ";F$;"-T"
380  HOME
400  VTAB (5): PRINT "TRANSLATED BINARY NOW STORED IN MEMORY": PRINT : PRINT
420  PRINT "BEGIN ADDRESS: ";XB;" DEC": PRINT
440  PRINT "  END ADDRESS: ";XB + TL - 1;" DEC": PRINT
460  PRINT "       LENGTH: ";TL;" BYTES": PRINT : PRINT
480  INPUT "STORE MEMORY TO BINARY FILE?";Z$
500 Z$ =  LEFT$ (Z$,1): PRINT
520  IF Z$ <  > "Y" AND Z$ <  > "N" GOTO 480
540  IF Z$ = "N" GOTO 640
560  INPUT "BINARY FILE NAME?";BF$
580 SOUR = 3
600  PRINT D$"BSAVE ";BF$;",A";XB;",L";TL
620  PRINT : PRINT "HEX-TEXT FILE ";F$;"-T": PRINT : PRINT "TRANSLATED TO BINARY FILE: ";BF$
630  PRINT : PRINT : PRINT BL$: PRINT
640  INPUT "CONVERT ANOTHER FILE?";Z$
660 Z$ =  LEFT$ (Z$,1)
680  IF Z$ = "Y" GOTO 80
720  POKE 104,8
730  POKE 8 * 256,0
740  END
1999  REM   ERROR ROUTINE
2000 Y =  PEEK (222)
2010  PRINT : PRINT "ERROR ";Y;" AT LINE "; PEEK (218) +  PEEK (219) * 256: PRINT : PRINT
2020  IF Y < 4 OR Y = 7 OR Y = 11 OR Y = 12 OR Y > 13 THEN  GOTO 640
2030  IF Y = 6 THEN  PRINT "FILE NOT ON DISK";BL$: PRINT
2040  IF Y = 8 THEN  PRINT "I/O ERROR";BL$: PRINT
2050  IF Y = 13 THEN  PRINT "WRONG FILE TYPE";BL$: PRINT
2060  IF Y = 9 THEN  PRINT "DISK IS FULL";BL$: PRINT
2070  IF Y = 4 THEN  PRINT "FILE WRITE PROTECTED";BL$: PRINT
2080  IF Y = 10 THEN  PRINT "FILE IS LOCKED";BL$: PRINT
2090  IF Y = 5 THEN  PRINT "UNEXPECTED END OF DATA";BL$: PRINT
2200  ON SOUR GOTO 100,720,560
SAVE TXBIN
LOCK TXBIN
//go.sysin dd *
if [ `wc -c < a-txbin` != 2622 ]; then
	made=FALSE
	echo error transmitting a-txbin --
	echo length should be 2622, not `wc -c < a-txbin`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 a-txbin
	echo -n '	'; ls -ld a-txbin
fi
echo Extracting x-kermita-t
sed 's/^X//' <<'//go.sysin dd *' >x-kermita-t
2049
6144
8001C0C2C10F00000000230100000D604C31084CBF124C01137F000000000000FF4C970A20381220
68124CCF1200001B20100CA000B1FA8D090BAD090BC95AF047C944F066A9008D0A0BAD090BC930D0
04206F0E6020BA0AAD090BC939D009A9598D090B207B0960C938D004A942D0F1C937D004A945D0E9
C953D008A9008D08088D070820540960AD0A0BF012A9448D090B205409AD090BC959F0EC4CE90FA9
5A8D090B20BA0A2054096020BA0AADD208CD0A0B9008A9598D090B4CE90F205409AD090BC959D0F3
A9448D090BD0DF00005A00B4A5B0C3A6CAF0A081B8D8B0D485A090A0A0B8C29FA095B0A0C4A09EA0
XF0A0A180A0A9A087A082BAA3A0A0FEA095A08BFFC285A0A2B0A5C3D9A5A083B187C4A0A9B4AFB0DB
A0A0ADA085B2B9B0CD85CC85A0F0B8C3B0C4A0A0A4A0A0B8C285A0A5B0A0C4CFD8C4B9C2FD80A0D6
A0A0A090BAC2A7A0F8C4A5B9D9CFA080B1A0B9207B09A9008DD308206F0EAD090BC94EF004C932D0
10EED308ADD308C90AF00620780A4C5C0960A9008DD0088D0B0CAD0C088DD408AD090BC959F004C9
4ED006AD07088D0808AD08081869208DD608186D090B8DD108AD090B8DD708AC0B0CCC0A0BD00590
034C420AEE0B0CAD090BC944F006B90B0B4C180AA9008D6A0EB90B0B2980F013A90320330AAD0A08
201E0AB90B0B297F990B0BB90B0BCD0B08F013CD0A08F00ECD0908F009C920B016A9408D6A0EA902
20330AAD0B08201E0AB90B0B4D6A0E201E0A4CB009AED0089DD808204C0CEED008ADD008CDD208F0
0E60186DD008CDD208B00160CE0B0C6868ADD0081869238DD508204C0C20560CAED0089DD808AD0F
089DD90820AA0AA000AE0B0CEC0A0BB00ABD0B0B990B0BE8C8D0F18C0A0B18A000B9D40820CD10CD
0F08F003C8D0F2AC0D08F009AD0E0820CD1088D0F560203812202B0CA000B1FC20CD10C8C6FED0F6
60EE0808AD0808C940D005A9008D080860AD0A0B18690265FE9012205409AD090BC959F0034CBC08
A9448D090BAE0A0BA000A5FEF00EB1FC2D1A089D0B0BE8C8C6FED0F2AD090BC944D011A90DDD0A0B
XF0049D0B0BE8A90A9D0B0BE88E0A0B600000A0A4B1CEB0A08FA0FEA099A0D8C6C5A2A094C5A0C1D0
8DA0ACB0A0C6A0CCA085C2A5B5A0FDA0D8A0A4A0A0CFA0A5A085FFA0F0A0A5A086B8D0C8A0E0B483
A0C180A0CCB2A0B0A087A0ADA083A0D9B0CEA5A0AAC5A0C1D1D5A0E8B0A0C6A09FA085A0A5B8A085
A0D8A0ADFFC4CFA086A0CDFFA0C5C6A5A0F0B6B0A1A0A0B480A0C698A0CCB3A0A0A085C1ADA083C6
D9B0C4A5C3C7C5ACC1C1C8A0E8B0A0C6A0A0A090A081B9A0A5A0A0A0ADFFC4A3A086A0CDFFC5C5A0
A5A0F0B6C6A1A0CCB485A0A0A0A090B3E6B0A0CCC1A3A0A0A0C3B0CD90A0C7C5A0C1D8C8B8E8A0A0
C6A0A0A09FA0E7B9A097A0CFA096FFA080A0C9A081E6A083A086B8D0C8A0E0B083A000B0C4CEE020
BEDE20E3DFA001B18385FAC8B18385FBA5838D0C0CA5848D0D0C20BEDE20E3DFA000B18385FEC8B1
8385FCC8B18385FDA5838D0E0CA5848D0F0C6018486DD1088DD1086860ADD1082A2A2A2903186DD1
08293F1869206000B3A9A0A0A0A085A0E5A0A080A0F0A081BAA5C3A098A0A5B6A5BAA080B3A0A0C8
B1A0A9B6A5A0BAA0A085A081B7E680D2D0A0BBB6ACA0A0E3C3ACA0B9A0A0B0A0A5AAD2A0A0A0A0A5
A08CA0CF80A08AA0A0BAD1C4A0A0A0B2B6E9A0C3E5B3A0A0E5B6C3A9B68AB3C0A0A0D0A0B0B7FD80
CEA0A0C1B6E9A0A084C3E9A0B9A0A0B0A095D38AA0A0FFA0ABC1A2A0A080A0CFA0EFBAA5A0A0A0A0
XFFA088B0A0B5A086A089A0A5B8A097A0F6A0A0FFD5A3A08DA0C8A0A0A5A0C9A0AFB0A0A2A08AB5E5
A0B0F5A0FFB3A4A0CDA5D090A085C3D3B0A0C0AAA5B5A0C3C39EA088B0A0B6A0A9C3A5A0A5B8A0E0
A0F6A0A0FFA0A3A08DA0A6A0A0A5A097A098B0A0FFB597B5A0B0CFA5D2D6B5A0C3C383B8F0A0A0B6
A085CD85A0C5A0A08AC3A8A0C8FFA0A0A0A0A0FAB4A0B8A085A0B0CECB85B7A4B5A0A0C9D0A085B5
90A0C8A5D092A0A0C3A0B0CFA5D2D6A0A0C3C383B8AFA0A0B6A089CDCCA0A580A0A0C388A0F4FFA0
8AA0ACB8FAB6A09CC585A0A2C1B385B8A4B6A9A0A0D0A091B590A0C4A0D0A5A0E6C3A0B0CFCDA0A8
A0A0C3D3A0A0A2B0A0B6A089A0B5A0A5B7A4B6A0A0C9D0A085B590A0C8A5D092A0E6C3A0B0CFCDD2
A8A0A0C3C3A0B8AFB0A0B6A089A0CCA0A580A0A0A088A0F4FFC38AA0ACB8E7B6A09CC5E0A0A2C1B3
89B8A4B6A9A0A0B0A091B690A0C4A0D2A5A0E6C3A0B0CECDA0A8A0A0C3D3A0A0A2B0A0B6A092A0B8
00000000000020B212205710CD0C08D0F8A0008C680C8C6A0E8C6B0E8C6C0E205710CD0F08F00699
690CC8D0F28C680CAD690C8DD10838E9208D690EAD6A0C204C0C38E9208D6D0EAD6B0C204C0C8D09
0BA002A2004C520FB9690C204C0CAD090BC944F006B9690C4C200FAD6A0EF00DB9690C2940D035B9
690C4C1E0FB9690CCD0908D00FC8B9690C204C0C38E9218D6C0ED055CD0A08D007A9808D6B0ED049
CD0B08D007A9408D6A0ED03DB9690C4D6A0E0D6B0EF01C9D690DC90AD007AD6E0EC90DF00EE8D008
A9348D090B4CCB0F8D6E0EAD6C0EF009CE6C0EBD680D4C200FA9008D6A0E8D6B0EC8CC690EF0034C
C10E20560CD9690CF013A94E8D090B2C1D08104520FF0FCE07084C6F0EAD090BC953F048AD6D0E38
ED0708F00FC901F03BC9C1F037A9338D090BD0362C1D083019AD090BC959D00CAD6D0ED007ADD608
C920F018A94E8D090B60AD090BC945F011A9598D090B20FF0F4C6F0EAD6D0E8D07088E690EAD0E0C
8583AD0F0C8584AD690EA0009183C8A9699183C8A90D9183A002AD0C0C8583AD0D0C8584A90B9183
88A909918360AD0C088DD408A9238DD5088DD108AD6D0E8D07088D08081869208DD608204C0CAD09
0B8DD708204C0C20560C8DD808AD0F088DD90820780A20AA0A60D0C1C3CBC5D4A0D2C5D4D2C1CED3
CDC9D4D4C5C4AEAEAE8D00A2FFC5AD06088D5610A9FF8D55108D54104E56106E55106E54104E5610
6E55106E54102C10C0CE5410D00ECE5510D009CE5610D004A932D02B2C00C0102EAD00C0C98DD015
2C10C020780AA200BD3B10F01A207014E8D0F53012CD3008D00D2C10C0A9318D090B68684CCB0F20
0E1290B5ADCC102D1A0860008DCC10AD00C02900F0F9ADCC108D00C02C1B0810080980207014ADCC
1060000082C8ACC3FAB9C89CD485A0A2C4C285B880E2A0FDB4C980D085A0C8A0A0B0A089CC94A0EF
A0A0B1A082A0A0A0A0FFC3E6D5A4A0A080A0A9A090BAA5B8A09FC8E8A0E8BAA397B6B9A0A6B0A08A
A0A9B690A0A089A0A9B48580D2A2A085A0A0C2A0F0CCB1A0EFC3A0B1CF99A0E5A0A0FFC3C0D5E9A0
A0C2A0EEA0F0BAB7C2A0A0C880A0E8BAA3A0B6B9A0A6B2A0F0A0A9B6E6BEA089A0A5B4B080C1CFA0
E5C2A4C3A0C8D2A5A0FAB0A0B1CF99A0E5A0A0FFC1C0D5E9A0A0C2A0EEA0A0BAB9C2A093A089A0A9
BAD0A4B689A0CCC1A0A0A094B6E6A2A09EA0A5B4B080D2CFA0E5C5A4C3B0C8C496A0CCB0D4B1A0A0
A0A5A0A0FFC18DA0AAA0A0C2D5A5A0A0BAA1C3A08A48AEEB10AD00C02900F012AD2F08F0038D00C0
AD00C09DED10E88EEB1068AA6020ED118A48AEEC10ECEB10F019BDED108DCC10E88EEC102C1B0810
0320701468AAADCC10386068AA1860AD05088DD1108DF311AD01088DF611AD02088DD410AD03088D
0212AD04088DDB10AD2E088DFF1138AD1008E9058DD208AD1E088D1517AD1F088D1617AD20088D1B
17290F8D1A17AD2108A000A246C9FFD00AA228AD1B178D1A17A0038E1C178C1D172CBE123008206A
14A9FF8DBE12A9708536A914853720EA0320ED11A9008DEB108DEC1060002038122C00C01027AD00
C0CD3008D0092C10C0A9018D1517602C10C0297F20CD102C1B0830092C1C0810040980D00D200E12
90CFADCC102C1B0830F32070144CEE1220BEDE20E3DFA200200CFD9D0002E8297FC90DD0F3A0008A
9183C8A9009183A902C89183608D12178E13178C1417A94085E6AD55C0AD52C0A20320F0F620AF13
207213A69BA49A38A9BFE5982011F420AF13B01320721338A9BFE598A8A59BA69A203AF54C50138A
297FC91DF0CF4C5F14A5948598A595859926982698269846996698469966984699669846996698A5
96859BA597859A269B269B269B469A669B469A669B469A669B469A669B60A000200E1290FBAA291F
859C8A2960C940D00DA59C859698F004A59385971860C920D007A59C8593C8D0D7C960D00EA59C85
9498F0CAA59385954CAF1338600000008D12178C14178E1317A94085E6AD55C0AD52C0A900AAA88D
XF0138DEF138DEE132011F4EEEE13ADEE13C904F0062054144C1414205414ACEF13C02810029126C8
8CEF13C02CF0034C2414EEF013ADF013C9C0D002A9BFA200A0008CEF132011F44C2414200E1290FB
C9FDD00C6868AD54C0A92085E64CFA14602074164CFA148D12178E13178C1417297F8D0F17C92010
68A9FF8D181720AB15A9008D1817AD0F17C90DD010A9008D0E17AD1517F04D203D154CED14C90AD0
06203D154CED14C908D010CE0E1730034CED14A9008D0E174CED14C910D00BA9008D0D178D0E1720
5416C907D016A080A90C20A8FC20ED11AD30C088D0F24CED144C0415A9FF8D181720AB15A9008D18
17AD1217AE1317AC141760AD0F170D111738E9208D0F17AD10178D111720AB15EE0E17AD0E17CD1C
1730C9AD1617F009AE1C17CA8E0E17D0BB203D15A9008D0E174CED14AD0D17186D19178D0D17C9BB
B0034CFA14AD1717853C186D1917AAA43CB933178D7815B9F3178D7915BD33178D7515BDF3178D76
15A027B90D17990D178810F720ED11E63CE8E0C0D0D1A63C8E0D17BD33178D9E15BDF3178D9F15A0
27AD1B17990D178810FAE8E0C0D0E44CFA14AC0F17B9B3188DEE15B91319186D1D178DEF15AC0E17
B9731985A3B9B919A8B92C17859EB91E17859FB9251785A0A900859D18AA6D0D17A8B93317853CB9
XF317853DBDED154D1A172C2108304B85A1A90085A2A4A32C1817302A06A1A69EF00706A126A2CAD0
XF91866A1B13C259F05A1913CC8B13C25A005A2913CE69DA59DC908D0AF60A59F49FF513C913CC8A5
A049FF513C913C4C2616AC0E172C18171004B13C49FF913C4C2616AE1717BD33178D6916BDF3178D
6A16A027AD1B179900008810FAE8E0C0D0E460A9008D0D1720E2F3AD52C0A20320F0F6AD0D17A200
A0002011F4A526AC0D17993317A52799F317EE0D17AD0D17C9C0D0DFA9008D0E1785A3859DAC0E17
A5A3997319A59D99B919EE0E17AD0E17C946F019A59DC906F00BE69DA59D6AB0DCE6A3D0D8A90085
9DE6A3D0D0A9008D0D178D0E17A260A9F7853CA919853DA000A53C186908853C99B318A53D690085
3D991319C8CAD0E9205416600000000000000000010100000800004600F08FE19FC3BF87FFFEFFFC
XFFF8FF00040105020603A0E8A0A0B1A0A0A090A081C2D3A5CCA0A0ADFFC7A3D386B1CDFFA0C5A0A5
A0F0B1B0A1A0A0A085A0A098A090B6E6A0A0CCC4A3A0A0A0C2B1C690A0C7B1A0B7A0C8A0E8A0A0B1
A0A0A09FA0E7C2A0A5CCCFA096FFD280D3C9B1A2FFA0AAA0B9A0F0B1B08DA0CCB7A0A0ACA0A0AAB7
B8C6A0CCC4E9A0AFA0C2B1C689A094B1A0B7A0D6A0A5A0A0B1A0E1A09FA0F5C3C497CFAFA0FDFFD2
ACCCA4A086B0A0D0A0B1A0A2B0B6D2A0A0B7A0A0ACD8A0AAB8B8C6A0E0C4E9A089B7C2B1C6E2A0E0
B1A0B390A0C6A0C4A5A0E6B7A9A4A7A0A5A0FAA0A0B1C899D3E5A0A0FFC2C0CFAAA0A0B1A0A5A0A0
BAB9B9A093A089A0A9BAA0A4B289B1CCB0A0A0C694A0E6A2A09EA0A5A0A080A0CFA0E8A0A4A0A0A9
A096A0CCA0C6B1D5A0C3A5A0A0FFC28DA0AAA0A0B1A0A5A0A0BAA1B9A093B190A085BAB0B0B2B8B1
E8B0A0C0C6D2A08580A089A0F0A0A080A0AEA0E8A0BDA0A0A9C496A0A4A0A0B1D28FC389A0A0FFC2
E7A0A0B2A0B1A082C8B7BAA5C1A0A9B190A0C9BAA0B0B2FDB1A0B0A0C0B7C9A0A080B0A0A0A0A0A6
B0B0B8D497A098B0A0FFB397B7E5A0A0A9A0A9B297A0C6A5C480A0A0B7C2B1C6A5D4D6B1A0B7A083
A0F0A0A0B2A085CF85B1C5A0C58AC1A8A0C8FFB1A0A0A0B0FAB0B0B8B8A7A098A0CCA0A0B1D2A0C3
A5A0A0FFC28DA0AAA0A0A0F0A0A5A086B0B6C8A0E0A083A0AC80A0CCB8CEC6A087C2FEA083A0C2C6
C6A5A0AAB1A0B7C2D5C8E8A0A0B2A09FA085A0A5C6A085CED8A0A4FFC3CFC1A5A0CDFFA0F0A0A5A0
XF0B0A0A1A0A0A080A0A098A0CCB9A0A0A085C4ADA083A0C2B1C6A0F4FFB08AA0ACB1FAB0A09CA085
A0B0A0A085B6A4B7A0A0A0D0A085B590A0C6A5C492A0E6B7A0B1A0CDC3A8A0A0B7A0A0A0AFA0A0B3
A089D2CCC6A580D3A0D488A0F4FFB08A86A089C6A5B3CE97CFF6A0A0FFB1A3A08DB1C8B0B4A5A0C9
A0AFB0C6A2A08AB7E5A0A0F5A0FFB4A4A0C6A5C490A085B7C2B1C6C0C3A5B1A0B7C29EA088A0A0B2
A0A9D5A5A0C800000000000000000202020202000200050505000000000002020702070202000207
03020607020000010402020104000002050203050704020202000000000004020101010204000102
04040402010000050207020500000002020702020000000000000002020100000007000000000000
00000000020004040202020101000205050505050200020302020202070002050404020107000304
04030404030004060507040404000701030404040300020501030505020007040402020101000205
05020505020002050506040502000000020002000000000002000202010000040201020400000000
07000700000000010204020100000205040202000200000707070105060002050507050505000305
05030505030002050101010502000305050505050300070101070101070007010107010101000205
01070505060005050507050505000702020202020700040404040405020005050303030505000101
01010101070005070707050505000505070707050500070505050505070003050503010101000205
05050502040003050503050505000205010204050200070202020202020005050505050506000505
05050502020005050507070705000505020202050500050505020202020007040402010107000701
01010101070001010202020404000704040404040700000205000000000000000000000000070102
04000000000000000204060506000101030505050300000006010101060004040605050506000000
02050701060002050103010101000000060505060403010103050505050000020003020207000004
00040404050201010503010305000302020202020700000005070705050000000305050505000000
02050505020000000305050301010000060505060404000002050101010000000601020403000002
07020202040000000505050506000000050505050200000005050707050000000505020505000000
05050506040300000704020107000602020102020600020202020202020003020204020203000603
00000000000000000000000000000000000000000000080808080800080014141400000000002894
7E14BF8A0A00083C0A1C281E08000626100804323000040A0A042A122C0008080800000000000804
0202020408000810202020100800082A1C081C2A08000008083E0808000000000000008C88840000
003E000000000000000000008C0000201008040200008C92222222928C00080C080808081C001C22
201084823E003E90101820221C00101814123E1010003E021E2020221C001804821E22221C003E90
1088088404001C22221C22221C001C22223C90100C0000008C00008C000000008C00008C88841008
04020408100000003E003E00000004081020100804001C229088080008001C222A3A1A023C00088C
14923E2222001E22221E22221E001C22020202221C001E22222222221E003E02021E02023E003E02
021E020202003C02020232223C002222223E222222001C08080808081C002020202020221C002212
0A060A1222000202020202023E0022362A2A222222002222262A322222001C22222222221C001E22
221E020202001C2222222A122C001E22221E0A1222001C22021C20221C003E080808080808002222
222222221C0022222292148C08002222222A2A362200229214081492220022921408080808003E90
100804823E003E06060606063E0000020408102000003E30303030303E0000000814220000000000
00000000007F040810000000000000001C203C223C0002021E2222221E0000003C0202023C002020
3C2222223C0000001C223E023C001824041E0404040000001C22223C201C02021E22222222000800
0C0808081C00100018101010120C020222120E1222000C08080808081C000000362A2A2A22000000
1E222222220000001C2222221C0000001E22221E020200003C22223C202000003A06020202000000
3C021C201E0004041E04042418000000222222322C0000002292148C0800000022222A2A36000000
22140814220000002292148C088600003E1008043E00380C0C060C0C380008080808080808080E18
183018180E002C1A0000000000007F7F7F7F7F7F7F7F8DC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

//go.sysin dd *
if [ `wc -c < x-kermita-t` != 12485 ]; then
	made=FALSE
	echo error transmitting x-kermita-t --
	echo length should be 12485, not `wc -c < x-kermita-t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 x-kermita-t
	echo -n '	'; ls -ld x-kermita-t
fi
echo Extracting gokerm
sed 's/^X//' <<'//go.sysin dd *' >gokerm
XFP
POKE 104,65
POKE 65*256,0
RUN KERMIT
//go.sysin dd *
if [ `wc -c < gokerm` != 40 ]; then
	made=FALSE
	echo error transmitting gokerm --
	echo length should be 40, not `wc -c < gokerm`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 gokerm
	echo -n '	'; ls -ld gokerm
fi
echo Extracting etxbin
sed 's/^X//' <<'//go.sysin dd *' >etxbin
XFP
HIMEM: 38340
POKE 104,138
POKE 138*256,0
RUN TXBIN

//go.sysin dd *
if [ `wc -c < etxbin` != 55 ]; then
	made=FALSE
	echo error transmitting etxbin --
	echo length should be 55, not `wc -c < etxbin`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 etxbin
	echo -n '	'; ls -ld etxbin
fi
echo Extracting kermit-setsave
sed 's/^X//' <<'//go.sysin dd *' >kermit-setsave
300
ON
EVEN
2
MICROMODEM
1
10
ON
OFF
1
NONE
ON
N4
155
13
ON

//go.sysin dd *
if [ `wc -c < kermit-setsave` != 61 ]; then
	made=FALSE
	echo error transmitting kermit-setsave --
	echo length should be 61, not `wc -c < kermit-setsave`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 kermit-setsave
	echo -n '	'; ls -ld kermit-setsave
fi
echo Extracting mic.t
sed 's/^X//' <<'//go.sysin dd *' >mic.t
365  PRINT : PRINT "       HAYES MICROMODEM VERSION"
3910  REM
3915  IF CARD$ <  > "MICROMODEM" THEN 5750
3920  IF BAUD <  > 300 THEN  PRINT "ONLY 300 BAUD SUPPORTED WITH MICROMODEM": PRINT : PRINT "BAUD RATE NOW SET TO 300":BAUD = 300
3925  IF PR$ = "MARK" OR PR$ = "SPACE" THEN  PRINT NSUP$: GOTO 490
3927  PRINT : INPUT "ARE YOU ALREADY CONNECTED TO HOST?";Z$
3928  IF  LEFT$ (Z$,1) = "Y" THEN Z$ = "Y": PRINT : GOTO 3950
3931  PRINT : PRINT "COMMENCE HOST DIAL-UP": PRINT "WHEN CARRIER, TYPE SIGN-ON KEYINS": PRINT
3932  PRINT D$;"PR#";SLOT
3934  PRINT  CHR$ (26): REM   CTRL-Z, HANG UP
3935  HOME : FOR I = 1 TO 500: NEXT I
3936  PRINT D$;"PR#0": CALL KE + 23
3950 STREG% = 134 + SLOT * 16
3970 TRREG% = STREG% + 1:RCREG% = TRREG%
3990 TBIT% = 2:RBIT% = 1
4010  GOSUB 6250
4030  HOME
4050  PRINT USE$
4055  IF Z$ = "Y" THEN 4150
4060  IF PH$ <  > "NONE" THEN 4070
4062  INPUT "ENTER PHONE #: ";PH$
4064  PRINT "PHONE # IS ";PH$;" OK? (Y/N)";:
4065  GET RE$: PRINT RE$
4066  IF RE$ <  > "Y" THEN 4062
4068  CALL KE + 20
4070  PRINT D$;"PR#";SLOT
4090  PRINT Q$;PHNUM$
4100  PRINT
4110  PRINT D$;"PR#0": CALL KE + 23
4150  POKE  - 16250 + 16 * SLOT,3
4170  IF PRITY$ = "EVEN" THEN TMP = 9: GOTO 4230: REM    7E1
4190  IF PRITY$ = "ODD" THEN TMP = 13: GOTO 4230: REM    7O1
4210 TMP = 21: REM    8N1
4230  POKE  - 16250 + 16 * SLOT,TMP
4235  IF Z$ = "Y" THEN 4250
4240 TMP = 0
4242  IF TMP > 50 THEN  PRINT "NO CARRIER":FIRST = 1: GOTO 490
4244  IF  PEEK (49286 + 16 * SL) >  = 4 THEN TMP = TMP + 1: GOTO 4242
4246  PRINT "CONNECT"
4250  CALL KERM + 3
4270  GOTO 490
4290  REM
4310  REM
//go.sysin dd *
if [ `wc -c < mic.t` != 1589 ]; then
	made=FALSE
	echo error transmitting mic.t --
	echo length should be 1589, not `wc -c < mic.t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 mic.t
	echo -n '	'; ls -ld mic.t
fi
echo Extracting nov.t
sed 's/^X//' <<'//go.sysin dd *' >nov.t
365  PRINT : PRINT "       NOVATION APPLE CAT VERSION"
5634  REM     -------------NOVATION APPLE CAT
5635  REM
5636  IF CARD$ <  > "NOVATION" THEN  GOTO 5750
5637 STREG% = 143 + SLOT * 16
5638 TRREG% = STREG% - 1:RCREG% = STREG% - 4
5639 TBIT% = 16:RBIT% = 8
5640  GOSUB 6250
5641  POKE KE + 29,141 + 16 * SL: POKE KE + 30,17: IF BA = 1200 THEN  POKE KE + 30,31
5642 BS = 49280 + 16 * SLOT
5643  PRINT : INPUT "DO YOU HAVE NOVATION FIRMWARE?";Z$
5644  IF  LEFT$ (Z$,1) = "Y" THEN 5649
5645  PRINT : PRINT "EXIT KERMIT & RUN EXTERNAL DATA COMM ": PRINT "SOFTWARE FOR PROTOCOL AND DIALUP.": PRINT : PRINT "EXIT IT W/O HANGING UP. THEN, INSERT": PRINT "KERMIT DISK AND RUN HELLO.": PRINT : PRINT
5646  PRINT "AT THIS POINT--": PRINT : PRINT "TYPE 'C' IF CONNECTED TO HOST": PRINT "TYPE 'E' TO EXIT KERMIT": PRINT : INPUT ">>";Z$
5647  IF Z$ = "C" THEN 5651
5648  IF Z$ = "E" THEN 9430
5649  POKE BS + 2,0: POKE BS + 1,1: POKE BS + 3,15: POKE BS + 13,31: POKE BS + 12,4
5650  PRINT : PRINT "USE FIRMWARE COMMANDS TO DIAL HOST": PRINT "WAIT FOR HOST CARRIER, THEN PRESS RETURN": GET Z$: PRINT Z$
5651  IF BA = 1200 THEN  GOTO 5670
5652  POKE BS + 1,129
5653  POKE BS + 2,2
5654  POKE BS + 3,6
5656  POKE BS + 9,101
5658  GOSUB 5710: POKE BS + 10,ZZ
5660  POKE BS + 11,34
5661  POKE BS + 12,5
5662  POKE BS + 13,17
5664  POKE BS + 15,0
5666  GOTO 5690
5670  POKE BS + 1,161: FOR I = 1 TO 5: NEXT I: POKE BS + 1,33
5672  POKE BS + 2,2
5674  POKE BS + 3,6
5676  GOSUB 5710: POKE BS + 10,ZZ
5677  POKE BS + 11,0
5678  POKE BS + 12,5
5679  POKE BS + 13,31
5680  POKE BS + 15,10
5690  PRINT : PRINT "WAIT FOR APPLE'S CARRIER. TYPE SIGN-ON KEYINS": PRINT
5692  PRINT USE$
5694  CALL KE + 3
5696  GOTO 490
5710 ZZ = 0
5712  IF (PR$ <  > "NONE") THEN ZZ = ZZ + 64
5714  IF (PR$ = "EVEN") THEN ZZ = ZZ + 0
5716  IF (PR$ = "ODD") THEN ZZ = ZZ + 32
5718  IF (PR$ = "MARK") THEN ZZ = ZZ + 48
5720  IF (PR$ = "SPACE") THEN ZZ = ZZ + 16
5722  IF (PR$ = "NONE") THEN ZZ = ZZ + 3
5724  IF (PR$ <  > "NONE") THEN ZZ = ZZ + 1
5726  RETURN
5730  REM
//go.sysin dd *
if [ `wc -c < nov.t` != 2025 ]; then
	made=FALSE
	echo error transmitting nov.t --
	echo length should be 2025, not `wc -c < nov.t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 nov.t
	echo -n '	'; ls -ld nov.t
fi
echo Extracting sup.t
sed 's/^X//' <<'//go.sysin dd *' >sup.t
365  PRINT : PRINT "   APPLE SUPER SERIAL CARD VERSION"
4330  REM     ---------------- SUPER SERIAL
4350  REM
4370  IF CARD$ <  > "SUPER SERIAL" THEN  GOTO 5750
4390  HOME : PRINT : PRINT "IN TERMINAL MODE OF SUPER SERIAL CARD"
4410  PRINT "USE ESCAPE CHARACTER TO RETURN TO APPLE KERMIT"
4412  IF CMD$ = "SKIP" THEN 4430
4415  GOSUB 4745
4430  PRINT D$;"PR#";SLOT
4448 BD = 0
4450  IF BAUD = 300 THEN BD = 6
4452  IF BA = 1200 THEN BD = 8
4454  IF BA = 2400 THEN BD = 10
4456  IF BA = 4800 THEN BD = 12
4458  IF BA = 9600 THEN BD = 14
4460  IF BD = 0 THEN  PRINT "BAUD MUST BE 300,1200,2400,4800,OR 9600": GOTO 490
4465 A$ =  CHR$ (1)
4470  PRINT A$;BD;" B"
4492  IF PR$ = "EVEN" THEN PR = 3
4494  IF PR$ = "ODD" THEN PR = 1
4496  IF PR$ = "MARK" THEN PR = 5
4498  IF PR$ = "SPACE" THEN PR = 7
4500  IF PR$ = "NONE" THEN PR = 0
4510  PRINT A$;PRITY;" P"
4530  PRINT A$;"1 DATA"
4540  IF PR = 0 THEN  PRINT A$;"0D": REM    IF PR <> 0, DEFAULT TO CARD SW2 SETTINGS
4550  PRINT A$;"LF DISABLE"
4570  PRINT A$;"0F"
4590  PRINT A$;"0L"
4610  PRINT D$;"PR#0": CALL KE + 23
4630 STREG% = 137 + SLOT * 16
4650 TRREG% = STREG% - 1:RCREG% = TRREG%
4670 TBIT% = 16:RBIT% = 8
4690  GOSUB 6250: REM     POKE REGISTERS
4691  PRINT D$"PR#0": CALL KE + 23
4692  IF PH$ <  > "NONE" THEN 4698
4694  PRINT : PRINT "MANUALLY DIAL PHONE": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS": PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
4696  GOTO 4709
4698  PRINT : PRINT "AUTO-DIALING": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS": PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
4700  CALL KE + 20
4701  PRINT D$"PR#";SL
4702 PH$ = PH$ +  CHR$ (13)
4704  CALL KE + 17,PH$
4709  GOSUB 4745
4710  CALL KERM + 3
4712  PRINT D$"PR#0": CALL KE + 23: FOR ZZ = 1 TO 500: NEXT ZZ
4713  IF  PEEK ( - 16384) < 127 THEN 490
4714  GET ZX$: IF ZX$ = "N" THEN ZX$ = "":FIRST = 1
4740  GOTO 490
4742  REM  SEND OUT A BREAK SIGNAL
4745  IF  LEFT$ (ZZ$,1) = "Y" THEN D$ =  CHR$ (4): PRINT D$;"PR#";SL: PRINT  CHR$ (1);"B": PRINT D$;"PR#0": CALL KE + 23:CMD$ = "":ZZ$ = ""
4750  RETURN
//go.sysin dd *
if [ `wc -c < sup.t` != 2038 ]; then
	made=FALSE
	echo error transmitting sup.t --
	echo length should be 2038, not `wc -c < sup.t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 sup.t
	echo -n '	'; ls -ld sup.t
fi
echo Extracting ccs.t
sed 's/^X//' <<'//go.sysin dd *' >ccs.t
365  PRINT : PRINT "     CCS 7710-D SERIAL CARD VERSION"
4770  REM     -----------------CCS 7710
4790  REM
4810  IF CARD$ <  > "CCS" THEN  GOTO 5750
4830 STREG% = 134 + SLOT * 16
4850 TRREG% = STREG% + 1:RCREG% = TRREG%
4870 TBIT% = 2:RBIT% = 1
4890  GOSUB 6250
4910 TMP = STREG% + 49152 - 6
4930 ZZ = 0
4932  IF PR$ = "EVEN" THEN ZZ = 9: REM    7E1
4934  IF PR$ = "ODD" THEN ZZ = 13: REM    7O1
4936  IF PR$ = "NONE" THEN ZZ = 21: REM    8N1
4938  IF ZZ = 0 THEN  PRINT : PRINT NSUP$: GOTO 490
4940  POKE TMP,35: POKE TMP,ZZ: REM    SET DATA WORD, PARITY
4950  PRINT USE$
4951  IF PH$ <  > "NONE" THEN 4959
4953  PRINT : PRINT "MANUALLY DIAL PHONE": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS": PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
4957  GOTO 4970
4959  PRINT : PRINT "AUTO-DIALING-- TYPE RETURN": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS": PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
4963  CALL KE + 20
4965  CALL KE + 17,PH$
4970  CALL KERM + 3
4972  PRINT D$"PR#0": CALL KE + 23: FOR ZZ = 1 TO 500: NEXT ZZ
4974  IF  PEEK ( - 16384) < 127 THEN 490
4976  GET ZX$: IF ZX$ = "N" THEN ZX$ = "":FIRST = 1
4990  GOTO 490
//go.sysin dd *
if [ `wc -c < ccs.t` != 1128 ]; then
	made=FALSE
	echo error transmitting ccs.t --
	echo length should be 1128, not `wc -c < ccs.t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 ccs.t
	echo -n '	'; ls -ld ccs.t
fi
echo Extracting com.t
sed 's/^X//' <<'//go.sysin dd *' >com.t
365  PRINT : PRINT "   APPLE COMMUNICATIONS CARD VERSION"
5270  REM    ------------APPLE COMMUNICATIONS CARD
5290  REM
5310  IF CARD$ <  > "COMMUNICATIONS" THEN 5750
5330 STREG% = 142 + SLOT * 16
5350 TRREG% = STREG% + 1:RCREG% = TRREG%
5370 TBIT% = 2:RBIT% = 1
5390  GOSUB 6250
5395  PRINT USE$
5400  IF PH$ = "NONE" THEN 5428
5402  PRINT : PRINT "AUTO DIALING--": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS"
5403  PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
5410  PRINT D$;"PR#";SL
5420  PRINT PH$
5425  PRINT D$;"PR#0": CALL KE + 23
5426  GOTO 5430
5428  PRINT : PRINT "MANUALLY DIAL PHONE": PRINT "WHEN CARRIER, TYPE SIGN-ON KEY-INS.": PRINT "IF NO CARRIER, TYPE ESCAPE, THEN 'N'"
5430  POKE 49294 + 16 * SLOT,3
5440  IF PR$ = "MARK" OR PR$ = "SPACE" THEN  PRINT NSUP$: GOTO 490
5442  IF PR$ = "NONE" THEN TMP% = 21: REM    8N1
5444  IF PR$ = "EVEN" THEN TMP% = 9: REM    7E1
5446  IF PR$ = "ODD" THEN TMP% = 13: REM    7O1
5448  POKE 49294 + 16 * SL,TMP%
5610  CALL KERM + 3
5612  FOR ZZ = 1 TO 500: NEXT ZZ
5614  IF  PEEK ( - 16384) < 127 THEN 490
5616  GET ZX$: IF ZX$ = "N" THEN ZX$ = "":FIRST = 1
5630  GOTO 490
5632  REM
//go.sysin dd *
if [ `wc -c < com.t` != 1131 ]; then
	made=FALSE
	echo error transmitting com.t --
	echo length should be 1131, not `wc -c < com.t`
else
	made=TRUE
fi
if [ $made = TRUE ]; then
	chmod 644 com.t
	echo -n '	'; ls -ld com.t
fi
------------  ereh tuc  ------------
-- 
                    umd5.UUCP    <= {seismo!umcp-cs,ihnp4!rlgvax}!cvl!umd5!zben
Ben Cranston zben @ umd2.UMD.EDU    Kingdom of Merryland Sperrows 1100/92
                    umd2.BITNET     "via HASP with RSCS"



More information about the Comp.sources.unix mailing list