diff --git a/internal/gc/gcx.d b/internal/gc/gcx.d index 97f79197f..59cefbebe 100644 --- a/internal/gc/gcx.d +++ b/internal/gc/gcx.d @@ -29,6 +29,7 @@ version = MULTI_THREADED; // produce multithreaded version debug (PRINTF) import std.c.stdio; +import std.c.stdio; import std.c.stdlib; import gcbits; import std.outofmemory; @@ -814,7 +815,7 @@ struct Gcx } if (i + 1 < npools) { - assert(pool.cmp(pooltable[i + 1]) < 0); + assert(pool.opCmp(pooltable[i + 1]) < 0); } else if (i + 1 == npools) { @@ -1177,7 +1178,7 @@ struct Gcx // Sort pool into newpooltable[] for (i = 0; i < npools; i++) { - if (pool.cmp(newpooltable[i]) < 0) + if (pool.opCmp(newpooltable[i]) < 0) break; } memmove(newpooltable + i + 1, newpooltable + i, (npools - i) * (Pool *).size); @@ -1978,7 +1979,7 @@ struct Pool * Used for sorting pooltable[] */ - int cmp(Pool *p2) + int opCmp(Pool *p2) { return baseAddr - p2.baseAddr; } diff --git a/internal/obj.d b/internal/obj.d index c421160b5..74b0633f0 100644 --- a/internal/obj.d +++ b/internal/obj.d @@ -13,7 +13,7 @@ extern (C): int _d_obj_eq(Object o1, Object o2) { - return o1 === o2 || (o1 && o1.eq(o2)); + return o1 === o2 || (o1 && o1.opEquals(o2)); } @@ -23,6 +23,6 @@ int _d_obj_eq(Object o1, Object o2) int _d_obj_cmp(Object o1, Object o2) { - return o1.cmp(o2); + return o1.opCmp(o2); } diff --git a/linux.mak b/linux.mak index eeca34c1f..e9f121b6b 100644 --- a/linux.mak +++ b/linux.mak @@ -11,6 +11,7 @@ CFLAGS=-O #CFLAGS=-g + DFLAGS=-O -release #DFLAGS=-unittest @@ -44,15 +45,16 @@ unittest : unittest.o libphobos.a unittest.o : unittest.d $(DMD) -c unittest -OBJS= assert.o deh2.o switch.o complex.o gcstats.o \ +OBJS= asserterror.o deh2.o switch.o complex.o gcstats.o \ critical.o object.o monitor.o arraycat.o invariant.o \ dmain2.o outofmemory.o aaA.o adi.o file.o \ compiler.o system.o moduleinit.o \ - cast.o syserror.o path.o string.o memset.o math.o \ + cast.o path.o string.o memset.o math.o \ outbuffer.o ctype.o regexp.o random.o linux.o \ stream.o switcherr.o array.o gc.o \ qsort.o thread.o obj.o utf.o uri.o \ crc32.o conv.o arraycast.o errno.o alloca.o cmath2.o \ + process.o syserror.o \ ti_wchar.o ti_uint.o ti_short.o ti_ushort.o \ ti_byte.o ti_ubyte.o ti_long.o ti_ulong.o ti_ptr.o \ ti_float.o ti_double.o ti_real.o ti_delegate.o \ @@ -61,12 +63,23 @@ OBJS= assert.o deh2.o switch.o complex.o gcstats.o \ ti_Aa.o ti_AC.o ti_Ag.o ti_Aubyte.o ti_Aushort.o ti_Ashort.o \ ti_C.o ti_int.o ti_char.o ti_dchar.o ti_Adchar.o \ ti_Aint.o ti_Auint.o ti_Along.o ti_Aulong.o ti_Awchar.o \ - date.o dateparse.o llmath.o math2.o + date.o dateparse.o llmath.o math2.o Czlib.o Dzlib.o zip.o + +ZLIBOBJS= etc/c/zlib/adler32.o etc/c/zlib/compress.o \ + etc/c/zlib/crc32.o etc/c/zlib/gzio.o \ + etc/c/zlib/uncompr.o etc/c/zlib/deflate.o \ + etc/c/zlib/trees.o etc/c/zlib/zutil.o \ + etc/c/zlib/inflate.o etc/c/zlib/infblock.o \ + etc/c/zlib/inftrees.o etc/c/zlib/infcodes.o \ + etc/c/zlib/infutil.o etc/c/zlib/inffast.o + +GCOBJS= internal/gc/gc.o internal/gc/gcx.o \ + internal/gc/gcbits.o internal/gc/gclinux.o #SRC= mars.h switch.d complex.c critical.c minit.asm \ # deh.c object.d gc.d math.d c/stdio.d c/stdlib.d time.d monitor.c \ # arraycat.d string.d windows.d path.d linuxextern.d \ -# invariant.d assert.d regexp.d dmain2.d dateparse.d \ +# invariant.d asserterror.d regexp.d dmain2.d dateparse.d \ # outofmemory.d syserror.d utf.d uri.d \ # ctype.d aaA.d adi.d file.d compiler.d system.d \ # moduleinit.d cast.d math.d qsort.d \ @@ -91,9 +104,9 @@ SRCSTD= std/zlib.d std/zip.d std/stdint.d std/conv.d std/utf.d std/uri.d \ std/gc.d std/math.d std/string.d std/path.d std/date.d \ std/ctype.d std/file.d std/compiler.d std/system.d std/moduleinit.d \ std/outbuffer.d std/math2.d std/thread.d \ - std/assert.d std/dateparse.d std/outofmemory.d \ - std/intrinsic.d std/array.d std/switcherr.d \ - std/regexp.d std/random.d std/stream.d + std/asserterror.d std/dateparse.d std/outofmemory.d \ + std/intrinsic.d std/array.d std/switcherr.d std/syserror.d \ + std/regexp.d std/random.d std/stream.d std/process.d SRCSTDC= std/c/process.d std/c/stdlib.d std/c/time.d std/c/stdio.d @@ -125,7 +138,7 @@ SRCINT= \ internal/dmain2.d internal/cast.d internal/qsort.d internal/deh2.d \ internal/cmath2.d internal/obj.d internal/mars.h -SRCSTDWIN= std/windows/registry.d std/windows/syserror.d \ +SRCSTDWIN= std/windows/registry.d \ std/windows/iunknown.d SRCSTDCWIN= std/c/windows/windows.d std/c/windows/com.d @@ -134,44 +147,44 @@ SRCSTDCLINUX= std/c/linux/linux.d std/c/linux/linuxextern.d SRCETC= etc/c/zlib.d -SRCZLIB= etc/c/zlib\algorithm.txt \ - etc/c/zlib\trees.h \ - etc/c/zlib\inffixed.h \ - etc/c/zlib\INDEX \ - etc/c/zlib\zconf.h \ - etc/c/zlib\compress.c \ - etc/c/zlib\adler32.c \ - etc/c/zlib\uncompr.c \ - etc/c/zlib\deflate.h \ - etc/c/zlib\example.c \ - etc/c/zlib\zutil.c \ - etc/c/zlib\gzio.c \ - etc/c/zlib\crc32.c \ - etc/c/zlib\infblock.c \ - etc/c/zlib\infblock.h \ - etc/c/zlib\infcodes.c \ - etc/c/zlib\infcodes.h \ - etc/c/zlib\inffast.c \ - etc/c/zlib\inffast.h \ - etc/c/zlib\zutil.h \ - etc/c/zlib\inflate.c \ - etc/c/zlib\trees.c \ - etc/c/zlib\inftrees.h \ - etc/c/zlib\infutil.c \ - etc/c/zlib\infutil.h \ - etc/c/zlib\minigzip.c \ - etc/c/zlib\inftrees.c \ - etc/c/zlib\zlib.html \ - etc/c/zlib\maketree.c \ - etc/c/zlib\zlib.h \ - etc/c/zlib\zlib.3 \ - etc/c/zlib\FAQ \ - etc/c/zlib\deflate.c \ - etc/c/zlib\ChangeLog \ - etc/c/zlib\win32.mak \ - etc/c/zlib\linux.mak \ - etc/c/zlib\zlib.lib \ - etc/c/zlib\README +SRCZLIB= etc/c/zlib/algorithm.txt \ + etc/c/zlib/trees.h \ + etc/c/zlib/inffixed.h \ + etc/c/zlib/INDEX \ + etc/c/zlib/zconf.h \ + etc/c/zlib/compress.c \ + etc/c/zlib/adler32.c \ + etc/c/zlib/uncompr.c \ + etc/c/zlib/deflate.h \ + etc/c/zlib/example.c \ + etc/c/zlib/zutil.c \ + etc/c/zlib/gzio.c \ + etc/c/zlib/crc32.c \ + etc/c/zlib/infblock.c \ + etc/c/zlib/infblock.h \ + etc/c/zlib/infcodes.c \ + etc/c/zlib/infcodes.h \ + etc/c/zlib/inffast.c \ + etc/c/zlib/inffast.h \ + etc/c/zlib/zutil.h \ + etc/c/zlib/inflate.c \ + etc/c/zlib/trees.c \ + etc/c/zlib/inftrees.h \ + etc/c/zlib/infutil.c \ + etc/c/zlib/infutil.h \ + etc/c/zlib/minigzip.c \ + etc/c/zlib/inftrees.c \ + etc/c/zlib/zlib.html \ + etc/c/zlib/maketree.c \ + etc/c/zlib/zlib.h \ + etc/c/zlib/zlib.3 \ + etc/c/zlib/FAQ \ + etc/c/zlib/deflate.c \ + etc/c/zlib/ChangeLog \ + etc/c/zlib/win32.mak \ + etc/c/zlib/linux.mak \ + etc/c/zlib/zlib.lib \ + etc/c/zlib/README SRCGC= internal/gc/gc.d \ internal/gc/gcx.d \ @@ -187,8 +200,7 @@ ALLSRCS = $(SRC) $(SRCSTD) $(SRCSTDC) $(SRCTI) $(SRCINT) $(SRCSTDWIN) \ libphobos.a : $(OBJS) internal/gc/dmgc.a linux.mak - ar -r $@ $(OBJS) internal/gc/gc.o internal/gc/gcx.o \ - internal/gc/gcbits.o internal/gc/gclinux.o + ar -r $@ $(OBJS) $(ZLIBOBJS) $(GCOBJS) ########################################################### @@ -267,8 +279,8 @@ switch.o : internal/switch.d array.o : std/array.d $(DMD) -c $(DFLAGS) std/array.d -assert.o : std/assert.d - $(DMD) -c $(DFLAGS) std/assert.d +asserterror.o : std/asserterror.d + $(DMD) -c $(DFLAGS) std/asserterror.d compiler.o : std/compiler.d $(DMD) -c $(DFLAGS) std/compiler.d @@ -312,6 +324,9 @@ outofmemory.o : std/outofmemory.d path.o : std/path.d $(DMD) -c $(DFLAGS) std/path.d +process.o : std/process.d + $(DMD) -c $(DFLAGS) std/process.d + random.o : std/random.d $(DMD) -c $(DFLAGS) std/random.d @@ -330,6 +345,9 @@ switcherr.o : std/switcherr.d system.o : std/system.d $(DMD) -c $(DFLAGS) std/system.d +syserror.o : std/syserror.d + $(DMD) -c $(DFLAGS) std/syserror.d + thread.o : std/thread.d $(DMD) -c $(DFLAGS) std/thread.d @@ -465,9 +483,9 @@ ti_int.o : std/typeinfo/ti_int.d ##########################################################333 -zip : $(ALLSRCS) +zip : $(ALLSRCS) linux.mak win32.mak rm phobos.zip - zip phobos $(ALLSRCS) + zip phobos $(ALLSRCS) linux.mak win32.mak clean: rm $(OBJS) diff --git a/object.d b/object.d index 391890298..3962fd9dc 100644 --- a/object.d +++ b/object.d @@ -21,12 +21,12 @@ class Object return (uint)(void *)this; } - int cmp(Object o) + int opCmp(Object o) { return (int)(void *)this - (int)(void *)o; } - int eq(Object o) + int opEquals(Object o) { return this === o; } diff --git a/std/array.d b/std/array.d index 43280bf31..37fe84fd2 100644 --- a/std/array.d +++ b/std/array.d @@ -1,6 +1,7 @@ -import object; -import std.c.stdio; +module std.array; + +private import std.c.stdio; class ArrayBoundsError : Error { diff --git a/std/assert.d b/std/asserterror.d similarity index 67% rename from std/assert.d rename to std/asserterror.d index 6098e60a5..8f09f05eb 100644 --- a/std/assert.d +++ b/std/asserterror.d @@ -1,8 +1,7 @@ -import object; -import std.c.stdio; +module std.assertexception; -class Assert : Object +class AssertError : Object { private: @@ -18,26 +17,26 @@ class Assert : Object public: /*************************************** - * If nobody catches the Assert, this winds up + * If nobody catches the AssertError, this winds up * getting called by the startup code. */ void print() { - printf("Assertion Failure %s(%u)\n", (char *)filename, linnum); + printf("AssertErrorion Failure %s(%u)\n", (char *)filename, linnum); } } /******************************************** * Called by the compiler generated module assert function. - * Builds an Assert exception and throws it. + * Builds an AssertError exception and throws it. */ extern (C) static void _d_assert(char[] filename, uint line) { //printf("_d_assert(%s, %d)\n", (char *)filename, line); - Assert a = new Assert(filename, line); + AssertError a = new AssertError(filename, line); //printf("assertion %p created\n", a); throw a; } diff --git a/std/c/linux/linux.d b/std/c/linux/linux.d index b80d5e914..9b6e3039b 100644 --- a/std/c/linux/linux.d +++ b/std/c/linux/linux.d @@ -52,7 +52,7 @@ enum O_APPEND = 02000, } -struct stat +struct struct_stat // distinguish it from the stat() function { ulong st_dev; ushort __pad1; @@ -78,9 +78,21 @@ struct stat unittest { - assert(stat.size == 88); + assert(struct_stat.size == 88); } +enum : int +{ + S_IFIFO = 0010000, + S_IFCHR = 0020000, + S_IFDIR = 0040000, + S_IFBLK = 0060000, + S_IFREG = 0100000, + S_IFLNK = 0120000, + S_IFSOCK = 0140000, + + S_IFMT = 0170000 +} extern (C) { @@ -89,8 +101,13 @@ extern (C) int write(int, void*, int); int close(int); int lseek(int, int, int); - int fstat(int, stat*); + int fstat(int, struct_stat*); + int stat(char*, struct_stat*); int getErrno(); + int chdir(char*); + int mkdir(char*, int); + int rmdir(char*); + char* getcwd(char*, int); } struct timeval diff --git a/std/c/linux/linuxextern.d b/std/c/linux/linuxextern.d index 56c2b474e..f25a71126 100644 --- a/std/c/linux/linuxextern.d +++ b/std/c/linux/linuxextern.d @@ -7,6 +7,8 @@ * Put them separate so they'll be externed - do not link in linuxextern.o */ +module std.c.linux.linuxextern; + extern (C) { void* __libc_stack_end; diff --git a/std/c/process.d b/std/c/process.d index 1b78d98a5..e25cd0392 100644 --- a/std/c/process.d +++ b/std/c/process.d @@ -2,6 +2,8 @@ /* Interface to the C header file process.h */ +module std.c.process; + extern (C): void exit(int); diff --git a/std/c/time.d b/std/c/time.d index 098b5713b..ab15daa92 100644 --- a/std/c/time.d +++ b/std/c/time.d @@ -1,4 +1,6 @@ +module std.c.time; + extern (C): const uint CLOCKS_PER_SEC = 1000; diff --git a/std/c/windows/com.d b/std/c/windows/com.d index 4967e384c..0f310f2ad 100644 --- a/std/c/windows/com.d +++ b/std/c/windows/com.d @@ -1,6 +1,8 @@ -import std.c.windows.windows; -import std.string; +module std.c.windows.com; + +private import std.c.windows.windows; +private import std.string; alias WCHAR OLECHAR; alias OLECHAR *LPOLESTR; diff --git a/std/c/windows/windows.d b/std/c/windows/windows.d index 3dc1f3d2e..191b533c9 100644 --- a/std/c/windows/windows.d +++ b/std/c/windows/windows.d @@ -1,4 +1,6 @@ +module std.c.windows.windows; + extern (Windows) { alias uint ULONG; @@ -22,7 +24,7 @@ extern (Windows) alias LPSTR PTSTR, LPTSTR; alias LPCSTR LPCTSTR; - alias WCHAR* LPCWSTR, PCWSTR; + alias WCHAR* LPWSTR, LPCWSTR, PCWSTR; alias uint DWORD; alias int BOOL; @@ -262,8 +264,32 @@ struct WIN32_FIND_DATA { char cAlternateFileName[ 14 ]; } +struct WIN32_FIND_DATAW { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + WCHAR cFileName[ 260 ]; + WCHAR cAlternateFileName[ 14 ]; +} + export { +BOOL SetCurrentDirectoryA(LPCSTR lpPathName); +BOOL SetCurrentDirectoryW(LPCWSTR lpPathName); +DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer); +DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer); +BOOL CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); +BOOL CreateDirectoryW(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); +BOOL CreateDirectoryExA(LPCSTR lpTemplateDirectory, LPCSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes); +BOOL CreateDirectoryExW(LPCWSTR lpTemplateDirectory, LPCWSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes); +BOOL RemoveDirectoryA(LPCSTR lpPathName); +BOOL RemoveDirectoryW(LPCWSTR lpPathName); + BOOL CloseHandle(HANDLE hObject); HANDLE CreateFileA(char *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, DWORD dwCreationDisposition, diff --git a/std/compiler.d b/std/compiler.d index f40e956a7..4b75e4cbb 100644 --- a/std/compiler.d +++ b/std/compiler.d @@ -1,7 +1,7 @@ // Identify the compiler used and its various features. - +module std.compiler; const { diff --git a/std/conv.d b/std/conv.d index 2fce8acff..27e3df3a2 100644 --- a/std/conv.d +++ b/std/conv.d @@ -1,13 +1,14 @@ -// conv.d // Written by Walter Bright -// Copyright (c) 2002 Digital Mars +// Copyright (c) 2002-2003 Digital Mars // All Rights Reserved // www.digitalmars.com // Conversion building blocks. These differ from the C equivalents by // checking for overflow and not allowing whitespace. +module std.conv; + //debug=conv; // uncomment to turn on debugging printf's diff --git a/std/ctype.d b/std/ctype.d index 132d56d6d..d6778d54b 100644 --- a/std/ctype.d +++ b/std/ctype.d @@ -1,11 +1,12 @@ -// ctype.d + // Written by Walter Bright -// Copyright (c) 2001 Digital Mars +// Copyright (c) 2001-2003 Digital Mars // All Rights Reserved // www.digitalmars.com // Simple char classification functions +module std.ctype; int isalnum(char c) { return _ctype[1 + c] & (_ALP|_DIG); } int isalpha(char c) { return _ctype[1 + c] & (_ALP); } diff --git a/std/dateparse.d b/std/dateparse.d index 4eb857409..33e52b06b 100644 --- a/std/dateparse.d +++ b/std/dateparse.d @@ -6,9 +6,12 @@ module std.dateparse; -import std.string; -import std.c.stdlib; -import std.date; +private +{ + import std.string; + import std.c.stdlib; + import std.date; +} //debug=log; diff --git a/std/file.d b/std/file.d index 3e2770a2b..1c4f1deca 100644 --- a/std/file.d +++ b/std/file.d @@ -1,17 +1,20 @@ -// Copyright (c) 2001-2002 by Digital Mars +// Copyright (c) 2001-2003 by Digital Mars // All Rights Reserved // www.digitalmars.com +module std.file; + private import std.c.stdio; +private import std.path; private import std.string; /*********************************** */ -class FileError : Error +class FileException : Exception { - private import std.windows.syserror; + private import std.syserror; uint errno; // operating system error code @@ -49,7 +52,7 @@ private import std.c.windows.windows; * array of bytes read */ -byte[] read(char[] name) +void[] read(char[] name) { DWORD size; DWORD numread; @@ -82,7 +85,7 @@ err2: err: delete buf; err1: - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); } /********************************************* @@ -91,7 +94,7 @@ err1: * 0 success */ -void write(char[] name, byte[] buffer) +void write(char[] name, void[] buffer) { HANDLE h; DWORD numwritten; @@ -114,7 +117,7 @@ void write(char[] name, byte[] buffer) err2: CloseHandle(h); err: - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); } @@ -122,7 +125,7 @@ err: * Append to a file. */ -void append(char[] name, byte[] buffer) +void append(char[] name, void[] buffer) { HANDLE h; DWORD numwritten; @@ -147,7 +150,7 @@ void append(char[] name, byte[] buffer) err2: CloseHandle(h); err: - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); } @@ -161,7 +164,7 @@ void rename(char[] from, char[] to) result = MoveFileA(toStringz(from), toStringz(to)); if (!result) - throw new FileError(to, GetLastError()); + throw new FileException(to, GetLastError()); } @@ -175,7 +178,7 @@ void remove(char[] name) result = DeleteFileA(toStringz(name)); if (!result) - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); } @@ -183,7 +186,7 @@ void remove(char[] name) * Get file size. */ -uint getSize(char[] name) +ulong getSize(char[] name) { WIN32_FIND_DATA filefindbuf; HANDLE findhndl; @@ -191,7 +194,7 @@ uint getSize(char[] name) findhndl = FindFirstFileA(toStringz(name), &filefindbuf); if (findhndl == (HANDLE)-1) { - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); } FindClose(findhndl); return filefindbuf.nFileSizeLow; @@ -209,7 +212,120 @@ uint getAttributes(char[] name) result = GetFileAttributesA(toStringz(name)); if (result == 0xFFFFFFFF) { - throw new FileError(name, GetLastError()); + throw new FileException(name, GetLastError()); + } + return result; +} + +/**************************************************** + * Is name a file? + */ + +int isfile(char[] name) +{ + return (getAttributes(name) & FILE_ATTRIBUTE_DIRECTORY) == 0; +} + +/**************************************************** + * Is name a directory? + */ + +int isdir(char[] name) +{ + return (getAttributes(name) & FILE_ATTRIBUTE_DIRECTORY) != 0; +} + +/**************************************************** + * Change directory. + */ + +void chdir(char[] pathname) +{ + if (!SetCurrentDirectoryA(toStringz(pathname))) + { + throw new FileException(pathname, GetLastError()); + } +} + +/**************************************************** + * Make directory. + */ + +void mkdir(char[] pathname) +{ + if (!CreateDirectoryA(toStringz(pathname), null)) + { + throw new FileException(pathname, GetLastError()); + } +} + +/**************************************************** + * Remove directory. + */ + +void rmdir(char[] pathname) +{ + if (!RemoveDirectoryA(toStringz(pathname))) + { + throw new FileException(pathname, GetLastError()); + } +} + +/**************************************************** + * Get current directory. + */ + +char[] getcwd() +{ + char[] dir; + int length; + char c; + + length = GetCurrentDirectoryA(0, &c); + if (!length) + { + throw new FileException("getcwd", GetLastError()); + } + dir = new char[length]; + length = GetCurrentDirectoryA(length, dir); + if (!length) + { + throw new FileException("getcwd", GetLastError()); + } + return dir[0 .. length]; // leave off terminating 0 +} + +/*************************************************** + * Return contents of directory. + */ + +char[][] listdir(char[] pathname) +{ + char[][] result; + char[] c; + HANDLE h; + WIN32_FIND_DATA fileinfo; + + c = std.path.join(pathname, "*.*"); + h = FindFirstFileA(toStringz(c), &fileinfo); + if (h != INVALID_HANDLE_VALUE) + { + do + { int i; + int clength; + + // Skip "." and ".." + if (std.string.strcmp(fileinfo.cFileName, ".") == 0 || + std.string.strcmp(fileinfo.cFileName, "..") == 0) + continue; + + i = result.length; + result.length = i + 1; + clength = std.string.strlen(fileinfo.cFileName); + result[i] = new char[clength]; + result[i][] = fileinfo.cFileName[0 .. clength]; + } while (FindNextFileA(h,&fileinfo) != FALSE); + FindClose(h); } return result; } @@ -229,12 +345,12 @@ private import std.c.linux.linux; * array of bytes read */ -byte[] read(char[] name) +void[] read(char[] name) { uint size; uint numread; int fd; - stat statbuf; + struct_stat statbuf; byte[] buf; char *namez; @@ -277,7 +393,7 @@ err: delete buf; err1: - throw new FileError(name, getErrno()); + throw new FileException(name, getErrno()); } /********************************************* @@ -286,7 +402,7 @@ err1: * 0 success */ -void write(char[] name, byte[] buffer) +void write(char[] name, void[] buffer) { int fd; int numwritten; @@ -309,7 +425,7 @@ void write(char[] name, byte[] buffer) err2: std.c.linux.linux.close(fd); err: - throw new FileError(name, getErrno()); + throw new FileException(name, getErrno()); } @@ -317,7 +433,7 @@ err: * Append to a file. */ -void append(char[] name, byte[] buffer) +void append(char[] name, void[] buffer) { int fd; int numwritten; @@ -340,7 +456,7 @@ void append(char[] name, byte[] buffer) err2: std.c.linux.linux.close(fd); err: - throw new FileError(name, getErrno()); + throw new FileException(name, getErrno()); } @@ -354,7 +470,7 @@ void rename(char[] from, char[] to) char *toz = toStringz(to); if (std.c.stdio.rename(fromz, toz) == -1) - throw new FileError(to, getErrno()); + throw new FileException(to, getErrno()); } @@ -365,7 +481,7 @@ void rename(char[] from, char[] to) void remove(char[] name) { if (std.c.stdio.remove(toStringz(name)) == -1) - throw new FileError(name, getErrno()); + throw new FileException(name, getErrno()); } @@ -373,11 +489,11 @@ void remove(char[] name) * Get file size. */ -uint getSize(char[] name) +ulong getSize(char[] name) { uint size; int fd; - stat statbuf; + struct_stat statbuf; char *namez; namez = toStringz(name); @@ -409,7 +525,7 @@ err2: std.c.linux.linux.close(fd); err: err1: - throw new FileError(name, getErrno()); + throw new FileException(name, getErrno()); } @@ -419,7 +535,100 @@ err1: uint getAttributes(char[] name) { - return 0; + struct_stat statbuf; + char *namez; + + namez = toStringz(name); + if (std.c.linux.linux.stat(namez, &statbuf)) + { + throw new FileException(name, getErrno()); + } + + return statbuf.st_mode; +} + +/**************************************************** + * Is name a file? + */ + +int isfile(char[] name) +{ + return getAttributes(name) & S_IFREG; // regular file +} + +/**************************************************** + * Is name a directory? + */ + +int isdir(char[] name) +{ + return getAttributes(name) & S_IFDIR; +} + +/**************************************************** + * Change directory. + */ + +void chdir(char[] pathname) +{ + if (std.c.linux.linux.chdir(toStringz(pathname)) == 0) + { + throw new FileException(pathname, getErrno()); + } +} + +/**************************************************** + * Make directory. + */ + +void mkdir(char[] pathname) +{ + if (std.c.linux.linux.mkdir(toStringz(pathname), 0777) == 0) + { + throw new FileException(pathname, getErrno()); + } +} + +/**************************************************** + * Remove directory. + */ + +void rmdir(char[] pathname) +{ + if (std.c.linux.linux.rmdir(toStringz(pathname)) == 0) + { + throw new FileException(pathname, getErrno()); + } +} + +/**************************************************** + * Get current directory. + */ + +char[] getcwd() +{ char* p; + + p = std.c.linux.linux.getcwd(null, 0); + if (!p) + { + throw new FileException("cannot get cwd", getErrno()); + } + + int length = std.string.strlen(p); + char[] buf = new char[length]; + buf[] = p[0 .. length]; + std.c.stdlib.free(p); + return buf; +} + +/*************************************************** + * Return contents of directory. + */ + +char[][] listdir(char[] pathname) +{ + assert(0); // BUG: not implemented + return null; } } diff --git a/std/gc.d b/std/gc.d index 2b33da90a..96842dd46 100644 --- a/std/gc.d +++ b/std/gc.d @@ -1,8 +1,11 @@ -// Copyright (c) 1999-2002 by Digital Mars + +// Copyright (c) 1999-2003 by Digital Mars // All Rights Reserved // written by Walter Bright // www.digitalmars.com +module std.gc; + import gcstats; void addRoot(void *p); // add p to list of roots diff --git a/std/math.d b/std/math.d index b981d1614..63929f770 100644 --- a/std/math.d +++ b/std/math.d @@ -8,7 +8,7 @@ module std.math; //debug=math; // uncomment to turn on debugging printf's -import std.c.stdio; +private import std.c.stdio; /* Intrinsics */ diff --git a/std/moduleinit.d b/std/moduleinit.d index 99277f947..b421e385f 100644 --- a/std/moduleinit.d +++ b/std/moduleinit.d @@ -1,10 +1,15 @@ +module std.moduleinit; + //debug = 1; -import object; -import std.c.stdio; -import std.c.stdlib; -import std.string; +private +{ + import object; + import std.c.stdio; + import std.c.stdlib; + import std.string; +} enum { MIctorstart = 1, // we've started constructing it diff --git a/std/outbuffer.d b/std/outbuffer.d index 614813278..368959be3 100644 --- a/std/outbuffer.d +++ b/std/outbuffer.d @@ -12,9 +12,14 @@ // from OutBuffer. // To convert an array of bytes back into raw data, use InBuffer. -import std.string; -import std.c.stdio; -import std.c.stdlib; +module std.outbuffer; + +private +{ + import std.string; + import std.c.stdio; + import std.c.stdlib; +} class OutBuffer { diff --git a/std/outofmemory.d b/std/outofmemory.d index 8e33d218a..4e2d1d0c4 100644 --- a/std/outofmemory.d +++ b/std/outofmemory.d @@ -1,5 +1,5 @@ -import std.c.stdio; +module std.outofmemory; class OutOfMemory : Object { diff --git a/std/path.d b/std/path.d index 7dda2e135..16df2cb24 100644 --- a/std/path.d +++ b/std/path.d @@ -9,12 +9,7 @@ module std.path; //debug=path; // uncomment to turn on debugging printf's -debug(path) -{ - import std.c.stdio; // for printf() -} - -import std.string; +private import std.string; version(Win32) { diff --git a/std/process.d b/std/process.d new file mode 100644 index 000000000..3387ded03 --- /dev/null +++ b/std/process.d @@ -0,0 +1,15 @@ + +// Copyright (c) 2003 by Digital Mars +// All Rights Reserved +// www.digitalmars.com + + +module std.process; + +private import std.string; +private import std.c.process; + +int system(char[] command) +{ + return std.c.process.system(toStringz(command)); +} diff --git a/std/random.d b/std/random.d index 1651ea687..47b0e6c44 100644 --- a/std/random.d +++ b/std/random.d @@ -2,6 +2,7 @@ // random.d // www.digitalmars.com +module std.random; // Segments of the code in this file Copyright (c) 1997 by Rick Booth // From "Inner Loops" by Rick Booth, Addison-Wesley @@ -13,7 +14,7 @@ version (Win32) version (linux) { - import std.c.linux.linux; + private import std.c.linux.linux; } /* ===================== Random ========================= */ @@ -94,7 +95,6 @@ static this() rand_seed((uint) s, (uint)(s >> 32)); } -//import std.c.stdio; unittest { diff --git a/std/regexp.d b/std/regexp.d index bd2c49f7f..a3fc2572f 100644 --- a/std/regexp.d +++ b/std/regexp.d @@ -31,11 +31,14 @@ an error. */ +module std.regexp; + //debug = regexp; // uncomment to turn on debugging printf's private { import std.c.stdio; + import std.c.stdlib; import std.string; import std.ctype; import std.outbuffer; diff --git a/std/stdint.d b/std/stdint.d index ff3c87b3b..2d1a1c805 100644 --- a/std/stdint.d +++ b/std/stdint.d @@ -1,4 +1,5 @@ +module std.stdint; /* Exact sizes */ diff --git a/std/string.d b/std/string.d index 2bab19cef..079ecdeb5 100644 --- a/std/string.d +++ b/std/string.d @@ -18,12 +18,14 @@ // The code is not optimized for speed, that will have to wait // until the design is solidified. +module std.string; + //debug=string; // uncomment to turn on debugging printf's -debug(string) -{ - import std.c.stdio; // for printf() -} +private import std.c.stdio; +private import std.c.stdlib; +private import std.outbuffer; +private import std.utf; extern (C) { @@ -48,7 +50,7 @@ extern (C) /************** Exceptions ****************/ -class StringError : Error +class StringException : Exception { this(char[] msg) { @@ -1187,7 +1189,7 @@ body unittest { - debug(string) printf("string.replaceSlice.unittest()\n"); + debug(string) printf("string.replaceSlice.unittest\n"); char[] string = "hello"; char[] slice = string[2 .. 4]; @@ -1462,7 +1464,7 @@ char[] toString(uint u) unittest { - debug(string) printf("string.toString.unittest\n"); + debug(string) printf("string.toString(uint).unittest\n"); char[] r; int i; @@ -1491,7 +1493,7 @@ char[] toString(char *s) unittest { - debug(string) printf("string.toString.unittest\n"); + debug(string) printf("string.toString(char*).unittest\n"); char[] r; int i; @@ -1506,3 +1508,100 @@ unittest } +/***************************************************** + */ + +char[] format(char[] fmt, ...) +{ + OutBuffer b = new OutBuffer(); + va_list ap; + ap = cast(va_list)&fmt; + ap += fmt.size; + b.reserve(fmt.length); + int fmtlength = fmt.length; + char[] s; + + for (int i = 0; i < fmtlength; i++) + { + char c = fmt[i]; + if (c != '%') + { b.write(c); + continue; + } + i++; + if (i == fmtlength) + { b.write(c); + continue; + } + c = fmt[i]; + switch (c) + { + case '%': + b.write(c); + break; + + case 'c': + { dchar dc; + + dc = *cast(dchar*)ap; + ap += dc.size; + if (dc <= 0x7F) + b.write(cast(char)dc); + else + { char[] s; + + if (!isValidDchar(dc)) + throw new StringException("invalid dchar value"); + std.utf.encode(s, dc); + b.write(cast(ubyte[])s); + } + break; + } + + case 's': + s = *cast(char[]*)ap; + ap += s.size; + b.write(cast(ubyte[])s); + break; + + default: + throw new StringException("invalid format"); + break; + } + } + + return cast(char[])b.toBytes(); +} + +unittest +{ + debug(string) printf("std.string.format.unittest\n"); + + char[] r; + int i; + + r = format(null); + i = cmp(r, ""); + assert(i == 0); + + r = format("foo"); + i = cmp(r, "foo"); + assert(i == 0); + + r = format("foo%%"); + i = cmp(r, "foo%"); + assert(i == 0); + + r = format("foo%c", 'C'); + i = cmp(r, "fooC"); + assert(i == 0); + + r = format("%s foo", "bar"); + i = cmp(r, "bar foo"); + assert(i == 0); + + r = format("%s foo %s", "bar", "abc"); + i = cmp(r, "bar foo abc"); + assert(i == 0); +} + diff --git a/std/switcherr.d b/std/switcherr.d index ad2a991db..d3f4d4e50 100644 --- a/std/switcherr.d +++ b/std/switcherr.d @@ -1,6 +1,5 @@ -import object; -import std.c.stdio; +module std.switcherr; class SwitchError : Object { diff --git a/std/windows/syserror.d b/std/syserror.d similarity index 97% rename from std/windows/syserror.d rename to std/syserror.d index cb31d37e6..51cebbdba 100644 --- a/std/windows/syserror.d +++ b/std/syserror.d @@ -3,6 +3,8 @@ // www.digitalmars.com // Convert Win32 error code to string +module std.syserror; + class SysError { private import std.c.stdio; diff --git a/std/system.d b/std/system.d index 4ea7694cd..86fa84382 100644 --- a/std/system.d +++ b/std/system.d @@ -1,6 +1,8 @@ // Information about the target operating system, environment, and CPU +module std.system; + const { diff --git a/std/thread.d b/std/thread.d index a5a417b41..134971c2c 100644 --- a/std/thread.d +++ b/std/thread.d @@ -3,6 +3,8 @@ // written by Walter Bright // www.digitalmars.com +module std.thread; + //debug=thread; /* ================================ Win32 ================================= */ @@ -10,7 +12,7 @@ version (Win32) { -import std.c.windows.windows; +private import std.c.windows.windows; extern (Windows) alias uint (*stdfp)(void *); diff --git a/std/typeinfo/ti_AC.d b/std/typeinfo/ti_AC.d index efbe9b424..e2d5f7928 100644 --- a/std/typeinfo/ti_AC.d +++ b/std/typeinfo/ti_AC.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // Object[] @@ -25,9 +25,9 @@ class TypeInfo_AC : TypeInfo { for (uint u = 0; u < s1.length; u++) { - // Do not pass null's to Object.eq() + // Do not pass null's to Object.opEquals() if (s1[u] === s2[u] || - (s1[u] !== null && s2[u] !== null && s1[u].eq(s2[u]))) + (s1[u] !== null && s2[u] !== null && s1[u].opEquals(s2[u]))) continue; return 0; } @@ -59,7 +59,7 @@ class TypeInfo_AC : TypeInfo { c = 1; break; } - c = o1.cmp(o2); + c = o1.opCmp(o2); if (c) break; } diff --git a/std/typeinfo/ti_Aa.d b/std/typeinfo/ti_Aa.d index 20c218014..ad272a3a8 100644 --- a/std/typeinfo/ti_Aa.d +++ b/std/typeinfo/ti_Aa.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // char[] diff --git a/std/typeinfo/ti_Adchar.d b/std/typeinfo/ti_Adchar.d index 767db00cb..7773ef462 100644 --- a/std/typeinfo/ti_Adchar.d +++ b/std/typeinfo/ti_Adchar.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // dchar[] diff --git a/std/typeinfo/ti_Ag.d b/std/typeinfo/ti_Ag.d index ca710196b..49f321c3a 100644 --- a/std/typeinfo/ti_Ag.d +++ b/std/typeinfo/ti_Ag.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // byte[] diff --git a/std/typeinfo/ti_Aint.d b/std/typeinfo/ti_Aint.d index dfe3a7a67..50647a5cc 100644 --- a/std/typeinfo/ti_Aint.d +++ b/std/typeinfo/ti_Aint.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // int[] diff --git a/std/typeinfo/ti_Along.d b/std/typeinfo/ti_Along.d index f2043bdae..4ae9716d5 100644 --- a/std/typeinfo/ti_Along.d +++ b/std/typeinfo/ti_Along.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // long[] diff --git a/std/typeinfo/ti_Ashort.d b/std/typeinfo/ti_Ashort.d index 3c5093e7b..a1d0cc5cb 100644 --- a/std/typeinfo/ti_Ashort.d +++ b/std/typeinfo/ti_Ashort.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // short[] diff --git a/std/typeinfo/ti_Aubyte.d b/std/typeinfo/ti_Aubyte.d index 07b369dcc..fb63bae6d 100644 --- a/std/typeinfo/ti_Aubyte.d +++ b/std/typeinfo/ti_Aubyte.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // ubyte[] diff --git a/std/typeinfo/ti_Auint.d b/std/typeinfo/ti_Auint.d index efc47b8b2..c9e6dd009 100644 --- a/std/typeinfo/ti_Auint.d +++ b/std/typeinfo/ti_Auint.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // uint[] diff --git a/std/typeinfo/ti_Aulong.d b/std/typeinfo/ti_Aulong.d index a3450e5db..fdb7e6e89 100644 --- a/std/typeinfo/ti_Aulong.d +++ b/std/typeinfo/ti_Aulong.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // ulong[] diff --git a/std/typeinfo/ti_Aushort.d b/std/typeinfo/ti_Aushort.d index ac1142249..d34465e4c 100644 --- a/std/typeinfo/ti_Aushort.d +++ b/std/typeinfo/ti_Aushort.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // ushort[] diff --git a/std/typeinfo/ti_Awchar.d b/std/typeinfo/ti_Awchar.d index e49f5bb8a..34ed65eaf 100644 --- a/std/typeinfo/ti_Awchar.d +++ b/std/typeinfo/ti_Awchar.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // wchar[] diff --git a/std/typeinfo/ti_C.d b/std/typeinfo/ti_C.d index 0427d005f..12a58f05b 100644 --- a/std/typeinfo/ti_C.d +++ b/std/typeinfo/ti_C.d @@ -1,5 +1,5 @@ -import std.string; +private import std.string; // Object @@ -17,7 +17,7 @@ class TypeInfo_C : TypeInfo Object o1 = *(Object*)p1; Object o2 = *(Object*)p2; - return o1 == o2 || (o1 && o1.cmp(o2) == 0); + return o1 == o2 || (o1 && o1.opCmp(o2) == 0); } int compare(void *p1, void *p2) @@ -33,7 +33,7 @@ class TypeInfo_C : TypeInfo { if (!o2) c = 1; else - c = o1.cmp(o2); + c = o1.opCmp(o2); } else c = -1; diff --git a/std/uri.d b/std/uri.d index d43362ec7..d2a674f70 100644 --- a/std/uri.d +++ b/std/uri.d @@ -1,4 +1,7 @@ + +module std.uri; + //debug=uri; // uncomment to turn on debugging printf's /* ====================== URI Functions ================ */ diff --git a/std/utf.d b/std/utf.d index 684eb55cf..37d20c44d 100644 --- a/std/utf.d +++ b/std/utf.d @@ -7,6 +7,8 @@ // Description of UTF-8 at: // http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 +module std.utf; + //debug=utf; // uncomment to turn on debugging printf's class UtfError : Error diff --git a/std/windows/iunknown.d b/std/windows/iunknown.d index 120aee65c..3470747a7 100644 --- a/std/windows/iunknown.d +++ b/std/windows/iunknown.d @@ -1,7 +1,7 @@ module std.windows.iunknown; -import std.c.windows.windows; +private import std.c.windows.windows; alias int HRESULT; diff --git a/std/windows/registry.d b/std/windows/registry.d index 884c34e91..fccbe5121 100644 --- a/std/windows/registry.d +++ b/std/windows/registry.d @@ -4,7 +4,7 @@ * Purpose: Win32 Registry manipulation * * Created 15th March 2003 - * Updated: 6th November 2003 + * Updated: 18th October 2003 * * Author: Matthew Wilson * @@ -58,8 +58,8 @@ -/** \file std/windows/registry.d This file contains - * the \c std.windows.registry.* classes +/** \file D/win32/registry.d This file contains + * the \c D.win32.registry.* classes */ /* ////////////////////////////////////////////////////////////////////////// */ @@ -70,10 +70,6 @@ module std.windows.registry; * Imports */ -import std.windows.error_codes; -import std.windows.exceptions; -import std.windows.types; - //import synsoft.types; /+ + These are borrowed from synsoft.types, until such time as something similar is in Phobos ++ +/ @@ -111,6 +107,165 @@ public enum Endian +/ +//import synsoft.win32.types; +/+ + These are borrowed from synsoft.win32.types for the moment, but will not be + + needed once I've convinced Walter to use strong typedefs for things like HKEY + + +/ +public typedef uint Reserved; +public typedef void *HKEY; +public alias HKEY *PHKEY; +public alias char *LPCSTR; +public alias int LONG; +public alias uint DWORD; +public alias DWORD *LPDWORD; +public alias void *LPSECURITY_ATTRIBUTES; +public alias char *LPSTR; +public alias char *LPCSTR; +public alias void *LPCVOID; +public struct FILETIME +{ + DWORD dwLowDateTime; + DWORD dwHighDateTime; +}; +/+ + +/ + + +//import synsoft.win32.error_codes; +/+ +++++++ These are in here for now, but will be in windows.d very soon +++++++ + +/ +public const LONG ERROR_SUCCESS = 0; +public const LONG ERROR_ACCESS_DENIED = 5; +public const LONG ERROR_MORE_DATA = 234; +public const LONG ERROR_NO_MORE_ITEMS = 259; +/+ + +/ + + +//import synsoft.win32.exception; +/+ +++ This is in here, until the Phobos exception hierarchy is implemented ++++ + +/ +class Win32Exception + : Exception +{ +/// \name Construction +//@{ +public: + /// \brief Creates an instance of the exception + /// + /// \param message The message associated with the exception + this(char[] message) + { + this(message, GetLastError()); + } + /// \brief Creates an instance of the exception, with the given + /// + /// \param message The message associated with the exception + /// \param error The Win32 error number associated with the exception + this(char[] message, int error) + { + char sz[24]; // Enough for the three " ()" characters and a 64-bit integer value + int cch = wsprintfA(sz, " (%d)", error); + + m_message = message; + m_error = error; + + super(message ~ sz[0 .. cch]); + } +//@} + +/// \name Attributes +//@{ +public: + /// Returns the message string associated with the exception + char[] Message() + { + return m_message; + } + + /// Returns the Win32 error code associated with the exception + int Error() + { + return m_error; + } + + /// Converts the error code into a string + /// + /// \note Not yet implemented + char[] LookupError(char[] moduleName) + { + return null; + } + +//@} + +/// \name Members +//@{ +private: + char[] m_message; + int m_error; +//@} +} + +unittest +{ + // (i) Test that we can throw and catch one by its own type + try + { + char[] message = "Test 1"; + int code = 3; + char[] string = "Test 1 (3)"; + + try + { + throw new Win32Exception(message, code); + } + catch(Win32Exception x) + { + assert(x.Error == code); + if(message != x.Message) + { + printf( "UnitTest failure for Win32Exception:\n" + " x.message [%d;\"%.*s\"] does not equal [%d;\"%.*s\"]\n" + , x.Message.length, x.Message + , message.length, message); + } + assert(message == x.Message); + } + } + catch(Exception /* x */) + { + int code_flow_should_never_reach_here = 0; + assert(code_flow_should_never_reach_here); + } + + // (ii) Catch that can throw and be caught by Exception + { + char[] message = "Test 2"; + int code = 3; + char[] string = "Test 2 (3)"; + + try + { + throw new Win32Exception(message, code); + } + catch(Exception x) + { + if(string != x.toString()) + { + printf( "UnitTest failure for Win32Exception:\n" + " x.toString() [%d;\"%.*s\"] does not equal [%d;\"%.*s\"]\n" + , x.toString().length, x.toString() + , string.length, string); + } + assert(string == x.toString()); + } + } +} +/+ + +/ + + //import synsoft.text.token; /+ ++++++ This is borrowed from synsoft.text.token, until such time as something + similar is in Phobos ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -192,12 +347,12 @@ char[][] tokenise(char[] source, char delimiter, boolean bElideBlanks, boolean b +/ -import std.string; +private import std.string; /* ////////////////////////////////////////////////////////////////////////// */ -/// \defgroup group_std_windows_reg std.windows.registry -/// \ingroup group_std_windows +/// \defgroup group_D_win32_reg D.win32.registry +/// \ingroup group_D_win32 /// \brief This library provides Win32 Registry facilities /* ///////////////////////////////////////////////////////////////////////////// @@ -893,7 +1048,7 @@ body //////////////////////////////////////////////////////////////////////////////// // RegistryException -/// Exception class thrown by the std.windows.registry classes +/// Exception class thrown by the D.win32.registry classes /// /// \ingroup group_D_win32_reg diff --git a/std/zlib.d b/std/zlib.d index 25489207a..c5e54e021 100644 --- a/std/zlib.d +++ b/std/zlib.d @@ -5,7 +5,7 @@ module std.zlib; -debug=zlib; // uncomment to turn on debugging printf's +//debug=zlib; // uncomment to turn on debugging printf's private import etc.c.zlib; diff --git a/win32.mak b/win32.mak index b86746906..b9758197e 100644 --- a/win32.mak +++ b/win32.mak @@ -15,8 +15,8 @@ CP=cp CFLAGS=-g -mn -6 -r -DFLAGS=-O -release -#DFLAGS=-unittest -g +#DFLAGS=-O -release +DFLAGS=-unittest -g CC=sc #DMD=\dmd\bin\dmd @@ -51,7 +51,7 @@ unittest.exe : unittest.d phobos.lib $(DMD) unittest -g sc unittest.obj -g -OBJS= assert.obj deh.obj switch.obj complex.obj gcstats.obj \ +OBJS= asserterror.obj deh.obj switch.obj complex.obj gcstats.obj \ critical.obj object.obj monitor.obj arraycat.obj invariant.obj \ dmain2.obj outofmemory.obj aaA.obj adi.obj file.obj \ compiler.obj system.obj moduleinit.obj \ @@ -60,7 +60,7 @@ OBJS= assert.obj deh.obj switch.obj complex.obj gcstats.obj \ stream.obj switcherr.obj com.obj array.obj gc.obj \ qsort.obj math2.obj date.obj dateparse.obj thread.obj obj.obj \ iunknown.obj crc32.obj conv.obj arraycast.obj utf.obj uri.obj \ - registry.obj Czlib.obj Dzlib.obj zip.obj \ + Czlib.obj Dzlib.obj zip.obj process.obj registry.obj \ ti_Aa.obj ti_Ag.obj ti_C.obj ti_int.obj ti_char.obj \ ti_wchar.obj ti_uint.obj ti_short.obj ti_ushort.obj \ ti_byte.obj ti_ubyte.obj ti_long.obj ti_ulong.obj ti_ptr.obj \ @@ -79,9 +79,9 @@ SRCSTD= std\zlib.d std\zip.d std\stdint.d std\conv.d std\utf.d std\uri.d \ std\gc.d std\math.d std\string.d std\path.d std\date.d \ std\ctype.d std\file.d std\compiler.d std\system.d std\moduleinit.d \ std\outbuffer.d std\math2.d std\thread.d \ - std\assert.d std\dateparse.d std\outofmemory.d \ - std\intrinsic.d std\array.d std\switcherr.d \ - std\regexp.d std\random.d std\stream.d + std\asserterror.d std\dateparse.d std\outofmemory.d \ + std\intrinsic.d std\array.d std\switcherr.d std\syserror.d \ + std\regexp.d std\random.d std\stream.d std\process.d SRCSTDC= std\c\process.d std\c\stdlib.d std\c\time.d std\c\stdio.d @@ -113,7 +113,7 @@ SRCINT= \ internal\dmain2.d internal\cast.d internal\qsort.d internal\deh2.d \ internal\cmath2.d internal\obj.d internal\mars.h -SRCSTDWIN= std\windows\registry.d std\windows\syserror.d \ +SRCSTDWIN= std\windows\registry.d \ std\windows\iunknown.d SRCSTDCWIN= std\c\windows\windows.d std\c\windows\com.d @@ -230,8 +230,8 @@ switch.obj : internal\switch.d array.obj : std\array.d $(DMD) -c $(DFLAGS) std\array.d -assert.obj : std\assert.d - $(DMD) -c $(DFLAGS) std\assert.d +asserterror.obj : std\asserterror.d + $(DMD) -c $(DFLAGS) std\asserterror.d compiler.obj : std\compiler.d $(DMD) -c $(DFLAGS) std\compiler.d @@ -275,6 +275,9 @@ outofmemory.obj : std\outofmemory.d path.obj : std\path.d $(DMD) -c $(DFLAGS) std\path.d +process.obj : std\process.d + $(DMD) -c $(DFLAGS) std\process.d + random.obj : std\random.d $(DMD) -c $(DFLAGS) std\random.d @@ -290,6 +293,9 @@ string.obj : std\string.d switcherr.obj : std\switcherr.d $(DMD) -c $(DFLAGS) std\switcherr.d +syserror.obj : std\syserror.d + $(DMD) -c $(DFLAGS) std\syserror.d + system.obj : std\system.d $(DMD) -c $(DFLAGS) std\system.d @@ -316,9 +322,6 @@ iunknown.obj : std\windows\iunknown.d registry.obj : std\windows\registry.d $(DMD) -c $(DFLAGS) std\windows\registry.d -syserror.obj : std\windows\syserror.d - $(DMD) -c $(DFLAGS) std\windows\syserror.d - ### etc\c Czlib.obj : etc\c\zlib.d @@ -472,7 +475,7 @@ install: $(CP) $(SRCINT) \dmd\src\phobos\internal $(CP) $(SRCSTDWIN) \dmd\src\phobos\std\windows $(CP) $(SRCSTDCWIN) \dmd\src\phobos\std\c\windows - $(CP) $(SRCSTDCLINUX) \dmd\src\phobos\std\linux + $(CP) $(SRCSTDCLINUX) \dmd\src\phobos\std\c\linux $(CP) $(SRCETC) \dmd\src\phobos\etc\c $(CP) $(SRCZLIB) \dmd\src\phobos\etc\c\zlib $(CP) $(SRCGC) \dmd\src\phobos\internal\gc