/*
 * Scan 'C' Header File
 * Written by Thomas Krehbiel
 *
 * ScanBase prototypes.
 *
 */

#ifndef SCAN2_PROTOS_H

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef SCAN_DRAW_H
#include <scan/draw.h>
#endif
#ifndef SCAN_WEDGE_H
#include <scan/wedge.h>          /* for WedgeProto */
#endif

#ifndef REGARGS

 #define __STD(A,F)    A F
 #define __REG(A,F)    A F

#define __D0
#define __D1
#define __D2
#define __D3
#define __D4
#define __D5
#define __D6
#define __D7
#define __A0
#define __A1
#define __A2
#define __A3
#define __A4
#define __A5
#define __A6

#else

#ifdef LATTICE
 #define __STD(A,F)    A F
 #define __REG(A,F)    A __asm F
#endif

#ifdef _DCC
 #define __STD(A,F)    A F
 #define __REG(A,F)    __regargs A F
#endif

#define __D0            register __d0
#define __D1            register __d1
#define __D2            register __d2
#define __D3            register __d3
#define __D4            register __d4
#define __D5            register __d5
#define __D6            register __d6
#define __D7            register __d7
#define __A0            register __a0
#define __A1            register __a1
#define __A2            register __a2
#define __A3            register __a3
#define __A4            register __a4
#define __A5            register __a5
#define __A6            register __a6

#endif

/*
 * Scan.library functions:
 */

__REG(void,             SB_HidePanel) (void);
__REG(void,             SB_ShowPanel) (void);
__REG(void,             SB_ArrangePanel) (void);
__REG(void,             SB_ShowStatus) (__A0 struct Buffer *buf);

__REG(void,             SB_BeginBar) (__A0 char *, __D0 int, __D1 BOOL);
__REG(void,             SB_EndBar) (__A0 char *);
__REG(int,              SB_Bar) (__D0 int);

__REG(void,             SB_Error) (void);
__REG(void,             SB_VErrorf) (__A0 char *, __A1 ULONG *);
__REG(void,             SB_TogglePanel) (void);

__REG(int,              SB_SerOpen) (__A0 char *, __D0 int, __D1 long, __D2 BOOL);
__REG(void,             SB_SerClose) (void);
__REG(void,             SB_SerBaud) (__D0 long);
__REG(void,             SB_SerRead) (__A0 UBYTE *, __D0 int);
__REG(int,              SB_TimedSerRead) (__A0 UBYTE *, __D0 int, __D1 int);
__REG(void,             SB_SerPutc) (__D0 UBYTE);
__REG(void,             SB_SerWrite) (__A0 UBYTE *, __D0 int);
__REG(void,             SB_SerFlush) (void);
__REG(void,             SB_SerDisable) (void);
__REG(void,             SB_SerEnable) (void);
__REG(int,              SB_SerDirect) (void);

__REG(void,             SB_Ged_Set) (__A0 struct Window *, __D0 short, __D1 long);
__REG(long,             SB_Ged_Get) (__A0 struct Window *, __D0 short);
__REG(void,             SB_Ged_Activate) (__A0 struct Window *, __D0 short);
__REG(void,             SB_Ged_Enable) (__A0 struct Window *, __D0 short, __D1 short);

__REG(struct BitMap *,  SB_AllocChipBitMap) (__D0 int w, __D1 int h, __D2 int d);
__REG(struct BitMap *,  SB_AllocFastBitMap) (__D0 int w, __D1 int h, __D2 int d);
__REG(void,             SB_DeleteBitMap) (__A0 struct BitMap *bm);
__REG(void,             SB_ClearBitMap) (__A0 struct BitMap *bm);
__REG(int,              SB_CopyBitMap) (__A0 struct BitMap *src, __A1 struct BitMap *dst);

__REG(void,             SB_SetError) (__D0 int code);
__REG(int,              SB_GetError) (void);

__REG(void *,           SB_DAlloc) (__D0 ULONG, __D1 ULONG, __A0 char *, __A1 char *, __D2 LONG);
__REG(void,             SB_DFree) (__A1 void *, __D0 ULONG, __A0 char *, __A2 char *, __D1 LONG);

