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

📄 strtab.c

📁 MIDI解码程序(用VC编写)
💻 C
字号:
/*    TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include <stdio.h>#include <stdlib.h>#ifndef NO_STRING_H#include <string.h>#else#include <strings.h>#endif#include "timidity.h"#include "common.h"#include "mblock.h"#include "strtab.h"void init_string_table(StringTable *stab){    memset(stab, 0, sizeof(StringTable));}StringTableNode *put_string_table(StringTable *stab, char *str, int len){    StringTableNode *p;    p = new_segment(&stab->pool, sizeof(StringTableNode) + len + 1);    if(p == NULL)	return NULL;    p->next = NULL;    if(str != NULL)    {	memcpy(p->string, str, len);	p->string[len] = '\0';    }	    if(stab->head == NULL)    {	stab->head = stab->tail = p;	stab->nstring = 1;    }    else    {	stab->nstring++;	stab->tail = stab->tail->next = p;    }    return p;}char **make_string_array(StringTable *stab){    char **table, *u;    int i, n, s;    StringTableNode *p;    n = stab->nstring;    if(n == 0)	return NULL;    if((table = (char **)safe_malloc((n + 1) * sizeof(char *))) == NULL)	return NULL;    s = 0;    for(p = stab->head; p; p = p->next)	s += strlen(p->string) + 1;    if((u = (char *)safe_malloc(s)) == NULL)    {	free(table);	return NULL;    }    for(i = 0, p = stab->head; p; i++, p = p->next)    {	int len;	len = strlen(p->string) + 1;	table[i] = u;	memcpy(u, p->string, len);	u += len;    }    table[i] = NULL;    delete_string_table(stab);    return table;}void delete_string_table(StringTable *stab){    reuse_mblock(&stab->pool);    init_string_table(stab);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -