int Check_Pos(struct Property *p, struct PropValue *v) { if(!Check_Value(p, v, PARSE_POS, Parse_Move)) return(FALSE); if(v->value2) /* compressed point list */ { if(sgfc->info->FF < 4) PrintError(E_VERSION_CONFLICT, v->buffer, sgfc->info->FF); switch((Parse_Move)(v->value2, PARSE_POS)) { case -1: PrintError(E_BAD_VALUE_CORRECTED, v->buffer, p->idstr, v->value2); break; case 0: PrintError(E_BAD_VALUE_DELETED, v->buffer, p->idstr); return(FALSE); case 1: break; } if(sgfc->info->GM == 1) return((!ExpandPointList(p, v, TRUE))); else return(TRUE); } return(TRUE); }
int Do_View(struct Node *n, struct Property *p, struct BoardStatus *st) { struct PropValue *v; int i = 0; v = p->value; if(!strlen(v->value)) /* VW[] */ { if(v->next) { PrintError(E_BAD_VW_VALUES, p->buffer, "values after '[]' value found", "deleted"); v = v->next; while(v) v = Del_PropValue(p, v); } return(TRUE); } while(v) { i++; if(!strlen(v->value)) /* '[]' within other values */ { PrintError(E_BAD_VW_VALUES, v->buffer, "empty value found in list", "deleted"); v = Del_PropValue(p, v); } else v = v->next; } if(sgfc->info->GM != 1) /* game not Go */ return(TRUE); if(sgfc->info->FF < 4) /* old definition of VW */ { if(i == 2) /* transform FF3 values */ { v = p->value; v->value2 = v->next->value; v->next->value = NULL; Del_PropValue(p, v->next); if(!ExpandPointList(p, v, FALSE)) { PrintError(E_BAD_VW_VALUES, v->buffer, "illegal FF[3] definition", "deleted"); return(FALSE); } Del_PropValue(p, v); } else /* looks like FF4 defintion (wrong FF set?) */ PrintError(E_BAD_VW_VALUES, p->buffer, "FF[4] definition in older FF found", "parsing done anyway"); } return(TRUE); }