home *** CD-ROM | disk | FTP | other *** search
- /* PopCli IV V1.01
- ** Copyright (c) 1993 Max Favilli
- **
- **
- ** Massimiliano Favilli
- ** Via Livornese Est N.9
- ** Perignano (Pisa) 56030
- ** Italy
- **
- ** Email: mc6254@mclink.it
- **
- **
- ** Developed with:
- ** SAS/C 5.10b
- ** TurboText 1.03
- ** GadToolsBox v1.3
- **
- **
- ** Some Note:
- **
- ** No, nothing... :)
- **
- */
-
- #include "psdata.h"
- #include "pchelp.h"
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable Lattice CTRL/C handling */
- void chkabort(void) { return; }
- #endif
-
- #define EVT_HELPME 1L
- #define EVT_POPCLI 2L
- #define EVT_LOOKFOR 3L
- #define EVT_QUIT 7L
-
- #define STDquit "lcommand ctrl esc"
- #define STDpopcli "lcommand esc"
- #define STDhelpme "lcommand alt help"
- #define STDlookfor "rcommand esc"
-
- #define MAXSTRLEN 256
-
- #define PORT_SIG 1L << PROSET.mp->mp_SigBit
- #define WND_SIG 1L << PopCliIVWnd->UserPort->mp_SigBit
-
- extern int strfnd( char *, char * );
- // ^^^^^^ from mylib.o
-
- UBYTE *vers = "\0$VER: PopCLI IV v1.01";
-
- struct Library *GadToolsBase,
- *CxBase,
- *IconBase;
- struct IntuitionBase *IntuitionBase;
- struct GfxBase *GfxBase;
- struct LayersBase *LayersBase;
-
- void main( int, char ** );
- BOOL AddAll( void );
- BOOL AddQuit( void );
- BOOL AddPopCli( void );
- BOOL AddHelpMe( void );
- BOOL AddLookFor( void );
- LONG ProcessMsg( void );
- LONG HandleCxMsg( void );
- LONG HandleWndMsg( void );
- void Help( void );
- void LookFor( void );
- BOOL SetUpAll( void );
- void CleanAll( void );
-
- GLOBAL_DATA PROSET;
-
- CxObj *quit_filter, *quit_sender, *quit_translate,
- *popcli_filter, *popcli_sender, *popcli_translate,
- *helpme_filter, *helpme_sender, *helpme_translate,
- *lookfor_filter, *lookfor_sender, *lookfor_translate;
-
- struct NewBroker proset_newbroker = {
- NB_VERSION,
- "PopCliIV", /* string to identify this broker */
- "run a NewShell with a shortcut",
- "Show help window for more info",
- NBU_UNIQUE | NBU_NOTIFY, /* Don't want any new commodities
- * starting with this name. If someone
- * tries it, let me know */
- COF_SHOW_HIDE,
- 0,
- 0,
- 0
- };
-
-
-
- /*
- long _BackGroundIO = 0;
- long _stack = 4000;
- char *_procname = "PopCliIV";
- long _priority = 0;
- */
-
- void main(int argc, char **argv)
- {
- struct WBStartup *WBenchMsg;
- struct WBArg *wbarg;
- struct DiskObject *dobj;
- char **toolarray;
- char *s;
- BOOL popupflag;
-
- if( SetUpAll() )
- {
- if( IconBase = OpenLibrary("icon.library", 36L) )
- {
- proset_newbroker.nb_Pri = 0;
- strcpy( PROSET.quit, STDquit );
- strcpy( PROSET.popcli, STDpopcli );
- strcpy( PROSET.popclicmd, "newshell con:0/11/640/200/AmigaShell/close" );
- PROSET.popcliflag = TRUE;
- strcpy( PROSET.helpme, STDhelpme );
- strcpy( PROSET.lookfor, STDlookfor );
- if( argc==0 )
- {
- WBenchMsg = (struct WBStartup *)argv;
- wbarg = WBenchMsg->sm_ArgList;
-
- if( (*wbarg->wa_Name) && (dobj=GetDiskObject(wbarg->wa_Name)) )
- {
- toolarray= (char **)dobj->do_ToolTypes;
- if( s = (char *)FindToolType(toolarray,"CX_PRIORITY") )
- proset_newbroker.nb_Pri = atoi(s);
- if( s = (char *)FindToolType(toolarray,"CX_QUIT") )
- strcpy(PROSET.quit,s);
- if( s = (char *)FindToolType(toolarray,"POPCLI") )
- strcpy(PROSET.popcli,s);
- if( s = (char *)FindToolType(toolarray,"POPCLICMD") )
- strcpy(PROSET.popclicmd,s);
- if( s = (char *)FindToolType(toolarray,"CX_POPKEY") )
- strcpy(PROSET.helpme,s);
- if( s = (char *)FindToolType(toolarray,"CX_POPUP") )
- {
- if( MatchToolValue(s,"YES") )
- popupflag = TRUE;
- if( MatchToolValue(s,"NO") )
- popupflag = FALSE;
- }
- if( s = (char *)FindToolType(toolarray,"LOOKFORCLI") )
- strcpy(PROSET.lookfor,s);
-
- FreeDiskObject(dobj);
- }
- }
-
- proset_newbroker.nb_Port = PROSET.mp;
-
- if( PROSET.broker = CxBroker(&proset_newbroker, NULL) )
- {
- if( AddAll() )
- {
- ActivateCxObj(PROSET.broker, 1L);
- if( popupflag )
- Help();
- while( ProcessMsg() )
- ;
- }
- }
- CloseLibrary(IconBase);
- }
- }
- CleanAll();
- }
-
- BOOL AddAll( void )
- {
- return( AddQuit() && AddPopCli() && AddHelpMe() && AddLookFor() );
- }
-
- BOOL AddQuit( void )
- {
- if( !(quit_filter = CxFilter(PROSET.quit)) ){
- strcpy( PROSET.quit, STDquit );
- quit_filter = CxFilter(PROSET.quit);
- }
- AttachCxObj(PROSET.broker, quit_filter);
- if( quit_sender = CxSender(PROSET.mp, EVT_QUIT) )
- {
- AttachCxObj(quit_filter, quit_sender);
- if( quit_translate = (CxTranslate(NULL)) )
- {
- AttachCxObj(quit_filter, quit_translate);
- if( !CxObjError(quit_filter))
- return(TRUE);
- }
- }
- return(FALSE);
- }
-
- BOOL AddPopCli( void )
- {
- if( popcli_filter = CxFilter(PROSET.popcli) )
- PROSET.popcliflag = TRUE;
- else{
- PROSET.popcliflag = FALSE;
- strcpy( PROSET.popcli, STDpopcli );
- popcli_filter = CxFilter(PROSET.popcli);
- }
- AttachCxObj(PROSET.broker, popcli_filter);
- if( popcli_sender = CxSender(PROSET.mp, EVT_POPCLI) )
- {
- AttachCxObj(popcli_filter, popcli_sender);
- if( popcli_translate = (CxTranslate(NULL)) )
- {
- AttachCxObj(popcli_filter, popcli_translate);
- if( !CxObjError(popcli_filter))
- return(TRUE);
- }
- }
-
- return(FALSE);
- }
-
- BOOL AddHelpMe( void )
- {
- if( !(helpme_filter = CxFilter(PROSET.helpme)) )
- {
- strcpy( PROSET.helpme, STDhelpme );
- helpme_filter = CxFilter(PROSET.helpme);
- }
- AttachCxObj(PROSET.broker, helpme_filter);
- if( helpme_sender = CxSender(PROSET.mp, EVT_HELPME) )
- {
- AttachCxObj(helpme_filter, helpme_sender);
- if( helpme_translate = (CxTranslate(NULL)) )
- {
- AttachCxObj(helpme_filter, helpme_translate);
- if( !CxObjError(helpme_filter))
- return(TRUE);
- }
- }
- return(FALSE);
- }
-
- BOOL AddLookFor( void )
- {
- if( !(lookfor_filter = CxFilter(PROSET.lookfor)) )
- {
- strcpy( PROSET.lookfor, STDlookfor );
- lookfor_filter = CxFilter(PROSET.lookfor);
- }
- AttachCxObj(PROSET.broker, lookfor_filter);
- if( lookfor_sender = CxSender(PROSET.mp, EVT_LOOKFOR) )
- {
- AttachCxObj(lookfor_filter, lookfor_sender);
- if( lookfor_translate = (CxTranslate(NULL)) )
- {
- AttachCxObj(lookfor_filter, lookfor_translate);
- if( !CxObjError(lookfor_filter))
- return(TRUE);
- }
- }
- return(FALSE);
- }
-
- LONG ProcessMsg(void)
- {
- ULONG cxsigflag = PORT_SIG;
- ULONG sigrcvd;
- LONG returnvalue = 1L;
-
- if(PopCliIVWnd)
- sigrcvd = Wait( SIGBREAKF_CTRL_C | cxsigflag | WND_SIG );
- else
- sigrcvd = Wait( SIGBREAKF_CTRL_C | cxsigflag );
-
- if( sigrcvd & cxsigflag )
- returnvalue = HandleCxMsg();
-
- if( PopCliIVWnd && (sigrcvd & WND_SIG) )
- returnvalue = HandleWndMsg();
-
- if (sigrcvd & SIGBREAKF_CTRL_C)
- returnvalue = 0L;
-
- return( returnvalue );
- }
-
- LONG HandleCxMsg( void )
- {
- struct InputEvent *L_IEvent;
- CxMsg *msg;
- ULONG msgid, msgtype;
- LONG returnvalue = 1L;
-
- while(msg = (CxMsg *)GetMsg(PROSET.mp))
- {
- msgtype = CxMsgType(msg);
- L_IEvent = (struct InputEvent *)CxMsgData(msg);
- msgid = CxMsgID(msg);
- ReplyMsg((struct Message *)msg);
-
- switch(msgtype)
- {
- case CXM_IEVENT:
- switch(msgid)
- {
- case EVT_QUIT:
- returnvalue = 0L;
- break;
- case EVT_HELPME:
- if( !PopCliIVWnd )
- Help();
- break;
- case EVT_LOOKFOR:
- LookFor();
- break;
- case EVT_POPCLI:
- {
- BPTR nullfh;
-
- if( nullfh = Open("NIL:", MODE_NEWFILE) )
- {
- WBenchToFront();
- (void)Execute(PROSET.popclicmd,nullfh,nullfh);
- Close(nullfh);
- }
-
- break;
- }
-
- default:
- /* unknown. */
- break;
- }
- break;
-
- case CXM_COMMAND:
- switch(msgid)
- {
- case CXCMD_DISABLE:
- ActivateCxObj(PROSET.broker, 0L);
- break;
- case CXCMD_ENABLE:
- ActivateCxObj(PROSET.broker, 1L);
- break;
- case CXCMD_KILL:
- returnvalue = 0L;
- break;
- case CXCMD_APPEAR:
- if( !PopCliIVWnd )
- {
- Help();
- }
- break;
- case CXCMD_DISAPPEAR:
- if( PopCliIVWnd )
- {
- ClosePopCliIVWindow();
- CloseDownScreen();
- }
- break;
- case CXCMD_UNIQUE:
- returnvalue = 0L;
- break;
-
- default:
- /* Unknown msgid */
- break;
- }
- break;
- default:
- /* Unknown msgtype */
- break;
- }
- }
-
- return( returnvalue );
- }
-
- LONG HandleWndMsg( void )
- {
- struct IntuiMessage *imsg;
- struct IntuiMessage *Hmsg;
- struct Gadget *gad;
- LONG returnvalue = 1L;
-
- if( !(Hmsg = (struct IntuiMessage *)AllocMem(sizeof(struct IntuiMessage),MEMF_CLEAR)) )
- {
- if( PopCliIVWnd )
- {
- ClosePopCliIVWindow();
- CloseDownScreen();
- }
- return(0L);
- }
-
- while( PopCliIVWnd && (imsg = GT_GetIMsg(PopCliIVWnd->UserPort)) )
- {
- CopyMem( (char *)imsg, (char *)Hmsg, sizeof(struct IntuiMessage) );
- GT_ReplyIMsg(imsg);
- switch( Hmsg->Class )
- {
- case IDCMP_GADGETUP:
- gad = (struct Gadget *)Hmsg->IAddress;
- switch( gad->GadgetID )
- {
- case GD_popcli_sc:
- {
- LONG error;
- IX popcli_ix;
-
- if( !(error=ParseIX( ((struct StringInfo *)gad->SpecialInfo)->Buffer,
- &popcli_ix)) )
- {
- strcpy( PROSET.popcli,
- ((struct StringInfo *)gad->SpecialInfo)->Buffer);
- if( PROSET.broker )
- {
- DeleteCxObjAll(PROSET.broker);
- if( PROSET.broker = CxBroker(&proset_newbroker, NULL) )
- {
- if( AddAll() )
- {
- ActivateCxObj(PROSET.broker, 1L);
- }
- }
- }
- }else{
- GT_SetGadgetAttrs( PopCliIVGadgets[GDX_popcli_sc],
- PopCliIVWnd, NULL,
- GTST_String, PROSET.popcli,
- TAG_END );
- }
- break;
- }
- case GD_popcli_cmd:
- strcpy( PROSET.popclicmd,
- ((struct StringInfo *)gad->SpecialInfo)->Buffer);
- break;
- case GD_help_sc:
- {
- LONG error;
- IX helpme_ix;
-
- if( !(error=ParseIX( ((struct StringInfo *)gad->SpecialInfo)->Buffer,
- &helpme_ix)) )
- {
- strcpy( PROSET.helpme,
- ((struct StringInfo *)gad->SpecialInfo)->Buffer);
- if( PROSET.broker )
- {
- DeleteCxObjAll(PROSET.broker);
- if( PROSET.broker = CxBroker(&proset_newbroker, NULL) )
- {
- if( AddAll() )
- {
- ActivateCxObj(PROSET.broker, 1L);
- }
- }
- }
- }else{
- GT_SetGadgetAttrs( PopCliIVGadgets[GDX_help_sc],
- PopCliIVWnd, NULL,
- GTST_String, PROSET.helpme,
- TAG_END );
- }
-
- break;
- }
- case GD_lookfor_sc:
- {
- LONG error;
- IX lookfor_ix;
-
- if( !(error=ParseIX( ((struct StringInfo *)gad->SpecialInfo)->Buffer,
- &lookfor_ix)) )
- {
- strcpy( PROSET.lookfor,
- ((struct StringInfo *)gad->SpecialInfo)->Buffer);
- if( PROSET.broker )
- {
- DeleteCxObjAll(PROSET.broker);
- if( PROSET.broker = CxBroker(&proset_newbroker, NULL) )
- {
- if( AddAll() )
- {
- ActivateCxObj(PROSET.broker, 1L);
- }
- }
- }
- }else{
- GT_SetGadgetAttrs( PopCliIVGadgets[GDX_lookfor_sc],
- PopCliIVWnd, NULL,
- GTST_String, PROSET.lookfor,
- TAG_END );
- }
- break;
- }
- case GD_quit:
- ClosePopCliIVWindow();
- CloseDownScreen();
- returnvalue = FALSE;
- break;
- case GD_hide:
- ClosePopCliIVWindow();
- CloseDownScreen();
- break;
-
- default:
- break;
- }
- break;
- case IDCMP_CLOSEWINDOW:
- ClosePopCliIVWindow();
- CloseDownScreen();
- break;
- case IDCMP_REFRESHWINDOW:
- GT_BeginRefresh( PopCliIVWnd );
- GT_EndRefresh( PopCliIVWnd, TRUE );
- break;
-
- default:
- break;
- }
- }
-
- FreeMem( Hmsg, sizeof(struct IntuiMessage) );
- return( returnvalue );
- }
-
-
- void Help( void )
- {
- if( !SetUpScreen() )
- if( !OpenPopCliIVWindow() )
- ;
- }
-
- void LookFor( void )
- {
- ULONG iblock;
- struct Screen *scr;
- struct Window *win;
- struct Layer *layer;
-
- iblock=LockIBase(0L);
-
- for( scr = IntuitionBase->FirstScreen;
- scr;
- scr = scr->NextScreen )
- {
- if( !strcmp(scr->DefaultTitle,"Workbench Screen") )
- {
- if( scr != IntuitionBase->FirstScreen )
- {
- win = scr->FirstWindow->WLayer->LayerInfo->top_layer->Window;
- if( strfnd(win->Title,"shell")==strlen("shell"))
- {
- ScreenToFront(scr);
- if( win != IntuitionBase->ActiveWindow )
- ActivateWindow(win);
- break;
- }
- }
- for( layer = scr->FirstWindow->WLayer;
- layer && layer->Window;
- layer = layer->back )
- win=layer->Window;
- for( layer = win->WLayer;
- layer && layer->Window;
- layer = layer->front )
- {
- win=layer->Window;
- if( strfnd(win->Title,"shell")==strlen("shell"))
- {
- if( !(win->Flags & BACKDROP) )
- WindowToFront(win);
- if( win != IntuitionBase->ActiveWindow )
- ActivateWindow(win);
- if( scr != IntuitionBase->FirstScreen )
- ScreenToFront(scr);
- break;
- }
- }
-
- break;
- }
- }
-
- UnlockIBase(iblock);
- }
-
- BOOL SetUpAll( void )
- {
- if( !(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 36L)) )
- return( FALSE );
- if( !(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 36L)) )
- return( FALSE );
- if( !(LayersBase = OpenLibrary("layers.library", 36)) )
- return(FALSE);
- if( !(CxBase = OpenLibrary("commodities.library", 37L)) )
- return( FALSE );
- if( !(GadToolsBase = (struct GadToolsBase *)OpenLibrary("gadtools.library", 37L)) )
- return( FALSE );
- if( !(PROSET.mp = CreateMsgPort()) )
- return( FALSE );
-
- if( !(PROSET.quit = AllocMem( MAXSTRLEN, MEMF_CLEAR )) )
- return( FALSE );
- if( !(PROSET.popcli = AllocMem( MAXSTRLEN, MEMF_CLEAR )) )
- return( FALSE );
- if( !(PROSET.popclicmd = AllocMem( MAXSTRLEN, MEMF_CLEAR )) )
- return( FALSE );
- if( !(PROSET.helpme = AllocMem( MAXSTRLEN, MEMF_CLEAR )) )
- return( FALSE );
- if( !(PROSET.lookfor = AllocMem( MAXSTRLEN, MEMF_CLEAR )) )
- return( FALSE );
- }
-
- void CleanAll( void )
- {
- CxMsg *msg;
-
- if(PopCliIVWnd)
- {
- ClosePopCliIVWindow();
- CloseDownScreen();
- }
-
- if( PROSET.broker ) DeleteCxObjAll(PROSET.broker);
- if( PROSET.quit ) FreeMem( PROSET.quit, MAXSTRLEN );
- if( PROSET.popcli ) FreeMem( PROSET.popcli, MAXSTRLEN );
- if( PROSET.popclicmd ) FreeMem( PROSET.popclicmd, MAXSTRLEN );
- if( PROSET.helpme ) FreeMem( PROSET.helpme, MAXSTRLEN );
- if( PROSET.lookfor ) FreeMem( PROSET.lookfor, MAXSTRLEN );
- if( PROSET.mp )
- {
- while( msg = (CxMsg *)GetMsg(PROSET.mp))
- ReplyMsg((struct Message *)msg);
- DeletePort(PROSET.mp);
- }
-
- if( GadToolsBase ) CloseLibrary((struct Library *)GadToolsBase);
- if( CxBase ) CloseLibrary(CxBase);
- if( LayersBase ) CloseLibrary(LayersBase);
- if( GfxBase ) CloseLibrary((struct Library *)GfxBase);
- if( IntuitionBase ) CloseLibrary((struct Library *)IntuitionBase);
- }
-