📄 stab.c
字号:
/* stringtab.c * * (C) Copyright Apr 20 1997, Edmond J. Breen. * ALL RIGHTS RESERVED. * This code may be copied for personal, non-profit use only. * */#include <stdio.h>#include <string.h>#include "xalloc.h"#include "stab.h"/* STRING TABLE ROUTINES -------------------*/char * stab_PopLastString(stab_t *stab){ char * p; if(stab->n) { stab->n--; p = stab->strs[stab->n]; if(stab->n) stab->strs = xrealloc(stab->strs, sizeof(*stab->strs) * (stab->n)); else xfree(stab->strs); } else p = NULL; return p;}int EiC_stab_FindString(stab_t *stab, char *s){ int i; char **strs = stab->strs; for(i=0;i<stab->n;++i,++strs) if(strcmp(*strs,s) == 0) return i; return -1;} int EiC_stab_RemoveString(stab_t *stab, char *s){ int i = EiC_stab_FindString(stab,s); if(i >= 0) { xfree(stab->strs[i]); if(i != stab->n - 1) memcpy(&stab->strs[i], &stab->strs[i+1], (stab->n - i - 1) * sizeof(char*)); stab->n--; if(stab->n) stab->strs = xrealloc(stab->strs, sizeof(char*) * stab->n); else xfree(stab->strs); return 1; } return -1;} char * EiC_stab_SaveString(stab_t *stab, char *s){ char *EiC_strsave(char*); int i; if((i=EiC_stab_FindString(stab,s)) < 0) { if(stab->n == 0) stab->strs = xmalloc(sizeof(*stab->strs)); else stab->strs = xrealloc(stab->strs, sizeof(*stab->strs) * (stab->n+1)); i = stab->n; stab->strs[i] = EiC_strsave(s); stab->n++; } return stab->strs[i]; }size_t EiC_stab_NextEntryNum(stab_t *stab){ return stab->n;}void EiC_stab_CleanUp(stab_t *stab, size_t bot){ while(stab->n> bot) xfree(stab_PopLastString(stab));}void EiC_stab_Mark(stab_t *stab, char mark){ int i; if(stab->n) { xmark(stab->strs,mark); for(i=0;i<stab->n;++i) xmark(stab->strs[i],mark); }}void EiC_stab_ShowStrings(stab_t *stab){ int i; for(i=0;i<stab->n;++i) printf("%s\n",stab->strs[i]);}/*END STRING TABLE ROUTINES*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -