
/******************************************************************************
*
*   start_lines.c --- Copyright 1988 Commodore-Amiga, Inc.
*
*	Source Control
*	--------------
*	$Header: start_lines.c,v 36.0 88/05/18 20:18:49 bart Exp $
*
*	$Locker: bart $
*
*	$Log:	start_lines.c,v $
*   Revision 36.0  88/05/18  20:18:49  bart
*   added to rcs for updating
*   
*
******************************************************************************/

#define MAXPOINTS	50
#define TMPRASWIDTH	640
#define	TMPRASHEIGHT 200

#define NTSC_HEIGHT 200
#define PAL_HEIGHT 256

#define NTSC_MAX_HEIGHT 200
#define PAL_MAX_HEIGHT 256

#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <graphics/gfx.h>
#include <graphics/gfxbase.h>
#include <graphics/clip.h>
#include <graphics/rastport.h>
#include <graphics/view.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>

#include <graphics/layers.h>
#include <intuition/intuition.h>

/*#define DEBUG*/
/*#define KPRINTF*/
/*#define NEWSCREEN*/

#ifdef KPRINTF
#define printf kprintf
#endif

#define TXHEIGHT 8

#define GADGETS
#define RBG_ID 0x0001
#define BBG_ID 0x0002

struct Image my_knob_image;

struct PropInfo my_knob =
{
	FREEVERT | AUTOKNOB,
	0,
	0,
	MAXBODY,
	MAXBODY/8
};

struct Gadget my_gadget =
{
	NULL,
	-16,0,16,-18,
	GRELHEIGHT|GRELRIGHT,
	GADGIMMEDIATE|RELVERIFY,
	PROPGADGET,
	&my_knob_image,
	NULL,
	NULL,
	0,
	&my_knob,
	RBG_ID,
	NULL
};

struct Image bb_knob_image;

struct PropInfo bb_knob =
{
	FREEHORIZ | AUTOKNOB,
	0,
	0,
	MAXBODY/8,
	MAXBODY
};

struct Gadget bb_gadget =
{
	&my_gadget,
	0,-8,-16,9,
	GRELWIDTH|GRELBOTTOM,
	GADGIMMEDIATE|RELVERIFY|BOTTOMBORDER,
	GZZGADGET|PROPGADGET,
	&bb_knob_image,
	NULL,
	NULL,
	0,
	&bb_knob,
	BBG_ID,
	NULL
};

struct Image rb_knob_image;

struct PropInfo rb_knob =
{
	FREEVERT | AUTOKNOB,
	0,
	0,
	MAXBODY,
	MAXBODY/8
};

struct Gadget rb_gadget =
{
	&bb_gadget,
	-15,10,16,-18,
	GRELHEIGHT|GRELRIGHT,
	GADGIMMEDIATE|RELVERIFY|RIGHTBORDER,
	GZZGADGET|PROPGADGET,
	&rb_knob_image,
	NULL,
	NULL,
	0,
	&rb_knob,
	RBG_ID,
	NULL
};

struct Gadget *vgadget_ptr = &rb_gadget;
struct Gadget *hgadget_ptr = &bb_gadget;

struct TextAttr TestFont =
    {
    "topaz.font",
    TXHEIGHT,
    0,
    0,
    };

long GfxBase = 0;
long LayersBase = 0;
long IntuitionBase = 0;

#define IS_PAL (((struct GfxBase *)GfxBase)->DisplayFlags & PAL)

struct	AreaInfo areainfo;
UWORD	areafill[(MAXPOINTS/2)*5];

startgfx(x,y,height, width, n_bit_Planess, palette, gfxproc,s,flags,sbitmap)
WORD x,y;
WORD height, width, n_bit_Planess;
UWORD *palette;
int (*gfxproc)();
UBYTE *s;
struct BitMap *sbitmap;		/* optional parameter */
{
	struct Window *window;
	struct RastPort *w=0;
	register i, j;
	int idcmp;
	struct NewWindow nw;
	UBYTE	*ras;

	GfxBase = OpenLibrary("graphics.library",32);
	if (GfxBase == NULL)
	{
#ifdef DEBUG
		printf("no graphics library\n");
#endif
		exit();
	}

	LayersBase = OpenLibrary("layers.library",32);
	if (LayersBase == NULL)
	{
#ifdef DEBUG
		printf("no layers library\n");
#endif
		exit();
	}

