Annotation of freem/src/symtab_dispatch.c, revision 1.7
1.1 snw 1: /*
1.7 ! snw 2: * $Id: symtab_dispatch.c,v 1.6 2025/04/28 14:52:54 snw Exp $
1.1 snw 3: * symbol table dispatch module
4: *
5: *
1.2 snw 6: * Author: Serena Willis <snw@coherent-logic.com>
1.1 snw 7: * Copyright (C) 1998 MUG Deutschland
1.3 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.4 snw 26: * $Log: symtab_dispatch.c,v $
1.7 ! snw 27: * Revision 1.6 2025/04/28 14:52:54 snw
! 28: * Temporarily revert global handler refactor and fix reference regression in xecline
! 29: *
1.6 snw 30: * Revision 1.5 2025/04/13 04:22:43 snw
31: * Fix snprintf calls
32: *
1.5 snw 33: * Revision 1.4 2025/03/27 03:27:35 snw
34: * Install init scripts to share/freem/examples/init and fix regression in method dispatch
35: *
1.4 snw 36: * Revision 1.3 2025/03/09 19:50:47 snw
37: * Second phase of REUSE compliance and header reformat
38: *
1.3 snw 39: *
40: * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
41: * SPDX-License-Identifier: AGPL-3.0-or-later
1.1 snw 42: **/
43:
44: #include <string.h>
45: #include <ctype.h>
46: #include "mpsdef.h"
47: #include "mref.h"
48: #include "objects.h"
49:
50: void symtab (short action, char *key, char *data)
51: {
52: register int i;
53: register int j;
54: char ch;
55:
56: short res;
57: char obj_class[255];
58: char t_rou[255];
59: char t_cls[255];
60:
61: freem_ref_t rv;
62: freem_ref_t *r = &rv;
63:
64: mref_init (r, MREF_RT_LOCAL, "");
65: internal_to_mref (r, key);
66:
1.6 snw 67: /*
1.1 snw 68: res = obj_is_object (r->name);
69:
70: if (res == TRUE) {
71: res = obj_get_attribute (r->name, "CLASS", obj_class);
72: stcpy (t_rou, rou_name);
73: stcnv_m2c (t_rou);
74: strcpy (t_cls, &(obj_class[1]));
75:
76: if ((strcmp (t_rou, t_cls) != 0) && (obj_is_field_private (key) == TRUE)) {
77: merr_raise (OBJFLDACCV);
78: return;
79: }
80:
81: if (r->subscript_count == 0 && action == kill_sym) {
82:
1.5 snw 83: if (destructor_ct < 10) {
84: snprintf (destructors[destructor_ct++], OBJ_DSTRSIZE - 1, "DESTROY^%%SYSOOP(\"%s\",.%s)", t_cls, r->name);
1.1 snw 85: }
86:
87: obj_destroy (key);
88:
89: }
90:
1.6 snw 91: }
92: */
1.1 snw 93:
94: if (action != fra_order && action != fra_query) {
95: for (i = 0; i < r->subscript_count; i++) {
96:
97: if (strlen (r->subscripts[i]) < 1) {
98: merr_raise (SBSCR);
99: return;
100: }
101:
102: }
103: }
104:
105: if (rtn_dialect () == D_M77) {
106:
107: for (i = 0; i < r->subscript_count; i++) {
108: for (j = 0; j < strlen (r->subscripts[i]); j++) {
109:
110: ch = r->subscripts[i][j];
111:
112: if (!isdigit (ch)) {
113: merr_raise (NOSTAND);
114: return;
115: }
116:
117: }
118: }
119:
120: }
1.7 ! snw 121:
1.1 snw 122: symtab_bltin (action, key, data);
123:
124: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>