-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
| 1070 | |
| 1071 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ |
| 1072 | int iiAddCproc(const char *libname, const char *procname, BOOLEAN pstatic, |
| 1073 | BOOLEAN(*func)(leftv res, leftv v)) |
| 1074 | { |
| 1075 | procinfov pi; |
| 1076 | idhdl h; |
| 1077 | |
| 1078 | #ifndef SING_NDEBUG |
| 1079 | int dummy; |
| 1080 | if (IsCmd(procname,dummy)) |
| 1081 | { |
| 1082 | Werror(">>%s< is a reserved name",procname); |
| 1083 | return 0; |
| 1084 | } |
| 1085 | #endif |
| 1086 | |
| 1087 | h=IDROOT->get(procname,0); |
| 1088 | if ((h!=NULL) |
| 1089 | && (IDTYP(h)==PROC_CMD)) |
| 1090 | { |
| 1091 | pi = IDPROC(h); |
| 1092 | #if 0 |
| 1093 | if ((pi->language == LANG_SINGULAR) |
| 1094 | &&(BVERBOSE(V_REDEFINE))) |
| 1095 | Warn("extend `%s`",procname); |
| 1096 | #endif |
| 1097 | } |
| 1098 | else |
| 1099 | { |
| 1100 | h = enterid(procname,0, PROC_CMD, &IDROOT, TRUE); |
| 1101 | } |
| 1102 | if ( h!= NULL ) |
| 1103 | { |
| 1104 | pi = IDPROC(h); |
| 1105 | if((pi->language == LANG_SINGULAR) |
| 1106 | ||(pi->language == LANG_NONE)) |
| 1107 | { |
| 1108 | omfree(pi->libname); |
| 1109 | pi->libname = omStrDup(libname); |
| 1110 | omfree(pi->procname); |
| 1111 | pi->procname = omStrDup(procname); |
| 1112 | pi->language = LANG_C; |
| 1113 | pi->ref = 1; |
| 1114 | pi->is_static = pstatic; |
| 1115 | pi->data.o.function = func; |
| 1116 | } |
| 1117 | else if(pi->language == LANG_C) |
| 1118 | { |
| 1119 | if(pi->data.o.function == func) |
| 1120 | { |
| 1121 | pi->ref++; |
| 1122 | } |
| 1123 | else |
| 1124 | { |
| 1125 | omfree(pi->libname); |
| 1126 | pi->libname = omStrDup(libname); |
| 1127 | omfree(pi->procname); |
| 1128 | pi->procname = omStrDup(procname); |
| 1129 | pi->language = LANG_C; |