	IntuitionBase = OpenLibrary("intuition.library",32);
	if (IntuitionBase == NULL)
	{
#ifdef DEBUG
		printf("no intuition library\n");
#endif
		exit();
	}

	/* intuition direct comunication message port */
	idcmp = CLOSEWINDOW|REFRESHWINDOW|GADGETUP|GADGETDOWN|SIZEVERIFY|NEWSIZE;
	nw.LeftEdge = x;
	nw.TopEdge = y;
	nw.Width = width;
	nw.Height = height;
	nw.DetailPen = -1;
	nw.BlockPen = -1;
	nw.IDCMPFlags = idcmp;
	nw.Flags = WINDOWDEPTH|WINDOWSIZING|WINDOWDRAG|WINDOWCLOSE|flags;

#ifdef GADGETS
	nw.FirstGadget = &rb_gadget;
#endif

	nw.CheckMark = 0;
	nw.Title = s;
	nw.Screen = 0;
	nw.BitMap = sbitmap;
	nw.MinWidth = 80;
	nw.MinHeight = 16;
	nw.MaxWidth = 640;
	nw.MaxHeight = ~0; /* V32 and above */
	nw.Type = WBENCHSCREEN;
	
#ifdef DEBUG
	printf("calling open window\n sbitmap=%lx\n",nw.BitMap);
#endif
	window = (struct Window *)OpenWindow(&nw);

    /* bart - 11.21.85 */
    if (!window) return;

#ifdef DEBUG
	printf("after call to open window\n");
#endif

    /* bart - 11.13.85 */
	SetWindowTitles(window,-1,s);

	w = window->RPort;
	w->Layer->Window = window;

	InitArea(&areainfo,areafill,MAXPOINTS);
	w->AreaInfo = &areainfo;

	(*gfxproc)(&window->WScreen->ViewPort,w);

	CloseWindow(window);

	/* restart workbench screen */

#ifdef NEWSCREEN
		CloseScreen(ActiveGroup.ActiveScreen);
		myscreen = OpenScreen(0,0,640,200,2,HIRES,WBENCHSCREEN,&TestFont);
#endif

}

Get_RWidth(rp)
struct RastPort *rp;
{
	int width;
    struct Layer *cw;
    if ( (cw = rp->Layer) == 0) width = rp->BitMap->BytesPerRow<<3;
    else
        if (cw->SuperBitMap == 0) width = cw->bounds.MaxX-cw->bounds.MinX + 1;
    else width = cw->SuperBitMap->BytesPerRow<<3;
	if (cw)
	{
		struct Window *window;
		window = cw->Window;
		if (window)
		{
			if ((window->Flags & GIMMEZEROZERO) == 0)
				width -= window->BorderLeft+window->BorderRight;
		}
	}
	return (width);
}
 
Get_RHeight(rp)
struct RastPort *rp;
{
	int height;
    struct Layer *cw;
    if ( (cw = rp->Layer) == 0) height = rp->BitMap->Rows;
    else
        if (cw->SuperBitMap == 0) height = cw->bounds.MaxY-cw->bounds.MinY + 1;
    else height =  cw->SuperBitMap->Rows;
	if (cw)
	{
		struct Window *window;
		if (window = cw->Window)
			if ((window->Flags & GIMMEZEROZERO) == 0)
				height -= window->BorderTop+window->BorderBottom;
	}
	return(height);
}

struct TmpRas *gettmpras(t,w,h)
struct TmpRas *t;
int w,h;
{
	char *ras;
	ras = (char *)AllocRaster(w,h);
	if (ras == 0)
	{
#ifdef DEBUG
		printf("no ram for tmpras\n");
#endif
		exit(1);
	}
	return((struct TmpRas *)InitTmpRas(t,ras,RASSIZE(w,h)));
}

Get_xoffset(rp)
struct RastPort *rp;
{
	struct Layer *l;
	struct Window *window;
	l = rp->Layer;
    if (l != 0)
    {
        window = l->Window;
        if (window->Flags & GIMMEZEROZERO)	return(0);
        else	return(window->BorderLeft);
    }
    else	return(0);
}

Get_yoffset(rp)
struct RastPort *rp;
{
	struct Layer *l;
	struct Window *window;
	l = rp->Layer;
    if (l != 0)
    {
        window = l->Window;
        if (window->Flags & GIMMEZEROZERO)	return(0);
        else	return(window->BorderTop);
    }
    else	return(0);
}

