|
|
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_right.c 8.2 2/8/85) ! 9: ! 10: ! 11: /* ! 12: ** IIw_right -- Write down to the Quel parser a string ! 13: ** for a target list of anything but a tupret. ! 14: ** ! 15: ** Parameters: ! 16: ** string -- a string which contains the target list ! 17: ** of a quel statement, where values from C variables ! 18: ** to be plugged in are flagged by the construct ! 19: ** '%<ingres_type>" a la printf(). String is left ! 20: ** unchanged. ! 21: ** To escape the '%' mechanism use '%%'. ! 22: ** ! 23: ** argv -- a vector of pointers to ! 24: ** variables from which the values flagged by the '%' ! 25: ** mechanism are taken. ! 26: ** ! 27: ** Usage: ! 28: ** argv [0] = &double_raise; ! 29: ** IIw_right("dom1 = i.ifield * (1+%f8)", argv); ! 30: ** ! 31: ** Required By: ! 32: ** all the parametrized statements except "tupret_p". ! 33: ** ! 34: ** Error numbers: ! 35: ** 1004 -- bad type in parametrized statement. ! 36: */ ! 37: ! 38: ! 39: ! 40: IIw_right(string, argv) ! 41: char *string; ! 42: char **argv; ! 43: { ! 44: register char *b_st, *e_st; ! 45: register char **av; ! 46: int type; ! 47: char *IIitos(); ! 48: ! 49: if (IIdebug) ! 50: printf("ent IIw_right : string \"%s\"\n", ! 51: string); ! 52: av = argv; ! 53: for (b_st = e_st = string; *e_st; ) ! 54: { ! 55: if (*e_st != '%') ! 56: { ! 57: e_st++; ! 58: continue; ! 59: } ! 60: ! 61: /* provide '%%' escape mechanism */ ! 62: if (e_st [1] == '%') ! 63: { ! 64: e_st [1] = '\0'; ! 65: IIwrite(b_st); ! 66: e_st [1] = '%'; ! 67: b_st = e_st = &e_st [2]; ! 68: continue; ! 69: } ! 70: *e_st = '\0'; ! 71: IIwrite(b_st); ! 72: *e_st++ = '%'; ! 73: ! 74: switch (*e_st) ! 75: { ! 76: ! 77: case 'f' : ! 78: switch (*++e_st) ! 79: { ! 80: ! 81: case '8' : ! 82: IIcvar(*av, opDOUBLE, 8); ! 83: break; ! 84: ! 85: case '4' : ! 86: IIcvar(*av, opFLOAT, 4); ! 87: break; ! 88: ! 89: default : ! 90: goto error_label; ! 91: } ! 92: av++; ! 93: break; ! 94: ! 95: case 'i' : ! 96: switch (*++e_st) ! 97: { ! 98: ! 99: case '4' : ! 100: IIcvar(*av, opLONG, 4); ! 101: break; ! 102: ! 103: case '2' : ! 104: IIcvar(*av, opSHORT, 2); ! 105: break; ! 106: ! 107: case '1' : ! 108: IIcvar(*av, opCHAR, 1); ! 109: ! 110: default : ! 111: goto error_label; ! 112: } ! 113: av++; ! 114: break; ! 115: ! 116: case 'c' : ! 117: IIcvar(*av++, opSTRING, 0); ! 118: break; ! 119: } ! 120: b_st = ++e_st; ! 121: } ! 122: IIwrite(b_st); ! 123: return; ! 124: ! 125: ! 126: error_label : ! 127: IIerror(BADSTMT, 1, &string); ! 128: IIerrflag = 1004; ! 129: /* make sure that part already written down will ! 130: * cause an error, and don't print it. ! 131: * The old IIprint_err is restored in IIerror() ! 132: */ ! 133: IIwrite(","); ! 134: IIo_print = IIprint_err; ! 135: IIprint_err = IIno_err; ! 136: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.