-+-+-+-+-+-+-+-+ START OF PART 223 -+-+-+-+-+-+-+-+ X** non-blank characters will be returned as the string. X*/ X`7B X Pint wi; X Pint ch; X ptkboolean finished; X `20 X if (fileswitch) X `7B X set_i_prompt(prom); X wi = 0; X finished = FALSE; X ch = getc(inputscript); X while ((ch == ' ' `7C`7C ch == '\n') && (ch != EOF)) X ch = getc(inputscript); X if (ch == EOF) X `7B X str`5Bwi++`5D = EOF; X finished = TRUE; X `7D X while (!finished) X `7B X str`5Bwi`5D = ch; X wi++; X if ((ch == '"') && (wi > 1)) X finished = TRUE; X else X ch = getc(inputscript); X `7D X `7D X else X `7B X Pchar prompt`5B80`5D; X X sprintf(prompt, "%s> ", prom); X ptk_readstring(phinws, "", prompt, &phinecho, 80, str, &wi); X `7D X str`5Bwi`5D = '\0'; X stripstr(str, '"'); X`7D /* readquote */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readstring(C(Pchar *) str, C(Pchar *) prom) XPreANSI(Pchar *str) XPreANSI(Pchar *prom) X/* X** Reads a string. if the first non-blank character found is X** a double quote ("), the string is assumed to quoted, and must X** be "string", on one line. otherwise, the next sequence of X** non-blank characters will be returned as the string`20 X*/ X`7B X Pint wi; X Pint ch; X ptkboolean finished; X X if (fileswitch) X `7B X set_i_prompt(prom); X wi = 0; X finished = FALSE; X ch = getc(inputscript); X while ((ch == ' ' `7C`7C ch == '\n') && (ch != EOF)) X ch = getc(inputscript); X if (ch == EOF) X `7B X str`5Bwi++`5D = EOF; X finished = TRUE; X `7D X while (!finished) X `7B X str`5Bwi`5D = ch; X wi++; X if (ch == '\0') X finished = TRUE; X else X if (ch == '\n' `7C`7C ch == ' ' `7C`7C ch == EOF) X `7B X finished = TRUE; X if (str`5B0`5D != '!') X wi--; X `7D X else X ch = getc(inputscript); X `7D X `7D X else X `7B X Pchar prompt`5B80`5D; X X sprintf(prompt, "%s> ", prom); X ptk_readstring(phinws, "", prompt, &phinecho, 80, str, &wi); X `7D X str`5Bwi`5D = '\0'; X`7D /* readstring */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic ptkboolean readfunction(C(Pchar *) str) XPreANSI(Pchar *str) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X readstring(str, default_prompt_string); X if (str != '\0') X return TRUE; X else X return FALSE; X`7D /* readfunction */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readargument(C(Pchar *) str, C(Pchar *) prom) XPreANSI(Pchar *str) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X readstring(str, prom); X stripstr(str, '"'); X if (writingscript) X phinprintf(PTKEOUTPUT, "\"%s\" ", str); X`7D /* readargument */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Pint readinteger(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X /* reads a single integer */ X Pint i; X ptkboolean ok; X Pchar str`5B255`5D; X X readstring(str, prom); X i = 0; X i = atoi(str); X if (writingscript) X phinprintf(PTKEOUTPUT, "%d ", i); X return i; X`7D /* readinteger */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Pint readintvalue(C(Pchar *) prom, C(ptkehashtable) htable) XPreANSI(Pchar *prom) XPreANSI(ptkehashtable htable) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X /* reads a single integer */ X Pint i; X ptkboolean ok; X Pchar str`5B80`5D; X Pint wi; X Pint ch; X ptkboolean finished, instring; X X instring = FALSE; X if (fileswitch) X `7B X set_i_prompt(prom); X wi = 0; X finished = FALSE; X ch = getc(inputscript); X while ((ch == ' ' `7C`7C ch == '\n') && (ch != EOF)) X ch = getc(inputscript); X if (ch == EOF) X `7B X str`5Bwi++`5D = EOF; X finished = TRUE; X `7D X if (ch == '"') X `7B X instring = TRUE; X while (!finished) X `7B X str`5Bwi`5D = ch; X wi++; X if ((ch == '"') && (wi > 1)) X finished = TRUE; X else X ch = getc(inputscript); X `7D X str`5Bwi`5D = '\0'; X `7D X else X `7B X while (!finished) X `7B X str`5Bwi`5D = ch; X wi++; X if (ch == '\0') X finished = TRUE; X else X if (ch == '\n' `7C`7C ch == ' ') X `7B X finished = TRUE; X wi--; X `7D X else X ch = getc(inputscript); X `7D X str`5Bwi`5D = '\0'; X `7D X `7D X else X `7B X Pchar prompt`5B80`5D; X X sprintf(prompt, "%s> ", prom); X ptk_readstring(phinws, "", prompt, &phinecho, 80, str, &wi); X if (strchr(str, '\"') != NULL) X instring = TRUE; X `7D X if (instring) X `7B X if (writingscript) X phinprintf(PTKEOUTPUT, "%s ", str); X stripstr(str, '"'); X switch (htable) X `7B X case PTKESTRUCTID: X if (ptk_hashtableused("structureid")) X return ptk_stringtoint("structureid", str); X else X return 0; X break; `20 X X case PTKELABELVAL: X if (ptk_hashtableused("label")) X return ptk_stringtoint("label", str); X else X return 0; X break; `20 X X case PTKEPICKID: X if (ptk_hashtableused("pickid")) X return ptk_stringtoint("pickid", str); X else X return 0; X break; `20 X X case PTKEVIEWIND: X if (ptk_hashtableused("viewindex")) X return ptk_stringtoint("viewindex", str); X else X return 0; X break; `20 X X case PTKECOLOURIND: X if (ptk_hashtableused("colourindex")) X return ptk_stringtoint("colourindex", str); X else X return 0; X break; `20 X X case PTKENAME: X if (ptk_hashtableused("name")) X return ptk_stringtoint("name", str); X else X return 0; X break; `20 X `7D X `7D X else X `7B X i = atoi(str); X if (writingscript) X phinprintf(PTKEOUTPUT, "%d ", i); X return i; X `7D X`7D /* readintvalue */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Pfloat readreal(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X /* reads a single real */ X Pfloat r; X ptkboolean ok; X Pchar str`5B255`5D; X X readstring(str, prom); X r = 0.0; X sscanf(str, "%f", &r);`20 X if (writingscript) X phinprintf(PTKEOUTPUT, "%f ", r); X return r; X`7D /* readreal */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readmatrix(C(Pmatrix) m, C(Pchar *) prom) XPreANSI(Pmatrix m) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pint i, j; X Pchar prompt`5B80`5D, str`5B80`5D; X X i = j = 0; X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X readstring(str, prompt); X if (strncmp(str, "VMM", 3) == 0) X `7B X memcpy(m, vmm, sizeof(Pmatrix)); X if (writingscript) X writematrix(PTKEOUTPUT, m); X `7D X else X if (strncmp(str, "VOM", 3) == 0) X `7B X memcpy(m, vom, sizeof(Pmatrix)); X if (writingscript) X writematrix(PTKEOUTPUT, m); X `7D X else X if (strncmp(str, "TM", 3) == 0) X `7B X memcpy(m, tm, sizeof(Pmatrix)); X if (writingscript) X writematrix(PTKEOUTPUT, m); X `7D X else X `7B X m`5Bi`5D`5Bj`5D = 0.0; X sscanf(str, "%f", &m`5Bi`5D`5Bj`5D);`20 X for (j = 1; j <= 2; j++) X `7B X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X m`5Bi`5D`5Bj`5D = readreal(prompt); X `7D X for (i = 1; i <= 2; i++)`20 X `7B X for (j = 0; j <= 2; j++) X `7B X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X m`5Bi`5D`5Bj`5D = readreal(prompt); X `7D X X `7D X `7D X if (writingscript) X phinprintf(PTKEOUTPUT, "\n"); `20 X`7D /* readmatrix */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readmatrix3(C(Pmatrix3) m, C(Pchar *) prom) XPreANSI(Pmatrix3 m) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pint i, j; X Pchar prompt`5B80`5D, str`5B80`5D; X X i = j = 0; X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X readstring(str, prompt); X if (strncmp(str, "VMM3", 3) == 0) X `7B X memcpy(m, vmm3, sizeof(Pmatrix3)); X if (writingscript) X writematrix3(PTKEOUTPUT, m); X `7D X else X if (strncmp(str, "VOM3", 3) == 0) X `7B X memcpy(m, vom3, sizeof(Pmatrix3)); X if (writingscript) X writematrix3(PTKEOUTPUT, m); X `7D X else X if (strncmp(str, "TM3", 3) == 0) X `7B X memcpy(m, tm3, sizeof(Pmatrix3)); X if (writingscript) X writematrix3(PTKEOUTPUT, m); X `7D X else X `7B X m`5Bi`5D`5Bj`5D = 0.0; X sscanf(str, "%f", &m`5Bi`5D`5Bj`5D);`20 X for (j = 1; j <= 3; j++) X `7B X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X m`5Bi`5D`5Bj`5D = readreal(prompt); X `7D X for (i = 1; i <= 3; i++)`20 X `7B X for (j = 0; j <= 3; j++) X `7B X sprintf(prompt, "%s, element `5B%d`5D`5B%d`5D ? ", prom, i, j); X m`5Bi`5D`5Bj`5D = readreal(prompt); X `7D X X `7D X `7D X if (writingscript) X phinprintf(PTKEOUTPUT, "\n"); `20 X`7D /* readmatrix3 */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readintlst(C(Pintlst *) nlist, C(Pchar *) prom,`20 X C(ptkehashtable) htable) XPreANSI(Pintlst *nlist) XPreANSI(Pchar *prom) XPreANSI(ptkehashtable htable) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pint i; X Pchar prompt`5B255`5D; X X sprintf(prompt, "%s, number ? ", prom); X nlist->number = readinteger(prompt); X prompt`5B0`5D = '\0'; X nlist->integers = (Pint *)calloc(nlist->number, sizeof(Pint)); X for (i = 0; i < nlist->number; i++)`20 X `7B X sprintf(prompt, "%s, integer `5B%d`5D? ", prom, i); X nlist->integers`5Bi`5D = readintvalue(prompt, htable); X if (writingscript) /* newline between each name */ X phinprintf(PTKEOUTPUT, "\n"); X `7D X`7D /* readintlst */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void readintarray(C(Pint) numints, C(Pint *) nlist, C(Pchar *) prom, X C(ptkehashtable) htable) XPreANSI(Pint numints) XPreANSI(Pint *nlist) XPreANSI(Pchar *prom) XPreANSI(ptkehashtable htable) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pint i; X Pchar prompt`5B255`5D; X X for (i = 0; i < numints; i++)`20 X `7B X sprintf(prompt, "%s `5B%d`5D ? ", prom, i); X nlist`5Bi`5D = readintvalue(prompt, htable); X if (writingscript) /* newline between each name */ X phinprintf(PTKEOUTPUT, "\n"); X `7D X`7D /* readintarray */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Ppoint readpoint(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Ppoint t; X Pchar pointprom`5B255`5D; X X sprintf(pointprom, "%s, x ? ", prom); X t.x = readreal(pointprom); X sprintf(pointprom, "%s, y ? ", prom); X t.y = readreal(pointprom); X return t; X`7D /* readpoint */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Pvector readvector(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pvector t; X Pchar pointprom`5B255`5D; X X sprintf(pointprom, "%s, x ? ", prom); X t.x = readreal(pointprom); X sprintf(pointprom, "%s, y ? ", prom); X t.y = readreal(pointprom); X return t; X`7D /* readvector */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Plimit readlimit(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Plimit t; X Pchar pointprom`5B255`5D; X X sprintf(pointprom, "%s, xmin ? ", prom); X t.xmin = readreal(pointprom); X sprintf(pointprom, "%s, ymin ? ", prom); X t.ymin = readreal(pointprom); X sprintf(pointprom, "%s, xmax ? ", prom); X t.xmax = readreal(pointprom); X sprintf(pointprom, "%s, ymax ? ", prom); X t.ymax = readreal(pointprom); X return t; X`7D /* readlimit */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Ppoint3 readpoint3(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Ppoint3 t; X Pchar pointprom`5B255`5D; X X sprintf(pointprom, "%s, x ? ", prom); X t.x = readreal(pointprom); X sprintf(pointprom, "%s, y ? ", prom); X t.y = readreal(pointprom); X sprintf(pointprom, "%s, z ? ", prom); X t.z = readreal(pointprom); X return t; X`7D /* readpoint3 */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic Pvector3 readvector3(C(Pchar *) prom) XPreANSI(Pchar *prom) X/* X** description:`20 X** input params:`20 X** output params:`20 X** return value:`20 X*/ X`7B X Pvector3 t; X Pchar pointprom`5B255`5D; X +-+-+-+-+-+-+-+- END OF PART 223 +-+-+-+-+-+-+-+-