/************************************************************ fragit.c By: Stephen Vermeulen This program is a demonstration of how one can fragment (usually temporarly) CHIP ram. To get this to work from CLI you must do the following: 1 - Open a pair of CLI windows, make one cover the whole display and the other cover at least a half of the display. 2 - run Avail or memlist to see what the largest free CHIP memory chunk in the chip section is. 3 - run Fragit, a small window will appear briefly in the middle of the workbench, the workbench screen will then be covered by a big screen, the little window will be closed, then the big screen will be closed. 4 - run Avail or memlist again and note that while the total amount of free CHIP memory remains the same, the distribution is different, the one huge chunk has got split up! Nasty! 5 - move the smaller cli window slightly, or resize it a bit and then run Avail or memlist again to see that the CHIP chunks change size and the big chunk returns! 6 - Note that if you try this process when the little window that the program opens only overlaps ONE window on the workbench nothing untoward happens. It seems to be a problem when windows get stacked THREE deep somewhere. compile with Manx 3.4a ************************************************************/ #include #include #include #include #include struct IntuitionBase *IntuitionBase; /*************************************** This specifies the custom screen that our program will open briefly ****************************************/ struct NewScreen my_s = { 0, 0, 640, 400, 4, 0, 1, LACE | HIRES, CUSTOMSCREEN, NULL, /* force the font to topaz 80 */ NULL, /* screen title */ NULL, /* still no screen gadgets in Amiga */ NULL /* let Intuition give us bitmap */ }; /**************************************** Temp window is the user friendly prompt that causes the memory fragmentation. *****************************************/ struct NewWindow temp_window = { 200, 100, 240, 14, -1, -1, /* these are the message events we want to use */ NULL, SMART_REFRESH | NOCAREREFRESH, NULL, /* this is where gadgets go */ NULL, /* default checkmark */ NULL, /* not title */ NULL, /* on the workbench */ NULL, 0, 0, -1, -1, /* don't care as no sizing is allowed */ WBENCHSCREEN }; /************************************************************ The main routine just opens the various libraries, allocates memory, opens the main window. Then after a 2 second pause closes it all. *************************************************************/ void main(argc, argv) short argc; char *argv[]; { struct Screen *s; struct Window *tw; IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 0L); if (IntuitionBase) { tw = OpenWindow(&temp_window); Delay(60L); s = (struct Screen *) OpenScreen(&my_s); if (s) { Delay(60L); if (tw) CloseWindow(tw); tw = NULL; CloseScreen(s); } if (tw) CloseWindow(tw); } CloseLibrary(IntuitionBase); }