mirror of
https://github.com/opsxcq/mirror-textfiles.com.git
synced 2025-08-30 07:09:50 +02:00
156 lines
3.1 KiB
Plaintext
156 lines
3.1 KiB
Plaintext
#include <ctype.h>
|
|
|
|
char *next_arg();
|
|
char *skip_delim();
|
|
char *strip_path();
|
|
|
|
/*
|
|
|
|
Command argument and DOS path manipulation functions.
|
|
T. Jennings 7 June 83
|
|
|
|
--------------- Command Tail Processing Functions ---------------
|
|
|
|
This next set of functions are meant to be used together. Examples
|
|
on their use follows.
|
|
|
|
|
|
int num_args(string) Returns the number of args in the string, seperated
|
|
by delims (see delim(), below). Leading delimiters
|
|
are ignored.
|
|
|
|
char *next_arg(string) Returns a pointer to the next arg, delimited
|
|
by a delim, skipping over the current arg. Use via
|
|
ptr= nextarg(ptr) to skip to each argument. All
|
|
switches at the end of the current arg are skipped.
|
|
|
|
|
|
char *skip_delim(string) Skips leading delims in a string. returns a pointer.
|
|
|
|
cpyarg(to,from) Copies a string, up to the next delim or switch.
|
|
Leading and trailing delimiters are stripped (from
|
|
the output string) and a null terminator is added.
|
|
|
|
after cpyarg() FROM: foo/b foobar fipple
|
|
TO: foo
|
|
|
|
delim(c) Returns true if the character is a delimiter.
|
|
Nulls are not considered a delimiter. The list of
|
|
delimiters is contained in the array '_dlmlst', and
|
|
can be changed via newdelim().
|
|
|
|
newdelim(s) Replace the list of delimiters. The string 's' must
|
|
be less than 20 chars. (Not checked.)
|
|
|
|
stolower(s) Convert a string to all lower or upper case.
|
|
stoupper(s)
|
|
*/
|
|
/* Return the number of args left in the string. */
|
|
|
|
short num_args(string)
|
|
char *string;
|
|
{
|
|
int count;
|
|
|
|
count= 0;
|
|
string= skip_delim(string); /* skip leading blanks, */
|
|
while (*string) {
|
|
++count; /* count one, */
|
|
string= next_arg(string); /* find next, */
|
|
}
|
|
return(count);
|
|
}
|
|
|
|
/* Return a pointer to the next argument in the string. */
|
|
|
|
char *
|
|
next_arg(string)
|
|
char *string;
|
|
{
|
|
while ((!delim(*string)) && *string) /* skip this one, */
|
|
++string; /* up to delim, */
|
|
string= skip_delim(string); /* then skip delims, */
|
|
return(string);
|
|
}
|
|
|
|
/* Skip over the leading delimiters in a string. */
|
|
|
|
char *
|
|
skip_delim(string)
|
|
char *string;
|
|
{
|
|
while (delim(*string) && *string) {
|
|
++string;
|
|
}
|
|
return(string);
|
|
}
|
|
/* Copy the string to the destination array, stopping if we find one
|
|
of our delimiters. */
|
|
|
|
void
|
|
cpyatm(to,from)
|
|
char *to;
|
|
char *from;
|
|
{
|
|
while ( (!delim(*from)) && *from)
|
|
*to++= *from++;
|
|
*to= '\0';
|
|
}
|
|
|
|
/* Copy the string to the destination array, stopping if we find one
|
|
of our delimiters or switches. */
|
|
|
|
void
|
|
cpyarg(to,from)
|
|
char *to;
|
|
char *from;
|
|
{
|
|
while ( (!delim(*from)) && (*from != '/') && *from)
|
|
*to++= *from++;
|
|
*to= '\0';
|
|
}
|
|
|
|
/* ----- List of legal delimiters. This is the default list ----- */
|
|
|
|
static char _dlmlst[20] = {" \t,"}; /* space, tab, comma */
|
|
|
|
/* Return true if the character is a delimiter from the list above. */
|
|
|
|
delim(c)
|
|
char c;
|
|
{
|
|
char *cp;
|
|
|
|
for (cp= _dlmlst; *cp;) if (c == *cp++) return(1);
|
|
return(0);
|
|
}
|
|
|
|
/* Change the list of delimiters. */
|
|
|
|
void newdelim(s)
|
|
char *s;
|
|
{
|
|
strcpy(_dlmlst,s);
|
|
}
|
|
|
|
/* Convert a string to lower case. */
|
|
|
|
stolower(s)
|
|
char *s;
|
|
{
|
|
while (*s) {
|
|
*s= tolower(*s);
|
|
++s;
|
|
}
|
|
}
|
|
/* Convert a string to upper case. */
|
|
|
|
stoupper(s)
|
|
char *s;
|
|
{
|
|
while (*s) {
|
|
*s= toupper(*s);
|
|
++s;
|
|
}
|
|
}
|