Arguments.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. /*
  6. Module: Access to program arguments and environment
  7. Author: Ceriel J.H. Jacobs
  8. Version: $Id$
  9. */
  10. extern char **argv, **environ;
  11. extern int argc;
  12. unsigned int _Arguments__Argc;
  13. static char *
  14. findname(s1, s2)
  15. register char *s1, *s2;
  16. {
  17. while (*s1 == *s2++) s1++;
  18. if (*s1 == '\0' && *(s2-1) == '=') return s2;
  19. return 0;
  20. }
  21. static unsigned int
  22. scopy(src, dst, max)
  23. register char *src, *dst;
  24. unsigned int max;
  25. {
  26. register unsigned int i = 0;
  27. while (*src && i <= max) {
  28. i++;
  29. *dst++ = *src++;
  30. }
  31. if (i <= max) {
  32. *dst = '\0';
  33. return i+1;
  34. }
  35. while (*src++) i++;
  36. return i + 1;
  37. }
  38. _Arguments_()
  39. {
  40. _Arguments__Argc = argc;
  41. }
  42. unsigned
  43. _Arguments__Argv(n, argument, l, u, s)
  44. unsigned int u;
  45. char *argument;
  46. {
  47. if (n >= argc) return 0;
  48. return scopy(argv[n], argument, u);
  49. }
  50. unsigned
  51. _Arguments__GetEnv(name, nn, nu, ns, value, l, u, s)
  52. char *name, *value;
  53. unsigned int nu, u;
  54. {
  55. register char **p = environ;
  56. register char *v = 0;
  57. while (*p && !(v = findname(name, *p++))) {
  58. /* nothing */
  59. }
  60. if (!v) return 0;
  61. return scopy(v, value, u);
  62. }