A89: C header file


[Prev][Next][Index][Thread]

A89: C header file



Jason Thorpe (JDoggSk8R@aol.com) discovered the TI-89/TI-92+ C header file on 
TI's website.

This might be useful for programming C or something...
// You must define either _92 or _89 depending 
// on the platform you want to build for
// #define _89

#define _92

/*==============================================================================*/

#ifndef TRUE
#define TRUE  (1u)
#define FALSE (0u)
#endif

#define H_NULL       0

typedef unsigned char  BYTE;
typedef unsigned char  UCHAR;
typedef unsigned short BOOL;
typedef unsigned short WORD;
typedef unsigned short USHORT;
typedef unsigned int   UINT;
typedef unsigned long  DWORD;
typedef unsigned long  ULONG;
typedef signed char    SBYTE;
typedef signed char    SCHAR;
typedef signed short   SWORD;
typedef signed short   SSHORT;
typedef signed int     SINT;
typedef signed long    SDWORD;
typedef signed long    SLONG;

typedef unsigned short HANDLE;
/*==============================================================================*/

#define ValidateRect(r) assert(r.xy.x0 <= MAX_X && r.xy.x1 <= MAX_X &&  \
r.xy.y0 <= MAX_Y && r.xy.y1 <= MAX_Y && r.xy.x0 <= r.xy.x1 && r.xy.y0 <= r.xy.y1 )
#define ValidateRectP(r) assert(r->xy.x0 <= MAX_X && r->xy.x1 <= MAX_X &&  \
r->xy.y0 <= MAX_Y && r->xy.y1 <= MAX_Y && r->xy.x0 <= r->xy.x1 && r->xy.y0 <= r->xy.y1 )
#define ValidateX(x) assert(x >= 0 && x <= MAX_X)
#define ValidateY(y) assert(y >= 0 && y <= MAX_Y)
#define ValidateFont(f) assert(f <= F_8x10)
typedef unsigned char SCR_COORDS;
#define BITMAP_HDR_SIZE   4

// #pragma pack(1)
typedef union {
struct {
  SCR_COORDS x0, y0;
  SCR_COORDS x1, y1;
} xy;
unsigned long l;
} SCR_RECT;
// #pragma pack()


#if defined(_92)
#define MAX_X 239
#define MAX_Y 127

#elif defined(_89)
#define MAX_X 159
#define MAX_Y 99

#else
#error Target product not defined
#endif

typedef signed short WIN_COORDS;

typedef struct {unsigned short i[16];} ICON;
typedef unsigned short *pICON;

// #pragma pack(1)

typedef struct {
  WORD NumRows;
  WORD NumCols;
  BYTE Data[1]; 	/* should be [] */
} BITMAP;
// #pragma pack()

typedef struct {
  WIN_COORDS x0, y0;
  WIN_COORDS x1, y1;
} WIN_RECT;

typedef struct {
  WIN_COORDS x0, y0;
} WIN_POINT;

enum Attrs { A_REVERSE=0, A_NORMAL=1, A_XOR, A_SHADED, A_REPLACE, A_OR,
	     A_AND, A_THICK1, A_SHADE_V, A_SHADE_H, A_SHADE_NS, A_SHADE_PS };
enum BoxAddrs { B_NORMAL=0x10, B_ROUNDED=0x20, B_DOUBLE=0x40, B_CUT=0x80 };
enum Fonts { F_4x6, F_6x8, F_8x10 };

/*  Defines / Structures  */

#define WinEnd(w)
#define WinSetCursor(w,x,y) (w)->CursorX=x; (w)->CursorY=y
#define WinShow(w) (w)->Flags |= WF_VISIBLE

enum WinFlags { WF_SYS_ALLOC=0x0001, WF_STEAL_MEM=0x0002,
		WF_DONT_REALLOC=0x0004, WF_ROUNDEDBORDER=0x0008,
		WF_SAVE_SCR=0x0010, WF_DUP_SCR=0x0020, WF_TTY=0x0040,
		WF_ACTIVE=0x0080, WF_NOBORDER=0x0100, WF_NOBOLD=0x0200,
		WF_DUP_ON=0x0400, WF_VIRTUAL=0x0800, WF_TITLE=0x1000,
		WF_DIRTY=0x2000, WF_TRY_SAVE_SCR=0x4010, WF_VISIBLE=0x8000 };

