home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 011.lha / tool_wrapper / wrapper.c < prev    next >
C/C++ Source or Header  |  1986-11-10  |  2KB  |  86 lines

  1. /* ToolWrapper.c
  2.    Constructs and executes a CLI command from Workbench messages
  3.    M Abel, August 1986, Foster City, CA 94404
  4. */
  5.  
  6. #define MMOVE(from, to) { register char *fptr; \
  7.                      for (fptr = from; (*to++ = *fptr++) ; ); --to; }
  8.  
  9. #include <exec/types.h>
  10. #include <exec/execbase.h>
  11. #include <exec/memory.h>
  12. #include <workbench/startup.h>
  13. #include <workbench/workbench.h>
  14. #include <workbench/icon.h>
  15. #include <libraries/dosextens.h>
  16. #include <libraries/dos.h>
  17.  
  18.  
  19. LONG *IconBase, *OpenLibrary();
  20. void CloseLibrary();
  21. main(argc,argv)
  22. int argc;
  23. char **argv;
  24.    {
  25.       struct WBStartup *WBenchMsg;
  26.       WBenchMsg = (struct WBStartup *)argv;
  27.       if (argc==0) {
  28.          IconBase = OpenLibrary(ICONNAME, 1L);
  29.          if (IconBase != (long *)NULL) {
  30.             buildCommand(WBenchMsg);
  31.             CloseLibrary(IconBase);
  32.          }
  33.       }
  34.    }
  35.  
  36.  
  37. buildCommand(msg)
  38. struct WBStartup *msg;
  39.    {
  40.       struct WBArg *arg;
  41.  
  42.       register int cp,i,k;
  43.       char c, *pathname, *cli_cmd, *strcpy(), *malloc();
  44.       struct FileHandle *nil_handle, *Open();
  45.  
  46.       cli_cmd  = malloc(512);
  47.       pathname = malloc(512);
  48.  
  49.       arg = msg->sm_ArgList;
  50.       arg++;
  51.       CurrentDir(arg->wa_Lock);
  52.       cp = Find_Tool_Name(arg->wa_Name, cli_cmd);
  53.  
  54.       if (cp > 0 ) {
  55.          for (i=1; i<msg->sm_NumArgs; i++, arg++) {
  56.              mkpath(arg->wa_Lock, pathname);
  57.              cli_cmd[cp++] = ' ';
  58.              for (k = 0; (cli_cmd[cp++] = pathname[k++]     ) ; ) ; --cp;
  59.              for (k = 0; (cli_cmd[cp++] = arg->wa_Name[k++] ) ; ) ; --cp;
  60.           }
  61.           cli_cmd[cp++] = '\0';
  62.  
  63.           nil_handle = Open("nil:", (long)MODE_OLDFILE);
  64.           Execute(cli_cmd, 0L, nil_handle);
  65.  
  66.           Close(nil_handle);
  67.       }
  68.       free(cli_cmd);
  69.       free(pathname);
  70.    }
  71.  
  72. Find_Tool_Name(filename, retval)
  73. char *filename, *retval;
  74. {
  75.    struct DiskObject *diskobj, *GetDiskObject();
  76.    register char *toolname, *temp_ptr;
  77.    char *FindToolType();
  78.  
  79.    diskobj = GetDiskObject(filename);
  80.    toolname = FindToolType(diskobj->do_ToolTypes,"TOOL");
  81.    temp_ptr = retval;
  82.    if (toolname != NULL)  MMOVE(toolname, temp_ptr);
  83.    FreeDiskObject(diskobj);
  84.    return(temp_ptr-retval);
  85. }
  86.