#include "rc.h"

int CALLBACK RC(HWND hWnd, int fStatus,
                RC_MESSAGE_CALLBACK lpfnMsg, RC_PARSE_CALLBACK lpfnParse,
                int argc, PCHAR *argv);

extern BOOL WINAPI     Handler(DWORD fdwCtrlType);

int CALLBACK UpdateRCStatus(ULONG u, ULONG dw, PCHAR p)
{
    int i = strlen(p);
    PCHAR ppercent = strchr(p, '%');

    if (i >= 2 && ((p[i - 1] == '\n' && p[i - 2] == '\r') ||
                   (p[i - 1] == '\r' && p[i - 2] == '\n')))
        p[i-2] = '\0';

    if (*p) {
        if (ppercent) {
            for (ppercent=p,i=0 ; *ppercent ; ppercent++)
                if (*ppercent == '%')
                    i++;
            ppercent = malloc(strlen(p) + 1 + i);
            if (ppercent) {
                PCHAR pT = ppercent;

                while (*p) {
                    if (*p == '%')
                        *pT++ = '%';
                    *pT++ = *p++;
                }
                *pT++ = '\0';
                printf(ppercent);
            } else {
                while (strchr(p, '%'))
                    *strchr(p, '%') = ' ';
                printf(p);
            }
        } else {
            printf(p);
        }
    }
    printf("\n");

    return (0);
}

int __cdecl main(int nArgC, char** pArgV)
{
    int rc;

    SetConsoleCtrlHandler(Handler, TRUE);
    rc = RC(NULL, 0, UpdateRCStatus, NULL, nArgC, (PCHAR*)pArgV);
    SetConsoleCtrlHandler(Handler, FALSE);
    exit(rc);
    return 0;
}