home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume39 / ioccc.1993 / part03 < prev    next >
Encoding:
Text File  |  1993-09-26  |  61.5 KB  |  2,193 lines

  1. Newsgroups: comp.sources.misc
  2. From: chongo@toad.com (Landon Curt Noll)
  3. Subject: v39i106:  ioccc.1993 - 1993 International Obfuscated C Code Contest winners, Part03/04
  4. Message-ID: <1993Sep26.172602.4179@sparky.sterling.com>
  5. X-Md4-Signature: 3c919fa0d293f8d4fe4bb60718ce02f2
  6. Keywords: ioccc
  7. Sender: kent@sparky.sterling.com (Kent Landfield)
  8. Reply-To: chongo@toad.com (Landon Curt Noll)
  9. Organization: Nebula Consultants in San Francisco
  10. Date: Sun, 26 Sep 1993 17:26:02 GMT
  11. Approved: kent@sparky.sterling.com
  12.  
  13. Submitted-by: chongo@toad.com (Landon Curt Noll)
  14. Posting-number: Volume 39, Issue 106
  15. Archive-name: ioccc.1993/part03
  16. Environment: C
  17.  
  18. #! /bin/sh
  19. # This is ioccc.1993, a shell archive.  Remove anything before this line,
  20. # then feed it into a shell via "sh file" or similar.  To overwrite existing
  21. # files, type "sh file -c".
  22. #
  23. # Contents:  1993/Makefile 1993/README 1993/ant.c 1993/ant.test.mk
  24. #   1993/cmills.hint 1993/dgibson.c 1993/dgibson.data5
  25. #   1993/dgibson.hint 1993/ejb.c 1993/ejb.hint 1993/jonth.c 1993/leo.c
  26. #   1993/leo.hint 1993/rince.c 1993/rince.design 1993/rince.orig.c
  27. #   1993/schnitzi.c 1993/schnitzi.hint 1993/vanb.c
  28. #
  29. # Send comments, questions, bugs to:
  30. #
  31. #    judges@toad.com   -or-   ...!{sun,uunet,utzoo,pyramid}!hoptoad!judges
  32. #
  33. # You are strongly encouraged to read the new contest rules before
  34. # sending any entries.  The rules, and sometimes the contest Email
  35. # address itself, change over time.  Valid entries one year may
  36. # be rejected in a later year due to changes in the rules.  The typical
  37. # start date for contests is in early March.  Contest rules are normally not
  38. # finalized and posted until the beginning of the contest.  The typical closing
  39. # date for contests are in early May.
  40. #
  41. # The contest rules are posted to comp.unix.wizards, comp.lang.c,
  42. # misc.misc, alt.sources and comp.sources.d.  If you do not have access
  43. # to these groups, or if you missed the early March posting, you may
  44. # request a copy from the judges, via Email, at the address above.
  45. #
  46. # Copyright (c) 1993, Landon Curt Noll & Larry Bassel.
  47. # All Rights Reserved.  Permission for personal, educational or non-profit
  48. # use is granted provided this this copyright and notice are included in its
  49. # entirety and remains unaltered.  All other uses must receive prior permission
  50. # in writing from both Landon Curt Noll and Larry Bassel.
  51. #
  52. # Previous contest winners are available via anonymous ftp from
  53. # ftp.uu.net under the directory /pub/ioccc.
  54. #
  55. # Wrapped by kent@sparky on Sun Sep 26 12:05:12 1993
  56. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  57. echo If this archive is complete, you will see the following message:
  58. echo '          "shar: End of archive 3 (of 4)."'
  59. if test -f '1993/Makefile' -a "${1}" != "-c" ; then 
  60.   echo shar: Will not clobber existing file \"'1993/Makefile'\"
  61. else
  62.   echo shar: Extracting \"'1993/Makefile'\" \(3297 characters\)
  63.   sed "s/^X//" >'1993/Makefile' <<'END_OF_FILE'
  64. X# %W% %G% %U%
  65. X#
  66. X# 1993 makefile
  67. X#
  68. X# Copyright (c) 1993, Landon Curt Noll & Larry Bassel.
  69. X# All Rights Reserved.  Permission for personal, educational or non-profit
  70. X# use is granted provided this this copyright and notice are included in its
  71. X# entirety and remains unaltered.  All other uses must receive prior permission
  72. X# in writing from both Landon Curt Noll and Larry Bassel.
  73. X
  74. X
  75. XSHELL=/bin/sh
  76. XCHMOD=chmod
  77. XCP=cp
  78. XRM=rm
  79. XSED=sed
  80. XLN=ln
  81. X
  82. X# flags for ANSI compiles
  83. X#
  84. X# NOTE: Some ANSI compilers make use of -Xa to turn on ANSI mode,
  85. X#    others such as gcc may want -ansi, others may want nothing
  86. X#    at all.  Adjust the CFLAGS line as needed.
  87. X#
  88. X# NOTE: Some compilers cannot optimize, or optimize some entries
  89. X#    entries incorrectly.  You might want need to turn on -O 
  90. X#    to see if your compiler can handle them.
  91. X#
  92. X#CFLAGS=-O -Xa
  93. X#CFLAGS=-Xa
  94. XCFLAGS= -ansi
  95. X#CFLAGS=
  96. X
  97. X# ANSI compiler
  98. X#
  99. X# Set CC to the name of your ANSI compiler.
  100. X#CC=cc
  101. XCC=gcc
  102. X
  103. X# misc shell babble
  104. X#
  105. XNOINCLUDE=$(SED) -e 's/^.\([     ]*\)include/%include/'
  106. XSPACECLEAN=$(SED) -e 's/\([^     ]\)\([     ]\)[     ][     ]*/\1\2/g'
  107. XCPPCLEAN=$(GREP) -v '^. [0-9][0-9]*'
  108. X
  109. X# winners that compile under ANSI C
  110. X#
  111. XWINNERS= ant cmills dgibson ejb jonth leo lmfjyh plummer rince schnitzi vanb
  112. XALT_NAMES= ag ag.doc chris mind jkb
  113. X
  114. Xall: $(WINNERS) $(ALT_NAMES)
  115. X
  116. Xant: ant.c
  117. X    ${CC} ${CFLAGS} ant.c -o ant
  118. X
  119. Xcmills: cmills.c
  120. X    ${CC} ${CFLAGS} cmills.c -o cmills -lX11
  121. X
  122. Xdgibson: dgibson.c dgibson.sh dgibson.data1
  123. X    -@if [ ! -f life.d ] ; then \
  124. X        echo "cp dgibson.data1 life.d"; \
  125. X        cp dgibson.data1 life.d; \
  126. X        echo "rm -f data.name"; \
  127. X        rm -f data.name; \
  128. X        echo "echo dgibson.data1 > data.name"; \
  129. X        echo dgibson.data1 > data.name; \
  130. X    fi
  131. X    ${CC} ${CFLAGS} dgibson.c -o dgibson
  132. X    -${CHMOD} +x dgibson.sh
  133. X
  134. Xejb: ejb.c
  135. X    ${CC} ${CFLAGS} ejb.c -o ejb
  136. X
  137. Xjonth: jonth.c
  138. X    ${RM} -f jonth.tmp.c
  139. X    ${SED} -e s/\^\ /#define/ -e 's/@/Window(D,/g' jonth.c > jonth.tmp.c
  140. X    ${CC} ${CFLAGS} \
  141. X        -DXX1='H 19;}M(J,4)}N H 20;}M(T,4)}q(m,w,' \
  142. X        -DXX='XKeycodeToKeysym(D,o[13],0);K 12:Y();}R;}d XX1' \
  143. X        jonth.tmp.c -o jonth -lX11
  144. X
  145. Xleo: leo.c
  146. X    ${CC} ${CFLAGS} leo.c -o leo
  147. X
  148. Xlmfjyh: lmfjyh.c
  149. X    ${RM} -f \"\;main\(\)\{puts\(\"Hello\ World!\"\)\;\}char\*C=\".c
  150. X    ${CP} lmfjyh.c \"\;main\(\)\{puts\(\"Hello\ World!\"\)\;\}char\*C=\".c
  151. X    ${CC} ${CFLAGS} \
  152. X        \"\;main\(\)\{puts\(\"Hello\ World!\"\)\;\}char\*C=\".c \
  153. X        -o lmfjyh
  154. X
  155. Xplummer: plummer.c
  156. X    ${CC} ${CFLAGS} plummer.c -o plummer
  157. X
  158. Xrince: rince.c
  159. X    ${CC} ${CFLAGS} rince.c -lcurses -ltermcap -o rince
  160. X
  161. X# NOTE: this is the original source that won
  162. X#
  163. Xrince.orig: rince.orig.c
  164. X    $(CC) $(CFLAGS) rince.orig.c -lcurses -ltermcap -o rince.orig
  165. X
  166. Xschnitzi: schnitzi.c
  167. X    ${CC} ${CFLAGS} schnitzi.c -o schnitzi
  168. X
  169. Xvanb: vanb.c
  170. X    ${CC} ${CFLAGS} -DO5=main vanb.c -o vanb
  171. X
  172. X
  173. X# alternate names for selected entries
  174. X#
  175. Xag: ant
  176. X    $(RM) -f ag
  177. X    $(LN) ant ag
  178. X
  179. Xag.doc: ant.doc
  180. X    $(RM) -f ag.doc
  181. X    $(LN) ant.doc ag.doc
  182. X
  183. Xchris: cmills
  184. X    $(RM) -f chris
  185. X    $(LN) cmills chris
  186. X
  187. Xmind: leo
  188. X    $(RM) -f mind
  189. X    $(LN) leo mind
  190. X
  191. Xjkb: rince
  192. X    $(RM) -f jkb
  193. X    $(LN) rince jkb
  194. X
  195. Xtidy:
  196. X    ${RM} -f \"\;main\(\)\{puts\(\"Hello\ World!\"\)\;\}char\*C=\".c
  197. X
  198. Xclean:
  199. X    $(RM) -f *.o a.out core 
  200. X
  201. Xclobber: clean tidy
  202. X    $(RM) -f $(WINNERS)
  203. X    $(RM) -f $(ALT_NAMES)
  204. X    ${RM} -f jonth.tmp.c life.d rince.orig data.name data.name2
  205. X
  206. Xnuke: clobber
  207. X    @true
  208. X
  209. Xinstall: all
  210. X    cat $(WINNERS) > /dev/null
  211. END_OF_FILE
  212.   if test 3297 -ne `wc -c <'1993/Makefile'`; then
  213.     echo shar: \"'1993/Makefile'\" unpacked with wrong size!
  214.   fi
  215.   # end of '1993/Makefile'
  216. fi
  217. if test -f '1993/README' -a "${1}" != "-c" ; then 
  218.   echo shar: Will not clobber existing file \"'1993/README'\"
  219. else
  220.   echo shar: Extracting \"'1993/README'\" \(2629 characters\)
  221.   sed "s/^X//" >'1993/README' <<'END_OF_FILE'
  222. X1993 marked the "The Tenth International Obfuscated C Code Contest"
  223. X
  224. XCopyright (c) 1993, Landon Curt Noll & Larry Bassel.
  225. XAll Rights Reserved.  Permission for personal, educational or non-profit use is
  226. Xgranted provided this this copyright and notice are included in its entirety
  227. Xand remains unaltered.  All other uses must receive prior permission in writing
  228. Xfrom both Landon Curt Noll and Larry Bassel.
  229. X
  230. XUse make to compile entries.  It is possible that on BSD or non-unix
  231. Xsystems the makefile needs to be changed.  See the Makefile for details.
  232. X
  233. XLook at the source and try to figure out what the programs do, and run
  234. Xthem with various inputs.  If you want to, look at the hints files for
  235. Xspoilers - this year we included most of the information included
  236. Xby the submitters.
  237. X
  238. XRead over the makefile for compile/build issues.  Your system may
  239. Xrequire certain changes (add or remove a library, add or remove a
  240. X#define).
  241. X
  242. XName and address information are separated from the actual program
  243. Xprior to judging.  This eliminates any chance that we would bias our
  244. Xjudging for/against any person or group.
  245. X
  246. XThis year was the first year that ANSI C was the default.  Use of
  247. Xclassic K&R C was allowed so long as ANSI C compilers could still
  248. Xcompile the entry.  If you do not have an ANSI C compiler, you may
  249. Xnot be able to compile the winners, sorry!
  250. X
  251. XA few notes regarding future contests:
  252. X
  253. XBe sure to wait until the 1994 rules are posted before submitting entries.  
  254. XRules differ from year to year, sometimes in significant ways.
  255. X
  256. XIn 1994, we will retract the guideline that discouraged the use of C
  257. Xconstructs such as 3["curds"].  At one time, certain ANSI compilers did
  258. Xnot consider such expressions to be valid ANSI C.  Alert readers noted
  259. Xthat the current ANSI standard considered them to be valid.  We were
  260. Xunable to find an ANSI C compiler that flagged such expressions as
  261. Xerrors.
  262. X
  263. XPlease send us comments and suggestions what we have expressed above.
  264. XAlso include anything else that you would like to see in future contests.
  265. XSend such email to:
  266. X
  267. X    ...!{sun,pacbell,uunet,pyramid}!hoptoad!judges
  268. X    judges@toad.com
  269. X
  270. XIf you use, distribute or publish these entries in some way, please drop
  271. Xus a line.  We enjoy seeing who, where and how the contest is used.
  272. X
  273. XIf you have problems with any of the entries, AND YOU HAVE A FIX, please
  274. XEmail the fix (patch file or the entire changed file) to the above address.
  275. X
  276. XCredits:
  277. X
  278. XWe would like to thank Barbara Frezza for her role as official chef 
  279. Xof the contest.  Landon Noll and Larry Bassel appreciated the opportunity
  280. Xto serve as official taste testers.  And as usual, the food was excellent.
  281. END_OF_FILE
  282.   if test 2629 -ne `wc -c <'1993/README'`; then
  283.     echo shar: \"'1993/README'\" unpacked with wrong size!
  284.   fi
  285.   # end of '1993/README'
  286. fi
  287. if test -f '1993/ant.c' -a "${1}" != "-c" ; then 
  288.   echo shar: Will not clobber existing file \"'1993/ant.c'\"
  289. else
  290.   echo shar: Extracting \"'1993/ant.c'\" \(2931 characters\)
  291.   sed "s/^X//" >'1993/ant.c' <<'END_OF_FILE'
  292. X#define D ++*p
  293. X#define B **p
  294. X#define W while
  295. X#define R return 
  296. X#define E else
  297. X#define Q if
  298. X#define G fprintf(stderr,
  299. X
  300. X
  301. X#include <stdio.h>
  302. X
  303. X#ifndef A
  304. X#define A    512
  305. X#endif
  306. X
  307. Xtypedef int I;
  308. Xtypedef char C;
  309. Xtypedef void V;
  310. X
  311. XI z;
  312. XI f;
  313. XI x;
  314. XI a[A], b;
  315. X
  316. X
  317. XI d[A][A];
  318. XI m[A], n, o;
  319. X
  320. XI N();
  321. XI M();
  322. XI P();
  323. XI U();
  324. XV X();
  325. XV T();
  326. XV F();
  327. XV L();
  328. XV O();
  329. X
  330. XI
  331. Xmain(c, p)
  332. XI c;
  333. XC B;
  334. X{
  335. X    I i;
  336. X    FILE *j;
  337. X    C *k, l[BUFSIZ+1];
  338. X
  339. X    Q (--c < 1) {
  340. X        G "usage:  ag <pattern> [js...]\n");
  341. X        R 2;
  342. X    }
  343. X
  344. X    
  345. X    N(-3);
  346. X    N(-6-b);
  347. X    N(0);
  348. X    N(-3-b);
  349. X
  350. X    X(&(*++p));
  351. X
  352. X    *l = '\n';
  353. X    o = 1;
  354. X    i = 1;
  355. X    do {
  356. X        k = "-";
  357. X        j = stdin;
  358. X        Q (1 < c && **++p != '-') {
  359. X            Q (!(j = fopen(k = *p, "r"))) {
  360. X                G 
  361. X                    "ag: Failed to open '%s'.\n", k);
  362. X                i = 3;
  363. X                continue;
  364. X            }
  365. X        }
  366. X        W (fgets(l+1, BUFSIZ, j)) {
  367. X            Q (M(l)) {
  368. X                printf("%s:%s", k, l+1);
  369. X                i = 0; 
  370. X            }
  371. X        }
  372. X        fclose(j);
  373. X    } W (1 < --c);
  374. X    R i;
  375. X}
  376. X
  377. X
  378. XV
  379. XX(p)
  380. XC B;
  381. X{
  382. X    I i, j;
  383. X    i = N(-3);
  384. X    T(p);
  385. X    W (B == '|') {
  386. X        D;
  387. X        j = N(-3);
  388. X        N('\n');
  389. X        a[i] = -4-b;
  390. X        i = N(-3);
  391. X        T(p);
  392. X        a[j] = -4-b;
  393. X    }
  394. X}
  395. X
  396. X
  397. XV
  398. XT(p)
  399. XC B;
  400. X{
  401. X    W (B != '|' && (!x || B != ')')  && B)
  402. X        F(p);
  403. X}
  404. X
  405. X
  406. XV
  407. XF(p)
  408. XC B;
  409. X{
  410. X    I i = N(-3);
  411. X    Q (B == '^') {
  412. X        D;
  413. X        N('\n');
  414. X    } E Q (B == '$') {
  415. X        D;
  416. X        N('\n');
  417. X    } E Q (B == '(') { 
  418. X        D; 
  419. X        ++x;
  420. X        X(p); 
  421. X        Q (B != ')') { 
  422. X            G "ag: Missing ')'.\n"); 
  423. X            exit(3); 
  424. X        }
  425. X        --x;
  426. X        D;
  427. X    } E {
  428. X        L(p);
  429. X    }
  430. X    Q (B == '*') {
  431. X        D;
  432. X        a[i] = -4-b;
  433. X        N(-5-i);
  434. X    } E Q (B == '?') {
  435. X        D;
  436. X        a[i] = -4-b;
  437. X    }
  438. X}
  439. X
  440. X
  441. XV
  442. XL(p)
  443. XC B;
  444. X{
  445. X    I i, j;
  446. X    Q (B == '.') {
  447. X        N(0);
  448. X    } E Q (B == '[') {
  449. X        D;
  450. X        i = N(-2);
  451. X        Q (B == '^') {
  452. X            D;
  453. X            a[i] = -1;
  454. X        }
  455. X        Q (B == ']') {
  456. X            D;
  457. X            N(']');
  458. X        }
  459. X        W ((i = B) != ']') {
  460. X            Q ((*p)[1] == '-' && i < (j = (*p)[2])) {
  461. X                W (i <= j)
  462. X                    N(i++);
  463. X                *p += 3;
  464. X            } E {
  465. X                N(i);
  466. X                D;
  467. X            }
  468. X        }
  469. X        N('\n');
  470. X    } E {
  471. X        Q (B == '\\')
  472. X            D;
  473. X        N(B);
  474. X    }
  475. X    D;
  476. X}
  477. X
  478. X
  479. XI
  480. XN(c)
  481. XI c;
  482. X{
  483. X    Q (A <= b) {
  484. X        G "ag: Pattern too long.\n");
  485. X        exit(3);
  486. X    }
  487. X    a[b] = c;
  488. X    R b++;
  489. X}
  490. X
  491. X
  492. XV
  493. XO(p)
  494. XI p;
  495. X{
  496. X    I i = n;
  497. X    Q (b <= p)
  498. X        R;
  499. X    Q (a[p] < -2) {
  500. X        Q (a[p] != -3)
  501. X            O(-4-a[p]);
  502. X        O(p+1);
  503. X    } E Q (!a[p] || a[p] == z || P(&p)) {
  504. X        
  505. X        W (i < o)
  506. X            Q (m[i++] == p)
  507. X                R;
  508. X        
  509. X        f = U(p+1);
  510. X
  511. X        Q (A <= o) {
  512. X            G "ag: Out of space.\n");
  513. X            exit(3);
  514. X        }
  515. X        
  516. X        m[o++] = p;
  517. X    }
  518. X}
  519. X
  520. X
  521. XI
  522. XP(p)
  523. XI *p;
  524. X{
  525. X    I i = 0, j = 0;
  526. X    Q (a[*p] == -2 || (j = a[*p] == -1)) {
  527. X        W (a[D] != '\n')
  528. X            Q (a[*p] == z)
  529. X                i = 1;
  530. X    }
  531. X    R i ^ j;
  532. X}
  533. X
  534. X
  535. XI
  536. XU(p)
  537. XI p;
  538. X{
  539. X    R (
  540. X        f || p == b || (
  541. X            a[p] < -2 && (
  542. X                (a[p] != -3 && U(-4-a[p])) 
  543. X                || U(p+1)
  544. X            )
  545. X        )
  546. X    );
  547. X}
  548. X
  549. X
  550. XI
  551. XM(p)
  552. XC *p;
  553. X{
  554. X    I c, i, j, k;
  555. X    f = c = 0;
  556. X    W (*p && 0 <= c) {
  557. X        Q (0 < (i = d[c][*p])) {
  558. X            
  559. X            c = i;
  560. X        } E {
  561. X            
  562. X            z = *p;
  563. X            i = d[c][0];
  564. X            j = n = o;
  565. X            do 
  566. X                O(m[i++]+1);
  567. X            W (m[i] != 2);
  568. X
  569. X            
  570. X            i = k = 0;
  571. X            W (i < n) {
  572. X                Q (m[i] == 2) {
  573. X                    j = n;
  574. X                    ++k;
  575. X                }
  576. X                Q (m[i++] == m[j]) {
  577. X                    Q (o <= ++j) {
  578. X                        j = n;
  579. X                        Q (m[i] == 2) {
  580. X                            
  581. X                            o = n;
  582. X                            break;
  583. X                        }
  584. X                    }
  585. X                } E {
  586. X                    j = n;
  587. X                }
  588. X            }
  589. X            Q (n < o) 
  590. X                
  591. X                d[++k][0] = n;
  592. X            c = d[c][*p] = f ? -1 : k;
  593. X        }
  594. X        ++p;
  595. X    }
  596. X    R c < 0;
  597. X}
  598. X
  599. END_OF_FILE
  600.   if test 2931 -ne `wc -c <'1993/ant.c'`; then
  601.     echo shar: \"'1993/ant.c'\" unpacked with wrong size!
  602.   fi
  603.   # end of '1993/ant.c'
  604. fi
  605. if test -f '1993/ant.test.mk' -a "${1}" != "-c" ; then 
  606.   echo shar: Will not clobber existing file \"'1993/ant.test.mk'\"
  607. else
  608.   echo shar: Extracting \"'1993/ant.test.mk'\" \(3470 characters\)
  609.   sed "s/^X//" >'1993/ant.test.mk' <<'END_OF_FILE'
  610. X#
  611. X#    Test Driver for Anthony's Grep
  612. X#
  613. X#    Public Domain 1992, 1993 by Anthony Howe.  No warranty.
  614. X#
  615. X
  616. XSHELL=/bin/sh
  617. XPRG=./ant
  618. X
  619. Xall: ant char word anchor literal wild closure option branch sub class
  620. X
  621. X#
  622. X# Built the entry
  623. X#
  624. Xant: Makefile
  625. X    make -f Makefile ant
  626. X
  627. X#
  628. X# Test simple text patterns without the use of meta characters.
  629. X#
  630. X
  631. Xempty: 
  632. X    $(PRG) '' ant.test.mk
  633. X
  634. Xchar:
  635. X    $(PRG) 'q' ant.test.mk
  636. X
  637. Xword:
  638. X    $(PRG) 'simple' ant.test.mk
  639. X
  640. X#
  641. X# Test meta characters.
  642. X#
  643. X
  644. Xanchor: anchor1 anchor2 anchor3 anchor4 anchor5
  645. X
  646. Xanchor1:
  647. X    $(PRG) '^anchor1' ant.test.mk
  648. X
  649. Xanchor2:
  650. X    $(PRG) 'Grep$$' ant.test.mk
  651. X
  652. X#
  653. X# Find all empty lines.
  654. X#
  655. Xanchor3:
  656. X    $(PRG) '^$$' ant.test.mk
  657. X
  658. X#
  659. X# This is valid but will never match.
  660. X#
  661. Xanchor4:
  662. X    -$(PRG) 'x^a' ant.test.mk
  663. X
  664. X#
  665. X# This is valid but will never match.
  666. X#
  667. Xanchor5:
  668. X    -$(PRG) 'mk$$x' ant.test.mk
  669. X
  670. Xliteral: literal1 literal2
  671. X
  672. X#
  673. X# Every line with a dollar-sign.    
  674. X#
  675. Xliteral1:
  676. X    $(PRG) '\$$' ant.test.mk
  677. X
  678. X#
  679. X# Every line with a backslash.    
  680. X#
  681. Xliteral2:
  682. X    $(PRG) '\\' ant.test.mk
  683. X
  684. X#
  685. X#    wild #1#
  686. X#    wild #a#
  687. X#    wild #%#
  688. X#
  689. Xwild:
  690. X    $(PRG) '#.#' ant.test.mk
  691. X
  692. X#
  693. X#      closure !!
  694. X#      closure !x!
  695. X#    closure !xxxxxx!
  696. X#
  697. Xclosure:
  698. X    $(PRG) 'closure !x*!' ant.test.mk
  699. X
  700. X#
  701. X#    option ++
  702. X#    option +a+
  703. X#    option +b+
  704. X#    option +c+
  705. X#    option +abc+
  706. X#
  707. Xoption: option1 option2
  708. X
  709. Xoption1:
  710. X    $(PRG) '+b?+' ant.test.mk
  711. X
  712. Xoption2:
  713. X    $(PRG) '+.?+' ant.test.mk
  714. X
  715. Xbranch: branch1 branch2 branch3 branch4 branch5 branch6
  716. X
  717. Xbranch1:
  718. X    $(PRG) 'q|simple' ant.test.mk
  719. X
  720. X#
  721. X# This pattern should be the same as '(^all)|(Public)|(Grep$)'.
  722. X#
  723. Xbranch2:
  724. X    $(PRG) '^all|Public|Grep$$' ant.test.mk
  725. X
  726. X#
  727. X# This pattern should generate the same results as branch2.
  728. X#
  729. Xbranch3:
  730. X    $(PRG) 'Grep$$|^all|Public' ant.test.mk
  731. X
  732. X#
  733. X# Null expression between start of pattern and vertical-line.
  734. X#
  735. Xbranch4:
  736. X    $(PRG) '|Grep' ant.test.mk
  737. X
  738. X#
  739. X# Null expression between vertical-line and end of pattern.
  740. X#
  741. Xbranch5:
  742. X    $(PRG) 'Grep|' ant.test.mk
  743. X
  744. X#
  745. X# Null expression between vertical-line and vertical-line.
  746. X#
  747. Xbranch6:
  748. X    $(PRG) 'all||Grep' ant.test.mk
  749. X
  750. X#
  751. X#    sub aabcbcbcxx
  752. X#    sub aagxx
  753. X#    sub aaggxx
  754. X#    sub aadddxx
  755. X#    sub aaxx
  756. X#
  757. Xsub: sub0 sub1 sub2 sub3 sub4 sub5 lparen1 lparen2 rparen1 rparen2
  758. X
  759. X#
  760. X# Null sub-expressions.
  761. X#
  762. Xsub0:
  763. X    $(PRG) 's()u()b()' ant.test.mk
  764. X
  765. Xsub1:
  766. X    $(PRG) '#(1|%)#' ant.test.mk
  767. X
  768. Xsub2:
  769. X    $(PRG) 'aa((bc)*|g)xx' ant.test.mk
  770. X
  771. X#
  772. X# Null expression between the left-parenthesis and the vertical-line.
  773. X#
  774. Xsub3:
  775. X    $(PRG) '#(|1)#' ant.test.mk
  776. X
  777. X#
  778. X# Null expression between the vertical-line and the right-parenthesis.
  779. X#
  780. Xsub4:
  781. X    $(PRG) '#(1|)#' ant.test.mk
  782. X
  783. X#
  784. X# Null expression between the vertical-line and the right-parenthesis.
  785. X#
  786. Xsub5:
  787. X    $(PRG) '#(%||1)#' ant.test.mk
  788. X
  789. X#
  790. X# Missing left-parenthesis generates an error.
  791. X#
  792. Xlparen1:
  793. X    -$(PRG) 'left ( only' ant.test.mk
  794. X
  795. Xlparen2:
  796. X    $(PRG) 'left \( only' ant.test.mk
  797. X
  798. X#
  799. X# Right-parenthesis without preceding left parenthesis should be a literal.
  800. X#
  801. Xrparen1:
  802. X    -$(PRG) 'right ) only' ant.test.mk
  803. X
  804. Xrparen2:
  805. X    $(PRG) 'right \) only' ant.test.mk
  806. X
  807. X#
  808. X#        12345678
  809. X#    -----------------
  810. X#    =0=    1  45
  811. X#    =1=     2 45 78
  812. X#    =2=     2 45
  813. X#    =3=     2 45 78
  814. X#    =4=     2 45
  815. X#    =5=     2 45
  816. X#    =6=     2 45
  817. X#    =7=     2 45
  818. X#    =8=     2 45
  819. X#    =9=    1  45
  820. X#    =]=     23  6
  821. X#    =-=     2 4 678
  822. X#    = =     2 4 6
  823. X#
  824. Xclass:    class1 class2 class3 class4 class5 class6 class7 class8
  825. X
  826. Xclass1:
  827. X    $(PRG) '=[09]=' ant.test.mk
  828. X
  829. Xclass2:
  830. X    $(PRG) '=[^09]=' ant.test.mk
  831. X
  832. Xclass3:
  833. X    $(PRG) '=[]]=' ant.test.mk
  834. X
  835. Xclass4:
  836. X    $(PRG) '=[^]]=' ant.test.mk
  837. X
  838. Xclass5:
  839. X    $(PRG) '=[0-9]=' ant.test.mk
  840. X
  841. Xclass6:
  842. X    $(PRG) '=[^0-9]=' ant.test.mk
  843. X
  844. Xclass7:
  845. X    -$(PRG) '=[3-1]=' ant.test.mk
  846. X
  847. Xclass8:
  848. X    $(PRG) '=[-13]=' ant.test.mk
  849. X
  850. END_OF_FILE
  851.   if test 3470 -ne `wc -c <'1993/ant.test.mk'`; then
  852.     echo shar: \"'1993/ant.test.mk'\" unpacked with wrong size!
  853.   fi
  854.   # end of '1993/ant.test.mk'
  855. fi
  856. if test -f '1993/cmills.hint' -a "${1}" != "-c" ; then 
  857.   echo shar: Will not clobber existing file \"'1993/cmills.hint'\"
  858. else
  859.   echo shar: Extracting \"'1993/cmills.hint'\" \(2242 characters\)
  860.   sed "s/^X//" >'1993/cmills.hint' <<'END_OF_FILE'
  861. X"Bill Gates" Award: <chris@pagine.com> Chris Mills
  862. X
  863. X    Chris Mills
  864. X    Pagine Corporation
  865. X    1961-A Concourse Drive
  866. X    San Jose, CA 95131
  867. X    USA
  868. X
  869. X
  870. XJudges' comments:
  871. X
  872. X    From the San Jose Mercury News (May 15, 1993 page 20A "West Hackers 
  873. X    trounce East in computer quiz game"): 
  874. X
  875. X    "Since 1984, a contest has been held on Usenet for the most
  876. X    unreadable, creative, bizarre but working C program", Gates
  877. X    said. "What is the name of this contest?"
  878. X
  879. X    "Windows," shot back Gassee, naming Microsoft's premier product
  880. X    - a product over which Apple sued Microsoft five years ago. Not
  881. X    the right answer - it's "The Obfuscated C Contest [sic]" - but
  882. X    it brought down the house of Apple partisans...
  883. X
  884. X    [The expression on Bill Gates' face was a sight to behold, as reported
  885. X    to us by several who were there].
  886. X
  887. X    To use:
  888. X    make cmills         # requires the X11 library
  889. X    DISPLAY="your_X_server_display" 
  890. X    export DISPLAY
  891. X    ./cmills [speed]    # must be run on an X11 server
  892. X
  893. X    where:
  894. X    speed    update speed from 1 to 9 (default is 9)
  895. X
  896. X    Csh users should use:
  897. X    make cmills         # requires the X11 library
  898. X    setenv DISPLAY "your_X_server_display" 
  899. X    ./cmills [speed]    # must be run on an X11 server
  900. X
  901. X    You must set $DISPLAY in your environment or the program will 
  902. X    dump core.  This is not a bug as the author documented it as
  903. X    a feature.  :-)
  904. X
  905. X    The optional argument is integer which controls the speed of the
  906. X    program.  By default the speed is 9.  You may want to try 1.
  907. X
  908. X    You will have to kill the program (i.e., ^C) to stop it.
  909. X
  910. X    WARNING: Slow servers or servers with long request queues will
  911. X         continue to 'run' for a while after you have killed
  912. X         the program.
  913. X
  914. X    This program makes your windows about as useful as their windows. :-)
  915. X
  916. X
  917. XSelected notes from the author:
  918. X
  919. X    The program uses a single backing pixmap (which is the size of the
  920. X    screen) for all of its subwindows (with a little bit of trickery to
  921. X    move the offset around).  This is much better (and faster) than the
  922. X    obvious implementation which would require a full-screen pixmap and
  923. X    a separate backing pixmap for each subwindow.
  924. X
  925. X    The chance that a window breaks is based on it's kinetic energy,
  926. X    which in turn is based on it's area and speed.  How silly!
  927. END_OF_FILE
  928.   if test 2242 -ne `wc -c <'1993/cmills.hint'`; then
  929.     echo shar: \"'1993/cmills.hint'\" unpacked with wrong size!
  930.   fi
  931.   # end of '1993/cmills.hint'
  932. fi
  933. if test -f '1993/dgibson.c' -a "${1}" != "-c" ; then 
  934.   echo shar: Will not clobber existing file \"'1993/dgibson.c'\"
  935. else
  936.   echo shar: Extracting \"'1993/dgibson.c'\" \(2143 characters\)
  937.   sed "s/^X//" >'1993/dgibson.c' <<'END_OF_FILE'
  938. X#include <stdio.h>
  939. X
  940. X#define maxc (prs >> 16)
  941. X#define maxr (prs & 0xff00) >> 8
  942. X#define find (col > 1)
  943. X#define endb || (prs & 16) && X(0) || chpa || (eols, 0)
  944. X#define lnst doln ? 0 : (init, 0) || (prs & 128) && X(0)
  945. X#define L    endb) || 0 || (find ? 0 : (rrr++, rrc = 0)) || (lnst
  946. X#define X(p) (dfc++ && ((prs & 48) != 32 || rrc < maxc) && ++ccl && \
  947. X             (find ? (bat = bit, bit = but, but = p, ccl == col && \
  948. X             (ret = bat + bit + but) + 1) : (las = las * 2 + \
  949. X             (((main(ccl + 1, cro - 1) + main(ccl + 1, cro) + \
  950. X             main(ccl + 1, cro + 1) - p) | p) == 3), occ |= las & 1, \
  951. X             printf(" %c", "_O"[las & 1]), ccl == 2 && (sta |= (las & 3) << 6),\
  952. X             0)))
  953. X#define _    || (find || rrc++, 0) || X(0)
  954. X#define O    || (find || rrc++, 0) || X(1)
  955. X#define chpa (find && col > ccl && ((ret = bit + but) + 1))
  956. X#define eols (!find && (cro == 1 ? (sta |= occ << 3) : cro == 2 && \
  957. X             (sta |= occ << 2), sta |= (las & 3) << 4))
  958. X#define init (find ? (ret = bit = but = 0) : (ocp = occ, las = occ = 0, \
  959. X             printf("\nL")), dfc = (prs & 192) != 64, ccl = 0)
  960. X#define doln !(dfl++ && (((prs & 3) != 2) || rrr < maxr) && \
  961. X             (++cro == row || !find))
  962. X#define recu (col =- col, (ccl = find ? rcf : rcl), cro = rro, 0 _ || \
  963. X             (rrc >= maxc ? 0 : (find ? rcf = ccl : (rcl = ccl), \
  964. X             main(-col, row))))
  965. X#define addl (lnst || (rro = cro, find ? rcf = ccl : (rrc = 0, rcl = ccl), \
  966. X             0) || main(-col, row) || (ccl = rcl + 1, 0) endb)
  967. X#define outp (find || printf("\n\nGEN %d STAT %ld\nEND\n", ++gen, \
  968. X             (long)ccl << 16 | cro << 8 | (sta | occ | ocp << 1) ^ 0x66))
  969. X#define GEN  endb) || (prs & 1) && addl || (outp, 0)), ret)); } int gen =
  970. X#define STAT ;long prs =
  971. X#define END  ;
  972. X#define LIFE int bat, bit, but, las, gen, ret, rcl, rcf, rro, rrc, rrr, \
  973. X             occ, ocp, sta, dfc; long prs; main(int col, int row) { \
  974. X             int dfl = ((prs & 12) != 4), ccl = 0, cro = 0; return \
  975. X             col == 1 && printf("LIFE\n"), (col < 0 ? recu : \
  976. X             (((ret = 0) || (prs & 8) && addl || 0 && (0
  977. X
  978. X#include "life.d"
  979. END_OF_FILE
  980.   if test 2143 -ne `wc -c <'1993/dgibson.c'`; then
  981.     echo shar: \"'1993/dgibson.c'\" unpacked with wrong size!
  982.   fi
  983.   # end of '1993/dgibson.c'
  984. fi
  985. if test -f '1993/dgibson.data5' -a "${1}" != "-c" ; then 
  986.   echo shar: Will not clobber existing file \"'1993/dgibson.data5'\"
  987. else
  988.   echo shar: Extracting \"'1993/dgibson.data5'\" \(3531 characters\)
  989.   sed "s/^X//" >'1993/dgibson.data5' <<'END_OF_FILE'
  990. X/* Howdy, Landon:                                */
  991. X/* Here is one of the best Life patterns found in many years.  It is called */
  992. X/* a "spacefiller", for reasons which will become obvious when you run it.  */
  993. X/* This was found by Hartmut Holzwart a couple of weeks ago.  Enjoy!        */
  994. X/*                             BCNU, -dbell-        */
  995. XLIFE
  996. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  997. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _
  998. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _
  999. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _
  1000. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _
  1001. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ O _ O O O O O _ _ _ _ _ _
  1002. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _
  1003. XL _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ O O O _ _ _ O _ _
  1004. XL _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _
  1005. XL _ _ _ _ _ _ _ _ O O _ _ O _ _ _ _ _ _ _ O _ O _ O _ O _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O _
  1006. XL _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ O _ O _ O _ O _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ O _
  1007. XL _ _ _ _ _ _ O O O O O _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ O _ O O _ _ O _ O _ _
  1008. XL _ _ _ O O _ _ _ _ _ O O _ _ _ _ O _ _ _ O O O _ O O O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _
  1009. XL _ _ O _ _ _ O O O _ _ O _ _ O O O _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _
  1010. XL _ O _ _ _ O _ _ _ _ _ O O _ O O _ _ _ O O O O O O O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _
  1011. XL _ O _ _ _ _ _ O _ _ _ O _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O O O _
  1012. XL _ O _ _ O _ _ O _ _ _ _ _ O O O _ O O O O O O O O O O O O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _
  1013. XL _ _ O _ O _ _ O O _ O _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ O _ O O _ _ O _ O _ _
  1014. XL _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O O O O O O O O O O O O _ O O O _ _ _ _ _ O _ _ O _ _ O _
  1015. XL _ O O O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ O _ _ _ O _ _ _ _ _ O _
  1016. XL _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O O O O O O O _ _ _ O O _ O O _ _ _ _ _ O _ _ _ O _
  1017. XL _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ O O O _ _ O _ _ O O O _ _ _ O _ _
  1018. XL _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O O O _ O O O _ _ _ O _ _ _ _ O O _ _ _ _ _ O O _ _ _
  1019. XL _ _ O _ O _ _ O O _ O _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ O O O O O _ _ _ _ _ _
  1020. XL _ O _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ O _ O _ O _ O _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _
  1021. XL _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ O _ O _ O _ O _ _ _ _ _ _ _ O _ _ O O _ _ _ _ _ _ _ _
  1022. XL _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _
  1023. XL _ _ O _ _ _ O O O _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _
  1024. XL _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1025. XL _ _ _ _ _ _ O O O O O _ O _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1026. XL _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1027. XL _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1028. XL _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1029. XL _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1030. XL _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  1031. XGEN 0
  1032. XEND
  1033. END_OF_FILE
  1034.   if test 3531 -ne `wc -c <'1993/dgibson.data5'`; then
  1035.     echo shar: \"'1993/dgibson.data5'\" unpacked with wrong size!
  1036.   fi
  1037.   # end of '1993/dgibson.data5'
  1038. fi
  1039. if test -f '1993/dgibson.hint' -a "${1}" != "-c" ; then 
  1040.   echo shar: Will not clobber existing file \"'1993/dgibson.hint'\"
  1041. else
  1042.   echo shar: Extracting \"'1993/dgibson.hint'\" \(1756 characters\)
  1043.   sed "s/^X//" >'1993/dgibson.hint' <<'END_OF_FILE'
  1044. XBest Abuse of the C Preprocessor: <dgibson@cs.uct.ac.za> David Gibson
  1045. X
  1046. X    David Gibson
  1047. X    University of Cape Town
  1048. X
  1049. X    1 Sweet Valley Road
  1050. X    Bergvliet
  1051. X    7945
  1052. X    South Africa
  1053. X
  1054. X
  1055. XJudges' comments:
  1056. X
  1057. X    To use:
  1058. X    sh ./dgibson.sh [datafile]
  1059. X
  1060. X    where:
  1061. X    datafile    initial pattern (default: dgibson.data1)
  1062. X    
  1063. X    We have provided the shell script 'dgibson.sh' to make it easier
  1064. X    to run this entry.  Run this shell script several times to
  1065. X    see what happens.
  1066. X
  1067. X    There are a number of data files available:
  1068. X
  1069. X    dgibson.data1
  1070. X    dgibson.data2
  1071. X    dgibson.data3
  1072. X    dgibson.data4
  1073. X    dgibson.data5
  1074. X
  1075. X    For dgibson.data5 you will need a large screen, lots of virtual
  1076. X    memory and lots of time!
  1077. X
  1078. X    Good luck trying to use a debugger on this entry!  Life is not
  1079. X    always pretty.
  1080. X
  1081. X
  1082. XSelected notes from the author:
  1083. X
  1084. X    This program plays the Game of Life.
  1085. X
  1086. X    Life is a cellular automaton invented by J. H. Conway, in which each of
  1087. X    a rectangular grid of cells can be alive or dead, and cells with more
  1088. X    than 3 or less than 2 (out of 8) live neighbours die, and empty cells
  1089. X    with exactly 3 neighbours give birth.
  1090. X
  1091. X    Some notes: the "STAT n" information does not have to be present in the
  1092. X    initial configuration;  the initial configuration should not have live
  1093. X    cells around the edges; the grid should be a perfect rectangle.
  1094. X
  1095. X    Further features: the current generation number is preserved, and the
  1096. X    grid automatically resizes itself as the object gets too big or too
  1097. X    small.
  1098. X
  1099. X    When writing this program, my goal was to make each cell in the life
  1100. X    grid expand to the code which calculates the fate of that cell.  In
  1101. X    addition, the resulting program is a single expression, which makes it
  1102. X    necessary to recurse on main in two "directions" simultaneously.
  1103. X
  1104. END_OF_FILE
  1105.   if test 1756 -ne `wc -c <'1993/dgibson.hint'`; then
  1106.     echo shar: \"'1993/dgibson.hint'\" unpacked with wrong size!
  1107.   fi
  1108.   # end of '1993/dgibson.hint'
  1109. fi
  1110. if test -f '1993/ejb.c' -a "${1}" != "-c" ; then 
  1111.   echo shar: Will not clobber existing file \"'1993/ejb.c'\"
  1112. else
  1113.   echo shar: Extracting \"'1993/ejb.c'\" \(2422 characters\)
  1114.   sed "s/^X//" >'1993/ejb.c' <<'END_OF_FILE'
  1115. X
  1116. X
  1117. X                     static signed char a[] = {0x69,
  1118. X                   110, 118, 97, 108, 105,  0x64, 1-1,
  1119. X                 0x6d, 111, 118,  101, 1<<1<<1<<1<<1<<1,
  1120. X                 114,  105, 0x6e,  103,  32, 'o'/3, 100,
  1121. X                 32, 102, 114, 111,  0x6d, 32, 115, 116,
  1122. X                 97, 100-001, 107, 32,37, 2*'2', '@'>>1,
  1123. X                 116, '%' + '%' + '%','w'-'W',115, 0x74,
  1124. X                 97, 3*'!', 107, 'q' - 'Q', 37, 10*'\n',
  1125. X                 10, 0}, * b = a + (1<<1<<1<<1), * w, x,
  1126. X                 *q, c, r; int main(int d, char *e []) {
  1127. X                 return q = (signed char *)(e+1+1), (r =
  1128. X                 e[0] && e[1] ? 0 : 0 * puts (a) + 1) ||
  1129. X                 (r = e[1<<1] && d != 1 <<1 && 0 * puts(
  1130. X                 a) + 1) || e[1- -1] ||  (r = atoi(e[1])
  1131. X                 < -0200 || atoi (e [1]) > 0x7f || ( x =
  1132. X                 atoi( e[1] ) ) == 0 ? 0 * puts(a) + 1 :
  1133. X                 0) || e [1- -1] || (x- -x > 1-1 ? (q[0]
  1134. X                   = x, q[1] = q[3] = 1, q[2] = 2) : (
  1135. X                     memset ( w = ( signed  char * )
  1136. X
  1137. X
  1138. X
  1139. X
  1140. X
  1141. X
  1142. X
  1143. X                     malloc(-x), '1', -x), puts (w),
  1144. X                   q[0] = x, q[1] = '0', q[2] = q[3] =
  1145. X                 0)), r || (q[3] ? (c = 6 - q[1] - q[2],
  1146. X                 (q[0] != 1) ? q[0]-- , d = q[2], q[2] =
  1147. X                 c, main(2, e), c = q[2], q[2] = d, q[0]
  1148. X                 ++ : 0, printf(b, q[0], q[1], q[2]), (q
  1149. X                 [0] != 1) ? q[0]--, d = q[1],q[1] = c ,
  1150. X                 main(2, e), c = q[1], q[1] = d, q[0] ++
  1151. X                 : 0) : - 1 - q[0] - 1 == 0 ? (w[- x - 1
  1152. X                 - (q[1] & 1 ^ 1)] = q[1], puts (w), w [
  1153. X                 - x - 1 - (q[1] & 1)] = q[1], puts(w) )
  1154. X                 : - 1 - q[0] == 0 ?  (w[- x - 1] = q[ 1
  1155. X                   ], puts(w)) : (q[0] += 1 + ( q[1] & 1
  1156. X                       ^ 1), main(2, e), q[0] -= 1 + ( q
  1157. X                             [1] & 1 ^ 1), q[1] & 1 ? (q
  1158. X                                [0]+=1+1,  q[1]^=1, main
  1159. X                                (2, e), q[1]^=1, q[0]-=1
  1160. X                                +1) : 0, w[q[0] - x] = q
  1161. X                               [1], puts(w), q[1] & 1 ?
  1162. X                             0 : (q[0]+=1+1, q[1]^=1,
  1163. X                           main (2, e), q[1]^=1, q
  1164. X                         [0]-=1+1), q[0] += 1 +
  1165. X                      (q[1] & 1),main(2,e)
  1166. X                  , q[0] -= 1 + (q[1]
  1167. X                 & 1) ) ), r; }
  1168. END_OF_FILE
  1169.   if test 2422 -ne `wc -c <'1993/ejb.c'`; then
  1170.     echo shar: \"'1993/ejb.c'\" unpacked with wrong size!
  1171.   fi
  1172.   # end of '1993/ejb.c'
  1173. fi
  1174. if test -f '1993/ejb.hint' -a "${1}" != "-c" ; then 
  1175.   echo shar: Will not clobber existing file \"'1993/ejb.hint'\"
  1176. else
  1177.   echo shar: Extracting \"'1993/ejb.hint'\" \(3138 characters\)
  1178.   sed "s/^X//" >'1993/ejb.hint' <<'END_OF_FILE'
  1179. XBest Obfuscated Algorithm: <ejb@ERA.COM> E. Jay Berkenbilt
  1180. X
  1181. X    E. Jay Berkenbilt
  1182. X    Engineering Research Associates
  1183. X    1595 Springhill Road
  1184. X    Vienna, VA 22182-2235
  1185. X    USA
  1186. X
  1187. X
  1188. XJudges' comments:
  1189. X
  1190. X    To run:
  1191. X    make ejb
  1192. X    ./ejb level
  1193. X
  1194. X    where:
  1195. X    level   a value from -128 to 127
  1196. X
  1197. X     A negative argument plays the patience puzzle.  An argument
  1198. X     greater than 0 plays the Tower of Hanoi puzzle.  In either case
  1199. X     the absolute value of the argument specifies the size of the
  1200. X     respective puzzle.  Refer to the files ejb.explain1 and
  1201. X     ejb.explain2 for more information on these puzzles.
  1202. X
  1203. X     Of course, you need a different kind of "patience" if you give
  1204. X     the argument 127 to this program and want to see it finish!
  1205. X
  1206. X
  1207. XSelected notes from the author:
  1208. X
  1209. X    WHAT THIS PROGRAM DOES
  1210. X    ======================
  1211. X
  1212. X    ./ejb 5        Output: solution to Towers of Hanoi for five rings
  1213. X    ./ejb -6        Output: solution to the Patience puzzle for six rings
  1214. X
  1215. X    The format of the output for the Towers of Hanoi case is simply a
  1216. X    text description of how to solve the puzzle.  For the patience
  1217. X    puzzle, the output is a sequence binary codes representing
  1218. X    successive states of the puzzle.  The rightmost digit represents
  1219. X    the first ring.  A "1" means the ring is on the U; a "0" means it
  1220. X    is off the U.  The program prints the word "Invalid" in response to
  1221. X    illegal command line parameters.
  1222. X
  1223. X    MOTIVATION
  1224. X    ==========
  1225. X    Most people who have written software for other people have been
  1226. X    asked to count lines of code.  Naturally, this brings up the
  1227. X    controversial question of exactly what defines a line of code.
  1228. X    This program serves to show that counting semicolons will not
  1229. X    always provide a meaningful measure of code size.  This is
  1230. X    especially true in this program where the number of semicolons
  1231. X    itself is ambiguous.  Does it have two or three?  In addition, the
  1232. X    only "C" keyword this program uses besides type names and
  1233. X    qualifiers is "return", and the only function defined in the code
  1234. X    is "main".  The level of complexity of the program without multiple
  1235. X    semicolons, statements, and functions is achieved by abusing C
  1236. X    operators, especially the comma operator.  Considerable use of ||,
  1237. X    &&, and ? : helps too.  In addition, main is called recursively.
  1238. X    The null pointer that terminates argv is used to pass additional
  1239. X    information into main.  Even though the algorithms used by this
  1240. X    code are simple, this program is still hard to follow even when
  1241. X    indented properly.  (It is pretty hard to indent this code
  1242. X    reasonably, however.)
  1243. X
  1244. X    Although this program is has only been tested on UNIX systems but
  1245. X    will probably run on just about any machine with an ANSI C
  1246. X    compiler.  It does not use the C preprocessor at all.  The only
  1247. X    functions it uses are atoi, malloc, memset, printf, and puts.  It
  1248. X    does, however, require that the architecture it runs on have bytes
  1249. X    that are at least eight bits long and pointers that are at least
  1250. X    four bytes long.  In addition, it requires an ANSI compiler since
  1251. X    it uses "signed char" and ANSI-style function declarations.
  1252. END_OF_FILE
  1253.   if test 3138 -ne `wc -c <'1993/ejb.hint'`; then
  1254.     echo shar: \"'1993/ejb.hint'\" unpacked with wrong size!
  1255.   fi
  1256.   # end of '1993/ejb.hint'
  1257. fi
  1258. if test -f '1993/jonth.c' -a "${1}" != "-c" ; then 
  1259.   echo shar: Will not clobber existing file \"'1993/jonth.c'\"
  1260. else
  1261.   echo shar: Extracting \"'1993/jonth.c'\" \(2221 characters\)
  1262.   sed "s/^X//" >'1993/jonth.c' <<'END_OF_FILE'
  1263. X  G    int i,j
  1264. X  K    case
  1265. X  R    return 0
  1266. X  S(    x,y) for(x=0; x<y; x++)
  1267. X  I    S(i,10
  1268. X  z    I-6)B[t][u
  1269. X  t    (X[m].b[i].i+g)
  1270. X  u    (X[m].b[i].j+l)
  1271. X  M(    x,y) XFillRectangles(D,p,x,a,y);
  1272. X  s    B[i][j
  1273. X  W    =XCreateGC(D,p,4,L)
  1274. X  E(    W,_) k=0; I)S(j,22)if(W s]){ a[k].x=i*20; a[k].y=j*20+30; a[k].w=a[k].h=_; k++; }M(
  1275. X  A(    W,_) &&!B[W]; if(!j){ z]=1; R; } else{ N(m); _; v(0); }
  1276. X  Q    ]=0; I-6&&j)j=
  1277. X  F    I-6)B[X[w].b[i].i+g][X[w].b[i].j+l
  1278. X  e(    x) break; K x:q(c,j,x);
  1279. X  H    (m){ G; I-6){ a[i].x=t*20; a[i].y=u*20+30; a[i].w=a[i].h=
  1280. X  v(    _) d(m); z+_]=1; R+1;
  1281. Xstruct{
  1282. X    short x,y,w,h;
  1283. X} a[220],C;
  1284. Xstruct{
  1285. X    struct{
  1286. X        G;
  1287. X    } b[4];
  1288. X} X[99];
  1289. XG,l,g=3,p,B[10][22],L[99],o[99],n,r,h,_[4],D,J,T;
  1290. Xf(){
  1291. X    *L=2;
  1292. X    n||XSendEvent(D,p,n=1,0,L),XFlush(D);
  1293. X    P();
  1294. X}
  1295. XZ(){
  1296. X    _[1]=_[3]=(9-h)*40000;
  1297. X    setitimer(0,_,0);
  1298. X}
  1299. Xmain(){
  1300. X    G,*_=(int*)X;
  1301. X    char*c=
  1302. X"*{{{ {}{{*{{{ {}* {    {{*{{{   *{{{ {* {* * {  {{ {  { *{* {   {* *{{{ *{{{ {   * {  { *{{{ {{  *{{ {  {{* {   {*{{ {{ {{ {* { {*{{ {  *{{{{    *{{ {{ ";
  1303. X    for(; *c; )
  1304. X        *_++=(unsigned)(*c+++2)%4;
  1305. X    srand(time(0));
  1306. X    L[10]=32769;
  1307. X    D=XOpenDisplay(0);
  1308. X    L[1]=L[2]=XWhitePixel(D,j=XDefaultScreen(D));
  1309. X    XMap@p=XCreate@XRoot@j),0,0,200,470,2,0,1,0,2056,L));
  1310. X    T W;
  1311. X    L[2]=XBlackPixel(D,j);
  1312. X    J W;{
  1313. X        G,O=0,c=0;
  1314. X        Z(P());
  1315. X        q(c,c,1);
  1316. X        for(; ; ){
  1317. X            i=lK();
  1318. X            j=c;
  1319. X            switch(i){
  1320. X                K 'k':c=q(c="$#&'(%)+,-*/01.3254"[c]-35,j,4)?c:j;
  1321. X                e('j')e('l')e(32)}
  1322. X            if(n){
  1323. X                if(!q(c,j,2)){
  1324. X                    G,n;
  1325. X                    for(j=21;j-1;j--){
  1326. X                        n=1;
  1327. X                        I&&n)n=s];
  1328. X                        n&&(X9(j++),O++);
  1329. X                    }
  1330. X                    n=0;
  1331. X                    I&&!n)n=B[i][21];
  1332. X                    Y();
  1333. X                    r++;
  1334. X                    c=rand()%19;
  1335. X                    if(!q(c,c,3))
  1336. X                        R+puts(L);
  1337. X                        U(Z(h=O/9));
  1338. X                    }
  1339. X                n=0;
  1340. X            }
  1341. X        }
  1342. X    }
  1343. X}
  1344. XY(){
  1345. X    G,E(,19)J,k)E(!,20)T,k)U();
  1346. X}
  1347. XlK(){
  1348. X    XNextEvent(D,o);
  1349. X    switch(*o){
  1350. X        K 2:R+o[2]?0:XX k){
  1351. X            G=1;switch(k){
  1352. X                K 1:z+l]=1;
  1353. X                d(m);R+1;
  1354. X                K 'j':z Q t A(t-1][u,g--)K 'l':z Q t<9
  1355. X                A(1+t][u,g++)K 4:F Q
  1356. X                u<22&&t>=0&&t<10&&!B[t][u ];
  1357. X                if(!j){
  1358. X                    F]=1;
  1359. X                    R;
  1360. X                }
  1361. X            N(w);
  1362. X        v(0)K 32:for(;
  1363. X    q(m,m,2);
  1364. X    )n=r++;
  1365. X    R+1;
  1366. X    K 3:l=0;
  1367. X    g=3;
  1368. X    I-6&&j)j=!B[t][u+l ];
  1369. X    if(!j)R;
  1370. X    v(l)K 2:z Q(u+1)<22 A(t][u+1,l++)}
  1371. X    R;
  1372. X}
  1373. XX9(_){
  1374. X    G;
  1375. X    for(j=_; j; j--)I)s]=s-1];
  1376. X}
  1377. XU(){
  1378. X    void*a=&C;
  1379. X    C.w=200;
  1380. X    C.h=30;
  1381. X    M(T,1);
  1382. X    sprintf(L,"Score%9d Level%9d",r,h);
  1383. X    XDrawString(D,p,J,7,15,L,29);}
  1384. XP(){
  1385. X    signal(14,f);
  1386. X}
  1387. X
  1388. END_OF_FILE
  1389.   if test 2221 -ne `wc -c <'1993/jonth.c'`; then
  1390.     echo shar: \"'1993/jonth.c'\" unpacked with wrong size!
  1391.   fi
  1392.   # end of '1993/jonth.c'
  1393. fi
  1394. if test -f '1993/leo.c' -a "${1}" != "-c" ; then 
  1395.   echo shar: Will not clobber existing file \"'1993/leo.c'\"
  1396. else
  1397.   echo shar: Extracting \"'1993/leo.c'\" \(1731 characters\)
  1398.   sed "s/^X//" >'1993/leo.c' <<'END_OF_FILE'
  1399. X#include <stdio.h>
  1400. X#include <malloc.h>
  1401. X#include <string.h>
  1402. X
  1403. X#define A(x) (e^d)&i?e:(e+=i+i/15-d,d<<=4,i<<=4,x)
  1404. X#define B b+=!((e^d)&i)&&(d|=i),i<<=4,
  1405. X#define C i=15,B B B B d=d<<4|d>>12,
  1406. X#define D=(d=g,b=0,C b<<=4, C C C b)
  1407. X#define E if(**y)goto
  1408. X#define F=a[rand()%c]
  1409. X#define G unsigned short
  1410. X#define H e^=a[z],a[z]^=e,e^=a[z],
  1411. X
  1412. Xvoid
  1413. X    main
  1414. X    (int
  1415. X        z,char
  1416. X        **y)
  1417. X            {G*a
  1418. X            ,b,c
  1419. X                ,d,e
  1420. X                ,f,g
  1421. X                    ,h,i
  1422. X                    ;*(*
  1423. X                        y+=
  1424. X                        strlen
  1425. X                            (*y)
  1426. X                            -1)^=
  1427. X                                'd';
  1428. X                                srand
  1429. X                                    (time
  1430. X                                    (0))
  1431. X                                        ;z==
  1432. X                                    2&&
  1433. X                                    sscanf
  1434. X                                (y[1
  1435. X                                ],"%d"
  1436. X                            ,&z)
  1437. X                            &&z?
  1438. X                        0:(z
  1439. X                        =6);
  1440. X                    if(!
  1441. X                    (a=(
  1442. X                G*)
  1443. X                calloc(
  1444. X            z*z*
  1445. X            z*z,
  1446. X        sizeof
  1447. X        (G))
  1448. X    )){
  1449. X    printf
  1450. X("No\
  1451. X    memory\
  1452. X    \n");
  1453. X        exit
  1454. X        (1);
  1455. X            }for
  1456. X            (c=1
  1457. X                ;i=15
  1458. X                ,d=z
  1459. X                    ,c<z
  1460. X                    *z*z
  1461. X                        *z&&
  1462. X                        (e=a
  1463. X                            [c-1
  1464. X                            ]+1,
  1465. X                                a[c]
  1466. X                                =A(A
  1467. X                                    (A(A
  1468. X                                    (0))
  1469. X                                        )),1
  1470. X                                    );c++
  1471. X                                    );*(
  1472. X                                **y?
  1473. X                                &g:&
  1474. X                            e)F;
  1475. X                            do{
  1476. X                        printf
  1477. X                        ("(%d): ????\b\b\b\b"
  1478. X                    ,c);E
  1479. X                    q0;else
  1480. X                goto
  1481. X                q1;q0:
  1482. X            printf
  1483. X            ("%04X\n"
  1484. X        ,g+
  1485. X        4369
  1486. X    );E
  1487. X    q2;q1:
  1488. Xscanf
  1489. X    ("%hx"
  1490. X    ,**y
  1491. X        ?&h:
  1492. X        &g);
  1493. X            E q3
  1494. X            ;g-=
  1495. X                4369
  1496. X                ;q2:
  1497. X                    printf
  1498. X                    ("??\b\b"
  1499. X                        );E q1;
  1500. X                        printf(
  1501. X                            "%02x\n"
  1502. X                            ,h D
  1503. X                                );q3
  1504. X                                :for
  1505. X                                    (z=f
  1506. X                                    =0;(
  1507. X                                       z<c||
  1508. X                                    (c=f
  1509. X                                    ,0))
  1510. X                                &&(H
  1511. X                                b D!=
  1512. X                            h,H b
  1513. X                            ||(a[
  1514. X                        f++]=
  1515. X                        a[z])
  1516. X                    ,1);z
  1517. X                    ++);
  1518. X                }while
  1519. X                (h!=
  1520. X            64&&
  1521. X            c>0&&
  1522. X        ((g F
  1523. X        ),1)
  1524. X    );printf
  1525. X    ("\n"
  1526. X);}
  1527. END_OF_FILE
  1528.   if test 1731 -ne `wc -c <'1993/leo.c'`; then
  1529.     echo shar: \"'1993/leo.c'\" unpacked with wrong size!
  1530.   fi
  1531.   # end of '1993/leo.c'
  1532. fi
  1533. if test -f '1993/leo.hint' -a "${1}" != "-c" ; then 
  1534.   echo shar: Will not clobber existing file \"'1993/leo.hint'\"
  1535. else
  1536.   echo shar: Extracting \"'1993/leo.hint'\" \(2886 characters\)
  1537.   sed "s/^X//" >'1993/leo.hint' <<'END_OF_FILE'
  1538. XBest Game: <leo@ipmce.su> Leonid A. Broukhis
  1539. X
  1540. X    Leonid A. Broukhis
  1541. X    Moscow Centre of SPARC Technology
  1542. X    123481 Liberty St.,
  1543. X    89-1-95 Moscow
  1544. X    Russia
  1545. X
  1546. X
  1547. XJudges' comments:
  1548. X
  1549. X    To make:
  1550. X    make leo
  1551. X
  1552. X    To have the computer guess:
  1553. X    leo [colors]
  1554. X
  1555. X    To guess the computer's number:
  1556. X    mind [colors]
  1557. X
  1558. X    where:
  1559. X    colors        number of possible colors (1 to 15) (default: 6)
  1560. X    
  1561. X    By default, the number of colors if 6.  You may specify a
  1562. X    value of between 1 and 15 colors.  See the author's notes
  1563. X    for instructions of how to play.
  1564. X
  1565. X    We look forward to more entries from the newer members of the 
  1566. X    International Internet community.
  1567. X
  1568. X    On some systems, you may need to remove the line:
  1569. X
  1570. X    #include <malloc.h>
  1571. X    
  1572. X    or replace that line with:
  1573. X
  1574. X    #include <sys/types.h>
  1575. X    #include <sys/malloc.h>
  1576. X
  1577. X    to successfully build this entry.
  1578. X
  1579. X
  1580. XSelected notes from the author:
  1581. X
  1582. X    This program plays mastermind, if you call it by a name ending by
  1583. X    'd', otherwise it _solves_ mastermind. Call it without parameters
  1584. X    to use 6 digits (colors), or indicate the number of possible digits
  1585. X    (you cannot change the number of positions so easily).
  1586. X
  1587. X    The number in parentheses is the number of possible combinations,
  1588. X    based on previous questions and answers.  If you solve the puzzle,
  1589. X    "(1)" indicates that your previous moves are enough to give correct
  1590. X    answer.  If the program acts as solver and terminates prematurely,
  1591. X    it means that you have mistaken in your answers to its guesses.
  1592. X    Question marks indicate the number of digits you have to enter
  1593. X    (either 4 when you guess or 2 when computer guesses).
  1594. X
  1595. X    Note that the program uses the same code for both player and
  1596. X    solver, and the only place where it makes difference is the
  1597. X    interactive part. Many obfuscations have been made to achieve
  1598. X    this.  An expression giving (bulls * 16 + cows) from two numbers
  1599. X    is, however, quite straightforward :-) , as well as the arithmetic
  1600. X    of binary coded colors-base numbers is.
  1601. X
  1602. X    Limitations: maximum number of digits (colors) is 14 (1..F).
  1603. X
  1604. X    Suggestions: Use terminal (or emulator) with non-destructive
  1605. X    backspaces. Do "disable scrolling" on cmdtool or similar emulators.
  1606. X
  1607. X    Bugs: Please don't type ^D at the prompt!!
  1608. X
  1609. X    EXAMPLE: Suppose we think of 1234:
  1610. X
  1611. X    judges-385> leo
  1612. X    (1296): 6433
  1613. X    ?? 12       # one 3 is a bull, another is a cow, and 4 is a cow
  1614. X    (160): 5363
  1615. X    ?? 02       # both 3's are cows
  1616. X    (21): 4231
  1617. X    ?? 22       # 2 and 3 are bulls, 4 and 1 are cows
  1618. X    (2): 4132
  1619. X    ?? 13       # 3 is a bull; 1, 2 and 4 are cows
  1620. X    (1): 1234
  1621. X    ?? 40       # you may enter everything there
  1622. X
  1623. X    EXAMPLE: Guess the computer's number:
  1624. X
  1625. X    judges-387> mind
  1626. X    (1296): ???? 1122   # my strategy isn't the best, just as example
  1627. X    00
  1628. X    (256): ???? 3344
  1629. X    20
  1630. X    (18): ???? 5566
  1631. X    02
  1632. X    (6): ???? 3654
  1633. X    11
  1634. X    (2): ???? 3355
  1635. X    00
  1636. X    (1): ???? 6444
  1637. X    40           # we have guessed the number
  1638. END_OF_FILE
  1639.   if test 2886 -ne `wc -c <'1993/leo.hint'`; then
  1640.     echo shar: \"'1993/leo.hint'\" unpacked with wrong size!
  1641.   fi
  1642.   # end of '1993/leo.hint'
  1643. fi
  1644. if test -f '1993/rince.c' -a "${1}" != "-c" ; then 
  1645.   echo shar: Will not clobber existing file \"'1993/rince.c'\"
  1646. else
  1647.   echo shar: Extracting \"'1993/rince.c'\" \(2803 characters\)
  1648.   sed "s/^X//" >'1993/rince.c' <<'END_OF_FILE'
  1649. X/** J.K.Bonfield **
  1650. X^    <                                                          
  1651. X^    >                                                          
  1652. X<            #                >                        v        
  1653. X<                                          <                    
  1654. X<            >                >            <        v        
  1655. XX                                          X                j
  1656. Xx                                          X                j
  1657. XX                             x    ^                        k
  1658. X^                                  ^                            
  1659. X^    #                                                             
  1660. XX                             X            X                X
  1661. X
  1662. X^    v                                                          
  1663. Xv                                                      v        
  1664. Xv                        #                                         
  1665. Xv                        X                                      
  1666. Xv                        x                                      
  1667. X>                #            <                        v        
  1668. X>                                              >                
  1669. XX                                              X            l
  1670. Xx                                              X            l
  1671. X
  1672. X41 20
  1673. X########################################
  1674. X#                                      #
  1675. X#  <   <   <   <   <>  <   <   <       #
  1676. X#       >   >   >  <>   >   >   >   >  #
  1677. X#  <   <   <   <   <>  <   <   <       #
  1678. X#       >   >   >  <>   >   >   >   >  #
  1679. X#  <   <   <   <   <>  <   <   <       #
  1680. X#       >   >   >  <>   >   >   >   >  #
  1681. X#                                      #
  1682. X#                                      #
  1683. X#                                      #
  1684. X#                                      #
  1685. X#                                      #
  1686. X#                                      #
  1687. X#                                      #
  1688. X#                                      #
  1689. X#                                      #
  1690. X#                                      #
  1691. X#           X                          #
  1692. X########################################*/
  1693. X#include <stdio.h>
  1694. X#include <curses.h>
  1695. X#include <stdlib.h>
  1696. X#include <setjmp.h>
  1697. X#include <sys/time.h>
  1698. Xint _tty_ch;
  1699. Xbool _echoit;
  1700. Xbool _rawmode;
  1701. XSGTTY _tty;
  1702. X#define U char
  1703. X#define G for(
  1704. X#define I )malloc(sizeof(
  1705. X
  1706. Xtypedef struct z {U x[20]; struct z*y; } j; j*J[2][256];
  1707. Xstruct timeval v= {0,1<<17} ;
  1708. XU**X,c,*P="noopoqqnr",d;
  1709. X
  1710. Xj*a(int Q, int i) {
  1711. X    G
  1712. X    clear(),noecho(),cbreak(); ;
  1713. X)
  1714. X
  1715. X{
  1716. X    int x=0,y=0,W=Q,Q=i-1,k;
  1717. X    G;
  1718. X    y<=Q;
  1719. X    (mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++));
  1720. X    k=y=- --x;
  1721. X    G
  1722. X    refresh(),c=select(k,&y,0,0,&v)?getch():0;
  1723. X    k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y;
  1724. X)
  1725. X
  1726. X{
  1727. X    j *t;
  1728. X    G
  1729. X    t=J[1-k][X[y][x]]; t; t=t->y) {
  1730. X    U*f=t->x;
  1731. X    if (d==f[17]|f[17]==c) {
  1732. X        int i=k&2,u=9,k=1,w=x,_=y,T;
  1733. X        G;
  1734. X        --u||(d-f[8]&&(X[y][x]=f[8]),w---_--,i=0,u=8,k--);) {
  1735. X            _+=P[T=i>u?u:i]-'o';
  1736. X            w+=P[4+T]-'p';
  1737. X            if(k) {
  1738. X            if (d-f[i]&&f[i]-X[_][w]) break;
  1739. X                i++;
  1740. X            } else
  1741. X            f[++i+8]-d && (X[_][w]=f[i+8]);
  1742. X}   }   }   }   }   }
  1743. X
  1744. Xjmp_buf E;
  1745. X
  1746. Xint main(int open, U**exit) {
  1747. X    FILE*C=fopen (
  1748. X    open-2?__FILE__:*++exit,P+8);
  1749. X    j*t;
  1750. X    volatile int Q,Y=0;
  1751. X    int i,q; d=open-2?'\t':'*'; L:
  1752. X
  1753. X    Q=0; G; setjmp(E)<256; Q--
  1754. X    )
  1755. X    longjmp(E,(J[Y][Q]=0,Q++));
  1756. X    G; ; ) {
  1757. X    if(!C)return 1;
  1758. X    if('\n'==(c=getc(C)))
  1759. X        if(!Y++)goto L; else
  1760. X        {    fscanf(C,"%d %d\n",&i,&q);
  1761. X        X=(U**I P++)*q*(i+1));
  1762. X        Q=0; G; Q<q; Q++)
  1763. X        X[Q]=(U*)&X[q]+Q*i;
  1764. X    
  1765. X    fread(*X,(initscr(),q*i),1,C);
  1766. X    a(i,Q);
  1767. X    }
  1768. X    t=(j*I*a(Q--,--Q)));
  1769. X    t->y=J[Y][c]; J[Y][c]=t;
  1770. X    fgets(t->x,20,C); }
  1771. X}
  1772. END_OF_FILE
  1773.   if test 2803 -ne `wc -c <'1993/rince.c'`; then
  1774.     echo shar: \"'1993/rince.c'\" unpacked with wrong size!
  1775.   fi
  1776.   # end of '1993/rince.c'
  1777. fi
  1778. if test -f '1993/rince.design' -a "${1}" != "-c" ; then 
  1779.   echo shar: Will not clobber existing file \"'1993/rince.design'\"
  1780. else
  1781.   echo shar: Extracting \"'1993/rince.design'\" \(3411 characters\)
  1782.   sed "s/^X//" >'1993/rince.design' <<'END_OF_FILE'
  1783. X    Implementation notes
  1784. X    --------------------
  1785. X
  1786. X    Due to the long time this has been slowly evolving, it's hard to describe
  1787. X    quite whether it's been `implemented'. I think perhaps evolve is a better
  1788. X    term. I basic concept behind the program is to describe a game as a simple,
  1789. X    slightly cheaty, cellular automata system, with some of the transitions
  1790. X    bound to key presses.
  1791. X
  1792. X    For instance, assume you wish to make a boulder 'o' roll off a hill '/'
  1793. X    A standard automata would have 2 rules something like this:
  1794. X
  1795. X
  1796. X    o..            ...    
  1797. X    \..  -->  `o'        .o.  -->  `.'
  1798. X    ...            .\.
  1799. X
  1800. X
  1801. X    However, the system I devised, in order to keep things small and neat(!),
  1802. X    was to define a 3x3 to 3x3 map (instead of the 3x3 to 1x1 shown above).
  1803. X    Hence:
  1804. X
  1805. X    .o.      ...
  1806. X    .\.  -->  .\o
  1807. X    ...      ...
  1808. X
  1809. X    This does of course have the odd problem with clashes. What if we want to
  1810. X    roll two down boulders down simultaneously towards the same square.
  1811. X    I perform no buffering, and so this situation is just a 'fight it out' and
  1812. X    let which ever transition has priority win. Such a case may produce the
  1813. X    following change of maps (depending on which 'roll' transition is used
  1814. X    first).
  1815. X
  1816. X    o.o            ..o        o..
  1817. X    \./    changes to    \o/  or to  \o/
  1818. X    ...            ...        ...
  1819. X
  1820. X    I claim that it is possible to perform all of the 3x3 to 1x1 transitions
  1821. X    in a 3x3 to 3x3 based system. One other feature added in is a work around
  1822. X    for the 'no buffering' problem. if we define an space ship (as in the
  1823. X    space invader example) to fly right, and we are 'walking through' our map
  1824. X    from top-left to bottom-right, then it is easy to foresee a situation where
  1825. X    our space ship would zip right as far as possible in only the one cycle
  1826. X    of the automata. However, a similar leftwards-bound space ship would only
  1827. X    move the required one square. For this reason I have two lists of
  1828. X    transitions and apply them independently of each other; first top-left to
  1829. X    bottom right, and the second in the reverse direction. This means that I
  1830. X    can make any 'object' move by any amount in a single transition.
  1831. X
  1832. X    Now comes the key important addition to make it 'game' worthy - the
  1833. X    addition of external control by the user. This is done by requesting that
  1834. X    some transitions are only valid when a certain key has been pressed.
  1835. X    So for example, if we (an @ symbol) wish to move right when the 'l' key
  1836. X    is hit we have a transition like:
  1837. X
  1838. X    Key: l
  1839. X    * * *        * * *
  1840. X    * @ .        * . @
  1841. X    * * *        * * *
  1842. X
  1843. X    Here I also use wildcards. On the match side (left) of the transition, an
  1844. X    asterisk will match against any character. On the update side (right), an
  1845. X    asterisk means 'keep whatever was here before'. So the above example
  1846. X    simply means to swap the '@' and '.' around when 'l' is pressed. For the
  1847. X    purposes of space saving, this transition is shrunk to a single line.
  1848. X
  1849. X    Key: K
  1850. X    a b c        1 2 3
  1851. X    d e f        4 5 6
  1852. X    g h i        7 8 9
  1853. X
  1854. X    is written as:
  1855. X
  1856. X    eabcdfghi512346789K
  1857. X
  1858. X    If there are no keys needed for this transition, the character '*' should
  1859. X    be used instead. Now the format of the game description file is now
  1860. X    the following: (angle brackets denote an 'entity' to be defined).
  1861. X
  1862. X    <top-bot transition>*\n<bot-top transition>*\n<X size>[ \t]+<Y size>\n
  1863. X    <map>
  1864. X
  1865. X    The <X size> should take into account the newline at the end of each line
  1866. X    of map, and hence should also be one larger than expected.
  1867. END_OF_FILE
  1868.   if test 3411 -ne `wc -c <'1993/rince.design'`; then
  1869.     echo shar: \"'1993/rince.design'\" unpacked with wrong size!
  1870.   fi
  1871.   # end of '1993/rince.design'
  1872. fi
  1873. if test -f '1993/rince.orig.c' -a "${1}" != "-c" ; then 
  1874.   echo shar: Will not clobber existing file \"'1993/rince.orig.c'\"
  1875. else
  1876.   echo shar: Extracting \"'1993/rince.orig.c'\" \(2749 characters\)
  1877.   sed "s/^X//" >'1993/rince.orig.c' <<'END_OF_FILE'
  1878. X/** J.K.Bonfield **
  1879. X^    <                                                          
  1880. X^    >                                                          
  1881. X<            #                >                        v        
  1882. X<                                          <                    
  1883. X<            >                >            <        v        
  1884. XX                                          X                j
  1885. Xx                                          X                j
  1886. XX                             x    ^                        k
  1887. X^                                  ^                            
  1888. X^    #                                                             
  1889. XX                             X            X                X
  1890. X
  1891. X^    v                                                          
  1892. Xv                                                      v        
  1893. Xv                        #                                         
  1894. Xv                        X                                      
  1895. Xv                        x                                      
  1896. X>                #            <                        v        
  1897. X>                                              >                
  1898. XX                                              X            l
  1899. Xx                                              X            l
  1900. X
  1901. X41 20
  1902. X########################################
  1903. X#                                      #
  1904. X#  <   <   <   <   <>  <   <   <       #
  1905. X#       >   >   >  <>   >   >   >   >  #
  1906. X#  <   <   <   <   <>  <   <   <       #
  1907. X#       >   >   >  <>   >   >   >   >  #
  1908. X#  <   <   <   <   <>  <   <   <       #
  1909. X#       >   >   >  <>   >   >   >   >  #
  1910. X#                                      #
  1911. X#                                      #
  1912. X#                                      #
  1913. X#                                      #
  1914. X#                                      #
  1915. X#                                      #
  1916. X#                                      #
  1917. X#                                      #
  1918. X#                                      #
  1919. X#                                      #
  1920. X#           X                          #
  1921. X########################################*/
  1922. X#include <stdio.h>
  1923. X#include <curses.h>
  1924. X#include <stdlib.h>
  1925. X#include <setjmp.h>
  1926. X#include <sys/time.h>
  1927. X#define U char
  1928. X#define G for(
  1929. X#define I )malloc(sizeof(
  1930. X
  1931. Xtypedef struct z {U x[20]; struct z*y; } j; j*J[2][256];
  1932. Xstruct timeval v= {0,1<<17} ;
  1933. XU**X,c,*P="noopoqqnr",d;
  1934. X
  1935. Xj*a(int Q, int i) {
  1936. X    G
  1937. X    clear(),noecho(),cbreak(); ;
  1938. X)
  1939. X
  1940. X{
  1941. X    int x=0,y=0,W=Q,Q=i-1,k;
  1942. X    G;
  1943. X    y<=Q;
  1944. X    (mvaddch(y,x,X[y][x]),++x^W-1)||(x=0,y++));
  1945. X    k=y=- --x;
  1946. X    G
  1947. X    refresh(),c=select(k,&y,0,0,&v)?getch():0;
  1948. X    k?++x-W||(x=1,++y-Q||(--k,x=W-1,y=Q-1)):--x||(y--,x=W-1),k|y;
  1949. X)
  1950. X
  1951. X{
  1952. X    j *t;
  1953. X    G
  1954. X    t=J[1-k][X[y][x]]; t; t=t->y) {
  1955. X    U*f=t->x;
  1956. X    if (d==f[17]|f[17]==c) {
  1957. X        int i=k&2,u=9,k=1,w=x,_=y,T;
  1958. X        G;
  1959. X        --u||(d-f[8]&&(X[y][x]=f[8]),w---_--,i=0,u=8,k--);) {
  1960. X            _+=P[T=i>u?u:i]-'o';
  1961. X            w+=P[4+T]-'p';
  1962. X            if(k) {
  1963. X            if (d-f[i]&&f[i]-X[_][w]) break;
  1964. X                i++;
  1965. X            } else
  1966. X            f[++i+8]-d && (X[_][w]=f[i+8]);
  1967. X}   }   }   }   }   }
  1968. X
  1969. Xjmp_buf E;
  1970. X
  1971. Xint main(int open, U**exit) {
  1972. X    FILE*C=fopen (
  1973. X    open-2?__FILE__:*++exit,P+8);
  1974. X    j*t;
  1975. X    volatile int Q,Y=0;
  1976. X    int i,q; d=open-2?'\t':'*'; L:
  1977. X
  1978. X    Q=0; G; setjmp(E)<256; Q--
  1979. X    )
  1980. X    longjmp(E,(J[Y][Q]=0,Q++));
  1981. X    G; ; ) {
  1982. X    if(!C)return 1;
  1983. X    if('\n'==(c=getc(C)))
  1984. X        if(!Y++)goto L; else
  1985. X        {    fscanf(C,"%d %d\n",&i,&q);
  1986. X        X=(U**I P++)*q*(i+1));
  1987. X        Q=0; G; Q<q; Q++)
  1988. X        X[Q]=(U*)&X[q]+Q*i;
  1989. X    
  1990. X    fread(*X,(initscr(),q*i),1,C);
  1991. X    a(i,Q);
  1992. X    }
  1993. X    t=(j*I*a(Q--,--Q)));
  1994. X    t->y=J[Y][c]; J[Y][c]=t;
  1995. X    fgets(t->x,20,C); }
  1996. X}
  1997. END_OF_FILE
  1998.   if test 2749 -ne `wc -c <'1993/rince.orig.c'`; then
  1999.     echo shar: \"'1993/rince.orig.c'\" unpacked with wrong size!
  2000.   fi
  2001.   # end of '1993/rince.orig.c'
  2002. fi
  2003. if test -f '1993/schnitzi.c' -a "${1}" != "-c" ; then 
  2004.   echo shar: Will not clobber existing file \"'1993/schnitzi.c'\"
  2005. else
  2006.   echo shar: Extracting \"'1993/schnitzi.c'\" \(2103 characters\)
  2007.   sed "s/^X//" >'1993/schnitzi.c' <<'END_OF_FILE'
  2008. X#include      <stdio.h>
  2009. X#define            iii\
  2010. X(                     I  )                    if (                     ii(I,6\
  2011. X )                   )I [               strlen(I  )                     -1]=!1
  2012. X          int ii(ll,lll  )              char*ll; {
  2013. X
  2014. X  char *l="\"; !l ? 1.1 : l; l,printf(";int l1=1-/*+&|");  &+|-*/1,li=!1;while
  2015. X
  2016. X(                lll>l1  )                 li|=! (                  l[3*l1+++3
  2017. X ]           -ll[strlen (                 ll)-1]  )                    ;return
  2018. X(                    li  )                ;}main (                      ll,lll
  2019. X )  char*lll[];{char l1 [   111][21],li1[111][21  ]              ,il1[111],i1l
  2020. X[                   111  ] ;int lli,l11,l1l,li/* (  */,ll1,il,l;FILE*f;if(ll-2
  2021. X )             {f=fopen (             lll[1],"r"  )     ;lli=l=ll1=il=!1;while
  2022. X( fscanf(f,"%s",l1[lli]  )             +1){li=ii (                   l1[lli],3
  2023. X )                 ;iii (                l1[lli]  )          ;l1l=l11=!1;while
  2024. X(               l1l>-ll  )                  {iii (                   lll[-l1l]
  2025. X )          ;strcasecmp (    lll[-l1l--],l1[lli]  )                         ||
  2026. X(              l11=++il  )       ;}l11||lli++;if (                          li
  2027. X )                  {if (                 ll1<il  )    {ll1=il;l1l=l=lli;while
  2028. X(                 l1l--  )                strcpy (            li1[l1l],l1[l1l]
  2029. X )     ;}il=lli=!1;}}if (                   !ll1  )                       puts
  2030. X(          " Beats me."  )              ;else if (                          !l
  2031. X )                 puts (                " Yes."  ) ;else{*li1[l1l=!1]=toupper
  2032. X(              *li1[!1]  )                ;while (                       l>l1l
  2033. X )               printf (       " %s",li1[l1l++]  )                      ;puts
  2034. X(                   "."  )       ;}}else{sprintf (    il1,"cat %s;echo",lll[1]
  2035. X )              ;system (                    il1  )                   ;}printf
  2036. X(                "\n? "  )                 ;gets (                         il1
  2037. X )             ;sprintf (  i1l,"%s %s %s",lll[!1  ]        ,lll[1],il1);system
  2038. X(                 i1l);  }
  2039. END_OF_FILE
  2040.   if test 2103 -ne `wc -c <'1993/schnitzi.c'`; then
  2041.     echo shar: \"'1993/schnitzi.c'\" unpacked with wrong size!
  2042.   fi
  2043.   # end of '1993/schnitzi.c'
  2044. fi
  2045. if test -f '1993/schnitzi.hint' -a "${1}" != "-c" ; then 
  2046.   echo shar: Will not clobber existing file \"'1993/schnitzi.hint'\"
  2047. else
  2048.   echo shar: Extracting \"'1993/schnitzi.hint'\" \(2960 characters\)
  2049.   sed "s/^X//" >'1993/schnitzi.hint' <<'END_OF_FILE'
  2050. XObfuscated Intelligence Award: <schnitzi@longwood.cs.ucf.edu> Mark Schnitzius
  2051. X
  2052. X    Mark Schnitzius
  2053. X    1700 Woodbury Rd. #1208
  2054. X    Orlando, FL 32828
  2055. X    USA
  2056. X
  2057. X
  2058. XJudges' comments:
  2059. X
  2060. X    To run:
  2061. X    make schnitzi
  2062. X    ./schnitzi file
  2063. X    
  2064. X    where:
  2065. X    file    a file containing some text
  2066. X
  2067. X    After this program prints the conte{n}ts of 'file', ask it
  2068. X    some questions related to the text.
  2069. X    
  2070. X    The author suggests the following questions when using schnitzi.info:
  2071. X
  2072. X    Who is Mark Schnitzius?
  2073. X    What exactly does this program do?
  2074. X    What language is it written in?
  2075. X    Has the Loch Ness monster really been captured?
  2076. X    Who was H{i}tler?
  2077. X    Were the NASA moon landings faked?
  2078. X    Is it true that Elvis is alive?
  2079. X    Do colorless green ideas sleep furiously?
  2080. X
  2081. X    NOTE: The author may also be contacted at: marks@aldrin.ksc.nasa.gov
  2082. X
  2083. X    We suggest {you} try using the body (minus the header and signature line) 
  2084. X    of {a} Usenet article.  You might want to try something from alt.flame.  :-)
  2085. X
  2086. X
  2087. XSelected notes from the author:
  2088. X
  2089. X    I wanted to write a program that would read in a text file in
  2090. X    natural language (such as English) and answer questions about that
  2091. X    text file.  I thought this might be a complicated task, and I was
  2092. X    right -- it took me over 800 bytes.  Of course, it doesn't always
  2093. X    work, but that's AI for you.
  2094. X
  2095. X    This program accepts the name of a text file as the first
  2096. X    parameter.  For example, to run it on the supplied data file called
  2097. X    'info' you would type 'schnitzi info'.  It echoes the file, then
  2098. X    gives you a prompt where you may type in questions about that text.
  2099. X    The more words you use which are actually present in the text file,
  2100. X    the better results you get.  You'll need to hit <ctrl-c> to break out
  2101. X    of the program.  Just hitting <return> at the prompt will reprint the
  2102. X    paragraph.
  2103. X
  2104. X    If you're curious as to how it works, I guess you could feed in the
  2105. X    source as the input file and ask "How does this work?" at the prompt,
  2106. X    but I'm not guaranteeing any results...
  2107. X
  2108. X    Compilation notes:
  2109. X
  2110. X    o  The use of 'strcasecmp' may be non-standard.  'strcmp'
  2111. X       can be substituted for it, with a slight performance penalty.
  2112. X
  2113. X    o  This program depends on the first command-line parameter, typically
  2114. X       called argv[0], to hold the name of the executable.  It is my under-
  2115. X       standing that this property of argv[0] is not guaranteed on some
  2116. X       systems.
  2117. X
  2118. X    This program is obfuscated in the following ways:
  2119. X
  2120. X    o  It uses a hidden string to test for punctuation;
  2121. X
  2122. X    o  The layout, variable names, and expression format
  2123. X       have been chosen in such a way as to cause visual confusion;
  2124. X
  2125. X    o  It uses uses external 'system' calls to echo the text
  2126. X       file and break up the question into individual words with a
  2127. X       recursive call;
  2128. X
  2129. X    o  It uses a clever hack to simulate artificial intelligence.
  2130. X
  2131. X    The text for the info file, by the way, consists largely of headlines
  2132. X    from the Weekly World News.
  2133. END_OF_FILE
  2134.   if test 2960 -ne `wc -c <'1993/schnitzi.hint'`; then
  2135.     echo shar: \"'1993/schnitzi.hint'\" unpacked with wrong size!
  2136.   fi
  2137.   # end of '1993/schnitzi.hint'
  2138. fi
  2139. if test -f '1993/vanb.c' -a "${1}" != "-c" ; then 
  2140.   echo shar: Will not clobber existing file \"'1993/vanb.c'\"
  2141. else
  2142.   echo shar: Extracting \"'1993/vanb.c'\" \(1956 characters\)
  2143.   sed "s/^X//" >'1993/vanb.c' <<'END_OF_FILE'
  2144. XO5(O2,O7,O3)char**O7;{return!(O2+=~01+01)?00:!(O2-=02>01)?printf("\045\157\012"
  2145. X,O5(012,O7+01,00)):!(O2-=02>>01)?(**O7<=067&&**O7>057?O5(03,O7,*(*O7)++-060+010
  2146. X   *O3):O3                     ):!(O2      -=-O3-      ~O3)?       (072>**
  2147. X   O7&&060                     <=**O7      ?O5(04      ,O7,012     *O3-060
  2148. X    +*(*O7                    )++):O3      ):!(O2      -=!O3+      !!O3)?(
  2149. X    **O7>057                  &&**O7       <=071?      O5(05,      O7,*(*
  2150. X     O7)+++                   O3*020       -060):      **O7<=      0106&&
  2151. X     00101<=                 **O7?O5       (05,O7      ,020*O3     +*(*O7)
  2152. X      ++-067)               :0140<**       O7&&**      O7<0147     ?O5(05,
  2153. X      O7,-0127              +*(*O7         )+++020     *O3):O3     ):!(
  2154. X       O2-=02-             01)?(**         O7==050     ?050**      ++*O7,
  2155. X       O5(013,             O7,O5(          012,O7      ,00)):*     *O7<056
  2156. X        &&054<*           *O7?055          **++*       O7,-O5(     06,O7,
  2157. X        00):054           >**O7&&          052<**      O7?050*     *(*O7)
  2158. X         ++,O5(06        ,O7,00            ):!(**      O7^0170     )||!(
  2159. X         0130^**         O7)?*++           *O7,O5      (05,O7      ,00):*
  2160. X          *O7==0144     ||**O7             ==0104      ?++*O7      ,O5(04,
  2161. X           O7,00):      O5(03              ,O7,00      )):!--      O2?(*
  2162. X           *O7==052    ?O5(07              ,O7,O3*     (*++*O7     ,O5(06
  2163. X           ,O7,00)     )):!(               045-**      O7)?O5(     07,O7,
  2164. X            O3%(03+( *O7)++,               O5(06,      O7,00)      )):!(**
  2165. X             O7^057)?O5(07,                O7,O3/(     03-*++      *O7,O5(
  2166. X             06,O7,00))):O3                ):!(O2      +=01-02     )?O5(07
  2167. X             ,O7,O5(06,O7,                 00)):!(     O2+=-02/    02)?(!(*
  2168. X*O7-053)?O5(011,O7,O3+(++*O7,O5(010,O7,00))):!(055^**O7)?O5(011,O7,O3-(03+*(*O7
  2169. X)++,O5(0010,O7,00))):O3):!(O2-=0563&0215)?O5(011,O7,O5(010,O7,00)):(++*O7,O3);}
  2170. END_OF_FILE
  2171.   if test 1956 -ne `wc -c <'1993/vanb.c'`; then
  2172.     echo shar: \"'1993/vanb.c'\" unpacked with wrong size!
  2173.   fi
  2174.   # end of '1993/vanb.c'
  2175. fi
  2176. echo shar: End of archive 3 \(of 4\).
  2177. cp /dev/null ark3isdone
  2178. MISSING=""
  2179. for I in 1 2 3 4 ; do
  2180.     if test ! -f ark${I}isdone ; then
  2181.     MISSING="${MISSING} ${I}"
  2182.     fi
  2183. done
  2184. if test "${MISSING}" = "" ; then
  2185.     echo You have unpacked all 4 archives.
  2186.     rm -f ark[1-9]isdone
  2187. else
  2188.     echo You still must unpack the following archives:
  2189.     echo "        " ${MISSING}
  2190. fi
  2191. exit 0
  2192. exit 0 # Just in case...
  2193.