home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
255.lha
/
Scanner_v1.0
/
scanner.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-05-21
|
33KB
|
1,221 lines
/* scanner.c */
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuitionbase.h>
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <string.h>
#include <stdio.h>
#include "scanner.h"
#define VERSION "1.0"
static struct structList structlist[MAXSTRUCTURE];
void main(argc, argv)
int argc;
BYTE *argv[];
{
extern struct GfxBase *GfxBase;
extern struct IntuitionBase *IntuitionBase;
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 1);
IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 1);
ScanScreens(IntuitionBase->FirstScreen);
ListBitMaps();
ListBoolInfos();
ListBorders();
ListGadgets();
ListImages();
ListIntuiMessages();
ListIntuiTexts();
ListKeyMaps();
ListLayers();
ListMenus();
ListMsgPorts();
ListPropInfos();
ListRastPorts();
ListRequesters();
ListScreens();
ListStringInfos();
ListTextFonts();
ListWindows();
EraseStructList();
CloseLibrary((struct Library *)IntuitionBase);
CloseLibrary((struct Library *)GfxBase);
}
void ScanBitMaps(bitmap)
register struct BitMap *bitmap;
{
WORD bitmapno;
if (bitmap != NULL)
bitmapno = BitMapNumber(bitmap);
}
void ScanBoolInfos(boolinfo)
register struct BoolInfo *boolinfo;
{
}
void ScanBorders(border)
register struct Border *border;
{
WORD borderno;
while (border != NULL)
{
borderno = BorderNumber(border);
border = border->NextBorder;
}
}
void ScanGadgets(gadget)
register struct Gadget *gadget;
{
WORD gadgetno, gadgetrenderno, selectrenderno,
gadgettextno, specialinfono, gadgettype;
while (gadget != NULL)
{
gadgetno = GadgetNumber(gadget);
if (gadget->Flags & GADGIMAGE)
{
gadgetrenderno = ImageNumber(gadget->GadgetRender);
selectrenderno = ImageNumber(gadget->SelectRender);
}
else
{
gadgetrenderno = BorderNumber(gadget->GadgetRender);
selectrenderno = BorderNumber(gadget->SelectRender);
}
gadgettextno = IntuiTextNumber(gadget->GadgetText);
gadgettype = gadget->GadgetType & 0x0F;
if (gadgettype == GADGET0002)
specialinfono = BoolInfoNumber(gadget->SpecialInfo);
else if (gadgettype == PROPGADGET)
specialinfono = PropInfoNumber(gadget->SpecialInfo);
else if (gadgettype == STRGADGET)
specialinfono = StringInfoNumber(gadget->SpecialInfo);
else
specialinfono = 0;
if (gadget->Flags & GADGIMAGE)
{
if (Fresh(gadgetrenderno)) ScanImages((struct Image *)gadget->GadgetRender);
if (Fresh(selectrenderno)) ScanImages((struct Image *)gadget->SelectRender);
}
else
{
if (Fresh(gadgetrenderno)) ScanBorders((struct Border *)gadget->GadgetRender);
if (Fresh(selectrenderno)) ScanBorders((struct Border *)gadget->SelectRender);
}
if (Fresh(gadgettextno)) ScanIntuiTexts(gadget->GadgetText);
if (Fresh(specialinfono))
{
if (gadgettype == GADGET0002)
ScanBoolInfos((struct BoolInfo *)gadget->SpecialInfo);
else if (gadgettype == PROPGADGET)
ScanPropInfos((struct PropInfo *)gadget->SpecialInfo);
else if (gadgettype == STRGADGET)
ScanStringInfos((struct StringInfo *)gadget->SpecialInfo);
}
gadget = gadget->NextGadget;
}
}
void ScanImages(image)
register struct Image *image;
{
WORD imageno;
while (image != NULL)
{
imageno = ImageNumber(image);
image = image->NextImage;
}
}
void ScanIntuiMessages(intuimessage)
register struct IntuiMessage *intuimessage;
{
}
void ScanIntuiTexts(intuitext)
register struct IntuiText *intuitext;
{
WORD intuitextno, itextfontno;
while (intuitext != NULL)
{
intuitextno = IntuiTextNumber(intuitext);
itextfontno = TextAttrNumber(intuitext->ITextFont);
if (Fresh(itextfontno)) ScanTextAttrs(intuitext->ITextFont);
intuitext = intuitext->NextText;
}
}
void ScanKeyMaps(keymap)
register struct KeyMap *keymap;
{
}
void ScanLayers(layer)
register struct Layer *layer;
{
}
void ScanMenus(menu)
register struct Menu *menu;
{
}
void ScanMsgPorts(msgport)
register struct MsgPort *msgport;
{
}
void ScanPropInfos(propinfo)
register struct PropInfo *propinfo;
{
}
void ScanRastPorts(rastport)
register struct RastPort *rastport;
{
}
void ScanRequesters(requester)
register struct Requester *requester;
{
WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno,
reqlayerno, imagebmapno, rwindowno;
if (requester != NULL)
{
requesterno = RequesterNumber(requester);
olderrequestno = RequesterNumber(requester->OlderRequest);
reqgadgetno = GadgetNumber(requester->ReqGadget);
reqborderno = BorderNumber(requester->ReqBorder);
reqtextno = IntuiTextNumber(requester->ReqText);
reqlayerno = LayerNumber(requester->ReqLayer);
imagebmapno = BitMapNumber(requester->ImageBMap);
rwindowno = WindowNumber(requester->RWindow);
if (Fresh(olderrequestno)) ScanRequesters(requester->OlderRequest);
if (Fresh(reqgadgetno)) ScanGadgets(requester->ReqGadget);
if (Fresh(reqborderno)) ScanBorders(requester->ReqBorder);
if (Fresh(reqtextno)) ScanIntuiTexts(requester->ReqText);
if (Fresh(reqlayerno)) ScanLayers(requester->ReqLayer);
if (Fresh(imagebmapno)) ScanBitMaps(requester->ImageBMap);
if (Fresh(rwindowno)) ScanWindows(requester->RWindow);
}
}
void ScanScreens(screen)
register struct Screen *screen;
{
WORD screenno, windowno;
while (screen != NULL)
{
screenno = ScreenNumber(screen);
windowno = WindowNumber(screen->FirstWindow);
if (Fresh(windowno)) ScanWindows(screen->FirstWindow);
screen = screen->NextScreen;
}
}
void ScanStringInfos(stringinfo)
register struct StringInfo *stringinfo;
{
WORD stringinfono, layerptrno, altkeymapno;
if (stringinfo != NULL)
{
stringinfono = StringInfoNumber(stringinfo);
layerptrno = LayerNumber(stringinfo->LayerPtr);
altkeymapno = KeyMapNumber(stringinfo->AltKeyMap);
if (Fresh(layerptrno)) ScanLayers(stringinfo->LayerPtr);
if (Fresh(altkeymapno)) ScanKeyMaps(stringinfo->AltKeyMap);
}
}
void ScanTextAttrs(textattr)
register struct TextAttr *textattr;
{
}
void ScanTextFonts(textfont)
register struct TextFont *textfont;
{
}
void ScanWindows(window)
register struct Window *window;
{
WORD windowno, menustripno, firstrequestno, dmrequestno, rportno,
borderrportno, firstgadgetno, parentwindowno, descendantwindowno,
userportno, windowportno, messagekeyno, checkmarkno, wlayerno,
ifontno, wscreenno;
while (window != NULL)
{
windowno = WindowNumber(window);
menustripno = MenuNumber(window->MenuStrip);
firstrequestno = RequesterNumber(window->FirstRequest);
dmrequestno = RequesterNumber(window->DMRequest);
wscreenno = ScreenNumber(window->WScreen);
rportno = RastPortNumber(window->RPort);
borderrportno = RastPortNumber(window->BorderRPort);
firstgadgetno = GadgetNumber(window->FirstGadget);
parentwindowno = WindowNumber(window->Parent);
descendantwindowno = WindowNumber(window->Descendant);
userportno = MsgPortNumber(window->UserPort);
windowportno = MsgPortNumber(window->WindowPort);
messagekeyno = IntuiMessageNumber(window->MessageKey);
checkmarkno = ImageNumber(window->CheckMark);
wlayerno = LayerNumber(window->WLayer);
ifontno = TextFontNumber(window->IFont);
if (Fresh(menustripno)) ScanMenus(window->MenuStrip);
if (Fresh(firstrequestno)) ScanRequesters(window->FirstRequest);
if (Fresh(dmrequestno)) ScanRequesters(window->DMRequest);
if (Fresh(wscreenno)) ScanScreens(window->WScreen);
if (Fresh(rportno)) ScanRastPorts(window->RPort);
if (Fresh(borderrportno)) ScanRastPorts(window->BorderRPort);
if (Fresh(firstgadgetno)) ScanGadgets(window->FirstGadget);
if (Fresh(parentwindowno)) ScanWindows(window->Parent);
if (Fresh(descendantwindowno)) ScanWindows(window->Descendant);
if (Fresh(userportno)) ScanMsgPorts(window->UserPort);
if (Fresh(windowportno)) ScanMsgPorts(window->WindowPort);
if (Fresh(messagekeyno)) ScanIntuiMessages(window->MessageKey);
if (Fresh(checkmarkno)) ScanImages(window->CheckMark);
if (Fresh(wlayerno)) ScanLayers(window->WLayer);
if (Fresh(ifontno)) ScanTextFonts(window->IFont);
window = window->NextWindow;
}
}
BYTE Fresh(number)
register WORD number;
{
register BYTE fresh;
fresh = (number != 0 && ((number & FOUND) == 0));
return(fresh);
}
WORD structNumber(structure, structurekind)
register APTR structure;
register WORD structurekind;
{
register WORD number;
register BYTE found;
register struct structList *structitem;
struct structList *newstruct;
extern struct structList structlist[MAXSTRUCTURE];
if (structure == NULL)
number = 0;
else
{
structitem = structlist[structurekind].next;
found = FALSE;
while (structitem != NULL && !found)
{
if (structitem->structure == structure)
found = TRUE;
else
structitem = structitem->next;
}
if (found)
number = structitem->number | FOUND;
else
{
number = ++(structlist[structurekind].number);
newstruct = (struct structList *)AllocMem(
sizeof(struct structList), MEMF_PUBLIC);
newstruct->next = structlist[structurekind].next;
newstruct->structure = (APTR)structure;
newstruct->number = number;
structlist[structurekind].next = newstruct;
}
}
return(number);
}
void EraseStructList()
{
register WORD structurekind;
register struct structList *structitem, *nextstructitem;
extern struct structList structlist[MAXSTRUCTURE];
for (structurekind = 0; structurekind < MAXSTRUCTURE; structurekind++)
{
structitem = structlist[structurekind].next;
while (structitem != NULL)
{
nextstructitem = structitem->next;
FreeMem((BYTE *)structitem, sizeof(struct structList));
structitem = nextstructitem;
}
}
}
UBYTE *APTRName(name)
register UBYTE *name;
{
static UBYTE string[40];
if (strcmp(name, "NULL") == 0)
strcpy(string, name);
else
{
strcpy(string, "(APTR)");
strcat(string, name);
}
return(string);
}
UBYTE *structName(number, structurekind)
register WORD number, structurekind;
{
static UBYTE string[40];
static UBYTE *structname[MAXSTRUCTURE] =
{
"bitmap",
"boolinfo",
"border",
"gadget",
"image",
"intuimessage",
"intuitext",
"keymap",
"layer",
"menu",
"msgport",
"propinfo",
"rastport",
"requester",
"screen",
"stringinfo",
"textattr",
"textfont",
"window"
};
if (number == 0)
strcpy(string, "NULL");
else
sprintf(string, "&%s%d", structname[structurekind], NUMBER(number));
return(string);
}
UBYTE *TitleName(title)
register UBYTE *title;
{
static UBYTE string[100];
if (string == NULL)
strcpy(string, "NULL");
else
sprintf(string, "\"%s\"", title);
return(string);
}
UBYTE *MemoryName(memorypos)
register APTR memorypos;
{
static UBYTE string[20];
if (memorypos == NULL)
strcpy(string, "NULL");
else
sprintf(string, "0x%X", memorypos);
return(string);
}
void ListBitMaps()
{
register struct BitMap *bitmap;
register struct structList *structitem;
register WORD plane;
WORD bitmapno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[BITMAP_KIND].next;
while (structitem != NULL)
{
bitmap = (struct BitMap *)structitem->structure;
bitmapno = structitem->number;
printf("struct BitMap bitmap%d =\n", bitmapno);
printf("{\n");
printf(" %d,\011/* BytesPerRow */\n", bitmap->BytesPerRow);
printf(" %d,\011/* Rows */\n", bitmap->Rows);
printf(" 0x%X,\011/* Flags */\n", bitmap->Flags);
printf(" %d,\011/* Depth */\n", bitmap->Depth);
printf(" %d,\011/* Pad */\n", bitmap->pad);
printf(" {\011/* Planes */\n");
for (plane = 0; plane < 7; plane++)
printf(" %s,\n", MemoryName((APTR)(bitmap->Planes[plane])));
printf(" %s\n", MemoryName((APTR)(bitmap->Planes[7])));
printf(" }\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListBoolInfos()
{
register struct BoolInfo *boolinfo;
register struct structList *structitem;
WORD boolinfono;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[BOOLINFO_KIND].next;
while (structitem != NULL)
{
boolinfo = (struct BoolInfo *)structitem->structure;
boolinfono = structitem->number;
printf("struct BoolInfo boolinfo%d =\n", boolinfono);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListBorders()
{
register struct Border *border;
register struct structList *structitem;
WORD borderno, xyno, nextborderno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[BORDER_KIND].next;
while (structitem != NULL)
{
border = (struct Border *)structitem->structure;
borderno = structitem->number;
xyno = NUMBER(borderno);
nextborderno = BorderNumber(border->NextBorder);
if (border->XY != NULL)
{
printf("WORD xypair%d[%d] =\n", xyno, 2 * border->Count);
PrintWords("%d", " ", "{", border->XY, "};", (WORD)(2 * border->Count), 8);
}
printf("struct Border border%d =\n", borderno);
printf("{\n");
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", border->LeftEdge,
border->TopEdge);
printf(" %d, %d,\011/* FrontPen, BackPen */\n", border->FrontPen,
border->BackPen);
printf(" 0x%X,\011/* DrawMode */\n", border->DrawMode);
printf(" %d,\011/* Count */\n", border->Count);
if (border->XY == NULL)
printf(" NULL");
else
printf(" &xypair%d[0]", xyno);
printf(",\011/* XY */\n");
printf(" %s\011/* NextBorder */\n", BorderName(nextborderno));
printf("};\n\n");
structitem = structitem->next;
}
}
void ListGadgets()
{
register struct Gadget *gadget;
register struct structList *structitem;
WORD gadgetno, nextgadgetno, gadgetrenderno, selectrenderno,
gadgettextno, specialinfono, gadgettype;
UBYTE *name;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[GADGET_KIND].next;
while (structitem != NULL)
{
gadget = (struct Gadget *)structitem->structure;
gadgetno = structitem->number;
nextgadgetno = GadgetNumber(gadget->NextGadget);
if (gadget->Flags & GADGIMAGE)
{
gadgetrenderno = ImageNumber(gadget->GadgetRender);
selectrenderno = ImageNumber(gadget->SelectRender);
}
else
{
gadgetrenderno = BorderNumber(gadget->GadgetRender);
selectrenderno = BorderNumber(gadget->SelectRender);
}
gadgettextno = IntuiTextNumber(gadget->GadgetText);
gadgettype = gadget->GadgetType & 0x0F;
if (gadgettype == GADGET0002)
specialinfono = BoolInfoNumber(gadget->SpecialInfo);
else if (gadgettype == PROPGADGET)
specialinfono = PropInfoNumber(gadget->SpecialInfo);
else if (gadgettype == STRGADGET)
specialinfono = StringInfoNumber(gadget->SpecialInfo);
else
specialinfono = 0;
printf("struct Gadget gadget%d =\n", gadgetno);
printf("{\n");
printf(" %s,\011/* NextGadget */\n", GadgetName(nextgadgetno));
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", gadget->LeftEdge,
gadget->TopEdge);
printf(" %d, %d,\011/* Width, Height */\n",gadget->Width, gadget->Height);
printf(" 0x%X,\011/* Flags */\n", gadget->Flags);
printf(" 0x%X,\011/* Activation */\n", gadget->Activation);
printf(" 0x%X,\011/* GadgetType */\n", gadget->GadgetType);
if (gadget->Flags & GADGIMAGE)
name = ImageName(gadgetrenderno);
else
name = BorderName(gadgetrenderno);
printf(" %s,\011/* GadgetRender */\n", APTRName(name));
if (gadget->Flags & GADGIMAGE)
name = ImageName(selectrenderno);
else
name = BorderName(selectrenderno);
printf(" %s,\011/* SelectRender */\n", APTRName(name));
printf(" %s,\011/* GadgetText */\n", IntuiTextName(gadgettextno));
printf(" 0x%X,\011/* MutualExclude */\n", gadget->MutualExclude);
if (gadgettype == GADGET0002)
name = BoolInfoName(specialinfono);
else if (gadgettype == PROPGADGET)
name = PropInfoName(specialinfono);
else if (gadgettype == STRGADGET)
name = StringInfoName(specialinfono);
else
name = MemoryName(gadget->SpecialInfo);
printf(" %s,\011/* SpecialInfo */\n", APTRName(name));
printf(" %d,\011/* GadgetID */\n", gadget->GadgetID);
printf(" %s\011/* UserData */\n", MemoryName(gadget->UserData));
printf("};\n\n");
structitem = structitem->next;
}
}
void ListImages()
{
register struct Image *image;
register struct structList *structitem;
register WORD count;
WORD imageno, imagedatano, nextimageno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[IMAGE_KIND].next;
while (structitem != NULL)
{
image = (struct Image *)structitem->structure;
imageno = structitem->number;
imagedatano = NUMBER(imageno);
nextimageno = ImageNumber(image->NextImage);
if (image->ImageData != NULL)
{
count = image->Depth * image->Height * ((image->Width + 15) / 16);
printf("UWORD imagedata%d[%d] =\n", imagedatano, count);
PrintWords("0x%X", " ", "{", image->ImageData, "};", count, 8);
}
printf("struct Image image%d =\n", imageno);
printf("{\n");
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", image->LeftEdge,
image->TopEdge);
printf(" %d, %d,\011/* Width, Height */\n", image->Width, image->Height);
printf(" %d,\011/* Depth */\n", image->Depth);
if (image->ImageData == NULL)
printf(" NULL");
else
printf(" &imagedata%d[0]", imagedatano);
printf("\011/* ImageData */\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListIntuiMessages()
{
register struct IntuiMessage *intuimessage;
register struct structList *structitem;
WORD intuimessageno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[INTUIMESSAGE_KIND].next;
while (structitem != NULL)
{
intuimessage = (struct IntuiMessage *)structitem->structure;
intuimessageno = structitem->number;
printf("struct IntuiMessage intuimessage%d =\n", intuimessageno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListIntuiTexts()
{
register struct IntuiText *intuitext;
register struct structList *structitem;
WORD intuitextno, itextfontno, nexttextno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[INTUITEXT_KIND].next;
while (structitem != NULL)
{
intuitext = (struct IntuiText *)structitem->structure;
intuitextno = structitem->number;
itextfontno = TextAttrNumber(intuitext->ITextFont);
nexttextno = IntuiTextNumber(intuitext->NextText);
printf("struct IntuiText intuitext%d =\n", intuitextno);
printf("{\n");
printf(" %d, %d,\011/* FrontPen, BackPen */\n", intuitext->FrontPen,
intuitext->BackPen);
printf(" 0x%X,\011/* DrawMode */\n", intuitext->DrawMode);
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", intuitext->LeftEdge,
intuitext->TopEdge);
printf(" %s,\011/* ITextFont */\n", TextAttrName(itextfontno));
printf(" %s,\011/* IText */\n", TitleName(intuitext->IText));
printf(" %s\011/* NextText */\n", IntuiTextName(nexttextno));
printf("};\n\n");
structitem = structitem->next;
}
}
void ListKeyMaps()
{
register struct KeyMap *keymap;
register struct structList *structitem;
WORD keymapno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[KEYMAP_KIND].next;
while (structitem != NULL)
{
keymap = (struct KeyMap *)structitem->structure;
keymapno = structitem->number;
printf("struct KeyMap keymap%d =\n", keymapno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListLayers()
{
register struct Layer *layer;
register struct structList *structitem;
WORD layerno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[LAYER_KIND].next;
while (structitem != NULL)
{
layer = (struct Layer *)structitem->structure;
layerno = structitem->number;
printf("struct Layer layer%d =\n", layerno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListMenus()
{
register struct Menu *menu;
register struct structList *structitem;
WORD menuno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[MENU_KIND].next;
while (structitem != NULL)
{
menu = (struct Menu *)structitem->structure;
menuno = structitem->number;
printf("struct Menu menu%d =\n", menuno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListMsgPorts()
{
register struct MsgPort *msgport;
register struct structList *structitem;
WORD msgportno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[MSGPORT_KIND].next;
while (structitem != NULL)
{
msgport = (struct MsgPort *)structitem->structure;
msgportno = structitem->number;
printf("struct MsgPort msgport%d =\n", msgportno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListPropInfos()
{
register struct PropInfo *propinfo;
register struct structList *structitem;
WORD propinfono;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[PROPINFO_KIND].next;
while (structitem != NULL)
{
propinfo = (struct PropInfo *)structitem->structure;
propinfono = structitem->number;
printf("struct PropInfo propinfo%d =\n", propinfono);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListRastPorts()
{
register struct RastPort *rastport;
register struct structList *structitem;
WORD rastportno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[RASTPORT_KIND].next;
while (structitem != NULL)
{
rastport = (struct RastPort *)structitem->structure;
rastportno = structitem->number;
printf("struct RastPort rastport%d =\n", rastportno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListRequesters()
{
register struct Requester *requester;
register struct structList *structitem;
WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno,
reqlayerno, imagebmapno, rwindowno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[REQUESTER_KIND].next;
while (structitem != NULL)
{
requester = (struct Requester *)structitem->structure;
requesterno = structitem->number;
olderrequestno = RequesterNumber(requester->OlderRequest);
reqgadgetno = GadgetNumber(requester->ReqGadget);
reqborderno = BorderNumber(requester->ReqBorder);
reqtextno = IntuiTextNumber(requester->ReqText);
reqlayerno = LayerNumber(requester->ReqLayer);
imagebmapno = BitMapNumber(requester->ImageBMap);
rwindowno = WindowNumber(requester->RWindow);
printf("struct Requester requester%d =\n", requesterno);
printf("{\n");
printf(" %s,\011/* OlderRequest */\n", RequesterName(requesterno));
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", requester->LeftEdge,
requester->TopEdge);
printf(" %d, %d,\011/* Width, Height */\n", requester->Width,
requester->Height);
printf(" %d, %d,\011/* RelLeft, RelTop */\n", requester->RelLeft,
requester->RelTop);
printf(" %s,\011/* ReqGadget */\n", GadgetName(reqgadgetno));
printf(" %s,\011/* ReqBorder */\n", BorderName(reqborderno));
printf(" %s,\011/* ReqText */\n", IntuiTextName(reqtextno));
printf(" 0x%X,\011/* Flags */\n", requester->Flags);
printf(" %d,\011/* BackFill */\n", requester->BackFill);
printf(" %s,\011/* ReqLayer */\n", LayerName(reqlayerno));
PrintBytes(" ", " {\011/* ReqPad1 */", requester->ReqPad1, " },",
32, 8);
printf(" %s,\011/* ImageBMap */\n", BitMapName(imagebmapno));
printf(" %s,\011/* RWindow */\n", WindowName(rwindowno));
PrintBytes(" ", " {\011/* ReqPad2 */", requester->ReqPad2, " }",
36, 9);
printf("};\n\n");
structitem = structitem->next;
}
}
void ListScreens()
{
register struct Screen *screen;
register struct structList *structitem;
WORD screenno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[SCREEN_KIND].next;
while (structitem != NULL)
{
screen = (struct Screen *)structitem->structure;
screenno = structitem->number;
printf("struct Screen screen%d =\n", screenno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListStringInfos()
{
register struct StringInfo *stringinfo;
register struct structList *structitem;
WORD stringinfono, layerptrno, altkeymapno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[STRINGINFO_KIND].next;
while (structitem != NULL)
{
stringinfo = (struct StringInfo *)structitem->structure;
stringinfono = structitem->number;
layerptrno = LayerNumber(stringinfo->LayerPtr);
altkeymapno = KeyMapNumber(stringinfo->AltKeyMap);
printf("struct StringInfo stringinfo%d =\n", stringinfono);
printf("{\n");
printf(" %s,\011/* Buffer */\n", TitleName(stringinfo->Buffer));
printf(" %s,\011/* UndoBuffer */\n", TitleName(stringinfo->UndoBuffer));
printf(" %d,\011/* BufferPos */\n", stringinfo->BufferPos);
printf(" %d,\011/* MaxChars */\n", stringinfo->MaxChars);
printf(" %d,\011/* DispPos */\n", stringinfo->DispPos);
printf(" %d,\011/* UndoPos */\n", stringinfo->UndoPos);
printf(" %d,\011/* NumChars */\n", stringinfo->NumChars);
printf(" %d,\011/* DispCount */\n", stringinfo->DispCount);
printf(" %d, %d,\011/* CLeft, CTop */\n", stringinfo->CLeft,
stringinfo->CTop);
printf(" %s,\011/* LayerPtr */\n", LayerName(layerptrno));
printf(" %d,\011/* LongInt */\n", stringinfo->LongInt);
printf(" %s\011/* AltKeyMap */\n", KeyMapName(altkeymapno));
printf("};\n\n");
structitem = structitem->next;
}
}
void ListTextAttrs()
{
register struct TextAttr *textattr;
register struct structList *structitem;
WORD textattrno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[TEXTATTR_KIND].next;
while (structitem != NULL)
{
textattr = (struct TextAttr *)structitem->structure;
textattrno = structitem->number;
printf("struct TextAttr textattr%d =\n", textattrno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListTextFonts()
{
register struct TextFont *textfont;
register struct structList *structitem;
WORD textfontno;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[TEXTFONT_KIND].next;
while (structitem != NULL)
{
textfont = (struct TextFont *)structitem->structure;
textfontno = structitem->number;
printf("struct TextFont textfont%d =\n", textfontno);
printf("{\n");
printf("};\n\n");
structitem = structitem->next;
}
}
void ListWindows()
{
register struct Window *window;
register struct structList *structitem;
WORD windowno, menustripno, firstrequestno, dmrequestno, rportno,
borderrportno, firstgadgetno, parentwindowno, descendantwindowno,
pointerno, userportno, windowportno, messagekeyno, checkmarkno,
wlayerno, ifontno, wscreenno, nextwindowno, count;
extern struct structList structlist[MAXSTRUCTURE];
structitem = structlist[WINDOW_KIND].next;
while (structitem != NULL)
{
window = (struct Window *)structitem->structure;
windowno = structitem->number;
nextwindowno = WindowNumber(window->NextWindow);
menustripno = MenuNumber(window->MenuStrip);
firstrequestno = RequesterNumber(window->FirstRequest);
dmrequestno = RequesterNumber(window->DMRequest);
wscreenno = ScreenNumber(window->WScreen);
rportno = RastPortNumber(window->RPort);
borderrportno = RastPortNumber(window->BorderRPort);
firstgadgetno = GadgetNumber(window->FirstGadget);
parentwindowno = WindowNumber(window->Parent);
descendantwindowno = WindowNumber(window->Descendant);
pointerno = NUMBER(windowno);
userportno = MsgPortNumber(window->UserPort);
windowportno = MsgPortNumber(window->WindowPort);
messagekeyno = IntuiMessageNumber(window->MessageKey);
checkmarkno = ImageNumber(window->CheckMark);
wlayerno = LayerNumber(window->WLayer);
ifontno = TextFontNumber(window->IFont);
if (window->Pointer != NULL)
{
count = 2 * window->PtrHeight;
printf("WORD pointer%d[%d] =\n", pointerno, count);
PrintWords("0x%X", " ", "{", window->Pointer, "};", count, 8);
}
printf("struct Window window%d =\n", windowno);
printf("{\n");
printf(" %s,\011/* NextWindow */\n", WindowName(nextwindowno));
printf(" %d, %d,\011/* LeftEdge, TopEdge */\n", window->LeftEdge,
window->TopEdge);
printf(" %d, %d,\011/* Width, Height */\n", window->Width, window->Height);
printf(" %d, %d,\011/* MouseY, MouseX */\n", window->MouseY, window->MouseX);
printf(" %d, %d,\011/* MinWidth, MinHeight */\n", window->MinWidth,
window->MinHeight);
printf(" %d, %d,\011/* MaxWidth, MaxHeight */\n", window->MaxWidth,
window->MaxHeight);
printf(" 0x%X,\011/* Flags */\n", window->Flags);
printf(" %s,\011/* MenuStrip */\n", MenuName(menustripno));
printf(" %s,\011/* Title */\n", TitleName(window->Title));
printf(" %s,\011/* FirstRequest */\n", RequesterName(firstrequestno));
printf(" %s,\011/* DMRequest */\n", RequesterName(dmrequestno));
printf(" %d,\011/* ReqCount */\n", window->ReqCount);
printf(" %s,\011/* WScreen */\n", ScreenName(wscreenno));
printf(" %s,\011/* RPort */\n", RastPortName(rportno));
printf(" %d, %d,\011/* BorderLeft, BorderTop */\n", window->BorderLeft,
window->BorderTop);
printf(" %d, %d,\011/* BorderRight, BorderBottom */\n", window->BorderRight,
window->BorderBottom);
printf(" %s,\011/* BorderRPort */\n", RastPortName(borderrportno));
printf(" %s,\011/* FirstGadget */\n", GadgetName(firstgadgetno));
printf(" %s,\011/* Parent */\n", WindowName(parentwindowno));
printf(" %s,\011/* Descendant */\n", WindowName(descendantwindowno));
if (window->Pointer == NULL)
printf(" NULL");
else
printf(" &pointer%d", pointerno);
printf(",\011/* Pointer */\n");
printf(" %d, %d,\011/* PtrHeight, PtrWidth */\n", window->PtrHeight,
window->PtrWidth);
printf(" %d, %d,\011/* XOffset, YOffset */\n", window->XOffset,
window->YOffset);
printf(" 0x%X,\011/* IDCMPFlags */\n", window->IDCMPFlags);
printf(" %s,\011/* UserPort */\n", MsgPortName(userportno));
printf(" %s,\011/* WindowPort */\n", MsgPortName(windowportno));
printf(" %s,\011/* MessageKey */\n", IntuiMessageName(messagekeyno));
printf(" %d, %d,\011/* DetailPen, BlockPen */\n", window->DetailPen,
window->BlockPen);
printf(" %s,\011/* CheckMark */\n", ImageName(checkmarkno));
printf(" %s,\011/* ScreenTitle */\n", TitleName(window->ScreenTitle));
printf(" %d, %d,\011/* GZZMouseX, GZZMouseY */\n", window->GZZMouseX,
window->GZZMouseY);
printf(" %d, %d,\011/* GZZWidth, GZZHeight */\n", window->GZZWidth,
window->GZZHeight);
printf(" %s,\011/* ExtData */\n", MemoryName((APTR)window->ExtData));
printf(" %s,\011/* UserData */\n", MemoryName((APTR)window->UserData));
printf(" %s,\011/* WLayer */\n", LayerName(wlayerno));
printf(" %s\011/* IFont */\n", TextFontName(ifontno));
printf("};\n\n");
structitem = structitem->next;
}
}
void PrintBytes(indenttext, text1, bytes, text2, length, rowlength)
register UBYTE *indenttext, *text1, *bytes, *text2;
register WORD length, rowlength;
{
register WORD byte;
printf("%s\n", text1);
for (byte = 0; byte < length; byte++)
{
if (byte % rowlength == 0)
printf(" ");
printf("%d", bytes[byte]);
if (byte != (length - 1))
printf(", ");
if ((byte + 1) % rowlength == 0 || byte == (length - 1))
printf("\n");
}
printf("%s\n", text2);
}
void PrintWords(format, indenttext, text1, words, text2, length, rowlength)
register UBYTE *format, *indenttext, *text1, *text2;
register UWORD *words;
register WORD length, rowlength;
{
register WORD word;
printf("%s\n", text1);
for (word = 0; word < length; word++)
{
if (word % rowlength == 0)
printf(" ");
printf(format, words[word]);
if (word != (length - 1))
printf(", ");
if ((word + 1) % rowlength == 0 || word == (length - 1))
printf("\n");
}
printf("%s\n", text2);
}