Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
cernlib.c
Go to the documentation of this file.
1//------------------------------------------------------------------------------
2//
3// This file contains the kernlib's package subset needed to build h2root.
4// It cannot be used by any kernlib application because many kernlib
5// functionalities * are missing.
6//
7//------------------------------------------------------------------------------
8
9#ifdef WIN32
10
11#include <io.h>
12typedef long off_t;
13
14#define cfclos_ __stdcall CFCLOS
15#define cfget_ __stdcall CFGET
16#define cfseek_ __stdcall CFSEEK
17#define ishftr_ __stdcall ISHFTR
18#define lshift_ __stdcall LSHIFT
19#define vxinvb_ __stdcall VXINVB
20#define vxinvc_ __stdcall VXINVC
21#define cfopei_ __stdcall CFOPEI
22#define cfstati_ __stdcall CFSTATI
23#define lnblnk_ __stdcall LNBLNK
24
25#else
26#include <unistd.h>
27#endif
28
29#include <stdio.h>
30#include <stdlib.h>
31#include <fcntl.h>
32#include <sys/types.h>
33#include <sys/stat.h>
34
35
36char *fchtak(char *ftext, int lgtext)
37{
38 char *ptalc, *ptuse;
39 char *utext;
40 int nalc;
41 int ntx, jcol;
42
43 nalc = lgtext + 8;
44 ptalc = malloc (nalc);
45 if (ptalc == NULL) goto exit;
46 utext = ftext;
47
48 ptuse = ptalc;
49 ntx = lgtext;
50 for (jcol = 0; jcol < ntx; jcol++) *ptuse++ = *utext++;
51
52 *ptuse = '\0';
53exit: return ptalc;
54}
55
56//------------------------------------------------------------------------------
57
58unsigned int ishftr_(unsigned int *arg, int *len)
59{
60 return(*arg >> *len);
61}
62
63//------------------------------------------------------------------------------
64
65unsigned int lshift_(unsigned int *arg, int *len)
66{
67 return(*arg << *len);
68}
69
70//------------------------------------------------------------------------------
71
72void vxinvb_(int *ixv, int *n)
73{
74 int limit, jloop;
75 int out;
76 unsigned char *n1, *n2;
77 n2 = (unsigned char *) &out;
78 limit = *n;
79 for (jloop = 0; jloop < limit; jloop++) {
80 n1 = (unsigned char *) &ixv[jloop];
81 n2[0] = n1[3];
82 n2[1] = n1[2];
83 n2[2] = n1[1];
84 n2[3] = n1[0];
85 ixv[jloop] = out;
86 }
87 return;
88}
89
90//------------------------------------------------------------------------------
91
92void vxinvc_ (int *iv, int *ixv, int *n)
93{
94 int limit, jloop;
95 int out;
96 unsigned char *n1, *n2;
97 n2 = (unsigned char *) &out;
98 limit = *n;
99 for (jloop = 0; jloop < limit; jloop++) {
100 n1 = (unsigned char *) &iv[jloop];
101 n2[0] = n1[3];
102 n2[1] = n1[2];
103 n2[2] = n1[1];
104 n2[3] = n1[0];
105 ixv[jloop] = out;
106 }
107 return;
108}
109
110//------------------------------------------------------------------------------
111
112void cfget_(int *lundes, int *medium, int *nwrec, int *nwtak, char *mbuf,
113 int *astat)
114{
115 int fildes;
116 int nbdn, nbdo;
117
118 if (medium) { }
119
120 *astat = 0;
121 if (*nwtak <= 0) return;
122
123 fildes = *lundes;
124 nbdo = *nwrec * 4;
125 nbdn = read (fildes, mbuf, nbdo);
126 if (nbdn == 0) goto heof;
127 if (nbdn < 0) goto herror;
128 *nwtak = (nbdn - 1) / 4 + 1;
129 return;
130 heof:
131 *astat = -1;
132 return;
133 herror:
134 *astat = 0;
135 printf ("error in CFGET\n");
136 return;
137}
138
139//------------------------------------------------------------------------------
140
141void cfseek_(int *lundes, int *medium, int *nwrec, int *jcrec, int *astat)
142{
143 int fildes;
144 int nbdo;
145 int isw;
146
147 if (medium) { }
148
149 fildes = *lundes;
150 nbdo = *jcrec * *nwrec * 4;
151 isw = lseek (fildes, nbdo, 0);
152 if (isw < 0) goto trouble;
153 *astat = 0;
154 return;
155
156 trouble:
157 *astat = -1;
158 printf("error in CFSEEK\n");
159}
160
161//------------------------------------------------------------------------------
162
163void cfclos_(int *lundes, int *medium)
164{
165 int fildes;
166 if (medium) { }
167 fildes = *lundes;
168 close (fildes);
169 return;
170}
171
172//------------------------------------------------------------------------------
173#ifdef WIN32
174int cfstati_(char *fname, int lfname, int *info, int *lgname)
175#else
176int cfstati_(char *fname, int *info, int *lgname)
177#endif
178{
179 struct stat buf;
180 char *ptname;
181 int istat = -1;
182 ptname = fchtak(fname,*lgname);
183 if (ptname == ((void *)0)) return -1;
184 istat = stat(ptname, &buf);
185 if (!istat) {
186 info[0] = (int) buf.st_dev;
187 info[1] = (int) buf.st_ino;
188 info[2] = (int) buf.st_mode;
189 info[3] = (int) buf.st_nlink;
190 info[4] = (int) buf.st_uid;
191 info[5] = (int) buf.st_gid;
192 info[6] = (int) buf.st_size;
193#if defined(__APPLE__) || defined(__FreeBSD__)
194 info[7] = (int) buf.st_atimespec.tv_sec;
195 info[8] = (int) buf.st_mtimespec.tv_sec;
196 info[9] = (int) buf.st_ctimespec.tv_sec;
197 info[10] = (int) buf.st_blksize;
198 info[11] = (int) buf.st_blocks;
199#elif defined(_AIX)
200 info[7] = (int) buf.st_atime;
201 info[8] = (int) buf.st_mtime;
202 info[9] = (int) buf.st_ctime;
203 info[10] = (int) buf.st_blksize;
204 info[11] = (int) buf.st_blocks;
205#elif defined(WIN32)
206 info[7] = 0;
207 info[8] = 0;
208 info[9] = 0;
209 info[10] = 0;
210 info[11] = 0;
211#else
212 info[7] = (int) buf.st_atim.tv_sec;
213 info[8] = (int) buf.st_mtim.tv_sec;
214 info[9] = (int) buf.st_ctim.tv_sec;
215 info[10] = (int) buf.st_blksize;
216 info[11] = (int) buf.st_blocks;
217#endif
218 };
219 free(ptname);
220 return istat;
221}
222
223//------------------------------------------------------------------------------
224
226#ifdef WIN32
227void cfopei_(int *lundes, int *medium, int *nwrec, int *mode, int *nbuf,
228 char *ftext, int lftext, int *astat, int *lgtx)
229#else
230void cfopei_(int *lundes, int *medium, int *nwrec, int *mode, int *nbuf,
231 char *ftext, int *astat, int *lgtx)
232#endif
233{
234 char *pttext;
235 int flags = 0;
236 int fildes;
237 int perm;
238 if (nwrec || nbuf) { }
239 *lundes = 0;
240 *astat = -1;
241 perm = cfopen_perm;
242 cfopen_perm = 0;
243 if (*medium == 1) goto fltp;
244 if (*medium == 3) goto fltp;
245 if (mode[0] == 0)
246 {if (mode[1] == 0)
247 flags = 00;
248 else
249 flags = 02;}
250 else if (mode[0] == 1)
251 {if (mode[1] == 0)
252 flags = 01 | 0100 | 01000;
253 else
254 flags = 02 | 0100 | 01000;}
255 else if (mode[0] == 2)
256 {if (mode[1] == 0)
257 flags = 01 | 0100 | 02000;
258 else
259 flags = 02 | 0100 | 02000;}
260 goto act;
261fltp:
262 if (mode[0] == 0)
263 {if (mode[1] == 0)
264 flags = 00;
265 else
266 flags = 02;}
267 else if (mode[0] == 1)
268 {if (mode[1] == 0)
269 flags = 01;
270 else
271 flags = 02;}
272 else if (mode[0] == 2) return;
273act:
274 pttext = fchtak(ftext,*lgtx);
275 if (pttext == 0) return;
276 if (perm == 0) perm = 0644;
277 fildes = open (pttext, flags, perm);
278 if (fildes < 0) goto errm;
279 *lundes = fildes;
280 *astat = 0;
281 goto done;
282errm:
283 *astat = 0;
284 printf("error in CFOPEN\n");
285done:
286 free(pttext);
287 return;
288}
289
290//------------------------------------------------------------------------------
291
292int lnblnk_ (char *chline, int len)
293{
294 char *chcur;
295 chcur = chline + len;
296 while (chcur > chline) { if (*--chcur != ' ') goto exit; }
297 return 0;
298 exit: return chcur+1 - chline;
299}
300
301//------------------------------------------------------------------------------
302
#define NULL
Definition ZInflate.c:15
void cfclos_(int *lundes, int *medium)
Definition cernlib.c:163
void vxinvb_(int *ixv, int *n)
Definition cernlib.c:72
unsigned int ishftr_(unsigned int *arg, int *len)
Definition cernlib.c:58
int cfstati_(char *fname, int *info, int *lgname)
Definition cernlib.c:176
int lnblnk_(char *chline, int len)
Definition cernlib.c:292
void cfget_(int *lundes, int *medium, int *nwrec, int *nwtak, char *mbuf, int *astat)
Definition cernlib.c:112
unsigned int lshift_(unsigned int *arg, int *len)
Definition cernlib.c:65
char * fchtak(char *ftext, int lgtext)
Definition cernlib.c:36
void vxinvc_(int *iv, int *ixv, int *n)
Definition cernlib.c:92
void cfseek_(int *lundes, int *medium, int *nwrec, int *jcrec, int *astat)
Definition cernlib.c:141
void cfopei_(int *lundes, int *medium, int *nwrec, int *mode, int *nbuf, char *ftext, int *astat, int *lgtx)
Definition cernlib.c:230
int cfopen_perm
Definition cernlib.c:225
#define free
Definition civetweb.c:1578
#define malloc
Definition civetweb.c:1575
subroutine ptname(cname, pname)
Definition g2root.f:1117
printf("Client 0: bytes recv = %d, bytes sent = %d\n", s0->GetBytesRecv(), s0->GetBytesSent())
const Int_t n
Definition legend1.C:16
void limit()
Definition limit.C:29
double read()