PSTR.C
上传用户:hlzzc88
上传日期:2007-01-06
资源大小:220k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. /*
  2.  * 68K/386 32-bit C compiler.
  3.  *
  4.  * copyright (c) 1997, David Lindauer
  5.  * 
  6.  * This compiler is intended for educational use.  It may not be used
  7.  * for profit without the express written consent of the author.
  8.  *
  9.  * It may be freely redistributed, as long as this notice remains intact
  10.  * and either the original sources or derived sources 
  11.  * are distributed along with any executables derived from the originals.
  12.  *
  13.  * The author is not responsible for any damages that may arise from use
  14.  * of this software, either idirect or consequential.
  15.  *
  16.  * v1.35 March 1997
  17.  * David Lindauer, gclind01@starbase.spd.louisville.edu
  18.  *
  19.  * Credits to Mathew Brandt for original K&R C compiler
  20.  *
  21.  */
  22. /*
  23.  * String functions on shorts.  This is a translation to C... some functions
  24.  * may not work but those that are actually used in the compiler do
  25.  */
  26. int pstrncmp(short *str1, short *str2,int n)
  27. {
  28. while (n &&*str1++ == *str2++) n--;
  29. if (!n)
  30. return 0;
  31. return(--str1 > --str2) ? 1 : -1;
  32. }
  33. int pstrcmp(short *str1, short *str2)
  34. {
  35. while (*str1 && *str1 == *str2) {
  36. str1++;
  37. str2++;
  38. }
  39. if (*(str1) == 0)
  40. if ( *(str2) == 0)
  41. return 0;
  42. else
  43. return -1;
  44. return str1 > str2 ? 1 : -1;
  45. }
  46. void pstrcpy(short *str1, short *str2)
  47. {
  48. while (*str2)
  49. *str1++ = *str2++;
  50. *str1 = 0;
  51. }
  52. void pstrncpy(short *str1, short *str2, int len)
  53. {
  54. memcpy(str1,str2,len*sizeof(short));
  55. }
  56. void pstrcat(short *str1,short *str2)
  57. {
  58. while (*str1++) ;
  59. while (*str2)
  60. *str1++ = *str2++;
  61. *str1++ = 0;
  62. }
  63. short *pstrchr(short *str, short ch)
  64. {
  65. while (*str && *str != ch)
  66. str++;
  67. if (*str)
  68. return str;
  69. return 0;
  70. }
  71. short *pstrrchr(short *str, short ch)
  72. {
  73. short *start = str;
  74. while (*str++) ;
  75. str--;
  76. while (str != start-1 && *str != ch)
  77. str--;
  78. if (str != start-1)
  79. return str;
  80. return 0;
  81. }
  82. int pstrlen(short *s)
  83. {
  84.   int len = 0;
  85. while (*s++) len++;
  86. return len;
  87. }
  88. short *pstrstr(short *str1, short *str2)
  89. {
  90. while (1) {
  91. short *pt = pstrchr(str1,str2[0]);
  92. if (!pt)
  93. return 0;
  94. if (!pstrcmp(pt,str2))
  95. return pt;
  96. str1 = pt + 1;
  97. }
  98. }