amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (06/15/91)
Submitted-by: hull@hao.ucar.edu (Howard Hull) Posting-number: Volume 91, Issue 121 Archive-name: utilities/memometer-2.20/part02 #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 2)." # Contents: mm.c mminit.c # Wrapped by tadguy@ab20 on Fri Jun 14 18:30:39 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'mm.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mm.c'\" else echo shar: Extracting \"'mm.c'\" \(38693 characters\) sed "s/^X//" >'mm.c' <<'END_OF_FILE' X/* : ai=0 bk=0 ts=8 */ X#include "mm.h" X X#define FREEPEN -1L /* workbench screen default colors */ X#define REQ_WINDOW_WIDTH 319L /* width of warning requester window */ X#define REQ_WINDOW_HEIGHT 79L /* height of warning requester window */ X X#define SOK 0x001f /* memory allocation control masks */ X#define S1 0x0001 X#define S2 0x0002 X#define S4 0x0004 X#define S8 0x0008 X#define SA 0x0010 X#define C1 0xfffe X#define C2 0xfffd X#define C4 0xfffb X#define C8 0xfff7 X#define CA 0xffef X#define AARRRGH 20L /* hang 20, cats, we're startin ta curl! */ X X#define EXTENSION 16L /* allocation request increment */ X X#define FRAGS FALSE /* frags mode control boolian */ X#define WARPS TRUE /* warps mode control boolian */ X#define EVENMASK 0x7ffffffe /* used to prevent odd address traps */ X#define CLIHEIGHT 200L /* window scaling stuff */ X#define SIZEGAD 9L X#define DRAGBAR 10L X#define BORDER 2L X#define WINW 16L /* initial window width */ X#define WINH (long)(CLIHEIGHT - SIZEGAD - DRAGBAR) /* initial win height */ X#define MINH 81L /* shortest allowable window */ X#define MAXH 576L /* longest allowable window */ X#define BART 1L /* title bar F text location */ X#define BARH (long)(WINH - SIZEGAD - DRAGBAR) /* bar height */ X#define BARS (long)(BARH + 1) /* number of memory items to allocate */ X#define BARB (long)(BARH + DRAGBAR - 1) /* bottom of mercury column */ X#define BARE (long)(BARB + BORDER) /* bar end E text position */ X#define BARW (long)(((WINW - (2 * BORDER)) / 3) - 1) /* 3 memfragmometers */ X#define LEFT BORDER /* SLOW : since we're syncopated, we */ X#define MIDDLE (LEFT + BARW + 1) /* SLOW-FAST : do it going from bar */ X#define RIGHT (MIDDLE + BARW + 1) /* FAST :to bar at an irregular pace */ X#define RTEXT - 4L /* offset for three char E/F text from left edge */ X#define STARTVAL 64L /* start by getting enough storage for a few frags */ X#define TMARK 100000L /* timer granule in microseconds */ X#define TICKIES (long)(1000000/TMARK) /* number of TMARKS per second */ X X/* typedef short BOOL */ /* this is in include/exec/types.h */ X Xstruct IntuitionBase *IntuitionBase=NULL ; Xstruct Window *window ; Xstruct IntuiMessage *message; X/* struct IntuiMessage *GetMsg(); */ /* in functions.h */ X Xstruct GfxBase *GfxBase=NULL ; X Xstruct IOStdReq *timermsg=NULL; Xstruct MsgPort *timerport=NULL; XULONG timerbit=NULL; X X Xextern void InitProjItems(); /* this stuff is in the mminit section */ Xextern void InitSetupItems(); Xextern void InitPrioItems(); Xextern void InitChipItems(); Xextern void InitChipAItems(); Xextern void InitSFItems(); Xextern void InitSFAItems(); Xextern void InitFastItems(); Xextern void InitFastAItems(); Xextern void InitMenu(); Xextern void StartMenus(); X XBOOL p_mode = FRAGS; /* preset frags mode = 0, warps mode = 1 */ X /* note: mode preset used as request for */ X /* change to warps mode after the */ X /* first pass with frags mode set! */ Xlong p_rate = 2; /* preset sample interval, secs see menu */ Xlong p_priority = 0; /* preset priority, range -128 to +127 */ X /* note: pri greater than zero is risky! */ X /* keep in mind AmigaDOS priorities: */ X /* input.device 20, FileSystem 10, and */ X /* trackdisk.device, CON: 5 also if MM */ X /* is started from a CLI without the Run */ X /* then that CLI inherits MM's priority! */ Xlong p_chip = 512; /* preset chip mem size, kbytes see menu */ Xlong p_chipa = 0; /* preset chip mem address, kb see menu */ Xlong p_sf = 0; /* preset slowfast mem size, kb see menu */ Xlong p_sfa = 2048; /* preset slowfast mem addr, kb see menu */ Xlong p_fast = 0; /* preset fast mem size, mbytes see menu */ Xlong p_fasta = -1; /* preset fast mem addr, mbytes see menu */ X /* zero or neg fasta is offset below the */ X /* A3000 fast ram ceiling, aka 0x7000000 */ X Xstatic BOOL mode; /* uninitialized for mode control */ Xstatic BOOL mmode; /* uninitialized for mode menu */ Xstatic long delayval; /* uninitialized for delay menu */ Xstatic long priority; /* uninitialized for priority menu */ Xstatic long lastpri; /* uninitialized for priority incr */ Xstatic long cmemsize; /* uninitialized for chip menu */ Xstatic long cmembase; /* uninitialized for chipa menu */ Xstatic long sfmemsize; /* uninitialized for sf menu */ Xstatic long sfmembase; /* uninitialized for sfa menu */ Xstatic long fmemsize; /* uninitialized for fast menu */ Xstatic long fmembase; /* uninitialized for fasta menu */ X Xstatic USHORT log ; /* memory allocation success flags */ Xstatic BOOL things_are_cool = TRUE ; /* tells when to close the window */ Xstatic BOOL intsig = FALSE ; /* intuition message detector */ Xstatic USHORT chgflag = TRUE ; /* menu request to adjust columns */ Xstatic long chip[3], fast[3] ; /* place to keep mem header pointers */ Xstatic ULONG *chunkv ; /* demand allocated for frag chunks */ Xstatic ULONG *sizev ; /* demand allocated for frag sizes */ Xstatic ULONG *csum ; /* a col's height worth of checksums */ Xstatic ULONG *oldcsum ; /* same height worth of old checksums */ Xstatic USHORT *cell; /* 1 cell per pixel height of mercury */ Xstatic long xl, xr ; /* used to Draw() memmometer segments */ Xstatic long frags = STARTVAL ; /* # of demand allocated frag items */ Xstatic long warps = BARS ; /* # of demand allocated column items */ Xstatic long barh = BARH ; /* EVEN #'d height of mercury column */ Xstatic long barb = BARB ; /* bottom position of mercury column */ Xstatic short ticker = TICKIES ; /* initialized delay tick variable */ X X/* struct RastPort *rp ; */ /* wonder why we don't need this... ? */ X X Xstatic struct TextAttr myfont = { X (STRPTR) "topaz.font", X TOPAZ_EIGHTY, X 0, X 0 X}; X/* E newsize gadget refresh text */ Xstatic char ebuf[4] = " E " ; Xstatic struct IntuiText e_text = { X BLUP, WHTP, X JAM2, X 0, BARE, X &myfont, X (UBYTE *)ebuf, X NULL X}; X/* F title refresh text */ Xstatic char fbuf[4] = " F " ; Xstatic struct IntuiText f_text = { X BLUP, WHTP, X JAM2, X 0, BART, X &myfont, X (UBYTE *)fbuf, X &e_text X}; Xstatic struct NewWindow newwindow = { X 0, /* left edge */ X 10, /* top edge */ X WINW, /* width */ X WINH, /* height */ X 0, /* detail pen */ X 1, /* block pen */ X MENUPICK | NEWSIZE, /* messages */ X/* WINDOWDEPTH | WINDOWCLOSE */ /* don't use these gads */ X WINDOWDRAG | WINDOWSIZING | NOCAREREFRESH, /* add a few gadgets */ X NULL, /* no custom gadgets */ X NULL, /* default checkmark */ X (UBYTE *)"F", /* title */ X NULL, /* initialize this! */ X NULL, /* use screen bitmap */ X WINW, MINH, WINW, MAXH, /* min and max sizes */ X WBENCHSCREEN } ; /* use workbench screen */ X Xvoid initmenus() X{ X (void) InitProjItems(); /* Initialize the menu items */ X (void) InitSetupItems(); X (void) InitPrioItems(); X (void) InitChipItems(); X (void) InitChipAItems(); X (void) InitSFItems(); X (void) InitSFAItems(); X (void) InitFastItems(); X (void) InitFastAItems(); X (void) InitMenu(); X (void) StartMenus(); X } X Xvoid handle_MENUPICK( class, code ) Xunsigned long class; Xunsigned int code; X{ X unsigned int menunum, itemnum, subnum; X X if (code == MENUNULL) return; X X menunum = MENUNUM( code ); X itemnum = ITEMNUM( code ); X subnum = SUBNUM( code ); X chgflag = TRUE; X switch( menunum ) { X case 0: X switch( itemnum ) { X case 0: X WindowToFront(window); X break; X X case 1: X WindowToBack(window); X break; X X case 2: X things_are_cool = FALSE; /* Quit */ X break; X } /* end of switch ( Project itemnum ) */ X break; X X case 1: X switch( itemnum ) { X case 0: X switch( subnum ) { X case 0: X mode = FRAGS ; /* Frags mode */ X break; X X case 1: X mmode = TRUE ; /* Warps request */ X break; X /* end of switch ( Mode subnum ) */ X } X break; X case 1: X switch( subnum ) { X case 0: X delayval = 1; X break; X X case 1: X delayval = 2; X break; X X case 2: X delayval = 5; X break; X X case 3: X delayval = 10; X break; X /* end of switch ( Freq subnum ) */ X } X break; X /* end of switch ( Setup itemnum ) */ X } X break; X X case 2: X switch( itemnum ) { X case 0: X priority = lastpri; X break; X X case 1: X priority = priority - 1; X break; X X case 2: X priority = priority + 1; X break; X X case 3: X priority = -99; X lastpri = priority; X break; X X case 4: X priority = -75; X lastpri = priority; X break; X X case 5: X priority = -50; X lastpri = priority; X break; X X case 6: X priority = -25; X lastpri = priority; X break; X X case 7: X priority = -20; X lastpri = priority; X break; X X case 8: X priority = -15; X lastpri = priority; X break; X X case 9: X priority = -10; X lastpri = priority; X break; X X case 10: X priority = -5; X lastpri = priority; X break; X X case 11: X priority = 0; X lastpri = priority; X break; X X case 12: X priority = 5; X lastpri = priority; X break; X X case 13: X priority = 10; X lastpri = priority; X break; X X case 14: X priority = 15; X lastpri = priority; X break; X X case 15: X priority = 20; X lastpri = priority; X break; X } X /* end of switch ( Priority itemnum ) */ X break; X X case 3: X switch( itemnum ) { X case 0: X cmemsize = 0x000000; X break; X X case 1: X cmemsize = 0x040000; X break; X X case 2: X cmemsize = 0x080000; X break; X X case 3: X cmemsize = 0x100000; X break; X X case 4: X cmemsize = 0x200000; X break; X } X /* end of switch ( Chip Size itemnum ) */ X break; X X case 4: X switch( itemnum ) { X case 0: X cmembase = 0x000000; X break; X X case 1: X cmembase = 0x040000; X break; X X case 2: X cmembase = 0x080000; X break; X X case 3: X cmembase = 0x100000; X break; X } X /* end of switch ( Chip Addr itemnum ) */ X break; X X case 5: X if (mode == WARPS) mmode = TRUE ; X switch( itemnum ) { X case 0: X sfmemsize = 0x000000; X break; X X case 1: X sfmemsize = 0x040000; X break; X X case 2: X sfmemsize = 0x080000; X break; X X case 3: X sfmemsize = 0x0C0000; X break; X X case 4: X sfmemsize = 0x100000; X break; X X case 5: X sfmemsize = 0x180000; X break; X X case 6: X sfmemsize = 0x200000; X break; X X case 7: X sfmemsize = 0x300000; X break; X X case 8: X sfmemsize = 0x400000; X break; X X case 9: X sfmemsize = 0x600000; X break; X X case 10: X sfmemsize = 0x800000; X break; X } X /* end of switch ( SF Size itemnum ) */ X break; X X case 6: X if (mode == WARPS) mmode = TRUE ; X switch( itemnum ) { X case 0: X sfmembase = 0x200000; X break; X X case 1: X sfmembase = 0x240000; X break; X X case 2: X sfmembase = 0x280000; X break; X X case 3: X sfmembase = 0x2C0000; X break; X X case 4: X sfmembase = 0x300000; X break; X X case 5: X sfmembase = 0x400000; X break; X X case 6: X sfmembase = 0x500000; X break; X X case 7: X sfmembase = 0x600000; X break; X X case 8: X sfmembase = 0x700000; X break; X X case 9: X sfmembase = 0x800000; X break; X X case 10: X sfmembase = 0x900000; X break; X X case 11: X sfmembase = 0xC00000; X break; X X case 12: X sfmembase = 0xC40000; X break; X X case 13: X sfmembase = 0xC80000; X break; X X case 14: X sfmembase = 0xCC0000; X break; X X case 15: X sfmembase = 0xD00000; X break; X } X /* end of switch ( SF Addr itemnum ) */ X break; X X case 7: X if (mode == WARPS) mmode = TRUE ; X switch( itemnum ) { X case 0: X fmemsize = 0x000000; X break; X X case 1: X fmemsize = 0x040000; X break; X X case 2: X fmemsize = 0x080000; X break; X X case 3: X fmemsize = 0x0C0000; X break; X X case 4: X fmemsize = 0x100000; X break; X X case 5: X fmemsize = 0x200000; X break; X X case 6: X fmemsize = 0x300000; X break; X X case 7: X fmemsize = 0x400000; X break; X X case 8: X fmemsize = 0x600000; X break; X X case 9: X fmemsize = 0x800000; X break; X X case 10: X fmemsize = 0xa000000; X break; X X case 11: X fmemsize = 0xc00000; X break; X X case 12: X fmemsize = 0xd00000; X break; X X case 13: X fmemsize = 0xe00000; X break; X X case 14: X fmemsize = 0xf00000; X break; X X case 15: X fmemsize = 0x1000000; X break; X } X /* end of switch ( Fast Size itemnum ) */ X break; X X case 8: X if (mode == WARPS) mmode = TRUE ; X switch( itemnum ) { X case 0: X fmembase = 0x200000; X break; X X case 1: X fmembase = 0x300000; X break; X X case 2: X fmembase = 0x400000; X break; X X case 3: X fmembase = 0x500000; X break; X X case 4: X fmembase = 0x600000; X break; X X case 5: X fmembase = 0x800000; X break; X X case 6: X fmembase = 0x7f0000; X break; X X case 7: X fmembase = 0x7e0000; X break; X X case 8: X fmembase = 0x7d00000; X break; X X case 9: X fmembase = 0x7c00000; X break; X X case 10: X fmembase = 0x7a00000; X break; X X case 11: X fmembase = 0x7800000; X break; X X case 12: X fmembase = 0x7600000; X break; X X case 13: X fmembase = 0x7400000; X break; X X case 14: X fmembase = 0x7200000; X break; X X case 15: X fmembase = 0x7000000; X break; X } X /* end of switch ( Fast Addr itemnum ) */ X break; X } X /* end of switch ( menunum ) */ X} X Xvoid wrack_sploot() /* this subprogram cashes in the chips in bad times */ X { X if (log != 0) { X if (log & SA) { X (void) FreeMem(oldcsum, (long)(sizeof(ULONG) * warps)) ; X log = log & CA ; X } X if (log & S8) { X (void) FreeMem(csum, (long)(sizeof(ULONG) * warps)) ; X log = log & C8 ; X } X if (log & S4) { X (void) FreeMem(sizev, (long)(sizeof(long) * frags)) ; X log = log & C4 ; X } X if (log & S2) { X (void) FreeMem(chunkv, (long)(sizeof(long) * frags)) ; X log = log & C2 ; X } X if (log & S1) { X (void) FreeMem(cell, (long)(sizeof(USHORT) * warps)) ; X log = log & C1 ; X } X frags = 0; X warps = 0; X } X} X XSetTimer(sec, micro, timermsg) XULONG sec, micro; Xstruct IOStdReq *timermsg; X/* This routine simply sets the timer to interrupt us after secs.micros */ X{ X timermsg->io_Command = TR_ADDREQUEST; /* add a new timer request */ X timermsg->io_Actual = sec; /* seconds */ X timermsg->io_Length = micro; /* microseconds */ X SendIO(timermsg); /* post a request to the timer */ X} X Xvoid cleanup() { X if (timerport) { X Wait(timerbit); X GetMsg(timerport); X CloseDevice(timermsg); X DeleteStdIO(timermsg); X DeletePort(timerport); X } X if (GfxBase) CloseLibrary(GfxBase) ; X if (window) CloseWindow(window) ; X if (IntuitionBase) CloseLibrary(IntuitionBase) ; X wrack_sploot() ; X exit(AARRRGH) ; X} X Xvoid inittimer() { X if(!(timerport = (struct MsgPort *)CreatePort(0L, 0L)))cleanup(); X if(!(timermsg = (struct IOStdReq *)CreateStdIO(timerport)))cleanup(); X if (OpenDevice(TIMERNAME, UNIT_VBLANK, timermsg, 0L))cleanup(); X X timerbit = 1L << timerport->mp_SigBit ; X SetTimer(1L, 0L, timermsg); /* set for first message */ X} X Xvoid handle_NEWSIZE() /* short term allocations cashed in then realloc'd */ X { /* when user hits gadget but doesn't resize window */ X if (log & SA) { X (void) FreeMem(oldcsum, (long)(sizeof(ULONG) * warps)) ; X log = log & CA ; X } X if (log & S8) { X (void) FreeMem(csum, (long)(sizeof(ULONG) * warps)) ; X log = log & C8 ; X } X if (log & S1) { X (void) FreeMem(cell, (long)(sizeof(USHORT) * warps)) ; X log = log & C1 ; X barh = window->Height - SIZEGAD - DRAGBAR ; /* recalculate height */ X barb = window->Height - SIZEGAD - 1 ; /* get new bar base position */ X warps = barh + 1 ; /* number of storage cells to be reserved */ X if ((cell = (USHORT *)AllocMem((long)sizeof(USHORT) * warps, X MEMF_PUBLIC)) != 0L ) log = log | S1; X if ((csum = (ULONG *)AllocMem((long)sizeof(ULONG) * warps, X MEMF_PUBLIC)) != 0L ) log = log | S8; X if ((oldcsum = (ULONG *)AllocMem((long)sizeof(ULONG) * warps, X MEMF_PUBLIC)) != 0L ) log = log | SA; X if (log != SOK) { /* bail out if we didn't get an allocation */ X wrack_sploot() ; X things_are_cool = FALSE ; /* tell _main that we're leaving */ X } X e_text.TopEdge = barb + BORDER ; /* set the E text position */ X intsig = FALSE ; X } X} X Xvoid handle_MESSAGES() { X unsigned long class; X unsigned int code, qual; X X /* Wait (1L << window->UserPort->mp_SigBit); this is rediculous! */ X while ((message=(struct IntuiMessage *)GetMsg(window->UserPort)) X != 0L) { X class = message->Class ; X code = message->Code ; X qual = message->Qualifier ; X ReplyMsg ; X ticker = 0 ; /* cut short the timer to expedite service */ X switch( class ) { X case MENUPICK: X handle_MENUPICK( class, code ) ; /* do menus ASAP */ X break ; X X case NEWSIZE: X intsig = TRUE ; /* resize when done here */ X break ; X } X } X} X Xvoid memmometer() /* this subprogram draws the bar graphs */ X { X long i; X long y; X X (void) handle_MESSAGES() ; /* go see if the user wants anything */ X i = 0 ; X while ((i < barh) && (intsig == FALSE)) { X y = barb - i ; X SetAPen(window->RPort, (long)cell[i]); X Move(window->RPort, xl, y); X Draw(window->RPort, xr, y); X i++ ; X } X} X Xvoid shake() /* this subprogram slings down the mercury column */ X { X int i; X X for (i = 0; i < barh; i++) { X cell[i] = YELP ; X } X} X Xvoid lockout() /* this subprogram renders a whole column in border colors */ X { X (void) handle_MESSAGES() ; /* go see if the user wants anything */ X if (intsig == FALSE) { X SetAPen(window->RPort, WHTP) ; /* set in the border color */ X RectFill(window->RPort, xl, (barb - barh + 1), xr, barb) ; /* fill */ X } X} X Xvoid updatewarps( wf, membase, memseg ) /* this subprogram finds changes */ Xshort wf; Xlong membase, memseg ; X { X register long i ; X register ULONG r ; X register ULONG delta ; X register ULONG *a ; X X if (memseg == 0) { X (void) lockout() ; X return ; X } X else (void) shake() ; X X delta = (ULONG)(memseg & EVENMASK) ; /* try to avoid odd address trap */ X r = (ULONG)(membase & EVENMASK) ; /* prefer wrong address to death */ X for (i = 0; i < barh; i++) { X csum[i] = 0 ; X } X for (i = 0; i < barh; i++) { X for (a = (ULONG *)r; a < (ULONG *)(r + delta); a++) { X csum[i] ^= *a ; X } X if (oldcsum[i] != 0) cell[i] ^= GRNP ; /* enters with pens */ X if (csum[i] == oldcsum[i]) cell[i] &= GRNP ; /* all on, condition */ X if (csum[i] == 0) cell[i] ^= CYNP ; /* detected clears a */ X if (oldcsum[i] == 0xffffffff) cell[i] = CYNP ;/* pen; at the end a */ X if (csum[i] == 0xffffffff) cell[i] = GRNP ; /* logical true sets */ X oldcsum[i] = csum[i] ; /* a pen not yet set */ X r += delta ; X } X (void) memmometer(); X} X Xvoid updatescreen( wf, membase, memseg ) Xshort wf; Xlong membase, memseg; X { X register long size ; X register struct MemHeader *hdr ; X register struct MemChunk *chunk ; X extern struct ExecBase *SysBase ; X register long *which ; /* active memlist chunk pointer */ X register long newlimit ; /* number of chunks, incl 1 null chunk, + 1 */ X register long newfrags ; /* number of chunks, incl null chunks, + 1 */ X long newsize ; /* size of next request for chunkv/sizev memory, + 1 */ X int i, j, k, l ; X int length ; /* length is number of chunks to be processed, + 1 */ X BOOL cf, nf ; /* cf is "chip flag" nf is "null chunk found" flag */ X X if (memseg == 0) { X (void) lockout() ; X return; X } X else (void) shake() ; X X for (i = 0; i < 3; i++) { X chip[i] = 0; X fast[i] = 0; X } X for (i = 0; i < frags; i++) { X chunkv[i] = 0; X sizev[i] = 0; X } X newfrags = 0 ; X newlimit = 0 ; X nf = FALSE; X Forbid() ; X hdr = (struct MemHeader *) SysBase->MemList.lh_Head ; X while (hdr->mh_Node.ln_Succ) { X if (hdr->mh_Attributes & MEMF_CHIP) { X which = chip ; X cf = TRUE; X } X else { X which = fast ; X cf = FALSE; X } X if (((cf == TRUE) && (wf == 0)) || ((cf == FALSE) && (wf > 0))) { X for (chunk = hdr->mh_First; chunk; chunk = chunk->mc_Next) { X if (which[1] < frags) chunkv[which[1]++] = (unsigned long)chunk ; X size = chunk->mc_Bytes ; X if (which[2] < frags) sizev[which[2]++] = (unsigned long)size; X *which += size ; X if (nf == FALSE) { X newlimit++ ; X if (chunkv[newfrags] == NULL) { X nf = TRUE; X } X } X newfrags++ ; X } X } X hdr = (struct MemHeader *)hdr->mh_Node.ln_Succ ; X } X Permit() ; X length = frags ; X if (newlimit < frags) length = newlimit ; X for (i = 0; i < length; i++) { X chunkv[i] -= membase; /* chunkv is now array offset from base */ X sizev[i] += chunkv[i]; /* and sizev is now address of array top */ X chunkv[i] = chunkv[i] / memseg; /* this is the number of pixels */ X sizev[i] = sizev[i] / memseg; /* and this is the top pixel */ X if (chunkv[i] < 0) chunkv[i] = 0 ; /* we do some bounds checking */ X if (sizev[i] < 0) sizev[i] = 0 ; X if (chunkv[i] >= barh) chunkv[i] = barh - 1 ; X if (sizev[i] >= barh) sizev[i] = barh - 1 ; X if (sizev[i] - chunkv[i] < 0) sizev[i] = chunkv[i] ; X j = chunkv[i] ; /* from now on it will be less confusing if */ X k = sizev[i] ; /* we assign some variables for this stuff */ X if (sizev[i] - chunkv[i] == 0) { X cell[j] &= BLUP ; X } X else { X for (l = j; l < k; l++) { X cell[l] &= BLKP ; X } X } X } X (void) memmometer(); X newsize = frags ; X while (newsize < newlimit) { X newsize += EXTENSION ; X } X if (newlimit > frags) { X (void) FreeMem(chunkv, (long)(sizeof(long) * frags)); X if ((chunkv = (unsigned long *)AllocMem((long)sizeof(long) * newsize, X MEMF_PUBLIC)) == 0L ) { X log = log & C2 ; X } X (void) FreeMem(sizev, (long)(sizeof(long) * frags)); X if ((sizev = (unsigned long *)AllocMem((long)sizeof(long) * newsize, X MEMF_PUBLIC)) == 0L ) { X (void) FreeMem(chunkv, (long)(sizeof(long) * newsize)); X log = log & C4 ; X } X if (log != SOK) { X wrack_sploot() ; X things_are_cool = FALSE ; X } X else frags = newsize ; X } X} X Xmain() { X static struct IntuiText bodyText0 = X {BLUP, WHTP, JAM2, 58, 10, NULL, NULL, NULL}; X static struct IntuiText bodyText1 = X {BLUP, WHTP, JAM2, 42, 20, NULL, NULL, NULL}; X static struct IntuiText bodyText2 = X {BLUP, WHTP, JAM2, 50, 30, NULL, NULL, NULL}; X static struct IntuiText positiveText = X {BLUP, WHTP, JAM2, 7, 3, NULL, NULL, NULL}; X static struct IntuiText negativeText = X {BLUP, WHTP, JAM2, 7, 3, NULL, NULL, NULL}; X struct IntuiMessage *message; X ULONG class; X USHORT code; X ULONG wakeupbits; X long syspri; X char *nptr; X struct Task *mmtcb; X char oldpri; X int t; X int i; X USHORT colflags; /* keeps track of column positions and counts */ X USHORT left; /* left column, left edge */ X USHORT middle; /* middle column, left edge */ X USHORT right; /* right column, left edge */ X USHORT barw; /* width of each mercury column */ X USHORT wf; /* memmometer window current column number */ X long cmemseg; X long sfmemseg; X long fmemseg; X long membase; X long memseg; X long memsize; X X bodyText0.IText = (UBYTE *) "WARNING! CRASH POSSIBLE"; X bodyText1.IText = (UBYTE *) "MENU MEMORY SELECTIONS MUST"; X bodyText2.IText = (UBYTE *) "REFERENCE EXISTING MEMORY"; X bodyText0.NextText = &bodyText1; X bodyText1.NextText = &bodyText2; X positiveText.IText = (UBYTE *) "Risk It"; X negativeText.IText = (UBYTE *) "Retreat"; X X log = 0 ; X if ((cell = (USHORT *)AllocMem((long)sizeof(USHORT) * BARS, X MEMF_PUBLIC)) != 0L ) log = log | S1; X if ((chunkv = (ULONG *)AllocMem((long)sizeof(ULONG) * STARTVAL, X MEMF_PUBLIC)) != 0L ) log = log | S2; X if ((sizev = (ULONG *)AllocMem((long)sizeof(ULONG) * STARTVAL, X MEMF_PUBLIC)) != 0L ) log = log | S4; X if ((csum = (ULONG *)AllocMem((long)sizeof(ULONG) * BARS, X MEMF_PUBLIC)) != 0L ) log = log | S8; X if ((oldcsum = (ULONG *)AllocMem((long)sizeof(ULONG) * BARS, X MEMF_PUBLIC)) != 0L ) log = log | SA; X if (log != SOK) { X wrack_sploot() ; X exit(AARRRGH) ; X } X if ((IntuitionBase = (struct IntuitionBase *)OpenLibrary( X "intuition.library",33L)) != NULL && X (window=OpenWindow(&newwindow)) != NULL) { X if ((GfxBase = (struct GfxBase *)OpenLibrary( X "graphics.library", 0L)) != NULL) { X (void) initmenus(); X /* rp = window->RPort ; */ X inittimer(); X wf = 0; X mmode = FALSE ; X mode = FRAGS ; X delayval = p_rate ; X priority = p_priority ; X if (priority > 0) priority = 0 ; X lastpri = priority ; X syspri = priority ; X nptr = NULL ; X mmtcb = FindTask( nptr ) ; X oldpri = SetTaskPri( mmtcb, syspri ) ; X cmemsize = p_chip << 10 ; X cmembase = p_chipa << 10 ; X sfmemsize = p_sf << 10 ; X sfmembase = p_sfa << 10 ; X if (p_fast >= 256) fmemsize = p_fast << 10 ; X else fmemsize = p_fast << 20 ; X if (p_fasta <= 0) fmembase = 0x8000000 - ((-1 * p_fasta) << 20) ; X else fmembase = p_fasta << 20 ; X while (things_are_cool == TRUE) { X if (chgflag != 0) { X chgflag = 0 ; X colflags = 0 ; X if (cmemsize != 0) colflags = colflags | (1 << 0) ; X if (sfmemsize != 0) colflags = colflags | (1 << 1) ; X if (fmemsize != 0) colflags = colflags | (1 << 2) ; X switch ( colflags ) { X case 0: X barw = (WINW - (2 * BORDER)) - 1 ; X left = LEFT ; X middle = 0 ; X right = 0 ; X f_text.FrontPen = ORNP ; X break ; X X case 1: X barw = (WINW - (2 * BORDER)) - 1 ; X left = LEFT ; X middle = 0 ; X right = 0 ; X f_text.FrontPen = BLUP ; X break ; X X case 2: X barw = (WINW - (2 * BORDER)) - 1 ; X left = 0 ; X middle = LEFT ; X right = 0 ; X f_text.FrontPen = CYNP ; X break ; X X case 3: X barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ; X left = LEFT ; X middle = (left + barw + 1) ; X right = 0 ; X f_text.FrontPen = BLUP ; X break ; X X case 4: X barw = (WINW - (2 * BORDER)) - 1 ; X left = 0 ; X middle = 0; X right = LEFT ; X f_text.FrontPen = YELP ; X break ; X X case 5: X barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ; X left = LEFT ; X middle = 0 ; X right = (left + barw + 1) ; X f_text.FrontPen = CYNP ; X break ; X X case 6: X barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ; X left = 0 ; X middle = LEFT ; X right = (middle + barw + 1) ; X f_text.FrontPen = YELP ; X break ; X X case 7: X barw = ((WINW - (2 * BORDER)) / 3 ) - 1 ; X left = LEFT ; X middle = (left + barw + 1) ; X right = (middle + barw + 1) ; X f_text.FrontPen = BLUP ; X break ; X } /* end of switch ( colflags ) */ X } /* end of if ( chgflag ) */ X cmemseg = cmemsize / barh ; X sfmemseg = sfmemsize / barh ; X fmemseg = fmemsize / barh ; X if (mmode == TRUE && ((sfmemsize != 0) || X (fmemsize != 0))) { X /* Keep your eyes open here. If we get a negative */ X /* response from the requester, that means either the */ X /* user retreated, or a no-requester function such as */ X /* noreq or KillReq has selected the negative option. */ X /* If such functions select the positive option they */ X /* force acceptance of the crash risk for Warps mode. */ X X mode = AutoRequest(window, &bodyText0, &positiveText, X &negativeText, 0L, 0L, 319L, 79L) ; X if (mode == FALSE) { /* user Retreat selection */ X sfmemseg = 0 ; /* results in execution of */ X sfmemsize = 0 ; /* this code segment which */ X fmemseg = 0 ; /* resets to safer values */ X fmemsize = 0 ; /* resets to safer values */ X } X } X switch ( wf ) { X case 0: X xl = left ; X membase = cmembase ; X memseg = cmemseg ; X memsize = cmemsize ; X break; X X case 1: X xl = middle ; X membase = sfmembase ; X memseg = sfmemseg ; X memsize = sfmemsize ; X break; X X case 2: X xl = right ; X membase = fmembase ; X memseg = fmemseg ; X memsize = fmemsize ; X break; X } /* end of switch ( wf ) */ X xr = xl + barw ; X if (mmode == TRUE) { X mode = WARPS ; X mmode = FALSE ; X } X if (xl != 0) { X if (intsig == TRUE) { X handle_NEWSIZE() ; X } X if (mode == WARPS) { X (void) updatewarps( wf, membase, memseg ) ; X e_text.FrontPen = YELP ; X } X if (mode == FRAGS) { X (void) updatescreen( wf, membase, memseg ) ; X e_text.FrontPen = BLUP ; X } X } X if (syspri != priority) { X syspri = priority ; X nptr = NULL; X mmtcb = FindTask( nptr ) ; X oldpri = SetTaskPri( mmtcb, syspri ) ; X } X if (wf == 2) { X PrintIText(window->RPort,&f_text,RTEXT,0L) ; X while ( ticker > 0 ) { X wakeupbits = Wait(timerbit) ; X if (wakeupbits & timerbit) { X GetMsg(timerport); X SetTimer(0L, TMARK, timermsg); X } X /* quick like, go see if the user wants anything */ X (void) handle_MESSAGES() ; X ticker-- ; X } X ticker = delayval * TICKIES ; X } X wf++ ; X if (wf >= 3) wf = 0 ; X if (intsig == TRUE) { X handle_NEWSIZE() ; X } X } /* end of while ( things_are_cool) */ X X if (timerport) { X Wait(timerbit); X GetMsg(timerport); X CloseDevice(timermsg); X DeleteStdIO(timermsg); X DeletePort(timerport); X } X X if (GfxBase) CloseLibrary(GfxBase) ; X } X if (window) CloseWindow(window) ; X if (IntuitionBase) CloseLibrary(IntuitionBase) ; X } X wrack_sploot() ; X} X X_cli_parse() {} X_wb_parse() {} END_OF_FILE if test 38693 -ne `wc -c <'mm.c'`; then echo shar: \"'mm.c'\" unpacked with wrong size! fi # end of 'mm.c' fi if test -f 'mminit.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mminit.c'\" else echo shar: Extracting \"'mminit.c'\" \(27558 characters\) sed "s/^X//" >'mminit.c' <<'END_OF_FILE' X/* : ai=0 bk=0 ts=8 */ X#include "mm.h" X X#define PROJMAX 3 /* number of project menu items */ X#define SETUPMAX 2 /* number of setup menu items */ X#define MODEMAX 2 X#define FREQMAX 4 /* number of frequency menu items */ X#define PRIOMAX 16 /* number of priority menu items */ X#define CHIPMAX 5 /* number of chip mem size menu items */ X#define CHIPAMAX 6 /* number of chip mem base addr menu items */ X#define SFMAX 11 /* number of sf mem size menu items */ X#define SFAMAX 16 /* number of sf mem base addr menu items */ X#define FASTMAX 16 /* number of fast mem size menu items */ X#define FASTAMAX 16 /* number of fast mem base addr menu items */ X#define MAXMENU 9 /* total number of top level menus */ X Xextern BOOL p_mode; /* preset frags mode = 0, warps mode = 1 */ Xextern long p_rate; /* preset sample interval, secs see menu */ Xextern long p_priority; /* preset priority, range -100 to +100 */ Xextern long p_chip; /* preset chip mem size, kbytes see menu */ Xextern long p_chipa; /* preset chip mem address, kb see menu */ Xextern long p_sf; /* preset slowfast mem size, kb see menu */ Xextern long p_sfa; /* preset slowfast mem addr, kb see menu */ Xextern long p_fast; /* preset fast mem size, mbytes see menu */ Xextern long p_fasta; /* preset fast mem addr, mbytes see menu */ X X/******************************************************/ X/* Structure declarations for the menu sections */ X/******************************************************/ X Xstruct MenuItem ProjItem[PROJMAX]; Xstruct IntuiText ProjText[PROJMAX]; Xstruct MenuItem SetupItem[SETUPMAX]; Xstruct IntuiText SetupText[SETUPMAX]; Xstruct MenuItem ModeItem[MODEMAX]; Xstruct IntuiText ModeText[MODEMAX]; Xstruct MenuItem FreqItem[FREQMAX]; Xstruct IntuiText FreqText[FREQMAX]; Xstruct MenuItem PrioItem[PRIOMAX]; Xstruct IntuiText PrioText[PRIOMAX]; Xstruct MenuItem ChipItem[CHIPMAX]; Xstruct IntuiText ChipText[CHIPMAX]; Xstruct MenuItem ChipAItem[CHIPAMAX]; Xstruct IntuiText ChipAText[CHIPAMAX]; Xstruct MenuItem SFItem[SFMAX]; Xstruct IntuiText SFText[SFMAX]; Xstruct MenuItem SFAItem[SFAMAX]; Xstruct IntuiText SFAText[SFAMAX]; Xstruct MenuItem FastItem[FASTMAX]; Xstruct IntuiText FastText[FASTMAX]; Xstruct MenuItem FastAItem[FASTAMAX]; Xstruct IntuiText FastAText[FASTAMAX]; Xstruct Menu menu[MAXMENU]; X X/*****************************************************************/ X/* The following function initializes the structure arrays */ X/* needed to provide the Project menu topic. */ X/* this was left retro-compatible with Manx 3.4a (nplus1) */ X/*****************************************************************/ Xvoid InitProjItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<PROJMAX; n++ ) X { X nplus1 = n + 1; X ProjItem[n].NextItem = &ProjItem[nplus1]; X ProjItem[n].LeftEdge = 0; X ProjItem[n].TopEdge = 9 * n; X ProjItem[n].Width = 64; X ProjItem[n].Height = 9; X ProjItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP; X ProjItem[n].MutualExclude = 0; X ProjItem[n].ItemFill = (APTR)&ProjText[n]; X ProjItem[n].SelectFill = NULL; X ProjItem[n].Command = 0; X ProjItem[n].SubItem = NULL; X ProjItem[n].NextSelect = 0; X X ProjText[n].FrontPen = BLUP; X ProjText[n].BackPen = WHTP; X ProjText[n].DrawMode = JAM2;/* render in fore and background */ X ProjText[n].LeftEdge = 0; X ProjText[n].TopEdge = 1; X ProjText[n].ITextFont = NULL; X ProjText[n].NextText = NULL; X } XProjItem[PROJMAX-1].NextItem = NULL; X X/* initialize text for specific menu items */ X XProjText[0].IText = (UBYTE *)"Front"; XProjText[1].IText = (UBYTE *)"Back"; XProjText[2].IText = (UBYTE *)"Quit"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Setup menu topic. */ X/*****************************************************************/ X Xvoid InitSetupItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<SETUPMAX; n++ ) X { X nplus1 = n + 1; X SetupItem[n].NextItem = &SetupItem[nplus1]; X SetupItem[n].LeftEdge = 0; X SetupItem[n].TopEdge = 9 * n; X SetupItem[n].Width = 44; X SetupItem[n].Height = 9; X SetupItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP ; X SetupItem[n].MutualExclude = 0; X SetupItem[n].ItemFill = (APTR)&SetupText[n]; X SetupItem[n].SelectFill = NULL; X SetupItem[n].Command = 0; X SetupItem[n].NextSelect = 0; X X SetupText[n].FrontPen = BLUP; X SetupText[n].BackPen = WHTP; X SetupText[n].DrawMode = JAM2; X SetupText[n].LeftEdge = 0; X SetupText[n].TopEdge = 1; X SetupText[n].ITextFont = NULL; X SetupText[n].NextText = NULL; X } XSetupItem[SETUPMAX-1].NextItem = NULL; X XSetupText[0].IText = (UBYTE *)"Mode"; XSetupItem[0].SubItem = ModeItem; XSetupText[1].IText = (UBYTE *)"Freq"; XSetupItem[1].SubItem = FreqItem; X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Mode submenu topic. */ X/*****************************************************************/ X Xfor( n=0; n<MODEMAX; n++ ) X { X nplus1 = n + 1; X ModeItem[n].NextItem = &ModeItem[nplus1]; X ModeItem[n].LeftEdge = 38; X ModeItem[n].TopEdge = 9 * n; X ModeItem[n].Width = 72; X ModeItem[n].Height = 9; X ModeItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X ModeItem[n].MutualExclude = (~(1 << n)); X ModeItem[n].ItemFill = (APTR)&ModeText[n]; X ModeItem[n].SelectFill = NULL; X ModeItem[n].Command = 0; X ModeItem[n].SubItem = NULL; X ModeItem[n].NextSelect = 0; X X ModeText[n].FrontPen = BLUP; X ModeText[n].BackPen = WHTP; X ModeText[n].DrawMode = JAM2; /* render in fore and background */ X ModeText[n].LeftEdge = 0; X ModeText[n].TopEdge = 1; X ModeText[n].ITextFont = NULL; X ModeText[n].NextText = NULL; X } XModeItem[MODEMAX-1].NextItem = NULL; X X/* select mode subitem checked */ Xswitch (p_mode) { X case 0: n = 0; break; X case 1: n = 1; break; X default: n = 1; p_mode = FALSE; X } XModeItem[n].Flags |= CHECKED; X X/* initialize text for specific submenu items */ XModeText[0].IText = (UBYTE *)" Frags"; XModeText[1].IText = (UBYTE *)" Warps"; X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Freq submenu topic. */ X/*****************************************************************/ X Xfor( n=0; n<FREQMAX; n++ ) X { X nplus1 = n + 1; X FreqItem[n].NextItem = &FreqItem[nplus1]; X FreqItem[n].LeftEdge = 38; X FreqItem[n].TopEdge = 9 * n; X FreqItem[n].Width = 88; X FreqItem[n].Height = 9; X FreqItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X FreqItem[n].MutualExclude = (~(1 << n)); X FreqItem[n].ItemFill = (APTR)&FreqText[n]; X FreqItem[n].SelectFill = NULL; X FreqItem[n].Command = 0; X FreqItem[n].SubItem = NULL; X FreqItem[n].NextSelect = 0; X X FreqText[n].FrontPen = BLUP; X FreqText[n].BackPen = WHTP; X FreqText[n].DrawMode = JAM2; /* render in fore and background */ X FreqText[n].LeftEdge = 0; X FreqText[n].TopEdge = 1; X FreqText[n].ITextFont = NULL; X FreqText[n].NextText = NULL; X } XFreqItem[FREQMAX-1].NextItem = NULL; X X/* select frequency item checked */ Xswitch (p_rate) { X case 1: n = 0; break; X case 2: n = 1; break; X case 5: n = 2; break; X case 10: n = 3; break; X default: n = 1; p_rate = 2; X } XFreqItem[n].Flags |= CHECKED; X X/* initialize text for specific menu items */ XFreqText[0].IText = (UBYTE *)" 1 Sec "; XFreqText[1].IText = (UBYTE *)" 2 Secs"; XFreqText[2].IText = (UBYTE *)" 5 Secs"; XFreqText[3].IText = (UBYTE *)" 10 Secs"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Priority menu topic. */ X/*****************************************************************/ X Xvoid InitPrioItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<PRIOMAX; n++ ) X { X nplus1 = n + 1; X PrioItem[n].NextItem = &PrioItem[nplus1]; X PrioItem[n].LeftEdge = 0; X PrioItem[n].TopEdge = 9 * n; X PrioItem[n].Width = 80; X PrioItem[n].Height = 9; X PrioItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X PrioItem[n].MutualExclude = (~(1 << n)); X if (n < 3) PrioItem[n].MutualExclude &= 0x0007; X if (n < 1) PrioItem[n].MutualExclude |= 0x0007; X PrioItem[n].ItemFill = (APTR)&PrioText[n]; X PrioItem[n].SelectFill = NULL; X PrioItem[n].Command = 0; X PrioItem[n].NextSelect = 0; X X PrioText[n].FrontPen = BLUP; X PrioText[n].BackPen = WHTP; X if (n > 11) { X PrioText[n].FrontPen = ORNP; X PrioText[n].BackPen = REDP; X } X PrioText[n].DrawMode = JAM2; X PrioText[n].LeftEdge = 0; X PrioText[n].TopEdge = 1; X PrioText[n].ITextFont = NULL; X PrioText[n].NextText = NULL; X } XPrioItem[PRIOMAX-1].NextItem = NULL; X X/* select priority item checked */ Xswitch (p_priority) { X case -99: n = 3; break; X case -75: n = 4; break; X case -50: n = 5; break; X case -25: n = 6; break; X case -20: n = 7; break; X case -15: n = 8; break; X case -10: n = 9; break; X case -5: n = 10; break; X case 0: n = 11; break; X case 5: n = 12; break; X case 10: n = 13; break; X case 15: n = 14; break; X case 20: n = 15; break; X default: n = 11; p_priority = 0; X } XPrioItem[n].Flags |= CHECKED; X XPrioText[ 0].IText = (UBYTE *)" NORM "; XPrioText[ 1].IText = (UBYTE *)" DECR "; XPrioText[ 2].IText = (UBYTE *)" INCR "; XPrioText[ 3].IText = (UBYTE *)" -99 "; XPrioText[ 4].IText = (UBYTE *)" -75 "; XPrioText[ 5].IText = (UBYTE *)" -50 "; XPrioText[ 6].IText = (UBYTE *)" -25 "; XPrioText[ 7].IText = (UBYTE *)" -20 "; XPrioText[ 8].IText = (UBYTE *)" -15 "; XPrioText[ 9].IText = (UBYTE *)" -10 "; XPrioText[10].IText = (UBYTE *)" -5 "; XPrioText[11].IText = (UBYTE *)" 0 "; XPrioText[12].IText = (UBYTE *)" 5 "; XPrioText[13].IText = (UBYTE *)" 10 "; XPrioText[14].IText = (UBYTE *)" 15 "; XPrioText[15].IText = (UBYTE *)" 20 "; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Chip Mem Size menu topic. */ X/*****************************************************************/ X Xvoid InitChipItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<CHIPMAX; n++ ) X { X nplus1 = n + 1; X ChipItem[n].NextItem = &ChipItem[nplus1]; X ChipItem[n].LeftEdge = 0; X ChipItem[n].TopEdge = 9 * n; X ChipItem[n].Width = 80; X ChipItem[n].Height = 9; X ChipItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X ChipItem[n].MutualExclude = (~(1 << n)); X ChipItem[n].ItemFill = (APTR)&ChipText[n]; X ChipItem[n].SelectFill = NULL; X ChipItem[n].Command = 0; X ChipItem[n].NextSelect = 0; X X ChipText[n].FrontPen = BLUP; X ChipText[n].BackPen = WHTP; X ChipText[n].DrawMode = JAM2; X ChipText[n].LeftEdge = 0; X ChipText[n].TopEdge = 1; X ChipText[n].ITextFont = NULL; X ChipText[n].NextText = NULL; X } XChipItem[CHIPMAX-1].NextItem = NULL; X X/* select chip mem size item checked */ Xswitch (p_chip) { X case 0: n = 0; break; X case 256: n = 1; break; X case 512: n = 2; break; X case 1024: n = 3; break; X case 2048: n = 4; break; X default: n = 2; p_chip = 512; X } XChipItem[n].Flags |= CHECKED; X XChipText[0].IText = (UBYTE *)" NONE"; XChipText[1].IText = (UBYTE *)" 256K"; XChipText[2].IText = (UBYTE *)" 512K"; XChipText[3].IText = (UBYTE *)" 1 MB"; XChipText[4].IText = (UBYTE *)" 2 MB"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Chip Base Addr menu topic. */ X/*****************************************************************/ X Xvoid InitChipAItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<CHIPAMAX; n++ ) X { X nplus1 = n + 1; X ChipAItem[n].NextItem = &ChipAItem[nplus1]; X ChipAItem[n].LeftEdge = 0; X ChipAItem[n].TopEdge = 9 * n; X ChipAItem[n].Width = 80; X ChipAItem[n].Height = 9; X ChipAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X ChipAItem[n].MutualExclude = (~(1 << n)); X ChipAItem[n].ItemFill = (APTR)&ChipAText[n]; X ChipAItem[n].SelectFill = NULL; X ChipAItem[n].Command = 0; X ChipAItem[n].NextSelect = 0; X X ChipAText[n].FrontPen = BLUP; X ChipAText[n].BackPen = WHTP; X ChipAText[n].DrawMode = JAM2; X ChipAText[n].LeftEdge = 0; X ChipAText[n].TopEdge = 1; X ChipAText[n].ITextFont = NULL; X ChipAText[n].NextText = NULL; X } XChipAItem[CHIPAMAX-1].NextItem = NULL; X X/* select chip base address item checked */ Xswitch (p_chipa) { X case 0: n = 0; break; X case 256: n = 1; break; X case 512: n = 2; break; X case 768: n = 3; break; X case 1024: n = 4; break; X case 1536: n = 5; break; X default: n = 0; p_chipa = 0; X } XChipAItem[n].Flags |= CHECKED; X XChipAText[0].IText = (UBYTE *)" @ 0K"; XChipAText[1].IText = (UBYTE *)" @ 256K"; XChipAText[2].IText = (UBYTE *)" @ 512K"; XChipAText[3].IText = (UBYTE *)" @ 768K"; XChipAText[4].IText = (UBYTE *)" @ 1.0M"; XChipAText[5].IText = (UBYTE *)" @ 1.5M"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Slow Fast Mem Size menu topic. */ X/*****************************************************************/ X Xvoid InitSFItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<SFMAX; n++ ) X { X nplus1 = n + 1; X SFItem[n].NextItem = &SFItem[nplus1]; X SFItem[n].LeftEdge = 0; X SFItem[n].TopEdge = 9 * n; X SFItem[n].Width = 80; X SFItem[n].Height = 9; X SFItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X SFItem[n].MutualExclude = (~(1 << n)); X SFItem[n].ItemFill = (APTR)&SFText[n]; X SFItem[n].SelectFill = NULL; X SFItem[n].Command = 0; X SFItem[n].NextSelect = 0; X X SFText[n].FrontPen = BLUP; X SFText[n].BackPen = WHTP; X SFText[n].DrawMode = JAM2; X SFText[n].LeftEdge = 0; X SFText[n].TopEdge = 1; X SFText[n].ITextFont = NULL; X SFText[n].NextText = NULL; X } XSFItem[SFMAX-1].NextItem = NULL; X X/* select slow fast mem size item checked */ Xswitch (p_sf) { X case 0: n = 0; break; X case 256: n = 1; break; X case 512: n = 2; break; X case 768: n = 3; break; X case 1024: n = 4; break; X case 1536: n = 5; break; X case 2048: n = 6; break; X case 3072: n = 7; break; X case 4096: n = 8; break; X case 6144: n = 9; break; X case 8192: n = 10; break; X default: n = 0; p_sf = 0; X } XSFItem[n].Flags |= CHECKED; X XSFText[ 0].IText = (UBYTE *)" NONE "; XSFText[ 1].IText = (UBYTE *)" .25 MB"; XSFText[ 2].IText = (UBYTE *)" .5 MB"; XSFText[ 3].IText = (UBYTE *)" .75 MB"; XSFText[ 4].IText = (UBYTE *)" 1.0 MB"; XSFText[ 5].IText = (UBYTE *)" 1.5 MB"; XSFText[ 6].IText = (UBYTE *)" 2.0 MB"; XSFText[ 7].IText = (UBYTE *)" 3.0 MB"; XSFText[ 8].IText = (UBYTE *)" 4.0 MB"; XSFText[ 9].IText = (UBYTE *)" 6.0 MB"; XSFText[10].IText = (UBYTE *)" 8.0 MB"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Slow Fast Mem Base Addr menu topic. */ X/*****************************************************************/ X Xvoid InitSFAItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<SFAMAX; n++ ) X { X nplus1 = n + 1; X SFAItem[n].NextItem = &SFAItem[nplus1]; X SFAItem[n].LeftEdge = 0; X SFAItem[n].TopEdge = 9 * n; X SFAItem[n].Width = 104; X SFAItem[n].Height = 9; X SFAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X SFAItem[n].MutualExclude = (~(1 << n)); X SFAItem[n].ItemFill = (APTR)&SFAText[n]; X SFAItem[n].SelectFill = NULL; X SFAItem[n].Command = 0; X SFAItem[n].NextSelect = 0; X X SFAText[n].FrontPen = BLUP; X SFAText[n].BackPen = WHTP; X SFAText[n].DrawMode = JAM2; X SFAText[n].LeftEdge = 0; X SFAText[n].TopEdge = 1; X SFAText[n].ITextFont = NULL; X SFAText[n].NextText = NULL; X } XSFAItem[SFAMAX-1].NextItem = NULL; X X/* select slow fast mem base address item checked */ Xswitch (p_sfa) { X case 2048: n = 0; break; /* 0x0800 kb = 2 mb */ X case 2304: n = 1; break; /* 0x0900 kb = 2.25 mb */ X case 2560: n = 2; break; /* 0x0A00 kb = 2.5 mb */ X case 2816: n = 3; break; /* 0x0B00 kb = 2.75 mb */ X case 3072: n = 4; break; /* 0x0C00 kb = 3 mb */ X case 4096: n = 5; break; /* 0x1000 kb = 4 mb */ X case 5120: n = 6; break; /* 0x1400 kb = 5 mb */ X case 6144: n = 7; break; /* 0x1800 kb = 6 mb */ X case 7168: n = 8; break; /* 0x1C00 kb = 7 mb */ X case 8192: n = 9; break; /* 0x2000 kb = 8 mb */ X case 9216: n = 10; break; /* 0x2400 kb = 9 mb */ X case 12288: n = 11; break; /* 0x3000 kb = 12 mb */ X case 12544: n = 12; break; /* 0x3100 kb = 12.25 mb */ X case 12800: n = 13; break; /* 0x3200 kb = 12.5 mb */ X case 13056: n = 14; break; /* 0x3300 kb = 12.75 mb */ X case 13312: n = 15; break; /* 0x3400 kb = 13 mb */ X default: n = 0; p_sfa = 2048; X } XSFAItem[n].Flags |= CHECKED; X XSFAText[ 0].IText = (UBYTE *)" @ 2.0 Meg"; XSFAText[ 1].IText = (UBYTE *)" @ 2.4 Meg"; XSFAText[ 2].IText = (UBYTE *)" @ 2.8 Meg"; XSFAText[ 3].IText = (UBYTE *)" @ 2.C Meg"; XSFAText[ 4].IText = (UBYTE *)" @ 3.0 Meg"; XSFAText[ 5].IText = (UBYTE *)" @ 4.0 Meg"; XSFAText[ 6].IText = (UBYTE *)" @ 5.0 Meg"; XSFAText[ 7].IText = (UBYTE *)" @ 6.0 Meg"; XSFAText[ 8].IText = (UBYTE *)" @ 7.0 Meg"; XSFAText[ 9].IText = (UBYTE *)" @ 8.0 Meg"; XSFAText[10].IText = (UBYTE *)" @ 9.0 Meg"; XSFAText[11].IText = (UBYTE *)" @ C.0 Meg"; XSFAText[12].IText = (UBYTE *)" @ C.4 Meg"; XSFAText[13].IText = (UBYTE *)" @ C.8 Meg"; XSFAText[14].IText = (UBYTE *)" @ C.C Meg"; XSFAText[15].IText = (UBYTE *)" @ D.0 Meg"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Fast Mem Size menu topic. */ X/*****************************************************************/ X Xvoid InitFastItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<FASTMAX; n++ ) X { X nplus1 = n + 1; X FastItem[n].NextItem = &FastItem[nplus1]; X FastItem[n].LeftEdge = 0; X FastItem[n].TopEdge = 9 * n; X FastItem[n].Width = 80; X FastItem[n].Height = 9; X FastItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X FastItem[n].MutualExclude = (~(1 << n)); X FastItem[n].ItemFill = (APTR)&FastText[n]; X FastItem[n].SelectFill = NULL; X FastItem[n].Command = 0; X FastItem[n].NextSelect = 0; X X FastText[n].FrontPen = BLUP; X FastText[n].BackPen = WHTP; X FastText[n].DrawMode = JAM2; X FastText[n].LeftEdge = 0; X FastText[n].TopEdge = 1; X FastText[n].ITextFont = NULL; X FastText[n].NextText = NULL; X } XFastItem[FASTMAX-1].NextItem = NULL; X X/* select fast mem size item checked */ Xswitch (p_fast) { X case 0: n = 0; break; X case 256: n = 1; break; X case 512: n = 2; break; X case 756: n = 3; break; X case 1: n = 4; break; X case 2: n = 5; break; X case 3: n = 6; break; X case 4: n = 7; break; X case 6: n = 8; break; X case 8: n = 9; break; X case 10: n = 10; break; X case 12: n = 11; break; X case 13: n = 12; break; X case 14: n = 13; break; X case 15: n = 14; break; X case 16: n = 15; break; X default: n = 0; p_fast = 0; X } XFastItem[n].Flags |= CHECKED; X XFastText[ 0].IText = (UBYTE *)" NONE"; XFastText[ 1].IText = (UBYTE *)" 256K"; XFastText[ 2].IText = (UBYTE *)" 512K"; XFastText[ 3].IText = (UBYTE *)" 756K"; XFastText[ 4].IText = (UBYTE *)" 1 MB"; XFastText[ 5].IText = (UBYTE *)" 2 MB"; XFastText[ 6].IText = (UBYTE *)" 3 MB"; XFastText[ 7].IText = (UBYTE *)" 4 MB"; XFastText[ 8].IText = (UBYTE *)" 6 MB"; XFastText[ 9].IText = (UBYTE *)" 8 MB"; XFastText[10].IText = (UBYTE *)" 10 MB"; XFastText[11].IText = (UBYTE *)" 12 MB"; XFastText[12].IText = (UBYTE *)" 13 MB"; XFastText[13].IText = (UBYTE *)" 14 MB"; XFastText[14].IText = (UBYTE *)" 15 MB"; XFastText[15].IText = (UBYTE *)" 16 MB"; X} X X/*****************************************************************/ X/* The following initializes the structure arrays */ X/* needed to provide the Fast Mem Base Addr menu topic. */ X/*****************************************************************/ X Xvoid InitFastAItems() X { X int n,nplus1; X X/* initialize each menu item and IntuiText with loop */ Xfor( n=0; n<FASTAMAX; n++ ) X { X nplus1 = n + 1; X FastAItem[n].NextItem = &FastAItem[nplus1]; X FastAItem[n].LeftEdge = 0; X FastAItem[n].TopEdge = 9 * n; X FastAItem[n].Width = 80; X FastAItem[n].Height = 9; X FastAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT; X FastAItem[n].MutualExclude = (~(1 << n)); X FastAItem[n].ItemFill = (APTR)&FastAText[n]; X FastAItem[n].SelectFill = NULL; X FastAItem[n].Command = 0; X FastAItem[n].NextSelect = 0; X X FastAText[n].FrontPen = BLUP; X FastAText[n].BackPen = WHTP; X FastAText[n].DrawMode = JAM2; X FastAText[n].LeftEdge = 0; X FastAText[n].TopEdge = 1; X FastAText[n].ITextFont = NULL; X FastAText[n].NextText = NULL; X } XFastAItem[FASTAMAX-1].NextItem = NULL; X X/* select fast base address item checked */ Xswitch (p_fasta) { X case 2: n = 0; break; /* Offset in megs above 0x0000000 */ X case 3: n = 1; break; X case 4: n = 2; break; X case 5: n = 3; break; X case 6: n = 4; break; X case 8: n = 5; break; X case -1: n = 6; break; X case -2: n = 7; break; X case -3: n = 8; break; /* Offset in megs below 0x8000000 */ X case -4: n = 9; break; X case -6: n = 10; break; X case -8: n = 11; break; X case -10: n = 12; break; X case -12: n = 13; break; X case -14: n = 14; break; X case -16: n = 15; break; X default: n = 6; p_fasta = -1; X } XFastAItem[n].Flags |= CHECKED; X XFastAText[ 0].IText = (UBYTE *)" @ 2 M"; XFastAText[ 1].IText = (UBYTE *)" @ 3 M"; XFastAText[ 2].IText = (UBYTE *)" @ 4 M"; XFastAText[ 3].IText = (UBYTE *)" @ 5 M"; XFastAText[ 4].IText = (UBYTE *)" @ 6 M"; XFastAText[ 5].IText = (UBYTE *)" @ 8 M"; XFastAText[ 6].IText = (UBYTE *)" @7f M"; XFastAText[ 7].IText = (UBYTE *)" @7e M"; XFastAText[ 8].IText = (UBYTE *)" @7d M"; XFastAText[ 9].IText = (UBYTE *)" @7c M"; XFastAText[10].IText = (UBYTE *)" @7a M"; XFastAText[11].IText = (UBYTE *)" @78 M"; XFastAText[12].IText = (UBYTE *)" @76 M"; XFastAText[13].IText = (UBYTE *)" @74 M"; XFastAText[14].IText = (UBYTE *)" @72 M"; XFastAText[15].IText = (UBYTE *)" @70 M"; X} X X/****************************************************************/ X/* The following function inits the Menu structure array with */ X/* appropriate values for our simple menu. Review the manual */ X/* if you need to know what each value means. */ X/****************************************************************/ Xvoid InitMenu() X{ Xmenu[0].NextMenu = &menu[1]; Xmenu[0].LeftEdge = 0; Xmenu[0].TopEdge = 0; Xmenu[0].Width = 64; Xmenu[0].Height = 10; Xmenu[0].Flags = MENUENABLED; Xmenu[0].MenuName = "Project"; /* text for menu-bar display */ Xmenu[0].FirstItem = &ProjItem[0]; /* pointer to first item in list */ X Xmenu[1].NextMenu = &menu[2]; Xmenu[1].LeftEdge = 64; Xmenu[1].TopEdge = 0; Xmenu[1].Width = 48; Xmenu[1].Height = 10; Xmenu[1].Flags = MENUENABLED; Xmenu[1].MenuName = "Setup"; /* text for menu-bar display */ Xmenu[1].FirstItem = &SetupItem[0]; /* pointer to first item in list */ X Xmenu[2].NextMenu = &menu[3]; Xmenu[2].LeftEdge = 112; Xmenu[2].TopEdge = 0; Xmenu[2].Width = 72; Xmenu[2].Height = 10; Xmenu[2].Flags = MENUENABLED; Xmenu[2].MenuName = "Priority"; /* text for menu-bar display */ Xmenu[2].FirstItem = &PrioItem[0]; /* pointer to first item in list */ X Xmenu[3].NextMenu = &menu[4]; Xmenu[3].LeftEdge = 184; Xmenu[3].TopEdge = 0; Xmenu[3].Width = 80; Xmenu[3].Height = 10; Xmenu[3].Flags = MENUENABLED; Xmenu[3].MenuName = "Chip Size"; /* text for menu-bar display */ Xmenu[3].FirstItem = &ChipItem[0]; /* pointer to first item in list */ X Xmenu[4].NextMenu = &menu[5]; Xmenu[4].LeftEdge = 264; Xmenu[4].TopEdge = 0; Xmenu[4].Width = 80; Xmenu[4].Height = 10; Xmenu[4].Flags = MENUENABLED; Xmenu[4].MenuName = "Chip Addr"; /* text for menu-bar display */ Xmenu[4].FirstItem = &ChipAItem[0]; /* pointer to first item in list */ X Xmenu[5].NextMenu = &menu[6]; Xmenu[5].LeftEdge = 344; Xmenu[5].TopEdge = 0; Xmenu[5].Width = 64; Xmenu[5].Height = 10; Xmenu[5].Flags = MENUENABLED; Xmenu[5].MenuName = "SF Size"; /* text for menu-bar display */ Xmenu[5].FirstItem = &SFItem[0]; /* pointer to first item in list */ X Xmenu[6].NextMenu = &menu[7]; Xmenu[6].LeftEdge = 408; Xmenu[6].TopEdge = 0; Xmenu[6].Width = 64; Xmenu[6].Height = 10; Xmenu[6].Flags = MENUENABLED; Xmenu[6].MenuName = "SF Addr"; /* text for menu-bar display */ Xmenu[6].FirstItem = &SFAItem[0]; /* pointer to first item in list */ X Xmenu[7].NextMenu = &menu[8]; Xmenu[7].LeftEdge = 472; Xmenu[7].TopEdge = 0; Xmenu[7].Width = 80; Xmenu[7].Height = 10; Xmenu[7].Flags = MENUENABLED; Xmenu[7].MenuName = "Fast Size"; /* text for menu-bar display */ Xmenu[7].FirstItem = &FastItem[0]; /* pointer to first item in list */ X Xmenu[8].NextMenu = NULL; Xmenu[8].LeftEdge = 552; Xmenu[8].TopEdge = 0; Xmenu[8].Width = 80; Xmenu[8].Height = 10; Xmenu[8].Flags = MENUENABLED; Xmenu[8].MenuName = "Fast Addr"; /* text for menu-bar display */ Xmenu[8].FirstItem = &FastAItem[0]; /* pointer to first item in list */ X X} X Xvoid StartMenus() X{ XSetMenuStrip(window,&menu[0]); X} END_OF_FILE if test 27558 -ne `wc -c <'mminit.c'`; then echo shar: \"'mminit.c'\" unpacked with wrong size! fi # end of 'mminit.c' fi echo shar: End of archive 2 \(of 2\). cp /dev/null ark2isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>. Mail comments to the moderator at <amiga-request@uunet.uu.net>. Post requests for sources, and general discussion to comp.sys.amiga.misc.