├── LICENSE ├── README.md ├── adf.info ├── adf └── DAControlGUI.adf ├── bin.info ├── bin ├── DAControlGUI ├── DAControlGUI.guide ├── DAControlGUI.guide.info └── DAControlGUI.info ├── functionsLib.info ├── functionsLib ├── build-lib ├── build-lib.info ├── functions.c ├── functions.h ├── functions.lib └── functions.o ├── guide.info ├── guide ├── DAControlGUI.guide └── DAControlGUI.guide.info ├── info.info ├── info └── DAControlGUI.info ├── screenshot.info ├── screenshot ├── createAdf.png ├── loadAdf.png └── main.png ├── src.info └── src ├── functions.lib ├── includes.h ├── main.c ├── menu.h ├── scoptions ├── toBuild.txt └── version.h /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 emarti 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DAControlGUI 2 | GUI for DAControl on Amiga OS 3.2 3 | 4 | As you know DAControl & trackfile.device provide unprecedented functionality, 5 | as they enable users to create, mount, insert and eject ADF files. 6 | 7 | DAControlGUI provides graphical unit interface for this. 8 | Tested on Amiga OS3.2 only. 9 | 10 | Enjoy it! 11 | 12 | # Features 13 | 1. Loads a specific ADF file and mounts it. (To mount ADF image by double-clicking on it) 14 | 2. Removes an ADF file from a unit and then loads a new ADF file. 15 | 3. Ejects an / Eject All ADF file. (*) 16 | 4. Displays list of mounted devices. 17 | 5. Creates ADF image. 18 | 6. Iconify / Uniconify on workbench. 19 | 20 | (*) That's why this app was created. :) 21 | 22 | # Screenshots 23 |

