#include "griddleDefs.h" #define MAXLINE 500 char * scan_number(args, resultptr) char *args; int *resultptr; { *resultptr = 0; while ('0' <= *args && *args <= '9') *resultptr = *resultptr * 10 + *args++ - '0'; return(args); } char * scan_connections(args, multiOK, resultptr, multiptr, countptr) char *args; boolean multiOK; int *resultptr; int **multiptr; int *countptr; { int multiArray[20]; int multiCount; int dummy; int i; if (*args == '(') { *args = ' '; multiCount = 0; while (*args == ' ') args = scan_number(args+1, &multiArray[multiCount++]); *resultptr = multiArray[multiCount - 1]; if (multiOK) { *multiptr = typeAllocMulti(int, multiCount); for (i=0; istateVector; if (obj->class == CLASS_REGION) { fillLong(buf, WEST_OFFSET_REG, getIdent(indirTable[reg].west)); fillLong(buf, NORTH_OFFSET_REG, getIdent(indirTable[reg].north)); fillLong(buf, EAST_OFFSET_REG, getIdent(indirTable[reg].east)); fillLong(buf, SOUTH_OFFSET_REG, getIdent(indirTable[reg].south)); fillWord(buf, ORIENT_OFFSET_REG, indirTable[reg].rot); } else if (obj->class == CLASS_DOOR || obj->class == CLASS_BUILDING) { if (index <= indirTable[reg].multiCount) { fillLong(buf, CONNECTION_OFFSET_DOOR, getIdent(indirTable[reg].multi[index-1])); if (index == indirTable[reg].multiCount) { buf = altNoidArray[0]->stateVector; switch (indirTable[reg].rot) { Case 0: fillLong(buf, WEST_OFFSET_REG, -1); Case 1: fillLong(buf, NORTH_OFFSET_REG, -1); Case 2: fillLong(buf, EAST_OFFSET_REG, -1); Case 3: fillLong(buf, SOUTH_OFFSET_REG, -1); } } } else fillLong(buf, CONNECTION_OFFSET_DOOR, -1); } } int getIdent(num) int num; { if (num == 0) return(-1); else return(indirTable[num - 1].region); } char * skipArg(line, stringFlag) char *line; boolean stringFlag; { char *index(); if (stringFlag) { while ((line = index(line+1, '"')) != NULL) if (*(line - 1) != '\\') return(line); } else for (; *line != ' ' && *line != '\n' && *line != '\0'; ++line) ; return(line); } void replaceParams(line) char *line; { char scratchBuf[500]; char *outptr; char *argptr; char *inptr; int offset; enum { LEFT, CENTER, RIGHT, NONE } format; int width; int i; int len; outptr = scratchBuf; inptr = line; while (*inptr != '\0') { if (*inptr == '`') { offset = scanNumber(&inptr); if (*inptr == 'l' || *inptr == 'r' || *inptr == 'c') { format = (*inptr == 'l') ? LEFT : ((*inptr == 'r') ? RIGHT : CENTER); width = scanNumber(&inptr) + 1; } else format = NONE; if (indirArgc < offset) error("parameter offset %d out of range\n", offset); else if (offset == -1) *outptr++ = '`'; else { len = strlen(indirArgv[offset]); switch (format) { Case NONE: for (argptr=indirArgv[offset]; *argptr != '\0'; ) *outptr++ = *argptr++; Case LEFT: for (argptr=indirArgv[offset], i=0; *argptr != '\0' && i < width; ++i) *outptr++ = *argptr++; for (; i < width; ++i) *outptr++ = ' '; Case RIGHT: argptr = indirArgv[offset]; if (len < width) for (i=width-len; i > 0; --i) *outptr++ = ' '; else argptr += len - width; while (*argptr != '\0') *outptr++ = *argptr++; Case CENTER: argptr = indirArgv[offset]; i = 0; if (len < width) for (; i < (width-len)/2; ++i) *outptr++ = ' '; else argptr += (len - width) / 2; for (; i