/*/****************************************************************************
*          name: proto.h
*
*   description: Contains all the "extern" functions declarations
*
*      designed: g3d_soft
* last modified: $Author: unknown $, $Date: 94/11/24 11:50:08 $
*
*       version: $Id: PROTO.H 1.33 94/11/24 11:50:08 unknown Exp $
*
******************************************************************************/

extern VOID Decoder(BYTE *);         /*** CADDI command decoder ***/

/*** RC opcodes ***/

extern VOID (*SetFgColor())(VOID);
extern VOID (*SetFgIndex())(VOID);
extern VOID (*SetClipList())(VOID);
extern VOID (*SetBgColor())(VOID);
extern VOID (*SetBgIndex())(VOID);
extern VOID (*SetTrivialIn())(VOID);
extern VOID (*SetTransparency())(VOID);
extern VOID (*SetEndPoint())(VOID);
extern VOID (*SetLineStyle())(VOID);
extern VOID (*SetFillPattern())(VOID);
extern VOID (*SetLogicOp())(VOID);
extern VOID (*SetZBuffer())(VOID);
extern VOID (*InitRC())(VOID);
extern VOID (*Set2DViewport())(VOID);
extern VOID (*Set2DWindow())(VOID);
extern VOID (*Set2DWindow32())(VOID);
extern VOID (*SetLightSources())(VOID);
extern VOID (*SetSurfaceAttr())(VOID);
extern VOID (*SetViewer())(VOID);
extern VOID (*SetClip3D())(VOID);
extern VOID (*SetRenderData())(VOID);
extern VOID (*SetRenderMode())(VOID);
extern VOID (*ChangeMatrix())(VOID);
extern VOID (*SetOutline())(VOID);
extern VOID (*SetPlaneMask())(VOID);
extern VOID (*SetAsynchronousSwap())(VOID);
extern VOID (*SetLineStyleOffset())(VOID);

/*** SC opcodes ***/
extern VOID (*RenderScPolyLine())(VOID);
extern VOID (*RenderScPolygon())(VOID);
extern VOID (*SpanLine())(VOID);
extern VOID (*RenderSCPolyTriangle())(VOID);

/*** 2D opcodes ***/
extern VOID (*Render2DMultiPolyLine())(VOID);
extern VOID (*Render2DPolygon())(VOID);
extern VOID (*Render2DPolygon32())(VOID);

/*** MISC opcodes ***/
extern VOID (*Sync())(VOID);
extern VOID (*NoOp())(VOID);
extern VOID (*Clear())(VOID);
extern VOID (*SetBufferConfiguration())(VOID);
extern VOID (*SetBufferConfIndex())(VOID);
extern VOID (*SetBufferDummy())(VOID);
extern VOID (*SetBufferSideSide())(VOID);
extern VOID (*SetBufferFrontBack())(VOID);

extern VOID (*BadOpcode())(VOID);         /*** Non-existing opcode replacement ***/

/*** 3D opcodes ***/

extern VOID (*RenderPolyQuad())(VOID);
extern VOID (*RenderPolyLine())(VOID);
extern VOID (*Triangle())(VOID);
extern VOID (*RenderPolyTriangle())(VOID);

/*** MISC functions ***/

extern DWORD XformRGB24ToSliceFmt(DWORD);
extern DWORD XformMask24ToSliceFmt(DWORD);
extern VOID  DefCaddiSysRegToTitan(VOID);
extern VOID  SetHWtoRC(VOID);

/*** INIT functions ***/

extern BYTE* CaddiInit(BYTE*, BYTE*);
extern VOID  InitDefaultRC(VOID);
extern VOID  InitDefaultClipList(VOID);
extern VOID  CaddiClose(VOID);
extern BYTE* InitSysParm(VOID);
extern VOID  InitDefaultLSDB(VOID);

extern VOID MGASysInit(BYTE*);
extern VOID MGAVidInit(BYTE*, BYTE*);
extern DWORD GetMGAMctlwtst(DWORD, DWORD);
extern VOID SetMGALUT(volatile BYTE _Far *, BYTE*, BYTE, BYTE);
extern VOID GetMGAConfiguration(volatile BYTE _Far *, DWORD*, DWORD*, DWORD*);
extern SDWORD setFrequence(volatile BYTE _Far *, SDWORD, SDWORD);
extern SDWORD setTVP3026Freq(volatile BYTE _Far *, SDWORD, SDWORD, BYTE);

