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>