typedef struct WindowStruct {
  WORD Flags;		       /* WinFlags */
  BYTE CurFont; 	       /* Current font */
  BYTE CurAttr; 	       /* Current text/line attribute */
  BYTE Background;	       /* Background attribute */
  SINT TaskId;		       /* Task ID of owner */
  WIN_COORDS CurX, CurY;       /* Current X,Y position (window coordinates) */
  WIN_COORDS CursorX, CursorY; /* Cursor X,Y position */
  SCR_RECT Client;	       /* Client region of window (excludes border) */
  SCR_RECT Window;	       /* Window region (entire window inc border) */
  SCR_RECT Clip;	       /* Current clipping region */
  SCR_RECT Port;	       /* Port region for DUP_SCR */
  HANDLE DupScr;	       /* Duplicated or saved screen area */
  struct WindowStruct *Next;   /* Windows kept in linked list */
  char *Title;		       /* Optional title */
} WINDOW;

void ValidateWin( WINDOW *w );

WIN_COORDS WinWidth( WINDOW *w );
WIN_COORDS WinHeight( WINDOW *w );

/*==============================================================================*/


void WinActivate( WINDOW *w );
BYTE WinAttr( WINDOW *w, BYTE Attr );
void WinBackupToScr( WINDOW * w);
void WinBackground( WINDOW *w, BYTE Attr );
void WinBegin( WINDOW *w );
BOOL WinBitmapGet( WINDOW *w, const WIN_RECT *WinRect, BITMAP *Bitmap );
void WinBitmapPut( WINDOW *w, SWORD x0, SWORD y0, BITMAP *Bitmap, WORD Attr);
WORD WinBitmapSize( WINDOW *w, const WIN_RECT WinRect );
void WinChar( WINDOW *w, char c );
void WinCharXY(WINDOW *w, WIN_COORDS x, WIN_COORDS y, char c, short Count );
void WinClose( WINDOW *w );
void WinClr( WINDOW *w );
void WinDeactivate( WINDOW *w );
void WinDupStat( WINDOW *w, BOOL Stat );
void WinEllipse( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0, WIN_COORDS a0, WIN_COORDS b0 );
void WinEnd( WINDOW *w );
void WinFill( WINDOW *w, const WIN_RECT r, BYTE Attr );
void WinFillLines2( WINDOW *w, const WIN_RECT *l0, const WIN_RECT *l1, BYTE Attr );
void WinFillTriangle( WINDOW *w, WIN_COORDS ax, WIN_COORDS ay, WIN_COORDS bx,
  WIN_COORDS by, WIN_COORDS cx, WIN_COORDS cy, BYTE Attr );
