home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume23 / asp / part02 < prev    next >
Text File  |  1991-10-16  |  11KB  |  512 lines

  1. Newsgroups: comp.sources.misc
  2. From: aem@aber.ac.uk (Alec Muffett)
  3. Subject:  v23i032:  asp - The .plan description language, Part02/02
  4. Message-ID: <1991Sep27.200325.27155@sparky.imd.sterling.com>
  5. X-Md4-Signature: 99c1915c55f4e557f25b4b2858a8a9a6
  6. Date: Fri, 27 Sep 1991 20:03:25 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: aem@aber.ac.uk (Alec Muffett)
  10. Posting-number: Volume 23, Issue 32
  11. Archive-name: asp/part02
  12. Environment: UNIX
  13.  
  14. #! /bin/sh
  15. # it by saving it into a file and typing "sh file".  To overwrite existing
  16. # files, type "sh file -c".  You can also feed this as standard input via
  17. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  18. # will see the following message at the end:
  19. #        "End of archive 2 (of 2)."
  20. # Contents:  effects.c
  21. # Wrapped by aem@aberda on Wed Sep 25 11:26:47 1991
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'effects.c' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'effects.c'\"
  25. else
  26. echo shar: Extracting \"'effects.c'\" \(8258 characters\)
  27. sed "s/^X//" >'effects.c' <<'END_OF_FILE'
  28. X/*
  29. X * This code is copyright ADE Muffett, September 1991, and is distributed as
  30. X * part of the ASP .plan description language compiler.  This code is freely
  31. X * redistributable as long as this copyright notice remains intact. No
  32. X * responsibility is assumed by the author for any situation which arises
  33. X * from the use of this code, including insanity, late nights, or disk
  34. X * storage problems.
  35. X */
  36. X
  37. X#include "asp.h"
  38. X
  39. X/* Cycle letters on the line backwards until they match the target letter */
  40. X
  41. Xvoid
  42. XLetter1 (cstring, dstring)
  43. X    register char *cstring;
  44. X    register char *dstring;
  45. X{
  46. X    int length;
  47. X    int changes;
  48. X    register int i;
  49. X    char c;
  50. X
  51. X    length = strlen (dstring);
  52. X
  53. X    for (c = '~'; c >= ' '; c--)
  54. X    {
  55. X    changes = 0;
  56. X
  57. X    for (i = 0; i < length; i++)
  58. X    {
  59. X        if ((!isspace (dstring[i])) && dstring[i] == c)
  60. X        {
  61. X        stdline[i] = c;
  62. X        changes++;
  63. X        }
  64. X    }
  65. X    if (changes)
  66. X    {
  67. X        UpdateCR ();
  68. X    }
  69. X    }
  70. X}
  71. X/* Cycle letters on the line backwards until they match the target letter */
  72. X
  73. Xvoid
  74. XLetter2 (cstring, dstring)
  75. X    register char *cstring;
  76. X    register char *dstring;
  77. X{
  78. X    register int i;
  79. X    int changes;
  80. X    int length;
  81. X    char c;
  82. X
  83. X    length = strlen (dstring);
  84. X
  85. X    for (c = '~'; c >= ' '; c--)
  86. X    {
  87. X    changes = 0;
  88. X
  89. X    for (i = 0; i < length; i++)
  90. X    {
  91. X        if ((!isspace (dstring[i])) && dstring[i] <= c)
  92. X        {
  93. X        stdline[i] = c;
  94. X        changes++;
  95. X        }
  96. X    }
  97. X    if (changes)
  98. X    {
  99. X        UpdateCR ();
  100. X    }
  101. X    }
  102. X}
  103. X/* Cycle letters on the line backwards until they match the target letter */
  104. X
  105. Xvoid
  106. XLetter3 (cstring, dstring)
  107. X    register char *cstring;
  108. X    register char *dstring;
  109. X{
  110. X    int length;
  111. X    int changes;
  112. X    register int i;
  113. X    char c;
  114. X
  115. X    length = strlen (dstring);
  116. X
  117. X    for (c = '~'; c >= ' '; c--)
  118. X    {
  119. X    changes = 0;
  120. X
  121. X    for (i = 0; i < length; i++)
  122. X    {
  123. X        if ((!isspace (dstring[i])) && dstring[i] <= c)
  124. X        {
  125. X        stdline[i] = c;
  126. X        if (dstring[i] == c)
  127. X        {
  128. X            changes++;
  129. X        }
  130. X        }
  131. X    }
  132. X    if (changes)
  133. X    {
  134. X        UpdateCR ();
  135. X    }
  136. X    }
  137. X}
  138. X/* flash all printable characters on the line */
  139. X
  140. Xvoid
  141. XFlash (cstring, dstring)
  142. X    register char *cstring;
  143. X    register char *dstring;
  144. X{
  145. X    int length;
  146. X    int i;
  147. X    register int j;
  148. X
  149. X    length = strlen (dstring);
  150. X
  151. X    i = NUM_FLASH;
  152. X
  153. X    while (i--)
  154. X    {
  155. X    for (j = 0; j < length; j++)
  156. X    {
  157. X        if (!isspace (dstring[j]))
  158. X        {
  159. X        stdline[j] = ' ';
  160. X        }
  161. X    }
  162. X    UpdateCR ();
  163. X
  164. X    for (j = 0; j < length; j++)
  165. X    {
  166. X        if (!isspace (dstring[j]))
  167. X        {
  168. X        stdline[j] = dstring[j];
  169. X        }
  170. X    }
  171. X    UpdateCR ();
  172. X    }
  173. X}
  174. X/* Spatter line down randomly */
  175. Xvoid
  176. XSpatter (cstring, dstring)
  177. X    register char *cstring;
  178. X    register char *dstring;
  179. X{
  180. X    int length;
  181. X    register int i;
  182. X    register int dindex;
  183. X
  184. X    length = strlen (dstring);
  185. X
  186. X    for (i = 0; i < LOOP_COUNT; i++)
  187. X    {
  188. X    if (!length)
  189. X    {
  190. X        continue;
  191. X    }
  192. X    dindex = rand () % length;
  193. X    if (stdline[dindex] == dstring[dindex])
  194. X    {
  195. X        continue;
  196. X    }
  197. X    stdline[dindex] = dstring[dindex];
  198. X    UpdateCR ();
  199. X    }
  200. X    TransparentOverlay (stdline, dstring);
  201. X    UpdateCR ();
  202. X}
  203. X/* Like Spatter(), but on a by-word basis */
  204. Xvoid
  205. XWordSpatter (cstring, dstring)
  206. X    register char *cstring;
  207. X    register char *dstring;
  208. X{
  209. X    int length;
  210. X    register int i;
  211. X    register int j;
  212. X    register int dindex;
  213. X
  214. X    length = strlen (dstring);
  215. X
  216. X    for (i = 0; i < LOOP_COUNT; i++)
  217. X    {
  218. X    if (!length)
  219. X    {
  220. X        continue;
  221. X    }
  222. X    for (dindex = rand () % length;
  223. X         dindex >= 0 && !isspace (dstring[dindex]);
  224. X         dindex--);
  225. X    dindex++;
  226. X    if (stdline[dindex] == dstring[dindex])
  227. X    {
  228. X        continue;
  229. X    }
  230. X    while (dstring[dindex] && !isspace (dstring[dindex]))
  231. X    {
  232. X        stdline[dindex] = dstring[dindex];
  233. X        dindex++;
  234. X    }
  235. X    UpdateCR ();
  236. X    if (!strcmp (dstring, stdline))
  237. X    {
  238. X        break;
  239. X    }
  240. X    }
  241. X    TransparentOverlay (stdline, dstring);
  242. X    UpdateCR ();
  243. X}
  244. X/* Draw line and then remove, char by char */
  245. Xvoid
  246. XFade (cstring, dstring)
  247. X    register char *cstring;
  248. X    register char *dstring;
  249. X{
  250. X    int length;
  251. X    register int i;
  252. X    register int dindex;
  253. X
  254. X    TransparentOverlay (stdline, dstring);
  255. X    UpdateCR ();
  256. X
  257. X    for (i = 0; i < LOOP_COUNT; i++)
  258. X    {
  259. X    length = strlen (stdline);
  260. X    if (!length)
  261. X    {
  262. X        continue;
  263. X    }
  264. X    dindex = rand () % length;
  265. X    if (stdline[dindex] == ' ')
  266. X    {
  267. X        continue;
  268. X    }
  269. X    stdline[dindex] = ' ';
  270. X    UpdateCR ();
  271. X    Trim (stdline);
  272. X    }
  273. X
  274. X    for (i = 0; stdline[i]; i++)
  275. X    {
  276. X    stdline[i] = ' ';
  277. X    }
  278. X    UpdateCR ();
  279. X}
  280. X/* Scroll characters l->r, one by one */
  281. Xvoid
  282. XScrollForward (cstring, dstring)
  283. X    char *cstring;
  284. X    char *dstring;
  285. X{
  286. X    register int i;
  287. X    register int j;
  288. X    register int oplength;
  289. X
  290. X    oplength = strlen (dstring);
  291. X
  292. X    for (i = oplength - 1; i >= 0; i--)
  293. X    {
  294. X    for (j = 0; dstring[j + i]; j++)
  295. X    {
  296. X        stdline[j] = dstring[j + i];
  297. X    }
  298. X    UpdateCR ();
  299. X    }
  300. X}
  301. X/* Scroll characters r->l, one by one */
  302. Xvoid
  303. XScrollBackward (cstring, dstring)
  304. X    char *cstring;
  305. X    char *dstring;
  306. X{
  307. X    register int i;
  308. X    register int j;
  309. X    char srcbuffer[SCREENWIDTH + 1];
  310. X
  311. X    NullSet (srcbuffer, sizeof (srcbuffer));
  312. X    strcpy (srcbuffer, dstring);
  313. X    SpaceFlood (srcbuffer, SCREENWIDTH);
  314. X
  315. X    for (i = SCREENWIDTH - 1; i >= 0; i--)
  316. X    {
  317. X    for (j = 0; (j + i) < SCREENWIDTH; j++)
  318. X    {
  319. X        stdline[j + i] = srcbuffer[j];
  320. X    }
  321. X    UpdateCR ();
  322. X    }
  323. X
  324. X}
  325. X/* scroll entire line r->l, bringing on new stuff from the right */
  326. Xvoid
  327. XScrollOffBackward (cstring, dstring)
  328. X    char *cstring;
  329. X    char *dstring;
  330. X{
  331. X    register int i;
  332. X    register int j;
  333. X    char srcbuffer[SCREENWIDTH + 1];
  334. X
  335. X    NullSet (srcbuffer, sizeof (srcbuffer));
  336. X    strcpy (srcbuffer, dstring);
  337. X    SpaceFlood (srcbuffer, SCREENWIDTH);
  338. X
  339. X    for (i = 0; i < SCREENWIDTH; i++)
  340. X    {
  341. X    for (j = 1; j < SCREENWIDTH; j++)
  342. X    {
  343. X        stdline[j - 1] = stdline[j];
  344. X    }
  345. X    stdline[SCREENWIDTH - 1] = srcbuffer[i];
  346. X    UpdateCR ();
  347. X    }
  348. X}
  349. X/* scroll entire line l->r, bringing on new stuff from the left */
  350. Xvoid
  351. XScrollOffForward (cstring, dstring)
  352. X    char *cstring;
  353. X    char *dstring;
  354. X{
  355. X    register int i;
  356. X    register int j;
  357. X    char srcbuffer[SCREENWIDTH + 1];
  358. X
  359. X    NullSet (srcbuffer, sizeof (srcbuffer));
  360. X    strcpy (srcbuffer, dstring);
  361. X    SpaceFlood (srcbuffer, SCREENWIDTH);
  362. X
  363. X    for (i = SCREENWIDTH - 1; i >= 0; i--)
  364. X    {
  365. X    for (j = SCREENWIDTH - 2; j > 0; j--)
  366. X    {
  367. X        stdline[j] = stdline[j - 1];
  368. X    }
  369. X    stdline[0] = srcbuffer[i];
  370. X    UpdateCR ();
  371. X    }
  372. X}
  373. X/* Lay characters down l->r, one by one */
  374. Xvoid
  375. XLayForward (cstring, dstring)
  376. X    char *cstring;
  377. X    register char *dstring;
  378. X{
  379. X    register int i;
  380. X
  381. X    /* do not copy last null. */
  382. X    for (i = 0; dstring[i]; i++)
  383. X    {
  384. X    stdline[i] = dstring[i];
  385. X    UpdateCR ();
  386. X    }
  387. X}
  388. X/* Lay characters down r->l, one by one */
  389. Xvoid
  390. XLayBackward (cstring, dstring)
  391. X    char *cstring;
  392. X    register char *dstring;
  393. X{
  394. X    register int i;
  395. X
  396. X    i = strlen (dstring) - 1;    /* index of last character */
  397. X
  398. X    if (i >= 0)
  399. X    {
  400. X    stdline[i] = dstring[i];
  401. X    for ( /* nothing */ ; i >= 0; i--)
  402. X    {
  403. X        stdline[i] = dstring[i];
  404. X        UpdateCR ();
  405. X    }
  406. X    }
  407. X}
  408. X/* Lay r->l and v.v. meeting in    middle */
  409. Xvoid
  410. XLayEndsToMiddle (cstring, dstring)
  411. X    char *cstring;
  412. X    register char *dstring;
  413. X{
  414. X    register int start;
  415. X    int middle;
  416. X    register int end;
  417. X    int dlength;
  418. X
  419. X    dlength = strlen (dstring) - 1;
  420. X    end = dlength;
  421. X    for (start = 0; dstring[start] && isspace (dstring[start]); start++);
  422. X    if (!dstring[start])
  423. X    {
  424. X    return;
  425. X    }
  426. X    middle = ((end - start) / 2) + start;
  427. X
  428. X    for (; end >= middle; end--, start++)
  429. X    {
  430. X    if (start <= dlength)
  431. X    {
  432. X        stdline[start] = dstring[start];
  433. X    }
  434. X    if (end <= dlength)
  435. X    {
  436. X        stdline[end] = dstring[end];
  437. X    }
  438. X    UpdateCR ();
  439. X    }
  440. X}
  441. X/* Lay l->r and v.v., middle to end */
  442. Xvoid
  443. XLayMiddleToEnds (cstring, dstring)
  444. X    char *cstring;
  445. X    register char *dstring;
  446. X{
  447. X    register int dlength;
  448. X    register int backwards;
  449. X    register int forwards;
  450. X    int start;
  451. X    int end;
  452. X
  453. X    dlength = strlen (dstring) - 1;
  454. X    end = dlength;
  455. X    for (start = 0; dstring[start] && isspace (dstring[start]); start++);
  456. X    if (!dstring[start])
  457. X    {
  458. X    return;
  459. X    }
  460. X    forwards = backwards = ((end - start) / 2) + start;
  461. X
  462. X    for (; backwards >= start || forwards <= end;)
  463. X    {
  464. X    if (backwards >= start)
  465. X    {
  466. X        if (backwards <= dlength)
  467. X        {
  468. X        stdline[backwards] = dstring[backwards];
  469. X        }
  470. X        backwards--;
  471. X    }
  472. X    if (forwards <= end)
  473. X    {
  474. X        if (forwards <= dlength)
  475. X        {
  476. X        stdline[forwards] = dstring[forwards];
  477. X        }
  478. X        forwards++;
  479. X    }
  480. X    UpdateCR ();
  481. X    }
  482. X}
  483. END_OF_FILE
  484. if test 8258 -ne `wc -c <'effects.c'`; then
  485.     echo shar: \"'effects.c'\" unpacked with wrong size!
  486. fi
  487. # end of 'effects.c'
  488. fi
  489. echo shar: End of archive 2 \(of 2\).
  490. cp /dev/null ark2isdone
  491. MISSING=""
  492. for I in 1 2 ; do
  493.     if test ! -f ark${I}isdone ; then
  494.     MISSING="${MISSING} ${I}"
  495.     fi
  496. done
  497. if test "${MISSING}" = "" ; then
  498.     echo You have unpacked both archives.
  499.     rm -f ark[1-9]isdone
  500. else
  501.     echo You still need to unpack the following archives:
  502.     echo "        " ${MISSING}
  503. fi
  504. ##  End of shell archive.
  505. exit 0
  506. exit 0 # Just in case...
  507. -- 
  508. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  509. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  510. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  511. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  512.