__REG(int,              SB_IsBuffer) (void);
__REG(void,             SB_FreeBuffer) (void);
__REG(int,              SB_InitBuffer) (__A0 char *, __D0 LONG, __D1 LONG, __D2 LONG, __D3 LONG, __D4 ULONG);
__REG(struct Buffer *,  SB_ObtainBuffer) (__D0 int);
__REG(void,             SB_ReleaseBuffer) (__A0 struct Buffer *);
__REG(int,              SB_GetBufLine) (__A0 struct Buffer *, __A1 UBYTE **, __A2 UBYTE **, __A3 UBYTE **, __D0 LONG);
__REG(int,              SB_PutBufLine) (__A0 struct Buffer *);
__REG(int,              SB_PutNewBufLine) (__A0 struct Buffer *, __A1 UBYTE *, __A2 UBYTE *, __A3 UBYTE *, __D0 LONG);
__REG(int,              SB_PutNewBufLine1) (__A0 struct Buffer *, __A1 UBYTE *, __D0 LONG, __D1 LONG);
__REG(int,              SB_GetBufVLine) (__A0 struct Buffer *, __A1 UBYTE **, __A2 UBYTE **, __A3 UBYTE **, __D0 LONG);
__REG(int,              SB_PutBufVLine) (__A0 struct Buffer *);
__REG(int,              SB_PutNewBufVLine) (__A0 struct Buffer *, __A1 UBYTE *, __A2 UBYTE *, __A3 UBYTE *, __D0 LONG);
__REG(int,              SB_PutNewBufVLine1) (__A0 struct Buffer *, __A1 UBYTE *, __D0 LONG, __D1 LONG);

__REG(void,             SB_RenderVirtual) (void);
__REG(void,             SB_RenderPartVirtual) (__D0 LONG, __D1 LONG, __D2 LONG, __D3 LONG);
__REG(void,             SB_VirtualTranslate) (__A0 short *, __A1 short *);
__REG(void,             SB_GetVCoords) (__A0 struct IntuiMessage *, __A1 short *, __A2 short *);
__REG(void,             SB_VirtRow24) (__A0 UBYTE *, __A1 UBYTE *, __A2 UBYTE *, __D0 LONG, __D1 LONG);
__REG(void,             SB_ColorVirtual) (__D0 LONG);
__REG(void,             SB_ClearVirtual) (void);
__REG(void,             SB_VirtRow8) (__A0 UBYTE *, __D0 LONG, __D1 LONG, __D2 LONG);
__REG(void,             SB_VirtCol8) (__A0 UBYTE *, __D0 LONG, __D1 LONG, __D2 LONG);
__REG(void,             SB_VirtualTempClose) (void);
__REG(void,             SB_VirtualTempOpen) (void);

__REG(void,             SB_RequestNewRender) (void);

__REG(BOOL,             SB_DoQuantize) (__D0 short, __D1 short, __A0 struct Buffer *, __A1 struct Mask *, __A2 UBYTE *, __D2 short);

__REG(struct Buffer *,  SB_AllocBuffer) (__A0 char *, __D0 short, __D1 short, __D2 short, __D3 short, __D4 short);
__REG(int,              SB_ReplaceBuffer) (__A0 struct Buffer *, __A1 struct Buffer *);
__REG(void,             SB_KillBuffer) (__A0 struct Buffer *);

__REG(BOOL,             SB_ProcessRegion) (__A0 char *, __A1 struct Buffer *, __A2 struct Mask *, __A3 void (*)(UBYTE *, UBYTE *, UBYTE *), __A4 void (*)(UBYTE *));
__REG(BOOL,             SB_ProcessPlane) (__A0 char *, __A1 struct Buffer *, __A2 struct Mask *, __D0 short, __A3 void (*)(UBYTE *));
__REG(BOOL,             SB_SaveUndo) (__A0 struct Buffer *, __D0 short, __D1 short, __D2 short, __D3 short);
__REG(BOOL,             SB_RestoreUndo) (__D0 BOOL);

__REG(BOOL,             SB_InitHook) (void);
__REG(void,             SB_CleanupHook) (void);
__REG(BOOL,             SB_EasyProcess) (__A0 char *, __A1 void (*)(UBYTE *, UBYTE *, UBYTE *, short, short), __A2 void (*)(UBYTE *, short, short));

__REG(void,             SB_PreOverscan) (__A0 struct NewScreen *);
__REG(void,             SB_PostOverscan) (__A0 struct Screen *);

__REG(BOOL,             SB_VBoolRequest) (__A0 char *, __A1 ULONG *);
__REG(char *,           SB_StringRequest) (__A0 char *, __A1 char *);
__REG(long,             SB_IntegerRequest) (__A0 char *, __D0 long, __D1 long, __D2 long);

__REG(BOOL,             SB_SetCurrentPalette) (__A0 UBYTE *pal, __D0 int count);
__REG(BOOL,             SB_GetPaletteStruct) (__A0 struct Palette *pal);
__REG(BOOL,             SB_IsRangeLocked) (__D0 short range);
__REG(BOOL,             SB_IsRegisterLocked) (__D0 short reg);
__REG(void,             SB_ModifyPalette) (__D0 short reg, __D1 short r, __D2 short g, __D3 short b);
__REG(short,            SB_UnlockedColors) (__D0 short);
__REG(void,             SB_RefreshPalette) (void);

