Kermit ][ (file 3 of 3) The rest of the stuff
Ben Cranston
zben at umd5
Mon Oct 20 14:01:37 AEST 1986
This is everything that was not posted in parts one or two.
------------ 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 a-bitxt
sed 's/^X//' <<'//go.sysin dd *' >a-bitxt
NEW
5 REM PROGRAM BITXT
7 INPUT Z$: REM DUMMY READ OF EXEC FILE
10 POKE 33,40
15 REM PROGRAM TO CONVERT BINARY FILE TO HEX TEXT FILE
22 REM THIS PROGRAM OUTPUTS DATA FOR EVENTUAL INPUT TO PROGRAM TXBIN
24 REM DO NOT USE THIS PROGRAM IF BINARY FILE ADDRESS IS < $300 OR > $89FF
26 REM DO NOT RUN THIS PROGRAM DIRECTLY. USE EXEC FILE SUCH AS EBITXT, WHICH SETS HIMEM AT $95C4 AND LOADS PROGRAM AT $8A00
30 REM ROBERT M. HOLLEY, JR - SERDAC - 7/85
40 D$ = CHR$ (13) + CHR$ (4)
43 BL$ = CHR$ (7)
45 BT = 38343
60 PRINT D$"BLOAD B-T,A$95C7
80 HOME
85 PRINT " CONVERT BINARY FILE TO HEX-TEXT FILE": PRINT
90 PRINT " SERDAC 7/85"
95 PRINT : PRINT : PRINT
100 PRINT : PRINT "BEGIN ADDRESS": INPUT "(IF HEX, PREFACE WITH $):";XB$
120 ARG$ = XB$: GOSUB 1000:XB = RET: IF XB = 65000 THEN PRINT : PRINT : PRINT BL$: PRINT "ILLEGAL HEX #": PRINT : PRINT : GOTO 100
122 IF XB = 66000 THEN PRINT : PRINT : PRINT BL$: PRINT "ILLEGAL DEC #": PRINT : PRINT : GOTO 100
140 PRINT : PRINT "END ADDRESS": INPUT "(IF HEX, PREFACE WITH $):";XE$
150 ARG$ = XE$: GOSUB 1000:XE = RET: IF XE = 65000 THEN PRINT : PRINT : PRINT BL$: PRINT "ILLEGAL HEX #": PRINT : PRINT :GOT0140
152 IF XE = 66000 THEN PRINT : PRINT : PRINT BL$: PRINT "ILLEGAL DEC #": PRINT : PRINT : GOTO 140
180 TL = XE - XB + 1
190 IF TL < = 0 THEN PRINT : PRINT : PRINT BL$: PRINT "LENGTH OF MEMORY LT OR EQ ZERO.": GOTO 95
200 PRINT : PRINT : INPUT "FILE ALREADY IN MEMORY?";Z$
210 Z$ = LEFT$ (Z$,1)
220 IF Z$ < > "Y" AND Z$ < > "N" THEN PRINT BL$: GOTO 200: PRINT
240 IF Z$ = "Y" THEN 300
250 PRINT : INPUT "NAME OF BINARY FILE?";F$
260 ONERR GOTO 2000
265 SOUR = 1
270 PRINT D$"BLOAD ";F$;",A";XB
300 SEC40 = INT (TL / 10240) + 1
320 RM = TL - 10240 * (SEC40 - 1)
340 LN = INT ((RM + 39) / 40)
360 POKE 1,SEC40: POKE 2,LN
380 POKE 3,XB - ( INT (XB / 256) * 256): POKE 4, INT (XB / 256)
400 PRINT : PRINT "OUTPUT HEX-TEXT FILE NAME": INPUT "DO NOT INCLUDE -T SUFFIX:";F$
420 PRINT : PRINT : HTAB (12): INVERSE : PRINT "BINARY --> TEXT": NORMAL : PRINT : HTAB (4): INVERSE : FLASH : PRINT "TRANSLATION IN PROGRESS -- WAIT": NORMAL
430 ONERR GOTO 2000
435 SOUR = 2
440 PRINT D$"OPEN ";F$;"-T"
460 PRINT D$"DELETE ";F$;"-T"
480 PRINT D$"OPEN ";F$;"-T"
500 PRINT D$"WRITE ";F$;"-T"
520 PRINT XB
540 PRINT TL
560 CALL BT
580 PRINT D$"CLOSE ";F$;"-T"
600 HOME
610 VTAB (5)
620 PRINT "BINARY FILE TRANSLATED": PRINT "TO THE HEX-TEXT FILE:";F$;"-T"
640 PRINT : PRINT : PRINT BL$
660 INPUT "CONVERT ANOTHER FILE?";Z$
680 Z$ = LEFT$ (Z$,1)
700 IF Z$ = "Y" GOTO 80
705 POKE 104,8
710 POKE 8 * 256,0
720 END
999 REM RETRIEVE DEC #
1000 L = LEN (ARG$)
1002 IF L = 0 THEN RET = 66000: RETURN
1003 IF L = 1 AND ARG$ = "$" THEN RET = 65000: RETURN
1005 RET = VAL (ARG$)
1010 IF LEFT$ (ARG$,1) = "$" THEN 1050
1015 FOR I = 1 TO L
1020 C$ = MID$ (ARG$,I,1)
1025 IF ASC (C$) < 48 OR ASC (C$) > 57 THEN RET = 66000:I = L: GOTO 1030
1030 NEXT I
1035 RETURN
1050 RET = 0
1060 FOR I = 1 TO L - 1
1080 LT$ = RIGHT$ (ARG$,1)
1100 IF ASC (LT$) > = 48 AND ASC (LT$) < = 57 THEN RET = RET + 16 ^ (I - 1) * VAL (LT$): GOTO 1200
1120 IF ASC (LT$) < 65 OR ASC (LT$) > 70 THEN RET = 65000:I = L: GOTO 1250
1140 NM = ASC (LT$) - 65 + 10
1160 RET = RET + 16 ^ (I - 1) * NM
1200 ARG$ = LEFT$ (ARG$,L - I)
1250 NEXT I
1300 RETURN
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 660
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
2100 ON SOUR GOTO 250,400
2200 END
SAVE BITXT
LOCK BITXT
//go.sysin dd *
if [ `wc -c < a-bitxt` != 4027 ]; then
made=FALSE
echo error transmitting a-bitxt --
echo length should be 4027, not `wc -c < a-bitxt`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-bitxt
echo -n ' '; ls -ld a-bitxt
fi
echo Extracting a-dis
sed 's/^X//' <<'//go.sysin dd *' >a-dis
NEW
1 REM ARKABLE PROGRAM
2 REM TO DISASSEMBLE
3 REM PROGRAMS FROM CORE
4 REM TO A TEXT FILE!
5 REM YOU GIVE IT START
6 REM AND END ADDRESSES
7 REM AND THE NAME OF THE
8 REM FILE IT PUTS IT IN.
9 REM
100 REM
101 REM POKE ASSEMBLY INTO
102 REM LOW-CORE ($300)
103 REM
110 GOSUB 7000
200 REM
201 REM GET START ADDRESS
202 REM
210 INPUT "FROM: ";H$
220 GOSUB 6000
230 IF D > = 0 GOTO 260
240 PRINT "OOPS!"
250 GOTO 210
260 LET F = D
270 LET B1 = INT (F / 256)
280 LET B2 = F - 256 * B1
290 POKE 58,B2: POKE 59,B1
300 REM
301 REM GET END ADDRESS
302 REM
310 INPUT " TO : ";H$
320 GOSUB 6000
330 IF D > = 0 GOTO 360
340 PRINT "OOPS!"
350 GOTO 310
360 LET T = D
370 IF T > = F GOTO 400
380 PRINT "WILL NEVER GET THERE!"
390 GOTO 310
400 REM
401 REM GET FILENAME
402 REM IF NONE THEN
403 REM OUTPUT TO SCREEN
404 REM
410 INPUT "FILE: ";F$
420 IF LEN (F$) = 0 GOTO 500
430 ONERR GOTO 450
440 PRINT CHR$ (4);"DELETE ";F$
450 POKE 216,0
470 PRINT CHR$ (4);"OPEN ";F$
480 PRINT CHR$ (4);"WRITE ";F$
500 REM
501 REM DO THE DISASSEMBLY.
502 REM
510 GOSUB 8000
520 FOR I = 512 TO 511 + PEEK (6)
530 PRINT CHR$ ( PEEK (I));
540 NEXT I
550 LET F = 256 * PEEK (59) + PEEK (58)
560 IF F < = T GOTO 510
600 REM
601 REM IF OUTPUT TO FILE
602 REM THEN CLOSE FILE
603 REM
610 PRINT CHR$ (13)
620 IF LEN (F$) = 0 GOTO 9999
630 PRINT CHR$ (4);"CLOSE ";F$
640 GOTO 9999
6000 REM
6001 REM HEX TO DEC CONVERT.
6002 REM
6010 LET D = 0
6020 FOR I = 1 TO LEN (H$)
6030 LET H = ASC ( MID$ (H$,I,1)) - 48
6040 IF H > = 0 AND H < = 9 GOTO 6070
6050 LET H = H - 7
6060 IF H < 10 OR H > 15 GOTO 6200
6070 LET D = 16 * D + H
6080 NEXT I
6090 RETURN
6200 REM
6201 REM HEX NUMBER ERROR.
6202 REM
6210 LET D = - 1
6220 RETURN
7000 REM
7001 REM POKE ASSEMBLY ROUTINE
7002 REM USED BY BELOW.
7003 REM
7010 FOR I = 768 TO 785
7020 READ B
7030 POKE I,B
7040 NEXT I
7050 RETURN
7100 REM
7101 REM LISTING OF ASSEMBLY
7102 REM ROUTINE USED TO CALL
7103 REM MONITOR DISASSEMBLER.
7104 REM
7110 REM ORG $300
7111 REM PTR EQU $6
7112 REM YSV EQU $7
7113 REM BUF EQU $200
7114 REM LIST2 EQU $FE63
7115 REM *
7116 REM * CALL DISASSEMBLER.
7117 REM *
7118 REM DOIT LDA #1
7119 REM JSR LIST2
7120 REM RTS
7121 REM *
7122 REM * INTERCEPT ROUTINE.
7123 REM *
7124 REM ZAP STY YSV
7125 REM LDY PTR
7126 REM STA BUF,Y
7127 REM LDY YSV
7128 REM INC PTR
7129 REM RTS
7200 REM
7201 REM THIS IS THE CODE
7202 REM FOR ABOVE THAT
7203 REM WE POKE INTO CORE.
7204 REM
7220 DATA 169,001,032,099
7230 DATA 254,096,132,007
7240 DATA 164,006,153,000
7250 DATA 002,164,007,230
7260 DATA 006,096
8000 REM
8001 REM DISASSEMBLE PROGRAM
8002 REM FROM MEMORY.
8003 REM
8030 LET S1 = PEEK (54)
8040 LET S2 = PEEK (55)
8050 POKE 54,6: POKE 55,3
8060 POKE 6,0
8070 CALL 768
8080 POKE 54,S1: POKE 55,S2
8090 RETURN
9999 END
SAVE DIS
LOCK DIS
//go.sysin dd *
if [ `wc -c < a-dis` != 2985 ]; then
made=FALSE
echo error transmitting a-dis --
echo length should be 2985, not `wc -c < a-dis`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-dis
echo -n ' '; ls -ld a-dis
fi
echo Extracting a-frogprog
sed 's/^X//' <<'//go.sysin dd *' >a-frogprog
NEW
10 REM FROGGY INTRO TO KERMIT
20 REM NOTE FROGGY ART
25 REM COPYRIGHT 1980 BY APPLE COMPUTER
30 PRINT CHR$ (4);"BLOAD FROGPIX,A$2000
40 POKE - 16304,0: POKE - 16297,0
45 POKE - 16302,0
50 PRINT CHR$ (4);"EXEC GOKERM"
SAVE FROGPROG
LOCK FROGPROG
//go.sysin dd *
if [ `wc -c < a-frogprog` != 265 ]; then
made=FALSE
echo error transmitting a-frogprog --
echo length should be 265, not `wc -c < a-frogprog`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-frogprog
echo -n ' '; ls -ld a-frogprog
fi
echo Extracting a-hello
sed 's/^X//' <<'//go.sysin dd *' >a-hello
NEW
10 D$ = CHR$ (4)
50 PRINT D$;"EXEC GOKERM"
SAVE HELLO
LOCK HELLO
//go.sysin dd *
if [ `wc -c < a-hello` != 71 ]; then
made=FALSE
echo error transmitting a-hello --
echo length should be 71, not `wc -c < a-hello`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-hello
echo -n ' '; ls -ld a-hello
fi
echo Extracting a-kermit
sed 's/^X//' <<'//go.sysin dd *' >a-kermit
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"
365 PRINT : PRINT " HAYES MICROMODEM VERSION"
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
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
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 KERMIT
LOCK KERMIT
//go.sysin dd *
if [ `wc -c < a-kermit` != 25467 ]; then
made=FALSE
echo error transmitting a-kermit --
echo length should be 25467, not `wc -c < a-kermit`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-kermit
echo -n ' '; ls -ld a-kermit
fi
echo Extracting a-p-u
sed 's/^X//' <<'//go.sysin dd *' >a-p-u
NEW
1 POKE 33,40
10 REM MAIN ROUTINE PACK/UNPACK
12 REM ROBERT M. HOLLEY, JR.
13 REM SE REGIONAL DATA CENTER, MIAMI, FL
14 REM JULY, 1985
20 QU = 0
25 D$ = CHR$ (13) + CHR$ (4)
30 LOC = 24831
32 TXT2BIN = 830:BIN2TXT = 780
35 PACK = 24700:UNPACK = 24576
190 GOSUB 45000: REM GET STACK SAVER
200 GOSUB 50000: REM GET BIN2TEXT
210 GOSUB 55000: REM GET TEXT2BIN
220 GOSUB 60000: REM GET P/U
250 HOME
251 PRINT "(P)ACK OR (U)NPACK?";
252 POKE - 16368,0: GET PU$
255 IF PU$ < > "P" AND PU$ < > "U" THEN PRINT : GOTO 251
257 PRINT PU$: PRINT
260 IF PU$ = "P" THEN GOSUB 1000
270 IF PU$ = "U" THEN GOSUB 2000
300 IF QUIT = 1 THEN END
350 GOTO 250
999 REM PACK PIX TO BIN AND/OR TEXT
1000 PRINT : INPUT "PACK PIX FROM HIRES SCREEN 1 OR 2?";SS$
1005 S = VAL (SS$)
1010 IF S < > 1 AND S < > 2 THEN 1000
1020 PRINT : PRINT "PACK PIX FROM (M)EMORY OR (F)ILE?";
1022 POKE - 16368,0: GET MF$
1030 IF MF$ < > "M" AND MF$ < > "F" THEN PRINT : GOTO 1020
1035 PRINT MF$: PRINT
1040 IF MF$ = "M" THEN 1200
1050 PRINT : INPUT "NAME OF UNPACKED PIX FILE:";UF$
1055 IF UF$ = "" THEN 1050
1060 SPEC$ = "BLOAD " + UF$ + ",A" + STR$ (S * 8192)
1065 OK = 1:SOURCE = 1
1070 GOSUB 10000
1080 IF OK THEN 1200
1090 GOTO 1050
1200 PRINT : INPUT "WOULD YOU LIKE TO DISPLAY PIX?";Z$
1205 GOSUB 9900
1206 IF Z$ = "N" THEN 1250
1210 GOSUB 12000
1220 PRINT : INPUT "IS PIX OK?";Z$
1225 GOSUB 9900
1240 IF Z$ = "N" THEN 1000
1250 POKE 0,LOC - ( INT (LOC / 256) * 256): POKE 1, INT (LOC / 256): POKE 230,S * 32
1260 CALL PACK
1265 LN = PEEK (0) + PEEK (1) * 256 - LOC: REM LENGTH
1270 PRINT : PRINT "NAME OF FILE(S) TO STORE PACKED DATA IN": PRINT "DO NOT INCLUDE -PAC OR -PAC-T SUFFIX.": PRINT : INPUT "NAME:";PF$
1275 IF PF$ = "" THEN 1270
1280 PRINT : INPUT "SAVE PACKED PIX IN BINARY FILE?";Z$
1290 GOSUB 9900
1300 IF Z$ = "N" THEN 1400
1315 OK = 1:SOURCE = 2
1320 SPEC$ = "BSAVE " + PF$ + "-PAC,A" + STR$ (LOC) + ",L" + STR$ (LN)
1325 GOSUB 10000
1330 IF NOT OK THEN 1280
1340 PRINT : PRINT "PACKED PIX --> BIN FILE: ";PF$;"-PAC"
1345 PRINT : PRINT
1400 PRINT : INPUT "SAVE PACKED PIX IN TEXT FILE?";Z$
1405 GOSUB 9900
1410 IF Z$ = "N" THEN 1500
1430 POKE 2,(LN + 39) / 40
1440 POKE 3,LOC - ( INT (LOC / 256) * 256): POKE 4, INT (LOC / 256)
1445 OK = 1:SOURCE = 3
1450 ONERR GOTO 12500
1455 PRINT D$"OPEN ";PF$;"-PAC-T"
1460 PRINT D$"DELETE ";PF$;"-PAC-T"
1465 PRINT D$"OPEN ";PF$;"-PAC-T"
1470 PRINT D$"WRITE ";PF$;"-PAC-T"
1475 CALL BIN2TXT
1480 PRINT D$"CLOSE ";PF$;"-PAC-T"
1490 IF NOT OK THEN 1400
1495 PRINT "PACKED PIX --> TEXT FILE: ";PF$;"-PAC-T"
1497 PRINT : PRINT
1500 PRINT : PRINT : INPUT "PACK OR UNPACK ANOTHER PIX?";Z$
1505 GOSUB 9900
1510 IF Z$ = "Y" THEN QU = 0: RETURN
1520 QU = 1: RETURN
1999 REM UNPACK ROUTINE
2000 MSG1$ = "NAME OF DISK FILE" + CHR$ (13) + " TO STORE DATA"
2009 PRINT : PRINT : PRINT "UNPACK FROM (T)EXT OR (B)IN FILE?";
2010 POKE - 16368,0: GET TB$
2015 IF TB$ < > "T" AND TB$ < > "B" THEN PRINT : GOTO 2009
2020 PRINT TB$: PRINT
2025 PRINT : PRINT "NAME OF PACKED FILE": INPUT "W/O -PAC OR -PAC-T SUFFIX?";PF$
2030 IF TB$ = "T" THEN 2100
2040 OK = 1:SOURCE = 4
2050 SPEC$ = "BLOAD " + PF$ + "-PAC,A" + STR$ (LOC)
2060 GOSUB 10000
2070 IF OK THEN 2200
2080 GOTO 2025
2100 HOME : VTAB 12: HTAB 3: PRINT "DECODING TEXT FILE-- PLEASE WAIT"
2110 OK = 1:SOURCE = 5
2120 ONERR GOTO 12500
2130 PRINT D$"VERIFY ";PF$;"-PAC-T"
2135 PRINT D$"OPEN ";PF$;"-PAC-T"
2140 PRINT D$"READ ";PF$;"-PAC-T"
2150 Y = LOC:LN = 0
2155 FOR X = 0 TO 10000
2157 CALL TXT2BIN
2160 POKE Y + X, PEEK (829)
2162 LN = LN + 1
2165 NEXT X
2167 IF NOT OK THEN 2009
2170 HOME
2200 PRINT : INPUT "UNPACK PIX TO HIRES SCREEN 1 OR 2?";SS$
2205 S = VAL (SS$)
2210 IF S < > 1 AND S < > 2 THEN 2200
2220 POKE 0,LOC - ( INT (LOC / 256) * 256): POKE 1, INT (LOC / 256): POKE 230,32 * S
2230 CALL UNPACK
2300 PRINT : PRINT "DO YOU WISH TO-": PRINT : PRINT " (V)IEW PICTURE": PRINT " (N)ORMAL PIX SAVE TO BIN FILE": PRINT " (P)ACKED PIX SAVE TO BIN FILE": PRINT " (C)ONTINUE PACK/UNPACK": PRINT " (Q)UIT PROGRAM": PRINT
2310 POKE - 16368,0: GET CH$: PRINT CH$
2400 IF CH$ = "V" THEN GOSUB 12000: GOTO 2300
2500 IF CH$ < > "N" THEN 2600
2510 PRINT : PRINT MSG1$;: INPUT NF$
2515 IF NF$ = "" THEN 2510
2520 OK = 1:SOURCE = 6
2530 SPEC$ = "BSAVE " + NF$ + ",A" + STR$ (S * 8192) + ",L" + STR$ (8192)
2540 GOSUB 10000
2550 IF NOT OK THEN 2510
2555 PRINT "PIX --> NORMAL BIN FILE:";NF$: PRINT : PRINT
2560 GOTO 2300
2600 IF CH$ < > "P" THEN 2700
2610 PRINT : PRINT MSG1$: INPUT "W/O -PAC SUFFIX?";PF$
2615 IF PF$ = "" THEN 2610
2620 OK = 1:SOURCE = 7
2630 SPEC$ = "BSAVE " + PF$ + "-PAC,A" + STR$ (LOC) + ",L" + STR$ (LN)
2640 GOSUB 10000
2650 IF NOT OK THEN 2610
2655 PRINT "PACKED PIX --> BIN FILE:";PF$: PRINT : PRINT
2660 GOTO 2300
2700 IF CH$ < > "C" THEN 2800
2710 QU = 0: RETURN
2800 IF CH$ < > "Q" THEN 2900
2810 QU = 1: RETURN
2900 PRINT : PRINT "IMPROPER CHOICE-- CHOOSE AGAIN": GOTO 2310
9899 REM CHECK YES OR NO ANSWER
9900 Z$ = LEFT$ (Z$,1)
9905 IF Z$ = "Y" OR Z$ = "N" THEN RETURN
9910 INVERSE
9920 PRINT : INPUT "ANSWER Y OR N:";Z$
9925 NORMAL
9930 GOTO 9900
9999 REM BLOAD/BSAVE SUBROUTINE
10000 ONERR GOTO 10200
10010 PRINT D$;SPEC$
10020 OK = 1: RETURN
10200 GOSUB 13000: RETURN
11999 REM DISPLAY HIRES PIX
12000 POKE - 16304,0: POKE - 16297,0: POKE - 16302,0
12005 IF S = 2 THEN POKE - 16299,0
12010 POKE - 16368,0: GET Z$
12020 TEXT : HOME : RETURN
12499 REM ERROR HANDLER
12500 Y = PEEK (222):OK = 0
12502 IF Y = 5 AND SOURCE = 5 AND X > 0 THEN OK = 1: CALL 768: GOTO 2167
12503 IF SOURCE = 5 THEN PRINT "PROBLEM READING TEXT FILE": PRINT "CHECK FILE NAME & DISK DRIVE": PRINT "PRESS RETURN TO CONTINUE": CALL 768: GET Z$: GOTO 2167
12505 GOSUB 13000
12510 ON SOURCE GOTO 1080,1330,1490,2167,2145,2550,2650
12999 REM PRINT DOS ERROR MSGS
13000 Y = PEEK (222):OK = 0: CALL 768
13005 PRINT : PRINT "ERROR ";Y;" * ";SO;","; PEEK (218) + PEEK (219) * 256
13007 INVERSE
13010 IF Y = 6 THEN PRINT "FILE NOT ON DISK"
13020 IF Y = 8 THEN PRINT "I/O ERROR"
13030 IF Y = 13 THEN PRINT "WRONG FILE TYPE"
13040 IF Y = 9 THEN PRINT "DISK IS FULL"
13045 IF Y = 4 THEN PRINT "WRITE PROTECTED"
13050 IF Y = 10 THEN PRINT "FILE EXISTS/LOCKED"
13057 NORMAL : PRINT
13060 IF Y < 4 OR Y > 13 THEN END
13065 IF Y = 7 OR Y = 5 OR Y = 11 OR Y = 12 THEN END
13070 CALL 768: RETURN
44999 REM GET STACK SAVER
45000 POKE 768,104: POKE 769,168: POKE 770,104: POKE 771,166: POKE 772,223: POKE 773,154: POKE 774,72: POKE 775,152: POKE 776,72: POKE 777,96
45010 RETURN
49999 REM GET BIN2TXT ROUTINE
50000 PRINT D$"BLOAD BIN2TXT,A$030C
50010 RETURN
54999 REM GET TXT2BIN ROUTINE
55000 PRINT D$"BLOAD TXT2BIN,A$033E
55010 RETURN
59999 REM GET PACK/UNPACK ROUTINE
60000 PRINT D$"BLOAD PACK/UNPACK"
60010 POKE 24635,2: REM ASSY PATCH
60015 RETURN
SAVE P/U
LOCK P/U
//go.sysin dd *
if [ `wc -c < a-p-u` != 6975 ]; then
made=FALSE
echo error transmitting a-p-u --
echo length should be 6975, not `wc -c < a-p-u`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-p-u
echo -n ' '; ls -ld a-p-u
fi
echo Extracting a-p-u-go
sed 's/^X//' <<'//go.sysin dd *' >a-p-u-go
NEW
1 POKE 33,40
10 REM PROGRAM TO INTRO & DOC
20 REM APPLE II PICTURE UTIL
25 REM AFTER INTRO/DOC, RUNS
30 REM PROGRAM P/U
40 D$ = CHR$ (4)
45 HOME : PRINT "SERDAC APPLE II HI-RES PICTURE UTILITY"
46 PRINT : PRINT "COMPACTS STORED OR ACTUAL APPLE H/R PIX": PRINT "& CONVERTS COMPACT BINARY TO ASCII HEX": PRINT "TEXT FILE SO IT CAN BE UP/DOWNLOADED."
47 PRINT "ALSO DECODES HEX TEXT FILES BACK TO": PRINT "UNCOMPACTED BIN FILES OR ACTUAL H/R PIX"
48 PRINT : PRINT "PIX COMPACTION ROUTINE BY DAV HOLLE &": PRINT "MARK PELCZARSKI, SOFTALK, 5/83, P. 237": PRINT
57 PRINT "BASED ON IDEAS BY M.GEIER & B. SHERMAN,": PRINT "MIAMI'S 'BIG APPLE' BULLETIN BOARD SYS"
59 PRINT : PRINT "APPLESOFT PROGRAM P/U & 6502 ASSY PROG": PRINT "BIN2TXT WRITTEN SPECIALLY FOR ARTNET": PRINT : PRINT " BY ROBERT M. HOLLEY, JR.": PRINT : PRINT "S.E. REGIONAL DATA CENTER, MIAMI, FLA": PRINT " MAY, 1985": PRINT :
65 INPUT "NEED INSTRUCTIONS?";Z$
70 IF LEFT$ (Z$,1) < > "Y" THEN 2045
72 HOME
999 HOME
1000 PRINT "INSTRUCTIONS FOR USING SERDAC APPLE II"
1005 PRINT " PICTURE UTILITY"
1010 PRINT : PRINT
1015 PRINT "THE FIRST CHOICE YOU WILL HAVE IN USING"
1020 PRINT "THIS PROGRAM IS WHETHER TO (P)ACK OR"
1025 PRINT "TO (U)NPACK AN APPLE II HI-RES PICTURE."
1030 PRINT : PRINT
1035 PRINT "*** PACK ***"
1040 PRINT
1045 PRINT "THE 'PACK' FEATURE ALLOWS YOU TO"
1050 PRINT "'COMPRESS' A HI-RES APPLE PICTURE INTO"
1055 PRINT "THE SMALLEST POSSIBLE MEMORY "
1060 PRINT "AND/OR DISK FILE SPACE. BECAUSE OF"
1065 PRINT "THE UNIQUE WAY APPLE PICTURES ARE"
1070 PRINT "STORED IN MEMORY, AND THE LARGE AREAS"
1075 PRINT "OF SOLID COLOR WHICH COMPOSE MANY"
1080 PRINT "PICTURES, IT IS POSSIBLE TO COMPRESS"
1085 PRINT "SOME PICTURES BY AS MUCH AS 5 TIMES;"
1090 PRINT "MOST CAN BE COMPRESSED BY AT LEAST A"
1095 PRINT "FACTOR OF TWO. THAT MEANS THAT"
1096 PRINT
1097 INPUT "PRESS RETURN TO CONTINUE";Z$
1099 HOME
1100 PRINT "INSTEAD OF TAKING UP 34 SECTORS ON A"
1105 PRINT "DISK TO STORE A PICTURE, YOU WILL"
1110 PRINT "NEED ONLY 7-17 SECTORS. MORE"
1115 PRINT "IMPORTANTLY, IF YOU PLAN TO TRANSMIT A"
1120 PRINT "PICTURE FROM ONE COMPUTER TO ANOTHER,"
1125 PRINT "IT WILL TAKE ONLY 20-50% OF THE"
1130 PRINT "TRANSMISSION TIME REQUIRED FOR AN"
1135 PRINT "AN UNCOMPRESSED PICTURE.
1140 PRINT
1145 PRINT "THE 'PACK' FEATURE ALSO INCLUDES AN "
1150 PRINT "OPTION TO CONVERT/STORE THE COMPRESSED"
1155 PRINT "BINARY PICTURE AS A 'HEX TEXT' FILE."
1160 PRINT "HEX TEXT FILES ARE TWICE AS BIG AS THE"
1165 PRINT "CORRESPONDING BINARY FILE FOR THE SAME"
1170 PRINT "PICTURE, SO THEY DON'T MAKE VERY GOOD"
1175 PRINT "SENSE FOR PERMANENT STORAGE, BUT THEY"
1180 PRINT "ARE ALMOST INDISPENSABLE IF YOU PLAN"
1185 PRINT "TO TRANSMIT PICTURES TO ANOTHER"
1190 PRINT "COMPUTER. MOST APPLE II DATA TRANSFER"
1195 PRINT "PROGRAMS WILL NOT ALLOW YOU TO TRANSFER"
1200 PRINT "BINARY FILES.
1203 PRINT
1205 INPUT "PRESS RETURN TO CONTINUE";Z$
1206 HOME
1210 PRINT "IF YOU DECIDE TO 'PACK' A PICTURE, YOU"
1215 PRINT "WILL * FIRST * BE ASKED TO CHOOSE"
1220 PRINT "WHICH HI-RES SCREEN (1 OR 2) TO PACK"
1225 PRINT "IT FROM. THERE ARE REALLY THREE"
1230 PRINT "POSSIBILITIES HERE:"
1232 PRINT
1235 PRINT "(1) YOU ARE CURRENTLY LOOKING AT A HI-
1240 PRINT "RES PICTURE, IN WHICH CASE YOU SHOULD"
1245 PRINT "KNOW WHICH SCREEN IS BEING VIEWED (IN"
1250 PRINT "MOST CASES, IT'S SCREEN 1); THAT'S THE"
1255 PRINT "ONE YOU WANT TO PACK FROM.
1257 PRINT
1260 PRINT "(2) YOU HAVE LOADED A PICTURE TO HI-RES"
1265 PRINT "SCREEN 1 ($2000-$3FFF) OR TO SCREEN 2"
1270 PRINT "($4000-$5FFF), BUT IT'S NOT UP ON YOUR"
1275 PRINT "SCREEN. THE AREA YOU LOADED IS THE ONE"
1280 PRINT "YOU WANT TO PACK FROM.
1281 VTAB (23)
1282 INPUT "PRESS RETURN TO CONTINUE";Z$
1283 HOME
1285 PRINT "(3) THE PICTURE YOU WANT IS NOT IN THE"
1290 PRINT "MEMORY YET; IT IS IN A BINARY DISK FILE."
1295 PRINT "IN THAT CASE, YOU MAY SELECT EITHER"
1300 PRINT "SCREEN. THE PROGRAM WILL LOAD THE FILE"
1305 PRINT "TO THAT MEMORY AND PACK IT FROM THERE."
1308 PRINT
1315 PRINT "* SECOND *, YOU WILL BE ASKED, 'PACK"
1320 PRINT "PIX FROM (M)EMORY OR (F)ILE?'"
1325 PRINT "(M)EMORY COVERS POSSIBILITIES (1) AND"
1330 PRINT "(2) ABOVE. (F)ILE COVERS THE THIRD "
1335 PRINT "POSSIBILITY."
1338 PRINT
1350 PRINT "* THIRD *, IF YOU SELECT (F)ILE, YOU'LL"
1355 PRINT "BE ASKED THE NAME OF THE BINARY FILE"
1360 PRINT "THAT THE PICTURE IS STORED IN. THIS"
1365 PRINT "SHOULD ALWAYS BE A FILE NAME WHOSE"
1370 PRINT "CATALOG ENTRY HAS A 'B' AND A '033' OR"
1375 PRINT "'034' IN FRONT OF IT-- A BINARY FILE OF"
1380 PRINT "33-34 SECTORS."
1382 VTAB (23)
1383 INPUT "PRESS RETURN TO CONTINUE";Z$
1384 HOME
1390 PRINT
1395 PRINT "* FOURTH *, YOU WILL BE ASKED IF YOU"
1400 PRINT "WOULD LIKE TO DISPLAY PIX?"
1405 PRINT
1410 PRINT "* FIFTH *, YOU WILL BE ASKED IF"
1415 PRINT "'PIX IS OK?'"
1420 PRINT
1425 PRINT "* SIXTH *, IF PIX IS OK, YOU WILL BE"
1430 PRINT "ASKED FOR A FILE NAME UNDER WHICH TO"
1435 PRINT "STORE THE COMPRESSED BINARY AND/OR HEX"
1440 PRINT "TEXT."
1445 PRINT
1450 PRINT "THE 'PACK' FEATURE AUTOMATICALLY"
1455 PRINT "APPENDS THE SUFFIX -PAC TO ANY NAME"
1460 PRINT "YOU SPECIFY AND STORES THE COMPRESSED"
1465 PRINT "BINARY AS NAME-PAC. SIMILARLY, IT"
1470 PRINT "APPENDS THE SUFFIX -PAC-T TO ANY NAME"
1475 PRINT "YOU SPECIFY AND STORES COMPRESSED HEX"
1480 PRINT "TEXT FILES AS NAME-PAC-T.
1482 VTAB (23)
1484 INPUT "PRESS RETURN TO CONTINUE";Z$
1485 HOME
1490 PRINT "* SEVENTH *, YOU WILL BE ASKED IF YOU"
1495 PRINT "WISH TO 'SAVE PACKED PIX IN BINARY
1500 PRINT "FILE?' (EXCELLENT FOR DISK STORAGE)."
1510 PRINT
1515 PRINT "* EIGHTH *, YOU WILL BE ASKED IF YOU"
1520 PRINT "WISH TO 'SAVE PACKED PIX IN TEXT FILE?'"
1525 PRINT "(WASTEFUL OF DISK STORAGE, BUT NEEDED"
1530 PRINT "IF YOU WISH TO TRANSMIT THE PICTURE)."
1540 PRINT
1545 PRINT "* NINTH *, AFTER PICTURE IS STORED,"
1550 PRINT "YOU WILL BE ASKED IF YOU WISH TO"
1555 PRINT "'PACK OR UNPACK ANOTHER FILE?'. IF YOU"
1560 PRINT "SAY 'NO', THE PROGRAM WILL QUIT. IF"
1565 PRINT "YOU SAY 'YES', THE PROGRAM WILL RETURN"
1570 PRINT "TO THE VERY FIRST CHOICE YOU HAD--"
1575 PRINT "'(P)ACK OR (U)NPACK?'.
1576 VTAB (23)
1577 INPUT "PRESS RETURN TO CONTINUE";Z$
1580 HOME
1655 PRINT " ** UNPACK ** "
1660 PRINT : PRINT
1665 PRINT "THE 'UNPACK' FEATURE ALLOWS YOU TO"
1670 PRINT "'DECOMPACT' AN APPLE II PICTURE STORED"
1675 PRINT "IN EITHER OF THE TYPES OF COMPACTED"
1680 PRINT "FILES PRODUCED BY THE 'PACK' FEATURE OF"
1685 PRINT "THIS PROGRAM. UNPACKING IS NECESSARY"
1690 PRINT "TO VIEW THE PICTURE ON YOUR SCREEN OR"
1695 PRINT "TO STORE IT IN AN ORDINARY DECOMPACTED"
1700 PRINT "FILE THE WAY APPLE II PICTURES ARE"
1710 PRINT "NORMALLY STORED (OTHER PEOPLE AND"
1715 PRINT "PROGRAMS CAN'T LOOK AT A COMPACTED"
1720 PRINT "PICTURE UNLESS THEY HAVE ACCESS TO THIS"
1725 PRINT "UTILITY PROGRAM). TO DECOMPACT A HEX"
1730 PRINT "TEXT FILE BACK TO SOMETHING VIEWABLE, "
1735 PRINT "THE 'UNPACK' FEATURE ALSO HAS TO"
1740 PRINT "CONVERT THE HEX TEXT FORMAT BACK TO"
1745 PRINT "BINARY."
1746 VTAB (23)
1748 INPUT "PRESS RETURN TO CONTINUE";Z$
1750 HOME
1755 PRINT "IF YOU DECIDE TO 'UNPACK' A PICTURE,"
1760 PRINT "YOU WILL * FIRST * BE ASKED WHETHER YOU"
1765 PRINT "ARE UNPACKING IT 'FROM A (T)EXT FILE OR"
1770 PRINT "FROM A (B)INARY FILE?' COMPRESSED HEX"
1775 PRINT "TEXT FILES PRODUCED BY THE 'PACK'"
1780 PRINT "FEATURE ALL END IN -PAC-T (IF YOU"
1785 PRINT "HAVE A COMPACTED HEX TEXT FILE YOU HAVE"
1790 PRINT "TRANSFERRED FROM ANOTHER MACHINE, MAKE"
1795 PRINT "SURE TO RENAME IT 'SOMETHING-PAC-T' IF"
1800 PRINT "IT DOESN'T ALREADY HAVE THIS SUFFIX)."
1805 PRINT "COMPACTED BINARY FILES PRODUCED BY THE"
1810 PRINT "'PACK' FEATURE ALL END IN -PAC"
1820 PRINT
1825 PRINT "* SECOND *, YOU WILL BE ASKED THE 'NAME"
1830 PRINT "OF PACKED FILE?'-- WITHOUT THE -PAC-T"
1835 PRINT "OR -PAC SUFFIX."
1836 VTAB (23)
1838 INPUT "PRESS RETURN TO CONTINUE";Z$
1840 HOME
1845 PRINT "AFTER YOU GIVE THE NAME, IF THE FILE IS"
1850 PRINT "A HEX TEXT FILE, THE PROGRAM WILL WHIRR"
1855 PRINT "AWAY FOR SEVERAL MINUTES DECODING THE"
1860 PRINT "HEX TEXT BACK TO BINARY. YOU WILL SEE"
1865 PRINT "THE MESSAGE,'DECODING TEXT FILE--PLEASE"
1870 PRINT "WAIT'. IN CONTRAST, IT ONLY TAKES A"
1875 PRINT "FEW SECONDS TO DECOMPACT A COMPACTED"
1880 PRINT "BINARY FILE."
1885 PRINT
1890 PRINT "* THIRD *, YOU WILL BE ASKED 'UNPACK "
1895 PRINT "PIX TO HIRES SCREEN 1 OR 2?'. UNLESS"
1900 PRINT "YOU HAVE A SPECIAL REASON TO UNPACK IT"
1905 PRINT "TO SCREEN 2, ANSWER 1.
1910 PRINT
1915 PRINT "* FOURTH *, YOU WILL BE ASKED IF YOU"
1920 PRINT "WISH TO '(V)IEW PICTURE, (N)ORMAL"
1925 PRINT "SAVE TO BINARY FILE, (P)ACKED PIX"
1930 PRINT "SAVE TO BINARY FILE, (C)ONTINUE TO"
1935 PRINT "PACK/UNPACK, OR (Q)UIT'"
1936 VTAB (23)
1938 INPUT "PRESS RETURN TO CONTINUE";Z$
1940 HOME
1945 PRINT "(V)IEW LETS YOU LOOK AT THE PICTURE"
1950 PRINT "YOU JUST DECOMPACTED"
1955 PRINT
1960 PRINT "(N)ORMAL STORES THE PICTURE IN AN "
1965 PRINT "UNCOMPACTED BINARY FILE (33-34"
1970 PRINT "SECTORS); YOU WILL BE ASKED FOR A FILE"
1975 PRINT "NAME TO STORE IT IN.
1980 PRINT
1985 PRINT "(P)ACKED STORES THE PICTURE IN A"
1990 PRINT "COMPRESSED BINARY FILE (7-17 SECTORS);"
1995 PRINT "YOU WILL BE ASKED FOR A FILE NAME TO"
2000 PRINT "STORE IT IN-- JUST GIVE A 'ROOT'"
2005 PRINT "NAME; DO NOT INCLUDE THE -PAC SUFFIX."
2007 PRINT
2010 PRINT "(C)ONTINUE TAKES YOU BACK TO THE VERY"
2015 PRINT "FIRST CHOICE YOU HAD-- '(P)ACK OR"
2020 PRINT "(U)NPACK?'
2025 PRINT
2030 PRINT "(Q)UIT EXITS THE P/U PICTURE UTILITY"
2038 VTAB (23)
2040 INPUT "PRESS RETURN TO RUN PIX UTILITY PROGRAM";Z$
2045 HOME : VTAB (15): PRINT "LOADING PICTURE UTILITY PROGRAM"
3000 PRINT D$;"RUN P/U"
SAVE P/U-GO
LOCK P/U-GO
//go.sysin dd *
if [ `wc -c < a-p-u-go` != 10064 ]; then
made=FALSE
echo error transmitting a-p-u-go --
echo length should be 10064, not `wc -c < a-p-u-go`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-p-u-go
echo -n ' '; ls -ld a-p-u-go
fi
echo Extracting a-texttoprint
sed 's/^X//' <<'//go.sysin dd *' >a-texttoprint
NEW
1 REM TEXTTOPRINT
2 REM NOTE THIS PROGRAM ONLY READS UPPER CASE ASCII
3 REM UNLESS YOUR APPLE IS EQUIPPED WITH U/L CASE
5 HOME : TEXT : VTAB 12
100 D$ = CHR$ (13) + CHR$ (4)
110 PRINT "INSERT DISK WITH YOUR TEXT FILE": PRINT "IN THE APPROPRIATE DRIVE."
111 PRINT : INPUT "TYPE 'GO' WHEN READY ";G$: IF G$ < > "GO" THEN 111
112 PRINT : INPUT "DO YOU NEED CATALOG?";Z$
113 IF LEFT$ (Z$,1) < > "Y" THEN 116
115 PRINT D$"CATALOG"
116 PRINT
120 INPUT "ENTER FILE NAME:";F$: ONERR GOTO 230
121 PRINT D$"VERIFY ";F$
122 PRINT : INPUT "DO YOU WANT A PRINTOUT?";P$
126 IF P$ < > "Y" AND P$ < > "YES" THEN 130
127 PRINT : INPUT "PRINTER IS IN SLOT?";N
128 IF N > 7 OR N < 1 THEN 128:
129 PRINT : PRINT "READY PRINTER IN SLOT ";N: PRINT : INPUT "THEN, PRESS RETURN";Z$: PRINT D$"PR#";N
130 PRINT D$"MONI"
140 PRINT D$"OPEN"F$;D$"READ"F$
160 ONERR GOTO 250
180 GET C$: PRINT C$;: GOTO 180
230 IF PEEK (222) = 6 THEN PRINT "NO SUCH FILE ON DISK": PRINT : GOTO 120
250 PRINT D$"CLOSE"F$
255 PRINT D$"PR#0": END
300 REM M BOB SANDER-CEDERLOF
310 REM REVISED BY DAVID SPRUNG
315 REM REVISED BY R. HOLLEY 3/20/85
400 REM DOWNLOADED FROM MIAMI BIG APPLE 305-948-8000
SAVE TEXTTOPRINT
LOCK TEXTTOPRINT
//go.sysin dd *
if [ `wc -c < a-texttoprint` != 1250 ]; then
made=FALSE
echo error transmitting a-texttoprint --
echo length should be 1250, not `wc -c < a-texttoprint`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 a-texttoprint
echo -n ' '; ls -ld a-texttoprint
fi
echo Extracting b-t.s
sed 's/^X//' <<'//go.sysin dd *' >b-t.s
* SOURCE TO B-T BINARY FILE
* REVERSE ENGINEERED BY ZBEN
* SEPTEMBER 1986
*
ORG $95C7 ; AS PER ORIG
CHUNKS EQU 1 ; # 256 X 40 CHUNKS
BLOCKS EQU 2 ; # 40 BYTE BLOCKS
POINTL EQU 3 ; DATA POINTER
POINTH EQU 4 ; DATA POINTER
TEMP EQU 6 ; TEMP STORAGE
CROUT EQU $FD8E ; OUTPUT CRLF
PRBYTE EQU $FDDA ; HEX OUTPUT
*
BT000 LDX #0 ; BEGIN 256 X 40
BT010 LDY #0 ; BEGIN 40 BLOCK
BT020 LDA (POINTL),Y ; GET BYTE
STY TEMP ; SAVE
JSR PRBYTE ; OUTPUT HEX
LDY TEMP ;
INY ; COUNT BYTE
CPY #40 ; DONE 40 YET?
BCC BT020 ; NO, LOOP
*
JSR CROUT ; DO CRLF
LDA POINTL ; INCREMENT
CLC ; POINTL
ADC #40 ; BY 40
STA POINTL ; REPLACE
LDA POINTH ; PROPAGATE
ADC #0 ; CARRY
STA POINTH ; (IF ANY)
INX ; COUNT 40 BLOCKS
BEQ BT030 ; AT FF-00 BREAK OUT
CPX #$FF ; AT FF
BEQ BT010 ; DO MORE
CPX BLOCKS ; IF DONE
BCC BT010 ; DO MORE
*
BT030 LDA #$FF ; GET 256
STA BLOCKS ; SET LIMIT
DEC CHUNKS ; COUNT CHUNKS
BNE BT000 ; BACK FOR MORE
RTS ; RETURN TO CALLER
*
* END OF B-T.S ZBEN 9/86
//go.sysin dd *
if [ `wc -c < b-t.s` != 992 ]; then
made=FALSE
echo error transmitting b-t.s --
echo length should be 992, not `wc -c < b-t.s`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 b-t.s
echo -n ' '; ls -ld b-t.s
fi
echo Extracting b2t
sed 's/^X//' <<'//go.sysin dd *' >b2t
0 D$ = CHR$ (4): PRINT D$"CLOSE B2T": INPUT "NAME OF FILE TO BE WRITTEN?";Z$: PRINT D$"OPEN ";Z$: PRINT D$"WRITE ";Z$: POKE 33,33: LIST 1,63999: PRINT D$"CLOSE": POKE 33,40: TEXT : END
//go.sysin dd *
if [ `wc -c < b2t` != 187 ]; then
made=FALSE
echo error transmitting b2t --
echo length should be 187, not `wc -c < b2t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 b2t
echo -n ' '; ls -ld b2t
fi
echo Extracting blp
sed 's/^X//' <<'//go.sysin dd *' >blp
PRINT "A";PEEK(43634)+256*PEEK(43635);",L";PEEK(43616)+256*PEEK(43617)
//go.sysin dd *
if [ `wc -c < blp` != 72 ]; then
made=FALSE
echo error transmitting blp --
echo length should be 72, not `wc -c < blp`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 blp
echo -n ' '; ls -ld blp
fi
echo Extracting dis-b-t
sed 's/^X//' <<'//go.sysin dd *' >dis-b-t
95C7- A2 00 LDX #$00
95C9- A0 00 LDY #$00
95CB- B1 03 LDA ($03),Y
95CD- 84 06 STY $06
95CF- 20 DA FD JSR $FDDA
95D2- A4 06 LDY $06
95D4- C8 INY
95D5- C0 28 CPY #$28
95D7- 90 F2 BCC $95CB
95D9- 20 8E FD JSR $FD8E
95DC- A5 03 LDA $03
95DE- 18 CLC
95DF- 69 28 ADC #$28
95E1- 85 03 STA $03
95E3- A5 04 LDA $04
95E5- 69 00 ADC #$00
95E7- 85 04 STA $04
95E9- E8 INX
95EA- F0 08 BEQ $95F4
95EC- E0 FF CPX #$FF
95EE- F0 D9 BEQ $95C9
95F0- E4 02 CPX $02
95F2- 90 D5 BCC $95C9
95F4- A9 FF LDA #$FF
95F6- 85 02 STA $02
95F8- C6 01 DEC $01
95FA- D0 CB BNE $95C7
95FC- 60 RTS
//go.sysin dd *
if [ `wc -c < dis-b-t` != 843 ]; then
made=FALSE
echo error transmitting dis-b-t --
echo length should be 843, not `wc -c < dis-b-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 dis-b-t
echo -n ' '; ls -ld dis-b-t
fi
echo Extracting dis-t-b
sed 's/^X//' <<'//go.sysin dd *' >dis-t-b
95C7- A2 01 LDX #$01
95C9- 20 0C FD JSR $FD0C
95CC- C9 8D CMP #$8D
95CE- F0 F9 BEQ $95C9
95D0- C9 8A CMP #$8A
95D2- F0 F5 BEQ $95C9
95D4- C9 BA CMP #$BA
95D6- 10 1A BPL $95F2
95D8- 38 SEC
95D9- E9 B0 SBC #$B0
95DB- E0 00 CPX #$00
95DD- F0 0B BEQ $95EA
95DF- 0A ASL
95E0- 0A ASL
95E1- 0A ASL
95E2- 0A ASL
95E3- 8D C5 95 STA $95C5
95E6- CA DEX
95E7- 4C C9 95 JMP $95C9
95EA- 18 CLC
95EB- 6D C5 95 ADC $95C5
95EE- 8D C6 95 STA $95C6
95F1- 60 RTS
95F2- 38 SEC
95F3- E9 07 SBC #$07
95F5- 4C D8 95 JMP $95D8
//go.sysin dd *
if [ `wc -c < dis-t-b` != 755 ]; then
made=FALSE
echo error transmitting dis-t-b --
echo length should be 755, not `wc -c < dis-t-b`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 dis-t-b
echo -n ' '; ls -ld dis-t-b
fi
echo Extracting disk
sed 's/^X//' <<'//go.sysin dd *' >disk
*A 004 HELLO
*T 002 GOKERM
*T 002 GOKERMIL
*A 002 FROGPROG
*B 034 FROGPIX
*A 070 KERMIT
*B 026 KERMITA
*T 084 KERMITA.S
*B 005 SET40
T 002 KERMIT/SETSAVE
*A 066 KERMSHELL
*T 008 MIC.T
*T 009 SUP.T
*T 006 CCS.T
*T 006 COM.T
*T 009 NOV.T
*T 002 B2T
*T 002 EBITXT
*A 012 BITXT
*T 002 ETXBIN
*A 009 TXBIN
*B 002 B-T
*B 002 T-B
*A 005 TEXTTOPRINT
*A 034 P/U-GO
*A 020 P/U
*B 002 PACK/UNPACK
*B 002 BIN2TXT
*B 002 TXT2BIN
-----
*T XXX DIS
//go.sysin dd *
if [ `wc -c < disk` != 434 ]; then
made=FALSE
echo error transmitting disk --
echo length should be 434, not `wc -c < disk`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 disk
echo -n ' '; ls -ld disk
fi
echo Extracting ebitxt
sed 's/^X//' <<'//go.sysin dd *' >ebitxt
XFP
HIMEM: 38340
POKE 104,138
POKE 138*256,0
RUN BITXT
//go.sysin dd *
if [ `wc -c < ebitxt` != 55 ]; then
made=FALSE
echo error transmitting ebitxt --
echo length should be 55, not `wc -c < ebitxt`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 ebitxt
echo -n ' '; ls -ld ebitxt
fi
echo Extracting gokermil
sed 's/^X//' <<'//go.sysin dd *' >gokermil
XFP
RUN FROGPROG
//go.sysin dd *
if [ `wc -c < gokermil` != 17 ]; then
made=FALSE
echo error transmitting gokermil --
echo length should be 17, not `wc -c < gokermil`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 gokermil
echo -n ' '; ls -ld gokermil
fi
echo Extracting kermita.s
sed 's/^X//' <<'//go.sysin dd *' >kermita.s
* KERMIT ASM AND 70 COL DISPLAY 7/16/84 T.WHITTAKER
MSB OFF
ORG $801
CHKCOM EQU $DEBE
PTRGET EQU $DFE3
VARPNT EQU $83
TYPADD EQU $FA
DATADD EQU $FC
LEN EQU $FE
PRBYTE EQU $FDDA
*
RCVSTA DFB $80 ; UART RECV DATA AVAIL BIT
XXMTSTA DFB $01 ; UART XMT REG EMPTY BIT
RCVREG DFB $C0 ; UART RECV REGISTER ADDR (LSB)
XXMTREG DFB $C2 ; UART XMT REGISTER ADDR (LSB)
STAREG DFB $C1 ; UART STATUS REGIS ADDR (LSB)
TIMOUT DFB 15 ; TIMEOUT (SECS)
SEQNUR DFB $00 ; RECV PACKET SEQUENCE NUMBER
SEQNUM DFB $00 ; XMT PACKET SEQUENCE NUMBER
QREPEAT DFB 0 ; REPEAT QUOTE CHARACTER (DISABLED)
Q8BIT DFB 0 ; 8-BIT QUOTE CHARACTER (DISABLED)
QCTRL DFB $23 ; CONTROL CHARACTER QUOTE
MARK DFB $01 ; MARK CHARACTER (START-OF-PACKET)
NUMPAD DFB 0 ; NUMBER OF PAD CHARACTERS PER PACKET
PADCHR DFB 0 ; PAD CHARACTER
EOLCHR DFB $0D ; END-OF-PACKET CHARACTER
MAXLEN DFB 96 ; MAXIMUM PACKET LENGTH
*
* MAIN ENTRY POINT...
KERMIT JMP SEND ; KER+0 SEND A PACKET
JMP CONN ; KER+3 ENTER CONNECT MODE
JMP READLN ; KER+6 FAST READ A LINE OF TEXT FROM DISK
MASK DFB $7F ; KER+9 DATA MASKING BYTE
DEBUG DFB 0 ; KER+10 SET = 1 FOR DEBUG
ECHO DFB 0 ; KER+11 SET =1 FOR CONNECT ECHO
DIRECT DFB 0 ; KER+12 SEND/RECV FLAG
ALFD DFB 0 ; KER+13 AUTO LINE FEED
TR7 DFB 0 ; KER+14 TRUNCATE LINE
BKCOL DFB 0 ; KER+15 BACKGROUND
CHR457 DFB $FF ; KER+16 0=70 COL, $FF=40 COL
JMP KERXMT ; KER+17 SEND TEXT DIRECT
JSR COMINT ; KER+20 INITIALIZE COMM & SCREEN
JSR COMINS ; KER+23 SCREEN ONLY
JMP COMXIT
NOVADR DFB 0 ; KER+29 NOVATION RESET ADDR
NOVARS DFB 0 ; KER+30 NOVATION RESET VALUE
ESCCHR DFB 27 ;ESCAPE CHAR, KE+31
SEND JSR GTYPE ; GET TYPE
LDY #0
LDA (TYPADD),Y
STA TYPE
LDA TYPE ; CHECK FOR "E" OR "D"
CMP #'Z
BEQ DOEOF
CMP #'D
BEQ DOD
ZBUF LDA #0
STA BUFEND ; ZERO OUT XMT BUFFER
LDA TYPE
CMP #'0
BNE OTHER
JSR RPKT ; GO READ A PACKET
RTS
OTHER JSR COPYP ; GET MESSAGE
LDA TYPE
CMP #'9
BNE OTHER9
LDA #'Y ; FORCE AN ACK PACKET
OTHERX STA TYPE
JSR SPKTA ; JUST SEND; DONT WAIT
RTS
OTHER9 CMP #'8 ; A BRK
BNE OTHER8
LDA #'B
BNE OTHERX
OTHER8 CMP #'7 ; AN ERROR PACKET
BNE OTHER1
LDA #'E
BNE OTHERX
OTHER1 CMP #'S
BNE OTHER2
LDA #$00
STA SEQNUM ; INITIALIZE SEQUENCE #
STA SEQNUR ; EXPECTED RETURN
OTHER2 JSR SPKT ; SENT IT
RTS
DOEOF LDA BUFEND ; SEE IF ANY DATA LEFT
BEQ NOLEFT
LDA #'D ; DUMMY UP A "D" PACKET
STA TYPE
JSR SPKT ; SEND OFF PACKET
LDA TYPE
CMP #'Y
BEQ DOEOF
JMP SETYPE ;***** IF LAST PKT NAK'D
NOLEFT LDA #'Z ; NOW A REAL "E"
STA TYPE
JSR COPYP
JSR SPKT
RTS ; ALL DONE
*
* DO A TYPE "D" PACKET
DOD JSR COPYP ; COPYIT INPUT TO BUFFER
DOD1 LDA LENMAX ;***** HANDLE #S > 127
CMP BUFEND
BCC DOK
LDA #'Y
STA TYPE
DODRTN JMP SETYPE ; RETURN A TYPE VALUE=Y
DOK JSR SPKT ; SEND ONE
LDA TYPE
CMP #'Y
BNE DODRTN
LDA #'D
STA TYPE
BNE DOD1
*
* SEND PACKET AND WAIT FOR ACK
PKTCNT DFB 0
CHKSUM DFB 0
LENMAX DFB 90
REXMT DFB 0
XXMTBUF DS 128
SPKT JSR SPKTA
LDA #0
STA REXMT
SPKQ JSR RPKT
LDA TYPE
CMP #'N
BEQ SPKDC
CMP #'2
BNE SPKR
SPKDC INC REXMT
LDA REXMT
CMP #10
BEQ SPKR
JSR RESEND
JMP SPKQ
SPKR RTS
*
SPKTA LDA #0
STA PKTCNT
STA BUFPT
LDA MARK
STA XMTBUF
LDA TYPE
CMP #'Y
BEQ SPKTQ
CMP #'N
BNE SPKTNQ
SPKTQ LDA SEQNUR ; RESEQUENCE
STA SEQNUM
SPKTNQ LDA SEQNUM
CLC
ADC #$20 ; CHAR FUNCTION
STA XMTBUF+2
CLC
ADC TYPE
STA CHKSUM ; INITIALIZE CHKSUM VALUE
LDA TYPE
STA XMTBUF+3
SPKTL LDY BUFPT ; INPUT CHARACTER
CPY BUFEND ; SEE IF PAST INPUT BUFFER
BNE SPKTJ
BCC SPKTJ
JMP SPKTE ; DONE...
SPKTJ INC BUFPT
LDA TYPE ; CHECK FOR 'D'
CMP #'D
BEQ QETCS ; CHECK QUOTING, ETC
LDA BUFFER,Y
JMP NOCTRL ; OTHERWISE, DONT
QETCS LDA #$00
STA RCTRL
LDA BUFFER,Y
AND #$80 ; CHECK FOR 8-TH BIT
BEQ NO8BIT
LDA #3 ; VERIFY ENOUGH ROOM TO SEND
JSR SPKTV
LDA Q8BIT ; 8-BIT QUOTING
JSR SPKTS
LDA BUFFER,Y
AND #$7F
STA BUFFER,Y
NO8BIT LDA BUFFER,Y
CMP QCTRL ; CHECK FOR QUOTE CHARS
BEQ DOCTRL
CMP Q8BIT
BEQ DOCTRL
CMP QREPEAT
BEQ DOCTRL
CMP #$20 ; CHECK FOR CTRL CHARS
BCS NOCTRL
LDA #$40 ; CONTROL IAS
STA RCTRL
DOCTRL LDA #2
JSR SPKTV ; VERIFY ENOUGH ROOM
LDA QCTRL ; QUOTE
JSR SPKTS ; INTO XMTBUF
LDA BUFFER,Y ; GET REAL CHAR
EOR RCTRL ; BIAS TO PRINTABLE
NOCTRL JSR SPKTS ; PUT CHAR INTO XMT BUFFER
JMP SPKTL
* PUT CHARACTER INTO PACKET
SPKTS LDX PKTCNT
STA XMTBUF+4,X
JSR SUMCHK
INC PKTCNT
LDA PKTCNT
CMP LENMAX
BEQ SPKTX
RTS
SPKTV CLC
ADC PKTCNT ; PREDICT END OF PACKET
CMP LENMAX
BCS SPKTR ; WUD EXCEED...ABANDON
RTS
SPKTR DEC BUFPT ; WENT TOO FAR!
SPKTX PLA ; POP STACK...DONE W/ BUFFER
PLA
SPKTE LDA PKTCNT
CLC
ADC #$23 ; CHAR FUNCTION
STA XMTBUF+1
JSR SUMCHK
JSR MAKCHK
LDX PKTCNT
STA XMTBUF+4,X ; STORE CHECKSUM
LDA EOLCHR
STA XMTBUF+5,X ; PUT A <CR> THERE
JSR SEQINC ; TO INCREMENT SEQ #
* RESET BUFFER FROM BUFPT=>BUFEND-1
BUFRES LDY #0
LDX BUFPT
BUFRE1 CPX BUFEND
BCS BUFRE9
LDA BUFFER,X
STA BUFFER,Y
INX
INY
BNE BUFRE1
BUFRE9 STY BUFEND
CLC ; OKAY TO PROCESS MORE...
* TRANSMIT THE BUFFER
RESEND LDY #$00
SENDX LDA XMTBUF,Y
JSR OUTCHR
CMP EOLCHR
BEQ SENDD
INY
BNE SENDX
SENDD LDY NUMPAD
SENDP BEQ SENDQ
LDA PADCHR
JSR OUTCHR
DEY
BNE SENDP
SENDQ RTS
*
* SEND INPUT STRING ONLY!
KERXMT JSR COMINT ; INITIALIZE IT
JSR GTYPE1 ; GET PARAMETER=>LEN,DATADD
LDY #0
KERXM1 LDA (DATADD),Y
JSR OUTCHR
INY
DEC LEN ; CHECK END OF LIST
BNE KERXM1
RTS ; ALL DONE
*
* INCREMENT SENDING SEQ #
SEQINC INC SEQNUM
LDA SEQNUM
CMP #64 ; CHECK WRAP-AROUND
BNE SEQRET
LDA #$00 ; RESET
STA SEQNUM
SEQRET RTS
*
* COPYP TO COPY INPUT STRING
COPYP LDA BUFEND ; **** PREVENT BUFFER OVFLOW
CLC
ADC #$02
ADC LEN
BCC COPYP2
JSR SPKT
LDA TYPE
CMP #'Y
BEQ COPYP1
JMP DODRTN
COPYP1 LDA #'D
STA TYPE
COPYP2 LDX BUFEND
LDY #0
LDA LEN
BEQ COPYPD
COPYPL LDA (DATADD),Y
AND MASK ; GET RID OF BIT 8
STA BUFFER,X
INX
INY
DEC LEN
BNE COPYPL
COPYPD LDA TYPE
CMP #'D ; CHECK FOR DATA PACKET
BNE COPYPE
LDA #$0D
CMP BUFFER-1,X ; SEE IF <CR> THERE
BEQ COPYLF
STA BUFFER,X
INX
COPYLF LDA #$0A
STA BUFFER,X
INX
COPYPE STX BUFEND
RTS
*
TYPE DFB 0 ; PACKET TYPE
BUFEND DFB 0 ; POINTS TO NEXT AVAILABLE CHAR POSITION IN BUFFER
BUFFER DS 256 ; XMIT BUFFER
BUFPT DFB 0
TYPLOC DS 2
DATLOC DS 2
*
* GET ADDRESS OF "TYPE" =>TYPADD
GTYPE JSR CHKCOM ; REQUIRED COMMA
JSR PTRGET ; GET ADDR OF PARAM 1
LDY #1
LDA (VARPNT),Y
STA TYPADD
INY
LDA (VARPNT),Y
STA TYPADD+1
LDA VARPNT
STA TYPLOC
LDA VARPNT+1
STA TYPLOC+1 ; NEED DESC ADDRS
GTYPE1 JSR CHKCOM ; NEXT REQUIRED COMMA
JSR PTRGET ; FETCH DATA POINTERS
LDY #0
LDA (VARPNT),Y
STA LEN
INY
LDA (VARPNT),Y
STA DATADD
INY
LDA (VARPNT),Y
STA DATADD+1
LDA VARPNT
STA DATLOC
LDA VARPNT+1
STA DATLOC+1
RTS
*
* CHECKSUM ROUTINES
*
SUMCHK CLC
PHA
ADC CHKSUM
STA CHKSUM
PLA ; RESTORE ACCUM
RTS
MAKCHK LDA CHKSUM ; MAKE CHECKSUM VALUE FROM SUMMED QUANTITY IN CHKSUM
ROL A
ROL A
ROL A ; PUT BITS 6 & 7 INTO LSB
AND #3 ; MASK OUT
CLC
ADC CHKSUM ; ADD IT BACK IN
AND #$3F
CLC
ADC #$20 ; CHAR FUNCTION
RTS
*
* RECEIVING SECTION
RBUFPT DFB 0
RBUFF DS 256
RBUFFER DS 256
RCOUNT DFB 0
RCTRL DFB 0
R8BIT DFB 0
REPCNT DFB 0
SEQGOT DFB 0
PREVIOUS DFB 0
*
RPKT JSR COMINU ; CLEAR UART
RPKTQ JSR RCHAR
CMP MARK
BNE RPKTQ
LDY #0
STY RBUFPT
STY RCTRL
STY R8BIT
STY REPCNT ; INITIALIZE THESE
RPKTL JSR RCHAR
CMP EOLCHR
BEQ RPKTA
STA RBUFF,Y
INY
BNE RPKTL
RPKTA STY RBUFPT
LDA RBUFF ; GET COUNT
STA CHKSUM ; INITIALIZE IT
SEC
SBC #$20
STA RCOUNT
LDA RBUFF+1 ; GET SEQ #
JSR SUMCHK
SEC
SBC #$20
STA SEQGOT
LDA RBUFF+2 ; GET TYPE
JSR SUMCHK
STA TYPE
LDY #2 ; PREPARE TO UNPACK
LDX #$0 ; POINTS INTO RBUFFER
JMP RPKTY
RPKTB LDA RBUFF,Y
JSR SUMCHK
LDA TYPE ; CHECK FOR 'D' PACKET
CMP #'D
BEQ QETCR ; FOR QUOTING, ETC
LDA RBUFF,Y
JMP RPKTF ; OTHERWISE JUSTSTUFF IT
QETCR LDA RCTRL
BEQ RPKTG ; QUOTE CHAR NOT SET
LDA RBUFF,Y ; GET CHAR
AND #$40 ; SEE IF BIT 7 SET
BNE RPKTE ; IT IS, SO QUOTE OK
LDA RBUFF,Y
JMP CKNULL ; JUST TAKE IT...
RPKTG LDA RBUFF,Y
CMP QREPEAT
BNE RPKTC
INY
LDA RBUFF,Y
JSR SUMCHK
SEC
SBC #$21
STA REPCNT
BNE RPKTY
RPKTC CMP Q8BIT
BNE RPKTD
LDA #$80 ; SET 8-BIT MASK
STA R8BIT
BNE RPKTY
RPKTD CMP QCTRL
BNE RPKTE
LDA #$40 ; SET CTRL-BIAS
STA RCTRL
BNE RPKTY
RPKTE LDA RBUFF,Y
EOR RCTRL ; MASK BIT 7
ORA R8BIT ; BIT 8?
CKNULL BEQ NONULL ; NOT ALLOWED!
RPKTF STA RBUFFER,X
CMP #$0A
BNE NOCRLF
LDA PREVIOUS
CMP #$0D
BEQ NONULL ; CHANGE CR/LF => CR ONLY
NOCRLF INX
BNE NOCRLF1 ;***** NOTE RBUFF OVFLOW
LDA #'4
STA TYPE
JMP RETPAR
NOCRLF1 STA PREVIOUS
NONULL LDA REPCNT
BEQ RPKTZ
DEC REPCNT
LDA RBUFFER-1,X
JMP RPKTF
RPKTZ LDA #$00
STA RCTRL
STA R8BIT
RPKTY INY
CPY RCOUNT
BEQ RPKTW ; DONE
JMP RPKTB ; GO DO ANOTHER ONE
RPKTW JSR MAKCHK ; COMPUTE CHECKSUM
CMP RBUFF,Y ; VERIFY
BEQ RCHKOK
LDA #'N ; PREPARE 'N' PACKET
STA TYPE
BIT DIRECT ; CHECK IF SEND MODE
BPL RRETN ; YES, JUST RETURN N-TYPE
JSR MAKPKT ; NAK FOR CHECKSUM ...
DEC SEQNUR
JMP RPKT
RCHKOK LDA TYPE
CMP #'S ; CHECK FOR 'S' PACKET
BEQ RCHNOE ; JUST STUFF NEW SEQ #
LDA SEQGOT
SEC
SBC SEQNUR ; CHECK INCREMENT
BEQ RCHSSN ; IF SAME
CMP #$01
BEQ RCHNOE ; IS OKAY
CMP #$C1 ; = 0-3F
BEQ RCHNOE ; IS STILL OKAY
LDA #'3
STA TYPE ; RETURN ERROR CODE
BNE RETPAR
RCHSSN BIT DIRECT ; CHECK SEND MODE
BMI RCHNOR ; IF RECV MODE
LDA TYPE
CMP #'Y
BNE RCHSSN1 ;**** UMD NAK CHECK
LDA SEQGOT
BNE RCHSSN1
LDA XMTBUF+2
CMP #$20
BEQ RCHNOE
RCHSSN1 LDA #'N
STA TYPE
RRETN RTS
RCHNOR LDA TYPE ;***** IF REC'D ERROR PKT
CMP #'E
BEQ RETPAR
LDA #'Y
STA TYPE
JSR MAKPKT ; JUST ACK IT AND THEN
JMP RPKT ; GO GET ANOTHER ONE...
RCHNOE LDA SEQGOT
STA SEQNUR ; JUST STORE IT
* SET TYPE PARAMETER
*
RETPAR STX RCOUNT
LDA DATLOC
STA VARPNT
LDA DATLOC+1
STA VARPNT+1
LDA RCOUNT
LDY #$0
STA (VARPNT),Y
INY
LDA #>RBUFFER
STA (VARPNT),Y
INY
LDA #<RBUFFER
STA (VARPNT),Y
SETYPE LDY #2
LDA TYPLOC
STA VARPNT
LDA TYPLOC+1
STA VARPNT+1
LDA #<TYPE
STA (VARPNT),Y
DEY
LDA #>TYPE
STA (VARPNT),Y
RTS
* TO MAKE AND SEND A Y/N PACKET
MAKPKT LDA MARK
STA XMTBUF
LDA #'# ; COUNT OF 43
STA XMTBUF+1
STA CHKSUM ; DO THIS TOO
LDA SEQGOT ; WITH SAME SEQ NUMBER
STA SEQNUR ; TO BE SURE
STA SEQNUM ; RESET IT
CLC
ADC #$20 ; CHR FUNCTION
STA XMTBUF+2 ; SEQUENCE
JSR SUMCHK
LDA TYPE
STA XMTBUF+3
JSR SUMCHK
JSR MAKCHK ; MAKE VALUE
STA XMTBUF+4
LDA EOLCHR
STA XMTBUF+5 ; FINALLY
JSR RESEND ; SEND IT OFF
JSR SEQINC ; FOR NEXT SEND...
RTS
*
* GET AN INPUT CHARACTER
*
KBD EQU $C000
MSB ON
KBDSTR EQU $C010
RESMSG ASC "PACKET RETRANSMITTED..."
MSB OFF
DFB $8D,0
TIME DS 3
RCHAR LDA TIMOUT
STA TIME+2
LDA #$FF ; SET LOWER TIMOUT...
STA TIME+1
STA TIME
LSR TIME+2
ROR TIME+1
ROR TIME
LSR TIME+2
ROR TIME+1
ROR TIME
BIT KBDSTR ; CLEAR KEYBOARD FLAG
RCHAR1 DEC TIME
BNE RCHAR2
DEC TIME+1
BNE RCHAR2
DEC TIME+2
BNE RCHAR2
LDA #'2
BNE RCHERR
RCHAR2 BIT KBD ; CHECK KEYBOARD
BPL NOKEY
LDA KBD
CMP #$8D
BNE RCHAR3 ; CHECK FOR <CR>
BIT KBDSTR
JSR RESEND ; RESEND LAST PACKET
LDX #0
RCHMSG LDA RESMSG,X ; SCREEN MESSAGE
BEQ NOKEY
JSR PCHAR
INX
BNE RCHMSG
BMI NOKEY
RCHAR3 CMP ESCCHR ;ESC CHARACTER
BNE NOKEY
BIT KBDSTR
LDA #'1
RCHERR STA TYPE
PLA
PLA
JMP RETPAR ; GO BACK TO CALLER
NOKEY JSR CHARIN
BCC RCHAR1
LDA CHAR
AND MASK ; GET RID OF BIT 8 IF NEEDED
RTS
* COMM OUTPUT ROUTINE
CHAR DFB 0
OUTCHR STA CHAR
OUTS LDA $C000 ; DITTO
OUTCHA AND #$00 ; XMTSTA
BEQ OUTS
LDA CHAR
OUTCHG STA $C000 ; XMTREG
BIT DEBUG
BPL OUTRET
ORA #$80
JSR PCHAR
LDA CHAR
OUTRET RTS
PTCHR DFB 0
GTCHR DFB 0
CHRBUF DS 256
INCHAR TXA
PHA
LDX PTCHR
INCHR LDA $C000 ; STAREG
INCHRA AND #$00 ; RVCSTA
BEQ INCHRR
LDA NOVARS
BEQ INCHRG
NOVRES STA $C000
INCHRG LDA $C000 ; RCVREG
STA CHRBUF,X
INX
STX PTCHR
INCHRR PLA
TAX
RTS
*
* TO FETCH CHARS FROM SERIAL INPUT
*
CHARIN JSR INCHAR
TXA
PHA
LDX GTCHR
CPX PTCHR
BEQ CHARTN
LDA CHRBUF,X
STA CHAR
INX
STX GTCHR
BIT DEBUG
BPL CHARND
JSR PCHAR
CHARND PLA
TAX
LDA CHAR
SEC
RTS
CHARTN PLA
TAX
CLC
RTS
* COMM CARD ADDRESS INITIALIZATION
COMINT LDA STAREG
STA OUTS+1
STA INCHR+1
LDA RCVSTA
STA INCHRA+1
LDA XMTSTA
STA OUTCHA+1
LDA RCVREG
STA INCHRG+1
LDA XMTREG
STA OUTCHG+1
LDA NOVADR
STA NOVRES+1
SEC
LDA MAXLEN
SBC #$05
STA LENMAX ; FIX MAX BUFFER SIZE
COMINS LDA ALFD
STA AUTOLF
LDA TR7
STA TRUNC7
LDA BKCOL
STA BKCOLR
AND #$F
STA BKMASK
LDA CHR457
LDY #0
LDX #70
CMP #$FF
BNE COMIN7
LDX #40
LDA BKCOLR
STA BKMASK
LDY #3
COMIN7 STX COLMAX
STY FONTAD
BIT CONTRY
BMI COMINR
JSR DIS70
LDA #$FF
STA CONTRY
COMINR LDA #>CHOUT ; SET OUTPUT VECTORS
STA $36
LDA #<CHOUT
STA $37
JSR $3EA ; CONNECT DOS...
COMINU JSR INCHAR
LDA #0
STA PTCHR
STA GTCHR
RTS
CONTRY DFB 0
* CONNECT -- KEYBOARD...
CONN JSR COMINT
CONNNA BIT KBD
BPL CONNRC
LDA KBD
CMP ESCCHR
BNE CONNNE
COMXIT BIT KBDSTR
LDA #$01
STA AUTOLF ; RESET AUTO LINE FEED
RTS
CONNNE BIT KBDSTR
AND #$7F
JSR OUTCHR
BIT DEBUG
BMI CONNRC
BIT ECHO
BPL CONNRC
ORA #$80
BNE CONNPR
CONNRC JSR CHARIN
BCC CONNNA
LDA CHAR
BIT DEBUG
BMI CONNRC
CONNPR JSR PCHAR ; OUTPUT TO SCREEN
JMP CONNRC
*
* READ A LINE....
READLN JSR CHKCOM ; REQUIRED ,
JSR PTRGET ; STRING POINTER=>VARPNT
LDX #0 ; SET FOR INPUT LINE
READNX JSR $FD0C
STA $200,X
INX
AND #$7F
CMP #$0D
BNE READNX
LDY #00
TXA
STA (VARPNT),Y
INY
LDA #$00
STA (VARPNT),Y
LDA #$02
INY
STA (VARPNT),Y
RTS
*
A1L EQU $3C
A1H EQU $3D
A2L EQU $3E
A2H EQU $3F
TXTBUF EQU $400
VALTK EQU $9C
VALTK1 EQU $93
LOY EQU $94
HIY EQU $95
LOX EQU $96
HIX EQU $97
YTEK EQU $98
YTEKH EQU $99
XXTEKH EQU $9A
XXTEKL EQU $9B
HPLOT EQU $F457
HPOSN EQU $F411 ; H(X,Y) V(A)
HLIN EQU $F53A
HPOS EQU $26
HGR2 EQU $F3D8
TEKPLT STA HOLD
STX XHOLD
STY YHOLD
LDA #$40
STA $E6 SET PG2
LDA $C055
LDA $C052
LDX #3
JSR HCOLOR
NEWTEK JSR GETTKC
JSR MAKTK
LDX XTEKL
LDY XTEKH
SEC
LDA #191
SBC YTEK
JSR HPOSN
TKVECT JSR GETTKC
BCS TKEND
JSR MAKTK
SEC
LDA #191
SBC YTEK
TAY
LDA XTEKL
LDX XTEKH
JSR HLIN
JMP TKVECT
TKEND TXA
AND #$7F
CMP #$1D
BEQ NEWTEK
JMP HRXIT
MAKTK LDA LOY
STA YTEK
LDA HIY
STA YTEKH
ROL YTEK
ROL YTEK
ROL YTEK
LSR YTEKH
ROR YTEK
LSR YTEKH
ROR YTEK
LSR YTEKH
ROR YTEK
LSR YTEKH
ROR YTEK
LDA LOX
STA XTEKL
LDA HIX
STA XTEKH
ROL XTEKL
ROL XTEKL
ROL XTEKL
LSR XTEKH
ROR XTEKL
LSR XTEKH
ROR XTEKL
LSR XTEKH
ROR XTEKL
LSR XTEKH
ROR XTEKL
RTS
GETTKC LDY #00
GETEK JSR CHARIN
BCC GETEK
TAX
AND #$1F
STA VALTK
TXA
AND #$60
CMP #$40
BNE NOLOX
LDA VALTK
STA LOX
TYA
BEQ NOHIX
LDA VALTK1
STA HIX
NOHIX CLC
RTS
NOLOX CMP #$20
BNE NOHI
LDA VALTK
STA VALTK1
INY
BNE GETEK
NOHI CMP #$60
BNE NOLOY
LDA VALTK
STA LOY
TYA
BEQ GETTKC
LDA VALTK1
STA HIY
JMP GETTKC
NOLOY SEC
RTS
SWITCH DFB 0
HPLCOL DFB 0
LINUM DFB 0
HRINI STA HOLD
STY YHOLD
STX XHOLD
LDA #$40
STA $E6 ; POINT TO PG 2
LDA $C055 ; DIS PG 2
LDA $C052 ; ALL GRAFX
LDA #$00
TAX
TAY
STA LINUM
STA HPLCOL
STA SWITCH
JSR HPOSN
HRSKIP INC SWITCH
LDA SWITCH
CMP #$04
BEQ HPL
JSR HRGET
JMP HRSKIP
HPL JSR HRGET
LDY HPLCOL
CPY #40
BPL NOPLOT
STA (HPOS),Y
NOPLOT INY
STY HPLCOL
CPY #44
BEQ NXTLN
JMP HPL
NXTLN INC LINUM
LDA LINUM
CMP #192
BNE HRNOL
LDA #191
HRNOL LDX #0
LDY #0
STY HPLCOL
JSR HPOSN
JMP HPL
HRGET JSR CHARIN
BCC HRGET
CMP #$FD
BNE HRRTN
PLA
PLA
HRXIT LDA $C054
LDA #$20
STA $E6
JMP EXIT
HRRTN RTS
* 70 COLUMN DISPLAY
CHROW EQU $9D
SHIFT EQU $9E
MASK1 EQU $9F
MASK2 EQU $A0
CHRBIT EQU $A1
WORD EQU $A3
DIS70 JSR INITCD
JMP EXIT
CHOUT STA HOLD
PCHAR EQU CHOUT
PCHLF EQU CHOUT
STX XHOLD
STY YHOLD
AND #$7F
STA CHARC
CMP #$20 . CTRL CHARACTER?
BPL NCTRL
LDA #$FF
STA CURSOR
JSR CHROUT
LDA #0
STA CURSOR
LDA CHARC
CMP #$0D . CR
BNE NOCR
LDA #00
STA COL
LDA AUTOLF
BEQ EXITC
JSR LINEFD
JMP EXITC
NOCR CMP #$0A . LF
BNE NOLF
JSR LINEFD
JMP EXITC
NOLF CMP #8 . CTRL-H
BNE NOCH
DEC COL
BMI ZCOL
JMP EXITC
ZCOL LDA #00
STA COL
JMP EXITC
NOCH CMP #16 . CTRL-P
BNE NOCP
LDA #00
STA ROW
STA COL
JSR BAKGND
NOCP CMP #07 .BELL
BNE EXITC
LDY #$80
BELL LDA #$0C
JSR $FCA8
JSR INCHAR
LDA $C030
DEY
BNE BELL
JMP EXITC
NCTRL JMP PRIT
EXITC LDA #$FF
STA CURSOR
JSR CHROUT
LDA #0
STA CURSOR
EXIT LDA HOLD
LDX XHOLD
LDY YHOLD
RTS
PRIT LDA CHARC
ORA CASMSK
SEC
SBC #32
STA CHARC
LDA CASE
STA CASMSK
NOFEED JSR CHROUT
INC COL
LDA COL
CMP COLMAX
BMI EXITC
LDA TRUNC7
BEQ NOTRUN
LDX COLMAX
DEX
STX COL
BNE EXITC
NOTRUN JSR LINEFD
LDA #00
STA COL
JMP EXITC
LINEFD LDA ROW . LINE FEED
CLC
ADC ROWINC
STA ROW
CMP #187
BCS SCROL
JMP EXIT
SCROL LDA SCRBEG
STA A1L
CLC
ADC ROWINC
TAX
SCRA LDY A1L
LDA TVL,Y
STA PUT+1
LDA TVH,Y
STA PUT+2
LDA TVL,X
STA GET+1
LDA TVH,X
STA GET+2
LDY #$27
GET LDA ROW,Y
PUT STA ROW,Y
DEY
BPL GET
JSR INCHAR
INC A1L
INX
CPX #192
BNE SCRA
LDX A1L
STX ROW
SCRB LDA TVL,X
STA PUTT+1
LDA TVH,X
STA PUTT+2
LDY #$27
LDA BKCOLR
PUTT STA ROW,Y
DEY
BPL PUTT
INX
CPX #192
BNE SCRB
JMP EXIT
CHROUT LDY CHARC . POINT TO CHAR
LDA CHRL,Y
STA SHGET+1 . SET ADDR
LDA CHRH,Y
CLC
ADC FONTAD
STA SHGET+2
LDY COL
LDA COLWD,Y
STA WORD
LDA COLREM,Y
TAY
LDA CSHIFT,Y
STA SHIFT
LDA MSK1,Y
STA MASK1
LDA MSK2,Y
STA MASK2
LDA #0
STA CHROW
LNLP CLC
TAX . FOR SHGET
ADC ROW
TAY
LDA TVL,Y
STA A1L
LDA TVH,Y
STA A1H
SHGET LDA SHGET,X
EOR BKMASK
BIT CHR457
BMI DD40
D70 STA CHRBIT
LDA #0
STA CHRBIT+1
LDY WORD
BIT CURSOR
BMI PUTCUR
ASL CHRBIT
LDX SHIFT
BEQ SHDON
SHLOOP ASL CHRBIT
ROL CHRBIT+1
DEX
BNE SHLOOP
SHDON CLC
ROR CHRBIT
LDA (A1L),Y
AND MASK1
ORA CHRBIT
STA (A1L),Y
INY
LDA (A1L),Y
AND MASK2
ORA CHRBIT+1
STA (A1L),Y
NXLN INC CHROW
LDA CHROW
CMP #8
BNE LNLP
RTS
PUTCUR LDA MASK1
EOR #$FF
EOR (A1L),Y
STA (A1L),Y
INY
LDA MASK2
EOR #$FF
EOR (A1L),Y
STA (A1L),Y
JMP NXLN
DD40 LDY COL
BIT CURSOR
BPL D40
LDA (A1L),Y
EOR #$FF
D40 STA (A1L),Y
JMP NXLN
HGR EQU $F3E2
HCOLOR EQU $F6F0
BAKGND LDX SCRBEG
BAKLOP LDA TVL,X
STA BAKLP1+1
LDA TVH,X
STA BAKLP1+2
LDY #$27
LDA BKCOLR
BAKLP1 STA $0000,Y
DEY
BPL BAKLP1
INX
CPX #192
BNE BAKLOP
RTS
INITCD LDA #0
STA ROW
JSR HGR . SELECT PAGE
LDA $C052
LDX #3
JSR HCOLOR
DEFLIN LDA ROW
LDX #00
LDY #00
JSR HPOSN
LDA $26
LDY ROW
STA TVL,Y
LDA $27
STA TVH,Y
INC ROW
LDA ROW
CMP #192
BNE DEFLIN
LDA #00
STA COL
STA WORD
STA CHROW
DEFCOL LDY COL
LDA WORD
STA COLWD,Y
LDA CHROW . REM
STA COLREM,Y
INC COL
LDA COL
CMP #70
BEQ COLDON
LDA CHROW
CMP #6
BEQ RESREM
INC CHROW
LDA CHROW
ROR A
BCS DEFCOL
INC WORD
BNE DEFCOL
RESREM LDA #0
STA CHROW
INC WORD
BNE DEFCOL
COLDON LDA #00
STA ROW
STA COL
LDX #96
LDA #>CHRSET
STA A1L
LDA #<CHRSET
STA A1H
LDY #0
DEFCHR LDA A1L
CLC
ADC #8
STA A1L
STA CHRL,Y
LDA A1H
ADC #0
STA A1H
STA CHRH,Y
INY
DEX
BNE DEFCHR
JSR BAKGND
RTS
* DATA STORAGE
ROW DFB 0
COL DFB 0
CHARC DFB 0
CASE DFB 0
CASMSK DFB 0
HOLD DFB 0
XXHOLD DFB 0
YHOLD DFB 0
AUTOLF DFB 1
TRUNC7 DFB 1
SCRBEG DFB 0
CURSOR DFB 0
ROWINC DFB 8
BKMASK DFB $00
BKCOLR DFB $00
COLMAX DFB $46
XFONTAD DFB 0
* ARRAYS
MSK1 DFB $F0,$8F,$E1,$9F,$C3,$BF,$87
MSK2 DFB $FF,$FE,$FF,$FC,$FF,$F8,$FF
CSHIFT DFB 0,4,1,5,2,6,3
TVL DS 192
TVH DS 192
CHRL DS 96
CHRH DS 96
COLWD DS 70
COLREM DS 70
CHRPAT DFB 0,0,0,0,0,0,0,0
DFB 2,2,2,2,2,0,2,0
DFB 5,5,5,0,0,0,0,0
DFB 2,2,7,2,7,2,2,0
DFB 2,7,3,2,6,7,2,0
DFB 0,1,4,2,2,1,4,0
DFB 0,2,5,2,3,5,7,4
DFB 2,2,2,0,0,0,0,0
DFB 4,2,1,1,1,2,4,0
DFB 1,2,4,4,4,2,1,0
DFB 0,5,2,7,2,5,0,0
DFB 0,2,2,7,2,2,0,0
DFB 0,0,0,0,0,2,2,1
DFB 0,0,0,7,0,0,0,0
DFB 0,0,0,0,0,0,2,0
DFB 4,4,2,2,2,1,1,0
DFB 2,5,5,5,5,5,2,0
DFB 2,3,2,2,2,2,7,0
DFB 2,5,4,4,2,1,7,0
DFB 3,4,4,3,4,4,3,0
DFB 4,6,5,7,4,4,4,0
DFB 7,1,3,4,4,4,3,0
DFB 2,5,1,3,5,5,2,0
DFB 7,4,4,2,2,1,1,0
DFB 2,5,5,2,5,5,2,0
DFB 2,5,5,6,4,5,2,0
DFB 0,0,2,0,2,0,0,0
DFB 0,0,2,0,2,2,1,0
DFB 0,4,2,1,2,4,0,0
DFB 0,0,7,0,7,0,0,0
DFB 0,1,2,4,2,1,0,0
DFB 2,5,4,2,2,0,2,0
DFB 0,7,7,7,1,5,6,0
DFB 2,5,5,7,5,5,5,0
DFB 3,5,5,3,5,5,3,0
DFB 2,5,1,1,1,5,2,0
DFB 3,5,5,5,5,5,3,0
DFB 7,1,1,7,1,1,7,0
DFB 7,1,1,7,1,1,1,0
DFB 2,5,1,7,5,5,6,0
DFB 5,5,5,7,5,5,5,0
DFB 7,2,2,2,2,2,7,0
DFB 4,4,4,4,4,5,2,0
DFB 5,5,3,3,3,5,5,0
DFB 1,1,1,1,1,1,7,0
DFB 5,7,7,7,5,5,5,0
DFB 5,5,7,7,7,5,5,0
DFB 7,5,5,5,5,5,7,0
DFB 3,5,5,3,1,1,1,0
DFB 2,5,5,5,5,2,4,0
DFB 3,5,5,3,5,5,5,0
DFB 2,5,1,2,4,5,2,0
DFB 7,2,2,2,2,2,2,0
DFB 5,5,5,5,5,5,6,0
DFB 5,5,5,5,5,2,2,0
DFB 5,5,5,7,7,7,5,0
DFB 5,5,2,2,2,5,5,0
DFB 5,5,5,2,2,2,2,0
DFB 7,4,4,2,1,1,7,0
DFB 7,1,1,1,1,1,7,0
DFB 1,1,2,2,2,4,4,0
DFB 7,4,4,4,4,4,7,0
DFB 0,2,5,0,0,0,0,0
DFB 0,0,0,0,0,0,0,7
DFB 1,2,4,0,0,0,0,0
DFB 0,0,2,4,6,5,6,0
DFB 1,1,3,5,5,5,3,0
DFB 0,0,6,1,1,1,6,0
DFB 4,4,6,5,5,5,6,0
DFB 0,0,2,5,7,1,6,0
DFB 2,5,1,3,1,1,1,0
DFB 0,0,6,5,5,6,4,3
DFB 1,1,3,5,5,5,5,0
DFB 0,2,0,3,2,2,7,0
DFB 0,4,0,4,4,4,5,2
DFB 1,1,5,3,1,3,5,0
DFB 3,2,2,2,2,2,7,0
DFB 0,0,5,7,7,5,5,0
DFB 0,0,3,5,5,5,5,0
DFB 0,0,2,5,5,5,2,0
DFB 0,0,3,5,5,3,1,1
DFB 0,0,6,5,5,6,4,4
DFB 0,0,2,5,1,1,1,0
DFB 0,0,6,1,2,4,3,0
DFB 0,2,7,2,2,2,4,0
DFB 0,0,5,5,5,5,6,0
DFB 0,0,5,5,5,5,2,0
DFB 0,0,5,5,7,7,5,0
DFB 0,0,5,5,2,5,5,0
DFB 0,0,5,5,5,6,4,3
DFB 0,0,7,4,2,1,7,0
DFB 6,2,2,1,2,2,6,0
DFB 2,2,2,2,2,2,2,0
DFB 3,2,2,4,2,2,3,0
DFB 6,3,0,0,0,0,0,0
DFB 0,0,0,0,0,0,0,0
CHRSET EQU CHRPAT-8
SET40 EQU * ; BLOAD 'SET40' AT THIS ADDRESS
ENDZZZ EQU *
//go.sysin dd *
if [ `wc -c < kermita.s` != 21063 ]; then
made=FALSE
echo error transmitting kermita.s --
echo length should be 21063, not `wc -c < kermita.s`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 kermita.s
echo -n ' '; ls -ld kermita.s
fi
echo Extracting t-b.s
sed 's/^X//' <<'//go.sysin dd *' >t-b.s
* SOURCE TO T-B BINARY FILE
* REVERSE ENGINEERED BY ZBEN
* SEPTEMBER 1986
*
ORG $95C7 ; AS PER ORIG
LF EQU $8A ; LINEFEED (NEWLINE)
CR EQU $8D ; CARRIAGE RETURN
TEMP EQU $95C5 ; TEMP STORE
VALU EQU $95C6 ; VALUE RETURN
RDKEY EQU $FD0C ; GET ROUTINE
*
TB000 LDX #1 ; DO TWO HEX DIGITS
TB010 JSR RDKEY ; GET CHAR
CMP #CR ; IF CR THEN
BEQ TB010 ; IGNORE IT
CMP #LF ; IF LF THEN
BEQ TB010 ; IGNORE IT
CMP #'9'+1 ; IF ABOVE '9'
BPL TB040 ; GO FUDGE 'A'..'F'
TB020 SEC ; SETUP FOR SUBTRACT
SBC #'0' ; MAKE ABSOLUTE
CPX #0 ; IF SECOND DIGIT
BEQ TB030 ; GO OR IN
ASL A ; FIRST DIGIT
ASL A ; SHIFT LEFT
ASL A ; FOUR BITS
ASL A ; TO POSITION
STA TEMP ; SAVE FOR NEXT PASS
DEX ; DEC PASS COUNTER
JMP TB010 ; DO NEXT PASS
*
TB030 CLC ; SETUP FOR ADD
ADC TEMP ; ADD FIRST PASS DATA
STA VALU ; STORE FOR RETURN
RTS ; RETURN TO CALLER
*
TB040 SEC ; SETUP FOR SUBTRACT
SBC #$07 ; 'A'-'0'-10 ???
JMP TB020 ; REENTER HEX LOOP
*
* END OF T-B.S ZBEN 9/86
//go.sysin dd *
if [ `wc -c < t-b.s` != 958 ]; then
made=FALSE
echo error transmitting t-b.s --
echo length should be 958, not `wc -c < t-b.s`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 t-b.s
echo -n ' '; ls -ld t-b.s
fi
echo Extracting x-bin2txt-t
sed 's/^X//' <<'//go.sysin dd *' >x-bin2txt-t
768
40
A200A000B103840620DAFDA406C8C02890F2208EFDA5031869288503A50469008504E8E40290DB60
//go.sysin dd *
if [ `wc -c < x-bin2txt-t` != 89 ]; then
made=FALSE
echo error transmitting x-bin2txt-t --
echo length should be 89, not `wc -c < x-bin2txt-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 x-bin2txt-t
echo -n ' '; ls -ld x-bin2txt-t
fi
echo Extracting x-frogpix-t
sed 's/^X//' <<'//go.sysin dd *' >x-frogpix-t
8192
8192
223E021C1C223E803E1C80223E1E221C3E803E3E8080808080808080808080808080808080808080
AA102040808080808080808080808080808080808080808080808080808080808080808080808080
02142850808080808080808080808080808080808080808080808080808080808080084408802204
06461A40099E12008080808080808080808080808080808080808080808080808080808080808080
8080808080808080081020D0828080808080803C6003808080808080808080808080808080808080
80808080808080800214281080808080808080808080808080808080808080808080808080808080
808028440A142244001800000000000080802080803E221C221C3E80223E8022221C023E801C8002
1C081E8022221C3E023E08808080808008D420D0828080800680800F80407F808080808080808080
80808080808080808080808080808080021428108080808080808080808080808080808080808080
8080808080808080804028540A15225400000000000000008080A881808080808080808080808080
80808080808080808080808080808080808080808080808008D420D082802E2080808080807C7F7F
80808080808080808080808080808080808080808080808002140810808080808080808080808080
80808080808080808080808080808080804028540A152A5400000000000000000880A88180808080
80808080808080808080808080808080808080808080808080808080808080800AD4204080808080
80808080807C407F7F80808080808080808080808080808080808080808080800204081080808080
808080808080808080808080808080808080808080808080804028540A152A540000000000000000
0880A881808080808080808080808080808080808080808080808080808080808080808080808080
0AD42040808080808080808080808078611F80808080808080808080808080808080808080808080
0204081080808080808080808080808080808080808080808080808080808080804028540A152A54
0000000000000000AA80A88180808080808080808080808080808080808080808080808080808080
80808080808080800A10205080808080808080808080808080808080808080808080808080808080
80808040808080808080808080552A552A0580808080808080808080808080808080808080808080
80802810021528540000000000000000AA1020408080808080808080808080808080808080808080
80808080808080808080808080808080021020508080808080808080808080808080808080808080
8080808080808080808008400880200480808080808080402A552A552A552A552A552A552A552A55
2A552A552A552A552A55028080808080000000000000000022020222223602800822801202223608
088030068080808080808080808080808080808080808080AA102040808080808080808080808080
80808080808080808080808080808080808080808080808002142810808080808080808080808080
80808080808080808080808080808080808008440804220400000000000000008080808080808080
8080808080808080808080808080808080808080808080808080808080808080081020D082808080
80808066300680808080808080808080808080808080808080808080808080800214281080808080
808080808080808080808080808080808080808080808080808028440A1422440000000000000000
80802080800222222222028036028022220802028008800222142280362222020202088080808080
08D420D0828080800380800780607F01808080808080808080808080808080808080808080808080
0214281080808080808080808080808080808080808080808080808080808080804028540A152254
00000000000000008080A88180808080808080808080808080808080808080808080808080808080
808080808080808008D420D082801C1280808080807C7F7F01808080808080808080808080808080
80808080808080800214081080808080808080808080808080808080808080808080808080808080
804028540A152A5400000000000000000880A8818080808080808080808080808080808080808080
808080808080808080808080808080800AD420408080808080808080807C407F7F01808080808080
80808080808080808080808080808080020408108080808080808080808080808080808080808080
8080808080808080804028540A152A5400000000000000000880A881808080808080808080808080
8080808080808080808080808080808080808080808080800AD42040808080808080808080808078
613F8080808080808080808080808080808080808080808002800810808080808080808080808080
80808080808080808080808080808080804028540A152A540000000000000000AA80A88180808080
80808080808080808080808080808080808080808080808080808080808080800A10205080808080
8080808080808080808080808080808080808080808080808080804080808080808080552A552A55
2A552A80808080808080808080808080808080808080808080800810021128500000000000000000
AA102040808080808080808080808080808080808080808080808080808080808080808080808080
02142050808080808080808080808080808080808080808080808080808080808080084408802004
D4AA8080808080542A552A552A552A552A552A552A552A552A552A552A552A552A552A80D0AAD582
000000000000000022020202222A02800822800A02222A0808803006808080808080808080808080
80808080808080800810204080808080808080808080808080808080808080808080808080808080
80808080808080800214281080808080808080808080808080808080808080808080808080808080
80800844080422040000000000000000808080808080808080808080808080808080808080808080
8080808080808080808080808080808008D420D08280808080808043190C80808080808080808080
80808080808080808080808080808080021428108080808080808080808080808080808080808080
8080808080808080804028440A14224400000000000000008080208080021402220202802A028022
2208020280088002222222802A140202020208808080808008D420D0828080800780800E80707F03
80808080808080808080808080808080808080808080808002140810808080808080808080808080
80808080808080808080808080808080804028540A15225400000000000000008080A88180808080
808080808080808080808080808080808080808080808080808080808080808008D420D082805810
80808080807C7F7F0380808080808080808080808080808080808080808080800204081080808080
808080808080808080808080808080808080808080808080804028540A152A540000000000000000
0880A881808080808080808080808080808080808080808080808080808080808080808080808080
0AD420408080808080808080807E017F7F0180808080808080808080808080808080808080808080
0204081080808080808080808080808080808080808080808080808080808080804028540A152A54
00000000000000000880A88180808080808080808080808080808080808080808080808080808080
80808080808080800A102040808080808080808080808070737F8080808080808080808080808080
80808040808080800280088080808080808080808080808080808080808080808080808080808080
804028540A152A540000000000000000AA80A8818080808080808080808080808080808080808080
808080808080808080808080808080800A1020508080808080808080808080808080808080808080
8080808080808080808080408080208080502A552A552A552A552A55808080808080808080808080
8080808080AAD5AAD58A0880021128500000000000000000AA102040808080808080808080808080
80808080808080808080808080808080808080808080808002142050808080808080808080808080
80808080808080808080808080808080808008440880200480808080808080542A552A552A552A55
2A552A552A552A552A552A552A552A552A552A808080808000000000000000002A1E0202222A1E80
082280061E1E2A08083E30068080808080808080808080808080808080808080081020D082808080
80808080808080808080808080808080808080808080808080808080808080800214281080808080
80808080808080808080808080808080808080808080808080800844080422040000000000000000
80802080808080808080808080808080808080808080808080808080808080808080808080808080
08D420D0828080808080804F7F0C8080808080808080808080808080808080808080808080808080
0214281080808080808080808080808080808080808080808080808080808080804028440A142244
000000000000000080802080801E0802221C1E802A1E802A3E08021E80088002222222802A081C1E
021E08808080808008D420D0828080807E7F7F7F7F787F0780808080808080808080808080808080
80808080808080800214081080808080808080808080808080808080808080808080808080808080
804028540A152A5400000000000000008080A8818080808080808080808080808080808080808080
8080808080808080808080808080808008D420408080302580808080807C7E7F0780808080808080
80808080808080808080808080808080020408108080808080808080808080808080808080808080
8080808080808080804028540A152A5400000000000000000880A881808080808080808080808080
8080808080808080808080808080808080808080808080800AD420408080808080808080805F037F
7E038080808080808080808080808080808080808080808002040810808080808080808080808080
80808080808080808080808080808080804028540A152A540000000000000000AA80A88180808080
80808080808080808080808080808080808080808080808080808080808080800A10204080808080
80808080808080707377808080808080808080808080808080808040808080800280088080808080
8080808080808080808080808080808080808080808080808040285402152A540000000000000000
AA802080808080808080808080808080808080808080808080808080808080808080808080808080
0A102050808080808080808080808080808080808080808080808080808080808080804080802080
80552A552A552A552A552A550A808080808080808080808080808080808080808080088002112810
0000000000000000AA10204080808080808080808080808080808080808080808080808080808080
80808080808080800214205080808080808080808080808080808080808080808080808080808080
808008440880220480808080808080402A552A552A552A552A552A552A552A552A552A552A552A55
2A5580808080808000000000000000002A020202222202800822800A020A22080880300680808080
80808080808080808080808080808080081020D08280808080808080808080808080808080808080
80808080808080808080808080808080021428108080808080808080808080808080808080808080
80808080808080808080284408042204000000000000000080802080808080808080808080808080
80808080808080808080808080808080808080808080808008D420D0828080808080807E7F7F0180
80808080808080808080808080808080808080808080808002142810808080808080808080808080
80808080808080808080808080808080804028440A14225400000000000000008080208080021402
222002802202802A2208020280088002223E228022082002020208808080808008D420D082808080
7C7F7F7F3F7C7F0F8080808080808080808080808080808080808080808080800214081080808080
808080808080808080808080808080808080808080808080804028540A152A540000000000000000
0880A881808080808080808080808080808080808080808080808080808080808080808080808080
08D420408080602280808080807C7C7F0F8080808080808080808080808080808080808080808080
0204081080808080808080808080808080808080808080808080808080808080804028540A152A54
00000000000000000880A88180808080808080808080808080808080808080808080808080808080
80808080808080800AD420408080808080808080801B017E7C038080808080808080808080808080
80808080808080800204081080808080808080808080808080808080808080808080808080808080
804028540A152A540000000000000000AA80A8818080808080808080808080808080808080808080
808080808080808080808080808080800A1020508080808080808080808080303327808080808080
80808080808080808080804080808080028008808080808080808080808080808080808080808080
80808080808080808040285402152A540000000000000000AA802080808080808080808080808080
8080808080808080808080808080808080808080808080800A102050808080808080808080808080
80808080808080808080808080808080808080408080208080802A552A552A552A552A0580808080
808080808080808080808080808080A0D5AAD5AA951020800000000000000000AA10204080808080
80808080808080808080808080808080808080808080808080808080808080800214285080808080
808080808080808080808080808080808080808080808080808008440880220480808080D4AA8580
20552A552A552A552A552A552A552A552A552A552A552A552A0180A8D58080800000000000000000
36020222222202800822801202122208088030068080808080808080808080808080808080808080
081020D0828080808080808080808080808080808080808080808080808080808080808080808080
02142810808080808080808080808080808080808080808080808080808080808080284408142204
00000000000000008080208080808080808080808080808080808080808080808080808080808080
808080808080808008D420D0828080808080807C7F7F078080808080808080808080808080808080
80808080808080800214281080808080808080808080808080808080808080808080808080808080
804028440A14225400000000000000008080A8818002222222220280220280362208020280088002
2222228022082202020280808080808008D420D08280808080808070807E7F1F8080808080808080
80808080808080808080808080808080021408108080808080808080808080808080808080808080
8080808080808080804028540A152A5400000000000000000880A881808080808080808080808080
8080808080808080808080808080808080808080808080800AD420408080401580808080807C787F
1F808080808080808080808080808080808080808080808002040810808080808080808080808080
80808080808080808080808080808080804028540A152A5400000000000000000880A88180808080
80808080808080808080808080808080808080808080808080808080808080800AD4204080808080
808080808018807E7807808080808080808080808080808080808080808080800204081080808080
808080808080808080808080808080808080808080808080804028540A152A540000000000000000
AA80A881808080808080808080808080808080808080808080808080808080808080808080808080
0A102050808080808080808080808030370680808080808080808080808080808080804080808080
02A0D5AAD5AA80808080808080808080808080808080808080808080808080808040285402152A54
0000000000000000AA80208080808080808080808080808080808080808080808080808080808080
80808080808080800210205080808080808080808080808080808080808080808080808080808080
8080084080802080808080542A552A552A158080808080542A552A552A552A552A552A0180808080
80808080801020800000000000000000AA1020408080808080808080808080808080808080808080
80808080808080808080808080808080021428508080808080808080808080808080808080808080
8080808080808080808008440880220480A0D5828080808080802A552A552A552A552A552A552A55
2A552A552A552A1580808080808080800000000000000000223E3E1C1C223E80081C80223E22221C
08803E3E8080808080808080808080808080808080808080081020D0828080808080808080808080
80808080808080808080808080808080808080808080808002142810808080808080808080808080
80808080808080808080808080808080808028440A14220400000000000000008080208080808080
808080808080808080808080808080808080808080808080808080808080808008D420D082808080
8080807C7F3F1F808080808080808080808080808080808080808080808080800214281080808080
808080808080808080808080808080808080808080808080804028440A1522540000000000000000
8080A881803E221C1C1C3E80223E8022221C3E3E801C803E1C221E8022081C3E3E02088080808080
08D420D082808080808080607F7F7F3F808080808080808080808080808080808080808080808080
0214081080808080808080808080808080808080808080808080808080808080804028540A152A54
00000000000000000880A88180808080808080808080808080808080808080808080808080808080
80808080808080800AD420408080808080808080807C707F3F808080808080808080808080808080
80808080808080800204081080808080808080808080808080808080808080808080808080808080
804028540A152A5400000000000000000880A8818080808080808080808080808080808080808080
808080808080808080808080808080800AD4204080808080808080808080807C7107808080808080
80808080808080808080808080808080020408108080808080808080808080808080808080808080
8080808080808080804028540A152A540000000000000000AA80A881808080808080808080808080
8080808080808080808080808080808080808080808080800A102050808080808080808080808030
07068080808080808080808080808080808080408080808002808080808080808080808080808080
8080808080808080808080808080808080402850021528540000000000000000AA10208080808080
80808080808080808080808080808080808080808080808080808080808080800210205080808080
80808080808080808080808080808080808080808080808080800840088020048080808080542A55
028080552A552A552A552A552A552A552A552A552A552A0180808080801020800000000000000000
AA102040808080808080808080808080808080808080808080808080808080808080808080808080
02142850808080808080808080808080808080808080808080808080808080808080084408802204
8080808080808080808080802A552A552A552A552A552A552A552A552A5502808080808080808080
00000000000000008080808080808080808080808080808080808080808080808080808080808080
8080808080808080081020D082808080808080808080808080808080808080808080808080808080
80808080808080800214281080808080808080808080808080808080808080808080808080808080
808028440A1422440000000000000000808020808080808080808080808080808080808080808080
8080808080808080808080808080808008D420D0828080808080807E7F1F3F808080808080808080
80808080808080808080808080808080021428108080808080808080808080808080808080808080
8080808080808080804028540A15225400000000000000008080A881808080808080808080808080
80808080808080808080808080808080808080808080808008D420D08280808080808080787F7F7F
80808080808080808080808080808080808080808080808002140810808080808080808080808080
80808080808080808080808080808080804028540A152A5400000000000000000880A88180808080
80808080808080808080808080808080808080808080808080808080808080800AD4204080808080
80808080807C607F7F80808080808080808080808080808080808080808080800204081080808080
808080808080808080808080808080808080808080808080804028540A152A540000000000000000
0880A881808080808080808080808080808080808080808080808080808080808080808080808080
0AD4204080808080808080808080807C610F80808080808080808080808080808080808080808080
0204081080808080808080808080808080808080808080808080808080808080804028540A152A54
0000000000000000AA80A88180808080808080808080808080808080808080808080808080808080
80808080808080800A10205080808080808080808080803006808080808080808080808080808080
80808040808080808080808080808080808080808080808080808080808080808080808080808080
80802850021528540000000000000000AA1020808080808080808080808080808080808080808080
80808080808080808080808080808080021020508080808080808080808080808080808080808080
80808080808080808080084008802004808080808080808080552A552A552A552A552A552A552A55
2A552A552A552A552A018080801080800000000000000000AA102040808080808080808080808080
80808080808080808080808080808080808080808080808002142850808080808080808080808080
808080808080808080808080808080808080084408802204D0AA8180C0AAD5AAD580808080802855
2A552A552A552A552A552A55808080A8D5AAD5AA8580D0AA0000000000000000FFFF0000FFFF0000
//go.sysin dd *
if [ `wc -c < x-frogpix-t` != 16616 ]; then
made=FALSE
echo error transmitting x-frogpix-t --
echo length should be 16616, not `wc -c < x-frogpix-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 x-frogpix-t
echo -n ' '; ls -ld x-frogpix-t
fi
echo Extracting x-pack-unpack-t
sed 's/^X//' <<'//go.sysin dd *' >x-pack-unpack-t
24567
248
A5E609048506A2018604A000840284058408B100D018E600D002E601B1008508E600D002E601B100
8507A507C608A4029105E8E8E0C09012E602A402C0289008C6043015A0008402A604205A60A408D0
D9E600D0BDE601D0B9608A29C085054A4A050585058A85060A0A0A26060A26060A6605A506291F05
E6850660A00184048403888402A5E6090485068405B105D0020980A20186088507A402A603E8E8E0
C0900FC8C0289006C604301BA0008402A6048603205A60B105D0020980C507D006E608D0D4C60848
A000A608F00EE004B00AA50720EF60CAD0FAF00D9820EF608A20EF60A50720EF6068240410A56091
00E600D002E6016000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF00
//go.sysin dd *
if [ `wc -c < x-pack-unpack-t` != 578 ]; then
made=FALSE
echo error transmitting x-pack-unpack-t --
echo length should be 578, not `wc -c < x-pack-unpack-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 x-pack-unpack-t
echo -n ' '; ls -ld x-pack-unpack-t
fi
echo Extracting x-set40-t
sed 's/^X//' <<'//go.sysin dd *' >x-set40-t
20000
768
00000000000000000808080808000800141414000000000028947E14BF8A0A00083C0A1C281E0800
0626100804323000040A0A042A122C00080808000000000008040202020408000810202020100800
082A1C081C2A08000008083E0808000000000000008C88840000003E000000000000000000008C00
00201008040200008C92222222928C00080C080808081C001C22201084823E003E90101820221C00
101814123E1010003E021E2020221C001804821E22221C003E901088088404001C22221C22221C00
1C22223C90100C0000008C00008C000000008C00008C8884100804020408100000003E003E000000
04081020100804001C229088080008001C222A3A1A023C00088C14923E2222001E22221E22221E00
1C22020202221C001E22222222221E003E02021E02023E003E02021E020202003C02020232223C00
2222223E222222001C08080808081C002020202020221C0022120A060A1222000202020202023E00
22362A2A222222002222262A322222001C22222222221C001E22221E020202001C2222222A122C00
1E22221E0A1222001C22021C20221C003E080808080808002222222222221C0022222292148C0800
2222222A2A362200229214081492220022921408080808003E90100804823E003E06060606063E00
00020408102000003E30303030303E000000081422000000000000000000007F0408100000000000
00001C203C223C0002021E2222221E0000003C0202023C0020203C2222223C0000001C223E023C00
1824041E0404040000001C22223C201C02021E222222220008000C0808081C00100018101010120C
020222120E1222000C08080808081C000000362A2A2A220000001E222222220000001C2222221C00
00001E22221E020200003C22223C202000003A060202020000003C021C201E0004041E0404241800
0000222222322C0000002292148C0800000022222A2A3600000022140814220000002292148C0886
00003E1008043E00380C0C060C0C380008080808080808080E18183018180E002C1A000000000000
7F7F7F7F7F7F7F7FFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000
//go.sysin dd *
if [ `wc -c < x-set40-t` != 1631 ]; then
made=FALSE
echo error transmitting x-set40-t --
echo length should be 1631, not `wc -c < x-set40-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 x-set40-t
echo -n ' '; ls -ld x-set40-t
fi
echo Extracting x-txt2bin-t
sed 's/^X//' <<'//go.sysin dd *' >x-txt2bin-t
24761
49
A201200CFDC98DF0F9C98AF0F5C9BA101A38E9B0E000F00B0A0A0A0A8D3C03CA4C4003186D3C038D
3D036038E9074C4F03240410A5609100E600D002E60160223ABA22454E54455220274E4F4E452720
//go.sysin dd *
if [ `wc -c < x-txt2bin-t` != 172 ]; then
made=FALSE
echo error transmitting x-txt2bin-t --
echo length should be 172, not `wc -c < x-txt2bin-t`
else
made=TRUE
fi
if [ $made = TRUE ]; then
chmod 644 x-txt2bin-t
echo -n ' '; ls -ld x-txt2bin-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