//--------------------------------------------------------------------------------
int Parse(CStdioFile& fIn, CFile& fOut, CFile& fOutBkup)
	{
	char temp[4096];
	char temp2[4096];
	char sName[512];
	char* pBuf;
	CTokenMaster* pMaster = NULL;

	sName[0] = 0;
	bool bRv = false;

	for(;;)
		{
		pBuf = temp;
		if(! fIn.ReadString(pBuf, 4096))
			break;
		while(isspace(*pBuf) && *pBuf)
			pBuf++;
		if(! *pBuf)
			continue;
		if(*pBuf == ';')
			continue;
		else
			{
			// remove all non esential characters from the string
			int i = 0;
			for(char* pBuf2 = pBuf; *pBuf2; pBuf2++)
				{
			//	if(isalnum(*pBuf2) || *pBuf2 == ',' || *pBuf2 == '=')
				if(isprint(*pBuf2))
					temp2[i++] = *pBuf2;
				}

			if(i == 0)
				continue;
			temp2[i] = 0;
			pBuf = temp2;
			}

		printf("%s\n", pBuf);
		char* pBreak = strchr(pBuf, '=');
		if(pBreak == NULL)
			{
			printf("syntax error ^^^^^^^ (= missing)\n");
			continue;
			}

		*pBreak = 0;

		if(*pBuf == 0)
			continue;

		LPCTSTR pKeywords[] = {"token", "count", "max", "bits", "name", "serial", "p3",
			"processor", "dongle", "email", "expires", "extra", "backup", "monitor", "parent" };
		enum { IDTOKEN, IDCOUNT, IDMAX, IDBITS, IDNAME, IDSERIAL, IDP3, IDPROCESSOR,
			IDDONGLE, IDEMAIL, IDEXPIRES, IDEXTRA, IDBACKUP, IDMONITOR, IDPARENT, NCOUNT };
		const int nCount = sizeof(pKeywords) / sizeof(LPCTSTR);

		assert(nCount == NCOUNT);

		for(int i = 0; i < nCount; i++)
			{
			if(strcmp(pBuf, pKeywords[i]) == 0)
				break;
			}

		switch(i)
			{
			case IDTOKEN:
				bRv = DoToken(pBreak+1, pMaster);
				break;
			case IDCOUNT:
				bRv = DoCount(pBreak+1, pMaster);
				break;
			case IDMAX:
				bRv = DoMax(pBreak+1, pMaster);
				break;
			case IDBITS:
				bRv = DoBits(pBreak+1, pMaster);
				break;
			case IDNAME:
				bRv = DoName(pBreak+1, pMaster);
				break;
			case IDSERIAL:
			case IDP3:
			case IDPROCESSOR:
				bRv = DoP3Serial(pBreak+1, pMaster);
				break;
			case IDDONGLE:
				bRv = DoDongle(pBreak+1, pMaster);
				break;
			case IDEMAIL:
				bRv = DoEmail(pBreak+1, pMaster);
				break;
			case IDEXPIRES:
				bRv = DoExpires(pBreak+1, pMaster);
				break;
			case IDEXTRA:
				bRv = DoExtra(pBreak+1, pMaster);
				break;
			case IDBACKUP:
				bRv = DoBackup(pBreak+1, pMaster);
				break;
			case IDMONITOR:
				bRv = DoMonitor(pBreak+1, pMaster);
				break;
			case IDPARENT:
				bRv = DoParent(pBreak+1, pMaster);
				break;
			default:
				printf("syntax error ^^^^^^^ (unknown keyword)\n");
				bRv = false;
				continue;
			}
		}

	if(! bRv)
		return -1;

	if(! WriteFile(fOut, fOutBkup))
		return -1;

	return 0;
	}
Exemplo n.º 2
0
int __cdecl main(int argc, char **argv)
{
    char *pszIPAdress = NULL;
    char *pszPort = DEFAULT_PORT;   
    char *pszChildFileMappingObj = NULL;
    WSADATA wsaData;
    BOOL bParent = TRUE;
    int nStatus;

    if (argc > 1)
    {
        int i;

        for(i = 1; i < argc; i++)
        {
            if ((argv[i][0] == '-') || (argv[i][0] == '/'))
            {
                switch(tolower(argv[i][1]))
                {
                    case 'c':
                        bParent = FALSE;
                        if (i + 1 < argc)
                            pszChildFileMappingObj = argv[++i];
                        break;
                    case 'i':
                        if (i + 1 < argc)
                            pszIPAdress = argv[++i];
                        break;
                    case 'e':
                        if (i + 1 < argc)               
                            pszPort = argv[++i];
                        break;
                    default:
                        Usage(argv[0]);
                        exit(1);
                }
            }
            else
            {
                Usage(argv[0]);
                exit(1);
            }
        }
    }

    if ((nStatus = WSAStartup(0x202,&wsaData)) != 0)
    {
        fprintf(stderr, "\nWinsock 2 DLL initialization failed: %d\n", nStatus);
        WSACleanup();
        exit(-1);
    }

    if (bParent) // Run as parent
        DoParent(pszIPAdress, pszPort, argv[0]);
    else    // Run as child
        DoChild(pszChildFileMappingObj);

    WSACleanup();

    return 0;
}