/* include not needed for Aztec C using provided makefile */
#include "sb:sb.h"
extern int level;
extern void PrScreen2(); 

void PrScreen(string, screen) char *string; struct Screen *screen;
{
static struct StructData structdata[] = {
     { " NextScreen",   "struct Screen *",     5, PTRSIZE    },
     { " FirstWindow",  "struct Window *",     5, PTRSIZE    },
     { "-LeftEdge",     "SHORT",               2, INTSIZE    },
     { "-TopEdge",      "SHORT",               2, INTSIZE    },
     { "-Width",        "SHORT",               2, INTSIZE    },
     { "-Height",       "SHORT",               2, INTSIZE    },
     { "-MouseY",       "SHORT",               2, INTSIZE    },
     { "-MouseX",       "SHORT",               2, INTSIZE    },
     { " Flags",        "USHORT",             12, INTSIZE    },
     { " Title",        "UBYTE *",             4, PTRSIZE    },
     { " DefaultTitle", "UBYTE *",             4, PTRSIZE    },
     { "-BarHeight",    "BYTE",                3, BYTESIZE   },
     { "-BarVBorder",   "BYTE",                3, BYTESIZE   },
     { "-BarHBorder",   "BYTE",                3, BYTESIZE   },
     { "-MenuVBorder",  "BYTE",                3, BYTESIZE   },
     { "-MenuHBorder",  "BYTE",                3, BYTESIZE   }
  };
static char *flagnames[8] = {
    "WBENCHSCREEN",    "CUSTOMSCREEN",  NULL,             NULL,
    "SHOWTITLE",       "BEEPING",       "CUSTOMBITMAP",   NULL
  };
int sum, choice = -1;
ULONG bits;
  level++;
  while (choice) {
  sum = SetOptionText(string, structdata,
                      (APTR)screen, DATASIZE, 0);
  switch (choice = GetChoice(MAXGADG + 1)) {
    case 1:
      if (screen->NextScreen)
        PrScreen("The next screen in Intuition's list", screen->NextScreen);
      break;
    case 2:
      if (screen->FirstWindow)
        PrWindow("The screen's first window", screen->FirstWindow);
      break;
    case 9:
      if ((bits = screen->Flags) & 2)
        bits ^= 1;
      FlagPrint("The screen's flags", flagnames, bits);
      break;
    case 10:
      PrString("The Screen's Title", screen->Title);
      break;
    case 11:
      PrString("The Screen's Default Title", screen->DefaultTitle);
      break;
    case MOREGADG:
      PrScreen2("Screen members (page 2)", screen, sum);
      break;
    }
  }
  level--;
}


void PrScreen2(string, screen, offset)
char *string; struct Screen *screen; int offset;
{
static struct StructData structdata[] = {
     { "-WBorTop",      "BYTE",                 3, BYTESIZE      },
     { "-WBorLeft",     "BYTE",                 3, BYTESIZE      },
     { "-WBorLeft",     "BYTE",                 3, BYTESIZE      },
     { "-WBorBottom",   "BYTE",                 3, INTSIZE       },
     { " Font",         "struct TextAttr *",    5, PTRSIZE       },
     { "(ViewPort",     "struct ViewPort)",     0, SZ(ViewPort)  },
     { " RastPort",     "struct RastPort ",     0, SZ(RastPort)  },
     { " BitMap",       "struct BitMap",        0, SZ(BitMap)    },
     { "(LayerInfo",    "struct Layer_Info)",   0, SZ(Layer_Info)},
     { " FirstGadget",  "struct Gadget *",      5, PTRSIZE       },
     { "-DetailPen",    "UBYTE",               13, BYTESIZE      },
     { "-BlockPen",     "UBYTE",               13, BYTESIZE      },
     { "-SaveColor0",   "USHORT",              12, INTSIZE       },
     { "(BarLayer",     "struct Layer *)",      5, PTRSIZE       },
     { "(ExtData",      "UBYTE *)",             5, PTRSIZE       },
     { "(UserData",     "UBYTE *)",             5, PTRSIZE       },
  };
int sum, choice = -1;
  level++;
  while (choice) {
    sum = SetOptionText(string, structdata, (APTR)screen, DATASIZE, offset);
    switch (choice = GetChoice(DATASIZE)) {
      case 5:
        if (screen->Font)
          PrTextAttr("Structure TextAttr",screen->Font);
        break;
      case 7:
        PrRastPort("The screen's RastPort", &screen->RastPort);
        break;
      case 8:
        PrBitMap("The screen's BitMap", &screen->BitMap);
        break;
      case 10:
        if (screen->FirstGadget)
          PrGadget("The screen's first gadget", screen->FirstGadget);
        break;
    }
  }
  level--;
}
