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