Commit 81b95e1b authored by cvs2snv's avatar cvs2snv

This commit was manufactured by cvs2svn to create tag 'clean-2-2'.

parent 05c6abdf

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

/*
Version 1.0.3
Ronny Wichers Schreur
ronny@cs.kun.nl
*/
definition module ArgEnv
:: EnvironmentVariable
= EnvironmentVariableUndefined
| EnvironmentVariable !.{#Char}
// get the value of an environment variable
getEnvironmentVariable :: !{#Char} -> *EnvironmentVariable
// get the command line, first element is the command name,
// arguments that are interpreted by the run-time system
// (for example to set the heap size) are excluded
getCommandLine :: {.{#Char}}
/*
Version 1.0.3
Ronny Wichers Schreur
ronny@cs.kun.nl
*/
implementation module ArgEnv
import StdEnv
:: CString :== Int
NULL :== 0
:: EnvironmentVariable
= EnvironmentVariableUndefined
| EnvironmentVariable !.{#Char}
getEnv :: !{#Char} -> (!Int, !CString)
getEnv _
= code inline {
ccall ArgEnvGetEnvironmentVariableC "S-II"
}
getEnvironmentVariable :: !{#Char} -> *EnvironmentVariable
getEnvironmentVariable name
| cString == NULL
= EnvironmentVariableUndefined
| otherwise
= EnvironmentVariable (copy size cString)
where
(size, cString)
= getEnv (name +++ "\0")
copy :: !Int !CString -> {#.Char}
copy length cString
= code inline {
create_array_ CHAR 0 1
push_a 0
ccall ArgEnvCopyCStringToCleanStringC "IS-I"
pop_b 1
.end
}
getCommandLineCount :: Int
getCommandLineCount
= code inline {
ccall ArgEnvGetCommandLineCountC "-I"
}
getCommandLineArgument :: !Int -> (!Int, !Int)
getCommandLineArgument _
= code inline {
ccall ArgEnvGetCommandLineArgumentC "I-II"
}
getArg :: !Int -> {#.Char}
getArg i
= copy size cString
where
(size, cString)
= getCommandLineArgument i
getCommandLine :: {.{#Char}}
getCommandLine
= {getArg i \\ i <- [0 .. getCommandLineCount-1]}
/*
Version 1.0.3
Ronny Wichers Schreur
ronny@cs.kun.nl
*/
# ifdef _WINDOWS_
# include <windows.h>
# else
# include <stdlib.h>
# endif
# define kVariableSize 1
# ifndef NULL
# define NULL ((void *) 0)
# endif
/* defined by the Clean run-time system */
extern int global_argc;
extern char **global_argv;
typedef struct
{
int length;
char characters [kVariableSize];
} *CleanString;
static int
CStringLength (char *s)
{
char *begin;
begin = s;
while (*s != '\0')
s++;
return (s - begin);
} /* CStringLength */
# ifdef _WINDOWS_
/* return size of environment variable's value (including null-terminator)
zero if variable doesn't exist */
int
ArgEnvGetEnvironmentVariableSizeC (CleanString name)
{
char smallBuffer;
/* Assume that name has been null-terminated in Clean */
return (GetEnvironmentVariableA (name->characters, &smallBuffer, 0));
} /* ArgEnvGetEnvironmentVariableSizeC */
/* copy value of environment variable to Clean string
return False if value had to be truncated */
int
ArgEnvGetEnvironmentVariableCharsC (CleanString value, CleanString name)
{
int size, length;
length = value->length;
/* Assume that name has been null-terminated in Clean */
size = GetEnvironmentVariableA (name->characters, value->characters, length);
if (size <= length)
{
size = CStringLength (value->characters);
if (size <= length)
value->length = size;
}
return (size >= value->length);
} /* ArgEnvGetEnvironmentVariableCharsC */
# else /* ifndef _WINDOWS_ */
void
ArgEnvGetEnvironmentVariableC (CleanString name, int *sizeP, char **stringP)
{
char *value;
/* Assume that name has been null-terminated in Clean */
value = getenv (name->characters);
if (value == NULL)
*sizeP = 0;
else
*sizeP = CStringLength (value);
*stringP = value;
} /* ArgEnvGetEnvironmentVariableCharsC */
# endif /* _WINDOWS_ */
int
ArgEnvGetCommandLineCountC (void)
{
return (global_argc);
} /* ArgEnvGetCommandLineCountC */
void
ArgEnvGetCommandLineArgumentC (int i, int *sizeP, char **stringP)
{
char *arg;
/* Assume that i is within bounds */
arg = global_argv [i];
*sizeP = CStringLength (arg);
*stringP = arg;
} /* ArgEnvGetCommandLineArgumentC */
/* copy C string to Clean string
return False if string had to be truncated */
int
ArgEnvCopyCStringToCleanStringC (char *cString, CleanString cleanString)
{
int i, length;
char *to;
length = cleanString->length;
to = cleanString->characters;
i = 0;
while (*cString != '\0' && i < length)
{
i++;
*to++ = *cString++;
}
cleanString->length = i;
return (i <= length);
} /* ArgEnvCopyCStringToCleanStringC */
1.0.3
- removed Clean 1.1 compatibility comments
- change inline directives in abc code blocks to Clean 2.0 syntax
1.0.2
- Added Changes.txt
- No other changes for Unix version
1.0.1
- Initial release
\ No newline at end of file
#
# Version 1.0.3
# Ronny Wichers Schreur
# ronny@cs.kun.nl
#
CLM=clm
CC=gcc
COPTIONS=-Wall -pedantic