#include "startup.h" #include "xsb.h" struct Window *w; struct RastPort *rp; struct Gadget *glist; void brokeron(void); void brokeroff(void); void doblank(char*); void doprefs(char*); extern struct Library *XSBBase; extern char popkey[],hotkey[],xsbname[]; long blankmouse,mousetimeout=30/5; long screentimeout=300/5,randomblanker; static long activeblankernum; void LockWindow(struct Window*); void UnlockWindow(struct Window*); extern char version[]; static long __regargs slidercalc(long val) { return(val*5); } void loadprefs(void) { BPTR f; if(f=CreateDir("ENV:XSB")) UnLock(f); if(f=CreateDir("ENVARC:XSB")) UnLock(f); f=Open("ENV:XSB/XSB.prefs",MODE_OLDFILE); if(!f) return; Read(f,popkey,40); Read(f,hotkey,40); Read(f,xsbname,30); Read(f,&blankmouse,4); Read(f,&mousetimeout,4); Read(f,&screentimeout,4); Read(f,&randomblanker,4); Close(f); } void saveprefs(char *name) { BPTR f=Open(name,MODE_NEWFILE); if(!f) return; Write(f,popkey,40); Write(f,hotkey,40); Write(f,xsbname,30); Write(f,&blankmouse,4); Write(f,&mousetimeout,4); Write(f,&screentimeout,4); Write(f,&randomblanker,4); Write(f,version,strlen(version)); Close(f); } static struct List labels; static void getxsblist(void) { char parsed[64]; struct Node *node; char *mem,*p; long blankercount=0; struct ExAllData *ead=AllocVec(8192,MEMF_CLEAR); struct ExAllControl *eac=AllocDosObjectTagList(DOS_EXALLCONTROL,TAG_DONE); BPTR lock=Lock("LIBS:",SHARED_LOCK); if(!ead || !eac || !lock) goto xit; NewList(&labels); activeblankernum=0; ParsePatternNoCase("XSB#?.library",parsed,64); eac->eac_MatchString=parsed; ExAll(lock,ead,8192,ED_NAME,eac); if(!eac->eac_Entries) goto xit; while(ead) { node=AllocVec(sizeof(struct Node),MEMF_CLEAR); if(!stricmp(ead->ed_Name,xsbname)) activeblankernum=blankercount; p=&ead->ed_Name[3]; while(*p!='.') p++; *p=0; p=&ead->ed_Name[3]; mem=AllocVec(strlen(p),0); strcpy(mem,p); node->ln_Name=mem; AddTail(&labels,node); ead=ead->ed_Next; blankercount++; } xit: if(ead) FreeVec(ead); if(eac) FreeDosObject(DOS_EXALLCONTROL,eac); if(lock) UnLock(lock); } static void freelabels(void) { struct Node *l; while(l=RemHead(&labels)) { FreeVec(l->ln_Name); FreeVec(l); } } struct Node *findnode(int num) { struct Node *n=labels.lh_Head; int c; for(c=0; cln_Succ; return(n); } static void doblankerinfo(char *name) { if(!(XSBBase=OldOpenLibrary(name))) { doreq("XSBCX","Can't open blanker library\n%s","Cancel",name); return; } LockWindow(w); doreq(name,XSBGetID(),"OK"); CloseLibrary(XSBBase); UnlockWindow(w); } void popup(void) { struct IntuiMessage *im; long code,class; struct Gadget *g; int running=1; long tempblankmouse=blankmouse; long tempmousetimeout=mousetimeout; long tempscreentimeout=screentimeout; long temprandomblanker=randomblanker; char tempxsbname[40],temppopkey[40],temphotkey[40]; strcpy(tempxsbname,xsbname); strcpy(temphotkey,hotkey); strcpy(temppopkey,popkey); getxsblist(); if(!(w=OpenWindowTags(0, WA_Left,50,WA_Top,50, WA_Width,450,WA_Height,175, WA_Title,"XSBCX Setup Window", WA_ScreenTitle,"XSBCX V1.0 (" __DATE__ ") © 1992 by Oliver Wagner, All Rights Reserved", WA_Flags,ACTIVATE|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|REPORTMOUSE, WA_IDCMP,CLOSEWINDOW|GADGETUP|GADGETDOWN|MOUSEMOVE, WA_AutoAdjust,TRUE, TAG_DONE))) return; rp=w->RPort; gt_init(); glist=gt_newlist(); gt_drawbox(8,15,434,40,1); gt_drawbox(196,57,234+12,33,1); gt_drawbox(192,57+34,234+12+4,56,1); gt_drawbox(8,57,186,90,1); SetAPen(rp,0); RectFill(rp,192,57+34+1,195,57+34+1+53); gt_createg(40,152, 70,15, BUTTON_KIND, "Save", 0, TAG_DONE); gt_createg(225-35,152, 70,15, BUTTON_KIND, "Use", 0, TAG_DONE); gt_createg(340,152, 70,15, BUTTON_KIND, "Cancel", 0, TAG_DONE); gt_createg(105,20,328,14, STRING_KIND, "Blank Key:", NG_HIGHLABEL, GTST_String,hotkey, GTST_MaxChars,40, TAG_DONE); gt_createg(105,36,328,14, STRING_KIND, "Popup Key:", NG_HIGHLABEL, GTST_String,popkey, GTST_MaxChars,40, TAG_DONE); gt_createg(309,62, 40,14, CHECKBOX_KIND, "Blank Mouse:", NG_HIGHLABEL, GTCB_Checked, blankmouse, TAG_DONE); gt_createg(309,63+13, 85,10, SLIDER_KIND, "Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GTSL_Level,mousetimeout,GA_RelVerify,TRUE,TAG_DONE); gt_createg(309,62+33, 40,14, CHECKBOX_KIND, "Pick Random:", NG_HIGHLABEL, GTCB_Checked, randomblanker, TAG_DONE); gt_createg(309,63+13+33, 85,10, SLIDER_KIND,"Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36*3, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GA_RelVerify,TRUE,GTSL_Level,screentimeout,TAG_DONE); gt_createg(220,63+33+13+18, 50,13, BUTTON_KIND, "Test", 0,TAG_DONE); gt_createg(220+75,63+33+13+18, 50,13, BUTTON_KIND, "Info", 0,TAG_DONE); gt_createg(220+150,63+33+13+18, 50,13, BUTTON_KIND, "Prefs", 0,TAG_DONE); gt_createg(20,75,160,70, LISTVIEW_KIND, "Avaible Blankers:", NG_HIGHLABEL|PLACETEXT_ABOVE, GTLV_Top,0,GTLV_Selected,activeblankernum, GTLV_Labels,&labels, GTLV_ScrollWidth,16, GTLV_ShowSelected,0, TAG_DONE); gt_endlist(); while(running) { while(!(im=GT_GetIMsg(w->UserPort))) WaitPort(w->UserPort); class=im->Class; code=im->Code; g=im->IAddress; GT_ReplyIMsg(im); switch(class) { case CLOSEWINDOW: running=0; break; case GADGETUP: switch(g->GadgetID) { case 1: case 2: strcpy(xsbname,tempxsbname); blankmouse=tempblankmouse; mousetimeout=tempmousetimeout; randomblanker=temprandomblanker; screentimeout=tempscreentimeout; strcpy(hotkey,gt_findstring(4)); strcpy(popkey,gt_findstring(5)); if(g->GadgetID==1) saveprefs("ENVARC:XSB/XSB.prefs"); saveprefs("ENV:XSB/XSB.prefs"); case 3: running=0; break; case 4: ActivateGadget(gt_findid(5),w,0); break; /* case 5: break;*/ case 6: tempblankmouse=gt_findstate(6); break; case 7: tempmousetimeout=code; break; case 8: temprandomblanker=gt_findstate(8); break; case 9: tempscreentimeout=code; break; case 10: Delay(10); LockWindow(w); brokeron(); doblank(tempxsbname); brokeroff(); UnlockWindow(w); break; case 11: doblankerinfo(tempxsbname); break; case 12: LockWindow(w); doprefs(tempxsbname); UnlockWindow(w); break; case 13: sprintf(tempxsbname,"xsb%s.library",findnode(code)->ln_Name); break; } } } gt_remlist(glist); CloseWindow(w); freelabels(); }