home *** CD-ROM | disk | FTP | other *** search
- /****** rsbx.lib/EscapeAdditions() *******************************************
- *
- * NAME
- * EscapeAdditions -- Return number of characters to escape an argument.
- *
- * SYNOPSIS
- * escapes = EscapeAdditions(argv)
- *
- * int EscapeAdditions(char *);
- *
- * FUNCTION
- * Determines the number of extra characters that are needed to escape
- * a command argument for AmigaDos command parsing.
- *
- * INPUTS
- * argv - Argument to check.
- *
- * RESULT
- * escapes - The number of characters that need to be added to the
- * argument to escape the characters special to AmigaDos.
- *
- * NOTES
- * Characters special to AmigaDos are " [0x22], * [0x2a], ESC [0x1b],
- * LF [0x0a], SP [0x20].
- *
- * SEE ALSO
- * EscapeAdditions(), EscapeString().
- *
- * BUGS
- * Thinks spaces need an AmigaDos escape character preceeding them.
- *
- ******************************************************************************
- *
- */
-
- #include <stdio.h>
- #include <string.h>
-
-
- #define QUOTE '\"'
- #define ESCAPE '*'
- #define ESC '\033'
- #define NL '\n'
- #define SPACE ' '
-
- #define SPECIAL "\"*\033\n "
-
-
- int EscapeAdditions(char *argv);
- char *EscapeString(char *buff, char *argv);
-
-
- int EscapeAdditions(char *argv)
- {
- int count = 0;
- char *pos = argv;
-
- while (pos = strpbrk(pos, SPECIAL))
- {
- count++;
- pos++;
- }
-
- if (count)
- {
- count += 2;
- }
-
- return count;
- }
-
-
- /****** rsbx.lib/EscapeString() **********************************************
- *
- * NAME
- * EscapeString -- Copy argument to buffer escaping as needed.
- *
- * SYNOPSIS
- * dest = EscapeString(buffer, argv)
- *
- * char *EscapeAdditions(char *, char *);
- *
- * FUNCTION
- * Copies a string containing a single argument to a buffer, escaping
- * characters special to AmigaDos.
- *
- * INPUTS
- * buffer - Buffer for escaped argument string.
- * argv - Argument string to escape.
- *
- * RESULT
- * dest - The same as buffer.
- *
- * NOTES
- * Characters special to AmigaDos are " [0x22], * [0x2a], ESC [0x1b],
- * LF [0x0a], SP [0x20].
- *
- * SEE ALSO
- * EscapeAdditions(), EscapeString().
- *
- * BUGS
- * Thinks spaces need an AmigaDos escape character preceeding them.
- *
- ******************************************************************************
- *
- */
-
- char *EscapeString(char *buff, char *argv)
- {
- char *pos;
-
- pos = buff;
- *pos++ = '\"';
- while (*argv)
- {
- switch (*argv)
- {
- case ESC:
- *pos++ = ESCAPE;
- *pos++ = 'E';
- break;
- case NL:
- *pos++ = ESCAPE;
- *pos++ = 'N';
- break;
- case QUOTE:
- case SPACE:
- case ESCAPE:
- *pos++ = ESCAPE;
- default:
- *pos++ = *argv;
- }
- argv++;
- }
- *pos++ = '\"';
- *pos = '\0';
-
- return buff;
- }
-