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

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

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