/**********************************************************************
 * Bruce Lewis
 * MIT Project Athena
 * Created:  8/1/87
 *
 * $Source: /afs/athena.mit.edu/astaff/project/lucydev/src/RCS/fnmisc.c,v $
 * $Author: brlewis $
 * $Header: /afs/athena.mit.edu/astaff/project/lucydev/src/RCS/fnmisc.c,v 1.1 90/12/18 15:11:06 brlewis Exp Locker: brlewis $
 *
 * Copyright 1987 by the Massachusetts Institute of Technology.
 * For copying and distribution information, see the file
 * "mit-copyright.h".
 *
 * misc module -- contains requests which appear on more than one menu
 **********************************************************************/
#include "mit-copyright.h"

#ifndef lint
static char rcsid_fnmisc_c[] = "$Header: /afs/athena.mit.edu/astaff/project/lucydev/src/RCS/fnmisc.c,v 1.1 90/12/18 15:11:06 brlewis Exp Locker: brlewis $";
#endif /* lint */

#include <stdio.h>
#include <strings.h>
#include "memory.h"

/**********************************************************************
 * system_ls(argc, argv)                                29 July 1988
 *
 * calls /bin/ls with arguments
 **********************************************************************/

system_ls(argc, argv)
     int argc;
     char *argv[];
{
  int i;
  char **newargv;

  newargv = NewArray(char *, argc + 1);
  for(i=0; i<argc; i++)
    newargv[i] = argv[i];
  newargv[argc] = NULL;

  if (vfork() == 0) execv("/bin/ls", newargv);
  else (void) wait(0);
  return;
}

/**********************************************************************
 * system_call(argc, argv)
 *
 * forms string from argv and calls system(string);
 **********************************************************************/

system_call(argc, argv)
     int argc;
     char *argv[];
{
  char *s;
  int i, l = 0;

  /* prepare s to hold string */
  for(i=1; i<argc; i++)
    l += strlen(argv[i]) + 1;
  s = NewArray(char, l);
  *s = '\0';

  /* put arguments in s */
  for(i=1; i<argc; i++) {
    (void) strcat(s, argv[i]);
    (void) strcat(s, " ");
  }
  s[l-1] = '\0';

  (void) system(s);
  return;
}

/**********************************************************************
 * cd(argc, argv)
 *
 * calls chdir
 **********************************************************************/

cd(argc, argv)
     int argc;
     char *argv[];
{
  char *d;

  switch(argc) {
  case 0:          /* case 0 probably redundant, but just in case... */
  case 1:
    if ((d = (char *) getenv("HOME")) == NULL) {
      fprintf(stderr, "%s:  Too few arguments.\n", argv[0]);
      return;
    }
    break;
  case 2:
    d = argv[1];
    break;
  default:
    fprintf(stderr, "%s:  Too many arguments.\n", argv[0]);
    return;
  }
  if (chdir(d) == -1) perror(d);
  return;
}
