📄 wincecompat.c.svn-base
字号:
/* * wincecompat.c : wince compatiblity module * * See Copyright for the status of this software. * * javier@tiresiassoft.com * * 17 Sep 2002 created */#include "wincecompat.h"#include "time.h"#include <windows.h>char *strError[]= {"Error 0","","No such file or directory","","","","","Arg list too long", "Exec format error","Bad file number","","","Not enough core","Permission denied","","", "","File exists","Cross-device link","","","","Invalid argument","","Too many open files", "","","","No space left on device","","","","","Math argument","Result too large","", "Resource deadlock would occur", "Unknown error under wince"};int errno=0;int read(int handle, char *buffer, unsigned int len){ return(fread(&buffer[0], len, 1, (FILE *) handle));}int write(int handle, const char *buffer, unsigned int len){ return(fwrite(&buffer[0], len,1,(FILE *) handle));}int open(const char *filename,int oflag, ...){ char mode[3]; /* mode[0] ="w/r/a" mode[1]="+" */ mode[2]=0; if ( oflag==(O_WRONLY|O_CREAT) ) mode[0]="w"; else if (oflag==O_RDONLY) mode[0]="r"; return fopen(filename, mode);}int close(int handle){ return ( fclose((FILE *) handle) );}char *getenv( const char *varname ){ return NULL;}char *strerror(int errnum){ if (errnum>MAX_STRERROR) return strError[MAX_STRERROR]; else return strError[errnum];}int mblen(const char *mbstr, size_t count)
{
const char *p = mbstr;
size_t i;
int n=0;
for( i=0; i<count; i++ )
{
if( *p=='\0' ) break;
if( IsDBCSLeadByteEx( CP_ACP, *p ) )
n+=2, p+=2;
else
n+=1, p+=1;
}
return n;
}
int
strcmpi (const char *s1, const char *s2)
{
while (*s1 != '\0' && toupper(*s1) == toupper(*s2))
{
s1++;
s2++;
}
return toupper(*(unsigned char *) s1) - toupper(*(unsigned char *) s2);
}
char *getcwd(char *buffer, size_t _size)
{
TCHAR fileUnc[MAX_PATH+1];
char* plast;
char cwd[MAX_PATH+1] = "";
if(cwd[0] == 0)
{
GetModuleFileName(NULL, fileUnc, MAX_PATH);
WideCharToMultiByte(CP_ACP, 0, fileUnc, -1, cwd, MAX_PATH, NULL, NULL);
plast = strrchr(cwd, '\\');
if(plast)
*plast = 0;
/* Special trick to keep start menu clean... */
if(_stricmp(cwd, "\\windows\\start menu") == 0)
strcpy(cwd, "\\Apps");
}
if(buffer)
strncpy(buffer, cwd, _size);
return cwd;
}
size_t strftime(char *buffer, size_t size, const char *format, const struct tm *time)
{
size_t pos = 0;
char num[16] = "";
buffer[0] = '\0';
while (format[pos]) {
if (format[pos] == '%' && format[pos + 1]) {
switch (format[pos + 1]) {
case 'a':
case 'A':
case 'b':
case 'B':
case 'c':
case 'j':
case 'U':
case 'W':
case 'x':
case 'X':
case 'z':
case 'Z':
num[0] = '\0';
/* Unsupported */
break;
case '%d':
_itoa(time->tm_mday, num, 10);
break;
case '%H':
_itoa(time->tm_hour, num, 10);
break;
case '%I':
_itoa((time->tm_hour % 12) + 1, num, 10);
break;
case '%m':
_itoa(time->tm_mon, num, 10);
break;
case '%M':
_itoa(time->tm_min, num, 10);
break;
case '%p':
strcpy(num, ((time->tm_hour / 12) ? "A.M." : "P.M."));
break;
case '%S':
_itoa(time->tm_sec, num, 10);
break;
case '%w':
_itoa(time->tm_wday, num, 10);
break;
case '%y':
_itoa(time->tm_year % 100, num, 10);
break;
case '%Y':
_itoa(time->tm_year, num, 10);
break;
case '%%':
strcpy(num, "%");
break;
default:
num[0] = format[pos + 1];
num[1] = '\0';
}
if (num)
strncat(buffer, num, size);
pos++;
} else {
size_t len = strlen(buffer);
if (len + 1 < size) {
buffer[len++] = format[pos];
buffer[len] = '\0';
} else {
return (strlen(buffer) + 1);
}
}
pos++;
}
return (strlen(buffer) + 1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -