Release 940201
[wine.git] / misc / lstr.c
blobbd30f8804cbfd5f78c7f99aab59682947fb50fc7
1 static char Copyright[] = "Copyright Yngvi Sigurjonsson (yngvi@hafro.is), 1993";
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <ctype.h>
7 #include <sys/types.h>
8 #include <fcntl.h>
10 #include "prototypes.h"
11 #include "regfunc.h"
12 #include "windows.h"
15 /* Funny to divide them between user and kernel. */
17 /* KERNEL.89 */
18 LPSTR lstrcat(LPSTR target,LPCSTR source)
20 fprintf(stderr,"lstrcat(%s,%s)\n",target,source);
21 return strcat(target,source);
24 /* USER.430 */
25 int lstrcmp(LPCSTR str1,LPCSTR str2)
27 return strcmp(str1,str2);
30 /* USER.471 */
31 int lstrcmpi(LPCSTR str1,LPCSTR str2)
33 int i;
34 i=0;
35 while((toupper(str1[i])==toupper(str2[i]))&&(str1[i]!=0))
36 i++;
37 return toupper(str1[i])-toupper(str2[i]);
40 /* KERNEL.88 */
41 LPSTR lstrcpy(LPSTR target,LPCSTR source)
43 return strcpy(target,source);
46 /* KERNEL.353 */
47 LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
49 return strncpy(target,source,n);
52 /* KERNEL.90 */
53 int lstrlen(LPCSTR str)
55 return strlen(str);
58 /* AnsiUpper USER.431 */
59 char FAR* AnsiUpper(char FAR* strOrChar)
61 /* I am not sure if the locale stuff works with toupper, but then again
62 I am not sure if the Linux libc locale stuffs works at all */
63 if((int)strOrChar<256)
64 return (char FAR*) toupper((int)strOrChar);
65 else {
66 int i;
67 for(i=0;(i<65536)&&strOrChar[i];i++)
68 strOrChar[i]=toupper(strOrChar[i]);
69 return strOrChar;
73 /* AnsiLower USER.432 */
74 char FAR* AnsiLower(char FAR* strOrChar)
76 /* I am not sure if the locale stuff works with tolower, but then again
77 I am not sure if the Linux libc locale stuffs works at all */
78 if((int)strOrChar<256)
79 return (char FAR*)tolower((int)strOrChar);
80 else {
81 int i;
82 for(i=0;(i<65536)&&strOrChar[i];i++)
83 strOrChar[i]=tolower(strOrChar[i]);
84 return strOrChar;
88 /* AnsiUpperBuff USER.437 */
89 UINT AnsiUpperBuff(LPSTR str,UINT len)
91 int i;
92 len=(len==0)?65536:len;
94 for(i=0;i<len;i++)
95 str[i]=toupper(str[i]);
96 return i;
99 /* AnsiLowerBuff USER.438 */
100 UINT AnsiLowerBuff(LPSTR str,UINT len)
102 int i;
103 len=(len==0)?65536:len;
104 i=0;
106 for(i=0;i<len;i++)
107 str[i]=tolower(str[i]);
109 return i;
112 /* AnsiNext USER.472 */
113 LPSTR AnsiNext(LPSTR current)
115 return (*current)?current+1:current;
118 /* AnsiPrev USER.473 */
119 char FAR* AnsiPrev(/*const*/ char FAR* start,char FAR* current)
121 return (current==start)?start:current-1;
124 /* IsCharAlpha USER 433 */
125 BOOL IsCharAlpha(char ch)
127 return isalpha(ch); /* This is probably not right for NLS */
129 /* IsCharAlphanumeric USER 434 */
130 BOOL IsCharAlphanumeric(char ch)
132 return (ch<'0')?0:(ch<'9');
135 /* IsCharUpper USER 435 */
136 BOOL IsCharUpper(char ch)
138 return isupper(ch);
141 /* IsCharUpper USER 436 */
142 BOOL IsCharLower(char ch)
144 return islower(ch);
147 static char Oem2Ansi[256];
148 static char Ansi2Oem[256];
150 void InitOemAnsiTranslations()
152 static int inited=0; /* should called called in some init function*/
153 int transfile,i;
154 if(inited) return;
155 if(transfile=open("oem2ansi.trl",O_RDONLY)){
156 read(transfile,Oem2Ansi,256);
157 close(transfile);
159 else { /* sets up passive translations if it does not find the file */
160 for(i=0;i<256;i++) /* Needs some fixing */
161 Oem2Ansi[i]=i;
163 if(transfile=open("ansi2oem.trl",O_RDONLY)){
164 read(transfile,Ansi2Oem,256);
165 close(transfile);
167 else { /* sets up passive translations if it does not find the file */
168 for(i=0;i<256;i++) /* Needs some fixing */
169 Ansi2Oem[i]=i;
171 inited=1;
174 /* AnsiToOem Keyboard.5 */
175 int AnsiToOem(LPSTR lpAnsiStr, LPSTR lpOemStr) /* why is this int ??? */
177 InitOemAnsiTranslations(); /* should called called in some init function*/
178 while(*lpAnsiStr){
179 *lpOemStr++=Ansi2Oem[*lpAnsiStr++];
181 return -1;
184 /* OemToAnsi Keyboard.6 */
185 BOOL OemToAnsi(LPSTR lpOemStr, LPSTR lpAnsiStr) /* why is this BOOL ???? */
187 InitOemAnsiTranslations(); /* should called called in some init function*/
188 while(*lpOemStr){
189 *lpAnsiStr++=Oem2Ansi[*lpOemStr++];
191 return -1;
194 /* AnsiToOemBuff Keyboard.134 */
195 void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, int nLength)
197 int i;
198 InitOemAnsiTranslations(); /* should called called in some init function*/
199 for(i=0;i<nLength;i++)
200 lpOemStr[i]=Ansi2Oem[lpAnsiStr[i]];
203 /* OemToAnsi Keyboard.135 */
204 void OemToAnsiBuff(LPSTR lpOemStr, LPSTR lpAnsiStr, int nLength)
206 int i;
207 InitOemAnsiTranslations(); /* should called called in some init function*/
208 for(i=0;i<nLength;i++)
209 lpAnsiStr[i]=Oem2Ansi[lpOemStr[i]];