| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <regex.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <string.h>
- #include "mt_mt.h"
- #define LINEMAX 256
- #define AQOSDSETTINGVER_LEN 32
- int parseAQ(Item_t *pItem)
- {
- FILE *fp = NULL;
- FILE *binfp = NULL;
- //int retval;
- //long filelen = 0;
- char buf[LINEMAX];
- unsigned char *pOutBuf;
- //int datasize= 0;
- int line=0;
- int retval = 0;
- int value;
- int databyte;
- char AQOSDSetting_ver[AQOSDSETTINGVER_LEN];
- #if WRITEITEMTOFILE
- char binFileName[256];
- #endif
- pOutBuf = (unsigned char *)malloc(MAXBINSIZE);
- if (pOutBuf == NULL)
- {
- fprintf(stderr, "Unable alloc pOutBuf buffer\n");
- return -1;
- }
- pItem->pData = pOutBuf;
- pItem->size = 0;
- if (pItem->filepath != NULL && pOutBuf!= NULL)
- {
- printf("%s 'open file %s\n", __FUNCTION__, pItem->filepath);
- fp = fopen(pItem->filepath, "rb");;
- #if WRITEITEMTOFILE
- strcpy(binFileName, pItem->name);
- binfp = fopen(strcat(binFileName,".bin"), "wb");
- if (fp != NULL && binfp != NULL)
- #else
- if (fp != NULL)
- #endif
- {
- char *pch;
- //int reti;
- //regmatch_t match[2];
- /* Compile regular expression */
- //reti = regcomp(®ex, "^ItemFile[ \t]*=[ \t]*\"[a-zA-Z0-9._/\\]*\"[ \t]*", 0);
- //reti = regcomp(®ex, "^[ \t]*#[.]*", 0);
- //if( reti ){ fprintf(stderr, "Could not compile regex\n"); exit(1); }
- /* Free compiled regular expression if you want to use the regex_t again */
- //fgets (buf , LINEMAX , fp);
- //line++;
- if (fgets (buf , LINEMAX , fp) == NULL)
- {
- fprintf(stderr, "%s %d fgets error!\n", __FUNCTION__, __LINE__);
- #if WRITEITEMTOFILE
- fclose(binfp);
- #endif
- fclose(fp);
- free(pOutBuf);
- return -1;
- }
- pch = strtok (buf," @\t\r\n");
- pch = strtok (NULL, " @\t\r\n");
- pch = strtok (NULL, " @\t\r\n");
- if (strlen(pch) <=32)
- {
- //fprintf(stderr, "strlen(pch) = %d\n", strlen(pch));
- memset(AQOSDSetting_ver,0,32);
- memcpy(AQOSDSetting_ver, pch, strlen(pch));
- //fwrite(PQOSDSetting_ver, sizeof(char)*AQOSDSETTINGVER_LEN, 1, binfp);
- writeOutputBuf(AQOSDSetting_ver, sizeof(char)*AQOSDSETTINGVER_LEN, &pOutBuf, binfp);
- pItem->size += sizeof(char)*AQOSDSETTINGVER_LEN;;
- }
- else
- {
- //fprintf(stderr, "PQOSDSetting_ver len > AQOSDSETTINGVER_LEN, strip it\n");
- //fprintf(stderr, "strlen(pch) = %d\n", strlen(pch));
- memset(AQOSDSetting_ver,0,AQOSDSETTINGVER_LEN);
- memcpy(AQOSDSetting_ver, pch, AQOSDSETTINGVER_LEN);
- //fwrite(AQOSDSetting_ver, sizeof(char)*AQOSDSETTINGVER_LEN, 1, binfp);
- writeOutputBuf(AQOSDSetting_ver, sizeof(char)*AQOSDSETTINGVER_LEN, &pOutBuf, binfp);
- pItem->size += sizeof(char)*AQOSDSETTINGVER_LEN;
- }
- line++;
- //fgets (buf , LINEMAX , fp);
- //line++;
- while( fgets (buf , LINEMAX , fp) != NULL )
- {
- short data_word;
- char data_byte;
- line++;
- //reti = regexec(®ex, buf, 1, match, 0);
- //if( !reti ){
- // puts("Match");
- // printf("==>%s", buf);
- //}
- //else if( reti == REG_NOMATCH ){
- // puts("No match");
- // printf("==>%s", buf);
- //}
- //else{
- // //regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
- // fprintf(stderr, "Regex match failed:\n");
- //}
- pch = strtok (buf,"@");
- pch = strtok (NULL, " @\t\r\n");
- value = atoi(pch);
- //printf ("%s\n",pch);
- pch = strtok (NULL, " @\t\r\n");
- //printf ("%s\n",pch);
- databyte = atoi(pch);
- switch (databyte)
- {
- case 1:
- data_byte = (char) value;
- //fwrite(&data_byte, sizeof(char), 1, binfp);
- writeOutputBuf(&data_byte, sizeof(char), &pOutBuf, binfp);
- pItem->size += sizeof(char);
- break;
- case 2:
- data_word = (short) value;
- //fwrite(&data_word, sizeof(short), 1, binfp);
- writeOutputBuf(&data_word, sizeof(short), &pOutBuf, binfp);
- pItem->size += sizeof(short);
- break;
- case 3:
- data_byte = (char) (value & 0xff);
- data_word = (short) (value>>8);
- //fwrite(&data_byte, sizeof(char), 1, binfp);
- //fwrite(&data_word, sizeof(short), 1, binfp);
- writeOutputBuf(&data_byte, sizeof(char), &pOutBuf, binfp);
- writeOutputBuf(&data_word, sizeof(short), &pOutBuf, binfp);
- pItem->size += sizeof(char)+ sizeof(short);
- break;
- case 4:
- //fwrite(&value, sizeof(int), 1, binfp);
- writeOutputBuf(&value, sizeof(int), &pOutBuf, binfp);
- pItem->size += sizeof(int);
- break;
- }
- }
- //regfree(®ex);
- }
- else
- {
- perror("Can't open file");
- }
- }
- //for 4 bytes aligment
- pItem->dummyByteNums = 0;
- if ((pItem->size % 4) != 0)
- {
- pItem->dummyByteNums = 4 - (pItem->size % 4);
- }
- if (fp != NULL)
- {
- fclose(fp);
- }
- if (binfp != NULL)
- {
- fflush(binfp);
- fclose(binfp);
- }
- return retval;
- }
|