home *** CD-ROM | disk | FTP | other *** search
- /* The example listed here shows how to create an AppIcon and obtain
- * arguments from Workbench when the user drops other icons on top of
- * it. The AppIcon will appear as a disk icon named "TestAppIcon" on the
- * Workbench screen. (All AppIcons appear on the Workbench screen or
- * window.)
- *
- * For convenience, this example code uses GetDefDiskObject() to create
- * the icon imagery for the AppIcon. Applications should never do this.
- * Use your own custom imagery for AppIcons instead.
- */
-
- /* appicon.c - Compiled under SAS C 5.10 with lc -L appicon.c */
- /* Requires Kickstart version 37 or later. Works from the Shell (CLI) only */
-
- #include <exec/types.h> /* Need this for the Amiga variable types */
- #include <workbench/workbench.h> /* This has DiskObject and AppIcon structs */
- #include <workbench/startup.h> /* This has WBStartup and WBArg structs */
- #include <exec/libraries.h> /* Need this to check library versions */
-
- #include <clib/icon_protos.h> /* Icon (DiskObject) function prototypes */
- #include <clib/exec_protos.h> /* Exec message, port and library functions*/
- #include <clib/wb_protos.h> /* AppIcon function protos */
-
- #ifdef LATTICE
- int CXBRK(void) { return(0); } /* Disable SAS Lattice CTRL/C handling */
- int chkabort(void) { return(0); }/* really */
- #endif
-
- extern struct Library *SysBase;
- struct Library *IconBase;
- struct Library *WorkbenchBase;
-
- void main(int argc, char **argv)
- {
- struct DiskObject *dobj=NULL;
- struct MsgPort *myport=NULL;
- struct AppIcon *appicon=NULL;
- struct AppMessage *appmsg=NULL;
-
- LONG dropcount=0L;
- ULONG x;
- BOOL success=0L;
-
- /* Get the the right version of the Icon Library, initialize IconBase */
- if(IconBase = OpenLibrary("icon.library",37))
- {
- /* Get the the right version of the Workbench Library */
- if (WorkbenchBase=OpenLibrary("workbench.library",37))
- {
- /* This is the easy way to get some icon imagery */
- /* Real applications should use custom imagery */
- dobj=GetDefDiskObject(WBDISK);
- if(dobj!=0)
- {
- /* The type must be set to NULL for a WBAPPICON */
- dobj->do_Type=NULL;
-
- /* The CreateMsgPort() function is in Exec version 37 and later only */
- myport=CreateMsgPort();
- if(myport)
- {
- /* Put the AppIcon up on the Workbench window */
- appicon=AddAppIconA(0L,0L,"TestAppIcon",myport,NULL,dobj,NULL);
- if(appicon)
- {
- /* For the sake of this example, we allow the AppIcon */
- /* to be activated only five times. */
- printf("Drop files on the Workbench AppIcon\n");
- printf("Example exits after 5 drops\n");
-
- while(dropcount<5)
- {
- /* Here's the main event loop where we wait for */
- /* messages to show up from the AppIcon */
- WaitPort(myport);
-
- /* Might be more than one message at the port... */
- while(appmsg=(struct AppMessage *)GetMsg(myport))
- {
- if(appmsg->am_NumArgs==0L)
- {
- /* If NumArgs is 0 the AppIcon was activated directly */
- printf("User activated the AppIcon.\n");
- printf("A Help window for the user would be good here\n");
- }
- else if(appmsg->am_NumArgs>0L)
- {
- /* If NumArgs is >0 the AppIcon was activated by */
- /* having one or more icons dropped on top of it */
- printf("User dropped %ld icons on the AppIcon\n",
- appmsg->am_NumArgs);
- for(x=0;x<appmsg->am_NumArgs;x++)
- {
- printf("#%ld name='%s'\n",x+1,appmsg->am_ArgList[x].wa_Name);
- }
- }
- /* Let Workbench know we're done with the message */
- ReplyMsg((struct Message *)appmsg);
- }
- dropcount++;
- }
- success=RemoveAppIcon(appicon);
- }
- /* Clear away any messages that arrived at the last moment */
- while(appmsg=(struct AppMessage *)GetMsg(myport))
- ReplyMsg((struct Message *)appmsg);
- DeleteMsgPort(myport);
- }
- FreeDiskObject(dobj);
- }
- CloseLibrary(WorkbenchBase);
- }
- CloseLibrary(IconBase);
- }
- }
-