52 if(cpLhs == NULL || *cpLhs == 0){uiLhsEmpty =
APG_TRUE;}
53 if(cpRhs == NULL || *cpRhs == 0){uiRhsEmpty =
APG_TRUE;}
54 if(uiLhsEmpty && uiRhsEmpty){
return 0;}
55 if(uiLhsEmpty){
return -1;}
56 if(uiRhsEmpty){
return 1;}
63 if(cLhs >= 65 && cLhs <= 90){cLhs += 32;}
64 if(cRhs >= 65 && cRhs <= 90){cRhs += 32;}
65 if(cLhs < cRhs){
return -1;}
66 if(cLhs > cRhs){
return 1;}
67 if(cLhs == 0){
return 0;}
80 if(acpAChars && cpChars && uiLen){
81 apg_achar* acpACharsEnd = acpAChars + uiLen;
82 for(; acpAChars < acpACharsEnd; acpAChars++, cpChars++)
87 static char g_caTrans[17] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
'X'};
92 unsigned long int uiMaskGen = 0xF;
93 unsigned long int uiSizeof = uiSize * 8;
94 unsigned long int uiShiftBits = uiSizeof - uiShift;
95 unsigned long int uiMask = uiMaskGen << uiShiftBits;
96 char cHex = (tChar & uiMask) >> uiShiftBits;
97 if(*uipLeadingNonZero){
98 cpAdd[0] = g_caTrans[(
unsigned int)cHex];
101 cpAdd[0] = g_caTrans[(
unsigned int)cHex];
111 cpAdd[uiRet++] =
'\\';
112 cpAdd[uiRet++] =
'x';
115 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 4, &uiLeadingNonZero);
118 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 4, &uiLeadingNonZero);
119 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 8, &uiLeadingNonZero);
120 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 12, &uiLeadingNonZero);
123 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 4, &uiLeadingNonZero);
124 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 8, &uiLeadingNonZero);
125 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 12, &uiLeadingNonZero);
126 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 16, &uiLeadingNonZero);
127 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 20, &uiLeadingNonZero);
128 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 24, &uiLeadingNonZero);
129 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 28, &uiLeadingNonZero);
132 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 4, &uiLeadingNonZero);
133 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 8, &uiLeadingNonZero);
134 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 12, &uiLeadingNonZero);
135 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 16, &uiLeadingNonZero);
136 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 20, &uiLeadingNonZero);
137 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 24, &uiLeadingNonZero);
138 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 28, &uiLeadingNonZero);
139 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 32, &uiLeadingNonZero);
140 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 36, &uiLeadingNonZero);
141 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 40, &uiLeadingNonZero);
142 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 44, &uiLeadingNonZero);
143 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 48, &uiLeadingNonZero);
144 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 52, &uiLeadingNonZero);
145 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 56, &uiLeadingNonZero);
146 uiRet += uiAddDigit(&cpAdd[uiRet], tChar, uiSize, 60, &uiLeadingNonZero);
153 char cHex = tChar & 0x0F;
154 cpAdd[uiRet++] = g_caTrans[(
unsigned int)cHex];
172 for(i = 0; i < uiALen; i++){
173 acChar = acpAChars[i];
175 uiStrLen += uiAddHex(&caCharBuf[0], acChar, uiSize);
206 cpNextChar = cpChars;
207 if(acpAChars && uiALen && cpChars && uiCLen){
208 cpBufferEnd = acpAChars + uiALen;
209 uiCLenMax = uiCLen - 1;
211 for(i = 0; i < uiALen && uiStrLen < uiCLenMax; i++){
212 acChar = acpAChars[i];
214 uiCharLen = uiAddHex(&caCharBuf[0], acChar, uiSize);
215 if(uiStrLen + uiCharLen > uiCLenMax){
break;}
218 caCharBuf[0] = (char)acChar;
220 memcpy((
void*)cpNextChar, (
void*)&caCharBuf[0], uiCharLen *
sizeof(
char));
221 uiStrLen += uiCharLen;
222 cpNextChar += uiCharLen;
230 void* vpStrBufInit(
void* vpBuf,
apg_uint uiBufLen){
232 PRINTBUF* spBuf = NULL;
234 if(vpBuf && uiBufLen > uiOverhead){
235 memset(vpBuf, 0, (
sizeof(
char) * uiBufLen));
236 spBuf = (PRINTBUF*)vpBuf;
237 spBuf->cpBuffer = (
char*)vpBuf +
sizeof(PRINTBUF);
238 spBuf->uiBufLen = uiBufLen - uiOverhead;
239 spBuf->uiBufCount = 0;
241 spBuf->vpValidate = vpBuf;
246 apg_uint uiStrBufCat(
void* vpBuf,
char* cpString){
247 PRINTBUF* spBuf = (PRINTBUF*)vpBuf;
251 if(spBuf && (spBuf->vpValidate == vpBuf) && cpString && cpString[0]){
252 uiStrLen = strlen(cpString);
253 for(i = 0; (i < uiStrLen) && (spBuf->uiBufCount < spBuf->uiBufLen); i++){
254 spBuf->cpBuffer[spBuf->uiBufCount] = cpString[i];
258 spBuf->cpBuffer[spBuf->uiBufCount] = 0;
259 spBuf->uiBufIsTruncated = (
apg_uint)(uiRet < uiStrLen);
263 char* cpStrBufString(
void* vpBuf){
264 PRINTBUF* spBuf = (PRINTBUF*)vpBuf;
266 if(spBuf && (spBuf->vpValidate == vpBuf)){
267 cpRet = spBuf->cpBuffer;
271 apg_uint uiStrBufCount(
void* vpBuf){
272 PRINTBUF* spBuf = (PRINTBUF*)vpBuf;
274 if(spBuf && (spBuf->vpValidate == vpBuf)){
275 uiRet = spBuf->uiBufCount;
280 PRINTBUF* spBuf = (PRINTBUF*)vpBuf;
282 if(spBuf && (spBuf->vpValidate == vpBuf)){
283 uiRet = spBuf->uiBufLen;
287 apg_uint uiStrBufIsTruncated(
void* vpBuf){
288 PRINTBUF* spBuf = (PRINTBUF*)vpBuf;
290 if(spBuf && (spBuf->vpValidate == vpBuf)){
291 uiRet = spBuf->uiBufIsTruncated;
296 char* cpApgVersion(){
return "6.3";}
297 char* cpApgAuthor(){
return "Lowell D. Thomas";}
298 char* cpApgDescription(){
return "APG - an ABNF Parser Generator";}
299 char* cpApgCopyright(){
return "Copyright (C) 2005 - 2012 Lowell D. Thomas, all rights reserved";}
300 char* cpApgEmail(){
return "lowell@coasttocoastresearch.com";}
301 char* cpApgWebsite(){
return "http://www.coasttocoastresearch.com";}
302 char* cpApgGPLNotice(){
303 static char* apg_cpApgGPLNotice =
304 " This program is free software: you can redistribute it and/or modify\n"
305 " it under the terms of the GNU General Public License as published by\n"
306 " the Free Software Foundation, either version 2 of the License, or\n"
307 " (at your option) any later version.\n"
309 " This program is distributed in the hope that it will be useful,\n"
310 " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
311 " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
312 " GNU General Public License for more details.\n"
314 " You should have received a copy of the GNU General Public License\n"
315 " along with this program. If not, see\n"
316 " <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>\n"
317 " or write to the Free Software Foundation, Inc.,\n"
318 " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n";
320 return apg_cpApgGPLNotice;