/* WinSystemRAM.c ** ** SCRAMmer V37.3 - 27th Aug 1992 ** ------------------------------ ** ** Copyright (c) Giuliano C. Peritore ** Via Amaseno, 6 ** 04100 Latina ** ITALY ** ** Phone: (+39) 773 491692 Voice Only ** EMAIL mc6040@mclink.it */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "SCRAMmer.h" VOID ShadowText(UWORD ,UWORD, struct RastPort *,char *msg); VOID NormalText(UWORD ,UWORD, struct RastPort *,char *msg); LONG request_user(struct Window *,char *, char *, char *); VOID CloseWindowSafely(struct Window *); IMPORT struct Library *GadToolsBase; IMPORT struct IntuitionBase *IntuitionBase; IMPORT struct GfxBase *GfxBase; IMPORT struct ExecBase *SysBase; IMPORT struct Window *main_window; IMPORT struct Screen *def_pub_scr; IMPORT struct MsgPort *userport; IMPORT struct TextFont *tf; IMPORT struct TextAttr ta; IMPORT UWORD xfnt,yfnt,bfnt; IMPORT APTR vi; struct Window *system_ram_win=0; BOOL membuilt=FALSE; static struct RastPort *rport; static struct Gadget *glist; /*------------------------------------------------------------------*/ struct mynode { struct Node my_Node; UBYTE my_str[40]; }; struct List *memlist; struct MemHeader *memnode; struct mynode *myn,*nextnode,*worknode; struct List myl; VOID build_memlist(VOID) { if(!membuilt) { membuilt=TRUE; myl.lh_Head =(struct Node*)&myl.lh_Tail; myl.lh_Tail =0; myl.lh_TailPred =(struct Node*)&myl.lh_Head; Forbid(); memlist=&SysBase->MemList; if(myn=(struct mynode*)AllocMem(sizeof(struct mynode),MEMF_CLEAR)) { myn->my_Node.ln_Name=(STRPTR)&myn->my_str; strcpy(myn->my_str,GetString(MSG_SYSRAM1)); AddHead(&myl,(struct Node*)myn); for(memnode=(struct MemHeader*)memlist->lh_Head;memnode->mh_Node.ln_Succ;memnode=(struct MemHeader*)memnode->mh_Node.ln_Succ) { if(myn=(struct mynode*)AllocMem(sizeof(struct mynode),MEMF_CLEAR)) { myn->my_Node.ln_Name=(STRPTR)&myn->my_str; sprintf(myn->my_str,"%8.8lx %10.10ld ",memnode->mh_Lower,(ULONG)memnode->mh_Upper-(ULONG)memnode->mh_Lower); CopyMem(memnode->mh_Node.ln_Name,myn->my_str+20,18); myn->my_str[39]=0; AddTail(&myl,(struct Node*)myn); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NONODE),GetString(MSG_CANCEL)); } } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NONODE),GetString(MSG_CANCEL)); Permit(); } } VOID unbuild_memlist(VOID) { if(membuilt) { membuilt=FALSE; worknode=(struct mynode*)&myl.lh_Head; worknode=(struct mynode*)worknode->my_Node.ln_Succ; if(worknode) { while(nextnode=(struct mynode*)worknode->my_Node.ln_Succ) { FreeMem(worknode,sizeof(struct mynode)); worknode=nextnode; } } } } /*------------------------------------------------------------------*/ VOID refresh_system_ram(VOID) { char buf[]="123456789012345678901234567890123456"; ShadowText(X_SEP,Y_SEP+bfnt, rport,GetString(MSG_SYSRAM2)); ShadowText(X_SEP,Y_SEP+bfnt+yfnt, rport,"Any"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*2, rport,"Chip"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*3, rport,"Fast"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*4, rport,"Public"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*5, rport,"Local"); ShadowText(X_SEP,Y_SEP+bfnt+yfnt*6, rport,"24BitDMA"); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_ANY|MEMF_TOTAL),AvailMem(MEMF_ANY),AvailMem(MEMF_ANY|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt,rport,buf); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_CHIP|MEMF_TOTAL),AvailMem(MEMF_CHIP),AvailMem(MEMF_CHIP|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt*2,rport,buf); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_FAST|MEMF_TOTAL),AvailMem(MEMF_FAST),AvailMem(MEMF_FAST|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt*3,rport,buf); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_PUBLIC|MEMF_TOTAL),AvailMem(MEMF_PUBLIC),AvailMem(MEMF_PUBLIC|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt*4,rport,buf); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_LOCAL|MEMF_TOTAL),AvailMem(MEMF_LOCAL),AvailMem(MEMF_LOCAL|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt*5,rport,buf); sprintf(buf,"%10.10d %10.10d %10.10d\0",AvailMem(MEMF_24BITDMA|MEMF_TOTAL),AvailMem(MEMF_24BITDMA),AvailMem(MEMF_24BITDMA|MEMF_LARGEST)); NormalText(X_SEP+xfnt*9,Y_SEP+bfnt+yfnt*6,rport,buf); } VOID open_system_ram(VOID) { UWORD w,h; static struct Gadget *gad; static struct NewGadget ng; build_memlist(); gad=CreateContext(&glist); ng.ng_TextAttr=&ta; ng.ng_VisualInfo=vi; ng.ng_Width= xfnt*41; ng.ng_Height= yfnt*3; ng.ng_Flags= PLACETEXT_IN; ng.ng_LeftEdge= X_SEP; ng.ng_TopEdge=Y_SEP+yfnt*7; ng.ng_GadgetText=NULL; ng.ng_GadgetID=1; gad=CreateGadget(LISTVIEW_KIND,gad,&ng,GTLV_Labels,&myl,GTLV_ReadOnly,TRUE,TAG_DONE); if(gad) { w=(X_SEP*2) + 41*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); h=(Y_SEP*2) + 10*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if(system_ram_win=OpenWindowTags(NULL, WA_Left, (def_pub_scr->Width-w)>>2, WA_Top, 3*((def_pub_scr->Height-h)>>2), WA_Width, w, WA_Height, h, WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_ACTIVATE|WFLG_RMBTRAP|WFLG_GIMMEZEROZERO|WFLG_SIMPLE_REFRESH, WA_AutoAdjust, FALSE, WA_IDCMP, NULL, WA_Title, GetString(MSG_SYSRAMWIN), WA_PubScreen, def_pub_scr,TAG_END)) { rport=system_ram_win->RPort; SetFont(rport,tf); AddGList(system_ram_win,glist,-1,-1,NULL); RefreshGList(glist,system_ram_win,NULL,-1); GT_RefreshWindow(system_ram_win,NULL); system_ram_win->UserPort=userport; ModifyIDCMP(system_ram_win,LISTVIEWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW); refresh_system_ram(); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOWINDOW),GetString(MSG_CANCEL)); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOGADGETS),GetString(MSG_CANCEL)); } VOID close_system_ram(VOID) { if(system_ram_win) { CloseWindowSafely(system_ram_win); system_ram_win=0; FreeGadgets(glist); } glist=0; unbuild_memlist(); } /*------------------------------------------------------------------*/