Annotation of freem/src/ssvn_job.c, revision 1.8
1.1 snw 1: /*
1.8 ! snw 2: * $Id: ssvn_job.c,v 1.7 2025/04/10 17:21:54 snw Exp $
1.4 snw 3: * ^$JOB ssvn
1.1 snw 4: *
5: *
1.3 snw 6: * Author: Serena Willis <snw@coherent-logic.com>
1.1 snw 7: * Copyright (C) 1998 MUG Deutschland
1.4 snw 8: * Copyright (C) 2020, 2025 Coherent Logic Development LLC
1.1 snw 9: *
10: *
11: * This file is part of FreeM.
12: *
13: * FreeM is free software: you can redistribute it and/or modify
14: * it under the terms of the GNU Affero Public License as published by
15: * the Free Software Foundation, either version 3 of the License, or
16: * (at your option) any later version.
17: *
18: * FreeM is distributed in the hope that it will be useful,
19: * but WITHOUT ANY WARRANTY; without even the implied warranty of
20: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21: * GNU Affero Public License for more details.
22: *
23: * You should have received a copy of the GNU Affero Public License
24: * along with FreeM. If not, see <https://www.gnu.org/licenses/>.
25: *
1.5 snw 26: * $Log: ssvn_job.c,v $
1.8 ! snw 27: * Revision 1.7 2025/04/10 17:21:54 snw
! 28: * Remove traces of BDB global handler
! 29: *
1.7 snw 30: * Revision 1.6 2025/04/09 19:52:02 snw
31: * Eliminate as many warnings as possible while building with -Wall
32: *
1.6 snw 33: * Revision 1.5 2025/03/24 04:13:11 snw
34: * Replace action macro dat with fra_dat to avoid symbol conflict on OS/2
35: *
1.5 snw 36: * Revision 1.4 2025/03/09 19:50:47 snw
37: * Second phase of REUSE compliance and header reformat
38: *
1.4 snw 39: *
40: * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
41: * SPDX-License-Identifier: AGPL-3.0-or-later
1.1 snw 42: **/
43:
44: #include <stdio.h>
45: #include <string.h>
46: #include <stdlib.h>
47: #include <signal.h>
48: #include <sys/types.h>
49: #include <unistd.h>
50: #include <errno.h>
51: #include <sys/time.h>
52: #include <sys/resource.h>
53: #include <ctype.h>
54: #include <time.h>
55:
56: #include "config.h"
57: #include "mpsdef.h"
58: #include "transact.h"
59: #include "namespace.h"
60: #include "freem.h"
61: #include "mref.h"
62: #include "jobtab.h"
63:
64: short cur_symtab = 0;
65:
66: void ssvn_job_add_device(int channel, char *device)
67: {
68: char *k_buf;
69: char *d_buf;
70:
71: k_buf = (char *) malloc (STRLEN * sizeof (char));
72: NULLPTRCHK(k_buf,"ssvn_job_add_device");
73:
74: d_buf = (char *) malloc (STRLEN * sizeof (char));
75: NULLPTRCHK(k_buf,"ssvn_job_add_device");
76:
1.8 ! snw 77: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202OPEN\202%d\201", pid, channel);
! 78: snprintf (d_buf, STRLEN - 1, "%s\201", device);
1.1 snw 79:
80: symtab_shm (set_sym, k_buf, d_buf);
81:
82: free (k_buf);
83: free (d_buf);
84:
85: return;
86: }
87:
88: void ssvn_job_remove_device(int channel)
89: {
90: char *k_buf;
91: char *d_buf;
92:
93: k_buf = (char *) malloc (STRLEN * sizeof (char));
94: NULLPTRCHK(k_buf,"ssvn_job_add_device");
95:
96: d_buf = (char *) malloc (STRLEN * sizeof (char));
97: NULLPTRCHK(k_buf,"ssvn_job_add_device");
98:
1.8 ! snw 99: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202OPEN\202%d\201", pid, channel);
! 100: snprintf (d_buf, STRLEN - 1, "\201");
1.1 snw 101:
102: symtab_shm (kill_sym, k_buf, d_buf);
103:
104: free (k_buf);
105: free (d_buf);
106:
107: return;
108:
109: }
110:
111: void ssvn_job_update(void)
112: {
113:
1.8 ! snw 114: char k_buf[STRLEN];
! 115: char d_buf[STRLEN];
1.1 snw 116:
1.8 ! snw 117: char tk_buf[STRLEN];
! 118: char td_buf[STRLEN];
1.1 snw 119:
120: #ifndef AMIGA68K
121: uid_t uid;
122: gid_t gid;
123: #else
124: int uid;
125: int gid;
126: #endif
127:
128: int ierr_sav;
129: int tf;
130:
131: #if !defined(AMIGA68K)
132: uid = getuid ();
133: gid = getgid ();
134: #else
135: uid = 0;
136: gid = 0;
137: #endif
138:
139: ierr_sav = ierr;
140:
1.8 ! snw 141: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202PIPE_GLVN\201", pid);
1.1 snw 142: snprintf (d_buf, 5, "%%\201");
143: symtab_shm (set_sym, k_buf, d_buf);
144:
1.8 ! snw 145: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZCOMMANDS\201", pid);
1.1 snw 146: stcpy (d_buf, zcommds);
147: symtab_shm (set_sym, k_buf, d_buf);
148:
1.8 ! snw 149: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZFUNCTIONS\201", pid);
1.1 snw 150: stcpy (d_buf, zfunctions);
151: symtab_shm (set_sym, k_buf, d_buf);
152:
1.8 ! snw 153: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZSVS\201", pid);
1.1 snw 154: stcpy (d_buf, zsvn);
155: symtab_shm (set_sym, k_buf, d_buf);
156:
1.8 ! snw 157: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202BREAK_HANDLER\201", pid);
1.1 snw 158: stcpy (d_buf, brkaction);
159: symtab_shm (set_sym, k_buf, d_buf);
160:
1.8 ! snw 161: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ROUTINE_BUFFER_SIZE\201", pid);
! 162: snprintf (d_buf, STRLEN - 1, "%ld\201", PSIZE0 - 1);
1.1 snw 163: symtab_shm (set_sym, k_buf, d_buf);
164:
1.8 ! snw 165: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ROUTINE_BUFFER_COUNT\201", pid);
! 166: snprintf (d_buf, STRLEN - 1, "%ld\201", NO_OF_RBUF);
1.1 snw 167: symtab_shm (set_sym, k_buf, d_buf);
168:
1.8 ! snw 169: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ROUTINE_BUFFER_AUTO_ADJUST\201", pid);
! 170: snprintf (d_buf, STRLEN - 1, "%d\201", autorsize);
1.1 snw 171: symtab_shm (set_sym, k_buf, d_buf);
172:
1.8 ! snw 173: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202SYMBOL_TABLE_SIZE\201", pid);
! 174: snprintf (d_buf, STRLEN - 1, "%ld\201", PSIZE);
1.1 snw 175: symtab_shm (set_sym, k_buf, d_buf);
176:
1.8 ! snw 177: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202SYMBOL_TABLE_AUTO_ADJUST\201", pid);
! 178: snprintf (d_buf, STRLEN - 1, "%d\201", autopsize);
1.1 snw 179: symtab_shm (set_sym, k_buf, d_buf);
180:
1.8 ! snw 181: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202USER_DEFINED_ISV_TABLE_SIZE\201", pid);
! 182: snprintf (d_buf, STRLEN - 1, "%ld\201", UDFSVSIZ);
1.1 snw 183: symtab_shm (set_sym, k_buf, d_buf);
184:
1.8 ! snw 185: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202USER_DEFINED_ISV_TABLE_AUTO_ADJUST\201", pid);
! 186: snprintf (d_buf, STRLEN - 1, "%d\201", autousize);
1.1 snw 187: symtab_shm (set_sym, k_buf, d_buf);
188:
1.8 ! snw 189: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVN_UNIQUE_CHARS\201", pid);
! 190: snprintf (d_buf, STRLEN - 1, "%d\201", (glvnflag.one[0] == 0) ? 255 : glvnflag.one[0]);
1.1 snw 191: symtab_shm (set_sym, k_buf, d_buf);
192:
193: tf = UNSIGN (glvnflag.one[1]);
194: toggle (tf);
195:
1.8 ! snw 196: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVN_CASE_SENSITIVE\201", pid);
! 197: snprintf (d_buf, STRLEN - 1, "%d\201", tf);
1.1 snw 198: symtab_shm (set_sym, k_buf, d_buf);
199:
200: tf = UNSIGN (glvnflag.one[2]);
201: if (tf == 0) tf = 255;
1.8 ! snw 202: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVN_NAME_SUB_LENGTH\201", pid);
! 203: snprintf (d_buf, STRLEN - 1, "%d\201", tf);
1.1 snw 204: symtab_shm (set_sym, k_buf, d_buf);
205:
206: tf = UNSIGN (glvnflag.one[3]);
207: if (tf == 0) tf = 255;
1.8 ! snw 208: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVN_SUB_LENGTH\201", pid);
! 209: snprintf (d_buf, STRLEN - 1, "%d\201", tf);
1.1 snw 210: symtab_shm (set_sym, k_buf, d_buf);
211:
1.8 ! snw 212: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202SINGLE_USER\201", pid);
! 213: snprintf (d_buf, STRLEN - 1, "%d\201", lonelyflag);
1.1 snw 214: symtab_shm (set_sym, k_buf, d_buf);
215:
1.8 ! snw 216: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202LOWERCASE_EVERYWHERE\201", pid);
! 217: snprintf (d_buf, STRLEN - 1, "%d\201", lowerflag);
1.1 snw 218: symtab_shm (set_sym, k_buf, d_buf);
219:
1.8 ! snw 220: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZCOMMAND_ARGUMENT_NAME\201", pid);
1.1 snw 221: stcpy (d_buf, zargdefname);
222: symtab_shm (set_sym, k_buf, d_buf);
223:
1.8 ! snw 224: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202TIMEZONE_OFFSET\201", pid);
1.1 snw 225: lintstr (d_buf, tzoffset);
226: symtab_shm (set_sym, k_buf, d_buf);
227:
1.8 ! snw 228: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ENGINES\202GLOBAL\202%s\201", pid, nsname);
! 229: snprintf (d_buf, STRLEN - 1, "%s\201", gbl_u_engine);
1.1 snw 230: symtab_shm (set_sym, k_buf, d_buf);
231:
1.8 ! snw 232: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ENGINES\202GLOBAL\202SYSTEM\201", pid);
! 233: snprintf (d_buf, STRLEN - 1, "%s\201", gbl_s_engine);
1.1 snw 234: symtab_shm (set_sym, k_buf, d_buf);
235:
1.8 ! snw 236: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ENGINES\202LOCAL\201", pid);
! 237: snprintf (d_buf, STRLEN - 1, "%s\201", loc_engine);
1.1 snw 238: symtab_shm (set_sym, k_buf, d_buf);
239:
1.8 ! snw 240: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202CHARACTER\201", pid);
1.1 snw 241: symtab_shm (set_sym, k_buf, "M\201");
242:
1.8 ! snw 243: snprintf (d_buf, STRLEN - 1, "%s\201", curdir);
! 244: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202CWD\201", pid);
1.1 snw 245: symtab_shm (set_sym, k_buf, d_buf);
246:
1.8 ! snw 247: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GLOBAL\201", pid);
1.1 snw 248: symtab_shm (set_sym, k_buf, " \201");
249:
1.8 ! snw 250: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202LOCK\201", pid);
1.1 snw 251: symtab_shm (set_sym, k_buf, " \201");
252:
1.8 ! snw 253: snprintf (d_buf, STRLEN - 1, "%s\201", oucpath);
! 254: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202IOPATH\201", pid);
1.1 snw 255: symtab_shm (set_sym, k_buf, d_buf);
256:
257: #if !defined(MSDOS)
1.8 ! snw 258: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202PRIORITY\201", pid);
! 259: snprintf (d_buf, STRLEN - 1, "%d\201", getpriority (PRIO_PROCESS, pid));
1.1 snw 260: symtab_shm (set_sym, k_buf, d_buf);
261: #endif
262:
1.8 ! snw 263: snprintf (d_buf, STRLEN - 1, "%s\201", rou_name);
! 264: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ROUTINE\201", pid);
1.1 snw 265: symtab_shm (set_sym, k_buf, d_buf);
266:
1.8 ! snw 267: snprintf (d_buf, STRLEN - 1, "0:\"%s\"\201", dev[HOME]);
! 268: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202$PRINCIPAL\201", pid);
1.1 snw 269: symtab_shm (set_sym, k_buf, d_buf);
270:
1.8 ! snw 271: snprintf (d_buf, STRLEN - 1, "%d\201", tp_level);
! 272: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202$TLEVEL\201", pid);
1.1 snw 273: symtab_shm (set_sym, k_buf, d_buf);
274:
1.8 ! snw 275: snprintf (d_buf, STRLEN - 1, "0:\"%s\"\201", dev[HOME]);
! 276: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202$IO\201", pid);
1.1 snw 277: symtab_shm (set_sym, k_buf, d_buf);
278:
1.8 ! snw 279: snprintf (d_buf, STRLEN -1, "%s\201", gvndefault);
! 280: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GVNDEFAULT\201", pid);
1.1 snw 281: symtab_shm (set_sym, k_buf, d_buf);
282:
1.8 ! snw 283: snprintf (d_buf, STRLEN -1, "%s\201", lvndefault);
! 284: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202LVNDEFAULT\201", pid);
1.1 snw 285: symtab_shm (set_sym, k_buf, d_buf);
286:
287: ssvn_job_add_device (HOME, dev[HOME]);
288:
1.8 ! snw 289: snprintf (d_buf, STRLEN - 1, "%d\201", uid);
! 290: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202USER\201", pid);
1.1 snw 291: symtab_shm (set_sym, k_buf, d_buf);
292:
1.8 ! snw 293: snprintf (d_buf, STRLEN - 1, "%d\201", gid);
! 294: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202GROUP\201", pid);
1.1 snw 295: symtab_shm (set_sym, k_buf, d_buf);
296:
1.8 ! snw 297: snprintf (d_buf, STRLEN - 1, "%s\201", nsname);
! 298: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202NAMESPACE\201", pid);
1.1 snw 299: symtab_shm (set_sym, k_buf, d_buf);
300:
1.8 ! snw 301: snprintf (d_buf, STRLEN - 1, "%d\201", cur_symtab);
! 302: snprintf (k_buf, STRLEN - 1, "^$JOB\202\%d\202SYMTAB\201", pid);
1.1 snw 303: symtab_shm (set_sym, k_buf, d_buf);
304:
1.8 ! snw 305: snprintf (d_buf, STRLEN - 1, "%d\201", pid);
! 306: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202PID\201", pid);
1.1 snw 307: symtab_shm (set_sym, k_buf, d_buf);
308:
1.8 ! snw 309: snprintf (d_buf, STRLEN - 1, "%d\201", frm_throw_all_errors);
! 310: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202SET_ALL_ECODES\201", pid);
1.1 snw 311: symtab_shm (set_sym, k_buf, d_buf);
312:
1.8 ! snw 313: snprintf (tk_buf, STRLEN - 1, "^$SYSTEM\202ZDATE_FORMAT\201");
1.1 snw 314: ssvn (get_sym, tk_buf, td_buf);
315:
1.8 ! snw 316: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZDATE_FORMAT\201", pid);
1.1 snw 317: symtab_shm (set_sym, k_buf, td_buf);
318:
1.8 ! snw 319: snprintf (tk_buf, STRLEN - 1, "^$SYSTEM\202ZTIME_FORMAT\201");
1.1 snw 320: ssvn (get_sym, tk_buf, td_buf);
321:
1.8 ! snw 322: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ZTIME_FORMAT\201", pid);
1.1 snw 323: symtab_shm (set_sym, k_buf, td_buf);
324:
1.8 ! snw 325: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202ENVIRONMENT\201", pid);
! 326: snprintf (d_buf, STRLEN - 1, "%s\201", shm_env);
1.1 snw 327: symtab_shm (set_sym, k_buf, d_buf);
328:
329: switch (fp_mode) {
330:
331: case 0:
332:
1.8 ! snw 333: snprintf (d_buf, STRLEN - 1, "FIXED\201");
1.1 snw 334: break;
335:
336: default:
337:
1.8 ! snw 338: snprintf (d_buf, STRLEN - 1, "IEEE754\201");
1.1 snw 339: snprintf (fp_conversion, 9, "%%.%df\201", DBL_DIG);
340: zprecise = DBL_DIG;
341:
342: break;
343:
344: }
345:
1.8 ! snw 346: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202MATH\201", pid);
1.1 snw 347: symtab_shm (set_sym, k_buf, d_buf);
348:
1.8 ! snw 349: snprintf (d_buf, STRLEN - 1, "%d\201", en_revstrf);
! 350: snprintf (k_buf, STRLEN - 1, "^$JOB\202%d\202REVSTR\201", pid);
1.1 snw 351: symtab_shm (set_sym, k_buf, d_buf);
352:
353: stcpy (d_buf, rou_name);
354: stcnv_m2c (d_buf);
355:
356: merr_raise (ierr_sav);
357:
358: }
359:
360:
361: void ssvn_job(short action, char *key, char *data)
362: {
363: pid_t t_pid;
364: int i;
365: char ch;
366: job_slot_t *slot;
367: freem_ref_t *r;
368: char *kbuf;
369: char *tbuf;
370:
371: r = (freem_ref_t *) malloc (sizeof (freem_ref_t));
372: NULLPTRCHK(r,"ssvn_job");
373:
374: kbuf = (char *) malloc (STRLEN * sizeof(char));
375: NULLPTRCHK(kbuf,"ssvn_job");
376:
377: tbuf = (char *) malloc (STRLEN * sizeof(char));
378: NULLPTRCHK(tbuf,"ssvn_job");
379:
380: stcpy (kbuf, key);
381:
382: mref_init (r, MREF_RT_SSVN, "^$JOB");
383: internal_to_mref (r, kbuf);
384:
385: t_pid = atol (mref_get_subscript (r, 0));
386:
387: slot = job_get (t_pid);
388:
389: if (r->subscript_count > 1) {
390: for (i = 0; i < strlen (r->subscripts[1]); i++) {
391: r->subscripts[1][i] = toupper (r->subscripts[1][i]);
392: }
393: }
394:
395: key = mref_to_internal (r);
396: stcpy (kbuf, key);
397:
398: switch (action) {
399:
400: case set_sym:
401:
402: {
403: char cbuf[STRLEN];
404:
405: snprintf (cbuf, STRLEN - 1, "^$JOB\202%d\202NAMESPACE\201", pid);
406:
407: if (stcmp (kbuf, cbuf) == 0) {
408:
409: stcpy (tbuf, data);
410: stcnv_m2c (tbuf);
411:
412: if (validate_namespace (tbuf) == FALSE) {
413: merr_raise (M26);
414: }
415: else {
416: set_namespace (tbuf, FALSE);
417: }
418:
419: goto done;
420:
421: }
422:
423:
424: if (strcmp (mref_get_subscript (r, 1), "ZCOMMANDS") == 0) {
425:
426: m_tolower (data);
427:
428: stcpy (zcommds, data);
429: symtab_shm (action, key, data);
430:
431: merr_clear ();
432: goto done;
433:
434: }
435: else if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) {
436: stcpy (l_o_val, data);
437:
438: merr_clear ();
439: goto done;
440: }
441: else if (strcmp (mref_get_subscript (r, 1), "GVNQOVAL") == 0) {
442: stcpy (l_o_val, data);
443:
444: merr_clear ();
445: goto done;
446: }
447: else if (strcmp (mref_get_subscript (r, 1), "GVNDEFAULT") == 0) {
448:
449: stcpy (gvndefault, data);
450:
451: merr_clear ();
452: goto done;
453: }
454: else if (strcmp (mref_get_subscript (r, 1), "LVNDEFAULT") == 0) {
455:
456: stcpy (lvndefault, data);
457:
458: merr_clear ();
459: goto done;
460: }
461: else if (strcmp (mref_get_subscript (r, 1), "PIPE_GLVN") == 0) {
462:
463: symtab_shm (action, key, data);
464:
465: merr_clear ();
466: goto done;
467:
468: }
469: else if (strcmp (mref_get_subscript (r, 1), "ZFUNCTIONS") == 0) {
470:
471: m_tolower (data);
472:
473: stcpy (zfunctions, data);
474: symtab_shm (action, key, data);
475:
476: merr_clear ();
477: goto done;
478:
479: }
480: else if (strcmp (mref_get_subscript (r, 1), "ZSVS") == 0) {
481:
482: m_tolower (data);
483:
484: stcpy (zsvn, data);
485: symtab_shm (action, key, data);
486:
487: merr_clear ();
488: goto done;
489:
490: }
491: else if (strcmp (mref_get_subscript (r, 1), "LOWERCASE_EVERYWHERE") == 0) {
492:
493: int tf = tvexpr (data);
494:
495: lowerflag = tf;
1.8 ! snw 496: snprintf (data, STRLEN - 1, "%d\n", tf);
1.1 snw 497:
498: symtab_shm (action, key, data);
499:
500: merr_clear ();
501: goto done;
502:
503: }
504: else if (strcmp (mref_get_subscript (r, 1), "ZCOMMAND_ARGUMENT_NAME") == 0) {
505:
506: stcpy (zargdefname, data);
507: symtab_shm (action, key, data);
508:
509: merr_clear ();
510: goto done;
511:
512: }
513: else if (strcmp (mref_get_subscript (r, 1), "BREAK_HANDLER") == 0) {
514:
515: stcpy (brkaction, data);
516: symtab_shm (action, key, data);
517:
518: merr_clear ();
519: goto done;
520:
521: }
522: else if (strcmp (mref_get_subscript (r, 1), "ROUTINE_BUFFER_SIZE") == 0) {
523:
524: if (intexpr (data) <= 0) {
525: merr_raise (ARGER);
526: goto done;
527: }
528:
529: newrsize (intexpr (data) + 1, NO_OF_RBUF);
530: symtab_shm (action, key, data);
531:
532: merr_clear ();
533: goto done;
534:
535: }
536: else if (strcmp (mref_get_subscript (r, 1), "ROUTINE_BUFFER_COUNT") == 0) {
537:
538: if (intexpr (data) <= 0) {
539: merr_raise (ARGER);
540: goto done;
541: }
542:
543: newrsize (PSIZE0, intexpr (data));
544: symtab_shm (action, key, data);
545:
546: merr_clear ();
547: goto done;
548:
549: }
550: else if (strcmp (mref_get_subscript (r, 1), "ROUTINE_BUFFER_AUTO_ADJUST") == 0) {
551:
552: autorsize = tvexpr (data);
1.8 ! snw 553: snprintf (data, STRLEN - 1, "%d\201", tvexpr (data));
1.1 snw 554:
555: symtab_shm (action, key, data);
556:
557: merr_clear ();
558: goto done;
559:
560: }
561: else if (strcmp (mref_get_subscript (r, 1), "SYMBOL_TABLE_SIZE") == 0) {
562:
563: if (intexpr (data) <= 0) {
564: merr_raise (ARGER);
565: goto done;
566: }
567:
568: newpsize (intexpr (data));
569:
570: symtab_shm (action, key, data);
571:
572: merr_clear ();
573: goto done;
574:
575: }
576: else if (strcmp (mref_get_subscript (r, 1), "SYMBOL_TABLE_AUTO_ADJUST") == 0) {
577:
578: autopsize = tvexpr (data);
1.8 ! snw 579: snprintf (data, STRLEN - 1, "%d\201", tvexpr (data));
1.1 snw 580:
581: symtab_shm (action, key, data);
582:
583: merr_clear ();
584: goto done;
585:
586: }
587: else if (strcmp (mref_get_subscript (r, 1), "USER_DEFINED_ISV_TABLE_SIZE") == 0) {
588:
589: if (intexpr (data) <= 0) {
590: merr_raise (ARGER);
591: goto done;
592: }
593:
594: newusize (intexpr (data));
595:
596: symtab_shm (action, key, data);
597:
598: merr_clear ();
599: goto done;
600:
601: }
602: else if (strcmp (mref_get_subscript (r, 1), "USER_DEFINED_ISV_TABLE_AUTO_ADJUST") == 0) {
603: autousize = tvexpr (data);
1.8 ! snw 604: snprintf (data, STRLEN - 1, "%d\201", tvexpr (data));
1.1 snw 605:
606: symtab_shm (action, key, data);
607:
608: merr_clear ();
609: goto done;
610: }
611: else if (strcmp (mref_get_subscript (r, 1), "GVN_UNIQUE_CHARS") == 0) {
612:
613: int t = intexpr (data) & 0377;
614:
615: if (t == 255) t = 0;
616:
617: if (merr () != MXNUM) {
618:
619: glvnflag.one[0] = (char) t;
620:
1.8 ! snw 621: snprintf (data, STRLEN - 1, "%d\201", t);
1.1 snw 622: symtab_shm (action, key, data);
623:
624: merr_clear ();
625:
626: }
627: else {
628: merr_raise (ARGER);
629: }
630:
631: goto done;
632:
633: }
634: else if (strcmp (mref_get_subscript (r, 1), "GVN_CASE_SENSITIVE") == 0) {
635: int t = tvexpr (data);
636: toggle (t);
637:
638: if (merr () != MXNUM) {
639:
640: glvnflag.one[1] = t;
641:
1.8 ! snw 642: snprintf (data, STRLEN - 1, "%d\201", t);
1.1 snw 643: symtab_shm (action, key, data);
644:
645: merr_clear ();
646:
647: }
648: else {
649: merr_raise (ARGER);
650: }
651:
652: goto done;
653:
654: }
655: else if (strcmp (mref_get_subscript (r, 1), "GVN_NAME_SUB_LENGTH") == 0) {
656: int t = intexpr (data) & 0377;
657:
658: if (t == 255) t = 0;
659:
660: if (merr () != MXNUM) {
661: glvnflag.one[2] = (char) t;
662:
1.8 ! snw 663: snprintf (data, STRLEN - 1, "%d\201", t);
1.1 snw 664: symtab_shm (action, key, data);
665:
666: merr_clear ();
667: }
668: else {
669: merr_raise (ARGER);
670: }
671:
672: goto done;
673:
674: }
675: else if (strcmp (mref_get_subscript (r, 1), "GVN_SUB_LENGTH") == 0) {
676: int t = intexpr (data) & 0377;
677:
678: if (t == 255) t = 0;
679:
680: if (merr () != MXNUM) {
681: glvnflag.one[3] = (char) t;
682:
1.8 ! snw 683: snprintf (data, STRLEN - 1, "%d\201", t);
1.1 snw 684: symtab_shm (action, key, data);
685:
686: merr_clear ();
687: }
688: else {
689: merr_raise (ARGER);
690: }
691:
692: goto done;
693:
694: }
695: else if (strcmp (mref_get_subscript (r, 1), "SINGLE_USER") == 0) {
696: int tf = tvexpr (data);
697: close_all_globals ();
698:
1.8 ! snw 699: snprintf (data, STRLEN - 1, "%d\201", tf);
1.1 snw 700: symtab_shm (action, key, data);
701:
702: merr_clear ();
703: goto done;
704: }
705: else if (stcmp (mref_get_subscript (r, 1), "TIMEZONE_OFFSET") == 0) {
706: long tzo = intexpr (data);
707: long tzj;
708:
709: if (merr () > OK) goto done;
710:
711: tzj = time (0L);
712:
713: if ((tzoffset > 0 && ((tzj + 86400 + tzoffset) < 0 || (tzj + tzoffset) < 0)) ||
714: (tzoffset < 0 && ((tzj + 86400 + tzoffset ) > (tzj + 86400) ||
715: (tzj + tzoffset) > tzj))) {
716: merr_raise (ARGER);
717: goto done;
718: }
719:
720: tzoffset = tzo;
721:
1.8 ! snw 722: snprintf (data, STRLEN - 1, "%ld\201", tzoffset);
1.1 snw 723: symtab_shm (action, key, data);
724:
725: goto done;
726: }
727: else if (strcmp (mref_get_subscript (r, 1), "USER_ERRORS") == 0) {
728:
729: symtab_shm (set_sym, key, data);
730:
731: merr_clear ();
732: goto done;
733:
734: }
735: else if (strcmp (mref_get_subscript (r, 1), "SET_ALL_ECODES") == 0) {
736:
737: frm_throw_all_errors = atol (data);
738: symtab_shm (set_sym, key, data);
739:
740: merr_clear ();
741: goto done;
742:
743: }
744: else if (strcmp (mref_get_subscript (r, 1), "ALIASES") == 0) {
745: symtab_shm (set_sym, key, data);
746:
747: merr_clear ();
748: goto done;
749: }
750: else if (strcmp (mref_get_subscript (r, 1), "CWD") == 0) {
751:
752: stcpy (tbuf, data);
753: stcnv_m2c (tbuf);
754:
755: if (chdir (tbuf) != 0) {
756: merr_raise (PROTECT);
757: goto done;
758: }
759: else {
760: strcpy (curdir, tbuf);
761: symtab_shm (set_sym, kbuf, data);
762:
763: merr_clear ();
764: goto done;
765: }
766:
767: }
768: else if (strcmp (mref_get_subscript (r, 1), "EVENT") == 0) {
769: symtab_shm (set_sym, kbuf, data);
770:
771: merr_clear ();
772: goto done;
773: }
774: else if (strcmp (mref_get_subscript (r, 1), "PRIORITY") == 0) {
775:
776: int new_pri;
777:
778: stcpy (tbuf, data);
779: stcnv_m2c (tbuf);
780:
781: new_pri = atoi (tbuf);
782:
783:
784: i = nice (40);
785: nice ((int) (new_pri - 40));
786:
787: symtab_shm (set_sym, kbuf, data);
788:
789: merr_clear ();
790: goto done;
791:
792: }
793: else if (strcmp (mref_get_subscript (r, 1), "IOPATH") == 0) {
794:
795: stcpy (oucpath, data);
796: symtab_shm (set_sym, kbuf, data);
797:
798: merr_clear ();
799: goto done;
800:
801: }
802: else if (strcmp (mref_get_subscript (r, 1), "REVSTR") == 0) {
803:
804: short tres = tvexpr (data);
805:
806: if (tres == TRUE) {
807: en_revstrf = 1;
808: }
809: else {
810: en_revstrf = 0;
811: }
812:
813: symtab_shm (set_sym, kbuf, data);
814:
815: merr_clear ();
816: goto done;
817:
818: }
819: else if (strcmp (mref_get_subscript (r, 1), "ZDATE_FORMAT") == 0) {
820: symtab_shm (set_sym, key, data);
821: merr_clear ();
822: goto done;
823:
824: }
825: else if (strcmp (mref_get_subscript (r, 1), "ZTIME_FORMAT") == 0) {
826: symtab_shm (set_sym, key, data);
827: merr_clear ();
828: goto done;
829:
830: }
831: else if (strcmp (mref_get_subscript (r, 1), "SYMTAB") == 0) {
832:
833: int itmp = atoi (data);
834:
835: if ((data[0] < '0') || (data[0] > '9')) {
836: merr_raise (INVEXPR);
837: goto done;
838: }
839:
840: if (itmp != 0 && itmp != 1) {
841: merr_raise (INVEXPR);
842: goto done;
843: }
844:
845: if (cur_symtab == itmp) {
846: merr_clear ();
847: goto done;
848: }
849:
850: if (cur_symtab == 0) {
851: cur_symtab = 1;
852: }
853: else {
854: cur_symtab = 0;
855: }
856:
857: if (apartition == NULL) {
858:
859: apartition = calloc ((unsigned) PSIZE + 1, 1);
860: asymlen = PSIZE;
861:
862: for (i = 0; i < 128; i++) aalphptr[i] = 0L;
863:
864: }
865:
866: {
867:
868: char *x;
869:
870: x = apartition;
871: apartition = partition;
872: partition = x;
873:
874: }
875:
876: ch = asymlen;
877: asymlen = symlen;
878: symlen = ch;
879:
880: for (i = 0; i < 128; i++) {
881: ch = aalphptr[i];
882: aalphptr[i] = alphptr[i];
883: alphptr[i] = ch;
884: }
885:
886: s = &partition[symlen] - 256; /* pointer to symlen_offset */
887: argptr = partition; /* pointer to beg of tmp-storage */
888:
889: symtab_shm (set_sym, key, data);
890:
891: merr_clear ();
892: goto done;
893:
894:
895: }
896: else if (strcmp (mref_get_subscript (r, 1), "MATH") == 0) {
897:
898: #if !defined(_AIX)
899: if (stcmp (data, "IEEE754\201") == 0) {
900:
901: fp_mode = 1;
902: symtab_shm (set_sym, kbuf, data);
903:
904: snprintf (fp_conversion, 9, "%%.%df\201", DBL_DIG);
905: zprecise = DBL_DIG;
906:
907: merr_clear ();
908: goto done;
909:
910: }
911: else if (stcmp (data, "FIXED\201") == 0) {
912:
913: fp_mode = 0;
914: symtab_shm (set_sym, kbuf, data);
915:
916: zprecise = 100;
917:
918: merr_clear ();
919: goto done;
920:
921: }
922: else {
923: merr_raise (M29);
924: goto done;
925: }
926: #endif
927:
928: }
929:
930: merr_raise (M29);
931: goto done;
932: }
933:
934: case get_sym:
935: if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) {
936: stcpy (data, l_o_val);
937: goto done;
938: }
939: else if (strcmp (mref_get_subscript (r, 1), "GVNQOVAL") == 0) {
940: stcpy (data, g_o_val);
941: goto done;
942: }
1.5 snw 943: case fra_dat:
1.1 snw 944: case fra_order:
945: case fra_query:
946: if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) {
947: merr_raise (M38);
948: goto done;
949: }
950: if (strcmp (mref_get_subscript (r, 1), "GVNQOVAL") == 0) {
951: merr_raise (M38);
952: goto done;
953: }
954: case bigquery:
955: case getnext:
956: case m_alias:
957: case zdata:
958:
959: if (action == get_sym) {
960:
961: if (strcmp (mref_get_subscript (r, 1), "PROCESS_START") == 0) {
962:
963: unsigned long ilong;
964: unsigned long ilong1;
965:
966: ilong1 = slot->start_time + tzoffset;
967: ilong = ilong1 / 86400;
968:
969: lintstr (data, ilong + 47117);
970: i = stlen (data);
971:
972: data[i++] = ',';
973: ilong = ilong1 - (ilong * 86400);
974:
975: lintstr (&data[i], ilong);
976:
977: merr_clear ();
978: goto done;
979:
980: }
981:
982: }
983:
984: symtab_shm (action, kbuf, data);
985:
986: /* here, we need to convert the data on the way out too */
987: if ((action == fra_query) && (stlen (data) > 0)) {
988: if (strncmp (data, "^$JOB", 5) != 0) {
989: snprintf (kbuf, STRLEN - 1, "^$JOB%s\201", data);
990: stcpy (data, kbuf);
991: }
992: }
993:
994: merr_clear ();
995: goto done;
996:
997: case killone:
998: case kill_sym:
999:
1000: if (strcmp (mref_get_subscript (r, 1), "ALIASES") == 0) {
1001:
1002: symtab_shm (action, key, data);
1003:
1004: goto done;
1005:
1006: }
1007: else if (strcmp (mref_get_subscript (r, 1), "LVNQOVAL") == 0) {
1008: l_o_val[0] = '\201';
1009: merr_clear ();
1010: goto done;
1011: }
1012: else if (strcmp (mref_get_subscript (r, 1), "GVNQOVAL") == 0) {
1013: g_o_val[0] = '\201';
1014: merr_clear ();
1015: goto done;
1016: }
1017: else if (strcmp (mref_get_subscript (r, 1), "GVNDEFAULT") == 0) {
1018: gvndefault[0] = '\201';
1019: symtab_shm (action, key, data);
1020: symtab_shm (set_sym, key, gvndefault);
1021: merr_clear ();
1022: goto done;
1023: }
1024: else if (strcmp (mref_get_subscript (r, 1), "LVNDEFAULT") == 0) {
1025: lvndefault[0] = '\201';
1026: symtab_shm (action, key, data);
1027: symtab_shm (set_sym, key, lvndefault);
1028: merr_clear ();
1029: goto done;
1030: }
1031: else {
1032: job_request_stop (t_pid);
1033: }
1034:
1035: goto done;
1036:
1037:
1038: default:
1039: merr_raise (INVREF);
1040: goto done;
1041:
1042: }
1043:
1044:
1045: done:
1046:
1047: free (r);
1048: free (kbuf);
1049: free (tbuf);
1050: free (key);
1051: return;
1052: }
1053:
1054: void frm_process_alias (char *key)
1055: {
1056: int ierr_sav;
1057: char *ptr;
1058: char name[256];
1059: char *subprt;
1060: register int i;
1061: register char ch;
1062:
1063: char *k_buf;
1064: char *d_buf;
1065: char *t_buf;
1066:
1067: k_buf = (char *) malloc (STRLEN * sizeof (char));
1068: NULLPTRCHK(k_buf,"frm_process_alias");
1069:
1070: d_buf = (char *) malloc (STRLEN * sizeof (char));
1071: NULLPTRCHK(d_buf,"frm_process_alias");
1072:
1073: t_buf = (char *) malloc (STRLEN * sizeof (char));
1074: NULLPTRCHK(t_buf,"frm_process_alias");
1075:
1076: ierr_sav = ierr;
1077: ptr = key;
1078: i = 0;
1079:
1080: while ((ch = *(ptr++)) != DELIM && ch != EOL && i < 256) {
1081: name[i++] = ch;
1082: }
1083:
1084: name[i] = '\0';
1085: subprt = key + i;
1086:
1.2 snw 1087: snprintf (k_buf, STRLEN - 1, "^$JOB\202%ld\202ALIASES\202%s\201", (long) pid, name);
1.1 snw 1088: symtab_shm (get_sym, k_buf, d_buf);
1089:
1090: stcnv_m2c (d_buf);
1091:
1092: if (merr () == OK) {
1093: snprintf (t_buf, STRLEN - 1, "%s%s\201", d_buf, subprt);
1094: stcpy (key, t_buf);
1095: }
1096:
1097: free (k_buf);
1098: free (d_buf);
1099: free (t_buf);
1100:
1101: merr_raise (ierr_sav);
1102:
1103: return;
1104:
1105: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>