/*** 3D functions ***/

extern VOID CalcLSKB();

/*** Utility functions used to setup CADDI buffers ***/

extern DWORD BufDone(BYTE*);
extern DWORD BufNoOp(BYTE*, BYTE*, WORD);
extern DWORD BufSync(BYTE*);
extern DWORD BufSetFgColor(BYTE*, BYTE*, float, float, float);
extern DWORD BufSetBgColor(BYTE*, BYTE*, float, float, float);
extern DWORD BufSetLogicOp(BYTE*, BYTE*, WORD);
extern DWORD BufSetFillPattern(BYTE*, BYTE*, WORD, BYTE[8]);
extern DWORD BufSetLineStyle(BYTE*, BYTE*, WORD, DWORD);
extern DWORD BufSetEndPoint(BYTE*, BYTE*, WORD);
extern DWORD BufSetTransparency(BYTE*, BYTE*, WORD);
extern DWORD BufSetTrivialIn(BYTE*, BYTE*, WORD);
extern DWORD BufSetZBuffer(BYTE*, BYTE*, WORD, DWORD);
extern DWORD BufInitRC(BYTE*, BYTE*);
extern DWORD BufSet2DViewport(BYTE*, BYTE*, WORD, WORD, WORD, WORD);
extern DWORD BufSet2DWindow(BYTE*, BYTE*, SWORD, SWORD, SWORD, SWORD);
extern DWORD BufSet2DWindow32(BYTE*, BYTE*, SDWORD, SDWORD, SDWORD, SDWORD);
extern DWORD BufClear(BYTE*, BYTE*, WORD, float, float, float, float);
extern DWORD BufSetViewer(BYTE*, BYTE*, WORD, float, float, float, float, float, float);
extern DWORD BufSetSurfaceAttr(BYTE*, BYTE*, float, float, float, float, float, float,
                              float, float, float, float, float, float, float);
extern DWORD BufSetBufferConfiguration(BYTE*, BYTE*, BYTE, BYTE);
extern DWORD BufSetClip3D(BYTE*, BYTE*, WORD);
extern DWORD BufSetRenderData(BYTE*, BYTE*, DWORD);
extern DWORD BufSetRenderMode(BYTE*, BYTE*, WORD);
extern DWORD BufSetPlaneMask(BYTE*, BYTE*, WORD, DWORD);
extern DWORD BufSetLineStyleOffset(BYTE*, BYTE*, WORD);

/*** Blit functions ***/

extern VOID (*SetEnvBlitPlan(SWORD, SWORD, SWORD, SWORD, WORD, WORD, WORD))
            (SWORD, SWORD, SWORD, SWORD, WORD, WORD, WORD);
extern VOID (*SetEnvBlitPoly(SWORD, SWORD, SWORD, SWORD, WORD, WORD, WORD))
            (SWORD, SWORD, SWORD, SWORD, WORD, WORD, WORD);
extern VOID (*SetEnvIloadPlan(SWORD, SWORD, WORD, WORD, WORD, DWORD*))
            (SWORD, SWORD, WORD, WORD, WORD, DWORD*);
extern VOID (*SetEnvIloadPoly(SWORD, SWORD, WORD, WORD, WORD, DWORD*))
            (SWORD, SWORD, WORD, WORD, WORD, DWORD*);
extern VOID (*SetEnvIdumpPoly(SWORD, SWORD, WORD, WORD, WORD, DWORD*))
            (SWORD, SWORD, WORD, WORD, WORD, DWORD*);
extern VOID (*SetEnvIloadExp(SWORD, SWORD, WORD, WORD, WORD, DWORD*))
            (SWORD, SWORD, WORD, WORD, WORD, DWORD*);
extern VOID (*SetEnvIloadDither(SWORD, SWORD, WORD, WORD, WORD, DWORD*))
            (SWORD, SWORD, WORD, WORD, WORD, DWORD*);