/* ihand.c * * Install a AmigaDos Handler - ( dependent release 1.2 ) * * 20-SEP-86 - Phillip Lindsay - (C) Commodore 1986 * You may freely distribute this source and use it for Amiga Development - * as long as the Copyright notice is left intact. * * (! Please don't make using this routine a habit, release 1.2 WORKBENCH * greater than >33.43 offers a new mount command that will allow * specification of GlobalVec for non-BCPL modules - Thanks to Andy Finkel !) * * Example "DEVS:MOUNTLIST" : *------------------------------------------------------------------------------ * MY0: Handler = l:my-handler * Stacksize = 5000 * Priority = 5 * GlobVec = 1 * # *------------------------------------------------------------------------------ */ #include #include #include #include #include #include #include #define OVER 0x02L /* BSTR overhead for size+NULL */ #define HANDNAMESIZE (0x0cL+OVER) /* size of BSTR+NULL */ #define HANDNAME "\x0cl:my-handler\0" /* BSTR format handler name */ #define DEVNAMESIZE (0x03L+OVER) /* size of BSTR+NULL */ #define DEVNAME "\x03MY0\0" /* BSTR of device name */ #define PRIORITY 5L #define STACKSIZE 5000L #define GLOBALVEC -1L ULONG ExpansionBase; /* for expansion library (1.2) */ main() { struct DeviceNode *mynode; UBYTE *handname; UBYTE *devname; handname = AllocMem((ULONG)(HANDNAMESIZE),MEMF_PUBLIC | MEMF_CLEAR); if(!handname) exit(TRUE); strcpy(handname,HANDNAME); devname = AllocMem((ULONG)(DEVNAMESIZE),MEMF_PUBLIC | MEMF_CLEAR); if(!devname) { FreeMem(handname,(ULONG)(HANDNAMESIZE)); exit(TRUE); } strcpy(devname,DEVNAME); mynode = AllocMem((ULONG)sizeof(*mynode),MEMF_PUBLIC | MEMF_CLEAR); if(!mynode) { FreeMem(handname,(ULONG)(HANDNAMESIZE)); FreeMem(devname,(ULONG)(DEVNAMESIZE)); exit(TRUE); } mynode->dn_Priority = PRIORITY; mynode->dn_StackSize = STACKSIZE; mynode->dn_GlobalVec = GLOBALVEC; /* (-1) the trick for non-bcpl module */ mynode->dn_Name = (BSTR) ((ULONG)devname >> 2); /* to BPTR */ mynode->dn_Handler = (BSTR) ((ULONG)handname >> 2); /* "" "" */ /* This will fail if your not 1.2 */ ExpansionBase = (ULONG) OpenLibrary(EXPANSIONNAME,0L); if(!ExpansionBase) { FreeMem(handname,(ULONG)(HANDNAMESIZE+2)); FreeMem(devname,(ULONG)(DEVNAMESIZE+2)); FreeMem(mynode,(ULONG)sizeof(*mynode)); exit(TRUE); } AddDosNode(0L,0L,mynode); CloseLibrary(ExpansionBase); } /* EOF - ihand.c */