#include "sb.h"
extern int level;

void PrGadget(string, gadget) char *string; struct Gadget *gadget;
{
static struct StructData structdata[] = {
   { " NextGadget",  "struct Gadget *",   5, PTRSIZE },
   { "-LeftEdge",    "SHORT",             2, INTSIZE },
   { "-TopEdge",     "SHORT",             2, INTSIZE },
   { "-Width",       "SHORT",             2, INTSIZE },
   { "-Height",      "SHORT",             2, INTSIZE },
   { " Flags",       "USHORT",           12, INTSIZE },
   { " Activation",  "USHORT",           12, INTSIZE },
   { " GadgetType",  "USHORT",           12, INTSIZE },
   { "(GadgetRender", "APTR)",            5, PTRSIZE },
   { "(SelectRender", "APTR)",            5, PTRSIZE },
   { " GadgetText", "struct IntuiText *", 5, PTRSIZE },
   { "-MutualExclude","LONG",             1, PTRSIZE },
   { "(SpecialInfo", "APTR)",             5, PTRSIZE },
   { "-GadgetID",    "USHORT",           12, INTSIZE },
   { "-UserData",    "APTR",              5, PTRSIZE },
  };
static char *flagnames[16] = {
     "GADGHBOX",      "GADGHIMAGE",     "GADGIMAGE",
     "GRELBOTTON",    "GRELRIGHT",      "GRELWIDTH",
     "GRELHEIGHT",    "SELECTED",       "GADGDISABLED
  };
static char *activatenames[16] = {
     "RELVERIFY",     "GADGIMMEDIATE",  "ENDGADGET",
     "FOLLOWMOUSE",   "RIGHTBORDER",    "LEFTBORDER",
     "TOPBORDER",     "BOTTOMBORDER",   "TOGGLESELECT",
     "STRINGCENTER",  "STRINGRIGHT",    "LONGINT",
     "ALTKEYMAP",     "BOOLEXTEND"
  };
static char *systypenames[16] = {
     "SIZING",        "WDRAGGING",      "SDRAGGING",
     "WUPFRONT",      "SUPFRONT",       "WDOUNBACK",
     "SDOWNBACK",     "CLOSE",          NULL,
     NULL,            NULL,             NULL,
     "REQGADGET",     "GZZGADGET",      "SCRGADGET",
     "SYSGADGET"
  };
static char *applitypennames[16] = {
     "BOOLGADGET",    "GADGET0002",     "PROPGADGET",
     "STRGADGET",     NULL,             NULL,
     NULL,            NULL,             NULL,
     NULL,            NULL,             NULL,
     "REQGADGET",     "GZZGADGET",      "SCRGADGET",
     "SYSGADGET"
  };
int sum, choice = -1;
USHORT bits;
  level ++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)gadget, DATASIZE, 0);
    switch (choice = GetChoice(DATASIZE)) {
      case 1:
        if (gadget->NextGadget)
          PrGadget("Gadget successivo nella lista di Intuition", gadget->NextGadget);
        break;
      case 6:
        bits = gadget->Flags;
        switch (bits & GADGHIGHBITS) {
          case 0:
            flagnames[0] = "GADGHCOMP";
            bits |= 0x01;
            break;
          case 1:
            flagnames[0] = "GADGHBOX";
            break;
          case 2:
            flagnames[1] = "GADGHIMAGE";
            break;
          case 3:
            flagnames[1] = "GADGHNONE";
            bits ^= 0x01;
            break;
        }
        FlagPrint("Flag di questo gadget", flagnames, (ULONG)bits);
        break;
      case 7:
        FlagPrint("Flag di attivazione di questo gadget", activatenames, (ULONG)gadget->Activation);
        break;
      case 8:
        bits = gadget->GadgetType;
        if (bits & SYSGADGET) {
          bits = (bits & 0xff00) | (1 << (((bits & 0xf0) >> 4) - 1));
          FlagPrint("Flag che definiscono il tipo di questo gadget", systypenames, (ULONG)bits);
        }
        else {
          bits = (bits & 0xff00) | (1 << ((bits & 0xf0) -1));
          FlagPrint("Flag che definiscono il tipo di questo gadget", applitypenames, (ULONG)bits);
        }
        break;
      case 11:
        if (gadget->GadgetText)
          PrIntuiText("Prima struttura IntuiText nella lista", gadget->GadgetText);
        break;
    }
  }
  level--;
}
