|
|
1.1 ! root 1: # include <ingres.h> ! 2: # undef MAXNAME ! 3: # include "../equel/constants.h" ! 4: # include "IIglobals.h" ! 5: # include <sccs.h> ! 6: # include <errors.h> ! 7: ! 8: SCCSID(@(#)IIw_left.c 8.2 2/8/85) ! 9: ! 10: /* ! 11: ** IIw_left -- writes down a "tupret's" target list. ! 12: ** ! 13: ** Parameters: ! 14: ** string -- a char * to a string containing everything ! 15: ** inside the equivalent "retrieve" statement, ! 16: ** but instead of result domain names, the string ! 17: ** should have '%<ingres_type>', where <ingres_type> ! 18: ** is the ingres type of the resulting C variable. ! 19: ** To escape a '%' use 2 ("%%"). ! 20: ** 'String' is left unchanged after the call. ! 21: ** argv -- a vector of pointers to the ! 22: ** corresponding C variables. ! 23: ** ! 24: ** Usage: ! 25: ** argv [0] = &double_var; ! 26: ** argv [1] = &int_var; ! 27: ** IIw_left("%f8 = i.double, %i2=i.ifield", argv); ! 28: ** ! 29: ** Required by: ! 30: ** parametrized retrieves without a target relation ! 31: ** ! 32: ** Requires: ! 33: ** Uses the ret_sym array IIretsym, and the old equel ! 34: ** method for doing tuprets. NOTE that this does not ! 35: ** allow dynamic (before each tuple) resolution of ! 36: ** the result C variables as does the new tupret method. ! 37: ** ! 38: ** Error numbers: ! 39: ** 1003 -- 1 parameter, the erroneous string. ! 40: ** "Bad format for a domain in a param retrieve ! 41: ** without a result relation" ! 42: */ ! 43: ! 44: ! 45: IIw_left(string, argv) ! 46: char *string; ! 47: char **argv; ! 48: { ! 49: register char *b_st, *e_st; ! 50: register char **av; ! 51: int type; ! 52: char *IIitos(); ! 53: ! 54: if (IIdebug) ! 55: printf("ent IIw_left : string \"%s\"\n", ! 56: string); ! 57: av = argv; ! 58: for (b_st = e_st = string; *e_st; ) ! 59: { ! 60: if (*e_st != '%') ! 61: { ! 62: e_st++; ! 63: continue; ! 64: } ! 65: ! 66: /* provide escape method */ ! 67: if (e_st [1] == '%') ! 68: { ! 69: e_st [1] = '\0'; ! 70: IIwrite(b_st); ! 71: /* leave string intact */ ! 72: e_st [1] = '%'; ! 73: b_st = e_st = &e_st [2]; ! 74: continue; ! 75: } ! 76: *e_st = '\0'; ! 77: IIwrite(b_st); ! 78: *e_st++ = '%'; ! 79: IIwrite(" RET_VAR "); ! 80: ! 81: switch (*e_st) ! 82: { ! 83: ! 84: case 'f' : ! 85: switch (*++e_st) ! 86: { ! 87: ! 88: case '8' : ! 89: type = opDOUBLE; ! 90: break; ! 91: ! 92: case '4' : ! 93: type = opFLOAT; ! 94: break; ! 95: ! 96: default : ! 97: goto error_label; ! 98: } ! 99: break; ! 100: ! 101: case 'i' : ! 102: switch (*++e_st) ! 103: { ! 104: ! 105: case '4' : ! 106: type = opLONG; ! 107: break; ! 108: ! 109: case '2' : ! 110: type = opSHORT; ! 111: break; ! 112: ! 113: default : ! 114: goto error_label; ! 115: } ! 116: break; ! 117: ! 118: case 'c' : ! 119: type = opSTRING; ! 120: break; ! 121: } ! 122: IIretrieve(*av++, type); ! 123: b_st = ++e_st; ! 124: } ! 125: IIwrite(b_st); ! 126: return; ! 127: ! 128: ! 129: error_label : ! 130: IIerror(BADRET, 1, &string); ! 131: IIerrflag = 1003; ! 132: /* make sure that part already written down will ! 133: * cause an error, and ignore that error ! 134: */ ! 135: IIwrite(","); ! 136: IIo_print = IIprint_err; ! 137: IIprint_err = IIno_err; ! 138: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.