home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
archives
/
cpm
/
8607-1.txt
< prev
next >
Wrap
Text File
|
1993-02-12
|
294KB
|
7,602 lines
2-Jul-86 05:41:21-MDT,976;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 05:41:15-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a001719; 2 Jul 86 7:04 EDT
Received: from (NEUTAGE)NEUVM1.BITNET by WISCVM.ARPA on 07/02/86 at
06:06:03 CDT
Date: Wed, 02 Jul 86 13:04:11 cet
To: INFO-CPM@AMSAA.ARPA
From: NEUTAGE%NEUVM1.BITNET@WISCVM.ARPA
Subject:
HI FOLKS.
Where do I find Mr. Nice Guy ?
I've seen the "advertice" of some of the PD software one can get
on the ARPA (DDN) side of the world.
I'm not able to log on the ARPANET direct, and because there is no
FTP between ARPANET and BITNET (it's a mail-only gateway) I can't get it
that way either.
My question is: Is there a friendly user who wants to help little old me
by sending some of the programs ? If sofileen please let me know.
Kind regards from Copenhagen. TAGE
Userid NEUTAGE
node.id NEUVM1.BITNET
2-Jul-86 08:31:52-MDT,2236;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 08:31:14-MDT
Received: from csnet-relay.arpa by AMSAA.ARPA id a022306; 23 Jun 86 11:25 EDT
Received: from gmr.com by csnet-relay.csnet id aa17892; 23 Jun 86 11:21 EDT
Date: Mon, 23 Jun 86 09:32 EST
From: RLH <HAAR%RCSMPA%gmr.com@CSNET-RELAY.ARPA>
To: info-cpm-request@AMSAA.ARPA
Subject: RE: HD64180 info req.
Resent-Date: Wed, 2 Jul 86 9:29:30 EDT
Resent-From: cpmlist@AMSAA.ARPA
Resent-To: info-cpm@CSNET-RELAY.ARPA
Ken Brookner requested info on HD64180 systems. I know of two types:
Steve Ciarcia (of BYTE fame) thru the Circuit Cellar offers a single
board computer with HD64180, 256K RAM, floppy controller, etc. for $369,
with Z-System software for $499. There are a couple of add-on boards with
modem/voice communications and SCSI interface available.
There are a couple of companies offering S-100 bus boards with similar
capabilities as well as access to other S-100 boards for additional
hardware capabilities.
As far as software, you could also run CP/M since the HD64180 executes
Z80 machine code directly. The HD64180 would be a natural for CP/M 3.0
since it's extended addressing fits CP/M's idea of banked memory quite
well. For those with a little more adventurous spirits, I would
recommend using the Z-system instead. It consists of ZCPR, a replacement
for CP/M's CCP that can be used with a slightly modified CP/M BIOS, and
ZRDOS, a complete replacement for the CP/M BDOS/BIOS. Z-system currently
offers a number of nice features over CP/M. There are some new versions
coming out that support banked memory and multi-tasking on the HD64180.
(If anyone from Echelon is listening, would comment on availablity dates?)
One of the big advantages of the Z-system is the large and continually
growing collection of utility programs that take advantage of it's special
features. And, as you might have gathered, it is alive and well with
committed support, unlike CP/M's death under Digital Research.
Bob Haar
[usual disclaimer == these opinions are purely my own personal ones, not
that of my employer, my wife and kids, or the guinea pig.]
2-Jul-86 12:32:54-MDT,994;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 12:32:46-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id ab00280; 2 Jul 86 13:43 EDT
Received: from hi-multics.arpa by AOS.BRL.ARPA id a010435; 2 Jul 86 13:34 EDT
Acknowledge-To: Dearden@HI-MULTICS.ARPA
Date: Wed, 2 Jul 86 09:47 CDT
From: Dearden@HI-MULTICS.ARPA
Subject: Re: uuen/de code and software exchange
To: info-cpm@BRL.ARPA
Message-ID: <860702144750.866991@HI-MULTICS.ARPA>
I'm not in favor of binary only public domain software. There are too
many brain-damaged idiots out there that think a good joke is to write a
program to trash the system, call it something else, and release it to
the public domain with a name that sounds like it does something great.
I like to see what I'm getting, and I trust no one.
Besides, if you don't have the source, you can't play with the operation
of the code if you are so inclined.
John Dearden -at Hi-Multics
2-Jul-86 21:29:23-MDT,896;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 21:29:17-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a008451; 2 Jul 86 22:23 EDT
Received: from USENET by SMOKE.BRL.ARPA id a009107; 2 Jul 86 22:10 EDT
From: "Nicholas B. Mason" <mason%noscvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Spread sheet for cpm wanted
Message-ID: <550@noscvax.UUCP>
Date: 2 Jul 86 20:28:24 GMT
Keywords: spreadsheet, cpm, Eagle pc
To: info-cpm@AMSAA.ARPA
I have a friend who is looking for a GOOD, inexpensive
spread sheet program for an eagle PC running CPM.
Does any one have suggestions?
Thanks in advance:
Nick Mason
NOSC San Diego , CA
mason@nosc
ihnp4 \
akgua \
decvax ------------------!sdcsvax!noscvax!mason
dcdwest /
ucbvax /
2-Jul-86 22:39:28-MDT,1183;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 22:39:13-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a008644; 2 Jul 86 23:55 EDT
Received: from hi-multics.arpa by AOS.BRL.ARPA id a024463; 2 Jul 86 23:56 EDT
Acknowledge-To: Wilkinson@HI-MULTICS.ARPA
Date: Wed, 2 Jul 86 22:29 CDT
From: Wilkinson@HI-MULTICS.ARPA
Subject: Cromenco Z-2 Computer
To: "{forum >udd>reflecs>bv>mtg>home.forum}"@HI-MULTICS.ARPA,
"{forum >site>forum_dir>micros.forum}"@HI-MULTICS.ARPA,
info-cpm@BRL.ARPA
Message-ID: <860703032913.565394@HI-MULTICS.ARPA>
A friend of mine has a line on a Cromenco Z-2 CPM computer system with
PFD 8" drives and a Hazeltine 1500 terminal. He would like to know:
1) is Cromenco still in business and if so how to get in touch with them.
2) where might there be software and hardware sources for programs and
documentation for this system.
3) any ones opinions as to what they think of the system as a personal,
get-to-know computers for a couple of retirees?
Richard Wilkinson {Wilkinson@HI-MULTICS.ARPA}
(612) 542-7788 (days after the 20th)
3-Jul-86 00:04:20-MDT,7020;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 00:03:30-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a008930; 3 Jul 86 1:02 EDT
Date: Wed, 2 Jul 1986 23:03 MDT
Message-ID: <KPETERSEN.12219635696.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To: Info-Cpm@AMSAA.ARPA
Subject: New files uploaded to SIMTEL20 during June
The following is a list of new files added to SIMTEL20's <CPM.*>
directories between 1-June-86 and 30-June-86. For a complete list
of all files, get PD:<CPM>CPM.CRCLST. FILES.DIR and CPM.IDX are also
available in that directory.
Filename Type Bytes CRC
PD:<CPM.22RSX>
RSX12.LBR.1 BINARY 40960 46A9H
PD:<CPM.BASIC>
MBAS521.MOD.1 ASCII 2414 0710H
ZBASDEMO.LBR.1 BINARY 37248 16DAH
PD:<CPM.BBSLISTS>
ABBL-07.LBR.1 BINARY 38272 330EH
BBSRGJUN.LBR.1 BINARY 139008 A61FH
FUBBS.JUN.1 ASCII 87410 F60FH
FUBBSX.BAS.1 ASCII 2553 2EB8H
GOVTBBS.LST.1 ASCII 8264 156FH
PDFT-066.LQT.1 BINARY 10880 4F35H
QXRCPM02.LQT.1 BINARY 10496 0E03H
RCPM076.LQT.1 BINARY 57088 6A7CH
PD:<CPM.BDOS>
P2DOS.LBR.1 BINARY 96512 8896H
P2DOS.MSG.1 ASCII 817 3ADAH
PD:<CPM.BYE5>
B5-CPM3.AQM.6 BINARY 3328 1690H
B5-CPM3.DQC.6 BINARY 4992 E008H
B5-DRIV3.AQM.6 BINARY 1920 C710H
B5-TIME.IQF.6 BINARY 1792 77EBH
B5IM-1.DQC.6 BINARY 4992 B057H
BDOS.AQM.5 BINARY 2176 A11DH
BYE5.DQC.6 BINARY 24448 64A9H
BYE5.HQS.6 BINARY 14336 2721H
BYE5-INS.LQT.3 BINARY 3712 9DCCH
BYE508.AQM.1 BINARY 85376 6B47H
BYE508.LBR.1 BINARY 157056 3DFDH
BYE508C.AQM.1 BINARY 46464 E349H
KMD20.LBR.1 BINARY 33152 DDB7H
LCHEAD.BYE.4 ASCII 829 9F63H
MERCURY.DQC.4 BINARY 2944 B778H
QX10-BYE.FQX.5 BINARY 2048 70C7H
TEST.BAS.5 ASCII 854 2614H
Z3&RCPM.FQX.2 BINARY 2560 9FBAH
PD:<CPM.CATLOG>
FATCAT24.LBR.1 BINARY 157824 05D4H
FATCAT2X.BUG.1 ASCII 938 B414H
KPRTLSTP.LBR.1 BINARY 27776 1137H
PD:<CPM.CCP>
EPEX11.NQT.1 BINARY 1664 08F5H
PD:<CPM.CPM3>
SIDRSX11.LBR.1 BINARY 3968 411AH
PD:<CPM.CPM68K>
SD68K.LBR.1 BINARY 27136 7CDEH
PD:<CPM.CPMLIB>
UNARC12.LBR.1 BINARY 104448 AC35H
PD:<CPM.DIRUTL>
AKA13.LBR.1 BINARY 12032 6F2EH
PD:<CPM.DIRUTL>
DA21C.LBR.1 BINARY 7296 E0DBH
SD116A.LBR.1 BINARY 83968 DD1EH
SSD.LBR.1 BINARY 70784 3664H
VOL-2.LBR.1 BINARY 9216 5E23H
DSKDRV16.LBR.1 BINARY 44288 9F32H
PD:<CPM.EDUCATION>
SPELLBE4.LBR.1 BINARY 7424 9C5AH
TTYPE3.LBR.1 BINARY 48128 E1FCH
TYPTEACH.LBR.1 BINARY 26752 B6A2H
PD:<CPM.FILE-DOCS>
JUNBEST.LQT.1 BINARY 27776 0834H
MAYBEST.LQT.1 BINARY 25728 C801H
PD:<CPM.GENDOC>
BYONDZ80.TQT.1 BINARY 3200 B1F6H
CD-DISKS.TQT.1 BINARY 2048 8BFEH
PD:<CPM.GENIE>
GENIE.BBS.1 ASCII 2020 EE26H
GENIE.CPM.1 ASCII 1030 F1ECH
GENIE.IBM.1 ASCII 999 A52AH
GENIE.IDX.1 ASCII 2017 1B11H
GENIE57.UQD.1 BINARY 3584 0186H
PD:<CPM.HAMRADIO>
NORADIO.601.1 ASCII 9013 59EAH
PD:<CPM.HELP>
RATFOR.HQP.1 BINARY 12160 5924H
PD:<CPM.KAYPRO>
DIRF37KP.LBR.1 BINARY 26624 BA55H
DVOAK.TQT.1 BINARY 2432 A95FH
HARDDISK.TQT.1 BINARY 3840 9477H
JUL86.MQG.1 BINARY 20096 F324H
K256BIOS.LBR.1 BINARY 48256 9F81H
KAY256.MSG.1 ASCII 1473 99DAH
KP2-EDIT.LBR.1 BINARY 6784 EF69H
M100-KP.LBR.1 BINARY 14592 7CDCH
TROMHINT.LBR.1 BINARY 2304 73A7H
PD:<CPM.LIST>
BRAD-WS.TQP.1 BINARY 1024 615BH
BRADCON.LBR.1 BINARY 47360 BF44H
BRADFORD.MQG.1 BINARY 3456 ECF0H
BRADZEX.LBR.1 BINARY 6272 52FDH
PRINT24A.LBR.1 BINARY 4480 EB9FH
PRNTCHAR.LBR.1 BINARY 8448 85D8H
PD:<CPM.MBBS>
MBYE44.LBR.1 BINARY 83840 6937H
PD:<CPM.MEX>
MEX114.REV.1 ASCII 7630 6EFEH
MEX114KP.NQT.1 BINARY 5632 C978H
PD:<CPM.MICNET>
BP.C.1 ASCII 17377 426BH
CISB.ANNOUNCE.1 ASCII 2289 FA5BH
CISB.MSG.1 ASCII 1092 1AEEH
DTE.C.1 ASCII 4126 64A3H
PD:<CPM.MISC>
ROYALOAK.DQR.1 BINARY 78976 AFF2H
PD:<CPM.MODEM>
1200$87.MDM.1 ASCII 1736 3BCDH
PD:<CPM.MODEM7>
M7-OVL29.LQT.1 BINARY 4096 D44DH
PD:<CPM.NUBYE>
NU-CLOCK.LBR.1 BINARY 76800 1815H
NUBY-INS.LBR.1 BINARY 144384 24BDH
NUBY-SUP.LBR.1 BINARY 33792 B257H
NUBYE100.LBR.1 BINARY 143232 9096H
NUKMD100.LBR.1 BINARY 124928 B9C2H
PD:<CPM.RCPM>
BBSETIQ.TQT.1 BINARY 4096 5694H
CD7.AQM.1 BINARY 9344 2CDDH
PBBS03.LBR.1 BINARY 212480 7FB2H
PBBSUAR1.LBR.1 BINARY 11776 9997H
PBBSUP-3.LBR.1 BINARY 89472 9C2EH
SYSOP.TQT.1 BINARY 2944 6260H
WIS105.LBR.1 BINARY 18176 99E6H
ZCMD26.LBR.1 BINARY 60032 AC63H
PD:<CPM.SQU-PORT>
SQUPORT2.C70MODS.1 ASCII 1848 C111H
PD:<CPM.SQUSQ>
COMPRESS.TQT.1 BINARY 7296 014EH
CRNCH12S.LBR.1 BINARY 55552 98C1H
CRUNCH12.LBR.1 BINARY 48512 5CB7H
PD:<CPM.STARTER-KIT>
COMPRESS.TXT.1 ASCII 12480 32BDH
PD:<CPM.SYSUTL>
SWITCHIO.LBR.1 BINARY 9984 1368H
PD:<CPM.TOPS-20>
TMODEM.MAC.400 ASCII 129054 2229H
PD:<CPM.TRS-80>
M100-XMD.LBR.1 BINARY 10496 BD64H
M100LF.BAS.1 BINARY 1280 FE4AH
PD:<CPM.TURBOPAS>
APLSND.PAS.1 ASCII 1901 D67EH
MAKEDOC.LBR.1 BINARY 4992 4644H
MAPSTATS.LBR.1 BINARY 65536 9189H
MULTASK.PQS.1 BINARY 5120 8C6AH
NICEPRNT.LBR.1 BINARY 18432 262BH
PAMPHLET.LBR.1 BINARY 21632 4BC0H
PASCSCR.LBR.1 BINARY 19968 8B2DH
PMLINK.LBR.1 BINARY 26240 ABF1H
RECIPE.PQS.1 BINARY 6656 D380H
RESCUE.LBR.1 BINARY 13568 BBBEH
SCRNGEN.LBR.1 BINARY 33280 C12CH
TP-UTIL.LBR.1 BINARY 102272 DDC6H
TURBSCR.LBR.1 BINARY 14976 E489H
WIPE.PAS.2 ASCII 541 4AEBH
PD:<CPM.TXTUTL>
FIX14.LBR.1 BINARY 13312 D7D3H
PRN36.LBR.1 BINARY 74112 8D8EH
SKIM.LBR.1 BINARY 13184 32BAH
TEXTCOM.LBR.1 BINARY 22528 00C2H
TXTL.LBR.1 BINARY 10880 452CH
PD:<CPM.VDOEDIT>
VDE21.HLP.1 ASCII 2715 3F01H
VDE211.LBR.1 BINARY 47232 3C91H
VDE21OVR.PQ8.1 BINARY 7936 657BH
PD:<CPM.WORLDBBS>
-README.JUNE86.1 ASCII 533 E072H
BBSAPI.TXT.1 ASCII 2801 9840H
BBSCAI.TXT.1 ASCII 15059 101FH
BBSCAN.TXT.1 ASCII 7275 2B30H
BBSEUR.TXT.1 ASCII 6521 623DH
BBSUSA.TXT.1 ASCII 28529 6034H
BBSUSC.TXT.1 ASCII 31527 416FH
BBSUSE.TXT.1 ASCII 16799 EFFEH
BBSUSN.TXT.1 ASCII 20274 7B5AH
BBSUSP.TXT.1 ASCII 32895 B8F2H
BBSUSS.TXT.1 ASCII 21280 7A5FH
BBSUSW.TXT.1 ASCII 21346 3229H
PD:<CPM.WSTAR>
OUTLN.LBR.1 BINARY 4992 4F51H
WSGEMINI.LBR.1 BINARY 7168 B594H
PD:<CPM.ZMODEM>
GZ..1 ASCII 15 0792H
RBSB.C.2 ASCII 4578 A4D4H
RZ.C.1 ASCII 25408 10B5H
RZSZZM.LBR.1 BINARY 72320 6224H
SZ.1.2 ASCII 8931 EFA6H
SZ.C.1 ASCII 26986 62E4H
SZ.MAN.3 ASCII 10468 EAB4H
ZMODEM.RQC.1 BINARY 10368 0AA5H
--Keith
3-Jul-86 12:49:59-MDT,1232;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 12:49:25-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a024899; 3 Jul 86 13:54 EDT
Received: from USENET by SMOKE.BRL.ARPA id a029676; 3 Jul 86 13:46 EDT
From: Richard Jennings <jennings%sage.cs.reading.ac.uk@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: RAM DISK FOR C128
Message-ID: <201@sage.cs.reading.Ac.Uk>
Date: 1 Jul 86 22:23:04 GMT
Posted: Tue Jul 1 22:23:04 1986
To: info-cpm@AMSAA.ARPA
In article <1754@brl-smoke.ARPA> PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA writes:
> I HAVE A COMMODORE C128 WHICH I USE IN THE CP/M MODE MOSTLY. I WOULD VERY
>MUCH LIKE TO KNOW IF ANY OF YOU C128 OWNERS OUT THERE HAVE THOUGHT OF USING
>64K OF THIS MEMORY AS A RAM DISK WITH THE OTHER 64K AS PROGRAM MEMORY....
Errrmm, doesn't the C128 run CP/M Plus????!!!!!!
If so, you need both 64K pages:- one for system and one for TPA - this saves
you warm-booting all the time and having a system eating up 1/4 of all your
discs.
--
Richard Jennings (incomprehensible jargon follows):
_^_ jennings@sage.cs.reading.UUCP
<o|o>
/ \ - remember space invaders??
5-Jul-86 10:16:37-MDT,1736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 10:16:27-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a004140; 5 Jul 86 11:45 EDT
Received: from USENET by SMOKE.BRL.ARPA id a021597; 5 Jul 86 11:40 EDT
From: hong%garfield.uucp@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: CPM HELP
Message-ID: <1324@garfield.UUCP>
Date: 4 Jul 86 15:00:50 GMT
Sender: perry%garfield.uucp@BRL.ARPA
To: info-cpm@AMSAA.ARPA
recently, i got more invloved with my apple with cpm.
except some common commands like pip, stat and wordstar,
i don't know much about cpm.
i downloaded many startrek programs from toronto RCPM, i can't compile
most of thee startrek games. some because of space limit or many
errors. i, then, followed the simple doc with a game called 'strtrk/1.bas'
which tells me it may compile with basic-e,(a public domain basic compiler
which i also download from there). some problems meet, the startrek games
i downloaded with source, some are not compatible with basic-e or the source
file is damaged( i found some incomplete statements).
i only succeed in compile on version with basic-e, can anyone give me
some more info about basic-e, like the book.
any better suggestions about a better basic compiler?
any good public domain word processor you have used? send me the name
of the program, so i can search through RCPM.
now, i found that many good cpm programs are in public domain, can you
suggest some of them?
i have used modem7, mex, nulu ,d and cat.
any apple users have successfully run/compile the bigtrek?
is it possible for us to compile/run a big basic program like that in
the 56K cpm v2.2 with an apple?
thanks a lot.
HONG
5-Jul-86 18:31:32-MDT,939;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 18:31:23-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a004943; 5 Jul 86 19:42 EDT
Received: from USENET by SMOKE.BRL.ARPA id a023828; 5 Jul 86 19:40 EDT
From: h1c%psuecl.bitnet@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: Kermit for Epson QX-10 computer ?
Message-ID: <302@PSUECL>
Date: 5 Jul 86 08:56:30 GMT
To: info-cpm@AMSAA.ARPA
Can anyone tell me where I can find a kermit for Epson Qx-10
computer ? My machine runs CP/M-80 operating system version 2.2 and
2.25. The main feature of this machine is that the computer terminal
modeled after the TVI-920 terminal. I also would like to know any
communication programs can emulate VT-100 under this operating system.
Your reply will be much grateful. Thanks in advance.
Heng Chang Bitnet: H1C@PSUECL
6-Jul-86 10:49:28-MDT,2453;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 6 Jul 86 10:49:17-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a006524; 6 Jul 86 12:13 EDT
Received: from mit-mc.arpa by AOS.BRL.ARPA id a005849; 6 Jul 86 12:06 EDT
Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 6 JUL 86 12:04:31 EDT
Date: Sun, 6 Jul 86 12:05:14 EDT
From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA>
Subject: LE, SPERRY, CLK UTLS
To: INFO-MICRO%MX.LCS.MIT.EDU@MIT-MC.ARPA, INFO-CPM%MX.LCS.MIT.EDU@MIT-MC.ARPA,
info-ibmpc@USC-ISIB.ARPA
cc: PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA
Message-ID: <[MX.LCS.MIT.EDU].931509.860706.PLOUFF>
The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.
This ARC file contains the source and executable files for two
utilities that will be useful to owners of Leading Edge, Model M
and Sperry PC personal computers. (Maybe Model D also. See below.)
They are:
LE_MCLK Reads the on-board battery backed-up clock
and sets the current clock to its values.
This code is intended to be executed in your
AUTOEXEC.BAT file. The .COM file is only 28 bytes.
SETCLK Sets the date and time of the battery backed-up
clock and simultaneously updates the current clock.
The function of LE_MCLK is built into DOS 2.11 as supplied with
the machine, and the v2.11 COMMAND.COM will update the battery
clock with the internal DATE and TIME commands. So, if you stick
with DOS 2.11 you don't need these utilities. However if you
upgrade your DOS to 3.xx, you will find that it has no knowledge
of the on-board battery backed-up clock. These utilities will then
do the job and restore full function to the use of the battery clock.
The programs use an undocumented feature of the on-board
ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
functions beyond that of the IBMPC ROM BIOS. This is fully explained
in the documentation.
I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
is identical to the one supplied with the Model M. If so, then the
ROM BIOS must also provide the same functionality for the additional
INT 1AH functions - so this code will probably work with a model D
also. Someone who has a Model D please let me know. Reply to
PLOUFF at MIT-MX since I am not on all of the mailing lists to which
this is directed.
8-Jul-86 11:41:18-MDT,854;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 8 Jul 86 11:41:03-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a011500; 8 Jul 86 12:45 EDT
Received: from xerox.arpa by AOS.BRL.ARPA id a016692; 8 Jul 86 12:43 EDT
Received: from CheninBlanc.ms by ArpaGateway.ms ; 08 JUL 86 09:41:23 PDT
Date: 8 Jul 86 09:41:19 PDT (Tuesday)
From: CMadsen.ES@XEROX.ARPA
Subject: Re: uuen/de code and software exchange
In-reply-to: <860702144750.866991@HI-MULTICS.ARPA>
To: Dearden@HI-MULTICS.ARPA
cc: info-cpm@BRL.ARPA
Message-ID: <860708-094123-1838@Xerox>
I agree with you.There are to many IDIOTS out there.Really I should say
To many
Childish people on the net.Instead of using the Net as a tool;They
rather screw it up for everbody else.
I think the Sources should be given as will!!
--Carl
10-Jul-86 11:01:53-MDT,852;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 11:01:42-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a014900; 10 Jul 86 12:18 EDT
Received: from USENET by SMOKE.BRL.ARPA id a019630; 10 Jul 86 12:17 EDT
From: Sunil Bhargava <sunil@BRL-SMOKE.ARPA>
Newsgroups: net.micro.cpm,net.micro.pc,net.wanted
Subject: Re: Removal from mailing list.
Message-ID: <2076@brl-smoke.ARPA>
Date: 10 Jul 86 16:17:45 GMT
Expires: 7/17/86
Keywords: sale wanted
To: info-cpm@AMSAA.ARPA
I want a second hand baby blue board for an ibm pc. That is the
cpm emulation board for the pc. I am willing to pay about $100 for
one in perfect working condition, with manual and software. Please
reply to me directly since I am not on this mailing list.
thanx
Reply-to: sunil@brl.arpa
10-Jul-86 15:56:41-MDT,509;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 15:56:35-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a023537; 10 Jul 86 17:19 EDT
Received: from USENET by SMOKE.BRL.ARPA id a003503; 10 Jul 86 17:07 EDT
From: "Virginia A. Kaste <ginny>" <ginny@BRL-SMOKE.ARPA>
Newsgroups: net.micro.cpm
Subject: testing distributions again
Message-ID: <2094@brl-smoke.ARPA>
Date: 10 Jul 86 21:07:48 GMT
To: info-cpm@AMSAA.ARPA
for info-cpm
10-Jul-86 18:15:39-MDT,778;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 18:15:26-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a024000; 10 Jul 86 19:45 EDT
Received: from USENET by SMOKE.BRL.ARPA id a007586; 10 Jul 86 19:43 EDT
From: "Steve Miller@ex6191" <miller%qantel.uucp@BRL.ARPA>
Newsgroups: net.micro.68k,net.micro.cpm
Subject: CPM 68K CCP
Message-ID: <657@qantel.UUCP>
Date: 9 Jul 86 03:59:25 GMT
To: info-cpm@AMSAA.ARPA
Does anyone know where I can get information on writing a
new CCP for CP/M 68K Version 1.2. I called DRI and they don't have
any information for the general public. I would like to add features
much like ZCPR but in the CP/M 68K enviroment. Please Email any
information you may have.
10-Jul-86 20:09:59-MDT,2605;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 20:09:50-MDT
Received: from mit-mc.arpa by AMSAA.ARPA id a024131; 10 Jul 86 21:26 EDT
Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 10 JUL 86 21:28:22 EDT
Date: Thu, 10 Jul 86 21:26:25 EDT
From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@mit-mc.ARPA>
Subject: [PLOUFF%MX.LCS.MIT.EDU: LE, SPERRY, CLK UTLS]
To: info-micro@BRL.ARPA, info-cpm@AMSAA.ARPA
Message-ID: <[MX.LCS.MIT.EDU].932196.860710.PLOUFF>
Date: Sun, 6 Jul 86 12:05:14 EDT
From: Robert L. Plouffe <PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA>
To: INFO-MICRO%MX.LCS.MIT.EDU at MIT-MC.ARPA,
INFO-CPM%MX.LCS.MIT.EDU at MIT-MC.ARPA,
info-ibmpc at USC-ISIB.ARPA
cc: PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA
Re: LE, SPERRY, CLK UTLS
The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.
This ARC file contains the source and executable files for two
utilities that will be useful to owners of Leading Edge, Model M
and Sperry PC personal computers. (Maybe Model D also. See below.)
They are:
LE_MCLK Reads the on-board battery backed-up clock
and sets the current clock to its values.
This code is intended to be executed in your
AUTOEXEC.BAT file. The .COM file is only 28 bytes.
SETCLK Sets the date and time of the battery backed-up
clock and simultaneously updates the current clock.
The function of LE_MCLK is built into DOS 2.11 as supplied with
the machine, and the v2.11 COMMAND.COM will update the battery
clock with the internal DATE and TIME commands. So, if you stick
with DOS 2.11 you don't need these utilities. However if you
upgrade your DOS to 3.xx, you will find that it has no knowledge
of the on-board battery backed-up clock. These utilities will then
do the job and restore full function to the use of the battery clock.
The programs use an undocumented feature of the on-board
ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
functions beyond that of the IBMPC ROM BIOS. This is fully explained
in the documentation.
I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
is identical to the one supplied with the Model M. If so, then the
ROM BIOS must also provide the same functionality for the additional
INT 1AH functions - so this code will probably work with a model D
also. Someone who has a Model D please let me know. Reply to
PLOUFF at MIT-MX since I am not on all of the mailing lists to which
this is directed.
11-Jul-86 17:37:09-MDT,1120;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 11 Jul 86 17:36:57-MDT
Received: from edwards-2060.arpa by AMSAA.ARPA id a009860; 11 Jul 86 18:42 EDT
Date: Fri 11 Jul 86 15:44:01-PDT
From: BUSSARD@EDWARDS-2060.ARPA
Subject: XOR S-100 4 system
To: info-cpm@AMSAA.ARPA
cc: BUSSARD@EDWARDS-2060.ARPA
Message-ID: <12221925879.13.BUSSARD@EDWARDS-2060.ARPA>
I complete set of the manuals for the S100-4 system and the basic
manual for the 12 slot chassis also. Like most people I have one problem
with the system, B drive spends alot of time (about 90%) being not ready.
The drives (8" Tandon Thinlines)seem check out ok on other systems and disk
controllers? Not long before they quit the s-100 market,I got a bios upgrade
from them, fall of '84 I think. Would like to hear from owners and users.
Send mail directly to: Bussard@Edwards-2060
Note: That it is only B drive not ready not A or the 5.25" on C & D. Have
replaced all of the devices on the disk controller that, though seem good,
could be suspect.
Lewis G. Bussard
-------
14-Jul-86 12:33:37-MDT,736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 14 Jul 86 12:33:23-MDT
Received: from xerox.arpa by AMSAA.ARPA id a002442; 14 Jul 86 13:46 EDT
Received: from CheninBlanc.ms by ArpaGateway.ms ; 14 JUL 86 10:47:31 PDT
Date: 14 Jul 86 10:38:04 PDT (Monday)
From: Chapman.ES@xerox.ARPA
Subject: Anyone ever heard of a TI99?
To: Info-Micro@AMSAA.ARPA, Info-cpm@AMSAA.ARPA
cc: Chapman.ES@xerox.ARPA
Message-ID: <860714-104731-2027@Xerox>
A friend here in Southern California has one of these and is looking for
other people with it. He'd be interested in any pointers to clubs in
the SoCal area. He also needs a word processor. What is available for
this machine?
Cheryl
15-Jul-86 13:54:33-MDT,24450;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:52:50-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a003582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013818; 15 Jul 86 13:47 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: uuencode source, com, and discussion
Message-ID: <1811@ecsvax.UUCP>
Date: 15 Jul 86 01:01:42 GMT
To: info-cpm@AMSAA.ARPA
I apologize for the delay. This message and the one that follows
contain the Turbo Pascal source and uuencoded binaries for uuencode
and uudecode to run under CP/M 2.2 (and probably 3.0). I know
that posting software to net.micro.cpm is not very usual, but I received
a number of requests for the source and/or binaries, and rather than
try to send to individuals, I decided to post.
Re my suggestion that CP/Mers exchange software via the net: I have
a couple of responses to mail and news followups. First, what I
would suggest is that software exchange take one of two forms--either
posting articles containing only source and documentation, which would
best be applied to programs written for ASM and maybe Turbo, both of
which are almost universally accessible (or MBASIC, I suppose); or
for software written in less universal languages, posting files with
a short header describing the contents, followed by a uuencoded
library file containing source, documentation, and object code. I've
noticed lately that most newer software on RCPM systems is packaged
this way, and it does seem sensible. If the .LBR file is squeezed
before uuencoding, on average the uuencoded version will be no larger
than the unsqueezed original. We might want to establish either a
net.micro.cpm.sources or something similar if there was a lot of traffic,
but perhaps at first could just use net.micro.cpm, since the volume is
now low anyway. I do agree that source should always be included when
it is available (and perhaps not too huge. 240k .ASM files would
probably be stretching things).
To start things off, then, in response to popular request, here follow
uuencode.pas and uuencode.uue (the encoded binary, which can be decoded
with UN*X uudecode before downloading to your system). The files are
separated by ---------------CUT HERE-----------lines, since I've
never figured out how to package shar files.
Ross Alford
...mcnc!ecsvax!alford
----------------------CUT HERE----------for uuencode.pas---------
Program uuencode;
CONST header = 'begin';
trailer = 'end';
defaultMode = '644';
defaultExtension = '.uue';
offset = 32;
charsPerLine = 60;
bytesPerHunk = 3;
sixBitMask = $3F;
endofinfile : boolean = FALSE;
TYPE string80 = string[80];
VAR inf : file;
outfile: text;
infilename, outfilename, mode: string80;
lineLength, numbytes, bytesInLine: integer;
line: array [0..59] of char;
hunk: array [0..2] of byte;
chars: array [0..3] of byte;
{ procedure debug;
var i: integer;
procedure writebin(x: byte);
var i: integer;
begin
for i := 1 to 8 do
begin
write ((x and $80) shr 7);
x := x shl 1
end;
write (' ')
end;
begin
for i := 0 to 2 do writebin(hunk[i]);
writeln;
for i := 0 to 3 do writebin(chars[i]);
writeln;
for i := 0 to 3 do writebin(chars[i] and sixBitMask);
writeln
end; }
{Binary file read added by Ross Alford, ...!mcnc!ecsvax!alford. The original
MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
CP/M Turbo expects some file info to be stored in the first 4 bytes of files
of any type other than TEXT. Getbyte (below) and Putbyte (in UUDECODE)
bypass this 'feature' by using blockread and blockwrite. The only global
variables either use are 'infilename' and 'inf' or 'outfilename' and 'outf'}
function getbyte(var b : byte) : boolean;
type bufptr = ^bufrec;
bufrec = record
next : bufptr;
buffer : array[1..128] of byte
end;
const sectstobuf = 8; {max number of sectors to buffer}
sectsread : integer = 0; {constants are essentially statics}
bytptr : integer = 129;
notopen : boolean = TRUE;
j : integer = 0;
infsize : integer = 0;
listsave : integer = 0;
var list,temp,temp2 : bufptr;
begin
if notopen then
begin
notopen := FALSE;
assign(inf,infilename);
{$i-}
reset(inf);
{$i+}
if ioresult <> 0 then
begin
writeln('File ',infilename,' not found. Aborting');
halt
end;
infsize := filesize(inf);
new(list);
list^.next := NIL;
listsave := ord(list);
sectsread := 0
end;
list := ptr(listsave);
if bytptr > 128 then
begin
if list^.next <> NIL then
begin
temp := list^.next;
dispose(list);
list := temp;
bytptr := 1
end
else begin
dispose(list);
list := NIL;
j := 0;
while (sectsread<infsize) and (j<sectstobuf) do
begin
new(temp2);
temp2^.next := NIL;
if list=NIL then
begin
list := temp2;
temp := list
end
else begin
temp^.next := temp2;
temp := temp2
end;
blockread(inf,temp^.buffer,1);
j := succ(j);
sectsread := succ(sectsread)
end;
bytptr := 1
end
end;
listsave := ord(list);
if list <> NIL then
begin
b := list^.buffer[bytptr];
bytptr := succ(bytptr);
getbyte := TRUE
end
else begin
b := 0;
getbyte := FALSE
end
end;
procedure Abort (message: string80);
begin {abort}
writeln(message);
close(inf);
close(outfile);
halt
end; {abort}
procedure Init;
procedure GetFiles;
VAR i: integer;
temp: string80;
ch: char;
begin {GetFiles}
if ParamCount < 1 then abort ('No input file specified.');
infilename := ParamStr(1);
{$I-}
assign (inf, infilename);
reset (inf);
{$i+}
if IOResult > 0 then abort (concat ('Can''t open file ', infilename));
write('Uuencoding file ', infilename);
i := pos('.', infilename);
if i = 0
then outfilename := infilename
else outfilename := copy (infilename, 1, pred(i));
mode := defaultMode;
if ParamCount > 1 then
for i := 2 to ParamCount do
begin
temp := Paramstr(i);
if temp[1] in ['0'..'9']
then mode := temp
else outfilename := temp
end;
if pos ('.', outfilename) = 0
then outfilename := concat(outfilename, defaultExtension);
assign (outfile, outfilename);
writeln (' to file ', outfilename, '.');
{$i-}
reset(outfile);
{$i+}
if IOresult = 0 then
begin
Write ('Overwrite current ', outfilename, '? [Y/N] ');
repeat
read (kbd, ch);
ch := Upcase(ch)
until ch in ['Y', 'N'];
writeln (ch);
if ch = 'N' then abort(concat (outfilename, ' not overwritten.'))
end;
close(outfile);
{$i-}
rewrite(outfile);
{$i+}
if ioresult > 0 then abort(concat('Can''t open ', outfilename));
end; {getfiles}
begin {Init}
GetFiles;
bytesInLine := 0;
lineLength := 0;
numbytes := 0;
writeln (outfile, header, ' ', mode, ' ', infilename);
end; {init}
procedure FlushLine;
VAR i: integer;
procedure writeout(ch: char);
begin {writeout}
if ch = ' ' then write(outfile, '`')
else write(outfile, ch)
end; {writeout}
begin {FlushLine}
write ('.');
writeout(chr(bytesInLine + offset));
for i := 0 to pred(lineLength) do
writeout(line[i]);
writeln (outfile);
lineLength := 0;
bytesInLine := 0
end; {FlushLine}
procedure FlushHunk;
VAR i: integer;
begin {FlushHunk}
if lineLength = charsPerLine then FlushLine;
chars[0] := hunk[0] shr 2;
chars[1] := (hunk[0] shl 4) + (hunk[1] shr 4);
chars[2] := (hunk[1] shl 2) + (hunk[2] shr 6);
chars[3] := hunk[2] and sixBitMask;
{debug;}
for i := 0 to 3 do
begin
line[lineLength] := chr((chars[i] and sixBitMask) + offset);
{write(line[linelength]:2);}
lineLength := succ(lineLength)
end;
{writeln;}
bytesInLine := bytesInLine + numbytes;
numbytes := 0
end; {FlushHunk}
procedure encode1;
begin {encode1};
if numbytes = bytesperhunk then flushhunk;
endofinfile := not (getbyte(hunk[numbytes]));
numbytes := succ(numbytes)
end; {encode1}
procedure terminate;
begin {terminate}
if numbytes > 0 then flushhunk;
if lineLength > 0
then
begin
flushLine;
flushLine;
end
else flushline;
writeln (outfile, trailer);
close (outfile);
close (inf);
end; {terminate}
begin {uuencode}
init;
while not endofinfile do encode1;
terminate
end. {uuencode}
----------------------CUT HERE----------for uuencode.uue----------
begin 644 UUENCODE.COM
MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F,`!`"A0@``````
M```````````````````````````````````````````````````*3D5#(#@T
M,#%,4R!H:6QI=&5E9610$``)&UL_,FP;9QLJ`````````!M6````````````
M``````0;/0`````````````````!("`$`P```ALJ````!!L]("```AM%10T`
M`AM2?P`````"&U0````"&R@Q```"&RDQ`````'ZW-\@C]>5^S>@!X?$]R!CS
MS0`"#0H`R6_ES:8`R?Z`W&L"U(0"YG\8[N4A[@$8!.4AZ`$B$P+AX_7%U7XC
MMR@'Y<WH`>$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS=`!V"K.
M`1C?]<75Y2&H`<TU`B&B`<W0`2JZ`=0=`N'1P?')]<75Y2&T`1CI]<75Y2&N
M`1C@]3K@`+<H$,75Y:\RX``AR`'--0+AT<'QR?4ZX`#^_RCVQ=7E/O\RX``A
MP@$8X_7%U>4AO`$8VO7%U>7E$?``(8L!`1``[;#1.IX!3SJ<`8+5S=P"T3J?
M`4\ZG0&#S=P"(?``S=`!*J`!S1T"X='!\<DA\``&``GK(9L!-#4H`A+)&QLA
M"@,&`RL.+PR6,/R&]7G^,"@!$A/Q$.W)`0ID(6L!PS4"(7L!PS4"$0,`S5\#
MY@$8!A$&`,U?`V\F`,D1$@`8]!$,`!@($0\`&`,1"0#AP>4ZW0"W*!K5Q<V@
M`'RU*`_-X0/^$R`(S>$#_@/*U"#!T2H!`!GI(M(`>#+=`'FW*`L^PS(X`"'[
M'R(Y`"&E`Q&@``$8`.VP(;T#$;@``0P`[;"O;V<RT``BU``BU@`^?C+1`#+@
M`,G#%@/#(`/#.0/#+P/#-`/#*@/#.0/#(`/!`((`0P#$`,4`P0#%U>7=Y?WE
M]6\F`.7-I@#Q_>'=X>'1P<G%U>7=Y?WES:,`?1CK#O\8#`X`[5O2`!,:_B`H
M^B%E``8#S7L$&LVF!/Y!.!+^43`.1Q,:_CH@!GC60!,8`ANO(5P`=R,,#2@9
M&LV"!"`3_C\H#_XJ*`O^+B@'!@O-=P08$`8(S5X$&OXN(`83!@/-7@0A:``&
M`(Q#[R1H,#2@(_C\H"?XJ*`O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
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
M,M``R2KB`!$8`!D&`(Q#[R2+B`'[F#\#+=B@*/AK-QA;-#!<8`\M^R"KB
M`.41#``9ZPX0S04`X3P@!3[_,M``-@#)XR+D`./E(<(`(N(`X<GC(N0`XR+B
M`,M^P#X",M``R>,BY`#C(N(`RW;`/@,RT`#)/J_C(N0`X^4AP@`BX@#+KO7-
MZ!3QMR@#S>$!X<D&`"'1`'[^?S@"/GY/-GXJT@`BU``6`,WA`W<>`?X(*#;^
M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(#`1_@,@V3K=`+<HT]TJY`##%B!YNBC(
M?A0CS<D#&,`5^OT4*\T``@@@"``=*+$8[P0%**L8!`0%(`0V&A@(S>$!-@TC
M-@HC(M8`R2KB`#K0`+<@>7[+;R!PY@\@+B,C?K?REQ4.%.7-NAGA*`CE$2X`
M&38:X:]W-,8N7Q8`&7[^&B`]*N(`(R,U](!LJU`#M6]8`M^U2.`4&_\WJ
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
MZRI-?7,C<BI+?2)-?2%(?^4J37T1`@`9Y2$!`,V^<("H((2,B""$J`R$C
M(@,APQ`B(0$`(@4A*D]](@PA*D]]Y2$``-'-D@;+1<K<(BI/?1$"`!GE*@4A
M*]$9;B8`ZRI9?7,J!2$C(@4A(0$`?3);?</K(B$``.LJ67US(0``?3);?2I;
M?28`R?WA!E`A^GS-X@7]Y2'Z?,TZ!<V;%"$``,VJ%\W-%\T;("%(?\VP<
M("&8?LUI%,T;(,/4(,G#U27-FQ_E(0$`T<W@!LM%REHCS4T%&$YO(&EN<'5T
M(&9I;&4@<W!E8VEF:65D+LWQ(B$!`,U]'P90(4=^S>(%S9L4S;H7$%5U96YC
M;V1I;F<@9FEL92`A1W[-.@4A``#-JA?-&R`A+@!E+@'E(4=^S3H%S;(((N!\
M*N!\Y2$``-'-?P;+1<K"(R%'?LTZ!090(?9]S>(%P]LC(4=^S3H%(0$`Y2K@
M?"O-:P@&4"'V?<WB!<U-!0,V-#0&4"&E?<WB!<V;'^4A`0#1S<P&RT7*9B0A
M`@#ES9L?T<UF!GJSRF8DU2+@?"K@?,U]'P90(8]\S>(%(8]\Y2$!`-$9;B8`
MY<V!!2$P`.4A.0#-FP7-3Q/+1<I/)"&/?,TZ!090(:5]S>(%PUTD(8]\S3H%
M!E`A]GW-X@4JX'PCT1O#!20A+@!E+@'E(?9]S3H%S;((Y2$``-'-?P;+1<J<
M)"'V?<TZ!<U-!00N=75ES3T(!E`A]GW-X@4AF'[E(?9]S3H%S6\3S1L@S9L4
MS;H7"2!T;R!F:6QE("'V?<TZ!2$``,VJ%R$N`,TB%\W-%\T;("&8?LW_$\WQ
M'^4A``#1S7\&RT7*FB7-FQ3-NA<23W9E<G=R:71E(&-U<G)E;G0@(?9]S3H%
M(0``S:H7S;H7"#\@6UDO3ET@S1L@(;H`S:D4(8Y\S406S1L@*HY\)@#-Y!]]
M,HY\*HY\)@#ES8$%(5D`S9$%(4X`S9$%S4\3RT7*'B4JCGPF`,V;%,TB%\W-
M%\T;("J.?"8`Y2%.`-'-?P;+1<J:)2'V?<TZ!<U-!1$@;F]T(&]V97)W<FET
M=&5N+LT]",WQ(B&8?LUI%,T;("&8?LW^$\WQ'^4A``#1S<P&RT7*U"7-304+
M0V%N)W0@;W!E;B`A]GW-.@7-/0C-\2+)S2LC(0``(I]](0``(J-](0``(J%]
M(9A^S;H4S;H7!6)E9VEN(2``S2(7(:5]S3H%(0``S:H7(2``S2(7(4=^S3H%
M(0``S:H7S<T7S1L@R<-F)OWAX7TR@WS]Y2J#?"8`Y2$@`-'-?P;+1<I4)B&8
M?LVZ%"%@`,TB%\T;(,-E)B&8?LVZ%"J#?"8`S2(7S1L@R<V;%"$N`,TB%\T;
M("J??>4A(`#1&>7-)R8A``#E*J-]*]'-9@9ZL\JM)M4BA'PA8WWE*H1\T1EN
M)@#ES2<F*H1\(]$;PXLF(9A^S;H4S<T7S1L@(0``(J-](0``(I]]R2JC?>4A
M/`#1S7\&RT7*V2;-)"8A7'WE(0``T1GE(6!]Y2$``-$9;B8`Y2$"`-'-5@?K
MX7,A7'WE(0$`T1GE(6!]Y2$``-$9;B8`Y2$$`-'-3@?E(6!]Y2$!`-$9;B8`
MY2$$`-'-5@?1&>OA<R%<?>4A`@#1&>4A8'WE(0$`T1EN)@#E(0(`T<U.!^4A
M8'WE(0(`T1EN)@#E(08`T<U6!]$9Z^%S(5Q]Y2$#`-$9Y2%@?>4A`@#1&6XF
M`.4A/P#1?*)G?:-OZ^%S(0``Y2$#`-'-9@9ZL\K<)]4B<7PA8WWE*J-]T1GE
M(5Q]Y2IQ?-$9;B8`Y2$_`-%\HF=]HV_E(2``T1GKX7,JHWTC(J-]*G%\(]$;
MPYDG*I]]Y2JA?=$9(I]](0``(J%]R2JA?>4A`P#1S7\&RT7*`BC-QB8A8'WE
M*J%]T1GES0`A?>X!;WTR_R`JH7TC(J%]R2JA?>4A``#1S<P&RT7*,BC-QB8J
MHWWE(0``T<W,!LM%RDLHS20FS20FPTXHS20F(9A^S;H4S;H7`V5N9,W-%\T;
M("&8?LUI%,T;("%(?\VP<(,G-*",J_R`F`'WN`6_+1<J+*,WO)\-W*,T?
M*,/4(`%O?3+_("JA?2,BH7W)*J%]Y2$``-'-S`;+1<K,!LW&)BJC?>4A``#1
MS<P&RT7*S`;-)";-)";#0"C-)"8AF'[-NA3-NA<#96YDS<T7S1L@(9A^S6D4
:S1L@(4A_S;`:S1L@R<TH(RK_("8`?>X!;P`!
`
end
15-Jul-86 13:56:42-MDT,23769;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:55:38-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id aa03582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013843; 15 Jul 86 13:47 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: uudecode: source and .com for CP/M
Message-ID: <1812@ecsvax.UUCP>
Date: 15 Jul 86 01:09:30 GMT
To: info-cpm@AMSAA.ARPA
This article contains Turbo Pascal source and uuencoded .com versions
of uudecode.com for CP/M. The encoded version can be decoded by
UN*X uudecode before downloading. The source requires Turbo with
built in access to command line arguments (eg 1.0 won't work without
adding your own parser, not too difficult actually). The files follow,
separated by --------------CUT HERE-----------lines.
Ross Alford
...mcnc!ecsvax!alford
------------------------CUT HERE-----------for uudecode.pas----------
program uudecode;
CONST defaultSuffix = '.uue';
offset = 32;
TYPE string80 = string[80];
VAR infile: text;
outf : file;
lineNum: integer;
line: string80;
outfilename : string80;
{Binary file read added by Ross Alford, ...!mcnc!ecsvax!alford. The original
MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
CP/M Turbo expects some file info to be stored in the first 4 bytes of files
of any type other than TEXT. Putbyte (below) and Getbyte (in UUENCODE)
bypass this 'feature' by using blockread and blockwrite. The only global
variables either use are 'infilename' and 'inf' or 'outfilename' and 'outf'}
procedure putbyte(b : byte; flush : boolean);
type bufptr = ^bufrec;
bufrec = record
next : bufptr;
buffer : array[1..128] of byte
end;
const sectstobuf = 8; {max number of sectors to buffer}
sectswritten : integer = 1; {constants are essentially statics}
bytptr : integer = 1;
notopen : boolean = TRUE;
infsize : integer = 0;
listsave : integer = 0;
tempsave : integer = 0;
var list,temp,temp2 : bufptr;
i : integer;
begin
if flush then
begin
list := ptr(listsave);
temp := list;
for i := 1 to sectswritten do
begin
blockwrite(outf,temp^.buffer,1);
temp := temp^.next
end;
close(outf)
end
else begin
if notopen then
begin
notopen := FALSE;
assign(outf,outfilename);
{$i-}
reset(outf);
{$i+}
if ioresult = 0 then
begin
writeln('File ',outfilename,' exists. Cannot overwrite.');
halt
end;
{$i-}
rewrite(outf);
{$i+}
if ioresult <> 0 then
begin
writeln('Cannot open file ',outfilename,' for output.');
halt
end;
new(list);
temp := list;
for i := 1 to sectstobuf - 1 do
begin
new(temp2);
temp2^.next := NIL;
temp^.next := temp2;
temp := temp2
end;
listsave := ord(list);
tempsave := listsave;
end;
temp := ptr(tempsave);
if bytptr > 128 then
begin
if temp^.next <> NIL then
begin
sectswritten := succ(sectswritten);
temp := temp^.next;
bytptr := 1
end
else begin
temp := ptr(listsave);
for i := 1 to sectstobuf do
begin
blockwrite(outf,temp^.buffer,1);
temp := temp^.next
end;
temp := ptr(listsave);
sectswritten := 1;
bytptr := 1
end
end;
temp^.buffer[bytptr] := b;
bytptr := succ(bytptr);
tempsave := ord(temp)
end
end;
procedure Abort(message: string80);
begin {abort}
writeln;
if lineNum > 0 then write('Line ', lineNum, ': ');
writeln(message);
halt
end; {Abort}
procedure NextLine(var s: string80);
begin {NextLine}
LineNum := succ(LineNum);
write('.');
readln(infile, s)
end; {NextLine}
procedure Init;
procedure GetInFile;
VAR infilename: string80;
begin {GetInFile}
if ParamCount = 0 then abort ('Usage: uudecode <filename>');
infilename := ParamStr(1);
if pos('.', infilename) = 0
then infilename := concat(infilename, defaultSuffix);
assign(infile, infilename);
{$i-}
reset(infile);
{$i+}
if IOresult > 0 then abort (concat('Can''t open ', infilename));
writeln ('Decoding ', infilename)
end; {GetInFile}
procedure GetOutFile;
var header, mode : string80;
ch: char;
procedure ParseHeader;
VAR index: integer;
Procedure NextWord(var word:string80; var index: integer);
begin {nextword}
word := '';
while header[index] = ' ' do
begin
index := succ(index);
if index > length(header) then abort ('Incomplete header')
end;
while header[index] <> ' ' do
begin
word := concat(word, header[index]);
index := succ(index)
end
end; {NextWord}
begin {ParseHeader}
header := concat(header, ' ');
index := 7;
NextWord(mode, index);
NextWord(outfilename, index)
end; {ParseHeader}
begin {GetOutFile}
if eof(infile) then abort('Nothing to decode.');
NextLine (header);
while not ((copy(header, 1, 6) = 'begin ') or eof(infile)) do
NextLine(header);
writeln;
if eof(infile) then abort('Nothing to decode.');
ParseHeader;
end; {GetOutFile}
begin {init}
lineNum := 0;
GetInFile;
GetOutFile;
end; { init}
Function CheckLine: boolean;
begin {CheckLine}
if line = '' then abort ('Blank line in file');
CheckLine := not (line[1] in [' ', '`'])
end; {CheckLine}
procedure DecodeLine;
VAR lineIndex, byteNum, count, i: integer;
chars: array [0..3] of byte;
hunk: array [0..2] of byte;
{ procedure debug;
var i: integer;
procedure writebin(x: byte);
var i: integer;
begin
for i := 1 to 8 do
begin
write ((x and $80) shr 7);
x := x shl 1
end;
write (' ')
end;
begin
writeln;
for i := 0 to 3 do writebin(chars[i]);
writeln;
for i := 0 to 2 do writebin(hunk[i]);
writeln
end; }
function nextch: char;
begin {nextch}
{} lineIndex := succ(lineIndex);
if lineIndex > length(line) then abort('Line too short.');
if not (line[lineindex] in [' '..'`'])
then abort('Illegal character in line.');
{ write(line[lineindex]:2);}
if line[lineindex] = '`' then nextch := ' '
else nextch := line[lineIndex]
end; {nextch}
procedure DecodeByte;
procedure GetNextHunk;
VAR i: integer;
begin {GetNextHunk}
for i := 0 to 3 do chars[i] := ord(nextch) - offset;
hunk[0] := (chars[0] shl 2) + (chars[1] shr 4);
hunk[1] := (chars[1] shl 4) + (chars[2] shr 2);
hunk[2] := (chars[2] shl 6) + chars[3];
byteNum := 0 {;
debug }
end; {GetNextHunk}
begin {DecodeByte}
if byteNum = 3 then GetNextHunk;
putbyte(hunk[byteNum],FALSE);
{writeln(bytenum, ' ', hunk[byteNum]);}
byteNum := succ(byteNum)
end; {DecodeByte}
begin {DecodeLine}
lineIndex := 0;
byteNum := 3;
count := (ord(nextch) - offset);
for i := 1 to count do DecodeByte
end; {DecodeLine}
procedure terminate;
var trailer: string80;
begin {terminate}
if eof(infile) then abort ('Abnormal end.');
NextLine (trailer);
if length (trailer) < 3 then abort ('Abnormal end.');
if copy (trailer, 1, 3) <> 'end' then abort ('Abnormal end.');
close (infile);
putbyte(26,TRUE)
end;
begin {uudecode}
init;
NextLine(line);
while CheckLine do
begin
DecodeLine;
NextLine(line)
end;
terminate
end.
--------------------CUT HERE------------for uudecode.uue-----------
begin 600 UUDECODE.COM
MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F, ! "A0@
M *3D5#(#@T
M,#%,4R!H:6QI=&5E9610$ )&UL_,FP;9QLJ !M6
M 0;/0 !(" $ P ALJ !!L](" AM%10T
M AM2?P "&U0 "&R@Q "&RDQ 'ZW-\@C]>5^S>@!X?$]R!CS
MS0 "#0H R6_ES:8 R?Z W&L"U(0"YG\8[N4A[@$8!.4AZ $B$P+AX_7%U7XC
MMR@'Y<WH >$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS= !V"K.
M 1C?]<75Y2&H <TU B&B <W0 2JZ =0= N'1P?')]<75Y2&T 1CI]<75Y2&N
M 1C@]3K@ +<H$,75Y:\RX AR '--0+AT<'QR?4ZX #^_RCVQ=7E/O\RX A
MP@$8X_7%U>4AO $8VO7%U>7E$? (8L! 1 [;#1.IX!3SJ< 8+5S=P"T3J?
M 4\ZG0&#S=P"(? S= !*J !S1T"X='!\<DA\ & GK(9L!-#4H A+)&QLA
M"@,& RL.+PR6,/R&]7G^,"@!$A/Q$.W) 0ID(6L!PS4"(7L!PS4"$0, S5\#
MY@$8!A$& ,U? V\F ,D1$@ 8]!$, !@($0\ & ,1"0#AP>4ZW0"W*!K5Q<V@
M 'RU* _-X0/^$R (S>$#_@/*U"#!T2H! !GI(M( >#+= 'FW* L^PS(X "'[
M'R(Y "&E Q&@ $8 .VP(;T#$;@ 0P [;"O;V<RT BU BU@ ^?C+1 #+@
M ,G#%@/#( /#.0/#+P/#- /#*@/#.0/#( /! (( 0P#$ ,4 P0#%U>7=Y?WE
M]6\F .7-I@#Q_>'=X>'1P<G%U>7=Y?WES:, ?1CK#O\8# X [5O2 !,:_B H
M^B%E 8#S7L$&LVF!/Y!.!+^43 .1Q,:_CH@!GC60!,8 ANO(5P =R,,#2@9
M&LV"!" 3_C\H#_XJ* O^+B@'!@O-=P08$ 8(S5X$&OXN( 83!@/-7@0A: &
M (Q#[R1H,#2@(_C\H"?XJ* O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
M!/X@. WEQ2&8! $. .VQP>')O\D@+BP[.CT_*EM=/#Y[??YAV/Y[T-8@R7S-
MM 1]]1\?'Q_-O03QY@_&D"?.0"?#R0.O-\M\P'RW?<@^_\DRV #%S:\>P2H&
M +?M0MJH(.O1^0$ _ DBQ@"O;V<BS@ RW ^PS+9 "'>("+: .LBS #IY2K&
M +?M0B+& .U;Q "W[5(9Z^':=1WML,DJQ@#ML"+& -G)7B-6(]5>(U8C3B-&
MX<G=X>L:3P8 +V\F_SGYZP/ML-WIT1I/!@ O;R;_.?GK ^VPZ=WAZR'@_SGY
MZ\4$!2@%KQ(3$/SML,$^()"1* 9'KQ(3$/S=Z=WA(>#_.?D&(*]W(Q#\W>G=
MX47-N@6V=]WIW>'1?9,X]SQ/0\VZ!5]!K[/+(S &MG<CKQX!$/,8W7CF^ \/
M#\8";R8 .7CF!SQ'KS<7$/W)Y=GKXW,C<B/1<R-R(W$C<,G=X7CK(0 1#E.
MY0DCX[DX 7D2$R.W* -/[;#A^=WIW>%X(0 1#E.Y0DC7B-6&-S=X>MH)@!$
M.>VP(2 .?G=Z=WA(2 .5XC5F@F $0Y[; A(@ 8Y]WAZW@O;R;_.?EP(T@&
M .OML-WIM^U2&=@^D,,G(+?M4K?M0C #"1G)/I'#)R"W[5+K$^IQ!O 8 ?@1
M #)U>NW[5+KX1CKM^U2(0$ R"O)S=\+&/7-L D8\+?M4B$! , KR<W?"QCU
MS; )&/#-<@<A 0#0*\G-WPL8]<VP"1CPS7('(0$ R-@KR<W?"QCTS; )&._-
M<@<A #(V"/)S=\+&/3-L D8[\UR!R$! -@KR<W?"QCUS; )&/!474M"ZR$
M 'JW/A @ U,^""GK*>LP 0D](/;)?+7* PI\JO7-@ ?KS8 'ZT1-KV=O/A'M
M:NU", ()-S_+$\L2/2#PZ_'P&$CES9('RSS+'='KS0\'Z\MZR!@US6$'R"D0
M_<G-80?(RSS+'1#ZR>MZMR (>_X0, -'M\FO9V_)ZWRJ?/I^![K ?;O)%\G+
M?,A\+V=]+V\CR7WF 6\F ,GM2\H [5O( ,75>$%*4QX '\L8RQG+&LL;X1GK
MX>U*1$TAZ6(9(L@ ZR$9-NU*(LH 1$W)!@ 1$"?-X@<1Z /-X@<19 #-X@<>
M"LWB!WT8#:\\[5(P^QD$/2 "!<C&,-UW -TCR=U^ -8D3R$ " "W2/=?@#-
MI@36,#@I_@HX#@P-("'6!_X*.!O^$# 75%TIV"G8# T@ E1=&=@IV%\6 !G8
M&,MYM\A\A\G=X>'E?28 (SE.@3@<=^LA !$[4(Y^>OE ^VPZ^$K&T\#[;CK
M(_G=Z3X0PRD@W>'-R 17X<W="5_AY7V3.!H4%2@6NC@62@8 8#E[@E1=/6]@
M.7GMN.L8":\8 SQK+28 .7?YW>G=X>'E?28 (SGY;R8 W>G=X2$ %0Y7DLC
MY1E>0R/E&>7]X='A>9 X$#Q/Q=7E&KXH#.'1P2,-(/(A 8#B,3$.S1X<$A
M YZ^U2_?G=Z=WAS<@$3^'-W0E?X7Z3.!L,#2@7D3@2]7Z1=P8 4!E470GQ
M/$_ML!@"'7/=Z=WAS=T)3]'M4^@ (0 .1KUAC@#N#@!>!+Q5UZ1."\\;WJ#
M. 2X?3@(>),X)I$X(SRW*!_%U2KH %\=%@!"&0G1U>50&>OA3^VXT<$8!7H\
M*!E/>)$\NS@!>[<H#BKH 8 ">LA 0 Y3^VP(0 5#E>$QGYW>G=X>$MPF8(
M;"8 W>DA @!4.5X3&7XV 2-WR2$$ %0Y7DLCY1E>0R/E&>7]X='AK[@H!+D@
M"'BYX=']^=7I&KX@]B,3!0T8YWRW( -]M\ ^$<,I(,T-"M ^ <,G(,V!"ACU
MS:P/S9<*&.W9?;?9/@+*)R#-]0H8W]G+>-G"B K9?;?9R-G%U>79?;<@!=G+
MN!A4Q<OXKPC9R_A]V94H$S &[40(/0C9S7H++#T@^0@H =GQYH @#\V2"S E
MS7L+MRP@'C<8(,W&"S_U*! X =G-K O+>" )S88++2#VS7(+\3@"R[BWV>'1
MP=G)V<MXV<(4"LV/"LT4"M@L+<AX[H!'R=E]M]G*<@M]M\C9A=G-30O%U>7=
M.<UR"]DN!=D^"-TCW6X ",L=, /-D@O->PL(/2#QV2W9(.7=;OO+>" )",V'
M"RPM* $M\?'QMPCQV<'AV=WAR[BP1RPMS'(+",E]M\C9E=D_S4T+Y>7EW3G9
M+@79/@@(S<8+. /-K L_RQ4(/2 ,W74%W2O9+=DH#CX(S88+,-\(S:P+MQCA
MS88+. 3-Q@L_X='!RW@@!<V'"QB:+""7-QB5. ;&@#@&&!O&@#@7;]WCV>7%
M>,OXV:CF@/7+^-WEW2$ ,GAV*]O1T]77V?)M\L8RQG+&LL;RQS)M\L4RQ/+
M$LL1RQ#)?-F$V6=[V8O97WK9BME7>=F)V4]XV8C91\E\V9399WO9F]E?>MF:
MV5=YV9G93WC9F-E'R7C9N-G >=FYV<!ZV;K9P'O9N]G ?-F\V<G9>-FH\ND+
M>!?)RW@H!LWS"\@_R7W9O=G M\C#Q@M]UH':<@L\_BC0V<75Y0C-<@L(-\U[
M"ST@^=E\V:399WO9H]E?>MFBV5=YV:'93WC9H-E'PWL*V<75Y=G-K _9S?T+
MV<V!"ACK?;?(RW@^ \(G(,VL#WW&@,LOQH!OUA3UV<75Y<WU"LT-"BW%U>7-
M@0I]X='!V>'1P>.\XS#C\=G)V<V.#RW-@0K9S8X/+-E]_FS8Q<NXS=\+P3@)
MS?4*S30,S9<*RW@H \T-"MDMV<W?"_4X \V!"MDMV<W?"S@%V2S-@0I]_FPX
M.]D!JBH1JJHA?ZK-EPK=Y=TA!PT^!<TT#]WAS:P/S9<*S9<*Q=7EV<VL#RTM
MV2W-#0K9X='!V<V!"BPL\2PMR-AX[H!'R6>J/RLRUVZV*AWO.'0-T -T'J(
MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F _9?2Z!E?7-]0K9S88/V<V!"L75
MY=DLS0T*V>'1P<WU"MWEW2&,#3X&S30/W>$LV<VB#RW9S0T*\<75Y6\F # !
M)<T($-DLS9<*V>'1P<T-"GW^9]IR"\E]BIW8B1U]Z:*++CI]CN,XCF-^29(D
M21)^S<S,S$Q_JZJJJBK9S:(/V;?+>/7+N,WU"GW^B#!'Q=7E+,W0#^7+/,L=
M?>'US0@0+"TH 2W9\>'1P?7-@0K=Y=TA$ X^",U)#]WA\3 *]=G-F _9S9<*
M\85O. GQR-G-A@_#]0KA/@'#)R!M+AT18#%P1BS^Y7]T-GR)A"%W4SS_PRYZ
MTGU;E1U\);A&6&-^%OSO_76 TO<7<C%]M\C=Y=G-A@_9K\MX* ,\R[CUS=\+
M. C9S?4*\<O_]=D!SP81CNDA?DK9S=\+, 7-+@\83]TAS@X^ @C9$1( W1G-
M<P_9S=\+. L(/2#LV1$, -T9V=G-;@_+^,T-"L75Y<US#\V7"MG-A@_-#0K9
MX='!S?4*W>7-+@_=X=G-;@_-#0KQ%S *]=G-C@\MS8$*\=WART_(R_C)?^?/
MS!-4?_;THC )?VK!D0H&@+6>BF]$@((L.LT3@&K!D0H&@0 @"&BV@])
M?>BBBRZZ?8[C.(YC?DF2)$F2?LW,S,Q,?ZNJJJJJW2$*#SX%Q=7E]<VL#\V7
M"O'-20_9X='!PY<*]=G-;@\8$/79Q=7ES6X/S0T*V>'1P=G-EPKQ/2#IV<V&
M#\,-"A$& -T9W6X W68!W5X"W58#W4X$W48%R2&! $1,5%S) 0])$:+:(8(A
MR0$$-1$S\R&!^LD!<C$1]Q<A@-+)Q=7EV>'1P<G-D@<A@ ^(,MX( W+(\L2
MRQ'+$"T](/!OR[C)RWC9S88/* ++^"W-#0JWRWTH',MX",OX/H^].!8H!LUZ
M"RP8\\UZ"PA@:<C#@P<A #)/I+#)R!\M<IR"\M\",V !SZ0*3W+?"CZ1$T1
M !B;PC R[C)S<@$ZQX . 3^&3@8'<W(!-G+>-D6!R@!%)(P :_^"3@"/@D\
M5]79_2%= -WES>L0W>'13WH\RWL@$('R:Q#]-@ & O^##@"/@O5S8 1T<MX
M* 4^+<WE$,M[* -A#@#+>2@%S>,0& ?-V1 -\H\0>K<H%SXNS>40#"@&S>,0
M%2#W%?JQ$,W9$!CWRWO(/D7-Y1 ^*\M\* 9\[41G/BW-Y1!\!B\$U@HP^\8Z
MW7 W2,8#/U^ /TCMR $_2L^,-UW -TCR?WE+"T@#@8,_38 ,/TC$/BOPWT1
MQ<NX?=G6@&^?9Q%- ,WU!A$% !E\_MD@ 3S]=P#M1,U $GW^@3 &S;,2_34
MR_@^A)4N "@(S7H+RQT](/C]?@#U/@P(>!\?'Q_F#\8P_7< _2-XY@]'Q=7E
MRR7-APO+)<V'"^OC&='C[5KKX>/M2D1-X<LES8<+"#T@R/'!_>')_>7A7Q8
M&7XV /XUV!WZG!$K?CQW_CK8-@ 8\38Q(S8 #,G9 0 V<UR"]U^ ,VF!/XN
M( S9RW WP,OPV=TC&.K^12@AS3D2,%0(S;,2V C9Q6\F ,T($,WI"=G!V,MP
M* $-V1C7S1X2V-G+X-TCW7X _BLH!OXM( 3+Z-TCS382/]A/W2/--A(P"MTC
M5WF'AX&'@D_+:"@$>>U$3]G9><: _EK8_J8_V,7=Y7G-0!+=X=G!V<G=?@#6
M,#_0_@K)];?R1Q+M1/7+/\L_/"'Z_Q$& !D](/SKW2%W$MT9S7,/\>8#* CU
MS;,2\3T@^/&W\I<*V</U"H$ (X ! ')L ""\/J@ $*74:+8$O\D;
M#L.LQ>MX+=#-SAO"4][Y>#D_ >LKJ*W%'?C)>\Z70'VWR,OXQ=5\S7H+S7H+
MA&?C[5KKX>/M2D1-X3 &S7L++#?(?<8#;\NXR0X!& (. ,T_$QJ^( @C$Q#X
M>>X!3R% #GY:28 W>D. 1@"#@#-/Q,-( 'K#@ :MKX@XB,3$/<. 1C:S3\3
M&K9W(Q,0^>OYW>G-/Q,:+Z9W(Q,0^!COS3\3&J9W(Q,0^1CC_>'=X2$ #GK
M(2 13G]Z=WA(2$ .7ZW* .O& 8K1LVZ!:8A(@ Y^2$ "@!(]WI/J\RZ #]
MX2K2 80S>(%KQ+A(N( _>5\MR &/B(RT #).N@ MR@*S;83( 4JX@!WR<WR
M RKB #8 $0P &>LA7 !) #ML,D&!B'F$\7E!@/M6]( $QK^("CZ&LVF!)8H
M"N'!$00 &1#CM\DC$Q#KP<$:_CK ?LE#3T[!5%)-P4M"1(),4U1#0558Q%53
M4L4^KS+H ,UI%#K0 +? *N( RZY^Y@_ S3 4.M M\ JX@ ZZ "W 8" * ,!
M0 !Q(R-PR<U:%"KB !$, !GK.N@ MP$/ 2@*U0X3S04 T0$6\<7-!0#!/,!X
M,M R2KB !$8 !D& (Q#[R2+B '[F#\#+=B@*/AK-QA;-#!<8 \M^R"KB
M .41# 9ZPX0S04 X3P@!3[_,M -@#)XR+D ./E(<( (N( X<GC(N0 XR+B
M ,M^P#X",M R>,BY #C(N( RW; /@,RT #)/J_C(N0 X^4AP@ BX@#+KO7-
MZ!3QMR@#S>$!X<D& "'1 '[^?S@"/GY/-GXJT@ BU 6 ,WA W<> ?X(*#;^
M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(# 1_@,@V3K= +<HT]TJY ##%B!YNBC(
M?A0CS<D#&, 5^OT4*\T @@@" =*+$8[P0%**L8! 0%( 0V&A@(S>$!-@TC
M-@HC(M8 R2KB #K0 +<@>7[+;R!PY@\@+B,C?K?REQ4.%.7-NAGA* CE$2X
M&38:X:]W-,8N7Q8 &7[^&B ]*N( (R,U](!LJU #M6]8 M^U2. 4&_\WJ
M%"K4 'XC(M0 &!<]( ;-HP!]& X]/2 &S:\ ?1@$S;4 ?2KB ,ON(W<KR2-^
M*\D^&LGE*N( ?N8/_@8H)\UK%?XA, C^&B@$RZX8\1%= 8>Q=7-:Q71P?XA
M. ;+KA(3$.^O$N')W2%= -U^ +?(!@#^+< $W2/). 7=?@"WR#X0,M -\GE
MS6L5RZ[A=\D^KT_%S? 5P<TD%LC%Y<WW!]'!S386V 7,@P?K<PP-( (C<NO)
MS? 5S206R,7ES:,1V>'!S386V 79S(\*V</1!>7K#@#%U<UK%='!_@TH"_X:
M* ?+K@P3$A#JX7')S6L5_AHH$\NN_@HH#?X-(._-:Q7^"B "RZ[)*N( 3SK0
M +? ?N8/(! C(^5^QBY?%@ 9<>$T\!@H_@8H%>$& ,7E/<JF #T]RJD /<JL
M ,.R "KH #KJ +[(-%X6 !EQR2KB ",C?K?(-@ .%<VZ&<@^\#+0 ,E]P\86
MP='%W2K2 ,M\* ;-@P?K& [KRWPH"<V#!]TV "W=(]7-Q@?AS<@$[5O2 -WE
MX;?M4DWKD3@.* Q'Y3X@Q<W&%L$0]^%!! 7(?L7ES<86X<$C&//!T=GAT<'9
MQ=TJT@#5S2<0&+[!T<7-R 3+0R&A%PX$(+\AI1<.!1BX5%)5149!3%-%S<@$
M(0( .4XCS5D7T?G5R>%^([<H#$=^Q>7-QA;AP2,0]>D^#<W&%CX*P\86$0T!
M& T1#0 8"!$: 1@#$1H (N( RWXH'-7-:Q71NR@0_AHH#/XA, P4%2@(RZX8
MZ"$! ,DA #)/J\RZ #M4^8 S7H8.M M\#-,!0ZT "WP"KB #;0(R-W$08
M&7<C=Q$D !EW(W<1UO\9.N@ MR ;Y0$$ *_-"1GA(R-.(T8JY@"W[4+(/I R
MT #)Y:]W(W<C[5OF ',C<N$!! ^ \,)&2+B '[FP,C-KADJX@ 1+0 9KW<C
M=Q'4_QEW(R,!! ^ <T)&<VN&<.!%.,BY #C(N( ?N; P#X$,M R3K0 +?
MY<U:&NNW[5+A,!"OS0D9*N( $0@ &33 (S3)/IDRT #).M M\#ES5H:M^U2
M/@$@$"KB !$$ !DT( 0C-"@(/@/AS0D9&,CA/O(RT #),ND ZRKB ,MF*"_+
MICKI ,M'*!@C(WXK*[<@$#KI ,M/(!=XMR 3>;?Z0QG%U0XAS;H9T<$@42KB
M #KI ,M'* ++[B,C?L8NU5\6 !G1UB[-FAGMH.)F&3SR7!D]/,V:&2KB ",C
MYG]W(!;%U>7-KAGAT<$@%=41*P 9T30@ B,T>+'"#1GKR3Z9 3[P,M R?4Z
MZ0#+1R@!Z_')(N( S:X9R!CF#B(JX@#+YLMNR,NN*N( Y<41, 9ZPX:S04
MP>$1# 9Z\T% +?)P='M4^( Q>7-6AK1M^U2.$ JX@ !!@ )3B-&(W,C<LTL
M&@$$ DP 1-]YG\IZ^UJZU-<*N( (R-W 2L "4XC1NNW[4()R-7ES:X9T>%R
M*W/)/I$RT #)U=GAV2$ %1=/A IZ^UJZ]DIV3 $"3 !$ST@[\G-71JW[5(A
M # (\G-71KKR2KB !$$ !E>(U8CU4XC1B->(U;AR3ZO,N@ S; :.M M\#-
M,!0ZT "WP"KB #; Y1$, !GK#B/-!0#A$2T &:].=R-&=Q'6_QEQ(W C-H C
M=R-W(W?)(N( ?N; R,.!%#XB& (^(41-(? (N8 W>'1X=WEQ<W]&L$ZT "W
MP"KP .U"R#KI /XA/IDH C[P,M R3XB& (^(2+F -WAP='AW>4RZ0 BX@!^
MYL#*L!@JY@"O=R-W>+$H.<75#AK-!0 JX@ 1# 9ZSKI $_-!0#1P;<@'M4J
MX@ 1+0 9-" "(S31(8 &>LJY@ T( (C- L8PRKB !$M !E.(T81VO\9<2-P
M$?S_&58K7NNW[4+0ZW$C<,G!T>U3X@#%Y<U:&M&W[5+:)AHJX@ !" )<R-R
M 20 "7,C<LG-3!S $0P &>L.$\T% #S &#_]X2K2 80S>(%KQ+A_>7-3!S
MY<WR ^'E$1P &>LA7 !# #ML.$1# 9Y>L.%\T% -$\* DA7 !) #ML,D^
M 3+0 ,D^KS+H ,U,', ZV "W/B$HZRKB !$, !D17 !) #ML!%< X/S04
M/"C/(3,<$; 1D [; 1 $ZZ "W( 3M6P$!,0 !P[ U0X:S04 $5P #A3-
M!0#1(8 &>NW*.D8-R+B '[F#\@^(#+0 ,DBY@#M4^@ Z^$BX@!.<R-&<NNW
M[4(H6NLC$5P .MP $A,!"P#ML 88KQ(3$/SE$5P #@_-!0#1/"@_*N8 (GT
M[4OH ,75#AK-!0 17 .(<T% -'!MR A*GT (R)] "& !GK"WBQ(-L17 .
M$,T% "KB !$- !GIW2KB #[PPRD@S<@$_A'0,MP R2+P .OAXR+R !,3$WOF
M_%\AW@ B^ #=*MX W6X"W68#?;0H2.U2, _=;@#=9@'EW2+X -WA&.,@"MU>
M -U6 =WE&!M-1-UN -UF =WEW1G==0#== '=<0+=< /=Y=$J^ !S(W+1*O(
M<R-RR=WEX1DBQ J\ !! )W>7!"=IU'>U+Q@#M0@$ "$ -HP'3[_PR<@
MZ^'C?B-F;Q,3$WOF_%_K(O *MX Y=WAM^U2,%+=;@#=9@'EM^U2, 3=X1CP
MX=7]X>U+\ #]<0+]< /]=0#]= '=<P#=<@'=Y>'=3@+=1@/-!!XH"=U> -U6
M =7=X=WEX=U. MU& ]U> -U6 1@;*MX [5/> -7=X=UU -UT >U+\ #=<0+=
M< /K";?M4L#5_>$JQ "W[5(H&_U^ -UW /U^ =UW ?UN OUF PG==0+== .O
MR=WEX2+$ 8$-@ C$/O)S4L>*O0 R<U+'BKV ,DA B] B]@#=*MX W4X"
MW48#>; H'BKT DB] J]@"W[4(P!.U#]@#=;@#=9@'EW>$8V"K& '[_PGM
M6\0 M^U2V.LJ] 9(O0 *O8 M^U2T.U3]@#)[5O$ ',C<LE>(U;K(L0 (MX
M!@0V ",0^\D^KT\BZ "O=S+0 '@RZ@ JX@ B[0 A1A\BX@#A(N0 X0P-( 7-
M)A<8 \UY%RKM "+B "KD .D^KS+L "+H "KB "+M "%&'R+B .$BY #A(NH
M(5P !A[-X@6O$BKJ #KL +<@!<U.%A@#S7(6(= ?C8 MV=O* C=Y>$17 #M
M4NLJZ !S(W(8H\8 [5\RRP#)Z]WAP>%XL2@+<PMXL2@%5%T3[;#=Z41-W>'1
MX7BQ*/3M4ADP[0L)ZPGK ^VXW>E5%!4H \V=']WA3P8 +V\F_SGY<2/K# TH
M NVPW>D6 "& #X?1K@P @8?(PX ! 4H#7[^("@$_@D@!",%&.]=! 4H#7[^
M("@(_@DH!",%&.]]DR@$#!4@U6DF %3)T<'5+6$EPZ("?<VF!&_)*@$ &1D9
MZ2'0 'XV &\F ,G-%@-\M<@ZW0#UKS+= ,T@ _$RW0!]_@/ W>$1 0 8$3K0
M +?(W>%?%@$8!=WA7Q8"U<UZ ]&O,MT *LX ?+7=Y>'M2\P [4(!%0 )(LX
MMR 'U=7ES=D T7JW(!3- )>0PT*57-E<B!B<F5A:P 8*ST@"\T @T*22]/
M !@.S0 "#0I2=6XM=&EM90#- (@97)R;W(@ 'O-M 3- (L(%!#/0 JS@#-
MKP08%<T DYO="!E;F]U9V@@;65M;W)Y ,T @T*4')O9W)A;2!A8F]R=&5D
M#0H .M@ M\J.)\, .'1T>DQ $A@'\! /_-9 ,ACRD1R7L! ( ^ <W4!,-J
M*<,-(0$ 0 ! _>'A?3+R?>%],O-]_>4J\GTF ,M%RGDA*@DA(NA]
M*NA](N9](0$ Y2H"(='-9@9ZL\IM(=4BXGTAF'[E*N9]$0( &>4A 0#-NAK-
M&R JYGU>(U;K(N9]*N)](]$;PSPA(9A^S; :S1L@PV(C*@8A)@#+1<JF(B$
M 'TR!B$AF'[E(?1]S3H%S7 3(9A^S7 :S?$?Y2$ -'-?P;+1<KM(<V;%,VZ
M%P5&:6QE("'T?<TZ!2$ ,VJ%\VZ%QL@97AI<W1S+B @0V%N;F]T(&]V97)W
M<FET92[-S1?-&R##U" AF'[-;QK-\1_E(0 T<V2!LM%RD BS9L4S;H7$4-A
M;FYO="!O<&5N(&9I;&4@(?1]S3H%(0 S:H7S;H7#"!F;W(@;W5T<'5T+LW-
M%\T;(,/4("'H?>4A@@#-Y1PJZ'TBYGTA 0#E(0@ Y2$! -'KM^U2T<UF!GJS
MRIHBU2+B?2'D?>4A@@#-Y1PA #K*N1]<R-R*N1]ZRKF?7,C<BKD?2+F?2KB
M?2/1&\-D(BKH?2()(2H)(2(+(2H+(2+F?2H$(>4A@ #1S<P&RT7*/B,JYGU>
M(U;KY2$ -'-D@;+1<KJ(BH"(2,B B$JYGU>(U;K(N9](0$ (@0APSXC*@DA
M(N9](0$ Y2$( -'-9@9ZL\HL(]4BXGTAF'[E*N9]$0( &>4A 0#-NAK-&R J
MYGU>(U;K(N9]*N)](]$;P_LB*@DA(N9](0$ (@(A(0$ (@0A*N9]$0( &>4J
M!"$KT1GE*O-])@#KX7,J!"$C(@0A*N9](@LAR?WA!E AD7W-X@7]Y<V;%,W-
M%\T;("J6?N4A #1S<P&RT7*IR/-FQ3-NA<%3&EN92 JEG[E(0 S287S;H7
M CH@S1L@(9%]S3H%S9L4(0 S:H7S<T7S1L@P]0@R?WAX2*'??WE*I9^(R*6
M?LV;%"$N ,TB%\T;("'(?LVI%"J'?090S8X6S:L6S1L@R<-L)LV;'^4A #1
MS7\&RT7*)"3-304:57-A9V4Z('5U9&5C;V1E(#QF:6QE;F%M93[-8R,A 0#-
M?1\&4"$>?<WB!2$N &4N >4A'GW-.@7-L@CE(0 T<U_!LM%RF@D(1Y]S3H%
MS4T%!"YU=67-/0@&4"$>?<WB!2'(?N4A'GW-.@7-;Q/-&R AR'[-_Q/-\1_E
M(0 T<W,!LM%RJDDS4T%"T-A;B=T(&]P96X@(1Y]S3H%S3T(S6,CS9L4S;H7
M"41E8V]D:6YG("$>?<TZ!2$ ,VJ%\W-%\T;(,G#U27#H"7]X>$B97SA(F=\
M_>7-304 !E J9WS-X@4AQ7SE*F5\7B-6Z]$9;B8 Y2$@ -'-?P;+1<I+)2IE
M?%XC5NLCZRIE?',C<BIE?%XC5NOE(<5\S3H%S:,(T<W,!LM%RD@ES4T%$4EN
M8V]M<&QE=&4@:&5A9&5RS6,CP^HD(<5\Y2IE?%XC5NO1&6XF .4A( #1S9(&
MRT7*GR4J9WS-.@4AQ7SE*F5\7B-6Z]$9;B8 92X!Y<T]" 90*F=\S>(%*F5\
M7B-6ZR/K*F5\<R-RPTLER2'%?,TZ!2$@ &4N >7-/0@&4"'%?,WB!2$' ")I
M?"%T?.4A:7SES=(D(?1]Y2%I?.7-TB3)(<A^S>87RT7*^27-30423F]T:&EN
M9R!T;R!D96-O9&4NS6,C(<5\Y<W (R'%?,TZ!2$! .4A!@#-:PC-304&8F5G
M:6X@S8T&Y2'(?LWF%]%]LV]][@%ORT7*.R8AQ7SES< CPP FS9L4S<T7S1L@
M(<A^S>87RT7*:";-30423F]T:&EN9R!T;R!D96-O9&4NS6,CS<\DR2$ "*6
M?LWS(\W,),DA17[-.@7-304 S8T&RT7*I";-30420FQA;FL@;&EN92!I;B!F
M:6QES6,C(45^Y2$! -$9;B8 Y<V!!2$@ ,V1!2%@ ,V1!<U/$WWN 6]],EQ\
M*EQ\)@#)PY8H*DI\(R)*?"I*?.4A17[-.@7-HPC1S<P&RT7*!R?-304/3&EN
M92!T;V\@<VAO<G0NS6,C(45^Y2I*?-$9;B8 Y<V!!2$@ .4A8 #-FP7-3Q-]
M[@%ORT7*3B?-304:26QL96=A;"!C:&%R86-T97(@:6X@;&EN92[-8R,A17[E
M*DI\T1EN)@#E(6 T<U_!LM%RG$G(2 ?3(\?,.!)R%%?N4J2GS1&6XF 'TR
M/'PJ/'PF ,G#9R@A #E(0, T<UF!GJSRL GU2(B?"% ?.4J(GS1&>7-U";E
M(2 T>NW[5+KX7,J(GPCT1O#E2<A/7SE(0 T1GE(4!\Y2$ -$9;B8 Y2$"
M -'-3@?E(4!\Y2$! -$9;B8 Y2$$ -'-5@?1&>OA<R$]?.4A 0#1&>4A0'SE
M(0$ T1EN)@#E(00 T<U.!^4A0'SE(0( T1EN)@#E(0( T<U6!]$9Z^%S(3U\
MY2$" -$9Y2% ?.4A @#1&6XF .4A!@#1S4X'Y2% ?.4A P#1&6XF -$9Z^%S
M(0 (DA\R2I(?.4A P#1S7\&RT7*>BC-BB<A/7SE*DA\T1EN)@#E(0 Y<W_
M("I(?",B2'S)(0 (DI\(0, (DA\S=0FY2$@ -'KM^U2(D9\(0$ Y2I&?-'-
M9@9ZL\K1*-4B1'S-AR<J1'PCT1O#O"C)(<A^S>87RT7*\2C-304-06)N;W)M
M86P@96YD+LUC(R')>^7-P",AR7O-.@7-HPCE(0, T<W@!LM%RB(IS4T%#4%B
M;F]R;6%L(&5N9"[-8R,AR7O-.@4A 0#E(0, S6L(S4T% V5N9,V@!LM%RE4I
MS4T%#4%B;F]R;6%L(&5N9"[-8R,AR'[-:13-&R A&@#E(0$ Y<W_(,G-\",A
M17[ES< CS7DFRT7*B2G-T28A17[ES< CPW0IS=(HP]0@304-06)N;W)M86P@
M96YD+LUC(R')>\TZ!2$! .4A P#-:PC-304#96YDS: &RT7*H ;-304-06)N
M;W)M86P@96YD+LUC(R'(?LUI%,T;("$: .4A 0#ES?\@R<WP(R%%?N7-P"/-
+>2;+1<IT=<W1)B%C
end
15-Jul-86 15:36:50-MDT,11345;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 15:36:09-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id ab03582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013856; 15 Jul 86 13:48 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: l-z-w crunch and uncrunch
Message-ID: <1813@ecsvax.UUCP>
Date: 15 Jul 86 01:32:11 GMT
To: info-cpm@AMSAA.ARPA
Just to give you something to exercise your new uuencode and uudecode
programs on (see earlier messages for source and object, contact me
if they don't arrive soon), here are two VERY nice utilities for
CP/M. They compress and expand files using the L-Z-W algorithm, and
typically achieve ratios of 50% or better (crunched/uncrunched) on
text, even WordStar text, which the usual sq/usq pair does fairly
poorly on due to use of high-bit-set ASCII (I suppose). I do
not have the source for these. It is available on RCP/M Royal Oak
at 313-759-6569. I have used these successfully on a Kaypro 4-83,
an Apple running 56k Microsoft CP/M, and a NEC8401 laptop. These
little programs are amazing. I wish I had downloaded the source
myself. If anyone has it, I'm sure a posting would be appreciated.
I apologize to the author for lack of acknowledgment, but the .doc
file included here is unaltered from that in the original .lbr.
Ross Alford
...mcnc!ecsvax!alford
-----------------CUT HERE for crunch12.doc-----------------
This .LBR file contains Revs 1.2 of CRUNCH and UNCRunch.
These programs are 100% upward and downward compatible with prev-
ious releases.
These are data compression utilities. They are completely
analogous to the popular SQueeze and UNSQUEEZE programs, but use
a form of compression known as Lempel-Ziv [-Welch] rather than
Huffman encoding. CRUNCH creates the compressed file from the
original, while UNCR recreates the original from the compressed.
They may be used on any type of file, but compression ratio re-
sults vary according to data type.
-----------------------------------------------------------------
Usage: CRUNCH [d:] <filename> [d:]
where the first "d:" is an optional source drive spec for
<filename> and the second "d:" is an optional destination drive
spec for the resulting compressed file. If either "d:" is omit-
ted, the corresponding input or output will be to the currently
logged drive. The output filename will be the same as the input
filename with the middle letter of the extension changed to "Z".
If a file with this name already exists, it will be overwritten.
If the extension of the original file was blank, the extension of
the resulting file will be "ZZZ". Ambiguous filenames
("wildcards") ARE fully supported.
Additionally, the command line above can be followed by a
date or other information inside a pair of square brackets. For
obvious reasons, this is difficult to show clearly on the command
usage line, so hopefully this sentence will suffice. The "stamp"
information is recorded in the header of the crunched file and
reproduced at the console when uncrunching. It has no effect on
the resulting uncrunched file. The stamp may any typeable char-
acters other than "]", and may be any length that will fit on the
command line. A practical limit of 40 characters will be repro-
duced at the console when uncrunching.
The cruncher outputs a running display to the console of the
form:
nnnn/mmmm pp%
where "nnnn" is #of input records read, "mmmm" is #of output
records created, and pp% is the current compression ratio
nnnn/mmmm. When complete, the final line additionally contains
the input and output file sizes converted to "k". These values
are kilobytes (recs/8) upward rounded to the next integral value.
This cruncher will flag the unusual situations where the result-
ing file is larger than the original (ie compression ratio >
100%). When this occurs, the user will be prompted as to whether
he wants to keep the "crunched" file.
Usage: UNCR [d:] <filename> [d:]
where the first "d:" is an optional source drive spec for
<filename> and the second "d:" is an optional destination drive
spec for the resulting uncompressed file. If either "d:" is omit-
ted, the corresponding input or output will be to the currently
logged drive. The output filename will be automatically created
to be the same as the name of the file that was originally comp-
ressed. In general (ie assuming the compressed file has not been
renamed) this is the same as the input filename with the middle
letter of the extension converted from "Z" to an appropriate
character. If a file with this name already exists, it will be
overwritten. Ambiguous filenames ("wildcards") ARE fully suppor-
ted. Note however, that "*.*" will be converted to "*.?Z?".
This is a convenience feature to allow quickly uncrunching all
files with the appropriate extension.
In operation, the uncruncher displays information to the con-
sole analogous to the cruncher. In this case the percent figure
is the "expansion" ratio (still output file size / input file
size).
-------------------------CUT HERE for crunch.uue-----------------
begin 600 CRUNCH.COM
MPV,!0V]P>7)I9VAT("AC*2!3=&5V96X@1W)E96YB97)G(#8O,38O.#8@(#(P
M,2TV-S M.#<R-"X@36%Y(&)E(')E<')O9'5C960@9F]R(&YO;BUP<F]F:70@
M=7-E(&]N;'DN/G^'ZF\!$94(PZX&[7,+"3$ $CH' -:=, 81@PC#S 81(P3-
MHP;-^P,Z; R )(17 #-(@0A (K- 0<B" DH,Q& _QDX,R$ BB($"<U$"!%<
M ,U3!A,J! GE(P$+ .VPX1$0 !DB! D17 .#\V!!CP@#!%0",/,!A%T",/,
M!A$ DLU3!A,A7 #-U ;9(0 2$0 B 0 V3IF /Y:(!$1-P3-HP;-.P8@H\VT
M!L//!B%= $+ .VP.@F2_B ^6B &,@F2,@N2,@J2S;4%S;0&S9<$/G;-E 4^
M_LV4!2%< ,WJ!B$DDGXCS90%MR#X/A+-E 4^$,V4!:_-E 7-E 6G",WR S &
M$4X$P\P&,@()_2%S R'__\UG S@1S>$", C-10,A__\8\^O#> +-10,A #-
M10,(, ;9>-G-E 4ZY C-E 4ZY0C-E 7-!0;UIRKG".U;Z0CM4C >$5H$S:,&
M#@'-@0;^62@,_GDH"!$ D@X3S8$&S;0&\<*O <//!N5'Q>7-$ 7&.F?1P4Q^
M_H H.+H@&7S&$&=[OB 1?,809WB^( EYUCI777CAI\EYQC!G?K<H"D]\QA!G
M;F'#[0(ZXPBW(!IAS<8$<GS&$&=S?,809W 1___=&3@%>C+C"#=XX<GU"#\P
M#P@I*2DI?,V4!7W91]GQR0C9>-FTS90%?<V4!?')Y<UM ^').@()5_WIS?(#
M.!/^D"@7NB@&,@()>J?)_2&: \D5_2'P WJGR17](=L#>J?)S?(#..S^D"CP
MNB@&_2%S QC3/I#](;,#R5H6 \WR Q0XSB@'_I HT+LH\17](<P#&+/-\@,X
MNOZ0*+[](7,#&*0^D/TAXP.GR<WR Q8!.*'^D"BD&-4WR<T\!=C-2 :GR2&
M !$DDD8C>+<H&#Y;OB@%(Q#Z& Y^$A,C_ETH!A#V/ET2$Z\2R<E,6E<@0W)U
M;F-H97(@=C$N,@T*)$9I;&4@86QR96%D>2!C<G5N8VAE9"XD1FEL92!%;7!T
M>2XD+2TM/B!#<G5N8VAE9"!F:6QE(&QA<F=E<B!T:&%N(&]R:6=I;F%L+B!3
M879E(&%N>7=A>3\@/$X^.B ')-TA_@_-JP2O]2'__\WA O$\(/7)(0 Z$0$Z
M/H ! !!W[; V $ 0.VP/G\R #K)Q=7E?<9E;S )?#S^2B "/CIG/DF41WTO
M/" !!$]473Z [;$H%"$ .GK6.D=+/H#ML2@&$;@(P\P&*^OA?,8P9W)\QA!G
M<^O1P<D1 !"3PG+W,LLRQU,?>U:. \&#,LY'S #ZQGK*1#UZRD7*1<I%RD7
M;.8/R=E]RR>WS$@%?B/9R3KF"#TRY@BGS%D%V,UD!Z?)Q=4&$!82+@ > ,V#
M!2 ,+!Z S8,%( 0L%!#M?3+F"-'!IR@$(0 2R3?)U0X:S8$&$5P #A3-@0;1
MM\G9]1(<>\LG(!7-2P<X$!0^.KH@"L4&,,W8!<$1 "+QV<D1 )(.$\V!!@X6
MS8$&/" &$6<(P\P&$:4(S:8&(0"2S=0&R7BWR!$ (LWN!07('H#-[@44'@ 0
M\<D.&LV!!M41 )(.%<V!!K?1R!%G",/,!ME[V2\\YG\H"$<^&LV4!1#[V>L!
M "*G[4++)<L41,W8!<U?!\WK!]D1 )(.$,V!!A%< ,V!!LVT!BH("2LB" E\
MM<DJY A/!@ )(N0(R=43!@L^(!(3$/P&&*\2$Q#\T<EX+T=Y+T\#/A$8 NUJ
M"3@#[4*WRQ/+$CT@\<D(]0C%U>79Q=7EW>7]Y=G-!0#9_>'=X>'1P=GAT<$(
M\0C)S;0&Q0X)S8$&P<D."<T% ,D^#<V_!CX*S;\&R?7%U5\. LV!!M'!\<G-
MHP;M>PL)R08,(W[^("@#S;\&!<AX_@0@\#XN&/(!( PC?KDH \V4!07(>/X$
M(/$^+D\8\2($"2$ "(&"0X1S8$&_O_(S2@'#A+-@0;^_R@%S2@'&/*W*@8)
MR=4J! F'AX>'A\: 3P8 %A *=R,#%2#Y(@0)T2H&"2,B!@G)]<7E*ND((R+I
M""'X",W;!^'!\<GUQ>48#?7%Y3KG"#WF _8 (%G5W>41[@C-I@;M6^D(U=WA
M(0 1$W=*>UJW1GM2MTI[6K=*>UJW2GM:MT9[4K=*>UJW2GM:MTI[6K=Y='M
M2^<(S68&ZQ$ ,L\RQWM6LTF"!&L",VF!MWAT2KG"",BYP@A\@C-VP?AP?')
M!@1^]A \=_XZP#8P*Q#SR=7%$;,(S:8&*N<(S0T($:4(S:8&*ND(S0T(/BG-
MOP;!T<D1!P 9RSS+'<L\RQW+/,L=S28(/FO-OP;)U0'V_Q'__PD3VBT( 0H
M">M\M<0F"'O&,,V_!M')(<D($>,( 1H [;#)26YP=70@9FEL92!N;W0@9F]U
M;F0-"B1/=71P=70@97)R;W(D5&]O(&UA;GD@9FEL97,D3F]T(&5N;W5G:"!M
M96UO<GDD4')O9R!R97$G<R!:+3@P)" M+2T^("0E("0@(" D(" @*"10<F]G
M<F%M(&9A:6QU<F4N) $ __\!#2 @(# @+R @(# Z(" D&AH:&AH:
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH!
end
-----------------------CUT HERE for uncr.uue-------------------
begin 600 UNCR.COM
MPV,!0V]P>7)I9VAT("AC*2!3=&5V96X@1W)E96YB97)G(#8O,38O.#8@(#(P
M,2TV-S M.#<R-"X@36%Y(&)E(')E<')O9'5C960@9F]R(&YO;BUP<F]F:70@
M=7-E(&]N;'DN/G^'ZF\!$6,(PWP&[7/9"#$ $3H' -:<, 8140C#F@81Y0/-
M<0;-Q0,Z; R )$17 #-NP,A (G-SP8BU@@H,Q& _QDX,R$ B2+2",T2"!%<
M ,TA!A,JT@CE(P$+ .VPX1$0 !DBT@@17 .#\U/!CP@#!$>",.:!A%"",.:
M!A$ D<TA!A,A7 #-H@;9(0 1$0 A 0 V:\R))'-"@7^=B 'S0H%_OXH!A$5
M!,.:!A$!D08,S0H%MR@NYG_^+B@&$A,0\!@'$0F1!@,8Y\T*!3C7MR@3_EL@
M]!$DD1@%S0H%.,82$[<@]LT*!<T*!4<^$) P!A$M!,.:!LT*!3+1",T*!<V#
M!<W& \UE!*<($?__[5.Y",U7 ]JF M7-R@(ANPC+/C@)*KD(.ML(S1H#T3JQ
M"+<HV\U7 ]JF M7-R@+1&//-"@5?S0H%5RJR"#K1"*<@"NU2* 81^P/-<0;-
MTP7"KP'#G0;](1/W_3G2WP/E>L8Y9VM^_H @%3X!,KL(Y2JY"#K;",T: ^%^
M_H H(59\QA!G7LMZ( W-R@)\QA!G?LV( ^')?,809WXRVP@8\1$5!,.:!O7E
MS=X$QCEGT?%/1'[^@"@6?,8P9WZW* I'?,809VY@PR4#8,V4!')\QA!G<WS&
M$&=Q ?__W0G8>#*Q",D(/S <",T*!=A7S0H%V#+8",LZ'\LZ'\LZ'\LZ'U\8
M"PC-"@5?.M@(Y@]7>K/&_S_)V<LX. W^D"@&3]G-M /)!-G)MR@0/4?%!@#9
MP7G%S;0#P1#XR3Z0V<VT \G-8@7-%@;)(68 /C^^P#9:R<D1?0C-= 8A))$&
M*'ZW* ;-C08C$/;-@@;)$50$PYH&3%I7(%5N8W)U;F-H97(@=C$N,@T*)$-H
M96-K<W5M(&5R<F]R(&1E=&5C=&5D#0HD26YV86QI9"!#<G5N8VAE9"!&:6QE
M#0HD1FEL92!R97%U:7)E<R!N97=E<B!P<F]G<F%M(')E=FES:6]N#0HD4W1A
M8VL@3W9E<F9L;W<-"B3=(?X/S7D$K_4A___-&@/Q/"#UR2$ .1$!.3Z 0 0
M=^VP-@ ! $#ML#Y_,@ YR<75Y7W&96\P"7P\_DD@ CXY9SY(E$=]+SP@ 01/
M5%T^@.VQ*!0A #EZUCE'2SZ [;$H!A&&",.:!BOKX7S&,&=R?,809W/KT<')
M$0 0D\)R]S++,L=3'WM6C@/!@S+.1\P ^L9ZRD0]>LI%RD7*1<I%VSF#\G9
M?<LGM\P6!7XCV<DZM @],K0(I\PG!=C-,@>GR<75!A 6$2X '@#-404@#"P>
M@,U1!2 $+!00[7TRM C1P:<H!"$ $<DWR=4.&LU/!A%< X4S4\&T;?)V?42
M''O+)R 5S1D'.! 4/CFZ( K%!C#-I@7!$0 A\=G)$0"1#A/-3P8.%LU/!CP@
M!A$U",.:!A%S",UT!B$ D<VB!LEXM\@1 "'-O 4%R!Z S;P%%!X $/')#AK-
M3P;5$0"1#A7-3P:WT<@1-0C#F@;9>]DO/.9_* A'/AK-8@40^]GK 0 AI^U"
MRR7+%$3-I@7-+0?-N0?9$0"1#A#-3P817 #-3P;-@@8JU@@K(M8(?+7)*K((
M3P8 "2*R",G5$P8+/B 2$Q#\!ABO$A,0_-')>"]'>2]/ SX1& +M:@DX ^U"
MM\L3RQ(](/')"/4(Q=7EV<75Y=WE_>79S04 V?WAW>'AT<'9X='!"/$(R<V"
M!L4."<U/!L')#@G-!0#)/@W-C08^"LV-!LGUQ=5?#@+-3P;1P?')S7$&[7O9
M",D&#"-^_B H \V-!@7(>/X$(/ ^+ACR 2 ,(WZY* /-8@4%R'C^!"#Q/BY/
M&/$BT@@A BU @.$<U/!O[_R,WV!@X2S4\&_O\H!<WV!ACRMRK4",G5*M((
MAX>'AX?&@$\& !80"G<C Q4@^2+2"-$JU @C(M0(R?7%Y2JW"",BMP@AQ@C-
MJ0?AP?')]<7E& WUQ>4ZM0@]Y@/V "!9U=WE$;P(S70&[5NW"-7=X2$ $1-
MW2GM:MT9[4K=*>UJW2GM:MTI[6K=&>U*W2GM:MTI[6K=*>UJW>71[4NU",TT
M!NL1 #+/,L=[5K-] <1>@C-= ;=X=$JM0@C(K4((< (S:D'X<'QR08$?O80
M/'?^.L V,"L0\\G5Q1&!",UT!BJU",W;!Q%S",UT!BJW",W;!SXIS8T&P=')
M$0< &<L\RQW+/,L=RSS+'<WT!SYKS8T&R=4!]O\1__\)$]K[!P$* GK?+7$
M] =[QC#-C0;1R2&7"!&Q" $: .VPR4EN<'5T(&9I;&4@;F]T(&9O=6YD#0HD
M3W5T<'5T(&5R<F]R)%1O;R!M86YY(&9I;&5S)$YO="!E;F]U9V@@;65M;W)Y
M)%!R;V<@<F5Q)W,@6BTX,"0@+2TM/B D)2 D(" @)" @("@D4')O9W)A;2!F
M86EL=7)E+B0 ! /__ 0T@(" P("\@(" P.B @)!H:&AH:&AH:&AH:
M&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
end
16-Jul-86 12:16:13-MDT,736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 16 Jul 86 12:16:06-MDT
Received: from amc-hq.arpa by AMSAA.ARPA id a000308; 16 Jul 86 13:21 EDT
Received: by AMC-HQ via cde1; 16 Jul 86 12:43 EDT
Date: Wed, 16 Jul 86 12:41:17 EDT
From: "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
To: info-cpm%amsaa.arpa@AMC-HQ.ARPA, info-micro%amsaa.arpa@AMC-HQ.ARPA
cc: rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
Subject: Need an H89
If anyone out there has a used Heath H89 (or Zenith Z90) that they
want to sell reasonably, my wife needs one for classroom use with
disadvantaged students. Please reply to rstanley@amc-hq. Thanks.
...Dick
17-Jul-86 18:57:10-MDT,965;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 18:57:04-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id ab00367; 17 Jul 86 20:19 EDT
Received: from mit-eddie.arpa by AOS.BRL.ARPA id a017085; 17 Jul 86 12:55 EDT
Received: from deep-thought.mit.edu by EDDIE (5.31/4.7) id AA00616; Thu, 17 Jul 86 12:25:37 EDT
Date: Thu 17 Jul 86 01:09:08-EDT
From: Andrew Moore <T.MOORE%DEEP-THOUGHT@MIT-EDDIE.ARPA>
Subject: RAMdisk program wanted
To: info-cpm@BRL.ARPA
Cc: info-apple@BRL.ARPA
Message-Id: <12223306707.29.T.MOORE@DEEP-THOUGHT.MIT.EDU>
I'm trying to locate a program which will let a Saturn 128K RAM card
(for the Apple II+) function as a RAMdisk under CP/M. If you have any
suggestions where to find this program (I do know that it exists),
please drop me a note.
-drew
arpa: MOORE%MIT-EECS@MIT-MC.ARPA
uucp: ...mit-eddie!moore
us: Box 121, North Quincy, MA 02171
-------
17-Jul-86 22:29:25-MDT,2336;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 22:29:16-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001231; 17 Jul 86 23:44 EDT
Date: Tuesday, 15 July 1986 22:05-MDT
Message-ID: <KPETERSEN.12223553839.BABYL@SIMTEL20.ARPA>
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
To: Bernie Eiben - LDP Workstations <EIBEN@dec-marlboro.ARPA>
Subject: Taking a stand - revisited
ReSent-From: KPETERSEN@SIMTEL20.ARPA
ReSent-To: Info-Cpm@AMSAA.ARPA
ReSent-Date: Thu 17 Jul 1986 21:46-MDT
Bernie, please remove the "Taking a stand" message from your bulletin
board. The reason I removed that message from my system was because I
was just leaving for my vacation and didn't want to deal with the
controversy at that time. Bob Freed convinced me that I should not
remove BYE5/KMD - I should let the users of my RCP/M decide for
themselves. I have therefore restored those files and they, along
with NUBYE/NUKMD, are available on my system.
I have replaced the file -BYE5KMD.NOT with a revised version by the
same name. It is enclosed below.
--Keith
--cut here--
The BYE5xx and KMDxx files will be available for downloading but will
not be supported by this system.
BYE and KMD were public domain programs which are now copyrighted by
Irv Hoff and Wayne Masters. We join many other RCP/M SysOps in
protesting the "appropriation" of public domain programs by people
who then modify them and copyright them. This is not in the true
spirit of RCP/M public domain programming.
For those who don't know, BYE was originally written by Dave
Jaffe. KMD is a renamed XMODEM, which was originally written
by me, based on Ward Christensen's MODEM2 program.
You are encouraged to download and forward the public domain
replacements for BYE5xx and KMDxx:
NUBYE100.LBR - public domain version of BYE5
NUKMD100.LBR - public domain version of KMD
NU-CLOCK.LBR - clock inserts for NUBYE
NUBY-SUP.LBR - supplimental library for NUBYE
NUBY-INS.LBR - port and modem inserts for NUBYE
There are many added features to them. MOST importantly,
they are now back in the public domain for all of us to
contribute to - and feel good about it.
--Keith Petersen, W8SDZ - Co-Sysop of RCP/M Royal Oak (MI)
18-Jul-86 17:29:43-MDT,1019;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 18 Jul 86 17:29:34-MDT
Received: from amc-hq.arpa by AMSAA.ARPA id a000412; 18 Jul 86 12:59 EDT
Received: by AMC-HQ via cde1; 18 Jul 86 12:48 EDT
Date: Fri, 18 Jul 86 10:30:57 EDT
From: "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
To: info-cpm%amsaa.arpa@AMC-HQ.ARPA
cc: rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
Subject: H89
This msg for Ed Barton at MIT--sorry everybody else, my mailer won't
build a path back to Ed.
Ed--I'm very interested in the H89 package. I'm sure we can figure
out how to get it here, even if I pick it up (I have family near
Boston).
Please send me your phone number so that we can discuss details.
Basic detail: what are you asking?
Secondary details: what kind of printer? Hard sector disks?
Look forward to hearing from you.
...Dick Stanley
rstanley@amc-hq
-or-
jshaffer@isif
telephone:(202)274-9652/5078
19-Jul-86 07:24:59-MDT,673;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 07:24:54-MDT
Date: Sat, 19 Jul 86 8:57:25 EDT
From: Dave Towson (info-cpm-request) <cpmlist@AMSAA.ARPA>
To: info-cpm@AMSAA.ARPA
Subject: Info-cpm mail delivery interruption:
Fellow CP/Mers - In the wee hours of Thursday 17 July, the AMSAA machine from
which this list is distributed became very sick. Since then, it has been up
and down like a ping pong ball. Can't say whether it is really fixed yet or
not - time will tell. Anyway, that's what's been going on.
Dave Towson <info-cpm-request@amsaa.arpa>
info-cpm list maintainer
19-Jul-86 11:21:52-MDT,926;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 11:21:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id aa00168; 19 Jul 86 12:49 EDT
Received: from USENET by SMOKE.BRL.ARPA id a015409; 19 Jul 86 12:04 EDT
From: seev%techsup.uucp@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: Re: Orphaned Response
Message-ID: <-1771099@techsup>
Date: 16 Jul 86 15:50:00 GMT
Nf-ID: #R:omssw2.UUCP:470:techsup:-1771099:000:357
Nf-From: techsup.UUCP!seev Jul 16 10:50:00 1986
To: info-cpm@AMSAA.ARPA
SCO has a rather nice word processor named Lyrix which is quite
malleable... I should think it would be possible (and quite easy)
to rebind the keys to emulate WordStar. We've been running it
locally for about a year with no problems (on a Xenix system)
and the software is available for everything from Tandy 6000's
to Vaxen. It is, however, not cheap.
19-Jul-86 15:10:48-MDT,50223;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 15:09:03-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000168; 19 Jul 86 12:49 EDT
Received: from USENET by SMOKE.BRL.ARPA id a014864; 19 Jul 86 11:48 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Unix-compatable SHAR for CP/M
Message-ID: <484@copper.UUCP>
Date: 18 Jul 86 05:27:53 GMT
Keywords: shar,unshar,cp/m,c
To: info-cpm@AMSAA.ARPA
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# READ_ME
# SHAR.C
# SHAR.UUE
# This archive created: Thu Jul 17 02:03:12 1986
# By: Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting read_me
sed 's/^XX//' << \SHAR_EOF > read_me
XX
XX READ_ME
XX
XXThis program is both a "shar" and a "unshar" program for those
XXof us with no shell.
XX
XXI have ported the recently posted shar.c to (z80) CP/M. This
XXdistribution has been shar'd with this program.
XX
XXWhen run under CP/M 3.0 with time-of-day supported,
XXshar files created will have archive creation time included.
XX
XXThe uuencoded binary included (shar.com) looks for a file
XX"ENVIRON.DAT" or "A:ENVIRON.DAT" for the environment variables.
XXVariables used are "NAME=" and "ORGANIZATION=".
XX
XXUuencoding of the binary was done with the recently posted
XXturbo-pascal uuencode.com program.
XX
XXThe attached binary was compiled using Manx Aztec C II v1.05g (z80).
XX
XXMike Kersenbrock (usenet:{decvax,ucbvax...}!tektronix!copper!michaelk)
XXAloha, Oregon
XX7/17/86
SHAR_EOF
if test 752 -ne "`wc -c read_me`"
then
echo shar: error transmitting read_me '(should have been 752 characters)'
fi
echo shar: extracting shar.c
sed 's/^XX//' << \SHAR_EOF > shar.c
XX/*
XX * Shar puts readable text files together in a package
XX *
XX * from which they are easy to extract.
XX *
XX * v 860716 M. Kersenbrock (tektronix!copper!michaelk) for Z80-CPM
XX * - enhanced usage message
XX *
XX * v 860712 D. Wecker for ULTRIX and the AMIGA
XX * - stripped down.. does patterns but no directories
XX * - added a -u (unshar) switch
XX */
XX
XX#define CPM
XX
XX#ifdef CPM
XX#include "c:stdio.h"
XX#include "c:fcntl.h"
XX#else
XX#include <stdio.h>
XX#endif
XX
XX#ifdef CPM
XX#define void int
XX#define fputc putc
XXextern char *getenv(),*malloc(),*index(),*rindex();
XXint cpmversion;
XX
XX#endif
XX
XX#ifdef AMIGA
XX#include <exec/types.h>
XXextern char *getenv(),*scdir(),*malloc(),*index();
XX#endif
XX
XX#ifdef ULTRIX
XX#include <sys/types.h>
XXextern char *getenv(),*scdir(),*malloc(),*index();
XX#endif
XX
XX#ifdef VMS
XX#include <types.h>
XXextern char *getenv(),*scdir(),*malloc();
XX#endif
XX
XX
XX#define BADCH ((int)'?')
XX#define EMSG ""
XX#define tell(s) {fputs(*nargv,stderr);fputs((s),stderr);fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
XX#define rescanopts() (optind = 1)
XX
XXint optind = 1, /* index into parent argv vector */
XX optopt; /* character checked for validity */
XXlong fsize; /* length of file */
XXchar *optarg; /* argument associated with option */
XXchar *sav[100]; /* saved file names */
XXint savind; /* save index */
XX
XX/* OPTIONS */
XXint Verbose = 0; /* provide append/extract feedback */
XXint Basename = 0; /* extract into basenames */
XXint Count = 0; /* count characters to check transfer */
XXchar *Delim = "SHAR_EOF"; /* put after each file */
XXchar Filter[100] = "cat"; /* used to extract archived files */
XXchar *Prefix = NULL; /* line prefix to avoid funny chars */
XXint UnShar = 0; /* do we unshar an input file? */
XX
XXchar Usage1[] =
XX"\nSHAR: Create/extract file archive for extraction by /bin/sh (normally).\n\
XX\n\
XXusage: shar [-u archive] [[-a] [-p prefix]\
XX [-d delim] [-bcv] files > archive]\n\
XX\n\
XX where: -a all the options (v,c,b,-pXX)\n";
XX
XXchar Usage2[] =
XX" -b extract absolute paths into current directory\n\
XX -c check filesizes on extraction\n\
XX -d use this EOF delimiter instead of SHAR_EOF\n";
XX
XXchar Usage3[] =
XX" -p use this as prefix to each line in archived files\n\
XX -u unshar <archive>\n\
XX -v verbose on extraction, incl. echoing filesizes\n";
XX
XX
XX#define SED "sed 's/^%s//'" /* used to remove prefix from lines */
XX
XX#ifdef CPM
XX#define OPTSTRING "U:AP:D:BCV"
XX#else
XX#define OPTSTRING "u:ap:d:bcv"
XX#endif
XX
XX#ifdef VMS
XXchar *index(s,c)
XXchar *s;
XXchar c;
XX{
XX while (*s != 0 && *s != c) s++;
XX if (*s == 0 && *s != c) s = 0;
XX return(s);
XX}
XX#endif
XX
XXint header(ppchFiles)
XXchar *ppchFiles[];
XX{
XX extern char *ctime();
XX register int i;
XX auto long clock;
XX register char **ppchList;
XX char *pchOrg;
XX char *pchName;
XX register int problems = 0;
XX
XX pchOrg = getenv("ORGANIZATION");
XX pchName = getenv("NAME");
XX
XX puts("#\tThis is a shell archive.");
XX puts("#\tRemove everything above and including the cut line.");
XX puts("#\tThen run the rest of the file through sh.");
XX puts("#----cut here-----cut here-----cut here-----cut here----#");
XX puts("#!/bin/sh");
XX puts("# shar: Shell Archiver");
XX puts("#\tRun the following text with /bin/sh to create:");
XX for (ppchList = ppchFiles; *ppchList; ++ppchList)
XX printf("#\t%s\n", *ppchList);
XX#ifdef CPM
XX if (cpmversion >= 0x30) {
XX#endif
XX (void) time(& clock);
XX printf("# This archive created: %s", ctime(&clock));
XX#ifdef CPM
XX }
XX#endif
XX if (pchName)
XX printf("# By:\t%s (%s)\n", pchName,
XX pchOrg ? pchOrg : "Dave Wecker Midnight Hacks");
XX return(0);
XX}
XX
XXint archive(input, output)
XXchar *input, *output;
XX{
XX auto char line[BUFSIZ];
XX register FILE *ioptr;
XX
XX if (ioptr = fopen(input, "r")) {
XX printf("%s << \\%s > %s\n", Filter, Delim, output);
XX while(fgets(line, BUFSIZ, ioptr)) {
XX if (Prefix) fputs(Prefix, stdout);
XX fputs(line, stdout);
XX if (Count) fsize += strlen(line);
XX }
XX puts(Delim);
XX (void) fclose(ioptr);
XX return(0);
XX }
XX else {
XX fprintf(stderr, "shar: Can't open '%s'\n", input);
XX return(1);
XX }
XX}
XX
XX
XXvoid shar(file)
XXchar *file;
XX{
XX register char *basefile;
XX basefile = file;
XX if (!strcmp(file, "."))
XX return;
XX fsize = 0;
XX if (Basename) {
XX while(*basefile)
XX basefile++; /* go to end of name */
XX while(basefile > file && *(basefile-1) != '/')
XX basefile--;
XX }
XX if (Verbose) printf("echo shar: extracting %s\n", basefile);
XX if (archive(file, basefile)) exit(66);
XX if (Count) {
XX printf("if test %ld -ne \"`wc -c %s`\"\n",fsize,basefile);
XX printf("then\necho shar: error transmitting %s ",basefile);
XX printf("'(should have been %ld characters)'\nfi\n",fsize);
XX }
XX}
XX
XXint main(argc, argv)
XXint argc;
XXchar **argv;
XX{
XX auto char *ppchFiles[256];
XX register int C;
XX register char **ppchList = ppchFiles;
XX register int errflg = 0;
XX
XX#ifdef CPM
XX cpmversion = (bdoshl(0x0c,0) & 0xff);
XX#endif
XX
XX while(EOF != (C = getopt(argc, argv, OPTSTRING))) {
XX#ifdef CPM
XX switch(isupper(C) ? tolower(C) : C ) {
XX#else
XX switch(C) {
XX#endif
XX case 'v':
XX Verbose++;
XX break;
XX case 'c':
XX Count++;
XX break;
XX case 'b':
XX Basename++;
XX break;
XX case 'd':
XX Delim = optarg;
XX break;
XX case 'a': /* all the options */
XX optarg = "XX";
XX Verbose++;
XX Count++;
XX Basename++;
XX /* fall through to set prefix */
XX case 'p':
XX (void) sprintf(Filter, SED, Prefix = optarg);
XX break;
XX case 'u':
XX UnShar++;
XX dounshar(optarg);
XX break;
XX default:
XX errflg++;
XX }
XX }
XX if (UnShar) exit(0);
XX
XX C = getarg(argc, argv);
XX if (errflg || EOF == C) {
XX if (EOF == C)
XX fprintf(stderr, "shar: No input files\n");
XX fprintf(stderr, "%s%s%s", Usage1, Usage2, Usage3);
XX exit(1);
XX }
XX
XX savind = 0;
XX do {
XX if (getpat(optarg)) exit(2);
XX }
XX while (EOF != (C = getarg(argc, argv)));
XX
XX sav[savind] = 0;
XX header(sav);
XX for (ppchList = sav; *ppchList; ++ppchList) {
XX
XX#ifdef CPM
XX strlower(*ppchList);
XX#endif
XX
XX shar(*ppchList);
XX }
XX puts("#\tEnd of shell archive");
XX puts("exit 0");
XX exit(0);
XX}
XX
XXgetpat(pattern)
XXchar *pattern;
XX{
XX register char *ptr;
XX int temp;
XX
XX#ifdef AMIGA
XX while (ptr = scdir(pattern)) {
XX#else
XX ptr = pattern;
XX {
XX#endif
XX sav[savind] = malloc(strlen(ptr)+1);
XX strcpy(sav[savind++],ptr);
XX#ifdef CPM
XX temp = open(ptr,O_RDONLY);
XX if (temp == -1) {
XX#else
XX if (access(ptr,4)) {
XX#endif
XX printf("No read access for file: %s\n",ptr);
XX return(-1);
XX }
XX
XX#ifdef CPM
XX close(temp);
XX#endif
XX }
XX return(0);
XX}
XX
XX
XX/*
XX * get option letter from argument vector
XX */
XXint
XXgetopt(nargc, nargv, ostr)
XXint nargc;
XXchar **nargv, *ostr;
XX{
XX register char *oli; /* option letter list index */
XX static char *place = EMSG; /* option letter processing */
XX if(!*place) { /* update scanning pointer */
XX if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place)
XX return(EOF);
XX if (*place == '-') { /* found "--" */
XX ++optind;
XX return EOF;
XX }
XX } /* option letter okay? */
XX if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) {
XX if(!*place) ++optind;
XX tell(": illegal option -- ");
XX }
XX if (*++oli != ':') { /* don't need argument */
XX optarg = NULL;
XX if (!*place)
XX ++optind;
XX }
XX else { /* need an argument */
XX if (*place) { /* no white space */
XX optarg = place;
XX }
XX else {
XX if (nargc <= ++optind) { /* no arg */
XX place = EMSG;
XX tell(": option requires an argument -- ");
XX }
XX else {
XX optarg = nargv[optind]; /* white space */
XX }
XX }
XX place = EMSG;
XX ++optind;
XX }
XX return(optopt); /* dump back option letter */
XX}
XX
XX
XXint
XXgetarg(nargc, nargv)
XXint nargc;
XXchar **nargv;
XX{
XX if (nargc <= optind) {
XX optarg = (char *) 0;
XX return EOF;
XX }
XX else {
XX optarg = nargv[optind++];
XX return 0;
XX }
XX}
XX
XXdounshar(ArcNam)
XXchar *ArcNam;
XX{
XX register int i,j;
XX register FILE *inptr,*outptr;
XX auto char line[BUFSIZ];
XX int DirNum = -1;
XX int Prefix = 0;
XX char Dirs[5][40],FilNam[128],Delim[40],ScrStr[128];
XX char *ptr;
XX
XX if (!(inptr = fopen(ArcNam,"r"))) {
XX fprintf(stderr,"shar: Can't open archive '%s'\n", ArcNam);
XX return;
XX }
XX while (fgets(line,BUFSIZ,inptr)) {
XX if (strncmp(line,"sed ",4) == 0) {
XX Prefix = 0;
XX if (!(ptr = index(line,'/'))) goto getfil;
XX if (*++ptr == '^') ++ptr;
XX while (*ptr++ != '/') Prefix++;
XX goto getfil;
XX }
XX else if (strncmp(line,"cat ",4) == 0) {
XX Prefix = 0;
XX ;
XXgetfil:
XX
XX#ifdef VMS
XX strcpy(FilNam,"[");
XX#else
XX FilNam[0] = 0;
XX#endif
XX
XX for (i = 0; i <= DirNum; i++) {
XX
XX#ifdef VMS
XX strcat(FilNam,".");
XX strcat(FilNam,Dirs[i]);
XX#else
XX strcat(FilNam,Dirs[i]);
XX strcat(FilNam,"/");
XX#endif
XX
XX }
XX
XX
XX#ifdef VMS
XX strcat(FilNam,"]");
XX#endif
XX
XX getshpar(line,">",ScrStr);
XX strcat(FilNam,ScrStr);
XX
XX#ifdef CPM
XX tocpmformat(FilNam); /* tweek format as needed */
XX#endif
XX getshpar(line,"<<",Delim);
XX fprintf(stderr,"Creating %s ...",FilNam);
XX outptr = fopen(FilNam,"w");
XX while (fgets(line,BUFSIZ,inptr)) {
XX if (strncmp(line,Delim,strlen(Delim)) == 0) break;
XX if (outptr) fputs(&line[Prefix],outptr);
XX }
XX if (outptr) {
XX fclose(outptr);
XX fprintf(stderr,"...done\n");
XX }
XX else fprintf(stderr,"...error in creating file\n");
XX }
XX else if (strncmp(line,"mkdir ",6) == 0) {
XX sprintf(stderr,"Need to make directory: %s\n",&line[6]);
XX }
XX else if (strncmp(line,"chdir ",6) == 0) {
XX if (line[6] == '.' && line[7] == '.') DirNum--;
XX else strcpy(Dirs[++DirNum],&line[6]);
XX if (DirNum < -1) DirNum = -1;
XX }
XX else if (strncmp(line,"cd ",3) == 0) {
XX if (line[3] == '.' && line[4] == '.') DirNum--;
XX else strcpy(Dirs[++DirNum],&line[3]);
XX if (DirNum < -1) DirNum = -1;
XX }
XX }
XX fclose(inptr);
XX}
XX
XXgetshpar(line,sea,par)
XXchar *line,*sea,*par;
XX{
XX register int i,j,k;
XX register char *scr1,*scr2;
XX
XX while (*line) {
XX scr1 = line;
XX scr2 = sea;
XX while (*scr1 && *scr2 && *scr1 == *scr2) {
XX scr1++;
XX scr2++;
XX }
XX if (*scr2 == 0) {
XX if (*scr1 == 0) {
XX *par = 0;
XX return;
XX }
XX while ( *scr1 == ' ' || *scr1 == '\t' ||
XX *scr1 == '\\' || *scr1 == '\'' || *scr1 == '"') scr1++;
XX while ( *scr1 != 0 && *scr1 != ' ' && *scr1 != '\t' &&
XX *scr1 != '\\' && *scr1 != '\'' && *scr1 != '"' &&
XX *scr1 != '\n' && *scr1 != '\r') *par++ = *scr1++;
XX *par = 0;
XX return;
XX }
XX line++;
XX }
XX *par = 0;
XX}
XX
XX
XX#ifdef CPM
XX
XXtocpmformat(filename)
XXchar *filename;
XX{
XX char buffer[100];
XX char extension[100];
XX register char *temp;
XX int mod = 0;
XX
XX strcpy(buffer,filename);
XX
XX /*
XX * Make sure we get rid of any pathnames
XX */
XX if ((temp=rindex(buffer,'/')) != 0) {
XX strcpy(buffer,(char *)((temp-buffer)+filename+1));
XX mod = 1;
XX }
XX
XX if (strlen(filename) <= 8) {
XX if (mod != 0) {
XX strcpy(filename,buffer);
XX }
XX return(0);
XX }
XX
XX /*
XX * If it already is in "CPM" format we'll check if we need
XX * to truncate the front filename part.
XX */
XX if ((temp=index(buffer,'.')) != 0 ) {
XX if ((temp-buffer) < 8) {
XX if (mod != 0) {
XX strcpy(filename,buffer);
XX }
XX return(0);
XX }
XX else {
XX strcpy(extension,temp);
XX strcpy(&buffer[8],extension);
XX buffer[12] = '\0';
XX strcpy(filename,buffer);
XX return(1);
XX }
XX }
XX
XX /*
XX * OK, filename is longer than can be handled, and it doesnt have
XX * a filetype "." marker already. We will put one in to minimize
XX * truncation.
XX */
XX strcpy(extension,&buffer[8]);
XX buffer[8] = '.';
XX strcpy(&buffer[9],extension);
XX buffer[12] = '\0';
XX strcpy(filename,buffer);
XX return(2);
XX}
XX
XX
XX
XXstrlower(string)
XXchar *string;
XX{
XX register char *pointer;
XX char c;
XX for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
XX if (isupper(c))
XX *pointer = tolower(c);
XX }
XX}
XX
XX#endif
SHAR_EOF
if test 12942 -ne "`wc -c shar.c`"
then
echo shar: error transmitting shar.c '(should have been 12942 characters)'
fi
echo shar: extracting shar.uue
sed 's/^XX//' << \SHAR_EOF > shar.uue
XXbegin 644 SHAR.COM
XXMPT$F4TA!4E]%3T8`S3,5^/\A``#E_>$A`@+ES083T>LA!@`Y<R-R(0\"Y<T&
XXM$]'K(00`.7,C<B$4`N7-0AK1(2\"Y<U"&M$A90+ES4(:T2&1`N7-0AK1(<L"
XXMY<U"&M$AU0+ES4(:T2'O`N7-0AK1(10`.5XC5M7=X<.$`=WEX2,CY=WAW>7A
XXM?B.VRJ`!W6X`W68!Y2$@`^7-.A?1T<-\`2H,5Q$P`.O-D17*R0$A"``YY<W&
XXM1]$A"``YY<T32='E(28#Y<TZ%]'1(00`.7XCMLK^`2$&`#E^([;*Z`$A!@`Y
XXM7B-6Z\/K`2%0`^4A!@`Y7B-6U2%!`^7-.A?1T=$A``#)3U)'04Y)6D%424].
XXM`$Y!344`(PE4:&ES(&ES(&$@<VAE;&P@87)C:&EV92X`(PE296UO=F4@979E
XXM<GET:&EN9R!A8F]V92!A;F0@:6YC;'5D:6YG('1H92!C=70@;&EN92X`(PE4
XXM:&5N(')U;B!T:&4@<F5S="!O9B!T:&4@9FEL92!T:')O=6=H('-H+@`C+2TM
XXM+6-U="!H97)E+2TM+2UC=70@:&5R92TM+2TM8W5T(&AE<F4M+2TM+6-U="!H
XXM97)E+2TM+2,`(R$O8FEN+W-H`",@<VAA<CH@("`@4VAE;&P@07)C:&EV97(`
XXM(PE2=6X@=&AE(&9O;&QO=VEN9R!T97AT('=I=&@@+V)I;B]S:"!T;R!C<F5A
XXM=&4Z`",))7,*`",@5&AI<R!A<F-H:79E(&-R96%T960Z("5S`",@0GDZ"25S
XXM("@E<RD*`$1A=F4@5V5C:V5R($UI9&YI9VAT($AA8VMS`,TS%0#\(3`$Y2$.
XXM!#E>(U;5S9P7T=%$37RURA8$(0X$.5XC5M4JH%;E(:)6Y2$R!.7-.A?K(0@`
XXM.?G%(0`$Y2$(`#GES7$9T='1R@4$*@97?+7*S0,A)%;E*@97Y<V&&M'1(216
XXMY2$&`#GES88:T=$JGE9\M<H"!"%06>4A!@`YY<V10M'-7T?-043AY<WO0\VK
XXM1.'-`D3#I0,JH%;ES4(:T<7-,QW1(0``R2$,!#E>(U;5(4($Y2$O5N7-71?1
XXMT=$A`0#)<@`E<R`\/"!<)7,@/B`E<PH`<VAA<CH@0V%N)W0@;W!E;B`G)7,G
XXM"@#-,Q4``"$,`#E>(U9"2R$U!>4A#@`Y7B-6U<TS0M'1PGP$R2%06>7-Z$,`
XXM````X<T"1"J25GRURLT$8&E^M\JC!&!I(T1-*\.3!&!IZR$,`#E^(V9OS><6
XXMRLT$(?__"5X6`"$O`,V!%<K-!&!I*T1-(\.C!"H.5WRURM\$Q2$W!>7-.A?1
XXMT<4A#@`Y7B-6U<UK`]'1RO@$(4(`Y<V.*M$JGE9\M<HT!<4A4%G-[T/-%40A
XXM407ES3H7ZR$(`#GYQ2%O!>7-.A?1T2%06<WO0\T51"&6!>7-.A?1T=')+@!E
XXM8VAO('-H87(Z(&5X=')A8W1I;F<@)7,*`&EF('1E<W0@)6QD("UN92`B8'=C
XXM("UC("5S8"(*`'1H96X*96-H;R!S:&%R.B!E<G)O<B!T<F%N<VUI='1I;F<@
XXM)7,@`"<H<VAO=6QD(&AA=F4@8F5E;B`E;&0@8VAA<F%C=&5R<RDG"F9I"@#-
XXM,Q4`_B$$`#GEW>$A``#E_>$A``#E(0P`Y<U1)M'1$?\`S2(5(@Q7(=P'Y2$0
XXM`CE>(U;5(1`".5XC5M7-S0C1T=%$3>4A___1S8$5RL8&Q<US0]'*'0;%S<1#
XXMT<,?!F!IPZ`&*@Y7(R(.5RO#PP8JGE8C(IY6*\/#!BJ25B,BDE8KP\,&*J!9
XXM(J!6P\,&(><'(J!9*@Y7(R(.5RLJGE8C(IY6*RJ25B,BDE8K*J!9(@97Y2'J
XXM!^4AHE;ES:\?T='1P\,&*A!7(R(05RLJH%GES>D*T</#!OWEX2/E_>$KP\,&
XXMS;$6!P!V`"(&8P`M!F(`.`9D`$,&80!,!G``:@9U`((&E0;#Y@4J$%=\M<K6
XXM!B$``.7-CBK1(0X".5XC5M4A#@(Y7B-6U<VL"M'11$W]Y>%\M<(`!R'__U!9
XXMS7(5RCT'(?__4%G-<A7*&`<A^`?E(2]6Y<U=%]'1(5]8Y2'55^4A$E?E(0X(
XXMY2$O5N7-71?K(0H`.?DA`0#ES8XJT2$``")L6BJ@6>7-,PC1RE8'(0(`Y<V.
XXM*M$A#@(Y7B-6U2$.`CE>(U;5S:P*T=%$3>4A___1S8$5PD,'(0``Y2IL6BD1
XXMI%D9T7,C<B&D6>7-#`'1(:19Y=WAPZ$'W>7A(R/EW>'=Y>%^([;*PP?=;@#=
XXM9@'ES;T2T=UN`-UF`>7-6031PYD'(14(Y<U"&M$A+`CES4(:T2$``.7-CBK1
XXMR54Z05`Z1#I"0U8`6%@`<V5D("=S+UXE<R\O)P!S:&%R.B!.;R!I;G!U="!F
XXM:6QE<PH`)7,E<R5S`",)16YD(&]F('-H96QL(&%R8VAI=F4`97AI="`P`,TS
XXM%?[_(0X`.5XC5D)+Q<V10M$CY<W@,M'E*FQ:*1&D61G1<R-RQ2IL6B,B;%HK
XXM*1&D61E>(U;5S6Q"T=$A``#EQ<TL-M'1ZR$$`#ES(W(A!``Y7B-6(?__S7(5
XXMRJ`(Q2&P".7-.A?1T2'__\DA!``Y7B-6U<V8-]$A``#)3F\@<F5A9"!A8V-E
XXM<W,@9F]R(&9I;&4Z("5S"@#-,Q4``"H\47ZWPC<)*DY9ZR$,`#E^(V9OS9$5
XXMPAD)*DY9*>LA#@`Y?B-F;QE>(U;K(CQ17A8`(2T`S8$5PAD)*CQ1(R(\47ZW
XXMPAT)(?__R2H\45X6`"$M`,UR%<HW"2I.62,B3EDA___)*CQ1(R(\42M>%@#K
XXM(J)9$3H`S7(5PF<)*J)9Y2$2`#E>(U;5S1-#T=%$37RUPK8)*CQ1?K?"=@DJ
XXM3EDC(DY9(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6Y2%S"N7-AAK1T2$O5N4J
XXMHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R6!I(T1-7A8`(3H`S8$5RM\)(0``
XXM(J!9*CQ1?K?"W`DJ3EDC(DY9PVX**CQ1?K?*\`DJ/%$BH%G#80HJ3EDC(DY9
XXMY2$.`#E>(U;AS9(5RDP*(8@*(CQ1(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6
XXMY2&)"N7-AAK1T2$O5N4JHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R2I.62GK
XXM(0X`.7XC9F\97B-6ZR*@62&K"B(\42I.62,B3EDJHEG)`#H@:6QL96=A;"!O
XXM<'1I;VX@+2T@```Z(&]P=&EO;B!R97%U:7)E<R!A;B!A<F=U;65N="`M+2``
XXM`,TS%0``(0P`.5XC5BI.6<V2%<K+"B$``"*@62'__\DJ3EDC(DY9*RGK(0X`
XXM.7XC9F\97B-6ZR*@62$``,G-,Q4(^B'__^LA^`$Y<R-R(0``ZR'V`3ES(W(A
XXMG`[E(08&.5XC5M7-G!?1T>7]X7RUPC0+(00&.5XC5M4AG@[E(2]6Y<U=%]'1
XXMT<G]Y2$`!.4A_@$YY<UQ&='1T<J5#B$$`.4AO0[E(?X!.>7-JD+1T='"XPLA
XXM``#K(?8!.7,C<B$O`.4A_`$YY<T30]'1ZR$$`#ES(W)ZL\H$#"$$`#GE?B-F
XXM;R/KX7,C<NM>%@`A7@#-<A7*KPLA!``YY7XC9F\CZ^%S(W(A!``YY7XC9F\C
XXMZ^%S(W+K*UX6`"$O`,V!%<K@"R'V`3GE?B-F;R/KX7,C<NLKPZ\+PP0,(00`
XXMY2'"#N4A_@$YY<VJ0M'1T<)-#2$``.LA]@$Y<R-R(0``ZR&N`#ES(0``1$W#
XXM&PQ@:2-$32M@:>LA^`$Y?B-F;\V2%<I6#&!I$2@`S2H6ZR$N`3D9Y2&P`#GE
XXMS=="T=$AQP[E(;``.>7-UT+1T<,5#"$&`#GE(<D.Y2'^`3GES3(/T='1(08`
XXM.>4AL``YY<W70M'1(:X`.>7-71'1(88`.>4ARP[E(?X!.>7-,@_1T=$AK@`Y
XXMY2'.#N4A+U;ES5T7T='1(=X.Y2&P`#GES9P7T='K(?H%.7,C<OWE(0`$Y2'^
XXM`3GES7$9T='1RA<-(88`.>7-D4+1Y2&(`#GE(?X!.>7-JD+1T='*%PTA^@4Y
XXM?B.VRA0-(?H%.5XC5M4A^`$Y7B-6(?P!.1GES88:T='#OPPA^@4Y?B.VRCT-
XXM(?H%.5XC5M7-,QW1(>`.Y2$O5N7-71?1T<-*#2'I#N4A+U;ES5T7T='#D@XA
XXM!@#E(00/Y2'^`3GES:I"T='1PGD-(0`".>4A"P_E(2]6Y<VO']'1T<.2#B$&
XXM`.4A)P_E(?X!.>7-JD+1T='"!PXA``(Y7A8`(2X`S7(5RL,-(0$".5X6`"$N
XXM`,UR%<K##2'X`3GE?B-F;ROKX7,C<NLCP^D-(0`".>4A^@$YY7XC9F\CZ^%S
XXM(W(A*`#-*A;K(3`!.1GES6Q"T=$A^`$Y7B-6(?__S:P5R@0.(?__ZR'X`3ES
XXM(W+#D@XA`P#E(2X/Y2'^`3GES:I"T='1PI(.(?T!.5X6`"$N`,UR%<I1#B'^
XXM`3E>%@`A+@#-<A7*40XA^`$YY7XC9F\KZ^%S(W+K(\-W#B']`3GE(?H!.>5^
XXM(V9O(^OA<R-R(2@`S2H6ZR$P`3D9Y<UL0M'1(?@!.5XC5B'__\VL%<J2#B'_
XXM_^LA^`$Y<R-RPS0+_>7-,QW1R7(`<VAA<CH@0V%N)W0@;W!E;B!A<F-H:79E
XXM("<E<R<*`'-E9"``8V%T(``O`#X`/#P`0W)E871I;F<@)7,@+BXN`'<`+BXN
XXM9&]N90H`+BXN97)R;W(@:6X@8W)E871I;F<@9FEL90H`;6MD:7(@`$YE960@
XXM=&\@;6%K92!D:7)E8W1O<GDZ("5S"@!C:&1I<B``8V0@`,TS%?S_(1``.5XC
XXM5NM^M\I.$2$0`#E>(U8A!@`Y<R-R(1(`.5XC5B$$`#ES(W(A!@`Y7B-6ZWZW
XXMRKT/(00`.5XC5NM^M\J]#R$$`#E>(U;K7A8`U2$(`#E>(U;K7A8`X<UR%<J]
XXM#R$&`#GE?B-F;R/KX7,C<NLK(00`.>5^(V9O(^OA<R-RZRO#8`\A!``Y7B-6
XXMZUX6`'JSPCH1(08`.5XC5NM>%@!ZL\+L#R$``.4A%@`Y7B-6Z]%SR2$&`#E>
XXM(U;K7A8`(2``S7(5PE`0(08`.5XC5NM>%@`A"0#-<A7"4!`A!@`Y7B-6ZUX6
XXM`"%<`,UR%<)0$"$&`#E>(U;K7A8`(2<`S7(5PE`0(08`.5XC5NM>%@`A(@#-
XXM<A7*9!`A!@`YY7XC9F\CZ^%S(W+K*\/L#R$&`#E>(U;K7A8`>K/**Q$A!@`Y
XXM7B-6ZUX6`"$@`,V!%<HK$2$&`#E>(U;K7A8`(0D`S8$5RBL1(08`.5XC5NM>
XXM%@`A7`#-@17**Q$A!@`Y7B-6ZUX6`"$G`,V!%<HK$2$&`#E>(U;K7A8`(2(`
XXMS8$5RBL1(08`.5XC5NM>%@`A"@#-@17**Q$A!@`Y7B-6ZUX6`"$-`,V!%<HK
XXM$2$&`#GE?B-F;R/KX7,C<NLK7A8`U2$6`#GE?B-F;R/KX7,C<NLKT7/#9!`A
XXM``#E(18`.5XC5NO1<\DA$``YY7XC9F\CZ^%S(W+K*\,W#R$``.4A%@`Y7B-6
XXMZ]%SR<TS%3;_(0``ZR$$`#ES(W(AU@`Y7B-6U2%L`#GES6Q"T=$A+P#E(6P`
XXM.>7--4/1T41-?+7*OQ%@:>LA:@`YS886ZR'6`#E^(V9O&2/E(6P`.>7-;$+1
XXMT2$!`.LA!``Y<R-R(=8`.5XC5M7-D4+1$0@`Z\V2%<KU$2$$`#E^([;*\1$A
XXM:@`YY2'8`#E>(U;5S6Q"T=$A``#)(2X`Y2%L`#GES1-#T=%$37RURG<28&GK
XXM(6H`.<V&%A$(`.O-K!7*/A(A!``Y?B.VRCH2(6H`.>4AV``Y7B-6U<UL0M'1
XXM(0``R<4A"``YY<UL0M'1(08`.>4A=``YY<UL0M'1(0``ZR%V`#ES(6H`.>4A
XXMV``Y7B-6U<UL0M'1(0$`R2%R`#GE(0@`.>7-;$+1T2$N`.LA<@`Y<R$&`#GE
XXM(74`.>7-;$+1T2$``.LA=@`Y<R%J`#GE(=@`.5XC5M7-;$+1T2$"`,G-,Q7_
XXM_R$-`#E>(U9"2\/4$F!I(T1-*V!I7A8`(00`.7-ZL\H%$R$$`#E>%@#5S7-#
XXMT<H"$R$$`#E>%@#5S<1#T>M@:7/#SA+)S3,5K/<A8`@Y7B-6U<V10M$13P#K
XXMS:T5RB43(0``R2$.%>4A`A7ES9P7T='K(00`.7,C<GJSPET3(1X5Y2$0%>7-
XXMG!?1T>LA!``Y<R-R>K/"71,A``#)(6`(.5XC5M4A"@@YY<UL0M'1(2`5Y2$*
XXM"#GES=="T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
XXM@17*RA,A!@`Y7B-6(0H`S8$5RLH3(08`.5XC5M5@:2-$32O1<\.*$R$``.M@
XXM:7-@:>LA"`0YS7(5RO(3(08`.5XC5B'__\UR%<KR$R$``,DA"`@YY<V10M'E
XXM(0H$.>4A#`@YY<VJ0M'1T<(2%,,5%,-]$R$("#GES9%"T>LA"`0Y&41-Q2$*
XXM`#GES6Q"T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
XXM@17*?A0A!@`Y7B-6(0H`S8$5RGX4(08`.5XC5M5@:2-$32O1<\,^%"$``.M@
XXM:7,A"`0Y7A8`U<U<0]'*V!0A"`0YY<V10M'*V!0A"``YY<V10M'E(0H$.>7-
XXMD4+1T1D1``3KS:P5RM$4(0@$.>4A"@`YY<W70M'1P]44(0``R</;%,/>%,,Q
XXM%"$(`#GES9%"T2/ES6,ST41->+'*_Q0A"``YY<7-;$+1T6!IR45.5DE23TXN
XXM1$%4`'(`03I%3E9)4D].+D1!5`!R`#T`?*)G?:-OM,E\+V=]+V^TR>GAW>7]
XXMY<5>(U8C1$TA```YZSGYU6!IS3(5Z^'YP?WAW>'K?+7)>JPR/U'-UQ7K.C]1
XXMM_I"%GVTR<WP%>M]M,E]D\)\%7R2RHL5(0``K\E]D\*+%7R2RGP5(0$`?;3)
XXMZWRJ^J05?9-\FC\^`,X`;R8`R7H'Y@%O)@#)ZWRJ^KX5?9-\FCX`S@!O)@#)
XXM?`?F`6\F`,EZ,C]1S=<5.C]1M_I"%GRUR7RW\N(5+V=]+V\C>K?R\!4O5WLO
XXM7Q/#\!7%1$TA```^$#(^42GK*>O2`Q8C?9%O?)AGTAL6"3H^43TR/E'"^Q7!
XXM?;3)$SH^43TR/E'"^Q7!?;3)Q41-(0``/A`IZRGKTCH6"3W",A;!?;3)?2]O
XXM?"]G(WVTR7RURHL5PWP5?+)G?;-OM,GK>^8?7\J#%GRT\OL6?#<?9WT?;QW"
XXM:1:TR>M[YA]?RH,6*1W"?A9]M,GK?9-O?)IGM<GKX<5.(T8CZPGK3B-&(WJX
XXMVJ<6>[G2JQ8C(QD97B-6Z\'IZ^'%0DM>(U8;>K?ZT18C>;[*RQ8C(R/#N18C
XXM>+["QA8C?B-F;\'IZWV3?)H^`#_.`&\F`,GK?9-\FCX`S@!O)@#)ZWOF'U_*
XXM@Q9\MQ]G?1]O'<+[%K3)?*IG?:MOM,GML,G1(0(`.=WE_>7%U1%`408&?A(C
XXM$P7"(Q<A,!?CZ<']X=WA?+7)-\G-,Q4``"$D5B)&42$.`#GE(0X`.5XC5M4A
XXMA1?ES?X?T='1R<TS%0``(0P`.5XC5NLB1E$A$``YY2$0`#E>(U;5(847Y<W^
XXM']'1T<G-,Q4``"I&4>4A#@`Y7B-6U<W$&M'1R<TS%0``(1E61$U@:1$&`!E^
XXMM\K*%V!I$0L`&41-$9)6Z\W8%LK'%R$``,G#IA<A#@`Y7B-6ZR->%@`A*P#-
XXM<A7EW>$A#@`Y7B-6ZUX6`.O#PAC=Y>%\M<K\%R$"`,/_%R$``.4A#@`Y7B-6
XXMU<TL-M'1ZR$'``ES(?__S7(5RB`8(0``R</5&-WEX7RURC$8(0(`PS08(0$`
XXM$0`#S506Y2$.`#E>(U;5S2PVT='K(0<`"7,A___-<A7*6Q@A``#)P]48W>7A
XXM?+7*;!@A`@##;Q@A`0`1``'-5!;E(0X`.5XC5M7-+#;1T>LA!P`)<R'__\UR
XXM%<J6&"$``,DA`@#ES>A#`````,T51"$'``E>%@#5S;4_ZR$(`#GYP]48(?K_
XXM(I99(0``R<VQ%@,`<@#N%W<`(QAA`%X8N!@A`0#K(08`"7,A``3K(0D`"7,C
XXM<B$``.M@:7,C<B$"``ES(W(A!``)<R-R8&G)S3,5```A#``Y7B-60DLA&5;E
XXMS?H9T>7=X1'__\V!%<I`&=WEX1$*`,V!%<I`&=WEX>5@:2-$32O1<\,1&2$`
XXM`.M@:7/=Y>$1___-<A7*:!E@:>LA#``Y?B-F;\UR%<IH&2$``,DA#``Y7B-6
XXMZ\G-,Q4``"$,`#E>(U;5W>$A#@`YY7XC9F\KZ^%S(W(A``#-K17*RADA$``Y
XXM7B-6U<WZ&=%$31'__\V!%<K*&6!IY=WEX2/EW>$KT7-@:1$*`,UR%<+*&<.`
XXM&2$``-UU`&!I$?__S7(5RO$9W>7AZR$,`#E^(V9OS7(5RO$9(0``R2$,`#E>
XXM(U;KR<TS%0``(0P`.4XC1L7-6!O1$7\`S2(5Y=WAPRL:8&GE?B-F;ROKX7,C
XXM<B'__\G#!AK-L18#`!H`%QH-`"@:```H&CX:W>7AR<TS%0``(0P`.4XC1F!I
XXM?K?*>!HA)%;E8&DC1$TK7A8`U<W$&M'1$?__S7(5RG4:(?__R<-.&B$D5N4A
XXM"@#ES<0:T=')S3,5```A#``Y3B-&8&E^M\K`&B$.`#E>(U;58&DC1$TK7A8`
XXMU<W$&M'1$?__S7(5RKT:(?__R<.2&B$``,G-,Q4``"$,`#E.(T8A#@`Y7B-6
XXMU=WA(7\`4%G-(A5$36!I$0H`S7(5R@<;W>4A#0#ES9P<T=$1___-<A7*!QLA
XXM___)W>7%S9P<T=')S3,5```A#``Y7B-6U<U8&]%$31'__\UR%<)$&R$,`#E>
XXM(U;5S5@;T>7=X1'__\UR%<I(&R'__\G=Y>$1"`#KS7864%G-5!;)S3,5```A
XXM#``Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*'!PA!@`)7A8`(0@`S2(5RHP;(?__
XXMR2'[_^5@:1$&`!G1Y6XF`,TB%>OA<V!I$00`&7XCML*R&\7-&1_1(0D`"5XC
XXM5M4A!``)7B-6U2$'``E>%@#5S:<YT='1Y=WA$0``Z\V2%<H$'-WEX7RUPNL;
XXM(0@`P^X;(1``Y6!I$08`&='E;B8`S506Z^%S(?__R2$$``E>(U9@:7,C<MWE
XXMX1GK(0(`"7,C<F!IY7XC9F\CZ^%S(W+K*UX6`"'_`,TB%<G-,Q4``"$O5N4A
XXM#@`Y7B-6U<V<'-'1R<TS%0``(0P`.4XC1B$.`#E>(U;5Q<V<'-'1$0``Z\VL
XXM%<IT'"'__\DA#@`Y7B-6U6!I$0@`Z\WS%N7-G!S1T1$``.O-K!7*F1PA___)
XXM8&G)S3,5```A#@`Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*T1PA#``Y7B-6(?\`
XXMS2(5Y<7-TAW1T<DA#``Y7B-6U6!IY7XC9F\CZ^%S(W+K*]%S(?\`S2(5R<TS
XXM%0``(?__Y2$.`#E>(U;5S=(=T=')S3,5```A&59$36!I$9)6Z\WF%LHR'6!I
XXM$0L`&41-$?7_&>7-,QW1PQ(=R<TS%?[_(0X`.4XC1B$``.LA!``Y<R-R8&D1
XXM!@`9?K?*P!TA!@`)7A8`(00`S2(5RG<=(?__Y<7-TAW1T>LA!``Y<R-R(0<`
XXM"5X6`-7-F#?1ZR$$`#GE?B-F;\U4%NOA<R-R(08`"5X6`"$"`,TB%<K`'2J<
XXM5N4A!``)7B-6Z]%S(W(A!``)7B-6ZR*<5B$``.LA!@`)<R$$`#E>(U;KR<TS
XXM%0``(0P`.4XC1B$&``E>%@`A!`#-(A7*/!XA!``)7B-6U6!I7B-6X<V&%N7=
XXMX=WE(00`"5XC5M4A!P`)7A8`U<WC/-'1T1'__\UR%<H\'B$0`.5@:1$&`!G1
XXMY6XF`,U4%NOA<R'__\DA#@`Y7B-6(?__S7(5RG4>(?O_Y6!I$08`&='E;B8`
XXMS2(5Z^%S(0``ZV!I<R-R(0(`"7,C<B$``,E@:1$$`!E^([;"AA[%S1D?T2$)
XXM``E>(U8A`0#-<A7*OQXA`0#E(1``.>4A!P`)7A8`U<WC/-'1T1'__\UR%<(C
XXM'B$.`#E>(U;KR2$$``E>(U9@:7,C<B$)``E>(U;5(00`"5XC5N$9ZR$"``ES
XXM(W(A!`#E8&D1!@`9T>5N)@#-5!;KX7,A#@`Y7B-6U6!IY7XC9F\CZ^%S(W+K
XXM*]%S(?\`S2(5R<TS%?[_(0X`.4XC1B$)``E>(U8A`0#-<A7*1!]@:1$(`!GK
XXM(00`"7,C<LDJG%9\M<ID'RJ<5NLA!``Y<R-R*IQ67B-6ZR*<5L.+'R$)``E>
XXM(U;5S6,ST>LA!``Y<R-R>K/"BQ\A`0#K(0D`"7,C<L,U'R$"`.5@:1$&`!G1
XXMY6XF`,U4%NOA<R$$`#E>(U8A!``)<R-RR<TS%0``(0P`.5XC5NLB2%$A$``Y
XXMY2$0`#E>(U;5(>`?Y<W^']'1T2$``.4J2%'1<\G-,Q4``"$,`#E>(U;5*DA1
XXM(R)(42O1<R'_`,TB%<G-,Q6^_R%.`#E.(T8A4``Y7B-6U=WAW>7A(^7=X2M>
XXM%@#5_>%ZL\H0)?WEX1$E`,UR%<H%)2$``.LA&@`Y<R$!`.LA1``Y<R-R(2``
XXMZR%"`#ES(W(A_W_K(4``.7,C<MUN`"8`Y?WA$2T`S7(5RH<@(0``ZR%$`#ES
XXM(W+=Y>$CY=WA*UX6`-7]X?WEX1$P`,UR%<J>("$P`.LA0@`Y<R-R(0``ZR$^
XXM`#ES(W+=Y>$CY=WA*UX6`-7]X2$P`,V1%<KM(/WEX1$Y`.O-DA7*[2`A/@`Y
XXM7B-6(0H`S2H6_>71&1'0_QGK(3X`.7,C<L.I(/WEX1$N`,UR%<I((2$``.LA
XXM0``Y<R-RW>7A(^7=X2M>%@#5_>$A,`#-D17*2"']Y>$1.0#KS9(5RD@A(4``
XXM.5XC5B$*`,TJ%OWET1D1T/\9ZR%``#ES(W+#!"']Y>$1;`#-<A7*B"'=Y>$C
XXMY=WA*UX6`-7]X2$Z`#GE(50`.>5^(V9O$00`&>OA<R-RZQ'\_QG-[T/AS0)$
XXMPR<B_>7A$60`S7(5RKHA(3H`.>4A5``YY7XC9F\C(^OA<R-RZRLK7B-6Z\U?
XXM1^'-`D3#)R+]Y>$190#-<A7"WB']Y>$19@#-<A7"WB']Y>$19P#-<A7*!"(A
XXM!``YY2%4`#GE?B-F;Q$(`!GKX7,C<NL1^/\9S7I'X<UZ1\,G(B$Z`#GE(50`
XXM.>5^(V9O(R/KX7,C<NLK*UXC5NO-44?AS0)$_>7AP]$C(1H`.>4A"`#E(3X`
XXM.<WO0\T51,US)>LA"``Y^2$T`#ES(W+#^",A.@`YS>]#S=I#`````,TG1\JF
XXM(B$:`#GE(0H`Y2$^`#G-[T/-4$3-%43-$27K(0@`.?DA-``Y<R-R(2T`Y2$V
XXM`#GE?B-F;ROKX7,C<NO1<\/)(B$:`#GE(0H`Y2$^`#G-[T/-%43-$27K(0@`
XXM.?DA-``Y<R-RP_@C(1H`.>4A"@#E(3X`.<WO0\T51,US)>LA"``Y^2$T`#ES
XXM(W+#^",A&@`YY2$0`.4A/@`YS>]#S15$S7,EZR$(`#GY(30`.7,C<L/X(R$Z
XXM`#G-[T/-<D?K(30`.7,C<M7-D4+1ZR$X`#ES(W+#$"3]Y>$190#-<A7*3",A
XXM``##3R,A`0#E(4(`.5XC5B'_?\UR%<IF(R$&`,-N(R%"`#E>(U;KY2$0`#GE
XXM(0H`.<UZ1\UZ1\UZ1^LA#@`Y^2$,`#GK(30`.7,C<M7-D4+1ZR$X`#ES(W(A
XXMR`#K(4``.7,C<L,0)"$Z`#G-[T/-<D?E_>']Y>'E(1L`.>LA-@`Y<R-RZ]%S
XXMP_@CS;$6"`!O`"TB9`!3(G4`S")X`/(B<P`8(V4`.B-F`#HC8P"N([LC(1H`
XXM.>LA-``Y?B-F;\V&%NLA.``Y<R-R(3@`.5XC5B%``#E^(V9OS:T5RC,D(4``
XXM.5XC5B$X`#ES(W(A1``Y?B.VRFXD(3X`.>5^(V9O*^OA<R-RZR/K(3@`.7XC
XXM9F_-K17*;B0A0@`Y7B-6U6!IS3(5T<,])"$``.LA-@`Y<R-RPXLD(38`.>5^
XXM(V9O(^OA<R-R(30`.5XC5NM^M\K+)"$V`#E>(U8A0``Y?B-F;\VL%<K+)"$T
XXM`#GE?B-F;R/KX7,C<NLK7A8`U6!IS3(5T<-\)"%$`#E^([;"`B4A/@`YY7XC
XXM9F\KZ^%S(W+K(^LA.``Y?B-F;\VM%<H")2$@`.5@:<TR%='#U23##27]Y6!I
XXMS3(5T<,4(,G-,Q4``"$0`#E.(T8A$@`Y7B-6U=WA8&G-7T?-%40A$``YS>]#
XXMS2U$S=5%S7)'$4I1&5X6`-7=Y>$KY=WAT7,A#``YY6!IS5]'S4%$X>7-[T/-
XXMFT7AS0)$S6!$PB<EW>7AR<TS%0``(1``.4XC1B$2`#E>(U;5W>$A#``YS>]#
XXMS=I#`````,TG1\HI)B$,`#G-[T/-<D<1`0#-(A7E_>$A#``YY2$.`#G-[T/-
XXMVD,!````S5)%S=I#____?\W71.'-`D1@:1$!`.O-7!;-7T?-%40A$``YS>]#
XXMS2U$S=5%S7)'*?WET1D12E$97A8`U=WEX2OEW>'1<R$,`#GE8&D1`0#KS5P6
XXMS5]'S4%$X>7-[T/-FT7AS0)$W>7%(1``.<WO0\T51,T1)>LA"``Y^>O)*@8`
XXM^<T^)P$``,T%`,-()LT3%\U<)NO)S1,7*D!11$TJ0E'KS04`ZV\F`,G-$Q?-
XXM>B9O)@#)S1,7*D!1ZRH!`"LK*QD9&>LJ0E%$32I$4>OIQ2$$`#E.(T8C7B-6
XXM:V(V`",^"S8@(SW"I28^!#8`(SW"KB;K`PK^.@L^`,+A)@KF?_Y!VALG_EO2
XXMTB;60,/>)OYAVALG_GO2&R?68'<#`R,>"!P*`_XNROPFM\H5)QW*Y";-(B=W
XXM(\/E)AU[A6]\S@!G'@,*`[?*%2?-(B=W(QW"!B<A``"OP<DA__]\M\')_F'8
XXM_GO0UB#))%!)4$4N24X`)%!)4$4N3U54`,TS%0``(7\`Y2&!`.4A6U+ES?=!
XXMT='1(0``Y3J``&\F`!%_`,TB%1%;4AG1<R$``'TR@``A9RHB6U$A6U+EW>$A
XXM`0`BVU(JVU(1@`#KS:P5RE0JW6X`)@`1(`#-<A7"K2?=;@`F`!$)`,UR%<JW
XXM)]WEX2/EW>'#D2?=;@`F`'RUPL0GPU0JW6X`)@`1?`#-<A7*\"<A`0`BW5+=
XXMY>$CY=WA(M]2*@I7Y?WA(0$`1$W#N2C=;@`F`!$^`,UR%<H&*"$!`$1-PQDH
XXMW6X`)@`1/`#-<A7*0"DA``!$3=WEX2/EW>%>%@`A(`#-<A7".BC=;@`F`!$)
XXM`,UR%<H]*,,9*-WEX>7]X=WEX2/EW>%^M\I_*-UN`"8`$2``S7(5PFLHW6X`
XXM)@`1"0#-<A7*?"@A``#EW>7A(^7=X2O1<\-_*,-#*'BQPKDH_>7-23+1RKDH
XXM(0$`Y2K;4BD16U$9Y?WES?`NT='1$0$`S7(5RKDH*MM2*1%;41E>(U;5_>'%
XXMS9@WT7BQROPH(;8!Y?WES0PVT=%$36!I*2DI$?18&5XC5B%[.<UR%<KY*"$`
XXM!.5@:1$+`,TJ%A$B5AG1<R-RPPDI(0``Y?WES2PVT=%$36!I$?__S7(5RC(I
XXM(6@JY<V@+-']Y<V@+-$ABRKES:`LT2$*`.7-CBK1*MU2?+7*/2G#5"K#42K=
XXM;@`F`!$B`,UR%<JC*=WEX2/EW>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>%^M\J(
XXM*=UN`"8`$2(`S8$5RH@IW>7A(^7=X2O#9RG=;@`F`'RURJ`I(0``Y=WEX2/E
XXMW>$KT7/#42K=;@`F`!$R`,UR%<K/*=UN`28`$3X`S7(5RL\IW>7A(^7=X2LA
XXM`@!$3<,9*-WES4DRT<H`*B&``.LJVU+-AA8KY2K;4BD16U$9Y=WES?`NT='1
XXMZRK;4ADBVU+#%2K=Y>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>$CY=WA?K?*42K=
XXM;@`F`!$@`,UR%<(]*MUN`"8`$0D`S7(5RDXJ(0``Y=WEX2/EW>$KT7/#42K#
XXM%2K#A"<A6U'E*MM2Y<V^!='1Y<V.*M')`$-A;B=T(&]P96X@9FEL92!F;W(@
XXM<F5D:7)E8W1I;VXZ(#P`/@H`S3,5``#-"!TJ"%?ES=%!T2$,`#E^([;*L"HA
XXM>"OES=%!T2K=4GRURG0K*@A7Y2H*5^7->4'1T2K?4EX6`"$@`,UR%<+C*BK?
XXM4EX6`"$)`,UR%<KN*BK?4B,BWU(KP\4J*M]21$U@:7ZWRA\K8&E>%@`A(`#-
XXM@17*'RM@:5X6`"$)`,V!%<H?*V!I(T1-*\/S*F!I?K?*,BLA``#E8&DC1$TK
XXMT7,A``#EQ2H(5^4A@BOE*M]2Y<V_*^LA"@`Y^2&$*^7-H"S1*M]2Y<V@+-$A
XXMJ"OES:`LT2&M*^7-T4'1(;<KY<W10='-2";)03HD)"0N4U5"`#P`0V]U;&1N
XXM)W0@;W!E;B!F:6QE(&%T(&5N9"!O9B!P:7!E.B``+D-/30!!.B0D)"Y354(`
XXM)"0D+E-50@#-,Q4``"$,`#E>(U;5(8``Y<UL0M'1(9LLY2&``.7-UT+1T2%<
XXM`.4A@`#ES>PLT=$A7`#E(0\`Y<U9)M'1$?\`S2(5$?\`S7(5R@\L(0``R2&!
XXM`.7=X2$.`#GE_>'#*2S]Y>$C(^7]X2LK_>7A?B.VRH8LW>7A$<\`Z\WF%LJ&
XXM+/UN`/UF`41-PUXL8&DC1$TK7A8`U=WEX2/EW>$KT7-@:7ZWRG4LW>7A$<\`
XXMZ\WF%LIU+,-*+"$@`.7=Y>$CY=WA*]%SPQ\L(0``W74`W>7A$8#_&7TR@`#-
XXMPS+)+D-/30#-,Q4``"$,`#E>(U;K?K?*TRPA#``YY7XC9F\CZ^%S(W+K*UX6
XXM`-4A`@#ES5DFT='#I2S)S3,5```A_?\BEEDA___)S3,5```A``#)S3,5```A
XXM)`#EW>$A#@`Y7B-60DO##RTA``#E8&DC1$TKT7/=Y>$KY=WA$0``Z\V1%<HC
XXM+<,#+2$,`#E>(U;K?K?*=RTA#``Y7B-6ZR->%@`A.@#-<A7*=RTA#``Y7B-6
XXMZUX6`-7-KD/1$<#_&>4A$``Y7B-6Z]%S(0(`ZR$,`#GE?B-F;QGKX7,C<B$,
XXM`#E>(U;5(1``.5XC5M7-C2W1T<G-,Q7__R$-`#GE?B-F;R/KX7,C<D)+(0L`
XXMZR$$`#ES(00`.>5N)@`KZ^%S(0``S9$5RN,M(0\`.5XC5NM^M\K4+2$@`,/7
XXM+2$_`.5@:2-$32O1<\.L+2$-`#E>(U8A"``91$TA#0`Y7B-6(0H`&>7=X2$/
XXM`#E>(U;K?K?*[RXA#P`Y7B-6ZUX6`"$@`,V!%<KO+B$/`#E>(U;K7A8`(2H`
XXMS7(5RILN(0T`.5XC5F!IS>86RFXN(0T`.5XC5F!IS>86RFLN(3\`Y2$/`#GE
XXM?B-F;R/KX7,C<NLKT7/#0B[#F"XA#0`Y7B-6W>7AS=D6RI@N(3\`Y2$/`#GE
XXM?B-F;R/KX7,C<NLKT7/#;B[#VRXA#P`Y7B-6ZUX6`"$N`,UR%<J\+F!IZR$-
XXM`#ES(W+#VRXA#P`Y7B-6ZUX6`-4A#P`YY7XC9F\CZ^%S(W+K*]%S(0\`.>5^
XXM(V9O(^OA<R-RZRO#_BW)S3,5^O\A``#K(00`.7,C<B$2`#E>(U8A!@`Y<R-R
XXM(5P`Y2$4`#E>(U;5S>PLT=$A7`#E(1$`Y<U9)M'1$?\`S2(5ZR$(`#ES(W(A
XXM_P#-@17*HC`A#P#ES6,ST>LA$@`Y<R-R0DMZL\)J+R&3,>7-H"S1(0$`Y<V.
XXM*M$A"``Y7B-6ZRDI*2DI$8$`&>7=X2$&`#E>(U;K(UX6`"$Z`,UR%<JS+R$&
XXM`#E>(U;K7A8`U6!I(T1-*]%S(3H`Y6!I(T1-*]%S(0$`Y?WAP\0O_>7A(^7]
XXMX2O]Y>$1"P#KS9(5RC,PW6X`)@`1?P#-(A41(`#-@17*_"_=Y>$CY=WA*UX6
XXM`-5@:2-$32O1<\,$,-WEX2/EW>$K_>7A$0@`S7(5RC`PW6X`)@`1?P#-(A41
XXM(`#-<A7",S`A+@#E8&DC1$TKT7/#O"\A``#K8&ES(1(`.5XC5M4A!@`YY7XC
XXM9F\CZ^%S(W+K*RGK(18`.7XC9F\9T7,C<B%<`.4A$@#ES5DFT=$1_P#-(A7K
XXM(0@`.7,C<B$(`#E>(U8A_P#-@17*HC`A!``Y7B-6(18`.7XC9F_-K!7"0R\A
XXM``#K(0@`.7,C<L/!,"$(`#GE?B-F;R/KX7,C<NLK(0@`.5XC5B$$`#E^(V9O
XXMS>86RHHQ(0@`.5XC5M7]X</K,/WEX2/E_>$K_>7AZR$$`#E^(V9OS:P5RH<Q
XXM_>7A*>LA%``Y?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&5XC5M7-N#'1
XXMT<J$,2$(`#E>(U;K*>LA%``Y?B-F;QE>(U9"2_WEX2GK(10`.7XC9F\97B-6
XXMU2$*`#E>(U;K*>LA%@`Y?B-F;QG1<R-R8&GE_>7A*>LA%@`Y?B-F;QG1<R-R
XXMP^,PP[`P(00`.5XC5NO)3F]T(&5N;W5G:"!M96UO<GD@=&\@97AP86YD('=I
XXM;&1C87)D`,TS%0``(0``1$U@:1$/`.O-K!7*2#(A#@`Y7B-6ZUX6`-4A#@`Y
XXM7B-6ZUX6`.'-K17*\#$A`0#)(0X`.5XC5NM>%@#5(0X`.5XC5NM>%@#AS:P5
XXMRA(R(0``R2$,`#GE?B-F;R/KX7,C<NLK(0X`.>5^(V9O(^OA<R-RZRLA#``Y
XXM7B-6ZWZWPD4R(0``R</",<G-,Q4``"$,`#GE?B-F;R/KX7,C<NLK7A8`0DM@
XXM:1$J`,UR%<)Z,F!I$3\`S7(5RGXR(0$`R7BQRHXR8&D1(`#-@17"3C(A``#)
XXM$0`!U<4.<%`-'5#A3-!0#!T;?*^`!060X0S04`#AH1@`#-!0##``$A@``9
XXMZ\/2`!&2,B'/``8Q&G<3(P7"RS(!7``1``$J!@#YP\\`S3,5```A#``Y7B-6
XXMU<UC,]')S3,5_/\A$``Y7B-6(1(`.7XC9F_-*A;K(00`.7,C<B$$`#E>(U;5
XXMS6,ST>LA!@`Y<R-R>K/"+C,A``#)(0``Y2$&`#E>(U;5(0H`.5XC5M7-%T+1
XXMT=$A!@`Y7B-6Z\G-,Q4``"$,`#E>(U;5S8(TT<G-,Q4``"$,`#E>(U;K(R,C
XXM$0(`Z\WS%B/E_>$JY5+EW>%\M<*;,R'A4N7=X2+E4B+A4B$!`"+C4MUN`-UF
XXM`41-P[(S8&GEW>%@:5XC5D)+(0(`"5XC5OWEX<W8%LH<-"$"``E>(U;]Y>'-
XXM<A7*X#-@:5XC5MUS`-UR`<,/-/WE8&DC(]'E?B-F;^O-AA;KX7,C<B$"``E>
XXM(U;K*2E061E$3?WEX>LA`@`)<R-RW>7A(N528&D1!``9R6!IZRKE4LUR%<HY
XXM-/WES3TTT41-?+7".30A``#)PZ8SR<TS%0``(0P`.5XC5NLI*>7-GS711$T1
XXM___-<A7*8#0A``#)8&GEW>$A#``Y7B-6W7,"W7(#W>7A$00`&>7-@C31*N52
XXMR<TS%0``(0P`.5XC5B'\_QE$32KE4N7=X<.F--UN`-UF`>7=X6!IW>71Z\WG
XXM%LK#--UN`-UF`>5@:='KS>86PO4TW6X`W68!Y=WEX='KS=@6RO(T8&G=Y='K
XXMS><6PO4TW6X`W68!Y6!IT>O-YA;"]33#G33=;@#=9@'E(0(`"5XC5NLI*5!9
XXM&='-<A7*/37=;@#=9@$C(UXC5M5@:2,CT>5^(V9O&>OA<R-RW6X`W68!7B-6
XXM8&ES(W+#237=;@#=9@'K8&ES(W+=;@+=9@,I*=WET1E06<UR%<J$-2$"``E>
XXM(U;5W>7A(R/1Y7XC9F\9Z^%S(W)@:5XC5MUS`-UR`<.,-6!IW74`W70!W>7A
XXM(N52R2$$`,VB-2-\M<@KR2$"`#E>(U8JYU(9Z]K$-2KI4CE]DWR:VL0U*N=2
XXMZR+G4NM\M<FO/6=OR2$"`#E^(V8O;WPO9R,BZ5+)8V]N.@!#3TXZ`&QS=#H`
XXM3%-4.@!P<FXZ`%!23CH`<'5N.@!054XZ`')D<CH`4D12.@#-,Q4``"$.`#E>
XXM(U;5(0$#Y2$0`#E>(U;5S2PVT='1R<TS%?S_(?!8Y=WA(0``ZR$&`#ES(W+#
XXM7C;=Y>$1"``9Y=WA(08`.>5^(V9O(^OA<R-R(08`.5XC5B$+`,VL%<J`-MUN
XXM!-UF!1'4+,UR%<**-L-%-B'X_R*662'__\DA5%E$3<.:-F!I$08`&41-8&E^
XXM([;*NS8A$``Y7B-6U6!I7B-6U<TS0M'1RKLVPY(V(0(`"5XC5M7]X2$2`#E>
XXM(U8A`P#-(A4CZR$$`#ES(W(A!``Y7B-6(0$`S2(5R@(W_6X`)@#==0!\M<("
XXM-R'V_R*662'__\DA!``Y7B-6(0(`S2(5RBDW_6X!)@#==0%\M<(I-R'V_R*6
XXM62'__\DA!``)7B-6W7,&W7('_6X")@#==0+];@,F`-UU`R&>.=UU!-UT!<7=
XXMY2$8`#E>(U;5(1@`.5XC5M4A&``Y7B-6U?UN!/UF!<TR%>LA"@`Y^2$``,VL
XXM%<J/-R'4+-UU!-UT!2'__\DA!@`Y7B-6Z\G-,Q4``"$,`#E>(U8A``#-K!7"
XXMO3<A#``Y7B-6(0L`S:T5RL<W(?W_(I99(?__R2$,`#E>(U;K*2DI$?!8&41-
XXM(08`"5XC5M4A!``)7B-6Z\TR%='K(0P`.7,C<B$``.LA`P`)<R$"``ES(0$`
XXM"7-@:7,AU"SK(00`"7,C<B$,`#E>(U;KR<TS%0``(>M21$W#,SA@:1$F`!E$
XXM36!I$1M4Z\WF%LI.."$E``E>%@!ZL\I8.,,K."'Y_R*662'__\G%(0X`.5XC
XXM5M7-DB;1T<IS."'Z_R*662'__\DA#@`Y7B-6(0`"S2(5RHTXQ2$3`.7-62;1
XXMT<4A#P#ES5DFT=$1_P#-<A7*T#@A#@`Y7B-6(0`#S2(5RL,XQ2$6`.7-62;1
XXMT1'_`,UR%<K-."'__R*662'__\G#\#@A#@`Y7B-6(0`%S2(5$0`%S7(5RO`X
XXM(?O_(I99(?__R2$``.LA(0`)<R-R(2,`"7,A)``)<V!IY2$4`#E>(U8A!@`9
XXMT7,C<B$.`#E>(U8A`P#-(A4CZR$E``ES(0(`S2(5RDHY(7LYY2$4`#E>(U8A
XXM!``9T7,C<L-=.2%A.>4A%``Y7B-6(00`&=%S(W(A``#)S3,5```A``#E(0X`
XXM.5XC5B$E`!G1<R$``,G-,Q4``"$,`#E.(T;%(1``Y<U9)M'1(0``ZR$E``ES
XXM(0``R<TS%0``(0``R<TS%0``(0P`.5XC5B$``,VL%<+,.2$,`#E>(U8A"P#-
XXMK17*UCDA_?\BEEDA___)(0P`.5XC5NLI*2D1\%@91$TA$``Y7B-6U2$0`#E>
XXM(U;5(08`"5XC5M5@:5X6`.LI$1M4&5XC5NO-,A71T=')S3,5_/\A``!$32$0
XXM`#E>(U;5W>'=Y>$1)``9?K?*=3K=;B0F`.4A@`#1Z\V&%D1-ZR$4`#E^(V9O
XXMS><6RETZ(10`.5XC5D)+Q2$4`#E>(U;5W>7-+#O1T='*=3HA___)(10`.5XC
XXM5F!IS886$0<`Z\WS%NLA!@`Y<R-R>K/*VCHA!@`Y7B-6U2$4`#E>(U9@:1GE
XXMW>7-*$'1T='K(00`.7,C<GJSRMHZ(08`.5XC5B$$`#E^(V9OS886$0<`Z\UV
XXM%E!9&<DA!@`Y7B-6(0<`S7864%D91$U@:>LA%``Y?B-F;\WF%LHC.R$4`#E>
XXM(U9@:<V&%N4A%``Y7B-68&D9Y=WES2P[T='1RB,[8&G)(10`.5XC5NO)S3,5
XXM```A#``Y3B-&(8``Y2$:`.7-62;1T<4A(0#ES5DFT=$BEEE\M<I;.R'__\DA
XXM$``Y7B-6U2$D``E>%@`A@``9Y2$2`#E>(U;5S?=!T='1(20`"5X6`"$0`#E^
XXM(V9O&1%_`,TB%>LA)``)<WJSPJ\[8&D1(0`9Y7XC9F\CZ^%S(W(A``#)S3,5
XXM```Z)%1O)@!\M<([/"'_`'TR(U0A``!],B54?3(D5"$C5.4A"@#ES5DFT=$A
XXM"@#E(0(`Y<U9)M'1.B54;R8`$1H`S7(5R@D\(0``?3(D5"$``,DA#0#E.B14
XXM;R8`(WTR)%01(U09(]%S(0H`Y3HD5&\F`"-],B14$2-4&2/1<R$"`"(E53HD
XXM5&\F`$1-ZR$0`#E^(V9OS:T5REL\(1``.5XC5D)+Q2HE51$C5!GE(1(`.5XC
XXM5M7-]T'1T=%@:>LJ)549(B558&GK.B14;R8`Z\V&%GTR)%1@:<G-,Q4``"$.
XXM`#E.(T8A``#EW>'#K#S=Y>$CY=WAW>7AZR$0`#E^(V9OS:P5RM\\(0P`.5XC
XXM5M7-62;1Y6!I(T1-*]%S(1H`S7(5PM\\PZ4\W>7AR<TS%0``(0P`.5XC5B$`
XXM`,VL%<((/2$,`#E>(U8A"P#-K17*$CTA_?\BEEDA___)(0P`.5XC5NLI*2D1
XXM\%@91$TA$``Y7B-6U2$0`#E>(U;5(08`"5XC5M4A`0`)7A8`ZRD1)U497B-6
XXMZ\TR%='1T<G-,Q7\_R$``$1-(1``.5XC5M7=X=WEX1$D`!E^M\JS/=UN)"8`
XXMY2&``-'KS8861$WK(10`.7XC9F_-YQ;*FSTA%``Y7B-60DO%(10`.5XC5M7=
XXMY<UJ/M'1T<JS/2'__\DA%``Y7B-68&G-AA81!P#KS?,6ZR$&`#ES(W)ZL\H8
XXM/B$&`#E>(U;5(10`.5XC5F!I&>7=Y<TP0='1T>LA!``Y<R-R>K/* !@`Y
XXM7B-6(00`.7XC9F_-AA81!P#KS7864%D9R2$&`#E>(U8A!P#-=A9061E$36!I
XXMZR$4`#E^(V9OS>86RF$^(10`.5XC5F!IS886Y2$4`#E>(U9@:1GEW>7-:C[1
XXMT='*83Y@:<DA%``Y7B-6Z\G-,Q4``"$,`#E.(T8A@`#E(1H`Y<U9)M'1Q2$A
XXM`.7-62;1T2*661$!`,UR%<*E/BJ661$$`,UR%<K`/B$``"*662$:`.4A@`#E
XXM(8``Y<T70M'1T</,/BJ667RURLP^(?__R2$0`#E>(U;5(1``.5XC5M4A)``)
XXM7A8`(8``&>7-]T'1T='%(2(`Y<U9)M'1(I99?+7*!#\A___)(20`"5X6`"$0
XXM`#E^(V9O&1%_`,TB%>LA)``)<WJSPC8_8&D1(0`9Y7XC9F\CZ^%S(W(A``#)
XXMS3,5_O\A$``Y3B-&(0``Y=WAPU8_W>7A(^7=X=WEX>LA$@`Y?B-F;\VL%<JQ
XXM/V!I(T1-*UX6`"$$`#ES(W(A!``Y7B-6(0H`S7(5RID_(0T`Y2$0`#E>(U;5
XXMS5DFT=$A!``Y7B-6U2$0`#E>(U;5S5DFT='#3S_=Y>')S3,5```A#``Y7B-6
XXM(0``S:P5PO$_(0P`.5XC5B$+`,VM%<+Q/R$,`#E>(U;K*2DI$?-8&5X6`'JS
XXMPO\_(?W_(I99S>A#_____\DA#``Y7B-6ZRDI*1'V6!E>(U9"2R$2`#E>(U;K
XXMPZ!`Q2$0`.7-62;1T1'_`,UR%<H_0"']_R*66<WH0______)Q2$C`.7-62;1
XXMT2$``.LA)``)<R$.`#GE(2$`"5XC5NO-44?-VD,'````S21%S15$(20`"5X6
XXM`.O-7T?-+43-JT3-043AY<WO0\VK1.'-`D3#LT`A^O\BEEG-Z$/_____R<VQ
XXM%@,``@`>0`$`4D```(]`DD`A``#K(2,`"7,A#@`YS>]#S=I#`````,TG1\KN
XXM0"$``.LA(0`)<R-R(20`"7,A^O\BEEG-Z$/_____R2$.`#G-[T/-<D<1?P#-
XXM(A7K(20`"7,A#@`YS>]#S=I#!P```,U21<UR1^LA(0`)<R-R(0X`.<WO0\G-
XXM$Q<.(<,U0<T3%PXBQ2I"4>LA@``9(D)1#AK-!0#!Q2I`4>O-!0"WPFY!*D!1
XXM$2$`&33"8$$C-"I$42LB1%%]M,(V0<');R8`(I99P2I$4<G-,Q7$_R$$`#GE
XXM(4P`.5XC5M7-DB;1T2$$`#GE(1,`Y<U9)M'1(00`.>4A2@`Y7B-6U<V2)M'1
XXM(10`.>4A3``Y7B-6U<V2)M'1(00`.>4A%P#ES5DFT=')S3,5W/\A!``YY2$R
XXM`#E>(U;5S9(FT=$A!``YY2$3`.7-62;1T<G%(0D`.48K3BM6*UXK?BMN9WBQ
XXMRA5"&G<3(PO#"$+!R<4A!``Y7B-6(TXC1B-NZWBQRC%"<R,+PR9"P<DA`@`Y
XXMQ0'_?UXC5B-^(V9O>+'*5T(:OL)<0K?*5T(C$PO#0T+!(0``R<':9D(A`0!]
XXMM,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRHY"?A*WRHY"(Q,+PWU"X<')
XXM(0(`.7XC9F\1``"OOLJF0A,CPYU"ZWVTR2$"`#G%7B-6U2->(U8C3B-&Z]'#
XXM0T(A`@`YQ5XC5M75(UXC5B-.(T;KT<-]0L4!_W\A!``Y7B-6U2-^(V9OZWBQ
XXMRHY"?K?*^$(C"\/I0NO#?4(A`@`YQ5XC5M75(UXC5B-.(T;AK\/I0L4A!``Y
XXM7B-6(V[K?K?**T.[RC%#(\,>0R$``*_!R7RUP<G%(00`.5XC5B-NZP$``*^^
XXMRDU#(P/#1$-XL<HK0PLK?KO"34/#,4,A`@`Y?OX@RH)#_@G*@D/^"LJ"0\.7
XXM0R$"`#E^_D':ET/^6]*70R$!`'VWR2$"`#E^_F':ET/^>]J"0R$``*_)(0(`
XXM.7[^,-J70_XZTI=#PX)#(0(`.7[^8=J_0_Y[TK]#UB!O)@"WR2$"`#E^_D':
XXMU4/^6]+50\8@;R8`M\G1(00`&>7KZRJ:5L/S0]$A!``9Y>OK*IA6&G<C$QIW
XXM(Q,:=R,3&G?)ZRJ85GX2$R-^$A,C?A(3(WX2R>$B+U4JF%81`P`95BM>*]56
XXM*U[5*B]5Z>$B+U4JFE;1<R-R(]%S(W(J+U7I*II6ZRJ85B*:5NLBF%;)*IA6
XXMKQ8$/@">=R,5PE9$R2J85A8$?K?"(4<C%<)E1,,61Z\]P<FO/,')Q2J85NLJ
XXMFE8C(R,3$Q,:M_J41*[Z=D3#F$2N^G)$!@0:OMIR1,)V1"L;!<*:1*_!R<4J
XXMF%;K*II6KP8$&HX2(Q,%PK9$P<G%*IA6ZRJ:5J\&!!J>$B,3!<+,1,')Q2J8
XXM5NLJFE8&!!JF$B,3!<+A1,')Q2J85NLJFE8&!!JV$B,3!<+V1,')Q2J85NLJ
XXMFE8&!!JN$B,3!<(+1<')*IA6%@1^+W<C%<(;1<DJFE9^YC_(Q4<JF%9>(U8C
XXM?B-F;RGK*>O20$4C!<(X141-*IA6<R-R(W$C<,')*II6?N8_R%<JF%8C(R-^
XXMM_IW1>4>!+=^'W<K'<)I1>$5PF5%R>4>!#=^'W<K'<)[1>$5PG=%R=4&!'X2
XXM(Q,%PHQ%X4^W\,-31,4JF%81.U7-B45Y,CE5*II6$4-5S8E%.CE5J3(Y5<T(
XXM1A$[52J85@8$&G<3(P7"Q$7!.CE5M_I01,G%*IA6$3M5S8E%>3(Y52J:5A%#
XXM5<V)1<T(1A$_52J85@8$&G<3(P7"]T7!.CE5M_I01,D&!"$_5:]W(P7"#D8^
XXM(#(Z52$[508(MWZ/=R,%PA]&G^8!3P8$$3]5(4-5MQJ>$A,C!<(T1GG>`,)/
XXM1B$[530A.E4UPAE&R2$Z537*@48A.U4&"+=^CW<C!<)<1I]/!@01/U4A0U6W
XXM&HX2$R,%PF]&><X`PD]&PT-&!@01/U4A0U6W&HX2$R,%PHI&R<4JFE8&!!%#
XXM57X2(Q,%PIU&*IA6!@01/U5^$B,3!<*M1@8$(3M5KW<C!<*[1CX@,CI5(3M5
XXM!@BW?H]W(P7"S$;2]T8&!!$[52%#5;<:CA(3(P7"X$8&!!K.`!+2]T83!<+K
XXM1B$Z537"QD8JF%81.U4&!!IW$R,%P@9'P<G->D3*(4<A``"OR<UZ1,H61R$!
XXM`*\\R<UZ1/HA1\,61\UZ1/HA1\HA1\,61\UZ1/H61\,A1\UZ1/H61\H61\,A
XXM1^LJF%9S(W(C-@`C-@#)ZRJ85G,C<B-ZM_)91S;_(S;_R2J85EXC5NO)R<TS
XXM%0``(0P`.5XC5M7-QD?1(0P`.5XC5B$$`!GES>A#`````.'-`D0A``#E(1``
XXM.5XC5NO1<R-R(0``Y2$0`#E>(U;K(R/1<R-RR<TS%?C_(4=5Y2%I`.7-62;1
XXMT>LA!``Y<R-R(0@`.>4J1U41:0L9S5%'S=I#@%$!`,V41N'-`D0Z255O)@`1
XXM!`#KS5P6$0H`S2H6Y3I)56\F`!$/`,TB%=$9ZR$&`#ES(W(A"``YY2$(`#E>
XXM(U;KS5%'S=I#$`X``,V41LU!1.'ES>]#S:M$X<T"1#I*56\F`!$$`.O-7!81
XXM"@#-*A;E.DI5;R8`$0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-
XXMVD,\````S91&S4%$X>7-[T/-JT3AS0)$(00`.5XC5B$$`,U<%A$*`,TJ%N4A
XXM!@`Y7B-6(0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-043AY<WO
XXM0\VK1.'-`D0A%``Y?B.VPO]((0@`.<WO0\DA%``Y7B-6U2$*`#G-[T/AS0)$
XXMR<TS%0``(0P`.5XC5M7-*DG1Y<VM3M')S3,5Z/\A``#K(00`.7,C<B$``.LA
XXM!@`Y<R-R(1``.>4A!@`Y7B-6Z\U?1\W:0SP```#-E$;-%40A*@`Y7B-6Z\WO
XXM0\TM1,W!1.'-`D0A$``YY<U#3-'EW>'=;@[=9@]$32'75>LA&``Y<R-RP[!)
XXM(1@`.>5^(V9O$0@`&>OA<R-RZQ'X_QDA&``Y7B-6ZUXC5B$``,V1%<K@22$8
XXM`#E>(U;K7B-6(08`.7XC9F_-<A7"X$G#F4DA&``Y7B-6ZUXC5B$``,V1%<K6
XXM2]UN"MUF"Q%L!QGK(10`.7,C<B$8`#E>(U8A!``97B-6(18`.7,C<L,U2B$6
XXM`#GE?B-F;Q$&`!GKX7,C<NL1^O\9(18`.5XC5NM^([;*7THA%@`Y7B-6ZUXC
XXM5B$4`#E^(V9OS7(5PE]*PQY*(18`.5XC5NLC(UXC5M7]X2$6`#E>(U8A!``9
XXM7B-6(1H`.7,C<OWEW>7-VDO1T>7]X2$:`#E>(U;5W>7-VDO1T>LA&@`Y<R-R
XXM(1@`.5XC5B$&`!E>(U;KPWU+8&G]Y='KS:T5PN!*8&G]Y='-<A7*$DO=;@3=
XXM9@41`@#KS9$5RA)+8&GK(1H`.7XC9F_-K!7"%DM@:>LA&@`Y?B-F;\UR%<H2
XXM2]UN!-UF!1$!`.O-K!7"%DO=Y>')PXQ+8&G]Y='KS:T5PG9+8&G]Y='-<A7*
XXM0$O=;@3=9@41`@#KS9$5PG9+8&GK(1H`.7XC9F_-K!7"=DM@:>LA&@`Y?B-F
XXM;\UR%<IR2]UN!-UF!1$"`.O-K!7"=DO=Y>')PXQ+W>7AR<VQ%@(``0"Y2@``
XXM&4MY2R$0`#GE(1H`.5XC5NLC(UXC5B$0#LTJ%LU?1\U!1.'ES>]#S:M$X<T"
XXM1"$0`#GES4-,T>7=X=WEX1$0`!GE?B-F;R/KX7,C<NLKW>7AR<TS%0``(0P`
XXM.4XC1B$.`#E>(U;5W>'=Y>$1.@#KS9$5RA1,(0H`"5XC5M7-KU#1$9/^&=WE
XXMT1GEW>$A#``)7B-6U2$.``E>(U;5W>7AT>O-AA;1&1&\`AD1!P#KS<85Y=WE
XXMX='KS886R<TS%?C_(0@`.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-U47AS0)$(00`
XXM.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-FT7AS0)$(0@`.<WO0\W:0P````#-)T?*
XXMSDPA"``YY<WH0X!1`0#-043AY<WO0\VK1.'-`D0A!``YY<WH0P$```#-043A
XXMY<WO0\W!1.'-`D0A!U;E_>$A"``YS>]#S=I#/````,W51<UR1^7]Y>$C(^7]
XXMX2LKT7,C<B$(`#G-[T/-VD,\````S9M%S7)'Y=WAW>7A$3P`Z\W&%>7]Y>$C
XXM(^7]X2LKT7,C<B$\`-WET<U8%>7=X=WEX>7]Y>$C(^7]X2LKT7,C<B$$`#G-
XXM[T/-VD,$`'``S:M$S=I#!P```,W51<UR1R(35B$$`#G-[T/-VD,`````S3Q'
XXMRLI-(48`Y=WAPXM-W>7A(^7=X2O=Y<VO4-'-7T?-%40A"``YS>]#S2U$S3Q'
XXMRL=-(00`.>7=Y<VO4-'-7T?-043AY<WO0\W!1.'-`D3#@TW#$DXA1@#EW>'#
XXMVTW=Y>$KY=WA(R$$`#G-[T/-VD,`````S2='RA).(00`.>7=Y>$KY<VO4-'-
XXM7T?-043AY<WO0\VK1.'-`D3#TTW=Y>$B$58A!``YS>]#S7)'1$TB%5;=Y<VO
XXM4-$1;@'-<A7*/$XA'0`B9U4A``#EW>'#34[=Y>$CY=WA*]WEX2D195497B-6
XXMU6!IT>O-D17*>4[=Y>$I$655&5XC5F!IZ\V&%D1-PT5.(1P`(F=58&DCY?WE
XXMX2,CY?WA*RO1<R-RW>7AY?WEX2,CY?WA*RO1<R-R(0``(A=6(0=6R<TS%0``
XXM(4M51$TA6E#EW>'=Y>$CY=WA*UX6`-5@:2-$32O1<WJSRME.P[U.(0P`.5XC
XXM5B$,`!E>(U8A`P#-*A81=%`9Y=WA(4M51$W=Y>$CY=WA*UX6`-5@:2-$32O1
XXM<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC1$TKT7-@:2-$
XXM32LA#``Y7B-6(0@`&>7]X?UN`/UF`1$#`,TJ%A&*4!GEW>'=Y>$CY=WA*UX6
XXM`-5@:2-$32O1<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC
XXM1$TKT7/]Y>$K*^7]X5XC5M7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0
XXMT=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%
XXMS<Q0T=%$32$,`#E>(U8A"@`97B-6(60`S9$5RC-0(3(`ZR$!``ES(0P`.5XC
XXM5B$*`!E>(U8A,``9$<@`Z\V1%>LA`@`)<R$"`%!9&41-(0P`.5XC5B$*`!E>
XXM(U8A9``9Y<7-S%#1T41-(4M5R41A>2!-;VX@,#`@,#`Z,#`Z,#`@,3DP,`H`
XXM4W5N36]N5'5E5V5D5&AU1G)I4V%T`$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U
XXM9U-E<$]C=$YO=D1E8P#-,Q4``"$,`#E>(U8A!`#-QA7"R%`A;@')(6T!R<TS
XXM%0``(0P`.4XC1F!I(T1-*R$.`#E>(U8A"@#-D17*$E$A#@`Y7B-6(0H`S5@5
XXM$0H`Z\W&%1$P`!GE8&DC1$TKT7/#'E$A(`#E8&DC1$TKT7,A#@`Y7B-6(0H`
XXMS<85$3``&>5@:2-$32O1<V!IR0!R"@```````````````#`Q,C,T-38W.#EA
XXM8F-D968`````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````;EH`
XXM_```````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM``````````````````````````````````````````````#4+!4ZLSN0/```
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````U"Q3/3H_.C\`````
XXM````````````````````````````````````````````````````````````
XXM```````?`!P`'P`>`!\`'@`?`!\`'@`?`!X`'P"V!P4`30&W!SH`+P$``'<`
XXM+P&R!Y`!``"S!R\!``"T!R\!.@```"\!00"_!U8`+P'`!U8`+P'!!U8`+P$`
XXM`)`!``"_!U8`$`'`!U8`$`'!!U8`$`$``)`!```!``$`?54!``(``0"/50``
XXM`P`!`*=5`0`$``$`OU4!``4``0"_50$`__\`````````````````````````
XXM```````````````!````!`````````$!``$``````````0(``0``````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````,54U
XXM50`````#`6-A=```````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM`````````````````````````"LG-"<````````*4TA!4CH@0W)E871E+V5X
XXM=')A8W0@9FEL92!A<F-H:79E(&9O<B!E>'1R86-T:6]N(&)Y("]B:6XO<V@@
XXM*&YO<FUA;&QY*2X*"G5S86=E.B!S:&%R(%LM=2!A<F-H:79E72!;6RUA72!;
XXM+7`@<')E9FEX72!;+60@9&5L:6U=(%LM8F-V72!F:6QE<R`^(&%R8VAI=F5=
XXM"@H)=VAE<F4Z"2UA("!A;&P@=&AE(&]P=&EO;G,@*'8L8RQB+"UP6%@I"@`)
XXM"2UB("!E>'1R86-T(&%B<V]L=71E('!A=&AS(&EN=&\@8W5R<F5N="!D:7)E
XXM8W1O<GD*"0DM8R`@8VAE8VL@9FEL97-I>F5S(&]N(&5X=')A8W1I;VX*"0DM
XXM9"`@=7-E('1H:7,@14]&(&1E;&EM:71E<B!I;G-T96%D(&]F(%-(05)?14]&
XXM"@`)"2UP("!U<V4@=&AI<R!A<R!P<F5F:7@@=&\@96%C:"!L:6YE(&EN(&%R
XXM8VAI=F5D(&9I;&5S"@D)+74@('5N<VAA<B`\87)C:&EV93X*"0DM=B`@=F5R
XXM8F]S92!O;B!E>'1R86-T:6]N+"!I;F-L+B!E8VAO:6YG(&9I;&5S:7IE<PH`
XXM``(``)XY`P```)XY`@`!`.,L`@```@$`XRP"```"`0#C+`(``````-0L````
XXM````U"P```````#4+````````-0L````````U"P```````#4+````````-0L
XXM````````U"P```("`0">.0$``````-HU2%D"`-\U2%D"`.0UY%@%`.DUY%@%
XXM`.XUY%@%`/,UY%@%`/@UY%@$`/TUY%@$``(VZE@#``<VZE@#````FED`````
XXM```!`0`!'C@`````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM`````````````````````````````````````````````!H:&AH:&AH:&AH:
XX(&AH:&AH:&@`:
XX`
XXend
SHAR_EOF
if test 31597 -ne "`wc -c shar.uue`"
then
echo shar: error transmitting shar.uue '(should have been 31597 characters)'
fi
# End of shell archive
exit 0
--
Mike Kersenbrock
Tektronix Software Development Products
Aloha, Oregon
20-Jul-86 06:19:32-MDT,2246;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 06:19:25-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000661; 20 Jul 86 7:44 EDT
Received: from USENET by SMOKE.BRL.ARPA id a023275; 20 Jul 86 7:41 EDT
From: "Willie Smith, LTN Components Eng." <w_smith@wookie.dec.com>
Newsgroups: net.micro.cpm
Subject: UUDECODE sources in assembly?
Message-ID: <4283@decwrl.DEC.COM>
Date: 20 Jul 86 02:15:34 GMT
Sender: daemon@dec.ARPA
To: info-cpm@AMSAA.ARPA
Greetings. I really like the idea of passing around binaries
(with the sources of course, no trojans or logic bombs please!)
using UUENCODE and UUDECODE, and I can hardly wait to start
using them on things like crunch12, but there's this problem...
uudecode.com is uuencoded, and I don't have Pascal. With the
help of my friendly (and incredibly patient) system mangler, I
managed to find an ARChived CP/M uudecode.com, but I don't have
a CP/M ARC program. Well, a little more searching turned up a
program DEARC.LBR, but I don't have a library utility. All I
need now is a library utility that's uuencoded, and I can close
the loop! :+)
Actually, I did manage to find a SWEEP utility that runs on
a VAX, but the uudecode.com file it builds (by the time I get it
shipped home via Kermit) doesn't work at all, and a quick disassembly
of the code leads me to believe there's a bug somewhere, it don't
look like code to me!
A quick look at the Pascal code makes the process of uudecoding
look fairly easy, but if someone has already written an assembly
routine (or Basic, I'm not that proud) that I could use on my
copy of uudecode.uue, I could bootstrap this whole thing...
Many thanks as usual for any and all assistance!
UUCP: decwrl!wookie.dec.com!smith
Internet: smith@wookie.dec.com
Dec ENET: WOOKIE::SMITH
The above doesn't even represent opinions, much less mine, but if it
did, and you thought Digital Equipment Corporation subscribed to my
views, you would need psychiatric help and brain removal.
VAX and Kermit and probably 40 percent of the words commonly in
use in the technical community (including Basic and CP/M) are
trademarks of somebody or other...
20-Jul-86 07:11:27-MDT,690;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 07:11:20-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a000761; 20 Jul 86 8:54 EDT
Date: Sun 20 Jul 86 06:52:46-MDT
From: Jim Forrest <JFORREST@SIMTEL20.ARPA>
Subject: Need MEX for Apple 2e
To: INFO-MICRO@SIMTEL20.ARPA
cc: INFO-CPM@SIMTEL20.ARPA, JFORREST@SIMTEL20.ARPA
Message-ID: <12224177541.12.JFORREST@SIMTEL20.ARPA>
I need MEX for an Apple 2e with microsoft card and micromodem IIe.
Would appreciate someone sending to:
JFORREST@SIMTEL20
Please reply direct to me, not to the entire list. I can handle uuencoded
or squeezed or whatever.
Thanks
Jim
-------
20-Jul-86 16:34:48-MDT,1530;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 16:34:40-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001104; 20 Jul 86 18:19 EDT
Date: Sun, 20 Jul 1986 16:17 MDT
Message-ID: <KPETERSEN.12224280396.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To: Info-Cpm@AMSAA.ARPA, Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
Subject: Public domain BASIC compiler for CP/M-80
Now available from SIMTEL20:
Filename Type Bytes CRC
Directory PD:<CPM.BASIC>
B-COMPIL.LBR.1 BINARY 87424 D5E5H
This is BCBC version 1.1 for CP/M-80, written by Bruce Tonkin. It's
a BASIC compiler which generates assembler source code for ASM or MAC
(RMAC should work too). Intel 8080 opcodes are used so the resultant
program will run on either 8080 or Z80 CP/M systems. This BASIC uses
syntax similar to MBASIC, but some statements may need to be changed.
Be sure to read the sample program included in this LBR.
If you are unable to access SIMTEL20 because of network restrictions
it's also available on my RCP/M Royal Oak (MI) which may be accessed
at 300 bps (Bell 103a), 1200 bps (Bell 212a), or 2400 bps (V.22 bis).
The telephone number is (313) 759-6569. It can also be found on the
CP/M RoundTable on General Electric Information Services' GEnie.
--Keith Petersen
Arpa: W8SDZ@SIMTEL20.ARPA
GEnie Mail: W8SDZ
uucp: {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
21-Jul-86 07:50:23-MDT,2073;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 07:50:14-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a007437; 21 Jul 86 9:09 EDT
Date: 17 Jul 1986 1042-EET (Thursday)
Message-ID: <KPETERSEN.12224319155.BABYL@SIMTEL20.ARPA>
Sender: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
From: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
To: W8SDZ@SIMTEL20.ARPA
Subject: PD-Editor
ReSent-From: KPETERSEN@SIMTEL20.ARPA
ReSent-To: Info-Cpm@AMSAA.ARPA
ReSent-Date: Sun 20 Jul 1986 19:50-MDT
I am a European CP/M user. I'm looking for a new programming editor.
By now, I'm using WordStar, but if I can something 'better', I would
be really glad. I write to you because you regularly publish a list
of PD software which American users can download from SIMTEL. I'm
sure there are some PD screen editors on this system. If there is even
one which comes close to my needs (see below), could you mail me how I
can get hands on that piece of software? Any other hints concerning an
editor would be greatly appreciated.
Here follows my wish list:
- small and fast
- can use memory-mapped video board
- editing multiple files, display at least two of them
simultaniously (windowing)
- support arbitrary sized files
- free key-to-commands-binding (no problem if I have the
source)
- macros
- automatic indenting
- if possible without overlays, so I can run it off my
ramdisk without accessing the "slow and noisy" drives.
- not too much useless infos on the screen
I think that's enough. I tried to keep the list in an order: top
points are more important than those at the end. There is no need for
word processing capability. The language it's written in doesn't
matter, too. I hope there is such a beast. If not, I will perhaps
write my own. (and then donate it to the PD, if there is any
interest)
For any reply best thanks in advance,
...Urs Zurbuchen
PS: What editor do you use for your programming?
--
UUCP: ...seismo!mcvax!cernvax!ethz!zu
21-Jul-86 13:09:54-MDT,952;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 13:09:47-MDT
Received: from lll-mfe.arpa by AMSAA.ARPA id a021205; 21 Jul 86 14:26 EDT
Date: Mon, 21 Jul 86 14:23 EST
From: SECRIST%OAK.SAINET.MFENET@LLL-MFE.ARPA
Subject: EMACS clones
To: INFO-CPM@AMSAA.ARPA
From: <SECRIST%OAK.SAINET.MFENET@LLL-MFE.Arpa> (Richard C. Secrist)
Date: Mon, 21-JUL-1986 14:24 EST
To: INFO-CPM@AMSAA.ARPA
Message-ID: <[OAK.SAINET.MFENET].A15B96A0.008F240E.SECRIST>
Header-Disclaimer: I don't like my headers either.
Quote: "May your future be limited only by your dreams." -- Christa McAuliffe
Organization: Science Applications Int'l. Corp., Oak Ridge, Tenn., USA
CompuServe-ID: [71636,52]
X-VMS-Mail-To: CPM
Someone mentioned that a user's group at Los Alamos or someplace would
sell you Mark-of-the-Unicorn EMACS (now rescinded) for $50. Does anyone
know about this ?
r c s
21-Jul-86 14:41:23-MDT,2709;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 14:41:03-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a024853; 21 Jul 86 15:50 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/21/86 at
14:49:25 CDT
Date: MONDAY 07/21/86 21:43:25 DNT
To: INFO-CPM@AMSAA.ARPA
From: TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: REV TO UUENCODE/UUDECODE
Hi Cpm people.
I got the uuencode/uudecode files some days ago, this is really what we
need.
BUT because of all these networks, where some of the gateways change
some of the special characters (like the ARPANET - BITNET gateway), one
can't trust all the special characters made by uuencode. So this have
to be changed. And the problem is to choose 64 chracters, which does not
changed when ported from network to network. So I took these:
':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
eg. ':', all digits, all upper and lower case letters, '.', hoping that
they will be useable. So if we can use this instead of the UUENCODE/UU-
DECODE there is a chance of making the stuff you send useable to BITNET
users too. Or at least use it when sending binfiles to the Info-Cpm list.
So far I am working on the encoding part of the program. I have used the
code from UUENCODE/UUDECODE as inspiration, but started over because I
did not like the coding style of them. And I will probaly start on the
decoding part one of the next days. So within a week or two I should
have working and testing Pascal programs finished. But I do not know
when I can mail them to the list. That may take some time. But when done
the .COM file should be coded in some kind of HEX format, so all can
download them without problems. This is true bootstraping.
What I want is to hear what you mean about this. Comments and ideas are
very welcome. Hope that you like it and that I did not leave too much out
when explaining my ideas.
Kind regrads from Copenhagen -- Denmark.
Klaus Elmquist Nielsen
BITNET: TTTLEH5 at NEUVM1
NEUKLAUS at NEUVM1
-------------------------------------------------------------------------
To explain how UUENCODE works, just try to look at the binary file as
one long bitstring. If one then take 6 bit at a time, this gives you a
sequence of numbers in the range 0..63 . And since it is possible to find
64 independent characters, this give you a sequence of chars, or a text
file. Organising this in lines with control info like line length, header
and terminater gives you a useable fileformat.
UUDECODE do the work in the reverse order, eg make a binary file from the
ascii file from UUENCODE.
21-Jul-86 18:24:38-MDT,905;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 18:24:30-MDT
Received: from acc.arpa by AMSAA.ARPA id a027388; 21 Jul 86 20:01 EDT
Date: 21 Jul 86 16:43:00 PST
From: shawn@ACC.ARPA
MMDF-Warning: Parse error in preceding line at AMSAA.ARPA
Subject: commodore128 disk format
To: shawn <shawn@acc.ARPA>
cc: info-cpm@AMSAA.ARPA
Reply-To: shawn@ACC.ARPA
MMDF-Warning: Parse error in preceding line at AMSAA.ARPA
No, I didn't buy one, I have received a call from someone who would like
to use the Commodore-128 in its CP/M Mode, and wants to use some of our KAYPRO
public domain software. First, can anyone tell me which disk formats it will
read? and second, does it emulate any specific terminal (amd3a, vt52, or ?)
would appreciate a reply either to me, shawn@acc.arpa, or to info-cpm.
Thanks in advance
shawn@acc.arpa
------
21-Jul-86 21:39:02-MDT,1439;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 21:38:55-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a027735; 21 Jul 86 23:09 EDT
Date: Mon, 21 Jul 1986 21:08 MDT
Message-ID: <KPETERSEN.12224595451.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To: "Jeffrey D. Struven" <jds%rayssd.uucp@BRL.ARPA>
Cc: Info-Micro@BRL-VGR.ARPA, Info-Cpm@AMSAA.ARPA
Subject: Using CP/M on the Commodore 128
In-reply-to: Msg of 21 Jul 1986 14:25-MDT from Jeffrey D. Struven <jds%rayssd.uucp at BRL.ARPA>
>[the] CP/M disk [has some programs] on side 1 and the rest on side 2,
>every time he wants to change the date or use the functions that are
>not on the boot side of the disk he has to flip the disk....
The Commodore C128 CP/M disk was distributed that way for people with
single-sided drives. It is expected that the user will copy those
files onto a double-sided disk if his drive supports that. If he has
only one drive, there are several single-drive copy programs available
that will do the job. One is MFT48, available from many RCP/M
systems, local user groups, or the CP/M RoundTable on General Electric
Information Service's GEnie.
--Keith Petersen
Arpa: W8SDZ@SIMTEL20.ARPA
uucp: {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
GEnie Mail: W8SDZ
RCP/M Royal Oak: 313-759-6569
22-Jul-86 11:41:59-MDT,2795;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 11:41:37-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a009951; 22 Jul 86 12:56 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/22/86 at
11:54:47 CDT
Date: Tue, 22 Jul 86 17:17:05 DNT
To: info-cpm@AMSAA.ARPA
From: TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: rev to uuencode/uudecode
* I got some strange msg's from info-cpm @ amsaa . arpa ,
* so I resend this letter.
Hi Cpm people.
I got the uuencode/uudecode files some days ago, this is really what we
need.
BUT because of all these networks, where some of the gateways change
some of the special characters (like the ARPANET - BITNET gateway), one
can't trust all the special characters made by uuencode. So this have
to be changed. And the problem is to choose 64 chracters, which does not
changed when ported from network to network. So I took these:
':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
eg. ':', all digits, all upper and lower case letters, '.', hoping that
they will be useable. So if we can use this instead of the UUENCODE/UU-
DECODE there is a chance of making the stuff you send useable to BITNET
users too. Or at least use it when sending binfiles to the Info-Cpm list.
So far I am working on the encoding part of the program. I have used the
code from UUENCODE/UUDECODE as inspiration, but started over because I
did not like the coding style of them. And I will probaly start on the
decoding part one of the next days. So within a week or two I should
have working and testing Pascal programs finished. But I do not know
when I can mail them to the list. That may take some time. But when done
the .COM file should be coded in some kind of HEX format, so all can
download them without problems. This is true bootstraping.
What I want is to hear what you mean about this. Comments and ideas are
very welcome. Hope that you like it and that I did not leave too much out
when explaining my ideas.
Kind regrads from Copenhagen -- Denmark.
Klaus Elmquist Nielsen
BITNET: TTTLEH5 at NEUVM1
NEUKLAUS at NEUVM1
-------------------------------------------------------------------------
To explain how UUENCODE works, just try to look at the binary file as
one long bitstring. If one then take 6 bit at a time, this gives you a
sequence of numbers in the range 0..63 . And since it is possible to find
64 independent characters, this give you a sequence of chars, or a text
file. Organising this in lines with control info like line length, header
and terminater gives you a useable fileformat.
UUDECODE do the work in the reverse order, eg make a binary file from the
ascii file from UUENCODE.
22-Jul-86 13:13:28-MDT,1498;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 13:13:21-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a011953; 22 Jul 86 13:58 EDT
Received: from (FISHER)RPICICGE.BITNET by WISCVM.ARPA on 07/22/86 at
12:56:43 CDT
Date: 22 July 86 13:52-EST
From: FISHER%RPICICGE.BITNET@WISCVM.ARPA
To: INFO-CPM@AMSAA.ARPA
X-Acknowledge:
Subject: BITNET mail follows
Date: 22 July 1986, 13:34:26 EAS
From: FISHER at RPICICGE
To: INFO-CPM at AMSAA.ARPA
As a new-comer to this group with access only through BITNET I face the
frustration common to all non-FTP'ers: Public domain software--you
can't get there from here.
Maybe this is a tired question, but I'll ask anyway. Are there any
volunteers out there in BITNET-land willing to establish branch offices
for the SIMTEL20 main repository? It would be a major committment for
any one installation to support a complete online service, but some
distributed arrangement might be feasible.
I, for one, am willing to offer some form of online file server
for some suitably sized subset of the respository and perhaps an
offline server (e.g. tape-based with requests processed every few
days) for the full library. Anyone else?
(Of course, there is the implied assumption that given the
volunteers on the BITNET side of the world there will be some way
to get a copy of the full library and the ongoing additions. :-)
JSFisher FISHER@RPICICGE.BITNET
22-Jul-86 20:11:37-MDT,1834;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 20:11:23-MDT
Received: from mitre.arpa by AMSAA.ARPA id a020184; 22 Jul 86 21:34 EDT
Full-Name: Thomas Reid
Message-Id: <8607230133.AA23950@mitre.ARPA>
Organization: The MITRE Corp., Washington, D.C.
To: fisher%rpicicge.bitnet@wiscvm.ARPA
Cc: info-cpm@AMSAA.ARPA
Subject: Re: Bitnet access to simtel20 archives
Date: Tue, 22 Jul 86 21:33:20 -0500
From: treid@MITRE.ARPA
This will not solve your read need but may help a bit. Treat the new
PD S/W announcements at simtel20 as your shopping list at your local
RCPM. Ask your sysop to be looking for the new package or update. Many
times, the RCPM may already have it.
Put a message on your local RCPM asking for those who DO have arpanet
access if they would please pick a library up off of simtel20 and upload
it to the RCPM. All each community needs is one or two good deeders and
the software will appear.
The recent messages on uuencode and uudecode sources in Turbo Pascal also
give hope in that libraries can be transferred in the mail with only a
small penalty (33%). Now a message asking for a good soul to send it
through the mail can be answered (though this has great possibilities
for abuse - Keith Petersen: would you care to comment!?).
Wrose comes to worse - everything in the simtel20 archives is also
on Keith Petersen's RCPM in Royal Oak, Michigan (phone # not handy).
On Saturday or Sunday or the deep of night, a 100K download will be
only a couple of bucks.
But back to the front: being nice to your RCPM sysop will keep him
helping you. Remember: most sysops run their RCPMs as a hobby, many
times an expensive hobby. They do a great service to all and rarely
get the public appreciation that they deserve.
22-Jul-86 23:30:21-MDT,13775;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 23:29:50-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a020558; 23 Jul 86 0:44 EDT
Date: Tue, 22 Jul 1986 22:31 MDT
Message-ID: <KPETERSEN.12224872792.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To: Info-Cpm@AMSAA.ARPA, Info-Micro@BRL.ARPA
Subject: Interview with MNP protocol author
By permission of the publisher...
----
Originally published by Black Box Corporation in the Black Box
COMMUNICATOR. For a free subscription to the COMMUNICATOR, the BLACK
BOX(R) Catalog and/or the Personal BLACK BOX(R) Catalog, call (412)
746-5500 or write: Black Box Corporation, Subscription Department,
P.O. Box 12800, Pittsburgh, PA 15421.
ERROR CORRECTION IN MODEMS... AND THE MNP PROTOCOL
An Interview with Greg Pearson,
the Developer of MNP
******************************************************
"(Error correction in modems) is a transparent solution
to a problem that's been with us all the time -- noisy
telephone lines."
******************************************************
Sending information, minus the errors, is a top priority among data
communicators everywhere. As a result, more and more modems are being
equipped with the MNP link protocol in their firmware. Many people
feel that this is the most effecicent way to eliminate errors in
today's high-speed dial-up communications. And Greg Pearson, MICOM's
Chief Software Development Manager for Analog Products, is one of them.
The MNP Protocol is his brainchild -- the product of Greg Pearson's
attempt to develop a complete protocol, one with several layers that
perform independently of the others. Needless to say, he was
successful.
This issue of the Communicator features a new Black Box modem that
offers the benefits of the MNP error-control protocol. That modem --
the Dial Modem 24+, featured on page 15 of the COMMUNICATOR -- is just
one example of the important place MNP is taking in the future of data
communications.
BBC: In much of your published material on MNP, you've stressed that
MNP has the richest set of protocols -- that it includes both a full-
fledged link protocol as well as higher level protocols like session
and file transfer. To begin our discussion on error correction in
modems, can you tell us what you mean by a "full-fledged link protocol"
-- and then give an overview of the different types of error correcting
techniques?
PEARSON: For one thing, a full-fledged link protocol has to provide
layer independence. By that I mean that it doesn't depend on the layer
above it to operate effectively. Since error-control is offered at the
link protocol layer, it's important that it be independent. And that's
not the case with the X.PC protocol. X.PC is actually a layer 3
protocol that integrates certain aspects of layer 2 from the OSI
Reference Model. If you're a real architectural purest, you wouldn't
do this.
As for the different types of error correcting techniques used for
point-to-point error correction to date, in the hobbyiest world -- or
rather, the retail-oriented market -- three come to mind right away.
They are Xmodem, X.PC and MNP.
In a sense, these three techniques have been used to accomplish the
same work, but in different environments. For example, many personal
computer software packages use the Xmodem protocol for the error-free
transmission of files over a dial-up telephone connection. But if a
user wants to send an error-free file from a PC into TYMNET(R), X.PC
would be used since it's the protocol used by TYMNET. On the other
hand, if you wanted to do the same thing -- that is, send any data
error-free over a dial-up connection -- with the protocol built into
the modems themselves, you would use MNP.
BBC: Can one protocol be replaced by another?
PEARSON: Well, you could use X.PC or MNP in the same application as
the Xmodem protocol. Basically, Xmodem is a very simple technique --
one that's good for file transfer but not for interactive traffic.
And, as I just mentioned, X.PC is a software protocol approach used by
TYMNET. A couple of companies have put X.PC into the firmware of
their modems, but there are some significant disadvantages in doing
that -- and the most noticable to the user is the difference in
throughput. If you take a look at the market, the use of the MNP
error-control protocol in modems is by far the preferred choice. It's
currently used in the products of something like 16 or 18 modem
vendors.
**************************************************
"Imagine sending all of WAR AND PEACE with the
probability of getting only one 1-bit error."
**************************************************
BBC: Can you explain what you mean by throughput?
PEARSON: Yes. When you have a 2400 bps modem without error control,
the user can expect to send 2400 bits per second. When you implement
X.PC in the firmware of that modem, it uses 9% of those 2400 bits per
second for protocol purposes. So you could expect, in the best case,
a throughput that would be 91% of the line speed.
Now when using MNP in the firmware, you have a different situation.
This, for the most part, is due to a feature that I refer to as
"switch-to-sync."
BBC: You talk about this feature in one of your articles, saying that
it's an exclusive advantage of the MNP protocol. Can you explain what
happens as a result of switch-to-sync?
PEARSON: What happens is the transmission starts in the character-
oriented mode -- or asynchronous mode. But if the modems at both ends
of that transmission are equipped with MNP error-correction, the
transmission will switch to bit-synchronous between the modems. As a
result, the transmission is much more efficient.
BBC: How does that affect the through-put of an MNP-equipped modem?
PEARSON: Let me take you through the whole argument. When a user is
connected to a V.22 bis 2400 bps modem, that user is operating in an
asynchronous character mode. For every eight data bits transmitted,
there is a start bit and a stop bit. That means that the user is
sending 240 characters in 2400 bits -- or ten bits per character.
Now, when an MNP error-correcting modem is sending data, it doesn't
send the user's start and stop bits required in the asynchronous mode.
So for every ten bits sent by the user, MNP only sends eight -- i.e.
MNP is sending data 20% more efficiently than the user because it's
sending 20% fewer bits.
As for the bandwidth, MNP uses 11% for protocol mechanisms. So even
though it loses 11% efficiency there, it gains 20% from the switch-
to-sync operation -- and that puts you 9% ahead of the game.
What that all boils down to is that MNP, on an error-free line, will
impose no throughput degradation when built into the firmware of your
modem. And because of the unique switch-to-sync feature, MNP is
functionally like SDLC or HDLC, the two popular synchronous link
layer protocols.
BBC: What does this all mean to the user?
PEARSON: You can have your cake and eat it too. The ideal aspect of
the MNP link protocol is that you can have it either way -- character-
oriented or bit-synchronous. Other protocols give you no options.
BBC: What you're saying, then, is that MNP offers you a lot more
flexibility than other protocols.
PEARSON: That's right. And it has all the classical features of a
layer 2 protocol: it's full-duplexed -- that is, it can send and
receive data at the same time -- it has error detection based on a
very powerful 16-bit CRC, ithas retransmission for error correction,
and it can reliably send a keyboard break signal... all of which
actually makes it more powerful than HDLC.
BBC: You mentioned the 16-bit CRC, or Cyclic Redundancy Check. Can
you explain that? Also, tell us what actually happens in this type of
retransmission error correction. I believe you refer to it as the
'go-back-n' method of correction.
PEARSON: Any protocol, in order to provide an error-free transmission,
must have two things. One -- it has to provide a way for the receiver
to know if an error has occurred. That's error detection. The
technique employed in MNP for this error detection uses a polynomial
function to calculate a 16-bit number which is a function of all the
data sent in a particular message. The MNP error-correcting protocol
then sends those 16-bits at the end of its message.
The receiver -- as it is receiving the message -- calculates its own
version of this 16-bit number. Then it compares its number with the
16-bit number sent with the message. If the numbers are the same, the
message is free from errors. If the numbers are different, an error
has occurred somewhere in the message. That's how errors are detected.
Once an error is detected, the receiver brings the error correction
mechanism provided by the MNP link protocol into play. That correction
mechanism calls for the receiver to send a message back to the sender.
The sender -- recognizing that the last correct message sent before the
error was data message number 'n' -- is cued to go back to the message
following message 'n'. In other words, if the sender has sent five
messages, and the receiver detects an error in message 4, the sender
will 'go back' to message 4 and begin retransmitting information again.
For all practical purposes, the result of the MNP link is error-free
transmission. Using the 16-bit redundancy check, it will detect every
error which is 16 bits or smaller, with 100% probability. As a result,
the chances of an error occurring are actually so small that you can,
in practice, ignore them. Imagine sending all of WAR AND PEACE with
the probability of getting only one 1-bit error. That's what you could
expect from an error-control protocol that uses the 16-bit CRC.
********************************************************
"(MNP) is a very healthy protocol over long-delay
channels, and that's important to dial-up users. You'd
be surprised how many of your local calls today are
being routed over satellite..."
********************************************************
BBC: MNP also has the ability to send a number of messages before any
acknowledgement is required. Can you explain this?
PEARSON: Any link protocol that's going to work well over telephone
lines must have this ability. If you're making a transcontinental call
and it's transmitted by satellite, you don't want to wait for an
acknowledgement from the receiver after each message. That's how
Xmodem works.
What you want to be able to do is send a number of messages at one
time. MNP lets you have up to eight outstanding messages before an
acknowledgement is required. And MNP is designed in such a way that
only under the worst conditions would a sender ever have to wait
between transmissions. It's a very healthy protocol over long-delay
channels, and that's important to dial-up users. You'd be surprised how
many of your local calls today are being routed over satellite or
microwave.
BBC: You've talked about MNP becoming the de facto standard -- the
unofficial standard for dial-up connections. On what factors would
this really depend? How much does the demand for error-controlling,
high-speed modems influence this?
PEARSON: A year ago, there was some question as to whether the V.22
bis 2400 bps modem was really going to take off. I don't think that's
much of an issue anymore. The price of these modems has come way down
-- to the point that a 2400 bps modem can cost less than a Hayes(R)
1200. The higher speed modems are here to stay.
What affect does this have on the demand for error control in modems?
First of all, we're pushing more bits through the same width pipe --
and we're getting more errors as a result. Secondly -- because we're
sending more bits at a time -- whenever we do get an error, it really
clobbers more bits. Finally, there's the way we're sending bits
through the channels. When we get an error, it takes longer for the
modem to recover -- so when you lose one character, you're actually
losing a whole slew of characters.
In short, our communications are much more error sensitive today. And
we have a dramatically increased need to control errors because of
that. A good way of doing that is by putting the protocol right in the
firmware of a modem -- a way that doesn't really interfere with your
through-put.
It's a transparent solution to a problem that's been with us all the
time -- noisy telephone lines.
# # #
-by Betsy Momich
Publications Department
Black Box Corporation
23-Jul-86 04:38:32-MDT,1184;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 04:38:21-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a021273; 23 Jul 86 6:08 EDT
Received: from USENET by SMOKE.BRL.ARPA id a015555; 23 Jul 86 5:51 EDT
From: Harald Striepe <striepe%muscat.dec@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: commodore128 disk format
Message-ID: <10064@muscat.DEC>
Date: 22 Jul 86 21:28:39 GMT
To: info-cpm@AMSAA.ARPA
I do not know whether the new drives for the 128 support standard
formats, the older drives (1541) essentially contained the DOS in
ROM inside the drive, you were stuck with a fixed file structure.
It also used group coding, which does not follow standard FM and
MFM formats (group coding is also used by Apple, and was used by
the VICTOR 9000 to achieve high storage densities). The 1541 also
uses varying rotational rates for different tracks. In other words,
standard drives cannot create disks for the commodore standard.
--
Harald Striepe
DEC Corporate Software Products Group, Santa Clara, CA
decwrl!muscat!striepe, decwrl!dec-rhea!dec-winery!striepe, WINERY::STRIEPE
23-Jul-86 18:16:06-MDT,1234;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 18:15:54-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a012244; 23 Jul 86 19:51 EDT
Received: from USENET by SMOKE.BRL.ARPA id a005198; 23 Jul 86 19:42 EDT
From: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>
Newsgroups: net.micro.cpm
Subject: Plea for help
Message-ID: <924@ucbcad.BERKELEY.EDU>
Date: 23 Jul 86 08:43:17 GMT
Sender: news@ucbcad.ARPA
To: info-cpm@AMSAA.ARPA
I have an old SuperBrain system, and I recently purchased an IBM
clone. All of my files are in Lexisoft's Spellbinder, and for the
life of me, I can't get XenoCopy or Uniform to read the disk and
get the files off.
Does anyone out there have ANY ideas? Also, where can I pick up
a terminal program for my SuperBrain (and thus transfer via the
serial port)? And finally, does anyone out there have the
pinouts for the SuperBrain?
Many many thanks to anyone who can help!
(and a bottle of your favorite beer to the one who's fix works!)
Peter
-----
Peter Korn "Fred Astaire? Ginger Rogers did
korn@ucbvax.Berkeley.EDU everything he did, backwards
{dual,decvax,sdcsvax}!ucbvax!korn and in high heels!"
23-Jul-86 19:58:02-MDT,2581;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 19:57:50-MDT
Received: from xerox.arpa by AMSAA.ARPA id a012638; 23 Jul 86 21:29 EDT
Received: from PinotNoir.ms by ArpaGateway.ms ; 23 JUL 86 18:27:44 PDT
Date: 23 Jul 86 18:27 PDT
From: ghenis.pasa@xerox.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)
In-reply-to: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>'s message of
23 Jul 86 08:43:17 GMT
To: info-cpm@AMSAA.ARPA
Message-ID: <860723-182744-2114@Xerox>
Peter,
One thing worth trying is to find out IF a diskette WRITTEN ON THE
IBM-PC in Superbrain format (using Uniform for example) can be read by
your Superbrain. If so then you can use you PC to pick up a copy of
Modem7 (to transfer using the XMODEM protocol) from any BBS and pass it
on to your Superbrain to enable the file transfer through the serial
port (get XModem for your IBM too if you don't have it already).
If you're unlucky and the incompatibility goes both ways you will have
to contact some user group to see if they can provide Modem7 for the
Superbrain in the right format. A third possibility, which is likely
since Uniform failed to do the trick, is that your disk drives on one of
the machines is out of alignment. If that is the case you may not be
able to read floppies produced on any other computer unless you realign
them first.
A simpler (although unsafe) way to get the files across if proper
methods fail is to use PIP
With PIP you can send the content of a file to the serial port (consult
your CP/M documentation for specifics). On the IBM side, just do a
COPY COM1: <filename>
to pick up the bytes. This is unsafe because no error checking is taking
place, but with a bit of luck the file will make it across in one piece.
In any case it won't hurt anything and you can try it right away. Make
sure your serial port settings are the same on both ends. To set your
serial port, use MODE on the IBM (see DOS manual); in CP/M I think that
STAT is the program to use (see CP/M manual).
If you try this method, please send out a message to report your results
(I've never tried it but it sounds like it should work). If you need to
get Modem7 from a user group send me another message, I might be able to
help.
BTW, some mailer along the line rejected my first message addressed
directly to you <korn@pavepaws.ucb-vax.ARPA> as undeliverable (?), so
I'm sending my reply to the whole DL.
Good luck!
-- Pablo Ghenis, Secretary, Osborne Komputer Owners' Klub
24-Jul-86 04:16:46-MDT,1031;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 04:16:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a015039; 24 Jul 86 5:56 EDT
Received: from USENET by SMOKE.BRL.ARPA id a008693; 24 Jul 86 5:41 EDT
From: Stan Hanks <stan%drillsys.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Recent posting to na.forsale
Message-ID: <377@drillsys.UUCP>
Date: 23 Jul 86 06:57:30 GMT
Keywords: no adds here
To: info-cpm@AMSAA.ARPA
I just finished posting a note to na.forsale announcing that I am
parting with much of my CP/M equipment and software, various
S-100 boards, and whole stacks of magazines. If you are interested
in acquiring same, I suggest you watch na.forsale for my note; if you
don't get na.forsale and are interested, drop me a line and I'll send
you a personal copy.
Stan Hanks ...!drillsys!stan
Sr. Research Scientist stan@rice.ARPA
Teleco Oilfield Services, Drilling Systems Technology
Houston TX (713) 699-5594
24-Jul-86 06:37:19-MDT,1270;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:36:42-MDT
Received: from crdc-vax3.arpa by AMSAA.ARPA id a000946; 24 Jul 86 8:06 EDT
Date: Thu, 24 Jul 86 7:59:53 EDT
From: "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
To: Info-cpm@AMSAA.ARPA
Subject: Peter Korn -- Superbrain
Peter,
I have an Intertech Compustar system, with a DSS-10, and
several terminals. I use a version of MODEM730 on my micro that
I installed myself, and wrote my own machine-specific overlay,
(there must be hundreds out on Simtel20). I even sent Keith
Petersen a copy of it. I've also got Xmodem on the vax system
we have (two versions...one that adds cr/lf for the PC community
and one that doesn't add/subtract cr/lf, for the regular micro
community.....if there is such a thing as a 'regular micro'.)
I'm pretty sure that a model-30 Compustar is
a pretty close approximation of a Superbrain. In fact, in
installing Wordstar, and DbaseII, and other packages, I
normally choose the superbrain selection and it all works
great.
Let me know what you need. I've probably got it.
I've even got a version of BYE for you.
Yours Truly,
Jack H. Smith
24-Jul-86 06:43:13-MDT,946;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:43:02-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a001295; 24 Jul 86 8:18 EDT
Received: from (PFENNIGE)CGEUGE51.BITNET by WISCVM.ARPA on 07/24/86 at
06:36:20 CDT
Date: 24 JUL 86 13:21-N
From: PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA
To: INFO-CPM@AMSAA.ARPA
Subj: Commodore C128 disk formats
In reference to the questions regarding the ability of the Commodore 128
to read different disk formats. Well according to the manual it is capable
of reading the following formats:-
1) Epson Qx10
2) IBM-8 SS (cpm/86)
3) IBM-8 DS (cp/m86)
4) Kaypro II
5) Kaypro IV
6) Osborne DD.
The manual also says that it is capable of writing these formats also. As
for the terminal type I once saw a reference that if your choose either
ADM-3A or ADM-31 then you can't go wrong.
Brian Jarvis Observatoire de Geneve, Switzerland.
24-Jul-86 12:19:16-MDT,654;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 12:19:05-MDT
Received: from xerox.arpa by AMSAA.ARPA id a002550; 24 Jul 86 13:27 EDT
Received: from PinotNoir.ms by ArpaGateway.ms ; 24 JUL 86 10:22:08 PDT
Date: 24 Jul 86 10:20 PDT
From: ghenis.pasa@xerox.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)
To: info-cpm@AMSAA.ARPA
Message-ID: <860724-102208-2663@Xerox>
Peter,
I forgot to mention that (if the Superbrain has a standard RS232 port)
you will need a null modem adaptor in line with your serial cable to do
port-to-port transfers. Radio Shack sells these adaptors.
24-Jul-86 14:22:57-MDT,956;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 14:22:44-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a008128; 24 Jul 86 15:45 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
id AA19759; Thu, 24 Jul 86 12:43:50 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
id AA25950; Thu, 24 Jul 86 12:16:07 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
id AA01179; Thu, 24 Jul 86 12:16:08 pdt
Date: Thu, 24 Jul 86 12:16:08 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607241916.AA01179@clover.ucdavis.edu>
To: ucdavis!info-cpm@AMSAA.ARPA, ucdavis!xerox.ARPA!ghenis.pasa@ucb-vax.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)
Regarding Radio Shack null modem adaptors - you're much better off getting
a length of ribbon cable and two db25 connectors from the other side of the
store and building it yourself (for about $20 - $30 less).
Eric
28-Jul-86 02:44:36-MDT,1453;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 02:44:28-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000221; 28 Jul 86 4:03 EDT
Received: from USENET by SMOKE.BRL.ARPA id a006326; 28 Jul 86 3:40 EDT
From: Jeff Sonstein <jeffs%quad1.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: Plea for help
Message-ID: <548@quad1.UUCP>
Date: 25 Jul 86 17:02:15 GMT
To: info-cpm@AMSAA.ARPA
>
> Does anyone out there have ANY ideas? Also, where can I pick up
> a terminal program for my SuperBrain (and thus transfer via the
> serial port)? And finally, does anyone out there have the
> pinouts for the SuperBrain?
>
Main Port
Pin # Assignment Direction
===== ========== =========
1 GND -
2 Transmitted Data Fm SB
3 Rec'd Data To SB
4 RTS Fm SB
5 CTS To SB
6 DSR To SB
7 GND -
15 Transmit Clock To SB
17 Rcv Clock To SB
20 DTR Fm SB
22 Ring Indicator To SB
24 Clock Fm SB
AUX PORT
========
1 GND -
2 Rcv'd Data (NOTE) To SB
3 Transmitted Data Fm SB
7 GND -
20 DTR To SB
Jeff Sonstein Quadratron Systems Inc.
UUCP: {sdcrdcf|ttdica|scgvaxd|mc0|bellcore|logico|ihnp4}!psivax!quad1!jeffs
--------------------
"There is a hopeful symbolism in the fact that
flags do not wave in a vacuum..."
-- Arthur C. Clarke --
--
28-Jul-86 10:58:28-MDT,4177;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 10:57:41-MDT
Received: from ll.arpa by AMSAA.ARPA id a010973; 28 Jul 86 12:06 EDT
Date: Mon 28 Jul 1986 12:06:38 EDT
From: SAGE@LL.ARPA
MMDF-Warning: Parse error in preceding line at AMSAA.ARPA
Subject: CP/M Text Editors
To: INFO-CPM@AMSAA.ARPA
Message-ID: <SAGE.20943595@LL.ARPA>
Urs Zurbuchen asked for information about a public-domain text editor for
P/M with a rather impressive list of requirements. The only public-domain
ditors I know of are rather simple beasts, and the only programs that come
lose to Zurbuchen's list of requirements are two commercial programs, PMATE
nd VEDIT. I am familiar with PMATE, the original editor of this type.
EDIT is quite similar. Here is how it matches up to those requirements:
small and fast: PMATE is a little over 20K long (exact size depends on
user configuration choices, principally the size of the permanent macro
area. PMATE is particularly fast, since it gives proper priority to
keyboard input over its own screen output.
support for memory-mapped video: PMATE does this very nicely (that is how
I use it).
multiple file editing: PMATE has a total of 11 editing buffers, all of
which can contain text from files or macro commands. Commands allow text
to be transfered in various ways between the buffers.
arbitrary file size: The main text buffer in PMATE supports disk buffering
of files and thus can handle files of arbitrary length (limited by disk
space). Source, destination, and temporary files can each be on a
separate drive so that the longest file that can be edited is limited to
the full capacity of a drive.
key-to-command binding: Here PMATE really shines. First, PMATE not only
binds individual keys but recognizes sequences of keys and assigns them to
commands. Secondly, the commands to which key sequences are bound include
not only the built-in functions that PMATE comes with but also user-
written functions, written using the interpreted macro command language
(TECO-like). These user-written macros are stored in what is called the
permanent macro area (PMA). After the PMA has been updated, PMATE's clone
function is used to save a new version of the editor.
macros: PMATE has an unbelievably complete macro capability. There are
user variables and system variables that tell one almost everything about
the environment (current line and column, current buffer number, the value
of the character under the cursor, the next tab stop, the amount of memory
left, the absolute memory address of the cursor, and many, many more).
Fully structured iteration is supported (if-then-else, do-until, do-while,
repeat). I cannot begin to describe all the features here. Suffice it to
say that the hooks are present to do just about anything one can imagine.
Without access to any source code, I made a version of PMATE that is
ZCPR3-compatible (supports file access using the DU: -- drive/user --
format).
auto-indent: PMATE supports automatic indentation for writing in languages
such as C and Pascal. The macro languages give full support and control
to auto-indentation.
overlays: PMATE is complete in one COM file.
clean screen: PMATE shows only the information you really need to know --
the names of open files, the current editing buffer, the value of a
numerical argument returned by a macro, and the cursor position (line and
column).
f anyone wants more information about PMATE, I would welcome their
nquiries, since I am probably the most active supporter around of the 8-bit
ersion of PMATE (there are 16-bit versions, too). A special section (with
estricted access) of my remote access system, the Newton Z-Node
617-965-7259, pw=DDT), is devoted to PMATE support. It includes a bulletin
oard with suggestions and tips on exploiting PMATE's capabilities and an
xtensive collection of macros.
Jay Sage (SAGE @ LL)
28-Jul-86 12:15:53-MDT,1217;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 12:15:24-MDT
Received: from nprdc.arpa by AMSAA.ARPA id a013026; 28 Jul 86 13:15 EDT
Received: from hull.nprdc.arpa (hull.ARPA) by nprdc.arpa (4.12/ 1.1)
id AA06788; Mon, 28 Jul 86 10:15:55 pdt
Return-Path: <lim@hull>
Received: by hull.nprdc.arpa (2.2/SMI-2.0)
id AA09151; Mon, 28 Jul 86 10:12:15 pdt
From: Bill Lim <@nprdc.arpa:lim@hull>
Message-Id: <8607281712.AA09151@hull.nprdc.arpa>
Date: 28 July 1986 1010-PDT (Monday)
To: INFO-CPM@AMSAA.ARPA
Subject: RE: P/D CP/M Text Editors
Urs Zurbuchen,
Several months ago, Bruce E. Wampler of the University of New
Mexico submitted a public domain full-screen editor to
mod.sources called 'tvx.' TVX is written in C, and is
availiable for UNIX, MS-DOS, and CP/M. I have not used it on a
CP/M machine, but have got it running on an IBM/XT with little
trouble. It is a very complete package, with source and user
manuals. The documentation claims vi and emacs emulation is also
possible.
Bill
ARPA: lim@nprdc.arpa
UUCP: ihnp4 \
akgua \
decvax >---- !sdcsvax!sdics!nprdc!lim
dcdwest /
ucbvax /
28-Jul-86 13:09:29-MDT,1182;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 13:09:13-MDT
Received: from decwrl.arpa by AMSAA.ARPA id a014394; 28 Jul 86 14:01 EDT
Received: from DEC-RHEA.ARPA (dec-rhea) by decwrl.DEC.COM (4.22.05/4.7.34)
id AA28390; Mon, 28 Jul 86 10:59:23 pdt
Message-Id: <8607281759.AA28390@decwrl.DEC.COM>
Date: 28-Jul-1986 1333
From: "Sink me! 'Twas lovely, havin' this little chat!" <binder%asd.DEC@dec.ARPA>
To: info-cpm@AMSAA.ARPA, net.micro.cpm%asd.DEC@dec.ARPA
Subject: For sale, please respond directly to me
For sale, some stuff I bought in a lot and can't use on my Apple:
For a Xerox 820 with 8" disks:
1. WordStar 3.0, with docs and training guide.
2. CalcStar 1.0, with docs.
3. CP/M 2.2, with docs.
4. 820 Diagnostic Exerciser disk, no docs.
5. 820 printer interface disk 1.0 (appears to be for daisywheel).
6. 820 hands-on training session manual.
All for $75.00 or, failing that, best offer tha passes my reason-
ableness test.
Cheers,
Dick Binder (The Stainless Steel Rat)
UUCP: { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
ARPA: binder%asd.DEC@decwrl.ARPA
28-Jul-86 21:29:49-MDT,1099;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 21:29:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000312; 28 Jul 86 21:56 EDT
Received: from USENET by SMOKE.BRL.ARPA id a012549; 28 Jul 86 21:44 EDT
From: binder@asd.dec.com
Newsgroups: net.micro.cpm
Subject: For sale, please respond directly to me
Message-ID: <4449@decwrl.DEC.COM>
Date: 28 Jul 86 17:59:41 GMT
Sender: daemon@dec.ARPA
To: info-cpm@AMSAA.ARPA
For sale, some stuff I bought in a lot and can't use on my Apple:
For a Xerox 820 with 8" disks:
1. WordStar 3.0, with docs and training guide.
2. CalcStar 1.0, with docs.
3. CP/M 2.2, with docs.
4. 820 Diagnostic Exerciser disk, no docs.
5. 820 printer interface disk 1.0 (appears to be for daisywheel).
6. 820 hands-on training session manual.
All for $75.00 or, failing that, best offer tha passes my reason-
ableness test.
Cheers,
Dick Binder (The Stainless Steel Rat)
UUCP: { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
ARPA: binder%asd.DEC@decwrl.ARPA
29-Jul-86 06:39:20-MDT,762;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 06:39:13-MDT
Received: from crdc-vax3.arpa by AMSAA.ARPA id a002893; 29 Jul 86 8:02 EDT
Date: Tue, 29 Jul 86 7:53:33 EDT
From: "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
To: binder%asd.DEC@DECWRL.ARPA
cc: Info-cpm@AMSAA.ARPA
Subject: For sale
Dear Mr. 'Stainless Steel Rat',
While your prices seem much more than reasonable,
the mailing list is not your private want-ads section in
your daily newspaper. This subject has been discussed,
and re-discussed, and the concensus is that any for-sale
items (messages) are not to be placed on the list.
Sorry to rain on your parade,
Jack H. Smith
29-Jul-86 09:40:01-MDT,4235;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 09:39:46-MDT
Received: from ll.arpa by AMSAA.ARPA id a006882; 29 Jul 86 9:49 EDT
Date: Tue 29 Jul 1986 09:48:59 EDT
From: SAGE@LL.ARPA
MMDF-Warning: Parse error in preceding line at AMSAA.ARPA
Subject: Text Editors
To: INFO-CPM@AMSAA.ARPA
Message-ID: <SAGE.21035277@LL.ARPA>
Urs Zurbuchen asked for information about a public-domain text editor for
CP/M with a rather impressive list of requirements. The only public-domain
editors I know of are rather simple beasts, and the only programs that come
close to Zurbuchen's list of requirements are two commercial programs, PMATE
and VEDIT. I am familiar with PMATE, the original editor of this type.
VEDIT is quite similar. Here is how it matches up to those requirements:
1. small and fast: PMATE is a little over 20K long (exact size depends on
user configuration choices, principally the size of the permanent macro
area. PMATE is particularly fast, since it gives proper priority to
keyboard input over its own screen output.
2. support for memory-mapped video: PMATE does this very nicely (that is how
I use it).
3. multiple file editing: PMATE has a total of 11 editing buffers, all of
which can contain text from files or macro commands. Commands allow text
to be transfered in various ways between the buffers.
4. arbitrary file size: The main text buffer in PMATE supports disk buffering
of files and thus can handle files of arbitrary length (limited by disk
space). Source, destination, and temporary files can each be on a
separate drive so that the longest file that can be edited is limited to
the full capacity of a drive.
5. key-to-command binding: Here PMATE really shines. First, PMATE not only
binds individual keys but recognizes sequences of keys and assigns them to
commands. Secondly, the commands to which key sequences are bound include
not only the built-in functions that PMATE comes with but also user-
written functions, written using the interpreted macro command language
(TECO-like). These user-written macros are stored in what is called the
permanent macro area (PMA). After the PMA has been updated, PMATE's clone
function is used to save a new version of the editor.
6. macros: PMATE has an unbelievably complete macro capability. There are
user variables and system variables that tell one almost everything about
the environment (current line and column, current buffer number, the value
of the character under the cursor, the next tab stop, the amount of memory
left, the absolute memory address of the cursor, and many, many more).
Fully structured iteration is supported (if-then-else, do-until, do-while,
repeat). I cannot begin to describe all the features here. Suffice it to
say that the hooks are present to do just about anything one can imagine.
Without access to any source code, I made a version of PMATE that is
ZCPR3-compatible (supports file access using the DU: -- drive/user --
format).
7. auto-indent: PMATE supports automatic indentation for writing in languages
such as C and Pascal. The macro languages give full support and control
to auto-indentation.
8. overlays: PMATE is complete in one COM file.
9. clean screen: PMATE shows only the information you really need to know --
the names of open files, the current editing buffer, the value of a
numerical argument returned by a macro, and the cursor position (line and
column).
If anyone wants more information about PMATE, I would welcome their
inquiries, since I am probably the most active supporter around of the 8-bit
version of PMATE (there are 16-bit versions, too). A special section (with
restricted access) of my remote access system, the Newton Z-Node
(617-965-7259, pw=DDT), is devoted to PMATE support. It includes a bulletin
board with suggestions and tips on exploiting PMATE's capabilities and an
extensive collection of macros.
Jay Sage (SAGE @ LL)
29-Jul-86 11:32:52-MDT,1624;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 11:32:29-MDT
Received: from cmu-cs-maps.arpa by AMSAA.ARPA id a011353; 23 Jul 86 17:27 EDT
Date: Wednesday, 23 July 1986 16:23:19 EDT
From: Stephen.Jenks@cmu-cs-maps.ARPA
To: info-cpm-request@AMSAA.ARPA
Subject: Emacs-like editor wanted
Message-ID: <1986.7.23.20.11.48.Stephen.Jenks@maps.cs.cmu.edu>
Distribution: net
Organization: Carnegie Mellon Computer Science
Resent-Date: Tue, 29 Jul 86 12:46:14 EDT
Resent-From: cpmlist@AMSAA.ARPA
Resent-To: info-cpm@cmu-cs-maps.ARPA
(I sure hope this gets out to the net!)
I keep seeing all these announcements of MicroEmacs for all sorts of
operating systems, and am getting pretty jealous of MS-DOS people, since I run
CP/M. Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?
I need a good editor. I've used The Final Word, but it just isn't as good
as Emacs, and it limits the size of files to less than the size of its swap
file. No good! So I must use WordStar for editting long programs -- no
good either. Are there any good editors out there that let you edit big
files?
Thanks a lot,
Steve Jenks
uucp: ...!seismo!maps.cs.cmu.edu!sfj
arpa: sfj@maps.cs.cmu.edu
bitnet: jenks@cmuccvc or sj0k@cmuccvma
p.s. Anyone have a UO-Lisp manual. I bought UO-Lisp a long time ago, and
never got a manual (pretty useless, huh?) and now the company doesn't
respond to my letters. Every company I buy anything from seems to go out of
business! Maybe I should buy an IBM PC and they would go under...
29-Jul-86 13:16:31-MDT,1325;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 13:16:03-MDT
Received: from rand-unix.arpa by AMSAA.ARPA id a000589; 29 Jul 86 14:28 EDT
Received: by rand-unix.ARPA; Tue, 29 Jul 86 10:06:12 pdt
Message-Id: <8607291706.AA17570@rand-unix.ARPA>
To: info-cpm@AMSAA.ARPA
Cc: bridger@RAND-UNIX.ARPA, SAGE@LL.ARPA
Subj: zcpr3 path puzzle
Date: Tue, 29 Jul 86 10:05:54 PDT
From: bridger@RAND-UNIX.ARPA
In ZCPR3, v. 3.0 and v. 3.14, the path-search code does
something I haven't seen explained -- it masks the high bit
of the user-number byte (and also, if the minpath option is used)
the drive byte found in the path.
From the comments with the code I am guessing that the intent was to
use the hi bit in the path to specify directories (drive/user pairs)
that "hide" non-system files. For example, if the path element for
A3: has bit 7 set, then files in A3: which do not have the
system-attribute bit set would not be found by (1) the .com file
loader, and (2) the DIR command. However, the code doesn't really do
this, at least if the minpath option is used.
Does anyone know: is this the intent? does anyone use a path with hi
bits set? Do the z3 tools and syslib routines behave correctly when
a path contains a hi bit?
--bridger
29-Jul-86 18:24:43-MDT,703;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 18:24:37-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a003781; 29 Jul 86 15:42 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
id AA19055; Tue, 29 Jul 86 12:43:03 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
id AA15471; Tue, 29 Jul 86 12:32:10 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
id AA01352; Tue, 29 Jul 86 12:31:58 pdt
Date: Tue, 29 Jul 86 12:31:58 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607291931.AA01352@clover.ucdavis.edu>
To: ucdavis!Info-cpm@AMSAA.ARPA
Subject: Re For sale
Where is the appropriate forum?
Eric
30-Jul-86 02:03:04-MDT,622;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 02:02:59-MDT
Received: from mit-mc.arpa by AMSAA.ARPA id a000671; 30 Jul 86 3:31 EDT
Date: Wed 30 Jul 86 03:30:39-EDT
From: Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
Subject: TVX source code?
To: Info-CPM@AMSAA.ARPA
Message-ID: <12226740342.69.CENT.MBECK@OZ.AI.MIT.EDU>
[I just found out the line eater still lives!]
I've seen mention of the TVX editor and am interested in obtaining a
copy of the source code. Anyone have a copy I can FTP or otherwise
get ahold of?
Mark Becker
-------
30-Jul-86 10:19:21-MDT,1121;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 10:19:13-MDT
Received: from nadc.arpa by AMSAA.ARPA id a004422; 30 Jul 86 11:36 EDT
Date: 30 Jul 1986 08:20:38-EDT
From: prindle@nadc.ARPA
To: Cent.Mbeck@oz.ai.mit.edu, mit-xx@nadc.ARPA, info-cpm@AMSAA.ARPA
MMDF-Warning: Parse error in preceding line at AMSAA.ARPA
Subject: whereabouts of TVX editor source code
Dr. Bruce Wampler's TVX editor is alive and well on SIMTEL20 in the directory
PD:<MSDOS.TVX-EDITOR>. Flip a few #defines, and it will (or used to) compile
for CP/M. Problem is, if this is the latest and greatest version with "vi"
and "emacs" modes, it probably won't fit into a typical CP/M TPA. I compiled
an older version (with "native TVX" command mode only) for CP/M 3.0 with a
58K TPA and wound up with about a 15K working buffer; much less than that and
you'd end up buffering to disk all the time. I have the source code to this
older version, if indeed someone does try to compile the newer one for CP/M and
it is too big.
Sincerely,
Frank Prindle
Prindle@NADC.arpa
30-Jul-86 12:20:37-MDT,727;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 12:20:28-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a007724; 30 Jul 86 13:14 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/30/86 at
08:25:40 CDT
Date: Wed, 30 Jul 86 15:10:50 DNT
To: info-cpm@AMSAA.ARPA
From: TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: Re: The TVX editor's source ...
Hello out there in the cp/m world.
If anyone get the source to the TVX editor, can I then get a copy too ?
Or even better: Mail it to the list. Please don't include uuencoded
non-binary files, since they are unuseable for EARN/BITNET users.
Klaus Emlquist Nielsen.
30-Jul-86 23:54:50-MDT,1094;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 23:54:01-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a017647; 31 Jul 86 1:24 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
id AA12591; Wed, 30 Jul 86 14:47:24 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
id AA09671; Wed, 30 Jul 86 14:15:16 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
id AA11813; Wed, 30 Jul 86 14:14:16 pdt
Date: Wed, 30 Jul 86 14:14:16 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607302114.AA11813@clover.ucdavis.edu>
To: ucdavis!info-cpm@AMSAA.ARPA
Subject: Arpa net restrictions
I would like to thank those people who took the time to point out the
restrictions on the use of Arpa net regarding the for sale message that
appeared several days ago. However, it does appear that I do need to
make one thing clear - it was not me who put in the advertisement - I
only asked if there was an appropriate forum. As there is not through
this channel, that answers that.
Eric "All I did was ask!"
31-Jul-86 10:25:35-MDT,1226;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 10:25:07-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a001863; 31 Jul 86 11:50 EDT
Received: from USENET by SMOKE.BRL.ARPA id a029220; 31 Jul 86 11:43 EDT
From: Thomas Almy <toma%tekgvs.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: Emacs-like editor wanted
Message-ID: <1654@tekgvs.UUCP>
Date: 30 Jul 86 14:15:26 GMT
To: info-cpm@AMSAA.ARPA
In article <2643@brl-smoke.ARPA> Stephen.Jenks@cmu-cs-maps.ARPA writes:
>I keep seeing all these announcements of MicroEmacs for all sorts of
>operating systems, and am getting pretty jealous of MS-DOS people, since I run
>CP/M. Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?
>
>I need a good editor. I've used The Final Word, but it just isn't as good
>as Emacs, and it limits the size of files to less than the size of its swap
>file. No good! ...
Unfortunately, MicroEmacs keeps the file memory resident (allowing about 29k
of buffers with 8086 "small memory model", figure about 20k with CP/M-80).
I use Mince (like Final Word) and devote a ram disk to the swap file. Works
great.
Tom Almy
Tektronix
31-Jul-86 18:08:10-MDT,39743;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 18:06:20-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000382; 31 Jul 86 17:44 EDT
Received: from USENET by SMOKE.BRL.ARPA id a004313; 31 Jul 86 17:41 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: MAKE for CPM 3.0 part 1 of 2
Message-ID: <513@copper.UUCP>
Date: 31 Jul 86 07:23:23 GMT
Keywords: cpm, make
To: info-cpm@AMSAA.ARPA
<-------------->
This is a make (clone) program for cp/m 3.0. It is a better version
than the one I posted earlier. This make program was recently posted
on USENET for "EON" (??). I have "ported" this program to CP/M,
and it seems to work well. This one has macros and rules (which
the earlier one I posted did not).
Below is the source and man files. Part two (posted separately) contains
the uuencoded version of the make.com (z80) binary. This binary
was generated via compilation with Manx Aztec C II version 1.05g.
I have "enhanced" my compiler library continuously over the last several
years, and don't always remember what was originally there and what it
is that which I added myself. I hope porting my port doesn't cause too many
problems for those that may want to recompile the source.
Enjoy...
Mike Kersenbrock
...!tektronix!copper!michaelk
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# MAKE.DOC
# MAKEFILE
# MAKE.C
# CHECK.C
# INPUT.C
# MACRO.C
# MAIN.C
# READER.C
# RULES.C
# H.H
# This archive created: Wed Jul 30 23:44:42 1986
# By: Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting make.doc
cat << \SHAR_EOF > make.doc
MAKE(CPM+) MAKE(CPM+)
SYNTAX
make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]
WHERE
-i means don't continue if an error is encountered
-f specifies that the following argument is the name of
a makefile to be used instead of default "MAKEFILE.DAT"
or "MAKEFILE".
-n means don't execute the commands, just write the ones that
would be executed to the standard output.
-p Print all macros & targets
-r Do not use inbuilt rules
-s Make silently
-t Touch files instead of making them
"macro" - is a macro name, and...
"val" - is the string value to set it to. Use quotes around
the "macro=val" if there are imbedded spaces.
DESCRIPTION
This program is a slightly simplified clone of the UNIX
(tm of AT&T) utility of the same name. Dependancy
information is extracted from a makefile and acted upon.
This version requires CP/M-80 version 3.0 ("CP/M PLUS")
with time-of-day-clock implemented. Also the file timestamps
must be "turned on". Current time-of-day call to CP/M is
also used. Note that "CP/M" is a trademark of Digital
Research.
MAKEFILE FORMAT
For general usage, refer to a UNIX(tm) man-page.
"Make" without parameters makes the first target in the
makefile.
The default name of the 'makefile' is 'MAKEFILE.DAT'
or 'MAKEFILE' in that order. If the '-f' option is used,
the default makefile is not processed.
Any blank lines in the 'makefile(s)' are ignored, as are
lines that have a "#" in the first column.
MAKE(CPM+) -2- MAKE(CPM+)
Lines starting with a tab character are 'howto'
lines, and consist of a command name followed by arguments.
Any other line is a 'dependency' line. 'Dependency'
lines consist of a filename followed by a (possibly empty)
list of dependent filenames. A colon is required after
the target filename.
'Howto' lines apply to the most recently preceding
'dependency' line. It is improper for a 'howto' line
to precede the first 'dependency' line.
Lines ending with "\" join the next-line to the current
one with all but one-character of the next-line's leading
whitespace removed.
SIDE EFFECTS
This program works by producing a temporary file "MAKE@@@.SUB"
then chaining to it for execution of the command list. This
file then deletes itself upon successful completion. Should
the execution be aborted, then this file will remain
in the file system (but will not harm later invocations of
make).
Everything has been made case-independent (CP/M forces command
lines upper case. That makes this case-independence a
requirement.)
BUGS
The -i option is opposite of "normal" so that error codes
are normally ignored. If the -i option is used, colons
will proceed commands that aren't to execute after an
error. This sortof almost works in CP/M Plus. To be
made to work three things need to be done. 1) an RSX
written that makes a compiler(etc) set the error flag (should
be easy to do). 2) Keep CP/M 3.0 and/or the CCP from resetting
the error flag on each command that is executed (patch
somewhere?), and 3) Let the ":" exclusion work in front
of .SUB files as well as .COM files (patch somewhere?).
Discription of the ":" is in the CP/M Plus Programmer's
Guide in the description of bdos function 108.
MAKE(CPM+) -3- MAKE(CPM+)
RULES
The built in rules currently are these:
".o" files depend on ".c" files and are made by:
$(CCC) $(CFLAGS) $(CWHICH)
where:
CCC = cc-c (mdk's submit file)
CFLAGS = (they are in cc-c.sub)
CWHICH = $* (target's basename)
".rel" files depend on ".asm" files and are made by:
$(ASM) $(ASMWHICH) $(ASMFLAGS)
where:
ASM = rmac
ASMWHICH = $*
ASMFLAGS = $$PZ SZ
Note: These macros can be redefined in the makefile.
AUTHOR
Originally written for "EON" (whatever that is).
This program was originally posted by, and presumably
written by:
Neil Russell
Organization: TIME. Office Computers, Sydney, Australia
UUCP: ...!seismo!munnari!tictoc.oz!caret
The port to CP/M 3.0 consists of numerous small and medium
modifications seemingly everywhere. That plus the generation
of this psuedo-man page was done by:
Michael D. Kersenbrock
Aloha, Oregon
UUCP: ...!tektronix!copper!michaelk
SHAR_EOF
if test 4453 -ne "`wc -c make.doc`"
then
echo shar: error transmitting make.doc '(should have been 4453 characters)'
fi
echo shar: extracting makefile
cat << \SHAR_EOF > makefile
#
# This is for "make.com" itself (under CP/M-80 V3.0)
#
OBJS = make.o check.o input.o macro.o main.o reader.o rules.o
make.com: $(OBJS)
linkc $(OBJS)
$(OBJS): h.h
SHAR_EOF
if test 169 -ne "`wc -c makefile`"
then
echo shar: error transmitting makefile '(should have been 169 characters)'
fi
echo shar: extracting make.c
cat << \SHAR_EOF > make.c
/*
* Do the actual making for make
*/
#include "c:stdio.h" /* "c:" is my ramdisk */
#include "c:fcntl.h"
#include "h.h"
FILE *execfile; /* Submit file to execute the "shell-exec's" */
extern long ftime();
/*
* Exec a shell that returns exit status correctly (/bin/esh).
* The standard EON shell returns the process number of the last
* async command, used by the debugger (ugg).
* [exec on eon is like a fork+exec on unix]
*/
int
dosh(command, args)
char *command;
char *args;
{
if (!execfile) {
execfile = fopen(MAKERUN, "w");
if (!execfile) {
errout("Make: can't create ");
errout(MAKERUN);
errout("\r\n");
exit(-1);
}
}
fprintf(execfile, "%s %s", command, args);
return 0;
}
/*
* Do commands to make a target
*/
void
docmds(np)
struct name * np;
{
bool ssilent;
bool signore;
int estat;
register char * q;
register char * p;
char * shell;
register struct line * lp;
register struct cmd * cp;
ssilent = silent;
/*
* Under cp/m the "ignore or not to ignore" is sorta done in dosh()
* where colons are inserted or not into the cp/m submit file.
* The actual ignoring (or not) is done when cpm 3.0's submit
* program executes the submit file.
*
* -mdk
*/
signore = ignore;
if (*(shell = getmacro("SHELL")) == '\0')
shell = ":bin/esh";
for (lp = np->n_line; lp; lp = lp->l_next)
for (cp = lp->l_cmd; cp; cp = cp->c_next)
{
strcpy(str1, cp->c_cmd);
expand(str1);
q = str1;
while ((*q == '@') || (*q == '-'))
{
if (*q == '@') /* Specific silent */
ssilent = TRUE;
else /* Specific ignore */
signore = TRUE;
q++; /* Not part of the command */
}
if (!ssilent)
fputs(" ", stdout);
if ((!ssilent) && (!signore)) { /* cp/m stuff */
putchar(':');
putchar(' ');
}
for (p=q; *p; p++)
{
if (*p == '\n' && p[1] != '\0')
{
*p = ' ';
if (!ssilent)
fputs("\\\n", stdout);
}
else if (!ssilent)
putchar(*p);
}
if (!ssilent)
putchar('\n');
if (domake)
{ /* Get the shell to execute it */
/*
* Colon in front of line makes execution
* conditional on error code in cp/m 3.0 .
* (Sortof, with one "minor" problem)
*/
if (!signore)
dosh(":","");
if ((estat = dosh(q,"\n")) != 0)
{
if (estat == -1)
fatal("Couldn't execute %s", shell);
else
{
printf("%s: Error code %d", myname, estat);
if (signore)
fputs(" (Ignored)\n", stdout);
else
{
putchar('\n');
if (!(np->n_flag & N_PREC))
if (unlink(np->n_name) == 0)
printf("%s: '%s' removed.\n", myname, np->n_name);
exit(estat);
}
}
}
}
}
}
/*
* Update the mod time of a file to now.
*/
void
touch(np)
struct name * np;
{
char c;
int fd;
char fcb[36]; /* set area for CP/M fcb */
char tempbuffer[128]; /* CPM record size */
if (!domake || !silent)
printf(" touch %s\n", np->n_name);
if (domake) {
if ((fd=open(np->n_name,O_RDONLY)) < 0 ) {
printf("%s: '%s' not touched - non-existant\n",
myname, np->n_name);
}
else {
close(fd);
OpenRandomFile(np->n_name,fcb); /* open file */
ReadRandomFile(tempbuffer,0,fcb); /* read record */
WriteRandomFile(tempbuffer,0,fcb); /* write it back */
}
CloseRandomFile(fcb);
}
}
/*
* Recursive routine to make a target.
*/
int
make(np, level)
struct name * np;
int level;
{
register struct depend * dp;
register struct line * lp;
time_t dtime = 1l;
if (np->n_flag & N_DONE)
return 0;
if (!np->n_time) {
np->n_time = ftime(np->n_name);/* Gets modtime of this file*/
}
if (rules) {
for (lp = np->n_line; lp; lp = lp->l_next)
if (lp->l_cmd)
break;
if (!lp)
dyndep(np);
}
if (!(np->n_flag & N_TARG) && np->n_time == 0L)
fatal("Don't know how to make %s", np->n_name);
for (lp = np->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
{
make(dp->d_name, level+1);
dtime = max(dtime, dp->d_name->n_time);
}
np->n_flag |= N_DONE;
if (quest)
{
time(&np->n_time); /* used to be rtime() zzz */
return np->n_time < dtime;
}
else if (np->n_time < dtime)
{
if (dotouch)
touch(np);
else
{
setmacro("@", np->n_name);
docmds(np);
}
time(&np->n_time); /* used to be rtime() zzz */
}
else if (level == 0)
printf("%s: '%s' is up to date\n", myname, np->n_name);
return 0;
}
SHAR_EOF
if test 4491 -ne "`wc -c make.c`"
then
echo shar: error transmitting make.c '(should have been 4491 characters)'
fi
echo shar: extracting check.c
cat << \SHAR_EOF > check.c
/*
* Check structures for make.
*/
#include "c:stdio.h"
#include "h.h"
/*
* Prints out the structures as defined in memory. Good for check
* that you make file does what you want (and for debugging make).
*/
void
prt()
{
register struct name * np;
register struct depend * dp;
register struct line * lp;
register struct cmd * cp;
register struct macro * mp;
for (mp = macrohead; mp; mp = mp->m_next)
fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
fputc('\n', stderr);
for (np = namehead.n_next; np; np = np->n_next)
{
fprintf(stderr, "%s:\n", np->n_name);
for (lp = np->n_line; lp; lp = lp->l_next)
{
fputc(':', stderr);
for (dp = lp->l_dep; dp; dp = dp->d_next)
fprintf(stderr, " %s", dp->d_name->n_name);
fputc('\n', stderr);
for (cp = lp->l_cmd; cp; cp = cp->c_next)
fprintf(stderr, "-\t%s\n", cp->c_cmd);
fputc('\n', stderr);
}
fputc('\n', stderr);
}
}
/*
* Recursive routine that does the actual checking.
*/
void
check(np)
struct name * np;
{
register struct depend * dp;
register struct line * lp;
if (np->n_flag & N_MARK)
fatal("Circular dependency from %s", np->n_name);
np->n_flag |= N_MARK;
for (lp = np->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
check(dp->d_name);
np->n_flag &= ~N_MARK;
}
/*
* Look for circular dependancies.
* ie.
* a: b
* b: a
* is a circular dep
*/
void
circh()
{
register struct name * np;
for (np = namehead.n_next; np; np = np->n_next)
check(np);
}
/*
* Check the target .PRECIOUS, and mark its dependentd as precious
*/
void
precious()
{
register struct depend * dp;
register struct line * lp;
register struct name * np;
if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
return;
for (lp = np->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
dp->d_name->n_flag |= N_PREC;
}
SHAR_EOF
if test 1895 -ne "`wc -c check.c`"
then
echo shar: error transmitting check.c '(should have been 1895 characters)'
fi
echo shar: extracting input.c
cat << \SHAR_EOF > input.c
/*
* Parse a makefile
*/
#include "c:stdio.h"
#include "h.h"
extern int endoffile;
struct name namehead;
struct name * firstname;
char str1[LZ]; /* General store */
char str2[LZ];
/*
* Intern a name. Return a pointer to the name struct
*/
struct name *
newname(name)
char * name;
{
register struct name * rp;
register struct name * rrp;
register char * cp;
for
(
rp = namehead.n_next, rrp = &namehead;
rp;
rp = rp->n_next, rrp = rrp->n_next
)
if (no_case_cmp(name, rp->n_name) == 0)
return rp;
if ((rp = (struct name *)malloc(sizeof (struct name)))
== (struct name *)0)
fatal("No memory for name");
rrp->n_next = rp;
rp->n_next = (struct name *)0;
if ((cp = malloc(strlen(name)+1)) == (char *)0)
fatal("No memory for name");
strcpy(cp, name);
rp->n_name = cp;
rp->n_line = (struct line *)0;
rp->n_time = (time_t)0;
rp->n_flag = 0;
return rp;
}
/*
* Add a dependant to the end of the supplied list of dependants.
* Return the new head pointer for that list.
*/
struct depend *
newdep(np, dp)
struct name * np;
struct depend * dp;
{
register struct depend * rp;
register struct depend * rrp;
if ((rp = (struct depend *)malloc(sizeof (struct depend)))
== (struct depend *)0)
fatal("No memory for dependant");
rp->d_next = (struct depend *)0;
rp->d_name = np;
if (dp == (struct depend *)0)
return rp;
for (rrp = dp; rrp->d_next; rrp = rrp->d_next)
;
rrp->d_next = rp;
return dp;
}
/*
* Add a command to the end of the supplied list of commands.
* Return the new head pointer for that list.
*/
struct cmd *
newcmd(str, cp)
char * str;
struct cmd * cp;
{
register struct cmd * rp;
register struct cmd * rrp;
register char * rcp;
if (rcp = rindex(str, '\n'))
*rcp = '\0'; /* Loose newline */
while (isspace(*str))
str++;
if (*str == '\0') /* If nothing left, the exit */
return;
if ((rp = (struct cmd *)malloc(sizeof (struct cmd)))
== (struct cmd *)0)
fatal("No memory for command");
rp->c_next = (struct cmd *)0;
if ((rcp = malloc(strlen(str)+1)) == (char *)0)
fatal("No memory for command");
strcpy(rcp, str);
rp->c_cmd = rcp;
if (cp == (struct cmd *)0)
return rp;
for (rrp = cp; rrp->c_next; rrp = rrp->c_next)
;
rrp->c_next = rp;
return cp;
}
/*
* Add a new 'line' of stuff to a target. This check to see
* if commands already exist for the target.
*/
void
newline(np, dp, cp)
struct name * np;
struct depend * dp;
struct cmd * cp;
{
bool hascmds = FALSE; /* Target has commands */
register struct line * rp;
register struct line * rrp;
for
(
rp = np->n_line, rrp = (struct line *)0;
rp;
rrp = rp, rp = rp->l_next
)
if (rp->l_cmd)
hascmds = TRUE;
if (hascmds && cp)
error("Commands defined twice for target %s", np->n_name);
if ((rp = (struct line *)malloc(sizeof (struct line)))
== (struct line *)0)
fatal("No memory for line");
rp->l_next = (struct line *)0;
rp->l_dep = dp;
rp->l_cmd = cp;
if (rrp)
rrp->l_next = rp;
else
np->n_line = rp;
np->n_flag |= N_TARG;
}
/*
* Parse input from the makefile, and construct a tree structure
* of it.
*/
void
input(fd)
FILE * fd;
{
char * p; /* General */
char * q;
struct name * np;
struct depend * dp;
struct cmd * cp;
if (getline(str1, fd)) /* Read the first line */
return;
for(;;)
{
if (*str1 == '\t') /* Rules without targets */
error("Rules not allowed here");
p = str1;
while (isspace(*p)) /* Find first target */
p++;
while (((q = index(p, '=')) != (char *)0) &&
(p != q) && (q[-1] == '\\')) /* Find value */
{
register char * a;
a = q - 1; /* Del \ chr; move rest back */
p = q;
while(*a++ = *q++)
;
}
if (q != (char *)0)
{
register char * a;
*q++ = '\0'; /* Separate name and val */
while (isspace(*q))
q++;
if (p = rindex(q, '\n'))
*p = '\0';
p = str1;
if ((a = gettok(&p)) == (char *)0)
error("No macro name");
setmacro(a, q);
if (getline(str1, fd))
return;
continue;
}
expand(str1);
p = str1;
while (((q = index(p, ':')) != (char *)0) &&
(p != q) && (q[-1] == '\\')) /* Find dependents */
{
register char * a;
a = q - 1; /* Del \ chr; move rest back */
p = q;
while(*a++ = *q++)
;
}
if (q == (char *)0)
error("No targets provided");
*q++ = '\0'; /* Separate targets and dependents */
for (dp = (struct depend *)0; ((p = gettok(&q)) != (char *)0);)
/* get list of dep's */
{
np = newname(p); /* Intern name */
dp = newdep(np, dp); /* Add to dep list */
}
*((q = str1) + strlen(str1) + 1) = '\0';
/* Need two nulls for gettok (Remember separation) */
cp = (struct cmd *)0;
if (getline(str2, fd) == FALSE) /* Get commands */
{
while (*str2 == '\t')
{
cp = newcmd(&str2[0], cp);
if (getline(str2, fd))
break;
}
}
while ((p = gettok(&q)) != (char *)0) /* Get list of targ's */
{
np = newname(p); /* Intern name */
newline(np, dp, cp);
if (!firstname)
firstname = np;
}
if (feof(fd) != 0 || endoffile == TRUE) /* EOF? */
return;
strcpy(str1, str2);
}
}
/*
* Case insensitive strcmp() then used for = or != purposes.
*
* This makes cp/m makefile usage a bit simpler
*
* -mdk
*/
no_case_cmp(first,second)
char *first;
char *second;
{
register char *p1,*p2;
for (p1=first,p2=second ; *p1 != '\0' ; p1++, p2++) {
if ((islower(*p1) ? tolower(*p1) : *p1) !=
(islower(*p2) ? tolower(*p2) : *p2) ) {
break;
}
}
if (*p1 == '\0' && *p2 == '\0') {
return(0);
}
return(1);
}
SHAR_EOF
if test 5650 -ne "`wc -c input.c`"
then
echo shar: error transmitting input.c '(should have been 5650 characters)'
fi
echo shar: extracting macro.c
cat << \SHAR_EOF > macro.c
/*
* Macro control for make
*/
#include "h.h"
struct macro * macrohead;
struct macro *
getmp(name)
char * name;
{
register struct macro * rp;
for (rp = macrohead; rp; rp = rp->m_next)
if (strcmp(name, rp->m_name) == 0)
return rp;
return (struct macro *)0;
}
char *
getmacro(name)
char * name;
{
struct macro * mp;
if (mp = getmp(name))
return mp->m_val;
else
return "";
}
struct macro *
setmacro(name, val)
char * name;
char * val;
{
register struct macro * rp;
register char * cp;
/* Replace macro definition if it exists */
for (rp = macrohead; rp; rp = rp->m_next)
if (strcmp(name, rp->m_name) == 0)
{
free(rp->m_val); /* Free space from old */
break;
}
if (!rp) /* If not defined, allocate space for new */
{
if ((rp = (struct macro *)malloc(sizeof (struct macro)))
== (struct macro *)0)
fatal("No memory for macro");
rp->m_next = macrohead;
macrohead = rp;
rp->m_flag = FALSE;
if ((cp = malloc(strlen(name)+1)) == (char *)0)
fatal("No memory for macro");
strcpy(cp, name);
rp->m_name = cp;
}
if ((cp = malloc(strlen(val)+1)) == (char *)0)
fatal("No memory for macro");
strcpy(cp, val); /* Copy in new value */
rp->m_val = cp;
return rp;
}
/*
* Do the dirty work for expand
*/
void
doexp(to, from, len, buf)
char ** to;
char * from;
int * len;
char * buf;
{
register char * rp;
register char * p;
register char * q;
register struct macro * mp;
rp = from;
p = *to;
while (*rp)
{
if (*rp != '$')
{
*p++ = *rp++;
(*len)--;
}
else
{
q = buf;
if (*++rp == '(')
while (*++rp && *rp != ')')
*q++ = *rp;
else if (!*rp)
{
*p++ = '$';
break;
}
else
*q++ = *rp;
*q = '\0';
if (*rp)
rp++;
if (!(mp = getmp(buf)))
mp = setmacro(buf, "");
if (mp->m_flag)
fatal("Infinitely recursive macro %s", mp->m_name);
mp->m_flag = TRUE;
*to = p;
doexp(to, mp->m_val, len, buf);
p = *to;
mp->m_flag = FALSE;
}
if (*len <= 0)
error("Expanded line too line");
}
*p = '\0';
*to = p;
}
/*
* Expand any macros in str.
*/
void
expand(str)
char * str;
{
static char a[LZ];
static char b[LZ];
char * p;
int len = LZ-1;
p = str;
strcpy(a, str);
doexp(&p, a, &len, b);
}
SHAR_EOF
if test 2298 -ne "`wc -c macro.c`"
then
echo shar: error transmitting macro.c '(should have been 2298 characters)'
fi
echo shar: extracting main.c
cat << \SHAR_EOF > main.c
/*
* make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]
*
* (Better than EON mk & old CPM make but not quite as good as UNIX make)
*
* -f makefile name
* -i don't ignore exit status
* -n Pretend to make
* -p Print all macros & targets
* -q Question up-to-dateness of target. Return exit status 1 if not
* -r Don't not use inbuilt rules
* -s Make silently
* -t Touch files instead of making them
* -m Change memory requirements - N/A under CP/M
*/
#include "c:stdio.h" /* c: is my ramdisk */
#include "c:fcntl.h"
#include "h.h"
char Usage1[]=" -f makefile name\n\
-i don't ignore exit status\n\
-n Pretend to make\n\
-p Print all macros & targets\n\
-r Do not use inbuilt rules\n\
-s Make silently\n\
-t Touch files instead of making them\n";
#define MEMSPACE (16384) /* superfluous under cp/m */
char * myname;
char * makefile; /* The make file */
unsigned memspace = MEMSPACE;
extern FILE *execfile;
FILE * ifd; /* Input file desciptor */
bool domake = TRUE; /* Go through the motions option */
bool ignore = TRUE; /* Ignore exit status option */
bool silent = FALSE; /* Silent option */
bool print = FALSE; /* Print debuging information */
bool rules = TRUE; /* Use inbuilt rules */
bool dotouch = FALSE;/* Touch files instead of making */
bool quest = FALSE; /* Question up-to-dateness of file */
void
main(argc, argv)
char ** argv;
int argc;
{
register char * p; /* For argument processing */
int estat; /* For question */
register struct name * np;
/*
* CP/M makes all command line junque upper case. All things
* being equal, I'd rather they be all forced lower. So I will.
*
* I have also forced everything in the makefile to lower case,
* so everything should be case insensitive.
*/
for (estat = argc ; --estat > 0 ;) {
strlower(argv[estat]);
}
unlink(MAKERUN); /* delete possible existing make-submit file */
myname = (argc-- < 1) ? "make" : *argv++;
/*
* CP/M can't do argv[0] (OS limitation), so we don't know who we are.
*/
myname = "make";
while ((argc > 0) && (**argv == '-'))
{
argc--; /* One less to process */
p = *argv++; /* Now processing this one */
while (*++p != '\0')
{
/*
* Elaborate switch not really needed, but I
* hacked this in before I made all argv parameters
* lower case (for cp/m).
*/
switch( isupper(*p) ? tolower (*p) : *p )
{
case 'f': /* Alternate file name */
if (*++p == '\0')
{
if (argc-- <= 0)
usage();
p = *argv++;
}
makefile = p;
goto end_of_args;
case 'm': /* Change space requirements */
if (*++p == '\0')
{
if (argc-- <= 0)
usage();
p = *argv++;
}
memspace = atoi(p);
goto end_of_args;
case 'n': /* Pretend mode */
domake = FALSE;
break;
case 'i': /* Ignore fault mode */
ignore = FALSE;
break;
case 's': /* Silent about commands */
silent = TRUE;
break;
case 'p':
print = TRUE;
break;
case 'r':
rules = FALSE;
break;
case 't':
dotouch = TRUE;
break;
case 'q':
quest = TRUE;
break;
default: /* Wrong option */
usage();
}
}
end_of_args:;
}
/* if (initalloc(memspace) == 0xffff) Must get memory for alloc
fatal("Cannot initalloc memory");
*/
if (strcmp(makefile, "-") == 0) /* Can use stdin as makefile */
ifd = stdin;
else
if (!makefile) /* If no file, then use default */
{
if ((ifd = fopen(DEFN1, "r")) == (FILE *)0
&& ((ifd = fopen(DEFN2, "r")) == (FILE *)0)) {
fatal("Can't open %s or %s; error %02x",
DEFN1,DEFN2, errno);
}
}
else
if ((ifd = fopen(makefile, "r")) == (FILE *)0)
fatal("Can't open %s", makefile);
if (rules)
makerules();
setmacro("$", "$");
while (argc && (p = index(*argv, '=')))
{
char c;
c = *p;
*p = '\0';
setmacro(*argv, p+1);
*p = c;
argv++;
argc--;
}
input(ifd); /* Input all the gunga */
fclose(ifd); /* Finished with makefile */
lineno = 0; /* Any calls to error now print no line number */
if (print)
prt(); /* Print out structures */
np = newname(".SILENT");
if (np->n_flag & N_TARG)
silent = TRUE;
np = newname(".IGNORE");
if (np->n_flag & N_TARG)
ignore = TRUE;
precious();
if (!domake)
silent = FALSE;
if (!firstname)
fatal("No targets defined");
circh(); /* Check circles in target definitions */
if (!argc)
estat = make(firstname, 0);
else while (argc--)
{
if (!print && !silent && strcmp(*argv, "love") == 0)
printf("Not war!\n");
estat |= make(newname(*argv++), 0);
}
if (execfile == NULL) {
exit(0); /* no file made, must be up to date! */
}
/*
* The "trick" algorithm used for CP/M (which can't execute
* commands while "make" is running) is that dosh() really
* puts commands into a submit file MAKERUN, then after
* the make is "done", that submit file is chained-to (below).
* The first code-line below enters the submit file's last command
* to delete itself (so this chaining trick is mostly transparent.
*
* -mdk
*/
dosh("era ",MAKERUN); /* have the submit file delete itself */
dosh("\n","");
fclose(execfile); /* close the writing to this file */
bdos(108,0); /* Reset CP/M Program return code */
strcpy((char *)0x80,MAKERUN); /* load submit file name into DMA buf*/
bdos(47,0xff); /* chain to the generated submit file */
/* if (quest)
exit(estat);
else
exit(0);
*/
}
usage()
{
fprintf(stderr, "Usage: %s [-f makefile] [-nprst] [macro=val ...] [target(s) ...]\n%s", myname,Usage1);
exit(1);
}
void
fatal(msg, a1, a2, a3)
char *msg;
{
fprintf(stderr, "%s: ", myname);
fprintf(stderr, msg, a1, a2, a3);
fputc('\n', stderr);
exit(1);
}
strlower(string)
char *string;
{
register char *pointer;
char c;
for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
if (isupper(c))
*pointer = tolower(c);
}
}
SHAR_EOF
if test 5995 -ne "`wc -c main.c`"
then
echo shar: error transmitting main.c '(should have been 5995 characters)'
fi
echo shar: extracting reader.c
cat << \SHAR_EOF > reader.c
/*
* Read in makefile
*/
#include "c:stdio.h"
#include "h.h"
int lineno;
int endoffile = FALSE;
/*
* Syntax error handler. Print message, with line number, and exits.
*/
void
error(msg, a1, a2, a3)
char * msg;
{
fprintf(stderr, "%s: ", myname);
fprintf(stderr, msg, a1, a2, a3);
if (lineno)
fprintf(stderr, " on line %d", lineno);
fputc('\n', stderr);
exit(1);
}
/*
* Read a line into the supplied string of length LZ. Remove
* comments, ignore blank lines. Deal with quoted (\) #, and
* quoted newlines. If EOF return TRUE.
*/
bool
getline(str, fd)
char * str;
FILE * fd;
{
register char * p;
char * q;
int pos = 0;
int concatflag = 0;
int size;
for (;;)
{
if (fgets(str+pos, LZ-pos, fd) == (char *)0) {
endoffile = TRUE;
return (TRUE); /* EOF */
}
if (index(str+pos,'\032') != (char *)0) {
endoffile = TRUE;
return(TRUE);
}
/*
* Strip CP/M CR characters
*/
if ((p=index(str+pos,'\015')) != (char *)0) {
do {
*p = p[1];
} while (*(++p) != '\0');
}
/*
* Shorten leading whitespace on line extensions.
*/
if (concatflag != 0) {
for (p = str+pos ; iswhite(*p) ; p++ ) ;
size = p-str-pos-1;
if (size > 0) {
p = str+pos+1;
while ((*p = p[size]) != '\0') {
p++;
}
}
}
strlower(str+pos); /* let's do everything inlower case */
lineno++;
if ((p = index(str+pos, '\n')) == (char *)0)
error("Line too long");
/*
* I want to actually join lines that are logically joined
* so that when link commands are generated for CP/M,
* a usable CCP command line will be generated.
*/
if (p[-1] == '\\') {
*(--p) = '\0';
pos = p - str;
concatflag = 1;
continue;
}
p = str;
while (((q = index(p, '#')) != (char *)0) &&
(p != q) && (q[-1] == '\\'))
{
char *a;
a = q - 1; /* Del \ chr; move rest back */
p = q;
while (*a++ = *q++)
;
}
if (q != (char *)0)
{
q[0] = '\n';
q[1] = '\0';
}
p = str;
while (isspace(*p)) /* Checking for blank */
p++;
if (*p != '\0')
return FALSE;
pos = 0;
}
}
/*
* Get a word from the current line, surounded by white space.
* return a pointer to it. String returned has no white spaces
* in it.
*/
char *
gettok(ptr)
char **ptr;
{
register char * p;
while (isspace(**ptr)) /* Skip spaces */
(*ptr)++;
if (**ptr == '\0') /* Nothing after spaces */
return NULL;
p = *ptr; /* word starts here */
while ((**ptr != '\0') && (!isspace(**ptr)))
(*ptr)++; /* Find end of word */
*(*ptr)++ = '\0'; /* Terminate it */
return(p);
}
SHAR_EOF
if test 2614 -ne "`wc -c reader.c`"
then
echo shar: error transmitting reader.c '(should have been 2614 characters)'
fi
echo shar: extracting rules.c
cat << \SHAR_EOF > rules.c
/*
* Control of the implicit suffix rules
*/
#include "h.h"
extern long ftime();
extern long time();
extern char *rindex();
extern struct name *newname();
extern char *setmacro();
/*
* Return a pointer to the suffix of a name
*/
char *
suffix(name)
char * name;
{
return(rindex(name, '.'));
}
/*
* Dynamic dependency. This routine applies the suffix rules
* to try and find a source and a set of rules for a missing
* target. If found, np is made into a target with the implicit
* source name, and rules. Returns TRUE if np was made into
* a target.
*/
bool
dyndep(np)
struct name * np;
{
register char * p;
register char * q;
register char * suff; /* Old suffix */
register char * basename; /* Name without suffix */
struct name * op; /* New dependent */
struct name * sp; /* Suffix */
struct line * lp;
struct depend * dp;
char * newsuff;
p = str1;
q = np->n_name;
suff = suffix(q);
while (q < suff)
*p++ = *q++;
*p = '\0';
basename = setmacro("*", str1)->m_val;
if (!((sp = newname(".suffixes"))->n_flag & N_TARG))
return FALSE;
for (lp = sp->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
{
newsuff = dp->d_name->n_name;
if (strlen(suff)+strlen(newsuff)+1 >= LZ)
fatal("Suffix rule too long");
p = str1;
q = newsuff;
while (*p++ = *q++)
;
p--;
q = suff;
while (*p++ = *q++)
;
sp = newname(str1);
if (sp->n_flag & N_TARG)
{
p = str1;
q = basename;
if (strlen(basename) + strlen(newsuff)+1 >= LZ)
fatal("Implicit name too long");
while (*p++ = *q++)
;
p--;
q = newsuff;
while (*p++ = *q++)
;
op = newname(str1);
if (!op->n_time)
op->n_time = ftime(op->n_name);/* Gets modtime of this file*/
if (op->n_time)
{
dp = newdep(op, 0);
newline(np, dp, sp->n_line->l_cmd);
setmacro("<", op->n_name);
return TRUE;
}
}
}
return FALSE;
}
/*
* Make the default rules
*/
void
makerules()
{
struct cmd * cp;
struct name * np;
struct depend * dp;
#ifdef xyz123zzz
/*
* Sure would have been nice if this had been documented as
* to exactly what was going on with the routine calls.
*
* -mdk
*/
setmacro("BDSCC", "asm");
/* setmacro("BDSCFLAGS", ""); */
cp = newcmd("$(BDSCC) $(BDSCFLAGS) -n $<", 0);
np = newname(".c.o");
newline(np, 0, cp);
setmacro("CC", "c");
setmacro("CFLAGS", "-O");
cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
np = newname(".c.obj");
newline(np, 0, cp);
setmacro("M80", "asm -n");
/* setmacro("M80FLAGS", ""); */
cp = newcmd("$(M80) $(M80FLAGS) $<", 0);
np = newname(".mac.o");
newline(np, 0, cp);
setmacro("AS", "zas");
/* setmacro("ASFLAGS", ""); */
cp = newcmd("$(AS) $(ASFLAGS) -o $@ $<", 0);
np = newname(".as.obj");
newline(np, 0, cp);
np = newname(".as");
dp = newdep(np, 0);
np = newname(".obj");
dp = newdep(np, dp);
np = newname(".c");
dp = newdep(np, dp);
np = newname(".o");
dp = newdep(np, dp);
np = newname(".mac");
dp = newdep(np, dp);
np = newname(".suffixes");
newline(np, dp, 0);
#endif
/*
* C compilation. I use cc-c.sub to do what unix cc -c does.
*
* Macros can be overridden in makfile if I change and am
* too lazy to recompile this make program's rules.
*
*/
setmacro("ccc", "cc-c");
setmacro("cflags", "");
setmacro("cwhich", "$*");
cp = newcmd("$(ccc) $(cflags) $(cwhich)", 0);
np = newname(".c.o");
newline(np, 0, cp);
/*
* Assembly using RMAC.
*/
setmacro("asm", "rmac");
setmacro("asmflags", "$$PZ SZ");
setmacro("asmwhich", "$*");
cp = newcmd("$(asm) $(asmwhich) $(asmflags)", 0);
np = newname(".asm.rel");
newline(np, 0, cp);
/*
* No point in my Z80 assembler or MAC. Rules for
* non-linkable one-module language-tools makes no
* sense because it is a one-file process anyway.
*/
np = newname(".asm");
dp = newdep(np, 0);
np = newname(".rel");
dp = newdep(np,dp);
np = newname(".c");
dp = newdep(np, dp);
np = newname(".o");
dp = newdep(np,dp);
np = newname(".suffixes");
newline(np, dp, 0);
}
SHAR_EOF
if test 4094 -ne "`wc -c rules.c`"
then
echo shar: error transmitting rules.c '(should have been 4094 characters)'
fi
echo shar: extracting h.h
cat << \SHAR_EOF > h.h
/*
* Include header for make
*/
#ifndef uchar
#define uchar char /* regular char's are unsigned w/Aztec C */
#endif
#define void int
#define bool uchar
#define time_t long
#define TRUE (1)
#define FALSE (0)
#ifndef max
#define max(a,b) ((a)>(b)?(a):(b))
#endif
#define DEFN1 "MAKEFILE.DAT" /* Default names */
#define DEFN2 "MAKEFILE"
#define errout(s) fputs(s, stderr) /* No need for DeSmet kludge */
#define MAKERUN "MAKE@@@.SUB" /* File on which commands are written */
#define LZ (1024) /* Line size */
/*
* A name. This represents a file, either to be made, or existant
*/
struct name
{
struct name * n_next; /* Next in the list of names */
char * n_name; /* Called */
struct line * n_line; /* Dependencies */
time_t n_time; /* Modify time of this name */
uchar n_flag; /* Info about the name */
};
#define N_MARK 0x01 /* For cycle check */
#define N_DONE 0x02 /* Name looked at */
#define N_TARG 0x04 /* Name is a target */
#define N_PREC 0x08 /* Target is precious */
/*
* Definition of a target line.
*/
struct line
{
struct line * l_next; /* Next line (for ::) */
struct depend * l_dep; /* Dependents for this line */
struct cmd * l_cmd; /* Commands for this line */
};
/*
* List of dependents for a line
*/
struct depend
{
struct depend * d_next; /* Next dependent */
struct name * d_name; /* Name of dependent */
};
/*
* Commands for a line
*/
struct cmd
{
struct cmd * c_next; /* Next command line */
char * c_cmd; /* Command line */
};
/*
* Macro storage
*/
struct macro
{
struct macro * m_next; /* Next variable */
char * m_name; /* Called ... */
char * m_val; /* Its value */
uchar m_flag; /* Infinite loop check */
};
extern char * myname;
extern struct name namehead;
extern struct macro * macrohead;
extern struct name * firstname;
extern bool silent;
extern bool ignore;
extern bool rules;
extern bool dotouch;
extern bool quest;
extern bool domake;
extern char str1[];
extern char str2[];
extern int lineno;
char * fgets();
char * index();
char * rindex();
char * malloc();
extern int errno;
char * getmacro();
struct macro * setmacro();
void input();
void error();
void fatal();
int make();
struct name * newname();
struct depend * newdep();
struct cmd * newcmd();
void newline();
char * suffix();
void touch();
void makerules();
char * gettok();
void precious();
SHAR_EOF
if test 2448 -ne "`wc -c h.h`"
then
echo shar: error transmitting h.h '(should have been 2448 characters)'
fi
# End of shell archive
exit 0
--
Mike Kersenbrock
Tektronix Computer Aided Software Engineering
Aloha, Oregon
31-Jul-86 19:39:30-MDT,46966;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 19:37:52-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000907; 31 Jul 86 19:47 EDT
Received: from USENET by SMOKE.BRL.ARPA id a005284; 31 Jul 86 19:41 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: MAKE for CPM 3.0 part 2 of 2
Message-ID: <514@copper.UUCP>
Date: 31 Jul 86 07:30:05 GMT
Keywords: cpm, make
To: info-cpm@AMSAA.ARPA
<------------->
This is the uuencoded binary for "make.com". The sources and man page
were separately posted as part 1.
Mike Kersenbrock
Aloha, Oregon
...!tektronix!copper!michaelk
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# MAKE.UUE
# This archive created: Wed Jul 30 23:46:19 1986
# By: Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting make.uue
cat << \SHAR_EOF > make.uue
begin 644 MAKE.COM
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
MS<TJT=$BW'=\M<*7&BK@=^4A)QWES?8=T=$Z\'=O)@!\M<JE<$)B$W'>4A
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
M#@`YS:A7R<U$*@XAPV94S40J#B+%*@)QZR&``!DB`G$.<%`,'%*@!QZ\T%
M`+?"GU0J`'$1(0`9-,*15",T*@1Q*R($<7VTPF=4P<EO)@`BS7?!*@1QR<UD
M*,3_(00`.>4A3``Y7B-6U<W#.='1(00`.>4A$P#ES8HYT=$A!``YY2%*`#E>
M(U;5S<,YT=$A%``YY2%,`#E>(U;5S<,YT=$A!``YY2$7`.7-BCG1T<G-9"C<
M_R$$`#GE(3(`.5XC5M7-PSG1T2$$`#GE(1,`Y<V*.='1R<UD*```(0P`.4XC
M1B$``.7]X6!I7A8`(2T`S:,HRE958&DC1$TA`0#E_>'#:55@:5X6`"$K`,VC
M*,II56!I(T1-(0``Y=WA8&E>%@#5S557T<J;5=WEX1$*`,U;*>5@:2-$32M>
M%@#A&1'0_QGEW>'#;U7]Y>%\M<JL5=WEX<US*<.O5=WEX<G%(0D`.48K3BM6
M*UXK?BMN9WBQRLY5&G<3(PO#P57!R<4A!``Y7B-6(TXC1B-NZWBQRNI5<R,+
MP]]5P<DA`@`YQ0'_?UXC5B-^(V9O>+'*$%8:OL(55K?*$%8C$PO#_%7!(0``
MR<':'U8A`0!]M,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRD=6?A*WRD=6
M(Q,+PS96X<')(0(`.7XC9F\1``"OOLI?5A,CPU96ZWVTR2$"`#G%7B-6U2->
M(U8C3B-&Z]'#_%4A`@`YQ5XC5M75(UXC5B-.(T;KT<,V5L4!_W\A!``Y7B-6
MU2-^(V9OZWBQRD=6?K?*L58C"\.B5NO#-E8A`@`YQ5XC5M75(UXC5B-.(T;A
MK\.B5L4A!``Y7B-6(V[K?K?*Y%:[RNI6(\/75B$``*_!R7RUP<G%(00`.5XC
M5B-NZP$``*^^R@97(P/#_59XL<KD5@LK?KO"!E?#ZE8A`@`Y?OX@RCM7_@G*
M.U?^"LH[5\-05R$"`#E^_D':4%?^6])05R$!`'VWR2$"`#E^_F':4%?^>]H[
M5R$``*_)(0(`.7[^,-I05_XZTE!7PSM7(0(`.7[^8=IX5_Y[TGA7UB!O)@"W
MR2$"`#E^_D':CE?^6]*.5\8@;R8`M\G1(00`&>7KZRI8=L.L5]$A!``9Y>OK
M*E9V&G<C$QIW(Q,:=R,3&G?)ZRI6=GX2$R-^$A,C?A(3(WX2R>$B[W0J5G81
M`P`95BM>*]56*U[5*N]TZ>$B[W0J6';1<R-R(]%S(W(J[W3I*EAVZRI6=B)8
M=NLB5G;)*E9VKQ8$/@">=R,5P@]8R2I6=A8$?K?"VEHC%<(>6,//6J\]P<FO
M/,')Q2I6=NLJ6'8C(R,3$Q,:M_I-6*[Z+UC#45BN^BM8!@0:OMHK6,(O6"L;
M!<)36*_!R<4J5G;K*EAVKP8$&HX2(Q,%PF]8P<G%*E9VZRI8=J\&!!J>$B,3
M!<*%6,')Q2I6=NLJ6'8&!!JF$B,3!<*:6,')Q2I6=NLJ6'8&!!JV$B,3!<*O
M6,')Q2I6=NLJ6'8&!!JN$B,3!<+$6,')*E9V%@1^+W<C%<+46,DJ6'9^YC_(
MQ4<J5G9>(U8C?B-F;RGK*>O2^5@C!<+Q6$1-*E9V<R-R(W$C<,')*EAV?N8_
MR%<J5G8C(R-^M_HP6>4>!+=^'W<K'<(B6>$5PAY9R>4>!#=^'W<K'<(T6>$5
MPC!9R=4&!'X2(Q,%PD59X4^W\,,,6,4J5G81^W3-0EEY,OET*EAV$0-US4)9
M.OETJ3+Y=,W!61'[="I6=@8$&G<3(P7"?5G!.OETM_H)6,G%*E9V$?MTS4)9
M>3+Y="I8=A$#=<U"6<W!61'_="I6=@8$&G<3(P7"L%G!.OETM_H)6,D&!"'_
M=*]W(P7"QUD^(#+Z="'[=`8(MWZ/=R,%PMA9G^8!3P8$$?]T(0-UMQJ>$A,C
M!<+M67G>`,((6B'[=#0A^G0UPM)9R2'Z=#7*.EHA^W0&"+=^CW<C!<(56I]/
M!@01_W0A`W6W&HX2$R,%PBA:><X`P@A:P_Q9!@01_W0A`W6W&HX2$R,%PD-:
MR<4J6'8&!!$#=7X2(Q,%PE9:*E9V!@01_W1^$B,3!<)F6@8$(?MTKW<C!<)T
M6CX@,OIT(?MT!@BW?H]W(P7"A5K2L%H&!!'[="$#=;<:CA(3(P7"F5H&!!K.
M`!+2L%H3!<*D6B'Z=#7"?UHJ5G81^W0&!!IW$R,%PK]:P<G-,UC*VEHA``"O
MR<TS6,K/6B$!`*\\R<TS6/K:6L//6LTS6/K:6LK:6L//6LTS6/K/6L/:6LTS
M6/K/6LK/6L/:6NLJ5G9S(W(C-@`C-@#)ZRI6=G,C<B-ZM_(26S;_(S;_R2I6
M=EXC5NO)R<UD*-+_(2X`.>7-H5<`````X<V[5R$D`#GK(00`.7,C<B$(`#GE
M(3P`.5XC5M7-PSG1T2$(`#GE(68`Y<V*.='1ZR$&`#ES(W(A!@`Y?B.VPFY<
M(2X`.>4A!@`Y7B-6ZUXC5B%I"QG-"EO-DU>`40$`S4U:X<V[5R$$`#E>(U;K
M(R->%@`A!`#-C2D1"@#-6RGE(08`.5XC5NLC(UX6`"$/`,U3*-$9ZR$L`#ES
M(W(A+@`YY2$N`#E>(U;KS0I;S9-7$`X``,U-6LWZ5^'ES:A7S618X<V[5R$$
M`#E>(U;K(R,C7A8`(00`S8TI$0H`S5LIY2$&`#E>(U;K(R,C7A8`(0\`S5,H
MT1GK(2P`.7,C<B$N`#GE(2X`.5XC5NO-"EO-DU<\````S4U:S?I7X>7-J%?-
M9%CAS;M7(3P`.7XCML*`7"$N`#G-J%?)(3P`.5XC5M4A,``YS:A7X<V[5\G-
M9"C2_R$N`#GES:%7`````.'-NU<A(``YZR$$`#ES(W(A"``YY2$\`#E>(U;5
MS<,YT=$A"``YY2%F`.7-BCG1T>LA!@`Y<R-R(08`.7XCML+.72$N`#GE(08`
M.5XC5NM>(U8A:0L9S0I;S9-7@%$!`,U-6N'-NU<A!``Y7B-6ZR,C7A8`(00`
MS8TI$0H`S5LIY2$&`#E>(U;K(R->%@`A#P#-4RC1&>LA+``Y<R-R(2X`.>4A
M+@`Y7B-6Z\T*6\V35Q`.``#-35K-^E?AY<VH5\UD6.'-NU<A!``Y7B-6ZR,C
M(UX6`"$$`,V-*1$*`,U;*>4A!@`Y7B-6ZR,C(UX6`"$/`,U3*-$9ZR$L`#ES
M(W(A+@`YY2$N`#E>(U;KS0I;S9-7/````,U-6LWZ5^'ES:A7S618X<V[5R$\
M`#E^([;"X%TA+@`YS:A7R2$\`#E>(U;5(3``.<VH5^'-NU?)S60H```A#``Y
M7B-6U<T_7M$A#``Y7B-6(00`&>7-H5<`````X<V[5R$``.4A$``Y7B-6Z]%S
M(W(A``#E(1``.5XC5NLC(]%S(W+)S60H^/\A!W7E(6D`Y<V*.='1ZR$$`#ES
M(W(A"``YY2H'=1%I"QG-"EO-DU>`40$`S4U:X<V[5SH)=6\F`!$$`.O-C2D1
M"@#-6RGE.@EU;R8`$0\`S5,HT1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-"EO-
MDU<0#@``S4U:S?I7X>7-J%?-9%CAS;M7.@IU;R8`$00`Z\V-*1$*`,U;*>4Z
M"G5O)@`1#P#-4RC1&>LA!@`Y<R-R(0@`.>4A"``Y7B-6Z\T*6\V35SP```#-
M35K-^E?AY<VH5\UD6.'-NU<A!``Y7B-6(00`S8TI$0H`S5LIY2$&`#E>(U8A
M#P#-4RC1&>LA!@`Y<R-R(0@`.>4A"``Y7B-6Z\T*6\WZ5^'ES:A7S618X<V[
M5R$4`#E^([;">%\A"``YS:A7R2$4`#E>(U;5(0H`.<VH5^'-NU?)S60H```A
M#``Y7B-6U<VC7]'ES29ET<G-9"CH_R$``.LA!``Y<R-R(0``ZR$&`#ES(W(A
M$``YY2$&`#E>(U;KS1A;S9-7/````,U-6LW.5R$J`#E>(U;KS:A7S>97S7I8
MX<V[5R$0`#GES;QBT>7=X=UN#MUF#T1-(9=UZR$8`#ES(W+#*6`A&``YY7XC
M9F\1"``9Z^%S(W+K$?C_&2$8`#E>(U;K7B-6(0``S<(HREE@(1@`.5XC5NM>
M(U8A!@`Y?B-F;\VC*,)98,,28"$8`#E>(U;K7B-6(0``S<(HRD]BW6X*W68+
M$6P'&>LA%``Y<R-R(1@`.5XC5B$$`!E>(U8A%@`Y<R-RPZY@(18`.>5^(V9O
M$08`&>OA<R-RZQ'Z_QDA%@`Y7B-6ZWXCMLK88"$6`#E>(U;K7B-6(10`.7XC
M9F_-HRC"V&##EV`A%@`Y7B-6ZR,C7B-6U?WA(18`.5XC5B$$`!E>(U8A&@`Y
M<R-R_>7=Y<U38M'1Y?WA(1H`.5XC5M7=Y<U38M'1ZR$:`#ES(W(A&``Y7B-6
M(08`&5XC5NO#]F%@:?WET>O-WBC"66%@:?WET<VC*,J+8=UN!-UF!1$"`.O-
MPBC*BV%@:>LA&@`Y?B-F;\W=*,*/86!IZR$:`#E^(V9OS:,HRHMAW6X$W68%
M$0$`Z\W=*,*/8=WEX<G#!6)@:?WET>O-WBC"[V%@:?WET<VC*,JY8=UN!-UF
M!1$"`.O-PBC"[V%@:>LA&@`Y?B-F;\W=*,+O86!IZR$:`#E^(V9OS:,HRNMA
MW6X$W68%$0(`Z\W=*,+O8=WEX<G#!6+=Y>')S>(I`@`!`#)A``"28?)A(1``
M.>4A&@`Y7B-6ZR,C7B-6(1`.S5LIS1A;S?I7X>7-J%?-9%CAS;M7(1``.>7-
MO&+1Y=WAW>7A$1``&>5^(V9O(^OA<R-RZRO=Y>')S60H```A#``Y3B-&(0X`
M.5XC5M7=X=WEX1$Z`.O-PBC*C6(A"@`)7B-6U<TH9]$1D_X9W>71&>7=X2$,
M``E>(U;5(0X`"5XC5M7=Y>'1Z\VW*=$9$;P"&1$'`.O-]RCEW>7AT>O-MRG)
MS60H^/\A"``YY2$6`#E>(U;KS:A7S9-7@%$!`,V.6>'-NU<A!``YY2$6`#E>
M(U;KS:A7S9-7@%$!`,U46>'-NU<A"``YS:A7S9-7`````,W@6LI'8R$(`#GE
MS:%7@%$!`,WZ5^'ES:A7S618X<V[5R$$`#GES:%7`0```,WZ5^'ES:A7S7I8
MX<V[5R''=>7]X2$(`#G-J%?-DU<\````S8Y9S2M;Y?WEX2,CY?WA*RO1<R-R
M(0@`.<VH5\V35SP```#-5%G-*UOEW>'=Y>$1/`#KS?<HY?WEX2,CY?WA*RO1
M<R-R(3P`W>71S8DHY=WAW>7AY?WEX2,CY?WA*RO1<R-R(00`.<VH5\V35P0`
M<`#-9%C-DU<'````S8Y9S2M;(M-U(00`.<VH5\V35P````#-]5K*0V0A1@#E
MW>'#!&3=Y>$CY=WA*]WES2AGT<T86\W.5R$(`#G-J%?-YE?-]5K*0&0A!``Y
MY=WES2AGT<T86\WZ5^'ES:A7S7I8X<V[5\/\8\.+9"%&`.7=X<-49-WEX2OE
MW>$C(00`.<VH5\V35P````#-X%K*BV0A!``YY=WEX2OES2AGT<T86\WZ5^'E
MS:A7S618X<V[5\-,9-WEX2+1=2$$`#G-J%?-*UM$32+5==WES2AGT1%N`<VC
M*,JU9"$=`"(G=2$``.7=X</&9-WEX2/EW>$KW>7A*1$E=1E>(U;58&G1Z\W"
M*,KR9-WEX2D1)7497B-68&GKS;<I1$W#OF0A'``B)W5@:2/E_>7A(R/E_>$K
M*]%S(W+=Y>'E_>7A(R/E_>$K*]%S(W(A```BUW4AQW7)S60H```A"W5$32'3
M9N7=X=WEX2/EW>$K7A8`U6!I(T1-*]%S>K/*4F7#-F4A#``Y7B-6(0P`&5XC
M5B$#`,U;*1'M9AGEW>$A"W5$3=WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=
MX2M>%@#58&DC1$TKT7/=Y>$CY=WA*UX6`-5@:2-$32O1<V!I(T1-*R$,`#E>
M(U8A"``9Y?WA_6X`_68!$0,`S5LI$0-G&>7=X=WEX2/EW>$K7A8`U6!I(T1-
M*]%SW>7A(^7=X2M>%@#58&DC1$TKT7/=Y>$CY=WA*UX6`-5@:2-$32O1<_WE
MX2LKY?WA7B-6U<7-16?1T41-_>7A*ROE_>%>(U8A9``9Y<7-16?1T41-_>7A
M*ROE_>%>(U8A9``9Y<7-16?1T41-_>7A*ROE_>%>(U8A9``9Y<7-16?1T41-
M(0P`.5XC5B$*`!E>(U8A9`#-PBC*K&8A,@#K(0$`"7,A#``Y7B-6(0H`&5XC
M5B$P`!D1R`#KS<(HZR$"``ES(0(`4%D91$TA#``Y7B-6(0H`&5XC5B%D`!GE
MQ<U%9]'11$TA"W7)1&%Y($UO;B`P,"`P,#HP,#HP,"`Q.3`P"@!3=6Y-;VY4
M=6579614:'5&<FE3870`2F%N1F5B36%R07!R36%Y2G5N2G5L075G4V5P3V-T
M3F]V1&5C`,UD*```(0P`.5XC5B$$`,WW*,)!9R%N`<DA;0')S60H```A#``Y
M3B-&8&DC1$TK(0X`.5XC5B$*`,W"*,J+9R$.`#E>(U8A"@#-B2@1"@#KS?<H
M$3``&>5@:2-$32O1<\.79R$@`.5@:2-$32O1<R$.`#E>(U8A"@#-]R@1,``9
MY6!I(T1-*]%S8&G)S60H```A#@`Y7B-60DLA)`#EW>'#UV<A``#E8&DC1$TK
MT7/=Y>$KY=WA(Q$``.O-WBC*[&?#RV<A#@`Y7B-6U2$.`#E>(U;5S<,YT=$A
M#@`Y7B-6U2$/`.7-BCG1T<HM:"$.`#E>(U;5(18`Y<V*.='1RBUH(?__R2$`
M`,G-9"@``"$,`#E>(U;5(1``Y<V*.='1R<UD*```(0P`.5XC5M4A$P#ES8HY
MT=')S60H_O\A$@`Y7B-6(2$`&>LA!``Y<R-R(0X`.5XC5M4A&@#ES8HYT=$A
M$``Y7B-6U2$&`#E>(U;KT7,C<B$2`#E>(U;5(2(`Y<V*.='1R<UD*/[_(1(`
M.5XC5B$A`!GK(00`.7,C<B$.`#E>(U;5(1H`Y<V*.='1(1``.5XC5M4A!@`Y
M7B-6Z]%S(W(A$@`Y7B-6U2$A`.7-BCG1T<D`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````P,3(S-#4V-S@Y86)C9&5F````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````/-_`/P`````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````!4!&3>1.P4\`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````5`A%!K4FM2````````````````````````````
M````````````````````````````````````````````'P`<`!\`'@`?`!X`
M'P`?`!X`'P`>`!\`M@<%`$T!MP<Z`"\!``!W`"\!L@>0`0``LP<O`0``M`<O
M`3H````O`4$`OP=6`"\!P`=6`"\!P0=6`"\!``"0`0``OP=6`!`!P`=6`!`!
MP0=6`!`!``"0`0```0`!`#UU`0`"``$`3W4```,``0!G=0$`!``!`']U`0`%
M``$`?W4!`/__`````````````````````````````````````````0````0`
M```````!`0`!``````````$"``$`````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````#Q=/5T``!<.F4Z``````````$)+68@
M;6%K969I;&4@;F%M90H)+6D@9&]N)W0@:6=N;W)E(&5X:70@<W1A='5S"@DM
M;B!0<F5T96YD('1O(&UA:V4*"2UP(%!R:6YT(&%L;"!M86-R;W,@)B!T87)G
M971S"@DM<B!$;R!N;W0@=7-E(&EN8G5I;'0@<G5L97,*"2US($UA:V4@<VEL
M96YT;'D*"2UT(%1O=6-H(&9I;&5S(&EN<W1E860@;V8@;6%K:6YG('1H96T*
M```"``#/3`,```#/3`(``0`40`(```(!`!1``@```@$`%$`"```````%0```
M``````5`````````!4`````````%0`````````5`````````!4`````````%
M0`````````5````+2<=W`@`02<=W`@`522%W!0`:22%W!0`?22%W!0`D22%W
M!0`I22%W!``N22%W!``S22=W`P`X22=W`P```--W```"`@$`STP````````!
M`0`!3TL!````````````0`````````````````$`````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
7`````````````!H:&AH:&AH:&AH:&@`:
`
end
SHAR_EOF
if test 44823 -ne "`wc -c make.uue`"
then
echo shar: error transmitting make.uue '(should have been 44823 characters)'
fi
# End of shell archive
exit 0
--
Mike Kersenbrock
Tektronix Computer Aided Software Engineering
Aloha, Oregon
31-Jul-86 22:08:39-MDT,1090;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:08:25-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001925; 31 Jul 86 23:37 EDT
Date: Thu 31 Jul 86 21:37:16-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: Z-System Newsletters
To: info-cpm@AMSAA.ARPA
Message-ID: <12227222144.18.RCONN@SIMTEL20.ARPA>
In PD:<ZSYS.NEW> are the following Z-System Newsletters from Echelon.
The squeezed forms are also stored in PD:<ZSYS.Z-NEWS>, along with all
the other newsletters. I have been advised that Frank Gaude' at Echelon
has almost completed a complete index of these newsletters, and this index
will be mailed to the subscribers. It is over 30 pages long and
quite comprehensive.
PD:<ZSYS.NEW>
Bytes(SZ)
Z-NEWS.503.1 21792(7)
.504.1 19552(7)
.505.1 22241(7)
.506.1 21419(7)
.5Q3.1 13312(8)
.5Q4.1 12544(8)
.5Q5.1 13824(8)
.5Q6.1 13440(8)
Total of 63 pages in 8 files
-------
31-Jul-86 22:43:23-MDT,880;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:43:09-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001992; 1 Aug 86 0:05 EDT
Date: Thu 31 Jul 86 22:03:56-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: New Z-System Files
To: info-cpm@AMSAA.ARPA
Message-ID: <12227226998.18.RCONN@SIMTEL20.ARPA>
In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
Z3-WKBK.WQ - Installation Workbook for Z3
In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
VCED16.LBR - command-line editor
MOVE20.LBR - move files on same disk by changing user number
Z-RIP.LBR - quick installation routine
ZSIGPOL1.DOC - submitting to ZSIG
Z3TRBO12.LBR -
ZLUX24.LBR -
In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
VFILER41G.LBR - new VFILER
VMENU17.LBR -
LDR15.LBR -
ALIAS#1.LBR -
ZSYSTEM.INS - listing of Z-System programs from Echelon and ZSIG
-------
31-Jul-86 22:50:13-MDT,755;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:50:06-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a002035; 1 Aug 86 0:15 EDT
Date: Thu 31 Jul 86 22:15:54-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: More Z-System Files
To: info-cpm@AMSAA.ARPA
Message-ID: <12227229178.18.RCONN@SIMTEL20.ARPA>
In PD:<ZSYS.DOC> and <ZSYS.NEW>:
ZNODE.REQ - Requirements for becoming a Z-Node
ZNODES28.LST - Listing of Z-Nodes
In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
T3T-24-1.Z80 - Telephone Interface overlay for DC Hayes 2400
for Term III
In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
Z3KAYDSK.MSG
In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
Z3KEY14.LBR -
MKLINE.LBR -
WILDEX.MQC -
-------
31-Jul-86 23:07:26-MDT,712;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 23:07:18-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a002043; 1 Aug 86 0:17 EDT
Date: Thu 31 Jul 86 22:17:40-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: Previous Announcements
To: info-cpm@AMSAA.ARPA
Message-ID: <12227229499.18.RCONN@SIMTEL20.ARPA>
The files in PD:<ZSYS.NEW> are temporary ... subject to deletion
after a few weeks. NEW is provided as a convenience to Z-System users
who are keeping up with new software releases.
Thanks to Keith Petersen for his efforts in uploading the files
I just announced. Keith's work really is appreciated.
Rick Conn
-------