5c0f3cc26fd2613fa558f9f9c6978c1c59ec3973
[alioth/jupp.git] / path.h
1 /*
2  *      Directory and path functions
3  *      Copyright
4  *              (C) 1992 Joseph H. Allen
5  *
6  *      This file is part of JOE (Joe's Own Editor)
7  */
8 #ifndef _JOE_PATH_H
9 #define _JOE_PATH_H 1
10
11 #ifdef EXTERN
12 __RCSID("$MirOS: contrib/code/jupp/path.h,v 1.12 2017/12/02 02:07:29 tg Exp $");
13 #endif
14
15 #if defined(__MSDOS__) || defined(__DJGPP__) || defined(__EMX__) || \
16     defined(__CYGWIN__) || defined(_WIN32)
17 /*XXX check this for all platforms */
18 #define HAVE_BACKSLASH_PATHS 1
19 #define HAVE_DRIVE_LETTERS 1
20 #else
21 #define HAVE_BACKSLASH_PATHS 0
22 #define HAVE_DRIVE_LETTERS 0
23 #endif
24
25 #if HAVE_BACKSLASH_PATHS
26 unsigned char *joesep PARAMS((unsigned char *path));
27 #else
28 #define joesep(path) (path)
29 #endif
30
31 #if JUPP_WIN32RELOC
32 extern unsigned char has_JOERC, *get_JOERC;
33 void init_JOERC PARAMS((void));
34 #else
35 #define has_JOERC       1
36 #define get_JOERC       JOERC
37 #define init_JOERC()    /* nothing */
38 #endif
39
40 /* char *namprt(char *path);
41  * Return name part of a path.  There is no name if the last character
42  * in the path is '/'.
43  *
44  * The name part of "/hello/there" is "there"
45  * The name part of "/hello/" is ""
46  * The name part if "/" is ""
47  */
48 unsigned char *namprt PARAMS((unsigned char *path));
49 unsigned char *namepart PARAMS((unsigned char *tmp, unsigned char *path))
50     ATTR_BOUNDED((__minbytes__,1,1024));
51
52 /* char *dirprt(char *path);
53  * Return directory and drive part of a path.  I.E., everything to the
54  * left of the name part.
55  *
56  * The directory part of "/hello/there" is "/hello/"
57  * The directory part of "/hello/" is "/hello/"
58  * The directory part of "/" is "/"
59  *
60  * dirprt_ptr points to just beyond what dirprt returns.
61  */
62 unsigned char *dirprt PARAMS((unsigned char *path));
63 unsigned char *dirprt_ptr PARAMS((unsigned char *path));
64
65 /* char *begprt(char *path);
66  * Return the beginning part of a path.
67  *
68  * The beginning part of "/hello/there" is "/hello/"
69  * The beginning part of "/hello/" is "/"
70  * The beginning part of "/" is "/"
71  */
72 unsigned char *begprt PARAMS((unsigned char *path));
73
74 /* char *endprt(char *path);
75  * Return the ending part of a path.
76  *
77  * The ending part of "/hello/there" is "there"
78  * The ending part of "/hello/" is "hello/"
79  * The ending part of "/" is ""
80  */
81 unsigned char *endprt PARAMS((unsigned char *path));
82
83 /* int mkpath(char *path);
84  * Make sure path exists.  If it doesn't, try to create it
85  *
86  * Returns 1 for error or 0 for success.  The current directory
87  * and drive will be at the given path if successful, otherwise
88  * the drive and path will be elsewhere (not necessarily where they
89  * were before mkpath was called).
90  */
91 int mkpath PARAMS((unsigned char *path));
92
93 /* char *mktmp(char *, int *);
94  * Create an empty temporary file.  The file name created is the string passed
95  * to this function postfixed with /joe.tmp.XXXXXX, where XXXXXX is some
96  * string six chars long which makes this file unique.
97  * If second argument is not NULL, fd is kept open and stored there.
98 */
99 unsigned char *mktmp PARAMS((unsigned char *where, int *fdp));
100
101 /* Change drive and directory */
102 #define chddir chdir
103
104 /* int rmatch(char *pattern,char *string);
105  * Return true if string matches pattern
106  *
107  * Pattern is:
108  *     *                 matches 0 or more charcters
109  *     ?                 matches any 1 character
110  *     [...]             matches 1 character in set
111  *     [^...]            matches 1 character not in set
112  *     [[]               matches [
113  *     [*]               matches *
114  *     [?]               matches ?
115  *     any other         matches self
116  *
117  *  Ranges of characters may be specified in sets with 'A-B'
118  *  '-' may be specified in sets by placing it at the ends
119  *  '[' may be specified in sets by placing it first
120  */
121 int rmatch PARAMS((unsigned char *a, unsigned char *b));
122 int isreg PARAMS((unsigned char *s));
123
124 /* char **rexpnd(char *path,char *pattern);
125  * Generate array (see va.h) of file names from directory in 'path'
126  * which match the pattern 'pattern'
127  */
128 unsigned char **rexpnd PARAMS((unsigned char *word));
129
130 int chJpwd PARAMS((const unsigned char *path));
131 int chpwd PARAMS((const unsigned char *path));
132 unsigned char *pwd PARAMS((void));
133
134 #endif