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

  1. From: chongo@hoptoad.uucp (Landon C. Noll)
  2. Newsgroups: comp.lang.c,comp.sources.d,comp.unix.internals,alt.sources,misc.misc
  3. Subject: 1990 International Obfuscated C Code Contest winners 1 of 2
  4. Message-ID: <15947@hoptoad.uucp>
  5. Date: 8 Mar 91 14:13:01 GMT
  6.  
  7. I was unable to find the 1990 IOCCC winners on uunet, so here is a reposting
  8. of them.  Sorry for the repeat, but there is normally a collection of people
  9. who want to see last year when the rules are posted.
  10.  
  11. Submitted-by: chongo@toad.com (Landon Curt Noll)
  12. #
  13. # Send comments, questions, bugs to: 
  14. #
  15. #    judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  16. #
  17. # You are strongly encouraged to read the new contest rules before
  18. # sending any entries.  The rules, and sometimes the contest Email
  19. # address itself, change over time.  A valid entry one year may
  20. # be rejected in a later year due to changes in the rules.  The typical
  21. # start date for a contest is early March.  The typical end date for a
  22. # contest is late May.
  23. #
  24. # The contest rules are posted to comp.unix.wizards, comp.lang.c,
  25. # misc.misc, alt.sources and comp.sources.d.  If you do not have access 
  26. # to these groups, or if you missed the early March posting, you may 
  27. # request a copy from the judges, via Email, at the address above.
  28. #
  29. Archive-name: ioccc.1990/part01
  30.  
  31. ---- Cut Here and unpack ----
  32. #!/bin/sh
  33. # This is ioccc.1990, a shell archive (shar 3.32)
  34. # made 09/23/1990 00:16 UTC by chongo@toad.com (Landon Curt Noll)
  35. #
  36. # Send comments, questions, bugs to: 
  37. #
  38. #    judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  39. #
  40. # You are strongly encouraged to read the new contest rules before
  41. # sending any entries.  The rules, and sometimes the contest Email
  42. # address itself, change over time.  A valid entry one year may
  43. # be rejected in a later year due to changes in the rules.  The typical
  44. # start date for a contest is early March.  The typical end date for a
  45. # contest is late May.
  46. #
  47. # The contest rules are posted to comp.unix.wizards, comp.lang.c,
  48. # misc.misc, alt.sources and comp.sources.d.  If you do not have access 
  49. # to these groups, or if you missed the early March posting, you may 
  50. # request a copy from the judges, via Email, at the address above.
  51. #
  52. # Source directory /usr4/chongo/bench/contest
  53. #
  54. # existing files WILL be overwritten
  55. #
  56. # This shar contains:
  57. # length  mode       name
  58. # ------ ---------- ------------------------------------------
  59. #   1265 -r--r--r-- 1990/README
  60. #   8876 -r--r--r-- 1990/rules
  61. #   1622 -r--r--r-- 1990/Makefile
  62. #   1711 -r--r--r-- 1990/ansi.mk
  63. #   2327 -r--r--r-- 1990/common.mk
  64. #    231 -r--r--r-- 1990/baruch.c
  65. #   1512 -r--r--r-- 1990/cmills.c
  66. #   1536 -r--r--r-- 1990/dds.c
  67. #   1526 -r--r--r-- 1990/dg.c
  68. #    999 -r--r--r-- 1990/jaw.c
  69. #    879 -r--r--r-- 1990/pjr.c
  70. #   1474 -r--r--r-- 1990/scjones.c
  71. #      2 -r--r--r-- 1990/stig.c
  72. #    886 -r--r--r-- 1990/tbr.c
  73. #   1511 -r--r--r-- 1990/theorem.c
  74. #   1529 -r--r--r-- 1990/westley.c
  75. #   1908 -r--r--r-- 1990/baruch.hint
  76. #   1054 -r--r--r-- 1990/cmills.hint
  77. #   2315 -r--r--r-- 1990/dds.hint
  78. #   1733 -r--r--r-- 1990/dg.hint
  79. #   7401 -r--r--r-- 1990/jaw.hint
  80. #   1479 -r--r--r-- 1990/pjr.hint
  81. #   2466 -r--r--r-- 1990/scjones.hint
  82. #   2213 -r--r--r-- 1990/stig.hint
  83. #   3890 -r--r--r-- 1990/tbr.hint
  84. #   2585 -r--r--r-- 1990/theorem.hint
  85. #   1489 -r--r--r-- 1990/westley.hint
  86. #   1624 -r--r--r-- 1990/LANDER.BAS
  87. #    136 -r--r--r-- 1990/stig.ksh
  88. #   1522 -r--r--r-- 1990/shark.sh
  89. #
  90. if touch 2>&1 | fgrep 'amc' > /dev/null
  91.  then TOUCH=touch
  92.  else TOUCH=true
  93. fi
  94. # ============= 1990/README ==============
  95. if test ! -d '1990'; then
  96.     echo "x - creating directory 1990"
  97.     mkdir '1990'
  98. fi
  99. echo "x - extracting 1990/README (Text)"
  100. sed 's/^X//' << 'SHAR_EOF' > 1990/README &&
  101. X1990 marked the "The Seventh International Obfuscated C Code Contest"
  102. X
  103. XInstructions for use: Run make to compile entries (it is possible that
  104. Xon System V or non-unix systems the makefile needs to be changed). The
  105. Xansi.mk may need to be changed if your ANSI C compiler is not gcc.
  106. X
  107. XLook at the source and try to figure out what the programs do, and run
  108. Xthem with various inputs.  If you want to, look at the hints files for
  109. X(minor) spoilers.
  110. X
  111. XThis year, the Grand Prize won a standing ovation at USENIX.
  112. X
  113. XThe "Strangest abuse of the rules" award was given this year to stress
  114. Xthe fact that starting in 1991, entries should be shell-specific.
  115. X
  116. XThis year was the first year that we accepted ANSI C entries.  It was
  117. Xinteresting to note that the ANSI C entries were as a whole less
  118. Xportable than the K&R C entries.  We hope that in future contests
  119. Xpeople will enter more obfuscated and challenging ANSI C programs.
  120. X
  121. XWe would like to thank Barbara Frezza (loving wife of Larry Bassel) for
  122. Xher role as official chef of the contest.  Her opinions regarding
  123. Xsome of the contest entries were appreciated.
  124. X
  125. XRules and results were posted to comp.lang.c, comp.sources.unix, and
  126. Xalt.sources.  They have been made available on a wide number of Usenet
  127. Xarchive sites such as uunet.
  128. SHAR_EOF
  129. $TOUCH -am 0922163990 1990/README &&
  130. chmod 0444 1990/README ||
  131. echo "restore of 1990/README failed"
  132. set `wc -c 1990/README`;Wc_c=$1
  133. if test "$Wc_c" != "1265"; then
  134.     echo original size 1265, current size $Wc_c
  135. fi
  136. # ============= 1990/rules ==============
  137. echo "x - extracting 1990/rules (Text)"
  138. sed 's/^X//' << 'SHAR_EOF' > 1990/rules &&
  139. X7th International Obfuscated C Code Contest Rules
  140. X
  141. X    Obfuscate:  tr.v.  -cated, -cating, -cates.  1. a.  To render obscure.
  142. X        b.  To darken.  2. To confuse:  his emotions obfuscated his
  143. X        judgment.  [LLat. obfuscare, to darken : ob(intensive) +
  144. X        Lat. fuscare, to darken < fuscus, dark.] -obfuscation n.
  145. X        obfuscatory adj.
  146. X
  147. XGOALS OF THE CONTEST:
  148. X
  149. X    * To write the most Obscure/Obfuscated C program under the rules below.
  150. X    * To show what should NOT be done in C programs.
  151. X    * To provide a safe forum for poor C code.  :-)
  152. X
  153. XDEDICATION:
  154. X
  155. X    The 1990 International Obfuscated C Code Contest is dedicated to ANSI C.
  156. X
  157. XRULES:
  158. X
  159. X    To help us handle the vast volume of entries, we ask that you
  160. X    follow the rules below.  Sorry for the length, but we need all
  161. X    the help we can get!
  162. X
  163. X    1) Your source MUST be 1536 bytes or less, and it must be a complete
  164. X       program, not just a subroutine.
  165. X
  166. X    2) To help us process your entries, we ask that you submit entries
  167. X       in the following format.  Please be sure to include ALL --- lines,
  168. X       otherwise our extraction program may skip your entry!
  169. X
  170. X---header items---
  171. Xname:        Your name, of course!
  172. Xorg:        School/Company/Organization
  173. Xemail address:    Email address from a well known site, or in a registered domain
  174. Xpostal address:    Postal address
  175. X        include your country as well
  176. Xenvironment:    Indicate the Hardware 
  177. X        and OS under which your program was tested
  178. Xentry:        5    <number of entries sent so far including this one>
  179. Xremarks:    Remarks may be continued with leading whitespace until the
  180. X        line ---how to compile-- is encountered.  (see #3 below)
  181. X---how to ANSI compile---
  182. XX Give the command(s) needed to compile your program using an ANSI C
  183. XX compiler.  If you program should not be compiled under an ANSI C compiler, 
  184. XX leave this section blank.  Follow the format rules for the program 
  185. XX section below, except that command size must be 160 characters or less.
  186. X---how to common compile---
  187. XX Give the command(s) needed to compile your program using an K&R/traditional
  188. XX C compiler.  If you program should not be compiled under a K&R style C, 
  189. XX leave this section blank.  Follow the format rules for the program section
  190. XX below, except that command size must be 160 characters or less.
  191. X---program---
  192. XX Place obfuscated source of 1536 characters or less in this section.
  193. XX Add a leading X to each line to avoid problems with mailers.
  194. XX Some mailers don't like files with very long lines.  If your entry contains E
  195. XC    lines longer 80 chars we ask you to form continuation line sets.  To form E
  196. XC    a continuation line set, place an 'E' character at the point of a split E
  197. XC    and place a C (instead of an X) at the beginning of the next line. E
  198. XC    Finally, end the continuation line set as normal.
  199. XX The E\nC's and leading X's will be removed prior to extraction and thus E
  200. XC    they don't contribute toward the source character count.  All other E
  201. XC    characters are considered to be source.  Whitespace after 'X' or 'C' E
  202. XC    and before the 'E' is significant, we added it here for readability.
  203. XX Newlines and tabs each count as 1 character.  Assume 8 character tab stops.
  204. XX If your entry does not end in a newline, leave a final 'E' on the end. E
  205. X---end---
  206. X
  207. X    3) Regarding the header items:
  208. X
  209. X    * Any text outside of the above format will be kept confidential.
  210. X
  211. X    * All header lines are required, but you may use 'anonymous'
  212. X      for any header line other than 'remarks' or 'entry'.
  213. X
  214. X    * In the 'remarks' please include:
  215. X        - what this program does
  216. X        - why you think the program is obfuscated
  217. X        - any other remarks (humorous or otherwise)
  218. X    
  219. X    4) Your entry should be written in common C (K&R + common extensions)
  220. X       or ANSI C.  If your program will NOT compile under an ANSI C or 
  221. X       K&R C compiler, leave the particular 'how to' section blank.
  222. X
  223. X       You do not have to fill in both 'how to' sections, though you must
  224. X       fill in at least one 'how to' section.
  225. X
  226. X       If you leave a 'how to' section blank, include the '---' line, but
  227. X       but having no command lines after it.
  228. X
  229. X    5) The program must be of original work.  All programs must be
  230. X       in the public domain.  All copyrighted programs will be rejected.
  231. X
  232. X    6) Entries must be received between 16-Mar-90 0:00 GMT and 
  233. X       26-May-90 0:00 GMT.  Email your entries to:
  234. X       
  235. X        ...!{sun,pacbell,uunet,utzoo,pyramid,amdahl}!hoptoad!obfuscate
  236. X
  237. X       We will attempt to Email a confirmation of receipt of contest
  238. X       entries, however since Email is not reliable you may not receive it.
  239. X       We regret that we can no longer accept entries via postal mail.
  240. X
  241. X    7) Each person may submit up to 8 entries.  Multiple entries must
  242. X       be sent in separate Email letters.
  243. X    
  244. X    8) Entries that can not be built automatically in a portable makefile 
  245. X       are not allowed.  (e.g., don't use #include "/dev/tty")
  246. X
  247. X    9) Starting this year, compiling entries must result an regular file
  248. X       which can be executed. (No -o /dev/tty or similar compile lines)
  249. X
  250. X
  251. XANNOUNCEMENT OF WINNERS:
  252. X
  253. X    * First announcement will likely be at the Summer 90 Usenix BOF.
  254. X
  255. X    * Winning entries will be posted in mid June 1990 to 
  256. X      comp.sources.unix as well as news groups where these rules 
  257. X      were posted.  (depending on the judges work load)
  258. X    
  259. X    * Winning entries will be deposited into the uunet archives.
  260. X
  261. X    * An article containing the winning entries will be published
  262. X      in a future issue of the "Micro/Systems Journal".
  263. X
  264. X    * Winners receive international fame and flames!  :-)
  265. X
  266. X
  267. XJUDGING:
  268. X
  269. X    Awards will be given to the best entry in a number of categories.
  270. X    The actual category list will vary depending on the types of entries
  271. X    we receive.  As a guide, consider using the following:
  272. X
  273. X    * The best small one line program
  274. X    * The strangest source layout
  275. X    * The most useful obfuscated program
  276. X    * The most creatively obfuscated program
  277. X    * Best obfuscated entry smaller than 256 bytes
  278. X    * Best obfuscated entry smaller than 1024 bytes
  279. X    * Best abuse of ANSI
  280. X    * Worse abuse of the rules (no abuse of entry format please!)
  281. X    * <anything else so strange that it deserves an award>
  282. X
  283. XPOINTS TO PONDER:
  284. X
  285. X    People are encouraged to examine winners of the previous
  286. X    contests.  A copy of these entries was posted to
  287. X    comp.sources.unix.  Contact the comp.sources.unix moderator, or
  288. X    some archive site (such as uunet).  Keep in mind that rules
  289. X    change from year to year, so some winning entries may not be
  290. X    valid entries this year.  What was unique and novel one year
  291. X    might be 'old' the next year.  In short, use your best judgment.
  292. X
  293. X    We examine each entry on several levels of confusion.  For example
  294. X    each entry is judged when we:
  295. X
  296. X    * look at the original source
  297. X    * run it through:  sed -e ',^#[     ]*define,d' | /lib/cpp
  298. X    * run it through:  sed -e ',^#[     ]*include,d' | /lib/cpp
  299. X    * run it through a C beautifier
  300. X    * examine the algorithm
  301. X    * compile and lint it
  302. X    * execute it
  303. X    
  304. X    One line programs are best when they are short, obscure and concise.
  305. X
  306. X    We tend to dislike programs that:
  307. X
  308. X    * are very hardware specific
  309. X    * are very OS or Un*x version specific
  310. X         (index/strchr differences are ok, but socket/streams specific 
  311. X          code is likely not to be)
  312. X    * dump core or have compiler warnings
  313. X         (it is ok only if you warn us in the 'remark' header item)
  314. X    * won't compile under both BSD or SYS V Un*x
  315. X    * use an excessively long compile line to get around the size limit
  316. X    * are longer than they need to be
  317. X    * are similar to previous winners
  318. X    * are similar to previous losers  :-)
  319. X
  320. X    Simply abusing #defines or -Dfoo=bar won't go as far as a program
  321. X    that is more well rounded in confusion.
  322. X
  323. X    Unless you are cramped for space, or unless you are entering the 
  324. X    'best one liner' category, we suggest that you format your program 
  325. X    in a more creative way than simply forming excessively long lines.
  326. X
  327. X    We like programs that:
  328. X
  329. X    * are as concise and small as they need to be
  330. X    * do something quasi-interesting
  331. X    * pass lint without complaint (particularly strict ANSI ones)
  332. X    * are portable
  333. X    * are unique or novel in their obfuscation style
  334. X    * MAKE USE OF A NUMBER OF DIFFERENT TYPES OF OBFUSCATION
  335. X    * make us laugh and/or throw up  :-)
  336. X
  337. X    Some types of programs can't excel in some areas.  Of course, your 
  338. X    program doesn't have to excel in all areas, but doing well in several 
  339. X    areas really does help.
  340. X
  341. X    Be creative!
  342. X
  343. X    The Judging will be done by Landon Noll and Larry Bassel.  If you have
  344. X    any QUESTIONS or COMMENTS, please feel free to send them to:
  345. X
  346. X    ...!{sun,pacbell,uunet,pyramid,amdahl}!hoptoad!judges
  347. X    judges@toad.com
  348. X
  349. X    however contest entries should be sent to: 
  350. X    
  351. X    ...!{sun,pacbell,uunet,pyramid,amdahl}!hoptoad!obfuscate
  352. X    obfuscate@toad.com
  353. X
  354. X
  355. Xchongo <Landon Curt Noll> /\cc/\      hoptoad!chongo
  356. XLarry Bassel                  {amdahl,ucbvax,cbosgd}|sun!lab
  357. SHAR_EOF
  358. $TOUCH -am 0922163990 1990/rules &&
  359. chmod 0444 1990/rules ||
  360. echo "restore of 1990/rules failed"
  361. set `wc -c 1990/rules`;Wc_c=$1
  362. if test "$Wc_c" != "8876"; then
  363.     echo original size 8876, current size $Wc_c
  364. fi
  365. # ============= 1990/Makefile ==============
  366. echo "x - extracting 1990/Makefile (Text)"
  367. sed 's/^X//' << 'SHAR_EOF' > 1990/Makefile &&
  368. X# %W% %G% %U%
  369. X#
  370. X# 1990 makefile
  371. X
  372. XSHELL=/bin/sh
  373. XMAKE=make
  374. XMAKEFLAGS=e
  375. X
  376. X# uncomment the line to select the preferred type of compile
  377. X#
  378. X# You should also check the ansi.mk or common.mk for the
  379. X# proper compiler name and flags.
  380. X#
  381. X# NOTE ==> USE=ansi     compile with an ANSI compiler by default
  382. X#USE=ansi
  383. X# NOTE ==> USE=common   compile with a common K&R compiler by default
  384. X#USE=common
  385. X
  386. XWINNERS=cmills pjr westley stig tbr db dds theorem baruch jaw scjones
  387. X
  388. Xall:
  389. X    -@if [ "${USE}" = "common" ]; then \
  390. X        echo ${MAKE} -k -f common.mk all; \
  391. X        ${MAKE} -k -f common.mk all; \
  392. X    elif [ "${USE}" = "ansi" ]; then \
  393. X        echo ${MAKE} -k -f ansi.mk all; \
  394. X        ${MAKE} -k -f ansi.mk all; \
  395. X    else \
  396. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  397. X        echo "or type: make -f ansi.mk for ansi makes"; \
  398. X        echo "or type: make -f common.mk for common K&R makes"; \
  399. X        exit 1; \
  400. X    fi
  401. X
  402. Xansi:
  403. X    ${MAKE} -f ansi.mk all
  404. X
  405. Xcommon:
  406. X    ${MAKE} -f common.mk all
  407. X
  408. X${WINNERS}:
  409. X    -@if [ "${USE}" = "common" ]; then \
  410. X        echo ${MAKE} -k -f common.mk $@; \
  411. X        ${MAKE} -k -f common.mk $@; \
  412. X    elif [ "${USE}" = "ansi" ]; then \
  413. X        echo ${MAKE} -k -f ansi.mk $@; \
  414. X        ${MAKE} -k -f ansi.mk $@; \
  415. X    else \
  416. X        echo "set USE= in Makefile to be ansi or common as desired"; \
  417. X        echo "or type: make -f ansi.mk for ansi makes"; \
  418. X        echo "or type: make -f common.mk for common K&R makes"; \
  419. X        exit 1;\
  420. X    fi
  421. X
  422. Xclean:
  423. X    ${MAKE} -f ansi.mk clean
  424. X    ${MAKE} -f common.mk clean
  425. Xclobber:
  426. X    ${MAKE} -f ansi.mk clobber
  427. X    ${MAKE} -f common.mk clobber
  428. Xnuke: clobber
  429. X    ${MAKE} -f ansi.mk nuke
  430. X    ${MAKE} -f common.mk nuke
  431. Xinstall:
  432. X    ${MAKE} -f ansi.mk install
  433. X    ${MAKE} -f common.mk install
  434. SHAR_EOF
  435. $TOUCH -am 0922165290 1990/Makefile &&
  436. chmod 0444 1990/Makefile ||
  437. echo "restore of 1990/Makefile failed"
  438. set `wc -c 1990/Makefile`;Wc_c=$1
  439. if test "$Wc_c" != "1622"; then
  440.     echo original size 1622, current size $Wc_c
  441. fi
  442. # ============= 1990/ansi.mk ==============
  443. echo "x - extracting 1990/ansi.mk (Text)"
  444. sed 's/^X//' << 'SHAR_EOF' > 1990/ansi.mk &&
  445. X# %W% %G% %U%
  446. X#
  447. X# 1990 makefile
  448. X
  449. XSHELL=/bin/sh
  450. X
  451. X# flags for ANSI compiles
  452. X#
  453. X# These flags are setup for gcc, change as/if needed
  454. X#
  455. XPEDANTIC=-pedantic
  456. XCFLAGS=-O -ansi 
  457. XCHMOD=chmod
  458. XCC=gcc
  459. XCP=cp
  460. XRM=rm
  461. XLN=ln
  462. X
  463. X# winners that may be ok to compile with ANSI
  464. X#
  465. XWINNERS=cmills pjr westley stig tbr dg baruch jaw scjones
  466. X
  467. Xall: ${WINNERS}
  468. X
  469. Xansi: all
  470. X
  471. Xcommon:
  472. X    @echo "wrong makefile, use common.mk"
  473. X    exit 1
  474. X
  475. Xcmills: cmills.c
  476. X    ${CC} ${CFLAGS} -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=void \
  477. X        -o cmills cmills.c
  478. X
  479. Xpjr: pjr.c
  480. X    ${CC} ${CFLAGS} pjr.c -o pjr
  481. X
  482. Xwestley: westley.c
  483. X    ${CC} ${CFLAGS} westley.c -o westley
  484. X
  485. Xstig: stig.c stig.ksh
  486. X    @echo "run the Korn shell, and source stig.ksh"
  487. X    @echo "or read stig.hint and create your own aliases"
  488. X
  489. Xscjones: scjones.c
  490. X    ${CC} ${CFLAGS} scjones.c -o scjones
  491. X
  492. Xtbr: tbr.c
  493. X    ${CC} ${CFLAGS} tbr.c -o tbr
  494. X
  495. Xdg: dg.c
  496. X    ${CC} ${CFLAGS} dg.c -Dindex=strchr -o dg
  497. X    # compile with the following if you don't have strchr()
  498. X    #${CC} ${CFLAGS} dg.c -o dg
  499. X
  500. Xdds: dds.c LANDER.BAS
  501. X    ${CC} ${CFLAGS} dds.c -o dds
  502. X
  503. Xtheorem: theorem.c
  504. X    ${CC} ${CFLAGS} theorem.c -o theorem
  505. X    ${RM} -f sorter.c
  506. X    -./theorem -r 0 0 0 0 < theorem.c > sorter.c
  507. X    ${CC} ${CFLAGS} sorter.c -o sorter
  508. X    ${RM} -f fibonacci.c
  509. X    -./sorter 0 0 0 0 < theorem.c > fibonacci.c
  510. X    ${CC} ${CFLAGS} fibonacci.c -o fibonacci
  511. X
  512. Xbaruch: baruch.c
  513. X    ${CC} ${CFLAGS} baruch.c -o baruch
  514. X
  515. Xjaw: jaw.c shark.sh
  516. X    ${RM} -f ./zcat ./atob ./jaw
  517. X    ${CC} ${CFLAGS} ${PEDANTIC} jaw.c -o zcat
  518. X    ${LN} zcat atob
  519. X    echo 'PATH=;export PATH;atob|zcat' > jaw
  520. X    ${CHMOD} 0555 ./jaw
  521. X
  522. Xclean:
  523. X    ${RM} -f *.o a.out core
  524. Xclobber: clean
  525. X    ${RM} -f ${WINNERS} sorter.c sorter
  526. X    ${RM} -f fibonacci.c fibonacci atob zcat
  527. Xnuke: clobber
  528. X    @true
  529. Xinstall: all
  530. X    cat ${WINNERS} > /dev/null
  531. SHAR_EOF
  532. $TOUCH -am 0922164990 1990/ansi.mk &&
  533. chmod 0444 1990/ansi.mk ||
  534. echo "restore of 1990/ansi.mk failed"
  535. set `wc -c 1990/ansi.mk`;Wc_c=$1
  536. if test "$Wc_c" != "1711"; then
  537.     echo original size 1711, current size $Wc_c
  538. fi
  539. # ============= 1990/common.mk ==============
  540. echo "x - extracting 1990/common.mk (Text)"
  541. sed 's/^X//' << 'SHAR_EOF' > 1990/common.mk &&
  542. X# %W% %G% %U%
  543. X#
  544. X# 1990 makefile
  545. X
  546. XSHELL=/bin/sh
  547. XCHMOD=chmod
  548. XCC=gcc
  549. XCP=cp
  550. XRM=rm
  551. XSED=sed
  552. XLN=ln
  553. X
  554. X# flags for common K&R compiles
  555. X#
  556. XCFLAGS=-O
  557. XCC=cc
  558. X
  559. X# winners that may be ok to compile with common K&R
  560. X#
  561. XWINNERS=cmills pjr westley tbr dg dds theorem baruch jaw scjones
  562. X
  563. Xall: ${WINNERS}
  564. X
  565. Xansi:
  566. X    @echo "wrong makefile, use ansi.mk"
  567. X    exit 1
  568. X
  569. Xcommon: all
  570. X
  571. Xcmills: cmills.c
  572. X    ${CC} ${CFLAGS} -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=int \
  573. X        -o cmills cmills.c
  574. X
  575. Xpjr: pjr.c
  576. X    ${CC} ${CFLAGS} pjr.c -o pjr
  577. X
  578. Xwestley: westley.alt.c
  579. X    ${CC} ${CFLAGS} westley.alt.c -o westley
  580. X
  581. Xwestley.alt.c: westley.c
  582. X    ${RM} -f westley.alt.c
  583. X    -${SED} -e 's/signed//' -e 's/1s/1/g' -e 's/^    #/#/' \
  584. X        westley.c > westley.alt.c
  585. X
  586. Xstig: stig.c stig.ksh
  587. X    @echo "run the Korn shell, and source stig.ksh"
  588. X    @echo "or read stig.hint and create your own aliases"
  589. X
  590. Xtbr: tbr.c
  591. X    ${CC} ${CFLAGS} tbr.c -o tbr
  592. X
  593. Xdg: dg.c
  594. X    ${CC} ${CFLAGS} dg.c -Dindex=strchr -o dg
  595. X    # compile with the following if you don't have strchr()
  596. X    #${CC} ${CFLAGS} dg.c -o dg
  597. X
  598. Xdds: dds.c LANDER.BAS
  599. X    ${CC} ${CFLAGS} dds.c -o dds
  600. X
  601. Xtheorem: theorem.c
  602. X    ${CC} ${CFLAGS} theorem.c -o theorem
  603. X    ${RM} -f sorter.c
  604. X    -./theorem -r 0 0 0 0 < theorem.c > sorter.c
  605. X    ${CC} ${CFLAGS} sorter.c -o sorter
  606. X    ${RM} -f fibonacci.c
  607. X    -./sorter 0 0 0 0 < theorem.c > fibonacci.c
  608. X    ${CC} ${CFLAGS} fibonacci.c -o fibonacci
  609. X
  610. Xbaruch: baruch.c
  611. X    ${CC} ${CFLAGS} baruch.c -o baruch
  612. X
  613. Xjaw: jaw.c
  614. X    ${RM} -f ./zcat ./atob ./jaw
  615. X    ${CC} ${CFLAGS} jaw.c -o zcat
  616. X    ${LN} zcat atob
  617. X    echo 'PATH=;export PATH;atob|zcat' > jaw
  618. X    ${CHMOD} 0555 ./jaw
  619. X
  620. Xscjones: scjones.alt.c stdlib.h
  621. X    ${CC} ${CFLAGS} -I. scjones.alt.c -o scjones
  622. X
  623. X# NOTE: scjones.alt.c is just a de-ANSI-fied scjones.c for example only
  624. X#
  625. Xscjones.alt.c: scjones.c
  626. X    ${RM} -f scjones.alt.c
  627. X    -${SED} -e 's#??/#\\#g' -e 's/??=/#/g' -e 's/??(/[/g' -e 's/??)/]/g' \
  628. X        -e "s/??'/^/g" -e 's/??</{/g' -e 's/??!/|/g' -e 's/??>/}/g' \
  629. X        -e 's/??-/~/g' scjones.c > scjones.alt.c
  630. X
  631. Xstdlib.h:
  632. X    ${RM} -f stdlib.h
  633. X    echo "#define EXIT_SUCCESS 0" >stdlib.h
  634. X    echo "#define EXIT_FAILURE 1" >>stdlib.h
  635. X    echo "void exit(); /* may need to be int on some systems */" >>stdlib.h
  636. X
  637. Xclean:
  638. X    rm -f *.o a.out core
  639. Xclobber: clean
  640. X    ${RM} -f ${WINNERS} sorter.c sorter westley.alt.c stdlib.h
  641. X    ${RM} -f fibonacci.c fibonacci atob zcat scjonds.alt.c
  642. Xnuke: clobber
  643. X    @true
  644. Xinstall: all
  645. X    cat ${WINNERS} > /dev/null
  646. SHAR_EOF
  647. $TOUCH -am 0922164990 1990/common.mk &&
  648. chmod 0444 1990/common.mk ||
  649. echo "restore of 1990/common.mk failed"
  650. set `wc -c 1990/common.mk`;Wc_c=$1
  651. if test "$Wc_c" != "2327"; then
  652.     echo original size 2327, current size $Wc_c
  653. fi
  654. # ============= 1990/baruch.c ==============
  655. echo "x - extracting 1990/baruch.c (Text)"
  656. sed 's/^X//' << 'SHAR_EOF' > 1990/baruch.c &&
  657. Xv,i,j,k,l,s,a[99];
  658. Xmain()
  659. X{
  660. X    for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+=(v=j<s&&(!k&&!!printf(2+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j)&1:2])&&++l||a[i]<s&&v&&v-i+j&&v+i-j))&&!(l%=s),v||(i==j?a[i+=k]=0:++a[i])>=s*k&&++a[--i])
  661. X        ;
  662. X}
  663. SHAR_EOF
  664. $TOUCH -am 0922163990 1990/baruch.c &&
  665. chmod 0444 1990/baruch.c ||
  666. echo "restore of 1990/baruch.c failed"
  667. set `wc -c 1990/baruch.c`;Wc_c=$1
  668. if test "$Wc_c" != "231"; then
  669.     echo original size 231, current size $Wc_c
  670. fi
  671. # ============= 1990/cmills.c ==============
  672. echo "x - extracting 1990/cmills.c (Text)"
  673. sed 's/^X//' << 'SHAR_EOF' > 1990/cmills.c &&
  674. X#include<stdio.h>
  675. X#include<time.h>
  676. X#define S(q)B(*e=0),q,p);
  677. X#define W(w)if((w)<22)v= -v;else v-=10;else
  678. X#define F for(r=d;r<d+N;
  679. X#define H(v,g)v=h(v,*g++= *r++),*g=0;
  680. X#define B(n)b(l,n),(V)printf(l
  681. XV
  682. Xexit();char*g,c[M],d[N],q[N],p[N],*e,*r=d+N,l[M],*t="??",*k,*m="DEATHISDSev2oinpohae3ttsluuln4a?uibfe 5l\0rtlfrb6 ?a?el:e7$!n\0?e t8%ccp\0.%s9deelc.s T.@?-t.\t<J /\0=a\nP=Q Sex \0l KW Sin a$\0ane-lay% ge#-slediefuk ar  r$via-:o ?+}:r? n \0:) ee%lone 1-esy666!-~v\n.!^`'~@#\0\np~===:=q";b(o,n)char*o;{for(k=n+m;*o++=*k;k+=9);}int
  683. Xy=M*2,v,x,s,f,j,o;u(s){B(s));if(!gets(l))exit(0);return(o=
  684. X*l)=='y'||o=='Y'||o!='n'&&o!='N'&&u(s);}h(v,m){for(k=c;*k!='J';)if(m==*k++)break;m=k-c;if(v<0)W(v=m-v)
  685. Xif(m==1)W(v+=11)
  686. Xv+=m;return
  687. Xv;}main(w,z)char**z;{b(c,2)*X;for(--w&&(y=atoi(1[z]));y>1;){if(r-d>N*3/4){B(8));F++r)*r=c[(r-d)%13];F)w=
  688. X*(g=d+rand()%N),*g=
  689. X*r,*r++=w;r=d;}for(;;){B(3),y);if(!gets(l)||(w=atoi(l))<1)exit(0);if(w&1||w>M||w>y)B(1),y<M?y:M);else
  690. Xbreak;}y-=w,s=f=j=x=v=0,g=q,e=p;H(x,g)H(x,g)H(v,e)H(v,e)*t=
  691. X*q;S(t)*q=='A'&&y>=w/2&&u(5)&&(y+=(3*(h(0,1[q])==10)-1)*w/2);if(x==-21)goto
  692. X_;if(v==-21){y+=w/2;goto
  693. X_;}while(x>-17&&x<17)H(x,g)while((v==20||*p==-1[e])&&y>=w&&u(6)){y-=w;++s;for(g=e++;2[g]=
  694. X*g,g!=p;)--g;*g++=
  695. X*e;*g=' ';i:v=h(h(0,*p),*e++=
  696. X*r++);S(t)if(*p=='A'&&-1[e]!=
  697. X*p)goto
  698. X_;}if(f=y>=w&&u(7))y-=w,H(v,e)while(!f&&v<22&&u(4)){H(v,e)if(v<22)S(t)}_:x<0&&(x=
  699. X-x);v<0&&(v=
  700. X-v);if(v<22)if(v==x)j+=w*++f;else
  701. Xif(x>21||v>x)j+=w*2*++f;if(s--){*e++=' ';*e++=
  702. X*p;*e=0;for(e=p;*e=2[e];)e++;goto
  703. Xi;}y+=j;S(q)};}
  704. SHAR_EOF
  705. $TOUCH -am 0922163990 1990/cmills.c &&
  706. chmod 0444 1990/cmills.c ||
  707. echo "restore of 1990/cmills.c failed"
  708. set `wc -c 1990/cmills.c`;Wc_c=$1
  709. if test "$Wc_c" != "1512"; then
  710.     echo original size 1512, current size $Wc_c
  711. fi
  712. # ============= 1990/dds.c ==============
  713. echo "x - extracting 1990/dds.c (Text)"
  714. sed 's/^X//' << 'SHAR_EOF' > 1990/dds.c &&
  715. X#define O(b,f,u,s,c,a)b(){int o=f();switch(*p++){X u:_ o s b();X c:_ o a b();default:p--;_ o;}}
  716. X#define t(e,d,_,C)X e:f=fopen(B+d,_);C;fclose(f)
  717. X#define U(y,z)while(p=Q(s,y))*p++=z,*p=' '
  718. X#define N for(i=0;i<11*R;i++)m[i]&&
  719. X#define I "%d %s\n",i,m[i]
  720. X#define X ;break;case
  721. X#define _ return
  722. X#define R 999
  723. Xtypedef char*A;int*C,E[R],L[R],M[R],P[R],l,i,j;char B[R],F[2];A m[12*R],malloc
  724. X(),p,q,x,y,z,s,d,f,fopen();A Q(s,o)A s,o;{for(x=s;*x;x++){for(y=x,z=o;*z&&*y==
  725. X*z;y++)z++;if(z>o&&!*z)_ x;}_    0;}main(){m[11*R]="E";while(puts("Ok"),gets(B)
  726. X)switch(*B){X'R':C=E;l=1;for(i=0;i<R;P[i++]=0);while(l){while(!(s=m[l]))l++;if
  727. X(!Q(s,"\"")){U("<>",'#');U("<=",'$');U(">=",'!');}d=B;while(*F=*s){*s=='"'&&j
  728. X++;if(j&1||!Q(" \t",F))*d++=*s;s++;}*d--=j=0;if(B[1]!='=')switch(*B){X'E':l=-1
  729. XX'R':B[2]!='M'&&(l=*--C)X'I':B[1]=='N'?gets(p=B),P[*d]=S():(*(q=Q(B,"TH"))=0,p
  730. X=B+2,S()&&(p=q+4,l=S()-1))X'P':B[5]=='"'?*d=0,puts(B+6):(p=B+5,printf("%d\n",S
  731. X()))X'G':p=B+4,B[2]=='S'&&(*C++=l,p++),l=S()-1 X'F':*(q=Q(B,"TO"))=0;p=B+5;P[i
  732. X=B[3]]=S();p=q+2;M[i]=S();L[i]=l X'N':++P[*d]<=M[*d]&&(l=L[*d]);}else p=B+2,P[
  733. X*B]=S();l++;}X'L':N printf(I)X'N':N free(m[i]),m[i]=0    X'B':_ 0 t('S',5,"w",N
  734. Xfprintf(f,I))t('O',4,"r",while(fgets(B,R,f))(*Q(B,"\n")=0,G()))X 0:default:G()
  735. X;}_ 0;}G(){l=atoi(B);m[l]&&free(m[l]);(p=Q(B," "))?strcpy(m[l]=malloc(strlen(p
  736. X)),p+1):(m[l]=0,0);}O(S,J,'=',==,'#',!=)O(J,K,'<',<,'>',>)O(K,V,'$',<=,'!',>=)
  737. XO(V,W,'+',+,'-',-)O(W,Y,'*',*,'/',/)Y(){int o;_*p=='-'?p++,-Y():*p>='0'&&*p<=
  738. X'9'?strtol(p,&p,0):*p=='('?p++,o=S(),p++,o:P[*p++];}
  739. SHAR_EOF
  740. $TOUCH -am 0922163990 1990/dds.c &&
  741. chmod 0444 1990/dds.c ||
  742. echo "restore of 1990/dds.c failed"
  743. set `wc -c 1990/dds.c`;Wc_c=$1
  744. if test "$Wc_c" != "1536"; then
  745.     echo original size 1536, current size $Wc_c
  746. fi
  747. # ============= 1990/dg.c ==============
  748. echo "x - extracting 1990/dg.c (Text)"
  749. sed 's/^X//' << 'SHAR_EOF' > 1990/dg.c &&
  750. X#include <stdio.h>
  751. X
  752. X#define d define
  753. X
  754. X#d b12(x) 12 x
  755. X#d a13(x) x 13
  756. X#d a16(x) x 16
  757. X#d a32(x) x 32
  758. X#d acb(x) x]
  759. X#d acc(x) x}
  760. X#d aco(x) x:
  761. X#d bco(x) :x
  762. X#d acp(x) x)
  763. X#d bef(x) EOF x
  764. X#d aeq(x) x=
  765. X#d afo(x) x for
  766. X#d age(x) x fgetc
  767. X#d asi(x) x stdin
  768. X#d aso(x) x stdout
  769. X#d bgt(x) >x
  770. X#d ai(x) x i
  771. X#d aj(x) x j
  772. X#d al(x) x l
  773. X#d ami(x) x-
  774. X#d bne(x) !=x
  775. X#d aob(x) x[
  776. X#d aop(x) x(
  777. X#d apl(x) x+
  778. X#d bpu(x) fputc x
  779. X#d bqm(x) ?x
  780. X#d aqm(x) x?
  781. X#d aqu(x) x'
  782. X#d ase(x) x;
  783. X#d awh(x) x while
  784. X#d axo(x) x^
  785. X#d a0(x) x 0
  786. X#d b13(x) 13 x
  787. X#d b16(x) 16 x
  788. X#d b19(x) 19 x
  789. X#d b48(x) 48 x
  790. X#d a64(x) x 64
  791. X#d b66(x) 66 x
  792. X#d bcb(x) ]x
  793. X#d bch(x) char x
  794. X#d bcm(x) ,x
  795. X#d acm(x) x,
  796. X#d bcp(x) )x
  797. X#d beq(x) =x
  798. X#d bex(x) extern x
  799. X#d bi(x) i x
  800. X#d bin(x) int x
  801. X#d bix(x) index x
  802. X#d bj(x) j x
  803. X#d bl(x) l x
  804. X#d alt(x) x<
  805. X#d bma(x) main x
  806. X#d bob(x) [x
  807. X#d boc(x) {x
  808. X#d bop(x) (x
  809. X#d bpl(x) +x
  810. X#d app(x) x++
  811. X#d bqu(x) 'x
  812. X#d bse(x) ;x
  813. X#d bst(x) *x
  814. Xbma(acp(bop(app(bcp(ai(boc(ase(bch(a16(bl(alt(bob(ai(b66(ase(bcb(a0(bcm(aeq(bst(acb(bj(a64(bse(aob(bin(al(bi(aeq(bse(ai(bex(aop(bch(afo(bst(ase(bix(())))))))))))))))))))))))))))))))))))))))
  815. Xbl(ai(bob(aob(bi(al(bcb(aop(beq(apl(b13(a13(bpl(aeq(bop(acb(bl(bob(a32(bi(bpl(apl(b16(bcb(ai(beq(b19(aob(bpl(bop(l))))))))))))))))))))))))))))))
  816. Xbpl(acp(b48(acp(asi(bcb(aop(beq(age(bop(aeq(bi(ai(bgt(aop(b12(aop(bqm(awh(b12(ase(bco(acp(bi(acp(bcp(acp(bpl(aqu(bqu(A))))))))))))))))))))))))))))))
  817. Xbne(acc(bef(ase(bcp(acp(aso(bpu(acm(ai(bop(aco(bop(acb(bj(al(beq(ami(bix(aj(axo(bop(a16(aob(bl(al(aqm(bcm(acp(acp(i))))))))))))))))))))))))))))))
  818. SHAR_EOF
  819. $TOUCH -am 0922163990 1990/dg.c &&
  820. chmod 0444 1990/dg.c ||
  821. echo "restore of 1990/dg.c failed"
  822. set `wc -c 1990/dg.c`;Wc_c=$1
  823. if test "$Wc_c" != "1526"; then
  824.     echo original size 1526, current size $Wc_c
  825. fi
  826. # ============= 1990/jaw.c ==============
  827. echo "x - extracting 1990/jaw.c (Text)"
  828. sed 's/^X//' << 'SHAR_EOF' > 1990/jaw.c &&
  829. X#define C char
  830. X#define F X,perror("oops"),1
  831. X#define G getchar()
  832. X#define I ;if(
  833. X#define P putchar
  834. X#define Q 256
  835. X#define W ;while(
  836. X#define X return 0
  837. X#include<stdio.h>
  838. Xlong M,N,c,f,m,o,r,s,w;y(l){o^=l;m+=l+1;f=f*2+l+(f>>31&1);}int
  839. XO,S,e,i,k,n,q,t[69001];b(g){k=4 W g<k)y(P((C)(w>>--k*8)&255));w=0;}C D[Q*Q],h
  840. X[Q*Q];main(g,V)C**V;{I**V-97)X,a()W G-10)W(g=G)+1&&g-'x')if(g-10){I
  841. X4<k)b(0)I g>32&g<'v')w=w*85+g-33,++k;else{I
  842. Xg-'z'|k)F;w=0;k=5;}}W G-78)I scanf("%ld%lx E%lx S%lx R%lx ",&M,&N,&c,&s,&r)-5)F
  843. XI M){b(g=3-(M-1&3))W g--)y(0);}I(M-N|c-o|s-m|r-f)&4294967295)F;X;}long
  844. Xg(){C*p I m<f&n<k&&(m=(1L<<++n)-1)||O>=S){O=0;S=fread(D,1,n,stdin)*8 I
  845. XS<8)X-1;S-=n-1;}p=D+O/8;q=O&7;O+=n;X,(1<<8-q)-1&*p>>q|m&((15<n+q)*p[2]*Q|p[1]&
  846. X255)<<8-q;}a(){C*p=D+Q;G;G;k=G;e=k>>7&1;k&=31 I k>16)F;w=Q
  847. XW w--)t[w]=0,h[w]=w;n=8;f=Q+e;i=o=w=g()I o<0)X,1;P(i)W(w=g())+1){I
  848. Xw==Q&e){W w--)t[w]=0;m=n=8;f=Q I(w=g())<0)X;}c=w
  849. XI w>=f)*p++=i,w=o W w>=Q)*p++=h[w],w=t[w];P(i=h[w])W
  850. Xp>D+Q)P(*--p)I(w=f)<1L<<k)t[w]=o,h[f++]=i;o=c;}X;}
  851. SHAR_EOF
  852. $TOUCH -am 0922163990 1990/jaw.c &&
  853. chmod 0444 1990/jaw.c ||
  854. echo "restore of 1990/jaw.c failed"
  855. set `wc -c 1990/jaw.c`;Wc_c=$1
  856. if test "$Wc_c" != "999"; then
  857.     echo original size 999, current size $Wc_c
  858. fi
  859. # ============= 1990/pjr.c ==============
  860. echo "x - extracting 1990/pjr.c (Text)"
  861. sed 's/^X//' << 'SHAR_EOF' > 1990/pjr.c &&
  862. X#include <stdio.h>
  863. X#define A(a) G a();
  864. X#define B(a) G (*a)();
  865. X#define C(a,b) G a() { printf(b); return X; }
  866. Xtypedef struct F G;A(a)A(b)A(c)A(d)A(e)A(f)A(g)A(h)A(i)A(j)A(k)A(l)A(m)A(n)A(
  867. Xo)A(p)A(q)A(r)A(s)A(t)A(u)A(v)A(w)A(x)A(y)A(z)A(S)A(N)void Q();struct F{B(a)B
  868. X(b)B(c)B(d)B(e)B(f)B(g)B(h)B(i)B(j)B(k)B(l)B(m)B(n)B(o)B(p)B(q)B(r)B(s)B(t)B(
  869. Xu)B(v)B(w)B(x)B(y)B(z)B(S)B(N)void(*Q)();}X={a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
  870. Xq,r,s,t,u,v,w,x,y,z,S,N,Q};C(a,"z")C(b,"y")C(c,"x")C(d,"w")C(e,"v")C(f,"u")C(
  871. Xg,"t")C(h,"s")C(i,"r")C(j,"q")C(k,"p")C(l,"o")C(m,"n")C(n,"m")C(o,"l")C(p,"k"
  872. X)C(q,"j")C(r,"i")C(s,"h")C(t,"g")C(u,"f")C(v,"e")C(w,"d")C(x,"c")C(y,"b")C(z,
  873. X"a")C(S," ")C(N,"\n") void Q(){}main(){X=g().s().v().S().j().f().r().x().p().
  874. XS().y().i().l().d().m().S().u().l().c().S().q().f().n().k().v().w().S().l().e
  875. X().v().i().S().g().s().v().S().o().z().a().b().S().w().l().t().N();}
  876. SHAR_EOF
  877. $TOUCH -am 0922163990 1990/pjr.c &&
  878. chmod 0444 1990/pjr.c ||
  879. echo "restore of 1990/pjr.c failed"
  880. set `wc -c 1990/pjr.c`;Wc_c=$1
  881. if test "$Wc_c" != "879"; then
  882.     echo original size 879, current size $Wc_c
  883. fi
  884. # ============= 1990/scjones.c ==============
  885. echo "x - extracting 1990/scjones.c (Text)"
  886. sed 's/^X//' << 'SHAR_EOF' > 1990/scjones.c &&
  887. Xchar*a??(??)=??<
  888. X"??=include<stdio.h>",
  889. X"??=include<stdlib.h>",
  890. X"??=define o stdout",
  891. X"??=define b break;case",
  892. X"??=define s(p)fputs(p,o);",
  893. X"??=define c(p)fputc(p,o);",
  894. X"void t(p,f)char*p;??<f&&c('??/"')",
  895. X"for(;;p++)??<switch(*p)??<case 0:f&&",
  896. X"s(??/"??/??/??/",??/")c('??/??/n')return;case",
  897. X"'??=':s(??/"???/??/?=??/")b'??<':s(??/"???/??/?<??/")",
  898. X"b'??>':s(??/"???/??/?>??/")b'??(':s(??/"???/??/?(??/")b'??)'",
  899. X":s(??/"???/??/?)??/")b'??/??/??/??/':f&&s(??/"???/??/?/??/")",
  900. X"s(??/"???/??/?/??/")b'??/??/n':if(f)s(??/"???/??/?/n??/")",
  901. X"else case'??/"':if(f)s(??/"???/??/?/??/??/??/"??/")",
  902. X"else default:c(*p)??>??>??>main()??<char**p",
  903. X";t(??/"char*a??(??)=??<??/",0);for(p=a;*p",
  904. X";p++)t(*p,1);t(??/"0??>;??/",0);for(p=a",
  905. X";*p;p++)t(*p,0);exit(!ferror(o)&&",
  906. X"!fclose(o)?EXIT_SUCCESS",
  907. X":EXIT_FAILURE);",
  908. X"/*NOTREACHED*/",
  909. X"??>",
  910. X0??>;
  911. X??=include<stdio.h>
  912. X??=include<stdlib.h>
  913. X??=define o stdout
  914. X??=define b break;case
  915. X??=define s(p)fputs(p,o);
  916. X??=define c(p)fputc(p,o);
  917. Xvoid t(p,f)char*p;??<f&&c('"')
  918. Xfor(;;p++)??<switch(*p)??<case 0:f&&
  919. Xs("??/",")c('??/n')return;case
  920. X'??=':s("???/?=")b'??<':s("???/?<")
  921. Xb'??>':s("???/?>")b'??(':s("???/?(")b'??)'
  922. X:s("???/?)")b'??/??/':f&&s("???/?/")
  923. Xs("???/?/")b'??/n':if(f)s("???/?/n")
  924. Xelse case'"':if(f)s("???/?/??/"")
  925. Xelse default:c(*p)??>??>??>main()??<char**p
  926. X;t("char*a??(??)=??<",0);for(p=a;*p
  927. X;p++)t(*p,1);t("0??>;",0);for(p=a
  928. X;*p;p++)t(*p,0);exit(!ferror(o)&&
  929. X!fclose(o)?EXIT_SUCCESS
  930. X:EXIT_FAILURE);
  931. X/*NOTREACHED*/
  932. X??>
  933. SHAR_EOF
  934. $TOUCH -am 0922163990 1990/scjones.c &&
  935. chmod 0444 1990/scjones.c ||
  936. echo "restore of 1990/scjones.c failed"
  937. set `wc -c 1990/scjones.c`;Wc_c=$1
  938. if test "$Wc_c" != "1474"; then
  939.     echo original size 1474, current size $Wc_c
  940. fi
  941. # ============= 1990/stig.c ==============
  942. echo "x - extracting 1990/stig.c (Text)"
  943. sed 's/^X//' << 'SHAR_EOF' > 1990/stig.c &&
  944. Xc
  945. SHAR_EOF
  946. $TOUCH -am 0922163990 1990/stig.c &&
  947. chmod 0444 1990/stig.c ||
  948. echo "restore of 1990/stig.c failed"
  949. set `wc -c 1990/stig.c`;Wc_c=$1
  950. if test "$Wc_c" != "2"; then
  951.     echo original size 2, current size $Wc_c
  952. fi
  953. # ============= 1990/tbr.c ==============
  954. echo "x - extracting 1990/tbr.c (Text)"
  955. sed 's/^X//' << 'SHAR_EOF' > 1990/tbr.c &&
  956. X
  957. X#define D ,close(
  958. X
  959. Xchar              *c,q              [512              ],m[              256
  960. X],*v[           99], **u,        *i[3];int         f[2],p;main       (){for
  961. X (m[m        [60]=   m[62      ]=32   ]=m[*      m=124   [m]=       9]=6;
  962. X  e(-8)     ,gets      (1+(    c=q)     )||      exit      (0);     r(0,0)
  963. X   )for(    ;*++        c;);  }r(t,      o){    *i=i        [2]=    0;for
  964. X     (u=v  +98           ;m[*--c]         ^9;m [*c]          &32  ?i[*c
  965. X       &2]=                *u,u-             v^98              &&++u:
  966. X
  967. X    3    )if(!m[*c]){for(*++c=0;!m[*--c];);
  968. X    *    --u= ++c;}u-v^98?strcmp(*u,"cd")?*c?pipe(f),o=f[
  969. X    1    ]:
  970. X    4    ,(p=fork())?e(p),o?r(o,0)D o)D*f):
  971. X    1    ,wait(0):(o?dup2(*f,0)D*f)D o):*i?
  972. X    5    D 0),e(open(*i,0)):
  973. X    9    ,t?dup2(t,1)D t):i[
  974. X    2    ]?
  975. X    6    D 1),e(creat(i[2],438)):
  976. X    5    ,e(execvp(*u,u))):e(chdir(u[1])*2):
  977. X    3    ;}e(x){x<0?write(2,"?\n$ "-x/4,2),x+1||exit(1):
  978. X    5    ;}
  979. SHAR_EOF
  980. $TOUCH -am 0922163990 1990/tbr.c &&
  981. chmod 0444 1990/tbr.c ||
  982. echo "restore of 1990/tbr.c failed"
  983. set `wc -c 1990/tbr.c`;Wc_c=$1
  984. if test "$Wc_c" != "886"; then
  985.     echo original size 886, current size $Wc_c
  986. fi
  987. # ============= 1990/theorem.c ==============
  988. echo "x - extracting 1990/theorem.c (Text)"
  989. sed 's/^X//' << 'SHAR_EOF' > 1990/theorem.c &&
  990. X#include <stdio.h>
  991. X#include <math.h>
  992. X#define X
  993. X#define Y {}
  994. X#define C  }
  995. X#define o {
  996. X#undef main
  997. Xchar m[500][99],v[99],R;
  998. Xint*a,b,n,i,j,W,A;
  999. Xfloat Q,G,D,M,T,B,O,U,V,N,y,e();
  1000. XP(g,R,u)float*g,R,u;{int c;for(*g=1,c=u;c--;*g*=R);}
  1001. XX
  1002. XK(g,R,u)float*g,u;char R;
  1003. Xo
  1004. Xif(R=='+')*g+=u;
  1005. Xif(R=='-')*g-=u;
  1006. Xif(R=='*')*g*=u;
  1007. Xif(R=='/')*g/=u;
  1008. Xif(R=='^')P(g,*g,u);
  1009. XC
  1010. Xw(g,R,u)float*g,u;char R;
  1011. X/**/{int b,f;A=atoi(*++a);b=atoi(*++a);while((f=A+b)<15000){printf("%d\n",f);A=b;b=f;}}
  1012. Xmain(A,a)int A;char*a[];
  1013. Xo o
  1014. Xif(!strcmp(*++a,"-r"))S();
  1015. XD=atof(*++a);
  1016. XT=atof(*++a);
  1017. XB=atof(*++a);
  1018. XM=atof(*(4+(a-=3)));
  1019. XC
  1020. Xwhile(D<T)
  1021. Xo
  1022. XU=e((G=B/2,*a),D,M,a);
  1023. XV=e(*a,Q=D+G,M+G*U,a);
  1024. X/*/
  1025. Xz;/*/
  1026. XN=2*e(*a,Q,M+G*V,a);
  1027. XM+=B*V/3+B*N/6+B*e(*a,D+=B,M+G*N,a)/6+G*U/3;
  1028. Xprintf("%f %f\n",D,M);
  1029. XC
  1030. Xwhile(T=0)
  1031. X;
  1032. XW=D=1;
  1033. X;
  1034. Xwhile(W!=1)
  1035. Xo o
  1036. Xstrcpy(j+m,v);
  1037. Xo 
  1038. Xif((j-=W)<=W)break;
  1039. Xstrcpy(j+m,m+j-W);
  1040. XC
  1041. Xwhile(strcmp(m+j-W,v)>0)
  1042. Xj=i;
  1043. Xstrcpy(v,i+m);
  1044. XC
  1045. Xfor(i=(W/=3)-1;++i<n;)
  1046. X;
  1047. XC
  1048. Xdo
  1049. X;
  1050. Xwhile(0);
  1051. Xfor(W=1;(W=W*3+1)<n;);
  1052. XC
  1053. Xfloat e(f,D,M,a)char*f,*a[];float D,M;
  1054. Xo
  1055. X#define main L
  1056. XO=0;
  1057. XR='+';
  1058. Xfor(;*f;f++)
  1059. Xif(*f=='y')K(&O,R,M);
  1060. Xelse if((*f>='0')&&(*f<='9'))K(&O,R,(float)*f-'0');
  1061. Xelse if(*f=='x')K(&O,R,D);
  1062. Xelse if(1)R=*f;
  1063. Xif(1);
  1064. Xreturn O;
  1065. Xfor(j=0;j<n;puts(j++[m]));
  1066. Xe("",O,&O,a);
  1067. Xn=j-(O=1);
  1068. Xwhile(gets(j++[m]));
  1069. Xif(!strcmp(*++a,"-r"))S();
  1070. XC
  1071. X/**/main(A,a)int A;char*a[];
  1072. XY
  1073. XS(){while(gets(b++[m]));for(b--;b--;puts(b[m]));}
  1074. Xchar*f,m[500][99],R,v[99];
  1075. Xint b,W,n,i,j,z;
  1076. Xfloat Q,G,D,M,T,O,B,U,V,N,e();
  1077. X#define Y
  1078. X#define X {}
  1079. X#define o }
  1080. X#define C {
  1081. X#include <stdio.h>
  1082. X#include <math.h>
  1083. SHAR_EOF
  1084. $TOUCH -am 0922163990 1990/theorem.c &&
  1085. chmod 0444 1990/theorem.c ||
  1086. echo "restore of 1990/theorem.c failed"
  1087. set `wc -c 1990/theorem.c`;Wc_c=$1
  1088. if test "$Wc_c" != "1511"; then
  1089.     echo original size 1511, current size $Wc_c
  1090. fi
  1091. # ============= 1990/westley.c ==============
  1092. echo "x - extracting 1990/westley.c (Text)"
  1093. sed 's/^X//' << 'SHAR_EOF' > 1990/westley.c &&
  1094. Xchar*lie;
  1095. X
  1096. X    double time, me= !0XFACE,
  1097. X
  1098. X    not; int rested,   get, out;
  1099. X
  1100. X    main(ly, die) char ly, **die ;{
  1101. X
  1102. X        signed char lotte,
  1103. X
  1104. X
  1105. Xdear; (char)lotte--;
  1106. X
  1107. X    for(get= !me;; not){
  1108. X
  1109. X    1 -  out & out ;lie;{
  1110. X
  1111. X    char lotte, my= dear,
  1112. X
  1113. X    **let= !!me *!not+ ++die;
  1114. X
  1115. X        (char*)(lie=
  1116. X
  1117. X
  1118. X"The gloves are OFF this time, I detest you, snot\n\0sed GEEK!");
  1119. X
  1120. X    do {not= *lie++ & 0xF00L* !me;
  1121. X
  1122. X    #define love (char*)lie -
  1123. X
  1124. X    love 1s *!(not= atoi(let
  1125. X
  1126. X    [get -me?
  1127. X
  1128. X        (char)lotte-
  1129. X
  1130. X
  1131. X(char)lotte: my- *love -
  1132. X    
  1133. X    'I'  -  *love -  'U' -
  1134. X
  1135. X    'I'  -  (long)  - 4 - 'U' ])- !!
  1136. X    
  1137. X    (time  =out=  'a'));} while( my - dear
  1138. X
  1139. X    && 'I'-1l  -get-  'a'); break;}}
  1140. X
  1141. X        (char)*lie++;
  1142. X
  1143. X
  1144. X(char)*lie++, (char)*lie++; hell:0, (char)*lie;
  1145. X
  1146. X    get *out* (short)ly   -0-'R'-  get- 'a'^rested;
  1147. X
  1148. X    do {auto*eroticism,
  1149. X
  1150. X    that; puts(*( out
  1151. X
  1152. X        - 'c'
  1153. X    
  1154. X-('P'-'S') +die+ -2 ));}while(!"you're at it");
  1155. X
  1156. X
  1157. Xfor (*((char*)&lotte)^=
  1158. X
  1159. X    (char)lotte; (love ly) [(char)++lotte+
  1160. X
  1161. X    !!0xBABE];){ if ('I' -lie[ 2 +(char)lotte]){ 'I'-1l ***die; }
  1162. X
  1163. X    else{ if ('I' * get *out* ('I'-1l **die[ 2 ])) *((char*)&lotte) -=
  1164. X
  1165. X    '4' - ('I'-1l); not; for(get=!
  1166. X
  1167. X
  1168. Xget; !out; (char)*lie  &  0xD0- !not) return!!
  1169. X
  1170. X    (char)lotte;}
  1171. X
  1172. X
  1173. X(char)lotte;
  1174. X
  1175. X    do{ not* putchar(lie [out
  1176. X
  1177. X    *!not* !!me +(char)lotte]);
  1178. X
  1179. X    not; for(;!'a';);}while(
  1180. X
  1181. X        love (char*)lie);{
  1182. X
  1183. X
  1184. Xregister this; switch( (char)lie
  1185. X
  1186. X    [(char)lotte] -1s *!out) {
  1187. X
  1188. X    char*les, get= 0xFF, my; case' ':
  1189. X
  1190. X    *((char*)&lotte) += 15; !not +(char)*lie*'s';
  1191. X
  1192. X    this +1s+ not; default: 0xF +(char*)lie;}}}
  1193. X
  1194. X    get - !out;
  1195. X
  1196. X    if (not--)
  1197. X
  1198. X    goto hell;
  1199. X
  1200. X        exit( (char)lotte);}
  1201. SHAR_EOF
  1202. $TOUCH -am 0922163990 1990/westley.c &&
  1203. chmod 0444 1990/westley.c ||
  1204. echo "restore of 1990/westley.c failed"
  1205. set `wc -c 1990/westley.c`;Wc_c=$1
  1206. if test "$Wc_c" != "1529"; then
  1207.     echo original size 1529, current size $Wc_c
  1208. fi
  1209. # ============= 1990/baruch.hint ==============
  1210. echo "x - extracting 1990/baruch.hint (Text)"
  1211. sed 's/^X//' << 'SHAR_EOF' > 1990/baruch.hint &&
  1212. XBest Small Program: <baruch@genius.tau.ac.il> Osovlanski & Nissenbaum
  1213. X
  1214. X    Doron Osovlanski
  1215. X    CADTECH - CAD/CAM Systems Ltd
  1216. X        24 Ben-Yosef st.
  1217. X        Givat-Shmuel   51905
  1218. X    Israel
  1219. X
  1220. X    Baruch Nissenbaum                  BARUCH@TAUNIVM.TAU.AC.IL
  1221. X    Tel-Aviv University
  1222. X    The Faculty of Engineering
  1223. X    Tel-Aviv
  1224. X    Israel
  1225. X
  1226. X
  1227. XJudges' comments:
  1228. X
  1229. X    Compile.  Try:
  1230. X
  1231. X    echo 4 | baruch
  1232. X    echo 7 | baruch
  1233. X
  1234. X    This program reads an integer between 4 and 99 from the stdin.
  1235. X
  1236. X    NOTE: The original program did not have a newline at the end of
  1237. X      the file.  We added a final newline to the file to make
  1238. X      unpacking easy.
  1239. X
  1240. X
  1241. XSelected notes from the author:
  1242. X
  1243. X    The goal of this work was to write a program that solves the
  1244. X    classic n-queen problem, with a board size of up to 99x99, while
  1245. X    keeping the program as short as possible.
  1246. X
  1247. X    The program finds all possibilities to place N chess queens on
  1248. X    a NxN chess board so that no queen is in range of any other queen
  1249. X    (not in the same column row or diagonal).  For each solution the
  1250. X    chess board and the place of the queens is printed to stdout.
  1251. X
  1252. X
  1253. X    This program is about as simple and as readable as possible.
  1254. X    To make things even more simple we used a very limited subset of C:
  1255. X
  1256. X         No pre-processor statements
  1257. X         Only one, harmless, 'for' statement
  1258. X         No ifs
  1259. X         No breaks
  1260. X         No cases
  1261. X         No functions
  1262. X         No gotos
  1263. X         No structures
  1264. X
  1265. X    In short, it contains no C language that might confuse the
  1266. X    innocent reader.  :-)
  1267. X
  1268. X
  1269. X    This program demonstrates the claim that in C, any program
  1270. X    can be written using a single 'for' statement, as long as it is
  1271. X    long enough..
  1272. X
  1273. XThe authors further note:
  1274. X
  1275. X    For PC users:
  1276. X    In order to compile the program under Turbo-C or MSC, 'int '
  1277. X    should be inserted at the beginning of the program.
  1278. X    For better looking results it is recommended to replace the " #Q"
  1279. X    string with " \261\2".
  1280. SHAR_EOF
  1281. $TOUCH -am 0922163990 1990/baruch.hint &&
  1282. chmod 0444 1990/baruch.hint ||
  1283. echo "restore of 1990/baruch.hint failed"
  1284. set `wc -c 1990/baruch.hint`;Wc_c=$1
  1285. if test "$Wc_c" != "1908"; then
  1286.     echo original size 1908, current size $Wc_c
  1287. fi
  1288. # ============= 1990/cmills.hint ==============
  1289. echo "x - extracting 1990/cmills.hint (Text)"
  1290. sed 's/^X//' << 'SHAR_EOF' > 1990/cmills.hint &&
  1291. XBest Game: <cmills@wyse.com> Chris Mills
  1292. X
  1293. X    Chris Mills
  1294. X    Wyse Technology
  1295. X    3471 N. 1st St.
  1296. X    San Jose CA 95134
  1297. X    USA
  1298. X
  1299. X
  1300. XJudges notes:
  1301. X
  1302. X    Compile notes:
  1303. X
  1304. X       cc -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=void -o cmills cmills.c
  1305. X
  1306. X    -DM=<max bet allowed>
  1307. X    -DN=<52 * number of decks used>
  1308. X    -DX=<how to seed the rand() generator>
  1309. X    -DV=<void ot int>
  1310. X
  1311. X    Usage: cmills [starting_cash]
  1312. X
  1313. X
  1314. XSelected notes from the author:
  1315. X
  1316. X    This is a blackjack program.  It does splits, doubling down,
  1317. X    insurance, etc.  
  1318. X
  1319. X    As best I can figure, it should be ANSI-compliant, as well as
  1320. X    portable to BSD & sysV (as well as the irritating compiler I
  1321. X    was using which assumes x=*p++ means x*=p++!).  It is
  1322. X    reasonably robust in its error handling---it won't let you
  1323. X    split, double, etc. unless you actually have the cash, etc.  To
  1324. X    terminate the program, hit EOF or type 0 or a negative number
  1325. X    for you wager.
  1326. X
  1327. X    The way it deals with splits is particularly cool (IMHO).  You
  1328. X    can split many times, and it will show all hands as they are
  1329. X    played.
  1330. SHAR_EOF
  1331. $TOUCH -am 0922163990 1990/cmills.hint &&
  1332. chmod 0444 1990/cmills.hint ||
  1333. echo "restore of 1990/cmills.hint failed"
  1334. set `wc -c 1990/cmills.hint`;Wc_c=$1
  1335. if test "$Wc_c" != "1054"; then
  1336.     echo original size 1054, current size $Wc_c
  1337. fi
  1338. # ============= 1990/dds.hint ==============
  1339. echo "x - extracting 1990/dds.hint (Text)"
  1340. sed 's/^X//' << 'SHAR_EOF' > 1990/dds.hint &&
  1341. XBest Language Tool: <dds@cc.ic.ac.uk> Diomidis Spinellis
  1342. X
  1343. X    Diomidis Spinellis
  1344. X    Imperial College, University of London
  1345. X    Myrsinis 1
  1346. X    GR-145 62 Kifissia
  1347. X    Greece
  1348. X
  1349. X
  1350. XJudges' comments:
  1351. X
  1352. X    Compile and run.  Give the following lines as input:
  1353. X    
  1354. X    OLD LANDER.BAS
  1355. X    RUN
  1356. X
  1357. X    Be sure not to run out of fuel!
  1358. X
  1359. X
  1360. XSelected notes from the author:
  1361. X
  1362. X    This is the DDS-BASIC Interpreter (Version 1.00). 
  1363. X
  1364. X    Immediate commands:
  1365. X
  1366. X    RUN    LIST    NEW    OLD filename
  1367. X    BYE    SAVE filename
  1368. X
  1369. X    Program commands:
  1370. X
  1371. X    variable names a to z        variables initialized to 0 on RUN
  1372. X    FOR var = exp TO exp        NEXT variable
  1373. X    GOSUB exp            RETURN
  1374. X    GOTO exp            IF exp THEN exp
  1375. X    INPUT variable            PRINT string
  1376. X    PRINT exp            var = exp
  1377. X    REM any text            END
  1378. X
  1379. X    Expressions (ranked by precedence):
  1380. X
  1381. X    Bracketed expressions
  1382. X    number (leading 0 for octal, 0x for hex, else decimal), variable
  1383. X    Unary -
  1384. X    * / 
  1385. X    + - 
  1386. X    = <> 
  1387. X    > < 
  1388. X    <= >=
  1389. X    (* and + are also used for boolean AND and boolean OR)
  1390. X    Boolean expressions evaluate to 0 for false and 1 for true
  1391. X
  1392. X    Editing:
  1393. X
  1394. X    - Line editor using line re-entry.
  1395. X    - A line number with nothing following it, deletes the line.
  1396. X
  1397. X    Input format:
  1398. X
  1399. X    - Free format positioning of tokens on the line.
  1400. X    - No space is allowed before the line number.
  1401. X    - Exactly one space is needed between the OLD or SAVE command and 
  1402. X      the filename.
  1403. X    - ALL INPUT MUST BE UPPERCASE.
  1404. X
  1405. X    Limits:
  1406. X
  1407. X    Line numbers        1-10000
  1408. X    Line length        999 characters
  1409. X    FOR nesting        26
  1410. X    GOSUB            999 levels
  1411. X    Program            Dynamically allocated
  1412. X    Expressions        -32768 - 32767 for 16 bit machines, 
  1413. X                -2147483648 - 2147483647 for 32 bit machines
  1414. X
  1415. X    Error checking / error reports:
  1416. X
  1417. X    No error checking is performed.
  1418. X    The message `core dumped' signifies a syntax or semantic error.
  1419. X
  1420. X    Hosting Environment:
  1421. X
  1422. X    ANSI C, traditional K&R C or OSF ANDF
  1423. X    ASCII or EBCIDIC character set
  1424. X    48K bytes memory
  1425. X
  1426. X    The Speed of DDS-BASIC Interpreter (Version 1.00). relative to
  1427. X    Microsoft Advanced BASIC 3.31 is Approximately 60%.
  1428. X
  1429. X    The code size could be further reduced by doing ugly things like
  1430. X    not declaring the return type of functions, not freeing memory,
  1431. X    #defining define, and joining lines.  In its present 1536 character
  1432. X    form the program is reasonably portable (it may fail to run in a
  1433. X    tagged object architecture) and nicely formatted (it fits in an
  1434. X    80*25 screen).
  1435. SHAR_EOF
  1436. $TOUCH -am 0922163990 1990/dds.hint &&
  1437. chmod 0444 1990/dds.hint ||
  1438. echo "restore of 1990/dds.hint failed"
  1439. set `wc -c 1990/dds.hint`;Wc_c=$1
  1440. if test "$Wc_c" != "2315"; then
  1441.     echo original size 2315, current size $Wc_c
  1442. fi
  1443. # ============= 1990/dg.hint ==============
  1444. echo "x - extracting 1990/dg.hint (Text)"
  1445. sed 's/^X//' << 'SHAR_EOF' > 1990/dg.hint &&
  1446. XBest Abuse of the C Preprocessor: <harvard!xait!pallio!dg> David Goodenough
  1447. X
  1448. X    David Goodenough
  1449. X    anonymous organization
  1450. X    541 Commonwealth Ave,
  1451. X    Newton, MA 02159
  1452. X    USA
  1453. X
  1454. XJudges' comments:
  1455. X
  1456. X    Compile and run.  Try:
  1457. X
  1458. X    echo "to C or not to C" | dg
  1459. X
  1460. X    Some C preprocessors get confused about single quotes in certain cases.
  1461. X    In particular, the following source line:
  1462. X
  1463. X   Cb12(ase(bco(acp(bi(acp(bcp(acp(bpl(aqu(bqu(A))))))))))))))))))))))))))))))
  1464. X
  1465. X    may need to be changed to:
  1466. X
  1467. X   Cb12(ase(bco(acp(bi(acp(bcp(acp(bpl('A'))))))))))))))))))))))))))))
  1468. X
  1469. X    if your C preprocessor botches single quotes in cpp expansions.
  1470. X
  1471. X    Systems that have index() and don't strchr() (e.g., BSD) should
  1472. X    compile with without -Dindex=strchr.
  1473. X
  1474. XSelected notes from the author:
  1475. X
  1476. X    If my preprocessor could hack it, I could write this as one single
  1477. X    line rather than 4, but when I do that I get a complaint "defines
  1478. X    nested too deeply".
  1479. X
  1480. X    Spoiler: (rot13 to read)
  1481. X
  1482. X    Guvf vf nabgure ebg13 wbo (oryvrir vg be abg) - gur #qrsvarf ner n
  1483. X    abiry jnl bs nqqvat gbxraf: '#qrsvar o12(k) 12 k' zrnaf gung ng
  1484. X    fbzr cbvag va gur fbhepr n 12 vf sbyybjrq ol gur pbzcerffrq arfgrq
  1485. X    qrsvarf. Gur o12 trgf gur cerivbhf pbzcerffvba nf na nethzrag, naq
  1486. X    cercraqf gur 12, guhf znxvat nabgure fgrc va gur erperngvba bs gur
  1487. X    fbhepr. Gur nkk() qrsvarf qb gur fnzr, ohg nqq gbxraf nsgre.
  1488. X
  1489. X    Nf sbe gur ebg13 nytbevguz, vg eryvrf ba vaqrk() gb svaq vs gur
  1490. X    punenpgre vf va gur frg N-Mn-m. y[] vf na neenl gung trgf svyyrq
  1491. X    jvgu:
  1492. X
  1493. X    "abcdefghijklmmmmnopqrstuvwxyzzzzABCDEFGHIJKLMMMMNOPQRSTUVWXYZZZZ"
  1494. X
  1495. X    Vs vaqrk() fnlf gur pune vf va gur nycunorg, gura kbe gur bssfrg
  1496. X    jvgu 16 gb genafyngr, naq bhgchg, bgurejvfr cnff vg hapunatrq.
  1497. SHAR_EOF
  1498. $TOUCH -am 0922165090 1990/dg.hint &&
  1499. chmod 0444 1990/dg.hint ||
  1500. echo "restore of 1990/dg.hint failed"
  1501. set `wc -c 1990/dg.hint`;Wc_c=$1
  1502. if test "$Wc_c" != "1733"; then
  1503.     echo original size 1733, current size $Wc_c
  1504. fi
  1505. echo "End of part 1, continue with part 2"
  1506. exit 0
  1507.  
  1508. -- 
  1509. For a good prime, call:  391581 * 2^216193 - 1
  1510.