/* csplash.h  05/03/01 */

/* Definitions for converted SPLash code */

/* Copyright (c) 2005 Allegro Consultants, Inc.        */

/* NOTE: these require compiling with 2-byte alignment */
/*       I.e., 32-bit values have to be storable into  */
/*       memory at addresses that are merely 2-byte    */
/*       aligned and not 4-byte aligned!               */
/*       With HP C, that would be "+u2"                */

#ifndef CSPLASH_H
#define CSPLASH_H

#ifndef NULL
#define NULL ((void *) 0)
#endif

#include <ctype.h>

/* mike: add some include files */
#define rename lib_rename
#include <stdio.h>
#undef rename
#include <stdlib.h>
#include <string.h>

extern int short CCODE(void);

#ifdef MPE
      /* on MPE, none of the above includes will */
      /* declare int16_t or int32_t              */
typedef short     int16_t;
typedef int       int32_t;
#endif

typedef int            ADR;            /* 32 bits */
typedef float          FLOAT32;
typedef double         FLOAT64;
typedef short          INT16;
typedef int            INT32;
typedef unsigned char  UINT8;
typedef unsigned char  UCHAR;
typedef unsigned short UINT16;
typedef unsigned int   UINT32;

#ifndef MPE
typedef long long int  INT64;
#endif

#ifndef MAXDATA
#define  MAXDATA       32767
#endif

#ifdef FROM_CSPLASH_C

#define EXTERN

INT16 STACK [MAXDATA];
INT32 CARRY       = 0;
INT32 TOS         = 0;
INT32 S           = 0;
INT32 X           = 0;

#else

#define EXTERN extern

EXTERN INT16 STACK [];
EXTERN INT32 CARRY;
EXTERN INT32 TOS;
EXTERN INT32 S;
EXTERN INT32 X;

#endif

#ifndef CCODE_CCG
#define CCODE_CCG  0
#define CCODE_CCL  1
#define CCODE_CCE  2
#endif

#define A STACK [TOS]
#define B STACK [TOS - 1]
#define C STACK [TOS - 2]

#define LA (UINT16) A
#define LB (UINT16) B
#define LC (UINT16) C

#define DA *((INT32 *) (STACK - 1))
#define DB *((INT32 *) (STACK - 3))

#define POP_ADDRESS (--TOS,    (*((char **)  (STACK + TOS--))))
#define POP_FLOAT32 (--TOS,    *((FLOAT32 *) (STACK + TOS--)))
#define POP_FLOAT64 (TOS -= 3, *((FLOAT64 *) (STACK + TOS--)))
#define POP_INT16   (STACK [TOS--])
#define POP_INT32   (--TOS,    *((INT32 *)   (STACK + TOS--)))
#define POP_UINT16  (          *((UINT16 *)  (STACK + TOS--)))

#define PUSH_ADDRESS *((char **)   (STACK + (TOS += 2) - 1))
#define PUSH_FLOAT32 *((FLOAT32 *) (STACK + (TOS += 2) - 1))
#define PUSH_FLOAT64 *((FLOAT64 *) (STACK + (TOS += 4) - 3))
#define PUSH_INT16   STACK [++TOS]
#define PUSH_INT32   *((INT32 *)   (STACK + (TOS += 2) - 1))
#define PUSH_UINT16  *((UINT16 *)  (STACK + ++TOS))

#define ADAX  X += POP_INT16
#define ADBX  X += B
#define ADD   { B = B + A; DEL; }
#define ADXA  A += X
#define ADXB  B += X
#define AND   { B = B & A; DEL; }
#define BRK   (not-implemented-yet)
#define BTOW  /* nop */
#define BTST  (not-implemented-yet)
#define CAB   { INT16 temp = C; C = B; B = A; A = temp; }
#define CLCY  CARRY = 0
#define CLOV  (not-implemented-yet)
#define CMP   (not-implemented-yet)
#define DADD  { DB = DB + DA; DDEL; }
#define DCMP  (not-implemented-yet)
#define DDEL  TOS -= 2
#define DDIV  { INT32 temp = DB; DB = temp / DA; DA = temp % DA; }
#define DDUP  { INT32 temp = DA; PUSH_INT32 = temp; }
#define DECA  A -= 1
#define DECB  B -= 1
#define DECX  X -= 1
#define DEL   TOS--
#define DELB  { B = A; TOS--; }
#define DFLT  { INT32 temp = POP_INT32; PUSH_FLOAT32 = temp; }
#define DIV   { INT16 temp = B; B = temp / A; A = temp % A; }
#define DIVL  { UINT16 temp1 = POP_UINT16, temp2 = POP_INT32; \
                PUSH_UINT16 = temp2 / temp1; \
                PUSH_UINT16 = temp2 % temp1; }
