Пример #1
0
static void PrintPlayerStats(FILE *stream, wbstartstruct_t *stats,
        int player_num)
{
    wbplayerstruct_t *player = &stats->plyr[player_num];

    fprintf(stream, "Player %i (%s):\n", player_num + 1,
            player_colors[player_num]);

    /* Kills percentage */

    fprintf(stream, "\tKills: ");
    PrintPercentage(stream, player->skills, stats->maxkills);
    fprintf(stream, "\n");

    /* Items percentage */

    fprintf(stream, "\tItems: ");
    PrintPercentage(stream, player->sitems, stats->maxitems);
    fprintf(stream, "\n");

    /* Secrets percentage */

    fprintf(stream, "\tSecrets: ");
    PrintPercentage(stream, player->ssecret, stats->maxsecret);
    fprintf(stream, "\n");
}
Пример #2
0
/*
 * Show our progress, unless we're expanding to a pipe.  Invoked as a
 * callback by nufxlib.
 */
NuResult ProgressUpdater(NuArchive* pArchive, void* vProgress)
{
    const NuProgressData* pProgress = vProgress;
    NulibState* pState;
    const char* percStr;
    const char* actionStr;
    char nameBuf[kMaxDisplayLen+1];
    Boolean showName, eolConv;

    Assert(pArchive != NULL);
    (void) NuGetExtraData(pArchive, (void**) &pState);
    Assert(pState != NULL);

    if (NState_GetSuppressOutput(pState))
        return kNuOK;

    percStr = NULL;
    showName = false;
    eolConv = false;

    switch (pProgress->operation) {
    case kNuOpAdd:
        switch (pProgress->state) {
        case kNuProgressPreparing:
        case kNuProgressOpening:
            actionStr = "adding     ";
            showName = true;
            break;
        case kNuProgressAnalyzing:
            actionStr = "analyzing  ";
            break;
        case kNuProgressCompressing:
            actionStr = "compressing";
            break;
        case kNuProgressStoring:
            actionStr = "storing    ";
            break;
        default:
            actionStr = "??????     ";
            break;
        }
        break;
    case kNuOpExtract:
        switch (pProgress->state) {
        case kNuProgressPreparing:
        case kNuProgressOpening:
            actionStr = "extracting";
            showName = true;
            break;
        case kNuProgressExpanding:
            actionStr = "expanding ";
            break;
        case kNuProgressCopying:
            actionStr = "extracting";
            break;
        default:
            actionStr = "??????    ";
            break;
        }
        if (pProgress->expand.convertEOL == kNuConvertOn)
            eolConv = true;
        break;
    case kNuOpTest:
        switch (pProgress->state) {
        case kNuProgressPreparing:
        case kNuProgressOpening:
            showName = true;
            /* no break */
        case kNuProgressExpanding:
        case kNuProgressCopying:
            actionStr = "verifying";
            break;
        default:
            actionStr = "??????   ";
            break;
        }
        break;
    default:
        Assert(0);
        actionStr = "????";
    }

    switch (pProgress->state) {
    case kNuProgressDone:
        actionStr = NULL;
        percStr = "DONE\n";
        break;
    case kNuProgressSkipped:
        actionStr = NULL;
        percStr = "SKIP\n";
        break;
    case kNuProgressAborted:    /* not currently possible in NuLib2 */
        actionStr = NULL;
        percStr = "CNCL\n";
        break;
    case kNuProgressFailed:
        actionStr = NULL;
        percStr = "FAIL\n";
        break;
    default:
        break;
    }

    if (showName) {
        /*
         * Use "pathname" (whole thing) rather than "filename" (file part).
         * Could also use "origPathname", but I like to show what they're
         * getting instead of what they're giving.
         */
        int len = strlen(pProgress->pathnameUNI);
        if (len < sizeof(nameBuf)) {
            strcpy(nameBuf, pProgress->pathnameUNI);
        } else {
            nameBuf[0] = nameBuf[1] = '.';
            strncpy(nameBuf+2,
                pProgress->pathnameUNI + len - (sizeof(nameBuf)-3),
                sizeof(nameBuf)-3);
            nameBuf[sizeof(nameBuf)-1] = '\0';
        }
    }

    if (actionStr == NULL && percStr != NULL) {
        printf("\r%s", percStr);
    } else if (actionStr != NULL && percStr == NULL) {
        if (percStr == NULL) {
            putc('\r', stdout);
            PrintPercentage(pProgress->uncompressedLength,
                pProgress->uncompressedProgress);
            if (showName)
                printf(" %s%c %s", actionStr, eolConv ? '+' : ' ', nameBuf);
            else
                printf(" %s%c", actionStr, eolConv ? '+' : ' ');
        }
    } else {
        Assert(0);
        printf("????\n");
    }

    fflush(stdout);
    /*printf(" %ld \n", pProgress->uncompressedProgress);*/
    /*usleep(250000);*/

    return kNuOK;
}