short Dget2(u_char *ret_buffer, mvar *var, cstring *expr) { short s; // for return values if (var->uci == UCI_IS_LOCALVAR) // for a local var { s = ST_Get(var, ret_buffer); // attempt to get the data if (s >= 0) return s; // if we got data, return it if (s == -(ERRM6)) s = 0; // flag undefined local var } else if (var->name.var_cu[0] == '$') // ssvn? { s = SS_Get(var, ret_buffer); // attempt to get the data if (s >= 0) return s; // if we got data, return it if ((s == -(ERRM38)) || (s == -(ERRM7))) s = 0; // flag undefined ssvn } else // for a global var { bcopy( var, &(partab.jobtab->last_ref), sizeof(var_u) + 5 + var->slen); s = DB_Get(var, ret_buffer); // attempt to get the data if (s >= 0) return s; // if we got data, return it if (s == -(ERRM7)) s = 0; // flag undefined global var } if (s != 0) return s; // if an error, return it bcopy( &expr->buf[0], // copy from here &ret_buffer[0], // to here expr->len); // this many bytes ret_buffer[expr->len] = '\0'; // ensure null terminated return (expr->len); // and return the length }
const char* GetSegName (segment_t Seg) /* Get the name of the given segment */ { return SS_Get (&SegmentNames[Seg]); }