|
|
| version 1.1.1.1, 2025/01/19 02:04:04 | version 1.6, 2025/04/13 04:22:43 |
|---|---|
| Line 1 | Line 1 |
| /* | /* |
| * * | * $Id$ |
| * * * | |
| * * * | |
| * *************** | |
| * * * * * | |
| * * MUMPS * | |
| * * * * * | |
| * *************** | |
| * * * | |
| * * * | |
| * * | |
| * | |
| * mlib.h | |
| * Function prototypes, structs, and macros for FreeM | * Function prototypes, structs, and macros for FreeM |
| * binding library | * binding library |
| * | * |
| * | * |
| * Author: Serena Willis <jpw@coherent-logic.com> | * Author: Serena Willis <snw@coherent-logic.com> |
| * Copyright (C) 1998 MUG Deutschland | * Copyright (C) 1998 MUG Deutschland |
| * Copyright (C) 2020 Coherent Logic Development LLC | * Copyright (C) 2020, 2025 Coherent Logic Development LLC |
| * | * |
| * | * |
| * This file is part of FreeM. | * This file is part of FreeM. |
| Line 36 | Line 24 |
| * You should have received a copy of the GNU Affero Public License | * You should have received a copy of the GNU Affero Public License |
| * along with FreeM. If not, see <https://www.gnu.org/licenses/>. | * along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
| * | * |
| * $Log$ | |
| * Revision 1.6 2025/04/13 04:22:43 snw | |
| * Fix snprintf calls | |
| * | |
| * Revision 1.5 2025/04/10 01:24:38 snw | |
| * Remove C++ style comments | |
| * | |
| * Revision 1.4 2025/03/24 04:13:11 snw | |
| * Replace action macro dat with fra_dat to avoid symbol conflict on OS/2 | |
| * | |
| * Revision 1.3 2025/03/09 19:50:47 snw | |
| * Second phase of REUSE compliance and header reformat | |
| * | |
| * | |
| * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC | |
| * SPDX-License-Identifier: AGPL-3.0-or-later | |
| **/ | **/ |
| #include <stdlib.h> | #include <stdlib.h> |
| Line 95 void mref2str(freem_ref_t *ref, char *ke | Line 99 void mref2str(freem_ref_t *ref, char *ke |
| strcat (key, ref->name); | strcat (key, ref->name); |
| } | } |
| // ends with EOL | /* ends with EOL */ |
| strncat (key, "\201", 2); | strncat (key, "\201", 2); |
| } | } |
| Line 113 pid_t freem_init(char *environment_name, | Line 117 pid_t freem_init(char *environment_name, |
| errno = 0; | errno = 0; |
| strcpy (shm_env, environment_name); | strcpy (shm_env, environment_name); |
| snprintf (config_file, 4096, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env); | snprintf (config_file, sizeof (config_file) - 1, "%s/freem/%s/freem.conf", SYSCONFDIR, shm_env); |
| init (namespace_name); | init (namespace_name); |
| ierr_sav = ierr; | ierr_sav = ierr; |
| Line 144 short freem_get(freem_ref_t *ref) | Line 148 short freem_get(freem_ref_t *ref) |
| freem_return_io (); | freem_return_io (); |
| // set up the EOL-delimited string | /* set up the EOL-delimited string */ |
| mref2str (ref, key); | mref2str (ref, key); |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table to get the local var | /* call into the symbol table to get the local var */ |
| symtab (get_sym, key, result); | symtab (get_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; result in &result | /* call into the FreeM global handler; result in &result */ |
| global (get_sym, key, result); | global (get_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (get_sym, key, result); | ssvn (get_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 171 short freem_get(freem_ref_t *ref) | Line 175 short freem_get(freem_ref_t *ref) |
| stcnv_m2c (result); | stcnv_m2c (result); |
| strncpy (ref->value, result, 255); | strncpy (ref->value, result, sizeof (ref->value)); |
| freem_release_io (); | freem_release_io (); |
| Line 187 short freem_set(freem_ref_t *ref) | Line 191 short freem_set(freem_ref_t *ref) |
| mref2str (ref, key); | mref2str (ref, key); |
| snprintf (data, 254, "%s\201", ref->value); | snprintf (data, sizeof (data) - 1, "%s\201", ref->value); |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table to set the local var | /* call into the symbol table to set the local var */ |
| symtab (set_sym, key, data); | symtab (set_sym, key, data); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; data in &data | /* call into the FreeM global handler; data in &data */ |
| global (set_sym, key, data); | global (set_sym, key, data); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (set_sym, key, data); | ssvn (set_sym, key, data); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 229 short freem_kill(freem_ref_t *ref) | Line 233 short freem_kill(freem_ref_t *ref) |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table to kill the local var | /* call into the symbol table to kill the local var */ |
| symtab (kill_sym, key, result); | symtab (kill_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; result in &result | /* call into the FreeM global handler; result in &result */ |
| global (kill_sym, key, result); | global (kill_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (kill_sym, key, result); | ssvn (kill_sym, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 250 short freem_kill(freem_ref_t *ref) | Line 254 short freem_kill(freem_ref_t *ref) |
| stcnv_m2c (result); | stcnv_m2c (result); |
| strncpy (ref->value, result, 255); | strncpy (ref->value, result, sizeof (ref->value) - 1); |
| freem_release_io (); | freem_release_io (); |
| Line 270 short freem_data(freem_ref_t *ref) | Line 274 short freem_data(freem_ref_t *ref) |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table | /* call into the symbol table */ |
| symtab (dat, key, result); | symtab (fra_dat, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; result in &result | /* call into the FreeM global handler; result in &result */ |
| global (dat, key, result); | global (fra_dat, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (dat, key, result); | ssvn (fra_dat, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 310 short freem_order(freem_ref_t *ref) | Line 314 short freem_order(freem_ref_t *ref) |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table for $ORDER | /* call into the symbol table for $ORDER */ |
| symtab (fra_order, key, result); | symtab (fra_order, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; result in &result | /* call into the FreeM global handler; result in &result */ |
| global (fra_order, key, result); | global (fra_order, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (fra_order, key, result); | ssvn (fra_order, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 349 short freem_query(freem_ref_t *ref) | Line 353 short freem_query(freem_ref_t *ref) |
| switch (ref->reftype) { | switch (ref->reftype) { |
| case MREF_RT_LOCAL: | case MREF_RT_LOCAL: |
| // call into the symbol table | /* call into the symbol table */ |
| symtab (fra_query, key, result); | symtab (fra_query, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_GLOBAL: | case MREF_RT_GLOBAL: |
| // call into the FreeM global handler; result in &result | /* call into the FreeM global handler; result in &result */ |
| global (fra_query, key, result); | global (fra_query, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| case MREF_RT_SSVN: | case MREF_RT_SSVN: |
| // call into the SSVN code | /* call into the SSVN code */ |
| ssvn (fra_query, key, result); | ssvn (fra_query, key, result); |
| ref->status = merr (); | ref->status = merr (); |
| break; | break; |
| Line 383 short freem_lock(freem_ref_t *ref, long | Line 387 short freem_lock(freem_ref_t *ref, long |
| char buf[256]; | char buf[256]; |
| mref2str (ref, key); | mref2str (ref, key); |
| snprintf (buf, 255, "+%s\201", key); | snprintf (buf, sizeof (buf) - 1, "+%s\201", key); |
| freem_return_io (); | freem_return_io (); |
| Line 401 short freem_unlock(freem_ref_t *ref, lon | Line 405 short freem_unlock(freem_ref_t *ref, lon |
| char buf[256]; | char buf[256]; |
| mref2str (ref, key); | mref2str (ref, key); |
| snprintf (buf, 255, "-%s\201", key); | snprintf (buf, sizeof (buf) - 1, "-%s\201", key); |
| freem_return_io (); | freem_return_io (); |
| Line 480 short freem_function(freem_ent_t *ent) | Line 484 short freem_function(freem_ent_t *ent) |
| stcnv_c2m (buf); | stcnv_c2m (buf); |
| sprintf (tmp, "%%ZFRMXEC\201"); | sprintf (tmp, "%%ZFRMXEC\201"); |
| symtab (set_sym, tmp, buf); | symtab (set_sym, tmp, buf); |
| snprintf ((char *) ztrap, 12, "^%%ZFRMXEC\201"); | snprintf ((char *) ztrap, ZTLEN - 1, "^%%ZFRMXEC\201"); |
| xecline (3); | xecline (3); |
| ent->status = merr (); | ent->status = merr (); |
| Line 488 short freem_function(freem_ent_t *ent) | Line 492 short freem_function(freem_ent_t *ent) |
| tmp[0] = NUL; | tmp[0] = NUL; |
| ent->value[0] = NUL; | ent->value[0] = NUL; |
| snprintf (tmp, 255, "%%ZFRMRTN\201"); | snprintf (tmp, sizeof (tmp) - 1, "%%ZFRMRTN\201"); |
| symtab (get_sym, tmp, ent->value); | symtab (get_sym, tmp, ent->value); |
| stcnv_m2c (ent->value); | stcnv_m2c (ent->value); |
| Line 541 short freem_procedure(freem_ent_t *ent) | Line 545 short freem_procedure(freem_ent_t *ent) |
| symtab (set_sym, tmp, buf); | symtab (set_sym, tmp, buf); |
| snprintf ((char *) ztrap, 12, "^%%ZFRMXEC\201"); | snprintf ((char *) ztrap, ZTLEN - 1, "^%%ZFRMXEC\201"); |
| xecline (3); | xecline (3); |