home *** CD-ROM | disk | FTP | other *** search
- //**************************
- //
- // Name : IDCMP.c
- //
- //**************************
-
- //**** Header files
-
- //** OS Include files
- #include <intuition/intuition.h>
-
- //** OS function prototypes
- #include <clib/dos_protos.h>
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/gadtools_protos.h>
- #include <clib/icon_protos.h>
- #include <clib/macros.h>
-
- //** OS function inline calls
- #include <pragmas/dos_pragmas.h>
- #include <pragmas/exec_pragmas.h>
- #include <pragmas/intuition_pragmas.h>
- #include <pragmas/gadtools_pragmas.h>
- #include <pragmas/icon_pragmas.h>
-
- //** ANSI C includes
- //#include <stdio.h>
- #include <string.h>
-
- //** Application includes
-
- #include "GadToolsBox.h"
- #include "GuiExtras.h"
- #include "Node.h"
- #include "read.h"
- #include "Write.h"
- #include "Prefs.h"
- #include "Librarian.h"
-
- void LoadWRTGUI(char *fname);
- void SignalCX(void);
-
- //**** Local Storage
-
- static struct ProgNode *ipn;
-
-
- //**** Misc functions
-
- static long GetCurrentListView(void) {
- static long nth;
- GT_GetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Selected,&nth,TAG_END);
- ipn=(nth>=0)?(struct ProgNode *)FindNthNode(nth):NULL;
- return nth;
- } // GetCurrentListView
-
-
- //**** ListView block
-
- int MenuItemsClicked( void ) {
- /* routine when gadget "_Menu Items" is clicked. */
- ipn=(struct ProgNode *)FindNthNode(ETMPMsg.Code);
- DisplayNode(ipn);
- return 1;
- } // MenuItemsClicked
-
- int ItemClicked( void ) {
- char *buffer;
- /* routine when gadget "" is clicked. */
- if (GetCurrentListView()>=0) {
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- GT_GetGadgetAttrs(ETMPGadgets[GD_Item],ETMPWnd,NULL,GTST_String,&buffer,TAG_END);
- pnSetItem(ipn,buffer);
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,TAG_END);
- }
- return 1;
- } // Item clicked
-
- int NewClicked( void ) {
- /* routine when gadget "New" is clicked. */
- long count;
-
- if (ipn=NewNode()) {
- count=ListLength();
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- pnSetItem(ipn,"(new tool)");
- pnSetFilename(ipn,"(new tool)");
- pnSetDirectory(ipn,"SYS:");
- ipn->pn_LaunchCode=LC_WB_NONE;
- ipn->pn_Stack=4096;
- ipn->pn_Priority=0L;
- ipn->pn_appmenu=NULL;
- AddTail( List, (struct Node *)ipn );
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,count,TAG_END);
- if (0==count) PropertyAble(TRUE);
- DisplayNode(ipn);
- }
- return 1;
- } // NewClicked
-
- int DelClicked( void ) {
- /* routine when gadget "Del" is clicked. */
- long count;
- long nth;
-
- nth=GetCurrentListView();
- if (nth>=0) {
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
-
- count=ListLength();
- if (1==count) { // only one in list
- nth=0;
- DisplayNode(NULL);
- PropertyAble(FALSE);
- } else if (nth==count-1) { // was last in list
- nth--;
- DisplayNode((struct ProgNode *)(ipn->pn_Node.ln_Pred));
- // replicate
- } else {
- DisplayNode((struct ProgNode *)(ipn->pn_Node.ln_Succ));
- // replicate
- }
-
- Remove((struct Node *)ipn);
- DisposeNode(ipn);
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,nth,TAG_END);
- } // if nth
- return 1;
- } // Del Clicked
-
- int UpClicked( void ) {
- /* routine when gadget "Up" is clicked. */
- long nth=GetCurrentListView();
- struct Node *lpn;
-
- if (nth<0) return 1;
- if (0==nth) return 1;
- lpn=ipn->pn_Node.ln_Pred;
-
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- Remove((struct Node *)ipn);
- if (List->lh_Head==lpn) { // insert at top
- AddHead(List,(struct Node *)ipn);
- } else {
- Insert(List,(struct Node *)ipn,lpn->ln_Pred);
- }
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,nth-1,TAG_END);
- return 1;
- } // Up Clicked
-
- int DownClicked( void ) {
- /* routine when gadget "Down" is clicked. */
- long nth=GetCurrentListView();
- long count=ListLength();
- struct ProgNode *lpn;
-
- if (nth<0) return 1;
- if (nth==count-1) return 1;
-
- lpn=(struct ProgNode *)ipn->pn_Node.ln_Succ;
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- Remove((struct Node *)ipn);
- Insert(List,(struct Node *)ipn,(struct Node *)lpn);
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,nth+1,TAG_END);
-
- return 1;
- } // Down Clicked
-
-
- //**** Properties block
-
- int ToolClicked( void ) {
- char *buffer;
- /* routine when gadget "_Tool" is clicked. */
- if (GetCurrentListView()>=0) {
- GT_GetGadgetAttrs(ETMPGadgets[GD_Tool],ETMPWnd,NULL,GTST_String,&buffer,TAG_END);
- pnSetFilename(ipn,buffer);
- }
- return 1;
- } // Tool Clicked
-
- int GetFileClicked( void ) {
- char f[64];
- char d[256];
- char *buffer;
- /* routine when gadget GetFile is clicked. */
- if (GetCurrentListView()>=0) {
- GT_GetGadgetAttrs(ETMPGadgets[GD_Tool],ETMPWnd,NULL,GTST_String,&buffer,TAG_END);
- strcpy(f,buffer);
- GT_GetGadgetAttrs(ETMPGadgets[GD_Drawer],ETMPWnd,NULL,GTST_String,&buffer,TAG_END);
- strcpy(d,buffer);
- if (1==Request_File("Select Tool",f,d)) {
- GT_SetGadgetAttrs(ETMPGadgets[GD_Tool],ETMPWnd,NULL,GTST_String,f,TAG_END);
- GT_SetGadgetAttrs(ETMPGadgets[GD_Drawer],ETMPWnd,NULL,GTST_String,d,TAG_END);
- pnSetFilename(ipn,f);
- pnSetDirectory(ipn,d);
- } // if Request_File
- }
- return 1;
- } // GetFile Clicked
-
- int DrawerClicked( void ) {
- char *buffer;
- /* routine when gadget "_Drawer" is clicked. */
- if (GetCurrentListView()>=0) {
- GT_GetGadgetAttrs(ETMPGadgets[GD_Drawer],ETMPWnd,NULL,GTST_String,&buffer,TAG_END);
- pnSetDirectory(ipn,buffer);
- }
- return 1;
- } // Drawer Clicked
-
- int StackClicked( void ) {
- long value;
- /* routine when gadget "_Stack" is clicked. */
- GT_GetGadgetAttrs(ETMPGadgets[GD_Stack],ETMPWnd,NULL,GTIN_Number,&value,TAG_END);
- if (value<4096) {
- Request_StackLow();
- GT_SetGadgetAttrs(ETMPGadgets[GD_Stack],ETMPWnd,NULL,GTIN_Number,4096L,TAG_END);
- } else {
- if (GetCurrentListView()>=0) {
- ipn->pn_Stack = value;
- } // get list view node
- }
-
- return 1;
- } // Stack clicked
-
- int GetSClicked( void ) {
- /* routine when gadget "Get" is clicked. */
- BPTR oldp,newp;
- struct DiskObject *dobj;
- char *file;
- char *drawer;
- long datum;
-
- if (GetCurrentListView()>=0) {
- GT_GetGadgetAttrs(ETMPGadgets[GD_Tool],ETMPWnd,NULL,GTST_String,&file,TAG_END);
- GT_GetGadgetAttrs(ETMPGadgets[GD_Drawer],ETMPWnd,NULL,GTST_String,&drawer,TAG_END);
-
- if (newp=Lock(drawer,SHARED_LOCK)) {
- if (oldp=CurrentDir(newp)) {
- if (dobj=GetDiskObject(file)) {
- datum=MAX(dobj->do_StackSize,4096);
- ipn->pn_Stack=datum;
- GT_SetGadgetAttrs(ETMPGadgets[GD_Stack],ETMPWnd,NULL,GTIN_Number,datum,TAG_END);
- FreeDiskObject(dobj);
- } else {
- Request_FileTrouble("reading file",file);
- } // if GetDiskObject
- CurrentDir(oldp);
- } else {
- // cannot CD to directory
- } // if CurrentDir
- UnLock(newp);
- } else {
- Request_FileTrouble("accessing drawer",drawer);
- // cannot lock directory
- } // if lock
- }
- return 1;
- } // GetS clicked
-
- int PriClicked( void ) {
- long value;
- /* routine when gadget "_Pri" is clicked. */
- GT_GetGadgetAttrs(ETMPGadgets[GD_Pri],ETMPWnd,NULL,GTIN_Number,&value,TAG_END);
- if ((value<-128) || (value>127) ) {
- Request_PriRange();
- GT_SetGadgetAttrs(ETMPGadgets[GD_Pri],ETMPWnd,NULL,GTIN_Number,0L,TAG_END);
- } else {
- if (GetCurrentListView()>=0) {
- ipn->pn_Priority = value;
- } // get list view node
- }
- return 1;
- } // Pri clicked
-
- int GetPClicked( void ) {
- /* routine when gadget "Get" is clicked. */
- char **toolArray;
- char *value;
- BPTR oldp,newp;
- struct DiskObject *dobj;
- char *file;
- char *drawer;
- long datum=0;
-
- if (GetCurrentListView()>=0) {
- GT_GetGadgetAttrs(ETMPGadgets[GD_Tool],ETMPWnd,NULL,GTST_String,&file,TAG_END);
- GT_GetGadgetAttrs(ETMPGadgets[GD_Drawer],ETMPWnd,NULL,GTST_String,&drawer,TAG_END);
-
- if (newp=Lock(drawer,SHARED_LOCK)) {
- if (oldp=CurrentDir(newp)) {
- if (dobj=GetDiskObject(file)) {
- toolArray=dobj->do_ToolTypes;
- if (value=FindToolType(toolArray,"TOOLPRI")) {
- StrToLong(value,&datum);
- } // if find tool type
- FreeDiskObject(dobj);
- } else {
- Request_FileTrouble("reading file",file);
- } // if GetDiskObject
- CurrentDir(oldp);
- } else {
- // cannot CD to directory
- } // if CurrentDir
- UnLock(newp);
-
- if ( (datum<-128) || (datum>127) ) {
- Request_PriRange();
- GT_SetGadgetAttrs(ETMPGadgets[GD_Pri],ETMPWnd,NULL,GTIN_Number,ipn->pn_Priority,TAG_END);
- } else {
- GT_SetGadgetAttrs(ETMPGadgets[GD_Pri],ETMPWnd,NULL,GTIN_Number,datum,TAG_END);
- ipn->pn_Priority=datum;
- }
-
- } else {
- Request_FileTrouble("accessing drawer",drawer);
- // cannot lock directory
- } // if lock
- }
- return 1;
- } // GetP clicked
-
- int EnvClicked( void ) {
- /* routine when gadget "_Env" is clicked. */
- if (GetCurrentListView()>=0) {
- ipn->pn_LaunchCode = ((ipn->pn_LaunchCode & LC_ARG_MASK) | ((1+ETMPMsg.Code & LC_ARG_MASK)<<4));
- }
- return 1;
- } // EnvClicked
-
- int ArgsClicked( void ) {
- /* routine when gadget "Ar_gs" is clicked. */
- if (GetCurrentListView()>=0) {
- ipn->pn_LaunchCode = ((ipn->pn_LaunchCode & LC_ENV_MASK) | (ETMPMsg.Code & LC_ARG_MASK));
- }
- return 1;
- } // Args Clicked
-
-
- //**** Exit block
-
- int SaveClicked( void ) {
- /* routine when gadget "Save" is clicked. */
- if (1==WriteFile(ToolsFileName)) {
- SignalCX();
- if (1==WriteFile(ToolsArcName)) {
- return 0;
- } else {
- Request_FileTrouble("saveing file",ToolsArcName);
- }
- } else {
- Request_FileTrouble("saveing file",ToolsFileName);
- }
- } // Save Clicked
-
- int UseClicked( void ) {
- /* routine when gadget "Use" is clicked. */
- if (1==WriteFile(ToolsFileName)) {
- SignalCX();
- return 0;
- } else {
- Request_FileTrouble("saveing file",ToolsFileName);
- return 1;
- }
- } // Use Clicked
-
- int CancelClicked( void ) {
- /* routine when gadget "Cancel" is clicked. */
- return 0;
- } // Cancel clicked
-
-
- //**** Menus
-
- int ETMPMENP_OPEN( void ) {
- /* routine when (sub)item "Open..." is selected. */
- char d[321];
- char f[65];
- char *v;
-
- // Deconstruct path
- strcpy(d,ToolsFileName);
- strcpy(f,FilePart(d));
- v=PathPart(d);
- *v=0;
-
- // do requester
- if (1==Request_File("Load Tools File",f,d)) {
- AddPart( d, f, 321L );
- LoadWRTGUI(d);
- } // if request file
- return 1;
- } // Menu Open
-
- int ETMPMENP_SAVE( void ) {
- /* routine when (sub)item "Save As..." is selected. */
- char d[321];
- char f[65];
- char *v;
-
- // Deconstruct path
- strcpy(d,ToolsFileName);
- strcpy(f,FilePart(d));
- v=PathPart(d);
- *v=0;
-
- // do requester
- if (1==Request_File("Save Tools File As",f,d)) {
- AddPart( d, f, 321L );
- if (0==WriteFile(d)) Request_FileTrouble("saveing file",d);
- }
- return 1;
- } // Menu Save As
-
- int ETMPMENP_ABOUT( void ) {
- /* routine when (sub)item "About" is selected. */
- Request_About();
- return 1;
- } // Menu About
-
- int ETMPMENP_QUIT( void ) {
- /* routine when (sub)item "Quit" is selected. */
- return 0;
- } // Menu Quit
-
- int ETMPMENE_DEF( void ) {
- /* routine when (sub)item "Reset To Defaults" is selected. */
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- PropertyAble(FALSE);
- DisplayNode(NULL);
- FreeList(0);
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,0L,TAG_END);
- return 1;
- } // Reset to Defaults
-
- int ETMPMENE_LAST( void ) {
- /* routine when (sub)item "Last Saved" is selected. */
- LoadWRTGUI(ToolsArcName);
- return 1;
- } // Menu Last Saved
-
- int ETMPMENE_REST( void ) {
- /* routine when (sub)item "Restore" is selected. */
- LoadWRTGUI(ToolsFileName);
- return 1;
- } // ETMPMENE_REST
-
- int ETMPMENS_ICON( void ) {
- /* routine when (sub)item "Create Icons?" is selected. */
- return 1;
- } // ETMPMENS_ICON
-
-
- //**** System Gadgets
-
- int ETMPCloseWindow( void ) {
- /* routine for "IDCMP_CLOSEWINDOW". */
- // CX_Hide();
- return 0;
- } // ETMPCloseWindow
-
- //**** Internal Aux Functions
-
- void LoadWRTGUI(char *fname) {
- beginWait(ETMPWnd);
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,~0,TAG_END);
- ReadFile(fname);
- if (0==ListLength()) { // no entries
- PropertyAble(FALSE);
- DisplayNode(NULL);
- } else {
- PropertyAble(TRUE);
- DisplayNode((struct ProgNode *)List->lh_Head);
- }
-
- GT_SetGadgetAttrs(ETMPGadgets[GD_MenuItems],ETMPWnd,NULL,GTLV_Labels,List,GTLV_Selected,0L,TAG_END);
- endWait(ETMPWnd);
- } // LoadWRTGUI
-
- void SignalCX(void) {
- struct Task *t;
- if (t=FindTask("EasyTM")) {
- Signal(t,SIGBREAKF_CTRL_D);
- } // if
- } // SignalCX
-
- //**** End of file
-