Release 940510
[wine/multimedia.git] / misc / lstr.c
blobeeaf7c2d7cc7180a1b65d17c10e4129dce062d53
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 #ifdef DEBUG_STRING
22 fprintf(stderr,"lstrcat(%s,%s)\n",target,source);
23 #endif
24 return strcat(target,source);
27 /* USER.430 */
28 INT lstrcmp(LPCSTR str1,LPCSTR str2)
30 return strcmp(str1,str2);
33 /* USER.471 */
34 INT lstrcmpi(LPCSTR str1,LPCSTR str2)
36 int i;
37 i=0;
38 while((toupper(str1[i])==toupper(str2[i]))&&(str1[i]!=0))
39 i++;
40 return toupper(str1[i])-toupper(str2[i]);
43 /* KERNEL.88 */
44 LPSTR lstrcpy(LPSTR target,LPCSTR source)
46 return strcpy(target,source);
49 /* KERNEL.353 */
50 LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
52 return strncpy(target,source,n);
55 /* KERNEL.90 */
56 INT lstrlen(LPCSTR str)
58 return strlen(str);
61 /* AnsiUpper USER.431 */
62 char FAR* AnsiUpper(char FAR* strOrChar)
64 /* I am not sure if the locale stuff works with toupper, but then again
65 I am not sure if the Linux libc locale stuffs works at all */
66 if((int)strOrChar<256)
67 return (char FAR*) toupper((int)strOrChar);
68 else {
69 int i;
70 for(i=0;(i<65536)&&strOrChar[i];i++)
71 strOrChar[i]=toupper(strOrChar[i]);
72 return strOrChar;
76 /* AnsiLower USER.432 */
77 char FAR* AnsiLower(char FAR* strOrChar)
79 /* I am not sure if the locale stuff works with tolower, but then again
80 I am not sure if the Linux libc locale stuffs works at all */
81 if((int)strOrChar<256)
82 return (char FAR*)tolower((int)strOrChar);
83 else {
84 int i;
85 for(i=0;(i<65536)&&strOrChar[i];i++)
86 strOrChar[i]=tolower(strOrChar[i]);
87 return strOrChar;
91 /* AnsiUpperBuff USER.437 */
92 UINT AnsiUpperBuff(LPSTR str,UINT len)
94 int i;
95 len=(len==0)?65536:len;
97 for(i=0;i<len;i++)
98 str[i]=toupper(str[i]);
99 return i;
102 /* AnsiLowerBuff USER.438 */
103 UINT AnsiLowerBuff(LPSTR str,UINT len)
105 int i;
106 len=(len==0)?65536:len;
107 i=0;
109 for(i=0;i<len;i++)
110 str[i]=tolower(str[i]);
112 return i;
115 /* AnsiNext USER.472 */
116 LPSTR AnsiNext(LPSTR current)
118 return (*current)?current+1:current;
121 /* AnsiPrev USER.473 */
122 char FAR* AnsiPrev(/*const*/ char FAR* start,char FAR* current)
124 return (current==start)?start:current-1;
127 /* IsCharAlpha USER 433 */
128 BOOL IsCharAlpha(char ch)
130 return isalpha(ch); /* This is probably not right for NLS */
132 /* IsCharAlphanumeric USER 434 */
133 BOOL IsCharAlphanumeric(char ch)
135 return (ch<'0')?0:(ch<'9');
138 /* IsCharUpper USER 435 */
139 BOOL IsCharUpper(char ch)
141 return isupper(ch);
144 /* IsCharUpper USER 436 */
145 BOOL IsCharLower(char ch)
147 return islower(ch);
150 static char Oem2Ansi[256];
151 static char Ansi2Oem[256];
153 void InitOemAnsiTranslations(void)
155 static int inited=0; /* should called called in some init function*/
156 int transfile,i;
157 if(inited) return;
158 if(transfile=open("oem2ansi.trl",O_RDONLY)){
159 read(transfile,Oem2Ansi,256);
160 close(transfile);
162 else { /* sets up passive translations if it does not find the file */
163 for(i=0;i<256;i++) /* Needs some fixing */
164 Oem2Ansi[i]=i;
166 if(transfile=open("ansi2oem.trl",O_RDONLY)){
167 read(transfile,Ansi2Oem,256);
168 close(transfile);
170 else { /* sets up passive translations if it does not find the file */
171 for(i=0;i<256;i++) /* Needs some fixing */
172 Ansi2Oem[i]=i;
174 inited=1;
177 /* AnsiToOem Keyboard.5 */
178 INT AnsiToOem(LPSTR lpAnsiStr, LPSTR lpOemStr) /* why is this int ??? */
180 InitOemAnsiTranslations(); /* should called called in some init function*/
181 while(*lpAnsiStr){
182 *lpOemStr++=Ansi2Oem[*lpAnsiStr++];
184 return -1;
187 /* OemToAnsi Keyboard.6 */
188 BOOL OemToAnsi(LPSTR lpOemStr, LPSTR lpAnsiStr) /* why is this BOOL ???? */
190 InitOemAnsiTranslations(); /* should called called in some init function*/
191 while(*lpOemStr){
192 *lpAnsiStr++=Oem2Ansi[*lpOemStr++];
194 return -1;
197 /* AnsiToOemBuff Keyboard.134 */
198 void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, INT nLength)
200 int i;
201 InitOemAnsiTranslations(); /* should called called in some init function*/
202 for(i=0;i<nLength;i++)
203 lpOemStr[i]=Ansi2Oem[lpAnsiStr[i]];
206 /* OemToAnsi Keyboard.135 */
207 void OemToAnsiBuff(LPSTR lpOemStr, LPSTR lpAnsiStr, INT nLength)
209 int i;
210 InitOemAnsiTranslations(); /* should called called in some init function*/
211 for(i=0;i<nLength;i++)
212 lpAnsiStr[i]=Oem2Ansi[lpOemStr[i]];