ahh@j.cc.purdue.edu (Brent L. Woods) (03/11/88)
Program Name: foreach
Submitted By: Jonas Flygare
Summary: A program that allows multiple executions of a command
with Amiga-style wildcards (even if the command doesn't
support them).
Poster Boy: Brent Woods (ahh@j.cc.purdue.edu)
Tested. Part 1 of 1.
NOTES:
Brent Woods, Co-Moderator, comp.{sources,binaries}.amiga
USENET: ...!j.cc.purdue.edu!ahh ARPANET: ahh@j.cc.purdue.edu
BITNET: PODUM@PURCCVM PHONE: +1 (317) 743-8421
USNAIL: 320 Brown St., #406 / West Lafayette, IN 47906
================================================================
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# foreach.readme
# foreach.c
# This archive created: Wed Mar 9 15:42:58 1988
# By: Brent L. Woods (Co-Moderators Unlimited.)
cat << \SHAR_EOF > foreach.readme
(I would be surprised if this haven't been written already, it isn't
that advanced, but I couldn't find it on my fishdisks.)
Here is a small program I wrote in just about 1.5 hours, after
being really fed up with having to do 15 compress <filename>
just because compress won't accept wildcards. Argh! (I just got
the sources, and have fixed that.. ;-) But, I found the program to
be useful for other things, so I kept it around. It probably is full
of bugs (it *is* short, but that never stopped me from writing buggy
programs.. Try TECO if you want to produce more bugs with one line of
code, than You thought was possible.. ) Anyway, You get the uuencoded
executable, together with the source, and this file. That is just
about all documentation You get. The program is called foreach, as in
"foreach #?.c compress -v" which will run compress (with flag -v) on
all files matching #?.c. It isn't blindingly fast, since I put a call
to Execute in there. It isn't *that* slow either. Considering the time
put into this You get it for free. (But when I write my *really* great
program I'll have you pay through the nose to get it.. ;-) However..
If I should happen to recieve email regarding obvious bugs or great
improvements, I would feel really happy. So please do.
Here's how to reach me.. (first one preferred)
jonasf@kuling.UUCP (domain: jonasf@kuling.uu.se)
flax@suadb.UUCP (domain: flax@suadb.kth.se possibly .su.se)
or:
Jonas Flygare
Vaktargatan 32 F:621
754 22 Uppsala
SHAR_EOF
cat << \SHAR_EOF > foreach.c
#include <stdio.h>
#include <dos.h>
#include <string.h>
#include <libraries/dosextens.h>
/* Compiled with Lattice v4.0 */
void main(argc, argv)
int argc;
char **argv;
{
char *filestring;
char *commandstring;
int error;
int i;
struct FILEINFO info;
int attr=0;
/* One could really look more at the arguments more here... */
if (argc<3)
{
printf("Usage is %ls <filepattern> <command> <extra args>\n", argv[0]);
exit(0);
}
/* Get filepattern and command to apply */
filestring=strdup(argv[1]);
commandstring=strdup(argv[2]);
/* Make sure command gets all the supplied args.. */
for(i=3;i<argc;i++)
{
strcat(commandstring, " ");
strcat(commandstring, argv[i]);
}
strcat(commandstring, " ");
if((error=dfind(&info, filestring, attr))!=0)
{
printf("\nNo file named %ls", filestring);
exit(0);
}
do
if(Execute(strcat(strdup(commandstring), info.fib_FileName),0,0)==0)
{
printf("Execute failed with command %ls\n and filename %ls\n",
commandstring, info.fib_FileName);
exit(0);
}
/* First strdup to create an untouched copy of commandstring, then */
/* execute it with current filename. */
while(!dnext(&info)); /* Nice test. */
printf("\nDone!\n");
}
SHAR_EOF
# End of shell archive
exit 0