/* SCRAMmer V37.3b - 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 files ------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define STRINGARRAY #include "SCRAMmer.h" /*--- Preprocessor definitions -------------------------------------*/ #ifdef LATTICE int CXBRK(void) {return(0);} int chkabort(void) {return(0);} LONG _BackGroundIO=FALSE; LONG _stack=8192; LONG _priority=0; BYTE *_procname="ETI020_SCRAMmer3"; #endif #define TEMPLATE "\ DATACACHE/S,NODATACACHE/S,DATABURST/S,NODATABURST/S,DATAFREEZE/S,NODATAFREEZE/S,\ INSTCACHE/S,NOINSTCACHE/S,INSTBURST/S,NOINSTBURST/S,INSTFREEZE/S,NOINSTFREEZE/S,\ WRITEALLOCATE/S,NOWRITEALLOCATE/S,COPYBACK/S,NOCOPYBACK/S,\ PAGEDETECT/S,NOPAGEDETECT/S,BURST/S,NOBURST/S,WRAP/S,NOWRAP/S,\ VBRFAST/S,VBRCHIP/S,BERRTIMEOUT/S,DSACKTIMEOUT/S,\ KBRSTENON/S,KBRSTENOFF/S,NOGUI/S,ICONIFY/S,PUBSCREEN/K" /*--- Global variables ---------------------------------------------*/ UBYTE versiontag[]="\0$VER: SCRAMmer 37.3b (9.16.92)"; UBYTE copyright[]="\0Copyright (c) 1992 G. C. Peritore"; UWORD xfnt,yfnt,bfnt,xwin,ywin; APTR vi; UBYTE terminated=0; char *toolpubsc; ULONG mainberr; struct RDArgs *myrda; LONG result[32]; /*--- Global structures --------------------------------------------*/ IMPORT struct ExecBase *SysBase; IMPORT struct DosLibrary *DOSBase; IMPORT struct Window *mother_win, *system_ram_win, *scsi_win, *test_win, *ramgar_win, *cpu_win, *battmem_win, *battclock_win, *about_win; IMPORT ULONG amigaguidesignal; struct IntuitionBase *IntuitionBase =0; struct GfxBase *GfxBase =0; struct WorkbenchBase *WorkbenchBase =0; struct Library *GadToolsBase =0, *IconBase =0, /* *AslBase =0,*/ *LocaleBase =0; APTR catalog; struct Window *main_window =0; struct TextFont *tf=0; struct RastPort *rp=0; struct Screen *def_pub_scr; struct Gadget *glist=0; struct MsgPort *userport; struct TextAttr ta; struct NewGadget ng; /*--- ASM Function prototypes --------------------------------------*/ VOID SetBERR(VOID); VOID PageDetectOn(VOID); /* Execute in Disable() */ VOID PageDetectOff(VOID); /* Execute in Disable() */ VOID BurstOn(VOID); /* Execute in Disable() */ VOID BurstOff(VOID); /* Execute in Disable() */ VOID WrapOn(VOID); /* Execute in Disable() */ VOID WrapOff(VOID); /* Execute in Disable() */ VOID SetDSACK(VOID); VOID SetKBRSTEN(VOID); VOID UnsetKBRSTEN(VOID); /*--- External C Function prototypes -------------------------------*/ /* Defined in: WinCPU.c */ VOID process_cpu(struct Gadget *); VOID refresh_cpu(VOID); VOID open_cpu(VOID); VOID close_cpu(VOID); VOID VBRToFast(VOID); VOID VBRToChip(VOID); /* Defined in: WinRamGar.c */ VOID process_ramgar(struct Gadget *,struct IntuiMessage*); VOID refresh_ramgar(VOID); VOID open_ramgar(VOID); VOID close_ramgar(VOID); /* Defined in: WinMotherboard.c */ VOID refresh_mother(VOID); VOID open_mother(VOID); VOID close_mother(VOID); /* Defined in: WinHelp.c */ VOID open_help(VOID); VOID close_help(VOID); VOID process_help(VOID); /* Defined in: WinBattMem.c */ VOID process_battmem(struct Gadget*,struct IntuiMessage *); VOID refresh_battmem(VOID); VOID open_battmem(VOID); VOID close_battmem(VOID); /* Defined in: WinBattClock.c */ VOID process_battclock(struct Gadget*); VOID refresh_battclock(VOID); VOID open_battclock(VOID); VOID close_battclock(VOID); /* Defined in: WinTest.c */ VOID process_test(struct Gadget*); VOID refresh_test(VOID); VOID open_test(VOID); VOID close_test(VOID); /* Defined in: WinAbout.c */ VOID refresh_about(VOID); VOID open_about(VOID); VOID close_about(VOID); /* Defined in: WinSystemRAM.c */ VOID refresh_system_ram(VOID); VOID open_system_ram(VOID); VOID close_system_ram(VOID); /* Defined in: WinSCSIInfo.c */ VOID refresh_scsi(VOID); VOID open_scsi(VOID); VOID close_scsi(VOID); VOID StripIntuiMessages(struct MsgPort *,struct Window *); VOID CloseWindowSafely(struct Window *); 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 set_wait_pointer (struct Window *); VOID set_default_pointer (struct Window *); VOID sleep_window(struct Window *); VOID wake_window(struct Window *); /*--- C Function prototypes ----------------------------------------*/ BOOL open_libraries(VOID); VOID close_libraries(VOID); BOOL get_default_font(VOID); BOOL get_font(VOID); BOOL get_pub_scr(VOID); BOOL build_window(VOID); VOID unbuild_window(VOID); VOID process_main_win(VOID); BOOL make_gadgets(VOID); STRPTR appname; VOID iconify(VOID) { struct DiskObject *dobj; struct AppIcon *appicon; struct AppMessage *appmsg; BOOL clicked; struct MsgPort *appport; if(appport=CreateMsgPort()) { if(dobj=GetDiskObject(appname)) { if(appicon=AddAppIcon(0,0,appname,appport,NULL,dobj,NULL)) { clicked=FALSE; while(!clicked) { Wait(1<mp_SigBit); while(appmsg=(struct AppMessage*)GetMsg(appport)) { if(appmsg->am_Type==8) if(appmsg->am_NumArgs==0) clicked=TRUE; ReplyMsg((struct Message*)appmsg); } } RemoveAppIcon(appicon); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOAPPICON),GetString(MSG_CANCEL)); FreeDiskObject(dobj); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOICONINFO),GetString(MSG_CANCEL)); DeleteMsgPort(appport); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOMSGPORT),GetString(MSG_CANCEL)); } VOID get_parameters(int pargc,char **pargv) { struct DiskObject *dobj; struct WBStartup *argmsg; struct WBArg *wb_arg; char **toolarray; char *s; if(pargc==0) { /* WB */ argmsg=(struct WBStartup *)pargv; wb_arg=argmsg->sm_ArgList; appname=wb_arg->wa_Name; if(dobj=GetDiskObject(appname)) { toolarray=(char**)dobj->do_ToolTypes; if(s=(char*)FindToolType(toolarray,"NOGUI")) terminated=1; if(s=(char*)FindToolType(toolarray,"DATACACHE")) CacheControl(CACRF_EnableD,CACRF_EnableD); if(s=(char*)FindToolType(toolarray,"NODATACACHE")) CacheControl( 0,CACRF_EnableD); if(s=(char*)FindToolType(toolarray,"DATABURST")) CacheControl(CACRF_DBE ,CACRF_DBE ); if(s=(char*)FindToolType(toolarray,"NODATABURST")) CacheControl( 0,CACRF_DBE ); if(s=(char*)FindToolType(toolarray,"DATAFREEZE")) CacheControl(CACRF_FreezeD,CACRF_FreezeD); if(s=(char*)FindToolType(toolarray,"NODATAFREEZE")) CacheControl( 0,CACRF_FreezeD); if(s=(char*)FindToolType(toolarray,"INSTCACHE")) CacheControl(CACRF_EnableI,CACRF_EnableI); if(s=(char*)FindToolType(toolarray,"NOINSTCACHE")) CacheControl( 0,CACRF_EnableI); if(s=(char*)FindToolType(toolarray,"INSTBURST")) CacheControl(CACRF_IBE ,CACRF_IBE ); if(s=(char*)FindToolType(toolarray,"NOINSTBURST")) CacheControl( 0,CACRF_IBE ); if(s=(char*)FindToolType(toolarray,"INSTFREEZE")) CacheControl(CACRF_FreezeI,CACRF_FreezeI); if(s=(char*)FindToolType(toolarray,"NOINSTFREEZE")) CacheControl( 0,CACRF_FreezeI); if(s=(char*)FindToolType(toolarray,"VBRFAST")) VBRToFast(); if(s=(char*)FindToolType(toolarray,"VBRCHIP")) VBRToChip(); if(s=(char*)FindToolType(toolarray,"COPYBACK")) CacheControl(CACRF_CopyBack,CACRF_CopyBack); if(s=(char*)FindToolType(toolarray,"NOCOPYBACK")) CacheControl( 0,CACRF_CopyBack); if(s=(char*)FindToolType(toolarray,"WRITEALLOCATE")) CacheControl(CACRF_WriteAllocate,CACRF_WriteAllocate); if(s=(char*)FindToolType(toolarray,"NOWRITEALLOCATE")) CacheControl( 0,CACRF_WriteAllocate); if(s=(char*)FindToolType(toolarray,"PAGEDETECT")) {Disable(); PageDetectOn(); Enable();} if(s=(char*)FindToolType(toolarray,"NOPAGEDETECT")) {Disable(); PageDetectOff(); Enable();} if(s=(char*)FindToolType(toolarray,"BURST")) {Disable(); BurstOn(); Enable();} if(s=(char*)FindToolType(toolarray,"NOBURST")) {Disable(); BurstOff(); Enable();} if(s=(char*)FindToolType(toolarray,"WRAP")) {Disable(); WrapOn(); Enable();} if(s=(char*)FindToolType(toolarray,"NOWRAP")) {Disable(); WrapOff(); Enable();} if(s=(char*)FindToolType(toolarray,"BERRTIMEOUT")) {SetBERR(); mainberr=1;} if(s=(char*)FindToolType(toolarray,"DSACKTIMEOUT")) {SetDSACK();mainberr=2;} if(s=(char*)FindToolType(toolarray,"KBRSTENON")) UnsetKBRSTEN(); if(s=(char*)FindToolType(toolarray,"KBRSTENOFF")) SetKBRSTEN(); if(s=(char*)FindToolType(toolarray,"ICONIFY")) {iconify();terminated=0;} toolpubsc=(char*)FindToolType(toolarray,"PUBSCREEN"); FreeDiskObject(dobj); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOICONINFO),GetString(MSG_CANCEL)); } else { /*CLI*/ FPrintf(Output(),"SCRAMmer V37.3 - Copyright © 1992 Giuliano C. Peritore\n\n"); appname=pargv[0]; if(myrda=(struct RDArgs *)AllocDosObject(DOS_RDARGS,NULL)) { myrda->RDA_Source.CS_Buffer=0; myrda->RDA_Source.CS_Length=0; myrda->RDA_ExtHelp="Aiuto\n"; if(ReadArgs(TEMPLATE,result,myrda)) { if(result[ 0]) CacheControl(CACRF_EnableD,CACRF_EnableD); if(result[ 1]) CacheControl(0,CACRF_EnableD); if(result[ 2]) CacheControl(CACRF_DBE,CACRF_DBE); if(result[ 3]) CacheControl(0,CACRF_DBE); if(result[ 4]) CacheControl(CACRF_FreezeD,CACRF_FreezeD); if(result[ 5]) CacheControl(0,CACRF_FreezeD); if(result[ 6]) CacheControl(CACRF_EnableI,CACRF_EnableI); if(result[ 7]) CacheControl(0,CACRF_EnableI); if(result[ 8]) CacheControl(CACRF_IBE,CACRF_IBE); if(result[ 9]) CacheControl(0,CACRF_IBE); if(result[10]) CacheControl(CACRF_FreezeI,CACRF_FreezeI); if(result[11]) CacheControl(0,CACRF_FreezeI); if(result[12]) CacheControl(CACRF_WriteAllocate,CACRF_WriteAllocate); if(result[13]) CacheControl(0,CACRF_WriteAllocate); if(result[14]) CacheControl(CACRF_CopyBack,CACRF_CopyBack); if(result[15]) CacheControl(0,CACRF_CopyBack); if(result[16]) {Disable(); PageDetectOn(); Enable();} if(result[17]) {Disable(); PageDetectOff(); Enable();} if(result[18]) {Disable(); BurstOn(); Enable();} if(result[19]) {Disable(); BurstOff(); Enable();} if(result[20]) {Disable(); WrapOn(); Enable();} if(result[21]) {Disable(); WrapOff(); Enable();} if(result[22]) VBRToFast(); if(result[23]) VBRToChip(); if(result[24]) {SetBERR();mainberr=1;} if(result[25]) {SetDSACK();mainberr=2;} if(result[26]) UnsetKBRSTEN(); if(result[27]) SetKBRSTEN(); if(result[28]) terminated=1; if(result[29]) {iconify();terminated=0;} if(result[30]) toolpubsc=(char*)result[28]; FreeArgs(myrda); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_ERRORCL),GetString(MSG_CANCEL)); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NORDARGS),GetString(MSG_CANCEL)); FreeDosObject(DOS_RDARGS,myrda); } } /*--- Main program -------------------------------------------------*/ VOID main(int argc,char **argv) { struct Process *this_process; APTR default_req_window; SetBERR(); mainberr=1; if(LocaleBase=OpenLibrary("locale.library",38)) catalog=OpenCatalogA(NULL,"SCRAMmer.catalog",TAG_DONE); if(open_libraries()) { if((SysBase->AttnFlags)&AFF_68030) { if(userport=CreateMsgPort()) { get_parameters(argc,argv); while(terminated!=1) { if(build_window()) { this_process=(struct Process*)FindTask(NULL); default_req_window=this_process->pr_WindowPtr; this_process->pr_WindowPtr=main_window; main_window->UserPort=userport; AddGList(main_window,glist,-1,-1,NULL); RefreshGList(glist,main_window,NULL,-1); GT_RefreshWindow(main_window,NULL); ModifyIDCMP(main_window,BUTTONIDCMP|IDCMP_GADGETUP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW); terminated=0; process_main_win(); this_process->pr_WindowPtr=default_req_window; } unbuild_window(); if(terminated==2) iconify(); } DeleteMsgPort(userport); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOMSGPORT),GetString(MSG_CANCEL)); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NO68030),GetString(MSG_CANCEL)); } close_libraries(); if(LocaleBase) { if(catalog) CloseCatalog(catalog); CloseLibrary(LocaleBase); } } /*------------------------------------------------------------------*/ VOID process_main_win(VOID) { struct IntuiMessage *imsg; ULONG msgclass; struct Window *msgwin; struct Gadget *gad; ULONG signal; while(!terminated) { signal=Wait(1<UserPort->mp_SigBit|amigaguidesignal); if(signal==1<UserPort->mp_SigBit) { while((!terminated) && (imsg=GT_GetIMsg(main_window->UserPort))) { msgclass=imsg->Class; msgwin=imsg->IDCMPWindow; switch(msgclass) { case IDCMP_GADGETDOWN: gad=(struct Gadget*)imsg->IAddress; if(imsg->IDCMPWindow==battmem_win) process_battmem(gad,imsg); break; case IDCMP_GADGETUP: gad=(struct Gadget*)imsg->IAddress; if(imsg->IDCMPWindow==test_win) process_test(gad); if(imsg->IDCMPWindow==cpu_win) process_cpu(gad); if(imsg->IDCMPWindow==ramgar_win) process_ramgar(gad,imsg); if(imsg->IDCMPWindow==battmem_win) process_battmem(gad,imsg); if(imsg->IDCMPWindow==battclock_win) process_battclock(gad); if(imsg->IDCMPWindow==main_window) { switch(gad->GadgetID) { case 1: if(mother_win) { WindowToFront(mother_win); ActivateWindow(mother_win); } else open_mother(); break; case 2: if(system_ram_win) { WindowToFront(system_ram_win); ActivateWindow(system_ram_win); } else open_system_ram(); break; case 3: if(scsi_win) { WindowToFront(scsi_win); ActivateWindow(scsi_win); } else open_scsi(); break; case 4: if(test_win) { WindowToFront(test_win); ActivateWindow(test_win); } else open_test(); break; case 5: open_help(); break; case 6: if(ramgar_win) { WindowToFront(ramgar_win); ActivateWindow(ramgar_win); } else open_ramgar(); break; case 7: if(cpu_win) { WindowToFront(cpu_win); ActivateWindow(cpu_win); } else open_cpu(); break; case 8: if(battmem_win) { WindowToFront(battmem_win); ActivateWindow(battmem_win); } else open_battmem(); break; case 9: if(battclock_win) { WindowToFront(battclock_win); ActivateWindow(battclock_win); } else open_battclock(); break; case 10: if(about_win) { WindowToFront(about_win); ActivateWindow(about_win); } else open_about(); break; } } break; case IDCMP_CLOSEWINDOW: if(imsg->IDCMPWindow==main_window) { switch(request_user(main_window,GetString(MSG_SCRAMMER),GetString(MSG_REALLY),GetString(MSG_GADQIC))) { case 0: break; case 1: terminated=1; break; case 2: terminated=2; break; } } if(msgwin==mother_win) {GT_ReplyIMsg(imsg); close_mother(); } if(msgwin==system_ram_win) {GT_ReplyIMsg(imsg); close_system_ram(); } if(msgwin==scsi_win) {GT_ReplyIMsg(imsg); close_scsi(); } if(msgwin==test_win) {GT_ReplyIMsg(imsg); close_test(); } if(msgwin==ramgar_win) {GT_ReplyIMsg(imsg); close_ramgar(); } if(msgwin==cpu_win) {GT_ReplyIMsg(imsg); close_cpu(); } if(msgwin==battmem_win) {GT_ReplyIMsg(imsg); close_battmem(); } if(msgwin==battclock_win) {GT_ReplyIMsg(imsg); close_battclock(); } if(msgwin==about_win) {GT_ReplyIMsg(imsg); close_about(); } break; case IDCMP_REFRESHWINDOW: GT_BeginRefresh(imsg->IDCMPWindow); if(imsg->IDCMPWindow==mother_win) refresh_mother(); if(imsg->IDCMPWindow==system_ram_win) refresh_system_ram(); if(imsg->IDCMPWindow==scsi_win) refresh_scsi(); if(imsg->IDCMPWindow==test_win) refresh_test(); if(imsg->IDCMPWindow==ramgar_win) refresh_ramgar(); if(imsg->IDCMPWindow==cpu_win) refresh_cpu(); if(imsg->IDCMPWindow==battmem_win) refresh_battmem(); if(imsg->IDCMPWindow==battclock_win) refresh_battclock(); if(imsg->IDCMPWindow==about_win) refresh_about(); GT_EndRefresh(imsg->IDCMPWindow,TRUE); break; } if((msgclass!=IDCMP_CLOSEWINDOW) || (msgwin==main_window)) GT_ReplyIMsg(imsg); } } if(signal==amigaguidesignal) { process_help(); } } close_mother(); close_system_ram(); close_scsi(); close_test(); close_help(); close_ramgar(); close_cpu(); close_battmem(); close_battclock(); close_about(); } /*--- Subroutines --------------------------------------------------*/ BOOL open_libraries(VOID) { UBYTE *alertmessage="\0xintuition.library V37 or more is required\0\0"; if(!(IntuitionBase=(struct IntuitionBase*)OpenLibrary("intuition.library",37L))) { if(IntuitionBase=(struct IntuitionBase*)OpenLibrary("intuition.library",0L)) { DisplayAlert(RECOVERY_ALERT,alertmessage,32); CloseLibrary(IntuitionBase); } return(FALSE); } if(SysBase->LibNode.lib_Version < 37L) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOEXEC),GetString(MSG_CANCEL)); return(FALSE); } if(DOSBase->dl_lib.lib_Version < 37L) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NODOS),GetString(MSG_CANCEL)); return(FALSE); } if(!(GfxBase=(struct GfxBase*)OpenLibrary("graphics.library",37L))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOGFX),GetString(MSG_CANCEL)); return(FALSE); } if(!(GadToolsBase=OpenLibrary("gadtools.library",37L))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOGADTOOLS),GetString(MSG_CANCEL)); return(FALSE); } if(!(WorkbenchBase=(struct WorkbenchBase*)OpenLibrary("workbench.library",37L))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOWORKBENCH),GetString(MSG_CANCEL)); return(FALSE); } { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOICON),GetString(MSG_CANCEL)); return(FALSE); } /* if(!(AslBase=OpenLibrary("asl.library",37L))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOASL),GetString(MSG_CANCEL)); return(FALSE); }*/ return(TRUE); } VOID close_libraries(VOID) { /* if(AslBase) CloseLibrary(AslBase);*/ if(IconBase) CloseLibrary(IconBase); if(WorkbenchBase) CloseLibrary(WorkbenchBase); if(GadToolsBase) CloseLibrary(GadToolsBase); if(GfxBase) CloseLibrary(GfxBase); if(IntuitionBase) CloseLibrary(IntuitionBase); } /*------------------------------------------------------------------*/ BOOL get_default_font(VOID) { Forbid(); ta.ta_Name =GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name; ta.ta_YSize=GfxBase->DefaultFont->tf_YSize; ta.ta_Style=GfxBase->DefaultFont->tf_Style; ta.ta_Flags=GfxBase->DefaultFont->tf_Flags; Permit(); if(!(tf=OpenFont(&ta))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NODEFFONT),GetString(MSG_CANCEL)); return(FALSE); } xfnt=tf->tf_XSize; bfnt=tf->tf_Baseline; yfnt=tf->tf_YSize; if(yfnt<11) yfnt=11; if(xfnt<6) xfnt=6; yfnt+=3; xwin=(X_SEP*2) + 41*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); ywin=(Y_SEP*2) + 10*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if((xwin>def_pub_scr->Width)||(ywin>def_pub_scr->Height)) { CloseFont(tf); request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_BIGDEFFONT),GetString(MSG_OKAY)); return(FALSE); } return(TRUE); } BOOL get_font(VOID) { if(get_default_font()) { return(TRUE); } else { ta.ta_Name ="topaz.font"; ta.ta_YSize=8; ta.ta_Style=FS_NORMAL; ta.ta_Flags=FPF_ROMFONT; if(!(tf=OpenFont(&ta))) { request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOTOPFONT),GetString(MSG_CANCEL)); return(FALSE); } xfnt=tf->tf_XSize; bfnt=tf->tf_Baseline; yfnt=tf->tf_YSize; if(yfnt<11) yfnt=11; if(xfnt<6) xfnt=6; yfnt+=3; return(TRUE); } } /*------------------------------------------------------------------*/ BOOL get_pub_scr(VOID) { if(def_pub_scr=LockPubScreen(toolpubsc)) /* Take default p.s. */ { if((def_pub_scr->Width >= 640) && (def_pub_scr->Height >= 200)) { return(TRUE); } UnlockPubScreen(0,def_pub_scr); request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_SMALLPUBS),GetString(MSG_OKAY)); } if(def_pub_scr=LockPubScreen(NULL)) /* Take default p.s. */ { if((def_pub_scr->Width >= 640) && (def_pub_scr->Height >= 200)) { return(TRUE); } UnlockPubScreen(0,def_pub_scr); request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_SMALLPUBS),GetString(MSG_OKAY)); } if(def_pub_scr=LockPubScreen("Workbench")) { return(TRUE); } request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOLOCKPS),GetString(MSG_CANCEL)); return(FALSE); } /*------------------------------------------------------------------*/ BOOL build_window(VOID) { UWORD w,h; if(get_pub_scr()) { if(vi=GetVisualInfo(def_pub_scr,TAG_DONE)) { if(get_font()) { if(make_gadgets()) { /*ScreenToFront(def_pub_scr);*/ w=(X_SEP*3) + LIN_X*xfnt + (def_pub_scr->WBorLeft) + (def_pub_scr->WBorRight); h=(Y_SEP*6) + LIN_Y*yfnt + (def_pub_scr->WBorBottom) + (def_pub_scr->WBorTop) + (def_pub_scr->Font->ta_YSize) + 1; if(main_window=OpenWindowTags(NULL, WA_Left, 3*((def_pub_scr->Width-w)>>2), WA_Top, (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, WA_AutoAdjust, FALSE, WA_IDCMP, NULL, WA_Title, GetString(MSG_MAINWIN), WA_PubScreen, def_pub_scr, TAG_END)) { rp=main_window->RPort; SetFont(rp,tf); UnlockPubScreen(0,def_pub_scr); return(TRUE); } } } FreeVisualInfo(vi); } else request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOVISINFO),GetString(MSG_CANCEL)); UnlockPubScreen(0,def_pub_scr); } return(FALSE); } VOID unbuild_window(VOID) { if(main_window) CloseWindowSafely(main_window); FreeGadgets(glist); if(vi) FreeVisualInfo(vi); if(tf) CloseFont(tf); } BOOL make_gadgets(VOID) { struct Gadget *gad; gad=CreateContext(&glist); ng.ng_TextAttr=&ta; ng.ng_VisualInfo=vi; ng.ng_Flags= PLACETEXT_IN; ng.ng_Width= xfnt*18; ng.ng_Height= yfnt; ng.ng_LeftEdge= X_SEP; ng.ng_TopEdge=Y_SEP; ng.ng_GadgetText=GetString(MSG_GAD1); ng.ng_GadgetID=1; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*2)+yfnt; ng.ng_GadgetText=GetString(MSG_GAD2); ng.ng_GadgetID=2; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*3)+yfnt*2; ng.ng_GadgetText=GetString(MSG_GAD3); ng.ng_GadgetID=3; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*4)+yfnt*3; ng.ng_GadgetText=GetString(MSG_GAD4); ng.ng_GadgetID=4; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*5)+yfnt*4; ng.ng_GadgetText=GetString(MSG_GAD5); ng.ng_GadgetID=5; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_LeftEdge= (X_SEP<<1)+xfnt*18; ng.ng_TopEdge=Y_SEP; ng.ng_GadgetText=GetString(MSG_GAD6); ng.ng_GadgetID=6; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*2)+yfnt; ng.ng_GadgetText=GetString(MSG_GAD7); ng.ng_GadgetID=7; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*3)+yfnt*2; ng.ng_GadgetText=GetString(MSG_GAD8); ng.ng_GadgetID=8; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*4)+yfnt*3; ng.ng_GadgetText=GetString(MSG_GAD9); ng.ng_GadgetID=9; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); ng.ng_TopEdge=(Y_SEP*5)+yfnt*4; ng.ng_GadgetText=GetString(MSG_GAD10); ng.ng_GadgetID=10; gad=CreateGadget(BUTTON_KIND,gad,&ng,TAG_DONE); if(gad) return(TRUE); else { FreeGadgets(glist); request_user(0,GetString(MSG_SCRAMMER),GetString(MSG_NOGADGETS),GetString(MSG_CANCEL)); return(FALSE); } }