int main(int argc, char *argv[]) { char *buffer = (char *) NULL, *optarg; char *fieldBuffer = (char *) NULL, *name = (char *) NULL; char *qname = (char *) NULL; int argPos, argNum = argc; int bSize = 0, fbSize = 0; int inverse = FFalse; int keep, fieldID; FieldDsc *firstDsc = (FieldDsc *) NULL, *lastDsc = (FieldDsc *) NULL; FieldDsc *revFirstDsc = (FieldDsc *) NULL, *revLastDsc = (FieldDsc *) NULL; FieldDsc *fDsc, *rfDsc; if ((buffer = FGetLine(buffer, &bSize, stdin)) == (char *) NULL) { perror("Empty File in: main ()"); return (CMfailed); } for (argPos = 1; argPos < argNum;) { if (CMargTest (argv[argPos], "-f", "--field")) { if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) { CMmsgPrint(CMmsgUsrError, "Missing field!"); return (CMfailed); } optarg = argv[argPos]; if ((qname = (char *) realloc(qname, strlen(optarg) + 3)) == (char *) NULL) { perror("Memory Allocation Error in: main ()"); return (CMfailed); } sprintf (qname, "\"%s\"", optarg); name = (char *) NULL; if ((fieldID = FGetFieldID(buffer, qname)) == FFault) { if ((fieldID = FGetFieldID(buffer, optarg)) == FFault) { CMmsgPrint(CMmsgUsrError, "Invalid Field Name: %s", optarg); return (CMfailed); } else name = optarg; } else name = qname; qname = (char *) NULL; if ((fDsc = (FieldDsc *) malloc(sizeof(FieldDsc))) == (FieldDsc *) NULL) { perror("Memory Allocation Error in: main ()"); return (CMfailed); } fDsc->ID = fieldID; fDsc->Name = name; fDsc->Keep = keep; fDsc->Next = (FieldDsc *) NULL; if (firstDsc == (FieldDsc *) NULL) { firstDsc = lastDsc = fDsc; fDsc->Prev = (FieldDsc *) NULL; } else { lastDsc->Next = fDsc; fDsc->Prev = lastDsc; lastDsc = fDsc; } keep = FFalse; if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) break; continue; } if (CMargTest (argv[argPos], "-r", "--rename")) { if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) { CMmsgPrint(CMmsgUsrError, "Missing New Name!"); return (CMfailed); } name = argv[argPos]; if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) break; continue; } if (CMargTest (argv[argPos], "-n", "--nfield")) { keep = FTrue; if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) break; continue; } if (CMargTest (argv[argPos], "-v", "--inverse")) { inverse = FTrue; if ((argNum = CMargShiftLeft(argPos, argv, argNum)) <= argPos) break; continue; } if (CMargTest (argv[argPos], "-h", "--help")) goto Usage; if (argv[argPos][0] == '-') { CMmsgPrint(CMmsgUsrError, "Unknown option: %s!", argv[argPos]); return (CMfailed); } argPos++; } if (inverse) { for (fieldID = 0; FGetFieldPos(buffer, fieldID) != FFault; ++fieldID) { for (fDsc = firstDsc; fDsc != (FieldDsc *) NULL; fDsc = fDsc->Next) if (fDsc->ID == fieldID) break; if ((fDsc == (FieldDsc *) NULL) || (fDsc->Keep == FTrue)) { if (fDsc != (FieldDsc *) NULL) { if ((name = (char *) malloc(strlen(fDsc->Name) + 1)) == (char *) NULL) { perror("Memory Allocation Error in: main ()"); return (CMfailed); } strcpy (name, fDsc->Name); } else { if ((fieldBuffer = FGetField(buffer, fieldID, fieldBuffer, &fbSize)) == (char *) NULL) { CMmsgPrint(CMmsgUsrError, "Total Gebasz in: main ()"); return (CMfailed); } if ((name = (char *) malloc(strlen(fieldBuffer) + 1)) == (char *) NULL) { perror("Memory Allocation Error in: main ()"); return (CMfailed); } strcpy (name, fieldBuffer); } if ((rfDsc = (FieldDsc *) malloc(sizeof(FieldDsc))) == (FieldDsc *) NULL) { perror("Memory Allocation Error in: main ()"); return (CMfailed); } rfDsc->ID = fieldID; rfDsc->Next = (FieldDsc *) NULL; rfDsc->Name = name; if (revFirstDsc == (FieldDsc *) NULL) { revFirstDsc = revLastDsc = rfDsc; rfDsc->Prev = (FieldDsc *) NULL; } else { revLastDsc->Next = rfDsc; rfDsc->Prev = revLastDsc; revLastDsc = rfDsc; } } if (fDsc != (FieldDsc *) NULL) { if (fDsc->Next == (FieldDsc *) NULL) lastDsc = fDsc->Prev; else { fDsc->Next->Prev = fDsc->Prev; } if (fDsc->Prev == (FieldDsc *) NULL) firstDsc = fDsc->Next; else fDsc->Prev->Next = fDsc->Next; free(fDsc); } } firstDsc = revFirstDsc; lastDsc = revLastDsc; } if (firstDsc->Name[0] == '"') { printf("%s", firstDsc->Name); } else { printf("\"%s\"", firstDsc->Name); } fDsc = firstDsc->Next; while (fDsc != (FieldDsc *) NULL) { if (fDsc->Name[0] == '"') { printf("\t%s", fDsc->Name); } else { printf("\t\"%s\"", fDsc->Name); } fDsc = fDsc->Next; } printf("\n"); while ((buffer = FGetLine(buffer, &bSize, stdin)) != (char *) NULL) { if (firstDsc != (FieldDsc *) NULL) { if ((fieldBuffer = FGetField(buffer, firstDsc->ID, fieldBuffer, &fbSize)) == (char *) NULL) { CMmsgPrint(CMmsgUsrError, "Total Gebasz"); return (CMfailed); } printf("%s", fieldBuffer); fDsc = firstDsc->Next; } while (fDsc != (FieldDsc *) NULL) { if ((fieldBuffer = FGetField(buffer, fDsc->ID, fieldBuffer, &fbSize)) == (char *) NULL) { CMmsgPrint(CMmsgUsrError, "Total Gebasz"); return (CMfailed); } printf("\t%s", fieldBuffer); fDsc = fDsc->Next; } printf("\n"); } fDsc = firstDsc->Next; free(firstDsc); while (fDsc != (FieldDsc *) NULL) { firstDsc = fDsc; fDsc = fDsc->Next; free(firstDsc); } return (FSuccess); Usage: printf("Usage: %s [-hvnrf [field | name] [name]] ... < [inputfile] ...", argv[0]); CMmsgPrint(CMmsgInfo, "where fieldnames must match fieldnames in first line of the datafile."); CMmsgPrint(CMmsgInfo, "-f, --field field\n\tSpecifies field (column) to display. Repeat for multiple fields."); CMmsgPrint(CMmsgInfo, "-h, --help\n\tPrint this usage information."); CMmsgPrint(CMmsgInfo, "-r, --rename name\n\tRename field. Sets the field name of the next `-f' or '-n' field.\n\tIf negated operation (`-v') is requested, '-n' or '--nfield' must be used."); CMmsgPrint(CMmsgInfo, "-v, --inverse\n\tNegated operation, suppressing given fields only. Ignored if\n\tno fields are given."); return (FSuccess); }
int GAMEMAP::LoadMap() { FILE *fp; char temp[50]= {0}; int find=0; int i; memset(MapArray,0,sizeof(MapArray)); iMapObjNum=0; memset(MapBkArray,0,sizeof(MapBkArray)); iMapBkObjNum=0; memset(MapEnemyArray,0,sizeof(MapEnemyArray)); iMapEnemyNum=0; memset(MapCoinArray,0,sizeof(MapCoinArray)); iCoinNum=0; fp=fopen(PATH_MAP,"r"); if(!fp) { return 0; } while(!find && !feof(fp)) { FGetLine(temp,fp); if(temp[0]=='*' && temp[1]=='0'+iMatch) { find=1; } } if(!find) { return 0; } //找到了某一关的地图数据 i=0; FGetLineJumpCom(temp,fp); while(temp[0]!='#' && !feof(fp)) { //map data sscanf(temp,"%d %d %d %d %d", &MapArray[i].x, &MapArray[i].y, &MapArray[i].w, &MapArray[i].h, &MapArray[i].id); MapArray[i].show=0; iMapObjNum++; i++; FGetLineJumpCom(temp,fp); } i=0; FGetLineJumpCom(temp,fp); while(temp[0]!='#' && !feof(fp)) { sscanf(temp,"%d %d %d %d %d", &MapBkArray[i].x, &MapBkArray[i].y, &MapBkArray[i].w, &MapBkArray[i].h, &MapBkArray[i].id); MapBkArray[i].show=0; MapBkArray[i].iframe=0; iMapBkObjNum++; i++; FGetLineJumpCom(temp,fp); } i=0; FGetLineJumpCom(temp,fp); while(temp[0]!='#' && !feof(fp)) { sscanf(temp,"%d %d %d %d %d %d %d", &MapEnemyArray[i].x, &MapEnemyArray[i].y, &MapEnemyArray[i].w, &MapEnemyArray[i].h, &MapEnemyArray[i].id, &MapEnemyArray[i].xleft, &MapEnemyArray[i].xright); //动画元件,使用绝对坐标 MapEnemyArray[i].x*=32; MapEnemyArray[i].y*=32; MapEnemyArray[i].xleft*=32; MapEnemyArray[i].xright*=32; MapEnemyArray[i].show=0; MapEnemyArray[i].movex=-ENEMY_STEP_X; iMapEnemyNum++; i++; FGetLineJumpCom(temp,fp); } i=0; FGetLineJumpCom(temp,fp); while(temp[0]!='#' && !feof(fp)) { sscanf(temp,"%d %d %d %d %d", &MapCoinArray[i].x, &MapCoinArray[i].y, &MapCoinArray[i].w, &MapCoinArray[i].h, &MapCoinArray[i].id); MapCoinArray[i].show=1; MapCoinArray[i].iframe=0; iCoinNum++; i++; FGetLineJumpCom(temp,fp); } fclose(fp); return 1; }