Mercurial > octave-nkf
comparison liboctave/pathsearch.cc @ 1786:b9e8c73e154e
[project @ 1996-01-24 20:36:22 by jwe]
Initial revision
author | jwe |
---|---|
date | Wed, 24 Jan 1996 20:36:22 +0000 |
parents | |
children | 1b57120c997b |
comparison
equal
deleted
inserted
replaced
1785:6109184b054f | 1786:b9e8c73e154e |
---|---|
1 // pathsearch.cc -*- C++ -*- | |
2 /* | |
3 | |
4 Copyright (C) 1996 John W. Eaton | |
5 | |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
10 Free Software Foundation; either version 2, or (at your option) any | |
11 later version. | |
12 | |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with Octave; see the file COPYING. If not, write to the Free | |
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
21 | |
22 */ | |
23 | |
24 #include <cstdlib> | |
25 | |
26 #include <string> | |
27 | |
28 #include "pathsearch.h" | |
29 #include "str-vec.h" | |
30 | |
31 extern "C" | |
32 { | |
33 // Have to redefine these because they conflict with new C++ keywords | |
34 // or otherwise cause trouble... | |
35 #define boolean kpse_boolean | |
36 #define true kpse_true | |
37 #define false kpse_false | |
38 #define string kpse_string | |
39 | |
40 #include <kpathsea/pathsearch.h> | |
41 | |
42 extern unsigned int kpathsea_debug; | |
43 | |
44 #undef true | |
45 #undef false | |
46 #undef boolean | |
47 #undef string | |
48 } | |
49 | |
50 bool dir_path::kpathsea_debug_initialized = false; | |
51 | |
52 string_vector | |
53 dir_path::elements (void) | |
54 { | |
55 return initialized ? pv : string_vector (); | |
56 } | |
57 | |
58 string_vector | |
59 dir_path::all_directories (void) | |
60 { | |
61 int count = 0; | |
62 string_vector retval; | |
63 | |
64 if (initialized) | |
65 { | |
66 int len = pv.length (); | |
67 | |
68 int nmax = len > 32 ? len : 32; | |
69 | |
70 retval.resize (len); | |
71 | |
72 for (int i = 0; i < len; i++) | |
73 { | |
74 str_llist_type *elt_dirs = kpse_element_dirs (pv[i].c_str ()); | |
75 | |
76 str_llist_elt_type *dir; | |
77 for (dir = *elt_dirs; dir; dir = STR_LLIST_NEXT (*dir)) | |
78 { | |
79 char *elt_dir = STR_LLIST (*dir); | |
80 | |
81 if (elt_dir) | |
82 { | |
83 if (count == nmax) | |
84 nmax *= 2; | |
85 | |
86 retval.resize (nmax); | |
87 | |
88 retval[count++] = elt_dir; | |
89 } | |
90 } | |
91 } | |
92 | |
93 retval.resize (count); | |
94 } | |
95 | |
96 return retval; | |
97 } | |
98 | |
99 string | |
100 dir_path::find_first (const string& nm) | |
101 { | |
102 string retval; | |
103 | |
104 if (initialized) | |
105 { | |
106 char *tmp = kpse_path_search (p.c_str (), nm.c_str (), | |
107 kpse_true); | |
108 if (tmp) | |
109 { | |
110 retval = tmp; | |
111 free (tmp); | |
112 } | |
113 } | |
114 | |
115 return retval; | |
116 } | |
117 | |
118 string_vector | |
119 dir_path::find_all (const string& nm) | |
120 { | |
121 string_vector retval; | |
122 | |
123 kpse_string *tmp = kpse_all_path_search (p.c_str (), nm.c_str ()); | |
124 | |
125 if (tmp) | |
126 { | |
127 int count = 0; | |
128 kpse_string *ptr = tmp; | |
129 while (*ptr++) | |
130 count++; | |
131 | |
132 retval.resize (count); | |
133 | |
134 for (int i = 0; i < count; i++) | |
135 retval[i] = *tmp[i]; | |
136 } | |
137 | |
138 return retval; | |
139 } | |
140 | |
141 void | |
142 dir_path::init (void) | |
143 { | |
144 initialized = false; | |
145 | |
146 if (! kpathsea_debug_initialized) | |
147 { | |
148 char *s = getenv ("KPATHSEA_DEBUG"); | |
149 | |
150 if (s) | |
151 kpathsea_debug |= atoi (s); | |
152 } | |
153 | |
154 int count = 0; | |
155 char *path_elt = kpse_path_element (p.c_str ()); | |
156 while (path_elt) | |
157 { | |
158 path_elt = kpse_path_element (0); | |
159 count++; | |
160 } | |
161 | |
162 pv.resize (count); | |
163 | |
164 path_elt = kpse_path_element (p.c_str ()); | |
165 | |
166 for (int i = 0; i < count; i++) | |
167 { | |
168 pv[i] = path_elt; | |
169 path_elt = kpse_path_element (0); | |
170 } | |
171 | |
172 initialized = true; | |
173 } | |
174 | |
175 /* | |
176 ;;; Local Variables: *** | |
177 ;;; mode: C++ *** | |
178 ;;; page-delimiter: "^/\\*" *** | |
179 ;;; End: *** | |
180 */ |