void WinFont( WINDOW *w, BYTE Font );
void WinGetCursor(WINDOW *w,WIN_COORDS*x,WIN_COORDS*y);
WIN_COORDS WinHeight( WINDOW *w );
void WinHide( WINDOW *w );
void WinHome( WINDOW *w );
void WinIcon( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0, const WORD *Icon );
void WinLine( WINDOW *w, const WIN_RECT Line );
void WinLineNC( WINDOW *w, const WIN_RECT Line );
void WinLineRel( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
void WinLineTo( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
void WinMoveCursor( WINDOW *w, WIN_COORDS x, WIN_COORDS y );
void WinMoveRel( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
void WinMoveTo( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
BOOL WinOpen( WINDOW *w, const WIN_RECT r, WORD Flags, ... );
WORD WinPixGet( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
void WinPixSet( WINDOW *w, WIN_COORDS x0, WIN_COORDS y0 );
void WinRect( WINDOW *w, const WIN_RECT r, BYTE BoxAttr );
BOOL WinReOpen( WINDOW *w, const WIN_RECT *wr, WORD Flags, ... );

void WinScrollH( WINDOW *w, const WIN_RECT *r, SWORD NumCols );
void WinScrollV( WINDOW *w, const WIN_RECT *r, SWORD NumRows );
void WinStr( WINDOW *w, char *Str );
void WinStrXY( WINDOW *w, WIN_COORDS x, WIN_COORDS y, char *Str );


WIN_COORDS WinWidth( WINDOW *w );

/*==============================================================================*/

short FreeHandles( void );
HANDLE HeapAlloc( DWORD Hlen );
HANDLE HeapAllocHigh( DWORD Hlen );
HANDLE HeapAllocHighThrow( DWORD Hlen );
HANDLE HeapAllocThrow( DWORD Hlen );
DWORD HeapAvail( void );
void HeapCompress( void );
void HeapFree( HANDLE Handle );
void HeapFreeIndir( HANDLE *PtrHandle );
BOOL   HeapGetLock( HANDLE handle );
HANDLE HeapLock( HANDLE Handle );
DWORD HeapMax( void );
HANDLE HeapMoveHigh( HANDLE h );
HANDLE HeapRealloc( HANDLE Handle, WORD NewHsize );
WORD HeapSize( HANDLE Handle );
HANDLE HeapUnlock( HANDLE Handle );
void * Hlock( HANDLE h );
void * HeapDeref(HANDLE h);

/*==============================================================================*/

typedef (* const ProcPtr)(void);

#define ProcTableVector (200)


#define ASAP_init \
        ProcPtr * const ProcTable = *(ProcPtr **) ProcTableVector

#define ASAP_use_crt() \
        asm(" .cmnt "); ((char *)ProcTable)[0] = ((char *)ProcTable)[1]; asm(" .endc ")

//#define ASAP_versionCheck() \
//        if ((const long)ProcTable[-1] < ASAP_COUNT) ER_throw(ER_DIMENSION)

//#define ASAP_need(highest) \
//        if ((highest) >= (const long)ProcTable[-1]) ER_throw(ER_DIMENSION)

/* SETUP_PROC_TABLE is deprecated */
#define SETUP_PROC_TABLE \
        ProcPtr * const ProcTable = *(ProcPtr **) ProcTableVector

/* ASAPinit is deprecated */
#define ASAPinit() \
        asm(" .cmnt "); ((char *)ProcTable)[0] = ((char *)ProcTable)[1]; asm(" .endc ")

#ifndef _NOCALLBACK
#define _NOCALLBACK
DWORD NoCallBack(WORD a,DWORD b) {return 1;}
#endif

/*==============================================================================*/

typedef void (* const ProcPtr_24)(void);
typedef void (* const ProcPtr_135)(HANDLE);
typedef HANDLE (* const ProcPtr_190)(HANDLE);
typedef void (* const ProcPtr_206)(short);
typedef DWORD (* const ProcPtr_218)(void);
typedef DWORD (* const ProcPtr_219)(HANDLE);
typedef void (* const ProcPtr_220)(HANDLE *);
typedef HANDLE (* const ProcPtr_221)(DWORD);
typedef HANDLE (* const ProcPtr_222)(void const *);
typedef HANDLE (* const ProcPtr_223)(HANDLE,DWORD);
typedef void * (* const ProcPtr_224)(HANDLE);
typedef BOOL (* const ProcPtr_225)(HANDLE);
typedef short (* const ProcPtr_226)(void);
typedef void (* const ProcPtr_404)(WINDOW *);
typedef BYTE (* const ProcPtr_405)(WINDOW *,BYTE);
typedef void (* const ProcPtr_406)(WINDOW *,BYTE);
typedef BOOL (* const ProcPtr_407)(WINDOW *,const WIN_RECT *,BITMAP *);
typedef void (* const ProcPtr_408)(WINDOW *,SWORD,SWORD,BITMAP *,WORD);
typedef WORD (* const ProcPtr_409)(WINDOW *,const WIN_RECT *);
typedef void (* const ProcPtr_410)(WINDOW *,char);
typedef void (* const ProcPtr_411)(WINDOW *,WIN_COORDS,WIN_COORDS,char,short);
typedef BOOL (* const ProcPtr_412)(WINDOW *,BOOL);
typedef void (* const ProcPtr_413)(WINDOW *,WIN_COORDS,WIN_COORDS,WIN_COORDS,WIN_COORDS);
typedef void (* const ProcPtr_414)(WINDOW *,const WIN_RECT *,BYTE);
typedef void (* const ProcPtr_415)(WINDOW *,WIN_COORDS,WIN_COORDS,WIN_COORDS,WIN_COORDS,WIN_COORDS,WIN_COORDS,BYTE);
typedef void (* const ProcPtr_416)(WINDOW *,const WIN_RECT *);
typedef void (* const ProcPtr_417)(WINDOW *,WIN_COORDS,WIN_COORDS);
typedef void (* const ProcPtr_418)(WINDOW *,WIN_COORDS *,WIN_COORDS *);
typedef void (* const ProcPtr_419)(WINDOW *,const WIN_RECT *,const WIN_RECT *,BYTE);
typedef BOOL (* const ProcPtr_420)(WINDOW *,const WIN_RECT *,WORD,...);
typedef WORD (* const ProcPtr_421)(WINDOW *,WIN_COORDS,WIN_COORDS);
typedef void (* const ProcPtr_422)(WINDOW *,const WIN_RECT *,SWORD);
typedef void (* const ProcPtr_423)(WINDOW *,WIN_COORDS,WIN_COORDS,char *);
typedef void (* const ProcPtr_424)(WINDOW *,char *);
typedef void (* const ProcPtr_425)(WINDOW *,const SCR_RECT *);
typedef WIN_RECT * (* const ProcPtr_426)(const SCR_RECT *,WIN_RECT *);
typedef SCR_RECT * (* const ProcPtr_427)(SCR_RECT *);
typedef SCR_RECT * (* const ProcPtr_428)(const SCR_RECT *,const WIN_RECT *,SCR_RECT *);
typedef WIN_RECT * (* const ProcPtr_429)(const SCR_RECT *);
typedef WIN_RECT * (* const ProcPtr_430)(SWORD,SWORD,SWORD,SWORD);
typedef SCR_RECT * (* const ProcPtr_431)(const SCR_RECT *,const SCR_RECT *,short *);

//=================================================================================

#define WinActivate ((ProcPtr_404)ProcTable[1])
#define WinAttr ((ProcPtr_405)ProcTable[2])
#define WinBackupToScr ((ProcPtr_404)ProcTable[3])
#define WinBackground ((ProcPtr_406)ProcTable[4])
#define WinBegin ((ProcPtr_404)ProcTable[5])
#define WinBitmapGet ((ProcPtr_407)ProcTable[6])
#define WinBitmapPut ((ProcPtr_408)ProcTable[7])
#define WinBitmapSize ((ProcPtr_409)ProcTable[8])
#define WinCharXY ((ProcPtr_411)ProcTable[9])
#define WinChar ((ProcPtr_410)ProcTable[10])
#define WinClose ((ProcPtr_404)ProcTable[11])
#define WinClr ((ProcPtr_404)ProcTable[12])
#define WinDeactivate ((ProcPtr_404)ProcTable[13])
#define WinDupStat ((ProcPtr_412)ProcTable[14])
#define WinEllipse ((ProcPtr_413)ProcTable[15])
#define WinFill ((ProcPtr_414)ProcTable[16])
#define WinFillLines2 ((ProcPtr_419)ProcTable[17])
#define WinFillTriangle ((ProcPtr_415)ProcTable[18])
#define WinFont ((ProcPtr_406)ProcTable[19])
#define WinGetCursor ((ProcPtr_418)ProcTable[20])
#define WinHide ((ProcPtr_404)ProcTable[21])
#define WinHome ((ProcPtr_404)ProcTable[22])
#define WinLine ((ProcPtr_416)ProcTable[23])
#define WinLineNC ((ProcPtr_416)ProcTable[24])
#define WinLineTo ((ProcPtr_417)ProcTable[25])
#define WinLineRel ((ProcPtr_417)ProcTable[26])
#define WinMoveCursor ((ProcPtr_417)ProcTable[27])
#define WinMoveTo ((ProcPtr_417)ProcTable[28])
#define WinMoveRel ((ProcPtr_417)ProcTable[29])
#define WinOpen ((ProcPtr_420)ProcTable[30])
#define WinPixGet ((ProcPtr_421)ProcTable[31])
#define WinPixSet ((ProcPtr_417)ProcTable[32])
#define WinRect ((ProcPtr_414)ProcTable[33])
#define WinReOpen ((ProcPtr_420)ProcTable[34])
#define WinScrollH ((ProcPtr_422)ProcTable[35])
#define WinScrollV ((ProcPtr_422)ProcTable[36])
#define WinStr ((ProcPtr_424)ProcTable[37])
#define WinStrXY ((ProcPtr_423)ProcTable[38])

#define FreeHandles ((ProcPtr_226)ProcTable[571])
#define HeapAvail ((ProcPtr_218)ProcTable[143])
#define HeapAlloc ((ProcPtr_221)ProcTable[144])
#define HeapAllocHigh ((ProcPtr_221)ProcTable[146])
#define HeapAllocThrow ((ProcPtr_221)ProcTable[147])
#define HeapAllocHighThrow ((ProcPtr_221)ProcTable[148])
#define HeapCompress ((ProcPtr_24)ProcTable[149])
#define HeapFree ((ProcPtr_135)ProcTable[151])
#define HeapFreeIndir ((ProcPtr_220)ProcTable[152])
#define HeapLock ((ProcPtr_190)ProcTable[154])
#define HLock ((ProcPtr_224)ProcTable[153])
#define HeapGetLock ((ProcPtr_225)ProcTable[155])
#define HeapMax ((ProcPtr_218)ProcTable[156])
#define HeapMoveHigh ((ProcPtr_190)ProcTable[160])
#define HeapRealloc ((ProcPtr_223)ProcTable[157])
#define HeapSize ((ProcPtr_219)ProcTable[158])
#define HeapUnlock ((ProcPtr_190)ProcTable[159])
#define HeapDeref ((ProcPtr_224)ProcTable[150])


/*==============================================================================*/