#include "defs.h"#include "usignal.h"#include "sysdep.hd"Include dependency graph for sysdep.c:

Go to the source code of this file.
Defines | |
| #define | Cextern extern |
| #define | L_TDNAME 20 |
Functions | |
| Cextern int unlink | Argdcl ((const char *)) |
| Cextern int fork | Argdcl ((void)) |
| Cextern int fork getpid wait | Argdcl ((int *)) |
| void | Un_link_all (int cdelete) |
| static void | rmtdir (Void) |
| static void | alloc_names (Void) |
| void | set_tmp_names (Void) |
| char * | c_name (char *s, int ft) |
| static void | killed (int sig) |
| static void | sig1catch (int sig) |
| static void | flovflo (int sig) |
| void | sigcatch (int sig) |
| void | argkludge (int *pargc, char ***pargv) |
| int | dofork (char *fname) |
| void | fmt_init (Void) |
| void | outbuf_adjust (Void) |
| static int | compare (const void *a, const void *b) |
| int | dsort (char *from, char *to) |
Variables | |
| char | binread [] = "rb" |
| char | textread [] = "r" |
| char | binwrite [] = "wb" |
| char | textwrite [] = "w" |
| char * | c_functions = "c_functions" |
| char * | coutput = "c_output" |
| char * | initfname = "raw_data" |
| char * | initbname = "raw_data.b" |
| char * | blkdfname = "block_data" |
| char * | p1_file = "p1_file" |
| char * | p1_bakfile = "p1_file.BAK" |
| char * | sortfname = "init_file" |
| char * | proto_fname = "proto_file" |
| char | link_msg [] |
| char * | outbuf = "" |
| char * | outbtail |
| char * | tmpdir = "" |
| char | escapes [Table_size] |
| char * | str_fmt [Table_size] |
| char * | chr_fmt [Table_size] |
| #define L_TDNAME 20 |
Referenced by set_tmp_names().
| static void alloc_names | ( | Void | ) | [static] |
Definition at line 128 of file sysdep.c.
References blkdfname, c_functions, ckalloc(), initbname, initfname, p1_bakfile, p1_file, sortfname, and tmpdir.
Referenced by set_tmp_names().
00129 { 00130 int k = strlen(tmpdir) + 24; 00131 c_functions = (char *)ckalloc(7*k); 00132 initfname = c_functions + k; 00133 initbname = initfname + k; 00134 blkdfname = initbname + k; 00135 p1_file = blkdfname + k; 00136 p1_bakfile = p1_file + k; 00137 sortfname = p1_bakfile + k; 00138 }
Here is the call graph for this function:

Here is the caller graph for this function:

| Cextern int fork Argdcl | ( | (void) | ) |
| Cextern int unlink Argdcl | ( | (const char *) | ) |
| void argkludge | ( | int * | pargc, | |
| char *** | pargv | |||
| ) |
Definition at line 357 of file sysdep.c.
References a, Alloc(), i, L, t, and t0.
Referenced by main().
00359 { 00360 #ifdef WANT_spawnvp 00361 size_t L, L1; 00362 int argc, i, nf; 00363 char **a, **argv, *s, *t, *t0; 00364 00365 /* Assume wild-card expansion has been done by Microsoft's setargv.obj */ 00366 00367 /* Count Fortran input files. */ 00368 00369 L = argc = *pargc; 00370 argv = *pargv; 00371 for(i = nf = 0; i < argc; i++) { 00372 L += L1 = strlen(s = argv[i]); 00373 if (L1 > 2 && s[L1-2] == '.') 00374 switch(s[L1-1]) { 00375 case 'f': 00376 case 'F': 00377 nf++; 00378 } 00379 } 00380 if (nf <= 1) 00381 return; 00382 00383 /* Cache inputs */ 00384 00385 i = argc - nf + 2; 00386 a = spargv = (char**)Alloc(i*sizeof(char*) + L); 00387 t = (char*)(a + i); 00388 for(i = 0; i < argc; i++) { 00389 *a++ = t0 = t; 00390 for(s = argv[i]; *t++ = *s; s++); 00391 if (t-t0 > 3 && s[-2] == '.') 00392 switch(s[-1]) { 00393 case 'f': 00394 case 'F': 00395 --a; 00396 t = t0; 00397 } 00398 } 00399 pfname = a++; 00400 *a = 0; 00401 #endif 00402 }
Here is the call graph for this function:

Here is the caller graph for this function:

| char* c_name | ( | char * | s, | |
| int | ft | |||
| ) |
Definition at line 258 of file sysdep.c.
References b, copys(), Fatal(), infname, outbtail, and outbuf.
Referenced by main().
00260 { 00261 char *b, *s0; 00262 int c; 00263 00264 b = s0 = s; 00265 while(c = *s++) 00266 if (c == '/') 00267 b = s; 00268 if (--s < s0 + 3 || s[-2] != '.' 00269 || ((c = *--s) != 'f' && c != 'F')) { 00270 infname = s0; 00271 Fatal("file name must end in .f or .F"); 00272 } 00273 strcpy(outbtail, b); 00274 outbtail[s-b] = ft; 00275 b = copys(outbuf); 00276 return b; 00277 }
Here is the call graph for this function:

Here is the caller graph for this function:

| static int compare | ( | const void * | a, | |
| const void * | b | |||
| ) | [static] |
Definition at line 610 of file sysdep.c.
Referenced by readwrite_map().
Here is the caller graph for this function:

| int dofork | ( | char * | fname | ) |
Definition at line 408 of file sysdep.c.
References Fatal(), retcode, and w.
Referenced by main().
00410 { 00411 extern int retcode; 00412 #ifdef MSDOS 00413 #ifdef WANT_spawnvp 00414 *pfname = fname; 00415 retcode |= _spawnvp(_P_WAIT, spargv[0], (char const*const*)spargv); 00416 #else /*_WIN32*/ 00417 Fatal("Only one Fortran input file allowed under MS-DOS"); 00418 #endif /*_WIN32*/ 00419 #else 00420 int pid, status, w; 00421 00422 if (!(pid = fork())) 00423 return 1; 00424 if (pid == -1) 00425 Fatal("bad fork"); 00426 while((w = wait(&status)) != pid) 00427 if (w == -1) 00428 Fatal("bad wait code"); 00429 retcode |= status >> 8; 00430 #endif 00431 return 0; 00432 }
Here is the call graph for this function:

Here is the caller graph for this function:

| int dsort | ( | char * | from, | |
| char * | to | |||
| ) |
Definition at line 620 of file sysdep.c.
References Alloc(), buf, clf(), done, f(), mb, memcpy(), n, opf(), textread, textwrite, x, and z.
Referenced by cleanup(), DrawMerge3d(), fac3dn(), init_agenda(), list_init_data(), and sci_glue().
00622 { 00623 struct Memb { 00624 struct Memb *next; 00625 int n; 00626 char buf[32000]; 00627 }; 00628 typedef struct Memb memb; 00629 memb *mb, *mb1; 00630 register char *x, *x0, *xe; 00631 register int c, n; 00632 FILE *f; 00633 char **z, **z0; 00634 int nn = 0; 00635 00636 f = opf(from, textread); 00637 mb = (memb *)Alloc(sizeof(memb)); 00638 mb->next = 0; 00639 x0 = x = mb->buf; 00640 xe = x + sizeof(mb->buf); 00641 n = 0; 00642 for(;;) { 00643 c = getc(f); 00644 if (x >= xe && (c != EOF || x != x0)) { 00645 if (!n) 00646 return 126; 00647 nn += n; 00648 mb->n = n; 00649 mb1 = (memb *)Alloc(sizeof(memb)); 00650 mb1->next = mb; 00651 mb = mb1; 00652 memcpy(mb->buf, x0, n = x-x0); 00653 x0 = mb->buf; 00654 x = x0 + n; 00655 xe = x0 + sizeof(mb->buf); 00656 n = 0; 00657 } 00658 if (c == EOF) 00659 break; 00660 if (c == '\n') { 00661 ++n; 00662 *x++ = 0; 00663 x0 = x; 00664 } 00665 else 00666 *x++ = c; 00667 } 00668 clf(&f, from, 1); 00669 f = opf(to, textwrite); 00670 if (x > x0) { /* shouldn't happen */ 00671 *x = 0; 00672 ++n; 00673 } 00674 mb->n = n; 00675 nn += n; 00676 if (!nn) /* shouldn't happen */ 00677 goto done; 00678 z = z0 = (char **)Alloc(nn*sizeof(char *)); 00679 for(mb1 = mb; mb1; mb1 = mb1->next) { 00680 x = mb1->buf; 00681 n = mb1->n; 00682 for(;;) { 00683 *z++ = x; 00684 if (--n <= 0) 00685 break; 00686 while(*x++); 00687 } 00688 } 00689 qsort((char *)z0, nn, sizeof(char *), compare); 00690 for(n = nn, z = z0; n > 0; n--) 00691 fprintf(f, "%s\n", *z++); 00692 free((char *)z0); 00693 done: 00694 clf(&f, to, 1); 00695 do { 00696 mb1 = mb->next; 00697 free((char *)mb); 00698 } 00699 while(mb = mb1); 00700 return 0; 00701 }
Here is the call graph for this function:

Here is the caller graph for this function:

| static void flovflo | ( | int | sig | ) | [static] |
Definition at line 318 of file sysdep.c.
References Fatal().
Referenced by sigcatch().
00320 { 00321 sig = sig; /* shut up warning */ 00322 Fatal("floating exception during constant evaluation; cannot recover"); 00323 /* vax returns a reserved operand that generates 00324 an illegal operand fault on next instruction, 00325 which if ignored causes an infinite loop. 00326 */ 00327 signal(SIGFPE, flovflo); 00328 }
Here is the call graph for this function:

Here is the caller graph for this function:

| void fmt_init | ( | Void | ) |
Definition at line 487 of file sysdep.c.
References Alloc(), Ansi, i, j, and Table_size.
Referenced by fileinit().
00488 { 00489 static char *str1fmt[6] = 00490 { "\\b", "\\t", "\\n", "\\f", "\\r", "\\013" }; 00491 register int i, j; 00492 register char *s; 00493 00494 /* str_fmt */ 00495 00496 #ifdef non_ASCII 00497 i = 0; 00498 #else 00499 i = 127; 00500 #endif 00501 s = Alloc(5*(Table_size - i)); 00502 for(; i < Table_size; i++) { 00503 sprintf(str_fmt[i] = s, "\\%03o", i); 00504 s += 5; 00505 } 00506 #ifdef non_ASCII 00507 for(i = 32; i < 127; i++) { 00508 s = str0fmt[i]; 00509 str_fmt[*(unsigned char *)s] = s; 00510 } 00511 str_fmt['"'] = "\\\""; 00512 #else 00513 if (Ansi == 1) 00514 str_fmt[7] = chr_fmt[7] = "\\a"; 00515 #endif 00516 00517 /* chr_fmt */ 00518 00519 #ifdef non_ASCII 00520 for(i = 0; i < 32; i++) 00521 chr_fmt[i] = chr0fmt[i]; 00522 #else 00523 i = 127; 00524 #endif 00525 for(; i < Table_size; i++) 00526 chr_fmt[i] = "\\%o"; 00527 #ifdef non_ASCII 00528 for(i = 32; i < 127; i++) { 00529 s = chr0fmt[i]; 00530 j = *(unsigned char *)s; 00531 if (j == '\\') 00532 j = *(unsigned char *)(s+1); 00533 chr_fmt[j] = s; 00534 } 00535 #endif 00536 00537 /* escapes (used in lex.c) */ 00538 00539 for(i = 0; i < Table_size; i++) 00540 escapes[i] = i; 00541 for(s = "btnfr0", i = 0; i < 6; i++) 00542 escapes[*(unsigned char *)s++] = "\b\t\n\f\r"[i]; 00543 /* finish str_fmt and chr_fmt */ 00544 00545 if (Ansi) 00546 str1fmt[5] = "\\v"; 00547 if ('\v' == 'v') { /* ancient C compiler */ 00548 str1fmt[5] = "v"; 00549 #ifndef non_ASCII 00550 escapes['v'] = 11; 00551 #endif 00552 } 00553 else 00554 escapes['v'] = '\v'; 00555 for(s = "\b\t\n\f\r\v", i = 0; j = *(unsigned char *)s++;) 00556 str_fmt[j] = chr_fmt[j] = str1fmt[i++]; 00557 /* '\v' = 11 for both EBCDIC and ASCII... */ 00558 chr_fmt[11] = (char*)(Ansi ? "\\v" : "\\13"); 00559 }
Here is the call graph for this function:

Here is the caller graph for this function:

| static void killed | ( | int | sig | ) | [static] |
Definition at line 284 of file sysdep.c.
References SIGHUP, SIGQUIT, and Un_link_all().
Referenced by sig1catch().
00286 { 00287 sig = sig; /* shut up warning */ 00288 signal(SIGINT, SIG_IGN); 00289 #ifdef SIGQUIT 00290 signal(SIGQUIT, SIG_IGN); 00291 #endif 00292 #ifdef SIGHUP 00293 signal(SIGHUP, SIG_IGN); 00294 #endif 00295 signal(SIGTERM, SIG_IGN); 00296 Un_link_all(1); 00297 exit(126); 00298 }
Here is the call graph for this function:

Here is the caller graph for this function:

| void outbuf_adjust | ( | Void | ) |
Definition at line 562 of file sysdep.c.
References Alloc(), n, n1, outbtail, and outbuf.
Referenced by main().
00563 { 00564 int n, n1; 00565 char *s; 00566 00567 n = n1 = strlen(outbuf); 00568 if (*outbuf && outbuf[n-1] != '/') 00569 n1++; 00570 s = Alloc(n+64); 00571 outbtail = s + n1; 00572 strcpy(s, outbuf); 00573 if (n != n1) 00574 strcpy(s+n, "/"); 00575 outbuf = s; 00576 }
Here is the call graph for this function:

Here is the caller graph for this function:

| static void rmtdir | ( | Void | ) | [static] |
| void set_tmp_names | ( | Void | ) |
Definition at line 141 of file sysdep.c.
References alloc_names(), atexit(), blkdfname, buf, c_functions, close(), debugflag, diagfile, f(), getpid(), i, initbname, initfname, L_TDNAME, NULL, p1_bakfile, p1_file, rmtdir(), s, sortfname, t, tmpdir, and tmpnam().
Referenced by main().
00142 { 00143 #ifdef MSDOS 00144 char buf[64], *s, *t; 00145 #ifdef _WIN32 00146 DWORD flags, maxlen, volser; 00147 char volname[512], f2c[24], fsname[512]; 00148 int i; 00149 00150 if (debugflag == 1) 00151 return; 00152 i = sprintf(f2c, "%x", _getpid()); 00153 if (!GetVolumeInformation(NULL, volname, sizeof(volname), &volser, &maxlen, 00154 &flags, fsname, sizeof(fsname)) 00155 || maxlen < (DWORD)(i+8)) /* FAT16 */ 00156 strcpy(f2c, "f2c_"); 00157 #else 00158 static char f2c[] = "f2c_"; 00159 if (debugflag == 1) 00160 return; 00161 #endif 00162 00163 if (!*tmpdir || *tmpdir == '.' && !tmpdir[1]) 00164 t = ""; 00165 else { 00166 /* substitute \ for / to avoid confusion with a 00167 * switch indicator in the system("sort ...") 00168 * call in formatdata.c 00169 */ 00170 for(s = tmpdir, t = buf; *s; s++, t++) 00171 if ((*t = *s) == '/') 00172 *t = '\\'; 00173 if (t[-1] != '\\') 00174 *t++ = '\\'; 00175 *t = 0; 00176 t = buf; 00177 } 00178 alloc_names(); 00179 sprintf(c_functions, "%s%sfunc", t, f2c); 00180 sprintf(initfname, "%s%srd", t, f2c); 00181 sprintf(blkdfname, "%s%sblkd", t, f2c); 00182 sprintf(p1_file, "%s%sp1f", t, f2c); 00183 sprintf(p1_bakfile, "%s%sp1fb", t, f2c); 00184 sprintf(sortfname, "%s%ssort", t, f2c); 00185 #else 00186 long pid; 00187 00188 #define L_TDNAME 20 00189 #ifdef NO_MKDTEMP 00190 #ifdef NO_MKSTEMP 00191 #undef L_TDNAME 00192 #define L_TDNAME L_tmpnam 00193 #endif 00194 #endif 00195 static char tdbuf[L_TDNAME]; 00196 00197 if (debugflag == 1) 00198 return; 00199 pid = getpid(); 00200 if (!*tmpdir) { 00201 #ifdef NO_TEMPDIR 00202 tmpdir = "/tmp"; 00203 #else 00204 #ifdef NO_MKDTEMP 00205 #ifdef NO_MKSTEMP 00206 if (!(tmpdir = tmpnam(tdbuf))) { 00207 fprintf(stderr, "tmpnam failed (for -T)\n"); 00208 exit(1); 00209 } 00210 #else 00211 int f; 00212 strcpy(tdbuf, "/tmp/f2ctd_XXXXXX"); 00213 f = mkstemp(tdbuf); 00214 if (f >= 0) { 00215 close(f); 00216 remove(tmpdir = tdbuf); 00217 } 00218 else { 00219 fprintf(stderr, "mkstemp failed (for -T)\n"); 00220 exit(1); 00221 } 00222 #endif /*NO_MKSTEMP*/ 00223 if (mkdir(tdbuf,0700)) { 00224 fprintf(stderr, "mkdir failed (for -T)\n"); 00225 exit(1); 00226 } 00227 #else 00228 strcpy(tdbuf, "/tmp/f2ctd_XXXXXX"); 00229 if (!(tmpdir = mkdtemp(tdbuf))) { 00230 fprintf(stderr, "mkdtemp failed (for -T)\n"); 00231 exit(1); 00232 } 00233 #endif /*NO_MKDTEMP*/ 00234 if (!debugflag) 00235 atexit(rmtdir); 00236 #endif /*NO_TEMPDIR*/ 00237 } 00238 alloc_names(); 00239 sprintf(c_functions, "%s/f2c%ld_func", tmpdir, pid); 00240 sprintf(initfname, "%s/f2c%ld_rd", tmpdir, pid); 00241 sprintf(blkdfname, "%s/f2c%ld_blkd", tmpdir, pid); 00242 sprintf(p1_file, "%s/f2c%ld_p1f", tmpdir, pid); 00243 sprintf(p1_bakfile, "%s/f2c%ld_p1fb", tmpdir, pid); 00244 sprintf(sortfname, "%s/f2c%ld_sort", tmpdir, pid); 00245 #endif /*MSDOS*/ 00246 sprintf(initbname, "%s.b", initfname); 00247 if (debugflag) 00248 fprintf(diagfile, "%s %s %s %s %s %s\n", c_functions, 00249 initfname, blkdfname, p1_file, p1_bakfile, sortfname); 00250 }
Here is the call graph for this function:

Here is the caller graph for this function:

| static void sig1catch | ( | int | sig | ) | [static] |
Definition at line 305 of file sysdep.c.
References killed().
Referenced by sigcatch().
00307 { 00308 sig = sig; /* shut up warning */ 00309 if (signal(sig, SIG_IGN) != SIG_IGN) 00310 signal(sig, killed); 00311 }
Here is the call graph for this function:

Here is the caller graph for this function:

| void sigcatch | ( | int | sig | ) |
Definition at line 335 of file sysdep.c.
References flovflo(), sig1catch(), SIGHUP, and SIGQUIT.
Referenced by main().
00337 { 00338 sig = sig; /* shut up warning */ 00339 sig1catch(SIGINT); 00340 #ifdef SIGQUIT 00341 sig1catch(SIGQUIT); 00342 #endif 00343 #ifdef SIGHUP 00344 sig1catch(SIGHUP); 00345 #endif 00346 sig1catch(SIGTERM); 00347 signal(SIGFPE, flovflo); /* catch overflows */ 00348 }
Here is the call graph for this function:

Here is the caller graph for this function:

| void Un_link_all | ( | int | cdelete | ) |
Definition at line 95 of file sysdep.c.
References blkdfname, c_functions, coutput, debugflag, initfname, p1_file, sortfname, and unlink().
Referenced by done(), and killed().
00097 { 00098 if (!debugflag) { 00099 unlink(c_functions); 00100 unlink(initfname); 00101 unlink(p1_file); 00102 unlink(sortfname); 00103 unlink(blkdfname); 00104 if (cdelete && coutput) 00105 unlink(coutput); 00106 } 00107 }
Here is the call graph for this function:

Here is the caller graph for this function:

| char binread[] = "rb" |
| char binwrite[] = "wb" |
| char* c_functions = "c_functions" |
Definition at line 28 of file sysdep.c.
Referenced by alloc_names(), main(), set_tmp_names(), and Un_link_all().
| char* chr_fmt[Table_size] |
Initial value:
{
"\\0", "\\1", "\\2", "\\3", "\\4", "\\5", "\\6", "\\7",
"\\b", "\\t", "\\n", "\\13", "\\f", "\\r", "\\16", "\\17",
"\\20", "\\21", "\\22", "\\23", "\\24", "\\25", "\\26", "\\27",
"\\30", "\\31", "\\32", "\\33", "\\34", "\\35", "\\36", "\\37",
" ", "!", "\"", "#", "$", "%%", "&", "\\'",
"(", ")", "*", "+", ",", "-", ".", "/",
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", ":", ";", "<", "=", ">", "?",
"@", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z", "[", "\\\\", "]", "^", "_",
"`", "a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z", "{", "|", "}", "~"
}
Definition at line 466 of file sysdep.c.
Referenced by do_string(), and opconv_fudge().
| char* coutput = "c_output" |
| char escapes[Table_size] |
| char* initbname = "raw_data.b" |
| char link_msg[] |
Initial value:
"on Microsoft Windows system, link with libf2c.lib;\n\ on Linux or Unix systems, link with .../path/to/libf2c.a -lm\n\ or, if you install libf2c.a in a standard place, with -lf2c -lm\n\ -- in that order, at the end of the command line, as in\n\ cc *.o -lf2c -lm\n\ Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,\n\n\ http://www.netlib.org/f2c/libf2c.zip"
Definition at line 38 of file sysdep.c.
Referenced by main().
| char * outbtail |
Definition at line 46 of file sysdep.c.
Referenced by c_name(), def_commons(), main(), and outbuf_adjust().
| char* outbuf = "" |
| char* p1_bakfile = "p1_file.BAK" |
Definition at line 34 of file sysdep.c.
Referenced by alloc_names(), set_tmp_names(), and start_formatting().
| char* p1_file = "p1_file" |
Definition at line 33 of file sysdep.c.
Referenced by alloc_names(), main(), set_tmp_names(), start_formatting(), and Un_link_all().
| char* proto_fname = "proto_file" |
| char* str_fmt[Table_size] |
Initial value:
{
"\\000", "\\001", "\\002", "\\003", "\\004", "\\005", "\\006", "\\007",
"\\b", "\\t", "\\n", "\\013", "\\f", "\\r", "\\016", "\\017",
"\\020", "\\021", "\\022", "\\023", "\\024", "\\025", "\\026", "\\027",
"\\030", "\\031", "\\032", "\\033", "\\034", "\\035", "\\036", "\\037",
" ", "!", "\\\"", "#", "$", "%%", "&", "'",
"(", ")", "*", "+", ",", "-", ".", "/",
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", ":", ";", "<", "=", ">", "?",
"@", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z", "[", "\\\\", "]", "^", "_",
"`", "a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z", "{", "|", "}", "~"
}
Definition at line 442 of file sysdep.c.
Referenced by Ado_string(), out_const(), setfmt(), tostring(), and wr_array_init().
| char textread[] = "r" |
Definition at line 26 of file sysdep.c.
Referenced by doinclude(), dsort(), list_init_data(), main(), and Pfile().
| char textwrite[] = "w" |
| char* tmpdir = "" |
Definition at line 71 of file sysdep.c.
Referenced by alloc_names(), CreateCppShared(), CreateShared(), DoChangeDir(), OpenTCLsci(), rmtdir(), and set_tmp_names().
1.5.1