home *** CD-ROM | disk | FTP | other *** search
- /* ToolWrapper.c
- Constructs and executes a CLI command from Workbench messages
- M Abel, August 1986, Foster City, CA 94404
- */
-
- #define MMOVE(from, to) { register char *fptr; \
- for (fptr = from; (*to++ = *fptr++) ; ); --to; }
-
- #include <exec/types.h>
- #include <exec/execbase.h>
- #include <exec/memory.h>
- #include <workbench/startup.h>
- #include <workbench/workbench.h>
- #include <workbench/icon.h>
- #include <libraries/dosextens.h>
- #include <libraries/dos.h>
-
-
- LONG *IconBase, *OpenLibrary();
- void CloseLibrary();
- main(argc,argv)
- int argc;
- char **argv;
- {
- struct WBStartup *WBenchMsg;
- WBenchMsg = (struct WBStartup *)argv;
- if (argc==0) {
- IconBase = OpenLibrary(ICONNAME, 1L);
- if (IconBase != (long *)NULL) {
- buildCommand(WBenchMsg);
- CloseLibrary(IconBase);
- }
- }
- }
-
-
- buildCommand(msg)
- struct WBStartup *msg;
- {
- struct WBArg *arg;
-
- register int cp,i,k;
- char c, *pathname, *cli_cmd, *strcpy(), *malloc();
- struct FileHandle *nil_handle, *Open();
-
- cli_cmd = malloc(512);
- pathname = malloc(512);
-
- arg = msg->sm_ArgList;
- arg++;
- CurrentDir(arg->wa_Lock);
- cp = Find_Tool_Name(arg->wa_Name, cli_cmd);
-
- if (cp > 0 ) {
- for (i=1; i<msg->sm_NumArgs; i++, arg++) {
- mkpath(arg->wa_Lock, pathname);
- cli_cmd[cp++] = ' ';
- for (k = 0; (cli_cmd[cp++] = pathname[k++] ) ; ) ; --cp;
- for (k = 0; (cli_cmd[cp++] = arg->wa_Name[k++] ) ; ) ; --cp;
- }
- cli_cmd[cp++] = '\0';
-
- nil_handle = Open("nil:", (long)MODE_OLDFILE);
- Execute(cli_cmd, 0L, nil_handle);
-
- Close(nil_handle);
- }
- free(cli_cmd);
- free(pathname);
- }
-
- Find_Tool_Name(filename, retval)
- char *filename, *retval;
- {
- struct DiskObject *diskobj, *GetDiskObject();
- register char *toolname, *temp_ptr;
- char *FindToolType();
-
- diskobj = GetDiskObject(filename);
- toolname = FindToolType(diskobj->do_ToolTypes,"TOOL");
- temp_ptr = retval;
- if (toolname != NULL) MMOVE(toolname, temp_ptr);
- FreeDiskObject(diskobj);
- return(temp_ptr-retval);
- }
-