Category : Files from Magazines
Archive   : VOL8N1.ZIP
Filename : EXP.C
Output of file : EXP.C contained in archive : VOL8N1.ZIP
* For MSC 4.0/5.0/QuickC: cl exp.c
*/
#include
#include
#include
#include
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define DOS_COMMAND_LINE 128
#define LPAREN '('
#define RPAREN ')'
#define PERIOD '.'
#define BLANK ' '
main(argc, argv)
int argc;
char **argv;
{
int i, echo_only = FALSE;
char oldcommandline[DOS_COMMAND_LINE], newcommandline[DOS_COMMAND_LINE];
char *lparen, *rparen, *period, *first_arg, *last_arg, *nextdelim;
if(argc < 2) /* check usage */
print_usage();
/* check for echo only argument, and if so, set flag, increment
arg pointer, and decrement the arg count
*/
if((argv[1][0] == '-' || argv[1][0] == '/') && toupper(argv[1][1]) == 'E')
{
echo_only = TRUE;
argv++;
argc--;
}
/* put all command-line arguments into one buffer */
for( i = 1, oldcommandline[0] = NULL; i < argc; i++)
{
strcat(oldcommandline,argv[i]);
strcat(oldcommandline," ");
}
lparen = strchr(oldcommandline, LPAREN);
rparen = strchr(oldcommandline, RPAREN);
period = strchr(oldcommandline, PERIOD);
/* check syntax: if no parens or if parens reversed */
if(!lparen || !rparen || (rparen < lparen))
print_usage();
/* check syntax: if period supplied and in middle */
if(period && ((period < rparen) && (period > lparen)) )
print_usage();
/* set last_arg to the remainder of the command line after our
expanded filenames/extensions
*/
last_arg = (rparen+1);
/* copy up to the first paren into the new command buffer */
strncpy(newcommandline, oldcommandline, lparen-oldcommandline);
newcommandline[lparen-oldcommandline] = NULL;
/* set first_arg to where the first argument will start each time */
first_arg = &newcommandline[strlen(newcommandline)];
lparen++; /* point to first expansion */
/* main loop:
pick off each filename/extension,
copy it into the buffer,
tack on additional arguments
run the command.
*/
while(TRUE)
{
*first_arg = NULL;
nextdelim = strpbrk(lparen, ",)"); /* find the next , or ) */
*nextdelim = NULL; /* NULL terminate */
strcat(first_arg, lparen); /* add to the command */
strcat(first_arg, last_arg); /* add to the command */
if(echo_only)
printf("\nexp: %s",newcommandline); /* echo the command */
else if(system(newcommandline)) /* execute the command */
printf("\nexp: error executing \"%s\"",newcommandline);
lparen = nextdelim+1; /* move to next arg */
while(*lparen == BLANK)
lparen++;
if(lparen > rparen)
break;
}
exit(0);
}
print_usage()
{
printf("\nexp [-e] DOScommand (filename1,...,filenameN).ext");
printf("\nexp [-e] DOScommand filename.(ext1,...,extN)");
exit(1);
}
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/