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!