[Scummvm-cvs-logs] CVS: scummvm/PocketSCUMM/missing assert.h,NONE,1.1 conio.h,NONE,1.1 dir.h,NONE,1.1 direct.h,NONE,1.1 dirent.h,NONE,1.1 errno.h,NONE,1.1 fcntl.h,NONE,1.1 io.h,NONE,1.1 missing.cpp,NONE,1.1 signal.h,NONE,1.1 time.h,NONE,1.1 unistd.h,NONE,1.1
Claudio Matsuoka
cmatsuoka at users.sourceforge.net
Tue Nov 6 11:13:34 CET 2001
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/PocketSCUMM PocketSCUMM.vco,NONE,1.1 PocketSCUMM.vcp,NONE,1.1 pocketpc.cpp,NONE,1.1 screen.cpp,NONE,1.1 screen.h,NONE,1.1 sdl.h,NONE,1.1
- Next message: [Scummvm-cvs-logs] CVS: scummvm/PocketSCUMM pocketpc.cpp,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/PocketSCUMM/missing
In directory usw-pr-cvs1:/tmp/cvs-serv11796/missing
Added Files:
assert.h conio.h dir.h direct.h dirent.h errno.h fcntl.h io.h
missing.cpp signal.h time.h unistd.h
Log Message:
Merged Vasyl Tsvirkunov's PocketPC port.
--- NEW FILE: assert.h ---
/* Header is not present in Windows CE SDK */
#define assert(a) ;
--- NEW FILE: conio.h ---
/* Header is not present in Windows CE SDK */
--- NEW FILE: dir.h ---
/* Header is not present in Windows CE SDK */
--- NEW FILE: direct.h ---
/* Header is not present in Windows CE SDK */
--- NEW FILE: dirent.h ---
/* Header is not present in Windows CE SDK */
/* It would not be a bad idea to take this thing from gcc distro and port
it properly. For now only required part is ported. */
struct dirent
{
long d_ino; /* Always zero. */
unsigned short d_reclen; /* Always zero. */
unsigned short d_namlen; /* Length of name in d_name. */
char* d_name; /* File name. */
/* NOTE: The name in the dirent structure points to the name in the
* finddata_t structure in the DIR. */
};
/*
* This is an internal data structure. Good programmers will not use it
* except as an argument to one of the functions below.
*/
typedef struct
{
/* disk transfer area for this dir */
/* struct _finddata_t dd_dta; */
/* dirent struct to return from dir (NOTE: this makes this thread
* safe as long as only one thread uses a particular DIR struct at
* a time) */
struct dirent dd_dir;
/* _findnext handle */
long dd_handle;
/*
* Status of search:
* 0 = not started yet (next entry to read is first entry)
* -1 = off the end
* positive = 0 based index of next entry
*/
short dd_stat;
/* given path for dir with search pattern (struct is extended) */
char dd_name[1];
} DIR;
DIR* opendir (const char*);
struct dirent* readdir (DIR*);
int closedir (DIR*);
/*
void rewinddir (DIR*);
long telldir (DIR*);
void seekdir (DIR*, long);
*/
--- NEW FILE: errno.h ---
/* Header is not present in Windows CE SDK */
--- NEW FILE: fcntl.h ---
/* Header is not present in Windows CE SDK */
--- NEW FILE: io.h ---
/* Header is not present in Windows CE SDK */
/* This stuff will live here until port configuration file is in place */
#define stricmp _stricmp
#define strdup _strdup
#define _HEAPOK 0
#define _heapchk() 0
#ifndef _FILE_DEFINED
typedef void FILE;
#define _FILE_DEFINED
#endif
FILE* wce_fopen(const char* fname, const char* fmode);
#define fopen wce_fopen
--- NEW FILE: missing.cpp ---
/* MISSING.C
Implementation for standard and semi-standard C library calls missing in WinCE
environment.
(C) 2001 Vasyl Tsvirkunov
*/
#include <windows.h>
#include <tchar.h>
#include <string.h>
#include "sys/stat.h"
#include "sys/time.h"
#include "time.h"
#include "dirent.h"
/* forward declaration */
char *strdup(const char *strSource);
/* Limited dirent implementation. Used by UI.C and DEVICES.C */
static WIN32_FIND_DATA wfd;
DIR* opendir(const char* fname)
{
DIR* pdir;
char fnameMask[MAX_PATH+1];
TCHAR fnameUnc[MAX_PATH+1];
char nameFound[MAX_PATH+1];
if(fname == NULL)
return NULL;
strcpy(fnameMask, fname);
if(!strlen(fnameMask) || fnameMask[strlen(fnameMask)-1] != '\\')
strncat(fnameMask, "\\", MAX_PATH-strlen(fnameMask)-1);
strncat(fnameMask, "*.*", MAX_PATH-strlen(fnameMask)-4);
pdir = (DIR*)malloc(sizeof(DIR)+strlen(fname));
pdir->dd_dir.d_ino = 0;
pdir->dd_dir.d_reclen = 0;
pdir->dd_dir.d_name = 0;
pdir->dd_dir.d_namlen = 0;
pdir->dd_handle = 0;
pdir->dd_stat = 0;
strcpy(pdir->dd_name, fname); /* it has exactly enough space for fname and nul char */
MultiByteToWideChar(CP_ACP, 0, fnameMask, -1, fnameUnc, MAX_PATH);
if((pdir->dd_handle = (long)FindFirstFile(fnameUnc, &wfd)) == (long)INVALID_HANDLE_VALUE)
{
free(pdir);
return NULL;
}
else
{
WideCharToMultiByte(CP_ACP, 0, wfd.cFileName, -1, nameFound, MAX_PATH, NULL, NULL);
pdir->dd_dir.d_name = strdup(nameFound);
pdir->dd_dir.d_namlen = strlen(nameFound);
}
return pdir;
}
struct dirent* readdir(DIR* dir)
{
char nameFound[MAX_PATH+1];
static struct dirent dummy;
if(dir->dd_stat == 0)
{
dummy.d_name = ".";
dummy.d_namlen = 1;
dir->dd_stat ++;
return &dummy;
}
else if(dir->dd_stat == 1)
{
dummy.d_name = "..";
dummy.d_namlen = 2;
dir->dd_stat ++;
return &dummy;
}
else if(dir->dd_stat == 2)
{
dir->dd_stat++;
return &dir->dd_dir;
}
else
{
if(FindNextFile((HANDLE)dir->dd_handle, &wfd) == 0)
{
dir->dd_stat = -1;
return NULL;
}
WideCharToMultiByte(CP_ACP, 0, wfd.cFileName, -1, nameFound, MAX_PATH, NULL, NULL);
if(dir->dd_dir.d_name)
free(dir->dd_dir.d_name);
dir->dd_dir.d_name = strdup(nameFound);
dir->dd_dir.d_namlen = strlen(nameFound);
dir->dd_stat ++;
return &dir->dd_dir;
}
}
int closedir(DIR* dir)
{
if(dir == NULL)
return 0;
if(dir->dd_handle)
FindClose((HANDLE)dir->dd_handle);
if(dir->dd_dir.d_name)
free(dir->dd_dir.d_name);
free(dir);
return 1;
}
/* Very limited implementation of stat. Used by UI.C, MEMORY-P.C (latter is not critical) */
int stat(const char *fname, struct stat *ss)
{
TCHAR fnameUnc[MAX_PATH+1];
HANDLE handle;
int len;
if(fname == NULL || ss == NULL)
return -1;
/* Special case (dummy on WinCE) */
len = strlen(fname);
if(len >= 2 && fname[len-1] == '.' && fname[len-2] == '.' &&
(len == 2 || fname[len-3] == '\\'))
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = 1024;
ss->st_mode |= S_IFDIR;
return 0;
}
MultiByteToWideChar(CP_ACP, 0, fname, -1, fnameUnc, MAX_PATH);
handle = FindFirstFile(fnameUnc, &wfd);
if(handle == INVALID_HANDLE_VALUE)
return -1;
else
{
/* That's everything implemented so far */
memset(ss, 0, sizeof(struct stat));
ss->st_size = wfd.nFileSizeLow;
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
ss->st_mode |= S_IFDIR;
FindClose(handle);
}
return 0;
}
/* Remove file by name */
int remove(const char* path)
{
TCHAR pathUnc[MAX_PATH+1];
MultiByteToWideChar(CP_ACP, 0, path, -1, pathUnc, MAX_PATH);
return !DeleteFile(pathUnc);
}
/* in our case unlink is the same as remove */
int unlink(const char* path)
{
return remove(path);
}
/* Make directory, Unix style */
void mkdir(char* dirname, int mode)
{
char path[MAX_PATH+1];
TCHAR pathUnc[MAX_PATH+1];
char* ptr;
strncpy(path, dirname, MAX_PATH);
if(*path == '/')
*path = '\\';
/* Run through the string and attempt creating all subdirs on the path */
for(ptr = path+1; *ptr; ptr ++)
{
if(*ptr == '\\' || *ptr == '/')
{
*ptr = 0;
MultiByteToWideChar(CP_ACP, 0, path, -1, pathUnc, MAX_PATH);
CreateDirectory(pathUnc, 0);
*ptr = '\\';
}
}
MultiByteToWideChar(CP_ACP, 0, path, -1, pathUnc, MAX_PATH);
CreateDirectory(pathUnc, 0);
}
/* Used in DEVICES.C and UI.C for some purpose. Not critical in this port */
int system(const char* path) { return 0; }
char *tmpnam(char *string)
{
TCHAR pTemp[MAX_PATH+1];
static char buffer[MAX_PATH+1];
GetTempFileName(TEXT("."), TEXT("A8_"), 0, pTemp);
WideCharToMultiByte(CP_ACP, 0, pTemp, -1, buffer, MAX_PATH, NULL, NULL);
if(string)
{
strcpy(string, buffer);
return string;
}
else
return buffer;
}
FILE *tmpfile()
{
TCHAR pTemp[MAX_PATH+1];
if(!GetTempFileName(TEXT("."), TEXT("A8_"), 0, pTemp))
return _wfopen(pTemp, TEXT("w+b"));
else
return 0;
}
void rewind(FILE *stream)
{
fseek(stream, 0, SEEK_SET);
}
char *strdup(const char *strSource)
{
char* buffer;
buffer = (char*)malloc(strlen(strSource)+1);
if(buffer)
strcpy(buffer, strSource);
return buffer;
}
/* Used in UI.C */
char cwd[MAX_PATH+1] = "";
char *getcwd(char *buffer, int maxlen)
{
TCHAR fileUnc[MAX_PATH+1];
char* plast;
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, maxlen);
return cwd;
}
/* Limited implementation of time.h. time_t formula is possibly incorrect. */
time_t time(time_t* res)
{
time_t t;
SYSTEMTIME st;
GetLocalTime(&st);
t = (time_t)(((((((st.wYear-1970)*12+st.wMonth)*31+st.wDay)*7+st.wDayOfWeek)*24+st.wHour)*60+st.wMinute)*60+st.wSecond);
if(res)
*res = t;
return t;
}
struct tm* localtime(time_t* timer)
{
static struct tm tmLocalTime;
unsigned long rem = *timer;
tmLocalTime.tm_sec = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_min = (short)(rem % 60);
rem /= 60;
tmLocalTime.tm_hour = (short)(rem % 24);
rem /= 24;
tmLocalTime.tm_mday = (short)(rem % 7);
rem /= 7;
tmLocalTime.tm_mday = (short)(rem % 31);
rem /= 31;
tmLocalTime.tm_mon = (short)(rem % 12);
rem /= 12;
tmLocalTime.tm_year = (short)(rem+1970);
return &tmLocalTime;
}
/* Very limited implementation of sys/time.h */
void gettimeofday(struct timeval* tp, void* dummy)
{
DWORD dt = GetTickCount();
tp->tv_sec = dt/1000;
tp->tv_usec = dt*1000;
}
void usleep(long usec)
{
long msec = usec/1000;
if(msec <= 0)
Sleep(0);
else
Sleep(msec);
}
/*
Windows CE fopen has non-standard behavior -- not
fully qualified paths refer to root folder rather
than current folder (concept not implemented in CE).
*/
#undef fopen
FILE* wce_fopen(const char* fname, const char* fmode)
{
char fullname[MAX_PATH+1];
if(!fname || fname[0] == '\0')
return NULL;
if(fname[0] != '\\' && fname[0] != '/')
{
getcwd(fullname, MAX_PATH);
strncat(fullname, "\\", MAX_PATH-strlen(fullname)-1);
strncat(fullname, fname, MAX_PATH-strlen(fullname)-strlen(fname));
return fopen(fullname, fmode);
}
else
return fopen(fname, fmode);
}
/* This may provide for better sync mechanism */
unsigned int clock()
{
return GetTickCount();
}
/* And why do people use this? */
void abort()
{
exit(1);
}
/*
IMHO, no project should use this one, it is not portable at all. This implementation
at least allows some projects to work.
*/
char* getenv(char* name)
{
static char buffer[MAX_PATH+1];
if(strcmp(name, "HOME") == 0 || strcmp(name, "HOMEDIR") == 0)
{
getcwd(buffer, MAX_PATH);
return buffer;
}
else
return "";
}
--- NEW FILE: signal.h ---
/* Header is not present in Windows CE SDK */
/* Functionality is not critical -- Pocket PC devices do not have Ctrl+C */
#define signal(a,b)
--- NEW FILE: time.h ---
/* Header is not present in Windows CE SDK */
#ifndef A800_TIME_H
#define A800_TIME_H
#include <stdlib.h>
struct tm
{
short tm_year;
short tm_mon;
short tm_mday;
short tm_wday;
short tm_hour;
short tm_min;
short tm_sec;
};
time_t time(time_t* dummy);
struct tm* localtime(time_t* dummy);
unsigned int clock();
#endif
--- NEW FILE: unistd.h ---
/* Header is not present in Windows CE SDK */
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/PocketSCUMM PocketSCUMM.vco,NONE,1.1 PocketSCUMM.vcp,NONE,1.1 pocketpc.cpp,NONE,1.1 screen.cpp,NONE,1.1 screen.h,NONE,1.1 sdl.h,NONE,1.1
- Next message: [Scummvm-cvs-logs] CVS: scummvm/PocketSCUMM pocketpc.cpp,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list