📄 strtbl.c
字号:
#include "error.h"
#include "strtbl.h"
#include "linux.h"
U1 * strtbl_text;
U8 strtbl_iStr; /*next free space*/
static U8 nStr; /*current capacity*/
int strtbl_init()
{
strtbl_text = (U1 *)malloc(STR_TBL_INIT);
if (strtbl_text == NULL)
{
ERROR0("StringTable::strtbl_init(): out of memory\n");
return FALSE;
}
strtbl_iStr = 0;
nStr = STR_TBL_INIT;
return TRUE;
}
void strtbl_free()
{
if (strtbl_text != NULL)
{
free(strtbl_text);
strtbl_text = NULL;
printf("string table freed.\n");
}
return;
}
int addStrTbl(char * str)
{
U8 len;
U8 i;
U8 final_index;
U1 * ptr;
len = strlen(str); /*note: null not included*/
len++; /*count null*/
final_index = strtbl_iStr + len - 1;
/* capacity n will have indices 0,...,n-1 */
if (final_index >= nStr)
{
ptr = (U1 *)malloc((unsigned int)nStr + STR_TBL_INC);
if (ptr == NULL)
{
ERROR0("StringTable::addStrTbl(): no more memory\n");
return FALSE;
}
else
{
for (i = 0; i < nStr; i++)
{
ptr[i] = strtbl_text[i];
}
free(strtbl_text);
strtbl_text = ptr;
nStr = nStr + STR_TBL_INC;
}
}
for (i = 0; i < len; i++)
{
strtbl_text[strtbl_iStr + i] = str[i];
}
strtbl_iStr = final_index + 1; /* next EMPTY space */
return TRUE;
} /*end addStrTbl*/
void printStrTbl()
{
U8 i;
U8 nstr;
printf("\nSTRING TABLE-----------------------\n");
printf("capacity nStr =");
pU8(nStr);
printf("\n");
printf("next free index strtbl_iStr =");
pU8(strtbl_iStr);
printf("\n\n");
nstr = 1;
for (i = 0; i < strtbl_iStr; i++)
{
if (i == 0)
{
printf("0)");
}
/*either print char or handle null char*/
if (strtbl_text[i] != '\0')
{
putchar(strtbl_text[i]);
}
else if (i < (strtbl_iStr - 1) )
{
printf("(null)\n%lu)", nstr);
nstr++;
}
else if (i == (strtbl_iStr - 1) )
{
printf("(null)\n");
}
}
return;
} /*printStrTbl*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -