/*
 * M A N D E L B R O T	 C O N S T R U C T I O N   S E T
 *
 * (C) Copyright 1989 by Olaf Seibert.
 * Mandel may be freely distributed. See file 'doc/Notice' for details.
 *
 * Select() requester, as generated by blk 2.0 (by Stuart Ferguson).
 * Necessary changes to the generated file:
 * - delete definition of select_nbuf[][]
 */

#include <exec/types.h>
#include <intuition/intuition.h>
#include "mandel.h"
#ifdef DEBUG
#   include <stdio.h>
#   undef STATIC
#   define STATIC   /* EMPTY */
#endif

#define NUMCHR	    5

/*extern UBYTE Buffer[5][20];	/* We want to re-use it for the
				 * string gadgets here.
				 */
extern UBYTE Buffer[20][5];
UBYTE undo[NUMCHR];
#define select_nbuf Buffer

#define ta	    Topaz80
#define ITXT_BPEN   REQ_BF
#define ITXT_DRMD   JAM2
#define BRD_DRMD    JAM1
#define REQ_LE	    0
#define REQ_TE	    0
#define REQ_FLG     0
#define REQ_BF	    1

#define PROPGADGETID	(NEGGADGETID+3)
#define VALUEGADGETID	(NEGGADGETID+10)

#include "select.req"

#define FIRST_STRGAD		0
#define FIRST_SINFO		0
#define FIRST_ITEXT		1
#define NUMVALUES		20
#define MAXVAL			(MAXDEPTH - NUMVALUES)

void fillin(from, window)
register int from;
register struct Window *window;
{
    register int to = from+20;
    register int i;

    if (window) {
	RemoveGList(window, &select_gad[FIRST_STRGAD], 20L);
    }

    for (i = 0; from < to; from++, i++) {
	sprintf(select_txt[FIRST_ITEXT+i].IText, "%4d", from);
	sprintf(select_sinfo[FIRST_SINFO+i].Buffer, "%d", (int)PenTable[from]);
	select_sinfo[FIRST_SINFO+i].LongInt = PenTable[from];
    }

    if (window) {
	AddGList(window, &select_gad[FIRST_STRGAD], 0L, 20L, &select_req);
	RefreshGList(&select_gad[FIRST_STRGAD], window, &select_req, 20L);
	PrintIText(select_req.ReqLayer->rp, &select_txt[FIRST_ITEXT], 0L, 0L);
    }
}

void Select()
{
    register int ID;
    register int base;
    register struct Window *window = NULL;
    int value;

    base = (select_pinfo[0].VertPot * (long) MAXVAL + 0x8000) >> 16;
    fillin(base, NULL);
    select_pinfo[0].VertBody = (MAXBODY * NUMVALUES) / (5*MAXVAL/4);

    window = MyRequest(&select_req, MainWindow);

    do {
	ID = WaitMyRequest(window);
	switch(ID) {
	case POSGADGETID:	/* OK */
	    break;
	case PROPGADGETID:
	    base = (select_pinfo[0].VertPot * (long) MAXVAL + 0x8000) >> 16;
	    fillin(base, window);
	    break;
	default:		/* some value */
	    ID -= VALUEGADGETID;
	    value = select_sinfo[FIRST_SINFO+ID].LongInt;
	    if (value >= 0 && value < NumColors)
		PenTable[base + ID] = value;
	    else
		DisplayBeep(MandelScreen);
	}
    } while (ID != POSGADGETID);

    EndMyRequest(&select_req, window, MainWindow);
}
