/* WinBattMem.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 #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 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 Library *BattMemBase; struct Window *battmem_win=0; static struct Gadget *battglist,*gadbto,*gadblu,*gadbsx,*gadbhi; static struct RastPort *rport; VOID refresh_battmem(VOID) { ULONG bits[3]; ShadowText(X_SEP, Y_SEP+bfnt, rport,GetString(MSG_BATTMEMSCSI)); NormalText(X_SEP, Y_SEP+bfnt+yfnt, rport,"Timeout"); NormalText(X_SEP*2+xfnt*18, Y_SEP+bfnt+yfnt, rport,"LUNs"); NormalText(X_SEP*2+xfnt*18, Y_SEP+bfnt+yfnt*3, rport,"HostID"); ShadowText(X_SEP, Y_SEP+bfnt+yfnt*5, rport,GetString(MSG_BATTMEMAMNESIA)); NormalText(X_SEP, Y_SEP+bfnt+yfnt*6, rport,"Amiga bits:"); NormalText(X_SEP*2+xfnt*18, Y_SEP+bfnt+yfnt*6, rport,"Shared bits:"); ObtainBattSemaphore(); if(!ReadBattMem(&bits[0],0,96)) { if(bits[0]&0x80000000) NormalText(X_SEP+xfnt*12, Y_SEP+bfnt+yfnt*6, rport,"Ok "); else NormalText(X_SEP+xfnt*12, Y_SEP+bfnt+yfnt*6, rport,"Lost"); GT_SetGadgetAttrs(gadbto,battmem_win,0,GTMX_Active,(bits[0]&0x40000000)==0x40000000,TAG_END); GT_SetGadgetAttrs(gadblu,battmem_win,0,GTMX_Active,(bits[0]&0x20000000)==0x20000000,TAG_END); if(bits[2]&0x80000000) NormalText(X_SEP+xfnt*32, Y_SEP+bfnt+yfnt*6, rport,"Ok "); else NormalText(X_SEP+xfnt*32, Y_SEP+bfnt+yfnt*6, rport,"Lost"); GT_SetGadgetAttrs(gadbhi,battmem_win,0,GTCY_Active,7-((bits[2]&0x70000000)>>28),TAG_END); GT_SetGadgetAttrs(gadbsx,battmem_win,0,GTCB_Checked,(bits[2]&0x08000000)==0x08000000,TAG_END); RefreshGList(battglist,battmem_win,NULL,-1); } else request_user(battmem_win,GetString(MSG_SCRAMMER),GetString(MSG_BATTMEMNOREAD),GetString(MSG_CANCEL)); ReleaseBattSemaphore(); } VOID process_battmem(struct Gadget*g,struct IntuiMessage *im) { UBYTE bit; ObtainBattSemaphore(); switch(g->GadgetID) { case 1: if(im->Code==0) bit=0; else bit=1; WriteBattMem(&bit,BATTMEM_SCSI_TIMEOUT_ADDR,BATTMEM_SCSI_TIMEOUT_LEN); break; case 2: if(g->Flags&GFLG_SELECTED) bit=1; else bit=0; WriteBattMem(&bit,BATTMEM_SCSI_SYNC_XFER_ADDR,BATTMEM_SCSI_SYNC_XFER_LEN); break; case 3: if(im->Code==0) bit=0; else bit=1; WriteBattMem(&bit,BATTMEM_SCSI_LUNS_ADDR,BATTMEM_SCSI_LUNS_LEN); break; case 4: bit=((UBYTE)im->Code&0x07)^0x07; WriteBattMem(&bit,BATTMEM_SCSI_HOST_ID_ADDR,BATTMEM_SCSI_HOST_ID_LEN); break; case 5: bit=1; WriteBattMem(&bit,BATTMEM_AMIGA_AMNESIA_ADDR,BATTMEM_AMIGA_AMNESIA_LEN); refresh_battmem(); break ; case 6: bit=0; WriteBattMem(&bit,BATTMEM_AMIGA_AMNESIA_ADDR,BATTMEM_AMIGA_AMNESIA_LEN); refresh_battmem(); break ; case 7: bit=1; WriteBattMem(&bit,BATTMEM_SHARED_AMNESIA_ADDR,BATTMEM_SHARED_AMNESIA_LEN); refresh_battmem(); break ; case 8: bit=0; WriteBattMem(&bit,BATTMEM_SHARED_AMNESIA_ADDR,BATTMEM_SHARED_AMNESIA_LEN); refresh_battmem(); break ; } ReleaseBattSemaphore(); } VOID open_battmem(VOID) { static UBYTE *batthi[9], *battto[]={"128 ms"," 2 sec",0}, *battlu[3]; static struct Gadget *gad; static struct NewGadget ng; UWORD w,h; batthi[0]=GetString(MSG_BATTMEMHI0); batthi[1]=GetString(MSG_BATTMEMHI1); batthi[2]=GetString(MSG_BATTMEMHI2); batthi[3]=GetString(MSG_BATTMEMHI3); batthi[4]=GetString(MSG_BATTMEMHI4); batthi[5]=GetString(MSG_BATTMEMHI5); batthi[6]=GetString(MSG_BATTMEMHI6); batthi[7]=GetString(MSG_BATTMEMHI7); batthi[8]=0; battlu[0]=GetString(MSG_BATTMEMLU0); battlu[1]=GetString(MSG_BATTMEMLU1); battlu[2]=0; if(BattMemBase=OpenResource(BATTMEMNAME)) { gad=CreateContext(&battglist); ng.ng_TextAttr=&ta; ng.ng_VisualInfo=vi; ng.ng_Flags= PLACETEXT_RIGHT; ng.ng_Width= xfnt*10; ng.ng_Height= yfnt; ng.ng_LeftEdge= X_SEP+xfnt*8; ng.ng_TopEdge=Y_SEP+yfnt; ng.ng_GadgetText=NULL; ng.ng_GadgetID=1; gad=CreateGadget(MX_KIND,gad,&ng,GTMX_Labels,battto,TAG_DONE); gadbto=gad; ng.ng_LeftEdge= X_SEP; ng.ng_TopEdge=Y_SEP+yfnt*3; ng.ng_GadgetText="Sync Xfer"; ng.ng_GadgetID=2; gad=CreateGadget(CHECKBOX_KIND,gad,&ng,TAG_DONE); gadbsx=gad; ng.ng_LeftEdge= X_SEP*2+xfnt*25; ng.ng_TopEdge=Y_SEP+yfnt; ng.ng_GadgetText=NULL; ng.ng_GadgetID=3; gad=CreateGadget(MX_KIND,gad,&ng,GTMX_Labels,battlu,TAG_DONE); gadblu=gad; ng.ng_LeftEdge= X_SEP*2+xfnt*25; ng.ng_TopEdge=Y_SEP+yfnt*3; ng.ng_GadgetText=NULL; ng.ng_GadgetID=4; gad=CreateGadget(CYCLE_KIND,gad,&ng,GTCY_Labels,batthi,GTCY_Active,1,TAG_DONE); gadbhi=gad; ng.ng_Flags= PLACETEXT_IN; ng.ng_LeftEdge= X_SEP; ng.ng_Width= xfnt*8; ng.ng_TopEdge=Y_SEP+yfnt*7; ng.ng_GadgetText=GetString(MSG_BATTMEMREVIVE); ng.ng_GadgetID=5; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= X_SEP*2+xfnt*8; ng.ng_TopEdge=Y_SEP+yfnt*7; ng.ng_GadgetText=GetString(MSG_BATTMEMKILL); ng.ng_GadgetID=6; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= X_SEP*2+xfnt*18; ng.ng_TopEdge=Y_SEP+yfnt*7; ng.ng_GadgetText=GetString(MSG_BATTMEMREVIVE); ng.ng_GadgetID=7; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= X_SEP*3+xfnt*26; ng.ng_TopEdge=Y_SEP+yfnt*7; ng.ng_GadgetText=GetString(MSG_BATTMEMKILL); ng.ng_GadgetID=8; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); if(gad) { w=(X_SEP*3) + 35*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); h=(Y_SEP*2) + 8*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if(battmem_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_BATTMEMWIN), WA_PubScreen, def_pub_scr,TAG_END)) { rport=battmem_win->RPort; SetFont(rport,tf); battmem_win->UserPort=userport; AddGList(battmem_win,battglist,-1,-1,NULL); RefreshGList(battglist,battmem_win,NULL,-1); GT_RefreshWindow(battmem_win,NULL); ModifyIDCMP(battmem_win,BUTTONIDCMP|CHECKBOXIDCMP|CYCLEIDCMP|MXIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW); refresh_battmem(); } else request_user(battmem_win,GetString(MSG_SCRAMMER),GetString(MSG_NOWINDOW),GetString(MSG_CANCEL)); } else request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_NOGADGETS),GetString(MSG_CANCEL)); } else request_user(battmem_win,GetString(MSG_SCRAMMER),GetString(MSG_NOBATTMEM),GetString(MSG_CANCEL)); } VOID close_battmem(VOID) { if(battmem_win) { CloseWindowSafely(battmem_win); battmem_win=0; } FreeGadgets(battglist); battglist=0; }