#define DLSZ  PUSH_UINT16 = 0xffff
#define DMUL  { DB = DB * DA; DDEL; }
#define DNEG  DA = -DA
#define DSUB  { DB = DB - DA; DDEL; }
#define DTST  (not-implemented-yet)
#define DUP   { INT16 temp = A; PUSH_INT16 = temp; }
#define DXCH  { INT32 temp = A; A = B; B = temp; }
#define DZRO  PUSH_INT32 = 0
#define EADD  (not-implemented-yet)
#define ECMP  (not-implemented-yet)
#define EDIV  (not-implemented-yet)
#define EMPY  (not-implemented-yet)
#define ENDP  (not-implemented-yet)
#define ENEG  (not-implemented-yet)
#define ESUB  (not-implemented-yet)
#define FADD  (not-implemented-yet)
#define FCMP  (not-implemented-yet)
#define FDIV  (not-implemented-yet)
#define FIXR  (not-implemented-yet)
#define FIXT  (not-implemented-yet)
#define FLT   (not-implemented-yet)
#define FMPY  (not-implemented-yet)
#define FNEG  (not-implemented-yet)
#define FSUB  (not-implemented-yet)
#define INCA  A += 1
#define INCB  B += 1
#define INCX  X := 1
#define LADD  { LB = LB + LA; DEL; }
#define LCMP  (not-implemented-yet)
#define LDIV  { UINT16 temp1 = POP_UINT16, temp2 = POP_INT32; \
                PUSH_UINT16 = temp2 / temp1; \
                PUSH_UINT16 = temp2 % temp1; }
#define LDXA  POP_INT16 = X
#define LDXB  B = X
#define LMPY  (not-implemented-yet)
#define LSUB  { LB = LB - LA; DEL; }
#define MFVA  (not-implemented-yet)
#define MPY   { B = B * A; DEL; }
#define MPYL  (not-implemented-yet)
#define MTVA  (not-implemented-yet)
#define NEG   A = -A
#define NOP   /* nop */
#define NOT   A = ~A
#define OR    { B = B | A; DEL; }
#define PARC  (not-implemented-yet)
#define PLDA  (not-implemented-yet)
#define PSTA  (not-implemented-yet)
#define STAX  X = POP_INT16
#define STBX  X = B
#define SUB   { B = B - A; DEL; }
#define TEST  (not-implemented-yet)
#define TRDB  (not-implemented-yet)
#define TRPB  (not-implemented-yet)
#define WTOB  (not-implemented-yet)
#define XAX   { INT16 temp = X; X = A; A = temp; }
#define XBR   (not-implemented-yet)
#define XBX   { INT16 temp = X; X = B; B = temp; }
#define XCH   { INT16 temp = B; B = A; A = temp; }
#define XOR   { B = B ^ A; DEL; }
#define ZERO  PUSH_INT16 = 0;
#define ZROB  B = 0
#define ZROX  X = 0

INT16  CCODE (void);

INT32  SPLash_move       (void *dst, void *src, INT32 len);
INT32  SPLash_move_a     (void *dst, void *src, INT32 stack_dec);
INT32  SPLash_move_an    (void *dst, void *src, INT32 stack_dec);
INT32  SPLash_move_ans   (void *dst, void *src, INT32 stack_dec);
INT32  SPLash_move_as    (void *dst, void *src, INT32 stack_dec);
INT32  SPLash_move_n     (void *dst, void *src, INT32 stack_dec);
INT32  SPLash_move_sd    (void *dst, void *src, INT32 len,
                          INT32 stack_dec);

INT32  SPLash_compare    (void *dst, void *src, INT32 len);
INT32  SPLash_compare_sd (void *dst, void *src, INT32 len,
                          INT32 stack_dec);

INT32  SPLash_scan_until (void *src, INT16 search_value,
                          INT32 stack_dec);
INT32  SPLash_scan_while (void *src, INT16 search_value,
                          INT32 stack_dec);

UINT32 SPLash_deposit    (UINT32 dst, UINT32 src, INT32 start,
                          INT32 len);
UINT32 SPLash_extract    (UINT32 src, INT32 start, INT32 len);

#endif            /* CSPLASH_H */

Updated [3khat16.ico]HP3000 [3khat16.ico]3kMail [archive16.gif]