home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
125.lha
/
MenuText
/
restore.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-20
|
3KB
|
112 lines
/*
* This program will strip a window of nodes linked to the UserData field.
* These nodes *must* be of the size given below (in the absence of some
* other type of node).
*
* The nodes are used by MENUTEXT to link new menu text definitions to an
* open window; if this program is not run before the window is closed,
* the memory will never be freed and fragmentation will result.
*
* An extension which I may include later is actually dis-allowing all
* CLOSEWINDOW messages from reaching the window until this program is
* run. Easy, but intimidating for someone who isn't familiar with the
* workings of the program.
*
* ((c)) 1987, John Russell. Unlimited distribution, but donations to
* starving programmers welcome.
*
*/
#include "intuition/intuition.h"
#include "exec/memory.h"
#include "stdio.h"
void copy();
char *name = "John Russell";
char *address = "5 Alderdice Place";
char *province = "St. John's, Newfoundland, Canada";
char *postal_code = "A1B 2P8";
char *phone = "(709) 726-7847";
struct IntuitionBase *IntuitionBase;
struct node {
struct node *next;
char text[46];
char *old_text;
short old_item_width;
struct MenuItem *altered;
} *ptr,*next;
main(argc, argv)
int argc;
char *argv[];
{
struct Window *window;
struct Screen *screen;
if ((IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",0L))==NULL) {
puts("Where is Intuition gone???\n");
exit(0);
}
if (argc != 2) {
puts("You must supply the name of a window. The name is case-sensitive,\n\
but only the first word in the name is considered.");
exit(0);
}
Forbid();
screen = IntuitionBase->FirstScreen; /* address of Workbench screen structure */
while (screen) { /* do all screens */
window = screen->FirstWindow;
while (window) { /* do all windows */
if (compare(argv[1],window->Title)==0) { /* search for name */
ptr = window->UserData;
while (ptr) { /* restore menu to original condition */
next = ptr->next;
printf("Deleting menutext entry \"%s\"\n",ptr->text);
printf("Replacing original entry \"%s\"\n\n",ptr->old_text);
ptr->altered->ItemFill->IText = ptr->old_text;
ptr->altered->Width = ptr->old_item_width;
FreeMem(ptr,sizeof(struct node));
ptr = next;
}
window->UserData = NULL; /* it was all a dream... */
}
window = window->NextWindow;
}
screen = screen->NextScreen;
}
quit:
Permit();
CloseLibrary(IntuitionBase);
}
compare(string1,string2) /* if spaces in windowname, only check first word */
char *string1,*string2;
{
while ((*string1 != '\0') && (*string1 != ' ')) {
if (*string1 != *string2) /* space and null both end conditions */
return(1);
string1++;
string2++;
}
return(0); /* return weird values like strcmp() */
}