home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / archives / cpm / 8607-1.txt < prev    next >
Text File  |  1993-02-12  |  294KB  |  7,602 lines

  1.  2-Jul-86 05:41:21-MDT,976;000000000000
  2. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 05:41:15-MDT
  4. Received: from wiscvm.arpa by AMSAA.ARPA id a001719; 2 Jul 86 7:04 EDT
  5. Received: from (NEUTAGE)NEUVM1.BITNET by WISCVM.ARPA on 07/02/86 at
  6.   06:06:03 CDT
  7. Date: Wed, 02 Jul 86 13:04:11 cet
  8. To:  INFO-CPM@AMSAA.ARPA
  9. From:  NEUTAGE%NEUVM1.BITNET@WISCVM.ARPA
  10. Subject:
  11.  
  12. HI FOLKS.
  13. Where do I find Mr. Nice Guy ?
  14. I've seen the "advertice" of some of the PD software one can get
  15. on the ARPA (DDN) side of the world.
  16. I'm not able to log on the ARPANET direct, and because there is no
  17. FTP between ARPANET and BITNET (it's a mail-only gateway) I can't get it
  18. that way either.
  19.  
  20. My question is: Is there a friendly user who wants to help little old me
  21. by sending some of the programs ? If sofileen please let me know.
  22.  
  23.  
  24. Kind regards from Copenhagen.                    TAGE
  25.  
  26. Userid         NEUTAGE
  27. node.id        NEUVM1.BITNET
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  2-Jul-86 08:31:52-MDT,2236;000000000000
  39. Return-Path: <info-cpm-request@AMSAA.ARPA>
  40. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 08:31:14-MDT
  41. Received: from csnet-relay.arpa by AMSAA.ARPA id a022306; 23 Jun 86 11:25 EDT
  42. Received: from gmr.com by csnet-relay.csnet id aa17892; 23 Jun 86 11:21 EDT
  43. Date:     Mon, 23 Jun 86 09:32 EST
  44. From:     RLH <HAAR%RCSMPA%gmr.com@CSNET-RELAY.ARPA>
  45. To:       info-cpm-request@AMSAA.ARPA
  46. Subject:  RE: HD64180 info req.
  47. Resent-Date:  Wed, 2 Jul 86 9:29:30 EDT
  48. Resent-From:  cpmlist@AMSAA.ARPA
  49. Resent-To:    info-cpm@CSNET-RELAY.ARPA
  50.  
  51.  
  52. Ken Brookner requested info on HD64180 systems. I know of two types:
  53.  
  54. Steve Ciarcia (of BYTE fame) thru the Circuit Cellar offers a single 
  55. board computer with HD64180, 256K RAM, floppy controller, etc. for $369,
  56. with Z-System software for $499. There are a couple of add-on boards with
  57. modem/voice communications and SCSI interface available.
  58.  
  59. There are a couple of companies offering S-100 bus boards with similar
  60. capabilities as well as access to other S-100 boards for additional
  61. hardware capabilities.
  62.  
  63. As far as software, you could also run CP/M since the HD64180 executes
  64. Z80 machine code directly. The HD64180 would be a natural for CP/M 3.0
  65. since it's extended addressing fits CP/M's idea of banked memory quite
  66. well. For those with a little more adventurous spirits, I would 
  67. recommend using the Z-system instead. It consists of ZCPR, a replacement
  68. for CP/M's CCP that can be used with a slightly modified CP/M BIOS, and
  69. ZRDOS, a complete replacement for the CP/M BDOS/BIOS. Z-system currently
  70. offers a number of nice features over CP/M. There are some new versions
  71. coming out that support banked memory and multi-tasking on the HD64180.
  72. (If anyone from Echelon is listening, would comment on availablity dates?)
  73. One of the big advantages of the Z-system is the large and continually
  74. growing collection of utility programs that take advantage of it's special
  75. features. And, as you might have gathered, it is alive and well with
  76. committed support, unlike CP/M's death under Digital Research.
  77.  
  78.  
  79.             Bob Haar
  80.  
  81. [usual disclaimer == these opinions are purely my own personal ones, not
  82. that of my employer, my wife and kids, or the guinea pig.]
  83.  2-Jul-86 12:32:54-MDT,994;000000000000
  84. Return-Path: <info-cpm-request@AMSAA.ARPA>
  85. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 12:32:46-MDT
  86. Received: from brl-aos.arpa by AMSAA.ARPA id ab00280; 2 Jul 86 13:43 EDT
  87. Received: from hi-multics.arpa by AOS.BRL.ARPA id a010435; 2 Jul 86 13:34 EDT
  88. Acknowledge-To:  Dearden@HI-MULTICS.ARPA
  89. Date:  Wed, 2 Jul 86 09:47 CDT
  90. From:  Dearden@HI-MULTICS.ARPA
  91. Subject:  Re: uuen/de code and software exchange
  92. To:  info-cpm@BRL.ARPA
  93. Message-ID:  <860702144750.866991@HI-MULTICS.ARPA>
  94.  
  95. I'm not in favor of binary only public domain software.  There are too
  96. many brain-damaged idiots out there that think a good joke is to write a
  97. program to trash the system, call it something else, and release it to
  98. the public domain with a name that sounds like it does something great.
  99. I like to see what I'm getting, and I trust no one.
  100.  
  101. Besides, if you don't have the source, you can't play with the operation
  102. of the code if you are so inclined.
  103.  
  104. John Dearden -at Hi-Multics
  105.  2-Jul-86 21:29:23-MDT,896;000000000000
  106. Return-Path: <info-cpm-request@AMSAA.ARPA>
  107. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 21:29:17-MDT
  108. Received: from brl-smoke.arpa by AMSAA.ARPA id a008451; 2 Jul 86 22:23 EDT
  109. Received: from USENET by SMOKE.BRL.ARPA id a009107; 2 Jul 86 22:10 EDT
  110. From: "Nicholas B. Mason" <mason%noscvax.uucp@BRL.ARPA>
  111. Newsgroups: net.micro.cpm
  112. Subject: Spread sheet for cpm wanted
  113. Message-ID: <550@noscvax.UUCP>
  114. Date: 2 Jul 86 20:28:24 GMT
  115. Keywords: spreadsheet, cpm, Eagle pc
  116. To:       info-cpm@AMSAA.ARPA
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  I have a friend who is looking for a GOOD, inexpensive
  124.  spread sheet program for an eagle PC running CPM.
  125.  
  126.  Does any one have suggestions?
  127.  
  128.  Thanks in advance:
  129.  
  130.  
  131.  
  132.       Nick Mason
  133.       NOSC    San Diego , CA
  134.           mason@nosc
  135.  
  136.     ihnp4  \
  137.         akgua   \
  138.         decvax   ------------------!sdcsvax!noscvax!mason
  139.         dcdwest /
  140.         ucbvax /
  141.  2-Jul-86 22:39:28-MDT,1183;000000000000
  142. Return-Path: <info-cpm-request@AMSAA.ARPA>
  143. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 22:39:13-MDT
  144. Received: from brl-aos.arpa by AMSAA.ARPA id a008644; 2 Jul 86 23:55 EDT
  145. Received: from hi-multics.arpa by AOS.BRL.ARPA id a024463; 2 Jul 86 23:56 EDT
  146. Acknowledge-To:  Wilkinson@HI-MULTICS.ARPA
  147. Date:  Wed, 2 Jul 86 22:29 CDT
  148. From:  Wilkinson@HI-MULTICS.ARPA
  149. Subject:  Cromenco Z-2 Computer
  150. To:  "{forum >udd>reflecs>bv>mtg>home.forum}"@HI-MULTICS.ARPA, 
  151.      "{forum >site>forum_dir>micros.forum}"@HI-MULTICS.ARPA, 
  152.      info-cpm@BRL.ARPA
  153. Message-ID:  <860703032913.565394@HI-MULTICS.ARPA>
  154.  
  155. A friend of mine has a line on a Cromenco Z-2 CPM computer system with
  156. PFD 8" drives and a Hazeltine 1500 terminal.  He would like to know:
  157.  1) is Cromenco still in business and if so how to get in touch with them.
  158.  2) where might there be software and hardware sources for programs and
  159. documentation for this system.
  160.  3) any ones opinions as to what they think of the system as a personal,
  161. get-to-know computers for a couple of retirees?
  162.           Richard Wilkinson  {Wilkinson@HI-MULTICS.ARPA}
  163.                     (612) 542-7788 (days after the 20th)
  164.  3-Jul-86 00:04:20-MDT,7020;000000000000
  165. Return-Path: <info-cpm-request@AMSAA.ARPA>
  166. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 00:03:30-MDT
  167. Received: from simtel20.arpa by AMSAA.ARPA id a008930; 3 Jul 86 1:02 EDT
  168. Date: Wed, 2 Jul 1986  23:03 MDT
  169. Message-ID: <KPETERSEN.12219635696.BABYL@SIMTEL20.ARPA>
  170. Sender: KPETERSEN@SIMTEL20.ARPA
  171. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  172. To:   Info-Cpm@AMSAA.ARPA
  173. Subject: New files uploaded to SIMTEL20 during June
  174.  
  175. The following is a list of new files added to SIMTEL20's <CPM.*>
  176. directories between 1-June-86 and 30-June-86.  For a complete list
  177. of all files, get PD:<CPM>CPM.CRCLST.  FILES.DIR and CPM.IDX are also
  178. available in that directory.
  179.  
  180.         Filename                Type     Bytes   CRC
  181.  
  182. PD:<CPM.22RSX>
  183.     RSX12.LBR.1        BINARY     40960  46A9H
  184.  
  185. PD:<CPM.BASIC>
  186.     MBAS521.MOD.1        ASCII      2414  0710H
  187.     ZBASDEMO.LBR.1        BINARY     37248  16DAH
  188.  
  189. PD:<CPM.BBSLISTS>
  190.     ABBL-07.LBR.1        BINARY     38272  330EH
  191.     BBSRGJUN.LBR.1        BINARY    139008  A61FH
  192.     FUBBS.JUN.1        ASCII     87410  F60FH
  193.     FUBBSX.BAS.1        ASCII      2553  2EB8H
  194.     GOVTBBS.LST.1        ASCII      8264  156FH
  195.     PDFT-066.LQT.1        BINARY     10880  4F35H
  196.     QXRCPM02.LQT.1        BINARY     10496  0E03H
  197.     RCPM076.LQT.1        BINARY     57088  6A7CH
  198.  
  199. PD:<CPM.BDOS>
  200.     P2DOS.LBR.1        BINARY     96512  8896H
  201.     P2DOS.MSG.1        ASCII       817  3ADAH
  202.  
  203. PD:<CPM.BYE5>
  204.     B5-CPM3.AQM.6        BINARY      3328  1690H
  205.     B5-CPM3.DQC.6        BINARY      4992  E008H
  206.     B5-DRIV3.AQM.6        BINARY      1920  C710H
  207.     B5-TIME.IQF.6        BINARY      1792  77EBH
  208.     B5IM-1.DQC.6        BINARY      4992  B057H
  209.     BDOS.AQM.5        BINARY      2176  A11DH
  210.     BYE5.DQC.6        BINARY     24448  64A9H
  211.     BYE5.HQS.6        BINARY     14336  2721H
  212.     BYE5-INS.LQT.3        BINARY      3712  9DCCH
  213.     BYE508.AQM.1        BINARY     85376  6B47H
  214.     BYE508.LBR.1        BINARY    157056  3DFDH
  215.     BYE508C.AQM.1        BINARY     46464  E349H
  216.     KMD20.LBR.1        BINARY     33152  DDB7H
  217.     LCHEAD.BYE.4        ASCII       829  9F63H
  218.     MERCURY.DQC.4        BINARY      2944  B778H
  219.     QX10-BYE.FQX.5        BINARY      2048  70C7H
  220.     TEST.BAS.5        ASCII       854  2614H
  221.     Z3&RCPM.FQX.2        BINARY      2560  9FBAH
  222.  
  223. PD:<CPM.CATLOG>
  224.     FATCAT24.LBR.1        BINARY    157824  05D4H
  225.     FATCAT2X.BUG.1        ASCII       938  B414H
  226.     KPRTLSTP.LBR.1        BINARY     27776  1137H
  227.  
  228. PD:<CPM.CCP>
  229.     EPEX11.NQT.1        BINARY      1664  08F5H
  230.  
  231. PD:<CPM.CPM3>
  232.     SIDRSX11.LBR.1        BINARY      3968  411AH
  233.  
  234. PD:<CPM.CPM68K>
  235.     SD68K.LBR.1        BINARY     27136  7CDEH
  236.  
  237. PD:<CPM.CPMLIB>
  238.     UNARC12.LBR.1        BINARY    104448  AC35H
  239.  
  240. PD:<CPM.DIRUTL>
  241.     AKA13.LBR.1        BINARY     12032  6F2EH
  242.  
  243. PD:<CPM.DIRUTL>
  244.     DA21C.LBR.1        BINARY      7296  E0DBH
  245.     SD116A.LBR.1        BINARY     83968  DD1EH
  246.     SSD.LBR.1        BINARY     70784  3664H
  247.     VOL-2.LBR.1        BINARY      9216  5E23H
  248.     DSKDRV16.LBR.1        BINARY     44288  9F32H
  249.  
  250. PD:<CPM.EDUCATION>
  251.     SPELLBE4.LBR.1        BINARY      7424  9C5AH
  252.     TTYPE3.LBR.1        BINARY     48128  E1FCH
  253.     TYPTEACH.LBR.1        BINARY     26752  B6A2H
  254.  
  255. PD:<CPM.FILE-DOCS>
  256.     JUNBEST.LQT.1        BINARY     27776  0834H
  257.     MAYBEST.LQT.1        BINARY     25728  C801H
  258.  
  259. PD:<CPM.GENDOC>
  260.     BYONDZ80.TQT.1        BINARY      3200  B1F6H
  261.     CD-DISKS.TQT.1        BINARY      2048  8BFEH
  262.  
  263. PD:<CPM.GENIE>
  264.     GENIE.BBS.1        ASCII      2020  EE26H
  265.     GENIE.CPM.1        ASCII      1030  F1ECH
  266.     GENIE.IBM.1        ASCII       999  A52AH
  267.     GENIE.IDX.1        ASCII      2017  1B11H
  268.     GENIE57.UQD.1        BINARY      3584  0186H
  269.  
  270. PD:<CPM.HAMRADIO>
  271.     NORADIO.601.1        ASCII      9013  59EAH
  272.  
  273. PD:<CPM.HELP>
  274.     RATFOR.HQP.1        BINARY     12160  5924H
  275.  
  276. PD:<CPM.KAYPRO>
  277.     DIRF37KP.LBR.1        BINARY     26624  BA55H
  278.     DVOAK.TQT.1        BINARY      2432  A95FH
  279.     HARDDISK.TQT.1        BINARY      3840  9477H
  280.     JUL86.MQG.1        BINARY     20096  F324H
  281.     K256BIOS.LBR.1        BINARY     48256  9F81H
  282.     KAY256.MSG.1        ASCII      1473  99DAH
  283.     KP2-EDIT.LBR.1        BINARY      6784  EF69H
  284.     M100-KP.LBR.1        BINARY     14592  7CDCH
  285.     TROMHINT.LBR.1        BINARY      2304  73A7H
  286.  
  287. PD:<CPM.LIST>
  288.     BRAD-WS.TQP.1        BINARY      1024  615BH
  289.     BRADCON.LBR.1        BINARY     47360  BF44H
  290.     BRADFORD.MQG.1        BINARY      3456  ECF0H
  291.     BRADZEX.LBR.1        BINARY      6272  52FDH
  292.     PRINT24A.LBR.1        BINARY      4480  EB9FH
  293.     PRNTCHAR.LBR.1        BINARY      8448  85D8H
  294.  
  295. PD:<CPM.MBBS>
  296.     MBYE44.LBR.1        BINARY     83840  6937H
  297.  
  298. PD:<CPM.MEX>
  299.     MEX114.REV.1        ASCII      7630  6EFEH
  300.     MEX114KP.NQT.1        BINARY      5632  C978H
  301.  
  302. PD:<CPM.MICNET>
  303.     BP.C.1            ASCII     17377  426BH
  304.     CISB.ANNOUNCE.1        ASCII      2289  FA5BH
  305.     CISB.MSG.1        ASCII      1092  1AEEH
  306.     DTE.C.1            ASCII      4126  64A3H
  307.  
  308. PD:<CPM.MISC>
  309.     ROYALOAK.DQR.1        BINARY     78976  AFF2H
  310.  
  311. PD:<CPM.MODEM>
  312.     1200$87.MDM.1        ASCII      1736  3BCDH
  313.  
  314. PD:<CPM.MODEM7>
  315.     M7-OVL29.LQT.1        BINARY      4096  D44DH
  316.  
  317. PD:<CPM.NUBYE>
  318.     NU-CLOCK.LBR.1        BINARY     76800  1815H
  319.     NUBY-INS.LBR.1        BINARY    144384  24BDH
  320.     NUBY-SUP.LBR.1        BINARY     33792  B257H
  321.     NUBYE100.LBR.1        BINARY    143232  9096H
  322.     NUKMD100.LBR.1        BINARY    124928  B9C2H
  323.  
  324. PD:<CPM.RCPM>
  325.     BBSETIQ.TQT.1        BINARY      4096  5694H
  326.     CD7.AQM.1        BINARY      9344  2CDDH
  327.     PBBS03.LBR.1        BINARY    212480  7FB2H
  328.     PBBSUAR1.LBR.1        BINARY     11776  9997H
  329.     PBBSUP-3.LBR.1        BINARY     89472  9C2EH
  330.     SYSOP.TQT.1        BINARY      2944  6260H
  331.     WIS105.LBR.1        BINARY     18176  99E6H
  332.     ZCMD26.LBR.1        BINARY     60032  AC63H
  333.  
  334. PD:<CPM.SQU-PORT>
  335.     SQUPORT2.C70MODS.1    ASCII      1848  C111H
  336.  
  337. PD:<CPM.SQUSQ>
  338.     COMPRESS.TQT.1        BINARY      7296  014EH
  339.     CRNCH12S.LBR.1        BINARY     55552  98C1H
  340.     CRUNCH12.LBR.1        BINARY     48512  5CB7H
  341.  
  342. PD:<CPM.STARTER-KIT>
  343.     COMPRESS.TXT.1        ASCII     12480  32BDH
  344.  
  345. PD:<CPM.SYSUTL>
  346.     SWITCHIO.LBR.1        BINARY      9984  1368H
  347.  
  348. PD:<CPM.TOPS-20>
  349.     TMODEM.MAC.400        ASCII    129054  2229H
  350.  
  351. PD:<CPM.TRS-80>
  352.     M100-XMD.LBR.1        BINARY     10496  BD64H
  353.     M100LF.BAS.1        BINARY      1280  FE4AH
  354.  
  355. PD:<CPM.TURBOPAS>
  356.     APLSND.PAS.1        ASCII      1901  D67EH
  357.     MAKEDOC.LBR.1        BINARY      4992  4644H
  358.     MAPSTATS.LBR.1        BINARY     65536  9189H
  359.     MULTASK.PQS.1        BINARY      5120  8C6AH
  360.     NICEPRNT.LBR.1        BINARY     18432  262BH
  361.     PAMPHLET.LBR.1        BINARY     21632  4BC0H
  362.     PASCSCR.LBR.1        BINARY     19968  8B2DH
  363.     PMLINK.LBR.1        BINARY     26240  ABF1H
  364.     RECIPE.PQS.1        BINARY      6656  D380H
  365.     RESCUE.LBR.1        BINARY     13568  BBBEH
  366.     SCRNGEN.LBR.1        BINARY     33280  C12CH
  367.     TP-UTIL.LBR.1        BINARY    102272  DDC6H
  368.     TURBSCR.LBR.1        BINARY     14976  E489H
  369.     WIPE.PAS.2        ASCII       541  4AEBH
  370.  
  371. PD:<CPM.TXTUTL>
  372.     FIX14.LBR.1        BINARY     13312  D7D3H
  373.     PRN36.LBR.1        BINARY     74112  8D8EH
  374.     SKIM.LBR.1        BINARY     13184  32BAH
  375.     TEXTCOM.LBR.1        BINARY     22528  00C2H
  376.     TXTL.LBR.1        BINARY     10880  452CH
  377.  
  378. PD:<CPM.VDOEDIT>
  379.     VDE21.HLP.1        ASCII      2715  3F01H
  380.     VDE211.LBR.1        BINARY     47232  3C91H
  381.     VDE21OVR.PQ8.1        BINARY      7936  657BH
  382.  
  383. PD:<CPM.WORLDBBS>
  384.     -README.JUNE86.1    ASCII       533  E072H
  385.     BBSAPI.TXT.1        ASCII      2801  9840H
  386.     BBSCAI.TXT.1        ASCII     15059  101FH
  387.     BBSCAN.TXT.1        ASCII      7275  2B30H
  388.     BBSEUR.TXT.1        ASCII      6521  623DH
  389.     BBSUSA.TXT.1        ASCII     28529  6034H
  390.     BBSUSC.TXT.1        ASCII     31527  416FH
  391.     BBSUSE.TXT.1        ASCII     16799  EFFEH
  392.     BBSUSN.TXT.1        ASCII     20274  7B5AH
  393.     BBSUSP.TXT.1        ASCII     32895  B8F2H
  394.     BBSUSS.TXT.1        ASCII     21280  7A5FH
  395.     BBSUSW.TXT.1        ASCII     21346  3229H
  396.  
  397. PD:<CPM.WSTAR>
  398.     OUTLN.LBR.1        BINARY      4992  4F51H
  399.     WSGEMINI.LBR.1        BINARY      7168  B594H
  400.  
  401. PD:<CPM.ZMODEM>
  402.     GZ..1            ASCII        15  0792H
  403.     RBSB.C.2        ASCII      4578  A4D4H
  404.     RZ.C.1            ASCII     25408  10B5H
  405.     RZSZZM.LBR.1        BINARY     72320  6224H
  406.     SZ.1.2            ASCII      8931  EFA6H
  407.     SZ.C.1            ASCII     26986  62E4H
  408.     SZ.MAN.3        ASCII     10468  EAB4H
  409.     ZMODEM.RQC.1        BINARY     10368  0AA5H
  410.  
  411. --Keith
  412.  3-Jul-86 12:49:59-MDT,1232;000000000000
  413. Return-Path: <info-cpm-request@AMSAA.ARPA>
  414. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 12:49:25-MDT
  415. Received: from brl-smoke.arpa by AMSAA.ARPA id a024899; 3 Jul 86 13:54 EDT
  416. Received: from USENET by SMOKE.BRL.ARPA id a029676; 3 Jul 86 13:46 EDT
  417. From: Richard Jennings <jennings%sage.cs.reading.ac.uk@BRL.ARPA>
  418. Newsgroups: net.micro.cpm
  419. Subject: Re: RAM DISK FOR C128
  420. Message-ID: <201@sage.cs.reading.Ac.Uk>
  421. Date: 1 Jul 86 22:23:04 GMT
  422. Posted: Tue Jul  1 22:23:04 1986
  423. To:       info-cpm@AMSAA.ARPA
  424.  
  425. In article <1754@brl-smoke.ARPA> PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA writes:
  426. > I HAVE A COMMODORE C128 WHICH I USE IN THE CP/M MODE MOSTLY. I WOULD VERY
  427. >MUCH LIKE TO KNOW IF ANY OF YOU C128 OWNERS OUT THERE HAVE THOUGHT OF USING
  428. >64K OF THIS MEMORY AS A RAM DISK WITH THE OTHER 64K AS PROGRAM MEMORY....
  429.  
  430. Errrmm, doesn't the C128 run CP/M Plus????!!!!!!
  431. If so, you need both 64K pages:- one for system and one for TPA -  this saves
  432. you warm-booting all the time and having a system eating up 1/4 of all your
  433. discs.
  434. --
  435. Richard Jennings (incomprehensible jargon follows):
  436.         _^_                   jennings@sage.cs.reading.UUCP
  437.        <o|o>
  438.         / \    - remember space invaders??
  439.  5-Jul-86 10:16:37-MDT,1736;000000000000
  440. Return-Path: <info-cpm-request@AMSAA.ARPA>
  441. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 10:16:27-MDT
  442. Received: from brl-smoke.arpa by AMSAA.ARPA id a004140; 5 Jul 86 11:45 EDT
  443. Received: from USENET by SMOKE.BRL.ARPA id a021597; 5 Jul 86 11:40 EDT
  444. From: hong%garfield.uucp@BRL.ARPA
  445. Newsgroups: net.micro.cpm
  446. Subject: CPM HELP
  447. Message-ID: <1324@garfield.UUCP>
  448. Date: 4 Jul 86 15:00:50 GMT
  449. Sender: perry%garfield.uucp@BRL.ARPA
  450. To:       info-cpm@AMSAA.ARPA
  451.  
  452. recently, i got more invloved with my apple with cpm.
  453. except some common commands like pip, stat and wordstar,
  454. i don't know much about cpm.
  455. i downloaded many startrek programs from toronto RCPM, i can't compile
  456. most of thee startrek games. some because of space limit or many
  457. errors. i, then, followed the simple doc with a game called 'strtrk/1.bas'
  458. which tells me it may compile with basic-e,(a public domain basic compiler
  459. which i also download from there). some problems meet, the startrek games
  460. i downloaded with source, some are not compatible with basic-e or the source
  461. file is damaged( i found some incomplete statements).
  462. i only succeed in compile on version with basic-e, can anyone give me
  463. some more info about basic-e, like the book.
  464. any better suggestions about a better basic compiler?
  465. any good public domain word processor you have used? send me the name
  466. of the program, so i can search through RCPM.
  467. now, i found that many good cpm programs are in public domain, can you
  468. suggest some of them?
  469. i have used modem7, mex, nulu ,d and cat.
  470. any apple users have successfully run/compile the bigtrek?
  471. is it possible for us to compile/run a big basic program like that in
  472. the 56K cpm v2.2 with an apple?
  473. thanks a lot.
  474. HONG
  475.  5-Jul-86 18:31:32-MDT,939;000000000000
  476. Return-Path: <info-cpm-request@AMSAA.ARPA>
  477. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 18:31:23-MDT
  478. Received: from brl-smoke.arpa by AMSAA.ARPA id a004943; 5 Jul 86 19:42 EDT
  479. Received: from USENET by SMOKE.BRL.ARPA id a023828; 5 Jul 86 19:40 EDT
  480. From: h1c%psuecl.bitnet@BRL.ARPA
  481. Newsgroups: net.micro.cpm
  482. Subject: Kermit for Epson QX-10 computer ?
  483. Message-ID: <302@PSUECL>
  484. Date: 5 Jul 86 08:56:30 GMT
  485. To:       info-cpm@AMSAA.ARPA
  486.  
  487.  
  488.         Can anyone tell me where I can find a kermit for Epson Qx-10
  489. computer ?   My machine runs CP/M-80 operating system version 2.2 and
  490. 2.25.  The main feature of this machine is that the computer terminal
  491. modeled after the TVI-920 terminal.  I also would like to know any
  492. communication programs can emulate VT-100 under this operating system.
  493.  
  494. Your reply will be much grateful.  Thanks in advance.
  495.  
  496.                         Heng Chang   Bitnet: H1C@PSUECL
  497.  
  498.      
  499.  6-Jul-86 10:49:28-MDT,2453;000000000000
  500. Return-Path: <info-cpm-request@AMSAA.ARPA>
  501. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 6 Jul 86 10:49:17-MDT
  502. Received: from brl-aos.arpa by AMSAA.ARPA id a006524; 6 Jul 86 12:13 EDT
  503. Received: from mit-mc.arpa by AOS.BRL.ARPA id a005849; 6 Jul 86 12:06 EDT
  504. Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 6 JUL 86  12:04:31 EDT
  505. Date: Sun,  6 Jul 86 12:05:14 EDT
  506. From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA>
  507. Subject: LE, SPERRY, CLK UTLS
  508. To: INFO-MICRO%MX.LCS.MIT.EDU@MIT-MC.ARPA, INFO-CPM%MX.LCS.MIT.EDU@MIT-MC.ARPA, 
  509.     info-ibmpc@USC-ISIB.ARPA
  510. cc: PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA
  511. Message-ID: <[MX.LCS.MIT.EDU].931509.860706.PLOUFF>
  512.  
  513. The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
  514. in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.
  515.  
  516. This ARC file contains the source and executable files for two
  517. utilities that will be useful to owners of Leading Edge, Model M
  518. and Sperry PC personal computers. (Maybe Model D also. See below.)
  519. They are:
  520.  
  521.     LE_MCLK   Reads the on-board battery backed-up clock
  522.           and sets the current clock to its values.
  523.           This code is intended to be executed in your
  524.           AUTOEXEC.BAT file.  The .COM file is only 28 bytes.
  525.  
  526.     SETCLK    Sets the date and time of the battery backed-up
  527.           clock and simultaneously updates the current clock.
  528.  
  529. The function of LE_MCLK is built into DOS 2.11 as supplied with
  530. the machine, and the v2.11 COMMAND.COM will update the battery
  531. clock with the internal DATE and TIME commands.  So, if you stick
  532. with DOS 2.11 you don't need these utilities.  However if you
  533. upgrade your DOS to 3.xx, you will find that it has no knowledge
  534. of the on-board battery backed-up clock.  These utilities will then
  535. do the job and restore full function to the use of the battery clock.
  536.  
  537. The programs use an undocumented feature of the on-board
  538. ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
  539. functions beyond that of the IBMPC ROM BIOS. This is fully explained
  540. in the documentation.
  541.  
  542. I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
  543. is identical to the one supplied with the Model M.  If so, then the
  544. ROM BIOS must also provide the same functionality for the additional
  545. INT 1AH functions  - so this code will probably work with a model D
  546. also.   Someone who has a Model D please let me know.  Reply to
  547. PLOUFF at MIT-MX since I am not on all of the mailing lists to which
  548. this is directed.
  549.  
  550.  8-Jul-86 11:41:18-MDT,854;000000000000
  551. Return-Path: <info-cpm-request@AMSAA.ARPA>
  552. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 8 Jul 86 11:41:03-MDT
  553. Received: from brl-aos.arpa by AMSAA.ARPA id a011500; 8 Jul 86 12:45 EDT
  554. Received: from xerox.arpa by AOS.BRL.ARPA id a016692; 8 Jul 86 12:43 EDT
  555. Received: from CheninBlanc.ms by ArpaGateway.ms ; 08 JUL 86 09:41:23 PDT
  556. Date: 8 Jul 86 09:41:19 PDT (Tuesday)
  557. From: CMadsen.ES@XEROX.ARPA
  558. Subject: Re: uuen/de code and software exchange
  559. In-reply-to: <860702144750.866991@HI-MULTICS.ARPA>
  560. To: Dearden@HI-MULTICS.ARPA
  561. cc: info-cpm@BRL.ARPA
  562. Message-ID: <860708-094123-1838@Xerox>
  563.  
  564. I agree with you.There are to many IDIOTS out there.Really I should say
  565. To many 
  566. Childish people on the net.Instead of using the Net as a tool;They
  567. rather screw it  up for everbody else.
  568.  
  569. I think the Sources should be given as will!!
  570.  
  571. --Carl
  572. 10-Jul-86 11:01:53-MDT,852;000000000000
  573. Return-Path: <info-cpm-request@AMSAA.ARPA>
  574. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 11:01:42-MDT
  575. Received: from brl-smoke.arpa by AMSAA.ARPA id a014900; 10 Jul 86 12:18 EDT
  576. Received: from USENET by SMOKE.BRL.ARPA id a019630; 10 Jul 86 12:17 EDT
  577. From: Sunil Bhargava <sunil@BRL-SMOKE.ARPA>
  578. Newsgroups: net.micro.cpm,net.micro.pc,net.wanted
  579. Subject: Re: Removal from mailing list.
  580. Message-ID: <2076@brl-smoke.ARPA>
  581. Date: 10 Jul 86 16:17:45 GMT
  582. Expires: 7/17/86
  583. Keywords: sale wanted
  584. To:       info-cpm@AMSAA.ARPA
  585.  
  586. I want a second hand baby blue board for an ibm pc.  That is the
  587. cpm emulation board for the pc.  I am willing to pay about $100 for
  588. one in perfect working condition, with manual and software.  Please
  589. reply to me directly since I am not on this mailing list.
  590.  
  591.    thanx
  592.  
  593. Reply-to:  sunil@brl.arpa
  594.  
  595. 10-Jul-86 15:56:41-MDT,509;000000000000
  596. Return-Path: <info-cpm-request@AMSAA.ARPA>
  597. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 15:56:35-MDT
  598. Received: from brl-smoke.arpa by AMSAA.ARPA id a023537; 10 Jul 86 17:19 EDT
  599. Received: from USENET by SMOKE.BRL.ARPA id a003503; 10 Jul 86 17:07 EDT
  600. From: "Virginia A. Kaste <ginny>" <ginny@BRL-SMOKE.ARPA>
  601. Newsgroups: net.micro.cpm
  602. Subject: testing distributions again
  603. Message-ID: <2094@brl-smoke.ARPA>
  604. Date: 10 Jul 86 21:07:48 GMT
  605. To:       info-cpm@AMSAA.ARPA
  606.  
  607.  
  608. for info-cpm
  609.  
  610. 10-Jul-86 18:15:39-MDT,778;000000000000
  611. Return-Path: <info-cpm-request@AMSAA.ARPA>
  612. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 18:15:26-MDT
  613. Received: from brl-smoke.arpa by AMSAA.ARPA id a024000; 10 Jul 86 19:45 EDT
  614. Received: from USENET by SMOKE.BRL.ARPA id a007586; 10 Jul 86 19:43 EDT
  615. From: "Steve Miller@ex6191" <miller%qantel.uucp@BRL.ARPA>
  616. Newsgroups: net.micro.68k,net.micro.cpm
  617. Subject: CPM 68K CCP
  618. Message-ID: <657@qantel.UUCP>
  619. Date: 9 Jul 86 03:59:25 GMT
  620. To:       info-cpm@AMSAA.ARPA
  621.  
  622.  
  623.     Does anyone know where I can get information on writing a
  624. new CCP for CP/M 68K Version 1.2. I called DRI and they don't have
  625. any information for the general public. I would like to add features
  626. much like ZCPR but in the CP/M 68K enviroment. Please Email any 
  627. information you may have.
  628. 10-Jul-86 20:09:59-MDT,2605;000000000000
  629. Return-Path: <info-cpm-request@AMSAA.ARPA>
  630. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 20:09:50-MDT
  631. Received: from mit-mc.arpa by AMSAA.ARPA id a024131; 10 Jul 86 21:26 EDT
  632. Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 10 JUL 86  21:28:22 EDT
  633. Date: Thu, 10 Jul 86 21:26:25 EDT
  634. From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@mit-mc.ARPA>
  635. Subject:  [PLOUFF%MX.LCS.MIT.EDU: LE, SPERRY, CLK UTLS]
  636. To: info-micro@BRL.ARPA, info-cpm@AMSAA.ARPA
  637. Message-ID: <[MX.LCS.MIT.EDU].932196.860710.PLOUFF>
  638.  
  639. Date: Sun,  6 Jul 86 12:05:14 EDT
  640. From: Robert L. Plouffe <PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA>
  641. To:   INFO-MICRO%MX.LCS.MIT.EDU at MIT-MC.ARPA,
  642.       INFO-CPM%MX.LCS.MIT.EDU at MIT-MC.ARPA,
  643.       info-ibmpc at USC-ISIB.ARPA
  644. cc:   PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA
  645. Re:   LE, SPERRY, CLK UTLS
  646.  
  647. The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
  648. in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.
  649.  
  650. This ARC file contains the source and executable files for two
  651. utilities that will be useful to owners of Leading Edge, Model M
  652. and Sperry PC personal computers. (Maybe Model D also. See below.)
  653. They are:
  654.  
  655.     LE_MCLK   Reads the on-board battery backed-up clock
  656.           and sets the current clock to its values.
  657.           This code is intended to be executed in your
  658.           AUTOEXEC.BAT file.  The .COM file is only 28 bytes.
  659.  
  660.     SETCLK    Sets the date and time of the battery backed-up
  661.           clock and simultaneously updates the current clock.
  662.  
  663. The function of LE_MCLK is built into DOS 2.11 as supplied with
  664. the machine, and the v2.11 COMMAND.COM will update the battery
  665. clock with the internal DATE and TIME commands.  So, if you stick
  666. with DOS 2.11 you don't need these utilities.  However if you
  667. upgrade your DOS to 3.xx, you will find that it has no knowledge
  668. of the on-board battery backed-up clock.  These utilities will then
  669. do the job and restore full function to the use of the battery clock.
  670.  
  671. The programs use an undocumented feature of the on-board
  672. ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
  673. functions beyond that of the IBMPC ROM BIOS. This is fully explained
  674. in the documentation.
  675.  
  676. I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
  677. is identical to the one supplied with the Model M.  If so, then the
  678. ROM BIOS must also provide the same functionality for the additional
  679. INT 1AH functions  - so this code will probably work with a model D
  680. also.   Someone who has a Model D please let me know.  Reply to
  681. PLOUFF at MIT-MX since I am not on all of the mailing lists to which
  682. this is directed.
  683.  
  684. 11-Jul-86 17:37:09-MDT,1120;000000000000
  685. Return-Path: <info-cpm-request@AMSAA.ARPA>
  686. Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 11 Jul 86 17:36:57-MDT
  687. Received: from edwards-2060.arpa by AMSAA.ARPA id a009860; 11 Jul 86 18:42 EDT
  688. Date: Fri 11 Jul 86 15:44:01-PDT
  689. From: BUSSARD@EDWARDS-2060.ARPA
  690. Subject: XOR S-100 4 system
  691. To: info-cpm@AMSAA.ARPA
  692. cc: BUSSARD@EDWARDS-2060.ARPA
  693. Message-ID: <12221925879.13.BUSSARD@EDWARDS-2060.ARPA>
  694.  
  695.     I  complete set of the manuals for the S100-4 system and the basic 
  696. manual for the 12 slot chassis also. Like most people I have one problem 
  697. with the system, B drive spends alot of time (about 90%) being not ready. 
  698. The drives (8" Tandon Thinlines)seem check out ok on other systems and disk 
  699. controllers? Not long before they quit the s-100 market,I got a bios upgrade
  700. from them, fall of '84 I think. Would like to hear from owners and users.
  701. Send mail directly to: Bussard@Edwards-2060
  702.  
  703. Note: That it is only B drive not ready not A or the 5.25" on C & D. Have 
  704. replaced all of the devices on the disk controller that, though seem good, 
  705. could be suspect.
  706.  
  707.       
  708. Lewis G. Bussard
  709.  
  710. -------
  711. 14-Jul-86 12:33:37-MDT,736;000000000000
  712. Return-Path: <info-cpm-request@AMSAA.ARPA>
  713. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 14 Jul 86 12:33:23-MDT
  714. Received: from xerox.arpa by AMSAA.ARPA id a002442; 14 Jul 86 13:46 EDT
  715. Received: from CheninBlanc.ms by ArpaGateway.ms ; 14 JUL 86 10:47:31 PDT
  716. Date: 14 Jul 86 10:38:04 PDT (Monday)
  717. From: Chapman.ES@xerox.ARPA
  718. Subject: Anyone ever heard of a TI99?
  719. To: Info-Micro@AMSAA.ARPA, Info-cpm@AMSAA.ARPA
  720. cc: Chapman.ES@xerox.ARPA
  721. Message-ID: <860714-104731-2027@Xerox>
  722.  
  723. A friend here in Southern California has one of these and is looking for
  724. other people with it.  He'd be interested in any pointers to clubs in
  725. the SoCal area.  He also needs a word processor.  What is available for
  726. this machine?
  727.  
  728. Cheryl
  729.  
  730. 15-Jul-86 13:54:33-MDT,24450;000000000000
  731. Return-Path: <info-cpm-request@AMSAA.ARPA>
  732. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:52:50-MDT
  733. Received: from brl-smoke.arpa by AMSAA.ARPA id a003582; 15 Jul 86 13:55 EDT
  734. Received: from USENET by SMOKE.BRL.ARPA id a013818; 15 Jul 86 13:47 EDT
  735. From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
  736. Newsgroups: net.micro.cpm
  737. Subject: uuencode source, com, and discussion
  738. Message-ID: <1811@ecsvax.UUCP>
  739. Date: 15 Jul 86 01:01:42 GMT
  740. To:       info-cpm@AMSAA.ARPA
  741.  
  742.  
  743. I apologize for the delay.  This message and the one that follows
  744. contain the Turbo Pascal source and uuencoded binaries for uuencode
  745. and uudecode to run under CP/M 2.2 (and probably 3.0).  I know
  746. that posting software to net.micro.cpm is not very usual, but I received
  747. a number of requests for the source and/or binaries, and rather than
  748. try to send to individuals, I decided to post.
  749.  
  750. Re my suggestion that CP/Mers exchange software via the net:  I have
  751. a couple of responses to mail and news followups.  First, what I
  752. would suggest is that software exchange take one of two forms--either
  753. posting articles containing only source and documentation, which would
  754. best be applied to programs written for ASM and maybe Turbo, both of 
  755. which are almost universally accessible (or MBASIC, I suppose); or
  756. for software written in less universal languages, posting files with
  757. a short header describing the contents, followed by a uuencoded 
  758. library file containing source, documentation, and object code.  I've
  759. noticed lately that most newer software on RCPM systems is packaged
  760. this way, and it does seem sensible.  If the .LBR file is squeezed
  761. before uuencoding, on average the uuencoded version will be no larger
  762. than the unsqueezed original.  We might want to establish either a
  763. net.micro.cpm.sources or something similar if there was a lot of traffic,
  764. but perhaps at first could just use net.micro.cpm, since the volume is
  765. now low anyway.  I do agree that source should always be included when
  766. it is available (and perhaps not too huge.  240k .ASM files would
  767. probably be stretching things).
  768.  
  769. To start things off, then, in response to popular request, here follow
  770. uuencode.pas and uuencode.uue (the encoded binary, which can be decoded
  771. with UN*X uudecode before downloading to your system).  The files are
  772. separated by ---------------CUT HERE-----------lines, since I've
  773. never figured out how to package shar files.
  774.  
  775. Ross Alford
  776.    ...mcnc!ecsvax!alford
  777. ----------------------CUT HERE----------for uuencode.pas---------
  778. Program uuencode;
  779.  
  780.   CONST header = 'begin';
  781.         trailer = 'end';
  782.         defaultMode = '644';
  783.         defaultExtension = '.uue';
  784.         offset = 32;
  785.         charsPerLine = 60;
  786.         bytesPerHunk = 3;
  787.         sixBitMask = $3F;
  788.         endofinfile : boolean = FALSE;
  789.  
  790.   TYPE string80 = string[80];
  791.  
  792.   VAR inf : file;
  793.       outfile: text;
  794.       infilename, outfilename, mode: string80;
  795.       lineLength, numbytes, bytesInLine: integer;
  796.       line: array [0..59] of char;
  797.       hunk: array [0..2] of byte;
  798.       chars: array [0..3] of byte;
  799.  
  800.  
  801. {  procedure debug;
  802.  
  803.     var i: integer;
  804.  
  805.     procedure writebin(x: byte);
  806.  
  807.       var i: integer;
  808.  
  809.       begin
  810.         for i := 1 to 8 do
  811.           begin
  812.             write ((x and $80) shr 7);
  813.             x := x shl 1
  814.           end;
  815.         write (' ')
  816.       end;
  817.  
  818.     begin
  819.       for i := 0 to 2 do writebin(hunk[i]);
  820.       writeln;
  821.       for i := 0 to 3 do writebin(chars[i]);
  822.       writeln;
  823.       for i := 0 to 3 do writebin(chars[i] and sixBitMask);
  824.       writeln
  825.     end;  }
  826.  
  827. {Binary file read added by Ross Alford,  ...!mcnc!ecsvax!alford.  The original
  828.  MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
  829.  CP/M Turbo expects some file info to be stored in the first 4 bytes of files
  830.  of any type other than TEXT.  Getbyte (below) and Putbyte (in UUDECODE)
  831.  bypass this 'feature' by using blockread and blockwrite.  The only global
  832.  variables either use are 'infilename' and 'inf' or 'outfilename' and 'outf'}
  833.  
  834. function getbyte(var b : byte) : boolean;
  835.  
  836. type bufptr = ^bufrec;
  837.      bufrec = record
  838.                 next : bufptr;
  839.                 buffer : array[1..128] of byte
  840.               end;
  841.  
  842. const sectstobuf = 8;                {max number of sectors to buffer}
  843.       sectsread : integer = 0;       {constants are essentially statics}
  844.       bytptr : integer = 129;
  845.       notopen : boolean = TRUE;
  846.       j : integer = 0;
  847.       infsize : integer = 0;
  848.       listsave : integer  = 0;
  849.  
  850. var list,temp,temp2 : bufptr;
  851.  
  852. begin
  853.   if notopen then
  854.     begin
  855.       notopen := FALSE;
  856.       assign(inf,infilename);
  857.       {$i-}
  858.       reset(inf);
  859.       {$i+}
  860.       if ioresult <> 0 then
  861.         begin
  862.           writeln('File ',infilename,' not found.  Aborting');
  863.           halt
  864.         end;
  865.       infsize := filesize(inf);
  866.       new(list);
  867.       list^.next := NIL;
  868.       listsave := ord(list);
  869.       sectsread := 0
  870.     end;
  871.   list := ptr(listsave);
  872.   if bytptr > 128 then
  873.     begin
  874.       if list^.next <> NIL then
  875.         begin
  876.           temp := list^.next;
  877.           dispose(list);
  878.           list := temp;
  879.           bytptr := 1
  880.         end
  881.         else begin
  882.           dispose(list);
  883.           list := NIL;
  884.           j := 0;
  885.           while (sectsread<infsize) and (j<sectstobuf) do
  886.             begin
  887.               new(temp2);
  888.               temp2^.next := NIL;
  889.               if list=NIL then
  890.                 begin
  891.                   list := temp2;
  892.                   temp := list
  893.                 end
  894.                 else begin
  895.                   temp^.next := temp2;
  896.                   temp := temp2
  897.                 end;
  898.               blockread(inf,temp^.buffer,1);
  899.               j := succ(j);
  900.               sectsread := succ(sectsread)
  901.             end;
  902.           bytptr := 1
  903.         end
  904.     end;
  905.     listsave := ord(list);
  906.     if list <> NIL then
  907.       begin
  908.         b := list^.buffer[bytptr];
  909.         bytptr := succ(bytptr);
  910.         getbyte := TRUE
  911.       end
  912.       else begin
  913.         b := 0;
  914.         getbyte := FALSE
  915.       end
  916. end;
  917.  
  918.   procedure Abort (message: string80);
  919.  
  920.     begin {abort}
  921.       writeln(message);
  922.       close(inf);
  923.       close(outfile);
  924.       halt
  925.     end; {abort}
  926.  
  927.   procedure Init;
  928.  
  929.     procedure GetFiles;
  930.  
  931.       VAR i: integer;
  932.           temp: string80;
  933.           ch: char;
  934.  
  935.       begin {GetFiles}
  936.         if ParamCount < 1 then abort ('No input file specified.');
  937.         infilename := ParamStr(1);
  938.         {$I-}
  939.         assign (inf, infilename);
  940.         reset (inf);
  941.         {$i+}
  942.         if IOResult > 0 then abort (concat ('Can''t open file ', infilename));
  943.  
  944.         write('Uuencoding file ', infilename);
  945.  
  946.         i := pos('.', infilename);
  947.         if i = 0
  948.           then outfilename := infilename
  949.           else outfilename := copy (infilename, 1, pred(i));
  950.         mode := defaultMode;
  951.         if ParamCount > 1 then
  952.           for i := 2 to ParamCount do
  953.             begin
  954.               temp := Paramstr(i);
  955.               if temp[1] in ['0'..'9']
  956.                 then mode := temp
  957.                 else outfilename := temp
  958.             end;
  959.         if pos ('.', outfilename) = 0
  960.           then outfilename := concat(outfilename, defaultExtension);
  961.         assign (outfile, outfilename);
  962.         writeln (' to file ', outfilename, '.');
  963.  
  964.         {$i-}
  965.         reset(outfile);
  966.         {$i+}
  967.         if IOresult = 0 then
  968.           begin
  969.             Write ('Overwrite current ', outfilename, '? [Y/N] ');
  970.             repeat
  971.               read (kbd, ch);
  972.               ch := Upcase(ch)
  973.             until ch in ['Y', 'N'];
  974.             writeln (ch);
  975.             if ch = 'N' then abort(concat (outfilename, ' not overwritten.'))
  976.           end;
  977.         close(outfile);
  978.  
  979.         {$i-}
  980.         rewrite(outfile);
  981.         {$i+}
  982.         if ioresult > 0 then abort(concat('Can''t open ', outfilename));
  983.       end; {getfiles}
  984.  
  985.     begin {Init}
  986.       GetFiles;
  987.       bytesInLine := 0;
  988.       lineLength := 0;
  989.       numbytes := 0;
  990.       writeln (outfile, header, ' ', mode, ' ', infilename);
  991.     end; {init}
  992.  
  993.   procedure FlushLine;
  994.  
  995.     VAR i: integer;
  996.  
  997.     procedure writeout(ch: char);
  998.  
  999.       begin {writeout}
  1000.         if ch = ' ' then write(outfile, '`')
  1001.                     else write(outfile, ch)
  1002.       end; {writeout}
  1003.  
  1004.     begin {FlushLine}
  1005.       write ('.');
  1006.       writeout(chr(bytesInLine + offset));
  1007.       for i := 0 to pred(lineLength) do
  1008.         writeout(line[i]);
  1009.       writeln (outfile);
  1010.       lineLength := 0;
  1011.       bytesInLine := 0
  1012.     end; {FlushLine}
  1013.  
  1014.   procedure FlushHunk;
  1015.  
  1016.     VAR i: integer;
  1017.  
  1018.     begin {FlushHunk}
  1019.       if lineLength = charsPerLine then FlushLine;
  1020.       chars[0] := hunk[0] shr 2;
  1021.       chars[1] := (hunk[0] shl 4) + (hunk[1] shr 4);
  1022.       chars[2] := (hunk[1] shl 2) + (hunk[2] shr 6);
  1023.       chars[3] := hunk[2] and sixBitMask;
  1024.       {debug;}
  1025.       for i := 0 to 3 do
  1026.         begin
  1027.           line[lineLength] := chr((chars[i] and sixBitMask) + offset);
  1028.           {write(line[linelength]:2);}
  1029.           lineLength := succ(lineLength)
  1030.         end;
  1031.       {writeln;}
  1032.       bytesInLine := bytesInLine + numbytes;
  1033.       numbytes := 0
  1034.     end; {FlushHunk}
  1035.  
  1036.   procedure encode1;
  1037.  
  1038.     begin {encode1};
  1039.       if numbytes = bytesperhunk then flushhunk;
  1040.       endofinfile := not (getbyte(hunk[numbytes]));
  1041.       numbytes := succ(numbytes)
  1042.     end; {encode1}
  1043.  
  1044.   procedure terminate;
  1045.  
  1046.     begin {terminate}
  1047.       if numbytes > 0 then flushhunk;
  1048.       if lineLength > 0
  1049.         then
  1050.           begin
  1051.             flushLine;
  1052.             flushLine;
  1053.           end
  1054.         else flushline;
  1055.       writeln (outfile, trailer);
  1056.       close (outfile);
  1057.       close (inf);
  1058.     end; {terminate}
  1059.  
  1060.  
  1061.   begin {uuencode}
  1062.     init;
  1063.     while not endofinfile do encode1;
  1064.     terminate
  1065.   end. {uuencode}
  1066. ----------------------CUT HERE----------for uuencode.uue----------
  1067. begin 644 UUENCODE.COM
  1068. MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F,`!`"A0@``````
  1069. M```````````````````````````````````````````````````*3D5#(#@T
  1070. M,#%,4R!H:6QI=&5E9610$``)&UL_,FP;9QLJ`````````!M6````````````
  1071. M``````0;/0`````````````````!("`$`P```ALJ````!!L]("```AM%10T`
  1072. M`AM2?P`````"&U0````"&R@Q```"&RDQ`````'ZW-\@C]>5^S>@!X?$]R!CS
  1073. MS0`"#0H`R6_ES:8`R?Z`W&L"U(0"YG\8[N4A[@$8!.4AZ`$B$P+AX_7%U7XC
  1074. MMR@'Y<WH`>$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS=`!V"K.
  1075. M`1C?]<75Y2&H`<TU`B&B`<W0`2JZ`=0=`N'1P?')]<75Y2&T`1CI]<75Y2&N
  1076. M`1C@]3K@`+<H$,75Y:\RX``AR`'--0+AT<'QR?4ZX`#^_RCVQ=7E/O\RX``A
  1077. MP@$8X_7%U>4AO`$8VO7%U>7E$?``(8L!`1``[;#1.IX!3SJ<`8+5S=P"T3J?
  1078. M`4\ZG0&#S=P"(?``S=`!*J`!S1T"X='!\<DA\``&``GK(9L!-#4H`A+)&QLA
  1079. M"@,&`RL.+PR6,/R&]7G^,"@!$A/Q$.W)`0ID(6L!PS4"(7L!PS4"$0,`S5\#
  1080. MY@$8!A$&`,U?`V\F`,D1$@`8]!$,`!@($0\`&`,1"0#AP>4ZW0"W*!K5Q<V@
  1081. M`'RU*`_-X0/^$R`(S>$#_@/*U"#!T2H!`!GI(M(`>#+=`'FW*`L^PS(X`"'[
  1082. M'R(Y`"&E`Q&@``$8`.VP(;T#$;@``0P`[;"O;V<RT``BU``BU@`^?C+1`#+@
  1083. M`,G#%@/#(`/#.0/#+P/#-`/#*@/#.0/#(`/!`((`0P#$`,4`P0#%U>7=Y?WE
  1084. M]6\F`.7-I@#Q_>'=X>'1P<G%U>7=Y?WES:,`?1CK#O\8#`X`[5O2`!,:_B`H
  1085. M^B%E``8#S7L$&LVF!/Y!.!+^43`.1Q,:_CH@!GC60!,8`ANO(5P`=R,,#2@9
  1086. M&LV"!"`3_C\H#_XJ*`O^+B@'!@O-=P08$`8(S5X$&OXN(`83!@/-7@0A:``&
  1087. M`(Q#[R1H,#2@(_C\H"?XJ*`O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
  1088. M!/X@.`WEQ2&8!`$.`.VQP>')O\D@+BP[.CT_*EM=/#Y[??YAV/Y[T-8@R7S-
  1089. MM`1]]1\?'Q_-O03QY@_&D"?.0"?#R0.O-\M\P'RW?<@^_\DRV`#%S:\>P2H&
  1090. M`+?M0MJH(.O1^0$`_`DBQ@"O;V<BS@`RW``^PS+9`"'>("+:`.LBS`#IY2K&
  1091. M`+?M0B+&`.U;Q`"W[5(9Z^':=1WML,DJQ@#ML"+&`-G)7B-6(]5>(U8C3B-&
  1092. MX<G=X>L:3P8`+V\F_SGYZP/ML-WIT1I/!@`O;R;_.?GK`^VPZ=WAZR'@_SGY
  1093. MZ\4$!2@%KQ(3$/SML,$^()"1*`9'KQ(3$/S=Z=WA(>#_.?D&(*]W(Q#\W>G=
  1094. MX47-N@6V=]WIW>'1?9,X]SQ/0\VZ!5]!K[/+(S`&MG<CKQX!$/,8W7CF^`\/
  1095. M#\8";R8`.7CF!SQ'KS<7$/W)Y=GKXW,C<B/1<R-R(W$C<,G=X7CK(0``1#E.
  1096. MY0DCX[DX`7D2$R.W*`-/[;#A^=WIW>%X(0``1#E.Y0DC7B-6&-S=X>MH)@!$
  1097. M.>VP(2``.?G=Z=WA(2``.5XC5F@F`$0Y[;`A(@`8Y]WAZW@O;R;_.?EP(T@&
  1098. M`.OML-WIM^U2&=@^D,,G(+?M4K?M0C`#"1G)/I'#)R"W[5+K$^IQ!O`8`?@1
  1099. M``#)U>NW[5+KX1CKM^U2(0$`R"O)S=\+&/7-L`D8\+?M4B$!`,`KR<W?"QCU
  1100. MS;`)&/#-<@<A`0#0*\G-WPL8]<VP"1CPS7('(0$`R-@KR<W?"QCTS;`)&._-
  1101. M<@<A``#(V"/)S=\+&/3-L`D8[\UR!R$!`-@KR<W?"QCUS;`)&/!474M"ZR$`
  1102. M`'JW/A`@`U,^""GK*>LP`0D](/;)?+7*`PI\JO7-@`?KS8`'ZT1-KV=O/A'M
  1103. M:NU",`()-S_+$\L2/2#PZ_'P&$CES9('RSS+'='KS0\'Z\MZR!@US6$'R"D0
  1104. M_<G-80?(RSS+'1#ZR>MZMR`(>_X0,`-'M\FO9V_)ZWRJ?/I^![K`?;O)%\G+
  1105. M?,A\+V=]+V\CR7WF`6\F`,GM2\H`[5O(`,75>$%*4QX`'\L8RQG+&LL;X1GK
  1106. MX>U*1$TAZ6(9(L@`ZR$9-NU*(LH`1$W)!@`1$"?-X@<1Z`/-X@<19`#-X@<>
  1107. M"LWB!WT8#:\\[5(P^QD$/2`"!<C&,-UW`-TCR=U^`-8D3R$``"`"W2/=?@#-
  1108. MI@36,#@I_@HX#@P-("'6!_X*.!O^$#`75%TIV"G8#`T@`E1=&=@IV%\6`!G8
  1109. M&,MYM\A\A\G=X>'E?28`(SE.@3@<=^LA``!$[4(Y^>OE`^VPZ^$K&T\#[;CK
  1110. M(_G=Z3X0PRD@W>'-R`17X<W="5_AY7V3.!H4%2@6NC@62@8`8#E[@E1=/6]@
  1111. M.7GMN.L8":\8`SQK+28`.7?YW>G=X>'E?28`(SGY;R8`W>G=X2$``%0Y7DLC
  1112. MY1E>0R/E&>7]X='A>9`X$#Q/Q=7E&KXH#.'1P2,-(/(A```8#B,3$.S1X<$A
  1113. M```YZ^U2_?G=Z=WAS<@$3^'-W0E?X7Z3.!L,#2@7D3@2]7Z1=P8`4!E470GQ
  1114. M/$_ML!@"'7/=Z=WAS=T)3]'M4^@`(0``.1KUAC@#N#@!>!+Q5UZ1."\\;WJ#
  1115. M.`2X?3@(>),X)I$X(SRW*!_%U2KH`%\=%@!"&0G1U>50&>OA3^VXT<$8!7H\
  1116. M*!E/>)$\NS@!>[<H#BKH``8`">LA`0`Y3^VP(0``5#E>$QGYW>G=X>$MPF8(
  1117. M;"8`W>DA`@!4.5X3&7XV`2-WR2$$`%0Y7DLCY1E>0R/E&>7]X='AK[@H!+D@
  1118. M"'BYX=']^=7I&KX@]B,3!0T8YWRW(`-]M\`^$<,I(,T-"M`^`<,G(,V!"ACU
  1119. MS:P/S9<*&.W9?;?9/@+*)R#-]0H8W]G+>-G"B`K9?;?9R-G%U>79?;<@!=G+
  1120. MN!A4Q<OXKPC9R_A]V94H$S`&[40(/0C9S7H++#T@^0@H`=GQYH`@#\V2"S`E
  1121. MS7L+MRP@'C<8(,W&"S_U*!`X`=G-K`O+>"`)S88++2#VS7(+\3@"R[BWV>'1
  1122. MP=G)V<MXV<(4"LV/"LT4"M@L+<AX[H!'R=E]M]G*<@M]M\C9A=G-30O%U>7=
  1123. M.<UR"]DN!=D^"-TCW6X`",L=,`/-D@O->PL(/2#QV2W9(.7=;OO+>"`)",V'
  1124. M"RPM*`$M\?'QMPCQV<'AV=WAR[BP1RPMS'(+",E]M\C9E=D_S4T+Y>7EW3G9
  1125. M+@79/@@(S<8+.`/-K`L_RQ4(/2`,W74%W2O9+=DH#CX(S88+,-\(S:P+MQCA
  1126. MS88+.`3-Q@L_X='!RW@@!<V'"QB:+""7-QB5.`;&@#@&&!O&@#@7;]WCV>7%
  1127. M>,OXV:CF@/7+^-WEW2$``,GAV*]O1T]77V?)M\L8RQG+&LL;RQS)M\L4RQ/+
  1128. M$LL1RQ#)?-F$V6=[V8O97WK9BME7>=F)V4]XV8C91\E\V9399WO9F]E?>MF:
  1129. MV5=YV9G93WC9F-E'R7C9N-G`>=FYV<!ZV;K9P'O9N]G`?-F\V<G9>-FH\ND+
  1130. M>!?)RW@H!LWS"\@_R7W9O=G`M\C#Q@M]UH':<@L\_BC0V<75Y0C-<@L(-\U[
  1131. M"ST@^=E\V:399WO9H]E?>MFBV5=YV:'93WC9H-E'PWL*V<75Y=G-K`_9S?T+
  1132. MV<V!"ACK?;?(RW@^`\(G(,VL#WW&@,LOQH!OUA3UV<75Y<WU"LT-"BW%U>7-
  1133. M@0I]X='!V>'1P>.\XS#C\=G)V<V.#RW-@0K9S8X/+-E]_FS8Q<NXS=\+P3@)
  1134. MS?4*S30,S9<*RW@H`\T-"MDMV<W?"_4X`\V!"MDMV<W?"S@%V2S-@0I]_FPX
  1135. M.]D!JBH1JJHA?ZK-EPK=Y=TA!PT^!<TT#]WAS:P/S9<*S9<*Q=7EV<VL#RTM
  1136. MV2W-#0K9X='!V<V!"BPL\2PMR-AX[H!'R6>J/RLRUVZV*AWO.'0-T``-T'J(
  1137. MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F`_9?2Z!E?7-]0K9S88/V<V!"L75
  1138. MY=DLS0T*V>'1P<WU"MWEW2&,#3X&S30/W>$LV<VB#RW9S0T*\<75Y6\F`#`!
  1139. M)<T($-DLS9<*V>'1P<T-"GW^9]IR"\E]BIW8B1U]Z:*++CI]CN,XCF-^29(D
  1140. M21)^S<S,S$Q_JZJJJBK9S:(/V;?+>/7+N,WU"GW^B#!'Q=7E+,W0#^7+/,L=
  1141. M?>'US0@0+"TH`2W9\>'1P?7-@0K=Y=TA$`X^",U)#]WA\3`*]=G-F`_9S9<*
  1142. M\85O.`GQR-G-A@_#]0KA/@'#)R!M+AT18#%P1BS^Y7]T-GR)A"%W4SS_PRYZ
  1143. MTGU;E1U\);A&6&-^%OSO_76`TO<7<C%]M\C=Y=G-A@_9K\MX*`,\R[CUS=\+
  1144. M.`C9S?4*\<O_]=D!SP81CNDA?DK9S=\+,`7-+@\83]TAS@X^`@C9$1(`W1G-
  1145. M<P_9S=\+.`L(/2#LV1$,`-T9V=G-;@_+^,T-"L75Y<US#\V7"MG-A@_-#0K9
  1146. MX='!S?4*W>7-+@_=X=G-;@_-#0KQ%S`*]=G-C@\MS8$*\=WART_(R_C)?^?/
  1147. MS!-4?_;THC`)?VK!D0H&@+6>BF]$@((L.LT3@&K!D0H&@0``````@"&BV@])
  1148. M?>BBBRZZ?8[C.(YC?DF2)$F2?LW,S,Q,?ZNJJJJJW2$*#SX%Q=7E]<VL#\V7
  1149. M"O'-20_9X='!PY<*]=G-;@\8$/79Q=7ES6X/S0T*V>'1P=G-EPKQ/2#IV<V&
  1150. M#\,-"A$&`-T9W6X`W68!W5X"W58#W4X$W48%R2&!`$1,5%S)`0])$:+:(8(A
  1151. MR0$$-1$S\R&!^LD!<C$1]Q<A@-+)Q=7EV>'1P<G-D@<A@``^(,MX(`W+(\L2
  1152. MRQ'+$"T](/!OR[C)RWC9S88/*`++^"W-#0JWRWTH',MX",OX/H^].!8H!LUZ
  1153. M"RP8\\UZ"PA@:<C#@P<A``#)/I+#)R!\M<IR"\M\",V`!SZ0*3W+?"CZ1$T1
  1154. M``!B;PC`R[C)S<@$ZQX`.`3^&3@8'<W(!-G+>-D6!R@!%)(P`:_^"3@"/@D\
  1155. M5]79_2%=`-WES>L0W>'13WH\RWL@$('R:Q#]-@``&`O^##@"/@O5S8`1T<MX
  1156. M*`4^+<WE$,M[*`-A#@#+>2@%S>,0&`?-V1`-\H\0>K<H%SXNS>40#"@&S>,0
  1157. M%2#W%?JQ$,W9$!CWRWO(/D7-Y1`^*\M\*`9\[41G/BW-Y1!\!B\$U@HP^\8Z
  1158. MW7``W2,8#/U^`/TCMR`$_2L^,-UW`-TCR?WE+"T@#@8,_38`,/TC$/BOPWT1
  1159. MQ<NX?=G6@&^?9Q%-`,WU!A$%`!E\_MD@`3S]=P#M1,U`$GW^@3`&S;,2_34`
  1160. MR_@^A)4N`"@(S7H+RQT](/C]?@#U/@P(>!\?'Q_F#\8P_7<`_2-XY@]'Q=7E
  1161. MRR7-APO+)<V'"^OC&='C[5KKX>/M2D1-X<LES8<+"#T@R/'!_>')_>7A7Q8`
  1162. M&7XV`/XUV!WZG!$K?CQW_CK8-@`8\38Q(S8`#,G9`0``V<UR"]U^`,VF!/XN
  1163. M(`S9RW`WP,OPV=TC&.K^12@AS3D2,%0(S;,2V`C9Q6\F`,T($,WI"=G!V,MP
  1164. M*`$-V1C7S1X2V-G+X-TCW7X`_BLH!OXM(`3+Z-TCS382/]A/W2/--A(P"MTC
  1165. M5WF'AX&'@D_+:"@$>>U$3]G9><:`_EK8_J8_V,7=Y7G-0!+=X=G!V<G=?@#6
  1166. M,#_0_@K)];?R1Q+M1/7+/\L_/"'Z_Q$&`!D](/SKW2%W$MT9S7,/\>8#*`CU
  1167. MS;,2\3T@^/&W\I<*V</U"H$``````(X```!`')L``""\/J@`$*74:+8$O\D;
  1168. M#L.LQ>MX+=#-SAO"4][Y>#D_`>LKJ*W%'?C)>\Z70'VWR,OXQ=5\S7H+S7H+
  1169. MA&?C[5KKX>/M2D1-X3`&S7L++#?(?<8#;\NXR0X!&`(.`,T_$QJ^(`@C$Q#X
  1170. M>>X!3R%``#GY:28`W>D.`1@"#@#-/Q,-(`'K#@`:MKX@XB,3$/<.`1C:S3\3
  1171. M&K9W(Q,0^>OYW>G-/Q,:+Z9W(Q,0^!COS3\3&J9W(Q,0^1CC_>'=X2$``#GK
  1172. M(2``13G]Z=WA(2$`.7ZW*`.O&`8K1LVZ!:8A(@`Y^2$``"@!(]WI/J\RZ`#]
  1173. MX2K2``80S>(%KQ+A(N(`_>5\MR`&/B(RT`#).N@`MR@*S;83(`4JX@!WR<WR
  1174. M`RKB`#8`$0P`&>LA7``!)`#ML,D&!B'F$\7E!@/M6](`$QK^("CZ&LVF!)8H
  1175. M"N'!$00`&1#CM\DC$Q#KP<$:_CK`?LE#3T[!5%)-P4M"1(),4U1#0558Q%53
  1176. M4L4^KS+H`,UI%#K0`+?`*N(`RZY^Y@_`S3`4.M``M\`JX@`ZZ`"W`8"`*`,!
  1177. M0`!Q(R-PR<U:%"KB`!$,`!GK.N@`MP$/`2@*U0X3S04`T0$6\<7-!0#!/,!X
  1178. M,M``R2KB`!$8`!D&`(Q#[R2+B`'[F#\#+=B@*/AK-QA;-#!<8`\M^R"KB
  1179. M`.41#``9ZPX0S04`X3P@!3[_,M``-@#)XR+D`./E(<(`(N(`X<GC(N0`XR+B
  1180. M`,M^P#X",M``R>,BY`#C(N(`RW;`/@,RT`#)/J_C(N0`X^4AP@`BX@#+KO7-
  1181. MZ!3QMR@#S>$!X<D&`"'1`'[^?S@"/GY/-GXJT@`BU``6`,WA`W<>`?X(*#;^
  1182. M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(#`1_@,@V3K=`+<HT]TJY`##%B!YNBC(
  1183. M?A0CS<D#&,`5^OT4*\T``@@@"``=*+$8[P0%**L8!`0%(`0V&A@(S>$!-@TC
  1184. M-@HC(M8`R2KB`#K0`+<@>7[+;R!PY@\@+B,C?K?REQ4.%.7-NAGA*`CE$2X`
  1185. M&38:X:]W-,8N7Q8`&7[^&B`]*N(`(R,U](!LJU`#M6]8`M^U2.`4&_\WJ
  1186. M%"K4`'XC(M0`&!<](`;-HP!]&`X]/2`&S:\`?1@$S;4`?2KB`,ON(W<KR2-^
  1187. M*\D^&LGE*N(`?N8/_@8H)\UK%?XA,`C^&B@$RZX8\1%=``8>Q=7-:Q71P?XA
  1188. M.`;+KA(3$.^O$N')W2%=`-U^`+?(!@#^+<`$W2/).`7=?@"WR#X0,M``-\GE
  1189. MS6L5RZ[A=\D^KT_%S?`5P<TD%LC%Y<WW!]'!S386V`7,@P?K<PP-(`(C<NO)
  1190. MS?`5S206R,7ES:,1V>'!S386V`79S(\*V</1!>7K#@#%U<UK%='!_@TH"_X:
  1191. M*`?+K@P3$A#JX7')S6L5_AHH$\NN_@HH#?X-(._-:Q7^"B`"RZ[)*N(`3SK0
  1192. M`+?`?N8/(!`C(^5^QBY?%@`9<>$T\!@H_@8H%>$&`,7E/<JF`#T]RJD`/<JL
  1193. M`,.R`"KH`#KJ`+[(-%X6`!EQR2KB`",C?K?(-@`.%<VZ&<@^\#+0`,E]P\86
  1194. MP='%W2K2`,M\*`;-@P?K&`[KRWPH"<V#!]TV`"W=(]7-Q@?AS<@$[5O2`-WE
  1195. MX;?M4DWKD3@.*`Q'Y3X@Q<W&%L$0]^%!!`7(?L7ES<86X<$C&//!T=GAT<'9
  1196. MQ=TJT@#5S2<0&+[!T<7-R`3+0R&A%PX$(+\AI1<.!1BX5%)5149!3%-%S<@$
  1197. M(0(`.4XCS5D7T?G5R>%^([<H#$=^Q>7-QA;AP2,0]>D^#<W&%CX*P\86$0T!
  1198. M&`T1#0`8"!$:`1@#$1H`(N(`RWXH'-7-:Q71NR@0_AHH#/XA,`P4%2@(RZX8
  1199. MZ"$!`,DA``#)/J\RZ`#M4^8`S7H8.M``M\#-,!0ZT`"WP"KB`#;0(R-W$08`
  1200. M&7<C=Q$D`!EW(W<1UO\9.N@`MR`;Y0$$`*_-"1GA(R-.(T8JY@"W[4+(/I`R
  1201. MT`#)Y:]W(W<C[5OF`',C<N$!!``^`\,)&2+B`'[FP,C-KADJX@`1+0`9KW<C
  1202. M=Q'4_QEW(R,!!``^`<T)&<VN&<.!%.,BY`#C(N(`?N;`P#X$,M``R3K0`+?`
  1203. MY<U:&NNW[5+A,!"OS0D9*N(`$0@`&33`(S3)/IDRT`#).M``M\#ES5H:M^U2
  1204. M/@$@$"KB`!$$`!DT(`0C-"@(/@/AS0D9&,CA/O(RT`#),ND`ZRKB`,MF*"_+
  1205. MICKI`,M'*!@C(WXK*[<@$#KI`,M/(!=XMR`3>;?Z0QG%U0XAS;H9T<$@42KB
  1206. M`#KI`,M'*`++[B,C?L8NU5\6`!G1UB[-FAGMH.)F&3SR7!D]/,V:&2KB`",C
  1207. MYG]W(!;%U>7-KAGAT<$@%=41*P`9T30@`B,T>+'"#1GKR3Z9`3[P,M``R?4Z
  1208. MZ0#+1R@!Z_')(N(`S:X9R!CF#B(JX@#+YLMNR,NN*N(`Y<41,``9ZPX:S04`
  1209. MP>$1#``9Z\T%`+?)P='M4^(`Q>7-6AK1M^U2.$`JX@`!!@`)3B-&(W,C<LTL
  1210. M&@$$``DP`1-]YG\IZ^UJZU-<*N(`(R-W`2L`"4XC1NNW[4()R-7ES:X9T>%R
  1211. M*W/)/I$RT`#)U=GAV2$``%1=/A`IZ^UJZ]DIV3`$"3`!$ST@[\G-71JW[5(A
  1212. M``#`(\G-71KKR2KB`!$$`!E>(U8CU4XC1B->(U;AR3ZO,N@`S;`:.M``M\#-
  1213. M,!0ZT`"WP"KB`#;`Y1$,`!GK#B/-!0#A$2T`&:].=R-&=Q'6_QEQ(W`C-H`C
  1214. M=R-W(W?)(N(`?N;`R,.!%#XB&`(^(41-(?``(N8`W>'1X=WEQ<W]&L$ZT`"W
  1215. MP"KP`.U"R#KI`/XA/IDH`C[P,M``R3XB&`(^(2+F`-WAP='AW>4RZ0`BX@!^
  1216. MYL#*L!@JY@"O=R-W>+$H.<75#AK-!0`JX@`1#``9ZSKI`$_-!0#1P;<@'M4J
  1217. MX@`1+0`9-"`"(S31(8``&>LJY@`T(`(C-`L8PRKB`!$M`!E.(T81VO\9<2-P
  1218. M$?S_&58K7NNW[4+0ZW$C<,G!T>U3X@#%Y<U:&M&W[5+:)AHJX@`!"``)<R-R
  1219. M`20`"7,C<LG-3!S`$0P`&>L.$\T%`#S`&#_]X2K2``80S>(%KQ+A_>7-3!S`
  1220. MY<WR`^'E$1P`&>LA7``!#`#ML.$1#``9Y>L.%\T%`-$\*`DA7``!)`#ML,D^
  1221. M`3+0`,D^KS+H`,U,',`ZV`"W/B$HZRKB`!$,`!D17``!)`#ML!%<``X/S04`
  1222. M/"C/(3,<$;```1D`[;`1``$ZZ`"W(`3M6P$!,0`!P[``U0X:S04`$5P`#A3-
  1223. M!0#1(8``&>NW*.D8-R+B`'[F#\@^(#+0`,DBY@#M4^@`Z^$BX@!.<R-&<NNW
  1224. M[4(H6NLC$5P`.MP`$A,!"P#ML`88KQ(3$/SE$5P`#@_-!0#1/"@_*N8`(GT`
  1225. M[4OH`,75#AK-!0`17``.(<T%`-'!MR`A*GT`(R)]`"&``!GK"WBQ(-L17``.
  1226. M$,T%`"KB`!$-`!GIW2KB`#[PPRD@S<@$_A'0,MP`R2+P`.OAXR+R`!,3$WOF
  1227. M_%\AW@`B^`#=*MX`W6X"W68#?;0H2.U2,`_=;@#=9@'EW2+X`-WA&.,@"MU>
  1228. M`-U6`=WE&!M-1-UN`-UF`=WEW1G==0#==`'=<0+=<`/=Y=$J^`!S(W+1*O(`
  1229. M<R-RR=WEX1DBQ``J\``!!``)W>7!"=IU'>U+Q@#M0@$``"$``-HP'3[_PR<@
  1230. MZ^'C?B-F;Q,3$WOF_%_K(O``*MX`Y=WAM^U2,%+=;@#=9@'EM^U2,`3=X1CP
  1231. MX=7]X>U+\`#]<0+]<`/]=0#]=`'=<P#=<@'=Y>'=3@+=1@/-!!XH"=U>`-U6
  1232. M`=7=X=WEX=U.`MU&`]U>`-U6`1@;*MX`[5/>`-7=X=UU`-UT`>U+\`#=<0+=
  1233. M<`/K";?M4L#5_>$JQ`"W[5(H&_U^`-UW`/U^`=UW`?UN`OUF`PG==0+==`.O
  1234. MR=WEX2+$``8$-@`C$/O)S4L>*O0`R<U+'BKV`,DA```B]``B]@#=*MX`W4X"
  1235. MW48#>;`H'BKT``DB]``J]@"W[4(P!.U#]@#=;@#=9@'EW>$8V"K&``'[_PGM
  1236. M6\0`M^U2V.LJ]``9(O0`*O8`M^U2T.U3]@#)[5O$`',C<LE>(U;K(L0`(MX`
  1237. M!@0V`",0^\D^KT\BZ`"O=S+0`'@RZ@`JX@`B[0`A1A\BX@#A(N0`X0P-(`7-
  1238. M)A<8`\UY%RKM`"+B`"KD`.D^KS+L`"+H`"KB`"+M`"%&'R+B`.$BY`#A(NH`
  1239. M(5P`!A[-X@6O$BKJ`#KL`+<@!<U.%A@#S7(6(=``?C8`MV=O*`C=Y>$17`#M
  1240. M4NLJZ`!S(W(8H\8`[5\RRP#)Z]WAP>%XL2@+<PMXL2@%5%T3[;#=Z41-W>'1
  1241. MX7BQ*/3M4ADP[0L)ZPGK`^VXW>E5%!4H`\V=']WA3P8`+V\F_SGY<2/K#`TH
  1242. M`NVPW>D6`"&``#X?1K@P`@8?(PX`!`4H#7[^("@$_@D@!",%&.]=!`4H#7[^
  1243. M("@(_@DH!",%&.]]DR@$#!4@U6DF`%3)T<'5+6$EPZ("?<VF!&_)*@$`&1D9
  1244. MZ2'0`'XV`&\F`,G-%@-\M<@ZW0#UKS+=`,T@`_$RW0!]_@/`W>$1`0`8$3K0
  1245. M`+?(W>%?%@$8!=WA7Q8"U<UZ`]&O,MT`*LX`?+7=Y>'M2\P`[4(!%0`)(LX`
  1246. MMR`'U=7ES=D`T7JW(!3-``)>0PT*57-E<B!B<F5A:P`8*ST@"\T``@T*22]/
  1247. M`!@.S0`"#0I2=6XM=&EM90#-``(@97)R;W(@`'O-M`3-``(L(%!#/0`JS@#-
  1248. MKP08%<T``DYO="!E;F]U9V@@;65M;W)Y`,T``@T*4')O9W)A;2!A8F]R=&5D
  1249. M#0H`.M@`M\J.)\,``.'1T>DQ``$A@'\!`/_-9`,AD2@187P!`(`^`<W4!,-T
  1250. M*`###B$``($``0```````/WAX2)9??WE*@<A)@#+1<JM(2$``'TR!R$A2'_E
  1251. M(4=^S3H%S7`3(4A_S7`:S?$?Y2$``-'-D@;+1<J$(<V;%,VZ%P5&:6QE("%'
  1252. M?LTZ!2$``,VJ%\VZ%Q4@;F]T(&9O=6YD+B`@06)O<G1I;F?-S1?-&R##U"`A
  1253. M2'_-71HB"B$A3WWE(8(`S>4<(0``ZRI/?7,C<BI/?2(,(2$``"(#(2H,(2)/
  1254. M?2H%(>4A@`#1S<P&RT7*GR(J3WU>(U;KY2$``-'-D@;+1<KZ(2I/?5XC5NLB
  1255. M37TA3WWE(8(`S7H=*DU](D]](0$`(@4APY\B(4]]Y2&"`,UZ'2$``")/?2$`
  1256. M`"(((2H#(>4J"B'1S>`&Y2H((>4A"`#1S>`&T7VC;\M%RIDB(4M]Y2&"`,WE
  1257. M'"$``.LJ2WUS(W(J3WWE(0``T<U_!LM%RF,B*DM](D]]*D]](DU]PW,B*DM]
  1258. MZRI-?7,C<BI+?2)-?2%(?^4J37T1`@`9Y2$!`,V^<("H((2,B""$J`R$C
  1259. M(@,APQ`B(0$`(@4A*D]](@PA*D]]Y2$``-'-D@;+1<K<(BI/?1$"`!GE*@4A
  1260. M*]$9;B8`ZRI9?7,J!2$C(@4A(0$`?3);?</K(B$``.LJ67US(0``?3);?2I;
  1261. M?28`R?WA!E`A^GS-X@7]Y2'Z?,TZ!<V;%"$``,VJ%\W-%\T;("%(?\VP<
  1262. M("&8?LUI%,T;(,/4(,G#U27-FQ_E(0$`T<W@!LM%REHCS4T%&$YO(&EN<'5T
  1263. M(&9I;&4@<W!E8VEF:65D+LWQ(B$!`,U]'P90(4=^S>(%S9L4S;H7$%5U96YC
  1264. M;V1I;F<@9FEL92`A1W[-.@4A``#-JA?-&R`A+@!E+@'E(4=^S3H%S;(((N!\
  1265. M*N!\Y2$``-'-?P;+1<K"(R%'?LTZ!090(?9]S>(%P]LC(4=^S3H%(0$`Y2K@
  1266. M?"O-:P@&4"'V?<WB!<U-!0,V-#0&4"&E?<WB!<V;'^4A`0#1S<P&RT7*9B0A
  1267. M`@#ES9L?T<UF!GJSRF8DU2+@?"K@?,U]'P90(8]\S>(%(8]\Y2$!`-$9;B8`
  1268. MY<V!!2$P`.4A.0#-FP7-3Q/+1<I/)"&/?,TZ!090(:5]S>(%PUTD(8]\S3H%
  1269. M!E`A]GW-X@4JX'PCT1O#!20A+@!E+@'E(?9]S3H%S;((Y2$``-'-?P;+1<J<
  1270. M)"'V?<TZ!<U-!00N=75ES3T(!E`A]GW-X@4AF'[E(?9]S3H%S6\3S1L@S9L4
  1271. MS;H7"2!T;R!F:6QE("'V?<TZ!2$``,VJ%R$N`,TB%\W-%\T;("&8?LW_$\WQ
  1272. M'^4A``#1S7\&RT7*FB7-FQ3-NA<23W9E<G=R:71E(&-U<G)E;G0@(?9]S3H%
  1273. M(0``S:H7S;H7"#\@6UDO3ET@S1L@(;H`S:D4(8Y\S406S1L@*HY\)@#-Y!]]
  1274. M,HY\*HY\)@#ES8$%(5D`S9$%(4X`S9$%S4\3RT7*'B4JCGPF`,V;%,TB%\W-
  1275. M%\T;("J.?"8`Y2%.`-'-?P;+1<J:)2'V?<TZ!<U-!1$@;F]T(&]V97)W<FET
  1276. M=&5N+LT]",WQ(B&8?LUI%,T;("&8?LW^$\WQ'^4A``#1S<P&RT7*U"7-304+
  1277. M0V%N)W0@;W!E;B`A]GW-.@7-/0C-\2+)S2LC(0``(I]](0``(J-](0``(J%]
  1278. M(9A^S;H4S;H7!6)E9VEN(2``S2(7(:5]S3H%(0``S:H7(2``S2(7(4=^S3H%
  1279. M(0``S:H7S<T7S1L@R<-F)OWAX7TR@WS]Y2J#?"8`Y2$@`-'-?P;+1<I4)B&8
  1280. M?LVZ%"%@`,TB%\T;(,-E)B&8?LVZ%"J#?"8`S2(7S1L@R<V;%"$N`,TB%\T;
  1281. M("J??>4A(`#1&>7-)R8A``#E*J-]*]'-9@9ZL\JM)M4BA'PA8WWE*H1\T1EN
  1282. M)@#ES2<F*H1\(]$;PXLF(9A^S;H4S<T7S1L@(0``(J-](0``(I]]R2JC?>4A
  1283. M/`#1S7\&RT7*V2;-)"8A7'WE(0``T1GE(6!]Y2$``-$9;B8`Y2$"`-'-5@?K
  1284. MX7,A7'WE(0$`T1GE(6!]Y2$``-$9;B8`Y2$$`-'-3@?E(6!]Y2$!`-$9;B8`
  1285. MY2$$`-'-5@?1&>OA<R%<?>4A`@#1&>4A8'WE(0$`T1EN)@#E(0(`T<U.!^4A
  1286. M8'WE(0(`T1EN)@#E(08`T<U6!]$9Z^%S(5Q]Y2$#`-$9Y2%@?>4A`@#1&6XF
  1287. M`.4A/P#1?*)G?:-OZ^%S(0``Y2$#`-'-9@9ZL\K<)]4B<7PA8WWE*J-]T1GE
  1288. M(5Q]Y2IQ?-$9;B8`Y2$_`-%\HF=]HV_E(2``T1GKX7,JHWTC(J-]*G%\(]$;
  1289. MPYDG*I]]Y2JA?=$9(I]](0``(J%]R2JA?>4A`P#1S7\&RT7*`BC-QB8A8'WE
  1290. M*J%]T1GES0`A?>X!;WTR_R`JH7TC(J%]R2JA?>4A``#1S<P&RT7*,BC-QB8J
  1291. MHWWE(0``T<W,!LM%RDLHS20FS20FPTXHS20F(9A^S;H4S;H7`V5N9,W-%\T;
  1292. M("&8?LUI%,T;("%(?\VP<(,G-*",J_R`F`'WN`6_+1<J+*,WO)\-W*,T?
  1293. M*,/4(`%O?3+_("JA?2,BH7W)*J%]Y2$``-'-S`;+1<K,!LW&)BJC?>4A``#1
  1294. MS<P&RT7*S`;-)";-)";#0"C-)"8AF'[-NA3-NA<#96YDS<T7S1L@(9A^S6D4
  1295. :S1L@(4A_S;`:S1L@R<TH(RK_("8`?>X!;P`!
  1296. `
  1297. end
  1298. 15-Jul-86 13:56:42-MDT,23769;000000000000
  1299. Return-Path: <info-cpm-request@AMSAA.ARPA>
  1300. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:55:38-MDT
  1301. Received: from brl-smoke.arpa by AMSAA.ARPA id aa03582; 15 Jul 86 13:55 EDT
  1302. Received: from USENET by SMOKE.BRL.ARPA id a013843; 15 Jul 86 13:47 EDT
  1303. From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
  1304. Newsgroups: net.micro.cpm
  1305. Subject: uudecode: source and .com for CP/M
  1306. Message-ID: <1812@ecsvax.UUCP>
  1307. Date: 15 Jul 86 01:09:30 GMT
  1308. To:       info-cpm@AMSAA.ARPA
  1309.  
  1310.  
  1311. This article contains Turbo Pascal source and uuencoded .com versions
  1312. of uudecode.com for CP/M.  The encoded version can be decoded by 
  1313. UN*X uudecode before downloading.  The source requires Turbo with
  1314. built in access to command line arguments (eg 1.0 won't work without
  1315. adding your own parser, not too difficult actually).  The files follow,
  1316. separated by --------------CUT HERE-----------lines.
  1317.  
  1318. Ross Alford
  1319.    ...mcnc!ecsvax!alford
  1320. ------------------------CUT HERE-----------for uudecode.pas----------
  1321. program uudecode;
  1322.  
  1323.   CONST defaultSuffix = '.uue';
  1324.         offset = 32;
  1325.  
  1326.   TYPE string80 = string[80];
  1327.  
  1328.   VAR infile: text;
  1329.       outf : file;
  1330.       lineNum: integer;
  1331.       line: string80;
  1332.       outfilename : string80;
  1333.  
  1334. {Binary file read added by Ross Alford,  ...!mcnc!ecsvax!alford.  The original
  1335.  MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
  1336.  CP/M Turbo expects some file info to be stored in the first 4 bytes of files
  1337.  of any type other than TEXT.  Putbyte (below) and Getbyte (in UUENCODE)
  1338.  bypass this 'feature' by using blockread and blockwrite.  The only global
  1339.  variables either use are  'infilename' and 'inf' or 'outfilename' and 'outf'}
  1340.  
  1341. procedure putbyte(b : byte; flush : boolean);
  1342.  
  1343. type bufptr = ^bufrec;
  1344.      bufrec = record
  1345.                 next : bufptr;
  1346.                 buffer : array[1..128] of byte
  1347.               end;
  1348.  
  1349. const sectstobuf = 8;                {max number of sectors to buffer}
  1350.       sectswritten : integer = 1;    {constants are essentially statics}
  1351.       bytptr : integer = 1;
  1352.       notopen : boolean = TRUE;
  1353.       infsize : integer = 0;
  1354.       listsave : integer  = 0;
  1355.       tempsave : integer = 0;
  1356.  
  1357. var list,temp,temp2 : bufptr;
  1358.     i : integer;
  1359.  
  1360. begin
  1361.   if flush then
  1362.     begin
  1363.       list := ptr(listsave);
  1364.       temp := list;
  1365.       for i := 1 to sectswritten do
  1366.         begin
  1367.           blockwrite(outf,temp^.buffer,1);
  1368.           temp := temp^.next
  1369.         end;
  1370.       close(outf)
  1371.     end
  1372.     else begin
  1373.       if notopen then
  1374.         begin
  1375.           notopen := FALSE;
  1376.           assign(outf,outfilename);
  1377.           {$i-}
  1378.           reset(outf);
  1379.           {$i+}
  1380.           if ioresult = 0 then
  1381.             begin
  1382.               writeln('File ',outfilename,' exists.  Cannot overwrite.');
  1383.               halt
  1384.             end;
  1385.           {$i-}
  1386.           rewrite(outf);
  1387.           {$i+}
  1388.           if ioresult <> 0 then
  1389.             begin
  1390.               writeln('Cannot open file ',outfilename,' for output.');
  1391.               halt
  1392.             end;
  1393.           new(list);
  1394.           temp := list;
  1395.           for i := 1 to sectstobuf - 1 do
  1396.             begin
  1397.               new(temp2);
  1398.               temp2^.next := NIL;
  1399.               temp^.next := temp2;
  1400.               temp := temp2
  1401.             end;
  1402.           listsave := ord(list);
  1403.           tempsave := listsave;
  1404.         end;
  1405.       temp := ptr(tempsave);
  1406.       if bytptr > 128 then
  1407.         begin
  1408.           if temp^.next <> NIL then
  1409.             begin
  1410.               sectswritten := succ(sectswritten);
  1411.               temp := temp^.next;
  1412.               bytptr := 1
  1413.             end
  1414.             else begin
  1415.               temp := ptr(listsave);
  1416.               for i := 1 to sectstobuf do
  1417.                 begin
  1418.                   blockwrite(outf,temp^.buffer,1);
  1419.                   temp := temp^.next
  1420.                 end;
  1421.               temp := ptr(listsave);
  1422.               sectswritten := 1;
  1423.               bytptr := 1
  1424.             end
  1425.         end;
  1426.       temp^.buffer[bytptr] := b;
  1427.       bytptr := succ(bytptr);
  1428.       tempsave := ord(temp)
  1429.     end
  1430. end;
  1431.  
  1432.   procedure Abort(message: string80);
  1433.  
  1434.     begin {abort}
  1435.       writeln;
  1436.       if lineNum > 0 then write('Line ', lineNum, ': ');
  1437.       writeln(message);
  1438.       halt
  1439.     end; {Abort}
  1440.  
  1441.   procedure NextLine(var s: string80);
  1442.  
  1443.     begin {NextLine}
  1444.       LineNum := succ(LineNum);
  1445.       write('.');
  1446.       readln(infile, s)
  1447.     end; {NextLine}
  1448.  
  1449.   procedure Init;
  1450.  
  1451.     procedure GetInFile;
  1452.  
  1453.       VAR infilename: string80;
  1454.  
  1455.       begin {GetInFile}
  1456.         if ParamCount = 0 then abort ('Usage: uudecode <filename>');
  1457.         infilename := ParamStr(1);
  1458.         if pos('.', infilename) = 0
  1459.           then infilename := concat(infilename, defaultSuffix);
  1460.         assign(infile, infilename);
  1461.         {$i-}
  1462.         reset(infile);
  1463.         {$i+}
  1464.         if IOresult > 0 then abort (concat('Can''t open ', infilename));
  1465.         writeln ('Decoding ', infilename)
  1466.       end; {GetInFile}
  1467.  
  1468.     procedure GetOutFile;
  1469.  
  1470.       var header, mode : string80;
  1471.           ch: char;
  1472.  
  1473.       procedure ParseHeader;
  1474.  
  1475.         VAR index: integer;
  1476.  
  1477.         Procedure NextWord(var word:string80; var index: integer);
  1478.  
  1479.           begin {nextword}
  1480.             word := '';
  1481.             while header[index] = ' ' do
  1482.               begin
  1483.                 index := succ(index);
  1484.                 if index > length(header) then abort ('Incomplete header')
  1485.               end;
  1486.             while header[index] <> ' ' do
  1487.               begin
  1488.                 word := concat(word, header[index]);
  1489.                 index := succ(index)
  1490.               end
  1491.           end; {NextWord}
  1492.  
  1493.         begin {ParseHeader}
  1494.           header := concat(header, ' ');
  1495.           index := 7;
  1496.           NextWord(mode, index);
  1497.           NextWord(outfilename, index)
  1498.         end; {ParseHeader}
  1499.  
  1500.       begin {GetOutFile}
  1501.         if eof(infile) then abort('Nothing to decode.');
  1502.         NextLine (header);
  1503.         while not ((copy(header, 1, 6) = 'begin ') or eof(infile)) do
  1504.           NextLine(header);
  1505.         writeln;
  1506.         if eof(infile) then abort('Nothing to decode.');
  1507.         ParseHeader;
  1508.       end; {GetOutFile}
  1509.  
  1510.     begin {init}
  1511.       lineNum := 0;
  1512.       GetInFile;
  1513.       GetOutFile;
  1514.     end; { init}
  1515.  
  1516.   Function CheckLine: boolean;
  1517.  
  1518.     begin {CheckLine}
  1519.       if line = '' then abort ('Blank line in file');
  1520.       CheckLine := not (line[1] in [' ', '`'])
  1521.     end; {CheckLine}
  1522.  
  1523.  
  1524.   procedure DecodeLine;
  1525.  
  1526.     VAR lineIndex, byteNum, count, i: integer;
  1527.         chars: array [0..3] of byte;
  1528.         hunk: array [0..2] of byte;
  1529.  
  1530. {    procedure debug;
  1531.  
  1532.       var i: integer;
  1533.  
  1534.       procedure writebin(x: byte);
  1535.  
  1536.         var i: integer;
  1537.  
  1538.         begin
  1539.           for i := 1 to 8 do
  1540.             begin
  1541.               write ((x and $80) shr 7);
  1542.               x := x shl 1
  1543.             end;
  1544.           write (' ')
  1545.         end;
  1546.  
  1547.       begin
  1548.         writeln;
  1549.         for i := 0 to 3 do writebin(chars[i]);
  1550.         writeln;
  1551.         for i := 0 to 2 do writebin(hunk[i]);
  1552.         writeln
  1553.       end;      }
  1554.  
  1555.     function nextch: char;
  1556.  
  1557.       begin {nextch}
  1558.       {}  lineIndex := succ(lineIndex);
  1559.         if lineIndex > length(line) then abort('Line too short.');
  1560.         if not (line[lineindex] in [' '..'`'])
  1561.           then abort('Illegal character in line.');
  1562. {        write(line[lineindex]:2);}
  1563.         if line[lineindex] = '`' then nextch := ' '
  1564.                                   else nextch := line[lineIndex]
  1565.       end; {nextch}
  1566.  
  1567.     procedure DecodeByte;
  1568.  
  1569.       procedure GetNextHunk;
  1570.  
  1571.         VAR i: integer;
  1572.  
  1573.         begin {GetNextHunk}
  1574.           for i := 0 to 3 do chars[i] := ord(nextch) - offset;
  1575.           hunk[0] := (chars[0] shl 2) + (chars[1] shr 4);
  1576.           hunk[1] := (chars[1] shl 4) + (chars[2] shr 2);
  1577.           hunk[2] := (chars[2] shl 6) + chars[3];
  1578.           byteNum := 0  {;
  1579.           debug          }
  1580.         end; {GetNextHunk}
  1581.  
  1582.       begin {DecodeByte}
  1583.         if byteNum = 3 then GetNextHunk;
  1584.         putbyte(hunk[byteNum],FALSE);
  1585.         {writeln(bytenum, ' ', hunk[byteNum]);}
  1586.         byteNum := succ(byteNum)
  1587.       end; {DecodeByte}
  1588.  
  1589.     begin {DecodeLine}
  1590.       lineIndex := 0;
  1591.       byteNum := 3;
  1592.       count := (ord(nextch) - offset);
  1593.       for i := 1 to count do DecodeByte
  1594.     end; {DecodeLine}
  1595.  
  1596.   procedure terminate;
  1597.  
  1598.     var trailer: string80;
  1599.  
  1600.     begin {terminate}
  1601.       if eof(infile) then abort ('Abnormal end.');
  1602.       NextLine (trailer);
  1603.       if length (trailer) < 3 then abort ('Abnormal end.');
  1604.       if copy (trailer, 1, 3) <> 'end' then abort ('Abnormal end.');
  1605.       close (infile);
  1606.       putbyte(26,TRUE)
  1607.     end;
  1608.  
  1609.   begin {uudecode}
  1610.     init;
  1611.     NextLine(line);
  1612.     while CheckLine do
  1613.       begin
  1614.         DecodeLine;
  1615.         NextLine(line)
  1616.       end;
  1617.     terminate
  1618.   end.
  1619. --------------------CUT HERE------------for uudecode.uue-----------
  1620. begin 600 UUDECODE.COM
  1621. MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F, ! "A0@      
  1622. M                                                   *3D5#(#@T
  1623. M,#%,4R!H:6QI=&5E9610$  )&UL_,FP;9QLJ         !M6            
  1624. M      0;/0                 !(" $ P   ALJ    !!L]("   AM%10T 
  1625. M AM2?P     "&U0    "&R@Q   "&RDQ     'ZW-\@C]>5^S>@!X?$]R!CS
  1626. MS0 "#0H R6_ES:8 R?Z W&L"U(0"YG\8[N4A[@$8!.4AZ $B$P+AX_7%U7XC
  1627. MMR@'Y<WH >$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS= !V"K.
  1628. M 1C?]<75Y2&H <TU B&B <W0 2JZ =0= N'1P?')]<75Y2&T 1CI]<75Y2&N
  1629. M 1C@]3K@ +<H$,75Y:\RX  AR '--0+AT<'QR?4ZX #^_RCVQ=7E/O\RX  A
  1630. MP@$8X_7%U>4AO $8VO7%U>7E$?  (8L! 1  [;#1.IX!3SJ< 8+5S=P"T3J?
  1631. M 4\ZG0&#S=P"(?  S= !*J !S1T"X='!\<DA\  &  GK(9L!-#4H A+)&QLA
  1632. M"@,& RL.+PR6,/R&]7G^,"@!$A/Q$.W) 0ID(6L!PS4"(7L!PS4"$0, S5\#
  1633. MY@$8!A$& ,U? V\F ,D1$@ 8]!$, !@($0\ & ,1"0#AP>4ZW0"W*!K5Q<V@
  1634. M 'RU* _-X0/^$R (S>$#_@/*U"#!T2H! !GI(M( >#+= 'FW* L^PS(X "'[
  1635. M'R(Y "&E Q&@  $8 .VP(;T#$;@  0P [;"O;V<RT  BU  BU@ ^?C+1 #+@
  1636. M ,G#%@/#( /#.0/#+P/#- /#*@/#.0/#( /! (( 0P#$ ,4 P0#%U>7=Y?WE
  1637. M]6\F .7-I@#Q_>'=X>'1P<G%U>7=Y?WES:, ?1CK#O\8# X [5O2 !,:_B H
  1638. M^B%E  8#S7L$&LVF!/Y!.!+^43 .1Q,:_CH@!GC60!,8 ANO(5P =R,,#2@9
  1639. M&LV"!" 3_C\H#_XJ* O^+B@'!@O-=P08$ 8(S5X$&OXN( 83!@/-7@0A:  &
  1640. M (Q#[R1H,#2@(_C\H"?XJ* O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
  1641. M!/X@. WEQ2&8! $. .VQP>')O\D@+BP[.CT_*EM=/#Y[??YAV/Y[T-8@R7S-
  1642. MM 1]]1\?'Q_-O03QY@_&D"?.0"?#R0.O-\M\P'RW?<@^_\DRV #%S:\>P2H&
  1643. M +?M0MJH(.O1^0$ _ DBQ@"O;V<BS@ RW  ^PS+9 "'>("+: .LBS #IY2K&
  1644. M +?M0B+& .U;Q "W[5(9Z^':=1WML,DJQ@#ML"+& -G)7B-6(]5>(U8C3B-&
  1645. MX<G=X>L:3P8 +V\F_SGYZP/ML-WIT1I/!@ O;R;_.?GK ^VPZ=WAZR'@_SGY
  1646. MZ\4$!2@%KQ(3$/SML,$^()"1* 9'KQ(3$/S=Z=WA(>#_.?D&(*]W(Q#\W>G=
  1647. MX47-N@6V=]WIW>'1?9,X]SQ/0\VZ!5]!K[/+(S &MG<CKQX!$/,8W7CF^ \/
  1648. M#\8";R8 .7CF!SQ'KS<7$/W)Y=GKXW,C<B/1<R-R(W$C<,G=X7CK(0  1#E.
  1649. MY0DCX[DX 7D2$R.W* -/[;#A^=WIW>%X(0  1#E.Y0DC7B-6&-S=X>MH)@!$
  1650. M.>VP(2  .?G=Z=WA(2  .5XC5F@F $0Y[; A(@ 8Y]WAZW@O;R;_.?EP(T@&
  1651. M .OML-WIM^U2&=@^D,,G(+?M4K?M0C #"1G)/I'#)R"W[5+K$^IQ!O 8 ?@1
  1652. M  #)U>NW[5+KX1CKM^U2(0$ R"O)S=\+&/7-L D8\+?M4B$! , KR<W?"QCU
  1653. MS; )&/#-<@<A 0#0*\G-WPL8]<VP"1CPS7('(0$ R-@KR<W?"QCTS; )&._-
  1654. M<@<A  #(V"/)S=\+&/3-L D8[\UR!R$! -@KR<W?"QCUS; )&/!474M"ZR$ 
  1655. M 'JW/A @ U,^""GK*>LP 0D](/;)?+7* PI\JO7-@ ?KS8 'ZT1-KV=O/A'M
  1656. M:NU", ()-S_+$\L2/2#PZ_'P&$CES9('RSS+'='KS0\'Z\MZR!@US6$'R"D0
  1657. M_<G-80?(RSS+'1#ZR>MZMR (>_X0, -'M\FO9V_)ZWRJ?/I^![K ?;O)%\G+
  1658. M?,A\+V=]+V\CR7WF 6\F ,GM2\H [5O( ,75>$%*4QX '\L8RQG+&LL;X1GK
  1659. MX>U*1$TAZ6(9(L@ ZR$9-NU*(LH 1$W)!@ 1$"?-X@<1Z /-X@<19 #-X@<>
  1660. M"LWB!WT8#:\\[5(P^QD$/2 "!<C&,-UW -TCR=U^ -8D3R$  " "W2/=?@#-
  1661. MI@36,#@I_@HX#@P-("'6!_X*.!O^$# 75%TIV"G8# T@ E1=&=@IV%\6 !G8
  1662. M&,MYM\A\A\G=X>'E?28 (SE.@3@<=^LA  !$[4(Y^>OE ^VPZ^$K&T\#[;CK
  1663. M(_G=Z3X0PRD@W>'-R 17X<W="5_AY7V3.!H4%2@6NC@62@8 8#E[@E1=/6]@
  1664. M.7GMN.L8":\8 SQK+28 .7?YW>G=X>'E?28 (SGY;R8 W>G=X2$  %0Y7DLC
  1665. MY1E>0R/E&>7]X='A>9 X$#Q/Q=7E&KXH#.'1P2,-(/(A   8#B,3$.S1X<$A
  1666. M   YZ^U2_?G=Z=WAS<@$3^'-W0E?X7Z3.!L,#2@7D3@2]7Z1=P8 4!E470GQ
  1667. M/$_ML!@"'7/=Z=WAS=T)3]'M4^@ (0  .1KUAC@#N#@!>!+Q5UZ1."\\;WJ#
  1668. M. 2X?3@(>),X)I$X(SRW*!_%U2KH %\=%@!"&0G1U>50&>OA3^VXT<$8!7H\
  1669. M*!E/>)$\NS@!>[<H#BKH  8 ">LA 0 Y3^VP(0  5#E>$QGYW>G=X>$MPF8(
  1670. M;"8 W>DA @!4.5X3&7XV 2-WR2$$ %0Y7DLCY1E>0R/E&>7]X='AK[@H!+D@
  1671. M"'BYX=']^=7I&KX@]B,3!0T8YWRW( -]M\ ^$<,I(,T-"M ^ <,G(,V!"ACU
  1672. MS:P/S9<*&.W9?;?9/@+*)R#-]0H8W]G+>-G"B K9?;?9R-G%U>79?;<@!=G+
  1673. MN!A4Q<OXKPC9R_A]V94H$S &[40(/0C9S7H++#T@^0@H =GQYH @#\V2"S E
  1674. MS7L+MRP@'C<8(,W&"S_U*! X =G-K O+>" )S88++2#VS7(+\3@"R[BWV>'1
  1675. MP=G)V<MXV<(4"LV/"LT4"M@L+<AX[H!'R=E]M]G*<@M]M\C9A=G-30O%U>7=
  1676. M.<UR"]DN!=D^"-TCW6X ",L=, /-D@O->PL(/2#QV2W9(.7=;OO+>" )",V'
  1677. M"RPM* $M\?'QMPCQV<'AV=WAR[BP1RPMS'(+",E]M\C9E=D_S4T+Y>7EW3G9
  1678. M+@79/@@(S<8+. /-K L_RQ4(/2 ,W74%W2O9+=DH#CX(S88+,-\(S:P+MQCA
  1679. MS88+. 3-Q@L_X='!RW@@!<V'"QB:+""7-QB5. ;&@#@&&!O&@#@7;]WCV>7%
  1680. M>,OXV:CF@/7+^-WEW2$  ,GAV*]O1T]77V?)M\L8RQG+&LL;RQS)M\L4RQ/+
  1681. M$LL1RQ#)?-F$V6=[V8O97WK9BME7>=F)V4]XV8C91\E\V9399WO9F]E?>MF:
  1682. MV5=YV9G93WC9F-E'R7C9N-G >=FYV<!ZV;K9P'O9N]G ?-F\V<G9>-FH\ND+
  1683. M>!?)RW@H!LWS"\@_R7W9O=G M\C#Q@M]UH':<@L\_BC0V<75Y0C-<@L(-\U[
  1684. M"ST@^=E\V:399WO9H]E?>MFBV5=YV:'93WC9H-E'PWL*V<75Y=G-K _9S?T+
  1685. MV<V!"ACK?;?(RW@^ \(G(,VL#WW&@,LOQH!OUA3UV<75Y<WU"LT-"BW%U>7-
  1686. M@0I]X='!V>'1P>.\XS#C\=G)V<V.#RW-@0K9S8X/+-E]_FS8Q<NXS=\+P3@)
  1687. MS?4*S30,S9<*RW@H \T-"MDMV<W?"_4X \V!"MDMV<W?"S@%V2S-@0I]_FPX
  1688. M.]D!JBH1JJHA?ZK-EPK=Y=TA!PT^!<TT#]WAS:P/S9<*S9<*Q=7EV<VL#RTM
  1689. MV2W-#0K9X='!V<V!"BPL\2PMR-AX[H!'R6>J/RLRUVZV*AWO.'0-T  -T'J(
  1690. MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F _9?2Z!E?7-]0K9S88/V<V!"L75
  1691. MY=DLS0T*V>'1P<WU"MWEW2&,#3X&S30/W>$LV<VB#RW9S0T*\<75Y6\F # !
  1692. M)<T($-DLS9<*V>'1P<T-"GW^9]IR"\E]BIW8B1U]Z:*++CI]CN,XCF-^29(D
  1693. M21)^S<S,S$Q_JZJJJBK9S:(/V;?+>/7+N,WU"GW^B#!'Q=7E+,W0#^7+/,L=
  1694. M?>'US0@0+"TH 2W9\>'1P?7-@0K=Y=TA$ X^",U)#]WA\3 *]=G-F _9S9<*
  1695. M\85O. GQR-G-A@_#]0KA/@'#)R!M+AT18#%P1BS^Y7]T-GR)A"%W4SS_PRYZ
  1696. MTGU;E1U\);A&6&-^%OSO_76 TO<7<C%]M\C=Y=G-A@_9K\MX* ,\R[CUS=\+
  1697. M. C9S?4*\<O_]=D!SP81CNDA?DK9S=\+, 7-+@\83]TAS@X^ @C9$1( W1G-
  1698. M<P_9S=\+. L(/2#LV1$, -T9V=G-;@_+^,T-"L75Y<US#\V7"MG-A@_-#0K9
  1699. MX='!S?4*W>7-+@_=X=G-;@_-#0KQ%S *]=G-C@\MS8$*\=WART_(R_C)?^?/
  1700. MS!-4?_;THC )?VK!D0H&@+6>BF]$@((L.LT3@&K!D0H&@0      @"&BV@])
  1701. M?>BBBRZZ?8[C.(YC?DF2)$F2?LW,S,Q,?ZNJJJJJW2$*#SX%Q=7E]<VL#\V7
  1702. M"O'-20_9X='!PY<*]=G-;@\8$/79Q=7ES6X/S0T*V>'1P=G-EPKQ/2#IV<V&
  1703. M#\,-"A$& -T9W6X W68!W5X"W58#W4X$W48%R2&! $1,5%S) 0])$:+:(8(A
  1704. MR0$$-1$S\R&!^LD!<C$1]Q<A@-+)Q=7EV>'1P<G-D@<A@  ^(,MX( W+(\L2
  1705. MRQ'+$"T](/!OR[C)RWC9S88/* ++^"W-#0JWRWTH',MX",OX/H^].!8H!LUZ
  1706. M"RP8\\UZ"PA@:<C#@P<A  #)/I+#)R!\M<IR"\M\",V !SZ0*3W+?"CZ1$T1
  1707. M  !B;PC R[C)S<@$ZQX . 3^&3@8'<W(!-G+>-D6!R@!%)(P :_^"3@"/@D\
  1708. M5]79_2%= -WES>L0W>'13WH\RWL@$('R:Q#]-@  & O^##@"/@O5S8 1T<MX
  1709. M* 4^+<WE$,M[* -A#@#+>2@%S>,0& ?-V1 -\H\0>K<H%SXNS>40#"@&S>,0
  1710. M%2#W%?JQ$,W9$!CWRWO(/D7-Y1 ^*\M\* 9\[41G/BW-Y1!\!B\$U@HP^\8Z
  1711. MW7  W2,8#/U^ /TCMR $_2L^,-UW -TCR?WE+"T@#@8,_38 ,/TC$/BOPWT1
  1712. MQ<NX?=G6@&^?9Q%- ,WU!A$% !E\_MD@ 3S]=P#M1,U $GW^@3 &S;,2_34 
  1713. MR_@^A)4N "@(S7H+RQT](/C]?@#U/@P(>!\?'Q_F#\8P_7< _2-XY@]'Q=7E
  1714. MRR7-APO+)<V'"^OC&='C[5KKX>/M2D1-X<LES8<+"#T@R/'!_>')_>7A7Q8 
  1715. M&7XV /XUV!WZG!$K?CQW_CK8-@ 8\38Q(S8 #,G9 0  V<UR"]U^ ,VF!/XN
  1716. M( S9RW WP,OPV=TC&.K^12@AS3D2,%0(S;,2V C9Q6\F ,T($,WI"=G!V,MP
  1717. M* $-V1C7S1X2V-G+X-TCW7X _BLH!OXM( 3+Z-TCS382/]A/W2/--A(P"MTC
  1718. M5WF'AX&'@D_+:"@$>>U$3]G9><: _EK8_J8_V,7=Y7G-0!+=X=G!V<G=?@#6
  1719. M,#_0_@K)];?R1Q+M1/7+/\L_/"'Z_Q$& !D](/SKW2%W$MT9S7,/\>8#* CU
  1720. MS;,2\3T@^/&W\I<*V</U"H$      (X   ! ')L  ""\/J@ $*74:+8$O\D;
  1721. M#L.LQ>MX+=#-SAO"4][Y>#D_ >LKJ*W%'?C)>\Z70'VWR,OXQ=5\S7H+S7H+
  1722. MA&?C[5KKX>/M2D1-X3 &S7L++#?(?<8#;\NXR0X!& (. ,T_$QJ^( @C$Q#X
  1723. M>>X!3R%  #GY:28 W>D. 1@"#@#-/Q,-( 'K#@ :MKX@XB,3$/<. 1C:S3\3
  1724. M&K9W(Q,0^>OYW>G-/Q,:+Z9W(Q,0^!COS3\3&J9W(Q,0^1CC_>'=X2$  #GK
  1725. M(2  13G]Z=WA(2$ .7ZW* .O& 8K1LVZ!:8A(@ Y^2$  "@!(]WI/J\RZ #]
  1726. MX2K2  80S>(%KQ+A(N( _>5\MR &/B(RT #).N@ MR@*S;83( 4JX@!WR<WR
  1727. M RKB #8 $0P &>LA7  !) #ML,D&!B'F$\7E!@/M6]( $QK^("CZ&LVF!)8H
  1728. M"N'!$00 &1#CM\DC$Q#KP<$:_CK ?LE#3T[!5%)-P4M"1(),4U1#0558Q%53
  1729. M4L4^KS+H ,UI%#K0 +? *N( RZY^Y@_ S3 4.M  M\ JX@ ZZ "W 8" * ,!
  1730. M0 !Q(R-PR<U:%"KB !$, !GK.N@ MP$/ 2@*U0X3S04 T0$6\<7-!0#!/,!X
  1731. M,M  R2KB !$8 !D& (Q#[R2+B '[F#\#+=B@*/AK-QA;-#!<8 \M^R"KB
  1732. M .41#  9ZPX0S04 X3P@!3[_,M  -@#)XR+D ./E(<( (N( X<GC(N0 XR+B
  1733. M ,M^P#X",M  R>,BY #C(N( RW; /@,RT #)/J_C(N0 X^4AP@ BX@#+KO7-
  1734. MZ!3QMR@#S>$!X<D& "'1 '[^?S@"/GY/-GXJT@ BU  6 ,WA W<> ?X(*#;^
  1735. M?R@R'?X8*"W^&R@I_AHH-OX-*#C^(# 1_@,@V3K= +<HT]TJY ##%B!YNBC(
  1736. M?A0CS<D#&, 5^OT4*\T  @@@"  =*+$8[P0%**L8! 0%( 0V&A@(S>$!-@TC
  1737. M-@HC(M8 R2KB #K0 +<@>7[+;R!PY@\@+B,C?K?REQ4.%.7-NAGA* CE$2X 
  1738. M&38:X:]W-,8N7Q8 &7[^&B ]*N( (R,U](!LJU #M6]8 M^U2. 4&_\WJ
  1739. M%"K4 'XC(M0 &!<]( ;-HP!]& X]/2 &S:\ ?1@$S;4 ?2KB ,ON(W<KR2-^
  1740. M*\D^&LGE*N( ?N8/_@8H)\UK%?XA, C^&B@$RZX8\1%=  8>Q=7-:Q71P?XA
  1741. M. ;+KA(3$.^O$N')W2%= -U^ +?(!@#^+< $W2/). 7=?@"WR#X0,M  -\GE
  1742. MS6L5RZ[A=\D^KT_%S? 5P<TD%LC%Y<WW!]'!S386V 7,@P?K<PP-( (C<NO)
  1743. MS? 5S206R,7ES:,1V>'!S386V 79S(\*V</1!>7K#@#%U<UK%='!_@TH"_X:
  1744. M* ?+K@P3$A#JX7')S6L5_AHH$\NN_@HH#?X-(._-:Q7^"B "RZ[)*N( 3SK0
  1745. M +? ?N8/(! C(^5^QBY?%@ 9<>$T\!@H_@8H%>$& ,7E/<JF #T]RJD /<JL
  1746. M ,.R "KH #KJ +[(-%X6 !EQR2KB ",C?K?(-@ .%<VZ&<@^\#+0 ,E]P\86
  1747. MP='%W2K2 ,M\* ;-@P?K& [KRWPH"<V#!]TV "W=(]7-Q@?AS<@$[5O2 -WE
  1748. MX;?M4DWKD3@.* Q'Y3X@Q<W&%L$0]^%!! 7(?L7ES<86X<$C&//!T=GAT<'9
  1749. MQ=TJT@#5S2<0&+[!T<7-R 3+0R&A%PX$(+\AI1<.!1BX5%)5149!3%-%S<@$
  1750. M(0( .4XCS5D7T?G5R>%^([<H#$=^Q>7-QA;AP2,0]>D^#<W&%CX*P\86$0T!
  1751. M& T1#0 8"!$: 1@#$1H (N( RWXH'-7-:Q71NR@0_AHH#/XA, P4%2@(RZX8
  1752. MZ"$! ,DA  #)/J\RZ #M4^8 S7H8.M  M\#-,!0ZT "WP"KB #;0(R-W$08 
  1753. M&7<C=Q$D !EW(W<1UO\9.N@ MR ;Y0$$ *_-"1GA(R-.(T8JY@"W[4+(/I R
  1754. MT #)Y:]W(W<C[5OF ',C<N$!!  ^ \,)&2+B '[FP,C-KADJX@ 1+0 9KW<C
  1755. M=Q'4_QEW(R,!!  ^ <T)&<VN&<.!%.,BY #C(N( ?N; P#X$,M  R3K0 +? 
  1756. MY<U:&NNW[5+A,!"OS0D9*N( $0@ &33 (S3)/IDRT #).M  M\#ES5H:M^U2
  1757. M/@$@$"KB !$$ !DT( 0C-"@(/@/AS0D9&,CA/O(RT #),ND ZRKB ,MF*"_+
  1758. MICKI ,M'*!@C(WXK*[<@$#KI ,M/(!=XMR 3>;?Z0QG%U0XAS;H9T<$@42KB
  1759. M #KI ,M'* ++[B,C?L8NU5\6 !G1UB[-FAGMH.)F&3SR7!D]/,V:&2KB ",C
  1760. MYG]W(!;%U>7-KAGAT<$@%=41*P 9T30@ B,T>+'"#1GKR3Z9 3[P,M  R?4Z
  1761. MZ0#+1R@!Z_')(N( S:X9R!CF#B(JX@#+YLMNR,NN*N( Y<41,  9ZPX:S04 
  1762. MP>$1#  9Z\T% +?)P='M4^( Q>7-6AK1M^U2.$ JX@ !!@ )3B-&(W,C<LTL
  1763. M&@$$  DP 1-]YG\IZ^UJZU-<*N( (R-W 2L "4XC1NNW[4()R-7ES:X9T>%R
  1764. M*W/)/I$RT #)U=GAV2$  %1=/A IZ^UJZ]DIV3 $"3 !$ST@[\G-71JW[5(A
  1765. M  # (\G-71KKR2KB !$$ !E>(U8CU4XC1B->(U;AR3ZO,N@ S; :.M  M\#-
  1766. M,!0ZT "WP"KB #; Y1$, !GK#B/-!0#A$2T &:].=R-&=Q'6_QEQ(W C-H C
  1767. M=R-W(W?)(N( ?N; R,.!%#XB& (^(41-(?  (N8 W>'1X=WEQ<W]&L$ZT "W
  1768. MP"KP .U"R#KI /XA/IDH C[P,M  R3XB& (^(2+F -WAP='AW>4RZ0 BX@!^
  1769. MYL#*L!@JY@"O=R-W>+$H.<75#AK-!0 JX@ 1#  9ZSKI $_-!0#1P;<@'M4J
  1770. MX@ 1+0 9-" "(S31(8  &>LJY@ T( (C- L8PRKB !$M !E.(T81VO\9<2-P
  1771. M$?S_&58K7NNW[4+0ZW$C<,G!T>U3X@#%Y<U:&M&W[5+:)AHJX@ !"  )<R-R
  1772. M 20 "7,C<LG-3!S $0P &>L.$\T% #S &#_]X2K2  80S>(%KQ+A_>7-3!S 
  1773. MY<WR ^'E$1P &>LA7  !# #ML.$1#  9Y>L.%\T% -$\* DA7  !) #ML,D^
  1774. M 3+0 ,D^KS+H ,U,', ZV "W/B$HZRKB !$, !D17  !) #ML!%<  X/S04 
  1775. M/"C/(3,<$;   1D [; 1  $ZZ "W( 3M6P$!,0 !P[  U0X:S04 $5P #A3-
  1776. M!0#1(8  &>NW*.D8-R+B '[F#\@^(#+0 ,DBY@#M4^@ Z^$BX@!.<R-&<NNW
  1777. M[4(H6NLC$5P .MP $A,!"P#ML 88KQ(3$/SE$5P #@_-!0#1/"@_*N8 (GT 
  1778. M[4OH ,75#AK-!0 17  .(<T% -'!MR A*GT (R)] "&  !GK"WBQ(-L17  .
  1779. M$,T% "KB !$- !GIW2KB #[PPRD@S<@$_A'0,MP R2+P .OAXR+R !,3$WOF
  1780. M_%\AW@ B^ #=*MX W6X"W68#?;0H2.U2, _=;@#=9@'EW2+X -WA&.,@"MU>
  1781. M -U6 =WE&!M-1-UN -UF =WEW1G==0#== '=<0+=< /=Y=$J^ !S(W+1*O( 
  1782. M<R-RR=WEX1DBQ  J\  !!  )W>7!"=IU'>U+Q@#M0@$  "$  -HP'3[_PR<@
  1783. MZ^'C?B-F;Q,3$WOF_%_K(O  *MX Y=WAM^U2,%+=;@#=9@'EM^U2, 3=X1CP
  1784. MX=7]X>U+\ #]<0+]< /]=0#]= '=<P#=<@'=Y>'=3@+=1@/-!!XH"=U> -U6
  1785. M =7=X=WEX=U. MU& ]U> -U6 1@;*MX [5/> -7=X=UU -UT >U+\ #=<0+=
  1786. M< /K";?M4L#5_>$JQ "W[5(H&_U^ -UW /U^ =UW ?UN OUF PG==0+== .O
  1787. MR=WEX2+$  8$-@ C$/O)S4L>*O0 R<U+'BKV ,DA   B]  B]@#=*MX W4X"
  1788. MW48#>; H'BKT  DB]  J]@"W[4(P!.U#]@#=;@#=9@'EW>$8V"K&  '[_PGM
  1789. M6\0 M^U2V.LJ]  9(O0 *O8 M^U2T.U3]@#)[5O$ ',C<LE>(U;K(L0 (MX 
  1790. M!@0V ",0^\D^KT\BZ "O=S+0 '@RZ@ JX@ B[0 A1A\BX@#A(N0 X0P-( 7-
  1791. M)A<8 \UY%RKM "+B "KD .D^KS+L "+H "KB "+M "%&'R+B .$BY #A(NH 
  1792. M(5P !A[-X@6O$BKJ #KL +<@!<U.%A@#S7(6(=  ?C8 MV=O* C=Y>$17 #M
  1793. M4NLJZ !S(W(8H\8 [5\RRP#)Z]WAP>%XL2@+<PMXL2@%5%T3[;#=Z41-W>'1
  1794. MX7BQ*/3M4ADP[0L)ZPGK ^VXW>E5%!4H \V=']WA3P8 +V\F_SGY<2/K# TH
  1795. M NVPW>D6 "&  #X?1K@P @8?(PX ! 4H#7[^("@$_@D@!",%&.]=! 4H#7[^
  1796. M("@(_@DH!",%&.]]DR@$#!4@U6DF %3)T<'5+6$EPZ("?<VF!&_)*@$ &1D9
  1797. MZ2'0 'XV &\F ,G-%@-\M<@ZW0#UKS+= ,T@ _$RW0!]_@/ W>$1 0 8$3K0
  1798. M +?(W>%?%@$8!=WA7Q8"U<UZ ]&O,MT *LX ?+7=Y>'M2\P [4(!%0 )(LX 
  1799. MMR 'U=7ES=D T7JW(!3-  )>0PT*57-E<B!B<F5A:P 8*ST@"\T  @T*22]/
  1800. M !@.S0 "#0I2=6XM=&EM90#-  (@97)R;W(@ 'O-M 3-  (L(%!#/0 JS@#-
  1801. MKP08%<T  DYO="!E;F]U9V@@;65M;W)Y ,T  @T*4')O9W)A;2!A8F]R=&5D
  1802. M#0H .M@ M\J.)\,  .'1T>DQ  $A@'\! /_-9 ,ACRD1R7L! ( ^ <W4!,-J
  1803. M*<,-(0$  0 !        _>'A?3+R?>%],O-]_>4J\GTF ,M%RGDA*@DA(NA]
  1804. M*NA](N9](0$ Y2H"(='-9@9ZL\IM(=4BXGTAF'[E*N9]$0( &>4A 0#-NAK-
  1805. M&R JYGU>(U;K(N9]*N)](]$;PSPA(9A^S; :S1L@PV(C*@8A)@#+1<JF(B$ 
  1806. M 'TR!B$AF'[E(?1]S3H%S7 3(9A^S7 :S?$?Y2$  -'-?P;+1<KM(<V;%,VZ
  1807. M%P5&:6QE("'T?<TZ!2$  ,VJ%\VZ%QL@97AI<W1S+B @0V%N;F]T(&]V97)W
  1808. M<FET92[-S1?-&R##U" AF'[-;QK-\1_E(0  T<V2!LM%RD BS9L4S;H7$4-A
  1809. M;FYO="!O<&5N(&9I;&4@(?1]S3H%(0  S:H7S;H7#"!F;W(@;W5T<'5T+LW-
  1810. M%\T;(,/4("'H?>4A@@#-Y1PJZ'TBYGTA 0#E(0@ Y2$! -'KM^U2T<UF!GJS
  1811. MRIHBU2+B?2'D?>4A@@#-Y1PA  #K*N1]<R-R*N1]ZRKF?7,C<BKD?2+F?2KB
  1812. M?2/1&\-D(BKH?2()(2H)(2(+(2H+(2+F?2H$(>4A@ #1S<P&RT7*/B,JYGU>
  1813. M(U;KY2$  -'-D@;+1<KJ(BH"(2,B B$JYGU>(U;K(N9](0$ (@0APSXC*@DA
  1814. M(N9](0$ Y2$( -'-9@9ZL\HL(]4BXGTAF'[E*N9]$0( &>4A 0#-NAK-&R J
  1815. MYGU>(U;K(N9]*N)](]$;P_LB*@DA(N9](0$ (@(A(0$ (@0A*N9]$0( &>4J
  1816. M!"$KT1GE*O-])@#KX7,J!"$C(@0A*N9](@LAR?WA!E AD7W-X@7]Y<V;%,W-
  1817. M%\T;("J6?N4A  #1S<P&RT7*IR/-FQ3-NA<%3&EN92 JEG[E(0  S287S;H7
  1818. M CH@S1L@(9%]S3H%S9L4(0  S:H7S<T7S1L@P]0@R?WAX2*'??WE*I9^(R*6
  1819. M?LV;%"$N ,TB%\T;("'(?LVI%"J'?090S8X6S:L6S1L@R<-L)LV;'^4A  #1
  1820. MS7\&RT7*)"3-304:57-A9V4Z('5U9&5C;V1E(#QF:6QE;F%M93[-8R,A 0#-
  1821. M?1\&4"$>?<WB!2$N &4N >4A'GW-.@7-L@CE(0  T<U_!LM%RF@D(1Y]S3H%
  1822. MS4T%!"YU=67-/0@&4"$>?<WB!2'(?N4A'GW-.@7-;Q/-&R AR'[-_Q/-\1_E
  1823. M(0  T<W,!LM%RJDDS4T%"T-A;B=T(&]P96X@(1Y]S3H%S3T(S6,CS9L4S;H7
  1824. M"41E8V]D:6YG("$>?<TZ!2$  ,VJ%\W-%\T;(,G#U27#H"7]X>$B97SA(F=\
  1825. M_>7-304 !E J9WS-X@4AQ7SE*F5\7B-6Z]$9;B8 Y2$@ -'-?P;+1<I+)2IE
  1826. M?%XC5NLCZRIE?',C<BIE?%XC5NOE(<5\S3H%S:,(T<W,!LM%RD@ES4T%$4EN
  1827. M8V]M<&QE=&4@:&5A9&5RS6,CP^HD(<5\Y2IE?%XC5NO1&6XF .4A( #1S9(&
  1828. MRT7*GR4J9WS-.@4AQ7SE*F5\7B-6Z]$9;B8 92X!Y<T]" 90*F=\S>(%*F5\
  1829. M7B-6ZR/K*F5\<R-RPTLER2'%?,TZ!2$@ &4N >7-/0@&4"'%?,WB!2$' ")I
  1830. M?"%T?.4A:7SES=(D(?1]Y2%I?.7-TB3)(<A^S>87RT7*^27-30423F]T:&EN
  1831. M9R!T;R!D96-O9&4NS6,C(<5\Y<W (R'%?,TZ!2$! .4A!@#-:PC-304&8F5G
  1832. M:6X@S8T&Y2'(?LWF%]%]LV]][@%ORT7*.R8AQ7SES< CPP FS9L4S<T7S1L@
  1833. M(<A^S>87RT7*:";-30423F]T:&EN9R!T;R!D96-O9&4NS6,CS<\DR2$  "*6
  1834. M?LWS(\W,),DA17[-.@7-304 S8T&RT7*I";-30420FQA;FL@;&EN92!I;B!F
  1835. M:6QES6,C(45^Y2$! -$9;B8 Y<V!!2$@ ,V1!2%@ ,V1!<U/$WWN 6]],EQ\
  1836. M*EQ\)@#)PY8H*DI\(R)*?"I*?.4A17[-.@7-HPC1S<P&RT7*!R?-304/3&EN
  1837. M92!T;V\@<VAO<G0NS6,C(45^Y2I*?-$9;B8 Y<V!!2$@ .4A8 #-FP7-3Q-]
  1838. M[@%ORT7*3B?-304:26QL96=A;"!C:&%R86-T97(@:6X@;&EN92[-8R,A17[E
  1839. M*DI\T1EN)@#E(6  T<U_!LM%RG$G(2  ?3(\?,.!)R%%?N4J2GS1&6XF 'TR
  1840. M/'PJ/'PF ,G#9R@A  #E(0, T<UF!GJSRL GU2(B?"% ?.4J(GS1&>7-U";E
  1841. M(2  T>NW[5+KX7,J(GPCT1O#E2<A/7SE(0  T1GE(4!\Y2$  -$9;B8 Y2$"
  1842. M -'-3@?E(4!\Y2$! -$9;B8 Y2$$ -'-5@?1&>OA<R$]?.4A 0#1&>4A0'SE
  1843. M(0$ T1EN)@#E(00 T<U.!^4A0'SE(0( T1EN)@#E(0( T<U6!]$9Z^%S(3U\
  1844. MY2$" -$9Y2% ?.4A @#1&6XF .4A!@#1S4X'Y2% ?.4A P#1&6XF -$9Z^%S
  1845. M(0  (DA\R2I(?.4A P#1S7\&RT7*>BC-BB<A/7SE*DA\T1EN)@#E(0  Y<W_
  1846. M("I(?",B2'S)(0  (DI\(0, (DA\S=0FY2$@ -'KM^U2(D9\(0$ Y2I&?-'-
  1847. M9@9ZL\K1*-4B1'S-AR<J1'PCT1O#O"C)(<A^S>87RT7*\2C-304-06)N;W)M
  1848. M86P@96YD+LUC(R')>^7-P",AR7O-.@7-HPCE(0, T<W@!LM%RB(IS4T%#4%B
  1849. M;F]R;6%L(&5N9"[-8R,AR7O-.@4A 0#E(0, S6L(S4T% V5N9,V@!LM%RE4I
  1850. MS4T%#4%B;F]R;6%L(&5N9"[-8R,AR'[-:13-&R A&@#E(0$ Y<W_(,G-\",A
  1851. M17[ES< CS7DFRT7*B2G-T28A17[ES< CPW0IS=(HP]0@304-06)N;W)M86P@
  1852. M96YD+LUC(R')>\TZ!2$! .4A P#-:PC-304#96YDS: &RT7*H ;-304-06)N
  1853. M;W)M86P@96YD+LUC(R'(?LUI%,T;("$: .4A 0#ES?\@R<WP(R%%?N7-P"/-
  1854. +>2;+1<IT=<W1)B%C
  1855.  
  1856. end
  1857. 15-Jul-86 15:36:50-MDT,11345;000000000000
  1858. Return-Path: <info-cpm-request@AMSAA.ARPA>
  1859. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 15:36:09-MDT
  1860. Received: from brl-smoke.arpa by AMSAA.ARPA id ab03582; 15 Jul 86 13:55 EDT
  1861. Received: from USENET by SMOKE.BRL.ARPA id a013856; 15 Jul 86 13:48 EDT
  1862. From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
  1863. Newsgroups: net.micro.cpm
  1864. Subject: l-z-w crunch and uncrunch
  1865. Message-ID: <1813@ecsvax.UUCP>
  1866. Date: 15 Jul 86 01:32:11 GMT
  1867. To:       info-cpm@AMSAA.ARPA
  1868.  
  1869.  
  1870. Just to give you something to exercise your new uuencode and uudecode
  1871. programs on (see earlier messages for source and object, contact me
  1872. if they don't arrive soon), here are two VERY nice utilities for
  1873. CP/M.  They compress and expand files using the L-Z-W algorithm, and
  1874. typically achieve ratios of 50% or better (crunched/uncrunched) on
  1875. text, even WordStar text, which the usual sq/usq pair does fairly
  1876. poorly on due to use of high-bit-set ASCII (I suppose).  I do
  1877. not have the source for these.  It is available on RCP/M Royal Oak
  1878. at 313-759-6569.  I have used these successfully on a Kaypro 4-83,
  1879. an Apple running 56k Microsoft CP/M, and a NEC8401 laptop.  These
  1880. little programs are amazing.  I wish I had downloaded the source
  1881. myself.  If anyone has it, I'm sure a posting would be appreciated.
  1882. I apologize to the author for lack of acknowledgment, but the .doc
  1883. file included here is unaltered from that in the original .lbr.
  1884.  
  1885. Ross Alford
  1886.    ...mcnc!ecsvax!alford
  1887. -----------------CUT HERE for crunch12.doc-----------------
  1888.  
  1889.  
  1890.  
  1891.  
  1892.      This  .LBR  file contains Revs 1.2 of CRUNCH  and  UNCRunch.  
  1893. These programs are 100% upward and downward compatible with prev-
  1894. ious releases.
  1895.  
  1896.      These  are data compression utilities. They  are  completely 
  1897. analogous to the popular SQueeze and UNSQUEEZE programs, but  use 
  1898. a  form of compression known as Lempel-Ziv [-Welch]  rather  than 
  1899. Huffman  encoding.  CRUNCH creates the compressed file  from  the 
  1900. original, while UNCR recreates the original from the  compressed.  
  1901. They  may be used on any type of file, but compression ratio  re-
  1902. sults vary according to data type.
  1903.  
  1904. -----------------------------------------------------------------
  1905.  
  1906. Usage:  CRUNCH  [d:] <filename> [d:]
  1907.  
  1908. where  the  first  "d:"  is an optional  source  drive  spec  for 
  1909. <filename>  and the second "d:" is an optional destination  drive 
  1910. spec  for the resulting compressed file. If either "d:" is  omit-
  1911. ted,  the corresponding input or output will be to the  currently 
  1912. logged  drive. The output filename will be the same as the  input 
  1913. filename with the middle letter of the extension changed to  "Z". 
  1914. If a file with this name already exists, it will be  overwritten. 
  1915. If the extension of the original file was blank, the extension of 
  1916. the   resulting   file  will  be   "ZZZ".   Ambiguous   filenames 
  1917. ("wildcards") ARE fully supported.
  1918.  
  1919.      Additionally,  the command line above can be followed  by  a 
  1920. date or other information inside a pair of square brackets.   For 
  1921. obvious reasons, this is difficult to show clearly on the command 
  1922. usage line, so hopefully this sentence will suffice.  The "stamp" 
  1923. information  is recorded in the header of the crunched  file  and 
  1924. reproduced  at the console when uncrunching. It has no effect  on 
  1925. the resulting uncrunched file.  The stamp may any typeable  char-
  1926. acters other than "]", and may be any length that will fit on the 
  1927. command line.  A practical limit of 40 characters will be  repro-
  1928. duced at the console when uncrunching.
  1929.  
  1930. The  cruncher  outputs a running display to the  console  of  the 
  1931. form:
  1932.  
  1933. nnnn/mmmm  pp%
  1934.  
  1935. where  "nnnn"  is #of input records read, "mmmm"  is  #of  output 
  1936. records  created,  and  pp%  is  the  current  compression  ratio  
  1937. nnnn/mmmm.   When complete, the final line additionally  contains 
  1938. the  input and output file sizes converted to "k".  These  values 
  1939. are kilobytes (recs/8) upward rounded to the next integral value.
  1940.  
  1941. This cruncher will flag the unusual situations where the  result-
  1942. ing  file  is larger than the original (ie  compression  ratio  > 
  1943. 100%). When this occurs, the user will be prompted as to  whether 
  1944. he wants to keep the "crunched" file.
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952. Usage:  UNCR  [d:] <filename> [d:]
  1953.  
  1954.  
  1955. where  the  first  "d:"  is an optional  source  drive  spec  for 
  1956. <filename>  and the second "d:" is an optional destination  drive 
  1957. spec for the resulting uncompressed file. If either "d:" is omit-
  1958. ted,  the corresponding input or output will be to the  currently 
  1959. logged  drive. The output filename will be automatically  created 
  1960. to be the same as the name of the file that was originally  comp-
  1961. ressed.  In general (ie assuming the compressed file has not been 
  1962. renamed)  this is the same as the input filename with the  middle 
  1963. letter  of  the extension converted from "Z"  to  an  appropriate 
  1964. character.   If a file with this name already exists, it will  be 
  1965. overwritten. Ambiguous filenames ("wildcards") ARE fully  suppor-
  1966. ted.  Note  however, that "*.*" will be  converted  to   "*.?Z?".  
  1967. This  is a convenience feature to allow quickly  uncrunching  all 
  1968. files with the appropriate extension.
  1969.  
  1970.  
  1971.    In operation, the uncruncher displays information to the  con-
  1972. sole analogous to the cruncher.  In this case the percent  figure 
  1973. is  the  "expansion" ratio (still output file size /  input  file 
  1974. size).
  1975. -------------------------CUT HERE for crunch.uue-----------------
  1976. begin 600 CRUNCH.COM
  1977. MPV,!0V]P>7)I9VAT("AC*2!3=&5V96X@1W)E96YB97)G(#8O,38O.#8@(#(P
  1978. M,2TV-S M.#<R-"X@36%Y(&)E(')E<')O9'5C960@9F]R(&YO;BUP<F]F:70@
  1979. M=7-E(&]N;'DN/G^'ZF\!$94(PZX&[7,+"3$ $CH' -:=, 81@PC#S 81(P3-
  1980. MHP;-^P,Z;  R )(17 #-(@0A (K- 0<B" DH,Q& _QDX,R$ BB($"<U$"!%<
  1981. M ,U3!A,J! GE(P$+ .VPX1$0 !DB! D17  .#\V!!CP@#!%0",/,!A%T",/,
  1982. M!A$ DLU3!A,A7 #-U ;9(0 2$0 B 0  V3IF /Y:(!$1-P3-HP;-.P8@H\VT
  1983. M!L//!B%=  $+ .VP.@F2_B ^6B &,@F2,@N2,@J2S;4%S;0&S9<$/G;-E 4^
  1984. M_LV4!2%< ,WJ!B$DDGXCS90%MR#X/A+-E 4^$,V4!:_-E 7-E 6G",WR S &
  1985. M$4X$P\P&,@()_2%S R'__\UG S@1S>$", C-10,A__\8\^O#> +-10,A  #-
  1986. M10,(, ;9>-G-E 4ZY C-E 4ZY0C-E 7-!0;UIRKG".U;Z0CM4C >$5H$S:,&
  1987. M#@'-@0;^62@,_GDH"!$ D@X3S8$&S;0&\<*O <//!N5'Q>7-$ 7&.F?1P4Q^
  1988. M_H H.+H@&7S&$&=[OB 1?,809WB^( EYUCI777CAI\EYQC!G?K<H"D]\QA!G
  1989. M;F'#[0(ZXPBW(!IAS<8$<GS&$&=S?,809W 1___=&3@%>C+C"#=XX<GU"#\P
  1990. M#P@I*2DI?,V4!7W91]GQR0C9>-FTS90%?<V4!?')Y<UM ^').@()5_WIS?(#
  1991. M.!/^D"@7NB@&,@()>J?)_2&: \D5_2'P WJGR17](=L#>J?)S?(#..S^D"CP
  1992. MNB@&_2%S QC3/I#](;,#R5H6 \WR Q0XSB@'_I HT+LH\17](<P#&+/-\@,X
  1993. MNOZ0*+[](7,#&*0^D/TAXP.GR<WR Q8!.*'^D"BD&-4WR<T\!=C-2 :GR2& 
  1994. M !$DDD8C>+<H&#Y;OB@%(Q#Z& Y^$A,C_ETH!A#V/ET2$Z\2R<E,6E<@0W)U
  1995. M;F-H97(@=C$N,@T*)$9I;&4@86QR96%D>2!C<G5N8VAE9"XD1FEL92!%;7!T
  1996. M>2XD+2TM/B!#<G5N8VAE9"!F:6QE(&QA<F=E<B!T:&%N(&]R:6=I;F%L+B!3
  1997. M879E(&%N>7=A>3\@/$X^.B ')-TA_@_-JP2O]2'__\WA O$\(/7)(0 Z$0$Z
  1998. M/H ! !!W[; V  $ 0.VP/G\R #K)Q=7E?<9E;S )?#S^2B "/CIG/DF41WTO
  1999. M/" !!$]473Z [;$H%"$ .GK6.D=+/H#ML2@&$;@(P\P&*^OA?,8P9W)\QA!G
  2000. M<^O1P<D1  !"3PG+W,LLRQU,?>U:. \&#,LY'S #ZQGK*1#UZRD7*1<I%RD7
  2001. M;.8/R=E]RR>WS$@%?B/9R3KF"#TRY@BGS%D%V,UD!Z?)Q=4&$!82+@ > ,V#
  2002. M!2 ,+!Z S8,%( 0L%!#M?3+F"-'!IR@$(0 2R3?)U0X:S8$&$5P #A3-@0;1
  2003. MM\G9]1(<>\LG(!7-2P<X$!0^.KH@"L4&,,W8!<$1 "+QV<D1 )(.$\V!!@X6
  2004. MS8$&/" &$6<(P\P&$:4(S:8&(0"2S=0&R7BWR!$ (LWN!07('H#-[@44'@ 0
  2005. M\<D.&LV!!M41 )(.%<V!!K?1R!%G",/,!ME[V2\\YG\H"$<^&LV4!1#[V>L!
  2006. M "*G[4++)<L41,W8!<U?!\WK!]D1 )(.$,V!!A%< ,V!!LVT!BH("2LB" E\
  2007. MM<DJY A/!@ )(N0(R=43!@L^(!(3$/P&&*\2$Q#\T<EX+T=Y+T\#/A$8 NUJ
  2008. M"3@#[4*WRQ/+$CT@\<D(]0C%U>79Q=7EW>7]Y=G-!0#9_>'=X>'1P=GAT<$(
  2009. M\0C)S;0&Q0X)S8$&P<D."<T% ,D^#<V_!CX*S;\&R?7%U5\. LV!!M'!\<G-
  2010. MHP;M>PL)R08,(W[^("@#S;\&!<AX_@0@\#XN&/(!( PC?KDH \V4!07(>/X$
  2011. M(/$^+D\8\2($"2$  "(&"0X1S8$&_O_(S2@'#A+-@0;^_R@%S2@'&/*W*@8)
  2012. MR=4J! F'AX>'A\: 3P8 %A *=R,#%2#Y(@0)T2H&"2,B!@G)]<7E*ND((R+I
  2013. M""'X",W;!^'!\<GUQ>48#?7%Y3KG"#WF _8 (%G5W>41[@C-I@;M6^D(U=WA
  2014. M(0  1$W=*>UJW1GM2MTI[6K=*>UJW2GM:MT9[4K=*>UJW2GM:MTI[6K=Y='M
  2015. M2^<(S68&ZQ$  ,L\RQWM6LTF"!&L",VF!MWAT2KG"",BYP@A\@C-VP?AP?')
  2016. M!@1^]A \=_XZP#8P*Q#SR=7%$;,(S:8&*N<(S0T($:4(S:8&*ND(S0T(/BG-
  2017. MOP;!T<D1!P 9RSS+'<L\RQW+/,L=S28(/FO-OP;)U0'V_Q'__PD3VBT( 0H 
  2018. M">M\M<0F"'O&,,V_!M')(<D($>,( 1H [;#)26YP=70@9FEL92!N;W0@9F]U
  2019. M;F0-"B1/=71P=70@97)R;W(D5&]O(&UA;GD@9FEL97,D3F]T(&5N;W5G:"!M
  2020. M96UO<GDD4')O9R!R97$G<R!:+3@P)" M+2T^("0E("0@(" D(" @*"10<F]G
  2021. M<F%M(&9A:6QU<F4N)     $     __\!#2 @(# @+R @(# Z(" D&AH:&AH:
  2022. 7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH!
  2023.  
  2024. end
  2025. -----------------------CUT HERE for uncr.uue-------------------
  2026. begin 600 UNCR.COM
  2027. MPV,!0V]P>7)I9VAT("AC*2!3=&5V96X@1W)E96YB97)G(#8O,38O.#8@(#(P
  2028. M,2TV-S M.#<R-"X@36%Y(&)E(')E<')O9'5C960@9F]R(&YO;BUP<F]F:70@
  2029. M=7-E(&]N;'DN/G^'ZF\!$6,(PWP&[7/9"#$ $3H' -:<, 8140C#F@81Y0/-
  2030. M<0;-Q0,Z;  R )$17 #-NP,A (G-SP8BU@@H,Q& _QDX,R$ B2+2",T2"!%<
  2031. M ,TA!A,JT@CE(P$+ .VPX1$0 !DBT@@17  .#\U/!CP@#!$>",.:!A%"",.:
  2032. M!A$ D<TA!A,A7 #-H@;9(0 1$0 A 0  V:\R))'-"@7^=B 'S0H%_OXH!A$5
  2033. M!,.:!A$!D08,S0H%MR@NYG_^+B@&$A,0\!@'$0F1!@,8Y\T*!3C7MR@3_EL@
  2034. M]!$DD1@%S0H%.,82$[<@]LT*!<T*!4<^$) P!A$M!,.:!LT*!3+1",T*!<V#
  2035. M!<W& \UE!*<($?__[5.Y",U7 ]JF M7-R@(ANPC+/C@)*KD(.ML(S1H#T3JQ
  2036. M"+<HV\U7 ]JF M7-R@+1&//-"@5?S0H%5RJR"#K1"*<@"NU2* 81^P/-<0;-
  2037. MTP7"KP'#G0;](1/W_3G2WP/E>L8Y9VM^_H @%3X!,KL(Y2JY"#K;",T: ^%^
  2038. M_H H(59\QA!G7LMZ( W-R@)\QA!G?LV( ^')?,809WXRVP@8\1$5!,.:!O7E
  2039. MS=X$QCEGT?%/1'[^@"@6?,8P9WZW* I'?,809VY@PR4#8,V4!')\QA!G<WS&
  2040. M$&=Q ?__W0G8>#*Q",D(/S <",T*!=A7S0H%V#+8",LZ'\LZ'\LZ'\LZ'U\8
  2041. M"PC-"@5?.M@(Y@]7>K/&_S_)V<LX. W^D"@&3]G-M /)!-G)MR@0/4?%!@#9
  2042. MP7G%S;0#P1#XR3Z0V<VT \G-8@7-%@;)(68 /C^^P#9:R<D1?0C-= 8A))$&
  2043. M*'ZW* ;-C08C$/;-@@;)$50$PYH&3%I7(%5N8W)U;F-H97(@=C$N,@T*)$-H
  2044. M96-K<W5M(&5R<F]R(&1E=&5C=&5D#0HD26YV86QI9"!#<G5N8VAE9"!&:6QE
  2045. M#0HD1FEL92!R97%U:7)E<R!N97=E<B!P<F]G<F%M(')E=FES:6]N#0HD4W1A
  2046. M8VL@3W9E<F9L;W<-"B3=(?X/S7D$K_4A___-&@/Q/"#UR2$ .1$!.3Z  0 0
  2047. M=^VP-@ ! $#ML#Y_,@ YR<75Y7W&96\P"7P\_DD@ CXY9SY(E$=]+SP@ 01/
  2048. M5%T^@.VQ*!0A #EZUCE'2SZ [;$H!A&&",.:!BOKX7S&,&=R?,809W/KT<')
  2049. M$0  0D\)R]S++,L=3'WM6C@/!@S+.1\P ^L9ZRD0]>LI%RD7*1<I%VSF#\G9
  2050. M?<LGM\P6!7XCV<DZM @],K0(I\PG!=C-,@>GR<75!A 6$2X '@#-404@#"P>
  2051. M@,U1!2 $+!00[7TRM C1P:<H!"$ $<DWR=4.&LU/!A%<  X4S4\&T;?)V?42
  2052. M''O+)R 5S1D'.! 4/CFZ( K%!C#-I@7!$0 A\=G)$0"1#A/-3P8.%LU/!CP@
  2053. M!A$U",.:!A%S",UT!B$ D<VB!LEXM\@1 "'-O 4%R!Z S;P%%!X $/')#AK-
  2054. M3P;5$0"1#A7-3P:WT<@1-0C#F@;9>]DO/.9_* A'/AK-8@40^]GK 0 AI^U"
  2055. MRR7+%$3-I@7-+0?-N0?9$0"1#A#-3P817 #-3P;-@@8JU@@K(M8(?+7)*K((
  2056. M3P8 "2*R",G5$P8+/B 2$Q#\!ABO$A,0_-')>"]'>2]/ SX1& +M:@DX ^U"
  2057. MM\L3RQ(](/')"/4(Q=7EV<75Y=WE_>79S04 V?WAW>'AT<'9X='!"/$(R<V"
  2058. M!L4."<U/!L')#@G-!0#)/@W-C08^"LV-!LGUQ=5?#@+-3P;1P?')S7$&[7O9
  2059. M",D&#"-^_B H \V-!@7(>/X$(/ ^+ACR 2 ,(WZY* /-8@4%R'C^!"#Q/BY/
  2060. M&/$BT@@A   BU @.$<U/!O[_R,WV!@X2S4\&_O\H!<WV!ACRMRK4",G5*M((
  2061. MAX>'AX?&@$\& !80"G<C Q4@^2+2"-$JU @C(M0(R?7%Y2JW"",BMP@AQ@C-
  2062. MJ0?AP?')]<7E& WUQ>4ZM0@]Y@/V "!9U=WE$;P(S70&[5NW"-7=X2$  $1-
  2063. MW2GM:MT9[4K=*>UJW2GM:MTI[6K=&>U*W2GM:MTI[6K=*>UJW>71[4NU",TT
  2064. M!NL1  #+/,L=[5K-] <1>@C-= ;=X=$JM0@C(K4((< (S:D'X<'QR08$?O80
  2065. M/'?^.L V,"L0\\G5Q1&!",UT!BJU",W;!Q%S",UT!BJW",W;!SXIS8T&P=')
  2066. M$0< &<L\RQW+/,L=RSS+'<WT!SYKS8T&R=4!]O\1__\)$]K[!P$*  GK?+7$
  2067. M] =[QC#-C0;1R2&7"!&Q" $: .VPR4EN<'5T(&9I;&4@;F]T(&9O=6YD#0HD
  2068. M3W5T<'5T(&5R<F]R)%1O;R!M86YY(&9I;&5S)$YO="!E;F]U9V@@;65M;W)Y
  2069. M)%!R;V<@<F5Q)W,@6BTX,"0@+2TM/B D)2 D(" @)" @("@D4')O9W)A;2!F
  2070. M86EL=7)E+B0    !     /__ 0T@(" P("\@(" P.B @)!H:&AH:&AH:&AH:
  2071. M&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
  2072. 7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
  2073.  
  2074. end
  2075. 16-Jul-86 12:16:13-MDT,736;000000000000
  2076. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2077. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 16 Jul 86 12:16:06-MDT
  2078. Received: from amc-hq.arpa by AMSAA.ARPA id a000308; 16 Jul 86 13:21 EDT
  2079. Received: by AMC-HQ via cde1;  16 Jul 86 12:43 EDT
  2080. Date:     Wed, 16 Jul 86 12:41:17 EDT
  2081. From:     "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
  2082. To:       info-cpm%amsaa.arpa@AMC-HQ.ARPA, info-micro%amsaa.arpa@AMC-HQ.ARPA
  2083. cc:       rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
  2084. Subject:  Need an H89
  2085.  
  2086. If anyone out there has a used Heath H89 (or Zenith Z90) that they
  2087. want to sell reasonably, my wife needs one for classroom use with
  2088. disadvantaged students.  Please reply to rstanley@amc-hq.  Thanks.
  2089.  
  2090.                     ...Dick
  2091. 17-Jul-86 18:57:10-MDT,965;000000000000
  2092. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2093. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 18:57:04-MDT
  2094. Received: from brl-aos.arpa by AMSAA.ARPA id ab00367; 17 Jul 86 20:19 EDT
  2095. Received: from mit-eddie.arpa by AOS.BRL.ARPA id a017085; 17 Jul 86 12:55 EDT
  2096. Received: from deep-thought.mit.edu by EDDIE (5.31/4.7) id AA00616; Thu, 17 Jul 86 12:25:37 EDT
  2097. Date: Thu 17 Jul 86 01:09:08-EDT
  2098. From: Andrew Moore <T.MOORE%DEEP-THOUGHT@MIT-EDDIE.ARPA>
  2099. Subject: RAMdisk program wanted
  2100. To: info-cpm@BRL.ARPA
  2101. Cc: info-apple@BRL.ARPA
  2102. Message-Id: <12223306707.29.T.MOORE@DEEP-THOUGHT.MIT.EDU>
  2103.  
  2104.  
  2105.    I'm trying to locate a program which will let a Saturn 128K RAM card
  2106. (for the Apple II+) function as a RAMdisk under CP/M.  If you have any
  2107. suggestions where to find this program (I do know that it exists),
  2108. please drop me a note.
  2109.  
  2110. -drew
  2111.  arpa: MOORE%MIT-EECS@MIT-MC.ARPA
  2112.  uucp: ...mit-eddie!moore
  2113.    us: Box 121, North Quincy, MA  02171
  2114. -------
  2115. 17-Jul-86 22:29:25-MDT,2336;000000000000
  2116. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2117. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 22:29:16-MDT
  2118. Received: from simtel20.arpa by AMSAA.ARPA id a001231; 17 Jul 86 23:44 EDT
  2119. Date: Tuesday, 15 July 1986  22:05-MDT
  2120. Message-ID: <KPETERSEN.12223553839.BABYL@SIMTEL20.ARPA>
  2121. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  2122. Sender: KPETERSEN@SIMTEL20.ARPA
  2123. To: Bernie Eiben - LDP Workstations <EIBEN@dec-marlboro.ARPA>
  2124. Subject:   Taking a stand - revisited
  2125. ReSent-From: KPETERSEN@SIMTEL20.ARPA
  2126. ReSent-To: Info-Cpm@AMSAA.ARPA
  2127. ReSent-Date: Thu 17 Jul 1986 21:46-MDT
  2128.  
  2129. Bernie, please remove the "Taking a stand" message from your bulletin
  2130. board.  The reason I removed that message from my system was because I
  2131. was just leaving for my vacation and didn't want to deal with the
  2132. controversy at that time.  Bob Freed convinced me that I should not
  2133. remove BYE5/KMD - I should let the users of my RCP/M decide for
  2134. themselves.  I have therefore restored those files and they, along
  2135. with NUBYE/NUKMD, are available on my system.
  2136.  
  2137. I have replaced the file -BYE5KMD.NOT with a revised version by the
  2138. same name.  It is enclosed below.
  2139.  
  2140. --Keith
  2141.  
  2142. --cut here--
  2143. The BYE5xx and KMDxx files will be available for downloading but will
  2144. not be supported by this system.
  2145.  
  2146. BYE and KMD were public domain programs which are now copyrighted by
  2147. Irv Hoff and Wayne Masters.  We join many other RCP/M SysOps in
  2148. protesting the "appropriation" of public domain programs by people
  2149. who then modify them and copyright them.  This is not in the true
  2150. spirit of RCP/M public domain programming.
  2151.  
  2152. For those who don't know, BYE was originally written by Dave
  2153. Jaffe.  KMD is a renamed XMODEM, which was originally written
  2154. by me, based on Ward Christensen's MODEM2 program.
  2155.  
  2156. You are encouraged to download and forward the public domain
  2157. replacements for BYE5xx and KMDxx:
  2158.  
  2159.   NUBYE100.LBR - public domain version of BYE5
  2160.   NUKMD100.LBR - public domain version of KMD
  2161.   NU-CLOCK.LBR - clock inserts for NUBYE
  2162.   NUBY-SUP.LBR - supplimental library for NUBYE
  2163.   NUBY-INS.LBR - port and modem inserts for NUBYE
  2164.  
  2165. There are many added features to them.  MOST importantly,
  2166. they are now back in the public domain for all of us to
  2167. contribute to - and feel good about it.
  2168.  
  2169. --Keith Petersen, W8SDZ - Co-Sysop of RCP/M Royal Oak (MI)
  2170. 18-Jul-86 17:29:43-MDT,1019;000000000000
  2171. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2172. Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 18 Jul 86 17:29:34-MDT
  2173. Received: from amc-hq.arpa by AMSAA.ARPA id a000412; 18 Jul 86 12:59 EDT
  2174. Received: by AMC-HQ via cde1;  18 Jul 86 12:48 EDT
  2175. Date:     Fri, 18 Jul 86 10:30:57 EDT
  2176. From:     "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
  2177. To:       info-cpm%amsaa.arpa@AMC-HQ.ARPA
  2178. cc:       rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
  2179. Subject:  H89
  2180.  
  2181. This msg for Ed Barton at MIT--sorry everybody else, my mailer won't
  2182. build a path back to Ed.
  2183.  
  2184. Ed--I'm very interested in the H89 package.  I'm sure we can figure
  2185. out how to get it here, even if I pick it up (I have family near 
  2186. Boston).
  2187.  
  2188. Please send me your phone number so that we can discuss details.  
  2189. Basic detail:  what are you asking?
  2190. Secondary details:  what kind of printer?  Hard sector disks?
  2191.  
  2192. Look forward to hearing from you.
  2193.  
  2194.                 ...Dick Stanley
  2195. rstanley@amc-hq
  2196.    -or-
  2197. jshaffer@isif
  2198. telephone:(202)274-9652/5078
  2199. 19-Jul-86 07:24:59-MDT,673;000000000000
  2200. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2201. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 07:24:54-MDT
  2202. Date:     Sat, 19 Jul 86 8:57:25 EDT
  2203. From:     Dave Towson (info-cpm-request) <cpmlist@AMSAA.ARPA>
  2204. To:       info-cpm@AMSAA.ARPA
  2205. Subject:  Info-cpm mail delivery interruption:
  2206.  
  2207. Fellow CP/Mers - In the wee hours of Thursday 17 July, the AMSAA machine from
  2208. which this list is distributed became very sick.  Since then, it has been up
  2209. and down like a ping pong ball.  Can't say whether it is really fixed yet or
  2210. not - time will tell.  Anyway, that's what's been going on.
  2211.  
  2212.  
  2213. Dave Towson <info-cpm-request@amsaa.arpa>
  2214. info-cpm list maintainer
  2215.  
  2216. 19-Jul-86 11:21:52-MDT,926;000000000000
  2217. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2218. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 11:21:41-MDT
  2219. Received: from brl-smoke.arpa by AMSAA.ARPA id aa00168; 19 Jul 86 12:49 EDT
  2220. Received: from USENET by SMOKE.BRL.ARPA id a015409; 19 Jul 86 12:04 EDT
  2221. From: seev%techsup.uucp@BRL.ARPA
  2222. Newsgroups: net.micro.cpm
  2223. Subject: Re: Orphaned Response
  2224. Message-ID: <-1771099@techsup>
  2225. Date: 16 Jul 86 15:50:00 GMT
  2226. Nf-ID: #R:omssw2.UUCP:470:techsup:-1771099:000:357
  2227. Nf-From: techsup.UUCP!seev    Jul 16 10:50:00 1986
  2228. To:       info-cpm@AMSAA.ARPA
  2229.  
  2230.  
  2231. SCO has a rather nice word processor named Lyrix which is quite
  2232. malleable... I should think it would be possible (and quite easy)
  2233. to rebind the keys to emulate WordStar.  We've been running it
  2234. locally for about a year with no problems (on a Xenix system)
  2235. and the software is available for everything from Tandy 6000's
  2236. to Vaxen.  It is, however, not cheap.
  2237. 19-Jul-86 15:10:48-MDT,50223;000000000000
  2238. Return-Path: <info-cpm-request@AMSAA.ARPA>
  2239. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 15:09:03-MDT
  2240. Received: from brl-smoke.arpa by AMSAA.ARPA id a000168; 19 Jul 86 12:49 EDT
  2241. Received: from USENET by SMOKE.BRL.ARPA id a014864; 19 Jul 86 11:48 EDT
  2242. From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
  2243. Newsgroups: net.micro.cpm
  2244. Subject: Unix-compatable SHAR for CP/M
  2245. Message-ID: <484@copper.UUCP>
  2246. Date: 18 Jul 86 05:27:53 GMT
  2247. Keywords: shar,unshar,cp/m,c
  2248. To:       info-cpm@AMSAA.ARPA
  2249.  
  2250.  
  2251. #    This is a shell archive.
  2252. #    Remove everything above and including the cut line.
  2253. #    Then run the rest of the file through sh.
  2254. #----cut here-----cut here-----cut here-----cut here----#
  2255. #!/bin/sh
  2256. # shar:    Shell Archiver
  2257. #    Run the following text with /bin/sh to create:
  2258. #    READ_ME
  2259. #    SHAR.C
  2260. #    SHAR.UUE
  2261. # This archive created: Thu Jul 17 02:03:12 1986
  2262. # By:    Michael D. Kersenbrock (Oregon HomePower Software)
  2263. echo shar: extracting read_me
  2264. sed 's/^XX//' << \SHAR_EOF > read_me
  2265. XX
  2266. XX            READ_ME
  2267. XX
  2268. XXThis program is both a "shar" and a "unshar" program for those
  2269. XXof us with no shell.
  2270. XX
  2271. XXI have ported the recently posted shar.c to (z80) CP/M.  This
  2272. XXdistribution has been shar'd with this program.
  2273. XX
  2274. XXWhen run under CP/M 3.0 with time-of-day supported,
  2275. XXshar files created will have archive creation time included.
  2276. XX
  2277. XXThe uuencoded binary included (shar.com) looks for a file
  2278. XX"ENVIRON.DAT" or "A:ENVIRON.DAT" for the environment variables.
  2279. XXVariables used are "NAME=" and "ORGANIZATION=".
  2280. XX
  2281. XXUuencoding of the binary was done with the recently posted
  2282. XXturbo-pascal uuencode.com program.
  2283. XX
  2284. XXThe attached binary was compiled using Manx Aztec C II v1.05g (z80).
  2285. XX
  2286. XXMike Kersenbrock (usenet:{decvax,ucbvax...}!tektronix!copper!michaelk)
  2287. XXAloha, Oregon
  2288. XX7/17/86
  2289. SHAR_EOF
  2290. if test 752 -ne "`wc -c read_me`"
  2291. then
  2292. echo shar: error transmitting read_me '(should have been 752 characters)'
  2293. fi
  2294. echo shar: extracting shar.c
  2295. sed 's/^XX//' << \SHAR_EOF > shar.c
  2296. XX/* 
  2297. XX *  Shar puts readable text files together in a package
  2298. XX *
  2299. XX *  from which they are easy to extract.
  2300. XX *
  2301. XX *    v 860716 M. Kersenbrock (tektronix!copper!michaelk) for Z80-CPM
  2302. XX *    - enhanced usage message
  2303. XX *
  2304. XX *    v 860712 D. Wecker for ULTRIX and the AMIGA
  2305. XX *    - stripped down.. does patterns but no directories
  2306. XX *    - added a -u (unshar) switch
  2307. XX */
  2308. XX
  2309. XX#define CPM
  2310. XX
  2311. XX#ifdef CPM
  2312. XX#include "c:stdio.h"
  2313. XX#include "c:fcntl.h"
  2314. XX#else
  2315. XX#include <stdio.h>
  2316. XX#endif
  2317. XX
  2318. XX#ifdef CPM
  2319. XX#define void int
  2320. XX#define fputc putc
  2321. XXextern char *getenv(),*malloc(),*index(),*rindex();
  2322. XXint cpmversion;
  2323. XX
  2324. XX#endif
  2325. XX
  2326. XX#ifdef    AMIGA
  2327. XX#include <exec/types.h>
  2328. XXextern char *getenv(),*scdir(),*malloc(),*index();
  2329. XX#endif
  2330. XX
  2331. XX#ifdef    ULTRIX
  2332. XX#include <sys/types.h>
  2333. XXextern char *getenv(),*scdir(),*malloc(),*index();
  2334. XX#endif
  2335. XX
  2336. XX#ifdef    VMS
  2337. XX#include <types.h>
  2338. XXextern char *getenv(),*scdir(),*malloc();
  2339. XX#endif
  2340. XX
  2341. XX
  2342. XX#define BADCH    ((int)'?')
  2343. XX#define EMSG    ""
  2344. XX#define tell(s)    {fputs(*nargv,stderr);fputs((s),stderr);fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
  2345. XX#define rescanopts()    (optind = 1)
  2346. XX
  2347. XXint    optind = 1,        /* index into parent argv vector */
  2348. XX    optopt;            /* character checked for validity */
  2349. XXlong    fsize;            /* length of file */
  2350. XXchar    *optarg;        /* argument associated with option */
  2351. XXchar    *sav[100];        /* saved file names */
  2352. XXint    savind;            /* save index */
  2353. XX
  2354. XX/* OPTIONS */
  2355. XXint     Verbose = 0;           /* provide append/extract feedback */
  2356. XXint     Basename = 0;          /* extract into basenames */
  2357. XXint     Count = 0;             /* count characters to check transfer */
  2358. XXchar    *Delim = "SHAR_EOF";   /* put after each file */
  2359. XXchar    Filter[100] = "cat";   /* used to extract archived files */
  2360. XXchar    *Prefix = NULL;        /* line prefix to avoid funny chars */
  2361. XXint    UnShar = 0;           /* do we unshar an input file? */
  2362. XX
  2363. XXchar Usage1[] = 
  2364. XX"\nSHAR: Create/extract file archive for extraction by /bin/sh (normally).\n\
  2365. XX\n\
  2366. XXusage: shar [-u archive] [[-a] [-p prefix]\
  2367. XX [-d delim] [-bcv] files > archive]\n\
  2368. XX\n\
  2369. XX    where:    -a  all the options (v,c,b,-pXX)\n";
  2370. XX
  2371. XXchar Usage2[] = 
  2372. XX"        -b  extract absolute paths into current directory\n\
  2373. XX        -c  check filesizes on extraction\n\
  2374. XX        -d  use this EOF delimiter instead of SHAR_EOF\n";
  2375. XX
  2376. XXchar Usage3[] =
  2377. XX"        -p  use this as prefix to each line in archived files\n\
  2378. XX        -u  unshar <archive>\n\
  2379. XX        -v  verbose on extraction, incl. echoing filesizes\n";
  2380. XX
  2381. XX
  2382. XX#define    SED "sed 's/^%s//'"    /* used to remove prefix from lines */
  2383. XX
  2384. XX#ifdef CPM
  2385. XX#define    OPTSTRING "U:AP:D:BCV"
  2386. XX#else
  2387. XX#define    OPTSTRING "u:ap:d:bcv"
  2388. XX#endif
  2389. XX
  2390. XX#ifdef    VMS
  2391. XXchar *index(s,c)
  2392. XXchar    *s;
  2393. XXchar    c;
  2394. XX{
  2395. XX    while (*s != 0 && *s != c) s++;
  2396. XX    if (*s == 0 && *s != c) s = 0;
  2397. XX    return(s);    
  2398. XX}
  2399. XX#endif
  2400. XX
  2401. XXint header(ppchFiles)
  2402. XXchar *ppchFiles[];
  2403. XX{
  2404. XX    extern char *ctime();
  2405. XX    register int i;
  2406. XX    auto long clock;
  2407. XX    register char **ppchList;
  2408. XX    char *pchOrg;
  2409. XX    char *pchName;
  2410. XX    register int  problems = 0;
  2411. XX
  2412. XX    pchOrg = getenv("ORGANIZATION");
  2413. XX    pchName = getenv("NAME");
  2414. XX
  2415. XX    puts("#\tThis is a shell archive.");
  2416. XX    puts("#\tRemove everything above and including the cut line.");
  2417. XX    puts("#\tThen run the rest of the file through sh.");
  2418. XX    puts("#----cut here-----cut here-----cut here-----cut here----#");
  2419. XX    puts("#!/bin/sh");
  2420. XX    puts("# shar:    Shell Archiver");
  2421. XX    puts("#\tRun the following text with /bin/sh to create:");
  2422. XX    for (ppchList = ppchFiles; *ppchList; ++ppchList)
  2423. XX        printf("#\t%s\n", *ppchList);
  2424. XX#ifdef CPM
  2425. XX  if (cpmversion >= 0x30) {
  2426. XX#endif
  2427. XX    (void) time(& clock);
  2428. XX    printf("# This archive created: %s", ctime(&clock));
  2429. XX#ifdef CPM
  2430. XX  }
  2431. XX#endif
  2432. XX    if (pchName)
  2433. XX        printf("# By:\t%s (%s)\n", pchName, 
  2434. XX        pchOrg ? pchOrg : "Dave Wecker Midnight Hacks");
  2435. XX    return(0);
  2436. XX}
  2437. XX
  2438. XXint archive(input, output)
  2439. XXchar *input, *output;
  2440. XX{
  2441. XX    auto char line[BUFSIZ];
  2442. XX    register FILE *ioptr;
  2443. XX
  2444. XX    if (ioptr = fopen(input, "r")) {
  2445. XX        printf("%s << \\%s > %s\n", Filter, Delim, output);
  2446. XX        while(fgets(line, BUFSIZ, ioptr)) {
  2447. XX            if (Prefix) fputs(Prefix, stdout);
  2448. XX            fputs(line, stdout);
  2449. XX            if (Count) fsize += strlen(line);
  2450. XX        }
  2451. XX        puts(Delim);
  2452. XX        (void) fclose(ioptr);
  2453. XX        return(0);
  2454. XX    } 
  2455. XX    else {
  2456. XX        fprintf(stderr, "shar: Can't open '%s'\n", input);
  2457. XX        return(1);
  2458. XX    }
  2459. XX}
  2460. XX
  2461. XX
  2462. XXvoid shar(file)
  2463. XXchar *file;
  2464. XX{
  2465. XX    register char *basefile;
  2466. XX    basefile = file;
  2467. XX    if (!strcmp(file, "."))
  2468. XX        return;
  2469. XX    fsize = 0;
  2470. XX    if (Basename) {
  2471. XX        while(*basefile)
  2472. XX            basefile++;        /* go to end of name */
  2473. XX        while(basefile > file && *(basefile-1) != '/')
  2474. XX            basefile--;
  2475. XX    }
  2476. XX    if (Verbose) printf("echo shar: extracting %s\n", basefile);
  2477. XX    if (archive(file, basefile)) exit(66);
  2478. XX    if (Count) {
  2479. XX        printf("if test %ld -ne \"`wc -c %s`\"\n",fsize,basefile);
  2480. XX        printf("then\necho shar: error transmitting %s ",basefile);
  2481. XX        printf("'(should have been %ld characters)'\nfi\n",fsize);
  2482. XX    }
  2483. XX}
  2484. XX
  2485. XXint main(argc, argv)
  2486. XXint argc;
  2487. XXchar **argv;    
  2488. XX{
  2489. XX    auto char *ppchFiles[256];
  2490. XX    register int  C;
  2491. XX    register char **ppchList = ppchFiles;
  2492. XX    register int errflg = 0;
  2493. XX
  2494. XX#ifdef CPM
  2495. XX    cpmversion = (bdoshl(0x0c,0) & 0xff);
  2496. XX#endif
  2497. XX
  2498. XX    while(EOF != (C = getopt(argc, argv, OPTSTRING))) {
  2499. XX#ifdef CPM
  2500. XX        switch(isupper(C) ? tolower(C) : C ) {
  2501. XX#else
  2502. XX        switch(C) {
  2503. XX#endif
  2504. XX        case 'v': 
  2505. XX            Verbose++; 
  2506. XX            break;
  2507. XX        case 'c': 
  2508. XX            Count++; 
  2509. XX            break;
  2510. XX        case 'b': 
  2511. XX            Basename++; 
  2512. XX            break;
  2513. XX        case 'd': 
  2514. XX            Delim = optarg; 
  2515. XX            break;
  2516. XX        case 'a': /* all the options */
  2517. XX            optarg = "XX";
  2518. XX            Verbose++;
  2519. XX            Count++;
  2520. XX            Basename++;
  2521. XX            /* fall through to set prefix */
  2522. XX        case 'p': 
  2523. XX            (void) sprintf(Filter, SED, Prefix = optarg); 
  2524. XX            break;
  2525. XX        case 'u':
  2526. XX            UnShar++;
  2527. XX            dounshar(optarg);
  2528. XX            break;
  2529. XX        default: 
  2530. XX            errflg++;
  2531. XX        }
  2532. XX    }
  2533. XX    if (UnShar) exit(0);
  2534. XX
  2535. XX    C = getarg(argc, argv);
  2536. XX    if (errflg || EOF == C) {
  2537. XX        if (EOF == C)
  2538. XX            fprintf(stderr, "shar: No input files\n");
  2539. XX        fprintf(stderr, "%s%s%s", Usage1, Usage2, Usage3);
  2540. XX        exit(1);
  2541. XX    }
  2542. XX
  2543. XX    savind = 0;
  2544. XX    do {
  2545. XX        if (getpat(optarg)) exit(2);
  2546. XX    } 
  2547. XX    while (EOF != (C = getarg(argc, argv)));
  2548. XX
  2549. XX    sav[savind] = 0;
  2550. XX    header(sav);
  2551. XX    for (ppchList = sav; *ppchList; ++ppchList) {
  2552. XX
  2553. XX#ifdef CPM
  2554. XX     strlower(*ppchList);
  2555. XX#endif
  2556. XX
  2557. XX     shar(*ppchList);
  2558. XX    }
  2559. XX    puts("#\tEnd of shell archive");
  2560. XX    puts("exit 0");
  2561. XX    exit(0);
  2562. XX}
  2563. XX
  2564. XXgetpat(pattern)
  2565. XXchar *pattern;
  2566. XX{
  2567. XX    register char *ptr;
  2568. XX    int temp;
  2569. XX
  2570. XX#ifdef AMIGA
  2571. XX    while (ptr = scdir(pattern)) {
  2572. XX#else
  2573. XX    ptr = pattern;
  2574. XX    {
  2575. XX#endif
  2576. XX    sav[savind] = malloc(strlen(ptr)+1);
  2577. XX    strcpy(sav[savind++],ptr);
  2578. XX#ifdef CPM
  2579. XX    temp = open(ptr,O_RDONLY);
  2580. XX    if (temp == -1) {
  2581. XX#else
  2582. XX    if (access(ptr,4)) {
  2583. XX#endif
  2584. XX        printf("No read access for file: %s\n",ptr);
  2585. XX        return(-1);
  2586. XX    }
  2587. XX
  2588. XX#ifdef CPM
  2589. XX    close(temp);
  2590. XX#endif
  2591. XX    }
  2592. XX    return(0);
  2593. XX}
  2594. XX
  2595. XX
  2596. XX/*
  2597. XX * get option letter from argument vector
  2598. XX */
  2599. XXint
  2600. XXgetopt(nargc, nargv, ostr)
  2601. XXint nargc;
  2602. XXchar **nargv, *ostr;
  2603. XX{
  2604. XX    register char    *oli;        /* option letter list index */
  2605. XX    static char    *place = EMSG;    /* option letter processing */
  2606. XX    if(!*place) {            /* update scanning pointer */
  2607. XX        if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place)
  2608. XX         return(EOF);
  2609. XX        if (*place == '-') {    /* found "--" */
  2610. XX            ++optind;
  2611. XX            return EOF;
  2612. XX        }
  2613. XX    }                /* option letter okay? */
  2614. XX    if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) {
  2615. XX        if(!*place) ++optind;
  2616. XX        tell(": illegal option -- ");
  2617. XX    }
  2618. XX    if (*++oli != ':') {        /* don't need argument */
  2619. XX        optarg = NULL;
  2620. XX        if (!*place)
  2621. XX            ++optind;
  2622. XX    } 
  2623. XX    else {                /* need an argument */
  2624. XX        if (*place) {            /* no white space */
  2625. XX            optarg = place;
  2626. XX        } 
  2627. XX        else {
  2628. XX        if (nargc <= ++optind) {    /* no arg */
  2629. XX                    place = EMSG;
  2630. XX                    tell(": option requires an argument -- ");
  2631. XX                }
  2632. XX            else {
  2633. XX                optarg = nargv[optind];    /* white space */
  2634. XX        }
  2635. XX        }
  2636. XX        place = EMSG;
  2637. XX        ++optind;
  2638. XX    }
  2639. XX    return(optopt);            /* dump back option letter */
  2640. XX}
  2641. XX
  2642. XX
  2643. XXint
  2644. XXgetarg(nargc, nargv)
  2645. XXint nargc;
  2646. XXchar **nargv;
  2647. XX{
  2648. XX    if (nargc <= optind) {
  2649. XX        optarg = (char *) 0;
  2650. XX        return EOF;
  2651. XX    } 
  2652. XX    else {
  2653. XX        optarg = nargv[optind++];
  2654. XX        return 0;
  2655. XX    }
  2656. XX}
  2657. XX
  2658. XXdounshar(ArcNam)
  2659. XXchar *ArcNam;
  2660. XX{
  2661. XX    register int i,j;
  2662. XX    register FILE *inptr,*outptr;
  2663. XX    auto char line[BUFSIZ];
  2664. XX    int DirNum = -1;
  2665. XX    int Prefix = 0;
  2666. XX    char Dirs[5][40],FilNam[128],Delim[40],ScrStr[128];
  2667. XX    char *ptr;
  2668. XX
  2669. XX    if (!(inptr = fopen(ArcNam,"r"))) {
  2670. XX        fprintf(stderr,"shar: Can't open archive '%s'\n", ArcNam);
  2671. XX        return;
  2672. XX    }
  2673. XX    while (fgets(line,BUFSIZ,inptr)) {
  2674. XX        if (strncmp(line,"sed ",4) == 0) {
  2675. XX            Prefix = 0;
  2676. XX            if (!(ptr = index(line,'/'))) goto getfil;
  2677. XX            if (*++ptr == '^') ++ptr;
  2678. XX            while (*ptr++ != '/') Prefix++;
  2679. XX            goto getfil;
  2680. XX        }
  2681. XX        else if (strncmp(line,"cat ",4) == 0) {
  2682. XX            Prefix = 0;
  2683. XX            ;
  2684. XXgetfil:
  2685. XX
  2686. XX#ifdef    VMS
  2687. XX            strcpy(FilNam,"[");
  2688. XX#else
  2689. XX            FilNam[0] = 0;
  2690. XX#endif
  2691. XX
  2692. XX            for (i = 0; i <= DirNum; i++) {
  2693. XX
  2694. XX#ifdef    VMS
  2695. XX                strcat(FilNam,".");
  2696. XX                strcat(FilNam,Dirs[i]);
  2697. XX#else
  2698. XX                strcat(FilNam,Dirs[i]);
  2699. XX                strcat(FilNam,"/");
  2700. XX#endif
  2701. XX
  2702. XX            }
  2703. XX
  2704. XX
  2705. XX#ifdef    VMS
  2706. XX            strcat(FilNam,"]");
  2707. XX#endif
  2708. XX
  2709. XX            getshpar(line,">",ScrStr);
  2710. XX            strcat(FilNam,ScrStr);
  2711. XX
  2712. XX#ifdef CPM
  2713. XX        tocpmformat(FilNam);    /* tweek format as needed */
  2714. XX#endif
  2715. XX            getshpar(line,"<<",Delim);
  2716. XX            fprintf(stderr,"Creating %s ...",FilNam);
  2717. XX            outptr = fopen(FilNam,"w");
  2718. XX            while (fgets(line,BUFSIZ,inptr)) {
  2719. XX                if (strncmp(line,Delim,strlen(Delim)) == 0) break;
  2720. XX                if (outptr) fputs(&line[Prefix],outptr);
  2721. XX            }
  2722. XX            if (outptr) {
  2723. XX                fclose(outptr);
  2724. XX                fprintf(stderr,"...done\n");
  2725. XX            }
  2726. XX            else fprintf(stderr,"...error in creating file\n");
  2727. XX        }
  2728. XX        else if (strncmp(line,"mkdir ",6) == 0) {
  2729. XX            sprintf(stderr,"Need to make directory: %s\n",&line[6]);
  2730. XX        }
  2731. XX        else if (strncmp(line,"chdir ",6) == 0) {
  2732. XX            if (line[6] == '.' && line[7] == '.') DirNum--;
  2733. XX            else strcpy(Dirs[++DirNum],&line[6]);
  2734. XX            if (DirNum < -1) DirNum = -1;
  2735. XX        }
  2736. XX        else if (strncmp(line,"cd ",3) == 0) {
  2737. XX            if (line[3] == '.' && line[4] == '.') DirNum--;
  2738. XX            else strcpy(Dirs[++DirNum],&line[3]);
  2739. XX            if (DirNum < -1) DirNum = -1;
  2740. XX        }
  2741. XX    }
  2742. XX    fclose(inptr);
  2743. XX}
  2744. XX
  2745. XXgetshpar(line,sea,par)
  2746. XXchar *line,*sea,*par;
  2747. XX{
  2748. XX    register int i,j,k;
  2749. XX    register char *scr1,*scr2;
  2750. XX
  2751. XX    while (*line) {
  2752. XX        scr1 = line;
  2753. XX        scr2 = sea;
  2754. XX        while (*scr1 && *scr2 && *scr1 == *scr2) { 
  2755. XX            scr1++; 
  2756. XX            scr2++; 
  2757. XX        }
  2758. XX        if (*scr2 == 0) {
  2759. XX            if (*scr1 == 0) { 
  2760. XX                *par = 0; 
  2761. XX                return; 
  2762. XX            }
  2763. XX            while ( *scr1 == ' ' || *scr1 == '\t' ||
  2764. XX                *scr1 == '\\' || *scr1 == '\'' || *scr1 == '"') scr1++;
  2765. XX            while ( *scr1 != 0 && *scr1 != ' ' && *scr1 != '\t' &&
  2766. XX                *scr1 != '\\' && *scr1 != '\'' && *scr1 != '"' &&
  2767. XX                *scr1 != '\n' && *scr1 != '\r') *par++ = *scr1++;
  2768. XX            *par = 0;
  2769. XX            return;
  2770. XX        }
  2771. XX        line++;
  2772. XX    }
  2773. XX    *par = 0;
  2774. XX}
  2775. XX
  2776. XX
  2777. XX#ifdef CPM
  2778. XX
  2779. XXtocpmformat(filename)
  2780. XXchar *filename;
  2781. XX{
  2782. XX    char buffer[100];
  2783. XX    char extension[100];
  2784. XX    register char *temp;
  2785. XX    int mod = 0;
  2786. XX
  2787. XX    strcpy(buffer,filename);
  2788. XX
  2789. XX    /* 
  2790. XX      * Make sure we get rid of any pathnames
  2791. XX     */
  2792. XX    if ((temp=rindex(buffer,'/')) != 0) {
  2793. XX        strcpy(buffer,(char *)((temp-buffer)+filename+1));
  2794. XX        mod = 1;
  2795. XX    }
  2796. XX
  2797. XX    if (strlen(filename) <= 8) {
  2798. XX        if (mod != 0) {
  2799. XX            strcpy(filename,buffer);
  2800. XX        }
  2801. XX        return(0);
  2802. XX    }
  2803. XX
  2804. XX    /*
  2805. XX     * If it already is in "CPM" format we'll check if we need
  2806. XX     * to truncate the front filename part.
  2807. XX     */
  2808. XX    if ((temp=index(buffer,'.')) != 0 ) {
  2809. XX        if ((temp-buffer) < 8) {
  2810. XX            if (mod != 0) {
  2811. XX                strcpy(filename,buffer);
  2812. XX            }
  2813. XX            return(0);
  2814. XX        }
  2815. XX        else {
  2816. XX            strcpy(extension,temp);
  2817. XX            strcpy(&buffer[8],extension);
  2818. XX            buffer[12] = '\0';
  2819. XX            strcpy(filename,buffer);
  2820. XX            return(1);
  2821. XX        }
  2822. XX    }
  2823. XX            
  2824. XX    /*
  2825. XX     * OK, filename is longer than can be handled, and it doesnt have
  2826. XX     * a filetype "." marker already.  We will put one in to minimize
  2827. XX     * truncation.
  2828. XX     */
  2829. XX    strcpy(extension,&buffer[8]);
  2830. XX    buffer[8] = '.';
  2831. XX    strcpy(&buffer[9],extension);
  2832. XX    buffer[12] = '\0';
  2833. XX    strcpy(filename,buffer);
  2834. XX    return(2);
  2835. XX}
  2836. XX
  2837. XX
  2838. XX    
  2839. XXstrlower(string)
  2840. XXchar *string;
  2841. XX{
  2842. XX    register char *pointer;
  2843. XX    char c;
  2844. XX    for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
  2845. XX        if (isupper(c))
  2846. XX            *pointer = tolower(c);
  2847. XX    }
  2848. XX}
  2849. XX
  2850. XX#endif
  2851. SHAR_EOF
  2852. if test 12942 -ne "`wc -c shar.c`"
  2853. then
  2854. echo shar: error transmitting shar.c '(should have been 12942 characters)'
  2855. fi
  2856. echo shar: extracting shar.uue
  2857. sed 's/^XX//' << \SHAR_EOF > shar.uue
  2858. XXbegin 644 SHAR.COM
  2859. XXMPT$F4TA!4E]%3T8`S3,5^/\A``#E_>$A`@+ES083T>LA!@`Y<R-R(0\"Y<T&
  2860. XXM$]'K(00`.7,C<B$4`N7-0AK1(2\"Y<U"&M$A90+ES4(:T2&1`N7-0AK1(<L"
  2861. XXMY<U"&M$AU0+ES4(:T2'O`N7-0AK1(10`.5XC5M7=X<.$`=WEX2,CY=WAW>7A
  2862. XXM?B.VRJ`!W6X`W68!Y2$@`^7-.A?1T<-\`2H,5Q$P`.O-D17*R0$A"``YY<W&
  2863. XXM1]$A"``YY<T32='E(28#Y<TZ%]'1(00`.7XCMLK^`2$&`#E^([;*Z`$A!@`Y
  2864. XXM7B-6Z\/K`2%0`^4A!@`Y7B-6U2%!`^7-.A?1T=$A``#)3U)'04Y)6D%424].
  2865. XXM`$Y!344`(PE4:&ES(&ES(&$@<VAE;&P@87)C:&EV92X`(PE296UO=F4@979E
  2866. XXM<GET:&EN9R!A8F]V92!A;F0@:6YC;'5D:6YG('1H92!C=70@;&EN92X`(PE4
  2867. XXM:&5N(')U;B!T:&4@<F5S="!O9B!T:&4@9FEL92!T:')O=6=H('-H+@`C+2TM
  2868. XXM+6-U="!H97)E+2TM+2UC=70@:&5R92TM+2TM8W5T(&AE<F4M+2TM+6-U="!H
  2869. XXM97)E+2TM+2,`(R$O8FEN+W-H`",@<VAA<CH@("`@4VAE;&P@07)C:&EV97(`
  2870. XXM(PE2=6X@=&AE(&9O;&QO=VEN9R!T97AT('=I=&@@+V)I;B]S:"!T;R!C<F5A
  2871. XXM=&4Z`",))7,*`",@5&AI<R!A<F-H:79E(&-R96%T960Z("5S`",@0GDZ"25S
  2872. XXM("@E<RD*`$1A=F4@5V5C:V5R($UI9&YI9VAT($AA8VMS`,TS%0#\(3`$Y2$.
  2873. XXM!#E>(U;5S9P7T=%$37RURA8$(0X$.5XC5M4JH%;E(:)6Y2$R!.7-.A?K(0@`
  2874. XXM.?G%(0`$Y2$(`#GES7$9T='1R@4$*@97?+7*S0,A)%;E*@97Y<V&&M'1(216
  2875. XXMY2$&`#GES88:T=$JGE9\M<H"!"%06>4A!@`YY<V10M'-7T?-043AY<WO0\VK
  2876. XXM1.'-`D3#I0,JH%;ES4(:T<7-,QW1(0``R2$,!#E>(U;5(4($Y2$O5N7-71?1
  2877. XXMT=$A`0#)<@`E<R`\/"!<)7,@/B`E<PH`<VAA<CH@0V%N)W0@;W!E;B`G)7,G
  2878. XXM"@#-,Q4``"$,`#E>(U9"2R$U!>4A#@`Y7B-6U<TS0M'1PGP$R2%06>7-Z$,`
  2879. XXM````X<T"1"J25GRURLT$8&E^M\JC!&!I(T1-*\.3!&!IZR$,`#E^(V9OS><6
  2880. XXMRLT$(?__"5X6`"$O`,V!%<K-!&!I*T1-(\.C!"H.5WRURM\$Q2$W!>7-.A?1
  2881. XXMT<4A#@`Y7B-6U<UK`]'1RO@$(4(`Y<V.*M$JGE9\M<HT!<4A4%G-[T/-%40A
  2882. XXM407ES3H7ZR$(`#GYQ2%O!>7-.A?1T2%06<WO0\T51"&6!>7-.A?1T=')+@!E
  2883. XXM8VAO('-H87(Z(&5X=')A8W1I;F<@)7,*`&EF('1E<W0@)6QD("UN92`B8'=C
  2884. XXM("UC("5S8"(*`'1H96X*96-H;R!S:&%R.B!E<G)O<B!T<F%N<VUI='1I;F<@
  2885. XXM)7,@`"<H<VAO=6QD(&AA=F4@8F5E;B`E;&0@8VAA<F%C=&5R<RDG"F9I"@#-
  2886. XXM,Q4`_B$$`#GEW>$A``#E_>$A``#E(0P`Y<U1)M'1$?\`S2(5(@Q7(=P'Y2$0
  2887. XXM`CE>(U;5(1`".5XC5M7-S0C1T=%$3>4A___1S8$5RL8&Q<US0]'*'0;%S<1#
  2888. XXMT<,?!F!IPZ`&*@Y7(R(.5RO#PP8JGE8C(IY6*\/#!BJ25B,BDE8KP\,&*J!9
  2889. XXM(J!6P\,&(><'(J!9*@Y7(R(.5RLJGE8C(IY6*RJ25B,BDE8K*J!9(@97Y2'J
  2890. XXM!^4AHE;ES:\?T='1P\,&*A!7(R(05RLJH%GES>D*T</#!OWEX2/E_>$KP\,&
  2891. XXMS;$6!P!V`"(&8P`M!F(`.`9D`$,&80!,!G``:@9U`((&E0;#Y@4J$%=\M<K6
  2892. XXM!B$``.7-CBK1(0X".5XC5M4A#@(Y7B-6U<VL"M'11$W]Y>%\M<(`!R'__U!9
  2893. XXMS7(5RCT'(?__4%G-<A7*&`<A^`?E(2]6Y<U=%]'1(5]8Y2'55^4A$E?E(0X(
  2894. XXMY2$O5N7-71?K(0H`.?DA`0#ES8XJT2$``")L6BJ@6>7-,PC1RE8'(0(`Y<V.
  2895. XXM*M$A#@(Y7B-6U2$.`CE>(U;5S:P*T=%$3>4A___1S8$5PD,'(0``Y2IL6BD1
  2896. XXMI%D9T7,C<B&D6>7-#`'1(:19Y=WAPZ$'W>7A(R/EW>'=Y>%^([;*PP?=;@#=
  2897. XXM9@'ES;T2T=UN`-UF`>7-6031PYD'(14(Y<U"&M$A+`CES4(:T2$``.7-CBK1
  2898. XXMR54Z05`Z1#I"0U8`6%@`<V5D("=S+UXE<R\O)P!S:&%R.B!.;R!I;G!U="!F
  2899. XXM:6QE<PH`)7,E<R5S`",)16YD(&]F('-H96QL(&%R8VAI=F4`97AI="`P`,TS
  2900. XXM%?[_(0X`.5XC5D)+Q<V10M$CY<W@,M'E*FQ:*1&D61G1<R-RQ2IL6B,B;%HK
  2901. XXM*1&D61E>(U;5S6Q"T=$A``#EQ<TL-M'1ZR$$`#ES(W(A!``Y7B-6(?__S7(5
  2902. XXMRJ`(Q2&P".7-.A?1T2'__\DA!``Y7B-6U<V8-]$A``#)3F\@<F5A9"!A8V-E
  2903. XXM<W,@9F]R(&9I;&4Z("5S"@#-,Q4``"H\47ZWPC<)*DY9ZR$,`#E^(V9OS9$5
  2904. XXMPAD)*DY9*>LA#@`Y?B-F;QE>(U;K(CQ17A8`(2T`S8$5PAD)*CQ1(R(\47ZW
  2905. XXMPAT)(?__R2H\45X6`"$M`,UR%<HW"2I.62,B3EDA___)*CQ1(R(\42M>%@#K
  2906. XXM(J)9$3H`S7(5PF<)*J)9Y2$2`#E>(U;5S1-#T=%$37RUPK8)*CQ1?K?"=@DJ
  2907. XXM3EDC(DY9(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6Y2%S"N7-AAK1T2$O5N4J
  2908. XXMHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R6!I(T1-7A8`(3H`S8$5RM\)(0``
  2909. XXM(J!9*CQ1?K?"W`DJ3EDC(DY9PVX**CQ1?K?*\`DJ/%$BH%G#80HJ3EDC(DY9
  2910. XXMY2$.`#E>(U;AS9(5RDP*(8@*(CQ1(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6
  2911. XXMY2&)"N7-AAK1T2$O5N4JHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R2I.62GK
  2912. XXM(0X`.7XC9F\97B-6ZR*@62&K"B(\42I.62,B3EDJHEG)`#H@:6QL96=A;"!O
  2913. XXM<'1I;VX@+2T@```Z(&]P=&EO;B!R97%U:7)E<R!A;B!A<F=U;65N="`M+2``
  2914. XXM`,TS%0``(0P`.5XC5BI.6<V2%<K+"B$``"*@62'__\DJ3EDC(DY9*RGK(0X`
  2915. XXM.7XC9F\97B-6ZR*@62$``,G-,Q4(^B'__^LA^`$Y<R-R(0``ZR'V`3ES(W(A
  2916. XXMG`[E(08&.5XC5M7-G!?1T>7]X7RUPC0+(00&.5XC5M4AG@[E(2]6Y<U=%]'1
  2917. XXMT<G]Y2$`!.4A_@$YY<UQ&='1T<J5#B$$`.4AO0[E(?X!.>7-JD+1T='"XPLA
  2918. XXM``#K(?8!.7,C<B$O`.4A_`$YY<T30]'1ZR$$`#ES(W)ZL\H$#"$$`#GE?B-F
  2919. XXM;R/KX7,C<NM>%@`A7@#-<A7*KPLA!``YY7XC9F\CZ^%S(W(A!``YY7XC9F\C
  2920. XXMZ^%S(W+K*UX6`"$O`,V!%<K@"R'V`3GE?B-F;R/KX7,C<NLKPZ\+PP0,(00`
  2921. XXMY2'"#N4A_@$YY<VJ0M'1T<)-#2$``.LA]@$Y<R-R(0``ZR&N`#ES(0``1$W#
  2922. XXM&PQ@:2-$32M@:>LA^`$Y?B-F;\V2%<I6#&!I$2@`S2H6ZR$N`3D9Y2&P`#GE
  2923. XXMS=="T=$AQP[E(;``.>7-UT+1T<,5#"$&`#GE(<D.Y2'^`3GES3(/T='1(08`
  2924. XXM.>4AL``YY<W70M'1(:X`.>7-71'1(88`.>4ARP[E(?X!.>7-,@_1T=$AK@`Y
  2925. XXMY2'.#N4A+U;ES5T7T='1(=X.Y2&P`#GES9P7T='K(?H%.7,C<OWE(0`$Y2'^
  2926. XXM`3GES7$9T='1RA<-(88`.>7-D4+1Y2&(`#GE(?X!.>7-JD+1T='*%PTA^@4Y
  2927. XXM?B.VRA0-(?H%.5XC5M4A^`$Y7B-6(?P!.1GES88:T='#OPPA^@4Y?B.VRCT-
  2928. XXM(?H%.5XC5M7-,QW1(>`.Y2$O5N7-71?1T<-*#2'I#N4A+U;ES5T7T='#D@XA
  2929. XXM!@#E(00/Y2'^`3GES:I"T='1PGD-(0`".>4A"P_E(2]6Y<VO']'1T<.2#B$&
  2930. XXM`.4A)P_E(?X!.>7-JD+1T='"!PXA``(Y7A8`(2X`S7(5RL,-(0$".5X6`"$N
  2931. XXM`,UR%<K##2'X`3GE?B-F;ROKX7,C<NLCP^D-(0`".>4A^@$YY7XC9F\CZ^%S
  2932. XXM(W(A*`#-*A;K(3`!.1GES6Q"T=$A^`$Y7B-6(?__S:P5R@0.(?__ZR'X`3ES
  2933. XXM(W+#D@XA`P#E(2X/Y2'^`3GES:I"T='1PI(.(?T!.5X6`"$N`,UR%<I1#B'^
  2934. XXM`3E>%@`A+@#-<A7*40XA^`$YY7XC9F\KZ^%S(W+K(\-W#B']`3GE(?H!.>5^
  2935. XXM(V9O(^OA<R-R(2@`S2H6ZR$P`3D9Y<UL0M'1(?@!.5XC5B'__\VL%<J2#B'_
  2936. XXM_^LA^`$Y<R-RPS0+_>7-,QW1R7(`<VAA<CH@0V%N)W0@;W!E;B!A<F-H:79E
  2937. XXM("<E<R<*`'-E9"``8V%T(``O`#X`/#P`0W)E871I;F<@)7,@+BXN`'<`+BXN
  2938. XXM9&]N90H`+BXN97)R;W(@:6X@8W)E871I;F<@9FEL90H`;6MD:7(@`$YE960@
  2939. XXM=&\@;6%K92!D:7)E8W1O<GDZ("5S"@!C:&1I<B``8V0@`,TS%?S_(1``.5XC
  2940. XXM5NM^M\I.$2$0`#E>(U8A!@`Y<R-R(1(`.5XC5B$$`#ES(W(A!@`Y7B-6ZWZW
  2941. XXMRKT/(00`.5XC5NM^M\J]#R$$`#E>(U;K7A8`U2$(`#E>(U;K7A8`X<UR%<J]
  2942. XXM#R$&`#GE?B-F;R/KX7,C<NLK(00`.>5^(V9O(^OA<R-RZRO#8`\A!``Y7B-6
  2943. XXMZUX6`'JSPCH1(08`.5XC5NM>%@!ZL\+L#R$``.4A%@`Y7B-6Z]%SR2$&`#E>
  2944. XXM(U;K7A8`(2``S7(5PE`0(08`.5XC5NM>%@`A"0#-<A7"4!`A!@`Y7B-6ZUX6
  2945. XXM`"%<`,UR%<)0$"$&`#E>(U;K7A8`(2<`S7(5PE`0(08`.5XC5NM>%@`A(@#-
  2946. XXM<A7*9!`A!@`YY7XC9F\CZ^%S(W+K*\/L#R$&`#E>(U;K7A8`>K/**Q$A!@`Y
  2947. XXM7B-6ZUX6`"$@`,V!%<HK$2$&`#E>(U;K7A8`(0D`S8$5RBL1(08`.5XC5NM>
  2948. XXM%@`A7`#-@17**Q$A!@`Y7B-6ZUX6`"$G`,V!%<HK$2$&`#E>(U;K7A8`(2(`
  2949. XXMS8$5RBL1(08`.5XC5NM>%@`A"@#-@17**Q$A!@`Y7B-6ZUX6`"$-`,V!%<HK
  2950. XXM$2$&`#GE?B-F;R/KX7,C<NLK7A8`U2$6`#GE?B-F;R/KX7,C<NLKT7/#9!`A
  2951. XXM``#E(18`.5XC5NO1<\DA$``YY7XC9F\CZ^%S(W+K*\,W#R$``.4A%@`Y7B-6
  2952. XXMZ]%SR<TS%3;_(0``ZR$$`#ES(W(AU@`Y7B-6U2%L`#GES6Q"T=$A+P#E(6P`
  2953. XXM.>7--4/1T41-?+7*OQ%@:>LA:@`YS886ZR'6`#E^(V9O&2/E(6P`.>7-;$+1
  2954. XXMT2$!`.LA!``Y<R-R(=8`.5XC5M7-D4+1$0@`Z\V2%<KU$2$$`#E^([;*\1$A
  2955. XXM:@`YY2'8`#E>(U;5S6Q"T=$A``#)(2X`Y2%L`#GES1-#T=%$37RURG<28&GK
  2956. XXM(6H`.<V&%A$(`.O-K!7*/A(A!``Y?B.VRCH2(6H`.>4AV``Y7B-6U<UL0M'1
  2957. XXM(0``R<4A"``YY<UL0M'1(08`.>4A=``YY<UL0M'1(0``ZR%V`#ES(6H`.>4A
  2958. XXMV``Y7B-6U<UL0M'1(0$`R2%R`#GE(0@`.>7-;$+1T2$N`.LA<@`Y<R$&`#GE
  2959. XXM(74`.>7-;$+1T2$``.LA=@`Y<R%J`#GE(=@`.5XC5M7-;$+1T2$"`,G-,Q7_
  2960. XXM_R$-`#E>(U9"2\/4$F!I(T1-*V!I7A8`(00`.7-ZL\H%$R$$`#E>%@#5S7-#
  2961. XXMT<H"$R$$`#E>%@#5S<1#T>M@:7/#SA+)S3,5K/<A8`@Y7B-6U<V10M$13P#K
  2962. XXMS:T5RB43(0``R2$.%>4A`A7ES9P7T='K(00`.7,C<GJSPET3(1X5Y2$0%>7-
  2963. XXMG!?1T>LA!``Y<R-R>K/"71,A``#)(6`(.5XC5M4A"@@YY<UL0M'1(2`5Y2$*
  2964. XXM"#GES=="T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
  2965. XXM@17*RA,A!@`Y7B-6(0H`S8$5RLH3(08`.5XC5M5@:2-$32O1<\.*$R$``.M@
  2966. XXM:7-@:>LA"`0YS7(5RO(3(08`.5XC5B'__\UR%<KR$R$``,DA"`@YY<V10M'E
  2967. XXM(0H$.>4A#`@YY<VJ0M'1T<(2%,,5%,-]$R$("#GES9%"T>LA"`0Y&41-Q2$*
  2968. XXM`#GES6Q"T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
  2969. XXM@17*?A0A!@`Y7B-6(0H`S8$5RGX4(08`.5XC5M5@:2-$32O1<\,^%"$``.M@
  2970. XXM:7,A"`0Y7A8`U<U<0]'*V!0A"`0YY<V10M'*V!0A"``YY<V10M'E(0H$.>7-
  2971. XXMD4+1T1D1``3KS:P5RM$4(0@$.>4A"@`YY<W70M'1P]44(0``R</;%,/>%,,Q
  2972. XXM%"$(`#GES9%"T2/ES6,ST41->+'*_Q0A"``YY<7-;$+1T6!IR45.5DE23TXN
  2973. XXM1$%4`'(`03I%3E9)4D].+D1!5`!R`#T`?*)G?:-OM,E\+V=]+V^TR>GAW>7]
  2974. XXMY<5>(U8C1$TA```YZSGYU6!IS3(5Z^'YP?WAW>'K?+7)>JPR/U'-UQ7K.C]1
  2975. XXMM_I"%GVTR<WP%>M]M,E]D\)\%7R2RHL5(0``K\E]D\*+%7R2RGP5(0$`?;3)
  2976. XXMZWRJ^J05?9-\FC\^`,X`;R8`R7H'Y@%O)@#)ZWRJ^KX5?9-\FCX`S@!O)@#)
  2977. XXM?`?F`6\F`,EZ,C]1S=<5.C]1M_I"%GRUR7RW\N(5+V=]+V\C>K?R\!4O5WLO
  2978. XXM7Q/#\!7%1$TA```^$#(^42GK*>O2`Q8C?9%O?)AGTAL6"3H^43TR/E'"^Q7!
  2979. XXM?;3)$SH^43TR/E'"^Q7!?;3)Q41-(0``/A`IZRGKTCH6"3W",A;!?;3)?2]O
  2980. XXM?"]G(WVTR7RURHL5PWP5?+)G?;-OM,GK>^8?7\J#%GRT\OL6?#<?9WT?;QW"
  2981. XXM:1:TR>M[YA]?RH,6*1W"?A9]M,GK?9-O?)IGM<GKX<5.(T8CZPGK3B-&(WJX
  2982. XXMVJ<6>[G2JQ8C(QD97B-6Z\'IZ^'%0DM>(U8;>K?ZT18C>;[*RQ8C(R/#N18C
  2983. XXM>+["QA8C?B-F;\'IZWV3?)H^`#_.`&\F`,GK?9-\FCX`S@!O)@#)ZWOF'U_*
  2984. XXM@Q9\MQ]G?1]O'<+[%K3)?*IG?:MOM,GML,G1(0(`.=WE_>7%U1%`408&?A(C
  2985. XXM$P7"(Q<A,!?CZ<']X=WA?+7)-\G-,Q4``"$D5B)&42$.`#GE(0X`.5XC5M4A
  2986. XXMA1?ES?X?T='1R<TS%0``(0P`.5XC5NLB1E$A$``YY2$0`#E>(U;5(847Y<W^
  2987. XXM']'1T<G-,Q4``"I&4>4A#@`Y7B-6U<W$&M'1R<TS%0``(1E61$U@:1$&`!E^
  2988. XXMM\K*%V!I$0L`&41-$9)6Z\W8%LK'%R$``,G#IA<A#@`Y7B-6ZR->%@`A*P#-
  2989. XXM<A7EW>$A#@`Y7B-6ZUX6`.O#PAC=Y>%\M<K\%R$"`,/_%R$``.4A#@`Y7B-6
  2990. XXMU<TL-M'1ZR$'``ES(?__S7(5RB`8(0``R</5&-WEX7RURC$8(0(`PS08(0$`
  2991. XXM$0`#S506Y2$.`#E>(U;5S2PVT='K(0<`"7,A___-<A7*6Q@A``#)P]48W>7A
  2992. XXM?+7*;!@A`@##;Q@A`0`1``'-5!;E(0X`.5XC5M7-+#;1T>LA!P`)<R'__\UR
  2993. XXM%<J6&"$``,DA`@#ES>A#`````,T51"$'``E>%@#5S;4_ZR$(`#GYP]48(?K_
  2994. XXM(I99(0``R<VQ%@,`<@#N%W<`(QAA`%X8N!@A`0#K(08`"7,A``3K(0D`"7,C
  2995. XXM<B$``.M@:7,C<B$"``ES(W(A!``)<R-R8&G)S3,5```A#``Y7B-60DLA&5;E
  2996. XXMS?H9T>7=X1'__\V!%<I`&=WEX1$*`,V!%<I`&=WEX>5@:2-$32O1<\,1&2$`
  2997. XXM`.M@:7/=Y>$1___-<A7*:!E@:>LA#``Y?B-F;\UR%<IH&2$``,DA#``Y7B-6
  2998. XXMZ\G-,Q4``"$,`#E>(U;5W>$A#@`YY7XC9F\KZ^%S(W(A``#-K17*RADA$``Y
  2999. XXM7B-6U<WZ&=%$31'__\V!%<K*&6!IY=WEX2/EW>$KT7-@:1$*`,UR%<+*&<.`
  3000. XXM&2$``-UU`&!I$?__S7(5RO$9W>7AZR$,`#E^(V9OS7(5RO$9(0``R2$,`#E>
  3001. XXM(U;KR<TS%0``(0P`.4XC1L7-6!O1$7\`S2(5Y=WAPRL:8&GE?B-F;ROKX7,C
  3002. XXM<B'__\G#!AK-L18#`!H`%QH-`"@:```H&CX:W>7AR<TS%0``(0P`.4XC1F!I
  3003. XXM?K?*>!HA)%;E8&DC1$TK7A8`U<W$&M'1$?__S7(5RG4:(?__R<-.&B$D5N4A
  3004. XXM"@#ES<0:T=')S3,5```A#``Y3B-&8&E^M\K`&B$.`#E>(U;58&DC1$TK7A8`
  3005. XXMU<W$&M'1$?__S7(5RKT:(?__R<.2&B$``,G-,Q4``"$,`#E.(T8A#@`Y7B-6
  3006. XXMU=WA(7\`4%G-(A5$36!I$0H`S7(5R@<;W>4A#0#ES9P<T=$1___-<A7*!QLA
  3007. XXM___)W>7%S9P<T=')S3,5```A#``Y7B-6U<U8&]%$31'__\UR%<)$&R$,`#E>
  3008. XXM(U;5S5@;T>7=X1'__\UR%<I(&R'__\G=Y>$1"`#KS7864%G-5!;)S3,5```A
  3009. XXM#``Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*'!PA!@`)7A8`(0@`S2(5RHP;(?__
  3010. XXMR2'[_^5@:1$&`!G1Y6XF`,TB%>OA<V!I$00`&7XCML*R&\7-&1_1(0D`"5XC
  3011. XXM5M4A!``)7B-6U2$'``E>%@#5S:<YT='1Y=WA$0``Z\V2%<H$'-WEX7RUPNL;
  3012. XXM(0@`P^X;(1``Y6!I$08`&='E;B8`S506Z^%S(?__R2$$``E>(U9@:7,C<MWE
  3013. XXMX1GK(0(`"7,C<F!IY7XC9F\CZ^%S(W+K*UX6`"'_`,TB%<G-,Q4``"$O5N4A
  3014. XXM#@`Y7B-6U<V<'-'1R<TS%0``(0P`.4XC1B$.`#E>(U;5Q<V<'-'1$0``Z\VL
  3015. XXM%<IT'"'__\DA#@`Y7B-6U6!I$0@`Z\WS%N7-G!S1T1$``.O-K!7*F1PA___)
  3016. XXM8&G)S3,5```A#@`Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*T1PA#``Y7B-6(?\`
  3017. XXMS2(5Y<7-TAW1T<DA#``Y7B-6U6!IY7XC9F\CZ^%S(W+K*]%S(?\`S2(5R<TS
  3018. XXM%0``(?__Y2$.`#E>(U;5S=(=T=')S3,5```A&59$36!I$9)6Z\WF%LHR'6!I
  3019. XXM$0L`&41-$?7_&>7-,QW1PQ(=R<TS%?[_(0X`.4XC1B$``.LA!``Y<R-R8&D1
  3020. XXM!@`9?K?*P!TA!@`)7A8`(00`S2(5RG<=(?__Y<7-TAW1T>LA!``Y<R-R(0<`
  3021. XXM"5X6`-7-F#?1ZR$$`#GE?B-F;\U4%NOA<R-R(08`"5X6`"$"`,TB%<K`'2J<
  3022. XXM5N4A!``)7B-6Z]%S(W(A!``)7B-6ZR*<5B$``.LA!@`)<R$$`#E>(U;KR<TS
  3023. XXM%0``(0P`.4XC1B$&``E>%@`A!`#-(A7*/!XA!``)7B-6U6!I7B-6X<V&%N7=
  3024. XXMX=WE(00`"5XC5M4A!P`)7A8`U<WC/-'1T1'__\UR%<H\'B$0`.5@:1$&`!G1
  3025. XXMY6XF`,U4%NOA<R'__\DA#@`Y7B-6(?__S7(5RG4>(?O_Y6!I$08`&='E;B8`
  3026. XXMS2(5Z^%S(0``ZV!I<R-R(0(`"7,C<B$``,E@:1$$`!E^([;"AA[%S1D?T2$)
  3027. XXM``E>(U8A`0#-<A7*OQXA`0#E(1``.>4A!P`)7A8`U<WC/-'1T1'__\UR%<(C
  3028. XXM'B$.`#E>(U;KR2$$``E>(U9@:7,C<B$)``E>(U;5(00`"5XC5N$9ZR$"``ES
  3029. XXM(W(A!`#E8&D1!@`9T>5N)@#-5!;KX7,A#@`Y7B-6U6!IY7XC9F\CZ^%S(W+K
  3030. XXM*]%S(?\`S2(5R<TS%?[_(0X`.4XC1B$)``E>(U8A`0#-<A7*1!]@:1$(`!GK
  3031. XXM(00`"7,C<LDJG%9\M<ID'RJ<5NLA!``Y<R-R*IQ67B-6ZR*<5L.+'R$)``E>
  3032. XXM(U;5S6,ST>LA!``Y<R-R>K/"BQ\A`0#K(0D`"7,C<L,U'R$"`.5@:1$&`!G1
  3033. XXMY6XF`,U4%NOA<R$$`#E>(U8A!``)<R-RR<TS%0``(0P`.5XC5NLB2%$A$``Y
  3034. XXMY2$0`#E>(U;5(>`?Y<W^']'1T2$``.4J2%'1<\G-,Q4``"$,`#E>(U;5*DA1
  3035. XXM(R)(42O1<R'_`,TB%<G-,Q6^_R%.`#E.(T8A4``Y7B-6U=WAW>7A(^7=X2M>
  3036. XXM%@#5_>%ZL\H0)?WEX1$E`,UR%<H%)2$``.LA&@`Y<R$!`.LA1``Y<R-R(2``
  3037. XXMZR%"`#ES(W(A_W_K(4``.7,C<MUN`"8`Y?WA$2T`S7(5RH<@(0``ZR%$`#ES
  3038. XXM(W+=Y>$CY=WA*UX6`-7]X?WEX1$P`,UR%<J>("$P`.LA0@`Y<R-R(0``ZR$^
  3039. XXM`#ES(W+=Y>$CY=WA*UX6`-7]X2$P`,V1%<KM(/WEX1$Y`.O-DA7*[2`A/@`Y
  3040. XXM7B-6(0H`S2H6_>71&1'0_QGK(3X`.7,C<L.I(/WEX1$N`,UR%<I((2$``.LA
  3041. XXM0``Y<R-RW>7A(^7=X2M>%@#5_>$A,`#-D17*2"']Y>$1.0#KS9(5RD@A(4``
  3042. XXM.5XC5B$*`,TJ%OWET1D1T/\9ZR%``#ES(W+#!"']Y>$1;`#-<A7*B"'=Y>$C
  3043. XXMY=WA*UX6`-7]X2$Z`#GE(50`.>5^(V9O$00`&>OA<R-RZQ'\_QG-[T/AS0)$
  3044. XXMPR<B_>7A$60`S7(5RKHA(3H`.>4A5``YY7XC9F\C(^OA<R-RZRLK7B-6Z\U?
  3045. XXM1^'-`D3#)R+]Y>$190#-<A7"WB']Y>$19@#-<A7"WB']Y>$19P#-<A7*!"(A
  3046. XXM!``YY2%4`#GE?B-F;Q$(`!GKX7,C<NL1^/\9S7I'X<UZ1\,G(B$Z`#GE(50`
  3047. XXM.>5^(V9O(R/KX7,C<NLK*UXC5NO-44?AS0)$_>7AP]$C(1H`.>4A"`#E(3X`
  3048. XXM.<WO0\T51,US)>LA"``Y^2$T`#ES(W+#^",A.@`YS>]#S=I#`````,TG1\JF
  3049. XXM(B$:`#GE(0H`Y2$^`#G-[T/-4$3-%43-$27K(0@`.?DA-``Y<R-R(2T`Y2$V
  3050. XXM`#GE?B-F;ROKX7,C<NO1<\/)(B$:`#GE(0H`Y2$^`#G-[T/-%43-$27K(0@`
  3051. XXM.?DA-``Y<R-RP_@C(1H`.>4A"@#E(3X`.<WO0\T51,US)>LA"``Y^2$T`#ES
  3052. XXM(W+#^",A&@`YY2$0`.4A/@`YS>]#S15$S7,EZR$(`#GY(30`.7,C<L/X(R$Z
  3053. XXM`#G-[T/-<D?K(30`.7,C<M7-D4+1ZR$X`#ES(W+#$"3]Y>$190#-<A7*3",A
  3054. XXM``##3R,A`0#E(4(`.5XC5B'_?\UR%<IF(R$&`,-N(R%"`#E>(U;KY2$0`#GE
  3055. XXM(0H`.<UZ1\UZ1\UZ1^LA#@`Y^2$,`#GK(30`.7,C<M7-D4+1ZR$X`#ES(W(A
  3056. XXMR`#K(4``.7,C<L,0)"$Z`#G-[T/-<D?E_>']Y>'E(1L`.>LA-@`Y<R-RZ]%S
  3057. XXMP_@CS;$6"`!O`"TB9`!3(G4`S")X`/(B<P`8(V4`.B-F`#HC8P"N([LC(1H`
  3058. XXM.>LA-``Y?B-F;\V&%NLA.``Y<R-R(3@`.5XC5B%``#E^(V9OS:T5RC,D(4``
  3059. XXM.5XC5B$X`#ES(W(A1``Y?B.VRFXD(3X`.>5^(V9O*^OA<R-RZR/K(3@`.7XC
  3060. XXM9F_-K17*;B0A0@`Y7B-6U6!IS3(5T<,])"$``.LA-@`Y<R-RPXLD(38`.>5^
  3061. XXM(V9O(^OA<R-R(30`.5XC5NM^M\K+)"$V`#E>(U8A0``Y?B-F;\VL%<K+)"$T
  3062. XXM`#GE?B-F;R/KX7,C<NLK7A8`U6!IS3(5T<-\)"%$`#E^([;"`B4A/@`YY7XC
  3063. XXM9F\KZ^%S(W+K(^LA.``Y?B-F;\VM%<H")2$@`.5@:<TR%='#U23##27]Y6!I
  3064. XXMS3(5T<,4(,G-,Q4``"$0`#E.(T8A$@`Y7B-6U=WA8&G-7T?-%40A$``YS>]#
  3065. XXMS2U$S=5%S7)'$4I1&5X6`-7=Y>$KY=WAT7,A#``YY6!IS5]'S4%$X>7-[T/-
  3066. XXMFT7AS0)$S6!$PB<EW>7AR<TS%0``(1``.4XC1B$2`#E>(U;5W>$A#``YS>]#
  3067. XXMS=I#`````,TG1\HI)B$,`#G-[T/-<D<1`0#-(A7E_>$A#``YY2$.`#G-[T/-
  3068. XXMVD,!````S5)%S=I#____?\W71.'-`D1@:1$!`.O-7!;-7T?-%40A$``YS>]#
  3069. XXMS2U$S=5%S7)'*?WET1D12E$97A8`U=WEX2OEW>'1<R$,`#GE8&D1`0#KS5P6
  3070. XXMS5]'S4%$X>7-[T/-FT7AS0)$W>7%(1``.<WO0\T51,T1)>LA"``Y^>O)*@8`
  3071. XXM^<T^)P$``,T%`,-()LT3%\U<)NO)S1,7*D!11$TJ0E'KS04`ZV\F`,G-$Q?-
  3072. XXM>B9O)@#)S1,7*D!1ZRH!`"LK*QD9&>LJ0E%$32I$4>OIQ2$$`#E.(T8C7B-6
  3073. XXM:V(V`",^"S8@(SW"I28^!#8`(SW"KB;K`PK^.@L^`,+A)@KF?_Y!VALG_EO2
  3074. XXMTB;60,/>)OYAVALG_GO2&R?68'<#`R,>"!P*`_XNROPFM\H5)QW*Y";-(B=W
  3075. XXM(\/E)AU[A6]\S@!G'@,*`[?*%2?-(B=W(QW"!B<A``"OP<DA__]\M\')_F'8
  3076. XXM_GO0UB#))%!)4$4N24X`)%!)4$4N3U54`,TS%0``(7\`Y2&!`.4A6U+ES?=!
  3077. XXMT='1(0``Y3J``&\F`!%_`,TB%1%;4AG1<R$``'TR@``A9RHB6U$A6U+EW>$A
  3078. XXM`0`BVU(JVU(1@`#KS:P5RE0JW6X`)@`1(`#-<A7"K2?=;@`F`!$)`,UR%<JW
  3079. XXM)]WEX2/EW>'#D2?=;@`F`'RUPL0GPU0JW6X`)@`1?`#-<A7*\"<A`0`BW5+=
  3080. XXMY>$CY=WA(M]2*@I7Y?WA(0$`1$W#N2C=;@`F`!$^`,UR%<H&*"$!`$1-PQDH
  3081. XXMW6X`)@`1/`#-<A7*0"DA``!$3=WEX2/EW>%>%@`A(`#-<A7".BC=;@`F`!$)
  3082. XXM`,UR%<H]*,,9*-WEX>7]X=WEX2/EW>%^M\I_*-UN`"8`$2``S7(5PFLHW6X`
  3083. XXM)@`1"0#-<A7*?"@A``#EW>7A(^7=X2O1<\-_*,-#*'BQPKDH_>7-23+1RKDH
  3084. XXM(0$`Y2K;4BD16U$9Y?WES?`NT='1$0$`S7(5RKDH*MM2*1%;41E>(U;5_>'%
  3085. XXMS9@WT7BQROPH(;8!Y?WES0PVT=%$36!I*2DI$?18&5XC5B%[.<UR%<KY*"$`
  3086. XXM!.5@:1$+`,TJ%A$B5AG1<R-RPPDI(0``Y?WES2PVT=%$36!I$?__S7(5RC(I
  3087. XXM(6@JY<V@+-']Y<V@+-$ABRKES:`LT2$*`.7-CBK1*MU2?+7*/2G#5"K#42K=
  3088. XXM;@`F`!$B`,UR%<JC*=WEX2/EW>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>%^M\J(
  3089. XXM*=UN`"8`$2(`S8$5RH@IW>7A(^7=X2O#9RG=;@`F`'RURJ`I(0``Y=WEX2/E
  3090. XXMW>$KT7/#42K=;@`F`!$R`,UR%<K/*=UN`28`$3X`S7(5RL\IW>7A(^7=X2LA
  3091. XXM`@!$3<,9*-WES4DRT<H`*B&``.LJVU+-AA8KY2K;4BD16U$9Y=WES?`NT='1
  3092. XXMZRK;4ADBVU+#%2K=Y>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>$CY=WA?K?*42K=
  3093. XXM;@`F`!$@`,UR%<(]*MUN`"8`$0D`S7(5RDXJ(0``Y=WEX2/EW>$KT7/#42K#
  3094. XXM%2K#A"<A6U'E*MM2Y<V^!='1Y<V.*M')`$-A;B=T(&]P96X@9FEL92!F;W(@
  3095. XXM<F5D:7)E8W1I;VXZ(#P`/@H`S3,5``#-"!TJ"%?ES=%!T2$,`#E^([;*L"HA
  3096. XXM>"OES=%!T2K=4GRURG0K*@A7Y2H*5^7->4'1T2K?4EX6`"$@`,UR%<+C*BK?
  3097. XXM4EX6`"$)`,UR%<KN*BK?4B,BWU(KP\4J*M]21$U@:7ZWRA\K8&E>%@`A(`#-
  3098. XXM@17*'RM@:5X6`"$)`,V!%<H?*V!I(T1-*\/S*F!I?K?*,BLA``#E8&DC1$TK
  3099. XXMT7,A``#EQ2H(5^4A@BOE*M]2Y<V_*^LA"@`Y^2&$*^7-H"S1*M]2Y<V@+-$A
  3100. XXMJ"OES:`LT2&M*^7-T4'1(;<KY<W10='-2";)03HD)"0N4U5"`#P`0V]U;&1N
  3101. XXM)W0@;W!E;B!F:6QE(&%T(&5N9"!O9B!P:7!E.B``+D-/30!!.B0D)"Y354(`
  3102. XXM)"0D+E-50@#-,Q4``"$,`#E>(U;5(8``Y<UL0M'1(9LLY2&``.7-UT+1T2%<
  3103. XXM`.4A@`#ES>PLT=$A7`#E(0\`Y<U9)M'1$?\`S2(5$?\`S7(5R@\L(0``R2&!
  3104. XXM`.7=X2$.`#GE_>'#*2S]Y>$C(^7]X2LK_>7A?B.VRH8LW>7A$<\`Z\WF%LJ&
  3105. XXM+/UN`/UF`41-PUXL8&DC1$TK7A8`U=WEX2/EW>$KT7-@:7ZWRG4LW>7A$<\`
  3106. XXMZ\WF%LIU+,-*+"$@`.7=Y>$CY=WA*]%SPQ\L(0``W74`W>7A$8#_&7TR@`#-
  3107. XXMPS+)+D-/30#-,Q4``"$,`#E>(U;K?K?*TRPA#``YY7XC9F\CZ^%S(W+K*UX6
  3108. XXM`-4A`@#ES5DFT='#I2S)S3,5```A_?\BEEDA___)S3,5```A``#)S3,5```A
  3109. XXM)`#EW>$A#@`Y7B-60DO##RTA``#E8&DC1$TKT7/=Y>$KY=WA$0``Z\V1%<HC
  3110. XXM+<,#+2$,`#E>(U;K?K?*=RTA#``Y7B-6ZR->%@`A.@#-<A7*=RTA#``Y7B-6
  3111. XXMZUX6`-7-KD/1$<#_&>4A$``Y7B-6Z]%S(0(`ZR$,`#GE?B-F;QGKX7,C<B$,
  3112. XXM`#E>(U;5(1``.5XC5M7-C2W1T<G-,Q7__R$-`#GE?B-F;R/KX7,C<D)+(0L`
  3113. XXMZR$$`#ES(00`.>5N)@`KZ^%S(0``S9$5RN,M(0\`.5XC5NM^M\K4+2$@`,/7
  3114. XXM+2$_`.5@:2-$32O1<\.L+2$-`#E>(U8A"``91$TA#0`Y7B-6(0H`&>7=X2$/
  3115. XXM`#E>(U;K?K?*[RXA#P`Y7B-6ZUX6`"$@`,V!%<KO+B$/`#E>(U;K7A8`(2H`
  3116. XXMS7(5RILN(0T`.5XC5F!IS>86RFXN(0T`.5XC5F!IS>86RFLN(3\`Y2$/`#GE
  3117. XXM?B-F;R/KX7,C<NLKT7/#0B[#F"XA#0`Y7B-6W>7AS=D6RI@N(3\`Y2$/`#GE
  3118. XXM?B-F;R/KX7,C<NLKT7/#;B[#VRXA#P`Y7B-6ZUX6`"$N`,UR%<J\+F!IZR$-
  3119. XXM`#ES(W+#VRXA#P`Y7B-6ZUX6`-4A#P`YY7XC9F\CZ^%S(W+K*]%S(0\`.>5^
  3120. XXM(V9O(^OA<R-RZRO#_BW)S3,5^O\A``#K(00`.7,C<B$2`#E>(U8A!@`Y<R-R
  3121. XXM(5P`Y2$4`#E>(U;5S>PLT=$A7`#E(1$`Y<U9)M'1$?\`S2(5ZR$(`#ES(W(A
  3122. XXM_P#-@17*HC`A#P#ES6,ST>LA$@`Y<R-R0DMZL\)J+R&3,>7-H"S1(0$`Y<V.
  3123. XXM*M$A"``Y7B-6ZRDI*2DI$8$`&>7=X2$&`#E>(U;K(UX6`"$Z`,UR%<JS+R$&
  3124. XXM`#E>(U;K7A8`U6!I(T1-*]%S(3H`Y6!I(T1-*]%S(0$`Y?WAP\0O_>7A(^7]
  3125. XXMX2O]Y>$1"P#KS9(5RC,PW6X`)@`1?P#-(A41(`#-@17*_"_=Y>$CY=WA*UX6
  3126. XXM`-5@:2-$32O1<\,$,-WEX2/EW>$K_>7A$0@`S7(5RC`PW6X`)@`1?P#-(A41
  3127. XXM(`#-<A7",S`A+@#E8&DC1$TKT7/#O"\A``#K8&ES(1(`.5XC5M4A!@`YY7XC
  3128. XXM9F\CZ^%S(W+K*RGK(18`.7XC9F\9T7,C<B%<`.4A$@#ES5DFT=$1_P#-(A7K
  3129. XXM(0@`.7,C<B$(`#E>(U8A_P#-@17*HC`A!``Y7B-6(18`.7XC9F_-K!7"0R\A
  3130. XXM``#K(0@`.7,C<L/!,"$(`#GE?B-F;R/KX7,C<NLK(0@`.5XC5B$$`#E^(V9O
  3131. XXMS>86RHHQ(0@`.5XC5M7]X</K,/WEX2/E_>$K_>7AZR$$`#E^(V9OS:P5RH<Q
  3132. XXM_>7A*>LA%``Y?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&5XC5M7-N#'1
  3133. XXMT<J$,2$(`#E>(U;K*>LA%``Y?B-F;QE>(U9"2_WEX2GK(10`.7XC9F\97B-6
  3134. XXMU2$*`#E>(U;K*>LA%@`Y?B-F;QG1<R-R8&GE_>7A*>LA%@`Y?B-F;QG1<R-R
  3135. XXMP^,PP[`P(00`.5XC5NO)3F]T(&5N;W5G:"!M96UO<GD@=&\@97AP86YD('=I
  3136. XXM;&1C87)D`,TS%0``(0``1$U@:1$/`.O-K!7*2#(A#@`Y7B-6ZUX6`-4A#@`Y
  3137. XXM7B-6ZUX6`.'-K17*\#$A`0#)(0X`.5XC5NM>%@#5(0X`.5XC5NM>%@#AS:P5
  3138. XXMRA(R(0``R2$,`#GE?B-F;R/KX7,C<NLK(0X`.>5^(V9O(^OA<R-RZRLA#``Y
  3139. XXM7B-6ZWZWPD4R(0``R</",<G-,Q4``"$,`#GE?B-F;R/KX7,C<NLK7A8`0DM@
  3140. XXM:1$J`,UR%<)Z,F!I$3\`S7(5RGXR(0$`R7BQRHXR8&D1(`#-@17"3C(A``#)
  3141. XXM$0`!U<4.<%`-'5#A3-!0#!T;?*^`!060X0S04`#AH1@`#-!0##``$A@``9
  3142. XXMZ\/2`!&2,B'/``8Q&G<3(P7"RS(!7``1``$J!@#YP\\`S3,5```A#``Y7B-6
  3143. XXMU<UC,]')S3,5_/\A$``Y7B-6(1(`.7XC9F_-*A;K(00`.7,C<B$$`#E>(U;5
  3144. XXMS6,ST>LA!@`Y<R-R>K/"+C,A``#)(0``Y2$&`#E>(U;5(0H`.5XC5M7-%T+1
  3145. XXMT=$A!@`Y7B-6Z\G-,Q4``"$,`#E>(U;5S8(TT<G-,Q4``"$,`#E>(U;K(R,C
  3146. XXM$0(`Z\WS%B/E_>$JY5+EW>%\M<*;,R'A4N7=X2+E4B+A4B$!`"+C4MUN`-UF
  3147. XXM`41-P[(S8&GEW>%@:5XC5D)+(0(`"5XC5OWEX<W8%LH<-"$"``E>(U;]Y>'-
  3148. XXM<A7*X#-@:5XC5MUS`-UR`<,/-/WE8&DC(]'E?B-F;^O-AA;KX7,C<B$"``E>
  3149. XXM(U;K*2E061E$3?WEX>LA`@`)<R-RW>7A(N528&D1!``9R6!IZRKE4LUR%<HY
  3150. XXM-/WES3TTT41-?+7".30A``#)PZ8SR<TS%0``(0P`.5XC5NLI*>7-GS711$T1
  3151. XXM___-<A7*8#0A``#)8&GEW>$A#``Y7B-6W7,"W7(#W>7A$00`&>7-@C31*N52
  3152. XXMR<TS%0``(0P`.5XC5B'\_QE$32KE4N7=X<.F--UN`-UF`>7=X6!IW>71Z\WG
  3153. XXM%LK#--UN`-UF`>5@:='KS>86PO4TW6X`W68!Y=WEX='KS=@6RO(T8&G=Y='K
  3154. XXMS><6PO4TW6X`W68!Y6!IT>O-YA;"]33#G33=;@#=9@'E(0(`"5XC5NLI*5!9
  3155. XXM&='-<A7*/37=;@#=9@$C(UXC5M5@:2,CT>5^(V9O&>OA<R-RW6X`W68!7B-6
  3156. XXM8&ES(W+#237=;@#=9@'K8&ES(W+=;@+=9@,I*=WET1E06<UR%<J$-2$"``E>
  3157. XXM(U;5W>7A(R/1Y7XC9F\9Z^%S(W)@:5XC5MUS`-UR`<.,-6!IW74`W70!W>7A
  3158. XXM(N52R2$$`,VB-2-\M<@KR2$"`#E>(U8JYU(9Z]K$-2KI4CE]DWR:VL0U*N=2
  3159. XXMZR+G4NM\M<FO/6=OR2$"`#E^(V8O;WPO9R,BZ5+)8V]N.@!#3TXZ`&QS=#H`
  3160. XXM3%-4.@!P<FXZ`%!23CH`<'5N.@!054XZ`')D<CH`4D12.@#-,Q4``"$.`#E>
  3161. XXM(U;5(0$#Y2$0`#E>(U;5S2PVT='1R<TS%?S_(?!8Y=WA(0``ZR$&`#ES(W+#
  3162. XXM7C;=Y>$1"``9Y=WA(08`.>5^(V9O(^OA<R-R(08`.5XC5B$+`,VL%<J`-MUN
  3163. XXM!-UF!1'4+,UR%<**-L-%-B'X_R*662'__\DA5%E$3<.:-F!I$08`&41-8&E^
  3164. XXM([;*NS8A$``Y7B-6U6!I7B-6U<TS0M'1RKLVPY(V(0(`"5XC5M7]X2$2`#E>
  3165. XXM(U8A`P#-(A4CZR$$`#ES(W(A!``Y7B-6(0$`S2(5R@(W_6X`)@#==0!\M<("
  3166. XXM-R'V_R*662'__\DA!``Y7B-6(0(`S2(5RBDW_6X!)@#==0%\M<(I-R'V_R*6
  3167. XXM62'__\DA!``)7B-6W7,&W7('_6X")@#==0+];@,F`-UU`R&>.=UU!-UT!<7=
  3168. XXMY2$8`#E>(U;5(1@`.5XC5M4A&``Y7B-6U?UN!/UF!<TR%>LA"@`Y^2$``,VL
  3169. XXM%<J/-R'4+-UU!-UT!2'__\DA!@`Y7B-6Z\G-,Q4``"$,`#E>(U8A``#-K!7"
  3170. XXMO3<A#``Y7B-6(0L`S:T5RL<W(?W_(I99(?__R2$,`#E>(U;K*2DI$?!8&41-
  3171. XXM(08`"5XC5M4A!``)7B-6Z\TR%='K(0P`.7,C<B$``.LA`P`)<R$"``ES(0$`
  3172. XXM"7-@:7,AU"SK(00`"7,C<B$,`#E>(U;KR<TS%0``(>M21$W#,SA@:1$F`!E$
  3173. XXM36!I$1M4Z\WF%LI.."$E``E>%@!ZL\I8.,,K."'Y_R*662'__\G%(0X`.5XC
  3174. XXM5M7-DB;1T<IS."'Z_R*662'__\DA#@`Y7B-6(0`"S2(5RHTXQ2$3`.7-62;1
  3175. XXMT<4A#P#ES5DFT=$1_P#-<A7*T#@A#@`Y7B-6(0`#S2(5RL,XQ2$6`.7-62;1
  3176. XXMT1'_`,UR%<K-."'__R*662'__\G#\#@A#@`Y7B-6(0`%S2(5$0`%S7(5RO`X
  3177. XXM(?O_(I99(?__R2$``.LA(0`)<R-R(2,`"7,A)``)<V!IY2$4`#E>(U8A!@`9
  3178. XXMT7,C<B$.`#E>(U8A`P#-(A4CZR$E``ES(0(`S2(5RDHY(7LYY2$4`#E>(U8A
  3179. XXM!``9T7,C<L-=.2%A.>4A%``Y7B-6(00`&=%S(W(A``#)S3,5```A``#E(0X`
  3180. XXM.5XC5B$E`!G1<R$``,G-,Q4``"$,`#E.(T;%(1``Y<U9)M'1(0``ZR$E``ES
  3181. XXM(0``R<TS%0``(0``R<TS%0``(0P`.5XC5B$``,VL%<+,.2$,`#E>(U8A"P#-
  3182. XXMK17*UCDA_?\BEEDA___)(0P`.5XC5NLI*2D1\%@91$TA$``Y7B-6U2$0`#E>
  3183. XXM(U;5(08`"5XC5M5@:5X6`.LI$1M4&5XC5NO-,A71T=')S3,5_/\A``!$32$0
  3184. XXM`#E>(U;5W>'=Y>$1)``9?K?*=3K=;B0F`.4A@`#1Z\V&%D1-ZR$4`#E^(V9O
  3185. XXMS><6RETZ(10`.5XC5D)+Q2$4`#E>(U;5W>7-+#O1T='*=3HA___)(10`.5XC
  3186. XXM5F!IS886$0<`Z\WS%NLA!@`Y<R-R>K/*VCHA!@`Y7B-6U2$4`#E>(U9@:1GE
  3187. XXMW>7-*$'1T='K(00`.7,C<GJSRMHZ(08`.5XC5B$$`#E^(V9OS886$0<`Z\UV
  3188. XXM%E!9&<DA!@`Y7B-6(0<`S7864%D91$U@:>LA%``Y?B-F;\WF%LHC.R$4`#E>
  3189. XXM(U9@:<V&%N4A%``Y7B-68&D9Y=WES2P[T='1RB,[8&G)(10`.5XC5NO)S3,5
  3190. XXM```A#``Y3B-&(8``Y2$:`.7-62;1T<4A(0#ES5DFT=$BEEE\M<I;.R'__\DA
  3191. XXM$``Y7B-6U2$D``E>%@`A@``9Y2$2`#E>(U;5S?=!T='1(20`"5X6`"$0`#E^
  3192. XXM(V9O&1%_`,TB%>LA)``)<WJSPJ\[8&D1(0`9Y7XC9F\CZ^%S(W(A``#)S3,5
  3193. XXM```Z)%1O)@!\M<([/"'_`'TR(U0A``!],B54?3(D5"$C5.4A"@#ES5DFT=$A
  3194. XXM"@#E(0(`Y<U9)M'1.B54;R8`$1H`S7(5R@D\(0``?3(D5"$``,DA#0#E.B14
  3195. XXM;R8`(WTR)%01(U09(]%S(0H`Y3HD5&\F`"-],B14$2-4&2/1<R$"`"(E53HD
  3196. XXM5&\F`$1-ZR$0`#E^(V9OS:T5REL\(1``.5XC5D)+Q2HE51$C5!GE(1(`.5XC
  3197. XXM5M7-]T'1T=%@:>LJ)549(B558&GK.B14;R8`Z\V&%GTR)%1@:<G-,Q4``"$.
  3198. XXM`#E.(T8A``#EW>'#K#S=Y>$CY=WAW>7AZR$0`#E^(V9OS:P5RM\\(0P`.5XC
  3199. XXM5M7-62;1Y6!I(T1-*]%S(1H`S7(5PM\\PZ4\W>7AR<TS%0``(0P`.5XC5B$`
  3200. XXM`,VL%<((/2$,`#E>(U8A"P#-K17*$CTA_?\BEEDA___)(0P`.5XC5NLI*2D1
  3201. XXM\%@91$TA$``Y7B-6U2$0`#E>(U;5(08`"5XC5M4A`0`)7A8`ZRD1)U497B-6
  3202. XXMZ\TR%='1T<G-,Q7\_R$``$1-(1``.5XC5M7=X=WEX1$D`!E^M\JS/=UN)"8`
  3203. XXMY2&``-'KS8861$WK(10`.7XC9F_-YQ;*FSTA%``Y7B-60DO%(10`.5XC5M7=
  3204. XXMY<UJ/M'1T<JS/2'__\DA%``Y7B-68&G-AA81!P#KS?,6ZR$&`#ES(W)ZL\H8
  3205. XXM/B$&`#E>(U;5(10`.5XC5F!I&>7=Y<TP0='1T>LA!``Y<R-R>K/* !@`Y
  3206. XXM7B-6(00`.7XC9F_-AA81!P#KS7864%D9R2$&`#E>(U8A!P#-=A9061E$36!I
  3207. XXMZR$4`#E^(V9OS>86RF$^(10`.5XC5F!IS886Y2$4`#E>(U9@:1GEW>7-:C[1
  3208. XXMT='*83Y@:<DA%``Y7B-6Z\G-,Q4``"$,`#E.(T8A@`#E(1H`Y<U9)M'1Q2$A
  3209. XXM`.7-62;1T2*661$!`,UR%<*E/BJ661$$`,UR%<K`/B$``"*662$:`.4A@`#E
  3210. XXM(8``Y<T70M'1T</,/BJ667RURLP^(?__R2$0`#E>(U;5(1``.5XC5M4A)``)
  3211. XXM7A8`(8``&>7-]T'1T='%(2(`Y<U9)M'1(I99?+7*!#\A___)(20`"5X6`"$0
  3212. XXM`#E^(V9O&1%_`,TB%>LA)``)<WJSPC8_8&D1(0`9Y7XC9F\CZ^%S(W(A``#)
  3213. XXMS3,5_O\A$``Y3B-&(0``Y=WAPU8_W>7A(^7=X=WEX>LA$@`Y?B-F;\VL%<JQ
  3214. XXM/V!I(T1-*UX6`"$$`#ES(W(A!``Y7B-6(0H`S7(5RID_(0T`Y2$0`#E>(U;5
  3215. XXMS5DFT=$A!``Y7B-6U2$0`#E>(U;5S5DFT='#3S_=Y>')S3,5```A#``Y7B-6
  3216. XXM(0``S:P5PO$_(0P`.5XC5B$+`,VM%<+Q/R$,`#E>(U;K*2DI$?-8&5X6`'JS
  3217. XXMPO\_(?W_(I99S>A#_____\DA#``Y7B-6ZRDI*1'V6!E>(U9"2R$2`#E>(U;K
  3218. XXMPZ!`Q2$0`.7-62;1T1'_`,UR%<H_0"']_R*66<WH0______)Q2$C`.7-62;1
  3219. XXMT2$``.LA)``)<R$.`#GE(2$`"5XC5NO-44?-VD,'````S21%S15$(20`"5X6
  3220. XXM`.O-7T?-+43-JT3-043AY<WO0\VK1.'-`D3#LT`A^O\BEEG-Z$/_____R<VQ
  3221. XXM%@,``@`>0`$`4D```(]`DD`A``#K(2,`"7,A#@`YS>]#S=I#`````,TG1\KN
  3222. XXM0"$``.LA(0`)<R-R(20`"7,A^O\BEEG-Z$/_____R2$.`#G-[T/-<D<1?P#-
  3223. XXM(A7K(20`"7,A#@`YS>]#S=I#!P```,U21<UR1^LA(0`)<R-R(0X`.<WO0\G-
  3224. XXM$Q<.(<,U0<T3%PXBQ2I"4>LA@``9(D)1#AK-!0#!Q2I`4>O-!0"WPFY!*D!1
  3225. XXM$2$`&33"8$$C-"I$42LB1%%]M,(V0<');R8`(I99P2I$4<G-,Q7$_R$$`#GE
  3226. XXM(4P`.5XC5M7-DB;1T2$$`#GE(1,`Y<U9)M'1(00`.>4A2@`Y7B-6U<V2)M'1
  3227. XXM(10`.>4A3``Y7B-6U<V2)M'1(00`.>4A%P#ES5DFT=')S3,5W/\A!``YY2$R
  3228. XXM`#E>(U;5S9(FT=$A!``YY2$3`.7-62;1T<G%(0D`.48K3BM6*UXK?BMN9WBQ
  3229. XXMRA5"&G<3(PO#"$+!R<4A!``Y7B-6(TXC1B-NZWBQRC%"<R,+PR9"P<DA`@`Y
  3230. XXMQ0'_?UXC5B-^(V9O>+'*5T(:OL)<0K?*5T(C$PO#0T+!(0``R<':9D(A`0!]
  3231. XXMM,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRHY"?A*WRHY"(Q,+PWU"X<')
  3232. XXM(0(`.7XC9F\1``"OOLJF0A,CPYU"ZWVTR2$"`#G%7B-6U2->(U8C3B-&Z]'#
  3233. XXM0T(A`@`YQ5XC5M75(UXC5B-.(T;KT<-]0L4!_W\A!``Y7B-6U2-^(V9OZWBQ
  3234. XXMRHY"?K?*^$(C"\/I0NO#?4(A`@`YQ5XC5M75(UXC5B-.(T;AK\/I0L4A!``Y
  3235. XXM7B-6(V[K?K?**T.[RC%#(\,>0R$``*_!R7RUP<G%(00`.5XC5B-NZP$``*^^
  3236. XXMRDU#(P/#1$-XL<HK0PLK?KO"34/#,4,A`@`Y?OX@RH)#_@G*@D/^"LJ"0\.7
  3237. XXM0R$"`#E^_D':ET/^6]*70R$!`'VWR2$"`#E^_F':ET/^>]J"0R$``*_)(0(`
  3238. XXM.7[^,-J70_XZTI=#PX)#(0(`.7[^8=J_0_Y[TK]#UB!O)@"WR2$"`#E^_D':
  3239. XXMU4/^6]+50\8@;R8`M\G1(00`&>7KZRJ:5L/S0]$A!``9Y>OK*IA6&G<C$QIW
  3240. XXM(Q,:=R,3&G?)ZRJ85GX2$R-^$A,C?A(3(WX2R>$B+U4JF%81`P`95BM>*]56
  3241. XXM*U[5*B]5Z>$B+U4JFE;1<R-R(]%S(W(J+U7I*II6ZRJ85B*:5NLBF%;)*IA6
  3242. XXMKQ8$/@">=R,5PE9$R2J85A8$?K?"(4<C%<)E1,,61Z\]P<FO/,')Q2J85NLJ
  3243. XXMFE8C(R,3$Q,:M_J41*[Z=D3#F$2N^G)$!@0:OMIR1,)V1"L;!<*:1*_!R<4J
  3244. XXMF%;K*II6KP8$&HX2(Q,%PK9$P<G%*IA6ZRJ:5J\&!!J>$B,3!<+,1,')Q2J8
  3245. XXM5NLJFE8&!!JF$B,3!<+A1,')Q2J85NLJFE8&!!JV$B,3!<+V1,')Q2J85NLJ
  3246. XXMFE8&!!JN$B,3!<(+1<')*IA6%@1^+W<C%<(;1<DJFE9^YC_(Q4<JF%9>(U8C
  3247. XXM?B-F;RGK*>O20$4C!<(X141-*IA6<R-R(W$C<,')*II6?N8_R%<JF%8C(R-^
  3248. XXMM_IW1>4>!+=^'W<K'<)I1>$5PF5%R>4>!#=^'W<K'<)[1>$5PG=%R=4&!'X2
  3249. XXM(Q,%PHQ%X4^W\,-31,4JF%81.U7-B45Y,CE5*II6$4-5S8E%.CE5J3(Y5<T(
  3250. XXM1A$[52J85@8$&G<3(P7"Q$7!.CE5M_I01,G%*IA6$3M5S8E%>3(Y52J:5A%#
  3251. XXM5<V)1<T(1A$_52J85@8$&G<3(P7"]T7!.CE5M_I01,D&!"$_5:]W(P7"#D8^
  3252. XXM(#(Z52$[508(MWZ/=R,%PA]&G^8!3P8$$3]5(4-5MQJ>$A,C!<(T1GG>`,)/
  3253. XXM1B$[530A.E4UPAE&R2$Z537*@48A.U4&"+=^CW<C!<)<1I]/!@01/U4A0U6W
  3254. XXM&HX2$R,%PF]&><X`PD]&PT-&!@01/U4A0U6W&HX2$R,%PHI&R<4JFE8&!!%#
  3255. XXM57X2(Q,%PIU&*IA6!@01/U5^$B,3!<*M1@8$(3M5KW<C!<*[1CX@,CI5(3M5
  3256. XXM!@BW?H]W(P7"S$;2]T8&!!$[52%#5;<:CA(3(P7"X$8&!!K.`!+2]T83!<+K
  3257. XXM1B$Z537"QD8JF%81.U4&!!IW$R,%P@9'P<G->D3*(4<A``"OR<UZ1,H61R$!
  3258. XXM`*\\R<UZ1/HA1\,61\UZ1/HA1\HA1\,61\UZ1/H61\,A1\UZ1/H61\H61\,A
  3259. XXM1^LJF%9S(W(C-@`C-@#)ZRJ85G,C<B-ZM_)91S;_(S;_R2J85EXC5NO)R<TS
  3260. XXM%0``(0P`.5XC5M7-QD?1(0P`.5XC5B$$`!GES>A#`````.'-`D0A``#E(1``
  3261. XXM.5XC5NO1<R-R(0``Y2$0`#E>(U;K(R/1<R-RR<TS%?C_(4=5Y2%I`.7-62;1
  3262. XXMT>LA!``Y<R-R(0@`.>4J1U41:0L9S5%'S=I#@%$!`,V41N'-`D0Z255O)@`1
  3263. XXM!`#KS5P6$0H`S2H6Y3I)56\F`!$/`,TB%=$9ZR$&`#ES(W(A"``YY2$(`#E>
  3264. XXM(U;KS5%'S=I#$`X``,V41LU!1.'ES>]#S:M$X<T"1#I*56\F`!$$`.O-7!81
  3265. XXM"@#-*A;E.DI5;R8`$0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-
  3266. XXMVD,\````S91&S4%$X>7-[T/-JT3AS0)$(00`.5XC5B$$`,U<%A$*`,TJ%N4A
  3267. XXM!@`Y7B-6(0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-043AY<WO
  3268. XXM0\VK1.'-`D0A%``Y?B.VPO]((0@`.<WO0\DA%``Y7B-6U2$*`#G-[T/AS0)$
  3269. XXMR<TS%0``(0P`.5XC5M7-*DG1Y<VM3M')S3,5Z/\A``#K(00`.7,C<B$``.LA
  3270. XXM!@`Y<R-R(1``.>4A!@`Y7B-6Z\U?1\W:0SP```#-E$;-%40A*@`Y7B-6Z\WO
  3271. XXM0\TM1,W!1.'-`D0A$``YY<U#3-'EW>'=;@[=9@]$32'75>LA&``Y<R-RP[!)
  3272. XXM(1@`.>5^(V9O$0@`&>OA<R-RZQ'X_QDA&``Y7B-6ZUXC5B$``,V1%<K@22$8
  3273. XXM`#E>(U;K7B-6(08`.7XC9F_-<A7"X$G#F4DA&``Y7B-6ZUXC5B$``,V1%<K6
  3274. XXM2]UN"MUF"Q%L!QGK(10`.7,C<B$8`#E>(U8A!``97B-6(18`.7,C<L,U2B$6
  3275. XXM`#GE?B-F;Q$&`!GKX7,C<NL1^O\9(18`.5XC5NM^([;*7THA%@`Y7B-6ZUXC
  3276. XXM5B$4`#E^(V9OS7(5PE]*PQY*(18`.5XC5NLC(UXC5M7]X2$6`#E>(U8A!``9
  3277. XXM7B-6(1H`.7,C<OWEW>7-VDO1T>7]X2$:`#E>(U;5W>7-VDO1T>LA&@`Y<R-R
  3278. XXM(1@`.5XC5B$&`!E>(U;KPWU+8&G]Y='KS:T5PN!*8&G]Y='-<A7*$DO=;@3=
  3279. XXM9@41`@#KS9$5RA)+8&GK(1H`.7XC9F_-K!7"%DM@:>LA&@`Y?B-F;\UR%<H2
  3280. XXM2]UN!-UF!1$!`.O-K!7"%DO=Y>')PXQ+8&G]Y='KS:T5PG9+8&G]Y='-<A7*
  3281. XXM0$O=;@3=9@41`@#KS9$5PG9+8&GK(1H`.7XC9F_-K!7"=DM@:>LA&@`Y?B-F
  3282. XXM;\UR%<IR2]UN!-UF!1$"`.O-K!7"=DO=Y>')PXQ+W>7AR<VQ%@(``0"Y2@``
  3283. XXM&4MY2R$0`#GE(1H`.5XC5NLC(UXC5B$0#LTJ%LU?1\U!1.'ES>]#S:M$X<T"
  3284. XXM1"$0`#GES4-,T>7=X=WEX1$0`!GE?B-F;R/KX7,C<NLKW>7AR<TS%0``(0P`
  3285. XXM.4XC1B$.`#E>(U;5W>'=Y>$1.@#KS9$5RA1,(0H`"5XC5M7-KU#1$9/^&=WE
  3286. XXMT1GEW>$A#``)7B-6U2$.``E>(U;5W>7AT>O-AA;1&1&\`AD1!P#KS<85Y=WE
  3287. XXMX='KS886R<TS%?C_(0@`.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-U47AS0)$(00`
  3288. XXM.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-FT7AS0)$(0@`.<WO0\W:0P````#-)T?*
  3289. XXMSDPA"``YY<WH0X!1`0#-043AY<WO0\VK1.'-`D0A!``YY<WH0P$```#-043A
  3290. XXMY<WO0\W!1.'-`D0A!U;E_>$A"``YS>]#S=I#/````,W51<UR1^7]Y>$C(^7]
  3291. XXMX2LKT7,C<B$(`#G-[T/-VD,\````S9M%S7)'Y=WAW>7A$3P`Z\W&%>7]Y>$C
  3292. XXM(^7]X2LKT7,C<B$\`-WET<U8%>7=X=WEX>7]Y>$C(^7]X2LKT7,C<B$$`#G-
  3293. XXM[T/-VD,$`'``S:M$S=I#!P```,W51<UR1R(35B$$`#G-[T/-VD,`````S3Q'
  3294. XXMRLI-(48`Y=WAPXM-W>7A(^7=X2O=Y<VO4-'-7T?-%40A"``YS>]#S2U$S3Q'
  3295. XXMRL=-(00`.>7=Y<VO4-'-7T?-043AY<WO0\W!1.'-`D3#@TW#$DXA1@#EW>'#
  3296. XXMVTW=Y>$KY=WA(R$$`#G-[T/-VD,`````S2='RA).(00`.>7=Y>$KY<VO4-'-
  3297. XXM7T?-043AY<WO0\VK1.'-`D3#TTW=Y>$B$58A!``YS>]#S7)'1$TB%5;=Y<VO
  3298. XXM4-$1;@'-<A7*/$XA'0`B9U4A``#EW>'#34[=Y>$CY=WA*]WEX2D195497B-6
  3299. XXMU6!IT>O-D17*>4[=Y>$I$655&5XC5F!IZ\V&%D1-PT5.(1P`(F=58&DCY?WE
  3300. XXMX2,CY?WA*RO1<R-RW>7AY?WEX2,CY?WA*RO1<R-R(0``(A=6(0=6R<TS%0``
  3301. XXM(4M51$TA6E#EW>'=Y>$CY=WA*UX6`-5@:2-$32O1<WJSRME.P[U.(0P`.5XC
  3302. XXM5B$,`!E>(U8A`P#-*A81=%`9Y=WA(4M51$W=Y>$CY=WA*UX6`-5@:2-$32O1
  3303. XXM<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC1$TKT7-@:2-$
  3304. XXM32LA#``Y7B-6(0@`&>7]X?UN`/UF`1$#`,TJ%A&*4!GEW>'=Y>$CY=WA*UX6
  3305. XXM`-5@:2-$32O1<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC
  3306. XXM1$TKT7/]Y>$K*^7]X5XC5M7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0
  3307. XXMT=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%
  3308. XXMS<Q0T=%$32$,`#E>(U8A"@`97B-6(60`S9$5RC-0(3(`ZR$!``ES(0P`.5XC
  3309. XXM5B$*`!E>(U8A,``9$<@`Z\V1%>LA`@`)<R$"`%!9&41-(0P`.5XC5B$*`!E>
  3310. XXM(U8A9``9Y<7-S%#1T41-(4M5R41A>2!-;VX@,#`@,#`Z,#`Z,#`@,3DP,`H`
  3311. XXM4W5N36]N5'5E5V5D5&AU1G)I4V%T`$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U
  3312. XXM9U-E<$]C=$YO=D1E8P#-,Q4``"$,`#E>(U8A!`#-QA7"R%`A;@')(6T!R<TS
  3313. XXM%0``(0P`.4XC1F!I(T1-*R$.`#E>(U8A"@#-D17*$E$A#@`Y7B-6(0H`S5@5
  3314. XXM$0H`Z\W&%1$P`!GE8&DC1$TKT7/#'E$A(`#E8&DC1$TKT7,A#@`Y7B-6(0H`
  3315. XXMS<85$3``&>5@:2-$32O1<V!IR0!R"@```````````````#`Q,C,T-38W.#EA
  3316. XXM8F-D968`````````````````````````````````````````````````````
  3317. XXM````````````````````````````````````````````````````````````
  3318. XXM````````````````````````````````````````````````````````````
  3319. XXM````````````````````````````````````````````````````````````
  3320. XXM````````````````````````````````````````````````````````````
  3321. XXM````````````````````````````````````````````````````````````
  3322. XXM````````````````````````````````````````````````````````````
  3323. XXM````````````````````````````````````````````````````````````
  3324. XXM````````````````````````````````````````````````````````;EH`
  3325. XXM_```````````````````````````````````````````````````````````
  3326. XXM````````````````````````````````````````````````````````````
  3327. XXM````````````````````````````````````````````````````````````
  3328. XXM````````````````````````````````````````````````````````````
  3329. XXM````````````````````````````````````````````````````````````
  3330. XXM````````````````````````````````````````````````````````````
  3331. XXM``````````````````````````````````````````````#4+!4ZLSN0/```
  3332. XXM````````````````````````````````````````````````````````````
  3333. XXM````````````````````````````````````````````````````````````
  3334. XXM````````````````````````````````````````````````````````````
  3335. XXM````````````````````````````````````````````````````````````
  3336. XXM````````````````````````````````````````````````````````````
  3337. XXM````````````````````````````````````````````U"Q3/3H_.C\`````
  3338. XXM````````````````````````````````````````````````````````````
  3339. XXM```````?`!P`'P`>`!\`'@`?`!\`'@`?`!X`'P"V!P4`30&W!SH`+P$``'<`
  3340. XXM+P&R!Y`!``"S!R\!``"T!R\!.@```"\!00"_!U8`+P'`!U8`+P'!!U8`+P$`
  3341. XXM`)`!``"_!U8`$`'`!U8`$`'!!U8`$`$``)`!```!``$`?54!``(``0"/50``
  3342. XXM`P`!`*=5`0`$``$`OU4!``4``0"_50$`__\`````````````````````````
  3343. XXM```````````````!````!`````````$!``$``````````0(``0``````````
  3344. XXM````````````````````````````````````````````````````````````
  3345. XXM````````````````````````````````````````````````````````,54U
  3346. XXM50`````#`6-A=```````````````````````````````````````````````
  3347. XXM````````````````````````````````````````````````````````````
  3348. XXM`````````````````````````"LG-"<````````*4TA!4CH@0W)E871E+V5X
  3349. XXM=')A8W0@9FEL92!A<F-H:79E(&9O<B!E>'1R86-T:6]N(&)Y("]B:6XO<V@@
  3350. XXM*&YO<FUA;&QY*2X*"G5S86=E.B!S:&%R(%LM=2!A<F-H:79E72!;6RUA72!;
  3351. XXM+7`@<')E9FEX72!;+60@9&5L:6U=(%LM8F-V72!F:6QE<R`^(&%R8VAI=F5=
  3352. XXM"@H)=VAE<F4Z"2UA("!A;&P@=&AE(&]P=&EO;G,@*'8L8RQB+"UP6%@I"@`)
  3353. XXM"2UB("!E>'1R86-T(&%B<V]L=71E('!A=&AS(&EN=&\@8W5R<F5N="!D:7)E
  3354. XXM8W1O<GD*"0DM8R`@8VAE8VL@9FEL97-I>F5S(&]N(&5X=')A8W1I;VX*"0DM
  3355. XXM9"`@=7-E('1H:7,@14]&(&1E;&EM:71E<B!I;G-T96%D(&]F(%-(05)?14]&
  3356. XXM"@`)"2UP("!U<V4@=&AI<R!A<R!P<F5F:7@@=&\@96%C:"!L:6YE(&EN(&%R
  3357. XXM8VAI=F5D(&9I;&5S"@D)+74@('5N<VAA<B`\87)C:&EV93X*"0DM=B`@=F5R
  3358. XXM8F]S92!O;B!E>'1R86-T:6]N+"!I;F-L+B!E8VAO:6YG(&9I;&5S:7IE<PH`
  3359. XXM``(``)XY`P```)XY`@`!`.,L`@```@$`XRP"```"`0#C+`(``````-0L````
  3360. XXM````U"P```````#4+````````-0L````````U"P```````#4+````````-0L
  3361. XXM````````U"P```("`0">.0$``````-HU2%D"`-\U2%D"`.0UY%@%`.DUY%@%
  3362. XXM`.XUY%@%`/,UY%@%`/@UY%@$`/TUY%@$``(VZE@#``<VZE@#````FED`````
  3363. XXM```!`0`!'C@`````````````````````````````````````````````````
  3364. XXM````````````````````````````````````````````````````````````
  3365. XXM````````````````````````````````````````````````````````````
  3366. XXM````````````````````````````````````````````````````````````
  3367. XXM`````````````````````````````````````````````!H:&AH:&AH:&AH:
  3368. XX(&AH:&AH:&@`:
  3369. XX`
  3370. XXend
  3371. SHAR_EOF
  3372. if test 31597 -ne "`wc -c shar.uue`"
  3373. then
  3374. echo shar: error transmitting shar.uue '(should have been 31597 characters)'
  3375. fi
  3376. #    End of shell archive
  3377. exit 0
  3378. -- 
  3379.  
  3380. Mike Kersenbrock
  3381. Tektronix Software Development Products
  3382. Aloha, Oregon
  3383. 20-Jul-86 06:19:32-MDT,2246;000000000000
  3384. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3385. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 06:19:25-MDT
  3386. Received: from brl-smoke.arpa by AMSAA.ARPA id a000661; 20 Jul 86 7:44 EDT
  3387. Received: from USENET by SMOKE.BRL.ARPA id a023275; 20 Jul 86 7:41 EDT
  3388. From: "Willie Smith, LTN Components Eng." <w_smith@wookie.dec.com>
  3389. Newsgroups: net.micro.cpm
  3390. Subject: UUDECODE sources in assembly?
  3391. Message-ID: <4283@decwrl.DEC.COM>
  3392. Date: 20 Jul 86 02:15:34 GMT
  3393. Sender: daemon@dec.ARPA
  3394. To:       info-cpm@AMSAA.ARPA
  3395.  
  3396. Greetings.  I really like the idea of passing around binaries
  3397. (with the sources of course, no trojans or logic bombs please!)
  3398. using UUENCODE and UUDECODE, and I can hardly wait to start
  3399. using them on things like crunch12, but there's this problem...
  3400. uudecode.com is uuencoded, and I don't have Pascal.  With the
  3401. help of my friendly (and incredibly patient) system mangler, I
  3402. managed to find an ARChived CP/M uudecode.com, but I don't have 
  3403. a CP/M ARC program.  Well, a little more searching turned up a
  3404. program DEARC.LBR, but I don't have a library utility.  All I
  3405. need now is a library utility that's uuencoded, and I can close
  3406. the loop!  :+)
  3407.     Actually, I did manage to find a SWEEP utility that runs on 
  3408. a VAX, but the uudecode.com file it builds (by the time I get it
  3409. shipped home via Kermit) doesn't work at all, and a quick disassembly
  3410. of the code leads me to believe there's a bug somewhere, it don't
  3411. look like code to me!
  3412.     A quick look at the Pascal code makes the process of uudecoding
  3413. look fairly easy, but if someone has already written an assembly
  3414. routine (or Basic, I'm not that proud) that I could use on my
  3415. copy of uudecode.uue, I could bootstrap this whole thing...
  3416.  
  3417. Many thanks as usual for any and all assistance!
  3418.  
  3419. UUCP:    decwrl!wookie.dec.com!smith
  3420. Internet:    smith@wookie.dec.com
  3421. Dec ENET:    WOOKIE::SMITH
  3422.  
  3423. The above doesn't even represent opinions, much less mine, but if it
  3424. did, and you thought Digital Equipment Corporation subscribed to my
  3425. views, you would need psychiatric help and brain removal.
  3426.  
  3427. VAX and Kermit and probably 40 percent of the words commonly in
  3428. use in the technical community (including Basic and CP/M) are
  3429. trademarks of somebody or other...
  3430.  
  3431. 20-Jul-86 07:11:27-MDT,690;000000000000
  3432. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3433. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 07:11:20-MDT
  3434. Received: from simtel20.arpa by AMSAA.ARPA id a000761; 20 Jul 86 8:54 EDT
  3435. Date: Sun 20 Jul 86 06:52:46-MDT
  3436. From: Jim Forrest <JFORREST@SIMTEL20.ARPA>
  3437. Subject: Need MEX for Apple 2e
  3438. To: INFO-MICRO@SIMTEL20.ARPA
  3439. cc: INFO-CPM@SIMTEL20.ARPA, JFORREST@SIMTEL20.ARPA
  3440. Message-ID: <12224177541.12.JFORREST@SIMTEL20.ARPA>
  3441.  
  3442. I need MEX for an Apple 2e with microsoft card and micromodem IIe.
  3443. Would appreciate someone sending to:
  3444. JFORREST@SIMTEL20
  3445. Please reply direct to me, not to the entire list. I can handle uuencoded
  3446. or squeezed or whatever.
  3447. Thanks
  3448. Jim
  3449. -------
  3450. 20-Jul-86 16:34:48-MDT,1530;000000000000
  3451. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3452. Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 16:34:40-MDT
  3453. Received: from simtel20.arpa by AMSAA.ARPA id a001104; 20 Jul 86 18:19 EDT
  3454. Date: Sun, 20 Jul 1986  16:17 MDT
  3455. Message-ID: <KPETERSEN.12224280396.BABYL@SIMTEL20.ARPA>
  3456. Sender: KPETERSEN@SIMTEL20.ARPA
  3457. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  3458. To:   Info-Cpm@AMSAA.ARPA, Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
  3459. Subject: Public domain BASIC compiler for CP/M-80
  3460.  
  3461. Now available from SIMTEL20:
  3462.  
  3463. Filename            Type     Bytes     CRC
  3464.  
  3465. Directory PD:<CPM.BASIC>
  3466. B-COMPIL.LBR.1            BINARY     87424  D5E5H
  3467.  
  3468. This is BCBC version 1.1 for CP/M-80, written by Bruce Tonkin.  It's
  3469. a BASIC compiler which generates assembler source code for ASM or MAC
  3470. (RMAC should work too).  Intel 8080 opcodes are used so the resultant
  3471. program will run on either 8080 or Z80 CP/M systems.  This BASIC uses
  3472. syntax similar to MBASIC, but some statements may need to be changed.
  3473. Be sure to read the sample program included in this LBR.
  3474.  
  3475. If you are unable to access SIMTEL20 because of network restrictions
  3476. it's also available on my RCP/M Royal Oak (MI) which may be accessed
  3477. at 300 bps (Bell 103a), 1200 bps (Bell 212a), or 2400 bps (V.22 bis).
  3478. The telephone number is (313) 759-6569.  It can also be found on the
  3479. CP/M RoundTable on General Electric Information Services' GEnie.
  3480.  
  3481. --Keith Petersen
  3482. Arpa:   W8SDZ@SIMTEL20.ARPA
  3483. GEnie Mail: W8SDZ
  3484. uucp:   {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
  3485. 21-Jul-86 07:50:23-MDT,2073;000000000000
  3486. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3487. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 07:50:14-MDT
  3488. Received: from simtel20.arpa by AMSAA.ARPA id a007437; 21 Jul 86 9:09 EDT
  3489. Date: 17 Jul 1986 1042-EET (Thursday)
  3490. Message-ID: <KPETERSEN.12224319155.BABYL@SIMTEL20.ARPA>
  3491. Sender: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
  3492. From: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
  3493. To: W8SDZ@SIMTEL20.ARPA
  3494. Subject:   PD-Editor
  3495. ReSent-From: KPETERSEN@SIMTEL20.ARPA
  3496. ReSent-To: Info-Cpm@AMSAA.ARPA
  3497. ReSent-Date: Sun 20 Jul 1986 19:50-MDT
  3498.  
  3499. I am a European CP/M user. I'm looking for a new programming editor.
  3500. By now, I'm using WordStar, but if I can something 'better', I would
  3501. be really glad.  I write to you because you regularly publish a list
  3502. of PD software which American users can download from SIMTEL.  I'm
  3503. sure there are some PD screen editors on this system. If there is even
  3504. one which comes close to my needs (see below), could you mail me how I
  3505. can get hands on that piece of software? Any other hints concerning an
  3506. editor would be greatly appreciated.
  3507.  
  3508. Here follows my wish list:
  3509.     - small and fast
  3510.     - can use memory-mapped video board
  3511.     - editing multiple files, display at least two of them
  3512.       simultaniously (windowing)
  3513.     - support arbitrary sized files
  3514.     - free key-to-commands-binding (no problem if I have the
  3515.       source)
  3516.     - macros
  3517.     - automatic indenting
  3518.     - if possible without overlays, so I can run it off my
  3519.       ramdisk without accessing the "slow and noisy" drives.
  3520.     - not too much useless infos on the screen
  3521.  
  3522. I think that's enough. I tried to keep the list in an order: top
  3523. points are more important than those at the end.  There is no need for
  3524. word processing capability. The language it's written in doesn't
  3525. matter, too.  I hope there is such a beast. If not, I will perhaps
  3526. write my own.  (and then donate it to the PD, if there is any
  3527. interest)
  3528.  
  3529. For any reply best thanks in advance,
  3530.         ...Urs Zurbuchen
  3531.  
  3532.  
  3533. PS: What editor do you use for your programming?
  3534.  
  3535. -- 
  3536. UUCP: ...seismo!mcvax!cernvax!ethz!zu
  3537. 21-Jul-86 13:09:54-MDT,952;000000000000
  3538. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3539. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 13:09:47-MDT
  3540. Received: from lll-mfe.arpa by AMSAA.ARPA id a021205; 21 Jul 86 14:26 EDT
  3541. Date: Mon, 21 Jul 86 14:23 EST
  3542. From: SECRIST%OAK.SAINET.MFENET@LLL-MFE.ARPA
  3543. Subject: EMACS clones
  3544. To: INFO-CPM@AMSAA.ARPA
  3545.  
  3546. From:    <SECRIST%OAK.SAINET.MFENET@LLL-MFE.Arpa>   (Richard C. Secrist)
  3547. Date:    Mon, 21-JUL-1986 14:24 EST
  3548. To:      INFO-CPM@AMSAA.ARPA
  3549. Message-ID: <[OAK.SAINET.MFENET].A15B96A0.008F240E.SECRIST>
  3550. Header-Disclaimer: I don't like my headers either.
  3551. Quote: "May your future be limited only by your dreams." -- Christa McAuliffe
  3552. Organization:  Science Applications Int'l. Corp., Oak Ridge, Tenn., USA
  3553. CompuServe-ID: [71636,52]
  3554. X-VMS-Mail-To: CPM
  3555.  
  3556. Someone mentioned that a user's group at Los Alamos or someplace would
  3557. sell you Mark-of-the-Unicorn EMACS (now rescinded) for $50.  Does anyone
  3558. know about this ?
  3559.  
  3560. r c s
  3561. 21-Jul-86 14:41:23-MDT,2709;000000000000
  3562. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3563. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 14:41:03-MDT
  3564. Received: from wiscvm.arpa by AMSAA.ARPA id a024853; 21 Jul 86 15:50 EDT
  3565. Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/21/86 at
  3566.   14:49:25 CDT
  3567. Date: MONDAY 07/21/86 21:43:25 DNT
  3568. To:  INFO-CPM@AMSAA.ARPA
  3569. From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
  3570. Subject: REV TO UUENCODE/UUDECODE
  3571.  
  3572.                  Hi Cpm people.
  3573.  
  3574. I got the uuencode/uudecode files some days ago, this is really what we
  3575. need.
  3576. BUT because of all these networks, where some of the gateways change
  3577. some of the special characters (like the ARPANET - BITNET gateway), one
  3578. can't trust all the special characters made by uuencode. So this have
  3579. to be changed. And the problem is to choose 64 chracters, which does not
  3580. changed when ported from network to network. So I took these:
  3581.              ':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
  3582. eg. ':', all digits, all upper and lower case letters, '.', hoping that
  3583. they will be useable. So if we can use this instead of the UUENCODE/UU-
  3584. DECODE there is a chance of making the stuff you send useable to BITNET
  3585. users too. Or at least use it when sending binfiles to the Info-Cpm list.
  3586.  
  3587. So far I am working on the encoding part of the program. I have used the
  3588. code from UUENCODE/UUDECODE as inspiration, but started over because I
  3589. did not like the coding style of them. And I will probaly start on the
  3590. decoding part one of the next days. So within a week or two I should
  3591. have working and testing Pascal programs finished. But I do not know
  3592. when I can mail them to the list. That may take some time. But when done
  3593. the .COM file should be coded in some kind of HEX format, so all can
  3594. download them without problems. This is true bootstraping.
  3595.  
  3596. What I want is to hear what you mean about this. Comments and ideas are
  3597. very welcome. Hope that you like it and that I did not leave too much out
  3598. when explaining my ideas.
  3599.  
  3600. Kind regrads from Copenhagen -- Denmark.
  3601.  
  3602.                Klaus Elmquist Nielsen
  3603.  
  3604. BITNET: TTTLEH5 at NEUVM1
  3605.         NEUKLAUS at NEUVM1
  3606. -------------------------------------------------------------------------
  3607.  
  3608. To explain how UUENCODE works, just try to look at the binary file as
  3609. one long bitstring. If one then take 6 bit at a time, this gives you a
  3610. sequence of numbers in the range 0..63 . And since it is possible to find
  3611. 64 independent characters, this give you a sequence of chars, or a text
  3612. file. Organising this in lines with control info like line length, header
  3613. and terminater gives you a useable fileformat.
  3614. UUDECODE do the work in the reverse order, eg make a binary file from the
  3615. ascii file from UUENCODE.
  3616. 21-Jul-86 18:24:38-MDT,905;000000000000
  3617. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3618. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 18:24:30-MDT
  3619. Received: from acc.arpa by AMSAA.ARPA id a027388; 21 Jul 86 20:01 EDT
  3620. Date: 21 Jul 86 16:43:00 PST
  3621. From: shawn@ACC.ARPA
  3622. MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
  3623. Subject: commodore128 disk format
  3624. To: shawn <shawn@acc.ARPA>
  3625. cc: info-cpm@AMSAA.ARPA
  3626. Reply-To: shawn@ACC.ARPA
  3627. MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
  3628.  
  3629.  
  3630. No, I didn't buy one, I have received a call from someone who would like
  3631. to use the Commodore-128 in its CP/M Mode, and wants to use some of our KAYPRO
  3632. public domain software. First, can anyone tell me which disk formats it will
  3633. read? and second, does it emulate any specific terminal (amd3a, vt52, or ?)
  3634. would appreciate a reply either to me, shawn@acc.arpa, or to info-cpm.
  3635. Thanks in advance
  3636. shawn@acc.arpa
  3637. ------
  3638. 21-Jul-86 21:39:02-MDT,1439;000000000000
  3639. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3640. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 21:38:55-MDT
  3641. Received: from simtel20.arpa by AMSAA.ARPA id a027735; 21 Jul 86 23:09 EDT
  3642. Date: Mon, 21 Jul 1986  21:08 MDT
  3643. Message-ID: <KPETERSEN.12224595451.BABYL@SIMTEL20.ARPA>
  3644. Sender: KPETERSEN@SIMTEL20.ARPA
  3645. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  3646. To:   "Jeffrey D. Struven" <jds%rayssd.uucp@BRL.ARPA>
  3647. Cc:   Info-Micro@BRL-VGR.ARPA, Info-Cpm@AMSAA.ARPA
  3648. Subject: Using CP/M on the Commodore 128
  3649. In-reply-to: Msg of 21 Jul 1986  14:25-MDT from Jeffrey D. Struven <jds%rayssd.uucp at BRL.ARPA>
  3650.  
  3651. >[the] CP/M disk [has some programs] on side 1 and the rest on side 2,
  3652. >every time he wants to change the date or use the functions that are
  3653. >not on the boot side of the disk he has to flip the disk....
  3654.  
  3655. The Commodore C128 CP/M disk was distributed that way for people with
  3656. single-sided drives.  It is expected that the user will copy those
  3657. files onto a double-sided disk if his drive supports that.  If he has
  3658. only one drive, there are several single-drive copy programs available
  3659. that will do the job.  One is MFT48, available from many RCP/M
  3660. systems, local user groups, or the CP/M RoundTable on General Electric
  3661. Information Service's GEnie.
  3662.  
  3663. --Keith Petersen
  3664. Arpa: W8SDZ@SIMTEL20.ARPA
  3665. uucp: {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
  3666. GEnie Mail: W8SDZ
  3667. RCP/M Royal Oak: 313-759-6569
  3668. 22-Jul-86 11:41:59-MDT,2795;000000000000
  3669. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3670. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 11:41:37-MDT
  3671. Received: from wiscvm.arpa by AMSAA.ARPA id a009951; 22 Jul 86 12:56 EDT
  3672. Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/22/86 at
  3673.   11:54:47 CDT
  3674. Date: Tue, 22 Jul 86 17:17:05 DNT
  3675. To:  info-cpm@AMSAA.ARPA
  3676. From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
  3677. Subject: rev to uuencode/uudecode
  3678.  
  3679. * I got some strange msg's from info-cpm @ amsaa . arpa ,
  3680. * so I resend this letter.
  3681.                  Hi Cpm people.
  3682.  
  3683. I got the uuencode/uudecode files some days ago, this is really what we
  3684. need.
  3685. BUT because of all these networks, where some of the gateways change
  3686. some of the special characters (like the ARPANET - BITNET gateway), one
  3687. can't trust all the special characters made by uuencode. So this have
  3688. to be changed. And the problem is to choose 64 chracters, which does not
  3689. changed when ported from network to network. So I took these:
  3690.              ':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
  3691. eg. ':', all digits, all upper and lower case letters, '.', hoping that
  3692. they will be useable. So if we can use this instead of the UUENCODE/UU-
  3693. DECODE there is a chance of making the stuff you send useable to BITNET
  3694. users too. Or at least use it when sending binfiles to the Info-Cpm list.
  3695.  
  3696. So far I am working on the encoding part of the program. I have used the
  3697. code from UUENCODE/UUDECODE as inspiration, but started over because I
  3698. did not like the coding style of them. And I will probaly start on the
  3699. decoding part one of the next days. So within a week or two I should
  3700. have working and testing Pascal programs finished. But I do not know
  3701. when I can mail them to the list. That may take some time. But when done
  3702. the .COM file should be coded in some kind of HEX format, so all can
  3703. download them without problems. This is true bootstraping.
  3704.  
  3705. What I want is to hear what you mean about this. Comments and ideas are
  3706. very welcome. Hope that you like it and that I did not leave too much out
  3707. when explaining my ideas.
  3708.  
  3709. Kind regrads from Copenhagen -- Denmark.
  3710.  
  3711.                Klaus Elmquist Nielsen
  3712.  
  3713. BITNET: TTTLEH5 at NEUVM1
  3714.         NEUKLAUS at NEUVM1
  3715. -------------------------------------------------------------------------
  3716.  
  3717. To explain how UUENCODE works, just try to look at the binary file as
  3718. one long bitstring. If one then take 6 bit at a time, this gives you a
  3719. sequence of numbers in the range 0..63 . And since it is possible to find
  3720. 64 independent characters, this give you a sequence of chars, or a text
  3721. file. Organising this in lines with control info like line length, header
  3722. and terminater gives you a useable fileformat.
  3723. UUDECODE do the work in the reverse order, eg make a binary file from the
  3724. ascii file from UUENCODE.
  3725. 22-Jul-86 13:13:28-MDT,1498;000000000000
  3726. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3727. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 13:13:21-MDT
  3728. Received: from wiscvm.arpa by AMSAA.ARPA id a011953; 22 Jul 86 13:58 EDT
  3729. Received: from (FISHER)RPICICGE.BITNET by WISCVM.ARPA on 07/22/86 at
  3730.   12:56:43 CDT
  3731. Date: 22 July 86 13:52-EST
  3732. From:  FISHER%RPICICGE.BITNET@WISCVM.ARPA
  3733. To:  INFO-CPM@AMSAA.ARPA
  3734. X-Acknowledge:
  3735. Subject: BITNET mail follows
  3736.  
  3737. Date: 22 July 1986, 13:34:26 EAS
  3738. From: FISHER at RPICICGE
  3739. To:   INFO-CPM at AMSAA.ARPA
  3740.  
  3741. As a new-comer to this group with access only through BITNET I face the
  3742. frustration common to all non-FTP'ers:  Public domain software--you
  3743. can't get there from here.
  3744.     Maybe this is a tired question, but I'll ask anyway.  Are there any
  3745. volunteers out there in BITNET-land willing to establish branch offices
  3746. for the SIMTEL20 main repository?  It would be a major committment for
  3747. any one installation to support a complete online service, but some
  3748. distributed arrangement might be feasible.
  3749.     I, for one, am willing to offer some form of online file server
  3750. for some suitably sized subset of the respository and perhaps an
  3751. offline server (e.g. tape-based with requests processed every few
  3752. days) for the full library.  Anyone else?
  3753.     (Of course, there is the implied assumption that given the
  3754. volunteers on the BITNET side of the world there will be some way
  3755. to get a copy of the full library and the ongoing additions. :-)
  3756.  
  3757. JSFisher    FISHER@RPICICGE.BITNET
  3758. 22-Jul-86 20:11:37-MDT,1834;000000000000
  3759. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3760. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 20:11:23-MDT
  3761. Received: from mitre.arpa by AMSAA.ARPA id a020184; 22 Jul 86 21:34 EDT
  3762. Full-Name: Thomas Reid
  3763. Message-Id: <8607230133.AA23950@mitre.ARPA>
  3764. Organization: The MITRE Corp., Washington, D.C.
  3765. To: fisher%rpicicge.bitnet@wiscvm.ARPA
  3766. Cc: info-cpm@AMSAA.ARPA
  3767. Subject: Re: Bitnet access to simtel20 archives
  3768. Date: Tue, 22 Jul 86 21:33:20 -0500
  3769. From: treid@MITRE.ARPA
  3770.  
  3771. This will not solve your read need but may help a bit.  Treat the new
  3772. PD S/W announcements at simtel20 as your shopping list at your local
  3773. RCPM.  Ask your sysop to be looking for the new package or update.  Many
  3774. times, the RCPM may already have it.
  3775.  
  3776. Put a message on your local RCPM asking for those who DO have arpanet
  3777. access if they would please pick a library up off of simtel20 and upload
  3778. it to the RCPM.  All each community needs is one or two good deeders and
  3779. the software will appear.
  3780.  
  3781. The recent messages on uuencode and uudecode sources in Turbo Pascal also
  3782. give hope in that libraries can be transferred in the mail with only a
  3783. small penalty (33%).  Now a message asking for a good soul to send it
  3784. through the mail can be answered (though this has great possibilities
  3785. for abuse - Keith Petersen:  would you care to comment!?).
  3786.  
  3787. Wrose comes to worse - everything in the simtel20 archives is also
  3788. on Keith Petersen's RCPM in Royal Oak, Michigan (phone # not handy).
  3789. On Saturday or Sunday or the deep of night, a 100K download will be
  3790. only a couple of bucks.
  3791.  
  3792. But back to the front:  being nice to your RCPM sysop will keep him
  3793. helping you.  Remember: most sysops run their RCPMs as a hobby, many
  3794. times an expensive hobby.  They do a great service to all and rarely 
  3795. get the public appreciation that they deserve.
  3796. 22-Jul-86 23:30:21-MDT,13775;000000000000
  3797. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3798. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 23:29:50-MDT
  3799. Received: from simtel20.arpa by AMSAA.ARPA id a020558; 23 Jul 86 0:44 EDT
  3800. Date: Tue, 22 Jul 1986  22:31 MDT
  3801. Message-ID: <KPETERSEN.12224872792.BABYL@SIMTEL20.ARPA>
  3802. Sender: KPETERSEN@SIMTEL20.ARPA
  3803. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  3804. To:   Info-Cpm@AMSAA.ARPA, Info-Micro@BRL.ARPA
  3805. Subject: Interview with MNP protocol author
  3806.  
  3807. By permission of the publisher...
  3808.  
  3809. ----
  3810.  
  3811. Originally published by Black Box Corporation in the Black Box 
  3812. COMMUNICATOR.  For a free subscription to the COMMUNICATOR, the BLACK 
  3813. BOX(R) Catalog and/or the Personal BLACK BOX(R) Catalog, call (412) 
  3814. 746-5500 or write: Black Box Corporation, Subscription Department, 
  3815. P.O. Box 12800, Pittsburgh, PA 15421.
  3816.  
  3817.  
  3818.  
  3819.           ERROR CORRECTION IN MODEMS... AND THE MNP PROTOCOL
  3820.  
  3821.                    An Interview with Greg Pearson, 
  3822.                          the Developer of MNP
  3823.  
  3824.  
  3825.          
  3826.        ******************************************************
  3827.                                                                     
  3828.         "(Error correction in modems) is a transparent solution   
  3829.         to a problem that's been with us all the time -- noisy    
  3830.         telephone lines."                                         
  3831.  
  3832.        ******************************************************
  3833.  
  3834.  
  3835. Sending information, minus the errors, is a top priority among data 
  3836. communicators everywhere.  As a result, more and more modems are being 
  3837. equipped with the MNP link protocol in their firmware.  Many people 
  3838. feel that this is the most effecicent way to eliminate errors in 
  3839. today's high-speed dial-up communications.  And Greg Pearson, MICOM's 
  3840. Chief Software Development Manager for Analog Products, is one of them.  
  3841. The MNP Protocol is his brainchild -- the product of Greg Pearson's 
  3842. attempt to develop a complete protocol, one with several layers that 
  3843. perform independently of the others.  Needless to say, he was 
  3844. successful.
  3845.  
  3846. This issue of the Communicator features a new Black Box modem that 
  3847. offers the benefits of the MNP error-control protocol.  That modem --
  3848. the Dial Modem 24+, featured on page 15 of the COMMUNICATOR -- is just 
  3849. one example of the important place MNP is taking in the future of data 
  3850. communications.  
  3851.  
  3852.  
  3853. BBC: In much of your published material on MNP, you've stressed that 
  3854. MNP has the richest set of protocols -- that it includes both a full-
  3855. fledged link protocol as well as higher level protocols like session 
  3856. and file transfer.  To begin our discussion on error correction in 
  3857. modems, can you tell us what you mean by a "full-fledged link protocol" 
  3858. -- and then give an overview of the different types of error correcting 
  3859. techniques?
  3860.  
  3861. PEARSON: For one thing, a full-fledged link protocol has to provide 
  3862. layer independence.  By that I mean that it doesn't depend on the layer 
  3863. above it to operate effectively.  Since error-control is offered at the 
  3864. link protocol layer, it's important that it be independent.  And that's 
  3865. not the case with the X.PC protocol.  X.PC is actually a layer 3 
  3866. protocol that integrates certain aspects of layer 2 from the OSI 
  3867. Reference Model.  If you're a real architectural purest, you wouldn't 
  3868. do this.  
  3869.  
  3870. As for the different types of error correcting techniques used for 
  3871. point-to-point error correction to date, in the hobbyiest world -- or 
  3872. rather, the retail-oriented market -- three come to mind right away.  
  3873. They are Xmodem, X.PC and MNP.  
  3874.  
  3875. In a sense, these three techniques have been used to accomplish the 
  3876. same work, but in different environments.  For example, many personal 
  3877. computer software packages use the Xmodem protocol for the error-free 
  3878. transmission of files over a dial-up telephone connection.  But if a 
  3879. user wants to send an error-free file from a PC into TYMNET(R), X.PC 
  3880. would be used since it's the protocol used by TYMNET.  On the other 
  3881. hand, if you wanted to do the same thing -- that is, send any data 
  3882. error-free over a dial-up connection -- with the protocol built into 
  3883. the modems themselves, you would use MNP.
  3884.  
  3885.  
  3886. BBC:  Can one protocol be replaced by another?
  3887.  
  3888. PEARSON:  Well, you could use X.PC or MNP in the same application as 
  3889. the Xmodem protocol.  Basically, Xmodem is a very simple technique --
  3890. one that's good for file transfer but not for interactive traffic.  
  3891.  
  3892. And, as I just mentioned, X.PC is a software protocol approach used by 
  3893. TYMNET.  A couple of companies have put X.PC into the firmware of 
  3894. their modems, but there are some significant disadvantages in doing 
  3895. that -- and the most noticable to the user is the difference in 
  3896. throughput.  If you take a look at the market, the use of the MNP 
  3897. error-control protocol in modems is by far the preferred choice.  It's 
  3898. currently used in the products of something like 16 or 18 modem 
  3899. vendors.
  3900.  
  3901.  
  3902.        **************************************************
  3903.                                                             
  3904.          "Imagine sending all of WAR AND PEACE with the
  3905.          probability of getting only one 1-bit error."     
  3906.  
  3907.        **************************************************
  3908.  
  3909.  
  3910. BBC:  Can you explain what you mean by throughput?
  3911.  
  3912. PEARSON:  Yes.  When you have a 2400 bps modem without error control, 
  3913. the user can expect to send 2400 bits per second.  When you implement 
  3914. X.PC in the firmware of that modem, it uses 9% of those 2400 bits per 
  3915. second for protocol purposes.  So you could expect, in the best case, 
  3916. a throughput that would be 91% of the line speed.
  3917.  
  3918. Now when using MNP in the firmware, you have a different situation.  
  3919. This, for the most part, is due to a feature that I refer to as 
  3920. "switch-to-sync."
  3921.  
  3922.  
  3923. BBC:  You talk about this feature in one of your articles, saying that 
  3924. it's an exclusive advantage of the MNP protocol.  Can you explain what 
  3925. happens as a result of switch-to-sync?
  3926.  
  3927. PEARSON:  What happens is the transmission starts in the character-
  3928. oriented mode -- or asynchronous mode.  But if the modems at both ends 
  3929. of that transmission are equipped with MNP error-correction, the 
  3930. transmission will switch to bit-synchronous between the modems.  As a 
  3931. result, the transmission is much more efficient.
  3932.  
  3933.  
  3934. BBC:  How does that affect the through-put of an MNP-equipped modem?
  3935.  
  3936. PEARSON:  Let me take you through the whole argument.  When a user is 
  3937. connected to a V.22 bis 2400 bps modem, that user is operating in an 
  3938. asynchronous character mode.  For every eight data bits transmitted, 
  3939. there is a start bit and a stop bit.  That means that the user is 
  3940. sending 240 characters in 2400 bits -- or ten bits per character.  
  3941.  
  3942. Now, when an MNP error-correcting modem is sending data, it doesn't 
  3943. send the user's start and stop bits required in the asynchronous mode.  
  3944. So for every ten bits sent by the user, MNP only sends eight -- i.e. 
  3945. MNP is sending data 20% more efficiently than the user because it's 
  3946. sending 20% fewer bits.  
  3947.  
  3948. As for the bandwidth, MNP uses 11% for protocol mechanisms.  So even 
  3949. though it loses 11% efficiency there, it gains 20% from the switch-
  3950. to-sync operation -- and that puts you 9% ahead of the game.   
  3951.  
  3952. What that all boils down to is that MNP, on an error-free line, will 
  3953. impose no throughput degradation when built into the firmware of your 
  3954. modem.  And because of the unique switch-to-sync feature, MNP is 
  3955. functionally like SDLC or HDLC, the two popular synchronous link 
  3956. layer protocols.  
  3957.  
  3958.  
  3959. BBC:  What does this all mean to the user?  
  3960.  
  3961. PEARSON:  You can have your cake and eat it too.  The ideal aspect of 
  3962. the MNP link protocol is that you can have it either way -- character-
  3963. oriented or bit-synchronous.  Other protocols give you no options.  
  3964.  
  3965.  
  3966. BBC:  What you're saying, then, is that MNP offers you a lot more 
  3967. flexibility than other protocols.  
  3968.  
  3969. PEARSON:  That's right.  And it has all the classical features of a 
  3970. layer 2 protocol:  it's full-duplexed -- that is, it can send and 
  3971. receive data at the same time -- it has error detection based on a 
  3972. very powerful 16-bit CRC, ithas retransmission for error correction, 
  3973. and it can reliably send a keyboard break signal... all of which 
  3974. actually makes it more powerful than HDLC.  
  3975.  
  3976.  
  3977. BBC:  You mentioned the 16-bit CRC, or Cyclic Redundancy Check.  Can 
  3978. you explain that?  Also, tell us what actually happens in this type of 
  3979. retransmission error correction.  I believe you refer to it as the 
  3980. 'go-back-n' method of correction.  
  3981.  
  3982. PEARSON:  Any protocol, in order to provide an error-free transmission, 
  3983. must have two things.  One -- it has to provide a way for the receiver 
  3984. to know if an error has occurred.  That's error detection.  The 
  3985. technique employed in MNP for this error detection uses a polynomial 
  3986. function to calculate a 16-bit number which is a function of all the 
  3987. data sent in a particular message.  The MNP error-correcting protocol 
  3988. then sends those 16-bits at the end of its message.
  3989.  
  3990. The receiver -- as it is receiving the message -- calculates its own 
  3991. version of this 16-bit number.  Then it compares its number with the 
  3992. 16-bit number sent with the message.  If the numbers are the same, the 
  3993. message is free from errors.  If the numbers are different, an error 
  3994. has occurred somewhere in the message.  That's how errors are detected.
  3995.  
  3996. Once an error is detected, the receiver brings the error correction 
  3997. mechanism provided by the MNP link protocol into play.  That correction 
  3998. mechanism calls for the receiver to send a message back to the sender.  
  3999. The sender -- recognizing that the last correct message sent before the 
  4000. error was data message number 'n' -- is cued to go back to the message 
  4001. following message 'n'.  In other words, if the sender has sent five 
  4002. messages, and the receiver detects an error in message 4, the sender 
  4003. will 'go back' to message 4 and begin retransmitting information again.
  4004.  
  4005. For all practical purposes, the result of the MNP link is error-free 
  4006. transmission.  Using the 16-bit redundancy check, it will detect every 
  4007. error which is 16 bits or smaller, with 100% probability.  As a result, 
  4008. the chances of an error occurring are actually so small that you can, 
  4009. in practice, ignore them.  Imagine sending all of WAR AND PEACE with 
  4010. the probability of getting only one 1-bit error.  That's what you could 
  4011. expect from an error-control protocol that uses the 16-bit CRC.  
  4012.  
  4013.        ********************************************************
  4014.                                                                
  4015.        "(MNP) is a very healthy protocol over long-delay       
  4016.        channels, and that's important to dial-up users.  You'd 
  4017.        be surprised how many of your local calls today are     
  4018.        being routed over satellite..."                         
  4019.                                                                
  4020.        ********************************************************
  4021.  
  4022.  
  4023. BBC:  MNP also has the ability to send a number of messages before any 
  4024. acknowledgement is required.  Can you explain this?
  4025.  
  4026. PEARSON: Any link protocol that's going to work well over telephone 
  4027. lines must have this ability.  If you're making a transcontinental call 
  4028. and it's transmitted by satellite, you don't want to wait for an 
  4029. acknowledgement from the receiver after each message.  That's how 
  4030. Xmodem works.
  4031.  
  4032. What you want to be able to do is send a number of messages at one 
  4033. time.  MNP lets you have up to eight outstanding messages before an 
  4034. acknowledgement is required.  And MNP is designed in such a way that 
  4035. only under the worst conditions would a sender ever have to wait 
  4036. between transmissions.  It's a very healthy protocol over long-delay 
  4037. channels, and that's important to dial-up users. You'd be surprised how 
  4038. many of your local calls today are being routed over satellite or 
  4039. microwave.  
  4040.  
  4041.  
  4042. BBC:  You've talked about MNP becoming the de facto standard -- the 
  4043. unofficial standard for dial-up connections.  On what factors would 
  4044. this really depend?  How much does the demand for error-controlling, 
  4045. high-speed modems influence this?
  4046.  
  4047. PEARSON:  A year ago, there was some question as to whether the V.22 
  4048. bis 2400 bps modem was really going to take off.  I don't think that's 
  4049. much of an issue anymore.  The price of these modems has come way down 
  4050. -- to the point that a 2400 bps modem can cost less than a Hayes(R) 
  4051. 1200.  The higher speed modems are here to stay.
  4052.  
  4053. What affect does this have on the demand for error control in modems?  
  4054. First of all, we're pushing more bits through the same width pipe --
  4055. and we're getting more errors as a result.  Secondly -- because we're 
  4056. sending more bits at a time -- whenever we do get an error, it really 
  4057. clobbers more bits.  Finally, there's the way we're sending bits 
  4058. through the channels.  When we get an error, it takes longer for the 
  4059. modem to recover -- so when you lose one character, you're actually 
  4060. losing a whole slew of characters.  
  4061.  
  4062. In short, our communications are much more error sensitive today.  And 
  4063. we have a dramatically increased need to control errors because of 
  4064. that.  A good way of doing that is by putting the protocol right in the 
  4065. firmware of a modem -- a way that doesn't really interfere with your 
  4066. through-put.
  4067.  
  4068. It's a transparent solution to a problem that's been with us all the 
  4069. time -- noisy telephone lines.
  4070.  
  4071.  
  4072.                               #   #   #
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.                 
  4079.  
  4080.                                          -by Betsy Momich
  4081.                                           Publications Department
  4082.                                           Black Box Corporation
  4083. 23-Jul-86 04:38:32-MDT,1184;000000000000
  4084. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4085. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 04:38:21-MDT
  4086. Received: from brl-smoke.arpa by AMSAA.ARPA id a021273; 23 Jul 86 6:08 EDT
  4087. Received: from USENET by SMOKE.BRL.ARPA id a015555; 23 Jul 86 5:51 EDT
  4088. From: Harald Striepe <striepe%muscat.dec@BRL.ARPA>
  4089. Newsgroups: net.micro.cpm
  4090. Subject: Re: commodore128 disk format
  4091. Message-ID: <10064@muscat.DEC>
  4092. Date: 22 Jul 86 21:28:39 GMT
  4093. To:       info-cpm@AMSAA.ARPA
  4094.  
  4095.  
  4096.     I do not know whether the new drives for the 128 support standard
  4097.     formats,  the older drives (1541) essentially contained the DOS in
  4098.     ROM inside the drive,  you were stuck with a fixed file structure.
  4099.     It also used group coding,  which does not follow standard FM and
  4100.     MFM formats (group coding is also used by Apple,  and was used by
  4101.     the VICTOR 9000 to achieve high storage densities).  The 1541 also
  4102.     uses varying rotational rates for different tracks.  In other words,
  4103.     standard drives cannot create disks for the commodore standard.
  4104. -- 
  4105. Harald Striepe
  4106. DEC Corporate Software Products Group, Santa Clara, CA
  4107. decwrl!muscat!striepe, decwrl!dec-rhea!dec-winery!striepe, WINERY::STRIEPE
  4108. 23-Jul-86 18:16:06-MDT,1234;000000000000
  4109. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4110. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 18:15:54-MDT
  4111. Received: from brl-smoke.arpa by AMSAA.ARPA id a012244; 23 Jul 86 19:51 EDT
  4112. Received: from USENET by SMOKE.BRL.ARPA id a005198; 23 Jul 86 19:42 EDT
  4113. From: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>
  4114. Newsgroups: net.micro.cpm
  4115. Subject: Plea for help
  4116. Message-ID: <924@ucbcad.BERKELEY.EDU>
  4117. Date: 23 Jul 86 08:43:17 GMT
  4118. Sender: news@ucbcad.ARPA
  4119. To:       info-cpm@AMSAA.ARPA
  4120.  
  4121.  
  4122. I have an old SuperBrain system, and I recently purchased an IBM
  4123. clone.  All of my files are in Lexisoft's Spellbinder, and for the
  4124. life of me, I can't get XenoCopy or Uniform to read the disk and
  4125. get the files off.
  4126.  
  4127. Does anyone out there have ANY ideas?  Also, where can I pick up
  4128. a terminal program for my SuperBrain (and thus transfer via the
  4129. serial port)?  And finally, does anyone out there have the
  4130. pinouts for the SuperBrain?
  4131.  
  4132. Many many thanks to anyone who can help!
  4133. (and a bottle of your favorite beer to the one who's fix works!)
  4134.  
  4135. Peter
  4136. -----
  4137. Peter Korn                "Fred Astaire?  Ginger Rogers did
  4138. korn@ucbvax.Berkeley.EDU         everything he did, backwards
  4139. {dual,decvax,sdcsvax}!ucbvax!korn     and in high heels!"
  4140. 23-Jul-86 19:58:02-MDT,2581;000000000000
  4141. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4142. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 19:57:50-MDT
  4143. Received: from xerox.arpa by AMSAA.ARPA id a012638; 23 Jul 86 21:29 EDT
  4144. Received: from PinotNoir.ms by ArpaGateway.ms ; 23 JUL 86 18:27:44 PDT
  4145. Date: 23 Jul 86 18:27 PDT
  4146. From: ghenis.pasa@xerox.ARPA
  4147. Subject: Re: Plea for help (Superbrain to MS-DOS)
  4148. In-reply-to: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>'s message of
  4149.  23 Jul 86 08:43:17 GMT
  4150. To: info-cpm@AMSAA.ARPA
  4151. Message-ID: <860723-182744-2114@Xerox>
  4152.  
  4153.  
  4154. Peter,
  4155.  
  4156. One thing worth trying is to find out IF a diskette WRITTEN ON THE
  4157. IBM-PC in Superbrain format (using Uniform for example) can be read by
  4158. your Superbrain. If so then you can use you PC to pick up a copy of
  4159. Modem7 (to transfer using the XMODEM protocol) from any BBS and pass it
  4160. on to your Superbrain to enable the file transfer through the serial
  4161. port (get XModem for your IBM too if you don't have it already).
  4162.  
  4163. If you're unlucky and the incompatibility goes both ways you will have
  4164. to contact some user group to see if they can provide Modem7 for the
  4165. Superbrain in the right format. A third possibility, which is likely
  4166. since Uniform failed to do the trick, is that your disk drives on one of
  4167. the machines is out of alignment. If that is the case you may not be
  4168. able to read floppies produced on any other computer unless you realign
  4169. them first.
  4170.  
  4171. A simpler (although unsafe) way to get the files across if proper
  4172. methods fail is to use PIP
  4173.  
  4174. With PIP you can send the content of a file to the serial port (consult
  4175. your CP/M documentation for specifics). On the IBM side, just do a 
  4176.  
  4177. COPY COM1: <filename>
  4178.  
  4179. to pick up the bytes. This is unsafe because no error checking is taking
  4180. place, but with a bit of luck the file will make it across in one piece.
  4181. In any case it won't hurt anything and you can try it right away. Make
  4182. sure your serial port settings are the same on both ends. To set your
  4183. serial port, use MODE on the IBM (see DOS manual); in CP/M I think that
  4184. STAT is the program to use (see CP/M manual).
  4185.  
  4186. If you try this method, please send out a message to report your results
  4187. (I've never tried it but it sounds like it should work). If you need to
  4188. get Modem7 from a user group send me another message, I might be able to
  4189. help. 
  4190.  
  4191. BTW, some mailer along the line rejected my first message addressed
  4192. directly to you <korn@pavepaws.ucb-vax.ARPA> as undeliverable  (?), so
  4193. I'm sending my reply to the whole DL.
  4194.  
  4195. Good luck!
  4196.  
  4197. -- Pablo Ghenis, Secretary, Osborne Komputer Owners' Klub
  4198.  
  4199. 24-Jul-86 04:16:46-MDT,1031;000000000000
  4200. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4201. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 04:16:41-MDT
  4202. Received: from brl-smoke.arpa by AMSAA.ARPA id a015039; 24 Jul 86 5:56 EDT
  4203. Received: from USENET by SMOKE.BRL.ARPA id a008693; 24 Jul 86 5:41 EDT
  4204. From: Stan Hanks <stan%drillsys.uucp@BRL.ARPA>
  4205. Newsgroups: net.micro.cpm
  4206. Subject: Recent posting to na.forsale
  4207. Message-ID: <377@drillsys.UUCP>
  4208. Date: 23 Jul 86 06:57:30 GMT
  4209. Keywords: no adds here
  4210. To:       info-cpm@AMSAA.ARPA
  4211.  
  4212. I just finished posting a note to na.forsale announcing that I am
  4213. parting  with much of my CP/M equipment and software, various
  4214. S-100 boards, and  whole stacks of magazines. If you are interested
  4215. in acquiring same, I suggest you watch na.forsale for my note; if you
  4216. don't get na.forsale and are interested, drop me a line and I'll send
  4217. you a personal copy.
  4218.  
  4219.  
  4220. Stan Hanks                    ...!drillsys!stan
  4221. Sr. Research Scientist                stan@rice.ARPA
  4222. Teleco Oilfield Services, Drilling Systems Technology
  4223. Houston TX                    (713) 699-5594
  4224. 24-Jul-86 06:37:19-MDT,1270;000000000000
  4225. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4226. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:36:42-MDT
  4227. Received: from crdc-vax3.arpa by AMSAA.ARPA id a000946; 24 Jul 86 8:06 EDT
  4228. Date:     Thu, 24 Jul 86 7:59:53 EDT
  4229. From:     "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
  4230. To:       Info-cpm@AMSAA.ARPA
  4231. Subject:  Peter Korn -- Superbrain
  4232.  
  4233.     
  4234.     Peter,
  4235.  
  4236.         I have an Intertech Compustar system, with a DSS-10, and
  4237.     several terminals. I use a version of MODEM730 on my micro that
  4238.     I installed myself, and wrote my own machine-specific overlay,
  4239.     (there must be hundreds out on Simtel20). I even sent Keith
  4240.     Petersen a copy of it. I've also got Xmodem on the vax system 
  4241.     we have (two versions...one that adds cr/lf for the PC community
  4242.     and one that doesn't add/subtract cr/lf, for the regular micro
  4243.     community.....if there is such a thing as a 'regular micro'.)
  4244.  
  4245.             I'm pretty sure that a model-30 Compustar is
  4246.     a pretty close approximation of a Superbrain. In fact, in 
  4247.     installing Wordstar, and DbaseII, and other packages, I 
  4248.     normally choose the superbrain selection and it all works 
  4249.     great.
  4250.  
  4251.             Let me know what you need. I've probably got it.
  4252.     I've even got a version of BYE for you.
  4253.  
  4254.                     Yours Truly,
  4255.  
  4256.  
  4257.                     Jack H. Smith
  4258.  
  4259.  
  4260. 24-Jul-86 06:43:13-MDT,946;000000000000
  4261. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4262. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:43:02-MDT
  4263. Received: from wiscvm.arpa by AMSAA.ARPA id a001295; 24 Jul 86 8:18 EDT
  4264. Received: from (PFENNIGE)CGEUGE51.BITNET by WISCVM.ARPA on 07/24/86 at
  4265.   06:36:20 CDT
  4266. Date: 24 JUL 86 13:21-N
  4267. From:  PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA
  4268. To:  INFO-CPM@AMSAA.ARPA
  4269. Subj: Commodore C128 disk formats
  4270.  
  4271. In reference to the questions regarding the ability of the Commodore 128
  4272. to read different disk formats. Well according to the manual it is capable
  4273. of reading the following formats:-
  4274. 1) Epson Qx10
  4275. 2) IBM-8 SS (cpm/86)
  4276. 3) IBM-8 DS (cp/m86)
  4277. 4) Kaypro II
  4278. 5) Kaypro IV
  4279. 6) Osborne DD.
  4280. The manual also says that it is capable of writing these formats also. As
  4281. for the terminal type I once saw a reference that if your choose either
  4282. ADM-3A or ADM-31 then you can't go wrong.
  4283. Brian Jarvis Observatoire de Geneve, Switzerland.
  4284. 24-Jul-86 12:19:16-MDT,654;000000000000
  4285. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4286. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 12:19:05-MDT
  4287. Received: from xerox.arpa by AMSAA.ARPA id a002550; 24 Jul 86 13:27 EDT
  4288. Received: from PinotNoir.ms by ArpaGateway.ms ; 24 JUL 86 10:22:08 PDT
  4289. Date: 24 Jul 86 10:20 PDT
  4290. From: ghenis.pasa@xerox.ARPA
  4291. Subject: Re: Plea for help (Superbrain to MS-DOS)
  4292. To: info-cpm@AMSAA.ARPA
  4293. Message-ID: <860724-102208-2663@Xerox>
  4294.  
  4295. Peter,
  4296.  
  4297. I forgot to mention that (if the Superbrain has a standard RS232 port)
  4298. you will need a null modem adaptor in line with your serial cable to do
  4299. port-to-port transfers. Radio Shack sells these adaptors.
  4300. 24-Jul-86 14:22:57-MDT,956;000000000000
  4301. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4302. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 14:22:44-MDT
  4303. Received: from ucb-vax.arpa by AMSAA.ARPA id a008128; 24 Jul 86 15:45 EDT
  4304. Received: by ucbvax.Berkeley.EDU (5.53/1.14)
  4305.     id AA19759; Thu, 24 Jul 86 12:43:50 PDT
  4306. Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
  4307.     id AA25950; Thu, 24 Jul 86 12:16:07 pdt
  4308. Received: by clover.ucdavis.edu (4.12/4.7)
  4309.     id AA01179; Thu, 24 Jul 86 12:16:08 pdt
  4310. Date: Thu, 24 Jul 86 12:16:08 pdt
  4311. From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
  4312. Message-Id: <8607241916.AA01179@clover.ucdavis.edu>
  4313. To: ucdavis!info-cpm@AMSAA.ARPA, ucdavis!xerox.ARPA!ghenis.pasa@ucb-vax.ARPA
  4314. Subject: Re: Plea for help (Superbrain to MS-DOS)
  4315.  
  4316. Regarding Radio Shack null modem adaptors - you're much better off getting
  4317. a length of ribbon cable and two db25 connectors from the other side of the
  4318. store and building it yourself (for about $20 - $30 less).
  4319.  
  4320.                 Eric
  4321. 28-Jul-86 02:44:36-MDT,1453;000000000000
  4322. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4323. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 02:44:28-MDT
  4324. Received: from brl-smoke.arpa by AMSAA.ARPA id a000221; 28 Jul 86 4:03 EDT
  4325. Received: from USENET by SMOKE.BRL.ARPA id a006326; 28 Jul 86 3:40 EDT
  4326. From: Jeff Sonstein <jeffs%quad1.uucp@BRL.ARPA>
  4327. Newsgroups: net.micro.cpm
  4328. Subject: Re: Plea for help
  4329. Message-ID: <548@quad1.UUCP>
  4330. Date: 25 Jul 86 17:02:15 GMT
  4331. To:       info-cpm@AMSAA.ARPA
  4332.  
  4333. > Does anyone out there have ANY ideas?  Also, where can I pick up
  4334. > a terminal program for my SuperBrain (and thus transfer via the
  4335. > serial port)?  And finally, does anyone out there have the
  4336. > pinouts for the SuperBrain?
  4337. Main Port
  4338. Pin #            Assignment                Direction
  4339. =====            ==========                =========
  4340. 1            GND                    -
  4341. 2            Transmitted Data            Fm SB
  4342. 3            Rec'd Data                To SB
  4343. 4            RTS                    Fm SB
  4344. 5            CTS                    To SB
  4345. 6            DSR                    To SB
  4346. 7            GND                    -
  4347. 15            Transmit Clock                To SB
  4348. 17            Rcv Clock                To SB
  4349. 20            DTR                    Fm SB
  4350. 22            Ring Indicator                To SB
  4351. 24            Clock                    Fm SB
  4352.  
  4353. AUX PORT
  4354. ========
  4355. 1            GND                    -
  4356. 2            Rcv'd Data (NOTE)            To SB
  4357. 3            Transmitted Data            Fm SB
  4358. 7            GND                    -
  4359. 20            DTR                    To SB
  4360.  
  4361.  
  4362. Jeff Sonstein                    Quadratron Systems Inc.
  4363.  
  4364. UUCP: {sdcrdcf|ttdica|scgvaxd|mc0|bellcore|logico|ihnp4}!psivax!quad1!jeffs
  4365.  
  4366. --------------------
  4367.     
  4368.     "There is a hopeful symbolism in the fact that
  4369.     flags do not wave in a vacuum..."
  4370.  
  4371.         -- Arthur C. Clarke --
  4372.  
  4373. -- 
  4374. 28-Jul-86 10:58:28-MDT,4177;000000000000
  4375. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4376. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 10:57:41-MDT
  4377. Received: from ll.arpa by AMSAA.ARPA id a010973; 28 Jul 86 12:06 EDT
  4378. Date: Mon 28 Jul 1986 12:06:38 EDT
  4379. From: SAGE@LL.ARPA
  4380. MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
  4381. Subject: CP/M Text Editors
  4382. To: INFO-CPM@AMSAA.ARPA
  4383. Message-ID: <SAGE.20943595@LL.ARPA>
  4384.  
  4385.   Urs Zurbuchen asked for information about a public-domain text editor for 
  4386. P/M with a rather impressive list of requirements.  The only public-domain 
  4387. ditors I know of are rather simple beasts, and the only programs that come 
  4388. lose to Zurbuchen's list of requirements are two commercial programs, PMATE 
  4389. nd VEDIT.  I am familiar with PMATE, the original editor of this type.  
  4390. EDIT is quite similar.  Here is how it matches up to those requirements:
  4391.  
  4392.  small and fast: PMATE is a little over 20K long (exact size depends on 
  4393.   user configuration choices, principally the size of the permanent macro 
  4394.   area.  PMATE is particularly fast, since it gives proper priority to 
  4395.   keyboard input over its own screen output.
  4396.  
  4397.  support for memory-mapped video: PMATE does this very nicely (that is how 
  4398.   I use it).
  4399.  
  4400.  multiple file editing: PMATE has a total of 11 editing buffers, all of 
  4401.   which can contain text from files or macro commands.  Commands allow text 
  4402.   to be transfered in various ways between the buffers.
  4403.  
  4404.  arbitrary file size: The main text buffer in PMATE supports disk buffering 
  4405.   of files and thus can handle files of arbitrary length (limited by disk 
  4406.   space).  Source, destination, and temporary files can each be on a 
  4407.   separate drive so that the longest file that can be edited is limited to 
  4408.   the full capacity of a drive.
  4409.  
  4410.  key-to-command binding: Here PMATE really shines.  First, PMATE not only 
  4411.   binds individual keys but recognizes sequences of keys and assigns them to 
  4412.   commands.  Secondly, the commands to which key sequences are bound include 
  4413.   not only the built-in functions that PMATE comes with but also user-
  4414.   written functions, written using the interpreted macro command language 
  4415.   (TECO-like).  These user-written macros are stored in what is called the 
  4416.   permanent macro area (PMA).  After the PMA has been updated, PMATE's clone 
  4417.   function is used to save a new version of the editor.
  4418.  
  4419.  macros: PMATE has an unbelievably complete macro capability.  There are 
  4420.   user variables and system variables that tell one almost everything about 
  4421.   the environment (current line and column, current buffer number, the value 
  4422.   of the character under the cursor, the next tab stop, the amount of memory 
  4423.   left, the absolute memory address of the cursor, and many, many more).  
  4424.   Fully structured iteration is supported (if-then-else, do-until, do-while, 
  4425.   repeat).  I cannot begin to describe all the features here.  Suffice it to 
  4426.   say that the hooks are present to do just about anything one can imagine.  
  4427.   Without access to any source code, I made a version of PMATE that is 
  4428.   ZCPR3-compatible (supports file access using the DU: -- drive/user -- 
  4429.   format).
  4430.  
  4431.  auto-indent: PMATE supports automatic indentation for writing in languages 
  4432.   such as C and Pascal.  The macro languages give full support and control 
  4433.   to auto-indentation.
  4434.  
  4435.  overlays: PMATE is complete in one COM file.
  4436.  
  4437.  clean screen: PMATE shows only the information you really need to know -- 
  4438.   the names of open files, the current editing buffer, the value of a 
  4439.   numerical argument returned by a macro, and the cursor position (line and 
  4440.   column).
  4441.  
  4442. f anyone wants more information about PMATE, I would welcome their 
  4443. nquiries, since I am probably the most active supporter around of the 8-bit 
  4444. ersion of PMATE (there are 16-bit versions, too).  A special section (with 
  4445. estricted access) of my remote access system, the Newton Z-Node 
  4446. 617-965-7259, pw=DDT), is devoted to PMATE support.  It includes a bulletin 
  4447. oard with suggestions and tips on exploiting PMATE's capabilities and an 
  4448. xtensive collection of macros.
  4449.  
  4450.                                        Jay Sage (SAGE @ LL)
  4451.  
  4452.  
  4453. 28-Jul-86 12:15:53-MDT,1217;000000000000
  4454. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4455. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 12:15:24-MDT
  4456. Received: from nprdc.arpa by AMSAA.ARPA id a013026; 28 Jul 86 13:15 EDT
  4457. Received: from hull.nprdc.arpa (hull.ARPA) by nprdc.arpa (4.12/ 1.1)
  4458.     id AA06788; Mon, 28 Jul 86 10:15:55 pdt
  4459. Return-Path: <lim@hull>
  4460. Received: by hull.nprdc.arpa (2.2/SMI-2.0)
  4461.     id AA09151; Mon, 28 Jul 86 10:12:15 pdt
  4462. From: Bill Lim <@nprdc.arpa:lim@hull>
  4463. Message-Id: <8607281712.AA09151@hull.nprdc.arpa>
  4464. Date: 28 July 1986 1010-PDT (Monday)
  4465. To: INFO-CPM@AMSAA.ARPA
  4466. Subject: RE: P/D CP/M Text Editors
  4467.  
  4468.     Urs Zurbuchen,
  4469.  
  4470.     Several months ago, Bruce E. Wampler of the University of New
  4471.     Mexico submitted a public domain full-screen editor to
  4472.     mod.sources called 'tvx.' TVX is written in C, and is
  4473.     availiable for UNIX, MS-DOS, and CP/M.  I have not used it on a
  4474.     CP/M machine, but have got it running on an IBM/XT with little
  4475.     trouble. It is a very complete package, with source and user
  4476.     manuals. The documentation claims vi and emacs emulation is also
  4477.     possible.
  4478.  
  4479.  
  4480.         Bill
  4481.  
  4482. ARPA:        lim@nprdc.arpa
  4483.  
  4484. UUCP:        ihnp4   \
  4485.         akgua    \
  4486.         decvax    >---- !sdcsvax!sdics!nprdc!lim
  4487.         dcdwest  /
  4488.         ucbvax  /
  4489. 28-Jul-86 13:09:29-MDT,1182;000000000000
  4490. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4491. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 13:09:13-MDT
  4492. Received: from decwrl.arpa by AMSAA.ARPA id a014394; 28 Jul 86 14:01 EDT
  4493. Received: from DEC-RHEA.ARPA (dec-rhea) by decwrl.DEC.COM (4.22.05/4.7.34)
  4494.     id AA28390; Mon, 28 Jul 86 10:59:23 pdt
  4495. Message-Id: <8607281759.AA28390@decwrl.DEC.COM>
  4496. Date: 28-Jul-1986 1333
  4497. From: "Sink me! 'Twas lovely, havin' this little chat!" <binder%asd.DEC@dec.ARPA>
  4498. To: info-cpm@AMSAA.ARPA, net.micro.cpm%asd.DEC@dec.ARPA
  4499. Subject: For sale, please respond directly to me
  4500.  
  4501. For sale, some stuff I bought in a lot and can't use on my Apple:
  4502.  
  4503. For a Xerox 820 with 8" disks:
  4504.  
  4505. 1.  WordStar 3.0, with docs and training guide.
  4506. 2.  CalcStar 1.0, with docs.
  4507. 3.  CP/M 2.2, with docs.
  4508. 4.  820 Diagnostic Exerciser disk, no docs.
  4509. 5.  820 printer interface disk 1.0 (appears to be for daisywheel).
  4510. 6.  820 hands-on training session manual.
  4511.  
  4512. All for $75.00 or, failing that, best offer tha passes my reason-
  4513. ableness test.
  4514.  
  4515. Cheers,
  4516. Dick Binder   (The Stainless Steel Rat)
  4517.  
  4518. UUCP:  { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
  4519. ARPA:  binder%asd.DEC@decwrl.ARPA
  4520.  
  4521. 28-Jul-86 21:29:49-MDT,1099;000000000000
  4522. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4523. Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 21:29:41-MDT
  4524. Received: from brl-smoke.arpa by AMSAA.ARPA id a000312; 28 Jul 86 21:56 EDT
  4525. Received: from USENET by SMOKE.BRL.ARPA id a012549; 28 Jul 86 21:44 EDT
  4526. From: binder@asd.dec.com
  4527. Newsgroups: net.micro.cpm
  4528. Subject: For sale, please respond directly to me
  4529. Message-ID: <4449@decwrl.DEC.COM>
  4530. Date: 28 Jul 86 17:59:41 GMT
  4531. Sender: daemon@dec.ARPA
  4532. To:       info-cpm@AMSAA.ARPA
  4533.  
  4534. For sale, some stuff I bought in a lot and can't use on my Apple:
  4535.  
  4536. For a Xerox 820 with 8" disks:
  4537.  
  4538. 1.  WordStar 3.0, with docs and training guide.
  4539. 2.  CalcStar 1.0, with docs.
  4540. 3.  CP/M 2.2, with docs.
  4541. 4.  820 Diagnostic Exerciser disk, no docs.
  4542. 5.  820 printer interface disk 1.0 (appears to be for daisywheel).
  4543. 6.  820 hands-on training session manual.
  4544.  
  4545. All for $75.00 or, failing that, best offer tha passes my reason-
  4546. ableness test.
  4547.  
  4548. Cheers,
  4549. Dick Binder   (The Stainless Steel Rat)
  4550.  
  4551. UUCP:  { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
  4552. ARPA:  binder%asd.DEC@decwrl.ARPA
  4553. 29-Jul-86 06:39:20-MDT,762;000000000000
  4554. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4555. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 06:39:13-MDT
  4556. Received: from crdc-vax3.arpa by AMSAA.ARPA id a002893; 29 Jul 86 8:02 EDT
  4557. Date:     Tue, 29 Jul 86 7:53:33 EDT
  4558. From:     "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
  4559. To:       binder%asd.DEC@DECWRL.ARPA
  4560. cc:       Info-cpm@AMSAA.ARPA
  4561. Subject:  For sale
  4562.  
  4563.     
  4564.     Dear Mr. 'Stainless Steel Rat',
  4565.  
  4566.         While your prices seem much more than reasonable,
  4567.     the mailing list is not your private want-ads section in
  4568.     your daily newspaper. This subject has been discussed,
  4569.     and re-discussed, and the concensus is that any for-sale
  4570.     items (messages) are not to be placed on the list.
  4571.  
  4572.                 Sorry to rain on your parade,
  4573.             
  4574.                 Jack H. Smith
  4575.  
  4576.  
  4577. 29-Jul-86 09:40:01-MDT,4235;000000000000
  4578. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4579. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 09:39:46-MDT
  4580. Received: from ll.arpa by AMSAA.ARPA id a006882; 29 Jul 86 9:49 EDT
  4581. Date: Tue 29 Jul 1986 09:48:59 EDT
  4582. From: SAGE@LL.ARPA
  4583. MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
  4584. Subject: Text Editors
  4585. To: INFO-CPM@AMSAA.ARPA
  4586. Message-ID: <SAGE.21035277@LL.ARPA>
  4587.  
  4588.    Urs Zurbuchen asked for information about a public-domain text editor for 
  4589. CP/M with a rather impressive list of requirements.  The only public-domain 
  4590. editors I know of are rather simple beasts, and the only programs that come 
  4591. close to Zurbuchen's list of requirements are two commercial programs, PMATE 
  4592. and VEDIT.  I am familiar with PMATE, the original editor of this type.  
  4593. VEDIT is quite similar.  Here is how it matches up to those requirements:
  4594.  
  4595. 1. small and fast: PMATE is a little over 20K long (exact size depends on 
  4596.    user configuration choices, principally the size of the permanent macro 
  4597.    area.  PMATE is particularly fast, since it gives proper priority to 
  4598.    keyboard input over its own screen output.
  4599.  
  4600. 2. support for memory-mapped video: PMATE does this very nicely (that is how 
  4601.    I use it).
  4602.  
  4603. 3. multiple file editing: PMATE has a total of 11 editing buffers, all of 
  4604.    which can contain text from files or macro commands.  Commands allow text 
  4605.    to be transfered in various ways between the buffers.
  4606.  
  4607. 4. arbitrary file size: The main text buffer in PMATE supports disk buffering 
  4608.    of files and thus can handle files of arbitrary length (limited by disk 
  4609.    space).  Source, destination, and temporary files can each be on a 
  4610.    separate drive so that the longest file that can be edited is limited to 
  4611.    the full capacity of a drive.
  4612.  
  4613. 5. key-to-command binding: Here PMATE really shines.  First, PMATE not only 
  4614.    binds individual keys but recognizes sequences of keys and assigns them to 
  4615.    commands.  Secondly, the commands to which key sequences are bound include 
  4616.    not only the built-in functions that PMATE comes with but also user-
  4617.    written functions, written using the interpreted macro command language 
  4618.    (TECO-like).  These user-written macros are stored in what is called the 
  4619.    permanent macro area (PMA).  After the PMA has been updated, PMATE's clone 
  4620.    function is used to save a new version of the editor.
  4621.  
  4622. 6. macros: PMATE has an unbelievably complete macro capability.  There are 
  4623.    user variables and system variables that tell one almost everything about 
  4624.    the environment (current line and column, current buffer number, the value 
  4625.    of the character under the cursor, the next tab stop, the amount of memory 
  4626.    left, the absolute memory address of the cursor, and many, many more).  
  4627.    Fully structured iteration is supported (if-then-else, do-until, do-while, 
  4628.    repeat).  I cannot begin to describe all the features here.  Suffice it to 
  4629.    say that the hooks are present to do just about anything one can imagine.  
  4630.    Without access to any source code, I made a version of PMATE that is 
  4631.    ZCPR3-compatible (supports file access using the DU: -- drive/user -- 
  4632.    format).
  4633.  
  4634. 7. auto-indent: PMATE supports automatic indentation for writing in languages 
  4635.    such as C and Pascal.  The macro languages give full support and control 
  4636.    to auto-indentation.
  4637.  
  4638. 8. overlays: PMATE is complete in one COM file.
  4639.  
  4640. 9. clean screen: PMATE shows only the information you really need to know -- 
  4641.    the names of open files, the current editing buffer, the value of a 
  4642.    numerical argument returned by a macro, and the cursor position (line and 
  4643.    column).
  4644.  
  4645. If anyone wants more information about PMATE, I would welcome their 
  4646. inquiries, since I am probably the most active supporter around of the 8-bit 
  4647. version of PMATE (there are 16-bit versions, too).  A special section (with 
  4648. restricted access) of my remote access system, the Newton Z-Node 
  4649. (617-965-7259, pw=DDT), is devoted to PMATE support.  It includes a bulletin 
  4650. board with suggestions and tips on exploiting PMATE's capabilities and an 
  4651. extensive collection of macros.
  4652.  
  4653.                                         Jay Sage (SAGE @ LL)
  4654.  
  4655.  
  4656. 29-Jul-86 11:32:52-MDT,1624;000000000000
  4657. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4658. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 11:32:29-MDT
  4659. Received: from cmu-cs-maps.arpa by AMSAA.ARPA id a011353; 23 Jul 86 17:27 EDT
  4660. Date: Wednesday, 23 July 1986 16:23:19 EDT
  4661. From: Stephen.Jenks@cmu-cs-maps.ARPA
  4662. To: info-cpm-request@AMSAA.ARPA
  4663. Subject: Emacs-like editor wanted
  4664. Message-ID: <1986.7.23.20.11.48.Stephen.Jenks@maps.cs.cmu.edu>
  4665. Distribution: net
  4666. Organization: Carnegie Mellon Computer Science
  4667. Resent-Date:  Tue, 29 Jul 86 12:46:14 EDT
  4668. Resent-From:  cpmlist@AMSAA.ARPA
  4669. Resent-To:    info-cpm@cmu-cs-maps.ARPA
  4670.  
  4671. (I sure hope this gets out to the net!)
  4672.  
  4673. I keep seeing all these announcements of MicroEmacs for all sorts of
  4674. operating systems, and am getting pretty jealous of MS-DOS people, since I run
  4675. CP/M.  Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?
  4676.  
  4677. I need a good editor.  I've used The Final Word, but it just isn't as good
  4678. as Emacs, and it limits the size of files to less than the size of its swap
  4679. file.  No good!  So I must use WordStar for editting long programs -- no
  4680. good either.  Are there any good editors out there that let you edit big
  4681. files?
  4682.  
  4683.                         Thanks a lot,
  4684.                         Steve Jenks
  4685.  
  4686. uucp:    ...!seismo!maps.cs.cmu.edu!sfj
  4687. arpa:    sfj@maps.cs.cmu.edu
  4688. bitnet:    jenks@cmuccvc or sj0k@cmuccvma
  4689.  
  4690. p.s.  Anyone have a UO-Lisp manual.  I bought UO-Lisp a long time ago, and
  4691. never got a manual (pretty useless, huh?) and now the company doesn't
  4692. respond to my letters.  Every company I buy anything from seems to go out of
  4693. business!  Maybe I should buy an IBM PC and they would go under...
  4694. 29-Jul-86 13:16:31-MDT,1325;000000000000
  4695. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4696. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 13:16:03-MDT
  4697. Received: from rand-unix.arpa by AMSAA.ARPA id a000589; 29 Jul 86 14:28 EDT
  4698. Received: by rand-unix.ARPA; Tue, 29 Jul 86 10:06:12 pdt
  4699. Message-Id: <8607291706.AA17570@rand-unix.ARPA>
  4700. To: info-cpm@AMSAA.ARPA
  4701. Cc: bridger@RAND-UNIX.ARPA, SAGE@LL.ARPA
  4702. Subj: zcpr3 path puzzle
  4703. Date: Tue, 29 Jul 86 10:05:54 PDT
  4704. From: bridger@RAND-UNIX.ARPA
  4705.  
  4706. In ZCPR3, v. 3.0 and v. 3.14, the path-search code does
  4707. something I haven't seen explained -- it masks the high bit
  4708. of the user-number byte (and also, if the minpath option is used)
  4709. the drive byte found in the path.
  4710.  
  4711. From the comments with the code I am guessing that the intent was to
  4712. use the hi bit in the path to specify directories (drive/user pairs)
  4713. that "hide" non-system files.  For example, if the path element for
  4714. A3: has bit 7 set, then files in A3: which do not have the
  4715. system-attribute bit set would not be found by (1) the .com file
  4716. loader, and (2) the DIR command.  However, the code doesn't really do
  4717. this, at least if the minpath option is used.
  4718.  
  4719. Does anyone know: is this the intent?  does anyone use a path with hi
  4720. bits set?  Do the z3 tools and syslib routines behave correctly when
  4721. a path contains a hi bit?
  4722.  
  4723. --bridger
  4724.  
  4725.  
  4726. 29-Jul-86 18:24:43-MDT,703;000000000000
  4727. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4728. Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 18:24:37-MDT
  4729. Received: from ucb-vax.arpa by AMSAA.ARPA id a003781; 29 Jul 86 15:42 EDT
  4730. Received: by ucbvax.Berkeley.EDU (5.53/1.14)
  4731.     id AA19055; Tue, 29 Jul 86 12:43:03 PDT
  4732. Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
  4733.     id AA15471; Tue, 29 Jul 86 12:32:10 pdt
  4734. Received: by clover.ucdavis.edu (4.12/4.7)
  4735.     id AA01352; Tue, 29 Jul 86 12:31:58 pdt
  4736. Date: Tue, 29 Jul 86 12:31:58 pdt
  4737. From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
  4738. Message-Id: <8607291931.AA01352@clover.ucdavis.edu>
  4739. To: ucdavis!Info-cpm@AMSAA.ARPA
  4740. Subject: Re For sale
  4741.  
  4742.  
  4743. Where is the appropriate forum?
  4744.  
  4745.             Eric
  4746. 30-Jul-86 02:03:04-MDT,622;000000000000
  4747. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4748. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 02:02:59-MDT
  4749. Received: from mit-mc.arpa by AMSAA.ARPA id a000671; 30 Jul 86 3:31 EDT
  4750. Date: Wed 30 Jul 86 03:30:39-EDT
  4751. From: Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
  4752. Subject: TVX source code?
  4753. To: Info-CPM@AMSAA.ARPA
  4754. Message-ID: <12226740342.69.CENT.MBECK@OZ.AI.MIT.EDU>
  4755.  
  4756. [I just found out the line eater still lives!]
  4757.  
  4758. I've seen mention of the TVX editor and am interested in obtaining a
  4759. copy of the source code.  Anyone have a copy I can FTP or otherwise
  4760. get ahold of?
  4761.  
  4762. Mark Becker
  4763. -------
  4764. 30-Jul-86 10:19:21-MDT,1121;000000000000
  4765. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4766. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 10:19:13-MDT
  4767. Received: from nadc.arpa by AMSAA.ARPA id a004422; 30 Jul 86 11:36 EDT
  4768. Date: 30 Jul 1986 08:20:38-EDT
  4769. From: prindle@nadc.ARPA
  4770. To: Cent.Mbeck@oz.ai.mit.edu, mit-xx@nadc.ARPA, info-cpm@AMSAA.ARPA
  4771. MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
  4772. Subject: whereabouts of TVX editor source code
  4773.  
  4774. Dr. Bruce Wampler's TVX editor is alive and well on SIMTEL20 in the directory
  4775. PD:<MSDOS.TVX-EDITOR>.  Flip a few #defines, and it will (or used to) compile
  4776. for CP/M.  Problem is, if this is the latest and greatest version with "vi"
  4777. and "emacs" modes, it probably won't fit into a typical CP/M TPA.  I compiled
  4778. an older version (with "native TVX" command mode only) for CP/M 3.0 with a 
  4779. 58K TPA and wound up with about a 15K working buffer; much less than that and
  4780. you'd end up buffering to disk all the time.  I have the source code to this
  4781. older version, if indeed someone does try to compile the newer one for CP/M and
  4782. it is too big.  
  4783. Sincerely,
  4784. Frank Prindle
  4785. Prindle@NADC.arpa
  4786. 30-Jul-86 12:20:37-MDT,727;000000000000
  4787. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4788. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 12:20:28-MDT
  4789. Received: from wiscvm.arpa by AMSAA.ARPA id a007724; 30 Jul 86 13:14 EDT
  4790. Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/30/86 at
  4791.   08:25:40 CDT
  4792. Date: Wed, 30 Jul 86 15:10:50 DNT
  4793. To:  info-cpm@AMSAA.ARPA
  4794. From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
  4795. Subject: Re: The TVX editor's source ...
  4796.  
  4797.             Hello out there in the cp/m world.
  4798.  
  4799. If anyone get the source to the TVX editor, can I then get a copy too ?
  4800. Or even better: Mail it to the list. Please don't include uuencoded
  4801. non-binary files, since they are unuseable for EARN/BITNET users.
  4802.  
  4803.                Klaus Emlquist Nielsen.
  4804. 30-Jul-86 23:54:50-MDT,1094;000000000000
  4805. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4806. Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 23:54:01-MDT
  4807. Received: from ucb-vax.arpa by AMSAA.ARPA id a017647; 31 Jul 86 1:24 EDT
  4808. Received: by ucbvax.Berkeley.EDU (5.53/1.14)
  4809.     id AA12591; Wed, 30 Jul 86 14:47:24 PDT
  4810. Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
  4811.     id AA09671; Wed, 30 Jul 86 14:15:16 pdt
  4812. Received: by clover.ucdavis.edu (4.12/4.7)
  4813.     id AA11813; Wed, 30 Jul 86 14:14:16 pdt
  4814. Date: Wed, 30 Jul 86 14:14:16 pdt
  4815. From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
  4816. Message-Id: <8607302114.AA11813@clover.ucdavis.edu>
  4817. To: ucdavis!info-cpm@AMSAA.ARPA
  4818. Subject: Arpa net restrictions
  4819.  
  4820. I would like to thank those people who took the time to point out the 
  4821. restrictions on the use of Arpa net regarding the for sale message that
  4822. appeared several days ago.  However, it does appear that I do need to 
  4823. make one thing clear - it was not me who put in the advertisement - I 
  4824. only asked if there was an appropriate forum.  As there is not through
  4825. this channel, that answers that.
  4826.  
  4827.             Eric "All I did was ask!" 
  4828. 31-Jul-86 10:25:35-MDT,1226;000000000000
  4829. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4830. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 10:25:07-MDT
  4831. Received: from brl-smoke.arpa by AMSAA.ARPA id a001863; 31 Jul 86 11:50 EDT
  4832. Received: from USENET by SMOKE.BRL.ARPA id a029220; 31 Jul 86 11:43 EDT
  4833. From: Thomas Almy <toma%tekgvs.uucp@BRL.ARPA>
  4834. Newsgroups: net.micro.cpm
  4835. Subject: Re: Emacs-like editor wanted
  4836. Message-ID: <1654@tekgvs.UUCP>
  4837. Date: 30 Jul 86 14:15:26 GMT
  4838. To:       info-cpm@AMSAA.ARPA
  4839.  
  4840. In article <2643@brl-smoke.ARPA> Stephen.Jenks@cmu-cs-maps.ARPA writes:
  4841. >I keep seeing all these announcements of MicroEmacs for all sorts of
  4842. >operating systems, and am getting pretty jealous of MS-DOS people, since I run
  4843. >CP/M.  Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?
  4844. >
  4845. >I need a good editor.  I've used The Final Word, but it just isn't as good
  4846. >as Emacs, and it limits the size of files to less than the size of its swap
  4847. >file.  No good! ... 
  4848.  
  4849. Unfortunately, MicroEmacs keeps the file memory resident (allowing about 29k
  4850. of buffers with 8086 "small memory model", figure about 20k with CP/M-80).
  4851. I use Mince (like Final Word) and devote a ram disk to the swap file.  Works
  4852. great.
  4853.  
  4854. Tom Almy
  4855. Tektronix
  4856. 31-Jul-86 18:08:10-MDT,39743;000000000000
  4857. Return-Path: <info-cpm-request@AMSAA.ARPA>
  4858. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 18:06:20-MDT
  4859. Received: from brl-smoke.arpa by AMSAA.ARPA id a000382; 31 Jul 86 17:44 EDT
  4860. Received: from USENET by SMOKE.BRL.ARPA id a004313; 31 Jul 86 17:41 EDT
  4861. From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
  4862. Newsgroups: net.micro.cpm
  4863. Subject: MAKE for CPM 3.0 part 1 of 2
  4864. Message-ID: <513@copper.UUCP>
  4865. Date: 31 Jul 86 07:23:23 GMT
  4866. Keywords: cpm, make
  4867. To:       info-cpm@AMSAA.ARPA
  4868.  
  4869. <-------------->
  4870. This is a make (clone) program for cp/m 3.0. It is a better version
  4871. than the one I posted earlier.  This make program was recently posted
  4872. on USENET for "EON" (??).  I have "ported" this program to CP/M,
  4873. and it seems to work well.  This one has macros and rules (which
  4874. the earlier one I posted did not).
  4875.  
  4876. Below is the source and man files. Part two (posted separately) contains
  4877. the uuencoded version of the make.com (z80) binary.  This binary
  4878. was generated via compilation with Manx Aztec C II version 1.05g.
  4879. I have "enhanced" my compiler library continuously over the last several
  4880. years, and don't always remember what was originally there and what it
  4881. is that which I added myself.  I hope porting my port doesn't cause too many
  4882. problems for those that may want to recompile the source.
  4883.  
  4884. Enjoy...
  4885.  
  4886. Mike Kersenbrock
  4887. ...!tektronix!copper!michaelk
  4888.  
  4889.  
  4890. #    This is a shell archive.
  4891. #    Remove everything above and including the cut line.
  4892. #    Then run the rest of the file through sh.
  4893. #----cut here-----cut here-----cut here-----cut here----#
  4894. #!/bin/sh
  4895. # shar:    Shell Archiver
  4896. #    Run the following text with /bin/sh to create:
  4897. #    MAKE.DOC
  4898. #    MAKEFILE
  4899. #    MAKE.C
  4900. #    CHECK.C
  4901. #    INPUT.C
  4902. #    MACRO.C
  4903. #    MAIN.C
  4904. #    READER.C
  4905. #    RULES.C
  4906. #    H.H
  4907. # This archive created: Wed Jul 30 23:44:42 1986
  4908. # By:    Michael D. Kersenbrock (Oregon HomePower Software)
  4909. echo shar: extracting make.doc
  4910. cat << \SHAR_EOF > make.doc
  4911.  
  4912.  
  4913.   MAKE(CPM+)                               MAKE(CPM+)
  4914.  
  4915.     
  4916.     SYNTAX
  4917.  
  4918.         make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]
  4919.  
  4920.     WHERE
  4921.  
  4922.         -i means don't continue if an error is encountered
  4923.  
  4924.         -f specifies that the following argument is the name of
  4925.            a makefile to be used instead of default "MAKEFILE.DAT"
  4926.            or "MAKEFILE".
  4927.  
  4928.         -n means don't execute the commands, just write the ones that
  4929.            would be executed to the standard output. 
  4930.  
  4931.         -p Print all macros & targets
  4932.  
  4933.         -r Do not use inbuilt rules
  4934.  
  4935.         -s Make silently
  4936.  
  4937.         -t Touch files instead of making them
  4938.  
  4939.     "macro" -  is a macro name, and...
  4940.  
  4941.       "val" -  is the string value to set it to.  Use quotes around
  4942.                the "macro=val" if there are imbedded spaces.
  4943.  
  4944.  
  4945.     DESCRIPTION
  4946.  
  4947.         This program is a slightly simplified clone of the UNIX
  4948.         (tm of AT&T) utility of the same name.  Dependancy
  4949.         information is extracted from a makefile and acted upon.
  4950.  
  4951.         This version requires CP/M-80 version 3.0 ("CP/M PLUS")
  4952.         with time-of-day-clock implemented.  Also the file timestamps
  4953.         must be "turned on". Current time-of-day call to CP/M is
  4954.             also used.  Note that "CP/M" is a trademark of Digital
  4955.          Research.
  4956.  
  4957.  
  4958.  
  4959.     MAKEFILE FORMAT
  4960.  
  4961.         For general usage, refer to a UNIX(tm) man-page.
  4962.  
  4963.             "Make" without parameters makes the first target in the
  4964.         makefile.
  4965.  
  4966.         The default name of the 'makefile' is 'MAKEFILE.DAT'
  4967.         or 'MAKEFILE' in that order.  If the '-f' option is used,
  4968.         the default makefile is not processed.
  4969.     
  4970.         Any blank lines in the 'makefile(s)' are ignored, as are
  4971.         lines that have a "#" in the first column.
  4972.  
  4973.  
  4974.  
  4975.  
  4976.   MAKE(CPM+)            -2-               MAKE(CPM+)
  4977.  
  4978.     
  4979.     
  4980.          Lines starting with a tab character are 'howto'
  4981.         lines, and consist of a command name followed by arguments.
  4982.  
  4983.         Any other line is a 'dependency' line.  'Dependency'
  4984.         lines consist of a filename followed by a (possibly empty)
  4985.         list of dependent filenames.  A colon is required after
  4986.         the target filename.
  4987.     
  4988.          'Howto' lines apply to the most    recently preceding 
  4989.         'dependency' line.  It is improper for     a 'howto' line
  4990.          to precede the first 'dependency' line.
  4991.  
  4992.         Lines ending with "\" join the next-line to the current
  4993.         one with all but one-character of the next-line's leading
  4994.         whitespace removed.
  4995.  
  4996.  
  4997.     SIDE EFFECTS
  4998.  
  4999.         This program works by producing a temporary file "MAKE@@@.SUB"
  5000.         then chaining to it for execution of the command list.  This
  5001.         file then deletes itself upon successful completion.  Should
  5002.         the execution be aborted, then this file will remain
  5003.         in the file system (but will not harm later invocations of
  5004.         make).
  5005.  
  5006.         Everything has been made case-independent (CP/M forces command
  5007.         lines upper case.  That makes this case-independence a
  5008.         requirement.)
  5009.  
  5010.         BUGS
  5011.         The -i option is opposite of "normal" so that error codes
  5012.         are normally ignored.  If the -i option is used, colons
  5013.         will proceed commands that aren't to execute after an
  5014.         error.  This sortof almost works in CP/M Plus.  To be
  5015.         made to work three things need to be done. 1) an RSX
  5016.         written that makes a compiler(etc) set the error flag (should
  5017.         be easy to do). 2) Keep CP/M 3.0 and/or the CCP from resetting
  5018.         the error flag on each command that is executed (patch
  5019.         somewhere?), and 3) Let the ":" exclusion work in front
  5020.         of .SUB files as well as .COM files (patch somewhere?).
  5021.         Discription of the ":" is in the CP/M Plus Programmer's
  5022.         Guide in the description of bdos function 108.
  5023.  
  5024.  
  5025.  
  5026.  
  5027.  
  5028.   MAKE(CPM+)            -3-                MAKE(CPM+)
  5029.  
  5030.     
  5031.     
  5032.     RULES
  5033.         The built in rules currently are these:
  5034.         
  5035.         ".o" files depend on ".c" files and are made by:
  5036.             $(CCC) $(CFLAGS) $(CWHICH)
  5037.             
  5038.             where:
  5039.                 CCC    = cc-c   (mdk's submit file)
  5040.                 CFLAGS =     (they are in cc-c.sub)
  5041.                 CWHICH = $*     (target's basename)
  5042.  
  5043.  
  5044.         ".rel" files depend on ".asm" files and are made by:
  5045.             $(ASM) $(ASMWHICH) $(ASMFLAGS)
  5046.  
  5047.             where:
  5048.                 ASM      = rmac
  5049.                 ASMWHICH = $*
  5050.                 ASMFLAGS = $$PZ SZ
  5051.  
  5052.         Note: These macros can be redefined in the makefile.
  5053.  
  5054.  
  5055.  
  5056.     AUTHOR
  5057.  
  5058.         Originally written for "EON" (whatever that is).
  5059.         This program was originally posted by, and presumably
  5060.         written by:
  5061.  
  5062.            Neil Russell
  5063.            Organization: TIME. Office Computers, Sydney, Australia
  5064.            UUCP:  ...!seismo!munnari!tictoc.oz!caret
  5065.         
  5066.         The port to CP/M 3.0 consists of numerous small and medium
  5067.         modifications seemingly everywhere. That plus the generation
  5068.         of this psuedo-man page was done by:
  5069.  
  5070.            Michael D. Kersenbrock
  5071.            Aloha, Oregon
  5072.            UUCP: ...!tektronix!copper!michaelk
  5073.  
  5074.  
  5075. SHAR_EOF
  5076. if test 4453 -ne "`wc -c make.doc`"
  5077. then
  5078. echo shar: error transmitting make.doc '(should have been 4453 characters)'
  5079. fi
  5080. echo shar: extracting makefile
  5081. cat << \SHAR_EOF > makefile
  5082. #
  5083. # This is for "make.com" itself (under CP/M-80 V3.0)
  5084. #
  5085.  
  5086. OBJS    =    make.o check.o input.o macro.o main.o reader.o rules.o
  5087.  
  5088. make.com:    $(OBJS)
  5089.         linkc $(OBJS)
  5090.  
  5091. $(OBJS):    h.h
  5092. SHAR_EOF
  5093. if test 169 -ne "`wc -c makefile`"
  5094. then
  5095. echo shar: error transmitting makefile '(should have been 169 characters)'
  5096. fi
  5097. echo shar: extracting make.c
  5098. cat << \SHAR_EOF > make.c
  5099. /*
  5100.  *    Do the actual making for make
  5101.  */
  5102.  
  5103. #include "c:stdio.h"        /* "c:" is my ramdisk */
  5104. #include "c:fcntl.h"
  5105. #include "h.h"
  5106.  
  5107. FILE *execfile;        /* Submit file to execute the "shell-exec's" */
  5108.  
  5109. extern long ftime();
  5110.  
  5111. /*
  5112.  *    Exec a shell that returns exit status correctly (/bin/esh).
  5113.  *    The standard EON shell returns the process number of the last
  5114.  *    async command, used by the debugger (ugg).
  5115.  *    [exec on eon is like a fork+exec on unix]
  5116.  */
  5117. int
  5118. dosh(command, args)
  5119. char *command;
  5120. char *args;
  5121. {
  5122.     if (!execfile) {
  5123.         execfile = fopen(MAKERUN, "w");
  5124.         if (!execfile) {
  5125.             errout("Make: can't create ");
  5126.             errout(MAKERUN);
  5127.             errout("\r\n");
  5128.             exit(-1);
  5129.         }
  5130.     }
  5131.  
  5132.     fprintf(execfile, "%s %s", command, args);
  5133.     return 0;
  5134. }
  5135.  
  5136.  
  5137. /*
  5138.  *    Do commands to make a target
  5139.  */
  5140. void
  5141. docmds(np)
  5142. struct name *        np;
  5143. {
  5144.     bool            ssilent;
  5145.     bool            signore;
  5146.     int            estat;
  5147.     register char *        q;
  5148.     register char *        p;
  5149.     char *            shell;
  5150.     register struct line *    lp;
  5151.     register struct cmd *    cp;
  5152.     ssilent = silent;
  5153.  
  5154.     /*
  5155.      * Under cp/m the "ignore or not to ignore" is sorta done in dosh()
  5156.      * where colons are inserted or not into the cp/m submit file.
  5157.      * The actual ignoring (or not) is done when cpm 3.0's submit
  5158.      * program executes the submit file.
  5159.      *
  5160.      *                    -mdk
  5161.      */
  5162.  
  5163.     signore = ignore;
  5164.  
  5165.     if (*(shell = getmacro("SHELL")) == '\0')
  5166.         shell = ":bin/esh";
  5167.  
  5168.     for (lp = np->n_line; lp; lp = lp->l_next)
  5169.         for (cp = lp->l_cmd; cp; cp = cp->c_next)
  5170.         {
  5171.             strcpy(str1, cp->c_cmd);
  5172.             expand(str1);
  5173.             q = str1;
  5174.             while ((*q == '@') || (*q == '-'))
  5175.             {
  5176.                 if (*q == '@')       /*  Specific silent  */
  5177.                     ssilent = TRUE;
  5178.                 else           /*  Specific ignore  */
  5179.                     signore = TRUE;
  5180.                 q++;           /*  Not part of the command  */
  5181.             }
  5182.  
  5183.             if (!ssilent)
  5184.                 fputs("   ", stdout);
  5185.  
  5186.             if ((!ssilent) && (!signore)) {    /* cp/m stuff */
  5187.                 putchar(':');
  5188.                 putchar(' ');
  5189.             }
  5190.             for (p=q; *p; p++)
  5191.             {
  5192.                 if (*p == '\n' && p[1] != '\0')
  5193.                 {
  5194.                     *p = ' ';
  5195.                     if (!ssilent)
  5196.                         fputs("\\\n", stdout);
  5197.                 }
  5198.                 else if (!ssilent)
  5199.                     putchar(*p);
  5200.             }
  5201.             if (!ssilent)
  5202.                 putchar('\n');
  5203.  
  5204.             if (domake)
  5205.             {            /*  Get the shell to execute it  */
  5206.                 /*
  5207.                  * Colon in front of line makes execution
  5208.                  * conditional on error code in cp/m 3.0 .
  5209.                  * (Sortof, with one "minor" problem)
  5210.                  */
  5211.  
  5212.                 if (!signore)    
  5213.                     dosh(":","");
  5214.                 
  5215.                 if ((estat = dosh(q,"\n")) != 0)
  5216.                 {
  5217.                     if (estat == -1)
  5218.                         fatal("Couldn't execute %s", shell);
  5219.                     else
  5220.                     {
  5221.                         printf("%s: Error code %d", myname, estat);
  5222.                         if (signore)
  5223.                             fputs(" (Ignored)\n", stdout);
  5224.                         else
  5225.                         {
  5226.                             putchar('\n');
  5227.                             if (!(np->n_flag & N_PREC))
  5228.                                 if (unlink(np->n_name) == 0)
  5229.                                     printf("%s: '%s' removed.\n", myname, np->n_name);
  5230.                             exit(estat);
  5231.                         }
  5232.                     }
  5233.                 }
  5234.             }
  5235.         }
  5236. }
  5237.  
  5238.  
  5239.  
  5240. /*
  5241.  *    Update the mod time of a file to now.
  5242.  */
  5243. void
  5244. touch(np)
  5245. struct name *        np;
  5246. {
  5247.     char            c;
  5248.     int            fd;
  5249.     char fcb[36];            /* set area for CP/M fcb */
  5250.     char tempbuffer[128];        /* CPM record size */
  5251.  
  5252.  
  5253.     if (!domake || !silent)
  5254.         printf("    touch %s\n", np->n_name);
  5255.  
  5256.     if (domake)  {
  5257.         if ((fd=open(np->n_name,O_RDONLY)) < 0 ) {
  5258.             printf("%s: '%s' not touched - non-existant\n",
  5259.                     myname, np->n_name);
  5260.         }
  5261.         else {
  5262.             close(fd);
  5263.             OpenRandomFile(np->n_name,fcb);   /* open file      */
  5264.             ReadRandomFile(tempbuffer,0,fcb); /* read record    */
  5265.             WriteRandomFile(tempbuffer,0,fcb); /* write it back */
  5266.         }
  5267.         CloseRandomFile(fcb);
  5268.     }
  5269. }
  5270.  
  5271.  
  5272. /*
  5273.  *    Recursive routine to make a target.
  5274.  */
  5275. int
  5276. make(np, level)
  5277. struct name *        np;
  5278. int            level;
  5279. {
  5280.     register struct depend *    dp;
  5281.     register struct line *        lp;
  5282.     time_t                dtime = 1l;
  5283.  
  5284.  
  5285.     if (np->n_flag & N_DONE)
  5286.         return 0;
  5287.  
  5288.     if (!np->n_time) {
  5289.         np->n_time = ftime(np->n_name);/*  Gets modtime of this file*/
  5290.     }
  5291.  
  5292.     if (rules) {
  5293.         for (lp = np->n_line; lp; lp = lp->l_next)
  5294.             if (lp->l_cmd)
  5295.                 break;
  5296.         if (!lp)
  5297.             dyndep(np);
  5298.     }
  5299.  
  5300.     if (!(np->n_flag & N_TARG) && np->n_time == 0L)
  5301.         fatal("Don't know how to make %s", np->n_name);
  5302.  
  5303.     for (lp = np->n_line; lp; lp = lp->l_next)
  5304.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  5305.         {
  5306.             make(dp->d_name, level+1);
  5307.             dtime = max(dtime, dp->d_name->n_time);
  5308.         }
  5309.  
  5310.     np->n_flag |= N_DONE;
  5311.  
  5312.     if (quest)
  5313.     {
  5314.         time(&np->n_time);      /* used to be rtime() zzz */
  5315.         return np->n_time < dtime;
  5316.     }
  5317.     else if (np->n_time < dtime)
  5318.     {
  5319.         if (dotouch)
  5320.             touch(np);
  5321.         else
  5322.         {
  5323.             setmacro("@", np->n_name);
  5324.             docmds(np);
  5325.         }
  5326.         time(&np->n_time);     /* used to be rtime() zzz */
  5327.     }
  5328.     else if (level == 0)
  5329.         printf("%s: '%s' is up to date\n", myname, np->n_name);
  5330.     return 0;
  5331. }
  5332. SHAR_EOF
  5333. if test 4491 -ne "`wc -c make.c`"
  5334. then
  5335. echo shar: error transmitting make.c '(should have been 4491 characters)'
  5336. fi
  5337. echo shar: extracting check.c
  5338. cat << \SHAR_EOF > check.c
  5339. /*
  5340.  *    Check structures for make.
  5341.  */
  5342.  
  5343. #include "c:stdio.h"
  5344. #include "h.h"
  5345.  
  5346.  
  5347. /*
  5348.  *    Prints out the structures as defined in memory.  Good for check
  5349.  *    that you make file does what you want (and for debugging make).
  5350.  */
  5351. void
  5352. prt()
  5353. {
  5354.     register struct name *        np;
  5355.     register struct depend *    dp;
  5356.     register struct line *        lp;
  5357.     register struct cmd *        cp;
  5358.     register struct macro *        mp;
  5359.  
  5360.  
  5361.     for (mp = macrohead; mp; mp = mp->m_next)
  5362.         fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
  5363.  
  5364.     fputc('\n', stderr);
  5365.  
  5366.     for (np = namehead.n_next; np; np = np->n_next)
  5367.     {
  5368.         fprintf(stderr, "%s:\n", np->n_name);
  5369.         for (lp = np->n_line; lp; lp = lp->l_next)
  5370.         {
  5371.             fputc(':', stderr);
  5372.             for (dp = lp->l_dep; dp; dp = dp->d_next)
  5373.                 fprintf(stderr, " %s", dp->d_name->n_name);
  5374.             fputc('\n', stderr);
  5375.  
  5376.             for (cp = lp->l_cmd; cp; cp = cp->c_next)
  5377.                 fprintf(stderr, "-\t%s\n", cp->c_cmd);
  5378.             fputc('\n', stderr);
  5379.         }
  5380.         fputc('\n', stderr);
  5381.     }
  5382. }
  5383.  
  5384.  
  5385. /*
  5386.  *    Recursive routine that does the actual checking.
  5387.  */
  5388. void
  5389. check(np)
  5390. struct name *        np;
  5391. {
  5392.     register struct depend *    dp;
  5393.     register struct line *        lp;
  5394.  
  5395.  
  5396.     if (np->n_flag & N_MARK)
  5397.         fatal("Circular dependency from %s", np->n_name);
  5398.  
  5399.     np->n_flag |= N_MARK;
  5400.  
  5401.     for (lp = np->n_line; lp; lp = lp->l_next)
  5402.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  5403.             check(dp->d_name);
  5404.  
  5405.     np->n_flag &= ~N_MARK;
  5406. }
  5407.  
  5408.  
  5409. /*
  5410.  *    Look for circular dependancies.
  5411.  *    ie.
  5412.  *        a: b
  5413.  *        b: a
  5414.  *    is a circular dep
  5415.  */
  5416. void
  5417. circh()
  5418. {
  5419.     register struct name *    np;
  5420.  
  5421.  
  5422.     for (np = namehead.n_next; np; np = np->n_next)
  5423.         check(np);
  5424. }
  5425.  
  5426.  
  5427. /*
  5428.  *    Check the target .PRECIOUS, and mark its dependentd as precious
  5429.  */
  5430. void
  5431. precious()
  5432. {
  5433.     register struct depend *    dp;
  5434.     register struct line *        lp;
  5435.     register struct name *        np;
  5436.  
  5437.  
  5438.     if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
  5439.         return;
  5440.  
  5441.     for (lp = np->n_line; lp; lp = lp->l_next)
  5442.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  5443.             dp->d_name->n_flag |= N_PREC;
  5444. }
  5445. SHAR_EOF
  5446. if test 1895 -ne "`wc -c check.c`"
  5447. then
  5448. echo shar: error transmitting check.c '(should have been 1895 characters)'
  5449. fi
  5450. echo shar: extracting input.c
  5451. cat << \SHAR_EOF > input.c
  5452. /*
  5453.  *    Parse a makefile
  5454.  */
  5455.  
  5456.  
  5457. #include "c:stdio.h"
  5458. #include "h.h"
  5459.  
  5460. extern int endoffile;
  5461.  
  5462. struct name        namehead;
  5463. struct name *        firstname;
  5464.  
  5465. char             str1[LZ];        /*  General store  */
  5466. char            str2[LZ];
  5467.  
  5468.  
  5469. /*
  5470.  *    Intern a name.  Return a pointer to the name struct
  5471.  */
  5472. struct name *
  5473. newname(name)
  5474. char *            name;
  5475. {
  5476.     register struct name *    rp;
  5477.     register struct name *    rrp;
  5478.     register char *        cp;
  5479.  
  5480.  
  5481.     for
  5482.     (
  5483.         rp = namehead.n_next, rrp = &namehead;
  5484.         rp;
  5485.         rp = rp->n_next, rrp = rrp->n_next
  5486.     )
  5487.         if (no_case_cmp(name, rp->n_name) == 0)
  5488.             return rp;
  5489.  
  5490.     if ((rp = (struct name *)malloc(sizeof (struct name)))
  5491.                 == (struct name *)0)
  5492.         fatal("No memory for name");
  5493.     rrp->n_next = rp;
  5494.     rp->n_next = (struct name *)0;
  5495.     if ((cp = malloc(strlen(name)+1)) == (char *)0)
  5496.         fatal("No memory for name");
  5497.     strcpy(cp, name);
  5498.     rp->n_name = cp;
  5499.     rp->n_line = (struct line *)0;
  5500.     rp->n_time = (time_t)0;
  5501.     rp->n_flag = 0;
  5502.  
  5503.     return rp;
  5504. }
  5505.  
  5506.  
  5507. /*
  5508.  *    Add a dependant to the end of the supplied list of dependants.
  5509.  *    Return the new head pointer for that list.
  5510.  */
  5511. struct depend *
  5512. newdep(np, dp)
  5513. struct name *        np;
  5514. struct depend *        dp;
  5515. {
  5516.     register struct depend *    rp;
  5517.     register struct depend *    rrp;
  5518.  
  5519.  
  5520.     if ((rp = (struct depend *)malloc(sizeof (struct depend)))
  5521.                 == (struct depend *)0)
  5522.         fatal("No memory for dependant");
  5523.     rp->d_next = (struct depend *)0;
  5524.     rp->d_name = np;
  5525.  
  5526.     if (dp == (struct depend *)0)
  5527.         return rp;
  5528.  
  5529.     for (rrp = dp; rrp->d_next; rrp = rrp->d_next)
  5530.         ;
  5531.  
  5532.     rrp->d_next = rp;
  5533.  
  5534.     return dp;
  5535. }
  5536.  
  5537.  
  5538. /*
  5539.  *    Add a command to the end of the supplied list of commands.
  5540.  *    Return the new head pointer for that list.
  5541.  */
  5542. struct cmd *
  5543. newcmd(str, cp)
  5544. char *            str;
  5545. struct cmd *        cp;
  5546. {
  5547.     register struct cmd *    rp;
  5548.     register struct cmd *    rrp;
  5549.     register char *        rcp;
  5550.  
  5551.  
  5552.     if (rcp = rindex(str, '\n'))
  5553.         *rcp = '\0';        /*  Loose newline  */
  5554.  
  5555.     while (isspace(*str))
  5556.         str++;
  5557.  
  5558.     if (*str == '\0')        /*  If nothing left, the exit  */
  5559.         return;
  5560.  
  5561.     if ((rp = (struct cmd *)malloc(sizeof (struct cmd)))
  5562.                 == (struct cmd *)0)
  5563.         fatal("No memory for command");
  5564.     rp->c_next = (struct cmd *)0;
  5565.     if ((rcp = malloc(strlen(str)+1)) == (char *)0)
  5566.         fatal("No memory for command");
  5567.     strcpy(rcp, str);
  5568.     rp->c_cmd = rcp;
  5569.  
  5570.     if (cp == (struct cmd *)0)
  5571.         return rp;
  5572.  
  5573.     for (rrp = cp; rrp->c_next; rrp = rrp->c_next)
  5574.         ;
  5575.  
  5576.     rrp->c_next = rp;
  5577.  
  5578.     return cp;
  5579. }
  5580.  
  5581.  
  5582. /*
  5583.  *    Add a new 'line' of stuff to a target.  This check to see
  5584.  *    if commands already exist for the target.
  5585.  */
  5586. void
  5587. newline(np, dp, cp)
  5588. struct name *        np;
  5589. struct depend *        dp;
  5590. struct cmd *        cp;
  5591. {
  5592.     bool            hascmds = FALSE;  /*  Target has commands  */
  5593.     register struct line *    rp;
  5594.     register struct line *    rrp;
  5595.  
  5596.  
  5597.     for
  5598.     (
  5599.         rp = np->n_line, rrp = (struct line *)0;
  5600.         rp;
  5601.         rrp = rp, rp = rp->l_next
  5602.     )
  5603.         if (rp->l_cmd)
  5604.             hascmds = TRUE;
  5605.  
  5606.     if (hascmds && cp)
  5607.         error("Commands defined twice for target %s", np->n_name);
  5608.  
  5609.     if ((rp = (struct line *)malloc(sizeof (struct line)))
  5610.                 == (struct line *)0)
  5611.         fatal("No memory for line");
  5612.     rp->l_next = (struct line *)0;
  5613.     rp->l_dep = dp;
  5614.     rp->l_cmd = cp;
  5615.  
  5616.     if (rrp)
  5617.         rrp->l_next = rp;
  5618.     else
  5619.         np->n_line = rp;
  5620.  
  5621.     np->n_flag |= N_TARG;
  5622. }
  5623.  
  5624.  
  5625. /*
  5626.  *    Parse input from the makefile, and construct a tree structure
  5627.  *    of it.
  5628.  */
  5629. void
  5630. input(fd)
  5631. FILE *            fd;
  5632. {
  5633.     char *            p;        /*  General  */
  5634.     char *            q;
  5635.     struct name *        np;
  5636.     struct depend *        dp;
  5637.     struct cmd *        cp;
  5638.  
  5639.  
  5640.     if (getline(str1, fd))    /*  Read the first line  */
  5641.         return;
  5642.  
  5643.     for(;;)
  5644.     {
  5645.         if (*str1 == '\t')    /*  Rules without targets  */
  5646.             error("Rules not allowed here");
  5647.  
  5648.         p = str1;
  5649.  
  5650.         while (isspace(*p))    /*  Find first target  */
  5651.             p++;
  5652.  
  5653.         while (((q = index(p, '=')) != (char *)0) &&
  5654.             (p != q) && (q[-1] == '\\'))    /*  Find value */
  5655.         {
  5656.             register char *        a;
  5657.  
  5658.             a = q - 1;    /*  Del \ chr; move rest back  */
  5659.             p = q;
  5660.             while(*a++ = *q++)
  5661.                 ;
  5662.         }
  5663.  
  5664.         if (q != (char *)0)
  5665.         {
  5666.             register char *        a;
  5667.  
  5668.             *q++ = '\0';        /*  Separate name and val  */
  5669.             while (isspace(*q))
  5670.                 q++;
  5671.             if (p = rindex(q, '\n'))
  5672.                 *p = '\0';
  5673.  
  5674.             p = str1;
  5675.             if ((a = gettok(&p)) == (char *)0)
  5676.                 error("No macro name");
  5677.  
  5678.             setmacro(a, q);
  5679.  
  5680.             if (getline(str1, fd))
  5681.                 return;
  5682.             continue;
  5683.         }
  5684.  
  5685.         expand(str1);
  5686.         p = str1;
  5687.  
  5688.         while (((q = index(p, ':')) != (char *)0) &&
  5689.             (p != q) && (q[-1] == '\\'))    /*  Find dependents  */
  5690.         {
  5691.             register char *        a;
  5692.  
  5693.             a = q - 1;    /*  Del \ chr; move rest back  */
  5694.             p = q;
  5695.             while(*a++ = *q++)
  5696.                 ;
  5697.         }
  5698.  
  5699.         if (q == (char *)0)
  5700.             error("No targets provided");
  5701.  
  5702.         *q++ = '\0';    /*  Separate targets and dependents  */
  5703.  
  5704.         for (dp = (struct depend *)0; ((p = gettok(&q)) != (char *)0);)
  5705.                     /*  get list of dep's */
  5706.         {
  5707.             np = newname(p);        /*  Intern name  */
  5708.             dp = newdep(np, dp);        /*  Add to dep list */
  5709.         }
  5710.  
  5711.         *((q = str1) + strlen(str1) + 1) = '\0';
  5712.             /*  Need two nulls for gettok (Remember separation)  */
  5713.  
  5714.         cp = (struct cmd *)0;
  5715.         if (getline(str2, fd) == FALSE)        /*  Get commands  */
  5716.         {
  5717.             while (*str2 == '\t')
  5718.             {
  5719.                 cp = newcmd(&str2[0], cp);
  5720.                 if (getline(str2, fd))
  5721.                     break;
  5722.             }
  5723.         }
  5724.  
  5725.         while ((p = gettok(&q)) != (char *)0)    /* Get list of targ's */
  5726.         {
  5727.             np = newname(p);        /*  Intern name  */
  5728.             newline(np, dp, cp);
  5729.             if (!firstname)
  5730.                 firstname = np;
  5731.         }
  5732.  
  5733.         if (feof(fd) != 0  || endoffile == TRUE)    /*  EOF?  */
  5734.             return;
  5735.  
  5736.         strcpy(str1, str2);
  5737.     }
  5738. }
  5739.  
  5740.  
  5741. /*
  5742.  * Case insensitive strcmp() then used for = or != purposes.
  5743.  *
  5744.  * This makes cp/m makefile usage a bit simpler
  5745.  *
  5746.  *                        -mdk
  5747.  */
  5748.  
  5749. no_case_cmp(first,second)
  5750. char *first;
  5751. char *second;
  5752. {
  5753.     register char *p1,*p2;
  5754.  
  5755.     for (p1=first,p2=second ; *p1 != '\0' ; p1++, p2++) {
  5756.         if ((islower(*p1) ? tolower(*p1) : *p1) != 
  5757.                 (islower(*p2) ? tolower(*p2) : *p2) ) {
  5758.             break;
  5759.         }
  5760.     }
  5761.  
  5762.     if (*p1 == '\0' && *p2 == '\0') {
  5763.         return(0);
  5764.     }
  5765.     return(1);
  5766. }
  5767. SHAR_EOF
  5768. if test 5650 -ne "`wc -c input.c`"
  5769. then
  5770. echo shar: error transmitting input.c '(should have been 5650 characters)'
  5771. fi
  5772. echo shar: extracting macro.c
  5773. cat << \SHAR_EOF > macro.c
  5774. /*
  5775.  *    Macro control for make
  5776.  */
  5777.  
  5778.  
  5779. #include "h.h"
  5780.  
  5781.  
  5782. struct macro *        macrohead;
  5783.  
  5784.  
  5785. struct macro *
  5786. getmp(name)
  5787. char *            name;
  5788. {
  5789.     register struct macro *    rp;
  5790.  
  5791.     for (rp = macrohead; rp; rp = rp->m_next)
  5792.         if (strcmp(name, rp->m_name) == 0)
  5793.             return rp;
  5794.     return (struct macro *)0;
  5795. }
  5796.  
  5797.  
  5798. char *
  5799. getmacro(name)
  5800. char *            name;
  5801. {
  5802.     struct macro *        mp;
  5803.  
  5804.     if (mp = getmp(name))
  5805.         return mp->m_val;
  5806.     else
  5807.         return "";
  5808. }
  5809.  
  5810.  
  5811. struct macro *
  5812. setmacro(name, val)
  5813. char *            name;
  5814. char *            val;
  5815. {
  5816.     register struct macro *    rp;
  5817.     register char *        cp;
  5818.  
  5819.  
  5820.             /*  Replace macro definition if it exists  */
  5821.     for (rp = macrohead; rp; rp = rp->m_next)
  5822.         if (strcmp(name, rp->m_name) == 0)
  5823.         {
  5824.             free(rp->m_val);    /*  Free space from old  */
  5825.             break;
  5826.         }
  5827.  
  5828.     if (!rp)        /*  If not defined, allocate space for new  */
  5829.     {
  5830.         if ((rp = (struct macro *)malloc(sizeof (struct macro)))
  5831.                      == (struct macro *)0)
  5832.             fatal("No memory for macro");
  5833.  
  5834.         rp->m_next = macrohead;
  5835.         macrohead = rp;
  5836.         rp->m_flag = FALSE;
  5837.  
  5838.         if ((cp = malloc(strlen(name)+1)) == (char *)0)
  5839.             fatal("No memory for macro");
  5840.         strcpy(cp, name);
  5841.         rp->m_name = cp;
  5842.     }
  5843.  
  5844.     if ((cp = malloc(strlen(val)+1)) == (char *)0)
  5845.         fatal("No memory for macro");
  5846.     strcpy(cp, val);        /*  Copy in new value  */
  5847.     rp->m_val = cp;
  5848.  
  5849.     return rp;
  5850. }
  5851.  
  5852.  
  5853. /*
  5854.  *    Do the dirty work for expand
  5855.  */
  5856. void
  5857. doexp(to, from, len, buf)
  5858. char **            to;
  5859. char *            from;
  5860. int *            len;
  5861. char *            buf;
  5862. {
  5863.     register char *        rp;
  5864.     register char *        p;
  5865.     register char *        q;
  5866.     register struct macro *    mp;
  5867.  
  5868.  
  5869.     rp = from;
  5870.     p = *to;
  5871.     while (*rp)
  5872.     {
  5873.         if (*rp != '$')
  5874.         {
  5875.             *p++ = *rp++;
  5876.             (*len)--;
  5877.         }
  5878.         else
  5879.         {
  5880.             q = buf;
  5881.             if (*++rp == '(')
  5882.                 while (*++rp && *rp != ')')
  5883.                     *q++ = *rp;
  5884.             else if (!*rp)
  5885.             {
  5886.                 *p++ = '$';
  5887.                 break;
  5888.             }
  5889.             else
  5890.                 *q++ = *rp;
  5891.             *q = '\0';
  5892.             if (*rp)
  5893.                 rp++;
  5894.             if (!(mp = getmp(buf)))
  5895.                 mp = setmacro(buf, "");
  5896.             if (mp->m_flag)
  5897.                 fatal("Infinitely recursive macro %s", mp->m_name);
  5898.             mp->m_flag = TRUE;
  5899.             *to = p;
  5900.             doexp(to, mp->m_val, len, buf);
  5901.             p = *to;
  5902.             mp->m_flag = FALSE;
  5903.         }
  5904.         if (*len <= 0)
  5905.             error("Expanded line too line");
  5906.     }
  5907.     *p = '\0';
  5908.     *to = p;
  5909. }
  5910.  
  5911.  
  5912. /*
  5913.  *    Expand any macros in str.
  5914.  */
  5915. void
  5916. expand(str)
  5917. char *        str;
  5918. {
  5919.     static char        a[LZ];
  5920.     static char        b[LZ];
  5921.     char *            p;
  5922.     int            len = LZ-1;
  5923.  
  5924.     p = str;
  5925.  
  5926.     strcpy(a, str);
  5927.     doexp(&p, a, &len, b);
  5928. }
  5929. SHAR_EOF
  5930. if test 2298 -ne "`wc -c macro.c`"
  5931. then
  5932. echo shar: error transmitting macro.c '(should have been 2298 characters)'
  5933. fi
  5934. echo shar: extracting main.c
  5935. cat << \SHAR_EOF > main.c
  5936. /*
  5937.  *      make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]
  5938.  *
  5939.  *    (Better than EON mk & old CPM make but not quite as good as UNIX make)
  5940.  *
  5941.  *    -f makefile name
  5942.  *    -i don't ignore exit status         
  5943.  *    -n Pretend to make
  5944.  *    -p Print all macros & targets
  5945.  *    -q Question up-to-dateness of target.  Return exit status 1 if not
  5946.  *    -r Don't not use inbuilt rules
  5947.  *    -s Make silently
  5948.  *    -t Touch files instead of making them
  5949.  *    -m Change memory requirements    - N/A under CP/M
  5950.  */
  5951.  
  5952. #include "c:stdio.h"            /* c: is my ramdisk  */
  5953. #include "c:fcntl.h"
  5954. #include "h.h"
  5955.  
  5956. char Usage1[]="    -f makefile name\n\
  5957.     -i don't ignore exit status\n\
  5958.     -n Pretend to make\n\
  5959.     -p Print all macros & targets\n\
  5960.     -r Do not use inbuilt rules\n\
  5961.     -s Make silently\n\
  5962.     -t Touch files instead of making them\n";
  5963.  
  5964.  
  5965. #define MEMSPACE    (16384)        /* superfluous under cp/m */
  5966.  
  5967.  
  5968. char *            myname;
  5969. char *            makefile;    /*  The make file  */
  5970. unsigned        memspace = MEMSPACE;
  5971.  
  5972. extern FILE *execfile;
  5973.  
  5974. FILE *            ifd;        /*  Input file desciptor  */
  5975. bool            domake = TRUE;    /*  Go through the motions option  */
  5976. bool            ignore = TRUE;    /*  Ignore exit status option  */
  5977. bool            silent = FALSE;    /*  Silent option  */
  5978. bool            print = FALSE;    /*  Print debuging information  */
  5979. bool            rules = TRUE;    /*  Use inbuilt rules  */
  5980. bool            dotouch = FALSE;/*  Touch files instead of making  */
  5981. bool            quest = FALSE;    /*  Question up-to-dateness of file  */
  5982.  
  5983.  
  5984. void
  5985. main(argc, argv)
  5986. char **            argv;
  5987. int            argc;
  5988. {
  5989.     register char *        p;    /*  For argument processing  */
  5990.     int            estat;    /*  For question  */
  5991.     register struct name *    np;
  5992.  
  5993.  
  5994.     /*
  5995.      * CP/M makes all command line junque upper case.  All things
  5996.      * being equal, I'd rather they be all forced lower.  So I will.
  5997.      *
  5998.      * I have also forced everything in the makefile to lower case,
  5999.      * so everything should be case insensitive.
  6000.      */
  6001.     for (estat = argc ; --estat > 0 ;) {
  6002.             strlower(argv[estat]);
  6003.     }
  6004.  
  6005.     unlink(MAKERUN);    /* delete possible existing make-submit file */
  6006.  
  6007.     myname = (argc-- < 1) ? "make" : *argv++;
  6008.     /*
  6009.      * CP/M can't do argv[0] (OS limitation), so we don't know who we are.
  6010.      */
  6011.     myname = "make";
  6012.  
  6013.     while ((argc > 0) && (**argv == '-'))
  6014.     {
  6015.         argc--;        /*  One less to process  */
  6016.         p = *argv++;    /*  Now processing this one  */
  6017.  
  6018.         while (*++p != '\0')
  6019.         {
  6020.             /*
  6021.              * Elaborate switch not really needed, but I
  6022.              * hacked this in before I made all argv parameters
  6023.              * lower case (for cp/m).
  6024.              */
  6025.             switch( isupper(*p) ? tolower (*p) : *p )
  6026.             {
  6027.             case 'f':    /*  Alternate file name  */
  6028.                 if (*++p == '\0')
  6029.                 {
  6030.                     if (argc-- <= 0)
  6031.                         usage();
  6032.                     p = *argv++;
  6033.                 }
  6034.                 makefile = p;
  6035.                 goto end_of_args;
  6036.             case 'm':    /*  Change space requirements  */
  6037.                 if (*++p == '\0')
  6038.                 {
  6039.                     if (argc-- <= 0)
  6040.                         usage();
  6041.                     p = *argv++;
  6042.                 }
  6043.                 memspace = atoi(p);
  6044.                 goto end_of_args;
  6045.             case 'n':    /*  Pretend mode  */
  6046.                 domake = FALSE;
  6047.                 break;
  6048.             case 'i':    /*  Ignore fault mode  */
  6049.                 ignore = FALSE;
  6050.                 break;
  6051.             case 's':    /*  Silent about commands  */
  6052.                 silent = TRUE;
  6053.                 break;
  6054.             case 'p':
  6055.                 print = TRUE;
  6056.                 break;
  6057.             case 'r':
  6058.                 rules = FALSE;
  6059.                 break;
  6060.             case 't':
  6061.                 dotouch = TRUE;
  6062.                 break;
  6063.             case 'q':
  6064.                 quest = TRUE;
  6065.                 break;
  6066.             default:    /*  Wrong option  */
  6067.                 usage();
  6068.             }
  6069.         }
  6070.     end_of_args:;
  6071.     }
  6072.  
  6073. /*    if (initalloc(memspace) == 0xffff)    Must get memory for alloc  
  6074.         fatal("Cannot initalloc memory");
  6075. */
  6076.     if (strcmp(makefile, "-") == 0)    /*  Can use stdin as makefile  */
  6077.         ifd = stdin;
  6078.     else
  6079.         if (!makefile)        /*  If no file, then use default */
  6080.         {
  6081.              if ((ifd = fopen(DEFN1, "r")) == (FILE *)0 
  6082.               && ((ifd = fopen(DEFN2, "r")) == (FILE *)0)) {
  6083.                 fatal("Can't open %s or %s; error %02x",
  6084.                              DEFN1,DEFN2, errno);
  6085.              }
  6086.             
  6087.         }
  6088.         else
  6089.             if ((ifd = fopen(makefile, "r")) == (FILE *)0)
  6090.                 fatal("Can't open %s", makefile);
  6091.  
  6092.     if (rules)
  6093.         makerules();
  6094.  
  6095.     setmacro("$", "$");
  6096.  
  6097.     while (argc && (p = index(*argv, '=')))
  6098.     {
  6099.         char        c;
  6100.  
  6101.         c = *p;
  6102.         *p = '\0';
  6103.         setmacro(*argv, p+1);
  6104.         *p = c;
  6105.  
  6106.         argv++;
  6107.         argc--;
  6108.     }
  6109.  
  6110.     input(ifd);    /*  Input all the gunga  */
  6111.     fclose(ifd);    /*  Finished with makefile  */
  6112.     lineno = 0;    /*  Any calls to error now print no line number */
  6113.  
  6114.     if (print)
  6115.         prt();    /*  Print out structures  */
  6116.  
  6117.     np = newname(".SILENT");
  6118.     if (np->n_flag & N_TARG)
  6119.         silent = TRUE;
  6120.  
  6121.     np = newname(".IGNORE");
  6122.     if (np->n_flag & N_TARG)
  6123.         ignore = TRUE;
  6124.  
  6125.     precious();
  6126.  
  6127.     if (!domake)
  6128.         silent = FALSE;
  6129.  
  6130.     if (!firstname)
  6131.         fatal("No targets defined");
  6132.  
  6133.     circh();    /*  Check circles in target definitions  */
  6134.  
  6135.     if (!argc)
  6136.         estat = make(firstname, 0);
  6137.     else while (argc--)
  6138.     {
  6139.         if (!print && !silent && strcmp(*argv, "love") == 0)
  6140.             printf("Not war!\n");
  6141.         estat |= make(newname(*argv++), 0);
  6142.     }
  6143.  
  6144.  
  6145.     if (execfile == NULL) {
  6146.         exit(0);    /* no file made, must be up to date! */
  6147.     }
  6148.  
  6149.     /*
  6150.      * The "trick" algorithm used for CP/M (which can't execute
  6151.      * commands while "make" is running) is that dosh() really
  6152.      * puts commands into a submit file MAKERUN, then after
  6153.      * the make is "done", that submit file is chained-to (below).
  6154.      * The first code-line below enters the submit file's last command
  6155.      * to delete itself (so this chaining trick is mostly transparent.
  6156.      *
  6157.      *                        -mdk
  6158.      */
  6159.  
  6160.     dosh("era ",MAKERUN);   /* have the submit file delete itself */
  6161.     dosh("\n","");
  6162.     fclose(execfile);    /* close the writing to this file     */
  6163.  
  6164.     bdos(108,0);        /* Reset CP/M Program return code     */
  6165.  
  6166.     strcpy((char *)0x80,MAKERUN);    /* load submit file name into DMA buf*/
  6167.     bdos(47,0xff);        /* chain to the generated submit file */
  6168.  
  6169.  
  6170. /*    if (quest)
  6171.         exit(estat);
  6172.     else
  6173.         exit(0);
  6174. */
  6175.  
  6176. }
  6177.  
  6178.  
  6179. usage()
  6180. {
  6181.     fprintf(stderr, "Usage: %s [-f makefile] [-nprst] [macro=val ...] [target(s) ...]\n%s", myname,Usage1);
  6182.     exit(1);
  6183. }
  6184.  
  6185.  
  6186. void
  6187. fatal(msg, a1, a2, a3)
  6188. char    *msg;
  6189. {
  6190.     fprintf(stderr, "%s: ", myname);
  6191.     fprintf(stderr, msg, a1, a2, a3);
  6192.     fputc('\n', stderr);
  6193.     exit(1);
  6194. }
  6195.  
  6196.  
  6197.     
  6198. strlower(string)
  6199. char *string;
  6200. {
  6201.     register char *pointer;
  6202.     char c;
  6203.     for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
  6204.         if (isupper(c))
  6205.             *pointer = tolower(c);
  6206.     }
  6207. }
  6208. SHAR_EOF
  6209. if test 5995 -ne "`wc -c main.c`"
  6210. then
  6211. echo shar: error transmitting main.c '(should have been 5995 characters)'
  6212. fi
  6213. echo shar: extracting reader.c
  6214. cat << \SHAR_EOF > reader.c
  6215. /*
  6216.  *    Read in makefile
  6217.  */
  6218.  
  6219.  
  6220. #include "c:stdio.h"
  6221. #include "h.h"
  6222.  
  6223.  
  6224. int            lineno;
  6225.  
  6226. int endoffile = FALSE;
  6227.  
  6228. /*
  6229.  *    Syntax error handler.  Print message, with line number, and exits.
  6230.  */
  6231. void
  6232. error(msg, a1, a2, a3)
  6233. char *            msg;
  6234. {
  6235.     fprintf(stderr, "%s: ", myname);
  6236.     fprintf(stderr, msg, a1, a2, a3);
  6237.     if (lineno)
  6238.         fprintf(stderr, " on line %d", lineno);
  6239.     fputc('\n', stderr);
  6240.     exit(1);
  6241. }
  6242.  
  6243.  
  6244. /*
  6245.  *    Read a line into the supplied string of length LZ.  Remove
  6246.  *    comments, ignore blank lines. Deal with    quoted (\) #, and
  6247.  *    quoted newlines.  If EOF return TRUE.
  6248.  */
  6249. bool
  6250. getline(str, fd)
  6251. char *        str;
  6252. FILE *        fd;
  6253. {
  6254.     register char *        p;
  6255.     char *            q;
  6256.     int            pos = 0;
  6257.     int            concatflag = 0;
  6258.     int            size;
  6259.  
  6260.  
  6261.     for (;;)
  6262.     {
  6263.         if (fgets(str+pos, LZ-pos, fd) == (char *)0) {
  6264.             endoffile = TRUE;
  6265.             return (TRUE);        /*  EOF  */
  6266.             
  6267.         }
  6268.         if (index(str+pos,'\032') != (char *)0) {
  6269.             endoffile = TRUE;
  6270.             return(TRUE);
  6271.         }
  6272.  
  6273.         /*
  6274.          * Strip CP/M CR characters
  6275.          */
  6276.         if ((p=index(str+pos,'\015')) != (char *)0) {
  6277.             do {
  6278.                 *p = p[1];
  6279.             } while (*(++p) != '\0');
  6280.         }
  6281.  
  6282.         /*
  6283.          * Shorten leading whitespace on line extensions.
  6284.          */
  6285.         if (concatflag != 0) {
  6286.             for (p = str+pos ; iswhite(*p) ; p++ ) ;
  6287.             size = p-str-pos-1;
  6288.             if (size > 0) {
  6289.                 p = str+pos+1;
  6290.                 while ((*p = p[size]) != '\0') {
  6291.                     p++;
  6292.                 }
  6293.             }
  6294.         }
  6295.  
  6296.         strlower(str+pos); /* let's do everything inlower case */
  6297.  
  6298.         lineno++;
  6299.  
  6300.         if ((p = index(str+pos, '\n')) == (char *)0)
  6301.             error("Line too long");
  6302.  
  6303.         /* 
  6304.          * I want to actually join lines that are logically joined
  6305.          * so that when link commands are generated for CP/M,
  6306.          * a usable CCP command line will be generated.
  6307.          */
  6308.         if (p[-1] == '\\') {
  6309.             *(--p) = '\0';
  6310.             pos = p - str;
  6311.             concatflag = 1;
  6312.             continue;
  6313.         }
  6314.  
  6315.         p = str;
  6316.         while (((q = index(p, '#')) != (char *)0) &&
  6317.             (p != q) && (q[-1] == '\\'))
  6318.         {
  6319.             char    *a;
  6320.  
  6321.             a = q - 1;    /*  Del \ chr; move rest back  */
  6322.             p = q;
  6323.             while (*a++ = *q++)
  6324.                 ;
  6325.         }
  6326.         if (q != (char *)0)
  6327.         {
  6328.             q[0] = '\n';
  6329.             q[1] = '\0';
  6330.         }
  6331.  
  6332.         p = str;
  6333.         while (isspace(*p))    /*  Checking for blank  */
  6334.             p++;
  6335.  
  6336.         if (*p != '\0')
  6337.             return FALSE;
  6338.         pos = 0;
  6339.     }
  6340. }
  6341.  
  6342.  
  6343. /*
  6344.  *    Get a word from the current line, surounded by white space.
  6345.  *    return a pointer to it. String returned has no white spaces
  6346.  *    in it.
  6347.  */
  6348. char *
  6349. gettok(ptr)
  6350. char    **ptr;
  6351. {
  6352.     register char *        p;
  6353.  
  6354.  
  6355.     while (isspace(**ptr))    /*  Skip spaces  */
  6356.         (*ptr)++;
  6357.  
  6358.     if (**ptr == '\0')    /*  Nothing after spaces  */
  6359.         return NULL;
  6360.  
  6361.     p = *ptr;        /*  word starts here  */
  6362.  
  6363.     while ((**ptr != '\0') && (!isspace(**ptr)))
  6364.         (*ptr)++;    /*  Find end of word  */
  6365.  
  6366.     *(*ptr)++ = '\0';    /*  Terminate it  */
  6367.  
  6368.     return(p);
  6369. }
  6370. SHAR_EOF
  6371. if test 2614 -ne "`wc -c reader.c`"
  6372. then
  6373. echo shar: error transmitting reader.c '(should have been 2614 characters)'
  6374. fi
  6375. echo shar: extracting rules.c
  6376. cat << \SHAR_EOF > rules.c
  6377. /*
  6378.  *    Control of the implicit suffix rules
  6379.  */
  6380.  
  6381.  
  6382. #include "h.h"
  6383.  
  6384. extern long ftime();
  6385. extern long time();
  6386. extern char *rindex();
  6387. extern struct name *newname();
  6388. extern char *setmacro();
  6389.  
  6390. /*
  6391.  *    Return a pointer to the suffix of a name
  6392.  */
  6393. char *
  6394. suffix(name)
  6395. char *            name;
  6396. {
  6397.     return(rindex(name, '.'));
  6398. }
  6399.  
  6400.  
  6401. /*
  6402.  *    Dynamic dependency.  This routine applies the suffix rules
  6403.  *    to try and find a source and a set of rules for a missing
  6404.  *    target.  If found, np is made into a target with the implicit
  6405.  *    source name, and rules.  Returns TRUE if np was made into
  6406.  *    a target.
  6407.  */
  6408. bool
  6409. dyndep(np)
  6410. struct name *        np;
  6411. {
  6412.     register char *        p;
  6413.     register char *        q;
  6414.     register char *        suff;        /*  Old suffix  */
  6415.     register char *        basename;    /*  Name without suffix  */
  6416.     struct name *        op;        /*  New dependent  */
  6417.     struct name *        sp;        /*  Suffix  */
  6418.     struct line *        lp;
  6419.     struct depend *        dp;
  6420.     char *            newsuff;
  6421.  
  6422.  
  6423.     p = str1;
  6424.     q = np->n_name;
  6425.     suff = suffix(q);
  6426.     while (q < suff)
  6427.         *p++ = *q++;
  6428.     *p = '\0';
  6429.     basename = setmacro("*", str1)->m_val;
  6430.  
  6431.     if (!((sp = newname(".suffixes"))->n_flag & N_TARG))
  6432.         return FALSE;
  6433.  
  6434.     for (lp = sp->n_line; lp; lp = lp->l_next)
  6435.         for (dp = lp->l_dep; dp; dp = dp->d_next)
  6436.         {
  6437.             newsuff = dp->d_name->n_name;
  6438.             if (strlen(suff)+strlen(newsuff)+1 >= LZ)
  6439.                 fatal("Suffix rule too long");
  6440.             p = str1;
  6441.             q = newsuff;
  6442.             while (*p++ = *q++)
  6443.                 ;
  6444.             p--;
  6445.             q = suff;
  6446.             while (*p++ = *q++)
  6447.                 ;
  6448.             sp = newname(str1);
  6449.             if (sp->n_flag & N_TARG)
  6450.             {
  6451.                 p = str1;
  6452.                 q = basename;
  6453.                 if (strlen(basename) + strlen(newsuff)+1 >= LZ)
  6454.                     fatal("Implicit name too long");
  6455.                 while (*p++ = *q++)
  6456.                     ;
  6457.                 p--;
  6458.                 q = newsuff;
  6459.                 while (*p++ = *q++)
  6460.                     ;
  6461.                 op = newname(str1);
  6462.                 if (!op->n_time)
  6463.         op->n_time = ftime(op->n_name);/*  Gets modtime of this file*/
  6464.                 if (op->n_time)
  6465.                 {
  6466.                     dp = newdep(op, 0);
  6467.                     newline(np, dp, sp->n_line->l_cmd);
  6468.                     setmacro("<", op->n_name);
  6469.                     return TRUE;
  6470.                 }
  6471.             }
  6472.         }
  6473.     return FALSE;
  6474. }
  6475.  
  6476.  
  6477. /*
  6478.  *    Make the default rules
  6479.  */
  6480. void
  6481. makerules()
  6482. {
  6483.     struct cmd *        cp;
  6484.     struct name *        np;
  6485.     struct depend *        dp;
  6486.  
  6487.  
  6488. #ifdef xyz123zzz
  6489.  
  6490.     /*
  6491.      * Sure would have been nice if this had been documented as
  6492.      * to exactly what was going on with the routine calls.
  6493.      *
  6494.      *                    -mdk
  6495.      */
  6496.     setmacro("BDSCC", "asm");
  6497.     /*    setmacro("BDSCFLAGS", "");    */
  6498.     cp = newcmd("$(BDSCC) $(BDSCFLAGS) -n $<", 0);
  6499.     np = newname(".c.o");
  6500.     newline(np, 0, cp);
  6501.  
  6502.     setmacro("CC", "c");
  6503.     setmacro("CFLAGS", "-O");
  6504.     cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
  6505.     np = newname(".c.obj");
  6506.     newline(np, 0, cp);
  6507.  
  6508.     setmacro("M80", "asm -n");
  6509.     /*    setmacro("M80FLAGS", "");    */
  6510.     cp = newcmd("$(M80) $(M80FLAGS) $<", 0);
  6511.     np = newname(".mac.o");
  6512.     newline(np, 0, cp);
  6513.  
  6514.     setmacro("AS", "zas");
  6515.     /*    setmacro("ASFLAGS", "");    */
  6516.     cp = newcmd("$(AS) $(ASFLAGS) -o $@ $<", 0);
  6517.     np = newname(".as.obj");
  6518.     newline(np, 0, cp);
  6519.  
  6520.     np = newname(".as");
  6521.     dp = newdep(np, 0);
  6522.     np = newname(".obj");
  6523.     dp = newdep(np, dp);
  6524.     np = newname(".c");
  6525.     dp = newdep(np, dp);
  6526.     np = newname(".o");
  6527.     dp = newdep(np, dp);
  6528.     np = newname(".mac");
  6529.     dp = newdep(np, dp);
  6530.     np = newname(".suffixes");
  6531.     newline(np, dp, 0);
  6532. #endif
  6533.     
  6534.  
  6535.     /*
  6536.      * C compilation.  I use cc-c.sub to do what unix cc -c does.
  6537.      *
  6538.      *     Macros can be overridden in makfile if I change and am
  6539.      *    too lazy to recompile this make program's rules.
  6540.         *
  6541.      */
  6542.     setmacro("ccc", "cc-c");
  6543.     setmacro("cflags", "");
  6544.     setmacro("cwhich", "$*");
  6545.     cp = newcmd("$(ccc) $(cflags) $(cwhich)", 0);
  6546.     np = newname(".c.o");
  6547.     newline(np, 0, cp);
  6548.  
  6549.     /*
  6550.      * Assembly using RMAC.
  6551.      */
  6552.     setmacro("asm", "rmac");
  6553.     setmacro("asmflags", "$$PZ SZ");
  6554.     setmacro("asmwhich", "$*");
  6555.     cp = newcmd("$(asm) $(asmwhich) $(asmflags)", 0);
  6556.     np = newname(".asm.rel");
  6557.     newline(np, 0, cp);
  6558.         
  6559.     /*
  6560.      * No point in my Z80 assembler or MAC.  Rules for
  6561.      * non-linkable one-module language-tools makes no
  6562.      * sense because it is a one-file process anyway.
  6563.      */
  6564.  
  6565.  
  6566.     np = newname(".asm");
  6567.     dp = newdep(np, 0);
  6568.     np = newname(".rel");
  6569.     dp = newdep(np,dp);
  6570.     np = newname(".c");
  6571.     dp = newdep(np, dp);
  6572.     np = newname(".o");
  6573.     dp = newdep(np,dp);
  6574.     np = newname(".suffixes");
  6575.     newline(np, dp, 0);
  6576.  
  6577. }
  6578. SHAR_EOF
  6579. if test 4094 -ne "`wc -c rules.c`"
  6580. then
  6581. echo shar: error transmitting rules.c '(should have been 4094 characters)'
  6582. fi
  6583. echo shar: extracting h.h
  6584. cat << \SHAR_EOF > h.h
  6585. /*
  6586.  *    Include header for make
  6587.  */
  6588.  
  6589.  
  6590. #ifndef uchar
  6591. #define uchar        char    /* regular char's are unsigned w/Aztec C */
  6592. #endif
  6593.  
  6594. #define void         int
  6595.  
  6596. #define bool        uchar
  6597. #define time_t        long
  6598. #define TRUE        (1)
  6599. #define FALSE        (0)
  6600. #ifndef max
  6601. #define max(a,b)    ((a)>(b)?(a):(b))
  6602. #endif
  6603.  
  6604. #define DEFN1        "MAKEFILE.DAT"        /*  Default names  */
  6605. #define DEFN2        "MAKEFILE"
  6606. #define errout(s) fputs(s, stderr) /* No need for DeSmet kludge */
  6607. #define MAKERUN "MAKE@@@.SUB" /* File on which commands are written */
  6608.  
  6609. #define LZ        (1024)            /*  Line size  */
  6610.  
  6611.  
  6612.  
  6613. /*
  6614.  *    A name.  This represents a file, either to be made, or existant
  6615.  */
  6616.  
  6617. struct name
  6618. {
  6619.     struct name *        n_next;        /* Next in the list of names */
  6620.     char *            n_name;        /* Called */
  6621.     struct line *        n_line;        /* Dependencies */
  6622.     time_t            n_time;        /* Modify time of this name */
  6623.     uchar            n_flag;        /* Info about the name */
  6624. };
  6625.  
  6626. #define N_MARK        0x01            /* For cycle check */
  6627. #define N_DONE        0x02            /* Name looked at */
  6628. #define N_TARG        0x04            /* Name is a target */
  6629. #define N_PREC        0x08            /* Target is precious */
  6630.  
  6631. /*
  6632.  *    Definition of a target line.
  6633.  */
  6634. struct    line
  6635. {
  6636.     struct line *        l_next;        /* Next line (for ::) */
  6637.     struct depend *        l_dep;        /* Dependents for this line */
  6638.     struct cmd *        l_cmd;        /* Commands for this line */
  6639. };
  6640.  
  6641.  
  6642. /*
  6643.  *    List of dependents for a line
  6644.  */
  6645. struct    depend
  6646. {
  6647.     struct depend *        d_next;        /* Next dependent */
  6648.     struct name *        d_name;        /* Name of dependent */
  6649. };
  6650.  
  6651.  
  6652. /*
  6653.  *    Commands for a line
  6654.  */
  6655. struct    cmd
  6656. {
  6657.     struct cmd *        c_next;        /* Next command line */
  6658.     char *            c_cmd;        /* Command line */
  6659. };
  6660.  
  6661.  
  6662. /*
  6663.  *    Macro storage
  6664.  */
  6665. struct    macro
  6666. {
  6667.     struct macro *        m_next;        /* Next variable */
  6668.     char *            m_name;        /* Called ... */
  6669.     char *            m_val;        /* Its value */
  6670.     uchar            m_flag;        /* Infinite loop check */
  6671. };
  6672.  
  6673. extern char *        myname;
  6674. extern struct name    namehead;
  6675. extern struct macro *    macrohead;
  6676. extern struct name *    firstname;
  6677. extern bool        silent;
  6678. extern bool        ignore;
  6679. extern bool        rules;
  6680. extern bool        dotouch;
  6681. extern bool        quest;
  6682. extern bool        domake;
  6683. extern char        str1[];
  6684. extern char        str2[];
  6685. extern int        lineno;
  6686.  
  6687. char *            fgets();
  6688. char *            index();
  6689. char *            rindex();
  6690. char *            malloc();
  6691. extern int        errno;
  6692.  
  6693. char *            getmacro();
  6694. struct macro *        setmacro();
  6695. void            input();
  6696. void            error();
  6697. void            fatal();
  6698. int            make();
  6699. struct name *        newname();
  6700. struct depend *        newdep();
  6701. struct cmd *        newcmd();
  6702. void            newline();
  6703. char *            suffix();
  6704. void            touch();
  6705. void            makerules();
  6706. char *            gettok();
  6707. void            precious();
  6708. SHAR_EOF
  6709. if test 2448 -ne "`wc -c h.h`"
  6710. then
  6711. echo shar: error transmitting h.h '(should have been 2448 characters)'
  6712. fi
  6713. #    End of shell archive
  6714. exit 0
  6715.  
  6716. -- 
  6717.  
  6718. Mike Kersenbrock
  6719. Tektronix Computer Aided Software Engineering
  6720. Aloha, Oregon
  6721. 31-Jul-86 19:39:30-MDT,46966;000000000000
  6722. Return-Path: <info-cpm-request@AMSAA.ARPA>
  6723. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 19:37:52-MDT
  6724. Received: from brl-smoke.arpa by AMSAA.ARPA id a000907; 31 Jul 86 19:47 EDT
  6725. Received: from USENET by SMOKE.BRL.ARPA id a005284; 31 Jul 86 19:41 EDT
  6726. From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
  6727. Newsgroups: net.micro.cpm
  6728. Subject: MAKE for CPM 3.0 part 2 of 2
  6729. Message-ID: <514@copper.UUCP>
  6730. Date: 31 Jul 86 07:30:05 GMT
  6731. Keywords: cpm, make
  6732. To:       info-cpm@AMSAA.ARPA
  6733.  
  6734. <------------->
  6735.  
  6736. This is the uuencoded binary for "make.com".  The sources and man page
  6737. were separately posted as part 1.
  6738.  
  6739. Mike Kersenbrock
  6740. Aloha, Oregon
  6741. ...!tektronix!copper!michaelk
  6742.  
  6743.  
  6744. #    This is a shell archive.
  6745. #    Remove everything above and including the cut line.
  6746. #    Then run the rest of the file through sh.
  6747. #----cut here-----cut here-----cut here-----cut here----#
  6748. #!/bin/sh
  6749. # shar:    Shell Archiver
  6750. #    Run the following text with /bin/sh to create:
  6751. #    MAKE.UUE
  6752. # This archive created: Wed Jul 30 23:46:19 1986
  6753. # By:    Michael D. Kersenbrock (Oregon HomePower Software)
  6754. echo shar: extracting make.uue
  6755. cat << \SHAR_EOF > make.uue
  6756. begin 644 MAKE.COM
  6757. MPW(YS60H```JT7=\M<)7`2&(`>4A?`'ES<TJT=$BT7<JT7=\M<)7`2'O=>4A
  6758. MB@'ES;<MT=$A[W7E(9X!Y<VW+='1(>]UY2&J`>7-MRW1T2'__^7-OSW1(0X`
  6759. M.5XC5M4A#@`Y7B-6U2&M`>4JT7?ES8XJZR$(`#GY(0``R4U!2T5`0$`N4U5"
  6760. M`'<`36%K93H@8V%N)W0@8W)E871E(`!-04M%0$!`+E-50@`-"@`E<R`E<P#-
  6761. M9"CX_SKO=V\F`.LA"P`Y<SK9=V\F`.LA"@`Y<R%C!.7-+131ZR$&`#ES(W+K
  6762. M?K?"\0$A:03K(08`.7,C<B$4`#E>(U8A!``97B-6U?WAPPX"_6X`_68!Y?WA
  6763. M_>7A?+7*8@3];@3]9@7K(00`.7,C<L,Y`B$$`#E>(U;K7B-6(00`.7,C<B$$
  6764. M`#E^([;*7P0A!``Y7B-6ZR,C7B-6U2'S=^7-)5;1T2'S=^7-HQ?1(?-W1$U@
  6765. M:5X6`"%``,VC*,*#`F!I7A8`(2T`S:,HRJ\"8&E>%@`A0`#-HRC*G0(A`0#K
  6766. M(0L`.7/#I@(A`0#K(0H`.7-@:2-$32O#9P(A"P`Y?K?"Q0(AY'7E(7($Y<VW
  6767. M+='1(0L`.7ZWPO$"(0H`.7ZWPO$"(>1UY2$Z`.7-]2W1T2'D=>4A(`#ES?4M
  6768. MT=%@:>7=X<,!`]WEX2/EW>$KW>7A?K?*6@/=;@`F`!$*`,VC*,H_`]WEX2-^
  6769. MM\H_`R$@`-UU`"$+`#E^M\(\`R'D=>4A=@3ES;<MT='#5P,A"P`Y?K?"5P,A
  6770. MY'7EW6X`)@#ES?4MT='#^0(A"P`Y?K?"<`,AY'7E(0H`Y<WU+='1.F=V;R8`
  6771. M?+7*7`0A"@`Y?K?"D0,A>P3E(7D$Y<T#`='1(7P$Y<7-`P'1T>LA"``Y<R-R
  6772. M>K/*7`0A"``Y7B-6(?__S:,HRLP#(08`.5XC5M4A?@3ES?8=T='#7`0A"``Y
  6773. M7B-6U2I@=N4AD@3ES6LJT='1(0H`.7ZWROL#(>1UY2&D!.7-MRW1T<-<!"'D
  6774. M=>4A"@#ES?4MT=$A%``Y7B-6(0H`&5X6`"$(`,U3*,)0!"$4`#E>(U;K(R->
  6775. M(U;5S0)5T<)0!"$4`#E>(U;K(R->(U;5*F!VY2&P!.7-:RK1T=$A"``Y7B-6
  6776. MU<V_/='#)P+#!0+)4TA%3$P`.F)I;B]E<V@`("`@`%P*`#H```H`0V]U;&1N
  6777. M)W0@97AE8W5T92`E<P`E<SH@17)R;W(@8V]D92`E9``@*$EG;F]R960I"@`E
  6778. M<SH@)R5S)R!R96UO=F5D+@H`S60H6?\Z9W9O)@!\M<K>!#KO=V\F`'RUPO4$
  6779. M(;,`.5XC5NLC(UXC5M4AG07ES6LJT=$Z9W9O)@!\M<J<!2$``.4AM0`Y7B-6
  6780. MZR,C7B-6U<U=2='1ZR&H`#ES(W(A``#-W2C*1P4ALP`Y7B-6ZR,C7B-6U2I@
  6781. M=N4AJP7ES6LJT='1PY,%(:@`.5XC5M7-R4K1(80`.>4AM0`Y7B-6ZR,C7B-6
  6782. MU<VT9]'1(80`.>4A``#E(0@`.>7-KFC1T=$AA``YY2$``.4A"``YY<U?:-'1
  6783. MT2&$`#GES3%HT<D@("`@=&]U8V@@)7,*`"5S.B`G)7,G(&YO="!T;W5C:&5D
  6784. M("T@;F]N+65X:7-T86YT"@#-9"C\_R$$`#GES:%7`0```.'-NU<A$``Y7B-6
  6785. M(0H`&5X6`"$"`,U3*,H`!B$``,DA$``Y7B-6(08`&<VH5\T96,(V!B$0`#E>
  6786. M(U8A!@`9Y2$2`#E>(U;K(R->(U;5S31;T>'-NU<Z\'=O)@!\M<J*!B$0`#E>
  6787. M(U8A!``97B-6U=WAPUX&W6X`W68!Y=WAW>7A?+7*=@;=Y>$1!``9?B.VPG8&
  6788. MPU4&W>7A?+7"B@8A$``Y7B-6U<W1(M$A$``Y7B-6(0H`&5X6`"$$`,U3*,+,
  6789. M!B$0`#E>(U8A!@`9S:A7S1E8PLP&(1``.5XC5NLC(UXC5M4A2PCES?8=T=$A
  6790. M$``Y7B-6(00`&5XC5M7=X</I!MUN`-UF`>7=X=WEX7RURF<'W6X"W68#1$W#
  6791. M`P=@:5XC5D)+>+'*9`<A$@`Y7B-6ZR/E(0(`"5XC5M7-T`71T2$$`#GE(0(`
  6792. M"5XC5B$&`!G-J%?-SE<A"@`YS:A7S>97S?Y:RD\'(08`.<VH5\-=!R$"``E>
  6793. M(U8A!@`9S:A7X<V[5\/\!L/@!B$"`.4A$@`Y7B-6(0H`&='E;B8`S84IZ^%S
  6794. M.O%W;R8`?+7*M@<A$``Y7B-6(08`&>7-/U[1(1``.5XC5B$&`!G-J%<A!``Y
  6795. MS9I7S>!:Z\DA$``Y7B-6(08`&<VH5R$$`#G-FE?-X%K*(0@Z9G9O)@!\M<KK
  6796. M!R$0`#E>(U;5S<,$T<,.""$0`#E>(U;K(R->(U;5(64(Y<U@%-'1(1``.5XC
  6797. M5M7-LP'1(1``.5XC5B$&`!GES3]>T<-'""$2`#E^([;"1P@A$``Y7B-6ZR,C
  6798. M7B-6U2I@=N4A9PCES6LJT='1(0``R41O;B=T(&MN;W<@:&]W('1O(&UA:V4@
  6799. M)7,`0``E<SH@)R5S)R!I<R!U<"!T;R!D871E"@#-9"C\_RIB=NLA!``Y<R-R
  6800. MPZ0((00`.5XC5NM>(U8A!``Y<R-R(00`.7XCMLK?""$$`#E>(U8A!``97B-6
  6801. MU2$&`#E>(U;K(R->(U;5(?4)Y2'O=>7-CBKK(0@`.?G#D@@A[W7E(0H`Y<W-
  6802. M+]'1*N1W1$W#^PA@:5XC5D)+>+'*]`DA`@`)7B-6U2'^">4A[W7ES8XJT='1
  6803. M(00`"5XC5M7]X<,L"?UN`/UF`>7]X?WEX7RURN0)(>]UY2$Z`.7-S2_1T?UN
  6804. M`OUF`^7=X<-6"=UN`-UF`>7=X=WEX7RURGL)W6X"W68#(R->(U;5(0,*Y2'O
  6805. M=>7-CBK1T='#30DA[W7E(0H`Y<W-+]'1_6X$_68%ZR$&`#ES(W+#JPDA!@`Y
  6806. M7B-6ZUXC5B$&`#ES(W(A!@`Y?B.VRM0)(08`.5XC5NLC(UXC5M4A!PKE(>]U
  6807. MY<V.*M'1T<.9"2'O=>4A"@#ES<TOT='#(PDA[W7E(0H`Y<W-+]'1P_0(R25S
  6808. M(#T@)7,*`"5S.@H`("5S`"T))7,*`,UD*```(0P`.5XC5B$*`!E>%@`A`0#-
  6809. M4RC*0`HA#``Y7B-6ZR,C7B-6U2'#"N7-]AW1T2$!`.4A#@`Y7B-6(0H`&='E
  6810. M;B8`S84IZ^%S(0P`.5XC5B$$`!E>(U;5W>'#=PK=;@#=9@'EW>'=Y>%\M<JH
  6811. M"MUN`MUF`T1-PY$*8&E>(U9"2WBQRJ4*(0(`"5XC5M7-#0K1PXH*PVX*(?[_
  6812. MY2$.`#E>(U8A"@`9T>5N)@#-4RCKX7/)0VER8W5L87(@9&5P96YD96YC>2!F
  6813. M<F]M("5S`,UD*```*N1W1$W#\PI@:5XC5D)+>+'*``O%S0T*T</L"LG-9"@`
  6814. M`"%W"^7-@0O1Y?WA$0H`&5X6`"$$`,U3*,(B"\G];@3]9@7EW>'#-PO=;@#=
  6815. M9@'EW>'=Y>%\M<IV"]UN`MUF`T1-PU$+8&E>(U9"2WBQRG,+(0@`Y2$"``E>
  6816. M(U8A"@`9T>5N)@#-A2GKX7/#2@O#+@O)+E!214-)3U53`,UD*```*N1W1$TA
  6817. MY'?EW>'#I`M@:5XC5D)+W6X`W68!Y=WA>+'*QPLA`@`)7B-6U2$.`#E>(U;5
  6818. MS5X3T='"Q`M@:<G#E`LA"P#ES1%&T41-?+7"W@LA5`SES?8=T6!IW74`W70!
  6819. M(0``ZV!I<R-R(0P`.5XC5M7-2E;1(^7-$4;1Y?WA?+7"$0PA9PSES?8=T2$,
  6820. M`#E>(U;5_>7-)5;1T?WEX>LA`@`)<R-R(0``ZR$$``ES(W)@:1$&`!GES:%7
  6821. M`````.'-NU<A``#K(0H`"7-@:<E.;R!M96UO<GD@9F]R(&YA;64`3F\@;65M
  6822. M;W)Y(&9O<B!N86UE`,UD*```(00`Y<T11M%$37RUPI8,(>T,Y<WV'=$A``#K
  6823. M8&ES(W(A#``Y7B-6(0(`"7,C<B$.`#E^([;"N@Q@:<DA#@`Y7B-6U=WAP]`,
  6824. MW6X`W68!Y=WAW>7A?B.VRMP,P\<,8&G==0#==`$A#@`Y7B-6Z\E.;R!M96UO
  6825. M<GD@9F]R(&1E<&5N9&%N=`#-9"@``"$*`.4A#@`Y7B-6U<WN5M'1Y?WA?+7*
  6826. M*0TA``#]=0`A#``Y7B-6ZUX6`-7-%5?1RE`-(0P`.>5^(V9O(^OA<R-RZRO#
  6827. M*0TA#``Y7B-6ZWZWPEX-R2$$`.7-$4;11$U\M<)U#2'Z#>7-]AW1(0``ZV!I
  6828. M<R-R(0P`.5XC5M7-2E;1(^7-$4;1Y?WA?+7"H`TA$`[ES?8=T2$,`#E>(U;5
  6829. M_>7-)5;1T?WEX>LA`@`)<R-R(0X`.7XCML+'#6!IR2$.`#E>(U;5W>'#W0W=
  6830. M;@#=9@'EW>'=Y>%^([;*Z0W#U`U@:=UU`-UT`2$.`#E>(U;KR4YO(&UE;6]R
  6831. M>2!F;W(@8V]M;6%N9`!.;R!M96UO<GD@9F]R(&-O;6UA;F0`S60H__\A``#K
  6832. M(00`.7,A#0`Y7B-6(00`&5XC5D)+(0``Y=WAPUD.8&GEW>%@:5XC5D)+>+'*
  6833. M=@Y@:1$$`!E^([;*<PXA`0#K(00`.7/#30XA!``Y?K?*H`XA$0`Y?B.VRJ`.
  6834. M(0T`.5XC5NLC(UXC5M4A'`_ES9X>T=$A!@#ES1%&T41-?+7"MPXA00_ES?8=
  6835. MT2$``.M@:7,C<B$/`#E>(U8A`@`)<R-R(1$`.5XC5B$$``ES(W+=Y>%\M<KO
  6836. M#F!IW74`W70!PP$/8&GE(0\`.5XC5B$$`!G1<R-R(00`Y2$/`#E>(U8A"@`9
  6837. MT>5N)@#-A2GKX7/)0V]M;6%N9',@9&5F:6YE9"!T=VEC92!F;W(@=&%R9V5T
  6838. M("5S`$YO(&UE;6]R>2!F;W(@;&EN90#-9"CV_R$6`#E>(U;5(?-WY<TC']'1
  6839. MRFX/R3KS=V\F`!$)`,VC*,J%#R$E$^7-GA[1(?-WZR$,`#ES(W(A#``Y7B-6
  6840. MZUX6`-7-%5?1RK</(0P`.>5^(V9O(^OA<R-RZRO#D`\A/0#E(0X`.5XC5M7-
  6841. MS%;1T>LA"@`Y<R-R>K/*0!`A#``Y7B-6(0H`.7XC9F_-LBC*0!`A"@`Y7B-6
  6842. MZRM>%@`A7`#-HRC*0!`A"@`Y7B-6ZRM$32$*`#E>(U8A#``Y<R-R(0H`.>5^
  6843. M(V9O(^OA<R-RZRM>%@#58&DC1$TKT7-ZL\H]$,,8$,.W#R$*`#E^([;*_1`A
  6844. M``#E(0P`.>5^(V9O(^OA<R-RZRO1<R$*`#E>(U;K7A8`U<T55]'*B!`A"@`Y
  6845. MY7XC9F\CZ^%S(W+K*\-A$"$*`.4A#``Y7B-6U<WN5M'1ZR$,`#ES(W)ZL\JT
  6846. M$"$``.4A#@`Y7B-6Z]%S(?-WZR$,`#ES(W(A#``YY<T&(M%$37RUPM<0(3P3
  6847. MY<V>'M$A"@`Y7B-6U<7-8!31T2$6`#E>(U;5(?-WY<TC']'1ROH0R<-N#R'S
  6848. M=^7-HQ?1(?-WZR$,`#ES(W(A.@#E(0X`.5XC5M7-S%;1T>LA"@`Y<R-R>K/*
  6849. MF1$A#``Y7B-6(0H`.7XC9F_-LBC*F1$A"@`Y7B-6ZRM>%@`A7`#-HRC*F1$A
  6850. M"@`Y7B-6ZRM$32$*`#E>(U8A#``Y<R-R(0H`.>5^(V9O(^OA<R-RZRM>%@#5
  6851. M8&DC1$TKT7-ZL\J6$<-Q$<,0$2$*`#E^([;"JQ$A2A/ES9X>T2$``.4A#``Y
  6852. MY7XC9F\CZ^%S(W+K*]%S(0``ZR$&`#ES(W(A"@`YY<T&(M'K(0P`.7,C<GJS
  6853. MRA<2(0P`.5XC5M7-@0O1ZR$(`#ES(W(A!@`Y7B-6U2$*`#E>(U;5S7H,T='K
  6854. M(08`.7,C<L/-$2$``.4A\W?K(0P`.7,C<M4A\W?ES4I6T=$9(]%S(0``ZR$$
  6855. M`#ES(W(A%@`Y7B-6U2'S>^7-(Q_1T<*2$CKS>V\F`!$)`,VC*,J2$B$$`#E>
  6856. M(U;5(?-[Y<T%#='1ZR$$`#ES(W(A%@`Y7B-6U2'S>^7-(Q_1T<*2$L-3$B$*
  6857. M`#GES08BT>LA#``Y<R-R>K/*\!(A#``Y7B-6U<V!"]'K(0@`.7,C<B$$`#E>
  6858. M(U;5(0@`.5XC5M4A#``Y7B-6U<TF#M'1T2ID=GRUPNT2(0@`.5XC5NLB9';#
  6859. MDA(A%@`Y7B-6(08`&5X6`"$(`,U3*,(3$RK/=Q$!`,VC*,H4$\DA\WOE(?-W
  6860. MY<TE5M'1PVX/R5)U;&5S(&YO="!A;&QO=V5D(&AE<F4`3F\@;6%C<F\@;F%M
  6861. M90!.;R!T87)G971S('!R;W9I9&5D`,UD*```(0P`.5XC5D)+(0X`.5XC5M7=
  6862. MX<.'$V!I(T1-*]WEX2/EW>$K8&E^M\K;$]UN`"8`Y<U!5]'*J!/=;@`F`.7-
  6863. M?5?1PZT3W6X`)@#E8&E>%@#5S4%7T<K($V!I7A8`U<U]5]'#SA-@:5X6`.O1
  6864. MS;(HRM@3P]L3PWD38&E^M\+N$]WEX7ZWPNX3(0``R2$!`,G-9"@``"IB=D1-
  6865. MPP848&E>(U9"2WBQRBD4(0(`"5XC5M4A#@`Y7B-6U<WL5='1PB848&G)P_\3
  6866. M(0``R<UD*/[_(0X`.5XC5M7-\A/1ZR$$`#ES(W)ZL\I;%"$$`#E>(U8A!``9
  6867. M7B-6Z\DA7Q3)`,UD*```*F)V1$W#=!1@:5XC5D)+>+'*HQ0A`@`)7B-6U2$.
  6868. M`#E>(U;5S>Q5T='"H!0A!``)7B-6U<VS1]'#HQ3#;11XL<(2%2$'`.7-$4;1
  6869. M1$U\M<*_%"%1%>7-]AW1*F)VZV!I<R-R8&DB8G8A``#K(08`"7,A#``Y7B-6
  6870. MU<U*5M$CY<T11M'EW>%\M<+X%"%E%>7-]AW1(0P`.5XC5M7=Y<TE5M'1W>7A
  6871. MZR$"``ES(W(A#@`Y7B-6U<U*5M$CY<T11M'EW>%\M<(T%2%Y%>7-]AW1(0X`
  6872. M.5XC5M7=Y<TE5M'1W>7AZR$$``ES(W)@:<E.;R!M96UO<GD@9F]R(&UA8W)O
  6873. M`$YO(&UE;6]R>2!F;W(@;6%C<F\`3F\@;65M;W)Y(&9O<B!M86-R;P#-9"C^
  6874. M_R$0`#E>(U9"2R$.`#E>(U;K7B-6U=WA8&E^M\I6%V!I7A8`(20`S;(HRNH5
  6875. M8&DC1$TK7A8`U=WEX2/EW>$KT7,A$@`Y7B-6Z^5^(V9O*^OA<R-RZR/#-Q<A
  6876. M%``Y7B-6U?WA8&DC1$U>%@`A*`#-HRC*,Q9@:2-$37ZWRC`68&E>%@`A*0#-
  6877. MLBC*,!9@:5X6`-7]Y>$CY?WA*]%SPP46PUL68&E^M\)+%B$D`.7=Y>$CY=WA
  6878. M*]%SPU878&E>%@#5_>7A(^7]X2O1<R$``/UU`&!I?K?*;A9@:2-$32LA%``Y
  6879. M7B-6U<WR$]'K(00`.7,C<GJSPJ`6(6T7Y2$6`#E>(U;5S6`4T='K(00`.7,C
  6880. M<B$$`#E>(U8A!@`9?K?*QQ8A!``Y7B-6ZR,C7B-6U2%N%^7-]AW1T2$!`.4A
  6881. M!@`Y7B-6(08`&=%SW>7AY2$0`#E>(U;KT7,C<B$4`#E>(U;5(10`.5XC5M4A
  6882. M"``Y7B-6(00`&5XC5M4A%``Y7B-6U<V-%>LA"``Y^2$.`#E>(U;K7B-6U=WA
  6883. M(0``Y2$&`#E>(U8A!@`9T7,A$@`Y7B-6ZUXC5B$``,W#*,I3%R&,%^7-GA[1
  6884. MPZD5(0``W74`W>7AY2$0`#E>(U;KT7,C<LD`26YF:6YI=&5L>2!R96-U<G-I
  6885. M=F4@;6%C<F\@)7,`17AP86YD960@;&EN92!T;V\@;&EN90#-9"C\_R'_`^LA
  6886. M!``Y<R-R(1``.5XC5B$&`#ES(W(A$``Y7B-6U2'^:.7-)5;1T2'^;.4A!@`Y
  6887. MY2'^:.4A#``YY<V-%>LA"``Y^<G-9"C]_R$/`#E>(U8A!0`Y<R-R(04`.>5^
  6888. M(V9O*^OA<R-R(0``S=XHRC<8(04`.5XC5NLIZR$1`#E^(V9O&5XC5M7-51[1
  6889. MPP$8(;T<Y<T"5=$A#P`YY7XC9F\KZ^%S(W+K(Q$!`.O-W2C*8!@AR1S#=Q@A
  6890. M$0`YY7XC9F\C(^OA<R-RZRLK7B-6ZR)@=B'.'")@=B$/`#E>(U8A``#-WBC*
  6891. M#AHA$0`Y7B-6ZUXC5NM>%@`A+0#-HRC*#AHA#P`YY7XC9F\KZ^%S(W+K(R$1
  6892. M`#GE?B-F;R,CZ^%S(W+K*RM>(U9"2V!I(T1-?K?*"QI@:5X6`-7-+%?1RO48
  6893. M8&E>%@#5S7U7T</[&&!I7A8`Z\/=&6!I(T1-?K?"/ADA#P`YY7XC9F\KZ^%S
  6894. M(W+K(Q$``.O-PRC*)AG-BQTA$0`YY7XC9F\C(^OA<R-RZRLK7B-60DM@:2+@
  6895. M=\,+&F!I(T1-?K?"AADA#P`YY7XC9F\KZ^%S(W+K(Q$``.O-PRC*;AG-BQTA
  6896. M$0`YY7XC9F\C(^OA<R-RZRLK7B-60DO%S2A5T2+B=\,+&B$``'TR9W;#"!HA
  6897. M``!],MEWPP@:(0$`?3+O=\,(&B$!`'TR\G?#"!HA``!],O!WPP@:(0$`?3)F
  6898. M=L,(&B$!`'TR\7?#"!K-BQW#"!K-XBD)`&8`_AAM`$89;@"1&6D`FQES`*49
  6899. M<`"O&7(`N1ET`,,9<0#-&=<9P]$8PX`8(=,<Y2K@=^7-[%71T<(G&B'9=2+<
  6900. M=\.7&BK@=WRUPG4:(>(<Y2'5'.7-S2K1T2+<=WRUPG(:(>T<Y2'D'.7-S2K1
  6901. MT2+<=WRUPG(:*LUWY2$<'>4A#QWE(>\<Y<WV'>LA"``Y^<.7&B$E'>4JX'?E
  6902. MS<TJT=$BW'=\M<*7&BK@=^4A)QWES?8=T=$Z\'=O)@!\M<JE<$)B$W'>4A
  6903. M-1WES6`4T=$A#P`Y?B.VRB\;(3T`Y2$3`#E>(U;K7B-6U<W,5M'11$U\M<HO
  6904. M&V!I7A8`(00`.7,A``#K8&ES8&DCY2$3`#E>(U;K7B-6U<U@%-'1(00`.5X6
  6905. M`&!I<R$1`#GE?B-F;R,CZ^%S(W+K*RLA#P`YY7XC9F\KZ^%S(W+K(\.R&BK<
  6906. M=^7-5`_1*MQWY<UD,-$A```BWG<Z\G=O)@!\M<I3&\U_""$Y'>7-@0O1Y=WA
  6907. MW6X*)@`1!`#-4RC*<QLA`0!],N]W(4$=Y<V!"]'EW>'=;@HF`!$$`,U3*,J3
  6908. M&R$!`'TRV7?-`0LZ9W9O)@!\M<*H&R$``'TR[W<J9'9\M<*X&R%)'>7-]AW1
  6909. MS=\*(0\`.7XCML+=&R$``.4J9';ES=`%T='K(04`.7,C<L-C'"$/`#GE?B-F
  6910. M;ROKX7,C<NLC?+7*8QPZ\G=O)@!\M<(I'#KO=V\F`'RUPBD<(5P=Y2$3`#E>
  6911. M(U;K7B-6U<WL5='1PBD<(6$=Y<UK*M$A``#E(1,`.>5^(V9O(R/KX7,C<NLK
  6912. M*UXC5M7-@0O1Y<W0!='1ZR$%`#GE?B-F;\V%*>OA<R-RP]T;*M%W?+7"<QPA
  6913. M``#ES;\]T2%P'>4A:QWES0,!T=$A?AWE(7P=Y<T#`='1*M%WY<UD,-$A``#E
  6914. M(6P`Y<V*.='1(7\=Y2&``.7-)5;1T2'_`.4A+P#ES8HYT=')34%+14!`0"Y3
  6915. M54(`;6%K90!M86ME`"T`34%+149)3$4N1$%4`'(`34%+149)3$4`<@!#86XG
  6916. M="!O<&5N("5S(&]R("5S.R!E<G)O<B`E,#)X`$U!2T5&24Q%+D1!5`!-04M%
  6917. M1DE,10!R`$-A;B=T(&]P96X@)7,`)``D`"Y324Q%3E0`+DE'3D]210!.;R!T
  6918. M87)G971S(&1E9FEN960`;&]V90!.;W0@=V%R(0H`97)A(`!-04M%0$!`+E-5
  6919. M0@`*``!-04M%0$!`+E-50@#-9"@``"%H=N4J8';E(;(=Y2'O=>7-CBKK(0@`
  6920. M.?DA`0#ES;\]T<E5<V%G93H@)7,@6RUF(&UA:V5F:6QE72!;+6YP<G-T72!;
  6921. M;6%C<F\]=F%L("XN+ET@6W1A<F=E="AS*2`N+BY="B5S`,UD*```*F!VY2%0
  6922. M'N4A[W7ES8XJT='1(1(`.5XC5M4A$@`Y7B-6U2$2`#E>(U;5(1(`.5XC5M4A
  6923. M[W7ES8XJZR$*`#GY(>]UY2$*`.7-S2_1T2$!`.7-OSW1R25S.B``S60H__\A
  6924. M#0`Y7B-60DO#;!Y@:2-$32M@:5X6`"$$`#ES>K/*G1XA!``Y7A8`U<TL5]'*
  6925. MFAXA!``Y7A8`U<U]5]'K8&ESPV8>R<UD*```*F!VY2$2'^4A[W7ES8XJT='1
  6926. M(1(`.5XC5M4A$@`Y7B-6U2$2`#E>(U;5(1(`.5XC5M4A[W7ES8XJZR$*`#GY
  6927. M*MYW?+7*_!XJWG?E(1<?Y2'O=>7-CBK1T=$A[W7E(0H`Y<W-+]'1(0$`Y<V_
  6928. M/='))7,Z(``@;VX@;&EN92`E9`#-9"CV_R$``.LA"@`Y<R-R(0``ZR$(`#ES
  6929. M(W(A&``Y7B-6U2$`!.LA#``Y?B-F;\VW*>4A&@`Y7B-6(0X`.7XC9F\9Y<VB
  6930. M+-'1T<)Z'R$!`"+/=R$!`,DA&@#E(1@`.5XC5B$,`#E^(V9O&>7-S%;1T<JA
  6931. M'R$!`"+/=R$!`,DA#0#E(1@`.5XC5B$,`#E^(V9O&>7-S%;1T41-?+7*UA\A
  6932. M`0`)7A8`8&ES8&DC1$U^M\+"'R$(`#E^([;*@"`A%@`Y7B-6(0H`.7XC9F\9
  6933. M1$W#^Q]@:2-$32M@:5X6`"$@`,VC*,(7(&!I7A8`(0D`S:,HRAH@P_4?8&GK
  6934. M(18`.7XC9F_-MRGK(0H`.7XC9F_-MRDKZR$&`#ES(W(A!@`Y7B-6(0``S=XH
  6935. MRH`@(18`.5XC5B$*`#E^(V9O&2-$36!IZR$&`#E^(V9O&5X6`&!I<WJSRH`@
  6936. M8&DC1$TKPV`@(18`.5XC5B$*`#E^(V9O&>7-51[1*MYW(R+>=RLA"@#E(1@`
  6937. M.5XC5B$,`#E^(V9O&>7-S%;1T41-?+7"QB`A^"'ES9X>T2'__PE>%@`A7`#-
  6938. MHRC*!2$A``#E8&DK1$W1<V!IZR$6`#E^(V9OS;<IZR$*`#ES(W(A`0#K(0@`
  6939. M.7,C<L,^'R$6`#E>(U9"2R$C`.7%S<Q6T='K(0P`.7,C<GJSRI@A8&GK(0P`
  6940. M.7XC9F_-LBC*F"$A#``Y7B-6ZRM>%@`A7`#-HRC*F"$A#``Y7B-6ZROK(00`
  6941. M.7,C<B$,`#E>(U9"2R$,`#GE?B-F;R/KX7,C<NLK7A8`U2$&`#GE?B-F;R/K
  6942. MX7,C<NLKT7-ZL\J5(<-E(<,.(2$,`#E^([;*OR$A"@#E(0X`.5XC5NO1<R$`
  6943. M`.4A#@`Y7B-6ZR/1<R$6`#E>(U9"2V!I7A8`U<T55]'*WB%@:2-$32O#R"%@
  6944. M:7ZWRNDA(0``R2$``.LA"@`Y<R-RPSX?R4QI;F4@=&]O(&QO;F<`S60H```A
  6945. M#``Y7B-6ZUXC5NM>%@#5S157T<HZ(B$,`#E>(U;KY7XC9F\CZ^%S(W+K*\,+
  6946. M(B$,`#E>(U;K7B-6ZWZWPD\B(0``R2$,`#E>(U;K7B-60DLA#``Y7B-6ZUXC
  6947. M5NM^M\J<(B$,`#E>(U;K7B-6ZUX6`-7-%5?1PIPB(0P`.5XC5NOE?B-F;R/K
  6948. MX7,C<NLKPUPB(0``Y2$.`#E>(U;KY7XC9F\CZ^%S(W+K*]%S8&G)S60H```A
  6949. M+@#E(0X`.5XC5M7-[E;1T<G-9"CT_R'S=T1-(1@`.5XC5NLC(UXC5M7=X=WE
  6950. MS;HBT>7]X=WEX?WET>O-%RK*&"/=Y>$CY=WA*UX6`-5@:2-$32O1<\/T(B$`
  6951. M`.M@:7,A\W?E(<HEY<U@%-'1$00`&5XC5B$.`#ES(W(AS"7ES8$+T>LA"@`Y
  6952. M<R-R(0H`&5X6`"$$`,U3*,)>(R$``,DA"@`Y7B-6(00`&5XC5B$(`#ES(W+#
  6953. MB",A"``Y7B-6ZUXC5B$(`#ES(W(A"``Y?B.VRL8E(0@`.5XC5NLC(UXC5B$&
  6954. M`#ES(W+#NR,A!@`Y7B-6ZUXC5B$&`#ES(W(A!@`Y?B.VRL,E(08`.5XC5NLC
  6955. M(UXC5NLC(UXC5B$$`#ES(W(A!``Y7B-6U<U*5M'E_>7-2E;1T1DC$0`$Z\W"
  6956. M*,H')"'6)>7-]AW1(?-W1$TA!``Y7B-6U=WAW>7A(^7=X2M>%@#58&DC1$TK
  6957. MT7-ZL\HR),,6)&!I*T1-(_WEX>7=X=WEX2/EW>$K7A8`U6!I(T1-*]%S>K/*
  6958. M6B3#/B0A\W?ES8$+T>LA"@`Y<R-R(0H`.5XC5B$*`!E>%@`A!`#-4RC*P"4A
  6959. M\W=$32$.`#E>(U;5W>$A!``Y7B-6U<U*5M'E(1``.5XC5M7-2E;1T1DC$0`$
  6960. MZ\W"*,J^)"'K)>7-]AW1W>7A(^7=X2M>%@#58&DC1$TKT7-ZL\K:),.^)&!I
  6961. M*T1-(R$$`#E>(U;5W>'=Y>$CY=WA*UX6`-5@:2-$32O1<WJSR@8EP^HD(?-W
  6962. MY<V!"]'K(0P`.7,C<B$,`#E>(U8A!@`9S:A7S1E8PDPE(0P`.5XC5B$&`!GE
  6963. M(0X`.5XC5NLC(UXC5M7--%O1X<V[5R$,`#E>(U8A!@`9S:A7S1E8RL`E(0``
  6964. MY2$.`#E>(U;5S7H,T='K(08`.7,C<B$*`#E>(U8A!``97B-6(00`&5XC5M4A
  6965. M"``Y7B-6U2$<`#E>(U;5S28.T='1(0P`.5XC5NLC(UXC5M4A`B;ES6`4T=$A
  6966. M`0#)PZDCPW8C(0``R2H`+G-U9F9I>&5S`%-U9F9I>"!R=6QE('1O;R!L;VYG
  6967. M`$EM<&QI8VET(&YA;64@=&]O(&QO;F<`/`#-9"CZ_R&T)^4AL"?ES6`4T=$A
  6968. MP"?E(;DGY<U@%-'1(<@GY2'!)^7-8!31T2$``.4ARR?ES04-T='K(0@`.7,C
  6969. M<B'F)^7-@0O1ZR$&`#ES(W(A"``Y7B-6U2$``.4A"@`Y7B-6U<TF#M'1T2'O
  6970. M)^4AZR?ES6`4T=$A_2?E(?0GY<U@%-'1(0XHY2$%*.7-8!31T2$``.4A$2CE
  6971. MS04-T='K(0@`.7,C<B$P*.7-@0O1ZR$&`#ES(W(A"``Y7B-6U2$``.4A"@`Y
  6972. M7B-6U<TF#M'1T2$Y*.7-@0O1ZR$&`#ES(W(A``#E(0@`.5XC5M7->@S1T>LA
  6973. M!``Y<R-R(3XHY<V!"]'K(08`.7,C<B$$`#E>(U;5(0@`.5XC5M7->@S1T>LA
  6974. M!``Y<R-R(4,HY<V!"]'K(08`.7,C<B$$`#E>(U;5(0@`.5XC5M7->@S1T>LA
  6975. M!``Y<R-R(48HY<V!"]'K(08`.7,C<B$$`#E>(U;5(0@`.5XC5M7->@S1T>LA
  6976. M!``Y<R-R(4DHY<V!"]'K(08`.7,C<B$``.4A!@`Y7B-6U2$*`#E>(U;5S28.
  6977. MT='1R6-C8P!C8RUC`&-F;&%G<P``8W=H:6-H`"0J`"0H8V-C*2`D*&-F;&%G
  6978. M<RD@)"AC=VAI8V@I`"YC+F\`87-M`')M86,`87-M9FQA9W,`)"106B!36@!A
  6979. M<VUW:&EC:``D*@`D*&%S;2D@)"AA<VUW:&EC:"D@)"AA<VUF;&%G<RD`+F%S
  6980. M;2YR96P`+F%S;0`N<F5L`"YC`"YO`"YS=69F:7AE<P!\HF=]HV^TR7PO9WTO
  6981. M;[3)Z>'=Y?WEQ5XC5B-$32$``#GK.?G58&G-8RCKX?G!_>'=X>M\M<EZK#+_
  6982. M<,T(*>LZ_W"W^G,I?;3)S2$IZWVTR7V3PJTH?)+*O"@A``"OR7V3PKPH?)+*
  6983. MK2@A`0!]M,GK?*KZU2A]DWR:/SX`S@!O)@#)>@?F`6\F`,GK?*KZ[RA]DWR:
  6984. M/@#.`&\F`,E\!^8!;R8`R7HR_W#-""DZ_W"W^G,I?+7)?+?R$RDO9WTO;R-Z
  6985. MM_(A*2]7>R]?$\,A*<5$32$``#X0,OYP*>LIZ](T*2-]D6]\F&?23"D).OYP
  6986. M/3+^<,(L*<%]M,D3.OYP/3+^<,(L*<%]M,G%1$TA```^$"GK*>O2:RD)/<)C
  6987. M*<%]M,E]+V]\+V<C?;3)?+7*O"C#K2A\LF=]LV^TR>M[YA]?RK0I?+3R+"I\
  6988. M-Q]G?1]O'<*:*;3)ZWOF'U_*M"DI'<*O*7VTR>M]DV]\FF>UR>OAQ4XC1B/K
  6989. M">M.(T8C>KC:V"E[N=+<*2,C&1E>(U;KP>GKX<5"2UXC5AMZM_H"*B-YOLK\
  6990. M*2,C(\/J*2-XOL+W*2-^(V9OP>GK?9-\FCX`/\X`;R8`R>M]DWR:/@#.`&\F
  6991. M`,GK>^8?7\JT*7RW'V=]'V\=PBPJM,E\JF=]JV^TR>VPR=$A`@`YW>7]Y<75
  6992. M$0!Q!@9^$B,3!<)4*B%A*N/IP?WAW>%\M<DWR<UD*```(>1U(@9Q(0X`.>4A
  6993. M#@`Y7B-6U2&V*N7-+S/1T=')S60H```A#``Y7B-6ZR(&<2$0`#GE(1``.5XC
  6994. M5M4AMBKES2\ST='1R<UD*```*@9QY2$.`#E>(U;5S?4MT=')S60H```AV75$
  6995. M36!I$08`&7ZWROLJ8&D1"P`91$T14G;KS0DJRO@J(0``R</7*B$.`#E>(U;K
  6996. M(UX6`"$K`,VC*.7=X2$.`#E>(U;K7A8`Z\/S*]WEX7RURBTK(0(`PS`K(0``
  6997. MY2$.`#E>(U;5S5U)T='K(0<`"7,A___-HRC*42LA``#)PP8LW>7A?+7*8BLA
  6998. M`@##92LA`0`1``/-A2GE(0X`.5XC5M7-74G1T>LA!P`)<R'__\VC*,J,*R$`
  6999. M`,G#!BS=Y>%\M<J=*R$"`,.@*R$!`!$``<V%*>4A#@`Y7B-6U<U=2='1ZR$'
  7000. M``ES(?__S:,HRL<K(0``R2$"`.7-H5<`````S<Y7(0<`"5X6`-7-YE+K(0@`
  7001. M.?G#!BPA^O\BS7<A``#)S>(I`P!R`!\K=P!4*V$`CROI*R$!`.LA!@`)<R$`
  7002. M!.LA"0`)<R-R(0``ZV!I<R-R(0(`"7,C<B$$``ES(W)@:<G-9"@``"$,`#E>
  7003. M(U9"2R'9=>7-*RW1Y=WA$?__S;(HRG$LW>7A$0H`S;(HRG$LW>7AY6!I(T1-
  7004. M*]%SPT(L(0``ZV!I<]WEX1'__\VC*,J9+&!IZR$,`#E^(V9OS:,HRIDL(0``
  7005. MR2$,`#E>(U;KR<UD*```(0P`.5XC5M7=X2$.`#GE?B-F;ROKX7,C<B$``,W>
  7006. M*,K[+"$0`#E>(U;5S2LMT41-$?__S;(HROLL8&GEW>7A(^7=X2O1<V!I$0H`
  7007. MS:,HPOLLP[$L(0``W74`8&D1___-HRC*(BW=Y>'K(0P`.7XC9F_-HRC*(BTA
  7008. M``#)(0P`.5XC5NO)S60H```A#``Y3B-&Q<V)+M$1?P#-4RCEW>'#7"U@:>5^
  7009. M(V9O*^OA<R-R(?__R<,W+<WB*0,`&@!(+0T`62T``%DM;RW=Y>')S60H```A
  7010. M#``Y3B-&8&E^M\JI+2'D=>5@:2-$32M>%@#5S?4MT=$1___-HRC*IBTA___)
  7011. MPW\M(>1UY2$*`.7-]2W1T<G-9"@``"$,`#E.(T9@:7ZWRO$M(0X`.5XC5M5@
  7012. M:2-$32M>%@#5S?4MT=$1___-HRC*[BTA___)P\,M(0``R<UD*```(0P`.4XC
  7013. M1B$.`#E>(U;5W>$A?P!06<U3*$1-8&D1"@#-HRC*."[=Y2$-`.7-S2_1T1'_
  7014. M_\VC*,HX+B'__\G=Y<7-S2_1T<G-9"@``"$,`#E>(U;5S8DNT41-$?__S:,H
  7015. MPG4N(0P`.5XC5M7-B2[1Y=WA$?__S:,HRGDN(?__R=WEX1$(`.O-IRE06<V%
  7016. M*<G-9"@``"$,`#E.(T8A`@`)7B-6U6!I7B-6X<T)*LI-+R$&``E>%@`A"`#-
  7017. M4RC*O2XA___)(?O_Y6!I$08`&='E;B8`S5,HZ^%S8&D1!``9?B.VPN,NQ<U*
  7018. M,M$A"0`)7B-6U2$$``E>(U;5(0<`"5X6`-7-V$S1T='EW>$1``#KS<,HRC4O
  7019. MW>7A?+7"'"\A"`##'R\A$`#E8&D1!@`9T>5N)@#-A2GKX7,A___)(00`"5XC
  7020. M5F!I<R-RW>7A&>LA`@`)<R-R8&GE?B-F;R/KX7,C<NLK7A8`(?\`S5,HR<UD
  7021. M*```(>]UY2$.`#E>(U;5S<TOT=')S60H```A#``Y3B-&(0X`.5XC5M7%S<TO
  7022. MT=$1``#KS=THRJ4O(?__R2$.`#E>(U;58&D1"`#KS20JY<W-+]'1$0``Z\W=
  7023. M*,K*+R'__\E@:<G-9"@``"$.`#E.(T8A`@`)7B-6U6!I7B-6X<T)*LH","$,
  7024. M`#E>(U8A_P#-4RCEQ<T#,='1R2$,`#E>(U;58&GE?B-F;R/KX7,C<NLKT7,A
  7025. M_P#-4RC)S60H```A___E(0X`.5XC5M7-`S'1T<G-9"@``"'9=41-8&D14G;K
  7026. MS1<JRF,P8&D1"P`91$T1]?\9Y<UD,-'#0S#)S60H_O\A#@`Y3B-&(0``ZR$$
  7027. M`#ES(W)@:1$&`!E^M\KQ,"$&``E>%@`A!`#-4RC*J#`A___EQ<T#,='1ZR$$
  7028. M`#ES(W(A!P`)7A8`U<W)2M'K(00`.>5^(V9OS84IZ^%S(W(A!@`)7A8`(0(`
  7029. MS5,HRO$P*EIVY2$$``E>(U;KT7,C<B$$``E>(U;K(EIV(0``ZR$&``ES(00`
  7030. M.5XC5NO)S60H```A#``Y3B-&(08`"5X6`"$$`,U3*,IM,2$$``E>(U;58&E>
  7031. M(U;AS;<IY=WAW>4A!``)7B-6U2$'``E>%@#5S110T='1$?__S:,HRFTQ(1``
  7032. MY6!I$08`&='E;B8`S84IZ^%S(?__R2$.`#E>(U8A___-HRC*IC$A^__E8&D1
  7033. M!@`9T>5N)@#-4RCKX7,A``#K8&ES(W(A`@`)<R-R(0``R6!I$00`&7XCML*W
  7034. M,<7-2C+1(0D`"5XC5B$!`,VC*,KP,2$!`.4A$``YY2$'``E>%@#5S110T='1
  7035. M$?__S:,HPE0Q(0X`.5XC5NO)(00`"5XC5F!I<R-R(0D`"5XC5M4A!``)7B-6
  7036. MX1GK(0(`"7,C<B$$`.5@:1$&`!G1Y6XF`,V%*>OA<R$.`#E>(U;58&GE?B-F
  7037. M;R/KX7,C<NLKT7,A_P#-4RC)S60H_O\A#@`Y3B-&(0D`"5XC5B$!`,VC*,IU
  7038. M,F!I$0@`&>LA!``)<R-RR2I:=GRURI4R*EIVZR$$`#ES(W(J6G9>(U;K(EIV
  7039. MP[PR(0D`"5XC5M7-E$;1ZR$$`#ES(W)ZL\*\,B$!`.LA"0`)<R-RPV8R(0(`
  7040. MY6!I$08`&='E;B8`S84IZ^%S(00`.5XC5B$$``ES(W+)S60H```A#``Y7B-6
  7041. MZR((<2$0`#GE(1``.5XC5M4A$3/ES2\ST='1(0``Y2H(<=%SR<UD*```(0P`
  7042. M.5XC5M4J"'$C(@AQ*]%S(?\`S5,HR<UD*+[_(4X`.4XC1B%0`#E>(U;5W>'=
  7043. MY>$CY=WA*UX6`-7]X7JSRD$X_>7A$24`S:,HRC8X(0``ZR$:`#ES(0$`ZR%$
  7044. M`#ES(W(A(`#K(4(`.7,C<B'_?^LA0``Y<R-RW6X`)@#E_>$1+0#-HRC*N#,A
  7045. M``#K(40`.7,C<MWEX2/EW>$K7A8`U?WA_>7A$3``S:,HRL\S(3``ZR%"`#ES
  7046. M(W(A``#K(3X`.7,C<MWEX2/EW>$K7A8`U?WA(3``S<(HRAXT_>7A$3D`Z\W#
  7047. M*,H>-"$^`#E>(U8A"@#-6RG]Y=$9$=#_&>LA/@`Y<R-RP]HS_>7A$2X`S:,H
  7048. MRGDT(0``ZR%``#ES(W+=Y>$CY=WA*UX6`-7]X2$P`,W"*,IY-/WEX1$Y`.O-
  7049. MPRC*>30A0``Y7B-6(0H`S5LI_>71&1'0_QGK(4``.7,C<L,U-/WEX1%L`,VC
  7050. M*,JY--WEX2/EW>$K7A8`U?WA(3H`.>4A5``YY7XC9F\1!``9Z^%S(W+K$?S_
  7051. M&<VH5^'-NU?#6#7]Y>$19`#-HRC*ZS0A.@`YY2%4`#GE?B-F;R,CZ^%S(W+K
  7052. M*RM>(U;KS1A;X<V[5\-8-?WEX1%E`,VC*,(/-?WEX1%F`,VC*,(/-?WEX1%G
  7053. M`,VC*,HU-2$$`#GE(50`.>5^(V9O$0@`&>OA<R-RZQ'X_QG-,UOAS3-;PU@U
  7054. M(3H`.>4A5``YY7XC9F\C(^OA<R-RZRLK7B-6Z\T*6^'-NU?]Y>'#`C<A&@`Y
  7055. MY2$(`.4A/@`YS:A7S<Y7S:0XZR$(`#GY(30`.7,C<L,I-R$Z`#G-J%?-DU<`
  7056. M````S>!:RM<U(1H`.>4A"@#E(3X`.<VH5\T)6,W.5\U"..LA"``Y^2$T`#ES
  7057. M(W(A+0#E(38`.>5^(V9O*^OA<R-RZ]%SP_HU(1H`.>4A"@#E(3X`.<VH5\W.
  7058. M5\U"..LA"``Y^2$T`#ES(W+#*3<A&@`YY2$*`.4A/@`YS:A7S<Y7S:0XZR$(
  7059. M`#GY(30`.7,C<L,I-R$:`#GE(1``Y2$^`#G-J%?-SE?-I#CK(0@`.?DA-``Y
  7060. M<R-RPRDW(3H`.<VH5\TK6^LA-``Y<R-RU<U*5M'K(3@`.7,C<L-!-_WEX1%E
  7061. M`,VC*,I]-B$``,.`-B$!`.4A0@`Y7B-6(?]_S:,HRI<V(08`PY\V(4(`.5XC
  7062. M5NOE(1``.>4A"@`YS3-;S3-;S3-;ZR$.`#GY(0P`.>LA-``Y<R-RU<U*5M'K
  7063. M(3@`.7,C<B'(`.LA0``Y<R-RPT$W(3H`.<VH5\TK6^7]X?WEX>4A&P`YZR$V
  7064. M`#ES(W+KT7/#*3?-XBD(`&\`7C5D`(0U=0#]-7@`(S9S`$DV90!K-F8`:S9C
  7065. M`-\V[#8A&@`YZR$T`#E^(V9OS;<IZR$X`#ES(W(A.``Y7B-6(4``.7XC9F_-
  7066. MWBC*9#<A0``Y7B-6(3@`.7,C<B%$`#E^([;*GS<A/@`YY7XC9F\KZ^%S(W+K
  7067. M(^LA.``Y?B-F;\W>*,J?-R%"`#E>(U;58&G-8RC1PVXW(0``ZR$V`#ES(W+#
  7068. MO#<A-@`YY7XC9F\CZ^%S(W(A-``Y7B-6ZWZWROPW(38`.5XC5B%``#E^(V9O
  7069. MS=THROPW(30`.>5^(V9O(^OA<R-RZRM>%@#58&G-8RC1PZTW(40`.7XCML(S
  7070. M."$^`#GE?B-F;ROKX7,C<NLCZR$X`#E^(V9OS=XHRC,X(2``Y6!IS6,HT<,&
  7071. M.,,^./WE8&G-8RC1PT4SR<UD*```(1``.4XC1B$2`#E>(U;5W>%@:<T86\W.
  7072. M5R$0`#G-J%?-YE?-CEG-*UL1"G$97A8`U=WEX2OEW>'1<R$,`#GE8&G-&%O-
  7073. M^E?AY<VH5\U46>'-NU?-&5C"6#C=Y>')S60H```A$``Y3B-&(1(`.5XC5M7=
  7074. MX2$,`#G-J%?-DU<`````S>!:REHY(0P`.<VH5\TK6Q$!`,U3*.7]X2$,`#GE
  7075. M(0X`.<VH5\V35P$```#-"UG-DU?___]_S9!8X<V[5V!I$0$`Z\V-*<T86\W.
  7076. M5R$0`#G-J%?-YE?-CEG-*ULI_>71&1$*<1E>%@#5W>7A*^7=X=%S(0P`.>5@
  7077. M:1$!`.O-C2G-&%O-^E?AY<VH5\U46>'-NU?=Y<4A$``YS:A7S<Y7S4(XZR$(
  7078. M`#GYZ\DJ!@#YS6\Z`0``S04`PWDYS40JS8TYZ\G-1"HJ`'%$32H"<>O-!0#K
  7079. M;R8`R<U$*LVK.6\F`,G-1"HJ`''K*@$`*RLK&1D9ZRH"<41-*@1QZ^G%(00`
  7080. M.4XC1B->(U9K8C8`(SX+-B`C/<+6.3X$-@`C/<+?.>L#"OXZ"SX`PA(Z"N9_
  7081. M_D':3#K^6](#.M9`PP\Z_F':3#K^>]),.M9@=P,#(QX('`H#_B[*+3JWRD8Z
  7082. M'<H5.LU3.G<CPQ8Z'7N%;WS.`&<>`PH#M\I&.LU3.G<C'<(W.B$``*_!R2'_
  7083. M_WRWP<G^8=C^>]#6(,DD4$E012Y)3@`D4$E012Y/550`S60H```A?P#E(8$`
  7084. MY2$;<N7-L%71T=$A``#E.H``;R8`$7\`S5,H$1MR&=%S(0``?3*``"&8/2(;
  7085. M<2$;<N7=X2$!`"*;<BJ;<A&``.O-W2C*A3W=;@`F`!$@`,VC*,+>.MUN`"8`
  7086. M$0D`S:,HRN@ZW>7A(^7=X</".MUN`"8`?+7"]3K#A3W=;@`F`!%\`,VC*,HA
  7087. M.R$!`"*=<MWEX2/EW>$BGW(J7G;E_>$A`0!$3</J.]UN`"8`$3X`S:,HRC<[
  7088. M(0$`1$W#2CO=;@`F`!$\`,VC*,IQ/"$``$1-W>7A(^7=X5X6`"$@`,VC*,)K
  7089. M.]UN`"8`$0D`S:,HRFX[PTH[W>7AY?WAW>7A(^7=X7ZWRK`[W6X`)@`1(`#-
  7090. MHRC"G#O=;@`F`!$)`,VC*,JM.R$``.7=Y>$CY=WA*]%SP[`[PW0[>+'"ZCO]
  7091. MY<UZ1='*ZCLA`0#E*IMR*1$;<1GE_>7-(4+1T=$1`0#-HRC*ZCLJFW(I$1MQ
  7092. M&5XC5M7]X<7-R4K1>+'*+3PAM@'E_>7-/4G1T41-8&DI*2D1,7<97B-6(:Q,
  7093. MS:,HRBH\(0`$Y6!I$0L`S5LI$>)U&=%S(W+#.CPA``#E_>7-74G1T41-8&D1
  7094. M___-HRC*8SPAF3WES=$_T?WES=$_T2&\/>7-T3_1(0H`Y<V_/=$JG7)\M<IN
  7095. M/,.%/<."/=UN`"8`$2(`S:,HRM0\W>7A(^7=X>4JFW(C(IMR*RD1&W$9T7,C
  7096. M<MWEX7ZWRKD\W6X`)@`1(@#-LBC*N3S=Y>$CY=WA*\.8/-UN`"8`?+7*T3PA
  7097. M``#EW>7A(^7=X2O1<\."/=UN`"8`$3(`S:,HR@`]W6X!)@`1/@#-HRC*`#W=
  7098. MY>$CY=WA*R$"`$1-PTH[W>7->D71RC$](8``ZRJ;<LVW*2OE*IMR*1$;<1GE
  7099. MW>7-(4+1T='K*IMR&2*;<L-&/=WEX>4JFW(C(IMR*RD1&W$9T7,C<MWEX2/E
  7100. MW>%^M\J"/=UN`"8`$2``S:,HPFX]W6X`)@`1"0#-HRC*?STA``#EW>7A(^7=
  7101. MX2O1<\."/<-&/<.U.B$;<>4JFW+ES>X7T='ES;\]T<D`0V%N)W0@;W!E;B!F
  7102. M:6QE(&9O<B!R961I<F5C=&EO;CH@/``^"@#-9"@``,TY,"I<=N7-`E71(0P`
  7103. M.7XCMLKA/2&I/N7-`E71*IUR?+7*I3XJ7';E*EYVY<VJ5-'1*I]R7A8`(2``
  7104. MS:,HPA0^*I]R7A8`(0D`S:,HRA\^*I]R(R*?<BO#]CTJGW)$36!I?K?*4#Y@
  7105. M:5X6`"$@`,VR*,I0/F!I7A8`(0D`S;(HRE`^8&DC1$TKPR0^8&E^M\IC/B$`
  7106. M`.5@:2-$32O1<R$``.7%*EQVY2&S/N4JGW+ES?`^ZR$*`#GY(;4^Y<W1/]$J
  7107. MGW+ES=$_T2'9/N7-T3_1(=X^Y<T"5=$AZ#[ES0)5T<UY.<E!.B0D)"Y354(`
  7108. M/`!#;W5L9&XG="!O<&5N(&9I;&4@870@96YD(&]F('!I<&4Z(``N0T]-`$$Z
  7109. M)"0D+E-50@`D)"0N4U5"`,UD*```(0P`.5XC5M4A@`#ES256T=$AS#_E(8``
  7110. MY<V05M'1(5P`Y2&``.7-'4#1T2%<`.4A#P#ES8HYT=$1_P#-4R@1_P#-HRC*
  7111. M0#\A``#)(8$`Y=WA(0X`.>7]X<-:/_WEX2,CY?WA*RO]Y>%^([;*MS_=Y>$1
  7112. MSP#KS1<JRK<__6X`_68!1$W#CS]@:2-$32M>%@#5W>7A(^7=X2O1<V!I?K?*
  7113. MIC_=Y>$1SP#KS1<JRJ8_PWL_(2``Y=WEX2/EW>$KT7/#4#\A``#==0#=Y>$1
  7114. M@/\9?3*``,WT1<DN0T]-`,UD*```(0P`.5XC5NM^M\H$0"$,`#GE?B-F;R/K
  7115. MX7,C<NLK7A8`U2$"`.7-BCG1T</6/\G-9"@``"']_R+-=R'__\G-9"@``"$`
  7116. M`,G-9"@``"$D`.7=X2$.`#E>(U9"2\-`0"$``.5@:2-$32O1<]WEX2OEW>$1
  7117. M``#KS<(HRE1`PS1`(0P`.5XC5NM^M\JH0"$,`#E>(U;K(UX6`"$Z`,VC*,JH
  7118. M0"$,`#E>(U;K7A8`U<UG5]$1P/\9Y2$0`#E>(U;KT7,A`@#K(0P`.>5^(V9O
  7119. M&>OA<R-R(0P`.5XC5M4A$``Y7B-6U<V^0-'1R<UD*/__(0T`.>5^(V9O(^OA
  7120. M<R-R0DLA"P#K(00`.7,A!``YY6XF`"OKX7,A``#-PBC*%$$A#P`Y7B-6ZWZW
  7121. MR@5!(2``PPA!(3\`Y6!I(T1-*]%SP]U`(0T`.5XC5B$(`!E$32$-`#E>(U8A
  7122. M"@`9Y=WA(0\`.5XC5NM^M\H@0B$/`#E>(U;K7A8`(2``S;(HRB!"(0\`.5XC
  7123. M5NM>%@`A*@#-HRC*S$$A#0`Y7B-68&G-%RK*GT$A#0`Y7B-68&G-%RK*G$$A
  7124. M/P#E(0\`.>5^(V9O(^OA<R-RZRO1<\-S0</)02$-`#E>(U;=Y>'-"BK*R4$A
  7125. M/P#E(0\`.>5^(V9O(^OA<R-RZRO1<\.?0<,,0B$/`#E>(U;K7A8`(2X`S:,H
  7126. MRNU!8&GK(0T`.7,C<L,,0B$/`#E>(U;K7A8`U2$/`#GE?B-F;R/KX7,C<NLK
  7127. MT7,A#P`YY7XC9F\CZ^%S(W+K*\,O0<G-9"CZ_R$``.LA!``Y<R-R(1(`.5XC
  7128. M5B$&`#ES(W(A7`#E(10`.5XC5M7-'4#1T2%<`.4A$0#ES8HYT=$1_P#-4RCK
  7129. M(0@`.7,C<B'_`,VR*,K30R$/`.7-E$;1ZR$2`#ES(W)"2WJSPIM"(<1$Y<W1
  7130. M/]$A`0#ES;\]T2$(`#E>(U;K*2DI*2D1@0`9Y=WA(08`.5XC5NLC7A8`(3H`
  7131. MS:,HRN1"(08`.5XC5NM>%@#58&DC1$TKT7,A.@#E8&DC1$TKT7,A`0#E_>'#
  7132. M]4+]Y>$CY?WA*_WEX1$+`.O-PRC*9$/=;@`F`!%_`,U3*!$@`,VR*,HM0]WE
  7133. MX2/EW>$K7A8`U6!I(T1-*]%SPS5#W>7A(^7=X2O]Y>$1"`#-HRC*84/=;@`F
  7134. M`!%_`,U3*!$@`,VC*,)D0R$N`.5@:2-$32O1<\/M0B$``.M@:7,A$@`Y7B-6
  7135. MU2$&`#GE?B-F;R/KX7,C<NLK*>LA%@`Y?B-F;QG1<R-R(5P`Y2$2`.7-BCG1
  7136. MT1'_`,U3*.LA"``Y<R-R(0@`.5XC5B'_`,VR*,K30R$$`#E>(U8A%@`Y?B-F
  7137. M;\W=*,)T0B$``.LA"``Y<R-RP_)#(0@`.>5^(V9O(^OA<R-RZRLA"``Y7B-6
  7138. M(00`.7XC9F_-%RK*NT0A"``Y7B-6U?WAPQQ$_>7A(^7]X2O]Y>'K(00`.7XC
  7139. M9F_-W2C*N$3]Y>$IZR$4`#E^(V9O&5XC5M4A"@`Y7B-6ZRGK(18`.7XC9F\9
  7140. M7B-6U<WI1-'1RK5$(0@`.5XC5NLIZR$4`#E^(V9O&5XC5D)+_>7A*>LA%``Y
  7141. M?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&=%S(W)@:>7]Y>$IZR$6`#E^
  7142. M(V9O&=%S(W+#%$3#X4,A!``Y7B-6Z\E.;W0@96YO=6=H(&UE;6]R>2!T;R!E
  7143. M>'!A;F0@=VEL9&-A<F0`S60H```A``!$36!I$0\`Z\W=*,IY12$.`#E>(U;K
  7144. M7A8`U2$.`#E>(U;K7A8`X<W>*,HA12$!`,DA#@`Y7B-6ZUX6`-4A#@`Y7B-6
  7145. MZUX6`.'-W2C*0T4A``#)(0P`.>5^(V9O(^OA<R-RZRLA#@`YY7XC9F\CZ^%S
  7146. M(W+K*R$,`#E>(U;K?K?"=D4A``#)P_-$R<UD*```(0P`.>5^(V9O(^OA<R-R
  7147. MZRM>%@!"2V!I$2H`S:,HPJM%8&D1/P#-HRC*KT4A`0#)>+'*OT5@:1$@`,VR
  7148. M*,)_12$``,D1``'5Q0X:S04`T=4.%,T%`,'1M\KX`%!9#A#-!0`.&A&``,T%
  7149. M`,,``2&``!GKP](`$<-%(<\`!C$:=Q,C!<+\10%<`!$``2H&`/G#SP#-9"@`
  7150. M`"$,`#E>(U;5S91&T<G-9"C\_R$0`#E>(U8A$@`Y?B-F;\U;*>LA!``Y<R-R
  7151. M(00`.5XC5M7-E$;1ZR$&`#ES(W)ZL\)?1B$``,DA``#E(08`.5XC5M4A"@`Y
  7152. M7B-6U<W05='1T2$&`#E>(U;KR<UD*```(0P`.5XC5M7-LT?1R<UD*```(0P`
  7153. M.5XC5NLC(R,1`@#KS20J(^7]X2JE<N7=X7RUPLQ&(:%RY=WA(J5R(J%R(0$`
  7154. M(J-RW6X`W68!1$W#XT9@:>7=X6!I7B-60DLA`@`)7B-6_>7AS0DJRDU'(0(`
  7155. M"5XC5OWEX<VC*,H11V!I7B-6W7,`W7(!PT!'_>5@:2,CT>5^(V9OZ\VW*>OA
  7156. M<R-R(0(`"5XC5NLI*5!9&41-_>7AZR$"``ES(W+=Y>$BI7)@:1$$`!G)8&GK
  7157. M*J5RS:,HRFI'_>7-;D?11$U\M<)J1R$``,G#UT;)S60H```A#``Y7B-6ZRDI
  7158. MY<W02-%$31'__\VC*,J11R$``,E@:>7=X2$,`#E>(U;=<P+=<@/=Y>$1!``9
  7159. MY<VS1]$JI7+)S60H```A#``Y7B-6(?S_&41-*J5RY=WAP]='W6X`W68!Y=WA
  7160. M8&G=Y='KS1@JRO1'W6X`W68!Y6!IT>O-%RK")DC=;@#=9@'EW>7AT>O-"2K*
  7161. M(TA@:=WET>O-&"K")DC=;@#=9@'E8&G1Z\T7*L(F2,/.1]UN`-UF`>4A`@`)
  7162. M7B-6ZRDI4%D9T<VC*,IN2-UN`-UF`2,C7B-6U6!I(R/1Y7XC9F\9Z^%S(W+=
  7163. M;@#=9@%>(U9@:7,C<L-Z2-UN`-UF`>M@:7,C<MUN`MUF`RDIW>71&5!9S:,H
  7164. MRK5((0(`"5XC5M7=Y>$C(]'E?B-F;QGKX7,C<F!I7B-6W7,`W7(!P[U(8&G=
  7165. M=0#==`'=Y>$BI7+)(00`S=-((WRUR"O)(0(`.5XC5BJG<AGKVO5(*JER.7V3
  7166. M?)K:]4@JIW+K(J=RZWRUR:\]9V_)(0(`.7XC9B]O?"]G(R*I<LEC;VXZ`$-/
  7167. M3CH`;'-T.@!,4U0Z`'!R;CH`4%)..@!P=6XZ`%!53CH`<F1R.@!21%(Z`,UD
  7168. M*```(0X`.5XC5M4A`0/E(1``.5XC5M7-74G1T=')S60H_/\A+7?EW>$A``#K
  7169. M(08`.7,C<L./2=WEX1$(`!GEW>$A!@`YY7XC9F\CZ^%S(W(A!@`Y7B-6(0L`
  7170. MS=THRK%)W6X$W68%$05`S:,HPKM)PW9)(?C_(LUW(?__R2&%=T1-P\M)8&D1
  7171. M!@`91$U@:7XCMLKL22$0`#E>(U;58&E>(U;5S>Q5T='*[$G#PTDA`@`)7B-6
  7172. MU?WA(1(`.5XC5B$#`,U3*"/K(00`.7,C<B$$`#E>(U8A`0#-4RC*,TK];@`F
  7173. M`-UU`'RUPC-*(?;_(LUW(?__R2$$`#E>(U8A`@#-4RC*6DK];@$F`-UU`7RU
  7174. MPEI*(?;_(LUW(?__R2$$``E>(U;=<P;=<@?];@(F`-UU`OUN`R8`W74#(<],
  7175. MW74$W70%Q=WE(1@`.5XC5M4A&``Y7B-6U2$8`#E>(U;5_6X$_68%S6,HZR$*
  7176. M`#GY(0``S=THRL!*(05`W74$W70%(?__R2$&`#E>(U;KR<UD*```(0P`.5XC
  7177. M5B$``,W=*,+N2B$,`#E>(U8A"P#-WBC*^$HA_?\BS7<A___)(0P`.5XC5NLI
  7178. M*2D1+7<91$TA!@`)7B-6U2$$``E>(U;KS6,HT>LA#``Y<R-R(0``ZR$#``ES
  7179. M(0(`"7,A`0`)<V!I<R$%0.LA!``)<R-R(0P`.5XC5NO)S60H```AJW)$3<-D
  7180. M2V!I$28`&41-8&D1VW/KS1<JRG]+(24`"5X6`'JSRHE+PUQ+(?G_(LUW(?__
  7181. MR<4A#@`Y7B-6U<W#.='1RJ1+(?K_(LUW(?__R2$.`#E>(U8A``+-4RC*ODO%
  7182. M(1,`Y<V*.='1Q2$/`.7-BCG1T1'_`,VC*,H!3"$.`#E>(U8A``/-4RC*]$O%
  7183. M(18`Y<V*.='1$?\`S:,HROY+(?__(LUW(?__R<,A3"$.`#E>(U8A``7-4R@1
  7184. M``7-HRC*(4PA^_\BS7<A___)(0``ZR$A``ES(W(A(P`)<R$D``ES8&GE(10`
  7185. M.5XC5B$&`!G1<R-R(0X`.5XC5B$#`,U3*"/K(24`"7,A`@#-4RC*>TPAK$SE
  7186. M(10`.5XC5B$$`!G1<R-RPXY,(9),Y2$4`#E>(U8A!``9T7,C<B$``,G-9"@`
  7187. M`"$``.4A#@`Y7B-6(24`&=%S(0``R<UD*```(0P`.4XC1L4A$`#ES8HYT=$A
  7188. M``#K(24`"7,A``#)S60H```A``#)S60H```A#``Y7B-6(0``S=THPOU,(0P`
  7189. M.5XC5B$+`,W>*,H'32']_R+-=R'__\DA#``Y7B-6ZRDI*1$M=QE$32$0`#E>
  7190. M(U;5(1``.5XC5M4A!@`)7B-6U6!I7A8`ZRD1VW,97B-6Z\UC*-'1T<G-9"C\
  7191. M_R$``$1-(1``.5XC5M7=X=WEX1$D`!E^M\JF3=UN)"8`Y2&``-'KS;<I1$WK
  7192. M(10`.7XC9F_-&"K*CDTA%``Y7B-60DO%(10`.5XC5M7=Y<U=3M'1T<JF32'_
  7193. M_\DA%``Y7B-68&G-MRD1!P#KS20JZR$&`#ES(W)ZL\H+3B$&`#E>(U;5(10`
  7194. M.5XC5F!I&>7=Y<U95-'1T>LA!``Y<R-R>K/*"TXA!@`Y7B-6(00`.7XC9F_-
  7195. MMRD1!P#KS:<I4%D9R2$&`#E>(U8A!P#-IRE061E$36!IZR$4`#E^(V9OS1<J
  7196. MRE1.(10`.5XC5F!IS;<IY2$4`#E>(U9@:1GEW>7-74[1T='*5$Y@:<DA%``Y
  7197. M7B-6Z\G-9"@``"$,`#E.(T8A@`#E(1H`Y<V*.='1Q2$A`.7-BCG1T2+-=WRU
  7198. MRHQ.(?__R2$0`#E>(U;5(20`"5X6`"&``!GE(1(`.5XC5M7-L%71T=$A)``)
  7199. M7A8`(1``.7XC9F\9$7\`S5,HZR$D``ES>K/"X$Y@:1$A`!GE?B-F;R/KX7,C
  7200. M<B$``,G-9"@``#KD<V\F`'RUPFQ/(?\`?3+C<R$``'TRY7-],N1S(>-SY2$*
  7201. M`.7-BCG1T2$*`.4A`@#ES8HYT=$ZY7-O)@`1&@#-HRC*.D\A``!],N1S(0``
  7202. MR2$-`.4ZY'-O)@`C?3+D<Q'C<QDCT7,A"@#E.N1S;R8`(WTRY',1XW,9(]%S
  7203. M(0(`(N5T.N1S;R8`1$WK(1``.7XC9F_-WBC*C$\A$``Y7B-60DO%*N5T$>-S
  7204. M&>4A$@`Y7B-6U<VP5='1T6!IZRKE=!DBY71@:>LZY'-O)@#KS;<I?3+D<V!I
  7205. MR<UD*```(0X`.4XC1B$``.7=X</=3]WEX2/EW>'=Y>'K(1``.7XC9F_-W2C*
  7206. M$%`A#``Y7B-6U<V*.='E8&DC1$TKT7,A&@#-HRC"$%##UD_=Y>')S60H```A
  7207. M#``Y7B-6(0``S=THPCE0(0P`.5XC5B$+`,W>*,I#4"']_R+-=R'__\DA#``Y
  7208. M7B-6ZRDI*1$M=QE$32$0`#E>(U;5(1``.5XC5M4A!@`)7B-6U2$!``E>%@#K
  7209. M*1'G=!E>(U;KS6,HT='1R<UD*/S_(0``1$TA$``Y7B-6U=WAW>7A$20`&7ZW
  7210. MRN10W6XD)@#E(8``T>O-MRE$3>LA%``Y?B-F;\T8*LK,4"$4`#E>(U9"2\4A
  7211. M%``Y7B-6U=WES9M1T='1RN10(?__R2$4`#E>(U9@:<VW*1$'`.O-)"KK(08`
  7212. M.7,C<GJSRDE1(08`.5XC5M4A%``Y7B-68&D9Y=WES6%4T='1ZR$$`#ES(W)Z
  7213. ML\I)42$&`#E>(U8A!``Y?B-F;\VW*1$'`.O-IRE061G)(08`.5XC5B$'`,VG
  7214. M*5!9&41-8&GK(10`.7XC9F_-%RK*DE$A%``Y7B-68&G-MRGE(10`.5XC5F!I
  7215. M&>7=Y<V;4='1T<J246!IR2$4`#E>(U;KR<UD*```(0P`.4XC1B&``.4A&@#E
  7216. MS8HYT='%(2$`Y<V*.='1(LUW$0$`S:,HPM91*LUW$00`S:,HRO%1(0``(LUW
  7217. M(1H`Y2&``.4A@`#ES=!5T='1P_U1*LUW?+7*_5$A___)(1``.5XC5M4A$``Y
  7218. M7B-6U2$D``E>%@`A@``9Y<VP5='1T<4A(@#ES8HYT=$BS7=\M<HU4B'__\DA
  7219. M)``)7A8`(1``.7XC9F\9$7\`S5,HZR$D``ES>K/"9U)@:1$A`!GE?B-F;R/K
  7220. MX7,C<B$``,G-9"C^_R$0`#E.(T8A``#EW>'#AU+=Y>$CY=WAW>7AZR$2`#E^
  7221. M(V9OS=THRN)28&DC1$TK7A8`(00`.7,C<B$$`#E>(U8A"@#-HRC*RE(A#0#E
  7222. M(1``.5XC5M7-BCG1T2$$`#E>(U;5(1``.5XC5M7-BCG1T<.`4MWEX<G-9"@`
  7223. M`"$,`#E>(U8A``#-W2C"(E,A#``Y7B-6(0L`S=XHPB)3(0P`.5XC5NLI*2D1
  7224. M,'<97A8`>K/",%,A_?\BS7?-H5?_____R2$,`#E>(U;K*2DI$3-W&5XC5D)+
  7225. M(1(`.5XC5NO#T5/%(1``Y<V*.='1$?\`S:,HRG!3(?W_(LUWS:%7_____\G%
  7226. M(2,`Y<V*.='1(0``ZR$D``ES(0X`.>4A(0`)7B-6Z\T*6\V35P<```#-W5C-
  7227. MSE<A)``)7A8`Z\T86\WF5\UD6,WZ5^'ES:A7S618X<V[5\/D4R'Z_R+-=\VA
  7228. M5______)S>(I`P`"`$]3`0"#4P``P%/#4R$``.LA(P`)<R$.`#G-J%?-DU<`
  7229. M````S>!:RA]4(0``ZR$A``ES(W(A)``)<R'Z_R+-=\VA5______)(0X`.<VH
  7230. M5\TK6Q%_`,U3*.LA)``)<R$.`#G-J%?-DU<'````S0M9S2M;ZR$A``ES(W(A
  7231. M#@`YS:A7R<U$*@XAPV94S40J#B+%*@)QZR&``!DB`G$.<%`,'%*@!QZ\T%
  7232. M`+?"GU0J`'$1(0`9-,*15",T*@1Q*R($<7VTPF=4P<EO)@`BS7?!*@1QR<UD
  7233. M*,3_(00`.>4A3``Y7B-6U<W#.='1(00`.>4A$P#ES8HYT=$A!``YY2%*`#E>
  7234. M(U;5S<,YT=$A%``YY2%,`#E>(U;5S<,YT=$A!``YY2$7`.7-BCG1T<G-9"C<
  7235. M_R$$`#GE(3(`.5XC5M7-PSG1T2$$`#GE(1,`Y<V*.='1R<UD*```(0P`.4XC
  7236. M1B$``.7]X6!I7A8`(2T`S:,HRE958&DC1$TA`0#E_>'#:55@:5X6`"$K`,VC
  7237. M*,II56!I(T1-(0``Y=WA8&E>%@#5S557T<J;5=WEX1$*`,U;*>5@:2-$32M>
  7238. M%@#A&1'0_QGEW>'#;U7]Y>%\M<JL5=WEX<US*<.O5=WEX<G%(0D`.48K3BM6
  7239. M*UXK?BMN9WBQRLY5&G<3(PO#P57!R<4A!``Y7B-6(TXC1B-NZWBQRNI5<R,+
  7240. MP]]5P<DA`@`YQ0'_?UXC5B-^(V9O>+'*$%8:OL(55K?*$%8C$PO#_%7!(0``
  7241. MR<':'U8A`0!]M,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRD=6?A*WRD=6
  7242. M(Q,+PS96X<')(0(`.7XC9F\1``"OOLI?5A,CPU96ZWVTR2$"`#G%7B-6U2->
  7243. M(U8C3B-&Z]'#_%4A`@`YQ5XC5M75(UXC5B-.(T;KT<,V5L4!_W\A!``Y7B-6
  7244. MU2-^(V9OZWBQRD=6?K?*L58C"\.B5NO#-E8A`@`YQ5XC5M75(UXC5B-.(T;A
  7245. MK\.B5L4A!``Y7B-6(V[K?K?*Y%:[RNI6(\/75B$``*_!R7RUP<G%(00`.5XC
  7246. M5B-NZP$``*^^R@97(P/#_59XL<KD5@LK?KO"!E?#ZE8A`@`Y?OX@RCM7_@G*
  7247. M.U?^"LH[5\-05R$"`#E^_D':4%?^6])05R$!`'VWR2$"`#E^_F':4%?^>]H[
  7248. M5R$``*_)(0(`.7[^,-I05_XZTE!7PSM7(0(`.7[^8=IX5_Y[TGA7UB!O)@"W
  7249. MR2$"`#E^_D':CE?^6]*.5\8@;R8`M\G1(00`&>7KZRI8=L.L5]$A!``9Y>OK
  7250. M*E9V&G<C$QIW(Q,:=R,3&G?)ZRI6=GX2$R-^$A,C?A(3(WX2R>$B[W0J5G81
  7251. M`P`95BM>*]56*U[5*N]TZ>$B[W0J6';1<R-R(]%S(W(J[W3I*EAVZRI6=B)8
  7252. M=NLB5G;)*E9VKQ8$/@">=R,5P@]8R2I6=A8$?K?"VEHC%<(>6,//6J\]P<FO
  7253. M/,')Q2I6=NLJ6'8C(R,3$Q,:M_I-6*[Z+UC#45BN^BM8!@0:OMHK6,(O6"L;
  7254. M!<)36*_!R<4J5G;K*EAVKP8$&HX2(Q,%PF]8P<G%*E9VZRI8=J\&!!J>$B,3
  7255. M!<*%6,')Q2I6=NLJ6'8&!!JF$B,3!<*:6,')Q2I6=NLJ6'8&!!JV$B,3!<*O
  7256. M6,')Q2I6=NLJ6'8&!!JN$B,3!<+$6,')*E9V%@1^+W<C%<+46,DJ6'9^YC_(
  7257. MQ4<J5G9>(U8C?B-F;RGK*>O2^5@C!<+Q6$1-*E9V<R-R(W$C<,')*EAV?N8_
  7258. MR%<J5G8C(R-^M_HP6>4>!+=^'W<K'<(B6>$5PAY9R>4>!#=^'W<K'<(T6>$5
  7259. MPC!9R=4&!'X2(Q,%PD59X4^W\,,,6,4J5G81^W3-0EEY,OET*EAV$0-US4)9
  7260. M.OETJ3+Y=,W!61'[="I6=@8$&G<3(P7"?5G!.OETM_H)6,G%*E9V$?MTS4)9
  7261. M>3+Y="I8=A$#=<U"6<W!61'_="I6=@8$&G<3(P7"L%G!.OETM_H)6,D&!"'_
  7262. M=*]W(P7"QUD^(#+Z="'[=`8(MWZ/=R,%PMA9G^8!3P8$$?]T(0-UMQJ>$A,C
  7263. M!<+M67G>`,((6B'[=#0A^G0UPM)9R2'Z=#7*.EHA^W0&"+=^CW<C!<(56I]/
  7264. M!@01_W0A`W6W&HX2$R,%PBA:><X`P@A:P_Q9!@01_W0A`W6W&HX2$R,%PD-:
  7265. MR<4J6'8&!!$#=7X2(Q,%PE9:*E9V!@01_W1^$B,3!<)F6@8$(?MTKW<C!<)T
  7266. M6CX@,OIT(?MT!@BW?H]W(P7"A5K2L%H&!!'[="$#=;<:CA(3(P7"F5H&!!K.
  7267. M`!+2L%H3!<*D6B'Z=#7"?UHJ5G81^W0&!!IW$R,%PK]:P<G-,UC*VEHA``"O
  7268. MR<TS6,K/6B$!`*\\R<TS6/K:6L//6LTS6/K:6LK:6L//6LTS6/K/6L/:6LTS
  7269. M6/K/6LK/6L/:6NLJ5G9S(W(C-@`C-@#)ZRI6=G,C<B-ZM_(26S;_(S;_R2I6
  7270. M=EXC5NO)R<UD*-+_(2X`.>7-H5<`````X<V[5R$D`#GK(00`.7,C<B$(`#GE
  7271. M(3P`.5XC5M7-PSG1T2$(`#GE(68`Y<V*.='1ZR$&`#ES(W(A!@`Y?B.VPFY<
  7272. M(2X`.>4A!@`Y7B-6ZUXC5B%I"QG-"EO-DU>`40$`S4U:X<V[5R$$`#E>(U;K
  7273. M(R->%@`A!`#-C2D1"@#-6RGE(08`.5XC5NLC(UX6`"$/`,U3*-$9ZR$L`#ES
  7274. M(W(A+@`YY2$N`#E>(U;KS0I;S9-7$`X``,U-6LWZ5^'ES:A7S618X<V[5R$$
  7275. M`#E>(U;K(R,C7A8`(00`S8TI$0H`S5LIY2$&`#E>(U;K(R,C7A8`(0\`S5,H
  7276. MT1GK(2P`.7,C<B$N`#GE(2X`.5XC5NO-"EO-DU<\````S4U:S?I7X>7-J%?-
  7277. M9%CAS;M7(3P`.7XCML*`7"$N`#G-J%?)(3P`.5XC5M4A,``YS:A7X<V[5\G-
  7278. M9"C2_R$N`#GES:%7`````.'-NU<A(``YZR$$`#ES(W(A"``YY2$\`#E>(U;5
  7279. MS<,YT=$A"``YY2%F`.7-BCG1T>LA!@`Y<R-R(08`.7XCML+.72$N`#GE(08`
  7280. M.5XC5NM>(U8A:0L9S0I;S9-7@%$!`,U-6N'-NU<A!``Y7B-6ZR,C7A8`(00`
  7281. MS8TI$0H`S5LIY2$&`#E>(U;K(R->%@`A#P#-4RC1&>LA+``Y<R-R(2X`.>4A
  7282. M+@`Y7B-6Z\T*6\V35Q`.``#-35K-^E?AY<VH5\UD6.'-NU<A!``Y7B-6ZR,C
  7283. M(UX6`"$$`,V-*1$*`,U;*>4A!@`Y7B-6ZR,C(UX6`"$/`,U3*-$9ZR$L`#ES
  7284. M(W(A+@`YY2$N`#E>(U;KS0I;S9-7/````,U-6LWZ5^'ES:A7S618X<V[5R$\
  7285. M`#E^([;"X%TA+@`YS:A7R2$\`#E>(U;5(3``.<VH5^'-NU?)S60H```A#``Y
  7286. M7B-6U<T_7M$A#``Y7B-6(00`&>7-H5<`````X<V[5R$``.4A$``Y7B-6Z]%S
  7287. M(W(A``#E(1``.5XC5NLC(]%S(W+)S60H^/\A!W7E(6D`Y<V*.='1ZR$$`#ES
  7288. M(W(A"``YY2H'=1%I"QG-"EO-DU>`40$`S4U:X<V[5SH)=6\F`!$$`.O-C2D1
  7289. M"@#-6RGE.@EU;R8`$0\`S5,HT1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-"EO-
  7290. MDU<0#@``S4U:S?I7X>7-J%?-9%CAS;M7.@IU;R8`$00`Z\V-*1$*`,U;*>4Z
  7291. M"G5O)@`1#P#-4RC1&>LA!@`Y<R-R(0@`.>4A"``Y7B-6Z\T*6\V35SP```#-
  7292. M35K-^E?AY<VH5\UD6.'-NU<A!``Y7B-6(00`S8TI$0H`S5LIY2$&`#E>(U8A
  7293. M#P#-4RC1&>LA!@`Y<R-R(0@`.>4A"``Y7B-6Z\T*6\WZ5^'ES:A7S618X<V[
  7294. M5R$4`#E^([;">%\A"``YS:A7R2$4`#E>(U;5(0H`.<VH5^'-NU?)S60H```A
  7295. M#``Y7B-6U<VC7]'ES29ET<G-9"CH_R$``.LA!``Y<R-R(0``ZR$&`#ES(W(A
  7296. M$``YY2$&`#E>(U;KS1A;S9-7/````,U-6LW.5R$J`#E>(U;KS:A7S>97S7I8
  7297. MX<V[5R$0`#GES;QBT>7=X=UN#MUF#T1-(9=UZR$8`#ES(W+#*6`A&``YY7XC
  7298. M9F\1"``9Z^%S(W+K$?C_&2$8`#E>(U;K7B-6(0``S<(HREE@(1@`.5XC5NM>
  7299. M(U8A!@`Y?B-F;\VC*,)98,,28"$8`#E>(U;K7B-6(0``S<(HRD]BW6X*W68+
  7300. M$6P'&>LA%``Y<R-R(1@`.5XC5B$$`!E>(U8A%@`Y<R-RPZY@(18`.>5^(V9O
  7301. M$08`&>OA<R-RZQ'Z_QDA%@`Y7B-6ZWXCMLK88"$6`#E>(U;K7B-6(10`.7XC
  7302. M9F_-HRC"V&##EV`A%@`Y7B-6ZR,C7B-6U?WA(18`.5XC5B$$`!E>(U8A&@`Y
  7303. M<R-R_>7=Y<U38M'1Y?WA(1H`.5XC5M7=Y<U38M'1ZR$:`#ES(W(A&``Y7B-6
  7304. M(08`&5XC5NO#]F%@:?WET>O-WBC"66%@:?WET<VC*,J+8=UN!-UF!1$"`.O-
  7305. MPBC*BV%@:>LA&@`Y?B-F;\W=*,*/86!IZR$:`#E^(V9OS:,HRHMAW6X$W68%
  7306. M$0$`Z\W=*,*/8=WEX<G#!6)@:?WET>O-WBC"[V%@:?WET<VC*,JY8=UN!-UF
  7307. M!1$"`.O-PBC"[V%@:>LA&@`Y?B-F;\W=*,+O86!IZR$:`#E^(V9OS:,HRNMA
  7308. MW6X$W68%$0(`Z\W=*,+O8=WEX<G#!6+=Y>')S>(I`@`!`#)A``"28?)A(1``
  7309. M.>4A&@`Y7B-6ZR,C7B-6(1`.S5LIS1A;S?I7X>7-J%?-9%CAS;M7(1``.>7-
  7310. MO&+1Y=WAW>7A$1``&>5^(V9O(^OA<R-RZRO=Y>')S60H```A#``Y3B-&(0X`
  7311. M.5XC5M7=X=WEX1$Z`.O-PBC*C6(A"@`)7B-6U<TH9]$1D_X9W>71&>7=X2$,
  7312. M``E>(U;5(0X`"5XC5M7=Y>'1Z\VW*=$9$;P"&1$'`.O-]RCEW>7AT>O-MRG)
  7313. MS60H^/\A"``YY2$6`#E>(U;KS:A7S9-7@%$!`,V.6>'-NU<A!``YY2$6`#E>
  7314. M(U;KS:A7S9-7@%$!`,U46>'-NU<A"``YS:A7S9-7`````,W@6LI'8R$(`#GE
  7315. MS:%7@%$!`,WZ5^'ES:A7S618X<V[5R$$`#GES:%7`0```,WZ5^'ES:A7S7I8
  7316. MX<V[5R''=>7]X2$(`#G-J%?-DU<\````S8Y9S2M;Y?WEX2,CY?WA*RO1<R-R
  7317. M(0@`.<VH5\V35SP```#-5%G-*UOEW>'=Y>$1/`#KS?<HY?WEX2,CY?WA*RO1
  7318. M<R-R(3P`W>71S8DHY=WAW>7AY?WEX2,CY?WA*RO1<R-R(00`.<VH5\V35P0`
  7319. M<`#-9%C-DU<'````S8Y9S2M;(M-U(00`.<VH5\V35P````#-]5K*0V0A1@#E
  7320. MW>'#!&3=Y>$CY=WA*]WES2AGT<T86\W.5R$(`#G-J%?-YE?-]5K*0&0A!``Y
  7321. MY=WES2AGT<T86\WZ5^'ES:A7S7I8X<V[5\/\8\.+9"%&`.7=X<-49-WEX2OE
  7322. MW>$C(00`.<VH5\V35P````#-X%K*BV0A!``YY=WEX2OES2AGT<T86\WZ5^'E
  7323. MS:A7S618X<V[5\-,9-WEX2+1=2$$`#G-J%?-*UM$32+5==WES2AGT1%N`<VC
  7324. M*,JU9"$=`"(G=2$``.7=X</&9-WEX2/EW>$KW>7A*1$E=1E>(U;58&G1Z\W"
  7325. M*,KR9-WEX2D1)7497B-68&GKS;<I1$W#OF0A'``B)W5@:2/E_>7A(R/E_>$K
  7326. M*]%S(W+=Y>'E_>7A(R/E_>$K*]%S(W(A```BUW4AQW7)S60H```A"W5$32'3
  7327. M9N7=X=WEX2/EW>$K7A8`U6!I(T1-*]%S>K/*4F7#-F4A#``Y7B-6(0P`&5XC
  7328. M5B$#`,U;*1'M9AGEW>$A"W5$3=WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=
  7329. MX2M>%@#58&DC1$TKT7/=Y>$CY=WA*UX6`-5@:2-$32O1<V!I(T1-*R$,`#E>
  7330. M(U8A"``9Y?WA_6X`_68!$0,`S5LI$0-G&>7=X=WEX2/EW>$K7A8`U6!I(T1-
  7331. M*]%SW>7A(^7=X2M>%@#58&DC1$TKT7/=Y>$CY=WA*UX6`-5@:2-$32O1<_WE
  7332. MX2LKY?WA7B-6U<7-16?1T41-_>7A*ROE_>%>(U8A9``9Y<7-16?1T41-_>7A
  7333. M*ROE_>%>(U8A9``9Y<7-16?1T41-_>7A*ROE_>%>(U8A9``9Y<7-16?1T41-
  7334. M(0P`.5XC5B$*`!E>(U8A9`#-PBC*K&8A,@#K(0$`"7,A#``Y7B-6(0H`&5XC
  7335. M5B$P`!D1R`#KS<(HZR$"``ES(0(`4%D91$TA#``Y7B-6(0H`&5XC5B%D`!GE
  7336. MQ<U%9]'11$TA"W7)1&%Y($UO;B`P,"`P,#HP,#HP,"`Q.3`P"@!3=6Y-;VY4
  7337. M=6579614:'5&<FE3870`2F%N1F5B36%R07!R36%Y2G5N2G5L075G4V5P3V-T
  7338. M3F]V1&5C`,UD*```(0P`.5XC5B$$`,WW*,)!9R%N`<DA;0')S60H```A#``Y
  7339. M3B-&8&DC1$TK(0X`.5XC5B$*`,W"*,J+9R$.`#E>(U8A"@#-B2@1"@#KS?<H
  7340. M$3``&>5@:2-$32O1<\.79R$@`.5@:2-$32O1<R$.`#E>(U8A"@#-]R@1,``9
  7341. MY6!I(T1-*]%S8&G)S60H```A#@`Y7B-60DLA)`#EW>'#UV<A``#E8&DC1$TK
  7342. MT7/=Y>$KY=WA(Q$``.O-WBC*[&?#RV<A#@`Y7B-6U2$.`#E>(U;5S<,YT=$A
  7343. M#@`Y7B-6U2$/`.7-BCG1T<HM:"$.`#E>(U;5(18`Y<V*.='1RBUH(?__R2$`
  7344. M`,G-9"@``"$,`#E>(U;5(1``Y<V*.='1R<UD*```(0P`.5XC5M4A$P#ES8HY
  7345. MT=')S60H_O\A$@`Y7B-6(2$`&>LA!``Y<R-R(0X`.5XC5M4A&@#ES8HYT=$A
  7346. M$``Y7B-6U2$&`#E>(U;KT7,C<B$2`#E>(U;5(2(`Y<V*.='1R<UD*/[_(1(`
  7347. M.5XC5B$A`!GK(00`.7,C<B$.`#E>(U;5(1H`Y<V*.='1(1``.5XC5M4A!@`Y
  7348. M7B-6Z]%S(W(A$@`Y7B-6U2$A`.7-BCG1T<D`````````````````````````
  7349. M````````````````````````````````````````````````````````````
  7350. M````````````````````````````````````````````````````````````
  7351. M````````````````````````````````````````````````````````````
  7352. M````````````````````````````````````````````````````````````
  7353. M````````````````````````````````````````````````````````````
  7354. M````````````````````````````````````````````````````````````
  7355. M````````````````````````````````````````````````````````````
  7356. M````````````````````````````````````````````````````````````
  7357. M````````````````````````````````````````````````````````````
  7358. M````````````````````````````````````````````````````````````
  7359. M````````````````````````````````````````````````````````````
  7360. M````````````````````````````````````````````````````````````
  7361. M````````````````````````````````````````````````````````````
  7362. M````````````````````````````````````````````````````````````
  7363. M````````````````````````````````````````````````````````````
  7364. M````````````````````````````````````````````````````````````
  7365. M````````````````````````````````````````````````````````````
  7366. M````````````````````````````````````````````````````````````
  7367. M````````````````````````````````````````````````````````````
  7368. M````````````````````````````````````````````````````````````
  7369. M````````````````````````````````````````````````````````````
  7370. M````````````````````````````````````````````````````````````
  7371. M````````````````````````````````````````````````````````````
  7372. M````````````````````````````````````````````````````````````
  7373. M````````````````````````````````````````````````````````````
  7374. M````````````````````````````````````````````````````````````
  7375. M````````````````````````````````````````````````````````````
  7376. M````````````````````````````````````````````````````````````
  7377. M````````````````````````````````````````````````````````````
  7378. M````````````````````````````````````````````````````````````
  7379. M````````````````````````````````````````````````````````````
  7380. M````````````````````````````````````````````````````````````
  7381. M````````````````````````````````````````````````````````````
  7382. M````````````````````````````````````````````````````````````
  7383. M````````````````````````````````````````````````````````````
  7384. M````````````````````````````````````````````````````````````
  7385. M````````````````````````````````````````````````````````````
  7386. M````````````````````````````````````````````````````````````
  7387. M````````````````````````````````````````````````````````````
  7388. M````````````````````````````````````````````````````````````
  7389. M````````````````````````````````````````````````````````````
  7390. M````````````````````````````````````````````````````````````
  7391. M````````````````````````````````````````````````````````````
  7392. M````````````````````````````````````````````````````````````
  7393. M````````````````````````````````````````````````````````````
  7394. M```````````````````````P,3(S-#4V-S@Y86)C9&5F````````````````
  7395. M````````````````````````````````````````````````````````````
  7396. M````````````````````````````````````````````````````````````
  7397. M````````````````````````````````````````````````````````````
  7398. M````````````````````````````````````````````````````````````
  7399. M````````````````````````````````````````````````````````````
  7400. M````````````````````````````````````````````````````````````
  7401. M````````````````````````````````````````````````````````````
  7402. M````````````````````````````````````````````````````````````
  7403. M`````````````````````````````````/-_`/P`````````````````````
  7404. M````````````````````````````````````````````````````````````
  7405. M````````````````````````````````````````````````````````````
  7406. M````````````````````````````````````````````````````````````
  7407. M````````````````````````````````````````````````````````````
  7408. M````````````````````````````````````````````````````````````
  7409. M````````````````````````````````````````````````````````````
  7410. M````````````````````````!4!&3>1.P4\`````````````````````````
  7411. M````````````````````````````````````````````````````````````
  7412. M````````````````````````````````````````````````````````````
  7413. M````````````````````````````````````````````````````````````
  7414. M````````````````````````````````````````````````````````````
  7415. M````````````````````````````````````````````````````````````
  7416. M``````````````````````5`A%!K4FM2````````````````````````````
  7417. M````````````````````````````````````````````'P`<`!\`'@`?`!X`
  7418. M'P`?`!X`'P`>`!\`M@<%`$T!MP<Z`"\!``!W`"\!L@>0`0``LP<O`0``M`<O
  7419. M`3H````O`4$`OP=6`"\!P`=6`"\!P0=6`"\!``"0`0``OP=6`!`!P`=6`!`!
  7420. MP0=6`!`!``"0`0```0`!`#UU`0`"``$`3W4```,``0!G=0$`!``!`']U`0`%
  7421. M``$`?W4!`/__`````````````````````````````````````````0````0`
  7422. M```````!`0`!``````````$"``$`````````````````````````````````
  7423. M````````````````````````````````````````````````````````````
  7424. M``````````````````````````````#Q=/5T``!<.F4Z``````````$)+68@
  7425. M;6%K969I;&4@;F%M90H)+6D@9&]N)W0@:6=N;W)E(&5X:70@<W1A='5S"@DM
  7426. M;B!0<F5T96YD('1O(&UA:V4*"2UP(%!R:6YT(&%L;"!M86-R;W,@)B!T87)G
  7427. M971S"@DM<B!$;R!N;W0@=7-E(&EN8G5I;'0@<G5L97,*"2US($UA:V4@<VEL
  7428. M96YT;'D*"2UT(%1O=6-H(&9I;&5S(&EN<W1E860@;V8@;6%K:6YG('1H96T*
  7429. M```"``#/3`,```#/3`(``0`40`(```(!`!1``@```@$`%$`"```````%0```
  7430. M``````5`````````!4`````````%0`````````5`````````!4`````````%
  7431. M0`````````5````+2<=W`@`02<=W`@`522%W!0`:22%W!0`?22%W!0`D22%W
  7432. M!0`I22%W!``N22%W!``S22=W`P`X22=W`P```--W```"`@$`STP````````!
  7433. M`0`!3TL!````````````0`````````````````$`````````````````````
  7434. M````````````````````````````````````````````````````````````
  7435. M````````````````````````````````````````````````````````````
  7436. M````````````````````````````````````````````````````````````
  7437. M````````````````````````````````````````````````````````````
  7438. M````````````````````````````````````````````````````````````
  7439. M````````````````````````````````````````````````````````````
  7440. M````````````````````````````````````````````````````````````
  7441. M````````````````````````````````````````````````````````````
  7442. M````````````````````````````````````````````````````````````
  7443. M````````````````````````````````````````````````````````````
  7444. M````````````````````````````````````````````````````````````
  7445. M````````````````````````````````````````````````````````````
  7446. M````````````````````````````````````````````````````````````
  7447. M````````````````````````````````````````````````````````````
  7448. M````````````````````````````````````````````````````````````
  7449. M````````````````````````````````````````````````````````````
  7450. M````````````````````````````````````````````````````````````
  7451. M````````````````````````````````````````````````````````````
  7452. M````````````````````````````````````````````````````````````
  7453. M````````````````````````````````````````````````````````````
  7454. M````````````````````````````````````````````````````````````
  7455. M````````````````````````````````````````````````````````````
  7456. M````````````````````````````````````````````````````````````
  7457. M````````````````````````````````````````````````````````````
  7458. M````````````````````````````````````````````````````````````
  7459. M````````````````````````````````````````````````````````````
  7460. M````````````````````````````````````````````````````````````
  7461. M````````````````````````````````````````````````````````````
  7462. M````````````````````````````````````````````````````````````
  7463. M````````````````````````````````````````````````````````````
  7464. M````````````````````````````````````````````````````````````
  7465. M````````````````````````````````````````````````````````````
  7466. M````````````````````````````````````````````````````````````
  7467. M````````````````````````````````````````````````````````````
  7468. M````````````````````````````````````````````````````````````
  7469. M````````````````````````````````````````````````````````````
  7470. M````````````````````````````````````````````````````````````
  7471. M````````````````````````````````````````````````````````````
  7472. M````````````````````````````````````````````````````````````
  7473. M````````````````````````````````````````````````````````````
  7474. M````````````````````````````````````````````````````````````
  7475. M````````````````````````````````````````````````````````````
  7476. M````````````````````````````````````````````````````````````
  7477. M````````````````````````````````````````````````````````````
  7478. M````````````````````````````````````````````````````````````
  7479. 7`````````````!H:&AH:&AH:&AH:&@`:
  7480. `
  7481. end
  7482. SHAR_EOF
  7483. if test 44823 -ne "`wc -c make.uue`"
  7484. then
  7485. echo shar: error transmitting make.uue '(should have been 44823 characters)'
  7486. fi
  7487. #    End of shell archive
  7488. exit 0
  7489. -- 
  7490.  
  7491. Mike Kersenbrock
  7492. Tektronix Computer Aided Software Engineering
  7493. Aloha, Oregon
  7494. 31-Jul-86 22:08:39-MDT,1090;000000000000
  7495. Return-Path: <info-cpm-request@AMSAA.ARPA>
  7496. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:08:25-MDT
  7497. Received: from simtel20.arpa by AMSAA.ARPA id a001925; 31 Jul 86 23:37 EDT
  7498. Date: Thu 31 Jul 86 21:37:16-MDT
  7499. From: Rick Conn <RCONN@SIMTEL20.ARPA>
  7500. Subject: Z-System Newsletters
  7501. To: info-cpm@AMSAA.ARPA
  7502. Message-ID: <12227222144.18.RCONN@SIMTEL20.ARPA>
  7503.  
  7504.     In PD:<ZSYS.NEW> are the following Z-System Newsletters from Echelon.
  7505. The squeezed forms are also stored in PD:<ZSYS.Z-NEWS>, along with all
  7506. the other newsletters.  I have been advised that Frank Gaude' at Echelon
  7507. has almost completed a complete index of these newsletters, and this index
  7508. will be mailed to the subscribers.  It is over 30 pages long and
  7509. quite comprehensive.
  7510.  
  7511.  
  7512.    PD:<ZSYS.NEW>
  7513.           Bytes(SZ)  
  7514.  
  7515.  Z-NEWS.503.1     21792(7)   
  7516.    .504.1         19552(7)   
  7517.    .505.1         22241(7)   
  7518.    .506.1         21419(7)   
  7519.    .5Q3.1         13312(8)   
  7520.    .5Q4.1         12544(8)   
  7521.    .5Q5.1         13824(8)   
  7522.    .5Q6.1         13440(8)   
  7523.  
  7524.  Total of 63 pages in 8 files
  7525. -------
  7526. 31-Jul-86 22:43:23-MDT,880;000000000000
  7527. Return-Path: <info-cpm-request@AMSAA.ARPA>
  7528. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:43:09-MDT
  7529. Received: from simtel20.arpa by AMSAA.ARPA id a001992; 1 Aug 86 0:05 EDT
  7530. Date: Thu 31 Jul 86 22:03:56-MDT
  7531. From: Rick Conn <RCONN@SIMTEL20.ARPA>
  7532. Subject: New Z-System Files
  7533. To: info-cpm@AMSAA.ARPA
  7534. Message-ID: <12227226998.18.RCONN@SIMTEL20.ARPA>
  7535.  
  7536.     In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
  7537. Z3-WKBK.WQ - Installation Workbook for Z3
  7538.  
  7539.     In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
  7540. VCED16.LBR - command-line editor
  7541. MOVE20.LBR - move files on same disk by changing user number
  7542. Z-RIP.LBR  - quick installation routine
  7543. ZSIGPOL1.DOC - submitting to ZSIG
  7544. Z3TRBO12.LBR -
  7545. ZLUX24.LBR -
  7546.  
  7547.     In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
  7548. VFILER41G.LBR - new VFILER
  7549. VMENU17.LBR -
  7550. LDR15.LBR -
  7551. ALIAS#1.LBR -
  7552. ZSYSTEM.INS - listing of Z-System programs from Echelon and ZSIG
  7553. -------
  7554. 31-Jul-86 22:50:13-MDT,755;000000000000
  7555. Return-Path: <info-cpm-request@AMSAA.ARPA>
  7556. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:50:06-MDT
  7557. Received: from simtel20.arpa by AMSAA.ARPA id a002035; 1 Aug 86 0:15 EDT
  7558. Date: Thu 31 Jul 86 22:15:54-MDT
  7559. From: Rick Conn <RCONN@SIMTEL20.ARPA>
  7560. Subject: More Z-System Files
  7561. To: info-cpm@AMSAA.ARPA
  7562. Message-ID: <12227229178.18.RCONN@SIMTEL20.ARPA>
  7563.  
  7564.     In PD:<ZSYS.DOC> and <ZSYS.NEW>:
  7565. ZNODE.REQ - Requirements for becoming a Z-Node
  7566. ZNODES28.LST - Listing of Z-Nodes
  7567.  
  7568.     In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
  7569. T3T-24-1.Z80 - Telephone Interface overlay for DC Hayes 2400
  7570.     for Term III
  7571.  
  7572.     In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
  7573. Z3KAYDSK.MSG
  7574.  
  7575.     In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
  7576. Z3KEY14.LBR -
  7577. MKLINE.LBR -
  7578. WILDEX.MQC -
  7579.  
  7580. -------
  7581. 31-Jul-86 23:07:26-MDT,712;000000000000
  7582. Return-Path: <info-cpm-request@AMSAA.ARPA>
  7583. Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 23:07:18-MDT
  7584. Received: from simtel20.arpa by AMSAA.ARPA id a002043; 1 Aug 86 0:17 EDT
  7585. Date: Thu 31 Jul 86 22:17:40-MDT
  7586. From: Rick Conn <RCONN@SIMTEL20.ARPA>
  7587. Subject: Previous Announcements
  7588. To: info-cpm@AMSAA.ARPA
  7589. Message-ID: <12227229499.18.RCONN@SIMTEL20.ARPA>
  7590.  
  7591.     The files in PD:<ZSYS.NEW> are temporary ... subject to deletion
  7592. after a few weeks.  NEW is provided as a convenience to Z-System users
  7593. who are keeping up with new software releases.
  7594.  
  7595.     Thanks to Keith Petersen for his efforts in uploading the files
  7596. I just announced.  Keith's work really is appreciated.
  7597.  
  7598.         Rick Conn
  7599. -------
  7600.