__REG(struct Screen *,  SB_OpenRenderScreen) (__A0 struct NewScreen *, __D0 ULONG, __D1 ULONG);
__REG(void,             SB_CloseRenderScreen) (__A0 struct Screen *);
__REG(void,             SB_DrawRenderArea) (void);

__REG(void,             SB_SetModGad) (__A0 struct ModuleBase *, __D0 int, __D1 long);
__REG(short,            SB_Ged_Create) (__A0 struct GedContext *, __A1 struct NewGad *, __A2 char **);
__REG(void,             SB_Ged_Delete) (__A0 struct GedContext *);
__REG(void,             SB_Ged_Add) (__A0 struct GedContext *, __A1 struct Window *);
__REG(void,             SB_Ged_Remove) (__A0 struct GedContext *, __A1 struct Window *);
__REG(int,              SB_ScanWindow) (__A0 struct NewWindow *, __A1 struct NewGad *, __D0 int, __A2 int (*)(struct Window *, struct NewGad *), __A3 int (*)(struct Window *, struct Gadget *), __A4 char **);
__REG(struct IntuiMessage *, SB_Ged_GetIMsg) (__A0 struct Window *, __A1 short *);

__REG(void,             SB_VInfoRequest) (__A0 char *, __A1 ULONG *);

__REG(BOOL,             SB_CheckMask) (__A0 struct Mask *, __D0 short, __D1 short);

__REG(void,             SB_RollScreenUp) (__D0 int);
__REG(void,             SB_RollScreenDown) (void);

__REG(void,             SB_InstallCustomMask) (__A0 struct Mask *);
__REG(void,             SB_FreeMask) (__A0 struct Mask *);
__REG(struct Mask *,    SB_BuildRectMask) (__D0 short, __D1 short, __D2 short, __D3 short);
__REG(struct Mask *,    SB_BuildOvalMask) (__D0 short, __D1 short, __D2 short, __D3 short, __D4 BOOL);
__REG(struct Mask *,    SB_BuildPolyMask) (__A0 POINT *);
__REG(struct Mask *,    SB_BuildFloodMask) (__A0 struct Buffer *, __D0 short, __D1 short, __D2 short);
__REG(void,             SB_SetRegionTool) (__D0 short);

__REG(BOOL,             SB_SaveBuffer) (__A0 char *, __A1 char *, __A2 char *);
__REG(BOOL,             SB_LoadBuffer) (__A0 char *, __A1 char *, __D0 int);

__REG(int,              SB_ParseCommand) (__A0 char *, __A1 struct RexxMsg *);
__REG(BOOL,             SB_RenderPalette) (__A0 struct Buffer *, __A1 struct Mask *, __D0 int, __A2 UBYTE *, __D1 int);

__REG(void,             SB_RedrawFull) (void);
__REG(void,             SB_RedrawArea) (__D0 int, __D1 int, __D2 int, __D3 int);

__REG(int,              SB_ListRequester) (__A0 char *, __A1 struct ListView *, __D0 int);

__REG(int,              SB_VThreeRequest) (__A0 char *, __A1 char *, __A2 char *, __A3 char *, __A4 ULONG *);

__REG(BOOL,             SB_UnlockResource) (__D0 ULONG);
__REG(void,             SB_RelockResource) (__D0 ULONG);
__REG(char *,           SB_NewGetFile) (__A0 struct FileInfo *, __A1 char *, __D0 ULONG);
__REG(BOOL,             SB_TakeOver) (__D0 BOOL);
__REG(struct Buffer *,  SB_ReadBuffer) (__A0 char *, __A1 char *);
__REG(BOOL,             SB_SaveBrush) (__A0 struct Buffer *, __A1 char *, __A2 char *);

__REG(BOOL,             SB_SaveMapped) (__A0 char *, __A1 char *, __A2 struct MappedImage *, __A3 char *);

__REG(struct BIO *,     SB_BOpen) (__A0 char *, __D0 ULONG, __D1 ULONG);
__REG(void,             SB_BClose) (__A0 struct BIO *);
__REG(BOOL,             SB_BPutc) (__A0 struct BIO *, __D0 UBYTE);
__REG(BOOL,             SB_BPuts) (__A0 struct BIO *, __A1 UBYTE *);
__REG(int,              SB_BGetc) (__A0 struct BIO *);
__REG(int,              SB_BGets) (__A0 struct BIO *, __A1 UBYTE *, __D0 int);
__REG(int,              SB_BWrite) (__A0 struct BIO *, __A1 UBYTE *, __D0 int);
__REG(int,              SB_BRead) (__A0 struct BIO *, __A1 UBYTE *, __D0 int);

__REG(void,             SB_CloseWindowSafely) (__A0 struct Window *);

