diff --git a/src/includes.h b/src/includes.h index 4ebae9b..8ff617b 100644 --- a/src/includes.h +++ b/src/includes.h @@ -1,57 +1,58 @@ -#ifndef INCLUDES_H -#define INCLUDES_H - -#define STREQUAL(s1, s2) (strcmp(s1, s2) == 0) - -#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 ALL_REACTION_MACROS -#define ALL_REACTION_CLASSES -#include -#include - -#define ASM __asm -#define REG(x) register __ ## x - -#define BASEDEF(base) struct Library *base##Base = NULL -#define OPENLIB(base,name) if (!((base##Base) = OpenLibrary ((name),0))) CloseLibs() -#define CLOSELIB(base) if (base##Base) {CloseLibrary (base##Base); base##Base=NULL;} - -#define NAME_MAX 0X020 -#define PATH_MAX 0X100 -#define MAX_LISTED_ADF 0X200 -#define BUFFERSIZE 0X200 - -#include - -#endif \ No newline at end of file +#ifndef INCLUDES_H +#define INCLUDES_H + +#define STREQUAL(s1, s2) (strcmp(s1, s2) == 0) + +#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 ALL_REACTION_MACROS +#define ALL_REACTION_CLASSES +#include +#include + +#define ASM __asm +#define REG(x) register __ ## x + +#define BASEDEF(base) struct Library *base##Base = NULL +#define OPENLIB(base,name) if (!((base##Base) = OpenLibrary ((name),0))) CloseLibs() +#define CLOSELIB(base) if (base##Base) {CloseLibrary (base##Base); base##Base=NULL;} + +#define NAME_MAX 0X020 +#define PATH_MAX 0X100 +#define MAX_LISTED_ADF 0X200 +#define BUFFERSIZE 0X200 + +#include + +#endif diff --git a/src/main.c b/src/main.c index 7882f63..70cb43e 100644 --- a/src/main.c +++ b/src/main.c @@ -188,10 +188,70 @@ int makeMenu(APTR MenuVisualInfo) return( 0L ); } +void ejectADFMenu(struct AppMessage *EjectADFMsg) +{ + ULONG i = 0, j = 0; + char VolName[104]; + int index = -1; + + /* Make sure our list is up-to-date before searching it */ + createADFList(); + + for(i = 0; i < EjectADFMsg->am_NumArgs; i++) { + if(EjectADFMsg->am_ArgList[i].wa_Name[0] = 0) { + NameFromLock(EjectADFMsg->am_ArgList[i].wa_Lock, &VolName, 104); + VolName[strlen(VolName)-1] = 0; + for(j = 0; j < MAX_LISTED_ADF; j++) { + if(strcmp(col2[j], VolName) == 0) { + index = j; + break; + } + } + if(index>=0) Eject(col1[index]); + } + } + + createADFList(); +} + +void removeEjectADFMenu(struct AppMenuItem *ejectADFItem, struct MsgPort *EjectADFMP) +{ + struct AppMessage *appmsg = NULL; + + RemoveAppMenuItem(ejectADFItem); + + while(appmsg = (struct AppMessage *)GetMsg(EjectADFMP)) { + ReplyMsg((struct Message *)appmsg); + } + DeleteMsgPort(EjectADFMP); +} + +struct MsgPort *addEjectADFMenu(struct AppMenuItem **ejectADFItem) +{ + struct MsgPort *EjectADFMP = NULL; + struct AppMenuItem *appmenuitem = NULL; + + if(EjectADFMP = CreateMsgPort()) { + appmenuitem = AddAppMenuItemA(0L, 0, "Eject ADF", EjectADFMP, NULL); + if(appmenuitem == NULL) { + DeleteMsgPort(EjectADFMP); + EjectADFMP = NULL; + } + } + + *ejectADFItem = appmenuitem; + return EjectADFMP; +} + int appMain() { ULONG result; UWORD code; + ULONG wait = 0; + struct MsgPort *EjectADFMP = NULL; + struct AppMenuItem *EjectADFItem = NULL; + ULONG EjectADFSignal = 0; + struct AppMessage *EjectADFMsg; ScreenPtr = LockPubScreen(NULL); VisualInfoPtr = GetVisualInfo(ScreenPtr, NULL); @@ -328,80 +388,89 @@ int appMain() makeMenu(VisualInfoPtr); SetMenuStrip(WindowPtr, dacMenu); createADFList(); - + EjectADFMP = addEjectADFMenu(&EjectADFItem); + EjectADFSignal = (1 << EjectADFMP->mp_SigBit); + GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); while(!done) { - Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit)); - - while ((result = DoMethod(WindowObjectPtr, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) - { switch (result & WMHI_CLASSMASK) - { - case WMHI_CLOSEWINDOW: - done = TRUE; - break; - - case WMHI_GADGETUP: - switch(result & WMHI_GADGETMASK) - { + wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | EjectADFSignal); + + if(wait & EjectADFSignal) { + while(EjectADFMsg = (struct AppMessage *)GetMsg(EjectADFMP)) { + ejectADFMenu(EjectADFMsg); + ReplyMsg((struct Message *)EjectADFMsg); + } + } else { + while ((result = DoMethod(WindowObjectPtr, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) + { switch (result & WMHI_CLASSMASK) + { + case WMHI_CLOSEWINDOW: + done = TRUE; + break; + + case WMHI_GADGETUP: + switch(result & WMHI_GADGETMASK) + { - case IDLOADCHANGE: - loadChangeAdfWin(); - break; + case IDLOADCHANGE: + loadChangeAdfWin(); + break; - case IDCREATE: - createAdfWin(); - break; + case IDCREATE: + createAdfWin(); + break; - case IDEJECT: - clickEject(); - break; + case IDEJECT: + clickEject(); + break; - case IDEJECTALL: - clickEjectAll(); - break; - - case IDREFRESH: - createADFList(); - break; - - case IDLISTBROWSER: - selectedIndex = code; - break; - - default: - break; - } - break; + case IDEJECTALL: + clickEjectAll(); + break; + + case IDREFRESH: + createADFList(); + break; + + case IDLISTBROWSER: + selectedIndex = code; + break; + + default: + break; + } + break; - case WMHI_ICONIFY: /* iconify / uniconify */ - iconify(); - break; + case WMHI_ICONIFY: /* iconify / uniconify */ + iconify(); + break; - case WMHI_MENUPICK: - ProcessMenuIDCMPdacMenu(code); - break; + case WMHI_MENUPICK: + ProcessMenuIDCMPdacMenu(code); + break; - case WMHI_RAWKEY: - switch(code) - { - case 0x45: // press ESC to quit - done=TRUE; - break; + case WMHI_RAWKEY: + switch(code) + { + case 0x45: // press ESC to quit + done=TRUE; + break; - default: + default: + break; + } break; - } - break; - default: - break; + default: + break; + } } - } + } } - + appTop = WindowPtr->TopEdge; appLeft = WindowPtr->LeftEdge; appWidth = WindowPtr->Width; @@ -411,7 +480,8 @@ int appMain() freeList(&adfList); ClearMenuStrip(WindowPtr); FreeVisualInfo(VisualInfoPtr); - + removeEjectADFMenu(EjectADFItem, EjectADFMP); + // delete log file Execute("Delete RAM:dacgui.log >NIL:", NULL, NULL); @@ -1270,4 +1340,4 @@ void iconify(void) { done = TRUE; } -} \ No newline at end of file +}