lib.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "lib.h"
  2. char SPLITER[] = " \t\n\r~!@#$%^&*()_+{}:\"<>?-=[]|\\;',./";
  3. char SPACE[] = " \t\n\r";
  4. char ALPHA[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  5. char DIGIT[] = "0123456789";
  6. char NAME_CHAR[] = "_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  7. // 記憶體配置函數
  8. int newMemoryCount = 0;
  9. void* newMemory(int size) {
  10. void *ptr=malloc(size);
  11. assert(ptr != NULL);
  12. memset(ptr, 0, size);
  13. // printf("memGet:%p\n", ptr);
  14. newMemoryCount++;
  15. return ptr;
  16. }
  17. int freeMemoryCount=0;
  18. void freeMemory(void *ptr) {
  19. // printf("memFree:%p\n", ptr);
  20. free(ptr);
  21. freeMemoryCount++;
  22. }
  23. void checkMemory() {
  24. printf("newMemoryCount=%d freeMemoryCount=%d\n", newMemoryCount, freeMemoryCount);
  25. }
  26. // 檔案輸出入
  27. BYTE* newFileBytes(char *fileName, int *sizePtr) {
  28. FILE *file = fopen(fileName, "rb");
  29. fseek(file, 0 , SEEK_END);
  30. long size = ftell(file);
  31. rewind(file);
  32. BYTE *buffer = (char*) newMemory(size+1);
  33. fread (buffer,size,1,file);
  34. fclose(file);
  35. *sizePtr = size;
  36. return buffer;
  37. }
  38. char* newFileStr(char *fileName) {
  39. int size;
  40. BYTE *buffer = newFileBytes(fileName, &size);
  41. buffer[size] = '\0';
  42. return (char*) buffer;
  43. }
  44. char *newStr(char *str) {
  45. char *rzStr = newMemory(strlen(str)+1);
  46. strcpy(rzStr, str);
  47. return rzStr;
  48. }
  49. char *newSubstr(char *str, int i, int len) {
  50. char *rzStr = newMemory(len+1);
  51. strSubstr(rzStr, str, i, len);
  52. return rzStr;
  53. }
  54. // 字串函數
  55. void strPrint(void *data) {
  56. printf("%s ", data);
  57. }
  58. void strPrintln(void *data) {
  59. printf("%s\n", data);
  60. }
  61. BOOL strHead(char *str, char *head) {
  62. return (strncmp(str, head, strlen(head))==0);
  63. }
  64. BOOL strTail(char *str, char *tail) {
  65. int strLen = strlen(str), tailLen = strlen(tail);
  66. if (strLen < tailLen) return FALSE;
  67. return (strcmp(str+strLen-tailLen, tail)==0);
  68. }
  69. int strCountChar(char *str, char *charSet) {
  70. int i, count=0;
  71. for (i=0; i<strlen(str); i++)
  72. if (strMember(str[i], charSet))
  73. count++;
  74. return count;
  75. }
  76. void strSubstr(char *substr, char *str, int i, int len) {
  77. strncpy(substr, &str[i], len);
  78. substr[len]='\0';
  79. }
  80. BOOL strPartOf(char *token, char *set) {
  81. ASSERT(token != NULL && set != NULL);
  82. ASSERT(strlen(token) < 100);
  83. char ttoken[100];
  84. sprintf(ttoken, "|%s|", token);
  85. return (strstr(set, ttoken)!=NULL);
  86. }
  87. void strTrim(char *trimStr, char *str, char *set) {
  88. char *start, *stop;
  89. for (start = str; strMember(*start, set); start++);
  90. for (stop = str+strlen(str)-1; stop > str && strMember(*stop, set); stop--);
  91. if (start <= stop) {
  92. strncpy(trimStr, start, stop-start+1);
  93. trimStr[stop-start+1]='\0';
  94. } else
  95. strcpy(trimStr, "");
  96. }
  97. void strReplace(char *str, char *from, char to) {
  98. int i;
  99. for (i=0; i<strlen(str); i++)
  100. if (strMember(str[i], from))
  101. str[i] = to;
  102. }
  103. char tspaces[MAX_LEN];
  104. char* strSpaces(int level) {
  105. assert(level < MAX_LEN);
  106. memset(tspaces, ' ', MAX_LEN);
  107. tspaces[level] = '\0';
  108. return tspaces;
  109. }
  110. void strToUpper(char *str) {
  111. int i;
  112. for (i = 0; i<strlen(str); i++)
  113. str[i] = toupper(str[i]);
  114. }