├── 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 | 
25 |
Main Screen
26 |
27 | 
28 |
Load ADF Image
29 |
30 | 
31 |
Create ADF Image
32 |
33 | # Video
34 | [](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 |
--------------------------------------------------------------------------------