__REG(void,             SB_RequestNewScanner) (void);
__REG(void,             SB_RequestNewPrinter) (void);

__REG(BOOL,             SB_VSetResult) (__A0 struct RexxMsg *, __A1 char *, __A2 ULONG *);

__REG(void,             SB_PrepareNW) (__A0 struct NewWindow *, __D0 int, __D1 int, __D2 BOOL);

__REG(void,             SB_GetPalette) (__D0 short, __A0 short *, __A1 short *, __A2 short *);

__REG(char **,          SB_ReadText) (__A0 char *, __D0 int);
__REG(void,             SB_FreeText) (__A0 char **, __D0 int);

__REG(struct DitherArgs *, SB_InitDither) (__A0 struct NewGad *, __A1 struct NewGad *, __A2 struct NewGad *);
__REG(void,             SB_FreeDither) (__A0 struct DitherArgs *);
__REG(void,             SB_DoDither) (__A0 struct Buffer *, __A1 struct DitherArgs *);
__REG(void,             SB_Help) (__A0 char *, __A1 char *);

__REG(BOOL,             SB_AddRawWedge) (__A0 char *, __A1 int (*)(WedgeProto), __A2 ULONG);
__REG(void,             SB_RemoveWedge) (__A0 char *, __A1 char *);
__REG(void,             SB_RemoveAllWedges) (void);
__REG(BOOL,             SB_VDoRawWedge) (__A0 char *, __A1 VOID *, __A2 ULONG *);
__REG(void,             SB_QuickPix) (__A0 UBYTE **, __A1 LONG *, __A2 LONG *, __D0 LONG, __D1 LONG);
__REG(void,             SB_QuickLine) (__A0 UBYTE **, __A1 LONG *, __A2 LONG *, __A3 UBYTE *, __D0 LONG, __D1 LONG);

__REG(int,              SB_GedWin) (__A0 struct NewWindow *, __A1 struct NewGad *, __D0 int, __A2 int (*)(), __A3 int (*)(), __A4 char **);
__REG(int,              SB_VMWriteAll) (__A0 struct VM_Handle *);
__REG(void,             SB_VMPageChanged) (__A0 struct VM_Handle *, __D0 ULONG);
__REG(APTR,             SB_VMGetPage) (__A0 struct VM_Handle *, __D0 ULONG);

__REG(long,             SB_NumberRequest) (__A0 char *, __D0 long, __D1 long, __D2 long);

__REG(void,             SB_BFlush) (__A0 struct BIO *);
__REG(int,              SB_BSeek) (__A0 struct BIO *, __D0 int, __D1 int);

__REG(int,              SB_VPickFromList) (__A0 char **, __D0 int, __D1 int, __A1 ULONG *);
__REG(int,              SB_LangListRequest) (__A0 char *, __A1 long **, __D0 int, __D1 int, __D2 int, __D3 int, __A2 char **);
__REG(int,              SB_TextListRequest) (__A0 char *, __A1 char **, __D0 int, __D1 int, __D2 int);
__REG(struct ListNode *, SB_PickFromListA) (__A0 struct MinList *);
__REG(struct Blend *,   SB_CreateBlend) (__A0 struct Mask *);
__REG(void,             SB_DeleteBlend) (__A0 struct Blend *);
__REG(short,            SB_mixer) (__D0 short, __D1 short, __D2 short);

__REG(int,              SB_GetBufLines) (__A0 struct Buffer *, __A1 UBYTE **, __A2 UBYTE **, __A3 UBYTE **, __D0 short, __D1 short);
__REG(int,              SB_PutBufLines) (__A0 struct Buffer *, __D0 short, __D1 short);

__REG(void,             SB_NewPreOverscan) (__A0 struct NewScreen *, __D0 ULONG);

__REG(int,              SB_IsAnimation) (__A0 char *, __A1 char *);

/*
 * Not in scan.library, but usually part of the stub library:
 */

__STD(void,             SB_Errorf) (char *, ...);
__STD(BOOL,             SB_BoolRequest) (char *, ...);
__STD(void,             SB_InfoRequest) (char *, ...);
__STD(int,              SB_ThreeRequest) (char *, char *, char *, char *, ...);
__STD(BOOL,             SB_SetResult) (struct RexxMsg *, char *, ...);
__STD(BOOL,             SB_DoRawWedge) (char *, VOID *, ...);
__STD(int,              SB_PickFromList) (char **, int, int, ...);

__STD(void,             SB_msprintf) (char *, ...);

__STD(int,              SB_ChangeScanner) (GedButtonProto);
__STD(int,              SB_ChangeRender) (GedButtonProto);
__STD(int,              SB_ChangePrinter) (GedButtonProto);

__STD(int,              SB_MatchArg) (char *, ...);


#define SCAN2_PROTOS_H
#endif
