STRINGS.C
上传用户:dcs7469208
上传日期:2010-01-02
资源大小:443k
文件大小:4k
源码类别:

操作系统开发

开发平台:

DOS

  1. /****************************************************************/
  2. /* */
  3. /*     strings.c */
  4. /* */
  5. /*   Global String Handling Functions */
  6. /* */
  7. /* Copyright (c) 1995 */
  8. /*   Pasquale J. Villani */
  9. /* All Rights Reserved */
  10. /* */
  11. /* This file is part of DOS-C. */
  12. /* */
  13. /* DOS-C is free software; you can redistribute it and/or */
  14. /* modify it under the terms of the GNU General Public License */
  15. /* as published by the Free Software Foundation; either version */
  16. /* 2, or (at your option) any later version. */
  17. /* */
  18. /* DOS-C is distributed in the hope that it will be useful, but */
  19. /* WITHOUT ANY WARRANTY; without even the implied warranty of */
  20. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See */
  21. /* the GNU General Public License for more details. */
  22. /* */
  23. /* You should have received a copy of the GNU General Public */
  24. /* License along with DOS-C; see the file COPYING.  If not, */
  25. /* write to the Free Software Foundation, 675 Mass Ave, */
  26. /* Cambridge, MA 02139, USA. */
  27. /****************************************************************/
  28. #include "../../hdr/portab.h"
  29. /* $Logfile:   C:/dos-c/src/kernel/strings.c_v  $ */
  30. #ifdef VERSION_STRINGS
  31. static BYTE *stringsRcsId = "$Header:   C:/dos-c/src/kernel/strings.c_v   1.6   04 Jan 1998 23:15:16   patv  $";
  32. #endif
  33. /* $Log:   C:/dos-c/src/kernel/strings.c_v  $
  34.  * 
  35.  *    Rev 1.6   04 Jan 1998 23:15:16   patv
  36.  * Changed Log for strip utility
  37.  * 
  38.  *    Rev 1.5   31 Dec 1997  3:59:30   patv
  39.  * Added new far string functions.
  40.  * 
  41.  *    Rev 1.4   29 May 1996 21:03:30   patv
  42.  * bug fixes for v0.91a
  43.  * 
  44.  *    Rev 1.3   19 Feb 1996  3:21:36   patv
  45.  * Added NLS, int2f and config.sys processing
  46.  * 
  47.  *    Rev 1.2   01 Sep 1995 17:54:22   patv
  48.  * First GPL release.
  49.  * 
  50.  *    Rev 1.1   30 Jul 1995 20:51:58   patv
  51.  * Eliminated version strings in ipl
  52.  * 
  53.  *    Rev 1.0   02 Jul 1995  8:33:46   patv
  54.  * Initial revision.
  55.  */
  56. /* $EndLog$ */
  57. #ifdef PROTO
  58. VOID strcpy(REG BYTE *, REG BYTE *);
  59. #endif
  60. COUNT 
  61. strlen (REG BYTE *s)
  62. {
  63. REG WORD cnt = 0;
  64. while(*s++ != 0)
  65. ++cnt;
  66. return cnt;
  67. }
  68. COUNT 
  69. fstrlen (REG BYTE FAR *s)
  70. {
  71. REG WORD cnt = 0;
  72. while(*s++ != 0)
  73. ++cnt;
  74. return cnt;
  75. }
  76. VOID
  77. strcpy (REG BYTE *d, REG BYTE *s)
  78. {
  79. while(*s != 0)
  80. *d++ = *s++;
  81. *d = 0;
  82. }
  83. VOID
  84. _fstrcpy (REG BYTE FAR *d, REG BYTE FAR *s)
  85. {
  86. while(*s != 0)
  87. *d++ = *s++;
  88. *d = 0;
  89. }
  90. VOID
  91. strncpy (REG BYTE *d, REG BYTE *s, COUNT l)
  92. {
  93. COUNT idx = 1;
  94. while(*s != 0 && idx++ <= l)
  95. *d++ = *s++;
  96. *d = 0;
  97. }
  98. VOID 
  99. strcat (REG BYTE *d, REG BYTE *s)
  100. {
  101. while(*d != 0)
  102. ++d;
  103. strcpy(d, s);
  104. }
  105. COUNT 
  106. strcmp (REG BYTE *d, REG BYTE *s)
  107. {
  108. while(*s != '' && *d != '')
  109. {
  110. if(*d == *s)
  111. ++s, ++d;
  112. else
  113. return *d - *s;
  114. }
  115. return *d - *s;
  116. }
  117. COUNT 
  118. fstrcmp (REG BYTE FAR *d, REG BYTE FAR *s)
  119. {
  120. while(*s != '' && *d != '')
  121. {
  122. if(*d == *s)
  123. ++s, ++d;
  124. else
  125. return *d - *s;
  126. }
  127. return *d - *s;
  128. }
  129. COUNT 
  130. strncmp (REG BYTE *d, REG BYTE *s, COUNT l)
  131. {
  132. COUNT index = 1;
  133. while(*s != '' && *d != '' && index++ <= l)
  134. {
  135. if(*d == *s)
  136. ++s, ++d;
  137. else
  138. return *d - *s;
  139. }
  140. return *d - *s;
  141. }
  142. COUNT 
  143. fstrncmp (REG BYTE FAR *d, REG BYTE FAR *s, COUNT l)
  144. {
  145. COUNT index = 1;
  146. while(*s != '' && *d != '' && index++ <= l)
  147. {
  148. if(*d == *s)
  149. ++s, ++d;
  150. else
  151. return *d - *s;
  152. }
  153. return *d - *s;
  154. }
  155. VOID
  156. fstrncpy(REG BYTE FAR *d, REG BYTE FAR *s, COUNT l)
  157. {
  158. COUNT idx = 1;
  159. while(*s != 0 && idx++ <= l)
  160. *d++ = *s++;
  161. *d = 0;
  162. }
  163. /* Yet another change for true portability (WDL) */
  164. COUNT 
  165. tolower (COUNT c)
  166. {
  167. if(c >= 'A' && c <= 'Z')
  168. return (c + ('a' - 'A'));
  169. else
  170. return c;
  171. }
  172. /* Yet another change for true portability (PJV) */
  173. COUNT 
  174. toupper (COUNT c)
  175. {
  176. if(c >= 'a' && c <= 'z')
  177. return (c - ('a' - 'A'));
  178. else
  179. return c;
  180. }