Release 940405
[wine.git] / misc / lstr.c
blobcec274838ea190de0ced81577fa7cd0af2a98d47
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>
9 #include <unistd.h>
11 #include "prototypes.h"
12 #include "regfunc.h"
13 #include "windows.h"
16 /* Funny to divide them between user and kernel. */
18 /* KERNEL.89 */
19 LPSTR lstrcat(LPSTR target,LPCSTR source)
21 fprintf(stderr,"lstrcat(%s,%s)\n",target,source);
22 return strcat(target,source);
25 /* USER.430 */
26 int lstrcmp(LPCSTR str1,LPCSTR str2)
28 return strcmp(str1,str2);
31 /* USER.471 */
32 int lstrcmpi(LPCSTR str1,LPCSTR str2)
34 int i;
35 i=0;
36 while((toupper(str1[i])==toupper(str2[i]))&&(str1[i]!=0))
37 i++;
38 return toupper(str1[i])-toupper(str2[i]);
41 /* KERNEL.88 */
42 LPSTR lstrcpy(LPSTR target,LPCSTR source)
44 return strcpy(target,source);
47 /* KERNEL.353 */
48 LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
50 return strncpy(target,source,n);
53 /* KERNEL.90 */
54 int lstrlen(LPCSTR str)
56 return strlen(str);
59 /* AnsiUpper USER.431 */
60 char FAR* AnsiUpper(char FAR* strOrChar)
62 /* I am not sure if the locale stuff works with toupper, but then again
63 I am not sure if the Linux libc locale stuffs works at all */
64 if((int)strOrChar<256)
65 return (char FAR*) toupper((int)strOrChar);
66 else {
67 int i;
68 for(i=0;(i<65536)&&strOrChar[i];i++)
69 strOrChar[i]=toupper(strOrChar[i]);
70 return strOrChar;
74 /* AnsiLower USER.432 */
75 char FAR* AnsiLower(char FAR* strOrChar)
77 /* I am not sure if the locale stuff works with tolower, but then again
78 I am not sure if the Linux libc locale stuffs works at all */
79 if((int)strOrChar<256)
80 return (char FAR*)tolower((int)strOrChar);
81 else {
82 int i;
83 for(i=0;(i<65536)&&strOrChar[i];i++)
84 strOrChar[i]=tolower(strOrChar[i]);
85 return strOrChar;
89 /* AnsiUpperBuff USER.437 */
90 UINT AnsiUpperBuff(LPSTR str,UINT len)
92 int i;
93 len=(len==0)?65536:len;
95 for(i=0;i<len;i++)
96 str[i]=toupper(str[i]);
97 return i;
100 /* AnsiLowerBuff USER.438 */
101 UINT AnsiLowerBuff(LPSTR str,UINT len)
103 int i;
104 len=(len==0)?65536:len;
105 i=0;
107 for(i=0;i<len;i++)
108 str[i]=tolower(str[i]);
110 return i;
113 /* AnsiNext USER.472 */
114 LPSTR AnsiNext(LPSTR current)
116 return (*current)?current+1:current;
119 /* AnsiPrev USER.473 */
120 char FAR* AnsiPrev(/*const*/ char FAR* start,char FAR* current)
122 return (current==start)?start:current-1;
125 /* IsCharAlpha USER 433 */
126 BOOL IsCharAlpha(char ch)
128 return isalpha(ch); /* This is probably not right for NLS */
130 /* IsCharAlphanumeric USER 434 */
131 BOOL IsCharAlphanumeric(char ch)
133 return (ch<'0')?0:(ch<'9');
136 /* IsCharUpper USER 435 */
137 BOOL IsCharUpper(char ch)
139 return isupper(ch);
142 /* IsCharUpper USER 436 */
143 BOOL IsCharLower(char ch)
145 return islower(ch);
148 static char Oem2Ansi[256];
149 static char Ansi2Oem[256];
151 void InitOemAnsiTranslations()
153 static int inited=0; /* should called called in some init function*/
154 int transfile,i;
155 if(inited) return;
156 if(transfile=open("oem2ansi.trl",O_RDONLY)){
157 read(transfile,Oem2Ansi,256);
158 close(transfile);
160 else { /* sets up passive translations if it does not find the file */
161 for(i=0;i<256;i++) /* Needs some fixing */
162 Oem2Ansi[i]=i;
164 if(transfile=open("ansi2oem.trl",O_RDONLY)){
165 read(transfile,Ansi2Oem,256);
166 close(transfile);
168 else { /* sets up passive translations if it does not find the file */
169 for(i=0;i<256;i++) /* Needs some fixing */
170 Ansi2Oem[i]=i;
172 inited=1;
175 /* AnsiToOem Keyboard.5 */
176 int AnsiToOem(LPSTR lpAnsiStr, LPSTR lpOemStr) /* why is this int ??? */
178 InitOemAnsiTranslations(); /* should called called in some init function*/
179 while(*lpAnsiStr){
180 *lpOemStr++=Ansi2Oem[*lpAnsiStr++];
182 return -1;
185 /* OemToAnsi Keyboard.6 */
186 BOOL OemToAnsi(LPSTR lpOemStr, LPSTR lpAnsiStr) /* why is this BOOL ???? */
188 InitOemAnsiTranslations(); /* should called called in some init function*/
189 while(*lpOemStr){
190 *lpAnsiStr++=Oem2Ansi[*lpOemStr++];
192 return -1;
195 /* AnsiToOemBuff Keyboard.134 */
196 void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, int nLength)
198 int i;
199 InitOemAnsiTranslations(); /* should called called in some init function*/
200 for(i=0;i<nLength;i++)
201 lpOemStr[i]=Ansi2Oem[lpAnsiStr[i]];
204 /* OemToAnsi Keyboard.135 */
205 void OemToAnsiBuff(LPSTR lpOemStr, LPSTR lpAnsiStr, int nLength)
207 int i;
208 InitOemAnsiTranslations(); /* should called called in some init function*/
209 for(i=0;i<nLength;i++)
210 lpAnsiStr[i]=Oem2Ansi[lpOemStr[i]];