[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Warp Six BBS 2.5 (description)
- Subject: Re: Warp Six BBS 2.5 (description)
- From: dockery@griffin.cuc.ab.ca (Sean Dockery)
- Date: Sat, 18 Jun 1994 23:05:49 GMT
- Newsgroups: comp.sys.apple2
- Organization: Griffin Software Development
- References: <2tpqal$8fb@netaxs.com> <2tschj$jck@blue.weeg.uiowa.edu>
snelson@blue.weeg.uiowa.edu wrote the following article:
| I know how to make this change with the Davex 'tr' command after dnloading,
| but evidently the Unix 'tr' command works differently. Can someone tell
| me how to change \012\040\040\040\040\012 to \040\040\040\040\040\040
| in unix? Not all \012, just the ones in that pattern. Then I can
| correct the ones on grind.isca.uiowa.edu:apple2/apple8/bbs/Warp6.v25
| without having to dn/up load all of them with Kermit [SLOW......] :)
tr is a character translator, not a pattern replacement utility.
It is probably easier to handle the conversion with either awk or sed, but
I am not sure how to handle control characters in regular expressions with
either.
Anyways, I hacked this together in about ten minutes.
---------------------------------------------------------------------------
/* filter.c */
#include <stdio.h> /* sprintf, fprintf, putchar, getchar, EOF */
#include <stdlib.h> /* malloc, free */
#define NIL(tag) ((tag) 0) /* remove dependency on "NULL" macro */
int main (int argc, char **argv)
{
int ch = 0, i, index = 0;
char *token;
if ((token = (char *) malloc (7)) == NIL (char *))
{
fprintf (stderr, "main: malloc failure\n");
exit (1);
}
sprintf (token, "%c%c%c%c%c%c", 012, 040, 040, 040, 040, 012);
ch = getchar (); /* prime while loop */
while (ch != EOF)
{
if (ch == token[index]) /* character matches next space in token? */
index++;
else if (index > 0) /* abstract buffer non-empty? */
{
for (i = 0; i < index; i++) /* flush matched-so-far */
putchar (token[i]);
putchar (ch); /* and first mis-match */
index = 0;
}
else /* only single character mis-match */
putchar (ch);
if (index == 6) /* complete match? */
{
printf ("%c%c%c%c%c%c", 040, 040, 040, 040, 040, 040);
index = 0;
}
ch = getchar ();
if (ch == EOF && index > 0) /* if EOF, flush matched-so-far */
for (i = 0; i < index; i++)
putchar (token[i]);
}
free (token); /* no memory leaks here */
return 0;
} /* main */
---------------------------------------------------------------------------
It compiles with `gcc -ansi -Wall -g filter.c' without no warnings. From
my quick tests (from stdin,) it seems to be working properly. Invoke it
using `./a.out < infile.bxy > outfile.bxy'.
| --Steve (steven-nelson@uiowa.edu)
--
Sean Dockery | Tickle us, do we not laugh?
Griffin Software Development Group | Prick us, do we not bleed?
dockery@griffin.cuc.ab.ca | Wrong us, shall we not revenge?