home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 6 / Sonderheft_6-96.iso / pd / libraries / wbstart / src / paths.c < prev    next >
C/C++ Source or Header  |  1996-11-03  |  2KB  |  95 lines

  1. /*
  2.  * paths.c  V2.2
  3.  *
  4.  * DOS Paths handling routines
  5.  *
  6.  * (c) 1991-96 Stefan Becker
  7.  *
  8.  */
  9.  
  10. /* Handler includes */
  11. #include "wbstart.h"
  12.  
  13. /* Local data */
  14. static struct Library       *DOSPathBase;
  15. static struct PathListEntry *LoadPath;       /* Path for loading programs    */
  16. static struct PathListEntry *WorkbenchPath;  /* Copy of Workbench path       */
  17. static struct PathListEntry *OldProcessPath; /* Pointer to process' old path */
  18.  
  19. /* Scan load path for program and return directory lock */
  20. BPTR ScanLoadPath(char *name, BPTR currentdir)
  21. {
  22.  BPTR rc;
  23.  
  24.  /* Check current directory first */
  25.  if (rc = Lock(name, ACCESS_READ)) {
  26.  
  27.   DEBUGLOG(kprintf("Program found in current directory\n");)
  28.  
  29.   /* Program found, unlock it */
  30.   UnLock(rc);
  31.  
  32.   /* Return current directory as home directory */
  33.   rc = currentdir;
  34.  
  35.  } else {
  36.   struct PathListEntry *path = LoadPath;
  37.  
  38.   /* Program not found, scan load path */
  39.   rc = FindFileInPathList(&path, name);
  40.  }
  41.  
  42.  /* Return home directory lock */
  43.  return(rc);
  44. }
  45.  
  46. /* Copy path from Workbench process and install it as our process' path */
  47. void InstallWorkbenchPath(void)
  48. {
  49.  struct CommandLineInterface *cli = Cli();
  50.  
  51.  /* Get pointer to our old path */
  52.  OldProcessPath = (struct PathListEntry *) BADDR(cli->cli_CommandDir);
  53.  
  54.  /* Set this path as default load path */
  55.  LoadPath = OldProcessPath;
  56.  
  57.  /* Clear pointer to Workbench path */
  58.  WorkbenchPath = NULL;
  59.  
  60.  /* Open dospath.library */
  61.  if (DOSPathBase = OpenLibrary(DOSPATH_NAME, DOSPATH_VERSION)) {
  62.  
  63.   DEBUGLOG(kprintf("DOSPathBase 0x%08lx\n", DOSPathBase);)
  64.  
  65.   /* Copy workbench path */
  66.   if (WorkbenchPath = CopyWorkbenchPathList(NULL, NULL)) {
  67.  
  68.    DEBUGLOG(kprintf("WorkbenchPath 0x%08lx\n", WorkbenchPath);)
  69.  
  70.    /* Path successfully copied, install it in our process */
  71.    cli->cli_CommandDir = MKBADDR(WorkbenchPath);
  72.  
  73.    /* Use workbench path as load path */
  74.    LoadPath = WorkbenchPath;
  75.   }
  76.  }
  77. }
  78.  
  79. /* Remove Workbench path */
  80. void RemoveWorkbenchPath(void)
  81. {
  82.  /* Copy of Workbench path valid? */
  83.  if (WorkbenchPath) {
  84.  
  85.   /* Yes, reinstall our old path */
  86.   Cli()->cli_CommandDir = MKBADDR(OldProcessPath);
  87.  
  88.   /* Free Workbench Path */
  89.   FreePathList(WorkbenchPath);
  90.  }
  91.  
  92.  /* Close DOSPath library */
  93.  if (DOSPathBase) CloseLibrary(DOSPathBase);
  94. }
  95.