home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3922 < prev    next >
Internet Message Format  |  1991-08-28  |  63KB

  1. Xref: wupost comp.lang.c:26412 comp.sources.d:3891 comp.unix.wizards:3349 alt.sources:3922 misc.misc:8112
  2. Path: wupost!uunet!hoptoad!chongo
  3. From: chongo@hoptoad.uucp (Landon C. Noll)
  4. Newsgroups: comp.lang.c,comp.sources.d,comp.unix.wizards,alt.sources,misc.misc
  5. Subject: 1991 International Obfuscated C Code Contest winners, 1 of 2
  6. Message-ID: <20428@hoptoad.uucp>
  7. Date: 28 Aug 91 01:37:53 GMT
  8. Expires: 28 Nov 91 00:00:00 GMT
  9. Reply-To: chongo@hoptoad.UUCP (Landon C. Noll)
  10. Distribution: world
  11. Organization: Nebula Consultants in San Francisco
  12. Lines: 1632
  13. Keywords: ioccc
  14.  
  15. Enclosed is 1 of a 2 part shar file containing the winners of the 1991
  16. International Obfuscated C Code Contest.
  17.  
  18. First, we congratulate the winners for doing a fine job.  Their efforts
  19. and feedback have resulted in a number of suggested changes for the
  20. 1992 contest.
  21.  
  22. Second, we will be posting, sometime in early October 1991, a proposed
  23. set of rules for the 1992 contest.  At that time, we will be requesting
  24. feedback on the proposed 1992 rules.  Sometime later, perhaps in early
  25. November 1991, the official 1992 IOCCC rules will be posted.
  26.  
  27. Last, we would like to make an apology to the 1991 winners and to the
  28. net for the delay in posting of these results.  The poster of this
  29. article (chongo) went on vacation (Eclipse watching in Hawaii), held
  30. extended discussions with several of the contest winners, attempted to
  31. formulate the 1992 rules, and just plain ran out of time.  We hope to
  32. avoid such delays in the future.
  33.  
  34. If you find problems with some of the contest entries, or find typos
  35. in our notes, please send PATCH FILES containing the corrections to:
  36.  
  37.     judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  38.  
  39. chongo <Landon Curt Noll> /\cc/\        hoptoad!chongo
  40. Larry Bassel                            {uunet,ucbvax,cbosgd}|sun!lab
  41.  
  42. p.s. previous winners are available on uunet.uu.net via anonymous ftp
  43.      under the directory ~/pub/ioccc.  The updated and corrected 1991 
  44.      set will be deposited there when the 1992 rules are posted.
  45.  
  46. Submitted-by: chongo@toad.com (Landon Curt Noll)
  47. #
  48. # Send comments, questions, bugs to: 
  49. #
  50. #    judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  51. #
  52. # You are strongly encouraged to read the new contest rules before
  53. # sending any entries.  The rules, and sometimes the contest Email
  54. # address itself, change over time.  A valid entry one year may
  55. # be rejected in a later year due to changes in the rules.  The typical 
  56. # deadline date for the contest is late May.  Check with the current year's
  57. # rules for details.
  58. #
  59. # The contest rules are posted to comp.unix.wizards, comp.lang.c,
  60. # misc.misc, alt.sources and comp.sources.d.  If you do not have access 
  61. # to these groups, you may request a copy from the judges, via Email, 
  62. # from the address above.
  63. #
  64. # The 1992 contest rules will differ from the 1991 contest in several
  65. # important ways.  Due to these changes, there will be a delay in
  66. # the posting of the 1992 rules.  We expect the 1992 rules to be ready
  67. # by early October 1991.
  68. #
  69. Archive-name: ioccc.1991/part01
  70.  
  71. ---- Cut Here and unpack ----
  72. #!/bin/sh
  73. # This is ioccc.1991, a shell archive (shar 3.32)
  74. # made 08/24/1991 03:05 UTC by chongo@toad.com (Landon Curt Noll)
  75. #
  76. # Send comments, questions, bugs to: 
  77. #
  78. #    judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  79. #
  80. # You are strongly encouraged to read the new contest rules before
  81. # sending any entries.  The rules, and sometimes the contest Email
  82. # address itself, change over time.  A valid entry one year may
  83. # be rejected in a later year due to changes in the rules.  The typical
  84. # start date for a contest is early March.  The typical end date for a
  85. # contest is late May.
  86. #
  87. # The contest rules are posted to comp.unix.wizards, comp.lang.c,
  88. # misc.misc, alt.sources and comp.sources.d.  If you do not have access 
  89. # to these groups, or if you missed the early March posting, you may 
  90. # request a copy from the judges, via Email, at the address above.
  91. #
  92. # Source directory /u4/chongo/bench/ioccc
  93. #
  94. # existing files WILL be overwritten
  95. #
  96. # This shar contains:
  97. # length  mode       name
  98. # ------ ---------- ------------------------------------------
  99. #   3632 -r--r--r-- 1991/README
  100. #   9780 -r--r--r-- 1991/rules
  101. #   3298 -r--r--r-- 1991/Makefile
  102. #   4069 -r--r--r-- 1991/ansi.mk
  103. #   3842 -r--r--r-- 1991/common.mk
  104. #   1478 -r--r--r-- 1991/ant.c
  105. #   1872 -r--r--r-- 1991/rince_ansi.c
  106. #   1534 -r--r--r-- 1991/rince.orig.c
  107. #   5503 -r--r--r-- 1991/sorta.README
  108. #     54 -r--r--r-- 1991/sorta.i2+2
  109. #     39 -r--r--r-- 1991/sorta.iarg0
  110. #   1133 -r--r--r-- 1991/dds.c
  111. #   1536 -r--r--r-- 1991/westley.c
  112. #   1872 -r--r--r-- 1991/rince.c
  113. #     81 -r--r--r-- 1991/fine.c
  114. #   1472 -r--r--r-- 1991/buzzard.c
  115. #   1001 -r--r--r-- 1991/cdupont.c
  116. #   1691 -r--r--r-- 1991/davidguy.c
  117. #   1137 -r--r--r-- 1991/dds.ansi.c
  118. #   1534 -r--r--r-- 1991/davidguy.orig.c
  119. #   1183 -r--r--r-- 1991/sorta.icalc
  120. #     33 -r--r--r-- 1991/sorta.idup
  121. #    181 -r--r--r-- 1991/sorta.iecho
  122. #   1669 -r--r--r-- 1991/brnstnd_ansi.c
  123. #   1009 -r--r--r-- 1991/cdupont_ansi.c
  124. #   3704 -r--r--r-- 1991/ttt.sh
  125. #   5435 -r--r--r-- 1991/westley.hint
  126. #   2619 -r--r--r-- 1991/dds.hint
  127. #   1708 -r--r--r-- 1991/LANDER.BAS
  128. #     61 -r--r--r-- 1991/sorta.ifact1
  129. #    125 -r--r--r-- 1991/sorta.iio
  130. #   4255 -r--r--r-- 1991/ant.hint
  131. #     61 -r--r--r-- 1991/sorta.ifact2
  132. #   2968 -r--r--r-- 1991/buzzard.hint
  133. #   1428 -r--r--r-- 1991/cdupont.hint
  134. #   2987 -r--r--r-- 1991/fine.hint
  135. #   2798 -r--r--r-- 1991/rince.hint
  136. #    146 -r--r--r-- 1991/sorta.ifact3
  137. #    318 -r--r--r-- 1991/sorta.irot13
  138. #    140 -r--r--r-- 1991/sorta.isleep
  139. #     22 -r--r--r-- 1991/sorta.itailrec
  140. #     92 -r--r--r-- 1991/sorta.iwhosort
  141. #   1542 -r--r--r-- 1991/brnstnd.c
  142. #   5061 -r--r--r-- 1991/davidguy.hint
  143. #   8418 -r--r--r-- 1991/brnstnd.hint
  144. #
  145. if touch 2>&1 | fgrep 'amc' > /dev/null
  146.  then TOUCH=touch
  147.  else TOUCH=true
  148. fi
  149. # ============= 1991/README ==============
  150. if test ! -d '1991'; then
  151.     echo "x - creating directory 1991"
  152.     mkdir '1991'
  153. fi
  154. echo "x - extracting 1991/README (Text)"
  155. sed 's/^X//' << 'SHAR_EOF' > 1991/README &&
  156. X1991 marked the "The Eighth International Obfuscated C Code Contest"
  157. X
  158. X
  159. XInstructions for use: Run make to compile entries.  It is possible that
  160. Xon BSD or non-unix systems the makefile needs to be changed.
  161. X
  162. XLook at the source and try to figure out what the programs do, and run
  163. Xthem with various inputs.  If you want to, look at the hints files for
  164. X(minor) spoilers.
  165. X
  166. XThis year, we did not single out an entry that was better than all of
  167. Xthe rest.  We selected 3 entries that were, in our opinion, went beyond 
  168. Xall of the other entries this year:
  169. X
  170. X    Grand Prize            by Brian Westley
  171. X    Most Well Rounded        by Diomidis Spinellis
  172. X    Best Of Show            by Daniel J. Bernstein
  173. X
  174. XName and address information are separated from the actual program
  175. Xprior to judging.  This eliminates any chance that we would bias our
  176. Xjudging for/against any person or group.  In the end, we are surprised
  177. Xas you are to see who as won.  Even so, it is worth noting that
  178. XBrian Westley has submitted a winning entry for the past 5 years!
  179. X
  180. X
  181. XA few notes regarding possible changes to the contest:
  182. X
  183. XWe did not give awards to some traditional contest categories such as
  184. X"Best Layout" or "Worst Abuse of the Rules".  We felt that to do so
  185. Xwould deny awards to more deserving entries.  These categories have not
  186. Xbeen eliminated, and will likely be considered in future years.
  187. X
  188. XA number of entries made use of the following C pre-processor feature:
  189. X
  190. X    #define X define
  191. X    #X foo bar
  192. X
  193. XThis is not permitted under ANSI C.  Some ANSI C compilers do allow
  194. Xthis.  In the future, we do not want programs to use this feature.
  195. XBecause this request was not stated in the 1991 rules, we did not
  196. Xreject entries of this type.  However we provided more portable
  197. Xversions so that more people could compile these programs.
  198. X
  199. XThis year we received entries that made use of the X Window System.
  200. XThis functionality is now available on many systems, we feel that 
  201. Xprograms that use these are now portable enough to be valid entries.  
  202. X
  203. XWe may allow programs to make use of the X Window System libs and include 
  204. Xfiles, provided that they can operate with a system running at the level 
  205. Xof at least X11r4.  Requiring the use of imake, a specific window manager,
  206. Xspecific display hardware, or a specific user interface (Openl**k, 
  207. XM*tif, ...) is likely not to be allowed.  We will provide a more detailed 
  208. Xexplanation of our viewpoint in next year's rules.
  209. X
  210. XIn order to encourage more 'normal' looking C programs, we are considering 
  211. Xthe following change to the maximum size rule:
  212. X
  213. X    Your source, not counting any <space>, <tab>, and a <newline> character,
  214. X    and not counting any ';', '{' and '}' character followed by a <newline>
  215. X    character, must be 1536 bytes or less.  The entire source, counting all
  216. X    characters, be 4096 bytes or less.
  217. X
  218. XSome thought has been given to adding some c++ categories, however this
  219. Xis not likely to happen soon.  We are waiting until c++ compilers become
  220. Xcommon place on a wide number of systems.  We also need time to brace
  221. Xourselves for what obfuscation c++ could wield!
  222. X
  223. XBe sure to wait until the 1992 rules are posted before submitting entries.  
  224. XWe may fine tune the rules to reflect the some ideas above.
  225. X
  226. XPlease send us comments and suggestions what we have expressed above.
  227. XAlso include anything else that you would like to see in future contests.
  228. XSend such email to:
  229. X
  230. X    ...!{sun,pacbell,uunet,pyramid}!hoptoad!judges
  231. X    judges@toad.com
  232. X
  233. X
  234. XCredits:
  235. X
  236. XWe would like to thank Barbara Frezza for her role as official chef 
  237. Xof the contest.  Landon Noll appreciated the opportunity to serve
  238. Xas assistant pizza chef.  Larry Bassel was official taste tester. Yummo!
  239. SHAR_EOF
  240. $TOUCH -am 0813225091 1991/README &&
  241. chmod 0444 1991/README ||
  242. echo "restore of 1991/README failed"
  243. set `wc -c 1991/README`;Wc_c=$1
  244. if test "$Wc_c" != "3632"; then
  245.     echo original size 3632, current size $Wc_c
  246. fi
  247. # ============= 1991/rules ==============
  248. echo "x - extracting 1991/rules (Text)"
  249. sed 's/^X//' << 'SHAR_EOF' > 1991/rules &&
  250. X8th International Obfuscated C Code Contest Rules
  251. X
  252. X    Obfuscate:  tr.v.  -cated, -cating, -cates.  1. a.  To render obscure.
  253. X        b.  To darken.  2. To confuse:  his emotions obfuscated his
  254. X        judgment.  [LLat. obfuscare, to darken : ob(intensive) +
  255. X        Lat. fuscare, to darken < fuscus, dark.] -obfuscation n.
  256. X        obfuscatory adj.
  257. X
  258. X
  259. XGOALS OF THE CONTEST:
  260. X
  261. X    * To write the most Obscure/Obfuscated C program under the rules below.
  262. X    * To show what should NOT be done in C programs.
  263. X    * To provide a safe forum for poor C code.  :-)
  264. X
  265. X
  266. XDEDICATION:
  267. X
  268. X    The 1991 IOCCC is dedicated to the ANSI C pre-processor.
  269. X
  270. X
  271. XRULES:
  272. X
  273. X    To help us handle the vast volume of entries, we ask that you follow the
  274. X    rules below.  SORRY FOR THE LENGTH, BUT WE NEED ALL THE HELP WE CAN GET!
  275. X
  276. X    1) Your source MUST be 1536 bytes or less.   It must be a complete program.
  277. X
  278. X    2) To help us process your entries, we ask that you submit entries
  279. X       in the following format.  Please be sure to include ALL --- lines,
  280. X       otherwise our extraction program may skip your entry!
  281. X
  282. X---header items---
  283. Xname:        Your name, of course!
  284. X
  285. Xorg:        School/Company/Organization
  286. X
  287. Xemail address:    Email address from a well known site, or in a registered domain
  288. X
  289. Xpostal address:    Postal address
  290. X        include your country as well
  291. X
  292. Xenvironment:    Indicate the Hardware
  293. X        and OS under which your program was tested
  294. X
  295. Xentry:        5    <i.e., entry number from 0 to 7 inclusive>
  296. X
  297. Xremark:        Remarks about the program.  See rule #3 below for details.
  298. X---how to ANSI compile---
  299. XGive the command(s) needed to compile your program using an ANSI C
  300. Xcompiler.  If your program should not be compiled under an ANSI C compiler,
  301. Xleave this section blank.  The command size must be 160 characters or less.
  302. X---how to common compile---
  303. XGive the command(s) needed to compile your program using an K&R/traditional
  304. XC compiler.  If your program should not be compiled under a K&R style C,
  305. Xleave this section blank.  The command size must be 160 characters or less.
  306. X---program---
  307. XNot everyone has a program such as uuencode, and we don't want to blindly
  308. Xprocess a shar file, so we ask that you format your source as follows:
  309. X
  310. XAdd a leading X to EACH line, unless it is a split line.   (see below)
  311. X
  312. XSome mailers don't like long lines.  To be safe, split lines longer than 80
  313. X    characters.  To split a line, place an E at the point of a split and
  314. X    place a C (instead of an X) at the beginning of the next line.
  315. X
  316. XIf the program does not end in a newline, end the last line with an E.
  317. X
  318. XLeading X's, trailing E's followed by the two characters "\nC", and an E
  319. X    at the last character of the last line are not considered to part of the
  320. X    source and thus don't contribute toward the source character count.
  321. X    Be careful with lines ending in "E\n", see the example below.
  322. X
  323. XNewlines and tabs each count as 1 character.  Assume 8 character tab stops.
  324. X
  325. XThe newlines here were placed for reasons of readability.  In your entry,
  326. X    every line in this section must begin with either an X or a C.
  327. X
  328. XExample:
  329. X
  330. XXThis is a single line containing 79 E
  331. XCcharacters including the E
  332. XCfinal newline.
  333. XXThe next line contains only a single newline.
  334. XX
  335. XXThis line is terminated by a newline preceded by an EE
  336. XC
  337. XXThis last line is not terminated by a newline and ends in an EE
  338. X---end---
  339. X
  340. X    3) Regarding the header items:
  341. X
  342. X    * Any text outside of the above format will be kept confidential.
  343. X
  344. X    * All header lines are required, but you may use 'anonymous'
  345. X      for any header line other than 'remarks' or 'entry'.
  346. X
  347. X    * Only the '---program---' section uses the 'X', 'C', 'E' notation.
  348. X
  349. X    * In the 'remark' item, please include:
  350. X        - what this program does
  351. X        - why you think the program is obfuscated
  352. X        - any other remarks (humorous or otherwise)
  353. X        - By default, we will select your program source and/or binary
  354. X          filename.  If your entry REQUIRES a specific source and/or
  355. X          binary filename, please say so in the remark section.
  356. X        - If this entry is a re-submission of a previous entry.
  357. X
  358. X    4) Your entry should be written in common C (K&R + common extensions)
  359. X       or ANSI C.  If your program will NOT compile under an ANSI C or
  360. X       K&R C compiler, leave the particular 'how to' section blank.
  361. X       If you leave a 'how to' section blank, include the '---' line.
  362. X
  363. X       You do not have to fill in both 'how to' sections, though you must
  364. X       fill in at least one 'how to' section.  If you leave a 'how to'
  365. X       section blank, include the '---' line anyway.
  366. X
  367. X    5) The program must be of original work.  All programs must be
  368. X       in the public domain.  All copyrighted programs will be rejected.
  369. X
  370. X    6) Entries must be received between 06-Mar-91 0:00 UTC and
  371. X       16-May-91 0:00 UTC.  Email your entries the address found below.
  372. X       (UTC is essentially equivalent to Greenwich Mean Time)
  373. X
  374. X       We will attempt to Email a confirmation of receipt of contest
  375. X       entries, however since Email is not reliable you may not receive it.
  376. X       We regret that we can no longer accept entries via postal mail.
  377. X
  378. X    7) Each person may submit up to 8 entries.  Only 1 entry per Email
  379. X       letter.  If you submit multiple entries, be sure that each has a
  380. X       unique entry number.
  381. X
  382. X       We will discard all but the latest email in the case of multiple
  383. X       entries with the same entry number.  Thus, if you wish to correct
  384. X       a previously sent entry, re-send it with the same entry number.
  385. X       Just to be sure email does not arrive out or sequence, note that 
  386. X       fact in the 'remark' item.
  387. X
  388. X    8) Entries requiring human interaction to be built are not allowed.  
  389. X       (for example, don't use #include "/dev/tty")
  390. X
  391. X    9) Compiling an entry must result a regular file which may be executed.
  392. X       (for example, don't use -o /dev/tty)
  393. X
  394. X
  395. XANNOUNCEMENT OF WINNERS:
  396. X
  397. X    * First announcement will likely be at the Summer 91 Usenix conference.
  398. X
  399. X    * Winning entries will be posted in mid June 1991 to
  400. X      comp.sources.unix as well as news groups where these rules
  401. X      were posted.  (depending on the judges work load)
  402. X
  403. X    * Winning entries will be deposited into the uunet archives.
  404. X
  405. X    * An article containing the winning entries will be published
  406. X      in a future issue of the "Micro/Systems Journal".
  407. X
  408. X    * Winners receive international fame and flames!  :-)
  409. X
  410. X
  411. XJUDGING:
  412. X
  413. X    Awards will be given to the best entry in a number of categories.
  414. X    The actual category list will vary depending on the types of entries
  415. X    we receive.  As a guide, consider using the following:
  416. X
  417. X    * The best small one line program
  418. X    * The strangest source layout
  419. X    * The most useful obfuscated program
  420. X    * The most creatively obfuscated program
  421. X    * Best obfuscated entry smaller than 256 bytes
  422. X    * Best obfuscated entry smaller than 1024 bytes
  423. X    * Best abuse of ANSI C
  424. X    * Worse abuse of the rules (no abuse of entry format please!)
  425. X    * <anything else so strange that it deserves an award>
  426. X
  427. X
  428. XPOINTS TO PONDER:
  429. X
  430. X    People are encouraged to examine winners of the previous contests.
  431. X    A copy of these entries has been posted to comp.sources.unix.
  432. X    Contact the comp.sources.unix moderator, or some archive site (such
  433. X    as uunet).  Keep in mind that rules change from year to year, so some
  434. X    winning entries may not be valid entries this year.  What was unique
  435. X    and novel one year might be 'old' the next year.
  436. X
  437. X    We examine each entry on several levels of confusion.  For example
  438. X    each entry is judged when we:
  439. X
  440. X    * look at the original source
  441. X    * If it is ANSI, convert tri-graphs to ASCII
  442. X    * C pre-process the source ignoring '#include' '#define' lines
  443. X    * C pre-process the source ignoring '#define' and '#include' lines
  444. X    * run it through a C beautifier
  445. X    * examine the algorithm
  446. X    * lint it
  447. X    * compile it
  448. X    * execute it
  449. X
  450. X    One line programs are best when they are short, obscure and concise.
  451. X
  452. X    We tend to dislike programs that:
  453. X
  454. X    * are very hardware specific
  455. X    * are very OS or Un*x version specific
  456. X         (index/strchr differences are ok, but socket/streams specific
  457. X          code is likely not to be)
  458. X    * dump core or have compiler warnings
  459. X         (it is ok only if you warn us in the 'remark' header item)
  460. X    * won't compile under both BSD or SYS V Un*x
  461. X    * use an excessively long compile line to get around the size limit
  462. X    * obfuscate by excessive use of ANSI tri-graphs
  463. X    * are longer than they need to be
  464. X    * are similar to previous winners
  465. X    * are similar to previous losers  :-)
  466. X
  467. X    Simply abusing #defines or -Dfoo=bar won't go as far as a program
  468. X    that is more well rounded in confusion.
  469. X
  470. X    Unless you are cramped for space, or unless you are entering the
  471. X    'best one liner' category, we suggest that you format your program
  472. X    in a more creative way than simply forming excessively long lines.
  473. X
  474. X    We like programs that:
  475. X
  476. X    * are as concise and small as they need to be
  477. X    * do something at least quasi-interesting
  478. X    * pass lint without complaint (not a requirement, but it is nice)
  479. X    * are portable
  480. X    * are unique or novel in their obfuscation style
  481. X    * MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATION
  482. X    * make us laugh and/or throw up  :-)
  483. X
  484. X    Some types of programs can't excel in some areas.  Of course, your
  485. X    program doesn't have to excel in all areas, but doing well in several
  486. X    areas really does help.  A humorous note in the remark section helps.
  487. X
  488. X    Be creative!
  489. X
  490. X
  491. XEMAIL ADDRESSES
  492. X
  493. X    Send contest entries to:
  494. X
  495. X    ...!{sun,pacbell,uunet,pyramid}!hoptoad!obfuscate
  496. X    obfuscate@toad.com
  497. X
  498. X    The Judging will be done by Landon Noll and Larry Bassel.  If you have 
  499. X    questions or comments (no entries), please feel free to email them to:
  500. X
  501. X    ...!{sun,pacbell,uunet,pyramid}!hoptoad!judges
  502. X    judges@toad.com
  503. X
  504. X
  505. Xchongo <Landon Curt Noll> /\cc/\      hoptoad!chongo
  506. XLarry Bassel                  {uunet,ucbvax,cbosgd}|sun!lab
  507. SHAR_EOF
  508. $TOUCH -am 0622144891 1991/rules &&
  509. chmod 0444 1991/rules ||
  510. echo "restore of 1991/rules failed"
  511. set `wc -c 1991/rules`;Wc_c=$1
  512. if test "$Wc_c" != "9780"; then
  513.     echo original size 9780, current size $Wc_c
  514. fi
  515. # ============= 1991/Makefile ==============
  516. echo "x - extracting 1991/Makefile (Text)"
  517. sed 's/^X//' << 'SHAR_EOF' > 1991/Makefile &&
  518. X# %W% %G% %U%
  519. X#
  520. X# 1991 makefile
  521. X
  522. XSHELL=/bin/sh
  523. XMAKE=make
  524. XMAKEFLAGS=e
  525. X
  526. X# uncomment the line to select the preferred type of compile
  527. X#
  528. X# You should also check the ansi.mk or common.mk for the
  529. X# proper compiler name and flags.
  530. X#
  531. X# NOTE ==> USE=ansi     compile with an ANSI compiler by default
  532. X#USE=ansi
  533. X# NOTE ==> USE=common   compile with a common K&R compiler by default
  534. X#USE=common
  535. X
  536. XWINNERS= ant brnstnd buzzard cdupont davidguy dds fine rince westley
  537. X
  538. Xall:
  539. X    -@if [ "${USE}" = "common" ]; then \
  540. X        echo ${MAKE} -k -f common.mk all; \
  541. X        ${MAKE} -k -f common.mk all; \
  542. X    elif [ "${USE}" = "ansi" ]; then \
  543. X        echo ${MAKE} -k -f ansi.mk all; \
  544. X        ${MAKE} -k -f ansi.mk all; \
  545. X    else \
  546. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  547. X        echo "or type: make -f ansi.mk for ansi makes"; \
  548. X        echo "or type: make -f common.mk for common K&R makes"; \
  549. X        exit 1; \
  550. X    fi
  551. X
  552. Xansi:
  553. X    ${MAKE} -f ansi.mk all
  554. X
  555. Xcommon:
  556. X    ${MAKE} -f common.mk all
  557. X
  558. X${WINNERS} merlyn.c nextmove.c ttt_game.c:
  559. X    -@if [ "${USE}" = "common" ]; then \
  560. X        echo ${MAKE} -f common.mk $@; \
  561. X        ${MAKE} -f common.mk $@; \
  562. X    elif [ "${USE}" = "ansi" ]; then \
  563. X        echo ${MAKE} -f ansi.mk $@; \
  564. X        ${MAKE} -f ansi.mk $@; \
  565. X    else \
  566. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  567. X        echo "or type: make -f ansi.mk for ansi makes"; \
  568. X        echo "or type: make -f common.mk for common K&R makes"; \
  569. X        exit 1;\
  570. X    fi
  571. X
  572. Xttt: ttt.sh
  573. X    -@if [ "${USE}" = "common" ]; then \
  574. X        echo ${MAKE} -f common.mk $@; \
  575. X        ${MAKE} -f common.mk $@; \
  576. X    elif [ "${USE}" = "ansi" ]; then \
  577. X        echo ${MAKE} -f ansi.mk $@; \
  578. X        ${MAKE} -f ansi.mk $@; \
  579. X    else \
  580. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  581. X        echo "or type: make -f ansi.mk for ansi makes"; \
  582. X        echo "or type: make -f common.mk for common K&R makes"; \
  583. X        exit 1;\
  584. X    fi
  585. X
  586. Xmerlyn: merlyn.c
  587. X    -@if [ "${USE}" = "common" ]; then \
  588. X        echo ${MAKE} -f common.mk $@; \
  589. X        ${MAKE} -f common.mk $@; \
  590. X    elif [ "${USE}" = "ansi" ]; then \
  591. X        echo ${MAKE} -f ansi.mk $@; \
  592. X        ${MAKE} -f ansi.mk $@ \
  593. X    else \
  594. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  595. X        echo "or type: make -f ansi.mk for ansi makes"; \
  596. X        echo "or type: make -f common.mk for common K&R makes"; \
  597. X        exit 1;\
  598. X    fi
  599. X
  600. Xttt_game: ttt_game.c
  601. X    -@if [ "${USE}" = "common" ]; then \
  602. X        echo ${MAKE} -f common.mk $@; \
  603. X        ${MAKE} -f common.mk $@; \
  604. X    elif [ "${USE}" = "ansi" ]; then \
  605. X        echo ${MAKE} -f ansi.mk $@; \
  606. X        ${MAKE} -f ansi.mk $@; \
  607. X    else \
  608. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  609. X        echo "or type: make -f ansi.mk for ansi makes"; \
  610. X        echo "or type: make -f common.mk for common K&R makes"; \
  611. X        exit 1;\
  612. X    fi
  613. X
  614. Xnextmove: nextmove.c
  615. X    -@if [ "${USE}" = "common" ]; then \
  616. X        echo ${MAKE} -f common.mk $@; \
  617. X        ${MAKE} -f common.mk $@; \
  618. X    elif [ "${USE}" = "ansi" ]; then \
  619. X        echo ${MAKE} -f ansi.mk $@; \
  620. X        ${MAKE} -f ansi.mk $@; \
  621. X    else \
  622. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  623. X        echo "or type: make -f ansi.mk for ansi makes"; \
  624. X        echo "or type: make -f common.mk for common K&R makes"; \
  625. X        exit 1;\
  626. X    fi
  627. X
  628. Xclean:
  629. X    ${MAKE} -f ansi.mk clean
  630. X    ${MAKE} -f common.mk clean
  631. Xclobber:
  632. X    ${MAKE} -f ansi.mk clobber
  633. X    ${MAKE} -f common.mk clobber
  634. Xnuke: clobber
  635. X    ${MAKE} -f ansi.mk nuke
  636. X    ${MAKE} -f common.mk nuke
  637. Xinstall:
  638. X    ${MAKE} -f ansi.mk install
  639. X    ${MAKE} -f common.mk install
  640. SHAR_EOF
  641. $TOUCH -am 0814015291 1991/Makefile &&
  642. chmod 0444 1991/Makefile ||
  643. echo "restore of 1991/Makefile failed"
  644. set `wc -c 1991/Makefile`;Wc_c=$1
  645. if test "$Wc_c" != "3298"; then
  646.     echo original size 3298, current size $Wc_c
  647. fi
  648. # ============= 1991/ansi.mk ==============
  649. echo "x - extracting 1991/ansi.mk (Text)"
  650. sed 's/^X//' << 'SHAR_EOF' > 1991/ansi.mk &&
  651. X# %W% %G% %U%
  652. X#
  653. X# 1991 makefile
  654. X
  655. XSHELL=/bin/sh
  656. XCHMOD=chmod
  657. XCP=cp
  658. XRM=rm
  659. XSED=sed
  660. XLN=ln
  661. X
  662. X# flags for ansi compiles
  663. X#
  664. X# NOTE: Some ANSI compilers make use of -Xa to turn on ANSI mode,
  665. X#    others such as gcc may want -ansi, others may want nothing
  666. X#    at all.  Adjust the CFLAGS line as needed.
  667. X#
  668. XCFLAGS=-O -Xa
  669. XCC=cc
  670. X
  671. X# winners that may be ok to compile with common K&R
  672. X#
  673. XWINNERS= ant brnstnd buzzard cdupont davidguy dds fine westley rince
  674. X
  675. Xall: ${WINNERS}
  676. X
  677. Xcommon:
  678. X    @echo "wrong makefile, use ansi.mk"
  679. X    exit 1
  680. X
  681. Xansi: all
  682. X
  683. X# NOTE: some systems may need:
  684. X#
  685. X#  old SYS V:
  686. X#    cc ${CFLAGS} -DMODE=0600 -DBUF=32767 -o ant ant.c -lcurses
  687. X#  ATARI ST:
  688. X#    cc -DMODE=0 -DBUF=32767 -o ant.ttp ant.c curses.a
  689. X#  PC class:
  690. X#    wcl -mc -DMODE=0 -DBUF=32767 ant.c curses.lib
  691. X#
  692. Xant: ant.c
  693. X    ${CC} ${CFLAGS} -DMODE=0600 -DBUF=32767 ant.c -o ant -lcurses -ltermcap 
  694. X
  695. Xbrnstnd: brnstnd_ansi.c
  696. X    ${CC} ${CFLAGS} -DM=malloc -DX=free -Do=250 brnstnd_ansi.c -o brnstnd
  697. X
  698. Xbuzzard: buzzard.c
  699. X    ${CC} ${CFLAGS} buzzard.c -o buzzard
  700. X
  701. Xcdupont: cdupont_ansi.c
  702. X    ${CC} ${CFLAGS} -Ds=\"cdupont.c\" -Dt=\"r\" cdupont_ansi.c -o cdupont
  703. X
  704. X# NOTE: some systems may need:
  705. X#
  706. X#  ${CC} ${CFLAGS} davidguy.c -o davidguy
  707. X# or:
  708. X#  ${CC} ${CFLAGS} davidguy.c -o davidguy -linet
  709. X#
  710. Xdavidguy: davidguy.c
  711. X    ${CC} ${CFLAGS} davidguy.c -o davidguy -lsocket -lnsl
  712. X
  713. X# NOTE: this is the original program that won the contest
  714. X#
  715. X# BSD:
  716. X#    ${CC} ${CFLAGS} davidguy.orig.c -o davidguy.orig
  717. X#
  718. Xdavidguy.orig: davidguy.orig.c
  719. X    ${CC} ${CFLAGS} davidguy.orig.c -o davidguy.orig -lsocket -lnsl
  720. X
  721. Xdds: dds.ansi.c LANDER.BAS
  722. X    ${CC} ${CFLAGS} dds.ansi.c -o dds
  723. X
  724. Xfine: fine.c
  725. X    ${CC} ${CFLAGS} fine.c -o fine
  726. X
  727. Xwestley: westley.c ttt
  728. X    ${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  729. X        -DJ=z[4] -DK=J[14] \
  730. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  731. X        westley.c -o westley
  732. X
  733. X# the hint file gives nextmove.c as an example, provide a build rule for it
  734. X#
  735. Xnextmove: nextmove.c ttt
  736. X    ${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  737. X        -DJ=z[4] -DK=J[14] \
  738. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  739. X        nextmove.c -o nextmove
  740. X
  741. X# the ttt script has been added by the judges to make playing westley easy
  742. X#
  743. Xttt: ttt.sh
  744. X    rm -f ttt
  745. X    cp ttt.sh ttt
  746. X    chmod +x ttt
  747. X
  748. X# used by the ttt shell script when playing westley
  749. X#
  750. X# The ttt script controls what goes into merlyn.c, and how it is used.
  751. X# The merlyn program and source represent the best (hopefully) state that
  752. X# the program has evolved into thus far.  The ttt_game program and source
  753. X# represent the current state of the game.
  754. X#
  755. Xmerlyn: merlyn.c ttt
  756. X    @${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  757. X        -DJ=z[4] -DK=J[14] \
  758. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  759. X        merlyn.c -o merlyn
  760. Xttt_game: ttt_game.c ttt
  761. X    @${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  762. X        -DJ=z[4] -DK=J[14] \
  763. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  764. X        ttt_game.c -o ttt_game
  765. X
  766. X# The upper level makefile wants to make these source files if they don't
  767. X# already exist.
  768. X#
  769. Xmerlyn.c: westley.c
  770. X    rm -f merlyn.c
  771. X    cp westley.c merlyn.c
  772. X    chmod +w merlyn.c
  773. Xnextmove.c: westley.c
  774. X    rm -f nextmove.c
  775. X    cp westley.c nextmove.c
  776. X    chmod +w nextmove.c
  777. Xttt_game.c: westley.c
  778. X    rm -f ttt_game.c
  779. X    cp westley.c ttt_game.c
  780. X    chmod +w ttt_game.c
  781. X
  782. X# NOTE: some systems may need:
  783. X#
  784. X#  old SYS V:
  785. X#    cc ${CFLAGS} -o rince rince.c -lcurses
  786. X#
  787. X# The original source is found in rince.orig.c.  Many ANSI compilers have
  788. X# problems with it, so by default we use rince_ansi.c.
  789. X#
  790. X# GNU CC users can compile this with:
  791. X#
  792. X#    gcc -ansi rince.orig.c -o rince -lcurses -ltermcap
  793. X#
  794. Xrince: rince.c
  795. X    ${CC} ${CFLAGS} rince_ansi.c -o rince -lcurses -ltermcap 
  796. X
  797. Xclean:
  798. X    ${RM} -f *.o a.out core merlyn new_merlyn.c
  799. Xclobber: clean
  800. X    ${RM} -f ${WINNERS} a.c a.out davidguy.orig ttt
  801. X    ${RM} -f merlyn merlyn.c nextmove.c nextmove.c
  802. X    ${RM} -f ttt_game ttt_game.c ttt_old.c ttt_new.c nextmove
  803. Xnuke: clobber
  804. X    @true
  805. Xinstall: all
  806. X    cat ${WINNERS} > /dev/null
  807. SHAR_EOF
  808. $TOUCH -am 0814014491 1991/ansi.mk &&
  809. chmod 0444 1991/ansi.mk ||
  810. echo "restore of 1991/ansi.mk failed"
  811. set `wc -c 1991/ansi.mk`;Wc_c=$1
  812. if test "$Wc_c" != "4069"; then
  813.     echo original size 4069, current size $Wc_c
  814. fi
  815. # ============= 1991/common.mk ==============
  816. echo "x - extracting 1991/common.mk (Text)"
  817. sed 's/^X//' << 'SHAR_EOF' > 1991/common.mk &&
  818. X# %W% %G% %U%
  819. X#
  820. X# 1991 makefile
  821. X
  822. XSHELL=/bin/sh
  823. XCHMOD=chmod
  824. XCP=cp
  825. XRM=rm
  826. XSED=sed
  827. XLN=ln
  828. X
  829. X# flags for common K&R compiles
  830. X#
  831. XCFLAGS=-O
  832. XCC=cc
  833. X
  834. X# winners that may be ok to compile with common K&R
  835. X#
  836. XWINNERS= ant brnstnd buzzard cdupont davidguy dds fine westley rince
  837. X
  838. Xall: ${WINNERS}
  839. X
  840. Xansi:
  841. X    @echo "wrong makefile, use ansi.mk"
  842. X    exit 1
  843. X
  844. Xcommon: all
  845. X
  846. X# NOTE: some systems may need:
  847. X#
  848. X#  old SYS V:
  849. X#    cc ${CFLAGS} -DMODE=0600 -DBUF=32767 -o ant ant.c -lcurses
  850. X#  ATARI ST:
  851. X#    cc -DMODE=0 -DBUF=32767 -o ant.ttp ant.c curses.a
  852. X#  PC class:
  853. X#    wcl -mc -DMODE=0 -DBUF=32767 ant.c curses.lib
  854. X#
  855. Xant: ant.c
  856. X    ${CC} ${CFLAGS} -DMODE=0600 -DBUF=32767 ant.c -o ant -lcurses -ltermcap 
  857. X
  858. Xbrnstnd: brnstnd.c
  859. X    ${CC} ${CFLAGS} -DM=malloc -DX=free -Do=250 brnstnd.c -o brnstnd
  860. X
  861. Xbuzzard: buzzard.c
  862. X    ${CC} ${CFLAGS} buzzard.c -o buzzard
  863. X
  864. Xcdupont: cdupont.c
  865. X    ${CC} ${CFLAGS} -Ds=\"cdupont.c\" -Dt=\"r\" cdupont.c -o cdupont
  866. X
  867. X# NOTE: some systems may need:
  868. X#
  869. X#  ${CC} ${CFLAGS} davidguy.c -o davidguy
  870. X# or:
  871. X#  ${CC} ${CFLAGS} davidguy.c -o davidguy -linet
  872. X#
  873. Xdavidguy: davidguy.c
  874. X    ${CC} ${CFLAGS} davidguy.c -o davidguy -lsocket -lnsl
  875. X
  876. X# NOTE: this is the original program that won the contest
  877. X#
  878. X# BSD:
  879. X#    ${CC} ${CFLAGS} davidguy.orig.c -o davidguy.orig
  880. X#
  881. Xdavidguy.orig: davidguy.orig.c
  882. X    ${CC} ${CFLAGS} davidguy.orig.c -o davidguy.orig -lsocket -lnsl
  883. X
  884. Xdds: dds.c LANDER.BAS
  885. X    ${CC} ${CFLAGS} dds.c -o dds
  886. X
  887. Xfine: fine.c
  888. X    ${CC} ${CFLAGS} fine.c -o fine
  889. X
  890. Xwestley: westley.c ttt
  891. X    ${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  892. X        -DJ=z[4] -DK=J[14] \
  893. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  894. X        westley.c -o westley
  895. X
  896. X# the hint file gives nextmove.c as an example, provide a build rule for it
  897. X#
  898. Xnextmove: nextmove.c ttt
  899. X    ${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  900. X        -DJ=z[4] -DK=J[14] \
  901. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  902. X        nextmove.c -o nextmove
  903. X
  904. X# the ttt script has been added by the judges to make playing westley easy
  905. X#
  906. Xttt: ttt.sh
  907. X    rm -f ttt
  908. X    cp ttt.sh ttt
  909. X    chmod +x ttt
  910. X
  911. X# used by the ttt shell script when playing westley
  912. X#
  913. X# The ttt script controls what goes into merlyn.c, and how it is used.
  914. X# The merlyn program and source represent the best (hopefully) state that
  915. X# the program has evolved into thus far.  The ttt_game program and source
  916. X# represent the current state of the game.
  917. X#
  918. Xmerlyn: merlyn.c ttt
  919. X    @${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  920. X        -DJ=z[4] -DK=J[14] \
  921. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  922. X        merlyn.c -o merlyn
  923. Xttt_game: ttt_game.c ttt
  924. X    @${CC} ${CFLAGS} -DP=putchar -DN="P(10)" -DQ="P(34)" -DF="S(&X)" \
  925. X        -DJ=z[4] -DK=J[14] \
  926. X        -DH="w[]={146,7,292,73,448,56,84,273,325,297,108,324,22,40,48,40,17,325}" \
  927. X        ttt_game.c -o ttt_game
  928. X
  929. X# The upper level makefile wants to make these source files if they don't
  930. X# already exist.
  931. X#
  932. Xmerlyn.c: westley.c
  933. X    rm -f merlyn.c
  934. X    cp westley.c merlyn.c
  935. X    chmod +w merlyn.c
  936. Xnextmove.c: westley.c
  937. X    rm -f nextmove.c
  938. X    cp westley.c nextmove.c
  939. X    chmod +w nextmove.c
  940. Xttt_game.c: westley.c
  941. X    rm -f ttt_game.c
  942. X    cp westley.c ttt_game.c
  943. X    chmod +w ttt_game.c
  944. X
  945. X# NOTE: some systems may need:
  946. X#
  947. X#  old SYS V:
  948. X#    cc ${CFLAGS} -o rince rince.c -lcurses
  949. X#
  950. X# The original source is found in rince.orig.c.  Many ANSI compilers have
  951. X# problems with it, so by default we use rince_ansi.c.
  952. X#
  953. X# GNU CC users can compile this with:
  954. X#
  955. X#    gcc -ansi rince.orig.c -o rince -lcurses -ltermcap
  956. X#
  957. Xrince: rince.c
  958. X    ${CC} ${CFLAGS} rince.c -o rince -lcurses -ltermcap 
  959. X
  960. Xclean:
  961. X    ${RM} -f *.o a.out core
  962. Xclobber: clean
  963. X    ${RM} -f ${WINNERS} a.c a.out davidguy.orig ttt
  964. X    ${RM} -f merlyn merlyn.c nextmove.c nextmove.c
  965. X    ${RM} -f ttt_game ttt_game.c ttt_old.c ttt_new.c nextmove
  966. Xnuke: clobber
  967. X    @true
  968. Xinstall: all
  969. X    cat ${WINNERS} > /dev/null
  970. SHAR_EOF
  971. $TOUCH -am 0814014491 1991/common.mk &&
  972. chmod 0444 1991/common.mk ||
  973. echo "restore of 1991/common.mk failed"
  974. set `wc -c 1991/common.mk`;Wc_c=$1
  975. if test "$Wc_c" != "3842"; then
  976.     echo original size 3842, current size $Wc_c
  977. fi
  978. # ============= 1991/ant.c ==============
  979. echo "x - extracting 1991/ant.c (Text)"
  980. sed 's/^X//' << 'SHAR_EOF' > 1991/ant.c &&
  981. X#include <ctype.h>
  982. X#include <curses.h>
  983. X#define T isspace(*(t=Z(p)))&&
  984. X#define V return
  985. X#define _ while
  986. Xint d,i,j,m,n,p,q,x,y;char*c,b[BUF],*f,*g=b,*h,k[]="hjklHJKL[]tbixWRQ",*t;
  987. Xchar*Z(a){if(a<0)V b;V b+a+(b+a<g?0:h-g);}P(a)char*a;{V
  988. Xa-b-(a<h?0:h-g);}S(){p=0;}bf(){n=p=P(c);}Q(){q=1;}C(){clear();Y();}
  989. XG(){t=Z(p);_(t<g)*--h= *--g;_(h<t)*g++= *h++;p=P(h);}B(){_(!T b<t)--p;_(T
  990. Xb<t)--p;}M(a){_(b<(t=Z(--a))&&*t-'\n');V
  991. Xb<t?++a:0;}N(a){_((t=Z(a++))<c&&*t-'\n');V
  992. Xt<c?a:P(c);}A(a,j){i=0;_((t=Z(a))<c&&*t-'\n'&&i<j){i+= *t-'\t'?1:8-(i&7);++a;}V
  993. Xa;}L(){0<p&&--p;}R(){p<P(c)&&++p;}U(){p=A(M(M(p)-1),x);}
  994. XD(){p=A(N(p),x);}H(){p=M(p);}E(){p=N(p);L();}
  995. XJ(){m=p=M(n-1);_(0<y--)D();n=P(c);}K(){j=d;_(0<--j)m=M(m-1),U();}
  996. XI(){G();_((j=getch())-'\f'){if(j-'\b')g-h&&(*g++=j-'\r'?j:'\n');else
  997. Xb<g&&--g;p=P(h);Y();}}X(){G();p=h<c?P(++h):p;}
  998. XF(){j=p;p=0;G();write(i=creat(f,MODE),h,(int)(c-h));close(i);p=j;}W(){_(!T
  999. Xt<c)++p;_(T
  1000. Xt<c)++p;}int(*z[])()={L,D,U,R,B,J,K,W,H,E,S,bf,I,X,F,C,Q,G};
  1001. XY(){m=p<m?M(p):m;if(n<=p){m=N(p);i=m-P(c)?d:d-2;_(0<i--)m=M(m-1);}
  1002. Xmove(0,0);i=j=0;n=m;_(1){p-n||(y=i,x=j);t=Z(n);if(d<=i||c<=t)break;
  1003. Xif(*t-'\r')addch(*t),j+= *t-'\t'?1:8-(j&7);if(*t=='\n'||COLS<=j)
  1004. X++i,j=0;++n;}clrtobot();++i<d&&mvaddstr(i,0,"<< EOF >>");move(y,x);
  1005. Xrefresh();}main(u,v)char**v;{h=c=b+BUF;if(u<2)V
  1006. X2;initscr();d=LINES;raw();noecho();idlok(stdscr,1);if(0<(i=open(f= *++v,0))){
  1007. Xg+=read(i,b,BUF);g=g<b?b:g;close(i);}S();_(!q){Y();i=0;j=getch();
  1008. X_(k[i]&&j-k[i])++i;(*z[i])();}endwin();V 0;}
  1009. SHAR_EOF
  1010. $TOUCH -am 0807142291 1991/ant.c &&
  1011. chmod 0444 1991/ant.c ||
  1012. echo "restore of 1991/ant.c failed"
  1013. set `wc -c 1991/ant.c`;Wc_c=$1
  1014. if test "$Wc_c" != "1478"; then
  1015.     echo original size 1478, current size $Wc_c
  1016. fi
  1017. # ============= 1991/rince_ansi.c ==============
  1018. echo "x - extracting 1991/rince_ansi.c (Text)"
  1019. sed 's/^X//' << 'SHAR_EOF' > 1991/rince_ansi.c &&
  1020. X#include <curses.h>
  1021. Xint u=484,X[]={-1,0,0,1},Y[]={0,1,-1,0},x,y,D,i,j,a;
  1022. Xchar o,m,*t,*O="MNOH",*k="hjkl",*s="######\0######\0######\0      \0      \0      \0  ___ \0 /   \\\0 \\___/\0  ___ \0 /@@@\\\0 \\@@@/\0| | /\\\0----||\0    \\/\0  /--\\\0   \\/ \0 ==|  \0 ==|  \0   /\\ \0  \\--/\0 /O__o\0 \\___/\0 /_\\_ \0  <<  \0  <<  \0  <<  \0      \0vvvvvv\0      \0      \0^^^^^^\0      \0  /\\  \0 <  > \0  \\/  \0o__O\\ \0\\___/ \0 _/_\\ \0 O__O \0/----\\\0_/  \\_\0 ^__^ \0/----\\\0_/  \\_" ,
  1023. XM[12][22]={"AAAAAAAAAAAAAAAAAAAAAA" ,"ALCABBBBBBBABBCBBCABBA", "ACCABAKAAABAFBABABAEBA", "ABBBBABBIBBBBBEEABACLA", "ACCBNIBBAAAAGALBBBABCA", "AAAAAAAJACBABBCABAABCA", "ALLAACCBACBAAALLCABBBA", "ABDLAAABABCAAAALCABBLA", "ABCBIBBBBBBBBAAAAACBBA", "ABCCAABBADBBBBDBDBDBCA", "ALBBACCCCDBCABBBDBBBBA", "AAAAAAAAAAAAAAAAAAAAAA" };main(){initscr();clear();
  1024. Xnoecho();cbreak();x=y=4;D=39,o='M';m=M[y][x] ;while(D&&u){for(i=j=a=0;j<7;!(mvaddstr(
  1025. Xj*3+a,i*6,s+(((M[((y-1)/5)*5+j][((x-1)/10)*10+i]-'A')*3+a++)*7)),a^3)&&(a=0,!
  1026. X(++i^12))&&(a=i=0,j++));refresh();M[y][x] ='B';if(t=(char*)strchr(k,getch())){int e=
  1027. Xx,g=y,f=x,h=y,d=t-k;o=O[d];f=(e=x+X[d])+X[d];h=(g=y+Y[d])+Y[d];switch(M[g][e] ){case
  1028. X'B':x=e;y=g,u--;break ;case 'C':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='C')M[h][f] =M[g][e] ='L';break ;case 'D':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; break ;case'L':x=e;y=g,u--;D
  1029. X--;break ;case 'E':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='I'&&d==0)M[h][f] =M[g][e] ='B';break ; case 'F':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='J'&&d==1)M[h][f] =M[g][e] ='B';break ; case 'G':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='K'&&d==2)M[h][f] =M[g][e] ='B';break ; }}m=M[y][x] ;M[y][x] =o;}clear();mvaddstr(12
  1030. X,31,u?"Well done!":"Too many moves");move(23,0);refresh();endwin();return 0;}
  1031. X
  1032. SHAR_EOF
  1033. $TOUCH -am 0528170091 1991/rince_ansi.c &&
  1034. chmod 0444 1991/rince_ansi.c ||
  1035. echo "restore of 1991/rince_ansi.c failed"
  1036. set `wc -c 1991/rince_ansi.c`;Wc_c=$1
  1037. if test "$Wc_c" != "1872"; then
  1038.     echo original size 1872, current size $Wc_c
  1039. fi
  1040. # ============= 1991/rince.orig.c ==============
  1041. echo "x - extracting 1991/rince.orig.c (Text)"
  1042. sed 's/^X//' << 'SHAR_EOF' > 1991/rince.orig.c &&
  1043. X#include <curses.h>
  1044. X#define R break
  1045. X#define U M[h][f]
  1046. X#define W M[g][e]
  1047. X#define T M[y][x]
  1048. X#define B(a) "A"#a"A",
  1049. X#define A "AAAAAAAAAAAAAAAAAAAAAA"
  1050. X#define z(a) case a:if(U=='B')U=W,x=e,y=g,u--;
  1051. X#define Z(a,b) else if(U==a&&d==b)U=W='B';R;
  1052. X#define K(a) a##a##a
  1053. X#define k(a) #a#a#a#a#a#a"\0"
  1054. X#define V "      \0"
  1055. X#define S " \0/----\\\0_/  \\_"
  1056. Xint u=484,X[]={-1,0,0,1},Y[]={0,1,-1,0},x,y,D,i,j,a;char o,m,*t,*O="MNOH"
  1057. X,*k="hjkl",*s=K(k(#))V V V"  ___ \0 /   \\\0 \\___/\0  ___ \0 /@@@\\\0 "
  1058. X"\\@@@/\0| | /\\\0----||\0    \\/\0  /--\\\0   \\/ \0 ==|  \0 ==|  \0  "
  1059. X" /\\ \0  \\--/\0 /O__o\0 \\___/\0 /_\\_ \0"K("  <<  \0")V k(v)V V k(^)V
  1060. X"  /\\  \0 <  > \0  \\/  \0o__O\\ \0\\___/ \0 _/_\\ \0 O__O"S"\0 ^__^"S,
  1061. XM[12][22]={A,B(LCABBBBBBBABBCBBCABB)B(CCABAKAAABAFBABABAEB
  1062. X)B(BBBBABBIBBBBBEEABACL)B(CCBNIBBAAAAGALBBBABC)B(AAAAAAJACBABBCABAABC
  1063. X)B(LLAACCBACBAAALLCABBB)B(BDLAAABABCAAAALCABBL)B(BCBIBBBBBBBBAAAAACBB
  1064. X)B(BCCAABBADBBBBDBDBDBC)B(LBBACCCCDBCABBBDBBBB)A};main(){initscr();clear();
  1065. Xnoecho();cbreak();x=y=4;D=39,o='M';m=T;while(D&&u){for(i=j=a=0;j<7;!(mvaddstr(
  1066. Xj*3+a,i*6,s+(((M[((y-1)/5)*5+j][((x-1)/10)*10+i]-'A')*3+a++)*7)),a^3)&&(a=0,!
  1067. X(++i^12))&&(a=i=0,j++));refresh();T='B';if(t=(char*)strchr(k,getch())){int e=
  1068. Xx,g=y,f=x,h=y,d=t-k;o=O[d];f=(e=x+X[d])+d[X];h=(g=y+Y[d])+d[Y];switch(W){case
  1069. X'B':x=e;y=g,u--;R;z('C')else if(U=='C')U=W='L';R;z('D')R;case'L':x=e;y=g,u--;D
  1070. X--;R;z('E')Z('I',0)z('F')Z('J',1)z('G')Z('K',2)}}m=T;T=o;}clear();mvaddstr(12
  1071. X,31,u?"Well done!":"Too many moves");move(23,0);refresh();endwin();return 0;}
  1072. X
  1073. SHAR_EOF
  1074. $TOUCH -am 0527202891 1991/rince.orig.c &&
  1075. chmod 0444 1991/rince.orig.c ||
  1076. echo "restore of 1991/rince.orig.c failed"
  1077. set `wc -c 1991/rince.orig.c`;Wc_c=$1
  1078. if test "$Wc_c" != "1534"; then
  1079.     echo original size 1534, current size $Wc_c
  1080. fi
  1081. # ============= 1991/sorta.README ==============
  1082. echo "x - extracting 1991/sorta.README (Text)"
  1083. sed 's/^X//' << 'SHAR_EOF' > 1991/sorta.README &&
  1084. XThe 'sorta' scripts described below can sorta be found in this directory.
  1085. X
  1086. Xsorta.i2+2
  1087. X----------
  1088. X
  1089. X    2 2+#`            [ about as basic as you can get ]ld
  1090. X
  1091. XThis script takes 2, adds 2 to it, and prints the result (with a
  1092. Xnewline). I get 5 on the hand-held Sinclair under ZYNIX. Let me know if
  1093. Xyour machine produces a different result so that I can send you patches.
  1094. X
  1095. X
  1096. Xsorta.iarg0
  1097. X-----------
  1098. X
  1099. X    0A`           [ take arg 0, print it ]
  1100. X
  1101. XThis is self-explanatory.
  1102. X
  1103. X
  1104. Xsorta.icalc
  1105. X-----------
  1106. X
  1107. X
  1108. X    [D2sD3s]:Dld        [ input m n, output m n m n ]ld
  1109. X
  1110. X    [2*1=d]:cld         [ aux routine for :d recursion ]ld
  1111. X    [1=D1s>1Ds_+=c]:dld [ input m n, as long as n <= m double it, output m n ]ld
  1112. X
  1113. X    [D2s1s_+1s]:-ld     [ input m n, output m-n n ]ld
  1114. X    [1=D1s>1Ds_+#T=-2/D=1]:1ld [ aux routine for :@ ]ld
  1115. X    [1D=d2/1=1ddd1 ]:!ld
  1116. X    ["0"Td]:0ld
  1117. X    [DD=!1_+=0]:@ld     [ input m, m assumed nonnegative, append 
  1118. X              binary representation of m to top of s stack ]ld
  1119. X
  1120. X    ["-"T_]:+ld
  1121. X    [D0 1s>=+1=@]:2ld   [ input m, append - to top of s stack if m is negative,
  1122. X              then append binary representation of abs(m) to
  1123. X              top of s stack ]ld
  1124. X
  1125. X    [d1A:A2=A]:A 27182 a1>=A
  1126. X    [d2A:A1=A]:A 3145 a2>=A
  1127. X
  1128. X    D    # " in binary is "T 1=2 `ld
  1129. X    1=Dd # " in binary is "T 1=2 `ld
  1130. X
  1131. X    1=D  1s# " + "T 1s#T " is "T +  #Td `ld
  1132. X    1=D  1s# " - "T 1s#T " is "T _+  #Td `ld
  1133. X    1=D  1s# " * "T 1s#T " is "T *  #Td `ld
  1134. X    1=D  1s# " / "T 1s#T " is "T /  #Td `ld
  1135. X    1=D  1s# " % "T 1s#T " is "T 1=D/*_+  #Td `ld
  1136. X
  1137. X    1=D    d  "~ "    #T " is "T D& #T$ld " (" 1=2 ")"T `ld
  1138. X    1=D  1s# " & "T 1s#T " is "T &D&  #T$ld " (" 1=2 ")"T `ld
  1139. X    1=D  1s# " | "T 1s#T " is "T D&1sD&&  #T$ld " (" 1=2 ")"T `ld
  1140. X    1=D  1s# " ^ "T 1s#T " is "T 1=D&2sD&1sD&&&D&  #T$ld " (" 1=2 ")"T `ld
  1141. X
  1142. Xicalc shows off SORTA's understanding of integer arithmetic. You can run
  1143. Xit with up to two arguments; the arguments have default values of 27182
  1144. Xand 3145. Notice that sorta doesn't have a language primitive for
  1145. Xconverting a string to a number, yet icalc is performing arithmetic on
  1146. Xits arguments. Can you see how? (Hint: Try sorta "2 2+" 3 < sorta.icalc.
  1147. XLook at program A.) icalc also provides a useful binary output routine,
  1148. Xand if you can't remember offhand that D2sD3s&2sD&1sD&&&D& means xor,
  1149. Xyou can just look it up here.
  1150. X
  1151. X
  1152. Xsorta.idup
  1153. X-----------
  1154. X
  1155. X    [ld#1_+1=y]:x
  1156. X    [uD1+=x]:y
  1157. X    0""1=y`
  1158. X
  1159. XThis script prints out the maximum file descriptor available from
  1160. Xrepeated dup()s---usually NOFILE - 1. Can you see how it works?
  1161. X
  1162. X
  1163. Xsorta.iecho
  1164. X-----------
  1165. X
  1166. X    [" "$ld]:sld                    [ print a space ]ld
  1167. X    [1s1+DA$ld1s1_+D=sD=x]:xld      [ given n (argc-n), print args ]ld
  1168. X    0a1_+D=x""`                     [ simulation of /bin/echo ]ld
  1169. X
  1170. XThis is a clone of /bin/echo, minus any argument processing and escape
  1171. Xinterpretation. (Note that, unlike some shells' echo, /bin/echo prints a
  1172. Xnewline even with no arguments.) Try sorta foo bar < iecho.
  1173. X
  1174. X
  1175. Xsorta.ifact1
  1176. X------------
  1177. X
  1178. X    1#`ld2*#`ld3*#`ld4*#`ld5*#`ld6*#`ld7*#`ld8*#`ld9*#`ld10*#`ld
  1179. X
  1180. XThis is a very straightforward factorial program: Take 1, print it,
  1181. Xmultiply by 2, print it, multiply by 3, print it, etc.
  1182. X
  1183. X
  1184. Xsorta.ifact2
  1185. X------------
  1186. X
  1187. X    [1+D2s*#`ld1s]:f
  1188. X    1 0
  1189. X    1=f 1=f 1=f 1=f 1=f 1=f 1=f 1=f 1=f 1=f
  1190. X
  1191. Xifact1 does a lot of repeated work. ifact2 takes advantage of this by
  1192. Xkeeping the current n! n on the stack. Each call to routine f (1=f)
  1193. Xincrements n by 1 and prints out the factorial.
  1194. X
  1195. X
  1196. Xsorta.ifact3
  1197. X------------
  1198. X
  1199. X    [1+D2s*#`ld1s]:f       [ given (n-1)! (n-1), print n!, put n! n ]
  1200. X    [2s1=f2s1_+D0>=x]:x    [ given n n! x, print (n+1)! through (n+x)! ]
  1201. X    0 1 10 1=x
  1202. X
  1203. XFinally, ifact3 removes all the redundancy from ifact2, and exhibits
  1204. Xproper documentation of stack routines. You can replace the 10 by
  1205. Xanything in this version.
  1206. X
  1207. X
  1208. Xsorta.iio
  1209. X---------
  1210. X
  1211. X      [ a simple example of interpreting code on the fly ]ld
  1212. X
  1213. X    ["] "2 2+":xT ["]T " produces "T 1=x#T " which should be 4."T`
  1214. X
  1215. XNotice that "2 2+" is a literal string inside the program.
  1216. X
  1217. X
  1218. Xsorta.irot13
  1219. X------------
  1220. X
  1221. X    "[] [.tr] "
  1222. X    ["]".[a-m][n-z][A-M][N-Z]"[" ]TTT ["]".[n-z][a-m][N-Z][A-M]"[" ]TTT
  1223. X    "[tr] !q"T:xld
  1224. X    ["rot13: fatal: need exactly one argument"`q]:gld
  1225. X    ["rot13: fatal: cannot open "1ST`q]:hld
  1226. X    a2_+=g
  1227. X    1A 0 [ that 0 is for RDONLY ]ld
  1228. X     0 'o D0 1s>=hld
  1229. X    0Ou1=x  [ in a more complex spawner, this would be done under a fork ]ld
  1230. X
  1231. XDespite its name, irot13 is meant to show how to exec a program with
  1232. Xredirection from within sorta. You run it as sorta blah < irot13; it
  1233. Xopens blah and runs a (BSD-style) tr command to rotate all letters by 13
  1234. Xspots. 1A 0 0 o opens argv[1]; the ' keeps the filename around for
  1235. Xsubroutine h to print a nice error message if necessary. 0Ou closes
  1236. Xstdout and replaces it with the new descriptor. Finally, subroutine x
  1237. Xexecutes the tr.
  1238. X
  1239. X
  1240. Xsorta.isleep
  1241. X------------
  1242. X
  1243. X    ["" "+sleep" "+5" "sleep" !q]:S [F0>1_+=S]:s
  1244. X    "forking sleep 5..."`ld
  1245. X    1=s
  1246. X    "waiting for sleep to finish..."`ld
  1247. X    w
  1248. X    "done, sleep exit code " #T`
  1249. X
  1250. XThis script illustrates the classic fork-exec-wait.
  1251. X
  1252. X
  1253. Xsorta.itailrec
  1254. X--------------
  1255. X
  1256. X    [3*#" "T$ldD=f]:f
  1257. X    1=f
  1258. X
  1259. XThe sole purpose of this script is to prove that sorta can do infinite
  1260. Xtail recursion (in this case, in program f). Do sorta < itailrec | more
  1261. Xand watch the powers of 3 (mod your computer's word size) flow by.
  1262. X
  1263. X
  1264. Xsorta.iwhosort
  1265. X--------------
  1266. X
  1267. X    [0Ou "" "+-u" "sort" !q]:S [F0>1_+=S]:s
  1268. X    [1Ou "" "+-u" "who"  !q]:W [F0>1_+=W]:w
  1269. X    P1=wO1=sOww
  1270. X
  1271. XThis final example is a simple pipeline, who | sort.
  1272. SHAR_EOF
  1273. $TOUCH -am 0807143691 1991/sorta.README &&
  1274. chmod 0444 1991/sorta.README ||
  1275. echo "restore of 1991/sorta.README failed"
  1276. set `wc -c 1991/sorta.README`;Wc_c=$1
  1277. if test "$Wc_c" != "5503"; then
  1278.     echo original size 5503, current size $Wc_c
  1279. fi
  1280. # ============= 1991/sorta.i2+2 ==============
  1281. echo "x - extracting 1991/sorta.i2+2 (Text)"
  1282. sed 's/^X//' << 'SHAR_EOF' > 1991/sorta.i2+2 &&
  1283. X2 2+#`            [ about as basic as you can get ]ld
  1284. SHAR_EOF
  1285. $TOUCH -am 0622130991 1991/sorta.i2+2 &&
  1286. chmod 0444 1991/sorta.i2+2 ||
  1287. echo "restore of 1991/sorta.i2+2 failed"
  1288. set `wc -c 1991/sorta.i2+2`;Wc_c=$1
  1289. if test "$Wc_c" != "54"; then
  1290.     echo original size 54, current size $Wc_c
  1291. fi
  1292. # ============= 1991/sorta.iarg0 ==============
  1293. echo "x - extracting 1991/sorta.iarg0 (Text)"
  1294. sed 's/^X//' << 'SHAR_EOF' > 1991/sorta.iarg0 &&
  1295. X0A`           [ take arg 0, print it ]
  1296. SHAR_EOF
  1297. $TOUCH -am 0622130991 1991/sorta.iarg0 &&
  1298. chmod 0444 1991/sorta.iarg0 ||
  1299. echo "restore of 1991/sorta.iarg0 failed"
  1300. set `wc -c 1991/sorta.iarg0`;Wc_c=$1
  1301. if test "$Wc_c" != "39"; then
  1302.     echo original size 39, current size $Wc_c
  1303. fi
  1304. # ============= 1991/dds.c ==============
  1305. echo "x - extracting 1991/dds.c (Text)"
  1306. sed 's/^X//' << 'SHAR_EOF' > 1991/dds.c &&
  1307. X#include <stdio.h>
  1308. X#define Q r=R[*p++-'0'];while(
  1309. X#define B ;break;case
  1310. Xchar*s="Qjou!s\\311^-g\\311^-n\\311^-c\\::^-q-ma%mO1JBHm%BQ-aP1J[O1HB%[Q<nbj\
  1311. Xo)*|gps)<<*txjudi)m*|aQdbtf!::::;sfuvso<aQefgbvmu;aQ<m,,a%CQ<csfbla%bQ<aN2!Q\
  1312. X\ndbtf!aP2Q;m>aP2Q<a%!D12J!JGJHJOJQJFJSJJJMHS%HD12D12N3!N4\nJUJT%UQm>aP4HC%T\
  1313. XQs\\q,,^>m,2<m>aP4HC%SD12N1\nJNQm>s\\..q^aHC%NHb%GN1!D32P3%RN1UP1D12JPQUaP1H\
  1314. XR%PN4\nQ<g\\(aP3Q(^>aP2Q,2<n\\(aP3Q(^>aP4Hb%OD12D12N2!N3\nJVP3Q,,<jg)aP3Q=>n\
  1315. X\\(aP3Q(^*m>g\\(aP3Q(^<fmtf!m,,aHC%QN1!N1\nJ#Qqsjoug)#&e]o#-aP1Q*aHb%#Qqvut)\
  1316. XaP1Q*aHb%FN1\nQm>::::aHC%VP3Q>bupj)hfut)c**aHb%JD12JON1!Qjg)a%LN1UP1D12JIQUa\
  1317. XP1HL%IQ*m>aN2!N2\nP2Q<fmtf!m,,aHC%MN1!N2>P2Q>aN2\nP2Hbdd!b/d";k;char R[4][99]
  1318. X;main(c,v)char**v;{char*p,*r,*q;for(q=s;*q;q++)*q>' '&&(*q)--;{FILE*i=fopen(v
  1319. X[1],"r"),*o=fopen(q-3,"w");for(p=s;;p++)switch(*p++){B'M':Q(k=fgetc(i))!=EOF
  1320. X&&k!=*p)*r++=k;if(k==EOF){fputs("}}\n",o);fclose(o);return system(q-6);}*r=0
  1321. XB'P':while(*p!='`')fputc(*p++,o)B'O':Q*r)fputc(*r++,o);p--B'C':k=0;Q k<*p-'0'
  1322. X)(*r++=fgetc(i),k++);*r=0 B'I':k= *p;if(**R==k)goto G B'G':k= *p;G:p=s;while(
  1323. X*p!='$'||p[1]!= k)p++;p++B'N':R[*p-'0'][0]++;}}}
  1324. SHAR_EOF
  1325. $TOUCH -am 0807155091 1991/dds.c &&
  1326. chmod 0444 1991/dds.c ||
  1327. echo "restore of 1991/dds.c failed"
  1328. set `wc -c 1991/dds.c`;Wc_c=$1
  1329. if test "$Wc_c" != "1133"; then
  1330.     echo original size 1133, current size $Wc_c
  1331. fi
  1332. # ============= 1991/westley.c ==============
  1333. echo "x - extracting 1991/westley.c (Text)"
  1334. sed 's/^X//' << 'SHAR_EOF' > 1991/westley.c &&
  1335. X        a(X){/*/X=-        a(X){/*/X=-
  1336. X        -1;F;X=-        -1;F;X=-
  1337. X        -1;F;}/*/        -1;F;}/*/
  1338. Xchar*z[]={"char*z[]={","a(X){/*/X=-","-1;F;X=-","-1;F;}/*/","9999999999  :-| ",
  1339. X"int q,i,j,k,X,O=0,H;S(x)int*x;{X+=X;O+=O;*x+1?*x+2||X++:O++;*x=1;}L(n){for(*",
  1340. X"z[i=1]=n+97;i<4;i++)M(256),s(i),M(128),s(i),M(64),N;X*=8;O*=8;}s(R){char*r=z",
  1341. X"[R];for(q&&Q;*r;)P(*r++);q&&(Q,P(44));}M(m){P(9);i-2||P(X&m?88:O&m?48:32);P(",
  1342. X"9);}y(A){for(j=8;j;)~A&w[--j]||(q=0);}e(W,Z){for(i-=i*q;i<9&&q;)y(W|(1<<i++&",
  1343. X"~Z));}R(){for(k=J[*J-48]-40;k;)e(w[k--],X|O);}main(u,v)char**v;{a(q=1);b(1);",
  1344. X"c(1);*J=--u?O?*J:*v[1]:53;X|=u<<57-*v[u];y(X);K=40+q;q?e(O,X),q&&(K='|'),e(X",
  1345. X",O),R(),O|=1<<--i:J[*J-48+(X=O=0)]--;L(q=0);for(s(i=0);q=i<12;)s(i++),i>4&&N",
  1346. X";s(q=12);P(48);P('}');P(59);N;q=0;L(1);for(i=5;i<13;)s(i++),N;L(2);}",0};
  1347. X        b(X){/*/X=-        b(X){/*/X=-
  1348. X        -1;F;X=-        -1;F;X=-
  1349. X        -1;F;}/*/        -1;F;}/*/
  1350. Xint q,i,j,k,X,O=0,H;S(x)int*x;{X+=X;O+=O;*x+1?*x+2||X++:O++;*x=1;}L(n){for(*
  1351. Xz[i=1]=n+97;i<4;i++)M(256),s(i),M(128),s(i),M(64),N;X*=8;O*=8;}s(R){char*r=z
  1352. X[R];for(q&&Q;*r;)P(*r++);q&&(Q,P(44));}M(m){P(9);i-2||P(X&m?88:O&m?48:32);P(
  1353. X9);}y(A){for(j=8;j;)~A&w[--j]||(q=0);}e(W,Z){for(i-=i*q;i<9&&q;)y(W|(1<<i++&
  1354. X~Z));}R(){for(k=J[*J-48]-40;k;)e(w[k--],X|O);}main(u,v)char**v;{a(q=1);b(1);
  1355. Xc(1);*J=--u?O?*J:*v[1]:53;X|=u<<57-*v[u];y(X);K=40+q;q?e(O,X),q&&(K='|'),e(X
  1356. X,O),R(),O|=1<<--i:J[*J-48+(X=O=0)]--;L(q=0);for(s(i=0);q=i<12;)s(i++),i>4&&N
  1357. X;s(q=12);P(48);P('}');P(59);N;q=0;L(1);for(i=5;i<13;)s(i++),N;L(2);}
  1358. X        c(X){/*/X=-        c(X){/*/X=-
  1359. X        -1;F;X=-        -1;F;X=-
  1360. X        -1;F;}/*/        -1;F;}/*/
  1361. SHAR_EOF
  1362. $TOUCH -am 0807160491 1991/westley.c &&
  1363. chmod 0444 1991/westley.c ||
  1364. echo "restore of 1991/westley.c failed"
  1365. set `wc -c 1991/westley.c`;Wc_c=$1
  1366. if test "$Wc_c" != "1536"; then
  1367.     echo original size 1536, current size $Wc_c
  1368. fi
  1369. # ============= 1991/rince.c ==============
  1370. echo "x - extracting 1991/rince.c (Text)"
  1371. sed 's/^X//' << 'SHAR_EOF' > 1991/rince.c &&
  1372. X#include <curses.h>
  1373. Xint u=484,X[]={-1,0,0,1},Y[]={0,1,-1,0},x,y,D,i,j,a;
  1374. Xchar o,m,*t,*O="MNOH",*k="hjkl",*s="######\0######\0######\0      \0      \0      \0  ___ \0 /   \\\0 \\___/\0  ___ \0 /@@@\\\0 \\@@@/\0| | /\\\0----||\0    \\/\0  /--\\\0   \\/ \0 ==|  \0 ==|  \0   /\\ \0  \\--/\0 /O__o\0 \\___/\0 /_\\_ \0  <<  \0  <<  \0  <<  \0      \0vvvvvv\0      \0      \0^^^^^^\0      \0  /\\  \0 <  > \0  \\/  \0o__O\\ \0\\___/ \0 _/_\\ \0 O__O \0/----\\\0_/  \\_\0 ^__^ \0/----\\\0_/  \\_" ,
  1375. XM[12][22]={"AAAAAAAAAAAAAAAAAAAAAA" ,"ALCABBBBBBBABBCBBCABBA", "ACCABAKAAABAFBABABAEBA", "ABBBBABBIBBBBBEEABACLA", "ACCBNIBBAAAAGALBBBABCA", "AAAAAAAJACBABBCABAABCA", "ALLAACCBACBAAALLCABBBA", "ABDLAAABABCAAAALCABBLA", "ABCBIBBBBBBBBAAAAACBBA", "ABCCAABBADBBBBDBDBDBCA", "ALBBACCCCDBCABBBDBBBBA", "AAAAAAAAAAAAAAAAAAAAAA" };main(){initscr();clear();
  1376. Xnoecho();cbreak();x=y=4;D=39,o='M';m=M[y][x] ;while(D&&u){for(i=j=a=0;j<7;!(mvaddstr(
  1377. Xj*3+a,i*6,s+(((M[((y-1)/5)*5+j][((x-1)/10)*10+i]-'A')*3+a++)*7)),a^3)&&(a=0,!
  1378. X(++i^12))&&(a=i=0,j++));refresh();M[y][x] ='B';if(t=(char*)strchr(k,getch())){int e=
  1379. Xx,g=y,f=x,h=y,d=t-k;o=O[d];f=(e=x+X[d])+X[d];h=(g=y+Y[d])+Y[d];switch(M[g][e] ){case
  1380. X'B':x=e;y=g,u--;break ;case 'C':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='C')M[h][f] =M[g][e] ='L';break ;case 'D':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; break ;case'L':x=e;y=g,u--;D
  1381. X--;break ;case 'E':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='I'&&d==0)M[h][f] =M[g][e] ='B';break ; case 'F':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='J'&&d==1)M[h][f] =M[g][e] ='B';break ; case 'G':if(M[h][f] =='B')M[h][f] =M[g][e] ,x=e,y=g,u--; else if(M[h][f] =='K'&&d==2)M[h][f] =M[g][e] ='B';break ; }}m=M[y][x] ;M[y][x] =o;}clear();mvaddstr(12
  1382. X,31,u?"Well done!":"Too many moves");move(23,0);refresh();endwin();return 0;}
  1383. X
  1384. SHAR_EOF
  1385. $TOUCH -am 0528165791 1991/rince.c &&
  1386. chmod 0444 1991/rince.c ||
  1387. echo "restore of 1991/rince.c failed"
  1388. set `wc -c 1991/rince.c`;Wc_c=$1
  1389. if test "$Wc_c" != "1872"; then
  1390.     echo original size 1872, current size $Wc_c
  1391. fi
  1392. # ============= 1991/fine.c ==============
  1393. echo "x - extracting 1991/fine.c (Text)"
  1394. sed 's/^X//' << 'SHAR_EOF' > 1991/fine.c &&
  1395. Xmain(a,b){while((a=getchar())+1)putchar((b=64^a&223)&&b<27?a&96|(b+12)%26+1:a);}
  1396. SHAR_EOF
  1397. $TOUCH -am 0527155391 1991/fine.c &&
  1398. chmod 0444 1991/fine.c ||
  1399. echo "restore of 1991/fine.c failed"
  1400. set `wc -c 1991/fine.c`;Wc_c=$1
  1401. if test "$Wc_c" != "81"; then
  1402.     echo original size 81, current size $Wc_c
  1403. fi
  1404. # ============= 1991/buzzard.c ==============
  1405. echo "x - extracting 1991/buzzard.c (Text)"
  1406. sed 's/^X//' << 'SHAR_EOF' > 1991/buzzard.c &&
  1407. X#include <stdio.h>
  1408. X#define X(s) (!(s&3)-((s&3)==2))
  1409. X#define W while
  1410. Xchar Z[82][82],A,B,f,g=26;z(q){return atoi(q);}m(d,l){return
  1411. XZ[   B       +    X      (   f     +
  1412. X3) * d+l *X(f+ 2 )][ A+X ( f ) * d +
  1413. Xl* X           (     f     + 3 ) ] ;}int
  1414. Xh= 0;D(p,s)char*s; {W(h>>3<p>> 3 ) {putchar('\t'
  1415. X);           h =       (       h   +8
  1416. X)&~7 ;}W(h < p ){putchar(' ');++h; }(void)printf(
  1417. X"%s"   ,   s                 )     ;h+=strlen(s);}main(x,a)char **a; {
  1418. X# define P(x) (x?(5-(x))*(6-(x ))/2:11)
  1419. Xint b; { char b[256],i,  j=0;  FILE*F;F=fopen(x-1?a[1]:"buzzard.c","r");W(
  1420. Xfgets( b ,256 ,F)){for(i=0;b[ i];++ i)
  1421. XZ[j][i ] =( b [     i   ]     ==' '?1:2*(b[i]==(x>2?*a[2]:'\\')));++j;}fclose
  1422. X(F);}A   =4 ; B = 3 ; f = 1;x >3? A=z(a[3]),B=z(a[4]):0;b='\n';do{if(b=='\n'
  1423. X){int y ,     s , d , p   , q       ,i;for
  1424. X(y=-11; y<= 11;++ y){ for(s = 1 ,d=0;s+3;s-=2){for
  1425. X(;d!=2    +       3   * s     ;     d+=s){
  1426. Xif(m(d,0) !=1 ){p=P (d) ;if (abs( y )
  1427. X   <p&&   !   m       (       d   , 0 )||abs(y)>p)break;for
  1428. X(i  =-p;i<p;++i)D(g+i*2,"--");D(0,"\-");break;}if(d==5)continue;
  1429. Xp=P(d+1);q=P(d);if
  1430. X(abs(y)        >q)continue;if 
  1431. X(abs(y)        <p)D(g-s*(2*p+1),"|");else if(m(d,s)){if
  1432. X(abs(y)        <=p)for(i=(s==1?-q:p);i!=(s==1?-p:q);
  1433. X(abs(y)        ),++i)D(g+2*i+(s==-1),"--");}else if
  1434. X(abs(y)        ==p)D(g-s*(2*p+1),"|");else D(g-
  1435. X(abs(y)        *s*2),(s==1)^(y>0)?"\\":"/");}d-=s;}puts(
  1436. X"");h=0;}}f+=(b=='r')-(b=='l');f&=3;if(b=='f'){if(!m(1,0))continue;
  1437. XA+=X(f);B+=X(f-1);}}W((b=getchar())!=-1&&m(0,0)==1);return 0;}
  1438. SHAR_EOF
  1439. $TOUCH -am 0807151891 1991/buzzard.c &&
  1440. chmod 0444 1991/buzzard.c ||
  1441. echo "restore of 1991/buzzard.c failed"
  1442. set `wc -c 1991/buzzard.c`;Wc_c=$1
  1443. if test "$Wc_c" != "1472"; then
  1444.     echo original size 1472, current size $Wc_c
  1445. fi
  1446. # ============= 1991/cdupont.c ==============
  1447. echo "x - extracting 1991/cdupont.c (Text)"
  1448. sed 's/^X//' << 'SHAR_EOF' > 1991/cdupont.c &&
  1449. X   /* common sense  to nohonest programmer */
  1450. X#include <stdio.h>
  1451. Xmain(){int x  ,gi=4,i,f,ri=1,httxkbl=1,m=012;long cd=0x5765248d,n;
  1452. X   char u[0x50][032];FILE *ind;
  1453. X      ind=fopen(s,t); for(i=0; i<0x1a; i++){goto daswjhkls;vhjsgfdy1l1gjhd:;}
  1454. X/*borntorun.*/goto c0g0;cOgO:i=0;fclose(ind);c0gO:
  1455. Xx=  u [gi][m]; sorryfor_this_unused_but_very_needed_label:
  1456. X     if(  m==gi){x=0x70;f=0x68;}else goto cOg0 ; b:putchar(x); if(
  1457. X!(n-httxkbl++))
  1458. X#define yank putchar('
  1459. X  {httxkbl=1;       yank ');goto
  1460. X   hxi;}goto bl;
  1461. X           /* hardlyundrstandable, but
  1462. Xlikely to be missed if removed */
  1463. X    daswjhkls:    fgets(u[i], 0120, ind);
  1464. X  /*obfuscated, eh? */goto
  1465. X    vhjsgfdy1l1gjhd;
  1466. X          c0g0 : n=cd&0x40000000L>>0x1e;
  1467. X goto         cOgO;   g6w:
  1468. X                 if(x!=0x2e){i++;goto c0gO;}else /*
  1469. Xinjail*/yank\n');goto vhjsgfdyl1lgjhd;
  1470. XcOg0 :
  1471. Xf=u[m][gi];goto b;bl:m=(i+1)*(4*
  1472. Xx+3*f)%032;gi=(i+1)*(x+2*f)%0x1a; goto g6w;
  1473. X  hxi:cd^=        n=  cd&(7<<3*(014-++ri));
  1474. Xn >>=3*(12-ri); goto bl;vhjsgfdyl1lgjhd:;}
  1475. SHAR_EOF
  1476. $TOUCH -am 0608020091 1991/cdupont.c &&
  1477. chmod 0444 1991/cdupont.c ||
  1478. echo "restore of 1991/cdupont.c failed"
  1479. set `wc -c 1991/cdupont.c`;Wc_c=$1
  1480. if test "$Wc_c" != "1001"; then
  1481.     echo original size 1001, current size $Wc_c
  1482. fi
  1483. # ============= 1991/davidguy.c ==============
  1484. echo "x - extracting 1991/davidguy.c (Text)"
  1485. sed 's/^X//' << 'SHAR_EOF' > 1991/davidguy.c &&
  1486. X#define u unsigned
  1487. X#define w char*
  1488. X#define j(x)(*(*(x*)&T)++)
  1489. X#define H j(short*)
  1490. X#define K j(w)
  1491. X#define e j(u*)
  1492. X#define r register u
  1493. X#define R(b)write(A,T=h,4*b);
  1494. X#define S (u*)sbrk(Q*4+U*8)+U
  1495. X#define E(a,b,c)a=c&1<<31|b/2;c=c*2|b&1;
  1496. X#define V q=h^*L;L+=F;E(d,q,x)E(f,d,s)g=f&q;f^=q
  1497. X#define W while(
  1498. X#define Z q=I&f;M|=q&c;c^=q;I^=f;M|=g&c;c^=g
  1499. X#define Y W(F= *s++-'0')<=9)*T=10**T+F;K
  1500. X#define D(q,s)c);W q>s)G= *--q,*q= *s,*s++=G;
  1501. X#define P if(i^z){x=Q+(n=D(x,n)
  1502. X#define C if(i){q=Q*4+(s=(w)D(q,s)
  1503. Xu A,U,Q,J,X[9999],B;main(a,b)w*b;{r*c,*d,y=0,f,g,F,I,M,N,z,*x,*n,i,G;w q,*h=(w
  1504. X)X,*T,*s=".slo.-W00,tmhw.W/";T=h;if(a>1){e;s=b[1];Y;Y;Y;Y;T=h;H;K=23;Y+=112;T=
  1505. Xh;Y;y= *--T;H=2;}else{H=1;W*s)K=1+*s++;}connect(A=socket(a,1,0),T=h,24-a*4);H=
  1506. X17004;H=11;e=0;e=0;i=66==*h;R(3)read(A,h,8);e;H;read(A,h,4*H);T=h;e;F=e;e;e;I=
  1507. X11+H;f=H-6;K;U=K;i^=K;z=!K;T+=I/4*4+8*U;W y--){T+=39;I=K;W I--)H,T+=4+24*H;}I=
  1508. Xe;e;B=(!e^**b&1)-1;e;e;U=H/32;J=H/30*30;T+=14;M=K;f/=U;T=h;K=55;K;H=4;e=F;e=I;
  1509. Xe=0;R(4)N=F+8192;K=53;K=M;H=4;e=N;e=I;H=U*32;H=J;R(4)K=2;K;H=4;e=I;e=1;e=N;R(4
  1510. X)Q=J*U;c=S;d=S;L(c);W 1){P}C}y=0;W y<J){K=72;K=0;g=J-y;H=6+U*(g>f?g=f:g);e=N;e
  1511. X=F;H=U*32;H=g;H=0;H=y;K=0;K=1;R(6)write(A,c+y*U,g*U*4);y+=g;}K=61;K=0;H=4;e=I;
  1512. Xe=0;e=0;R(4)C}P}v(c,d);}}L(A)r*A;{r*T=A+Q,X=getpid();W A<T)*A++=X=3*X^X/2;}v(n
  1513. X,O)u*n,*O;{r*A,F=U,*L=n-F,*G=L+Q,I,c,d,M,f,g,N,q,i=0,X,T,v,s,x,*y,*z,h=B;W L<n
  1514. X){*L= *G;G++[F]=L++[F];}W i<J){z=O+i*F;y=n+i*F-F;i+=30;L=y-1;A=L+U*32;W L<A){L
  1515. X+=F;E(X,(*L^h),x)E(q,X,s)}X=0;W X++<F){L=y++;G=z++;V;c=g|f&d;I=f^d;V;W L<=A){M
  1516. X=0;Z;N=d;T=f;v=g;V;Z;c^=I&d;*G=h^c&~M&(I^d|N);G+=F;c=v|T&N;I=T^N;}}}z=O;y=n;I=
  1517. XJ;W--I!=-1){f= *z>>31;G=z+F;L=y+F;W G>z){M= *--G;*--L=(M*2)+f;f=M>>31;}z+=F;y+
  1518. X=F;}}
  1519. SHAR_EOF
  1520. $TOUCH -am 0807152691 1991/davidguy.c &&
  1521. chmod 0444 1991/davidguy.c ||
  1522. echo "restore of 1991/davidguy.c failed"
  1523. set `wc -c 1991/davidguy.c`;Wc_c=$1
  1524. if test "$Wc_c" != "1691"; then
  1525.     echo original size 1691, current size $Wc_c
  1526. fi
  1527. # ============= 1991/dds.ansi.c ==============
  1528. echo "x - extracting 1991/dds.ansi.c (Text)"
  1529. sed 's/^X//' << 'SHAR_EOF' > 1991/dds.ansi.c &&
  1530. X#include <stdio.h>
  1531. X#define Q r=R[*p++-'0'];while(
  1532. X#define B ;break;case
  1533. Xchar*s="Qjou!s\\311^-g\\311^-n\\311^-c\\::^-q-ma%mO1JBHm%BQ-aP1J[O1HB%[Q<nbj\
  1534. Xo)*|gps)<<*txjudi)m*|aQdbtf!::::;sfuvso<aQefgbvmu;aQ<m,,a%CQ<csfbla%bQ<aN2!Q\
  1535. X\ndbtf!aP2Q;m>aP2Q<a%!D12J!JGJHJOJQJFJSJJJMHS%HD12D12N3!N4\nJUJT%UQm>aP4HC%T\
  1536. XQs\\q,,^>m,2<m>aP4HC%SD12N1\nJNQm>s\\..q^aHC%NHb%GN1!D32P3%RN1UP1D12JPQUaP1H\
  1537. XR%PN4\nQ<g\\(aP3Q(^>aP2Q,2<n\\(aP3Q(^>aP4Hb%OD12D12N2!N3\nJVP3Q,,<jg)aP3Q=>n\
  1538. X\\(aP3Q(^*m>g\\(aP3Q(^<fmtf!m,,aHC%QN1!N1\nJ#Qqsjoug)#&e]o#-aP1Q*aHb%#Qqvut)\
  1539. XaP1Q*aHb%FN1\nQm>::::aHC%VP3Q>bupj)hfut)c**aHb%JD12JON1!Qjg)a%LN1UP1D12JIQUa\
  1540. XP1HL%IQ*m>aN2!N2\nP2Q<fmtf!m,,aHC%MN1!N2>P2Q>aN2\nP2Hbdd!b/d";int k;char R[4][99]
  1541. X;main(c,v)char**v;{char*p,*r,*q;for(q=s;*q;q++)*q>' '&&(*q)--;{FILE*i=fopen(v
  1542. X[1],"r"),*o=fopen(q-3,"w");for(p=s;;p++)switch(*p++){B'M':Q(k=fgetc(i))!=EOF
  1543. X&&k!=*p)*r++=k;if(k==EOF){fputs("}}\n",o);fclose(o);return system(q-6);}*r=0
  1544. XB'P':while(*p!='`')fputc(*p++,o)B'O':Q*r)fputc(*r++,o);p--B'C':k=0;Q k<*p-'0'
  1545. X)(*r++=fgetc(i),k++);*r=0 B'I':k= *p;if(**R==k)goto G B'G':k= *p;G:p=s;while(
  1546. X*p!='$'||p[1]!= k)p++;p++B'N':R[*p-'0'][0]++;}}}
  1547. SHAR_EOF
  1548. $TOUCH -am 0807162791 1991/dds.ansi.c &&
  1549. chmod 0444 1991/dds.ansi.c ||
  1550. echo "restore of 1991/dds.ansi.c failed"
  1551. set `wc -c 1991/dds.ansi.c`;Wc_c=$1
  1552. if test "$Wc_c" != "1137"; then
  1553.     echo original size 1137, current size $Wc_c
  1554. fi
  1555. # ============= 1991/davidguy.orig.c ==============
  1556. echo "x - extracting 1991/davidguy.orig.c (Text)"
  1557. sed 's/^X//' << 'SHAR_EOF' > 1991/davidguy.orig.c &&
  1558. X#define _ define
  1559. X#_ u unsigned
  1560. X#_ w char*
  1561. X#_ j(x)(*(*(x*)&T)++)
  1562. X#_ H j(short*)
  1563. X#_ K j(w)
  1564. X#_ e j(u*)
  1565. X#_ r register u
  1566. X#_ R(b)write(A,T=h,4*b);
  1567. X#_ S (u*)sbrk(Q*4+U*8)+U
  1568. X#_ E(a,b,c)a=c&1<<31|b/2;c=c*2|b&1;
  1569. X#_ V q= *L;L+=F;E(d,q,x)E(f,d,s)g=f&q;f^=q
  1570. X#_ W while(
  1571. X#_ Z q=I&f;M|=q&c;c^=q;I^=f;M|=g&c;c^=g
  1572. X#_ Y W(F= *s++)&16)*T=10**T+F-'0';T++
  1573. X#_ D(q,s)c);W q>s)G= *--q,*q= *s,*s++=G;
  1574. X#_ P if(i^z){x=Q+(n=D(x,n)
  1575. X#_ C if(i){q=Q*4+(s=(w)D(q,s)
  1576. Xu A,U,Q,J,X[9999];main(a,b)w*b;{r*c,*d,y,f,g,F,G,I,M,N,z,*x,*n,i;w q,*h=(w)X,*
  1577. XT,*s=".slo.-W00,tmhw.W/";T=h;if(a>1){H=2;K=23;K=112;s=b[1];Y;Y;Y;Y;}else{H=1;W
  1578. X*s)K=1+*s++;}connect(A=socket(a,1,0),T=h,24-a*4);H=17004;H=11;e=0;e=0;i=66==*h
  1579. X;R(3)read(A,h,8);e;H;read(A,h,4*H);T=h;e;F=e;e;e;I=11+H;f=H-6;K;U=K;i^=K;z=!K;
  1580. XT+=I/4*4+8*U;I=e;T+=16;U=H/32;J=H/30*30;T+=14;M=K;f/=U;T=h;K=55;K;H=4;e=F;e=I;
  1581. Xe=0;R(4)N=F+8192;K=53;K=M;H=4;e=N;e=I;H=U*32;H=J;R(4)K=2;K;H=4;e=I;e=1;e=N;R(4
  1582. X)Q=J*U;c=S;d=S;L(c);W 1){P}C}y=0;W y<J){K=72;K=0;g=J-y;H=6+U*(g>f?g=f:g);e=N;e
  1583. X=F;H=U*32;H=g;H=0;H=y;K=0;K=1;R(6)write(A,c+y*U,g*U*4);y+=g;}K=61;K=0;H=4;e=I;
  1584. Xe=0;e=0;R(4)C}P}v(c,d);}}L(A)r*A;{r*T=A+Q,X=getpid();W A<T)*A++=X=3*X^X/2;}v(n
  1585. X,O)u*n,*O;{r*A,F=U,*L=n-F,*G=L+Q,I,c,d,M,f,g,N,q,i=0,X,T,v,s,x,*y,*z;W L<n){*L
  1586. X= *G;G++[F]=L++[F];}W i<J){z=O+i*F;y=n+i*F-F;i+=30;L=y-1;A=L+U*32;W L<A){L+=F;
  1587. XE(X,*L,x)E(q,X,s)}X=0;W X++<F){L=y++;G=z++;V;c=g|f&d;I=f^d;V;W L<=A){M=0;Z;N=d
  1588. X;T=f;v=g;V;Z;c^=I&d;*G=c&~M&(I^d|N);G+=F;c=v|T&N;I=T^N;}}}z=O;y=n;I=J;W--I!=-1
  1589. X){f= *z>>31;G=z+F;L=y+F;W G>z){M= *--G;*--L=(M*2)+f;f=M>>31;}z+=F;y+=F;}}
  1590. SHAR_EOF
  1591. $TOUCH -am 0527155891 1991/davidguy.orig.c &&
  1592. chmod 0444 1991/davidguy.orig.c ||
  1593. echo "restore of 1991/davidguy.orig.c failed"
  1594. set `wc -c 1991/davidguy.orig.c`;Wc_c=$1
  1595. if test "$Wc_c" != "1534"; then
  1596.     echo original size 1534, current size $Wc_c
  1597. fi
  1598. # ============= 1991/sorta.icalc ==============
  1599. echo "x - extracting 1991/sorta.icalc (Text)"
  1600. sed 's/^X//' << 'SHAR_EOF' > 1991/sorta.icalc &&
  1601. X[D2sD3s]:Dld        [ input m n, output m n m n ]ld
  1602. X
  1603. X[2*1=d]:cld         [ aux routine for :d recursion ]ld
  1604. X[1=D1s>1Ds_+=c]:dld [ input m n, as long as n <= m double it, output m n ]ld
  1605. X
  1606. X[D2s1s_+1s]:-ld     [ input m n, output m-n n ]ld
  1607. X[1=D1s>1Ds_+#T=-2/D=1]:1ld [ aux routine for :@ ]ld
  1608. X[1D=d2/1=1ddd1 ]:!ld
  1609. X["0"Td]:0ld
  1610. X[DD=!1_+=0]:@ld     [ input m, m assumed nonnegative,
  1611. X              append binary representation of m to top of s stack ]ld
  1612. X
  1613. X["-"T_]:+ld
  1614. X[D0 1s>=+1=@]:2ld   [ input m, append - to top of s stack if m is negative,
  1615. X              then append binary representation of abs(m) to
  1616. X              top of s stack ]ld
  1617. X
  1618. X[d1A:A2=A]:A 27182 a1>=A
  1619. X[d2A:A1=A]:A 3145 a2>=A
  1620. X
  1621. XD    # " in binary is "T 1=2 `ld
  1622. X1=Dd # " in binary is "T 1=2 `ld
  1623. X
  1624. X1=D  1s# " + "T 1s#T " is "T +  #Td `ld
  1625. X1=D  1s# " - "T 1s#T " is "T _+  #Td `ld
  1626. X1=D  1s# " * "T 1s#T " is "T *  #Td `ld
  1627. X1=D  1s# " / "T 1s#T " is "T /  #Td `ld
  1628. X1=D  1s# " % "T 1s#T " is "T 1=D/*_+  #Td `ld
  1629. X
  1630. X1=D    d  "~ "    #T " is "T D& #T$ld " (" 1=2 ")"T `ld
  1631. X1=D  1s# " & "T 1s#T " is "T &D&  #T$ld " (" 1=2 ")"T `ld
  1632. X1=D  1s# " | "T 1s#T " is "T D&1sD&&  #T$ld " (" 1=2 ")"T `ld
  1633. X1=D  1s# " ^ "T 1s#T " is "T 1=D&2sD&1sD&&&D&  #T$ld " (" 1=2 ")"T `ld
  1634. SHAR_EOF
  1635. $TOUCH -am 0807143591 1991/sorta.icalc &&
  1636. chmod 0444 1991/sorta.icalc ||
  1637. echo "restore of 1991/sorta.icalc failed"
  1638. set `wc -c 1991/sorta.icalc`;Wc_c=$1
  1639. if test "$Wc_c" != "1183"; then
  1640.     echo original size 1183, current size $Wc_c
  1641. fi
  1642. echo "End of part 1, continue with part 2"
  1643. exit 0
  1644.  
  1645. -- 
  1646. For a good prime, call:  391581 * 2^216193 - 1
  1647.