home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
317b.lha
/
RCS_Sources
/
rsbx.lib
/
escaping.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-05
|
3KB
|
140 lines
/****** 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;
}