home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 June
/
SIMTEL_0692.cdr
/
msdos
/
pgmutl
/
val_link.arc
/
LANGEXT.H
< prev
next >
Wrap
Text File
|
1989-02-18
|
7KB
|
213 lines
/* LANGEXT.H */
/* Fixup some C syntax I really don't like
De gustibus non est desputandum
(Concerning taste there is not argument -- or
Only fools argue where taste is concerned) */
/* Block basic C commands */
#define If if (
#define Then ) {
#define Else } else {
#define ElseIf } else if (
#define EndIf }
#define Using switch (
#define BeginCase ) {
#define When case
#define Otherwise default
#define EndCase }
#define Loop while(1)
#define BeginLoop {
#define EndLoop }
#define ExitLoop break
#define ContinueLoop continue
#define ExitIf(cond) if (cond) break
#define LoopIf(cond) if (cond) continue
#define While while (
#define BeginWhile ) {
#define EndWhile }
#define Repeat do
#define BeginRepeat {
#define RepeatIf } while ((
#define Until } while (!(
#define EndRepeat ))
#define For for (
#define BeginFor ) {
#define EndFor }
#define BeginDeclarations {
#define EndDeclarations
#define BeginCode
#define EndCode }
#define Type typedef
#define Structure struct
#define BeginStructure {
#define EndStructure }
#define Union union
#define BeginUnion {
#define EndUnion }
#define Enumeration enum
#define BeginEnumeration {
#define EndEnumeration }
/* Extended C commands */
/* Linked List commands */
#define ListTypeOf(exp) \
Structure exp##_list_struct \
BeginStructure \
exp##_ptr first; \
exp##_ptr last; \
EndStructure; \
Type Structure exp##_list_struct exp##_list
Structure Generic_Element_struct
BeginStructure
Structure Generic_Element_struct far *next;
EndStructure;
Type Structure Generic_Element_struct Generic_Element_type;
Type Generic_Element_type far *Generic_Element_ptr;
ListTypeOf(Generic_Element);
#define TraverseList(lst,elm) for(elm=lst.first; elm IsNotNull; Next(elm))
#define BeginTraverse {
#define EndTraverse }
#define Insert ListInsert((Generic_Element_ptr)
#define After ,0,(Generic_Element_ptr)
#define AtEnd ,1,Null
#define AtBeginning ,2,Null
#define InList ,(Generic_Element_list far *) &(
#define EndInsert ))
#define Delete ListDelete((Generic_Element_ptr)
#define FromList ,(Generic_Element_list far *) &(
#define EndDelete ))
#define Push ListInsert((Generic_Element_ptr)
#define OnTo ,2,Null,(Generic_Element_list far *) &(
#define EndPush ))
#define Pop ListPop((Generic_Element_list far *) &(
#define InTo ),(Generic_Element_ptr *) &(
#define EndPop ))
#define LastInList(ptr) ((*ptr).next == NULL)
#define Next(ptr) ptr = (*ptr).next
#define First(list) list.first
#define Last(list) list.last
/* Make operations less cryptic */
/* Logical operators */
#define AndIf &&
#define OrIf ||
#define Not !
#define Is ==
#define IsNot !=
#define IsEqualTo ==
#define Equals ==
#define IsNotEqualTo !=
#define LessThan <
#define NotLessThan >=
#define LessThanOrEqualTo <=
#define GreaterThan >
#define Exceeds >
#define Positive > 0
#define Negative < 0
#define IsZero == 0
#define IsNull == 0
#define IsNotNull != 0
#define IsEmpty == 0
#define IsNotEmpty != 0
#define IsNotZero != 0
#define IsTrue != 0
#define IsFalse == 0
#define NotGreaterThan <=
#define GreaterThanOrEqualTo >=
#define IsIdentifier(x) (((x>='A') && (x<='Z')) || \
((x>='a') && (x<='z')) || \
(x=='_'))
#define IsNumber(x) ((x>='0') && (x<='9'))
/* Bitwise operators */
#define And &
#define Or |
#define Xor ^
#define Complement ~
/* Some other operators */
#define Addr(exp) &(exp)
#define Mod %
#define ShiftedLeft <<
#define ShiftedRight >>
/* Some useful constants */
#define False 0
#define Null 0
#define True 1
/* Some helpful types */
Type unsigned char bit_8;
Type unsigned int bit_16;
Type unsigned long bit_32;
Type unsigned char byte;
Type byte far *byte_ptr;
Type void far *far_ptr;
Type signed char int_8;
Type signed int int_16;
Type signed long int_32;
Type void near *near_ptr;
Type char near *char_ptr;
Structure string_struct
BeginStructure
bit_16 max_length;
bit_16 length;
byte text[1];
EndStructure;
Type Structure string_struct string_type;
Type string_type far *string_ptr;
#define String(str) ((byte_ptr) ((*str).text))
#define Length(str) (*str).length
#define MaxLength(str) (*str).max_length
#define FirstCharIn(str) *String(str)
#define LastCharIn(str) String(str)[Length(str)-1]
/* Some helpful type casts */
#define Bit_8(exp) ((bit_8) (exp))
#define Bit_16(exp) ((bit_16) (exp))
#define Bit_32(exp) ((bit_32) (exp))
#define Int_8(exp) ((int_8) (exp))
#define Int_16(exp) ((int_16) (exp))
#define Int_32(exp) ((int_32) (exp))
#define CharPtr(exp) ((char *) (exp))
#define Byte(exp) ((byte) (exp))
#define BytePtr(exp) ((byte_ptr ) (exp))
#define NearPtr(exp) ((near_ptr) (exp))
#define FarPtr(exp) ((far_ptr) (exp))
#define StringPtr(exp) ((string_ptr) (exp))
#define Offset(exp) ((bit_16) (exp))
#define Segment(exp) ((bit_16) (((bit_32) (exp)) >> 16L))
#define Low(exp) ((bit_16) (exp))
#define High(exp) ((bit_16) (((bit_32) (exp)) >> 16L))
#define MakeFarPtr(seg,off) ((far_ptr) ((((bit_32) (seg)) << 16L)|(off)))