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