From 81ef2e06f8a3ef9674896f587486a68c21d06279 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 18 Nov 2021 16:30:08 +0000 Subject: [PATCH 01/17] Changes required to build with vbcc Fixes: Missing includes Missing OpenLibrarys Wrong types (mostly BPTR=NULL changed to 0) Bug in UnlockPubScreen Added makefile for vbcc The semicolon at the start of main.c needs to be removed for the makefile to work. --- functionsLib/Makefile.vbcc | 14 +++++ functionsLib/functions.c | 2 +- functionsLib/functions.lib | Bin 1008 -> 0 bytes functionsLib/functions.o | Bin 920 -> 0 bytes src/Makefile.vbcc | 14 +++++ src/functions.h | 19 ++++++ src/functions.lib | Bin 1008 -> 0 bytes src/includes.h | 121 ++++++++++++++++++++----------------- src/main.c | 24 +++++--- src/menu.h | 106 ++++++++++++++++---------------- 10 files changed, 183 insertions(+), 117 deletions(-) create mode 100644 functionsLib/Makefile.vbcc delete mode 100644 functionsLib/functions.lib delete mode 100644 functionsLib/functions.o create mode 100644 src/Makefile.vbcc create mode 100644 src/functions.h delete mode 100644 src/functions.lib diff --git a/functionsLib/Makefile.vbcc b/functionsLib/Makefile.vbcc new file mode 100644 index 0000000..209b3e8 --- /dev/null +++ b/functionsLib/Makefile.vbcc @@ -0,0 +1,14 @@ +CC := vc +aos68k +CFLAGS := +AR := join + +OBJS := functions.o +DEPS := functions.h + +all: functions.lib + +%.o: %.c $(DEPS) + $(CC) $(CFLAGS) -c -o $@ $< + +functions.lib: $(OBJS) + $(AR) $^ AS $@ diff --git a/functionsLib/functions.c b/functionsLib/functions.c index 4f58d84..b286496 100644 --- a/functionsLib/functions.c +++ b/functionsLib/functions.c @@ -26,7 +26,7 @@ void RunDAControl(char parameter[BUFFERSIZE]) char dacontrolPATH[BUFFERSIZE]; strcpy(dacontrolPATH, "SYS:C/DAControl "); strcat(dacontrolPATH, parameter); - Execute(dacontrolPATH, NULL, NULL); + Execute(dacontrolPATH, 0, 0); } /*=============================== diff --git a/functionsLib/functions.lib b/functionsLib/functions.lib deleted file mode 100644 index f1e63783fa3097487dcc8eca9bfee9e5a9ad51c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1008 zcmYjQ-)mBF6hHTBYEILIEE$7tQe)K6(OALQ!~9hun{Ha+BDgv?Zx`;=?!AJA45Qj0 z2qFl2i2VgI_EHZKwZ}d7xQA#Xf>9LKo}vc!`Fg!$>gW4C=leb9bI#{{k;w9wh~5)f zzF}7d&unw!711J`#NHX(`3m_0?qP-K>;z(drqV9PW^#5e{glg(UO>bpm8R}|N&*Y$ReGEXv(^1mXZITCuN zc7}FSwGZgRP-d|r-@DvyP*vC%yGpP;?k=WyW(CdfZUg-5yttYol53p|2EpjbW@^alLUG!p2 zG!vW1;2a}F4w6ooXR7e=e%@hvr<-+OW;MSB77ySzbkC%P9?5FH!%!1bbEIl`t3N1Y z0XY0_0ZG_50emd26+DzEit`1H&4Z5N{u1_G;0166us!I+t%Qm-Uhn$1QX?MX{*gt+M7= z{|%E5l-*ozof**bn=Q;r&s@url_uft1K)9E&(3AXqoG(hS}E&lMG+`iSSZmsjm3B4 z{=pchH7eE0MP06xwP2C-#kx)+im`f_lhKQ)bsH7CDp&+lD4G)xMPpp%Xhm6Ll?!rN z3on%7jI>l!6kU~eij0y7OCKdlv2lY}v o1?U2e(gek58gFx*8^)w0`i%7sJ;U0-9Y>F$j-%&f@63b#1HJDI!^DDp6`4Xqxx)O}_ zLjG)U72cqky~>lkBZZ%TAmT&a{MSc3IL5%ii^-ov={7}TJKmETNc3mHUBy1hHbr9r zwueo_JXmA11u%wok_cwZ)R^~Kks}*6<%k85BZVR&I%dQ=J8{O`K0T@gy4v|xQ!K7mw!snxqF&##1*uQ* zb?;%Mg;NXU9o*GlY$O02-g`g}@?8K!Xs_X-WLaLQTI@Wi2mWhV_kowd4Z#1{jVY%K zcbMwNOkn*AyaE_s(B+vflu{lM58Db5b#pD-tX1)8xiygK+Lo)D)~I!D@4Ps}RCT-V z#c_)+r!3d(2L>yS)xXl^1Lgl*ZUYWMuB+Norm0%)Hg2#_E;{;jGTqQ^vw@F_jY&7w zau$%U>WXW7;pID;2HUc0qFvZ}WYuEHRaLi=i}eiqIWV|UFGTo*RbX;q_I8PUGzIk# mVE+=%^j4;LGcyhS2lU?3d}$(`IIc#bcy+N(mn`@&gu{Pi#oapq diff --git a/src/Makefile.vbcc b/src/Makefile.vbcc new file mode 100644 index 0000000..84df2e1 --- /dev/null +++ b/src/Makefile.vbcc @@ -0,0 +1,14 @@ +CC := vc +aos68k +CFLAGS := -c99 +LIBS := -lfunctions -lamiga -lreaction + +OBJS := main.o +DEPS := menu.h includes.h version.h + +all: DAControlGUI + +%.o: %.c $(DEPS) + $(CC) $(CFLAGS) -c -o $@ $< + +DAControlGUI: $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ $(LIBS) diff --git a/src/functions.h b/src/functions.h new file mode 100644 index 0000000..0cbd2fe --- /dev/null +++ b/src/functions.h @@ -0,0 +1,19 @@ +#ifndef FUNCTIONS_H +#define FUNCTIONS_H + +#include +#include +#include +#include +#include +#include + +#define BUFFERSIZE 0X200 + +extern BOOL fileExist(STRPTR filePath); +extern void RunDAControl(char parameter[BUFFERSIZE]); +extern char* fulltrim(char* str); +extern char* substring(char*, int , int); +extern BOOL isContainsAdfExt(STRPTR filePath); + +#endif diff --git a/src/functions.lib b/src/functions.lib deleted file mode 100644 index f1e63783fa3097487dcc8eca9bfee9e5a9ad51c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1008 zcmYjQ-)mBF6hHTBYEILIEE$7tQe)K6(OALQ!~9hun{Ha+BDgv?Zx`;=?!AJA45Qj0 z2qFl2i2VgI_EHZKwZ}d7xQA#Xf>9LKo}vc!`Fg!$>gW4C=leb9bI#{{k;w9wh~5)f zzF}7d&unw!711J`#NHX(`3m_0?qP-K>;z(drqV9PW^#5e{glg(UO>bpm8R}|N&*Y$ReGEXv(^1mXZITCuN zc7}FSwGZgRP-d|r-@DvyP*vC%yGpP;?k=WyW(CdfZUg-5yttYol53p|2EpjbW@^alLUG!p2 zG!vW1;2a}F4w6ooXR7e=e%@hvr<-+OW;MSB77ySzbkC%P9?5FH!%!1bbEIl`t3N1Y z0XY0_0ZG_50emd26+DzEit`1H&4Z5N{u1_G;0166us!I+t%Qm-Uhn$1QX?MX{*gt+M7= z{|%E5l-*ozof**bn=Q;r&s@url_uft1K)9E&(3AXqoG(hS}E&lMG+`iSSZmsjm3B4 z{=pchH7eE0MP06xwP2C-#kx)+im`f_lhKQ)bsH7CDp&+lD4G)xMPpp%Xhm6Ll?!rN z3on%7jI>l!6kU~eij0y7OCKdlv2lY}v o1?U2e(gek58gFx*8^)w0`i%7sJ;U0-9Y>F$j-%&f@63b#1HJ -#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 - +#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 +#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 diff --git a/src/main.c b/src/main.c index 7882f63..63ae1ba 100644 --- a/src/main.c +++ b/src/main.c @@ -42,8 +42,12 @@ NOSTanDardIO #include "includes.h" #include "menu.h" +#include "functions.h" #include "version.h" +BASEDEF(Intuition); +BASEDEF(Utility); +BASEDEF(GadTools); BASEDEF(Icon); BASEDEF(Workbench); BASEDEF(Window); @@ -174,6 +178,9 @@ int main(void) OPENLIB(Dos, "dos.library"); OPENLIB(Icon, "icon.library"); OPENLIB(Workbench, "workbench.library"); + OPENLIB(GadTools, "gadtools.library"); + OPENLIB(Intuition, "intuition.library"); + OPENLIB(Utility, "utility.library"); ret = appMain(); @@ -194,7 +201,7 @@ int appMain() UWORD code; ScreenPtr = LockPubScreen(NULL); - VisualInfoPtr = GetVisualInfo(ScreenPtr, NULL); + VisualInfoPtr = GetVisualInfoA(ScreenPtr, NULL); //InitHook(&HookStruct, HookFunc, NULL); @@ -211,7 +218,7 @@ int appMain() dobj=GetDiskObject(appPath); if(dobj!=0) { - dobj->do_Type=NULL; + dobj->do_Type=0; } if (!(WindowObjectPtr = NewObject @@ -316,7 +323,7 @@ int appMain() done=TRUE; } - UnlockPubScreen(ScreenPtr); + UnlockPubScreen(NULL, ScreenPtr); ScreenPtr = NULL; if (!(WindowPtr = (struct Window *) DoMethod(WindowObjectPtr, WM_OPEN, NULL))) @@ -413,7 +420,7 @@ int appMain() FreeVisualInfo(VisualInfoPtr); // delete log file - Execute("Delete RAM:dacgui.log >NIL:", NULL, NULL); + Execute("Delete RAM:dacgui.log >NIL:", 0, 0); return 0; } @@ -467,7 +474,7 @@ void CloseLibs(void) { if (ScreenPtr) { - UnlockPubScreen(NULL); + UnlockPubScreen(NULL, ScreenPtr); ScreenPtr = NULL; } @@ -481,6 +488,9 @@ void CloseLibs(void) if (AppPort) DeleteMsgPort(AppPort); + CLOSELIB(Intuition); + CLOSELIB(Utility); + CLOSELIB(GadTools); CLOSELIB(Workbench); CLOSELIB(Icon); CLOSELIB(Layout); @@ -553,7 +563,7 @@ void ProcessMenuIDCMPdacMenu(UWORD MenuNumber) break; case HelpMenuManual : - Execute(manualPath, NULL, NULL); + Execute(manualPath, 0, 0); break; } break; @@ -1270,4 +1280,4 @@ void iconify(void) { done = TRUE; } -} \ No newline at end of file +} diff --git a/src/menu.h b/src/menu.h index 4855fef..435b328 100644 --- a/src/menu.h +++ b/src/menu.h @@ -1,54 +1,54 @@ -#ifndef MENU_H -#define MENU_H - -//------------------------------- -#define DAControlGUIMenu 0 -#define DAControlGUIMenuAbout 0 -#define DAControlGUIMenuBar1 1 -#define DAControlGUIMenuIconify 2 -#define DAControlGUIMenuBar2 3 -#define DAControlGUIMenuQuit 4 -//------------------------------- -#define Controls 1 -#define ControlsLoadChange 0 -#define ControlsCreate 1 -#define ControlsBar2 2 -#define ControlsEject 3 -#define ControlsEjectAll 4 -#define ControlsBar3 5 -#define ControlsRefresh 6 -//------------------------------- -#define HelpMenu 2 -#define HelpMenuManual 0 - -struct NewMenu dacMenuNewMenu[] = -{ - NM_TITLE, (STRPTR)"DAControlGUI" , NULL , 0, NULL, (APTR)~0, - NM_ITEM , (STRPTR)"About" , NULL , 0, 0L, (APTR)~0, - NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Iconify" , "I" , 0, 0L, (APTR)~0, - NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Quit" , "Q" , 0, 0L, (APTR)~0, - - NM_TITLE, (STRPTR)"Controls" , NULL , 0, NULL, (APTR)~0, - NM_ITEM , (STRPTR)"Load / Change ADF" , "L" , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Create ADF" , "C" , 0, 0L, (APTR)~0, - NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Eject ADF" , "E" , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Eject All" , "A" , 0, 0L, (APTR)~0, - NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Refresh" , "R" , 0, 0L, (APTR)~0, - - NM_TITLE, (STRPTR)"Help" , NULL , 0, NULL, (APTR)~0, - NM_ITEM , (STRPTR)"Manual" , "M" , 0, 0L, (APTR)~0, - - NM_END , NULL , NULL , 0, 0L, (APTR)~0 -}; - -ULONG dacMenuTags[] = -{ - (GT_TagBase+67), TRUE, - (TAG_DONE) -}; - +#ifndef MENU_H +#define MENU_H + +//------------------------------- +#define DAControlGUIMenu 0 +#define DAControlGUIMenuAbout 0 +#define DAControlGUIMenuBar1 1 +#define DAControlGUIMenuIconify 2 +#define DAControlGUIMenuBar2 3 +#define DAControlGUIMenuQuit 4 +//------------------------------- +#define Controls 1 +#define ControlsLoadChange 0 +#define ControlsCreate 1 +#define ControlsBar2 2 +#define ControlsEject 3 +#define ControlsEjectAll 4 +#define ControlsBar3 5 +#define ControlsRefresh 6 +//------------------------------- +#define HelpMenu 2 +#define HelpMenuManual 0 + +struct NewMenu dacMenuNewMenu[] = +{ + NM_TITLE, (STRPTR)"DAControlGUI" , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"About" , NULL , 0, 0L, (APTR)~0, + NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Iconify" , "I" , 0, 0L, (APTR)~0, + NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Quit" , "Q" , 0, 0L, (APTR)~0, + + NM_TITLE, (STRPTR)"Controls" , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Load / Change ADF" , "L" , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Create ADF" , "C" , 0, 0L, (APTR)~0, + NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Eject ADF" , "E" , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Eject All" , "A" , 0, 0L, (APTR)~0, + NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Refresh" , "R" , 0, 0L, (APTR)~0, + + NM_TITLE, (STRPTR)"Help" , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Manual" , "M" , 0, 0L, (APTR)~0, + + NM_END , NULL , NULL , 0, 0L, (APTR)~0 +}; + +ULONG dacMenuTags[] = +{ + (GT_TagBase+67), TRUE, + (TAG_DONE) +}; + #endif \ No newline at end of file From a44b4ec6b8ba3d29465af7e4016b16b94592621d Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 18 Nov 2021 17:48:14 +0000 Subject: [PATCH 02/17] Fix free() of unallocated memory --- functionsLib/functions.c | 6 +++--- functionsLib/functions.h | 2 +- src/functions.h | 2 +- src/main.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/functionsLib/functions.c b/functionsLib/functions.c index b286496..91bc50b 100644 --- a/functionsLib/functions.c +++ b/functionsLib/functions.c @@ -21,7 +21,7 @@ BOOL fileExist(STRPTR filePath) /*=============================== RunDAControl ===============================*/ -void RunDAControl(char parameter[BUFFERSIZE]) +void RunDAControl(char *parameter) { char dacontrolPATH[BUFFERSIZE]; strcpy(dacontrolPATH, "SYS:C/DAControl "); @@ -79,7 +79,7 @@ char* fulltrim(char* str) return str; } -extern BOOL isContainsAdfExt(STRPTR filePath) +BOOL isContainsAdfExt(STRPTR filePath) { int i; char * isPointAdfStr; @@ -92,4 +92,4 @@ extern BOOL isContainsAdfExt(STRPTR filePath) isPointAdfStr = strstr(fPath, padf); if(isPointAdfStr) return 1; else return 0; -} \ No newline at end of file +} diff --git a/functionsLib/functions.h b/functionsLib/functions.h index 0cbd2fe..845c90b 100644 --- a/functionsLib/functions.h +++ b/functionsLib/functions.h @@ -11,7 +11,7 @@ #define BUFFERSIZE 0X200 extern BOOL fileExist(STRPTR filePath); -extern void RunDAControl(char parameter[BUFFERSIZE]); +extern void RunDAControl(char *parameter); extern char* fulltrim(char* str); extern char* substring(char*, int , int); extern BOOL isContainsAdfExt(STRPTR filePath); diff --git a/src/functions.h b/src/functions.h index 0cbd2fe..845c90b 100644 --- a/src/functions.h +++ b/src/functions.h @@ -11,7 +11,7 @@ #define BUFFERSIZE 0X200 extern BOOL fileExist(STRPTR filePath); -extern void RunDAControl(char parameter[BUFFERSIZE]); +extern void RunDAControl(char *parameter); extern char* fulltrim(char* str); extern char* substring(char*, int , int); extern BOOL isContainsAdfExt(STRPTR filePath); diff --git a/src/main.c b/src/main.c index 63ae1ba..58ded29 100644 --- a/src/main.c +++ b/src/main.c @@ -672,7 +672,7 @@ void createADFList(void) if(fp) { - UBYTE buffer[BUFFERSIZE]; + char *buffer = AllocVec(BUFFERSIZE, MEMF_CLEAR); while(FGets(fp, buffer, BUFFERSIZE)) { if((count>0)&&(strlen(buffer)>0)) @@ -682,7 +682,7 @@ void createADFList(void) col2[count-1]= fulltrim(substring(buffer, 18, 32)); // volume name col4[count-1]= fulltrim(substring(buffer, 79, 11)); // access col5[count-1]= fulltrim(substring(buffer, 91, strlen(buffer)-90)); // file - free(buffer); + FreeVec(buffer); } count++; } From 285700eced1e87cbd9b4573a13083bd0a43b2f4d Mon Sep 17 00:00:00 2001 From: Chris Young Date: Tue, 23 Nov 2021 16:10:13 +0000 Subject: [PATCH 03/17] Add an AppMenuItem for "Eject ADF" This adds an "Eject ADF" item to the Workbench Tools menu. With any number of disk icons selected, choosing Eject ADF will attempt to eject them. --- src/includes.h | 115 ++++++++++++++++--------------- src/main.c | 184 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 184 insertions(+), 115 deletions(-) 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..02918d3 100644 --- a/src/main.c +++ b/src/main.c @@ -188,10 +188,68 @@ 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++) { + 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 +386,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 +478,8 @@ int appMain() freeList(&adfList); ClearMenuStrip(WindowPtr); FreeVisualInfo(VisualInfoPtr); - + removeEjectADFMenu(EjectADFItem, EjectADFMP); + // delete log file Execute("Delete RAM:dacgui.log >NIL:", NULL, NULL); From 1de93fc36219f02cded6772fcb74f41116a436ba Mon Sep 17 00:00:00 2001 From: Chris Young Date: Tue, 23 Nov 2021 16:28:22 +0000 Subject: [PATCH 04/17] Only try to eject disks Check name is '' before searching list --- src/main.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main.c b/src/main.c index 02918d3..70cb43e 100644 --- a/src/main.c +++ b/src/main.c @@ -198,15 +198,17 @@ void ejectADFMenu(struct AppMessage *EjectADFMsg) createADFList(); for(i = 0; i < EjectADFMsg->am_NumArgs; i++) { - 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(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]); } - if(index>=0) Eject(col1[index]); } createADFList(); @@ -1338,4 +1340,4 @@ void iconify(void) { done = TRUE; } -} \ No newline at end of file +} From b047f0630914232de39728d465428eef5eb62de4 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Tue, 23 Nov 2021 16:49:21 +0000 Subject: [PATCH 05/17] Add newline to end of file --- src/includes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/includes.h b/src/includes.h index 9b90300..9268c39 100644 --- a/src/includes.h +++ b/src/includes.h @@ -63,4 +63,4 @@ #include -#endif \ No newline at end of file +#endif From c4642ec69b478e469149f7af7426d94f8b709202 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 13:06:46 +0000 Subject: [PATCH 06/17] fix merge conflict --- src/includes.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/includes.h b/src/includes.h index 627ecca..f6bf773 100644 --- a/src/includes.h +++ b/src/includes.h @@ -32,7 +32,6 @@ #include #include -<<<<<<< HEAD #include #include #include From 497c993159c80dfe210844b18fce8231810e8d2a Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 14:09:15 +0000 Subject: [PATCH 07/17] Register as a commodity --- src/includes.h | 1 + src/main.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/src/includes.h b/src/includes.h index f6bf773..682e397 100644 --- a/src/includes.h +++ b/src/includes.h @@ -34,6 +34,7 @@ #include #include +#include #include #include #include diff --git a/src/main.c b/src/main.c index d3d7a35..4ed9fdd 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,4 @@ -;/* +/* ; To compile from the Shell, type: 'Execute main.c' delete /bin/DAControlGUI delete #?.o @@ -50,6 +50,7 @@ BASEDEF(Utility); BASEDEF(GadTools); BASEDEF(Icon); BASEDEF(Workbench); +BASEDEF(Cx); BASEDEF(Window); BASEDEF(Layout); BASEDEF(CheckBox); @@ -181,6 +182,7 @@ int main(void) OPENLIB(GadTools, "gadtools.library"); OPENLIB(Intuition, "intuition.library"); OPENLIB(Utility, "utility.library"); + OPENLIB(Cx, "commodities.library"); ret = appMain(); @@ -250,11 +252,53 @@ struct MsgPort *addEjectADFMenu(struct AppMenuItem **ejectADFItem) return EjectADFMP; } +unregisterCommodity(CxObj *CXBroker, struct MsgPort *CXMP) +{ + CxMsg *msg; + + DeleteCxObj(CXBroker); + while(msg = (CxMsg *)GetMsg(CXMP)) + ReplyMsg((struct Message *)msg); + + DeletePort(CXMP); +} + +struct MsgPort *registerCommodity(LONG CXPri, CxObj **CXBroker) +{ + struct MsgPort *CXMP = NULL; + struct NewBroker newbroker; + CxObj *broker = NULL; + + if(CXMP = CreateMsgPort()) { + newbroker.nb_Version = NB_VERSION; + newbroker.nb_Name = APPNAME; + newbroker.nb_Title = APPNAME" "MAJOR"."MINOR"."BUILD; + newbroker.nb_Descr = "GUI for DAControl on AmigaOS 3.2"; + newbroker.nb_Unique = NBU_UNIQUE | NBU_NOTIFY; + newbroker.nb_Flags = COF_SHOW_HIDE; + newbroker.nb_Pri = CXPri; + newbroker.nb_Port = CXMP; + newbroker.nb_ReservedChannel = 0; + + if(broker = CxBroker(&newbroker, NULL)) { + ActivateCxObj(broker, 1L); + *CXBroker = broker; + } + } + + return CXMP; +} + int appMain() { ULONG result; UWORD code; ULONG wait = 0; + struct MsgPort *CXMP = NULL; + ULONG CXSignal = 0; + CxObj *CXBroker = NULL; + ULONG CXmsgid, CXmsgtype; + CxMsg *CXmsg; struct MsgPort *EjectADFMP = NULL; struct AppMenuItem *EjectADFItem = NULL; ULONG EjectADFSignal = 0; @@ -398,13 +442,42 @@ int appMain() EjectADFMP = addEjectADFMenu(&EjectADFItem); EjectADFSignal = (1 << EjectADFMP->mp_SigBit); + CXMP = registerCommodity(0, &CXBroker); + CXSignal = (1 << CXMP->mp_SigBit); + GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); while(!done) { - wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | EjectADFSignal); - - if(wait & EjectADFSignal) { + wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | EjectADFSignal | CXSignal); + + if(wait & CXSignal) { + while(CXmsg = (CxMsg *)GetMsg(CXMP)) { + CXmsgid = CxMsgID(CXmsg); + CXmsgtype = CxMsgType(CXmsg); + ReplyMsg((struct Message *)CXmsg); + + switch(CXmsgtype) { + case CXM_COMMAND: + switch(CXmsgid) { + case CXCMD_KILL: + done = TRUE; + break; + case CXCMD_APPEAR: + /* TODO: open window */ + break; + case CXCMD_DISAPPEAR: + /* TODO: close window */ + break; + } + break; + case CXM_IEVENT: + /* TODO: popup hotkey */ + default: + break; + } + } + } else if(wait & EjectADFSignal) { while(EjectADFMsg = (struct AppMessage *)GetMsg(EjectADFMP)) { ejectADFMenu(EjectADFMsg); ReplyMsg((struct Message *)EjectADFMsg); @@ -488,6 +561,7 @@ int appMain() ClearMenuStrip(WindowPtr); FreeVisualInfo(VisualInfoPtr); removeEjectADFMenu(EjectADFItem, EjectADFMP); + unregisterCommodity(CXBroker, CXMP); // delete log file Execute("Delete RAM:dacgui.log >NIL:", 0, 0); @@ -561,6 +635,7 @@ void CloseLibs(void) CLOSELIB(Intuition); CLOSELIB(Utility); CLOSELIB(GadTools); + CLOSELIB(Cx); CLOSELIB(Workbench); CLOSELIB(Icon); CLOSELIB(Layout); From 8e1850c09e1f8b66eb53829b430b60014401f0ea Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 15:00:43 +0000 Subject: [PATCH 08/17] Rework iconify so it waits in main loop Attach CX Hide/Show to the same functions (but without AppIcon/AppMenu so it is hidden rather than iconified) --- src/main.c | 97 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 37 deletions(-) diff --git a/src/main.c b/src/main.c index 4ed9fdd..a6f4186 100644 --- a/src/main.c +++ b/src/main.c @@ -100,7 +100,8 @@ void createAdfWin(void); void setDisable(struct Gadget* gad, BOOL value); void createADFList(void); void buttonsDisable(BOOL b); -void iconify(void); +void iconify(BOOL addIcon); +void uniconify(void); #define PREFFILEPATH "SYS:Prefs/Env-Archive/DAControlGUI.prefs" void SavePrefs(void); @@ -138,10 +139,16 @@ int selectedIndex; WORD count; struct List adfList; +enum { + DACG_Eject = 1, + DACG_Show +} + char appPath[PATH_MAX+NAME_MAX]; char curPath[PATH_MAX]; char manualPath[PATH_MAX+NAME_MAX]; +struct MsgPort* AppMenuMP = NULL; struct MsgPort* AppPort = NULL; struct DiskObject* dobj = NULL; struct AppIcon* appicon = NULL; @@ -207,7 +214,7 @@ void ejectADFMenu(struct AppMessage *EjectADFMsg) createADFList(); for(i = 0; i < EjectADFMsg->am_NumArgs; i++) { - if(EjectADFMsg->am_ArgList[i].wa_Name[0] = 0) { + 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++) { @@ -223,33 +230,31 @@ void ejectADFMenu(struct AppMessage *EjectADFMsg) createADFList(); } -void removeEjectADFMenu(struct AppMenuItem *ejectADFItem, struct MsgPort *EjectADFMP) +void removeEjectADFMenu(struct AppMenuItem *ejectADFItem) { struct AppMessage *appmsg = NULL; RemoveAppMenuItem(ejectADFItem); - while(appmsg = (struct AppMessage *)GetMsg(EjectADFMP)) { + while(appmsg = (struct AppMessage *)GetMsg(AppMenuMP)) { ReplyMsg((struct Message *)appmsg); } - DeleteMsgPort(EjectADFMP); + DeleteMsgPort(AppMenuMP); } -struct MsgPort *addEjectADFMenu(struct AppMenuItem **ejectADFItem) +struct AppMenuItem *addEjectADFMenu(void) { - struct MsgPort *EjectADFMP = NULL; struct AppMenuItem *appmenuitem = NULL; - if(EjectADFMP = CreateMsgPort()) { - appmenuitem = AddAppMenuItemA(0L, 0, "Eject ADF", EjectADFMP, NULL); + if(AppMenuMP = CreateMsgPort()) { + appmenuitem = AddAppMenuItemA(DACG_Eject, 0, "Eject ADF", AppMenuMP, NULL); if(appmenuitem == NULL) { - DeleteMsgPort(EjectADFMP); - EjectADFMP = NULL; + DeleteMsgPort(AppMenuMP); + AppMenuMP = NULL; } } - *ejectADFItem = appmenuitem; - return EjectADFMP; + return appmenuitem; } unregisterCommodity(CxObj *CXBroker, struct MsgPort *CXMP) @@ -299,10 +304,9 @@ int appMain() CxObj *CXBroker = NULL; ULONG CXmsgid, CXmsgtype; CxMsg *CXmsg; - struct MsgPort *EjectADFMP = NULL; struct AppMenuItem *EjectADFItem = NULL; - ULONG EjectADFSignal = 0; - struct AppMessage *EjectADFMsg; + ULONG AppMenuSignal = 0; + struct AppMessage *AppMenuMsg; ScreenPtr = LockPubScreen(NULL); VisualInfoPtr = GetVisualInfoA(ScreenPtr, NULL); @@ -439,8 +443,8 @@ int appMain() makeMenu(VisualInfoPtr); SetMenuStrip(WindowPtr, dacMenu); createADFList(); - EjectADFMP = addEjectADFMenu(&EjectADFItem); - EjectADFSignal = (1 << EjectADFMP->mp_SigBit); + EjectADFItem = addEjectADFMenu(); + AppMenuSignal = (1 << AppMenuMP->mp_SigBit); CXMP = registerCommodity(0, &CXBroker); CXSignal = (1 << CXMP->mp_SigBit); @@ -449,7 +453,7 @@ int appMain() while(!done) { - wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | EjectADFSignal | CXSignal); + wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | AppMenuSignal | CXSignal); if(wait & CXSignal) { while(CXmsg = (CxMsg *)GetMsg(CXMP)) { @@ -464,10 +468,10 @@ int appMain() done = TRUE; break; case CXCMD_APPEAR: - /* TODO: open window */ + uniconify(); break; case CXCMD_DISAPPEAR: - /* TODO: close window */ + iconify(FALSE); break; } break; @@ -477,10 +481,17 @@ int appMain() break; } } - } else if(wait & EjectADFSignal) { - while(EjectADFMsg = (struct AppMessage *)GetMsg(EjectADFMP)) { - ejectADFMenu(EjectADFMsg); - ReplyMsg((struct Message *)EjectADFMsg); + } else if(wait & AppMenuSignal) { + while(AppMenuMsg = (struct AppMessage *)GetMsg(AppMenuMP)) { + switch(AppMenuMsg->am_ID) { + case DACG_Eject: + ejectADFMenu(AppMenuMsg); + break; + case DACG_Show: + uniconify(); + break; + } + ReplyMsg((struct Message *)AppMenuMsg); } } else { while ((result = DoMethod(WindowObjectPtr, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) @@ -524,7 +535,7 @@ int appMain() break; case WMHI_ICONIFY: /* iconify / uniconify */ - iconify(); + iconify(TRUE); break; case WMHI_MENUPICK: @@ -560,8 +571,12 @@ int appMain() freeList(&adfList); ClearMenuStrip(WindowPtr); FreeVisualInfo(VisualInfoPtr); - removeEjectADFMenu(EjectADFItem, EjectADFMP); + + if(appicon) RemoveAppIcon(appicon); + if(appmenuitem) RemoveAppMenuItem(appmenuitem); + unregisterCommodity(CXBroker, CXMP); + removeEjectADFMenu(EjectADFItem); // delete log file Execute("Delete RAM:dacgui.log >NIL:", 0, 0); @@ -669,7 +684,7 @@ void ProcessMenuIDCMPdacMenu(UWORD MenuNumber) About(); break; case DAControlGUIMenuIconify : - iconify(); + iconify(TRUE); break; case DAControlGUIMenuQuit : done=TRUE; @@ -1404,16 +1419,14 @@ void SavePrefs(void) } } -void iconify(void) +void uniconify(void) { - AppPort = CreateMsgPort(); - appicon=AddAppIconA(0L, 0L, "DAControlGUI", AppPort, NULL, dobj, NULL); - appmenuitem=AddAppMenuItemA(0L, 0L, "DAControlGUI", AppPort, NULL); - RA_CloseWindow(WindowObjectPtr); - WindowPtr = NULL; - WaitPort(AppPort); - RemoveAppIcon(appicon); - RemoveAppMenuItem(appmenuitem); + if(appicon) RemoveAppIcon(appicon); + if(appmenuitem) RemoveAppMenuItem(appmenuitem); + + appicon = NULL; + appmenuitem = NULL; + WindowPtr = (struct Window *) RA_OpenWindow(WindowObjectPtr); if (WindowPtr) @@ -1426,3 +1439,13 @@ void iconify(void) done = TRUE; } } + +void iconify(BOOL addIcon) +{ + if(addIcon) { + appicon=AddAppIconA(DACG_Show, 0L, "DAControlGUI", AppMenuMP, NULL, dobj, NULL); + appmenuitem=AddAppMenuItemA(DACG_Show, 0L, "DAControlGUI", AppMenuMP, NULL); + } + RA_CloseWindow(WindowObjectPtr); + WindowPtr = NULL; +} From 668777d16cd0ee3eb0b5becd9332d5f91ae1167c Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:08:45 +0000 Subject: [PATCH 09/17] Parse ToolTypes CX_PRIORITY and CX_POPUP Note: CX_POPKEY not implemented Also react correctly to CXCMD_UNIQUE --- bin/DAControlGUI.info | Bin 2422 -> 2484 bytes src/main.c | 76 ++++++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/bin/DAControlGUI.info b/bin/DAControlGUI.info index b9aaee5f80870bd816c14240bc84f9794252c53e..08e15d0fdb789eac306433759307019c169e6f73 100644 GIT binary patch delta 111 zcmew+v_*J=7zcxMbO(cT{D+BhlFVM&KPFnqu`qa^crp0{i^Rr~3KkXyFTa4zA6VL0 z>=+mrM1YuI!#N^8z&{`~z&6q~SQ9A1AOIE$^7Ie#42iTg0E=XggbhMfK)It F001}p9Blvq delta 48 zcmdlY{7q9#whl7Kn@rsFZlFSSY3=^&7SOjEF8%+MdBC)Zgf(6JqzhUzSmNpgu DSW6Dx diff --git a/src/main.c b/src/main.c index a6f4186..cac55ce 100644 --- a/src/main.c +++ b/src/main.c @@ -102,6 +102,7 @@ void createADFList(void); void buttonsDisable(BOOL b); void iconify(BOOL addIcon); void uniconify(void); +void getTooltypes(UBYTE **tooltypes); #define PREFFILEPATH "SYS:Prefs/Env-Archive/DAControlGUI.prefs" void SavePrefs(void); @@ -148,6 +149,9 @@ char appPath[PATH_MAX+NAME_MAX]; char curPath[PATH_MAX]; char manualPath[PATH_MAX+NAME_MAX]; +BOOL CXpopup = TRUE; +LONG CXpri = 0; + struct MsgPort* AppMenuMP = NULL; struct MsgPort* AppPort = NULL; struct DiskObject* dobj = NULL; @@ -157,10 +161,13 @@ struct AppMenuItem* appmenuitem = NULL; int selectedDeviceNo; -int main(void) +int main(int argc, char **argv) { int ret = 0; - + UBYTE **tooltypes; + char i; + int olddir; + if(!fileExist("SYS:C/DAControl")) // do you have os 3.2? { AppTerminate(); @@ -191,12 +198,30 @@ int main(void) OPENLIB(Utility, "utility.library"); OPENLIB(Cx, "commodities.library"); + tooltypes = ArgArrayInit(argc, argv); + getTooltypes(tooltypes); + ArgArrayDone(); + ret = appMain(); CloseLibs(); return ret; } +void getTooltypes(UBYTE **tooltypes) +{ + char *s; + + s = ArgString(tooltypes, "CX_POPUP", "YES"); + + if(MatchToolValue(s, "NO")) { + CXpopup = FALSE; + } + + CXpri = ArgInt(tooltypes, "CX_PRIORITY", 0); +} + + int makeMenu(APTR MenuVisualInfo) { if (NULL == (dacMenu = CreateMenusA( dacMenuNewMenu, NULL))) return( 1L ); @@ -268,7 +293,7 @@ unregisterCommodity(CxObj *CXBroker, struct MsgPort *CXMP) DeletePort(CXMP); } -struct MsgPort *registerCommodity(LONG CXPri, CxObj **CXBroker) +struct MsgPort *registerCommodity(CxObj **CXBroker) { struct MsgPort *CXMP = NULL; struct NewBroker newbroker; @@ -281,13 +306,16 @@ struct MsgPort *registerCommodity(LONG CXPri, CxObj **CXBroker) newbroker.nb_Descr = "GUI for DAControl on AmigaOS 3.2"; newbroker.nb_Unique = NBU_UNIQUE | NBU_NOTIFY; newbroker.nb_Flags = COF_SHOW_HIDE; - newbroker.nb_Pri = CXPri; + newbroker.nb_Pri = CXpri; newbroker.nb_Port = CXMP; newbroker.nb_ReservedChannel = 0; if(broker = CxBroker(&newbroker, NULL)) { ActivateCxObj(broker, 1L); *CXBroker = broker; + } else { + DeleteMsgPort(CXMP); + return NULL; } } @@ -433,24 +461,30 @@ int appMain() UnlockPubScreen(NULL, ScreenPtr); ScreenPtr = NULL; + makeMenu(VisualInfoPtr); + + CXMP = registerCommodity(&CXBroker); + if(CXMP) { + CXSignal = (1 << CXMP->mp_SigBit); + } else { + CXpopup = FALSE; + done = TRUE; + } - if (!(WindowPtr = (struct Window *) DoMethod(WindowObjectPtr, WM_OPEN, NULL))) - { - done=TRUE; + if(CXpopup) { + if (!(WindowPtr = (struct Window *) DoMethod(WindowObjectPtr, WM_OPEN, NULL))) + { + done=TRUE; + } + GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); + SetMenuStrip(WindowPtr, dacMenu); } - - makeMenu(VisualInfoPtr); - SetMenuStrip(WindowPtr, dacMenu); + createADFList(); EjectADFItem = addEjectADFMenu(); AppMenuSignal = (1 << AppMenuMP->mp_SigBit); - CXMP = registerCommodity(0, &CXBroker); - CXSignal = (1 << CXMP->mp_SigBit); - - GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); - while(!done) { wait = Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit) | AppMenuSignal | CXSignal); @@ -458,8 +492,8 @@ int appMain() if(wait & CXSignal) { while(CXmsg = (CxMsg *)GetMsg(CXMP)) { CXmsgid = CxMsgID(CXmsg); - CXmsgtype = CxMsgType(CXmsg); - ReplyMsg((struct Message *)CXmsg); + CXmsgtype = CxMsgType(CXmsg); + ReplyMsg((struct Message *)CXmsg); switch(CXmsgtype) { case CXM_COMMAND: @@ -468,11 +502,19 @@ int appMain() done = TRUE; break; case CXCMD_APPEAR: + case CXCMD_UNIQUE: uniconify(); break; case CXCMD_DISAPPEAR: iconify(FALSE); break; + + /* Nothing to disable yet, here for later use */ + case CXCMD_ENABLE: + case CXCMD_DISABLE: + default: + break; + } break; case CXM_IEVENT: From 5a21d89011bfaaeb28d00a5ef2fb3bd5adfe847a Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:12:22 +0000 Subject: [PATCH 10/17] Add features :) --- bin/DAControlGUI.guide | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/DAControlGUI.guide b/bin/DAControlGUI.guide index 361bf34..4f57246 100644 --- a/bin/DAControlGUI.guide +++ b/bin/DAControlGUI.guide @@ -33,10 +33,11 @@ @{b}Features@{ub} 1. Loads a specific ADF file and mounts it. (To mount ADF image by double-clicking on it) 2. Removes an ADF file from a unit and then loads a new ADF file. - 3. Ejects an / Eject All ADF file. (*) + 3. Ejects an / Eject All ADF file (also from Tools menu). (*) 4. Displays list of mounted devices. 5. Creates ADF image. 6. Iconify / Uniconify on workbench. + 7. Runs as a commodity. (*) That's why this app was created. :) From 4d3601340c0ac251a016b2161fcd050e386b44ba Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:14:35 +0000 Subject: [PATCH 11/17] Add the semicolon back --- src/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index cac55ce..5d1a424 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,4 @@ -/* +;/* ; To compile from the Shell, type: 'Execute main.c' delete /bin/DAControlGUI delete #?.o From ae3a3a3167fc86ebbf0a20812f26d70d7d4fb737 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:26:23 +0000 Subject: [PATCH 12/17] Add NOEJECTMENU tooltype to disable "Eject ADF" item in Tools --- bin/DAControlGUI.info | Bin 2484 -> 2499 bytes src/main.c | 11 +++++++++++ 2 files changed, 11 insertions(+) diff --git a/bin/DAControlGUI.info b/bin/DAControlGUI.info index 08e15d0fdb789eac306433759307019c169e6f73..70011fa5de79a76f787a2806bf521c194173db16 100644 GIT binary patch delta 149 zcmdlYd{|iSu>b=j0}wD4GpGQe1Opq8&&XgqSptYXCdx^wI%x_t02P2R0w_S3APpQ0 zjuk&9e_)Z=SW?Nt>?AW|^9Pnr7C8x^3N9CaKmU+$N6!$DavtZ1_yGTa&;VOM|H(a^ Y5+ZyWe*UgruFfI8u707KASH|p0C#j7)c^nh delta 153 zcmX>syhT{b=j0}QAzNHDMg`HT$C(H#uV@gFA2Nve8f{{YG>0I?%X9fS+yfi!S1 zc%FDM`2&l@#*#`FW-q^h%^z4gS*%5X()=3E5%B^30igl5k*>j-AngKRp&(EHAkUCU WTLZ8dmy5rje@M8aX9!3IBLe_BP8{6; diff --git a/src/main.c b/src/main.c index 5d1a424..0813bc1 100644 --- a/src/main.c +++ b/src/main.c @@ -151,6 +151,7 @@ char manualPath[PATH_MAX+NAME_MAX]; BOOL CXpopup = TRUE; LONG CXpri = 0; +BOOL EjectMenu = TRUE; struct MsgPort* AppMenuMP = NULL; struct MsgPort* AppPort = NULL; @@ -219,6 +220,12 @@ void getTooltypes(UBYTE **tooltypes) } CXpri = ArgInt(tooltypes, "CX_PRIORITY", 0); + + if(FindToolType(tooltypes, "NOEJECTMENU")) { + EjectMenu = FALSE; + } + + } @@ -259,6 +266,8 @@ void removeEjectADFMenu(struct AppMenuItem *ejectADFItem) { struct AppMessage *appmsg = NULL; + if(EjectMenu == FALSE) return; + RemoveAppMenuItem(ejectADFItem); while(appmsg = (struct AppMessage *)GetMsg(AppMenuMP)) { @@ -269,6 +278,8 @@ void removeEjectADFMenu(struct AppMenuItem *ejectADFItem) struct AppMenuItem *addEjectADFMenu(void) { + if(EjectMenu == FALSE) return; + struct AppMenuItem *appmenuitem = NULL; if(AppMenuMP = CreateMsgPort()) { From 0d65a27043500088a4e20da53aed63c0dc3d5e8b Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:29:35 +0000 Subject: [PATCH 13/17] Style guide Menu items opening requesters should end with ellipsis --- src/menu.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/menu.h b/src/menu.h index 435b328..7779453 100644 --- a/src/menu.h +++ b/src/menu.h @@ -24,15 +24,15 @@ struct NewMenu dacMenuNewMenu[] = { NM_TITLE, (STRPTR)"DAControlGUI" , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"About" , NULL , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"About..." , NULL , 0, 0L, (APTR)~0, NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, NM_ITEM , (STRPTR)"Iconify" , "I" , 0, 0L, (APTR)~0, NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, NM_ITEM , (STRPTR)"Quit" , "Q" , 0, 0L, (APTR)~0, NM_TITLE, (STRPTR)"Controls" , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Load / Change ADF" , "L" , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Create ADF" , "C" , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Load / Change ADF..." , "L" , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Create ADF..." , "C" , 0, 0L, (APTR)~0, NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, NM_ITEM , (STRPTR)"Eject ADF" , "E" , 0, 0L, (APTR)~0, NM_ITEM , (STRPTR)"Eject All" , "A" , 0, 0L, (APTR)~0, @@ -40,7 +40,7 @@ struct NewMenu dacMenuNewMenu[] = NM_ITEM , (STRPTR)"Refresh" , "R" , 0, 0L, (APTR)~0, NM_TITLE, (STRPTR)"Help" , NULL , 0, 0L, (APTR)~0, - NM_ITEM , (STRPTR)"Manual" , "M" , 0, 0L, (APTR)~0, + NM_ITEM , (STRPTR)"Manual..." , "M" , 0, 0L, (APTR)~0, NM_END , NULL , NULL , 0, 0L, (APTR)~0 }; @@ -51,4 +51,4 @@ ULONG dacMenuTags[] = (TAG_DONE) }; -#endif \ No newline at end of file +#endif From dd2e6fc03296aa6151a9a3eef242015db43f1da8 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:49:27 +0000 Subject: [PATCH 14/17] Move the log to T: --- src/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index 0813bc1..eedaff5 100644 --- a/src/main.c +++ b/src/main.c @@ -632,7 +632,7 @@ int appMain() removeEjectADFMenu(EjectADFItem); // delete log file - Execute("Delete RAM:dacgui.log >NIL:", 0, 0); + Execute("Delete T:dacgui.log >NIL:", 0, 0); return 0; } @@ -879,8 +879,8 @@ void createADFList(void) //int x; BPTR fp; BOOL ejectDisable = FALSE; - RunDAControl("INFO SHOWVOLUMES >RAM:dacgui.log"); - fp = Open("RAM:dacgui.log", MODE_OLDFILE); + RunDAControl("INFO SHOWVOLUMES >T:dacgui.log"); + fp = Open("T:dacgui.log", MODE_OLDFILE); count=0; if(fp) From 682d8e283caa5fbcc12849e4b6bc3242a38d5c60 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 16:56:31 +0000 Subject: [PATCH 15/17] update all instances of .guide and .info --- guide/DAControlGUI.guide | 3 ++- info/DAControlGUI.info | Bin 2422 -> 2499 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/guide/DAControlGUI.guide b/guide/DAControlGUI.guide index 361bf34..4f57246 100644 --- a/guide/DAControlGUI.guide +++ b/guide/DAControlGUI.guide @@ -33,10 +33,11 @@ @{b}Features@{ub} 1. Loads a specific ADF file and mounts it. (To mount ADF image by double-clicking on it) 2. Removes an ADF file from a unit and then loads a new ADF file. - 3. Ejects an / Eject All ADF file. (*) + 3. Ejects an / Eject All ADF file (also from Tools menu). (*) 4. Displays list of mounted devices. 5. Creates ADF image. 6. Iconify / Uniconify on workbench. + 7. Runs as a commodity. (*) That's why this app was created. :) diff --git a/info/DAControlGUI.info b/info/DAControlGUI.info index b9aaee5f80870bd816c14240bc84f9794252c53e..70011fa5de79a76f787a2806bf521c194173db16 100644 GIT binary patch delta 172 zcmew+bXZvKu>b=j0}wD4GpGQe1Opq8&&XgqSptYXCdx^wI%x_t02P2R0w_S3APpQ0 zjuk&9e_)Z=SW>~l!r&w`WAg`=HWpu?3JDs{7p#iu>b=j0}QAzNHDMg`HT*-9S#nP#w#YuNvc956@Zi@OdSIQhzkTD4IBb8 Zrwt~5V3F8ZQo+I^Aaj1h<_|1wEC6Mq503x< From b393a590ea25ba3e1f8d462264fbc8aa61123c46 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 9 Dec 2021 17:13:15 +0000 Subject: [PATCH 16/17] Correct version of the .info with tooltypes all commented out. --- bin/DAControlGUI.info | Bin 2499 -> 2501 bytes info/DAControlGUI.info | Bin 2499 -> 2501 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/DAControlGUI.info b/bin/DAControlGUI.info index 70011fa5de79a76f787a2806bf521c194173db16..ec89fba7119f1b1b8e2e88796bda54f30eb21725 100644 GIT binary patch delta 63 zcmV-F0Kosl6U7sd7Y9FANB}@m$dMiy14LAykvbp(fv}VC1Q@Y&c?1JQnz*y@1e*j7 V4k$xdUr1Q@Y&c?1JO9GJ841e*j5 T3`1C7P)|@*P(4mhlbH!DRmKxx diff --git a/info/DAControlGUI.info b/info/DAControlGUI.info index 70011fa5de79a76f787a2806bf521c194173db16..ec89fba7119f1b1b8e2e88796bda54f30eb21725 100644 GIT binary patch delta 63 zcmV-F0Kosl6U7sd7Y9FANB}@m$dMiy14LAykvbp(fv}VC1Q@Y&c?1JQnz*y@1e*j7 V4k$xdUr1Q@Y&c?1JO9GJ841e*j5 T3`1C7P)|@*P(4mhlbH!DRmKxx From c45b5a736941104a617415c17bfc5a33326cbfda Mon Sep 17 00:00:00 2001 From: Chris Young Date: Wed, 5 Jan 2022 17:36:25 +0000 Subject: [PATCH 17/17] Fix some issues with SAS/C build --- src/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index eedaff5..5f7b4a9 100644 --- a/src/main.c +++ b/src/main.c @@ -143,7 +143,7 @@ struct List adfList; enum { DACG_Eject = 1, DACG_Show -} +}; char appPath[PATH_MAX+NAME_MAX]; char curPath[PATH_MAX]; @@ -278,9 +278,9 @@ void removeEjectADFMenu(struct AppMenuItem *ejectADFItem) struct AppMenuItem *addEjectADFMenu(void) { - if(EjectMenu == FALSE) return; - struct AppMenuItem *appmenuitem = NULL; + + if(EjectMenu == FALSE) return; if(AppMenuMP = CreateMsgPort()) { appmenuitem = AddAppMenuItemA(DACG_Eject, 0, "Eject ADF", AppMenuMP, NULL);