⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strtbl.c

📁 < 虚拟机设计与实现> 的source code, linux版本
💻 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 + -