예제 #1
0
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);
}
예제 #2
0
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;
}