{*****************************************************************************
 * Function ...... CIF()
 * Purpose ....... To return a character based on a boolean expression
 * Parameters .... Exp        Boolean expression to evaluate
 *                 tVar       Result if <Exp> is TRUE
 *                 fVar       Result if <Exp> is FALSE
 * Returns ....... <tVar> if <Exp> is TRUE, <fVar> if <Exp> is FALSE
 * Notes ......... None
 * Author ........ Martin Richardson
 * Date .......... May 13, 1992
 *****************************************************************************}
FUNCTION CIF( Exp: BOOLEAN; tVar, fVar: CHAR ): CHAR; ASSEMBLER;
ASM
     TEST Exp, 1
     JZ   @@1
     MOV  AL, tVar
     JMP  @@2
@@1: MOV  AL, fVar
@@2:
END;

{*****************************************************************************
 * Function ...... SIF()
 * Purpose ....... To return a string based on a boolean expression
 * Parameters .... Exp        Boolean expression to evaluate
 *                 tVar       Result if <Exp> is TRUE
 *                 fVar       Result if <Exp> is FALSE
 * Returns ....... <tVar> if <Exp> is TRUE, <fVar> if <Exp> is FALSE
 * Notes ......... None
 * Author ........ Martin Richardson
 * Date .......... May 13, 1992
 *****************************************************************************}
FUNCTION SIF( Exp: BOOLEAN; tVar, fVAR: STRING ): STRING; ASSEMBLER;
ASM
       PUSH DS
       TEST Exp, 1
       JZ   @@1
       LDS  SI, tVar
       JMP  @@2
@@1:   LDS  SI, fVar
@@2:   LES  DI, @Result
       XOR  CH, CH
       MOV  CL, BYTE PTR DS:[SI]
       MOV  BYTE PTR ES:[DI], CL
       INC  DI
       INC  SI
       CLD
       REP  MOVSB
       POP  DS
END;

{*****************************************************************************
 * Function ...... IIF()
 * Purpose ....... To return an integer based on a boolean expression
 * Parameters .... Exp        Boolean expression to evaluate
 *                 tVar       Result if <Exp> is TRUE
 *                 fVar       Result if <Exp> is FALSE
 * Returns ....... <tVar> if <Exp> is TRUE, <fVar> if <Exp> is FALSE
 * Notes ......... None
 * Author ........ Martin Richardson
 * Date .......... May 13, 1992
 *****************************************************************************}
FUNCTION IIF( Exp: BOOLEAN; tVar, fVar: LONGINT ): LONGINT; ASSEMBLER;
ASM
     TEST Exp, 1
     JZ   @@1
     MOV  AX, WORD PTR tVar[0]
     MOV  DX, WORD PTR tVar[2]
     JMP  @@2
@@1: MOV  AX, WORD PTR fVar[0]
     MOV  DX, WORD PTR fVar[2]
@@2:
END;

{*****************************************************************************
 * Function ...... RIF()
 * Purpose ....... To return a real based on a boolean expression
 * Parameters .... Exp        Boolean expression to evaluate
 *                 tVar       Result if <Exp> is TRUE
 *                 fVar       Result if <Exp> is FALSE
 * Returns ....... <tVar> if <Exp> is TRUE, <fVar> if <Exp> is FALSE
 * Notes ......... None
 * Author ........ Martin Richardson
 * Date .......... May 13, 1992
 *****************************************************************************}
FUNCTION RIF( Exp : BOOLEAN; tVar, fVAR : REAL ) : REAL;
BEGIN
     IF Exp THEN RIF := tVAR ELSE RIF := fVar;
END;