24 | ![main](https://raw.githubusercontent.com/emartisoft/DAControlGUI/main/screenshot/main.png) 25 |
Main Screen 26 |

27 | ![load](https://raw.githubusercontent.com/emartisoft/DAControlGUI/main/screenshot/loadAdf.png) 28 |
Load ADF Image 29 |

30 | ![create](https://raw.githubusercontent.com/emartisoft/DAControlGUI/main/screenshot/createAdf.png) 31 |
Create ADF Image 32 |

33 | # Video 34 | [![Video](https://img.youtube.com/vi/UvB6FGkArpU/0.jpg)](https://www.youtube.com/watch?v=UvB6FGkArpU) 35 | -------------------------------------------------------------------------------- /adf.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/adf.info -------------------------------------------------------------------------------- /adf/DAControlGUI.adf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/adf/DAControlGUI.adf -------------------------------------------------------------------------------- /bin.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/bin.info -------------------------------------------------------------------------------- /bin/DAControlGUI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/bin/DAControlGUI -------------------------------------------------------------------------------- /bin/DAControlGUI.guide: -------------------------------------------------------------------------------- 1 | @DATABASE DAControlGUI.guide 2 | @AUTHOR "emarti, Murat Ozdemir" 3 | @REMARK *--------------------------------------------------------------------* 4 | @$VER: DAControlGUI.guide 1.0 (30.10.2021) by emarti, Murat Ozdemir 5 | @REMARK *--------------------------------------------------------------------* 6 | @NODE Main "DAControlGUI Guide" 7 | 8 | 9 | 10 | @{b}@{fg highlight}DAControlGUI 1.0, Guide for users@{fg text}@{ub} 11 | 12 | As you know DAControl & trackfile.device provide unprecedented functionality, 13 | as they enable users to create, mount, insert and eject ADF files. 14 | 15 | DAControlGUI provides graphical unit interface for this. 16 | Tested on Amiga OS3.2 only. 17 | 18 | Enjoy it! 19 | 20 | 21 | @{ub} 22 | @{" Features " link FEATURES} 23 | @{" Version History " link HISTORY} 24 | @{" Contact " link CONTACT} 25 | 26 | @ENDNODE 27 | 28 | @REMARK *--------------------------------------------------------------------* 29 | 30 | @node FEATURES 31 | @title "Features" 32 | 33 | @{b}Features@{ub} 34 | 1. Loads a specific ADF file and mounts it. (To mount ADF image by double-clicking on it) 35 | 2. Removes an ADF file from a unit and then loads a new ADF file. 36 | 3. Ejects an / Eject All ADF file. (*) 37 | 4. Displays list of mounted devices. 38 | 5. Creates ADF image. 39 | 6. Iconify / Uniconify on workbench. 40 | 41 | (*) That's why this app was created. :) 42 | 43 | @endnode 44 | @REMARK *--------------------------------------------------------------------* 45 | 46 | @node HISTORY 47 | @title "Version History" 48 | 49 | @{b}Version History@{ub} 50 | 51 | 1.0.1110 : 52 | Disabled size right border of main window 53 | Added iconify menu item 54 | 55 | 1.0.1106 : 56 | When the application is quited then delete log file from RAM: drawer [Thanks to Alexander] 57 | It Remembers these: [Thanks to Jonas Thorell] 58 | a. Width & Height of the main window 59 | b. Position of the main window 60 | c. Last opened drawer and filename for file requester 61 | Minor bugs fixed 62 | 63 | 1.0.0411 : 64 | Fixed a bug in the file selector [Thanks to Alexander] 65 | Added 'Refresh' menu 66 | 67 | 1.0 : 68 | First release (29.10.2021) 69 | 70 | @endnode 71 | @REMARK *--------------------------------------------------------------------* 72 | 73 | @node CONTACT 74 | @title "Contact" 75 | 76 | @{b}Contact@{ub} 77 | 78 | Coder: 79 | emarti, Murat Ozdemir 80 | 81 | e-mail: 82 | dtemarti@gmail.com 83 | 84 | WebSite: 85 | https://github.com/emartisoft/DAControlGUI 86 | http://csdb.dk/scener/?id=26786 87 | 88 | @endnode 89 | @REMARK *--------------------------------------------------------------------* 90 | 91 | -------------------------------------------------------------------------------- /bin/DAControlGUI.guide.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/bin/DAControlGUI.guide.info -------------------------------------------------------------------------------- /bin/DAControlGUI.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/bin/DAControlGUI.info -------------------------------------------------------------------------------- /functionsLib.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/functionsLib.info -------------------------------------------------------------------------------- /functionsLib/build-lib: -------------------------------------------------------------------------------- 1 | ; to create functions.lib 2 | sc functions.c 3 | oml functions.lib r functions.o 4 | copy functions.lib /src 5 | -------------------------------------------------------------------------------- /functionsLib/build-lib.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/functionsLib/build-lib.info -------------------------------------------------------------------------------- /functionsLib/functions.c: -------------------------------------------------------------------------------- 1 | #include "functions.h" 2 | 3 | /*=============================== 4 | fileExist 5 | ===============================*/ 6 | BOOL fileExist(STRPTR filePath) 7 | { 8 | BPTR fp; 9 | fp = Open(filePath, MODE_OLDFILE); 10 | if(fp) 11 | { 12 | Close(fp); 13 | return 1; 14 | } 15 | else 16 | { 17 | return 0; 18 | } 19 | } 20 | 21 | /*=============================== 22 | RunDAControl 23 | ===============================*/ 24 | void RunDAControl(char parameter[BUFFERSIZE]) 25 | { 26 | char dacontrolPATH[BUFFERSIZE]; 27 | strcpy(dacontrolPATH, "SYS:C/DAControl "); 28 | strcat(dacontrolPATH, parameter); 29 | Execute(dacontrolPATH, NULL, NULL); 30 | } 31 | 32 | /*=============================== 33 | substring 34 | ===============================*/ 35 | char* substring(char* string, int position, int length) 36 | { 37 | char *p; 38 | int c; 39 | 40 | p = malloc(length+1); 41 | 42 | if (p != NULL) 43 | { 44 | for (c = 0; c < length; c++) 45 | { 46 | *(p+c) = *(string+position-1); 47 | string++; 48 | } 49 | 50 | *(p+c) = '\0'; 51 | } 52 | 53 | return p; 54 | } 55 | 56 | /*=============================== 57 | fulltrim 58 | ===============================*/ 59 | char* fulltrim(char* str) 60 | { 61 | int index, i; 62 | index = -1; 63 | i = 0; 64 | while(str[i] == ' ') 65 | { 66 | str++; 67 | i++; 68 | } 69 | 70 | while(str[i] != '\0') 71 | { 72 | if(str[i] != ' ' && str[i] != '\t' && str[i] != '\n') 73 | { 74 | index= i; 75 | } 76 | i++; 77 | } 78 | str[index + 1] = '\0'; 79 | return str; 80 | } 81 | 82 | extern BOOL isContainsAdfExt(STRPTR filePath) 83 | { 84 | int i; 85 | char * isPointAdfStr; 86 | char fPath[BUFFERSIZE]; 87 | const char padf[5] = ".adf"; 88 | 89 | sprintf(fPath, "%s", filePath); 90 | i=0; 91 | while(fPath[i]) { fPath[i] = tolower(fPath[i]); i++; } 92 | 93 | isPointAdfStr = strstr(fPath, padf); 94 | if(isPointAdfStr) return 1; else return 0; 95 | } -------------------------------------------------------------------------------- /functionsLib/functions.h: -------------------------------------------------------------------------------- 1 | #ifndef FUNCTIONS_H 2 | #define FUNCTIONS_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #define BUFFERSIZE 0X200 12 | 13 | extern BOOL fileExist(STRPTR filePath); 14 | extern void RunDAControl(char parameter[BUFFERSIZE]); 15 | extern char* fulltrim(char* str); 16 | extern char* substring(char*, int , int); 17 | extern BOOL isContainsAdfExt(STRPTR filePath); 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /functionsLib/functions.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/functionsLib/functions.lib -------------------------------------------------------------------------------- /functionsLib/functions.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/functionsLib/functions.o -------------------------------------------------------------------------------- /guide.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/guide.info -------------------------------------------------------------------------------- /guide/DAControlGUI.guide: -------------------------------------------------------------------------------- 1 | @DATABASE DAControlGUI.guide 2 | @AUTHOR "emarti, Murat Ozdemir" 3 | @REMARK *--------------------------------------------------------------------* 4 | @$VER: DAControlGUI.guide 1.0 (30.10.2021) by emarti, Murat Ozdemir 5 | @REMARK *--------------------------------------------------------------------* 6 | @NODE Main "DAControlGUI Guide" 7 | 8 | 9 | 10 | @{b}@{fg highlight}DAControlGUI 1.0, Guide for users@{fg text}@{ub} 11 | 12 | As you know DAControl & trackfile.device provide unprecedented functionality, 13 | as they enable users to create, mount, insert and eject ADF files. 14 | 15 | DAControlGUI provides graphical unit interface for this. 16 | Tested on Amiga OS3.2 only. 17 | 18 | Enjoy it! 19 | 20 | 21 | @{ub} 22 | @{" Features " link FEATURES} 23 | @{" Version History " link HISTORY} 24 | @{" Contact " link CONTACT} 25 | 26 | @ENDNODE 27 | 28 | @REMARK *--------------------------------------------------------------------* 29 | 30 | @node FEATURES 31 | @title "Features" 32 | 33 | @{b}Features@{ub} 34 | 1. Loads a specific ADF file and mounts it. (To mount ADF image by double-clicking on it) 35 | 2. Removes an ADF file from a unit and then loads a new ADF file. 36 | 3. Ejects an / Eject All ADF file. (*) 37 | 4. Displays list of mounted devices. 38 | 5. Creates ADF image. 39 | 6. Iconify / Uniconify on workbench. 40 | 41 | (*) That's why this app was created. :) 42 | 43 | @endnode 44 | @REMARK *--------------------------------------------------------------------* 45 | 46 | @node HISTORY 47 | @title "Version History" 48 | 49 | @{b}Version History@{ub} 50 | 51 | 1.0.1110 : 52 | Disabled size right border of main window 53 | Added iconify menu item 54 | 55 | 1.0.1106 : 56 | When the application is quited then delete log file from RAM: drawer [Thanks to Alexander] 57 | It Remembers these: [Thanks to Jonas Thorell] 58 | a. Width & Height of the main window 59 | b. Position of the main window 60 | c. Last opened drawer and filename for file requester 61 | Minor bugs fixed 62 | 63 | 1.0.0411 : 64 | Fixed a bug in the file selector [Thanks to Alexander] 65 | Added 'Refresh' menu 66 | 67 | 1.0 : 68 | First release (29.10.2021) 69 | 70 | @endnode 71 | @REMARK *--------------------------------------------------------------------* 72 | 73 | @node CONTACT 74 | @title "Contact" 75 | 76 | @{b}Contact@{ub} 77 | 78 | Coder: 79 | emarti, Murat Ozdemir 80 | 81 | e-mail: 82 | dtemarti@gmail.com 83 | 84 | WebSite: 85 | https://github.com/emartisoft/DAControlGUI 86 | http://csdb.dk/scener/?id=26786 87 | 88 | @endnode 89 | @REMARK *--------------------------------------------------------------------* 90 | 91 | -------------------------------------------------------------------------------- /guide/DAControlGUI.guide.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/guide/DAControlGUI.guide.info -------------------------------------------------------------------------------- /info.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/info.info -------------------------------------------------------------------------------- /info/DAControlGUI.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/info/DAControlGUI.info -------------------------------------------------------------------------------- /screenshot.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/screenshot.info -------------------------------------------------------------------------------- /screenshot/createAdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/screenshot/createAdf.png -------------------------------------------------------------------------------- /screenshot/loadAdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/screenshot/loadAdf.png -------------------------------------------------------------------------------- /screenshot/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/screenshot/main.png -------------------------------------------------------------------------------- /src.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/src.info -------------------------------------------------------------------------------- /src/functions.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emartisoft/DAControlGUI/7e240e5581397f2582a7dc7bec59987ead4cac02/src/functions.lib -------------------------------------------------------------------------------- /src/includes.h: -------------------------------------------------------------------------------- 1 | #ifndef INCLUDES_H 2 | #define INCLUDES_H 3 | 4 | #define STREQUAL(s1, s2) (strcmp(s1, s2) == 0) 5 | 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | #include 36 | #include 37 | 38 | #define ALL_REACTION_MACROS 39 | #define ALL_REACTION_CLASSES 40 | #include 41 | #include 42 | 43 | #define ASM __asm 44 | #define REG(x) register __ ## x 45 | 46 | #define BASEDEF(base) struct Library *base##Base = NULL 47 | #define OPENLIB(base,name) if (!((base##Base) = OpenLibrary ((name),0))) CloseLibs() 48 | #define CLOSELIB(base) if (base##Base) {CloseLibrary (base##Base); base##Base=NULL;} 49 | 50 | #define NAME_MAX 0X020 51 | #define PATH_MAX 0X100 52 | #define MAX_LISTED_ADF 0X200 53 | #define BUFFERSIZE 0X200 54 | 55 | #include 56 | 57 | #endif -------------------------------------------------------------------------------- /src/main.c: -------------------------------------------------------------------------------- 1 | ;/* 2 | ; To compile from the Shell, type: 'Execute main.c' 3 | delete /bin/DAControlGUI 4 | delete #?.o 5 | delete /bin/#?.lnk 6 | sc #?.c link LIB functions.lib LIB:sc.lib LIB:amiga.lib LIB:reaction.lib TO /bin/DAControlGUI 7 | delete #?.o 8 | delete /bin/#?.lnk 9 | ; copy files to bin drawer 10 | copy /guide/DAControlGUI.guide /bin 11 | copy /guide/DAControlGUI.guide.info /bin 12 | copy /info/DAControlGUI.info /bin 13 | ; copy bin drawer to da64 floppy driver (adf) 14 | DAControl eject device da64: safeeject=yes timeout 15 quiet 15 | DAControl load device da64: writeprotected=no /adf/DAControlGUI.adf 16 | copy /bin/#? da64: 17 | quit 18 | */ 19 | 20 | /* 21 | 'scoptions' file 22 | ================ 23 | DATA=FAR 24 | CODE=FAR 25 | PARAMETERS=REGISTERS 26 | NOSTACKCHECK 27 | COMMENTNEST 28 | OPTIMIZERSIZE 29 | VERBOSE 30 | STRIPDEBUG 31 | UTILITYLIBRARY 32 | NOERRORHIGHLIGHT 33 | BATCH 34 | OPTIMIZERALIAS 35 | INCLUDEDIR=INCLUDE: 36 | IGNORE=73 37 | IGNORE=225 38 | IGNORE=51 39 | IGNORE=100 40 | NOSTanDardIO 41 | */ 42 | 43 | #include "includes.h" 44 | #include "menu.h" 45 | #include "version.h" 46 | 47 | BASEDEF(Icon); 48 | BASEDEF(Workbench); 49 | BASEDEF(Window); 50 | BASEDEF(Layout); 51 | BASEDEF(CheckBox); 52 | 53 | enum { 54 | IDCREATE = 0x01, 55 | IDLOADCHANGE, 56 | IDEJECT, 57 | IDEJECTALL, 58 | IDREFRESH, 59 | IDLISTBROWSER 60 | }; 61 | 62 | struct DosBase* DosBase = NULL; 63 | struct Screen* ScreenPtr = NULL; 64 | struct Object* WindowObjectPtr = NULL; 65 | struct Gadget* hParent = NULL; 66 | struct Gadget* bLoadChange = NULL; 67 | struct Gadget* bCreate = NULL; 68 | struct Gadget* bEject = NULL; 69 | struct Gadget* bEjectAll = NULL; 70 | struct Gadget* bRefresh = NULL; 71 | struct Gadget* vParent = NULL; 72 | struct Gadget* lbAdfInfoVolumes = NULL; 73 | struct VisualInfo* VisualInfoPtr = NULL; 74 | struct Window* WindowPtr = NULL; 75 | struct Menu* dacMenu = NULL; 76 | 77 | signed char done; 78 | APTR winVisualInfo; 79 | ULONG signal; 80 | 81 | // prototypes 82 | void ProcessMenuIDCMPdacMenu(UWORD MenuNumber); 83 | void CloseLibs(void); 84 | int makeMenu(APTR MenuVisualInfo); 85 | int appMain(void); 86 | BOOL makeList(struct List* list, char* labels1[], char* labels2[], char* labels3[], char* labels4[], char* labels5[]); 87 | void freeList(struct List*); 88 | void About(void); 89 | void AppTerminate(void); 90 | void Eject(char* device); 91 | void clickEject(void); 92 | void clickEjectAll(void); 93 | void loadChangeAdfWin(void); 94 | void createAdfWin(void); 95 | void setDisable(struct Gadget* gad, BOOL value); 96 | void createADFList(void); 97 | void buttonsDisable(BOOL b); 98 | void iconify(void); 99 | 100 | #define PREFFILEPATH "SYS:Prefs/Env-Archive/DAControlGUI.prefs" 101 | void SavePrefs(void); 102 | void LoadPrefs(void); 103 | char loadChangeFileReqPath[BUFFERSIZE]; 104 | char createFileReqPath[BUFFERSIZE]; 105 | UWORD appLeft, appTop, appWidth, appHeight; 106 | 107 | /* 108 | // Hook is used to add device to list for IDCMP_DISKINSERTED and IDCMP_DISKREMOVED but it is NOT stable. 109 | ULONG HookFunc(struct Hook *h, VOID *o, VOID *msg); 110 | ULONG ASM hookEntry(REG(a0) struct Hook *h, REG(a2) VOID *o, REG(a1) VOID *msg); 111 | void InitHook(struct Hook* hook, ULONG (*func)(), void* data); 112 | */ 113 | 114 | STRPTR disktype[] = {"DD","HD", NULL}; 115 | 116 | char* col1[MAX_LISTED_ADF]; 117 | char* col2[MAX_LISTED_ADF]; 118 | char* col3[MAX_LISTED_ADF]; 119 | char* col4[MAX_LISTED_ADF]; 120 | char* col5[MAX_LISTED_ADF]; 121 | 122 | struct ColumnInfo ci[] = 123 | { 124 | { 80, "Device" , 0 }, 125 | { 60, "Volume Name " , 0 }, 126 | { 90, " Type " , 0 }, 127 | { 90, " Access " , 0 }, 128 | { 60, "File" , 0 }, 129 | { -1, (STRPTR)~0, -1 } 130 | }; 131 | 132 | int selectedIndex; 133 | WORD count; 134 | struct List adfList; 135 | 136 | char appPath[PATH_MAX+NAME_MAX]; 137 | char curPath[PATH_MAX]; 138 | char manualPath[PATH_MAX+NAME_MAX]; 139 | 140 | struct MsgPort* AppPort = NULL; 141 | struct DiskObject* dobj = NULL; 142 | struct AppIcon* appicon = NULL; 143 | struct AppMenuItem* appmenuitem = NULL; 144 | //struct Hook HookStruct; 145 | 146 | int selectedDeviceNo; 147 | 148 | int main(void) 149 | { 150 | int ret = 0; 151 | 152 | if(!fileExist("SYS:C/DAControl")) // do you have os 3.2? 153 | { 154 | AppTerminate(); 155 | return --ret; 156 | } 157 | 158 | if(!fileExist(PREFFILEPATH)) 159 | { 160 | strcpy(loadChangeFileReqPath, "RAM:Empty.adf"); 161 | strcpy(createFileReqPath, "RAM:Empty.adf"); 162 | appLeft = 50; 163 | appTop = 50; 164 | appWidth = 450; 165 | appHeight = 250; 166 | SavePrefs(); 167 | } 168 | 169 | LoadPrefs(); 170 | 171 | OPENLIB(Window, "window.class"); 172 | OPENLIB(Layout, "gadgets/layout.gadget"); 173 | OPENLIB(CheckBox, "gadgets/checkbox.gadget"); 174 | OPENLIB(Dos, "dos.library"); 175 | OPENLIB(Icon, "icon.library"); 176 | OPENLIB(Workbench, "workbench.library"); 177 | 178 | ret = appMain(); 179 | 180 | CloseLibs(); 181 | return ret; 182 | } 183 | 184 | int makeMenu(APTR MenuVisualInfo) 185 | { 186 | if (NULL == (dacMenu = CreateMenusA( dacMenuNewMenu, NULL))) return( 1L ); 187 | LayoutMenusA( dacMenu, MenuVisualInfo, (struct TagItem *)(&dacMenuTags[0])); 188 | return( 0L ); 189 | } 190 | 191 | int appMain() 192 | { 193 | ULONG result; 194 | UWORD code; 195 | 196 | ScreenPtr = LockPubScreen(NULL); 197 | VisualInfoPtr = GetVisualInfo(ScreenPtr, NULL); 198 | //InitHook(&HookStruct, HookFunc, NULL); 199 | 200 | 201 | GetCurrentDirName(curPath, PATH_MAX); 202 | strcpy(appPath, curPath); 203 | strcat(appPath, "/DAControlGUI"); 204 | 205 | strcpy(manualPath, "SYS:Utilities/MultiView "); 206 | strcat(manualPath, appPath); 207 | strcat(manualPath, ".guide"); // DAControlGUI.guide 208 | 209 | selectedIndex = -1; 210 | 211 | dobj=GetDiskObject(appPath); 212 | if(dobj!=0) 213 | { 214 | dobj->do_Type=NULL; 215 | } 216 | 217 | if (!(WindowObjectPtr = NewObject 218 | ( WINDOW_GetClass(), 219 | NULL, 220 | WA_PubScreen, ScreenPtr, 221 | WA_ScreenTitle, "DAControlGUI by emarti, Murat Ozdemir", 222 | WA_Title, "DAControlGUI", 223 | WA_Activate, TRUE, 224 | WA_DepthGadget, TRUE, 225 | WA_DragBar, TRUE, 226 | WA_CloseGadget, TRUE, 227 | WINDOW_IconifyGadget, TRUE, 228 | WA_SizeGadget, TRUE, 229 | WA_SmartRefresh, TRUE, 230 | WA_MinWidth, 400, 231 | WA_MinHeight, 180, 232 | WA_MaxWidth, -1, 233 | WA_MaxHeight, -1, 234 | WA_Width, appWidth, 235 | WA_Height, appHeight, 236 | WA_Left, appLeft, 237 | WA_Top, appTop, 238 | WA_SizeBRight, FALSE, 239 | WA_SizeBBottom, TRUE, 240 | WA_NewLookMenus, TRUE, 241 | WINDOW_IconTitle, "DAControlGUI", 242 | WA_IDCMP, IDCMP_DISKINSERTED | IDCMP_DISKREMOVED | IDCMP_MENUPICK, 243 | /* 244 | WINDOW_IDCMPHookBits, IDCMP_DISKINSERTED | IDCMP_DISKREMOVED , 245 | WINDOW_IDCMPHook, &HookStruct, 246 | */ 247 | WINDOW_AppPort, AppPort, 248 | 249 | //WINDOW_Position, WPOS_CENTERSCREEN, 250 | WINDOW_ParentGroup, vParent = VGroupObject, 251 | LAYOUT_SpaceOuter, TRUE, 252 | LAYOUT_BevelStyle, BVS_GROUP, 253 | LAYOUT_DeferLayout, TRUE, 254 | LAYOUT_AddChild, HGroupObject, 255 | LAYOUT_SpaceOuter, FALSE, 256 | LAYOUT_BevelStyle, BVS_SBAR_VERT, 257 | LAYOUT_Label, " List of devices ", 258 | LAYOUT_AddChild, lbAdfInfoVolumes = ListBrowserObject, 259 | GA_ID, IDLISTBROWSER, 260 | LISTBROWSER_Labels, &adfList, 261 | GA_RelVerify , TRUE, 262 | LISTBROWSER_Labels, (ULONG)&adfList, 263 | LISTBROWSER_ColumnInfo, (ULONG)&ci, 264 | LISTBROWSER_ColumnTitles, TRUE, 265 | LISTBROWSER_MultiSelect, FALSE, 266 | LISTBROWSER_Separators, TRUE, 267 | LISTBROWSER_ShowSelected, TRUE, 268 | LISTBROWSER_Editable, FALSE, 269 | LISTBROWSER_HorizontalProp, TRUE, 270 | LISTBROWSER_VerticalProp, TRUE, 271 | LISTBROWSER_AutoFit, TRUE, 272 | LISTBROWSER_Selected, -1, 273 | End, 274 | End, 275 | 276 | LAYOUT_AddChild, HGroupObject, 277 | LAYOUT_BevelStyle, BVS_SBAR_VERT, 278 | LAYOUT_Label, " Controls ", 279 | LAYOUT_AddChild, bLoadChange = ButtonObject, 280 | GA_Text, "_Load/Change", 281 | GA_RelVerify, TRUE, 282 | GA_ID, IDLOADCHANGE, 283 | End, 284 | 285 | LAYOUT_AddChild, bCreate = ButtonObject, 286 | GA_Text, "_Create", 287 | GA_RelVerify, TRUE, 288 | GA_ID, IDCREATE, 289 | End, 290 | 291 | LAYOUT_AddChild, bEject = ButtonObject, 292 | GA_Text, "_Eject", 293 | GA_RelVerify, TRUE, 294 | GA_ID, IDEJECT, 295 | End, 296 | 297 | LAYOUT_AddChild, bEjectAll = ButtonObject, 298 | GA_Text, "Eject _All", 299 | GA_RelVerify, TRUE, 300 | GA_ID, IDEJECTALL, 301 | End, 302 | LAYOUT_AddChild, bRefresh = ButtonObject, 303 | GA_Text, "_Refresh", 304 | GA_RelVerify, TRUE, 305 | GA_ID, IDREFRESH, 306 | End, 307 | End, 308 | CHILD_WeightedHeight,10, 309 | CHILD_MinWidth, 300, 310 | CHILD_MinHeight, 25, 311 | CHILD_MaxHeight, 25, 312 | 313 | End 314 | ))) 315 | { 316 | done=TRUE; 317 | } 318 | 319 | UnlockPubScreen(ScreenPtr); 320 | ScreenPtr = NULL; 321 | 322 | if (!(WindowPtr = (struct Window *) DoMethod(WindowObjectPtr, WM_OPEN, NULL))) 323 | { 324 | done=TRUE; 325 | } 326 | 327 | 328 | makeMenu(VisualInfoPtr); 329 | SetMenuStrip(WindowPtr, dacMenu); 330 | createADFList(); 331 | 332 | GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); 333 | 334 | while(!done) 335 | { 336 | Wait(signal | (1 << WindowPtr->UserPort->mp_SigBit)); 337 | 338 | while ((result = DoMethod(WindowObjectPtr, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) 339 | { switch (result & WMHI_CLASSMASK) 340 | { 341 | case WMHI_CLOSEWINDOW: 342 | done = TRUE; 343 | break; 344 | 345 | case WMHI_GADGETUP: 346 | switch(result & WMHI_GADGETMASK) 347 | { 348 | 349 | case IDLOADCHANGE: 350 | loadChangeAdfWin(); 351 | break; 352 | 353 | case IDCREATE: 354 | createAdfWin(); 355 | break; 356 | 357 | case IDEJECT: 358 | clickEject(); 359 | break; 360 | 361 | case IDEJECTALL: 362 | clickEjectAll(); 363 | break; 364 | 365 | case IDREFRESH: 366 | createADFList(); 367 | break; 368 | 369 | case IDLISTBROWSER: 370 | selectedIndex = code; 371 | break; 372 | 373 | default: 374 | break; 375 | } 376 | break; 377 | 378 | case WMHI_ICONIFY: /* iconify / uniconify */ 379 | iconify(); 380 | break; 381 | 382 | case WMHI_MENUPICK: 383 | ProcessMenuIDCMPdacMenu(code); 384 | break; 385 | 386 | case WMHI_RAWKEY: 387 | switch(code) 388 | { 389 | case 0x45: // press ESC to quit 390 | done=TRUE; 391 | break; 392 | 393 | default: 394 | break; 395 | } 396 | break; 397 | 398 | 399 | default: 400 | break; 401 | } 402 | } 403 | } 404 | 405 | appTop = WindowPtr->TopEdge; 406 | appLeft = WindowPtr->LeftEdge; 407 | appWidth = WindowPtr->Width; 408 | appHeight = WindowPtr->Height; 409 | 410 | SavePrefs(); 411 | freeList(&adfList); 412 | ClearMenuStrip(WindowPtr); 413 | FreeVisualInfo(VisualInfoPtr); 414 | 415 | // delete log file 416 | Execute("Delete RAM:dacgui.log >NIL:", NULL, NULL); 417 | 418 | return 0; 419 | } 420 | 421 | /* 422 | ULONG HookFunc(struct Hook *h, VOID *o, VOID *msg) 423 | { 424 | UWORD code; 425 | ULONG class; 426 | class = ((struct IntuiMessage *) msg)->Class; 427 | code = ((struct IntuiMessage *) msg)->Code; 428 | 429 | 430 | switch(class) 431 | { 432 | case IDCMP_DISKINSERTED: 433 | case IDCMP_DISKREMOVED: 434 | //Printf("Disk insert/removed ...\n"); 435 | //createADFList(); 436 | break; 437 | 438 | default: 439 | break; 440 | } 441 | 442 | return 1; 443 | } 444 | 445 | 446 | ULONG ASM hookEntry(REG(a0) struct Hook *h, REG(a2) VOID *o, REG(a1) VOID *msg) 447 | { 448 | return ((*(ULONG (*)(struct Hook *, VOID *, VOID *))(*h->h_SubEntry))(h, o, msg)); 449 | } 450 | 451 | void InitHook(struct Hook* hook, ULONG (*func)(), void* data) 452 | { 453 | if (hook) 454 | { 455 | hook->h_Entry = (ULONG (*)()) hookEntry; 456 | hook->h_SubEntry = func; 457 | hook->h_Data = data; 458 | } 459 | else 460 | { 461 | done=TRUE; 462 | } 463 | } 464 | */ 465 | 466 | void CloseLibs(void) 467 | { 468 | if (ScreenPtr) 469 | { 470 | UnlockPubScreen(NULL); 471 | ScreenPtr = NULL; 472 | } 473 | 474 | if (WindowObjectPtr) 475 | { 476 | DisposeObject(WindowObjectPtr); 477 | WindowObjectPtr = NULL; 478 | } 479 | 480 | if (dobj) FreeDiskObject(dobj); 481 | 482 | if (AppPort) DeleteMsgPort(AppPort); 483 | 484 | CLOSELIB(Workbench); 485 | CLOSELIB(Icon); 486 | CLOSELIB(Layout); 487 | CLOSELIB(CheckBox); 488 | CLOSELIB(Window); 489 | CLOSELIB(Dos); 490 | } 491 | 492 | void ProcessMenuIDCMPdacMenu(UWORD MenuNumber) 493 | { 494 | UWORD MenuNum; 495 | UWORD ItemNumber; 496 | struct MenuItem *item; 497 | while (MenuNumber != MENUNULL) 498 | { 499 | item = ItemAddress( dacMenu, MenuNumber); 500 | MenuNum = MENUNUM(MenuNumber); 501 | ItemNumber = ITEMNUM(MenuNumber); 502 | switch ( MenuNum ) 503 | { 504 | case NOMENU : 505 | break; 506 | 507 | case DAControlGUIMenu : 508 | switch ( ItemNumber ) 509 | { 510 | case NOITEM : 511 | break; 512 | 513 | case DAControlGUIMenuAbout : 514 | About(); 515 | break; 516 | case DAControlGUIMenuIconify : 517 | iconify(); 518 | break; 519 | case DAControlGUIMenuQuit : 520 | done=TRUE; 521 | break; 522 | } 523 | break; 524 | 525 | case Controls : 526 | switch ( ItemNumber ) 527 | { 528 | case NOITEM : 529 | break; 530 | 531 | case ControlsLoadChange : 532 | loadChangeAdfWin(); 533 | break; 534 | case ControlsCreate : 535 | createAdfWin(); 536 | break; 537 | case ControlsEject : 538 | clickEject(); 539 | break; 540 | case ControlsEjectAll : 541 | clickEjectAll(); 542 | break; 543 | case ControlsRefresh : 544 | createADFList(); 545 | break; 546 | } 547 | break; 548 | 549 | case HelpMenu : 550 | switch ( ItemNumber ) 551 | { 552 | case NOITEM : 553 | break; 554 | 555 | case HelpMenuManual : 556 | Execute(manualPath, NULL, NULL); 557 | break; 558 | } 559 | break; 560 | 561 | 562 | default: 563 | break; 564 | } 565 | MenuNumber = item->NextSelect; 566 | } 567 | } 568 | 569 | void About(void) 570 | { 571 | struct EasyStruct aboutReq = 572 | { 573 | sizeof(struct EasyStruct), 574 | 0, 575 | "About", 576 | ABOUT, 577 | "Ok" 578 | }; 579 | EasyRequest(WindowPtr, &aboutReq, NULL, NULL); 580 | } 581 | 582 | void AppTerminate(void) 583 | { 584 | struct EasyStruct appTerReq = 585 | { 586 | sizeof(struct EasyStruct), 587 | 0, 588 | "Error - DAControlGUI", 589 | "SYS:C/DAControl not found.\nSYS:Devs/trackfile.device not found.\nDo you have OS 3.2?\nThe application will be terminated.\n", 590 | "Ok" 591 | }; 592 | EasyRequest(WindowPtr, &appTerReq, NULL, NULL); 593 | } 594 | 595 | BOOL makeList(struct List* list, char* labels1[], char* labels2[], char* labels3[], char* labels4[], char* labels5[]) 596 | { 597 | struct Node *node; 598 | WORD i = 0; 599 | 600 | NewList(list); 601 | 602 | while (labels1[i] != '\0') 603 | { 604 | if (node = AllocListBrowserNode(5, 605 | LBNA_Column, 0, 606 | LBNCA_Justification, LCJ_CENTER, 607 | LBNCA_CopyText, TRUE, 608 | LBNCA_Text, labels1[i], 609 | LBNCA_MaxChars, 8, 610 | LBNA_Column, 1, 611 | LBNCA_Justification, LCJ_LEFT, 612 | LBNCA_CopyText, TRUE, 613 | LBNCA_Text, labels2[i], 614 | LBNCA_MaxChars, 32, 615 | LBNA_Column, 2, 616 | LBNCA_Justification, LCJ_CENTER, 617 | LBNCA_CopyText, TRUE, 618 | LBNCA_Text, labels3[i], 619 | LBNCA_MaxChars, 8, 620 | LBNA_Column, 3, 621 | LBNCA_Justification, LCJ_CENTER, 622 | LBNCA_CopyText, TRUE, 623 | LBNCA_Text, labels4[i], 624 | LBNCA_MaxChars, 11, 625 | LBNA_Column, 4, 626 | LBNCA_Justification, LCJ_LEFT, 627 | LBNCA_CopyText, TRUE, 628 | LBNCA_Text, labels5[i], 629 | LBNCA_MaxChars, PATH_MAX, 630 | TAG_DONE)) 631 | { 632 | AddTail(list, node); 633 | } 634 | else 635 | break; 636 | i++; 637 | } 638 | return(TRUE); 639 | } 640 | 641 | void freeList(struct List* list) 642 | { 643 | struct Node *node, *nextnode; 644 | 645 | node = list->lh_Head; 646 | while (nextnode = node->ln_Succ) 647 | { 648 | FreeListBrowserNode(node); 649 | node = nextnode; 650 | } 651 | NewList(list); 652 | } 653 | 654 | void createADFList(void) 655 | { 656 | //int x; 657 | BPTR fp; 658 | BOOL ejectDisable = FALSE; 659 | RunDAControl("INFO SHOWVOLUMES >RAM:dacgui.log"); 660 | fp = Open("RAM:dacgui.log", MODE_OLDFILE); 661 | count=0; 662 | 663 | if(fp) 664 | { 665 | UBYTE buffer[BUFFERSIZE]; 666 | while(FGets(fp, buffer, BUFFERSIZE)) 667 | { 668 | if((count>0)&&(strlen(buffer)>0)) 669 | { 670 | col1[count-1]= fulltrim(substring(buffer, 1, 7)); // device 671 | col3[count-1]= fulltrim(substring(buffer, 9, 8)); // type 672 | col2[count-1]= fulltrim(substring(buffer, 18, 32)); // volume name 673 | col4[count-1]= fulltrim(substring(buffer, 79, 11)); // access 674 | col5[count-1]= fulltrim(substring(buffer, 91, strlen(buffer)-90)); // file 675 | free(buffer); 676 | } 677 | count++; 678 | } 679 | Close(fp); 680 | 681 | if(count==1) // no mounted device(s) 682 | { 683 | col1[0]=" "; 684 | col2[0]=" "; 685 | col3[0]=" "; 686 | col4[0]=" "; 687 | col5[0]=" "; 688 | ejectDisable = TRUE; 689 | } 690 | 691 | /* 692 | for(x=0;xNIL:", device); 718 | RunDAControl(cmd); 719 | } 720 | 721 | void clickEject(void) 722 | { 723 | if(selectedIndex>=0) Eject(col1[selectedIndex]); 724 | createADFList(); 725 | } 726 | 727 | void clickEjectAll(void) 728 | { 729 | int m; 730 | for(m=0; mWidth/20, 789 | WA_Top, (ScreenPtr->Height-200)/2, 790 | WA_SizeBRight, FALSE, 791 | WA_SizeBBottom, TRUE, 792 | WA_NewLookMenus, TRUE, 793 | WINDOW_Position, WPOS_CENTERSCREEN, 794 | WINDOW_ParentGroup, vLoadAdfParent = VGroupObject, 795 | LAYOUT_SpaceOuter, TRUE, 796 | LAYOUT_DeferLayout, TRUE, 797 | 798 | LAYOUT_AddChild, HGroupObject, 799 | LAYOUT_Label, "", 800 | LAYOUT_Orientation, 0, 801 | LAYOUT_HorizAlignment, LALIGN_LEFT, 802 | LAYOUT_VertAlignment, LALIGN_TOP, 803 | LAYOUT_LabelPlace, BVJ_TOP_CENTER, 804 | LAYOUT_BevelState, IDS_NORMAL, 805 | LAYOUT_BevelStyle, 4, 806 | LAYOUT_AddChild, o[3] = (struct Gadget *) IntegerObject, 807 | GA_ID, IDINTEGER, 808 | GA_RelVerify, TRUE, 809 | INTEGER_Number, selectedDeviceNo, 810 | INTEGER_MaxChars, 4, 811 | INTEGER_Minimum, 0, 812 | INTEGER_Maximum, 9999, 813 | INTEGER_Arrows, TRUE, 814 | STRINGA_Justification, GACT_STRINGRIGHT, 815 | End, 816 | CHILD_Label, LabelObject, 817 | LABEL_Justification, 0, 818 | LABEL_Text, "Unit:", 819 | End, 820 | LAYOUT_AddChild, o[4] = (struct Gadget *) CheckBoxObject, 821 | GA_ID, IDCHECKBOX, 822 | GA_RelVerify, TRUE, 823 | GA_Selected, TRUE, 824 | GA_Text, " Write protected ", 825 | CHECKBOX_TextPen, 1, 826 | CHECKBOX_FillTextPen, 1, 827 | CHECKBOX_BackgroundPen, 0, 828 | CHECKBOX_TextPlace, PLACETEXT_LEFT, 829 | End, 830 | End, 831 | 832 | 833 | LAYOUT_AddChild, o[2] = (struct Gadget *) GetFileObject, 834 | GA_ID, IDGETFILE, 835 | GA_RelVerify, TRUE, 836 | GETFILE_TitleText, "Load ADF File ...", 837 | GETFILE_Pattern, "#?.adf", 838 | GETFILE_FullFile, loadChangeFileReqPath, 839 | GETFILE_DoPatterns, TRUE, 840 | GETFILE_RejectIcons, TRUE, 841 | End, 842 | 843 | CHILD_Label, LabelObject, 844 | LABEL_Justification, 0, 845 | LABEL_Text, "File:", 846 | End, 847 | 848 | 849 | LAYOUT_AddChild, HGroupObject, 850 | LAYOUT_AddChild, o[0] = ButtonObject, 851 | GA_Text, "_Ok", 852 | GA_RelVerify, TRUE, 853 | GA_ID, IDBOK, 854 | End, 855 | 856 | LAYOUT_AddChild, o[1] = ButtonObject, 857 | GA_Text, "_Cancel", 858 | GA_RelVerify, TRUE, 859 | GA_ID, IDBCANCEL, 860 | End, 861 | End, 862 | 863 | End 864 | ))) 865 | { 866 | doneLoadAdf = TRUE; 867 | } 868 | 869 | loadAdfWin = RA_OpenWindow(loadAdfWinObj); 870 | GetAttr(WINDOW_SigMask, loadAdfWinObj, &signalLoadAdf); 871 | 872 | doneLoadAdf=FALSE; 873 | buttonsDisable(TRUE); 874 | 875 | while(!doneLoadAdf) 876 | { 877 | Wait(signalLoadAdf | (1 << loadAdfWin->UserPort->mp_SigBit)); 878 | 879 | while ((resultLoadAdf = DoMethod(loadAdfWinObj, WM_HANDLEINPUT, &codeLoadAdf)) != WMHI_LASTMSG) 880 | { switch (resultLoadAdf & WMHI_CLASSMASK) 881 | { 882 | case WMHI_CLOSEWINDOW: 883 | doneLoadAdf = TRUE; 884 | break; 885 | 886 | case WMHI_GADGETUP: 887 | switch(resultLoadAdf & WMHI_GADGETMASK) 888 | { 889 | case IDBOK: 890 | GetAttr(INTEGER_Number, o[3], &deviceNo); 891 | GetAttr(GA_Selected, o[4], &writeProtected); 892 | GetAttr(GETFILE_FullFile, o[2], (ULONG*)&gFullFilename); 893 | GetAttr(GETFILE_Drawer, o[2], (ULONG*)&loadChangeFileReqPath); 894 | 895 | if(!isContainsAdfExt(gFullFilename)) break; 896 | 897 | sprintf(loadChangeFileReqPath, "%s", gFullFilename); 898 | 899 | sprintf(currentDeviceStr, "DA%d", deviceNo); 900 | for(m=0; mNIL:", gFullFilename, deviceNo, (writeProtected) ? "YES" : "NO"); 908 | RunDAControl(cmd); 909 | } 910 | else 911 | { 912 | sprintf(cmd, "EJECT DEVICE DA%d: SAFEEJECT=YES TIMEOUT 15 QUIET >NIL:", deviceNo); 913 | RunDAControl(cmd); 914 | sprintf(cmd, "CHANGE DEVICE DA%d: WRITEPROTECTED=""%s"" \"%s\" QUIET >NIL:", deviceNo, (writeProtected) ? "YES" : "NO", gFullFilename); 915 | RunDAControl(cmd); 916 | } 917 | doneLoadAdf = TRUE; 918 | break; 919 | 920 | case IDBCANCEL: 921 | doneLoadAdf = TRUE; 922 | break; 923 | 924 | case IDGETFILE: 925 | resGetFile = gfRequestFile(o[2], loadAdfWin); 926 | break; 927 | 928 | break; 929 | } 930 | break; 931 | 932 | default: 933 | break; 934 | } 935 | } 936 | } 937 | 938 | RA_CloseWindow(loadAdfWinObj); 939 | loadAdfWin=NULL; 940 | if (loadAdfWinObj) 941 | { 942 | DisposeObject(loadAdfWinObj); 943 | loadAdfWinObj = NULL; 944 | } 945 | 946 | createADFList(); 947 | buttonsDisable(FALSE); 948 | } 949 | 950 | void createAdfWin(void) 951 | { 952 | 953 | enum { 954 | IDFIRST=0x00, 955 | // gadget id starts 956 | IDBOK, 957 | IDBCANCEL, 958 | IDGETFILE, 959 | IDINTEGER, 960 | IDCHECKBOX, 961 | IDCHOOSER, 962 | IDSTRING, 963 | // end of gadget id 964 | IDLAST 965 | }; 966 | 967 | struct Gadget *co[IDLAST-1]; 968 | struct Gadget *vCreateAdfParent = NULL; 969 | Object *createAdfWinObj = NULL; 970 | struct Window *createAdfWin = NULL; 971 | ULONG signalCreateAdf, resultCreateAdf; 972 | signed char doneCreateAdf; 973 | UWORD codeCreateAdf; 974 | 975 | int cdeviceNo; 976 | ULONG cwriteProtected; 977 | ULONG cresGetFile = 0; 978 | STRPTR cgFullFilename; 979 | char cmd[BUFFERSIZE]; 980 | STRPTR labelstr; 981 | ULONG idx; 982 | struct List *chooserlist; 983 | char strNo[6]; 984 | 985 | strcpy(strNo, &col1[selectedIndex][2]); 986 | selectedDeviceNo = atoi(strNo); 987 | 988 | chooserlist = ChooserLabels( "DD","HD", NULL ); 989 | 990 | if (!(createAdfWinObj = NewObject 991 | ( WINDOW_GetClass(), 992 | NULL, 993 | WA_PubScreen, ScreenPtr, 994 | WA_Title, "Create ADF File", 995 | WA_Activate, TRUE, 996 | WA_DragBar, TRUE, 997 | WA_CloseGadget, TRUE, 998 | WA_SizeGadget, TRUE, 999 | WA_SmartRefresh, TRUE, 1000 | WA_MinWidth, 350, 1001 | WA_MinHeight, 30, 1002 | WA_MaxWidth, -1, 1003 | WA_MaxHeight, 30, 1004 | WA_Width, 350, 1005 | WA_Height, 30, 1006 | WA_Left, ScreenPtr->Width/20, 1007 | WA_Top, (ScreenPtr->Height-200)/2, 1008 | WA_SizeBRight, FALSE, 1009 | WA_SizeBBottom, TRUE, 1010 | WA_NewLookMenus, TRUE, 1011 | WINDOW_Position, WPOS_CENTERSCREEN, 1012 | WINDOW_ParentGroup, vCreateAdfParent = VGroupObject, 1013 | LAYOUT_SpaceOuter, TRUE, 1014 | LAYOUT_DeferLayout, TRUE, 1015 | 1016 | LAYOUT_AddChild, co[6] = (struct Gadget *) StringObject, 1017 | GA_ID, IDSTRING, 1018 | GA_RelVerify, TRUE, 1019 | STRINGA_TextVal, "Empty", 1020 | STRINGA_MaxChars, 32, 1021 | STRINGA_Justification, GACT_STRINGLEFT, 1022 | STRINGA_HookType, SHK_CUSTOM, 1023 | End, 1024 | CHILD_Label, LabelObject, 1025 | LABEL_Justification, 0, 1026 | LABEL_Text, "Label:", 1027 | End, 1028 | 1029 | LAYOUT_AddChild, HGroupObject, 1030 | LAYOUT_Label, "", 1031 | LAYOUT_Orientation, 0, 1032 | LAYOUT_HorizAlignment, LALIGN_LEFT, 1033 | LAYOUT_VertAlignment, LALIGN_TOP, 1034 | LAYOUT_LabelPlace, BVJ_TOP_CENTER, 1035 | LAYOUT_BevelState, IDS_NORMAL, 1036 | LAYOUT_BevelStyle, 4, 1037 | LAYOUT_AddChild, co[3] = (struct Gadget *) IntegerObject, 1038 | GA_ID, IDINTEGER, 1039 | GA_RelVerify, TRUE, 1040 | INTEGER_Number, selectedDeviceNo, 1041 | INTEGER_MaxChars, 4, 1042 | INTEGER_Minimum, 0, 1043 | INTEGER_Maximum, 9999, 1044 | INTEGER_Arrows, TRUE, 1045 | STRINGA_Justification, GACT_STRINGRIGHT, 1046 | End, 1047 | CHILD_Label, LabelObject, 1048 | LABEL_Justification, 0, 1049 | LABEL_Text, "Unit:", 1050 | End, 1051 | LAYOUT_AddChild, co[5] = (struct Gadget *) ChooserObject, 1052 | GA_ID, IDCHOOSER, 1053 | GA_RelVerify, TRUE, 1054 | CHOOSER_PopUp, TRUE, 1055 | CHOOSER_MaxLabels, 10, 1056 | CHOOSER_Offset, 0, 1057 | CHOOSER_Selected, 0, 1058 | CHOOSER_Labels, chooserlist, 1059 | End, 1060 | CHILD_Label, LabelObject, 1061 | LABEL_Justification, 0, 1062 | LABEL_Text, " Disk Type: ", 1063 | End, 1064 | LAYOUT_AddChild, co[4] = (struct Gadget *) CheckBoxObject, 1065 | GA_ID, IDCHECKBOX, 1066 | GA_RelVerify, TRUE, 1067 | GA_Selected, FALSE, 1068 | GA_Text, " Write protected ", 1069 | CHECKBOX_TextPen, 1, 1070 | CHECKBOX_FillTextPen, 1, 1071 | CHECKBOX_BackgroundPen, 0, 1072 | CHECKBOX_TextPlace, PLACETEXT_LEFT, 1073 | End, 1074 | End, 1075 | 1076 | 1077 | LAYOUT_AddChild, co[2] = (struct Gadget *) GetFileObject, 1078 | GA_ID, IDGETFILE, 1079 | GA_RelVerify, TRUE, 1080 | GETFILE_TitleText, "Save ADF File ...", 1081 | GETFILE_Pattern, "#?.adf", 1082 | GETFILE_DoPatterns, TRUE, 1083 | GETFILE_RejectIcons, TRUE, 1084 | GETFILE_FullFile, createFileReqPath, 1085 | End, 1086 | 1087 | CHILD_Label, LabelObject, 1088 | LABEL_Justification, 0, 1089 | LABEL_Text, "File:", 1090 | End, 1091 | 1092 | 1093 | LAYOUT_AddChild, HGroupObject, 1094 | LAYOUT_AddChild, co[0] = ButtonObject, 1095 | GA_Text, "_Ok", 1096 | GA_RelVerify, TRUE, 1097 | GA_ID, IDBOK, 1098 | End, 1099 | 1100 | LAYOUT_AddChild, co[1] = ButtonObject, 1101 | GA_Text, "_Cancel", 1102 | GA_RelVerify, TRUE, 1103 | GA_ID, IDBCANCEL, 1104 | End, 1105 | End, 1106 | 1107 | End 1108 | ))) 1109 | { 1110 | doneCreateAdf = TRUE; 1111 | } 1112 | 1113 | createAdfWin = RA_OpenWindow(createAdfWinObj); 1114 | GetAttr(WINDOW_SigMask, createAdfWinObj, &signalCreateAdf); 1115 | 1116 | doneCreateAdf=FALSE; 1117 | buttonsDisable(TRUE); 1118 | 1119 | while(!doneCreateAdf) 1120 | { 1121 | Wait(signalCreateAdf | (1 << createAdfWin->UserPort->mp_SigBit)); 1122 | 1123 | while ((resultCreateAdf = DoMethod(createAdfWinObj, WM_HANDLEINPUT, &codeCreateAdf)) != WMHI_LASTMSG) 1124 | { switch (resultCreateAdf & WMHI_CLASSMASK) 1125 | { 1126 | case WMHI_CLOSEWINDOW: 1127 | doneCreateAdf = TRUE; 1128 | break; 1129 | 1130 | case WMHI_GADGETUP: 1131 | switch(resultCreateAdf & WMHI_GADGETMASK) 1132 | { 1133 | case IDBOK: 1134 | GetAttr(INTEGER_Number, co[3], &cdeviceNo); 1135 | GetAttr(GA_Selected, co[4], &cwriteProtected); 1136 | GetAttr(GETFILE_FullFile, co[2], (ULONG*)&cgFullFilename); 1137 | GetAttr(STRINGA_TextVal, co[6], (ULONG*)&labelstr); 1138 | GetAttr(CHOOSER_Selected, co[5], (ULONG*)&idx); 1139 | 1140 | if(!isContainsAdfExt(cgFullFilename)) break; 1141 | 1142 | sprintf(createFileReqPath, "%s", cgFullFilename); 1143 | // creating adf... 1144 | sprintf(cmd, "CREATE LABEL=\"%s\" DISKTYPE ""%s"" DEVICE DA%d: \"%s\" QUIET >NIL:", labelstr, disktype[idx], cdeviceNo, cgFullFilename); 1145 | RunDAControl(cmd); 1146 | // to display in list (because volumename column value is "-") 1147 | // eject + change 1148 | sprintf(cmd, "EJECT DEVICE DA%d: SAFEEJECT=YES TIMEOUT 15 QUIET >NIL:", cdeviceNo); 1149 | RunDAControl(cmd); 1150 | sprintf(cmd, "CHANGE DEVICE DA%d: \"%s\" WRITEPROTECTED=""%s"" QUIET >NIL:", cdeviceNo, cgFullFilename, (cwriteProtected) ? "YES" : "NO"); 1151 | RunDAControl(cmd); 1152 | doneCreateAdf = TRUE; 1153 | break; 1154 | 1155 | case IDBCANCEL: 1156 | doneCreateAdf = TRUE; 1157 | break; 1158 | 1159 | case IDGETFILE: 1160 | cresGetFile = gfRequestFile(co[2], createAdfWin); 1161 | break; 1162 | 1163 | default: 1164 | break; 1165 | } 1166 | break; 1167 | 1168 | default: 1169 | break; 1170 | } 1171 | } 1172 | } 1173 | 1174 | FreeChooserLabels(chooserlist); 1175 | RA_CloseWindow(createAdfWinObj); 1176 | createAdfWin=NULL; 1177 | if (createAdfWinObj) 1178 | { 1179 | DisposeObject(createAdfWinObj); 1180 | createAdfWinObj = NULL; 1181 | } 1182 | 1183 | createADFList(); 1184 | buttonsDisable(FALSE); 1185 | } 1186 | 1187 | void setDisable(struct Gadget* gad, BOOL value) 1188 | { 1189 | SetGadgetAttrs(gad, WindowPtr, NULL, 1190 | GA_Disabled, value, 1191 | TAG_DONE); 1192 | } 1193 | 1194 | void buttonsDisable(BOOL b) 1195 | { 1196 | setDisable(bLoadChange, b); 1197 | setDisable(bCreate, b); 1198 | setDisable(bEject, b); 1199 | setDisable(bEjectAll, b); 1200 | setDisable(bRefresh, b); 1201 | if(b) ClearMenuStrip(WindowPtr); else SetMenuStrip(WindowPtr, dacMenu); 1202 | } 1203 | 1204 | /* 1205 | ### SYS:Prefs/Env-Archive/DAControlGUI.prefs ### 1206 | LeftEdge 1207 | TopEdge 1208 | Width 1209 | Height 1210 | Load/Change File Req. full filename 1211 | Create File Req. full filename 1212 | */ 1213 | BPTR fp; 1214 | char fpStr[BUFFERSIZE]; 1215 | 1216 | void LoadPrefs(void) 1217 | { 1218 | fp = Open(PREFFILEPATH, MODE_OLDFILE); 1219 | if (fp) 1220 | { 1221 | UBYTE buffer[BUFFERSIZE]; 1222 | FGets(fp, buffer, BUFFERSIZE); 1223 | appLeft = atoi(buffer); 1224 | FGets(fp, buffer, BUFFERSIZE); 1225 | appTop = atoi(buffer); 1226 | FGets(fp, buffer, BUFFERSIZE); 1227 | appWidth = atoi(buffer); 1228 | FGets(fp, buffer, BUFFERSIZE); 1229 | appHeight = atoi(buffer); 1230 | FGets(fp, buffer, BUFFERSIZE); 1231 | sprintf(loadChangeFileReqPath, "%s", buffer); 1232 | loadChangeFileReqPath[strlen(loadChangeFileReqPath)-1] = '\0'; 1233 | FGets(fp, buffer, BUFFERSIZE); 1234 | sprintf(createFileReqPath, "%s", buffer); 1235 | createFileReqPath[strlen(createFileReqPath)-1] = '\0'; 1236 | 1237 | Close(fp); 1238 | } 1239 | } 1240 | 1241 | void SavePrefs(void) 1242 | { 1243 | fp = Open(PREFFILEPATH, MODE_NEWFILE); 1244 | if (fp) 1245 | { 1246 | sprintf(fpStr, "%d\n%d\n%d\n%d\n%s\n%s\n", appLeft, appTop, appWidth, appHeight, loadChangeFileReqPath, createFileReqPath); 1247 | FPuts(fp, fpStr); 1248 | Close(fp); 1249 | } 1250 | } 1251 | 1252 | void iconify(void) 1253 | { 1254 | AppPort = CreateMsgPort(); 1255 | appicon=AddAppIconA(0L, 0L, "DAControlGUI", AppPort, NULL, dobj, NULL); 1256 | appmenuitem=AddAppMenuItemA(0L, 0L, "DAControlGUI", AppPort, NULL); 1257 | RA_CloseWindow(WindowObjectPtr); 1258 | WindowPtr = NULL; 1259 | WaitPort(AppPort); 1260 | RemoveAppIcon(appicon); 1261 | RemoveAppMenuItem(appmenuitem); 1262 | WindowPtr = (struct Window *) RA_OpenWindow(WindowObjectPtr); 1263 | 1264 | if (WindowPtr) 1265 | { 1266 | SetMenuStrip(WindowPtr, dacMenu); 1267 | GetAttr(WINDOW_SigMask, WindowObjectPtr, &signal); 1268 | } 1269 | else 1270 | { 1271 | done = TRUE; 1272 | } 1273 | } -------------------------------------------------------------------------------- /src/menu.h: -------------------------------------------------------------------------------- 1 | #ifndef MENU_H 2 | #define MENU_H 3 | 4 | //------------------------------- 5 | #define DAControlGUIMenu 0 6 | #define DAControlGUIMenuAbout 0 7 | #define DAControlGUIMenuBar1 1 8 | #define DAControlGUIMenuIconify 2 9 | #define DAControlGUIMenuBar2 3 10 | #define DAControlGUIMenuQuit 4 11 | //------------------------------- 12 | #define Controls 1 13 | #define ControlsLoadChange 0 14 | #define ControlsCreate 1 15 | #define ControlsBar2 2 16 | #define ControlsEject 3 17 | #define ControlsEjectAll 4 18 | #define ControlsBar3 5 19 | #define ControlsRefresh 6 20 | //------------------------------- 21 | #define HelpMenu 2 22 | #define HelpMenuManual 0 23 | 24 | struct NewMenu dacMenuNewMenu[] = 25 | { 26 | NM_TITLE, (STRPTR)"DAControlGUI" , NULL , 0, NULL, (APTR)~0, 27 | NM_ITEM , (STRPTR)"About" , NULL , 0, 0L, (APTR)~0, 28 | NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, 29 | NM_ITEM , (STRPTR)"Iconify" , "I" , 0, 0L, (APTR)~0, 30 | NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, 31 | NM_ITEM , (STRPTR)"Quit" , "Q" , 0, 0L, (APTR)~0, 32 | 33 | NM_TITLE, (STRPTR)"Controls" , NULL , 0, NULL, (APTR)~0, 34 | NM_ITEM , (STRPTR)"Load / Change ADF" , "L" , 0, 0L, (APTR)~0, 35 | NM_ITEM , (STRPTR)"Create ADF" , "C" , 0, 0L, (APTR)~0, 36 | NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, 37 | NM_ITEM , (STRPTR)"Eject ADF" , "E" , 0, 0L, (APTR)~0, 38 | NM_ITEM , (STRPTR)"Eject All" , "A" , 0, 0L, (APTR)~0, 39 | NM_ITEM , NM_BARLABEL , NULL , 0, 0L, (APTR)~0, 40 | NM_ITEM , (STRPTR)"Refresh" , "R" , 0, 0L, (APTR)~0, 41 | 42 | NM_TITLE, (STRPTR)"Help" , NULL , 0, NULL, (APTR)~0, 43 | NM_ITEM , (STRPTR)"Manual" , "M" , 0, 0L, (APTR)~0, 44 | 45 | NM_END , NULL , NULL , 0, 0L, (APTR)~0 46 | }; 47 | 48 | ULONG dacMenuTags[] = 49 | { 50 | (GT_TagBase+67), TRUE, 51 | (TAG_DONE) 52 | }; 53 | 54 | #endif -------------------------------------------------------------------------------- /src/scoptions: -------------------------------------------------------------------------------- 1 | DATA=FAR 2 | CODE=FAR 3 | PARAMETERS=REGISTERS 4 | NOSTACKCHECK 5 | COMMENTNEST 6 | OPTIMIZERSIZE 7 | VERBOSE 8 | STRIPDEBUG 9 | UTILITYLIBRARY 10 | NOERRORHIGHLIGHT 11 | BATCH 12 | OPTIMIZERALIAS 13 | INCLUDEDIR=INCLUDE: 14 | IGNORE=73 15 | IGNORE=225 16 | IGNORE=51 17 | IGNORE=100 18 | NOSTanDardIO 19 | -------------------------------------------------------------------------------- /src/toBuild.txt: -------------------------------------------------------------------------------- 1 | ;to build DAControlGUI 2 | Execute main.c -------------------------------------------------------------------------------- /src/version.h: -------------------------------------------------------------------------------- 1 | #ifndef VERSION_H 2 | #define VERSION_H 3 | // version 4 | #define MAJOR "1" 5 | #define MINOR "0" 6 | #define BUILD "1110" 7 | #define DATE "29.10.2021" 8 | #define CODER "emarti, Murat OZDEMIR" 9 | #define APPNAME "DAControlGUI" 10 | 11 | #define ABOUT APPNAME" "MAJOR"."MINOR"."BUILD" (C) 2021\nCoded by "CODER"\n\nWebSite:\nhttps://github.com/emartisoft/"APPNAME 12 | UBYTE *vers = "$VER: "APPNAME" "MAJOR"."MINOR" ("DATE") "CODER; 13 | #endif 14 | --------------------------------------------------------------------------------