aboutsummaryrefslogtreecommitdiff
path: root/unix/os/zfxdir.c
blob: af3373f946ba15aca14e0a4f50c61b60ce13141b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
 */

#include <stdio.h>
#include <ctype.h>
#define import_spp
#define	import_kernel
#define import_knames
#include <iraf.h>

/* ZFXDIR -- Extract OS directory prefix from OSFN.  The null string is
 * returned if there is no directory prefix.  The status value is the number
 * of characters in the output string.
 */
int
ZFXDIR (
  XCHAR	 *osfn,			/* OS filename		[NOT PACKED]	*/
  XCHAR	 *osdir, 		/* receives osdir	[NOT PACKED]	*/
  XINT	 *maxch, 
  XINT   *nchars
)
{
	register XCHAR	*ip, *op;
	register int	n = *maxch;
	XCHAR	*last_slash;


	for (ip=osfn;  *ip == ' ';  ip++)
	    ;

	/* A UNIX pathname must begin with a / (anything else is considered an
	 * IRAF pathname).  The OSDIR part includes everything up to the
	 * rightmost /.  A string of the form "/name" has the directory prefix
	 * "/", i.e. "name" is considered a filename not a subdirectory name.
	 */
	last_slash = NULL;
	op = osdir;

	if (*ip == '/')
	    for (;  --n >= 0 && (*op = *ip++);  op++)
		if (*op == '/')
		    last_slash = op;

	if (last_slash != NULL)
	    op = last_slash + 1;

	*op = XEOS;
	*nchars = op - osdir;

	return (XOK);
}