Annotation of freem/src/ssvn_job.c, revision 1.11

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>