NEW
  AUTO 3,1
				.LIST OFF	
*--------------------------------------
CSH.Q.CONST		.EQ %10000000
CSH.Q.POINTER	.EQ %00100000
CSH.Q.PPOINTER	.EQ %01000000
CSH.Q.PPPOINTER	.EQ %01100000
CSH.T.VOID		.EQ 0
CSH.T.CHAR		.EQ 1
CSH.T.INT		.EQ 2
CSH.T.LONG		.EQ 3
CSH.T.UCHAR		.EQ 4
CSH.T.UINT		.EQ 5
CSH.T.ULONG		.EQ 6
CSH.T.FLOAT		.EQ 7
CSH.T.VARIADIC	.EQ $1F
*--------------------------------------
CSH.OPChars		.AS "!~+-*/%=&|^<>"
CSH.OPChars.Cnt	.EQ *-CSH.OPChars
*--------------------------------------
* Pre Operators:  + - ! ~ ++ --
*--------------------------------------
CSH.PREOPS		>PSTR "+"
				>PSTR "-"
				>PSTR "!"
				>PSTR "~"
*--------------------------------------
* Post Operators: ++ -- 
*--------------------------------------
CSH.POSTOPS		>PSTR "++"
				>PSTR "--"
				.HS 00
*--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*--------------------------------------
CSH.AOPS		>PSTR "="
				>PSTR "+="
				>PSTR "-="
				>PSTR "*="
				>PSTR "/="
				>PSTR "%="
				>PSTR "<<="
				>PSTR ">>="
				>PSTR "&="
				>PSTR "^="
				>PSTR "!="
				.HS 00
*-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
* Shift Operators: << >>
* Relational Operators: < > >= < >= == !=
* Bitwise Operators: & | ^ ~
* Logical Operators: && ||
*--------------------------------------
CSH.BOPS		>PSTR "+"
				>PSTR "-"
				>PSTR "*"
				>PSTR "/"
				>PSTR "%"
				>PSTR "<<"
				>PSTR ">>"
				>PSTR "<"
				>PSTR ">"
				>PSTR "<="
				>PSTR ">="
				>PSTR "=="
				>PSTR "!="
				>PSTR "&"
				>PSTR "|"
				>PSTR "^"
				>PSTR "&&"
				>PSTR "||"
				.HS 00
*--------------------------------------
* Reserved Directives:
*--------------------------------------
CSH.DIRS		>PSTR "define"
				.HS 00
*--------------------------------------
* Reserved Keywords:
*--------------------------------------
CSH.KW			>PSTR "if"
				>PSTR "while"
				>PSTR "else"
				>PSTR "do"
				>PSTR "for"
				>PSTR "switch"
				>PSTR "case"
				>PSTR "break"
				>PSTR "continue"
				>PSTR "typedef"
				>PSTR "struct"
				>PSTR "sizeof"
				>PSTR "void"
				>PSTR "float"
				>PSTR "signed"			char,int,long
				>PSTR "unsigned"		char,int,long
CSH.STYPES		>PSTR "char"
				>PSTR "int"
				>PSTR "long"
*				.HS 00
*--------------------------------------
CSH.TYPESIZE	.HS 0001020401020405	VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
*--------------------------------------
CSH.FN
* float cos ( float x );
				>PSTR "log"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "sqr"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "exp"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "cos"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "sin"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "tan"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
				>PSTR "atan"
				.DA #CSH.T.FLOAT		returned value
				.DA #CSH.T.FLOAT
				.DA #0
* char getchar ( void );
				>PSTR "getchar"
				.DA #CSH.T.CHAR			returned value
				.DA #0
* int puts ( const char * str );
				>PSTR "puts"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* int execl(const char* cmdline, short int flags);
				>PSTR "execl"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.T.UCHAR
				.DA #0
* int printf ( const char * format, ... );
				>PSTR "printf"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.T.VARIADIC
				.DA #0
* int putenv(const char *string);
				>PSTR "putenv"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* int setenv(const char *name, const char *value);
				>PSTR "setenv"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* char *getenv(const char *name, char *value);
				>PSTR "getenv"
				.DA #CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* int unsetenv(const char *name);
				>PSTR "unsetenv"
				.DA #CSH.T.INT			returned value
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* void md5 (const char* str, char* digest);
				>PSTR "md5"
				.DA #CSH.T.VOID
				.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR
				.DA #CSH.Q.POINTER+CSH.T.CHAR
				.DA #0
* void * malloc ( int size );
				>PSTR "malloc"
				.DA #CSH.Q.POINTER+CSH.T.VOID	returned value
				.DA #CSH.T.INT
				.DA #0
*--------------------------------------
				.DA #0
*--------------------------------------
MAN
SAVE USR/SRC/BIN/CSH.I
LOAD USR/SRC/BIN/CSH.S
ASM
