home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: aem@aber.ac.uk (Alec Muffett)
- Subject: v23i032: asp - The .plan description language, Part02/02
- Message-ID: <1991Sep27.200325.27155@sparky.imd.sterling.com>
- X-Md4-Signature: 99c1915c55f4e557f25b4b2858a8a9a6
- Date: Fri, 27 Sep 1991 20:03:25 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: aem@aber.ac.uk (Alec Muffett)
- Posting-number: Volume 23, Issue 32
- Archive-name: asp/part02
- Environment: UNIX
-
- #! /bin/sh
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 2)."
- # Contents: effects.c
- # Wrapped by aem@aberda on Wed Sep 25 11:26:47 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'effects.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'effects.c'\"
- else
- echo shar: Extracting \"'effects.c'\" \(8258 characters\)
- sed "s/^X//" >'effects.c' <<'END_OF_FILE'
- X/*
- X * This code is copyright ADE Muffett, September 1991, and is distributed as
- X * part of the ASP .plan description language compiler. This code is freely
- X * redistributable as long as this copyright notice remains intact. No
- X * responsibility is assumed by the author for any situation which arises
- X * from the use of this code, including insanity, late nights, or disk
- X * storage problems.
- X */
- X
- X#include "asp.h"
- X
- X/* Cycle letters on the line backwards until they match the target letter */
- X
- Xvoid
- XLetter1 (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X int changes;
- X register int i;
- X char c;
- X
- X length = strlen (dstring);
- X
- X for (c = '~'; c >= ' '; c--)
- X {
- X changes = 0;
- X
- X for (i = 0; i < length; i++)
- X {
- X if ((!isspace (dstring[i])) && dstring[i] == c)
- X {
- X stdline[i] = c;
- X changes++;
- X }
- X }
- X if (changes)
- X {
- X UpdateCR ();
- X }
- X }
- X}
- X/* Cycle letters on the line backwards until they match the target letter */
- X
- Xvoid
- XLetter2 (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X register int i;
- X int changes;
- X int length;
- X char c;
- X
- X length = strlen (dstring);
- X
- X for (c = '~'; c >= ' '; c--)
- X {
- X changes = 0;
- X
- X for (i = 0; i < length; i++)
- X {
- X if ((!isspace (dstring[i])) && dstring[i] <= c)
- X {
- X stdline[i] = c;
- X changes++;
- X }
- X }
- X if (changes)
- X {
- X UpdateCR ();
- X }
- X }
- X}
- X/* Cycle letters on the line backwards until they match the target letter */
- X
- Xvoid
- XLetter3 (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X int changes;
- X register int i;
- X char c;
- X
- X length = strlen (dstring);
- X
- X for (c = '~'; c >= ' '; c--)
- X {
- X changes = 0;
- X
- X for (i = 0; i < length; i++)
- X {
- X if ((!isspace (dstring[i])) && dstring[i] <= c)
- X {
- X stdline[i] = c;
- X if (dstring[i] == c)
- X {
- X changes++;
- X }
- X }
- X }
- X if (changes)
- X {
- X UpdateCR ();
- X }
- X }
- X}
- X/* flash all printable characters on the line */
- X
- Xvoid
- XFlash (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X int i;
- X register int j;
- X
- X length = strlen (dstring);
- X
- X i = NUM_FLASH;
- X
- X while (i--)
- X {
- X for (j = 0; j < length; j++)
- X {
- X if (!isspace (dstring[j]))
- X {
- X stdline[j] = ' ';
- X }
- X }
- X UpdateCR ();
- X
- X for (j = 0; j < length; j++)
- X {
- X if (!isspace (dstring[j]))
- X {
- X stdline[j] = dstring[j];
- X }
- X }
- X UpdateCR ();
- X }
- X}
- X/* Spatter line down randomly */
- Xvoid
- XSpatter (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X register int i;
- X register int dindex;
- X
- X length = strlen (dstring);
- X
- X for (i = 0; i < LOOP_COUNT; i++)
- X {
- X if (!length)
- X {
- X continue;
- X }
- X dindex = rand () % length;
- X if (stdline[dindex] == dstring[dindex])
- X {
- X continue;
- X }
- X stdline[dindex] = dstring[dindex];
- X UpdateCR ();
- X }
- X TransparentOverlay (stdline, dstring);
- X UpdateCR ();
- X}
- X/* Like Spatter(), but on a by-word basis */
- Xvoid
- XWordSpatter (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X register int i;
- X register int j;
- X register int dindex;
- X
- X length = strlen (dstring);
- X
- X for (i = 0; i < LOOP_COUNT; i++)
- X {
- X if (!length)
- X {
- X continue;
- X }
- X for (dindex = rand () % length;
- X dindex >= 0 && !isspace (dstring[dindex]);
- X dindex--);
- X dindex++;
- X if (stdline[dindex] == dstring[dindex])
- X {
- X continue;
- X }
- X while (dstring[dindex] && !isspace (dstring[dindex]))
- X {
- X stdline[dindex] = dstring[dindex];
- X dindex++;
- X }
- X UpdateCR ();
- X if (!strcmp (dstring, stdline))
- X {
- X break;
- X }
- X }
- X TransparentOverlay (stdline, dstring);
- X UpdateCR ();
- X}
- X/* Draw line and then remove, char by char */
- Xvoid
- XFade (cstring, dstring)
- X register char *cstring;
- X register char *dstring;
- X{
- X int length;
- X register int i;
- X register int dindex;
- X
- X TransparentOverlay (stdline, dstring);
- X UpdateCR ();
- X
- X for (i = 0; i < LOOP_COUNT; i++)
- X {
- X length = strlen (stdline);
- X if (!length)
- X {
- X continue;
- X }
- X dindex = rand () % length;
- X if (stdline[dindex] == ' ')
- X {
- X continue;
- X }
- X stdline[dindex] = ' ';
- X UpdateCR ();
- X Trim (stdline);
- X }
- X
- X for (i = 0; stdline[i]; i++)
- X {
- X stdline[i] = ' ';
- X }
- X UpdateCR ();
- X}
- X/* Scroll characters l->r, one by one */
- Xvoid
- XScrollForward (cstring, dstring)
- X char *cstring;
- X char *dstring;
- X{
- X register int i;
- X register int j;
- X register int oplength;
- X
- X oplength = strlen (dstring);
- X
- X for (i = oplength - 1; i >= 0; i--)
- X {
- X for (j = 0; dstring[j + i]; j++)
- X {
- X stdline[j] = dstring[j + i];
- X }
- X UpdateCR ();
- X }
- X}
- X/* Scroll characters r->l, one by one */
- Xvoid
- XScrollBackward (cstring, dstring)
- X char *cstring;
- X char *dstring;
- X{
- X register int i;
- X register int j;
- X char srcbuffer[SCREENWIDTH + 1];
- X
- X NullSet (srcbuffer, sizeof (srcbuffer));
- X strcpy (srcbuffer, dstring);
- X SpaceFlood (srcbuffer, SCREENWIDTH);
- X
- X for (i = SCREENWIDTH - 1; i >= 0; i--)
- X {
- X for (j = 0; (j + i) < SCREENWIDTH; j++)
- X {
- X stdline[j + i] = srcbuffer[j];
- X }
- X UpdateCR ();
- X }
- X
- X}
- X/* scroll entire line r->l, bringing on new stuff from the right */
- Xvoid
- XScrollOffBackward (cstring, dstring)
- X char *cstring;
- X char *dstring;
- X{
- X register int i;
- X register int j;
- X char srcbuffer[SCREENWIDTH + 1];
- X
- X NullSet (srcbuffer, sizeof (srcbuffer));
- X strcpy (srcbuffer, dstring);
- X SpaceFlood (srcbuffer, SCREENWIDTH);
- X
- X for (i = 0; i < SCREENWIDTH; i++)
- X {
- X for (j = 1; j < SCREENWIDTH; j++)
- X {
- X stdline[j - 1] = stdline[j];
- X }
- X stdline[SCREENWIDTH - 1] = srcbuffer[i];
- X UpdateCR ();
- X }
- X}
- X/* scroll entire line l->r, bringing on new stuff from the left */
- Xvoid
- XScrollOffForward (cstring, dstring)
- X char *cstring;
- X char *dstring;
- X{
- X register int i;
- X register int j;
- X char srcbuffer[SCREENWIDTH + 1];
- X
- X NullSet (srcbuffer, sizeof (srcbuffer));
- X strcpy (srcbuffer, dstring);
- X SpaceFlood (srcbuffer, SCREENWIDTH);
- X
- X for (i = SCREENWIDTH - 1; i >= 0; i--)
- X {
- X for (j = SCREENWIDTH - 2; j > 0; j--)
- X {
- X stdline[j] = stdline[j - 1];
- X }
- X stdline[0] = srcbuffer[i];
- X UpdateCR ();
- X }
- X}
- X/* Lay characters down l->r, one by one */
- Xvoid
- XLayForward (cstring, dstring)
- X char *cstring;
- X register char *dstring;
- X{
- X register int i;
- X
- X /* do not copy last null. */
- X for (i = 0; dstring[i]; i++)
- X {
- X stdline[i] = dstring[i];
- X UpdateCR ();
- X }
- X}
- X/* Lay characters down r->l, one by one */
- Xvoid
- XLayBackward (cstring, dstring)
- X char *cstring;
- X register char *dstring;
- X{
- X register int i;
- X
- X i = strlen (dstring) - 1; /* index of last character */
- X
- X if (i >= 0)
- X {
- X stdline[i] = dstring[i];
- X for ( /* nothing */ ; i >= 0; i--)
- X {
- X stdline[i] = dstring[i];
- X UpdateCR ();
- X }
- X }
- X}
- X/* Lay r->l and v.v. meeting in middle */
- Xvoid
- XLayEndsToMiddle (cstring, dstring)
- X char *cstring;
- X register char *dstring;
- X{
- X register int start;
- X int middle;
- X register int end;
- X int dlength;
- X
- X dlength = strlen (dstring) - 1;
- X end = dlength;
- X for (start = 0; dstring[start] && isspace (dstring[start]); start++);
- X if (!dstring[start])
- X {
- X return;
- X }
- X middle = ((end - start) / 2) + start;
- X
- X for (; end >= middle; end--, start++)
- X {
- X if (start <= dlength)
- X {
- X stdline[start] = dstring[start];
- X }
- X if (end <= dlength)
- X {
- X stdline[end] = dstring[end];
- X }
- X UpdateCR ();
- X }
- X}
- X/* Lay l->r and v.v., middle to end */
- Xvoid
- XLayMiddleToEnds (cstring, dstring)
- X char *cstring;
- X register char *dstring;
- X{
- X register int dlength;
- X register int backwards;
- X register int forwards;
- X int start;
- X int end;
- X
- X dlength = strlen (dstring) - 1;
- X end = dlength;
- X for (start = 0; dstring[start] && isspace (dstring[start]); start++);
- X if (!dstring[start])
- X {
- X return;
- X }
- X forwards = backwards = ((end - start) / 2) + start;
- X
- X for (; backwards >= start || forwards <= end;)
- X {
- X if (backwards >= start)
- X {
- X if (backwards <= dlength)
- X {
- X stdline[backwards] = dstring[backwards];
- X }
- X backwards--;
- X }
- X if (forwards <= end)
- X {
- X if (forwards <= dlength)
- X {
- X stdline[forwards] = dstring[forwards];
- X }
- X forwards++;
- X }
- X UpdateCR ();
- X }
- X}
- END_OF_FILE
- if test 8258 -ne `wc -c <'effects.c'`; then
- echo shar: \"'effects.c'\" unpacked with wrong size!
- fi
- # end of 'effects.c'
- fi
- echo shar: End of archive 2 \(of 2\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-