2-Jul-86 05:41:21-MDT,976;000000000000 Return-Path: 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: 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 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: 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: 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" 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: 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: 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: Sender: KPETERSEN@SIMTEL20.ARPA From: Keith Petersen 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 directories between 1-June-86 and 30-June-86. For a complete list of all files, get PD:CPM.CRCLST. FILES.DIR and CPM.IDX are also available in that directory. Filename Type Bytes CRC PD: RSX12.LBR.1 BINARY 40960 46A9H PD: MBAS521.MOD.1 ASCII 2414 0710H ZBASDEMO.LBR.1 BINARY 37248 16DAH PD: 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: P2DOS.LBR.1 BINARY 96512 8896H P2DOS.MSG.1 ASCII 817 3ADAH PD: 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: FATCAT24.LBR.1 BINARY 157824 05D4H FATCAT2X.BUG.1 ASCII 938 B414H KPRTLSTP.LBR.1 BINARY 27776 1137H PD: EPEX11.NQT.1 BINARY 1664 08F5H PD: SIDRSX11.LBR.1 BINARY 3968 411AH PD: SD68K.LBR.1 BINARY 27136 7CDEH PD: UNARC12.LBR.1 BINARY 104448 AC35H PD: AKA13.LBR.1 BINARY 12032 6F2EH PD: 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: SPELLBE4.LBR.1 BINARY 7424 9C5AH TTYPE3.LBR.1 BINARY 48128 E1FCH TYPTEACH.LBR.1 BINARY 26752 B6A2H PD: JUNBEST.LQT.1 BINARY 27776 0834H MAYBEST.LQT.1 BINARY 25728 C801H PD: BYONDZ80.TQT.1 BINARY 3200 B1F6H CD-DISKS.TQT.1 BINARY 2048 8BFEH PD: 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: NORADIO.601.1 ASCII 9013 59EAH PD: RATFOR.HQP.1 BINARY 12160 5924H PD: 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: 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: MBYE44.LBR.1 BINARY 83840 6937H PD: MEX114.REV.1 ASCII 7630 6EFEH MEX114KP.NQT.1 BINARY 5632 C978H PD: 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: ROYALOAK.DQR.1 BINARY 78976 AFF2H PD: 1200$87.MDM.1 ASCII 1736 3BCDH PD: M7-OVL29.LQT.1 BINARY 4096 D44DH PD: 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: 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: SQUPORT2.C70MODS.1 ASCII 1848 C111H PD: COMPRESS.TQT.1 BINARY 7296 014EH CRNCH12S.LBR.1 BINARY 55552 98C1H CRUNCH12.LBR.1 BINARY 48512 5CB7H PD: COMPRESS.TXT.1 ASCII 12480 32BDH PD: SWITCHIO.LBR.1 BINARY 9984 1368H PD: TMODEM.MAC.400 ASCII 129054 2229H PD: M100-XMD.LBR.1 BINARY 10496 BD64H M100LF.BAS.1 BINARY 1280 FE4AH PD: 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: 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: VDE21.HLP.1 ASCII 2715 3F01H VDE211.LBR.1 BINARY 47232 3C91H VDE21OVR.PQ8.1 BINARY 7936 657BH PD: -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: OUTLN.LBR.1 BINARY 4992 4F51H WSGEMINI.LBR.1 BINARY 7168 B594H PD: 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: 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 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 / \ - remember space invaders?? 5-Jul-86 10:16:37-MDT,1736;000000000000 Return-Path: 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: 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: 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" 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: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: 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: 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 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: 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 " 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: 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" 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: 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" 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 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: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: 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: 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: 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 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 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!Y5^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$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS=`!V"K. M`1C?]<75Y2&H`4AO`$8VO7%U>7E$?``(8L!`1``[;#1.IX!3SJ<`8+5S=P"T3J? M`4\ZG0&#S=P"(?``S=`!*J`!S1T"X='!\4ZW0"W*!K5Q$#_@/*U"#!T2H!`!GI(M(`>#+=`'FW*`L^PS(X`"'[ M'R(Y`"&E`Q&@``$8`.VP(;T#$;@``0P`[;"O;V7=Y?WE M]6\F`.7-I@#Q_>'=X>'1P7=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')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("+:`.LBS`#IY2K& M`+?M0B+&`.U;Q`"W[5(9Z^':=1WML,DJQ@#ML"+&`-G)7B-6(]5>(U8C3B-& MXL: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%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$!`,`KRLP`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_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`"!'E?28`(SE.@3@<=^LA``!$[4(Y^>OE`^VPZ^$K&T\#[;CK M(_G=Z3X0PRD@W>'-R`17XG=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@!>[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"`)S88++2#VS7(+\3@"R[BWV>'1 MP=G)V7= M.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@@!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-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+ MV7- M@0I]X='!V>'1P>.\XS#C\=G)VJ/RLRUVZV*AWO.'0-T``-T'J( MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F`_9?2Z!E?7-]0K9S88/V'1P$LV'1P/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'1P-D6!R@!%)(P`:_^"3@"/@D\ M5]79_2%=`-WES>L0W>'13WH\RWL@$('R:Q#]-@``&`O^##@"/@O5S8`1T2@%S>,0&`?-V1`-\H\0>K40#"@&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!\?'Q_F#\8P_7<`_2-XY@]'Q=7E MRR7-APO+)/M2D1-X')_>7A7Q8` M&7XV`/XUV!WZG!$K?CQW_CK8-@`8\38Q(S8`#,G9`0``V>U$3]G9><:`_EK8_J8_V,7=Y7G-0!+=X=G!V8#*`CU MS;,2\3T@^/&W\I<*VMX+=#-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@!WRLA7``!)`#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,BY`#C(N(`RW;`/@,RT`#)/J_C(N0`X^4AP@`BX@#+KO7- MZ!3QMR@#S>$!X`?X(*#;^ M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(#`1_@,@V3K=`+$!-@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(WQ=7-:Q71P?XA M.`;+KA(3$.^O$N')W2%=`-U^`+?(!@#^+<`$W2/).`7=?@"WR#X0,M``-\GE MS6L5RZ[A=\D^KT_%S?`5P'!S386V`79S(\*V7K#@#%U$T\!@H_@8H%>$&`,7E/%^([7-QA;AP2,0]>D^#;?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%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=WEQLJY@`T(`(C-`L8PRKB`!$M`!E.(T81VO\9<2-P M$?S_&58K7NNW[4+0ZW$C<,G!T>U3X@#%YL.$\T%`#S`&#_]X2K2``80S>(%KQ+A_>7-3!S` MYLA7``!#`#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@!. M`-U6`=WE&!M-1-UN`-UF`=WEW1G==0#==`'=<0+=<`/=Y=$J^`!S(W+1*O(` M7!"=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#]=`'='=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;`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(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`+<@!$17`#M M4NLJZ`!S(W(8H\8`[5\RRP#)Z]WAP>%XL2@+'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("?$1`0`8$3K0 M`+?(W>%?%@$8!=WA7Q8"U'M2\P`[4(!%0`)(LX` MMR`'U=7ES=D`T7JW(!3-``)>0PT*57-E4<(0``ZRI/?7,C4A@`#1S(U;KY2$``-'-D@;+14J"B'1S>`&Y2H((>4A"`#1S>`&T7VC;\M%RIDB(4M]Y2&"`,WE M'"$``.LJ2WUS(W(J3WWE(0``T(%S9L4S;H7$%5U96YC M;V1I;F<@9FEL92`A1W[-.@4A``#-JA?-&R`A+@!E+@'E(4=^S3H%S;(((N!\ M*N!\Y2$``-'-?P;+1(%P]LC(4=^S3H%(0$`Y2K@ M?"O-:P@&4"'V?(%(8]\Y2$!`-$9;B8` MY(%PUTD(8]\S3H% M!E`A]GW-X@4JX'PCT1O#!20A+@!E+@'E(?9]S3H%S;((Y2$``-'-?P;+14A(`#1&>7-)R8A``#E*J-]*]'-9@9ZL\JM)M4BA'PA8WWE*H1\T1EN M)@#ES24A 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&>OA4A`@#1&>4A8'WE(0$`T1EN)@#E(0(`T4A`@#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``#1S4A``#1 MSX!;P`! ` end 15-Jul-86 13:56:42-MDT,23769;000000000000 Return-Path: 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 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 '); 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!Y5^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$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS= !V"K. M 1C?]<75Y2&H 4AO $8VO7%U>7E$? (8L! 1 [;#1.IX!3SJ< 8+5S=P"T3J? M 4\ZG0&#S=P"(? S= !*J !S1T"X='!\4ZW0"W*!K5Q$#_@/*U"#!T2H! !GI(M( >#+= 'FW* L^PS(X "'[ M'R(Y "&E Q&@ $8 .VP(;T#$;@ 0P [;"O;V7=Y?WE M]6\F .7-I@#Q_>'=X>'1P7=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')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("+: .LBS #IY2K& M +?M0B+& .U;Q "W[5(9Z^':=1WML,DJQ@#ML"+& -G)7B-6(]5>(U8C3B-& MXL: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%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$! , KRLP 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_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 "!'E?28 (SE.@3@<=^LA !$[4(Y^>OE ^VPZ^$K&T\#[;CK M(_G=Z3X0PRD@W>'-R 17XG=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@!>[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" )S88++2#VS7(+\3@"R[BWV>'1 MP=G)V7= M.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@@!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-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+ MV7- M@0I]X='!V>'1P>.\XS#C\=G)VJ/RLRUVZV*AWO.'0-T -T'J( MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F _9?2Z!E?7-]0K9S88/V'1P$LV'1P/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'1P-D6!R@!%)(P :_^"3@"/@D\ M5]79_2%= -WES>L0W>'13WH\RWL@$('R:Q#]-@ & O^##@"/@O5S8 1T2@%S>,0& ?-V1 -\H\0>K40#"@&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!\?'Q_F#\8P_7< _2-XY@]'Q=7E MRR7-APO+)/M2D1-X')_>7A7Q8 M&7XV /XUV!WZG!$K?CQW_CK8-@ 8\38Q(S8 #,G9 0 V>U$3]G9><: _EK8_J8_V,7=Y7G-0!+=X=G!V8#* CU MS;,2\3T@^/&W\I<*VMX+=#-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@!WRLA7 !) #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,BY #C(N( RW; /@,RT #)/J_C(N0 X^4AP@ BX@#+KO7- MZ!3QMR@#S>$!X ?X(*#;^ M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(# 1_@,@V3K= +$!-@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(WQ=7-:Q71P?XA M. ;+KA(3$.^O$N')W2%= -U^ +?(!@#^+< $W2/). 7=?@"WR#X0,M -\GE MS6L5RZ[A=\D^KT_%S? 5P'!S386V 79S(\*V7K#@#%U$T\!@H_@8H%>$& ,7E/%^([7-QA;AP2,0]>D^#;?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%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=WEQLJY@ T( (C- L8PRKB !$M !E.(T81VO\9<2-P M$?S_&58K7NNW[4+0ZW$C<,G!T>U3X@#%YL.$\T% #S &#_]X2K2 80S>(%KQ+A_>7-3!S MYLA7 !# #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@!. M -U6 =WE&!M-1-UN -UF =WEW1G==0#== '=<0+=< /=Y=$J^ !S(W+1*O( M7!"=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#]= '='=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; 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(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 +<@!$17 #M M4NLJZ !S(W(8H\8 [5\RRP#)Z]WAP>%XL2@+'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("?$1 0 8$3K0 M +?(W>%?%@$8!=WA7Q8"U'M2\P [4(!%0 )(LX MMR 'U=7ES=D T7JW(!3- )>0PT*57-E4A 0#-NAK- M&R JYGU>(U;K(N9]*N)](]$;PSPA(9A^S; :S1L@PV(C*@8A)@#+14A@@#-Y1PJZ'TBYGTA 0#E(0@ Y2$! -'KM^U2T4A@@#-Y1PA #K*N1]4A@ #1S M(U;KY2$ -'-D@;+1(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?4A'GW-.@7-L@CE(0 T??$B97SA(F=\ M_>7-304 !E J9WS-X@4AQ7SE*F5\7B-6Z]$9;B8 Y2$@ -'-?P;+1(%*F5\ M7B-6ZR/K*F5\7-/0@&4"'%?,WB!2$' ")I M?"%T?.4A:7SES=(D(?1]Y2%I?.7-TB3)(87RT7*^27-30423F]T:&EN M9R!T;R!D96-O9&4NS6,C(<5\Y87RT7*:";-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 Y7-U";E M(2 T>NW[5+KX7,J(GPCT1O#E2OA4A0'SE M(0$ T1EN)@#E(00 TBC-BB87RT7*\2C-304-06)N;W)M M86P@96YD+LUC(R')>^7-P",AR7O-.@7-HPCE(0, T\TZ!2$! .4A P#-:PC-304#96YDS: &RT7*H ;-304-06)N M;W)M86P@96YD+LUC(R'(?LUI%,T;("$: .4A 0#ES?\@R2;+1 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 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:] [d:] where the first "d:" is an optional source drive spec for 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:] [d:] where the first "d:" is an optional source drive spec for 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.#$", 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 7-$ 7&.F?1P4Q^ M_H H.+H@&7S&$&=[OB 1?,809WB^( EYUCI777CAI\EYQC!G?KC+C"#=XX-FTS90%?J?)_2&: \D5_2'P WJGR17](=L#>J?)S?(#..S^D"CP MNB@&_2%S QC3/I#](;,#R5H6 \WR Q0XSB@'_I HT+LH\17](+2!C2XD+2TM/B!#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<^O1PU:. \&#,LY'S #ZQGK*1#UZRD7*1WS$@%?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-2PL! M "*G[4++)79Q=7EW>7]Y=G-!0#9_>'=X>'1P=GAT<$( M\0C)S;0&Q0X)S8$&PPL)R08,(W[^("@#S;\&!/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;!^'!\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;!TM\M<0F"'O&,,V_!M')(,( 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 M96UO7)I9VAT("AC*2!3=&5V96X@1W)E96YB97)G(#8O,38O.#8@(#(P M,2TV-S M.#",.:!A%"",.: M!A$ DL8Y9VM^_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#*Q",D(/S <",T*!=A7S0H%V#+8",LZ'\LZ'\LZ'\LZ'U\8 M"PC-"@5?.M@(Y@]7>K/&_S_)VLI%RD7*1GR<75!A 6$2X '@#-404@#"P> M@,U1!2 $+!00[7TRM C1P:]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/X$(/ ^+ACR 2 ,(WZY* /-8@4%R'C^!"#Q/BY/ M&/$BT@@A BU @.$'AX?&@$\& !80"G4ZM0@]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< & 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) 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: 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 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: 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: From: Keith Petersen Sender: KPETERSEN@SIMTEL20.ARPA To: Bernie Eiben - LDP Workstations 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: 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) 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: 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) 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 list maintainer 19-Jul-86 11:21:52-MDT,926;000000000000 Return-Path: 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: 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 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 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 XXextern char *getenv(),*scdir(),*malloc(),*index(); XX#endif XX XX#ifdef ULTRIX XX#include XXextern char *getenv(),*scdir(),*malloc(),*index(); XX#endif XX XX#ifdef VMS XX#include 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 \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!@`Y7A XXM?B.VRJ`!W6X`W68!Y2$@`^7-.A?1T<-\`2H,5Q$P`.O-D17*R0$A"``YY(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*@97Y4A!@`YY(U;5(4($Y2$O5N7-71?1 XXMT=$A`0#)<@`E(U9"2R$U!>4A#@`Y7B-6U7-Z$,` XXM````X<6 XXMRLT$(?__"5X6`"$O`,V!%7-.A?1 XXMT<4A#@`Y7B-6U7-.A?1T2%067-.A?1T=')+@!E XXM8VAO('-H87(Z(&5X=')A8W1I;F<@)7,*`&EF('1E(U;5(1`".5XC5M7-S0C1T=%$3>4A___1S8$5RL8&Q<'(J!9*@Y7(R(.5RLJGE8C(IY6*RJ25B,BDE8K*J!9(@97Y2'J XXM!^4AHE;ES:\?T='1P\,&*A!7(R(05RLJH%GES>D*T$KP\,& XXMS;$6!P!V`"(&8P`M!F(`.`9D`$,&80!,!G``:@9U`((&E0;#Y@4J$%=\M%\M<(`!R'__U!9 XXMS7(5RCT'(?__4%G-7-,PC1RE8'(0(`Y(U;5S:P*T=%$3>4A___1S8$5PD,'(0``Y2IL6BD1 XXMI%D9T7,C7-#`'1(:19Y=WAPZ$'W>7A(R/EW>'=Y>%^([;*PP?=;@#= XXM9@'ES;T2T=UN`-UF`>7-6031PYD'(14(Y(U;5S6Q"T=$A``#EQLA#@`Y?B-F;QE>(U;K(CQ17A8`(2T`S8$5PAD)*CQ1(R(\47ZW XXMPAT)(?__R2H\45X6`"$M`,UR%%@#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(U;AS9(5RDP*(8@*(CQ1(2]6Y2$0`#E>(U;K7B-6U7]X7RUPC0+(00&.5XC5M4AG@[E(2]6Y%@`A7@#-LA^`$Y?B-F;\V2%7-UT+1T<,5#"$&`#GE(7-71'1(88`.>4ARP[E(?X!.>7-,@_1T=$AK@`Y XXMY2'.#N4A+U;ES5T7T='1(=X.Y2&P`#GES9P7T='K(?H%.7,C7-JD+1T='"!PXA``(Y7A8`(2X`S7(5RL,-(0$".5X6`"$N XXM`,UR%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%%@`A+@#-5^ XXM(V9O(^OA7-,QW1R7(`(U8A!@`Y(U;K7A8`U2$(`#E>(U;K7A8`X5^(V9O(^OA%@!ZL\+L#R$``.4A%@`Y7B-6Z]%SR2$&`#E> XXM(U;K7A8`(2``S7(5PE`0(08`.5XC5NM>%@`A"0#-(U;K7A8`(2<`S7(5PE`0(08`.5XC5NM>%@`A(@#- XXM(U;K7A8`>K/**Q$A!@`Y XXM7B-6ZUX6`"$@`,V!%(U;K7A8`(0D`S8$5RBL1(08`.5XC5NM> XXM%@`A7`#-@17**Q$A!@`Y7B-6ZUX6`"$G`,V!%(U;K7A8`(2(` XXMS8$5RBL1(08`.5XC5NM>%@`A"@#-@17**Q$A!@`Y7B-6ZUX6`"$-`,V!%7--4/1T41-?+7*OQ%@:>LA:@`YS886ZR'6`#E^(V9O&2/E(6P`.>7-;$+1 XXMT2$!`.LA!``Y(U;5S6Q"T=$A``#)(2X`Y2%L`#GES1-#T=%$37RURG<28&GK XXM(6H`.4AV``Y7B-6U4A=``YY4A XXMV``Y7B-6U7-;$+1T2$N`.LA<@`Y7-;$+1T2$``.LA=@`Y(U9"2\/4$F!I(T1-*V!I7A8`(00`.7-ZL\H%$R$$`#E>%@#5S7-# XXMT%@#5S<1#T>M@:7/#SA+)S3,5K/4A`A7ES9P7T='K(00`.7,C7- XXMG!?1T>LA!``YK/"71,A``#)(6`(.5XC5M4A"@@YYLA"`0YS7(5RO(3(08`.5XC5B'__\UR%4A#`@YYLA"`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`U7- XXMD4+1T1D1``3KS:P5RM$4(0@$.>4A"@`YY%,,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"%GVTRM]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?#M[YA]?RH,6*1W"?A9]M,GK?9-O?)IGM[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"(Q4A#@`Y7B-6U%@`A*P#- XXM$A#@`Y7B-6ZUX6`.O#PAC=Y>%\M(U;5S2PVT='K(0<`"7,A___-7A XXM?+7*;!@A`@##;Q@A`0`1``'-5!;E(0X`.5XC5M7-+#;1T>LA!P`)A#`````,T51"$'``E>%@#5S;4_ZR$(`#GYP]48(?K_ XXM(I99(0``R7=X1'__\V!%5@:2-$32O1<\,1&2$` XXM`.M@:7/=Y>$1___-LA#``Y?B-F;\UR%(U;5W>$A#@`YY7XC9F\KZ^%S(W(A``#-K17*RADA$``Y XXM7B-6U$KT7-@:1$*`,UR%<+*&<.` XXM&2$``-UU`&!I$?__S7(5RO$9W>7AZR$,`#E^(V9OS7(5RO$9(0``R2$,`#E> XXM(U;KR7AR!HA)%;E8&DC1$TK7A8`U4A#0#ES9P7%S9P XXM(U;5S5@;T>7=X1'__\UR%$1"`#KS7864%G-5!;)S3,5```A XXM#``Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*'!PA!@`)7A8`(0@`S2(5RHP;(?__ XXMR2'[_^5@:1$&`!G1Y6XF`,TB%>OA%@#5S:(U;5Q(U;5S=(=T=')S3,5```A&59$36!I$9)6Z\WF%LHR'6!I XXM$0L`&41-$?7_&>7-,QW1PQ(=RLA!``Y(U;KR%@`A!`#-(A7*/!XA!``)7B-6U6!I7B-6X(?O_Y6!I$08`&='E;B8` XXMS2(5Z^%S(0``ZV!I(U8A`0#-4A!P`)7A8`U(U;KR2$$``E>(U9@:7,C(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(U8A`0#- XXM(U;5S6,ST>LA!``YK/"BQ\A`0#K(0D`"7,C(U8A!``)(U;5(>`?Y(U;5*DA1 XXM(R)(42O17A(^7=X2M> XXM%@#5_>%ZL\H0)?WEX1$E`,UR%$CY=WA*UX6`-7]X?WEX1$P`,UR%("$P`.LA0@`Y$CY=WA*UX6`-7]X2$P`,V1%71&1'0_QGK(3X`.7,C7A(^7=X2M>%@#5_>$A,`#-D17*2"']Y>$1.0#KS9(5RD@A(4`` XXM.5XC5B$*`,TJ%OWET1D1T/\9ZR%``#ES(W+#!"']Y>$1;`#-$C XXMY=WA*UX6`-7]X2$Z`#GE(50`.>5^(V9O$00`&>OA7A$60`S7(5RKHA(3H`.>4A5``YY7XC9F\C(^OA$190#-$19@#-$19P#-5^(V9O(R/KX7,C7AP]$C(1H`.>4A"`#E(3X` XXM.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-``Y4A"@#E(3X`.LA"``Y^2$T`#ES XXM(W+#^",A&@`YY2$0`.4A/@`YS>]#S15$S7,EZR$(`#GY(30`.7,C$190#-(U;KY2$0`#GE XXM(0H`.']Y>'E(1L`.>LA-@`YLA-``Y?B-F;\V&%NLA.``Y5^(V9O*^OA5^ XXM(V9O(^OA(U8A0``Y?B-F;\VL%$KY=WAT7,A#``YY6!IS5]'S4%$X>7-[T/- XXMFT7AS0)$S6!$PB7AR(U;5W>$A#``YS>]# XXMS=I#`````,TG1\HI)B$,`#G-[T/-$A#``YY2$.`#G-[T/- XXMVD,!````S5)%S=I#____?\W71.'-`D1@:1$!`.O-7!;-7T?-%40A$``YS>]# XXMS2U$S=5%S7)'*?WET1D12E$97A8`U=WEX2OEW>'17-[T/-FT7AS0)$W>7%(1``.LA"``Y^>O)*@8` 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 XXM`0`BVU(JVU(1@`#KS:P5RE0JW6X`)@`1(`#-'#D2?=;@`F`'RUPL0GPU0JW6X`)@`1?`#-$CY=WA(M]2*@I7Y?WA(0$`1$W#N2C=;@`F`!$^`,UR%%>%@`A(`#-7]X=WEX2/EW>%^M\I_*-UN`"8`$2``S7(5PFLHW6X` XXM)@`1"0#-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%[.'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%7A(^7=X2LA XXM`@!$3<,9*-WES4DRT'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""OES=%!T2K=4GRURG0K*@A7Y2H*5^7->4'1T2K?4EX6`"$@`,UR%<+C*BK? XXM4EX6`"$)`,UR%%@`A(`#- XXM@17*'RM@:5X6`"$)`,V!%PLT=$A7`#E(0\`Y'#*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%(U;K?K?*=RTA#``Y7B-6ZR->%@`A.@#-4A$``Y7B-6Z]%S(0(`ZR$,`#GE?B-F;QGKX7,C(U;5(1``.5XC5M7-C2W1T5N)@`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!%(U;K7A8`(2H` XXMS7(5RILN(0T`.5XC5F!IS>86RFXN(0T`.5XC5F!IS>86RFLN(3\`Y2$/`#GE XXM?B-F;R/KX7,C7AS=D6RI@N(3\`Y2$/`#GE XXM?B-F;R/KX7,C5^ XXM(V9O(^OA(U8A!@`Y(U;5S>PLT=$A7`#E(1$`YLA$@`Y7-H"S1(0$`Y7=X2$&`#E>(U;K(UX6`"$Z`,UR%(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(`#-(U8A_P#-@17*HC`A!``Y7B-6(18`.7XC9F_-K!7"0R\A XXM``#K(0@`.7,C86RHHQ(0@`.5XC5M7]X$K_>7AZR$$`#E^(V9OS:P5RH7A*>LA%``Y?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&5XC5M7-N#'1 XXMT(U;K*>LA%``Y?B-F;QE>(U9"2_WEX2GK(10`.7XC9F\97B-6 XXMU2$*`#E>(U;K*>LA%@`Y?B-F;QG17A*>LA%@`Y?B-F;QG1%@#5(0X`.5XC5NM>%@#AS:P5 XXMRA(R(0``R2$,`#GE?B-F;R/KX7,C5^(V9O(^OA(U;5 XXMS6,ST>LA!@`YK/"+C,A``#)(0``Y2$&`#E>(U;5(0H`.5XC5M7-%T+1 XXMT=$A!@`Y7B-6Z\G-,Q4``"$,`#E>(U;5S8(TT(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(U;]Y>'- XXM XXM(U;K*2E061E$3?WEX>LA`@`)7A(N528&D1!``9R6!IZRKE4LUR%7-GS711$T1 XXM___-$A#``Y7B-6W7,"W7(#W>7A$00`&>7-@C31*N52 XXMR7=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&='-5^(V9O&>OA 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 XXM(U;5(0$#Y2$0`#E>(U;5S2PVT='1R$1"``9Y=WA(08`.>5^(V9O(^OA 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!LA"@`Y^2$``,VL XXM%(U8A``#-K!7" XXMO3(U;K*2DI$?!8&41- XXM(08`"5XC5M4A!``)7B-6Z\TR%='K(0P`.7,C(U;KRM21$W#,SA@:1$F`!E$ XXM36!I$1M4Z\WF%LI.."$E``E>%@!ZL\I8.,,K."'Y_R*662'__\G%(0X`.5XC XXM5M7-DB;1T(U8A!@`9 XXMT7,C(U8A`P#-(A4CZR$E``ES(0(`S2(5RDHY(7LYY2$4`#E>(U8A XXM!``9T7,C4A%``Y7B-6(00`&=%S(W(A``#)S3,5```A``#E(0X` XXM.5XC5B$E`!G1(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!@`YK/*VCHA!@`Y7B-6U2$4`#E>(U9@:1GE XXMW>7-*$'1T='K(00`.7,CLA%``Y?B-F;\WF%LHC.R$4`#E> XXM(U9@:%@`A@``9Y2$2`#E>(U;5S?=!T='1(20`"5X6`"$0`#E^ XXM(V9O&1%_`,TB%>LA)``)LJ)549(B558&GK.B14;R8`Z\V&%GTR)%1@:'#K#S=Y>$CY=WAW>7AZR$0`#E^(V9OS:P5RM\\(0P`.5XC XXM5M7-62;1Y6!I(T1-*]%S(1H`S7(5PM\\PZ4\W>7AR(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(U;5(10`.5XC5F!I&>7=YLA!``YK/* !@`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@:(U;5(1``.5XC5M4A)``) XXM7A8`(8``&>7-]T'1T='%(2(`YLA)``)7A(^7=X=WEX>LA$@`Y?B-F;\VL%(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%0`$`4D```(]`DD`A``#K(2,`"7,A#@`YS>]#S=I#`````,TG1\KN XXM0"$``.LA(0`)]#S=I#!P```,U21LA@``9(D)1#AK-!0#!Q2I`4>O-!0"WPFY!*D!1 XXM$2$`&33"8$$C-"I$42LB1%%]M,(V0<');R8`(I99P2I$44A2@`Y7B-6U4A3``Y7B-6U4A%P#ES5DFT=')S3,5W/\A!``YY2$R XXM`#E>(U;5S9(FT=$A!``YY2$3`.7-62;1T+'*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]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$B+U4JF%81`P`95BM>*]56 XXM*U[5*B]5Z>$B+U4JFE;1=R,5PE9$R2J85A8$?K?"(4$B,3!<+,1,')Q2J8 XXM5NLJFE8&!!JF$B,3!<+A1,')Q2J85NLJFE8&!!JV$B,3!<+V1,')Q2J85NLJ XXMFE8&!!JN$B,3!<(+1<')*IA6%@1^+W(U8C XXM?B-F;RGK*>O20$4C!<(X141-*IA64>!+=^'W$5PF5%R>4>!#=^'W$5PG=%R=4&!'X2 XXM(Q,%PHQ%X4^W\,-31,4JF%81.U7-B45Y,CE5*II6$4-5S8E%.CE5J3(Y53(Y52J:5A%# XXM5$A,C!<(T1GG>`,)/ XXM1B$[530A.E4UPAE&R2$Z537*@48A.U4&"+=^CWD3*(4A#`````.'-`D0A``#E(1`` XXM.5XC5NO1(U;K(R/1LA!``Y4J1U41: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$X7-[T/-JT3AS0)$(00`.5XC5B$$`,U<%A$*`,TJ%N4A XXM!@`Y7B-6(0\`S2(5T1GK(08`.7,C4A!@`Y7B-6Z\U?1\W:0SP```#-E$;-%40A*@`Y7B-6Z\WO XXM0\TM1,W!1.'-`D0A$``YY'=;@[=9@]$32'75>LA&``Y5^(V9O$0@`&>OA(U;K7B-6(08`.7XC9F_-(U8A!``97B-6(18`.7,C(U8A!``9 XXM7B-6(1H`.7,C7-VDO1T>7]X2$:`#E>(U;5W>7-VDO1T>LA&@`Y(U;KPWU+8&G]Y='KS:T5PN!*8&G]Y='-LA&@`Y?B-F;\UR%

')PXQ+8&G]Y='KS:T5PG9+8&G]Y='-LA&@`Y?B-F XXM;\UR%')PXQ+W>7AR]#S:M$X7=X=WEX1$0`!GE?B-F;R/KX7,C7AR(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='KS886R4A%@`Y7B-6Z\WO0\W:0X!1`0#-U47AS0)$(00` XXM.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-FT7AS0)$(0@`.$A"``YS>]#S=I#/````,W51$C(^7] XXMX2LKT7,C7A$3P`Z\W&%>7]Y>$C XXM(^7]X2LKT7,C7=X=WEX>7]Y>$C(^7]X2LKT7,C7A(^7=X2O=Y]#S2U$S3Q' XXMRL=-(00`.>7=Y'# XXMVTW=Y>$KY=WA(R$$`#G-[T/-VD,`````S2='RA).(00`.>7=Y>$KY$B$58A!``YS>]#S7)'1$TB%5;=Y'#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*RO17AY?WEX2,CY?WA*RO1'=Y>$CY=WA*UX6`-5@:2-$32O1(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%S7%S7%S7% XXMS(U8A"@`97B-6(60`S9$5RC-0(3(`ZR$!``ES(0P`.5XC XXM5B$*`!E>(U8A,``9$<@`Z\V1%>LA`@`) XXM(U8A9``9Y<7-S%#1T41-(4M5R41A>2!-;VX@,#`@,#`Z,#`Z,#`@,3DP,`H` XXM4W5N36]N5'5E5V5D5&AU1G)I4V%T`$IA;D9E8DUA4IU;DIU;$%U XXM9U-E<$]C=$YO=D1E8P#-,Q4``"$,`#E>(U8A!`#-QA7"R%`A;@')(6T!R(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`!\`'@`?`!\`'@`?`!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'1R86-T:6]N(&)Y("]B:6XO'1R86-T(&%BF5S(&]N(&5X=')A8W1I;VX*"0DM XXM9"`@=7-E('1H:7,@14]&(&1E;&EM:71E'1R86-T:6]N+"!I;F-L+B!E8VAO:6YG(&9I;&5S:7IE.0$``````-HU2%D"`-\U2%D"`.0UY%@%`.DUY%@% XXM`.XUY%@%`/,UY%@%`/@UY%@$`/TUY%@$``(VZE@#`` 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." 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: 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 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: 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: Sender: KPETERSEN@SIMTEL20.ARPA From: Keith Petersen To: Info-Cpm@AMSAA.ARPA, Mark Becker Subject: Public domain BASIC compiler for CP/M-80 Now available from SIMTEL20: Filename Type Bytes CRC Directory PD: 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: 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: Sender: Urs Zurbuchen From: Urs Zurbuchen 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: 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: (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: 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: 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 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: 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: Sender: KPETERSEN@SIMTEL20.ARPA From: Keith Petersen To: "Jeffrey D. Struven" 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 >[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: 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: 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: 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: 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: Sender: KPETERSEN@SIMTEL20.ARPA From: Keith Petersen 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: 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 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: 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 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: 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 '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: 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 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: 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 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: 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" 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: 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: 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: 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 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: 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 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: 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: 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: 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: 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: 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!" 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: 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: 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" 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: 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: 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: 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: 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: 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 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: 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 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: 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:. 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: 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: 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 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: 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 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: 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 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: 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 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 MPW(YS60H```JT7=\M<)7`2&(`>4A?`'ES4A MB@'ES;]UY2&J`>7-MRW1T2'__^7-OSW1(0X` M.5XC5M4A#@`Y7B-6U2&M`>4JT7?ES8XJZR$(`#GY(0``R4U!2T5`0$`N4U5" M`'<`36%K93H@8V%N)W0@8W)E871E(`!-04M%0$!`+E-50@`-"@`E(U8A!``97B-6U?WAPPX"_6X`_68!Y?WA M_>7A?+7*8@3];@3]9@7K(00`.7,C(U;K7B-6(00`.7,C%@`A0`#-HRC*G0(A`0#K M(0L`.7/#I@(A`0#K(0H`.7-@:2-$32O#9P(A"P`Y?K?"Q0(AY'7E(7($Y4A(`#ES?4M MT=%@:>7=X<,!`]WEX2/EW>$KW>7A?K?*6@/=;@`F`!$*`,VC*,H_`]WEX2-^ MM\H_`R$@`-UU`"$+`#E^M\(\`R'D=>4A=@3ES;LA"``YK/*7`0A"``Y7B-6(?__S:,HRLP#(08`.5XC5M4A?@3ES?8=T='#7`0A"``Y M7B-6U2I@=N4AD@3ES6LJT='1(0H`.7ZWROL#(>1UY2&D!.7-MRW1T<-4A"@#ES?4MT=$A%``Y7B-6(0H`&5X6`"$(`,U3*,)0!"$4`#E>(U;K(R-> M(U;5S0)5T<)0!"$4`#E>(U;K(R->(U;5*F!VY2&P!.7-:RK1T=$A"``Y7B-6 MU!#KO=V\F`'RUPO4$ M(;,`.5XC5NLC(UXC5M4AG07ES6LJT=$Z9W9O)@!\M4AM0`Y7B-6ZR,C7B-6 MU4A``#E(0@`.>7-KFC1T=$AA``YY2$``.4A"``YY M(U8A!@`9Y2$2`#E>(U;K(R->(U;5S31;T>'-NU M(U8A!``97B-6U=WAPUX&W6X`W68!Y=WAW>7A?+7*=@;=Y>$1!``9?B.VPG8& MPU4&W>7A?+7"B@8A$``Y7B-6U(U8A!@`9S:A7S1E8PLP&(1``.5XC5NLC(UXC5M4A2PCES?8=T=$A M$``Y7B-6(00`&5XC5M7=X7=X=WEX7RURF<'W6X"W68#1$W# M`P=@:5XC5D)+>+'*9`97S?Y:RD\'(08`. M(U8A!@`9S:A7XT<-'""$2`#E^([;"1P@A$``Y7B-6ZR,C M7B-6U2I@=N4A9PCES6LJT='1(0``R41O;B=T(&MN;W<@:&]W('1O(&UA:V4@ M)7,`0``E(U8A!``Y(U8A!``97B-6 MU2$&`#E>(U;K(R->(U;5(?4)Y2'O=>7-CBKK(0@`.?G#D@@A[W7E(0H`Y+'*]`DA`@`)7B-6U2'^">4A[W7ES8XJT='1 M(00`"5XC5M7]X<,L"?UN`/UF`>7]X?WEX7RURN0)(>]UY2$Z`.7-S2_1T?UN M`OUF`^7=X<-6"=UN`-UF`>7=X=WEX7RURGL)W6X"W68#(R->(U;5(0,*Y2'O M=>7-CBK1T='#30DA[W7E(0H`Y]U MY4A"@#ES%@`A`0#- M4RC*0`HA#``Y7B-6ZR,C7B-6U2'#"N7-]AW1T2$!`.4A#@`Y7B-6(0H`&='E M;B8`S84IZ^%S(0P`.5XC5B$$`!E>(U;5W>'#=PK=;@#=9@'EW>'=Y>%\M(U9"2WBQRJ4*(0(`"5XC5M7-#0K1PXH*PVX*(?[_ MY2$.`#E>(U8A"@`9T>5N)@#-4RCKX7/)0VER8W5L87(@9&5P96YD96YC>2!F M+'*``O%S0T*T'#-PO=;@#= M9@'EW>'=Y>%\M(U9"2WBQRG,+(0@`Y2$"``E> M(U8A"@`9T>5N)@#-A2GKX7/#2@O#+@O)+E!214-)3U53`,UD*```*N1W1$TA MY'?EW>'#I`M@:5XC5D)+W6X`W68!Y=WA>+'*QPLA`@`)7B-6U2$.`#E>(U;5 MS5X3T='"Q`M@:(U;5_>7-)5;1T?WEX>LA`@`)T,Y7A?B.VRMP,P\<,8&G==0#==`$A#@`Y7B-6Z\E.;R!M96UO M5^(V9O(^OA7-]AW1(0``ZV!I M(U;5 M_>7-)5;1T?WEX>LA`@`)(U;5W>'#W0W= M;@#=9@'EW>'=Y>%^([;*Z0W#U`U@:=UU`-UT`2$.`#E>(U;KR4YO(&UE;6]R M>2!F;W(@8V]M;6%N9`!.;R!M96UO%@:5XC5D)+>+'* M=@Y@:1$$`!E^([;*T=$A!@#ES1%&T41-?+7"MPXA00_ES?8= MT2$``.M@:7,C(U8A`@`)%\M(U8A"@`9 MT>5N)@#-A2GKX7/)0V]M;6%N9',@9&5F:6YE9"!T=VEC92!F;W(@=&%R9V5T M("5S`$YO(&UE;6]R>2!F;W(@;&EN90#-9"CV_R$6`#E>(U;5(?-WY5^(V9O(^OALA"@`YK/*0!`A#``Y7B-6(0H`.7XC9F_-LBC*0!`A"@`Y7B-6 MZRM>%@`A7`#-HRC*0!`A"@`Y7B-6ZRM$32$*`#E>(U8A#``Y5^ M(V9O(^OA%@#58&DC1$TKT7-ZL\H]$,,8$,.W#R$*`#E^([;*_1`A M``#E(0P`.>5^(V9O(^OA(U;K7A8`U'M$A"@`Y7B-6U<7-8!31T2$6`#E>(U;5(?-WYLA"@`YK/* MF1$A#``Y7B-6(0H`.7XC9F_-LBC*F1$A"@`Y7B-6ZRM>%@`A7`#-HRC*F1$A M"@`Y7B-6ZRM$32$*`#E>(U8A#``Y5^(V9O(^OA%@#5 M8&DC1$TKT7-ZL\J6$<-Q$<,0$2$*`#E^([;"JQ$A2A/ES9X>T2$``.4A#``Y MY7XC9F\CZ^%S(W+K*]%S(0``ZR$&`#ES(W(A"@`YY(U;5S7H,T='K M(08`.7,C^7-(Q_1T<*2$CKS>V\F`!$)`,VC*,J2$B$$`#E> M(U;5(?-[Y^7-(Q_1T<*2$L-3$B$* M`#GES08BT>LA#``YK/*\!(A#``Y7B-6U M(U;5(0@`.5XC5M4A#``Y7B-6U%@#5S4%7T(U9"2WBQRBD4(0(`"5XC5M4A#@`Y7B-6U(U8A!``9 M7B-6Z\DA7Q3)`,UD*```*F)V1$W#=!1@:5XC5D)+>+'*HQ0A`@`)7B-6U2$. M`#E>(U;5S>Q5T='"H!0A!``)7B-6U7-]AW1*F)VZV!I%\M<+X%"%E%>7-]AW1(0P`.5XC5M7=Y7A MZR$"``ES(W(A#@`Y7B-6U%\M<(T%2%Y%>7-]AW1(0X` M.5XC5M7=Y7AZR$$``ES(W)@:2!F;W(@;6%C(U9"2R$.`#E>(U;K7B-6U=WA8&E^M\I6%V!I7A8`(20`S;(HRNH5 M8&DC1$TK7A8`U=WEX2/EW>$KT7,A$@`Y7B-6Z^5^(V9O*^OA%@`A*`#-HRC*,Q9@:2-$37ZWRC`68&E>%@`A*0#- MLBC*,!9@:5X6`-7]Y>$CY?WA*]%SPP46PUL68&E^M\)+%B$D`.7=Y>$CY=WA M*]%SPU878&E>%@#5_>7A(^7]X2O1(U;5S6`4T='K(00`.7,C M(U8A!@`9?K?*QQ8A!``Y7B-6ZR,C7B-6U2%N%^7-]AW1T2$!`.4A M!@`Y7B-6(08`&=%SW>7AY2$0`#E>(U;KT7,C(U;5(10`.5XC5M4A M"``Y7B-6(00`&5XC5M4A%``Y7B-6ULA"``Y^2$.`#E>(U;K7B-6U=WA M(0``Y2$&`#E>(U8A!@`9T7,A$@`Y7B-6ZUXC5B$``,W#*,I3%R&,%^7-GA[1 MPZD5(0``W74`W>7AY2$0`#E>(U;KT7,C2!R96-ULA"``Y^(U8A!0`Y5^ M(V9O*^OA(U8A``#-WBC* M#AHA$0`Y7B-6ZUXC5NM>%@`A+0#-HRC*#AHA#P`YY7XC9F\KZ^%S(W+K(R$1 M`#GE?B-F;R,CZ^%S(W+K*RM>(U9"2V!I(T1-?K?*"QI@:5X6`-7-+%?1RO48 M8&E>%@#5S7U7T(T4A#QWE(>\LA"``Y^<.7&B$E'>4JX'?E MS4A M-1WES6`4T=$A#P`Y?B.VRB\;(3T`Y2$3`#E>(U;K7B-6U(U;K7B-6U7-@0O1Y=WA MW6X*)@`1!`#-4RC*'=;@HF`!$$`,U3*,J3 M&R$!`'TRV7?-`0LZ9W9O)@!\M<*H&R$``'TR[W7-]AW1 MS=\*(0\`.7XCML+=&R$``.4J9';ES=`%T='K(04`.7,C M(U;K7B-6U5^(V9O(R/KX7,C4A:QWES0,!T=$A?AWE(7P=Y7-CBKK(0@` M.?DA`0#ES;\]TR(U;5(1(`.5XC5M4A[W7ES8XJZR$*`#GY M*MYW?+7*_!XJWG?E(17-CBK1T=$A[W7E(0H`Y4A&@`Y7B-6(0X`.7XC9F\9Y7-S%;1T7-S%;1T41-?+7*UA\A M`0`)7A8`8&ES8&DC1$U^M\+"'R$(`#E^([;*@"`A%@`Y7B-6(0H`.7XC9F\9 M1$W#^Q]@:2-$32M@:5X6`"$@`,VC*,(7(&!I7A8`(0D`S:,HRAH@P_4?8&GK M(18`.7XC9F_-MRGK(0H`.7XC9F_-MRDKZR$&`#ES(W(A!@`Y7B-6(0``S=XH MRH`@(18`.5XC5B$*`#E^(V9O&2-$36!IZR$&`#E^(V9O&5X6`&!I7-51[1*MYW(R+>=RLA"@#E(1@` M.5XC5B$,`#E^(V9O&>7-S%;1T41-?+7"QB`A^"'ES9X>T2'__PE>%@`A7`#- MHRC*!2$A``#E8&DK1$W1(U9"2R$C`.7%S%@`A7`#-HRC*F"$A#``Y7B-6ZROK(00` M.7,C(U9"2R$,`#GE?B-F;R/KX7,C(U9"2V!I7A8`U%@#5S157T(U;KY7XC9F\CZ^%S(W+K*\,+ M(B$,`#E>(U;K7B-6ZWZWPD\B(0``R2$,`#E>(U;K7B-60DLA#``Y7B-6ZUXC M5NM^M\J<(B$,`#E>(U;K7B-6ZUX6`-7-%5?1PIPB(0P`.5XC5NOE?B-F;R/K MX7,C(U;KY7XC9F\CZ^%S(W+K*]%S8&G)S60H```A M+@#E(0X`.5XC5M7-[E;1T7]X=WEX?WET>O-%RK*&"/=Y>$CY=WA*UX6`-5@:2-$32O1<\/T(B$` M`.M@:7,A\W?E(LA"@`Y M(R$``,DA"@`Y7B-6(00`&5XC5B$(`#ES(W+# MB",A"``Y7B-6ZUXC5B$(`#ES(W(A"``Y?B.VRL8E(0@`.5XC5NLC(UXC5B$& M`#ES(W+#NR,A!@`Y7B-6ZUXC5B$&`#ES(W(A!@`Y?B.VRL,E(08`.5XC5NLC M(UXC5NLC(UXC5B$$`#ES(W(A!``Y7B-6U7-2E;1T1DC$0`$Z\W" M*,H')"'6)>7-]AW1(?-W1$TA!``Y7B-6U=WAW>7A(^7=X2M>%@#58&DC1$TK MT7-ZL\HR),,6)&!I*T1-(_WEX>7=X=WEX2/EW>$K7A8`U6!I(T1-*]%S>K/* M6B3#/B0A\W?ES8$+T>LA"@`Y%@`A!`#-4RC*P"4A M\W=$32$.`#E>(U;5W>$A!``Y7B-6U7-]AW1W>7A(^7=X2M>%@#58&DC1$TKT7-ZL\K:),.^)&!I M*T1-(R$$`#E>(U;5W>'=Y>$CY=WA*UX6`-5@:2-$32O1(U8A!@`9S:A7S1E8PDPE(0P`.5XC5B$&`!GE M(0X`.5XC5NLC(UXC5M7--%O1X(U8A!@`9S:A7S1E8RL`E(0`` MY2$.`#E>(U;5S7H,T='K(08`.7,C(U8A!``97B-6(00`&5XC5M4A M"``Y7B-6U2$<`#E>(U;5S28.T='1(0P`.5XC5NLC(UXC5M4A`B;ES6`4T=$A M`0#)PZDCPW8C(0``R2H`+G-U9F9I>&5S`%-U9F9I>"!R=6QE('1O;R!L;VYG M`$EM<&QI8VET(&YA;64@=&]O(&QO;F<`/`#-9"CZ_R&T)^4AL"?ES6`4T=$A MP"?E(;DGY@S1T>LA M!``Y(U;5(0@`.5XC5M7->@S1T>LA M!``Y(U;5(0@`.5XC5M7->@S1T>LA M!``Y(U;5(0@`.5XC5M7->@S1T>LA M!``Y(U;5S28. MT='1R6-C8P!C8RUC`&-F;&%G'=Y?WEQ5XC5B-$32$``#GK.?G58&G-8RCKX?G!_>'=X>M\MLZ_W"W^G,I?;3)S2$IZWVTR7V3PJTH?)+*O"@A``"OR7V3PKPH?)+* MK2@A`0!]M,GK?*KZU2A]DWR:/SX`S@!O)@#)>@?F`6\F`,GK?*KZ[RA]DWR: M/@#.`&\F`,E\!^8!;R8`R7HR_W#-""DZ_W"W^G,I?+7)?+?R$RDO9WTO;R-Z MM_(A*2]7>R]?$\,A*<5$32$``#X0,OYP*>LIZ](T*2-]D6]\F&?23"D).OYP M/3+^<,(L*<%]M,D3.OYP/3+^<,(L*<%]M,G%1$TA```^$"GK*>O2:RD)/<)C M*<%]M,E]+V]\+VM[YA]?RK0I?+3R+"I\ M-Q]G?1]O'<*:*;3)ZWOF'U_*M"DI'<*O*7VTR>M]DV]\FF>UR>OAQ4XC1B/K M">M.(T8C>KC:V"E[N=+<*2,C&1E>(U;KP>GKX<5"2UXC5AMZM_H"*B-YOLK\ M*2,C(\/J*2-XOL+W*2-^(V9OP>GK?9-\FCX`/\X`;R8`R>M]DWR:/@#.`&\F M`,GK>^8?7\JT*7RW'V=]'V\=PBPJM,E\JF=]JV^TR>VPR=$A`@`YW>7]Y<75 M$0!Q!@9^$B,3!<)4*B%A*N/IP?WAW>%\M1U(@9Q(0X`.>4A M#@`Y7B-6U2&V*N7-+S/1T=')S60H```A#``Y7B-6ZR(&<2$0`#GE(1``.5XC M5M4AMBKES2\ST='1R(U;5S?4MT=')S60H```AV75$ M36!I$08`&7ZWROLJ8&D1"P`91$T14G;KS0DJRO@J(0``R(U;K M(UX6`"$K`,VC*.7=X2$.`#E>(U;K7A8`Z\/S*]WEX7RURBTK(0(`PS`K(0`` MY2$.`#E>(U;5S5U)T='K(0<`"7,A___-HRC*42LA``#)PP8LW>7A?+7*8BLA M`@##92LA`0`1``/-A2GE(0X`.5XC5M7-74G1T>LA!P`)%\M4A#@`Y7B-6U(I`P!R`!\K=P!4*V$`CROI*R$!`.LA!@`) M(U9"2R'9=>7-*RW1Y=WA$?__S;(HRG$LW>7A$0H`S;(HRG$LW>7AY6!I(T1- M*]%SPT(L(0``ZV!I<]WEX1'__\VC*,J9+&!IZR$,`#E^(V9OS:,HRIDL(0`` MR2$,`#E>(U;KR M*,K[+"$0`#E>(U;5S2LMT41-$?__S;(HROLL8&GEW>7A(^7=X2O1'K(0P`.7XC9F_-HRC*(BTA M``#)(0P`.5XC5NO)S60H```A#``Y3B-&Q'#7"U@:>5^ M(V9O*^OA')S60H```A M#``Y3B-&8&E^M\JI+2'D=>5@:2-$32M>%@#5S?4MT=$1___-HRC*IBTA___) MPW\M(>1UY2$*`.7-]2W1T%@#5S?4MT=$1___-HRC*[BTA___)P\,M(0``R(U;5W>$A?P!06(U;5S8DNT41-$?__S:,H MPG4N(0P`.5XC5M7-B2[1Y=WA$?__S:,HRGDN(?__R=WEX1$(`.O-IRE06%@`A"`#- M4RC*O2XA___)(?O_Y6!I$08`&='E;B8`S5,HZ^%S8&D1!``9?B.VPN,NQ(U;5(0<`"5X6`-7-V$S1T='EW>$1``#KS<,HRC4O MW>7A?+7"'"\A"`##'R\A$`#E8&D1!@`9T>5N)@#-A2GKX7,A___)(00`"5XC M5F!I7A&>LA`@`)]UY2$.`#E>(U;5S(U;58&D1"`#KS20JY(U8A_P#-4RCEQ(U;58&GE?B-F;R/KX7,C%@`A!`#-4RC*J#`A___EQ5^(V9OS84IZ^%S(W(A!@`)7A8`(0(` MS5,HRO$P*EIVY2$$``E>(U;KT7,C(U;K(EIV(0``ZR$&``ES(00` M.5XC5NO)S60H```A#``Y3B-&(08`"5X6`"$$`,U3*,IM,2$$``E>(U;58&E> M(U;AS;4A!``)7B-6U2$'``E>%@#5S110T='1$?__S:,HRFTQ(1`` MY6!I$08`&='E;B8`S84IZ^%S(?__R2$.`#E>(U8A___-HRC*IC$A^__E8&D1 M!@`9T>5N)@#-4RCKX7,A``#K8&ES(W(A`@`)%@#5S110T='1 M$?__S:,HPE0Q(0X`.5XC5NO)(00`"5XC5F!IOA(U;58&GE?B-F M;R/KX7,CLA!``)(U;K(EIV MP[PR(0D`"5XC5M7-E$;1ZR$$`#ES(W)ZL\*\,B$!`.LA"0`)(U;5W>'= MY>$CY=WA*UX6`-7]X7JSRD$X_>7A$24`S:,HRC8X(0``ZR$:`#ES(0$`ZR%$ M`#ES(W(A(`#K(4(`.7,C$1+0#-HRC*N#,A M``#K(40`.7,C$K7A8`U?WA_>7A$3``S:,HRL\S(3``ZR%"`#ES M(W(A``#K(3X`.7,C$K7A8`U?WA(3``S<(HRAXT_>7A$3D`Z\W# M*,H>-"$^`#E>(U8A"@#-6RG]Y=$9$=#_&>LA/@`Y7A$2X`S:,H MRGDT(0``ZR%``#ES(W+=Y>$CY=WA*UX6`-7]X2$P`,W"*,IY-/WEX1$Y`.O- MPRC*>30A0``Y7B-6(0H`S5LI_>71&1'0_QGK(4``.7,C$K7A8`U?WA(3H`.>4A5``YY7XC9F\1!``9Z^%S(W+K$?S_ M&$19`#-HRC*ZS0A.@`YY2%4`#GE?B-F;R,CZ^%S(W+K M*RM>(U;KS1A;X5^(V9O$0@`&>OA4A5``YY7XC9F\C(^OA'#`C!:RM4A"@#E(3X`.5^(V9O*^OA4A"@#E(3X`.4A"@`YS3-;S3-;S3-;ZR$.`#GY(0P`.>LA-``Y4A&P`YZR$V M`#ES(W+KT7/#*3?-XBD(`&\`7C5D`(0U=0#]-7@`(S9S`$DV90!K-F8`:S9C M`-\V[#8A&@`YZR$T`#E^(V9OS;*,J?-R%"`#E>(U;58&G-8RC1PVXW(0``ZR$V`#ES(W+# MO#5^(V9O(^OA%@#58&G-8RC1PZTW(40`.7XCML(S M."$^`#GE?B-F;ROKX7,C(U;5W>%@:'1'-NU?-&5C"6#C=Y>')S60H```A$``Y3B-&(1(`.5XC5M7= MX2$,`#G-J%?-DU<`````S>!:REHY(0P`.71&1$*<1E>%@#5W>7A*^7=X=%S(0P`.>5@ M:1$!`.O-C2G-&%O-^E?AY'-NU?=Y<4A$``YS:A7SO-!0#K M;R8`R(U9K8C8`(SX+-B`C/<+6.3X$-@`C/<+?.>L#"OXZ"SX`PA(Z"N9_ M_D':3#K^6](#.M9`PP\Z_F':3#K^>]),.M9@=P,#(QX('`H#_B[*+3JWRD8Z M'`PH#M\I&.LU3.G]#6(,DD4$E012Y)3@`D4$E012Y/550`S60H```A?P#E(8$` MY2$;.MUN`"8` M$0D`S:,HRN@ZW>7A(^7=X$BGW(J7G;E_>$A`0!$37A(^7=X5X6`"$@`,VC*,)K M.]UN`"8`$0D`S:,HRFX[PTH[W>7AY?WAW>7A(^7=X7ZWRK`[W6X`)@`1(`#- MHRC"G#O=;@`F`!$)`,VC*,JM.R$``.7=Y>$CY=WA*]%SP[`[PW0[>+'"ZCO] MY7-(4+1T=$1`0#-HRC*ZCLJFW(I$1MQ M&5XC5M7]X<7-R4K1>+'*+3PAM@'E_>7-/4G1T41-8&DI*2D1,7<97B-6(:Q, MS:,HRBH\(0`$Y6!I$0L`S5LI$>)U&=%S(W+#.CPA``#E_>7-74G1T41-8&D1 M___-HRC*8SPAF3WES=$_T?WES=$_T2&\/>7-T3_1(0H`Y7A(^7=X>4JFW(C(IMR*RD1&W$9T7,C M$CY=WA*\.8/-UN`"8`?+7*T3PA M``#EW>7A(^7=X2O1<\."/=UN`"8`$3(`S:,HR@`]W6X!)@`1/@#-HRC*`#W= MY>$CY=WA*R$"`$1-PTH[W>7->D71RC$](8``ZRJ;7-(4+1T='K*IMR&2*;4JFW(C(IMR*RD1&W$9T7,C%^M\J"/=UN`"8`$2``S:,HPFX]W6X`)@`1"0#-HRC*?STA``#EW>7A(^7= MX2O1<\."/<-&/<.U.B$;<>4JFW+ES>X7T='ES;\]T7]X<-:/_WEX2,CY?WA*RO]Y>%^([;*MS_=Y>$1 MSP#KS1%@#5W>7A(^7=X2O1$1SP#KS1$KT7/#4#\A``#==0#=Y>$1 M@/\9?3*``,WT1(U9"2\-`0"$``.5@:2-$32O1<]WEX2OEW>$1 M``#KS<(HRE1`PS1`(0P`.5XC5NM^M\JH0"$,`#E>(U;K(UX6`"$Z`,VC*,JH M0"$,`#E>(U;K7A8`U(U;KT7,A`@#K(0P`.>5^(V9O M&>OA5^(V9O(^OA M(U8A M"@`9Y=WA(0\`.5XC5NM^M\H@0B$/`#E>(U;K7A8`(2``S;(HRB!"(0\`.5XC M5NM>%@`A*@#-HRC*S$$A#0`Y7B-68&G-%RK*GT$A#0`Y7B-68&G-%RK*G$$A M/P#E(0\`.>5^(V9O(^OA(U;=Y>'-"BK*R4$A M/P#E(0\`.>5^(V9O(^OA(U;K7A8`(2X`S:,H MRNU!8&GK(0T`.7,C(U;K7A8`U2$/`#GE?B-F;R/KX7,C(U;K*2DI*2D1@0`9Y=WA(08`.5XC5NLC7A8`(3H` MS:,HRN1"(08`.5XC5NM>%@#58&DC1$TKT7,A.@#E8&DC1$TKT7,A`0#E_>'# M]4+]Y>$CY?WA*_WEX1$+`.O-PRC*9$/=;@`F`!%_`,U3*!$@`,VR*,HM0]WE MX2/EW>$K7A8`U6!I(T1-*]%SPS5#W>7A(^7=X2O]Y>$1"`#-HRC*84/=;@`F M`!%_`,U3*!$@`,VC*,)D0R$N`.5@:2-$32O1<\/M0B$``.M@:7,A$@`Y7B-6 MU2$&`#GE?B-F;R/KX7,CLA%@`Y?B-F;QG1(U8A%@`Y?B-F M;\W=*,)T0B$``.LA"``Y5^(V9O(^OA7A(^7]X2O]Y>'K(00`.7XC M9F_-W2C*N$3]Y>$IZR$4`#E^(V9O&5XC5M4A"@`Y7B-6ZRGK(18`.7XC9F\9 M7B-6U7A*>LA%``Y M?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&=%S(W)@:>7]Y>$IZR$6`#E^ M(V9O&=%S(W+#%$3#X4,A!``Y7B-6Z\E.;W0@96YO=6=H(&UE;6]R>2!T;R!E M>'!A;F0@=VEL9&-A(U;K M7A8`U2$.`#E>(U;K7A8`X*,HA12$!`,DA#@`Y7B-6ZUX6`-4A#@`Y7B-6 MZUX6`.'-W2C*0T4A``#)(0P`.>5^(V9O(^OA(U;K?K?"=D4A``#)P_-$R5^(V9O(^OA%@!"2V!I$2H`S:,HPJM%8&D1/P#-HRC*KT4A`0#)>+'*OT5@:1$@`,VR M*,)_12$``,D1``'5Q0X:S04`T=4.%,T%`,'1M\KX`%!9#A#-!0`.&A&``,T% M`,,``2&``!GKP](`$<-%(<\`!C$:=Q,C!<+\10%<`!$``2H&`/G#SP#-9"@` M`"$,`#E>(U;5S91&T(U8A$@`Y?B-F;\U;*>LA!``Y5@:2,CT>5^(V9OZ\VW*>OA M7AZR$"``ES(W+=Y>$BI7)@:1$$`!G)8&GK M*J5RS:,HRFI'_>7-;D?11$U\M<)J1R$``,G#UT;)S60H```A#``Y7B-6ZRDI MY7=X2$,`#E>(U;=$1!``9 MYO-%RK")DC=;@#=9@'EW>7AT>O-"2K* M(TA@:=WET>O-&"K")DC=;@#=9@'E8&G1Z\T7*L(F2,/.1]UN`-UF`>4A`@`) M7B-6ZRDI4%D9T(U9@:7,CM@:7,C71&5!9S:,H MRK5((0(`"5XC5M7=Y>$C(]'E?B-F;QGKX7,C$BI7+)(00`S=-((WRUR"O)(0(`.5XC5BJG(U8A`0#-4RC*,TK];@`F M`-UU`'RUPC-*(?;_(LUW(?__R2$$`#E>(U8A`@#-4RC*6DK];@$F`-UU`7RU MPEI*(?;_(LUW(?__R2$$``E>(U;=(U;5_6X$_68%S6,HZR$* M`#GY(0``S=THRL!*(05`W74$W70%(?__R2$&`#E>(U;KR(U8A"P#-WBC*^$HA_?\BS7(U;KS6,HT>LA#``Y(U8A``/-4RC*]$O% M(18`Y(U8A``7-4R@1 M``7-HRC*(4PA^_\BS7TPAK$SE M(10`.5XC5B$$`!G1(U8A!``9T7,C*,H'32']_R+-=R'__\DA#``Y7B-6ZRDI*1$M=QE$32$0`#E> M(U;5(1``.5XC5M4A!@`)7B-6U6!I7A8`ZRD1VW,97B-6Z\UC*-'1T(U;5(10` M.5XC5F!I&>7=YLA!``YK/*"TXA!@`Y7B-6(00`.7XC9F_- MMRD1!P#KS:(U8A!P#-IRE061E$36!IZR$4`#E^(V9OS1(U9@:1GEW>7-74[1T='*5$Y@:-SY2$* M`.7-BCG1T2$*`.4A`@#ES8HYT=$ZY7-O)@`1&@#-HRC*.D\A``!],N1S(0`` MR2$-`.4ZY'-O)@`C?3+D-S M&>4A$@`Y7B-6ULZY'-O)@#KS;'=Y>'K(1``.7XC9F_-W2C* M$%`A#``Y7B-6U')S60H```A M#``Y7B-6(0``S=THPCE0(0P`.5XC5B$+`,W>*,I#4"']_R+-=R'__\DA#``Y M7B-6ZRDI*1$M=QE$32$0`#E>(U;5(1``.5XC5M4A!@`)7B-6U2$!``E>%@#K M*1'G=!E>(U;KS6,HT='1R7A$20`&7ZW MRN10W6XD)@#E(8``T>O-MRE$3>LA%``Y?B-F;\T8*LK,4"$4`#E>(U9"2\4A M%``Y7B-6U=WES9M1T='1RN10(?__R2$4`#E>(U9@:(U8A!``Y?B-F;\VW*1$'`.O-IRE061G)(08`.5XC5B$'`,VG M*5!9&41-8&GK(10`.7XC9F_-%RK*DE$A%``Y7B-68&G-MRGE(10`.5XC5F!I M&>7=Y(U;KR%@`A@``9YK/"9U)@:1$A`!GE?B-F;R/K MX7,C'#AU+=Y>$CY=WAW>7AZR$2`#E^ M(V9OS=THRN)28&DC1$TK7A8`(00`.7,C(U8A"@#-HRC*RE(A#0#E M(1``.5XC5M7-BCG1T2$$`#E>(U;5(1``.5XC5M7-BCG1T<.`4MWEX(U8A``#-W2C"(E,A#``Y7B-6(0L`S=XHPB)3(0P`.5XC5NLI*2D1 M,'<97A8`>K/",%,A_?\BS7?-H5?_____R2$,`#E>(U;K*2DI$3-W&5XC5D)+ M(1(`.5XC5NO#T5/%(1``Y(I`P`"`$]3`0"#4P``P%/#4R$``.LA(P`)!:RA]4(0``ZR$A``ES(W(A)``)4A3``Y7B-6U4A$P#ES8HYT=$A!``YY2%*`#E> M(U;5S<,YT=$A%``YY2%,`#E>(U;5S<,YT=$A!``YY2$7`.7-BCG1T%@#5S557T5@:2-$32M> M%@#A&1'0_QGEW>'#;U7]Y>%\M+'*$%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]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$B[W0J5G81 M`P`95BM>*]56*U[5*N]TZ>$B[W0J6';1=R,5P@]8R2I6=A8$?K?"VEHC%<(>6,//6J\]P$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(U8C?B-F;RGK*>O2^5@C!<+Q6$1-*E9V4>!+=^'W$5PAY9R>4>!#=^'W$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$#=$A,C M!<+M67G>`,((6B'[=#0A^G0UPM)9R2'Z=#7*.EHA^W0&"+=^CW7-H5<`````X(U;K(R,C7A8`(00`S8TI$0H`S5LIY2$&`#E>(U;K(R,C7A8`(0\`S5,H MT1GK(2P`.7,C7-J%?- M9%CAS;M7(3P`.7XCML*`7"$N`#G-J%?)(3P`.5XC5M4A,``YS:A7X(U;5 MS<,YT=$A"``YY2%F`.7-BCG1T>LA!@`Y(U8A:0L9S0I;S9-7@%$!`,U-6N'-NU(U;K(R->%@`A#P#-4RC1&>LA+``Y4A M+@`Y7B-6Z\T*6\V35Q`.``#-35K-^E?AY4A!@`Y7B-6ZR,C(UX6`"$/`,U3*-$9ZR$L`#ES M(W(A+@`YY2$N`#E>(U;KS0I;S9-7/````,U-6LWZ5^'ES:A7S618X(U;5(3``.7-H5<`````X`40$`S4U:X7-J%?-9%CAS;M7.@IU;R8`$00`Z\V-*1$*`,U;*>4Z M"G5O)@`1#P#-4RC1&>LA!@`Y4A"``Y7B-6Z\T*6\V35SP```#- M35K-^E?AY(U8A M#P#-4RC1&>LA!@`Y4A"``Y7B-6Z\T*6\WZ5^'ES:A7S618X%\A"``YS:A7R2$4`#E>(U;5(0H`.(U;KS1A;S9-7/````,U-6LW.5R$J`#E>(U;KS:A7S>97S7I8 MX7=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(U8A%@`Y5^(V9O M$08`&>OA(U;K7B-6(10`.7XC M9F_-HRC"V&##EV`A%@`Y7B-6ZR,C7B-6U?WA(18`.5XC5B$$`!E>(U8A&@`Y M7=YO-WBC"66%@:?WETLA&@`Y?B-F;\W=*,*/86!IZR$:`#E^(V9OS:,HRHMAW6X$W68% M$0$`Z\W=*,*/8=WEXO-WBC"[V%@:?WETLA&@`Y?B-F;\W=*,+O86!IZR$:`#E^(V9OS:,HRNMA MW6X$W68%$0(`Z\W=*,+O8=WEX')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')S60H```A#``Y3B-&(0X` M.5XC5M7=X=WEX1$Z`.O-PBC*C6(A"@`)7B-6U71&>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 M(U;KS:A7S9-7@%$!`,U46>'-NU7]X2$(`#G-J%?-DU<\````S8Y9S2M;Y?WEX2,CY?WA*RO1'=Y>$1/`#KS?71S8DHY=WAW>7AY?WEX2,CY?WA*RO1'#!&3=Y>$CY=WA*]WES2AGT$C(00`.$KW>7A*1$E=1E>(U;58&G1Z\W" M*,KR9-WEX2D1)7497B-68&GKS;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 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(U8A"@#-B2@1"@#KS?5@:2-$32O1<\.79R$@`.5@:2-$32O1(U8A"@#-]R@1,``9 MY6!I(T1-*]%S8&G)S60H```A#@`Y7B-60DLA)`#EW>'#UV$KY=WA(Q$``.O-WBC*[&?#RV(U;5S<,YT=$A M#@`Y7B-6U2$/`.7-BCG1T(U;5(18`Y(U;5(1``Y(U;5(1H`Y1.P4\````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``````````````````````5`A%!K4FM2```````````````````````````` M````````````````````````````````````````````'P`<`!\`'@`?`!X` M'P`?`!X`'P`>`!\`M@<%`$T!MP0`0``LP 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 Subject: Z-System Newsletters To: info-cpm@AMSAA.ARPA Message-ID: <12227222144.18.RCONN@SIMTEL20.ARPA> In PD: are the following Z-System Newsletters from Echelon. The squeezed forms are also stored in PD:, 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: 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: 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 Subject: New Z-System Files To: info-cpm@AMSAA.ARPA Message-ID: <12227226998.18.RCONN@SIMTEL20.ARPA> In PD: and : Z3-WKBK.WQ - Installation Workbook for Z3 In PD: and : 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: and : 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: 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 Subject: More Z-System Files To: info-cpm@AMSAA.ARPA Message-ID: <12227229178.18.RCONN@SIMTEL20.ARPA> In PD: and : ZNODE.REQ - Requirements for becoming a Z-Node ZNODES28.LST - Listing of Z-Nodes In PD: and : T3T-24-1.Z80 - Telephone Interface overlay for DC Hayes 2400 for Term III In PD: and : Z3KAYDSK.MSG In PD: and : Z3KEY14.LBR - MKLINE.LBR - WILDEX.MQC - ------- 31-Jul-86 23:07:26-MDT,712;000000000000 Return-Path: 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 Subject: Previous Announcements To: info-cpm@AMSAA.ARPA Message-ID: <12227229499.18.RCONN@SIMTEL20.ARPA> The files in PD: 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 -------