]> git.jsancho.org Git - lugaru.git/commitdiff
Merged FMod changes in
authorHarley Laue <losinggeneration@gmail.com>
Thu, 13 May 2010 22:50:33 +0000 (17:50 -0500)
committerHarley Laue <losinggeneration@gmail.com>
Thu, 13 May 2010 22:50:33 +0000 (17:50 -0500)
26 files changed:
.hgignore
CMakeLists.txt
Dependencies/OpenGL/GL/mesa_wgl.h [new file with mode: 0644]
Dependencies/SDL12/lib/win32/mingw32/SDL.dll [new file with mode: 0755]
Dependencies/SDL12/lib/win32/mingw32/libSDL.dll.a [new file with mode: 0755]
Dependencies/SDL12/lib/win32/mingw32/libSDL.la [new file with mode: 0755]
Dependencies/SDL12/lib/win32/mingw32/libSDLmain.a [new file with mode: 0644]
Dependencies/SDL12/lib/win32/msvc/SDL.dll [new file with mode: 0755]
Dependencies/SDL12/lib/win32/msvc/SDL.lib [new file with mode: 0755]
Dependencies/SDL12/lib/win32/msvc/SDLmain.lib [new file with mode: 0755]
Source/CMakeLists.txt [deleted file]
Source/MacCompatibility.h
Source/MacInput.cpp [deleted file]
Source/MacInput.h [deleted file]
Source/MoreFilesX.c [deleted file]
Source/MoreFilesX.h [deleted file]
Source/OpenGL_Full_Screen.cpp [deleted file]
Source/OpenGL_Windows.cpp
Source/TGALoader.h
Source/Text.cpp
Source/Text.h
Source/WinInput.cpp
Source/gamegl.h
Source/openal_wrapper.h
Source/wincompat.h [deleted file]
makefile.old

index 0992e3e486cf16cd45bb143fd0acff37248658e9..795dbe10037bb179fafb569b50ed70fc7017e83f 100644 (file)
--- a/.hgignore
+++ b/.hgignore
@@ -8,3 +8,4 @@ build
 *~
 .*.swp
 lugaru-*
+cmake-build
index 9be2c9e9235cfa8a1ef983a1e91f06d1d207bd6c..360148bdc0309d71cca6d795752c0632858630f2 100644 (file)
@@ -2,6 +2,9 @@ project(lugaru)
 
 cmake_minimum_required(VERSION 2.6)
 
+set(SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}/Source")
+set(DEPDIR "${CMAKE_CURRENT_SOURCE_DIR}/Dependencies")
+
 if(NOT CMAKE_BUILD_TYPE)\r
   set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING\r
       "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel"\r
@@ -20,46 +23,398 @@ if(NOT LUGARU_INSTALL_PREFIX)
   endif(WIN32)
 endif(NOT LUGARU_INSTALL_PREFIX)
 
-set(CMAKE_INSTALL_PREFIX "${LUGARU_INSTALL_PREFIX}" CACHE INTERNAL "Prefix
-prepended to install directories" FORCE)
+set(CMAKE_INSTALL_PREFIX "${LUGARU_INSTALL_PREFIX}" CACHE INTERNAL "Prefix prepended to install directories" FORCE)
 
 if(WIN32)
        set(OPENGL_gl_LIBRARY "-lopengl32" CACHE STRING "OpenGL library for Win32" FORCE)
        set(OPENGL_glu_LIBRARY "-lglu32" CACHE STRING "GLU library for Win32" FORCE)
 endif(WIN32)
 
+
+
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-find_package(OpenAL REQUIRED)
-find_package(PNG REQUIRED)
-find_package(JPEG REQUIRED)
-find_package(ZLIB REQUIRED)
+
+set(LUGARU_SRCS
+       ${SRCDIR}/Frustum.cpp
+       ${SRCDIR}/GameDraw.cpp
+       ${SRCDIR}/GameInitDispose.cpp
+       ${SRCDIR}/GameTick.cpp
+       ${SRCDIR}/Globals.cpp
+       ${SRCDIR}/Lights.cpp
+       ${SRCDIR}/Models.cpp
+       ${SRCDIR}/Objects.cpp
+       ${SRCDIR}/pack.c
+       ${SRCDIR}/pack_private.c
+       ${SRCDIR}/Person.cpp
+       ${SRCDIR}/private.c
+       ${SRCDIR}/Quaternions.cpp
+       ${SRCDIR}/Random.c
+       ${SRCDIR}/Skeleton.cpp
+       ${SRCDIR}/Skybox.cpp
+       ${SRCDIR}/Sprites.cpp
+       ${SRCDIR}/Terrain.cpp
+       ${SRCDIR}/Text.cpp
+       ${SRCDIR}/TGALoader.cpp
+       ${SRCDIR}/unpack.c
+       ${SRCDIR}/unpack_private.c
+       ${SRCDIR}/Weapons.cpp
+       ${SRCDIR}/OpenGL_Windows.cpp
+       ${SRCDIR}/openal_wrapper.cpp
+       ${SRCDIR}/WinInput.cpp
+       ${SRCDIR}/MacCompatibility.cpp
+)
+
+set(LUGARU_H
+       ${SRCDIR}/Constants.h
+       ${SRCDIR}/Frustum.h
+       ${SRCDIR}/Game.h
+       ${SRCDIR}/Lights.h
+       ${SRCDIR}/LinkedList.h
+       ${SRCDIR}/MacCompatibility.h
+       ${SRCDIR}/Models.h
+       ${SRCDIR}/Objects.h
+       ${SRCDIR}/Person.h
+       ${SRCDIR}/PhysicsMath.h
+       ${SRCDIR}/Pointer.h
+       ${SRCDIR}/Quaternions.h
+       ${SRCDIR}/Random.h
+       ${SRCDIR}/Skeleton.h
+       ${SRCDIR}/Skybox.h
+       ${SRCDIR}/Sprites.h
+       ${SRCDIR}/TGALoader.h
+       ${SRCDIR}/Terrain.h
+       ${SRCDIR}/Text.h
+       ${SRCDIR}/Weapons.h
+       ${SRCDIR}/WinInput.h
+       ${SRCDIR}/alstubs.h
+       ${SRCDIR}/binio.h
+       ${SRCDIR}/fmod.h
+       ${SRCDIR}/fmod_errors.h
+       ${SRCDIR}/fmod_header.h
+       ${SRCDIR}/fmoddyn.h
+       ${SRCDIR}/gamegl.h
+       ${SRCDIR}/glstubs.h
+       ${SRCDIR}/md5.h
+       ${SRCDIR}/mmgr.h
+       ${SRCDIR}/nommgr.h
+       ${SRCDIR}/pack_private.h
+       ${SRCDIR}/private.h
+       ${SRCDIR}/unpack_private.h
+)
+
+if(WIN32)
+  if(CMAKE_CROSSCOMPILING)
+    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                                                 COMMAND i686-pc-mingw32-windres
+                                                         -I${SRCDIR}/res
+                                                         -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                                                         -i${SRCDIR}/res/Lugaru.rc
+                                             DEPENDS ${SRCDIR}/res/Lugaru.rc
+                                                 )
+  endif(CMAKE_CROSSCOMPILING)
+  if(NOT CMAKE_CROSSCOMPILING)
+    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                                                 COMMAND windres
+                                                         -I${SRCDIR}/res
+                                                         -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                                                         -i${SRCDIR}/res/Lugaru.rc
+                                             DEPENDS ${SRCDIR}/res/Lugaru.rc
+                                                 )
+  endif(NOT CMAKE_CROSSCOMPILING)
+
+  # !!! FIXME: get rid of this.
+  set(LUGARU_SRCS
+       ${LUGARU_SRCS}
+       ${SRCDIR}/WinDefs.cpp)
+
+  set(LUGARU_H
+       ${LUGARU_H}
+       ${SRCDIR}/WinDefs.h
+       ${SRCDIR}/res/resource.h)
+endif(WIN32)
+
+if (APPLE)
+    set(PLATFORM_LIBS "-framework Carbon -framework Cocoa -framework OpenGL -framework OpenAL")
+endif (APPLE)
+
+
+
+# Deal with dependencies...
+
 find_package(OpenGL REQUIRED)
-find_package(GLU REQUIRED)
-find_package(SDL REQUIRED)
-find_package(OggVorbis REQUIRED)
+# force this include dir no matter what, so we get sane headers.
+include_directories("${DEPDIR}/OpenGL")
+
+find_package(OpenAL REQUIRED)  # !!! FIXME: package a .dll for Windows?
+
+option (LUGARU_FORCE_INTERNAL_SDL "Force internal libSDL, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_SDL)
+    find_package(SDL)
+endif (NOT LUGARU_FORCE_INTERNAL_SDL)
+if (NOT SDL_FOUND)
+    message(STATUS "Using internal copy of SDL")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} SDL")
+    set(SDLDIR "${DEPDIR}/SDL12")
+    set(SDL_INCLUDE_DIR "${SDLDIR}/include")
+    set(SDL_LIBRARY "")
+    if (APPLE)
+        set(LUGARU_HAS_INTERNAL_SDL True)
+        set(SDL_LIBRARY
+            ${SDLDIR}/lib/macosx/libSDL-1.2.0.dylib
+            ${SDLDIR}/lib/macosx/libSDLmain-osx.a
+        )
+    endif (APPLE)
+
+    if (WINDOWS)
+        set(LUGARU_HAS_INTERNAL_SDL True)
+        if (MSVC)
+          set(SDL_LIBRARY
+              ${SDLDIR}/lib/win32/msvc/SDL.lib
+              ${SDLDIR}/lib/win32/msvc/SDLmain.lib
+          )
+        endif (MSVC)
+        if (MINGW)
+          set(SDL_LIBRARY
+              ${SDLDIR}/lib/win32/mingw/libSDL.dll.a
+              ${SDLDIR}/lib/win32/mingw/libSDLmain.a
+          )
+        endif (MINGW)
+    endif (WINDOWS)
+
+    if (NOT LUGARU_HAS_INTERNAL_SDL)
+        message(ERROR "We don't have a prebuilt SDL for this platform.")
+    endif (NOT LUGARU_HAS_INTERNAL_SDL)
+endif (NOT SDL_FOUND)
+
+option (LUGARU_FORCE_INTERNAL_PNG "Force internal libPNG, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_PNG)
+    find_package(PNG)
+endif (NOT LUGARU_FORCE_INTERNAL_PNG)
+if (NOT PNG_FOUND)
+    message(STATUS "Using internal copy of libpng")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} PNG")
+    set(PNGDIR "${DEPDIR}/libpng")
+    set(PNG_INCLUDE_DIR "${PNGDIR}")
+    set(PNG_LIBRARY "")
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${PNGDIR}/png.c
+        ${PNGDIR}/pngerror.c
+        ${PNGDIR}/pngget.c
+        ${PNGDIR}/pngmem.c
+        ${PNGDIR}/pngpread.c
+        ${PNGDIR}/pngread.c
+        ${PNGDIR}/pngrio.c
+        ${PNGDIR}/pngrtran.c
+        ${PNGDIR}/pngrutil.c
+        ${PNGDIR}/pngset.c
+        ${PNGDIR}/pngtrans.c
+        ${PNGDIR}/pngwio.c
+        ${PNGDIR}/pngwrite.c
+        ${PNGDIR}/pngwtran.c
+        ${PNGDIR}/pngwutil.c
+    )
+endif (NOT PNG_FOUND)
+
+option (LUGARU_FORCE_INTERNAL_JPEG "Force internal libJPEG, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_JPEG)
+    find_package(JPEG)
+endif (NOT LUGARU_FORCE_INTERNAL_JPEG)
+if (NOT JPEG_FOUND)
+    message(STATUS "Using internal copy of libjpeg")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} JPEG")
+    set(JPEGDIR "${DEPDIR}/libjpeg")
+    set(JPEG_INCLUDE_DIR "${JPEGDIR}")
+    set(JPEG_LIBRARY "")
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${JPEGDIR}/jdapistd.c
+        ${JPEGDIR}/jdmaster.c
+        ${JPEGDIR}/jdapimin.c
+        ${JPEGDIR}/jcapimin.c
+        ${JPEGDIR}/jdmerge.c
+        ${JPEGDIR}/jdatasrc.c
+        ${JPEGDIR}/jdatadst.c
+        ${JPEGDIR}/jdcoefct.c
+        ${JPEGDIR}/jdcolor.c
+        ${JPEGDIR}/jddctmgr.c
+        ${JPEGDIR}/jdhuff.c
+        ${JPEGDIR}/jdinput.c
+        ${JPEGDIR}/jdmainct.c
+        ${JPEGDIR}/jdmarker.c
+        ${JPEGDIR}/jdpostct.c
+        ${JPEGDIR}/jdsample.c
+        ${JPEGDIR}/jdtrans.c
+        ${JPEGDIR}/jerror.c
+        ${JPEGDIR}/jidctflt.c
+        ${JPEGDIR}/jidctfst.c
+        ${JPEGDIR}/jidctint.c
+        ${JPEGDIR}/jmemmgr.c
+        ${JPEGDIR}/jutils.c
+        ${JPEGDIR}/jmemnobs.c
+        ${JPEGDIR}/jquant1.c
+        ${JPEGDIR}/jquant2.c
+        ${JPEGDIR}/jcomapi.c
+        ${JPEGDIR}/jcmarker.c
+        ${JPEGDIR}/jcapistd.c
+        ${JPEGDIR}/jcparam.c
+        ${JPEGDIR}/jcinit.c
+        ${JPEGDIR}/jcdctmgr.c
+        ${JPEGDIR}/jccoefct.c
+        ${JPEGDIR}/jcmainct.c
+        ${JPEGDIR}/jfdctflt.c
+        ${JPEGDIR}/jfdctint.c
+        ${JPEGDIR}/jfdctfst.c
+        ${JPEGDIR}/jchuff.c
+        ${JPEGDIR}/jcsample.c
+        ${JPEGDIR}/jcmaster.c
+        ${JPEGDIR}/jccolor.c
+        ${JPEGDIR}/jcprepct.c
+        ${JPEGDIR}/jcarith.c
+        ${JPEGDIR}/jdarith.c
+        ${JPEGDIR}/jaricom.c
+    )
+endif (NOT JPEG_FOUND)
+
+option (LUGARU_FORCE_INTERNAL_ZLIB "Force internal zlib, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_ZLIB)
+    find_package(ZLIB)
+endif (NOT LUGARU_FORCE_INTERNAL_ZLIB)
+if (NOT ZLIB_FOUND)
+    message(STATUS "Using internal copy of zlib")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} ZLIB")
+    set(ZLIBDIR "${DEPDIR}/zlib")
+    set(ZLIB_INCLUDE_DIR "${ZLIBDIR}")
+    set(ZLIB_LIBRARIES "")
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${ZLIBDIR}/adler32.c
+        ${ZLIBDIR}/compress.c
+        ${ZLIBDIR}/crc32.c
+        ${ZLIBDIR}/deflate.c
+        ${ZLIBDIR}/infback.c
+        ${ZLIBDIR}/inffast.c
+        ${ZLIBDIR}/inflate.c
+        ${ZLIBDIR}/inftrees.c
+        ${ZLIBDIR}/trees.c
+        ${ZLIBDIR}/uncompr.c
+        ${ZLIBDIR}/zutil.c
+    )
+endif (NOT ZLIB_FOUND)
+
+option (LUGARU_FORCE_INTERNAL_GLU "Force internal libGLU, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_GLU)
+    find_package(GLU)
+endif (NOT LUGARU_FORCE_INTERNAL_GLU)
+if (NOT GLU_FOUND)
+    message(STATUS "Using internal copy of libGLU")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} GLU")
+    set(GLUDIR "${DEPDIR}/GLU")
+    set(GLU_INCLUDE_DIR "${GLUDIR}")
+    set(GLU_LIBRARY "")
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${GLUDIR}/dict.c
+        ${GLUDIR}/geom.c
+        ${GLUDIR}/memalloc.c
+        ${GLUDIR}/mesh.c
+        ${GLUDIR}/mipmap.c
+        ${GLUDIR}/normal.c
+        ${GLUDIR}/priorityq.c
+        ${GLUDIR}/render.c
+        ${GLUDIR}/sweep.c
+        ${GLUDIR}/tess.c
+        ${GLUDIR}/tessmono.c
+        ${GLUDIR}/util.c
+    )
+endif (NOT GLU_FOUND)
+
+option (LUGARU_FORCE_INTERNAL_VORBIS "Force internal Vorbis, even if there's a system version" False)
+if (NOT LUGARU_FORCE_INTERNAL_VORBIS)
+    find_package(OggVorbis)
+endif (NOT LUGARU_FORCE_INTERNAL_VORBIS)
+if (NOT OggVorbis_FOUND)
+    message(STATUS "Using internal copy of Ogg Vorbis")
+    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} OggVorbis")
+    set(OGGDIR "${DEPDIR}/libogg")
+    set(OGG_INCLUDE_DIR "${OGGDIR}/include")
+    set(OGG_LIBRARY "")
+    set(VORBISDIR "${DEPDIR}/libvorbis")
+    set(VORBISFILE_INCLUDE_DIR "${VORBISDIR}/include")
+    set(VORBISFILE_LIBRARY "")
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${OGGDIR}/src/bitwise.c
+        ${OGGDIR}/src/framing.c
+        ${VORBISDIR}/lib/analysis.c
+        ${VORBISDIR}/lib/bitrate.c
+        ${VORBISDIR}/lib/block.c
+        ${VORBISDIR}/lib/codebook.c
+        ${VORBISDIR}/lib/envelope.c
+        ${VORBISDIR}/lib/floor0.c
+        ${VORBISDIR}/lib/floor1.c
+        ${VORBISDIR}/lib/info.c
+        ${VORBISDIR}/lib/lpc.c
+        ${VORBISDIR}/lib/lsp.c
+        ${VORBISDIR}/lib/mapping0.c
+        ${VORBISDIR}/lib/mdct.c
+        ${VORBISDIR}/lib/psy.c
+        ${VORBISDIR}/lib/registry.c
+        ${VORBISDIR}/lib/res0.c
+        ${VORBISDIR}/lib/sharedbook.c
+        ${VORBISDIR}/lib/smallft.c
+        ${VORBISDIR}/lib/synthesis.c
+        ${VORBISDIR}/lib/vorbisfile.c
+        ${VORBISDIR}/lib/window.c
+    )
+endif (NOT OggVorbis_FOUND)
 
 include_directories(
-       ${OPENAL_INCLUDES}
-       ${JPEG_INCLUDE_DIR}
-       ${PNG_INCLUDE_DIR}
-       ${ZLIB_INCLUDE_DIR}
-       ${OPENGL_INCLUDE_DIR}
-       ${GLU_INCLUDE_DIR}
-       ${SDL_INCLUDE_DIR}
-       ${VORBISFILE_INCLUDE_DIR}
-       ${OGG_INCLUDE_DIR}
-       ${CMAKE_SOURCE_DIR}/Source)
+    ${OPENAL_INCLUDE_DIR}
+    ${JPEG_INCLUDE_DIR}
+    ${PNG_INCLUDE_DIR}
+    ${ZLIB_INCLUDE_DIR}
+    ${OPENGL_INCLUDE_DIR}
+    ${GLU_INCLUDE_DIR}
+    ${SDL_INCLUDE_DIR}
+    ${VORBISFILE_INCLUDE_DIR}
+    ${OGG_INCLUDE_DIR}
+    ${CMAKE_SOURCE_DIR}/Source
+)
 
-set(LUGARU_LIBS ${OPENAL_LIBRARY} ${PNG_LIBRARY} ${JPEG_LIBRARY} ${ZLIB_LIBRARIES} ${SDL_LIBRARY} ${GLU_LIBRARY} ${OPENGL_LIBRARY} ${VORBISFILE_LIBRARY} ${OGG_LIBRARY})
+set(LUGARU_LIBS ${OPENAL_LIBRARY} ${PNG_LIBRARY} ${JPEG_LIBRARY} ${ZLIB_LIBRARIES} ${SDL_LIBRARY} ${GLU_LIBRARY} ${OPENGL_LIBRARY} ${VORBISFILE_LIBRARY} ${OGG_LIBRARY} ${PLATFORM_LIBS})
 
-add_subdirectory(Source)
+
+if(WIN32)
+    add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H} lugaru_resource.obj)
+else(WIN32)
+    add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H})
+endif(WIN32)
+
+target_link_libraries(lugaru ${LUGARU_LIBS})
+
+if(WIN32)
+       add_definitions(-DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
+else(WIN32)
+       add_definitions(-DPLATFORM_LINUX=1 -DPLATFORM_UNIX=1 -DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
+endif(WIN32)
 
 # Install target
 if(WIN32)
        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/Source/lugaru.exe DESTINATION ${CMAKE_INSTALL_PREFIX})
+       if(MSVC)
+               install(FILES ${SDLDIR}/lib/win32/msvc/SDL.dll DESTINATION ${CMAKE_INSTALL_PREFIX})
+       endif(MSVC)
+       if(MINGW)
+               install(FILES ${SDLDIR}/lib/win32/mingw/SDL.dll DESTINATION ${CMAKE_INSTALL_PREFIX})
+       endif(MINGW)
 else(WIN32)
        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/Source/lugaru DESTINATION ${CMAKE_INSTALL_PREFIX})
 endif(WIN32)
 
 install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${CMAKE_INSTALL_PREFIX})
 
+if (LUGARU_MISSING_DEPS)
+    message(STATUS "Using our copy of these libs: ${LUGARU_MISSING_DEPS}")
+endif (LUGARU_MISSING_DEPS)
+
diff --git a/Dependencies/OpenGL/GL/mesa_wgl.h b/Dependencies/OpenGL/GL/mesa_wgl.h
new file mode 100644 (file)
index 0000000..ca2e1b8
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  3.1
+ *
+ * Copyright (C) 1999  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+/* prototypes for the Mesa WGL functions */
+/* relocated here so that I could make GLUT get them properly */
+
+#ifndef _mesa_wgl_h_
+#define _mesa_wgl_h_
+
+#if defined(__MINGW32__)
+#  define __W32API_USE_DLLIMPORT__
+#endif
+
+#include <GL/gl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifndef WGLAPI
+#define WGLAPI GLAPI
+#endif
+
+#if defined(__MINGW32__)
+#  ifndef WIN32_LEAN_AND_MEAN
+#    define WIN32_LEAN_AND_MEAN 1
+#  endif
+#  include <windows.h>
+#endif
+
+
+#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP)
+#ifndef _GNU_H_WINDOWS32_FUNCTIONS
+#      ifdef UNICODE
+#              define wglUseFontBitmaps  wglUseFontBitmapsW
+#              define wglUseFontOutlines  wglUseFontOutlinesW
+#      else
+#              define wglUseFontBitmaps  wglUseFontBitmapsA
+#              define wglUseFontOutlines  wglUseFontOutlinesA
+#      endif /* !UNICODE */
+#endif /* _GNU_H_WINDOWS32_FUNCTIONS */
+typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
+typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
+typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
+#endif
+
+
+#ifdef _MSC_VER
+#  pragma warning( disable : 4615 ) /* pragma warning : unknown user warning type*/
+#  pragma warning( push )
+#  pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */
+#endif
+
+
+WGLAPI int   GLAPIENTRY wglSetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *);
+WGLAPI int   GLAPIENTRY wglSwapBuffers(HDC hdc);
+WGLAPI int   GLAPIENTRY wglChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *);
+WGLAPI int   GLAPIENTRY wglDescribePixelFormat(HDC,int, unsigned int, LPPIXELFORMATDESCRIPTOR);
+WGLAPI int   GLAPIENTRY wglGetPixelFormat(HDC hdc);
+
+WGLAPI int   GLAPIENTRY wglCopyContext(HGLRC, HGLRC, unsigned int);
+WGLAPI HGLRC GLAPIENTRY wglCreateContext(HDC);
+WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC,int);
+WGLAPI int   GLAPIENTRY wglDeleteContext(HGLRC);
+WGLAPI int   GLAPIENTRY wglDescribeLayerPlane(HDC, int, int, unsigned int,LPLAYERPLANEDESCRIPTOR);
+WGLAPI HGLRC GLAPIENTRY wglGetCurrentContext(void);
+WGLAPI HDC   GLAPIENTRY wglGetCurrentDC(void);
+WGLAPI int   GLAPIENTRY wglGetLayerPaletteEntries(HDC, int, int, int,COLORREF *);
+WGLAPI PROC  GLAPIENTRY wglGetProcAddress(const char*);
+WGLAPI int   GLAPIENTRY wglMakeCurrent(HDC,HGLRC);
+WGLAPI int   GLAPIENTRY wglRealizeLayerPalette(HDC, int, int);
+WGLAPI int   GLAPIENTRY wglSetLayerPaletteEntries(HDC, int, int, int,const COLORREF *);
+WGLAPI int   GLAPIENTRY wglShareLists(HGLRC, HGLRC);
+WGLAPI int   GLAPIENTRY wglSwapLayerBuffers(HDC, unsigned int);
+WGLAPI int   GLAPIENTRY wglUseFontBitmapsA(HDC, unsigned long, unsigned long, unsigned long);
+WGLAPI int   GLAPIENTRY wglUseFontBitmapsW(HDC, unsigned long, unsigned long, unsigned long);
+WGLAPI int   GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
+WGLAPI int   GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
+
+#ifndef __MINGW32__
+WGLAPI int   GLAPIENTRY SwapBuffers(HDC);
+WGLAPI int   GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *);
+WGLAPI int   GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR);
+WGLAPI int   GLAPIENTRY GetPixelFormat(HDC);
+WGLAPI int   GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
+#endif
+
+
+#ifdef _MSC_VER
+#  pragma warning( pop )
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _mesa_wgl_h_ */
diff --git a/Dependencies/SDL12/lib/win32/mingw32/SDL.dll b/Dependencies/SDL12/lib/win32/mingw32/SDL.dll
new file mode 100755 (executable)
index 0000000..49f8aa0
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/mingw32/SDL.dll differ
diff --git a/Dependencies/SDL12/lib/win32/mingw32/libSDL.dll.a b/Dependencies/SDL12/lib/win32/mingw32/libSDL.dll.a
new file mode 100755 (executable)
index 0000000..64772b0
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/mingw32/libSDL.dll.a differ
diff --git a/Dependencies/SDL12/lib/win32/mingw32/libSDL.la b/Dependencies/SDL12/lib/win32/mingw32/libSDL.la
new file mode 100755 (executable)
index 0000000..4f0519f
--- /dev/null
@@ -0,0 +1,41 @@
+# libSDL.la - a libtool library file
+# Generated by ltmain.sh (GNU libtool) 2.2.6
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='../bin/SDL.dll'
+
+# Names of this library.
+library_names='libSDL.dll.a'
+
+# The name of the static archive.
+old_library='libSDL.a'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=' -luser32 -lgdi32 -lwinmm -ldxguid'
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libSDL.
+current=11
+age=11
+revision=3
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/usr/local/lib'
diff --git a/Dependencies/SDL12/lib/win32/mingw32/libSDLmain.a b/Dependencies/SDL12/lib/win32/mingw32/libSDLmain.a
new file mode 100644 (file)
index 0000000..068941a
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/mingw32/libSDLmain.a differ
diff --git a/Dependencies/SDL12/lib/win32/msvc/SDL.dll b/Dependencies/SDL12/lib/win32/msvc/SDL.dll
new file mode 100755 (executable)
index 0000000..628cdfc
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/msvc/SDL.dll differ
diff --git a/Dependencies/SDL12/lib/win32/msvc/SDL.lib b/Dependencies/SDL12/lib/win32/msvc/SDL.lib
new file mode 100755 (executable)
index 0000000..5b3f17c
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/msvc/SDL.lib differ
diff --git a/Dependencies/SDL12/lib/win32/msvc/SDLmain.lib b/Dependencies/SDL12/lib/win32/msvc/SDLmain.lib
new file mode 100755 (executable)
index 0000000..945b9ad
Binary files /dev/null and b/Dependencies/SDL12/lib/win32/msvc/SDLmain.lib differ
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
deleted file mode 100644 (file)
index b159c58..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-set(LUGARU_SRCS
-       Frustum.cpp
-       GameDraw.cpp
-       GameInitDispose.cpp
-       GameTick.cpp
-       Globals.cpp
-       Lights.cpp
-       Models.cpp
-       Objects.cpp
-       OpenGL_Windows.cpp
-       Person.cpp
-       Quaternions.cpp
-       Random.c
-       Skeleton.cpp
-       Skybox.cpp
-       Sprites.cpp
-       TGALoader.cpp
-       Terrain.cpp
-       Text.cpp
-       Weapons.cpp
-       WinInput.cpp
-       mmgr.cpp
-       nsp_network.c
-       openal_wrapper.cpp
-       pack.c
-       pack_private.c
-       private.c
-       unpack.c
-       unpack_private.c)
-
-set(LUGARU_SRCS
-       Frustum.cpp
-       GameDraw.cpp
-       GameInitDispose.cpp
-       GameTick.cpp
-       Globals.cpp
-       Lights.cpp
-       Models.cpp
-       Objects.cpp
-       pack.c
-       pack_private.c
-       Person.cpp
-       private.c
-       Quaternions.cpp
-       Random.c
-       Skeleton.cpp
-       Skybox.cpp
-       Sprites.cpp
-       Terrain.cpp
-       Text.cpp
-       TGALoader.cpp
-       unpack.c
-       unpack_private.c
-       Weapons.cpp
-       MacCompatibility.cpp
-       OpenGL_Windows.cpp
-       openal_wrapper.cpp
-       WinInput.cpp)
-
-set(LUGARU_H
-       Constants.h
-       Frustum.h
-       Game.h
-       Lights.h
-       LinkedList.h
-       MacCompatibility.h
-       Models.h
-       Objects.h
-       Person.h
-       PhysicsMath.h
-       Pointer.h
-       Quaternions.h
-       Random.h
-       Skeleton.h
-       Skybox.h
-       Sprites.h
-       TGALoader.h
-       Terrain.h
-       Text.h
-       Weapons.h
-       WinInput.h
-       alstubs.h
-       binio.h
-       fmod.h
-       fmod_errors.h
-       fmod_header.h
-       fmoddyn.h
-       gamegl.h
-       glstubs.h
-       md5.h
-       mmgr.h
-       nommgr.h
-       pack_private.h
-       private.h
-       unpack_private.h
-       wincompat.h)
-
-if(CMAKE_HOST_APPLE)
-       set(LUGARU_SRCS
-               ${LUGARU_SRCS}
-               MacCompatibility.cpp)
-       set(LUGARU_H
-               ${LUGARU_H}
-               "Carbon Include.h"
-               CarbonStdCLib.h)
-endif(CMAKE_HOST_APPLE)
-
-if(WIN32)
-  if(CMAKE_CROSSCOMPILING)\r
-    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj\r
-                                                 COMMAND i686-pc-mingw32-windres\r
-                                                         -I${CMAKE_CURRENT_SOURCE_DIR}/res\r
-                                                         -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj\r
-                                                         -i${CMAKE_CURRENT_SOURCE_DIR}/res/lugaru.rc\r
-                                             DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/lugaru.rc\r
-                                                 )\r
-  endif(CMAKE_CROSSCOMPILING)\r
-  if(NOT CMAKE_CROSSCOMPILING)\r
-    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj\r
-                                                 COMMAND windres\r
-                                                         -I${CMAKE_CURRENT_SOURCE_DIR}/res\r
-                                                         -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj\r
-                                                         -i${CMAKE_CURRENT_SOURCE_DIR}/res/lugaru.rc\r
-                                             DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/lugaru.rc\r
-                                                 )\r
-  endif(NOT CMAKE_CROSSCOMPILING)
-
-  set(LUGARU_SRCS
-       ${LUGARU_SRCS}
-       WinDefs.cpp)
-
-  set(LUGARU_H
-       ${LUGARU_H}
-       WinDefs.h
-       res/resource.h)
-endif(WIN32)
-
-if(WIN32)
-add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H} lugaru_resource.obj)
-else(WIN32)
-add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H})
-endif(WIN32)
-
-target_link_libraries(lugaru ${LUGARU_LIBS})
-
-if(WIN32)
-       add_definitions(-DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
-else(WIN32)
-       add_definitions(-DPLATFORM_LINUX=1 -DPLATFORM_UNIX=1 -DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
-endif(WIN32)
-
index 8c179dbce3558365319c650e9d6b2fb645ff857d..3a99c52a052925f9dfc90c7036950365f5aca3ee 100644 (file)
@@ -30,6 +30,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 // stuff to make Mac code compatable with Windows/Linux/etc
 
+#if defined(WIN32) && !defined(strcasecmp)
+#define strcasecmp(a,b) stricmp(a,b)
+#endif
+
 #ifdef _MSC_VER
 // disable warnings about double to float conversions
 #pragma warning(disable:4305)
diff --git a/Source/MacInput.cpp b/Source/MacInput.cpp
deleted file mode 100644 (file)
index f695273..0000000
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-/**> HEADER FILES <**/
-#include "MacInput.h"
-#include "String.h"
-
-extern bool keyboardfrozen;
-
-/********************> IsKeyDown() <*****/
-Boolean        IsKeyDown( unsigned char *keyMap, unsigned short theKey )
-{
-       if(keyboardfrozen)return 0;
-
-       static long     keyMapIndex;
-       static Boolean  isKeyDown;
-       static short    bitToCheck;
-       
-       // Calculate the key map index
-       keyMapIndex = keyMap[theKey/8];
-       
-       // Calculate the individual bit to check
-       bitToCheck = theKey%8;
-       
-       // Check the status of the key
-       isKeyDown = ( keyMapIndex >> bitToCheck ) & 0x01;
-       
-       // Return the status of the key
-       return isKeyDown;
-       
-}
-
-unsigned short         CharToKey(const char* which)
-{
-       if(!strcmp(which,"a")){
-               return MAC_A_KEY;
-       }
-       if(!strcmp(which,"b")){
-               return MAC_B_KEY;
-       }
-       if(!strcmp(which,"c")){
-               return MAC_C_KEY;
-       }
-       if(!strcmp(which,"d")){
-               return MAC_D_KEY;
-       }
-       if(!strcmp(which,"e")){
-               return MAC_E_KEY;
-       }
-       if(!strcmp(which,"f")){
-               return MAC_F_KEY;
-       }
-       if(!strcmp(which,"g")){
-               return MAC_G_KEY;
-       }
-       if(!strcmp(which,"h")){
-               return MAC_H_KEY;
-       }
-       if(!strcmp(which,"i")){
-               return MAC_I_KEY;
-       }
-       if(!strcmp(which,"j")){
-               return MAC_J_KEY;
-       }
-       if(!strcmp(which,"k")){
-               return MAC_K_KEY;
-       }
-       if(!strcmp(which,"l")){
-               return MAC_L_KEY;
-       }
-       if(!strcmp(which,"m")){
-               return MAC_M_KEY;
-       }
-       if(!strcmp(which,"n")){
-               return MAC_N_KEY;
-       }
-       if(!strcmp(which,"o")){
-               return MAC_O_KEY;
-       }
-       if(!strcmp(which,"p")){
-               return MAC_P_KEY;
-       }
-       if(!strcmp(which,"q")){
-               return MAC_Q_KEY;
-       }
-       if(!strcmp(which,"r")){
-               return MAC_R_KEY;
-       }
-       if(!strcmp(which,"s")){
-               return MAC_S_KEY;
-       }
-       if(!strcmp(which,"t")){
-               return MAC_T_KEY;
-       }
-       if(!strcmp(which,"u")){
-               return MAC_U_KEY;
-       }
-       if(!strcmp(which,"v")){
-               return MAC_V_KEY;
-       }
-       if(!strcmp(which,"w")){
-               return MAC_W_KEY;
-       }
-       if(!strcmp(which,"x")){
-               return MAC_X_KEY;
-       }
-       if(!strcmp(which,"y")){
-               return MAC_Y_KEY;
-       }
-       if(!strcmp(which,"z")){
-               return MAC_Z_KEY;
-       }
-       if(!strcmp(which,"0")){
-               return MAC_NUMPAD_0_KEY;
-       }
-       if(!strcmp(which,"1")){
-               return MAC_NUMPAD_1_KEY;
-       }
-       if(!strcmp(which,"2")){
-               return MAC_NUMPAD_2_KEY;
-       }
-       if(!strcmp(which,"3")){
-               return MAC_NUMPAD_3_KEY;
-       }
-       if(!strcmp(which,"4")){
-               return MAC_NUMPAD_4_KEY;
-       }
-       if(!strcmp(which,"5")){
-               return MAC_NUMPAD_5_KEY;
-       }
-       if(!strcmp(which,"6")){
-               return MAC_NUMPAD_6_KEY;
-       }
-       if(!strcmp(which,"7")){
-               return MAC_NUMPAD_7_KEY;
-       }
-       if(!strcmp(which,"8")){
-               return MAC_NUMPAD_8_KEY;
-       }
-       if(!strcmp(which,"9")){
-               return MAC_NUMPAD_9_KEY;
-       }
-       if(!strcmp(which,"enter")){
-               return MAC_ENTER_KEY;
-       }
-       if(!strcmp(which,"control")){
-               return MAC_CONTROL_KEY;
-       }
-       if(!strcmp(which,"return")){
-               return MAC_RETURN_KEY;
-       }
-       if(!strcmp(which,"space")){
-               return MAC_SPACE_KEY;
-       }
-       if(!strcmp(which,"shift")){
-               return MAC_SHIFT_KEY;
-       }
-       if(!strcmp(which,"uparrow")){
-               return MAC_ARROW_UP_KEY;
-       }
-       if(!strcmp(which,"downarrow")){
-               return MAC_ARROW_DOWN_KEY;
-       }
-       if(!strcmp(which,"leftarrow")){
-               return MAC_ARROW_LEFT_KEY;
-       }
-       if(!strcmp(which,"rightarrow")){
-               return MAC_ARROW_RIGHT_KEY;
-       }
-}
-
-const char*    KeyToChar(unsigned short which)
-{
-       static int i;
-       
-       if(which==MAC_A_KEY){
-               return "a";
-       }
-       if(which==MAC_B_KEY){
-               return "b";
-       }
-       if(which==MAC_C_KEY){
-               return "c";
-       }
-       if(which==MAC_D_KEY){
-               return "d";
-       }
-       if(which==MAC_E_KEY){
-               return "e";
-       }
-       if(which==MAC_F_KEY){
-               return "f";
-       }
-       if(which==MAC_G_KEY){
-               return "g";
-       }
-       if(which==MAC_H_KEY){
-               return "h";
-       }
-       if(which==MAC_I_KEY){
-               return "i";
-       }
-       if(which==MAC_J_KEY){
-               return "j";
-       }
-       if(which==MAC_K_KEY){
-               return "k";
-       }
-       if(which==MAC_L_KEY){
-               return "l";
-       }
-       if(which==MAC_M_KEY){
-               return "m";
-       }
-       if(which==MAC_N_KEY){
-               return "n";
-       }
-       if(which==MAC_O_KEY){
-               return "o";
-       }
-       if(which==MAC_P_KEY){
-               return "p";
-       }
-       if(which==MAC_Q_KEY){
-               return "q";
-       }
-       if(which==MAC_R_KEY){
-               return "r";
-       }
-       if(which==MAC_S_KEY){
-               return "s";
-       }
-       if(which==MAC_T_KEY){
-               return "t";
-       }
-       if(which==MAC_U_KEY){
-               return "u";
-       }
-       if(which==MAC_V_KEY){
-               return "v";
-       }
-       if(which==MAC_W_KEY){
-               return "w";
-       }
-       if(which==MAC_X_KEY){
-               return "x";
-       }
-       if(which==MAC_Y_KEY){
-               return "y";
-       }
-       if(which==MAC_Z_KEY){
-               return "z";
-       }
-       if(which==MAC_NUMPAD_1_KEY){
-               return "1";
-       }
-       if(which==MAC_NUMPAD_2_KEY){
-               return "2";
-       }
-       if(which==MAC_NUMPAD_3_KEY){
-               return "3";
-       }
-       if(which==MAC_NUMPAD_4_KEY){
-               return "4";
-       }
-       if(which==MAC_NUMPAD_5_KEY){
-               return "5";
-       }
-       if(which==MAC_NUMPAD_6_KEY){
-               return "6";
-       }
-       if(which==MAC_NUMPAD_7_KEY){
-               return "7";
-       }
-       if(which==MAC_NUMPAD_8_KEY){
-               return "8";
-       }
-       if(which==MAC_NUMPAD_9_KEY){
-               return "9";
-       }
-       if(which==MAC_ENTER_KEY){
-               return "enter";
-       }
-       if(which==MAC_NUMPAD_0_KEY){
-               return "0";
-       }
-       if(which==MAC_1_KEY){
-               return "1";
-       }
-       if(which==MAC_2_KEY){
-               return "2";
-       }
-       if(which==MAC_3_KEY){
-               return "3";
-       }
-       if(which==MAC_4_KEY){
-               return "4";
-       }
-       if(which==MAC_5_KEY){
-               return "5";
-       }
-       if(which==MAC_6_KEY){
-               return "6";
-       }
-       if(which==MAC_7_KEY){
-               return "7";
-       }
-       if(which==MAC_8_KEY){
-               return "8";
-       }
-       if(which==MAC_9_KEY){
-               return "9";
-       }
-       if(which==MAC_0_KEY){
-               return "0";
-       }
-       if(which==MAC_F1_KEY){
-               return "F1";
-       }
-       if(which==MAC_F2_KEY){
-               return "F2";
-       }
-       if(which==MAC_F3_KEY){
-               return "F3";
-       }
-       if(which==MAC_F4_KEY){
-               return "F4";
-       }
-       if(which==MAC_F5_KEY){
-               return "F5";
-       }
-       if(which==MAC_F6_KEY){
-               return "F6";
-       }
-       if(which==MAC_F7_KEY){
-               return "F7";
-       }
-       if(which==MAC_F8_KEY){
-               return "F8";
-       }
-       if(which==MAC_F9_KEY){
-               return "F9";
-       }
-       if(which==MAC_F10_KEY){
-               return "F10";
-       }
-       if(which==MAC_F11_KEY){
-               return "F11";
-       }
-       if(which==MAC_F12_KEY){
-               return "F12";
-       }
-       if(which==MAC_ESCAPE_KEY){
-               return "escape";
-       }
-       if(which==MAC_DELETE_KEY){
-               return "backspace";
-       }
-       if(which==MAC_TAB_KEY){
-               return "tab";
-       }
-       if(which==MAC_TILDE_KEY){
-               return "`";
-       }
-       if(which==MAC_CAPS_LOCK_KEY){
-               return "caps lock";
-       }
-       if(which==MAC_COMMAND_KEY){
-               return "command";
-       }
-       if(which==MAC_OPTION_KEY){
-               return "option";
-       }
-       if(which==MAC_DEL_KEY){
-               return "delete";
-       }
-       if(which==MAC_INSERT_KEY){
-               return "insert";
-       }
-       if(which==MAC_HOME_KEY){
-               return "home";
-       }
-       if(which==MAC_END_KEY){
-               return "end";
-       }
-       if(which==MAC_PAGE_UP_KEY){
-               return "page up";
-       }
-       if(which==MAC_PAGE_DOWN_KEY){
-               return "page down";
-       }
-       if(which==MAC_NUMPAD_CLEAR_KEY){
-               return "clear";
-       }
-       if(which==MAC_CONTROL_KEY){
-               return "control";
-       }
-       if(which==MAC_SPACE_KEY){
-               return "space";
-       }
-       if(which==MAC_RETURN_KEY){
-               return "return";
-       }
-       if(which==MAC_SHIFT_KEY){
-               return "shift";
-       }
-       if(which==MAC_ARROW_UP_KEY){
-               return "uparrow";
-       }
-       if(which==MAC_ARROW_DOWN_KEY){
-               return "downarrow";
-       }
-       if(which==MAC_ARROW_LEFT_KEY){
-               return "leftarrow";
-       }
-       if(which==MAC_ARROW_RIGHT_KEY){
-               return "rightarrow";
-       }
-       if(which==MAC_MINUS_KEY||which==MAC_NUMPAD_MINUS_KEY){
-               return "-";
-       }
-       if(which==MAC_PLUS_KEY||which==MAC_NUMPAD_EQUALS_KEY){
-               return "=";
-       }
-       if(which==MAC_NUMPAD_PLUS_KEY){
-               return "+";
-       }
-       if(which==MAC_NUMPAD_ASTERISK_KEY){
-               return "*";
-       }
-       if(which==MAC_SLASH_KEY||which==MAC_NUMPAD_SLASH_KEY){
-               return "/";
-       }
-       if(which==MAC_BACKSLASH_KEY){
-               return "\\";
-       }
-       if(which==MAC_LEFTBRACKET_KEY){
-               return "[";
-       }
-       if(which==MAC_RIGHTBRACKET_KEY){
-               return "]";
-       }
-       if(which==MAC_PERIOD_KEY||which==MAC_NUMPAD_PERIOD_KEY){
-               return ".";
-       }
-       if(which==MAC_COMMA_KEY){
-               return ",";
-       }
-       if(which==MAC_APOSTROPHE_KEY){
-               return "\"";
-       }
-       if(which==MAC_SEMICOLON_KEY){
-               return ";";
-       }
-       return "unknown";
-}
-
-char   KeyToSingleChar(unsigned short which)
-{
-       static int i;
-       
-       if(which==MAC_A_KEY){
-               return 'a';
-       }
-       if(which==MAC_B_KEY){
-               return 'b';
-       }
-       if(which==MAC_C_KEY){
-               return 'c';
-       }
-       if(which==MAC_D_KEY){
-               return 'd';
-       }
-       if(which==MAC_E_KEY){
-               return 'e';
-       }
-       if(which==MAC_F_KEY){
-               return 'f';
-       }
-       if(which==MAC_G_KEY){
-               return 'g';
-       }
-       if(which==MAC_H_KEY){
-               return 'h';
-       }
-       if(which==MAC_I_KEY){
-               return 'i';
-       }
-       if(which==MAC_J_KEY){
-               return 'j';
-       }
-       if(which==MAC_K_KEY){
-               return 'k';
-       }
-       if(which==MAC_L_KEY){
-               return 'l';
-       }
-       if(which==MAC_M_KEY){
-               return 'm';
-       }
-       if(which==MAC_N_KEY){
-               return 'n';
-       }
-       if(which==MAC_O_KEY){
-               return 'o';
-       }
-       if(which==MAC_P_KEY){
-               return 'p';
-       }
-       if(which==MAC_Q_KEY){
-               return 'q';
-       }
-       if(which==MAC_R_KEY){
-               return 'r';
-       }
-       if(which==MAC_S_KEY){
-               return 's';
-       }
-       if(which==MAC_T_KEY){
-               return 't';
-       }
-       if(which==MAC_U_KEY){
-               return 'u';
-       }
-       if(which==MAC_V_KEY){
-               return 'v';
-       }
-       if(which==MAC_W_KEY){
-               return 'w';
-       }
-       if(which==MAC_X_KEY){
-               return 'x';
-       }
-       if(which==MAC_Y_KEY){
-               return 'y';
-       }
-       if(which==MAC_Z_KEY){
-               return 'z';
-       }
-       if(which==MAC_NUMPAD_1_KEY){
-               return '1';
-       }
-       if(which==MAC_NUMPAD_2_KEY){
-               return '2';
-       }
-       if(which==MAC_NUMPAD_3_KEY){
-               return '3';
-       }
-       if(which==MAC_NUMPAD_4_KEY){
-               return '4';
-       }
-       if(which==MAC_NUMPAD_5_KEY){
-               return '5';
-       }
-       if(which==MAC_NUMPAD_6_KEY){
-               return '6';
-       }
-       if(which==MAC_NUMPAD_7_KEY){
-               return '7';
-       }
-       if(which==MAC_NUMPAD_8_KEY){
-               return '8';
-       }
-       if(which==MAC_NUMPAD_9_KEY){
-               return '9';
-       }
-       if(which==MAC_NUMPAD_0_KEY){
-               return '0';
-       }
-       if(which==MAC_1_KEY){
-               return '1';
-       }
-       if(which==MAC_2_KEY){
-               return '2';
-       }
-       if(which==MAC_3_KEY){
-               return '3';
-       }
-       if(which==MAC_4_KEY){
-               return '4';
-       }
-       if(which==MAC_5_KEY){
-               return '5';
-       }
-       if(which==MAC_6_KEY){
-               return '6';
-       }
-       if(which==MAC_7_KEY){
-               return '7';
-       }
-       if(which==MAC_8_KEY){
-               return '8';
-       }
-       if(which==MAC_9_KEY){
-               return '9';
-       }
-       if(which==MAC_0_KEY){
-               return '0';
-       }
-       if(which==MAC_SPACE_KEY){
-               return ' ';
-       }
-       if(which==MAC_MINUS_KEY||which==MAC_NUMPAD_MINUS_KEY){
-               return '-';
-       }
-       if(which==MAC_PLUS_KEY||which==MAC_NUMPAD_EQUALS_KEY){
-               return '=';
-       }
-       if(which==MAC_NUMPAD_PLUS_KEY){
-               return '+';
-       }
-       if(which==MAC_NUMPAD_ASTERISK_KEY){
-               return '*';
-       }
-       if(which==MAC_SLASH_KEY||which==MAC_NUMPAD_SLASH_KEY){
-               return '/';
-       }
-       if(which==MAC_BACKSLASH_KEY){
-               return '\\';
-       }
-       if(which==MAC_LEFTBRACKET_KEY){
-               return '[';
-       }
-       if(which==MAC_RIGHTBRACKET_KEY){
-               return ']';
-       }
-       if(which==MAC_PERIOD_KEY||which==MAC_NUMPAD_PERIOD_KEY){
-               return '.';
-       }
-       if(which==MAC_COMMA_KEY){
-               return ',';
-       }
-       if(which==MAC_APOSTROPHE_KEY){
-               return '\'';
-       }
-       if(which==MAC_SEMICOLON_KEY){
-               return ';';
-       }
-       return '\0';
-}
-
-char   Shift(char which)
-{
-       static int i;
-       
-       if(which=='a'){
-               return 'A';
-       }
-       if(which=='b'){
-               return 'B';
-       }
-       if(which=='c'){
-               return 'C';
-       }
-       if(which=='d'){
-               return 'D';
-       }
-       if(which=='e'){
-               return 'E';
-       }
-       if(which=='f'){
-               return 'F';
-       }
-       if(which=='g'){
-               return 'G';
-       }
-       if(which=='h'){
-               return 'H';
-       }
-       if(which=='e'){
-               return 'E';
-       }
-       if(which=='f'){
-               return 'F';
-       }
-       if(which=='g'){
-               return 'G';
-       }
-       if(which=='h'){
-               return 'H';
-       }
-       if(which=='i'){
-               return 'I';
-       }
-       if(which=='j'){
-               return 'J';
-       }
-       if(which=='k'){
-               return 'K';
-       }
-       if(which=='l'){
-               return 'L';
-       }
-       if(which=='m'){
-               return 'M';
-       }
-       if(which=='n'){
-               return 'N';
-       }
-       if(which=='o'){
-               return 'O';
-       }
-       if(which=='p'){
-               return 'P';
-       }
-       if(which=='q'){
-               return 'Q';
-       }
-       if(which=='r'){
-               return 'R';
-       }
-       if(which=='s'){
-               return 'S';
-       }
-       if(which=='t'){
-               return 'T';
-       }
-       if(which=='u'){
-               return 'U';
-       }
-       if(which=='v'){
-               return 'V';
-       }
-       if(which=='w'){
-               return 'W';
-       }
-       if(which=='x'){
-               return 'X';
-       }
-       if(which=='y'){
-               return 'Y';
-       }
-       if(which=='z'){
-               return 'Z';
-       }
-       if(which=='1'){
-               return '!';
-       }
-       if(which=='2'){
-               return '@';
-       }
-       if(which=='3'){
-               return '#';
-       }
-       if(which=='4'){
-               return '$';
-       }
-       if(which=='5'){
-               return '%';
-       }
-       if(which=='6'){
-               return '^';
-       }
-       if(which=='7'){
-               return '&';
-       }
-       if(which=='8'){
-               return '*';
-       }
-       if(which=='9'){
-               return '(';
-       }
-       if(which=='0'){
-               return ')';
-       }
-       if(which=='-'){
-               return '_';
-       }
-       if(which=='='){
-               return '+';
-       }
-       if(which=='['){
-               return '{';
-       }
-       if(which==']'){
-               return '}';
-       }
-       if(which=='\\'){
-               return '|';
-       }
-       if(which=='.'){
-               return '>';
-       }
-       if(which==','){
-               return '<';
-       }
-       if(which=='/'){
-               return '?';
-       }
-       if(which==';'){
-               return ':';
-       }
-       if(which=='\''){
-               return '\"';
-       }
-       return which;
-}
-
-bool   Compare(const char *thestring, const char *tocompare, int start, int end)
-{
-       static int i;
-       for(i=start;i<=end;i++){
-               if(thestring[i]!=tocompare[i-start]&&thestring[i]!=tocompare[i-start]+'A'-'a')return 0;
-       }
-       return 1;
-}
diff --git a/Source/MacInput.h b/Source/MacInput.h
deleted file mode 100644 (file)
index 60e65f9..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-#ifndef _MACINPUT_H_
-#define _MACINPUT_H_
-
-/**> HEADER FILES <**/
-#include <stdlib.h>
-#include <stdio.h>
-#include <CursorDevices.h> //Mouse
-
-/**> CONSTANT DECLARATIONS <**/
-// Mac Keyboard Codes
-#define        MAC_1_KEY                               0x12
-#define        MAC_2_KEY                               0x13
-#define        MAC_3_KEY                               0x14
-#define        MAC_4_KEY                               0x15
-#define        MAC_5_KEY                               0x17
-#define        MAC_6_KEY                               0x16
-#define        MAC_7_KEY                               0x1A
-#define        MAC_8_KEY                               0x1C
-#define        MAC_9_KEY                               0x19
-#define        MAC_0_KEY                               0x1D
-#define        MAC_NUMPAD_1_KEY                0x53
-#define        MAC_NUMPAD_2_KEY                0x54
-#define        MAC_NUMPAD_3_KEY                0x55
-#define        MAC_NUMPAD_4_KEY                0x56
-#define        MAC_NUMPAD_5_KEY                0x57
-#define        MAC_NUMPAD_6_KEY                0x58
-#define        MAC_NUMPAD_7_KEY                0x59
-#define        MAC_NUMPAD_8_KEY                0x5B
-#define        MAC_NUMPAD_9_KEY                0x5C
-#define        MAC_NUMPAD_0_KEY                0x52
-#define        MAC_A_KEY                               0x00
-#define        MAC_B_KEY                               0x0B
-#define        MAC_C_KEY                               0x08
-#define        MAC_D_KEY                               0x02
-#define        MAC_E_KEY                               0x0E
-#define        MAC_F_KEY                               0x03
-#define        MAC_G_KEY                               0x05
-#define        MAC_H_KEY                               0x04
-#define        MAC_I_KEY                               0x22
-#define        MAC_J_KEY                               0x26
-#define        MAC_K_KEY                               0x28
-#define        MAC_L_KEY                               0x25
-#define        MAC_M_KEY                               0x2E
-#define        MAC_N_KEY                               0x2D
-#define        MAC_O_KEY                               0x1F
-#define        MAC_P_KEY                               0x23
-#define        MAC_Q_KEY                               0x0C
-#define        MAC_R_KEY                               0x0F
-#define        MAC_S_KEY                               0x01
-#define        MAC_T_KEY                               0x11
-#define        MAC_U_KEY                               0x20
-#define        MAC_V_KEY                               0x09
-#define        MAC_W_KEY                               0x0D
-#define        MAC_X_KEY                               0x07
-#define        MAC_Y_KEY                               0x10
-#define        MAC_Z_KEY                               0x06
-#define        MAC_F1_KEY                              0x7A
-#define        MAC_F2_KEY                              0x78
-#define        MAC_F3_KEY                              0x63
-#define        MAC_F4_KEY                              0x76
-#define        MAC_F5_KEY                              0x60
-#define        MAC_F6_KEY                              0x61
-#define        MAC_F7_KEY                              0x62
-#define        MAC_F8_KEY                              0x64
-#define        MAC_F9_KEY                              0x65
-#define        MAC_F10_KEY                             0x6D
-#define        MAC_F11_KEY                             0x67
-#define        MAC_F12_KEY                             0x6F
-#define        MAC_RETURN_KEY                  0x24
-#define        MAC_ENTER_KEY                   0x4C
-#define        MAC_TAB_KEY                             0x30
-#define        MAC_SPACE_KEY                   0x31
-#define        MAC_DELETE_KEY                  0x33
-#define        MAC_ESCAPE_KEY                  0x35
-#define        MAC_COMMAND_KEY                 0x37
-#define        MAC_SHIFT_KEY                   0x38
-#define        MAC_CAPS_LOCK_KEY               0x39
-#define        MAC_OPTION_KEY                  0x3A
-#define        MAC_CONTROL_KEY                 0x3B
-#define        MAC_PAGE_UP_KEY                 0x74
-#define        MAC_PAGE_DOWN_KEY               0x79
-#define        MAC_INSERT_KEY                  0x72
-#define        MAC_DEL_KEY                             0x75
-#define        MAC_HOME_KEY                    0x73
-#define        MAC_END_KEY                             0x77
-#define        MAC_LEFT_BRACKET_KEY    0x21
-#define        MAC_RIGHT_BRACKET_KEY   0x1E
-#define        MAC_ARROW_UP_KEY                0x7E
-#define        MAC_ARROW_DOWN_KEY              0x7D
-#define        MAC_ARROW_LEFT_KEY              0x7B
-#define        MAC_ARROW_RIGHT_KEY             0x7C
-#define        MAC_TILDE_KEY                   0x32
-#define MAC_MINUS_KEY                  0x1B
-#define MAC_PLUS_KEY                   0x18
-#define MAC_SLASH_KEY                  0x2C
-#define MAC_PERIOD_KEY                 0x2F
-#define MAC_COMMA_KEY                  0x2B
-#define MAC_BACKSLASH_KEY              0x2A
-#define MAC_LEFTBRACKET_KEY            0x21
-#define MAC_RIGHTBRACKET_KEY   0x1E
-#define MAC_NUMPAD_CLEAR_KEY   0x47#define MAC_NUMPAD_MINUS_KEY        0x4E
-#define MAC_NUMPAD_EQUALS_KEY  0x51
-#define MAC_NUMPAD_PLUS_KEY            0x45
-#define MAC_NUMPAD_SLASH_KEY   0x4B
-#define MAC_NUMPAD_ASTERISK_KEY        0x43
-#define MAC_NUMPAD_ENTER_KEY   0x4C
-#define MAC_NUMPAD_PERIOD_KEY  0x41
-#define MAC_SEMICOLON_KEY              0x29
-#define MAC_APOSTROPHE_KEY             0x27
-
-/**> FUNCTION PROTOTYPES <**/
-Boolean        IsKeyDown( unsigned char *keyMap, unsigned short theKey );
-void   InitMouse();
-void   MoveMouse(int xcoord, int ycoord, Point *mouseloc);
-void   RefreshMouse(Point *mouseloc);
-void   DisposeMouse();
-unsigned short         CharToKey(const char* which);
-const char*    KeyToChar(unsigned short which);
-char   KeyToSingleChar(unsigned short which);
-char   Shift(char which);
-bool   Compare(const char *thestring, const char *tocompare, int start, int end);
-
-#endif
diff --git a/Source/MoreFilesX.c b/Source/MoreFilesX.c
deleted file mode 100644 (file)
index 43d6910..0000000
+++ /dev/null
@@ -1,2791 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-/*
-       File:           MoreFilesX.c
-
-       Contains:       A collection of useful high-level File Manager routines
-                               which use the HFS Plus APIs wherever possible.
-
-       Version:        MoreFilesX 1.0.1
-
-       Copyright:      Â© 1992-2002 by Apple Computer, Inc., all rights reserved.
-
-       Disclaimer:     IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc.
-                               ("Apple") in consideration of your agreement to the following terms, and your
-                               use, installation, modification or redistribution of this Apple software
-                               constitutes acceptance of these terms.  If you do not agree with these terms,
-                               please do not use, install, modify or redistribute this Apple software.
-
-                               In consideration of your agreement to abide by the following terms, and subject
-                               to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
-                               copyrights in this original Apple software (the "Apple Software"), to use,
-                               reproduce, modify and redistribute the Apple Software, with or without
-                               modifications, in source and/or binary forms; provided that if you redistribute
-                               the Apple Software in its entirety and without modifications, you must retain
-                               this notice and the following text and disclaimers in all such redistributions of
-                               the Apple Software.  Neither the name, trademarks, service marks or logos of
-                               Apple Computer, Inc. may be used to endorse or promote products derived from the
-                               Apple Software without specific prior written permission from Apple.  Except as
-                               expressly stated in this notice, no other rights or licenses, express or implied,
-                               are granted by Apple herein, including but not limited to any patent rights that
-                               may be infringed by your derivative works or by other works in which the Apple
-                               Software may be incorporated.
-
-                               The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-                               WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-                               WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-                               PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
-                               COMBINATION WITH YOUR PRODUCTS.
-
-                               IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-                               CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-                               GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-                               ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
-                               OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
-                               (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
-                               ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-       File Ownership:
-
-               DRI:                            Apple Macintosh Developer Technical Support
-
-               Other Contact:          For bug reports, consult the following page on
-                                                       the World Wide Web:
-                                                               http://developer.apple.com/bugreporter/
-
-               Technology:                     DTS Sample Code
-
-       Writers:
-
-               (JL)    Jim Luther
-
-       Change History (most recent first):
-
-                <4>     8/22/02        JL              [3016251]  Changed FSMoveRenameObjectUnicode to not use
-                                                                       the Temporary folder because it isn't available on
-                                                                       NFS volumes.
-                <3>     4/19/02        JL              [2853905]  Fixed #if test around header includes.
-                <2>     4/19/02        JL              [2850624]  Fixed C++ compile errors and Project Builder
-                                                                       warnings.
-                <2>     4/19/02        JL              [2853901]  Updated standard disclaimer.
-                <1>     1/25/02        JL              MoreFilesX 1.0
-*/
-
-#if defined(__MACH__)
-       #include <Carbon/Carbon.h>
-       #include <string.h>
-#else
-       #include <Carbon.h>
-       #include <string.h>
-#endif
-
-#include "MoreFilesX.h"
-
-/* Set BuildingMoreFilesXForMacOS9 to 1 if building for Mac OS 9 */
-#ifndef BuildingMoreFilesXForMacOS9
-       #define BuildingMoreFilesXForMacOS9 0
-#endif
-
-/*****************************************************************************/
-
-#pragma mark ----- Local type definitions -----
-
-struct FSIterateContainerGlobals
-{
-       IterateContainerFilterProcPtr   iterateFilter;  /* pointer to IterateFilterProc */
-       FSCatalogInfoBitmap                             whichInfo;              /* fields of the CatalogInfo to get */
-       FSCatalogInfo                                   catalogInfo;    /* FSCatalogInfo */
-       FSRef                                                   ref;                    /* FSRef */
-       FSSpec                                                  spec;                   /* FSSpec */
-       FSSpec                                                  *specPtr;               /* pointer to spec field, or NULL */
-       HFSUniStr255                                    name;                   /* HFSUniStr255 */
-       HFSUniStr255                                    *namePtr;               /* pointer to name field, or NULL */
-       void                                                    *yourDataPtr;   /* a pointer to caller supplied data the filter may need to access */
-       ItemCount                                               maxLevels;              /* maximum levels to iterate through */
-       ItemCount                                               currentLevel;   /* the current level FSIterateContainerLevel is on */
-       Boolean                                                 quitFlag;               /* set to true if filter wants to kill interation */
-       Boolean                                                 containerChanged; /* temporary - set to true if the current container changed during iteration */
-       OSErr                                                   result;                 /* result */
-       ItemCount                                               actualObjects;  /* number of objects returned */
-};
-typedef struct FSIterateContainerGlobals FSIterateContainerGlobals;
-
-struct FSDeleteContainerGlobals
-{
-       OSErr                                                   result;                 /* result */
-       ItemCount                                               actualObjects;  /* number of objects returned */
-       FSCatalogInfo                                   catalogInfo;    /* FSCatalogInfo */
-};
-typedef struct FSDeleteContainerGlobals FSDeleteContainerGlobals;
-
-/*****************************************************************************/
-
-#pragma mark ----- Local prototypes -----
-
-static
-void
-FSDeleteContainerLevel(
-       const FSRef *container,
-       FSDeleteContainerGlobals *theGlobals);
-
-static
-void
-FSIterateContainerLevel(
-       FSIterateContainerGlobals *theGlobals);
-
-static
-OSErr
-GenerateUniqueHFSUniStr(
-       long *startSeed,
-       const FSRef *dir1,
-       const FSRef *dir2,
-       HFSUniStr255 *uniqueName);
-
-/*****************************************************************************/
-
-#pragma mark ----- File Access Routines -----
-
-/*****************************************************************************/
-
-OSErr
-FSCopyFork(
-       SInt16 srcRefNum,
-       SInt16 dstRefNum,
-       void *copyBufferPtr,
-       ByteCount copyBufferSize)
-{
-       OSErr           srcResult;
-       OSErr           dstResult;
-       OSErr           result;
-       SInt64          forkSize;
-       ByteCount       readActualCount;
-       
-       /* check input parameters */
-       require_action((NULL != copyBufferPtr) && (0 != copyBufferSize), BadParameter, result = paramErr);
-       
-       /* get source fork size */
-       result = FSGetForkSize(srcRefNum, &forkSize);
-       require_noerr(result, SourceFSGetForkSizeFailed);
-       
-       /* allocate disk space for destination fork */
-       result = FSSetForkSize(dstRefNum, fsFromStart, forkSize);
-       require_noerr(result, DestinationFSSetForkSizeFailed);
-       
-       /* reset source fork's position to 0 */
-       result = FSSetForkPosition(srcRefNum, fsFromStart, 0);
-       require_noerr(result, SourceFSSetForkPositionFailed);
-       
-       /* reset destination fork's position to 0 */
-       result = FSSetForkPosition(dstRefNum, fsFromStart, 0);
-       require_noerr(result, DestinationFSSetForkPositionFailed);
-
-       /* If copyBufferSize is greater than 4K bytes, make it a multiple of 4k bytes */
-       /* This will make writes on local volumes faster */
-       if ( (copyBufferSize >= 0x00001000) && ((copyBufferSize & 0x00000fff) != 0) )
-       {
-               copyBufferSize &= ~(0x00001000 - 1);
-       }
-       
-       /* copy source to destination */
-       srcResult = dstResult = noErr;
-       while ( (noErr == srcResult) && (noErr == dstResult) )
-       {
-               srcResult = FSReadFork(srcRefNum, fsAtMark + noCacheMask, 0, copyBufferSize, copyBufferPtr, &readActualCount);
-               dstResult = FSWriteFork(dstRefNum, fsAtMark + noCacheMask, 0, readActualCount, copyBufferPtr, NULL);
-       }
-       
-       /* make sure there were no errors at the destination */
-       require_noerr_action(dstResult, DestinationFSWriteForkFailed, result = dstResult);
-       
-       /* make sure the error at the source was eofErr */
-       require_action(eofErr == srcResult, SourceResultNotEofErr, result = srcResult);
-       
-       /* everything went as expected */
-       result = noErr;
-
-SourceResultNotEofErr:
-DestinationFSWriteForkFailed:
-DestinationFSSetForkPositionFailed:
-SourceFSSetForkPositionFailed:
-DestinationFSSetForkSizeFailed:
-SourceFSGetForkSizeFailed:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- Volume Access Routines -----
-
-/*****************************************************************************/ 
-
-OSErr
-FSGetVolParms(
-       FSVolumeRefNum volRefNum,
-       UInt32 bufferSize,
-       GetVolParmsInfoBuffer *volParmsInfo,
-       UInt32 *actualInfoSize)
-{
-       OSErr                   result;
-       HParamBlockRec  pb;
-       
-       /* check parameters */
-       require_action((NULL != volParmsInfo) && (NULL != actualInfoSize),
-               BadParameter, result = paramErr);
-       
-       pb.ioParam.ioNamePtr = NULL;
-       pb.ioParam.ioVRefNum = volRefNum;
-       pb.ioParam.ioBuffer = (Ptr)volParmsInfo;
-       pb.ioParam.ioReqCount = (SInt32)bufferSize;
-       result = PBHGetVolParmsSync(&pb);
-       require_noerr(result, PBHGetVolParmsSync);
-       
-       /* return number of bytes the file system returned in volParmsInfo buffer */
-       *actualInfoSize = (UInt32)pb.ioParam.ioActCount;
-       
-PBHGetVolParmsSync:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetVRefNum(
-       const FSRef *ref,
-       FSVolumeRefNum *vRefNum)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       
-       /* check parameters */
-       require_action(NULL != vRefNum, BadParameter, result = paramErr);
-       
-       /* get the volume refNum from the FSRef */
-       result = FSGetCatalogInfo(ref, kFSCatInfoVolume, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* return volume refNum from catalogInfo */
-       *vRefNum = catalogInfo.volume;
-       
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetVInfo(
-       FSVolumeRefNum volume,
-       HFSUniStr255 *volumeName,       /* can be NULL */
-       UInt64 *freeBytes,                      /* can be NULL */
-       UInt64 *totalBytes)                     /* can be NULL */
-{
-       OSErr                           result;
-       FSVolumeInfo            info;
-       
-       /* ask for the volume's sizes only if needed */
-       result = FSGetVolumeInfo(volume, 0, NULL,
-               (((NULL != freeBytes) || (NULL != totalBytes)) ? kFSVolInfoSizes : kFSVolInfoNone),
-               &info, volumeName, NULL);
-       require_noerr(result, FSGetVolumeInfo);
-       
-       if ( NULL != freeBytes )
-       {
-               *freeBytes = info.freeBytes;
-       }
-       if ( NULL != totalBytes )
-       {
-               *totalBytes = info.totalBytes;
-       }
-       
-FSGetVolumeInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetVolFileSystemID(
-       FSVolumeRefNum volume,
-       UInt16 *fileSystemID,   /* can be NULL */
-       UInt16 *signature)              /* can be NULL */
-{
-       OSErr                   result;
-       FSVolumeInfo    info;
-       
-       result = FSGetVolumeInfo(volume, 0, NULL, kFSVolInfoFSInfo, &info, NULL, NULL);
-       require_noerr(result, FSGetVolumeInfo);
-       
-       if ( NULL != fileSystemID )
-       {
-               *fileSystemID = info.filesystemID;
-       }
-       if ( NULL != signature )
-       {
-               *signature = info.signature;
-       }
-       
-FSGetVolumeInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetMountedVolumes(
-       FSRef ***volumeRefsHandle,      /* pointer to handle of FSRefs */
-       ItemCount *numVolumes)
-{
-       OSErr           result;
-       OSErr           memResult;
-       ItemCount       volumeIndex;
-       FSRef           ref;
-       
-       /* check parameters */
-       require_action((NULL != volumeRefsHandle) && (NULL != numVolumes),
-               BadParameter, result = paramErr);
-       
-       /* No volumes yet */
-       *numVolumes = 0;
-       
-       /* Allocate a handle for the results */
-       *volumeRefsHandle = (FSRef **)NewHandle(0);
-       require_action(NULL != *volumeRefsHandle, NewHandle, result = memFullErr);
-       
-       /* Call FSGetVolumeInfo in loop to get all volumes starting with the first */
-       volumeIndex = 1;
-       do
-       {
-               result = FSGetVolumeInfo(0, volumeIndex, NULL, kFSVolInfoNone, NULL, NULL, &ref);
-               if ( noErr == result )
-               {
-                       /* concatenate the FSRef to the end of the handle */
-                       PtrAndHand(&ref, (Handle)*volumeRefsHandle, sizeof(FSRef));
-                       memResult = MemError();
-                       require_noerr_action(memResult, MemoryAllocationFailed, result = memResult);
-                       
-                       ++(*numVolumes);        /* increment the volume count */
-                       ++volumeIndex;          /* and the volumeIndex to get the next volume*/
-               }
-       } while ( noErr == result );
-       
-       /* nsvErr is OK -- it just means there are no more volumes */
-       require(nsvErr == result, FSGetVolumeInfo);
-               
-       return ( noErr );
-       
-       /**********************/
-       
-MemoryAllocationFailed:
-FSGetVolumeInfo:
-
-       /* dispose of handle if already allocated and clear the outputs */
-       if ( NULL != *volumeRefsHandle )
-       {
-               DisposeHandle((Handle)*volumeRefsHandle);
-               *volumeRefsHandle = NULL;
-       }
-       *numVolumes = 0;
-       
-NewHandle:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- FSRef/FSpec/Path/Name Conversion Routines -----
-
-/*****************************************************************************/
-
-OSErr
-FSRefMakeFSSpec(
-       const FSRef *ref,
-       FSSpec *spec)
-{
-       OSErr   result;
-       
-       /* check parameters */
-       require_action(NULL != spec, BadParameter, result = paramErr);
-       
-       result = FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, NULL, spec, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSMakeFSRef(
-       FSVolumeRefNum volRefNum,
-       SInt32 dirID,
-       ConstStr255Param name,
-       FSRef *ref)
-{
-       OSErr           result;
-       FSRefParam      pb;
-       
-       /* check parameters */
-       require_action(NULL != ref, BadParameter, result = paramErr);
-       
-       pb.ioVRefNum = volRefNum;
-       pb.ioDirID = dirID;
-       pb.ioNamePtr = (StringPtr)name;
-       pb.newRef = ref;
-       result = PBMakeFSRefSync(&pb);
-       require_noerr(result, PBMakeFSRefSync);
-       
-PBMakeFSRefSync:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSStatus
-FSMakePath(
-       SInt16 volRefNum,
-       SInt32 dirID,
-       ConstStr255Param name,
-       UInt8 *path,
-       UInt32 maxPathSize)
-{
-       OSStatus        result;
-       FSRef           ref;
-       
-       /* check parameters */
-       require_action(NULL != path, BadParameter, result = paramErr);
-       
-       /* convert the inputs to an FSRef */
-       result = FSMakeFSRef(volRefNum, dirID, name, &ref);
-       require_noerr(result, FSMakeFSRef);
-       
-       /* and then convert the FSRef to a path */
-       result = FSRefMakePath(&ref, path, maxPathSize);
-       require_noerr(result, FSRefMakePath);
-       
-FSRefMakePath:
-FSMakeFSRef:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSStatus
-FSPathMakeFSSpec(
-       const UInt8 *path,
-       FSSpec *spec,
-       Boolean *isDirectory)   /* can be NULL */
-{
-       OSStatus        result;
-       FSRef           ref;
-       
-       /* check parameters */
-       require_action(NULL != spec, BadParameter, result = paramErr);
-       
-       /* convert the POSIX path to an FSRef */
-       result = FSPathMakeRef(path, &ref, isDirectory);
-       require_noerr(result, FSPathMakeRef);
-       
-       /* and then convert the FSRef to an FSSpec */
-       result = FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL, spec, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-FSGetCatalogInfo:
-FSPathMakeRef:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-UnicodeNameGetHFSName(
-       UniCharCount nameLength,
-       const UniChar *name,
-       TextEncoding textEncodingHint,
-       Boolean isVolumeName,
-       Str31 hfsName)
-{
-       OSStatus                        result;
-       ByteCount                       unicodeByteLength;
-       ByteCount                       unicodeBytesConverted;
-       ByteCount                       actualPascalBytes;
-       UnicodeMapping          uMapping;
-       UnicodeToTextInfo       utInfo;
-       
-       /* check parameters */
-       require_action(NULL != hfsName, BadParameter, result = paramErr);
-       
-       /* make sure output is valid in case we get errors or there's nothing to convert */
-       hfsName[0] = 0;
-       
-       unicodeByteLength = nameLength * sizeof(UniChar);
-       if ( 0 == unicodeByteLength )
-       {
-               /* do nothing */
-               result = noErr;
-       }
-       else
-       {
-               /* if textEncodingHint is kTextEncodingUnknown, get a "default" textEncodingHint */
-               if ( kTextEncodingUnknown == textEncodingHint )
-               {
-                       ScriptCode                      script;
-                       RegionCode                      region;
-                       
-                       script = (ScriptCode)GetScriptManagerVariable(smSysScript);
-                       region = (RegionCode)GetScriptManagerVariable(smRegionCode);
-                       result = UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare, region,
-                               NULL, &textEncodingHint );
-                       if ( paramErr == result )
-                       {
-                               /* ok, ignore the region and try again */
-                               result = UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare,
-                                       kTextRegionDontCare, NULL, &textEncodingHint );
-                       }
-                       if ( noErr != result )
-                       {
-                               /* ok... try something */
-                               textEncodingHint = kTextEncodingMacRoman;
-                       }
-               }
-               
-               uMapping.unicodeEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0,
-                       kUnicodeCanonicalDecompVariant, kUnicode16BitFormat);
-               uMapping.otherEncoding = GetTextEncodingBase(textEncodingHint);
-               uMapping.mappingVersion = kUnicodeUseHFSPlusMapping;
-       
-               result = CreateUnicodeToTextInfo(&uMapping, &utInfo);
-               require_noerr(result, CreateUnicodeToTextInfo);
-               
-               result = ConvertFromUnicodeToText(utInfo, unicodeByteLength, name, kUnicodeLooseMappingsMask,
-                       0, NULL, 0, NULL,       /* offsetCounts & offsetArrays */
-                       isVolumeName ? kHFSMaxVolumeNameChars : kHFSMaxFileNameChars,
-                       &unicodeBytesConverted, &actualPascalBytes, &hfsName[1]);
-               require_noerr(result, ConvertFromUnicodeToText);
-               
-               hfsName[0] = (unsigned char)actualPascalBytes;  /* fill in length byte */
-
-ConvertFromUnicodeToText:
-               
-               /* verify the result in debug builds -- there's really not anything you can do if it fails */
-               verify_noerr(DisposeUnicodeToTextInfo(&utInfo));
-       }
-       
-CreateUnicodeToTextInfo:       
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-HFSNameGetUnicodeName(
-       ConstStr31Param hfsName,
-       TextEncoding textEncodingHint,
-       HFSUniStr255 *unicodeName)
-{
-       ByteCount                       unicodeByteLength;
-       OSStatus                        result;
-       UnicodeMapping          uMapping;
-       TextToUnicodeInfo       tuInfo;
-       ByteCount                       pascalCharsRead;
-       
-       /* check parameters */
-       require_action(NULL != unicodeName, BadParameter, result = paramErr);
-       
-       /* make sure output is valid in case we get errors or there's nothing to convert */
-       unicodeName->length = 0;
-       
-       if ( 0 == StrLength(hfsName) )
-       {
-               result = noErr;
-       }
-       else
-       {
-               /* if textEncodingHint is kTextEncodingUnknown, get a "default" textEncodingHint */
-               if ( kTextEncodingUnknown == textEncodingHint )
-               {
-                       ScriptCode                      script;
-                       RegionCode                      region;
-                       
-                       script = GetScriptManagerVariable(smSysScript);
-                       region = GetScriptManagerVariable(smRegionCode);
-                       result = UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare, region,
-                               NULL, &textEncodingHint);
-                       if ( paramErr == result )
-                       {
-                               /* ok, ignore the region and try again */
-                               result = UpgradeScriptInfoToTextEncoding(script, kTextLanguageDontCare,
-                                       kTextRegionDontCare, NULL, &textEncodingHint);
-                       }
-                       if ( noErr != result )
-                       {
-                               /* ok... try something */
-                               textEncodingHint = kTextEncodingMacRoman;
-                       }
-               }
-               
-               uMapping.unicodeEncoding = CreateTextEncoding(kTextEncodingUnicodeV2_0,
-                       kUnicodeCanonicalDecompVariant, kUnicode16BitFormat);
-               uMapping.otherEncoding = GetTextEncodingBase(textEncodingHint);
-               uMapping.mappingVersion = kUnicodeUseHFSPlusMapping;
-       
-               result = CreateTextToUnicodeInfo(&uMapping, &tuInfo);
-               require_noerr(result, CreateTextToUnicodeInfo);
-                       
-               result = ConvertFromTextToUnicode(tuInfo, hfsName[0], &hfsName[1],
-                       0,                                                              /* no control flag bits */
-                       0, NULL, 0, NULL,                               /* offsetCounts & offsetArrays */
-                       sizeof(unicodeName->unicode),   /* output buffer size in bytes */
-                       &pascalCharsRead, &unicodeByteLength, unicodeName->unicode);
-               require_noerr(result, ConvertFromTextToUnicode);
-               
-               /* convert from byte count to char count */
-               unicodeName->length = unicodeByteLength / sizeof(UniChar);
-
-ConvertFromTextToUnicode:
-
-               /* verify the result in debug builds -- there's really not anything you can do if it fails */
-               verify_noerr(DisposeTextToUnicodeInfo(&tuInfo));
-       }
-       
-CreateTextToUnicodeInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- File/Directory Manipulation Routines -----
-
-/*****************************************************************************/
-
-Boolean FSRefValid(const FSRef *ref)
-{
-       return ( noErr == FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, NULL, NULL, NULL) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetParentRef(
-       const FSRef *ref,
-       FSRef *parentRef)
-{
-       OSErr   result;
-       FSCatalogInfo   catalogInfo;
-       
-       /* check parameters */
-       require_action(NULL != parentRef, BadParameter, result = paramErr);
-       
-       result = FSGetCatalogInfo(ref, kFSCatInfoNodeID, &catalogInfo, NULL, NULL, parentRef);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /*
-        * Note: FSRefs always point to real file system objects. So, there cannot
-        * be a FSRef to the parent of volume root directories. Early versions of
-        * Mac OS X do not handle this case correctly and incorrectly return a
-        * FSRef for the parent of volume root directories instead of returning an
-        * invalid FSRef (a cleared FSRef is invalid). The next three lines of code
-        * ensure that you won't run into this bug. WW9D!
-        */
-       if ( fsRtDirID == catalogInfo.nodeID )
-       {
-               /* clear parentRef and return noErr which is the proper behavior */
-               memset(parentRef, 0, sizeof(FSRef));
-       }
-
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetFileDirName(
-       const FSRef *ref,
-       HFSUniStr255 *outName)
-{
-       OSErr   result;
-       
-       /* check parameters */
-       require_action(NULL != outName, BadParameter, result = paramErr);
-       
-       result = FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, outName, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetNodeID(
-       const FSRef *ref,
-       long *nodeID,                   /* can be NULL */
-       Boolean *isDirectory)   /* can be NULL */
-{
-       OSErr                           result;
-       FSCatalogInfo           catalogInfo;
-       FSCatalogInfoBitmap whichInfo;
-       
-       /* determine what catalog information to get */
-       whichInfo = kFSCatInfoNone; /* start with none */
-       if ( NULL != nodeID )
-       {
-               whichInfo |= kFSCatInfoNodeID;
-       }
-       if ( NULL != isDirectory )
-       {
-               whichInfo |= kFSCatInfoNodeFlags;
-       }
-       
-       result = FSGetCatalogInfo(ref, whichInfo, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       if ( NULL != nodeID )
-       {
-               *nodeID = catalogInfo.nodeID;
-       }
-       if ( NULL != isDirectory )
-       {
-               *isDirectory = (0 != (kFSNodeIsDirectoryMask & catalogInfo.nodeFlags));
-       }
-       
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetUserPrivilegesPermissions(
-       const FSRef *ref,
-       UInt8 *userPrivileges,          /* can be NULL */
-       UInt32 permissions[4])          /* can be NULL */
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       FSCatalogInfoBitmap whichInfo;
-       
-       /* determine what catalog information to get */
-       whichInfo = kFSCatInfoNone; /* start with none */
-       if ( NULL != userPrivileges )
-       {
-               whichInfo |= kFSCatInfoUserPrivs;
-       }
-       if ( NULL != permissions )
-       {
-               whichInfo |= kFSCatInfoPermissions;
-       }
-       
-       result = FSGetCatalogInfo(ref, whichInfo, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       if ( NULL != userPrivileges )
-       {
-               *userPrivileges = catalogInfo.userPrivileges;
-       }
-       if ( NULL != permissions )
-       {
-               BlockMoveData(&catalogInfo.permissions, permissions, sizeof(UInt32) * 4);
-       }
-       
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSCheckLock(
-       const FSRef *ref)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       FSVolumeInfo    volumeInfo;
-       
-       /* get nodeFlags and vRefNum for container */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNodeFlags + kFSCatInfoVolume, &catalogInfo, NULL, NULL,NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* is file locked? */
-       if ( 0 != (catalogInfo.nodeFlags & kFSNodeLockedMask) )
-       {
-               result = fLckdErr;      /* file is locked */
-       }
-       else
-       {
-               /* file isn't locked, but is volume locked? */
-               
-               /* get volume flags */
-               result = FSGetVolumeInfo(catalogInfo.volume, 0, NULL, kFSVolInfoFlags, &volumeInfo, NULL, NULL);
-               require_noerr(result, FSGetVolumeInfo);
-               
-               if ( 0 != (volumeInfo.flags & kFSVolFlagHardwareLockedMask) )
-               {
-                       result = wPrErr;        /* volume locked by hardware */
-               }
-               else if ( 0 != (volumeInfo.flags & kFSVolFlagSoftwareLockedMask) )
-               {
-                       result = vLckdErr;      /* volume locked by software */
-               }
-       }
-       
-FSGetVolumeInfo:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetForkSizes(
-       const FSRef *ref,
-       UInt64 *dataLogicalSize,        /* can be NULL */
-       UInt64 *rsrcLogicalSize)        /* can be NULL */
-{
-       OSErr                           result;
-       FSCatalogInfoBitmap whichInfo;
-       FSCatalogInfo           catalogInfo;
-       
-       whichInfo = kFSCatInfoNodeFlags;
-       if ( NULL != dataLogicalSize )
-       {
-               /* get data fork size */
-               whichInfo |= kFSCatInfoDataSizes;
-       }
-       if ( NULL != rsrcLogicalSize )
-       {
-               /* get resource fork size */
-               whichInfo |= kFSCatInfoRsrcSizes;
-       }
-
-       /* get nodeFlags and catalog info */
-       result = FSGetCatalogInfo(ref, whichInfo, &catalogInfo, NULL, NULL,NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* make sure FSRef was to a file */
-       require_action(0 == (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask), FSRefNotFile, result = notAFileErr);
-       
-       if ( NULL != dataLogicalSize )
-       {
-               /* return data fork size */
-               *dataLogicalSize = catalogInfo.dataLogicalSize;
-       }
-       if ( NULL != rsrcLogicalSize )
-       {
-               /* return resource fork size */
-               *rsrcLogicalSize = catalogInfo.rsrcLogicalSize;
-       }
-       
-FSRefNotFile:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetTotalForkSizes(
-       const FSRef *ref,
-       UInt64 *totalLogicalSize,       /* can be NULL */
-       UInt64 *totalPhysicalSize,      /* can be NULL */
-       ItemCount *forkCount)           /* can be NULL */
-{
-       OSErr                   result;
-       CatPositionRec  forkIterator;
-       SInt64                  forkSize;
-       SInt64                  *forkSizePtr;
-       UInt64                  forkPhysicalSize;
-       UInt64                  *forkPhysicalSizePtr;
-       
-       /* Determine if forkSize needed */
-       if ( NULL != totalLogicalSize)
-       {
-               *totalLogicalSize = 0;
-               forkSizePtr = &forkSize;
-       }
-       else
-       {
-               forkSizePtr = NULL;
-       }
-       
-       /* Determine if forkPhysicalSize is needed */
-       if ( NULL != totalPhysicalSize )
-       {
-               *totalPhysicalSize = 0;
-               forkPhysicalSizePtr = &forkPhysicalSize;
-       }
-       else
-       {
-               forkPhysicalSizePtr = NULL;
-       }
-       
-       /* zero fork count if returning it */
-       if ( NULL != forkCount )
-       {
-               *forkCount = 0;
-       }
-       
-       /* Iterate through the forks to get the sizes */
-       forkIterator.initialize = 0;
-       do
-       {
-               result = FSIterateForks(ref, &forkIterator, NULL, forkSizePtr, forkPhysicalSizePtr);
-               if ( noErr == result )
-               {
-                       if ( NULL != totalLogicalSize )
-                       {
-                               *totalLogicalSize += forkSize;
-                       }
-                       
-                       if ( NULL != totalPhysicalSize )
-                       {
-                               *totalPhysicalSize += forkPhysicalSize;
-                       }
-                       
-                       if ( NULL != forkCount )
-                       {
-                               ++*forkCount;
-                       }
-               }
-       } while ( noErr == result );
-       
-       /* any error result other than errFSNoMoreItems is serious */
-       require(errFSNoMoreItems == result, FSIterateForks);
-       
-       /* Normal exit */
-       result = noErr;
-
-FSIterateForks:
-       
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSBumpDate(
-       const FSRef *ref)
-{
-       OSStatus                result;
-       FSCatalogInfo   catalogInfo;
-       UTCDateTime             oldDateTime;
-#if !BuildingMoreFilesXForMacOS9
-       FSRef                   parentRef;
-       Boolean                 notifyParent;
-#endif
-
-#if !BuildingMoreFilesXForMacOS9
-       /* Get the node flags, the content modification date and time, and the parent ref */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNodeFlags + kFSCatInfoContentMod, &catalogInfo, NULL, NULL, &parentRef);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* Notify the parent if this is a file */
-       notifyParent = (0 == (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask));
-#else
-       /* Get the content modification date and time */
-       result = FSGetCatalogInfo(ref, kFSCatInfoContentMod, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-#endif
-       
-       oldDateTime = catalogInfo.contentModDate;
-
-       /* Get the current date and time */
-       result = GetUTCDateTime(&catalogInfo.contentModDate, kUTCDefaultOptions);
-       require_noerr(result, GetUTCDateTime);
-       
-       /* if the old date and time is the the same as the current, bump the seconds by one */
-       if ( (catalogInfo.contentModDate.fraction == oldDateTime.fraction) &&
-                (catalogInfo.contentModDate.lowSeconds == oldDateTime.lowSeconds) &&
-                (catalogInfo.contentModDate.highSeconds == oldDateTime.highSeconds) )
-       {
-               ++catalogInfo.contentModDate.lowSeconds;
-               if ( 0 == catalogInfo.contentModDate.lowSeconds )
-               {
-                       ++catalogInfo.contentModDate.highSeconds;
-               }
-       }
-       
-       /* Bump the content modification date and time */
-       result = FSSetCatalogInfo(ref, kFSCatInfoContentMod, &catalogInfo);
-       require_noerr(result, FSSetCatalogInfo);
-
-#if !BuildingMoreFilesXForMacOS9
-       /*
-        * The problem with FNNotify is that it is not available under Mac OS 9
-        * and there's no way to test for that except for looking for the symbol
-        * or something. So, I'll just conditionalize this for those who care
-        * to send a notification.
-        */
-       
-       /* Send a notification for the parent of the file, or for the directory */
-       result = FNNotify(notifyParent ? &parentRef : ref, kFNDirectoryModifiedMessage, kNilOptions);
-       require_noerr(result, FNNotify);
-#endif
-
-       /* ignore errors from FSSetCatalogInfo (volume might be write protected) and FNNotify */
-FNNotify:
-FSSetCatalogInfo:
-       
-       return ( noErr );
-       
-       /**********************/
-       
-GetUTCDateTime:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetFinderInfo(
-       const FSRef *ref,
-       FinderInfo *info,                                       /* can be NULL */
-       ExtendedFinderInfo *extendedInfo,       /* can be NULL */
-       Boolean *isDirectory)                           /* can be NULL */
-{
-       OSErr                           result;
-       FSCatalogInfo           catalogInfo;
-       FSCatalogInfoBitmap whichInfo;
-       
-       /* determine what catalog information is really needed */
-       whichInfo = kFSCatInfoNone;
-       
-       if ( NULL != info )
-       {
-               /* get FinderInfo */
-               whichInfo |= kFSCatInfoFinderInfo;
-       }
-       
-       if ( NULL != extendedInfo )
-       {
-               /* get ExtendedFinderInfo */
-               whichInfo |= kFSCatInfoFinderXInfo;
-       }
-       
-       if ( NULL != isDirectory )
-       {
-               whichInfo |= kFSCatInfoNodeFlags;
-       }
-       
-       result = FSGetCatalogInfo(ref, whichInfo, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* return FinderInfo if requested */
-       if ( NULL != info )
-       {
-               BlockMoveData(catalogInfo.finderInfo, info, sizeof(FinderInfo));
-       }
-       
-       /* return ExtendedFinderInfo if requested */
-       if ( NULL != extendedInfo)
-       {
-               BlockMoveData(catalogInfo.extFinderInfo, extendedInfo, sizeof(ExtendedFinderInfo));
-       }
-       
-       /* set isDirectory Boolean if requested */
-       if ( NULL != isDirectory)
-       {
-               *isDirectory = (0 != (kFSNodeIsDirectoryMask & catalogInfo.nodeFlags));
-       }
-       
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetFinderInfo(
-       const FSRef *ref,
-       const FinderInfo *info,
-       const ExtendedFinderInfo *extendedInfo)
-{
-       OSErr                           result;
-       FSCatalogInfo           catalogInfo;
-       FSCatalogInfoBitmap whichInfo;
-       
-       /* determine what catalog information will be set */
-       whichInfo = kFSCatInfoNone; /* start with none */
-       if ( NULL != info )
-       {
-               /* set FinderInfo */
-               whichInfo |= kFSCatInfoFinderInfo;
-               BlockMoveData(info, catalogInfo.finderInfo, sizeof(FinderInfo));
-       }
-       if ( NULL != extendedInfo )
-       {
-               /* set ExtendedFinderInfo */
-               whichInfo |= kFSCatInfoFinderXInfo;
-               BlockMoveData(extendedInfo, catalogInfo.extFinderInfo, sizeof(ExtendedFinderInfo));
-       }
-       
-       result = FSSetCatalogInfo(ref, whichInfo, &catalogInfo);
-       require_noerr(result, FSGetCatalogInfo);
-       
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSChangeCreatorType(
-       const FSRef *ref,
-       OSType fileCreator,
-       OSType fileType)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       FSRef                   parentRef;
-       
-       /* get nodeFlags, finder info, and parent FSRef */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNodeFlags + kFSCatInfoFinderInfo, &catalogInfo , NULL, NULL, &parentRef);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* make sure FSRef was to a file */
-       require_action(0 == (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask), FSRefNotFile, result = notAFileErr);
-       
-       /* If fileType not 0x00000000, change fileType */
-       if ( fileType != (OSType)0x00000000 )
-       {
-               ((FileInfo *)&catalogInfo.finderInfo)->fileType = fileType;
-       }
-       
-       /* If creator not 0x00000000, change creator */
-       if ( fileCreator != (OSType)0x00000000 )
-       {
-               ((FileInfo *)&catalogInfo.finderInfo)->fileCreator = fileCreator;
-       }
-       
-       /* now, save the new information back to disk */
-       result = FSSetCatalogInfo(ref, kFSCatInfoFinderInfo, &catalogInfo);
-       require_noerr(result, FSSetCatalogInfo);
-       
-       /* and attempt to bump the parent directory's mod date to wake up */
-       /* the Finder to the change we just made (ignore errors from this) */
-       verify_noerr(FSBumpDate(&parentRef));
-       
-FSSetCatalogInfo:
-FSRefNotFile:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSChangeFinderFlags(
-       const FSRef *ref,
-       Boolean setBits,
-       UInt16 flagBits)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       FSRef                   parentRef;
-       
-       /* get the current finderInfo */
-       result = FSGetCatalogInfo(ref, kFSCatInfoFinderInfo, &catalogInfo, NULL, NULL, &parentRef);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* set or clear the appropriate bits in the finderInfo.finderFlags */
-       if ( setBits )
-       {
-               /* OR in the bits */
-               ((FileInfo *)&catalogInfo.finderInfo)->finderFlags |= flagBits;
-       }
-       else
-       {
-               /* AND out the bits */
-               ((FileInfo *)&catalogInfo.finderInfo)->finderFlags &= ~flagBits;
-       }
-       
-       /* save the modified finderInfo */
-       result = FSSetCatalogInfo(ref, kFSCatInfoFinderInfo, &catalogInfo);
-       require_noerr(result, FSSetCatalogInfo);
-       
-       /* and attempt to bump the parent directory's mod date to wake up the Finder */
-       /* to the change we just made (ignore errors from this) */
-       verify_noerr(FSBumpDate(&parentRef));
-       
-FSSetCatalogInfo:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetInvisible(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, true, kIsInvisible) );
-}
-
-OSErr
-FSClearInvisible(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, false, kIsInvisible) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetNameLocked(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, true, kNameLocked) );
-}
-
-OSErr
-FSClearNameLocked(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, false, kNameLocked) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetIsStationery(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, true, kIsStationery) );
-}
-
-OSErr
-FSClearIsStationery(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, false, kIsStationery) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetHasCustomIcon(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, true, kHasCustomIcon) );
-}
-
-OSErr
-FSClearHasCustomIcon(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, false, kHasCustomIcon) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSClearHasBeenInited(
-       const FSRef *ref)
-{
-       return ( FSChangeFinderFlags(ref, false, kHasBeenInited) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSCopyFileMgrAttributes(
-       const FSRef *sourceRef,
-       const FSRef *destinationRef,
-       Boolean copyLockBit)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       
-       /* get the source information */
-       result = FSGetCatalogInfo(sourceRef, kFSCatInfoSettableInfo, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* don't copy the hasBeenInited bit; clear it */
-       ((FileInfo *)&catalogInfo.finderInfo)->finderFlags &= ~kHasBeenInited;
-       
-       /* should the locked bit be copied? */
-       if ( !copyLockBit )
-       {
-               /* no, make sure the locked bit is clear */
-               catalogInfo.nodeFlags &= ~kFSNodeLockedMask;
-       }
-               
-       /* set the destination information */
-       result = FSSetCatalogInfo(destinationRef, kFSCatInfoSettableInfo, &catalogInfo);
-       require_noerr(result, FSSetCatalogInfo);
-       
-FSSetCatalogInfo:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSMoveRenameObjectUnicode(
-       const FSRef *ref,
-       const FSRef *destDirectory,
-       UniCharCount nameLength,
-       const UniChar *name,                    /* can be NULL (no rename during move) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef)                                  /* if function fails along the way, newRef is final location of file */
-{
-       OSErr                   result;
-       FSVolumeRefNum  vRefNum;
-       FSCatalogInfo   catalogInfo;
-       FSRef                   originalDirectory;
-       TextEncoding    originalTextEncodingHint;
-       HFSUniStr255    originalName;
-       HFSUniStr255    uniqueName;             /* unique name given to object while moving it to destination */
-       long                    theSeed;                /* the seed for generating unique names */
-       
-       /* check parameters */
-       require_action(NULL != newRef, BadParameter, result = paramErr);
-       
-       /* newRef = input to start with */
-       BlockMoveData(ref, newRef, sizeof(FSRef));
-       
-       /* get destDirectory's vRefNum */
-       result = FSGetCatalogInfo(destDirectory, kFSCatInfoVolume, &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, DestinationBad);
-       
-       /* save vRefNum */
-       vRefNum = catalogInfo.volume;
-       
-       /* get ref's vRefNum, TextEncoding, name and parent directory*/
-       result = FSGetCatalogInfo(ref, kFSCatInfoTextEncoding + kFSCatInfoVolume, &catalogInfo, &originalName, NULL, &originalDirectory);
-       require_noerr(result, SourceBad);
-       
-       /* save TextEncoding */
-       originalTextEncodingHint = catalogInfo.textEncodingHint;
-       
-       /* make sure ref and destDirectory are on same volume */
-       require_action(vRefNum == catalogInfo.volume, NotSameVolume, result = diffVolErr);
-       
-       /* Skip a few steps if we're not renaming */
-       if ( NULL != name )
-       {
-               /* generate a name that is unique in both directories */
-               theSeed = 0x4a696d4c;   /* a fine unlikely filename */
-               
-               result = GenerateUniqueHFSUniStr(&theSeed, &originalDirectory, destDirectory, &uniqueName);
-               require_noerr(result, GenerateUniqueHFSUniStrFailed);
-               
-               /* Rename the object to uniqueName */
-               result = FSRenameUnicode(ref, uniqueName.length, uniqueName.unicode, kTextEncodingUnknown, newRef);
-               require_noerr(result, FSRenameUnicodeBeforeMoveFailed);
-               
-               /* Move object to its new home */
-               result = FSMoveObject(newRef, destDirectory, newRef);
-               require_noerr(result, FSMoveObjectAfterRenameFailed);
-               
-               /* Rename the object to new name */
-               result = FSRenameUnicode(ref, nameLength, name, textEncodingHint, newRef);
-               require_noerr(result, FSRenameUnicodeAfterMoveFailed);
-       }
-       else
-       {
-               /* Move object to its new home */
-               result = FSMoveObject(newRef, destDirectory, newRef);
-               require_noerr(result, FSMoveObjectNoRenameFailed);
-       }
-       
-       return ( result );
-       
-       /*************/
-
-/*
- * failure handling code when renaming
- */
-
-FSRenameUnicodeAfterMoveFailed:
-
-       /* Error handling: move object back to original location - ignore errors */
-       verify_noerr(FSMoveObject(newRef, &originalDirectory, newRef));
-       
-FSMoveObjectAfterRenameFailed:
-
-       /* Error handling: rename object back to original name - ignore errors */
-       verify_noerr(FSRenameUnicode(newRef, originalName.length, originalName.unicode, originalTextEncodingHint, newRef));
-       
-FSRenameUnicodeBeforeMoveFailed:
-GenerateUniqueHFSUniStrFailed:
-
-/*
- * failure handling code for renaming or not
- */
-FSMoveObjectNoRenameFailed:
-NotSameVolume:
-SourceBad:
-DestinationBad:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-/*
-       The FSDeleteContainerLevel function deletes the contents of a container
-       directory. All files and subdirectories in the specified container are
-       deleted. If a locked file or directory is encountered, it is unlocked
-       and then deleted. If any unexpected errors are encountered,
-       FSDeleteContainerLevel quits and returns to the caller.
-       
-       container                       --> FSRef to a directory.
-       theGlobals                      --> A pointer to a FSDeleteContainerGlobals struct
-                                                       which contains the variables that do not need to
-                                                       be allocated each time FSDeleteContainerLevel
-                                                       recurses. That lets FSDeleteContainerLevel use
-                                                       less stack space per recursion level.
-*/
-
-static
-void
-FSDeleteContainerLevel(
-       const FSRef *container,
-       FSDeleteContainerGlobals *theGlobals)
-{
-       /* level locals */
-       FSIterator                                      iterator;
-       FSRef                                           itemToDelete;
-       UInt16                                          nodeFlags;
-       
-       /* Open FSIterator for flat access and give delete optimization hint */
-       theGlobals->result = FSOpenIterator(container, kFSIterateFlat + kFSIterateDelete, &iterator);
-       require_noerr(theGlobals->result, FSOpenIterator);
-       
-       /* delete the contents of the directory */
-       do
-       {
-               /* get 1 item to delete */
-               theGlobals->result = FSGetCatalogInfoBulk(iterator, 1, &theGlobals->actualObjects,
-                                                               NULL, kFSCatInfoNodeFlags, &theGlobals->catalogInfo,
-                                                               &itemToDelete, NULL, NULL);
-               if ( (noErr == theGlobals->result) && (1 == theGlobals->actualObjects) )
-               {
-                       /* save node flags in local in case we have to recurse */
-                       nodeFlags = theGlobals->catalogInfo.nodeFlags;
-                       
-                       /* is it a file or directory? */
-                       if ( 0 != (nodeFlags & kFSNodeIsDirectoryMask) )
-                       {
-                               /* it's a directory -- delete its contents before attempting to delete it */
-                               FSDeleteContainerLevel(&itemToDelete, theGlobals);
-                       }
-                       /* are we still OK to delete? */
-                       if ( noErr == theGlobals->result )
-                       {
-                               /* is item locked? */
-                               if ( 0 != (nodeFlags & kFSNodeLockedMask) )
-                               {
-                                       /* then attempt to unlock it (ignore result since FSDeleteObject will set it correctly) */
-                                       theGlobals->catalogInfo.nodeFlags = nodeFlags & ~kFSNodeLockedMask;
-                                       (void) FSSetCatalogInfo(&itemToDelete, kFSCatInfoNodeFlags, &theGlobals->catalogInfo);
-                               }
-                               /* delete the item */
-                               theGlobals->result = FSDeleteObject(&itemToDelete);
-                       }
-               }
-       } while ( noErr == theGlobals->result );
-       
-       /* we found the end of the items normally, so return noErr */
-       if ( errFSNoMoreItems == theGlobals->result )
-       {
-               theGlobals->result = noErr;
-       }
-       
-       /* close the FSIterator (closing an open iterator should never fail) */
-       verify_noerr(FSCloseIterator(iterator));
-
-FSOpenIterator:
-
-       return;
-}
-
-/*****************************************************************************/
-
-OSErr
-FSDeleteContainerContents(
-       const FSRef *container)
-{
-       FSDeleteContainerGlobals        theGlobals;
-       
-       /* delete container's contents */
-       FSDeleteContainerLevel(container, &theGlobals);
-       
-       return ( theGlobals.result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSDeleteContainer(
-       const FSRef *container)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       
-       /* get nodeFlags for container */
-       result = FSGetCatalogInfo(container, kFSCatInfoNodeFlags, &catalogInfo, NULL, NULL,NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* make sure container is a directory */
-       require_action(0 != (catalogInfo.nodeFlags & kFSNodeIsDirectoryMask), ContainerNotDirectory, result = dirNFErr);
-       
-       /* delete container's contents */
-       result = FSDeleteContainerContents(container);
-       require_noerr(result, FSDeleteContainerContents);
-       
-       /* is container locked? */
-       if ( 0 != (catalogInfo.nodeFlags & kFSNodeLockedMask) )
-       {
-               /* then attempt to unlock container (ignore result since FSDeleteObject will set it correctly) */
-               catalogInfo.nodeFlags &= ~kFSNodeLockedMask;
-               (void) FSSetCatalogInfo(container, kFSCatInfoNodeFlags, &catalogInfo);
-       }
-       
-       /* delete the container */
-       result = FSDeleteObject(container);
-       
-FSDeleteContainerContents:
-ContainerNotDirectory:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-/*
-       The FSIterateContainerLevel function iterates the contents of a container
-       directory and calls a IterateContainerFilterProc function once for each
-       file and directory found.
-       
-       theGlobals                      --> A pointer to a FSIterateContainerGlobals struct
-                                                       which contains the variables needed globally by
-                                                       all recusion levels of FSIterateContainerLevel.
-                                                       That makes FSIterateContainer thread safe since
-                                                       each call to it uses its own global world.
-                                                       It also contains the variables that do not need
-                                                       to be allocated each time FSIterateContainerLevel
-                                                       recurses. That lets FSIterateContainerLevel use
-                                                       less stack space per recursion level.
-*/
-
-static
-void
-FSIterateContainerLevel(
-       FSIterateContainerGlobals *theGlobals)
-{      
-       FSIterator      iterator;
-       
-       /* If maxLevels is zero, we aren't checking levels */
-       /* If currentLevel < maxLevels, look at this level */
-       if ( (theGlobals->maxLevels == 0) ||
-                (theGlobals->currentLevel < theGlobals->maxLevels) )
-       {
-               /* Open FSIterator for flat access to theGlobals->ref */
-               theGlobals->result = FSOpenIterator(&theGlobals->ref, kFSIterateFlat, &iterator);
-               require_noerr(theGlobals->result, FSOpenIterator);
-               
-               ++theGlobals->currentLevel; /* Go to next level */
-               
-               /* Call FSGetCatalogInfoBulk in loop to get all items in the container */
-               do
-               {
-                       theGlobals->result = FSGetCatalogInfoBulk(iterator, 1, &theGlobals->actualObjects,
-                               &theGlobals->containerChanged, theGlobals->whichInfo, &theGlobals->catalogInfo,
-                               &theGlobals->ref, theGlobals->specPtr, theGlobals->namePtr);
-                       if ( (noErr == theGlobals->result || errFSNoMoreItems == theGlobals->result) &&
-                               (0 != theGlobals->actualObjects) )
-                       {
-                               /* Call the IterateFilterProc */
-                               theGlobals->quitFlag = CallIterateContainerFilterProc(theGlobals->iterateFilter,
-                                       theGlobals->containerChanged, theGlobals->currentLevel,
-                                       &theGlobals->catalogInfo, &theGlobals->ref,
-                                       theGlobals->specPtr, theGlobals->namePtr, theGlobals->yourDataPtr);
-                               /* Is it a directory? */
-                               if ( 0 != (theGlobals->catalogInfo.nodeFlags & kFSNodeIsDirectoryMask) )
-                               {
-                                       /* Keep going? */
-                                       if ( !theGlobals->quitFlag )
-                                       {
-                                               /* Dive again if the IterateFilterProc didn't say "quit" */
-                                               FSIterateContainerLevel(theGlobals);
-                                       }
-                               }
-                       }
-                       /* time to fall back a level? */
-               } while ( (noErr == theGlobals->result) && (!theGlobals->quitFlag) );
-               
-               /* errFSNoMoreItems is OK - it only means we hit the end of this level */
-               /* afpAccessDenied is OK, too - it only means we cannot see inside a directory */
-               if ( (errFSNoMoreItems == theGlobals->result) ||
-                        (afpAccessDenied == theGlobals->result) )
-               {
-                       theGlobals->result = noErr;
-               }
-               
-               --theGlobals->currentLevel; /* Return to previous level as we leave */
-               
-               /* Close the FSIterator (closing an open iterator should never fail) */
-               verify_noerr(FSCloseIterator(iterator));
-       }
-       
-FSOpenIterator:
-
-       return;
-}
-
-/*****************************************************************************/
-
-OSErr
-FSIterateContainer(
-       const FSRef *container,
-       ItemCount maxLevels,
-       FSCatalogInfoBitmap whichInfo,
-       Boolean wantFSSpec,
-       Boolean wantName,
-       IterateContainerFilterProcPtr iterateFilter,
-       void *yourDataPtr)
-{
-       OSErr                                           result;
-       FSIterateContainerGlobals       theGlobals;
-       
-       /* make sure there is an iterateFilter */
-       require_action(iterateFilter != NULL, NoIterateFilter, result = paramErr);
-       
-       /*
-        * set up the globals we need to access from the recursive routine
-        */
-       theGlobals.iterateFilter = iterateFilter;
-       /* we need the node flags no matter what was requested so we can detect files vs. directories */
-       theGlobals.whichInfo = whichInfo | kFSCatInfoNodeFlags;
-       /* start with input container -- the first OpenIterator will ensure it is a directory */
-       theGlobals.ref = *container;
-       if ( wantFSSpec )
-       {
-               theGlobals.specPtr = &theGlobals.spec;
-       }
-       else
-       {
-               theGlobals.specPtr = NULL;
-       }
-       if ( wantName )
-       {
-               theGlobals.namePtr = &theGlobals.name;
-       }
-       else
-       {
-               theGlobals.namePtr = NULL;
-       }
-       theGlobals.yourDataPtr = yourDataPtr;
-       theGlobals.maxLevels = maxLevels;
-       theGlobals.currentLevel = 0;
-       theGlobals.quitFlag = false;
-       theGlobals.containerChanged = false;
-       theGlobals.result = noErr;
-       theGlobals.actualObjects = 0;
-       
-       /* here we go into recursion land... */
-       FSIterateContainerLevel(&theGlobals);
-       result = theGlobals.result;
-       require_noerr(result, FSIterateContainerLevel);
-       
-FSIterateContainerLevel:
-NoIterateFilter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetDirectoryItems(
-       const FSRef *container,
-       FSRef ***refsHandle,    /* pointer to handle of FSRefs */
-       ItemCount *numRefs,
-       Boolean *containerChanged)
-{
-       /* Grab items 10 at a time. */
-       enum { kMaxItemsPerBulkCall = 10 };
-       
-       OSErr           result;
-       OSErr           memResult;
-       FSIterator      iterator;
-       FSRef           refs[kMaxItemsPerBulkCall];
-       ItemCount       actualObjects;
-       Boolean         changed;
-       
-       /* check parameters */
-       require_action((NULL != refsHandle) && (NULL != numRefs) && (NULL != containerChanged),
-               BadParameter, result = paramErr);
-       
-       *numRefs = 0;
-       *containerChanged = false;
-       *refsHandle = (FSRef **)NewHandle(0);
-       require_action(NULL != *refsHandle, NewHandle, result = memFullErr);
-       
-       /* open an FSIterator */
-       result = FSOpenIterator(container, kFSIterateFlat, &iterator);
-       require_noerr(result, FSOpenIterator);
-       
-       /* Call FSGetCatalogInfoBulk in loop to get all items in the container */
-       do
-       {
-               result = FSGetCatalogInfoBulk(iterator, kMaxItemsPerBulkCall, &actualObjects,
-                                       &changed, kFSCatInfoNone,  NULL,  refs, NULL, NULL);
-               
-               /* if the container changed, set containerChanged for output, but keep going */
-               if ( changed )
-               {
-                       *containerChanged = changed;
-               }
-               
-               /* any result other than noErr and errFSNoMoreItems is serious */
-               require((noErr == result) || (errFSNoMoreItems == result), FSGetCatalogInfoBulk);
-               
-               /* add objects to output array and count */
-               if ( 0 != actualObjects )
-               {
-                       /* concatenate the FSRefs to the end of the      handle */
-                       PtrAndHand(refs, (Handle)*refsHandle, actualObjects * sizeof(FSRef));
-                       memResult = MemError();
-                       require_noerr_action(memResult, MemoryAllocationFailed, result = memResult);
-                       
-                       *numRefs += actualObjects;
-               }
-       } while ( noErr == result );
-       
-       verify_noerr(FSCloseIterator(iterator)); /* closing an open iterator should never fail, but... */
-       
-       return ( noErr );
-       
-       /**********************/
-       
-MemoryAllocationFailed:
-FSGetCatalogInfoBulk:
-
-       /* close the iterator */
-       verify_noerr(FSCloseIterator(iterator));
-
-FSOpenIterator:
-       /* dispose of handle if already allocated and clear the outputs */
-       if ( NULL != *refsHandle )
-       {
-               DisposeHandle((Handle)*refsHandle);
-               *refsHandle = NULL;
-       }
-       *numRefs = 0;
-       
-NewHandle:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-/*
-       The GenerateUniqueName function generates a HFSUniStr255 name that is
-       unique in both dir1 and dir2.
-       
-       startSeed                       -->     A pointer to a long which is used to generate the
-                                                       unique name.
-                                               <--     It is modified on output to a value which should
-                                                       be used to generate the next unique name.
-       dir1                            -->     The first directory.
-       dir2                            -->     The second directory.
-       uniqueName                      <--     A pointer to a HFSUniStr255 where the unique name
-                                                       is to be returned.
-*/
-
-static
-OSErr
-GenerateUniqueHFSUniStr(
-       long *startSeed,
-       const FSRef *dir1,
-       const FSRef *dir2,
-       HFSUniStr255 *uniqueName)
-{
-       OSErr                   result;
-       long                    i;
-       FSRefParam              pb;
-       FSRef                   newRef;
-       unsigned char   hexStr[17] = "0123456789ABCDEF";
-       
-       /* set up the parameter block */
-       pb.name = uniqueName->unicode;
-       pb.nameLength = 8;      /* always 8 characters */
-       pb.textEncodingHint = kTextEncodingUnknown;
-       pb.newRef = &newRef;
-
-       /* loop until we get fnfErr with a filename in both directories */
-       result = noErr;
-       while ( fnfErr != result )
-       {
-               /* convert startSeed to 8 character Unicode string */
-               uniqueName->length = 8;
-               for ( i = 0; i < 8; ++i )
-               {
-                       uniqueName->unicode[i] = hexStr[((*startSeed >> ((7-i)*4)) & 0xf)];
-               }
-               
-               /* try in dir1 */
-               pb.ref = dir1;
-               result = PBMakeFSRefUnicodeSync(&pb);
-               if ( fnfErr == result )
-               {
-                       /* try in dir2 */
-                       pb.ref = dir2;
-                       result = PBMakeFSRefUnicodeSync(&pb);
-                       if ( fnfErr != result )
-                       {
-                               /* exit if anything other than noErr or fnfErr */
-                               require_noerr(result, Dir2PBMakeFSRefUnicodeSyncFailed);
-                       }
-               }
-               else
-               {
-                       /* exit if anything other than noErr or fnfErr */
-                       require_noerr(result, Dir1PBMakeFSRefUnicodeSyncFailed);
-               }
-               
-               /* increment seed for next pass through loop, */
-               /* or for next call to GenerateUniqueHFSUniStr */
-               ++(*startSeed);
-       }
-       
-       /* we have a unique file name which doesn't exist in dir1 or dir2 */
-       result = noErr;
-       
-Dir2PBMakeFSRefUnicodeSyncFailed:
-Dir1PBMakeFSRefUnicodeSyncFailed:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSExchangeObjectsCompat(
-       const FSRef *sourceRef,
-       const FSRef *destRef,
-       FSRef *newSourceRef,
-       FSRef *newDestRef)
-{
-       enum
-       {
-               /* get all settable info except for mod dates, plus the volume refNum and parent directory ID */
-               kGetCatInformationMask = (kFSCatInfoSettableInfo |
-                                                                 kFSCatInfoVolume |
-                                                                 kFSCatInfoParentDirID) &
-                                                                ~(kFSCatInfoContentMod | kFSCatInfoAttrMod),
-               /* set everything possible except for mod dates */
-               kSetCatinformationMask = kFSCatInfoSettableInfo &
-                                                                ~(kFSCatInfoContentMod | kFSCatInfoAttrMod)
-       };
-       
-       OSErr                                   result;
-       GetVolParmsInfoBuffer   volParmsInfo;
-       UInt32                                  infoSize;
-       FSCatalogInfo                   sourceCatalogInfo;      /* source file's catalog information */
-       FSCatalogInfo                   destCatalogInfo;        /* destination file's catalog information */
-       HFSUniStr255                    sourceName;                     /* source file's Unicode name */
-       HFSUniStr255                    destName;                       /* destination file's Unicode name */
-       FSRef                                   sourceCurrentRef;       /* FSRef to current location of source file throughout this function */
-       FSRef                                   destCurrentRef;         /* FSRef to current location of destination file throughout this function */
-       FSRef                                   sourceParentRef;        /* FSRef to parent directory of source file */
-       FSRef                                   destParentRef;          /* FSRef to parent directory of destination file */
-       HFSUniStr255                    sourceUniqueName;       /* unique name given to source file while exchanging it with destination */
-       HFSUniStr255                    destUniqueName;         /* unique name given to destination file while exchanging it with source */
-       long                                    theSeed;                        /* the seed for generating unique names */
-       Boolean                                 sameParentDirs;         /* true if source and destinatin parent directory is the same */
-       
-       /* check parameters */
-       require_action((NULL != newSourceRef) && (NULL != newDestRef), BadParameter, result = paramErr);
-       
-       /* output refs and current refs = input refs to start with */
-       BlockMoveData(sourceRef, newSourceRef, sizeof(FSRef));
-       BlockMoveData(sourceRef, &sourceCurrentRef, sizeof(FSRef));
-       
-       BlockMoveData(destRef, newDestRef, sizeof(FSRef));
-       BlockMoveData(destRef, &destCurrentRef, sizeof(FSRef));
-
-       /* get source volume's vRefNum */
-       result = FSGetCatalogInfo(&sourceCurrentRef, kFSCatInfoVolume, &sourceCatalogInfo, NULL, NULL, NULL);
-       require_noerr(result, DetermineSourceVRefNumFailed);
-       
-       /* see if that volume supports FSExchangeObjects */
-       result = FSGetVolParms(sourceCatalogInfo.volume, sizeof(GetVolParmsInfoBuffer),
-               &volParmsInfo, &infoSize);
-       if ( (noErr == result) && VolSupportsFSExchangeObjects(&volParmsInfo) )
-       {
-               /* yes - use FSExchangeObjects */
-               result = FSExchangeObjects(sourceRef, destRef);
-       }
-       else
-       {
-               /* no - emulate FSExchangeObjects */
-               
-               /* Note: The compatibility case won't work for files with *Btree control blocks. */
-               /* Right now the only *Btree files are created by the system. */
-               
-               /* get all catalog information and Unicode names for each file */
-               result = FSGetCatalogInfo(&sourceCurrentRef, kGetCatInformationMask, &sourceCatalogInfo, &sourceName, NULL, &sourceParentRef);
-               require_noerr(result, SourceFSGetCatalogInfoFailed);
-               
-               result = FSGetCatalogInfo(&destCurrentRef, kGetCatInformationMask, &destCatalogInfo, &destName, NULL, &destParentRef);
-               require_noerr(result, DestFSGetCatalogInfoFailed);
-               
-               /* make sure source and destination are on same volume */
-               require_action(sourceCatalogInfo.volume == destCatalogInfo.volume, NotSameVolume, result = diffVolErr);
-               
-               /* make sure both files are *really* files */
-               require_action((0 == (sourceCatalogInfo.nodeFlags & kFSNodeIsDirectoryMask)) &&
-                                          (0 == (destCatalogInfo.nodeFlags & kFSNodeIsDirectoryMask)), NotAFile, result = notAFileErr);
-               
-               /* generate 2 names that are unique in both directories */
-               theSeed = 0x4a696d4c;   /* a fine unlikely filename */
-               
-               result = GenerateUniqueHFSUniStr(&theSeed, &sourceParentRef, &destParentRef, &sourceUniqueName);
-               require_noerr(result, GenerateUniqueHFSUniStr1Failed);
-               
-               result = GenerateUniqueHFSUniStr(&theSeed, &sourceParentRef, &destParentRef, &destUniqueName);
-               require_noerr(result, GenerateUniqueHFSUniStr2Failed);
-
-               /* rename sourceCurrentRef to sourceUniqueName */
-               result = FSRenameUnicode(&sourceCurrentRef, sourceUniqueName.length, sourceUniqueName.unicode, kTextEncodingUnknown, newSourceRef);
-               require_noerr(result, FSRenameUnicode1Failed);
-               BlockMoveData(newSourceRef, &sourceCurrentRef, sizeof(FSRef));
-               
-               /* rename destCurrentRef to destUniqueName */
-               result = FSRenameUnicode(&destCurrentRef, destUniqueName.length, destUniqueName.unicode, kTextEncodingUnknown, newDestRef);
-               require_noerr(result, FSRenameUnicode2Failed);
-               BlockMoveData(newDestRef, &destCurrentRef, sizeof(FSRef));
-               
-               /* are the source and destination parent directories the same? */
-               sameParentDirs = ( sourceCatalogInfo.parentDirID == destCatalogInfo.parentDirID );
-               if ( !sameParentDirs )
-               {
-                       /* move source file to dest parent directory */
-                       result = FSMoveObject(&sourceCurrentRef, &destParentRef, newSourceRef);
-                       require_noerr(result, FSMoveObject1Failed);
-                       BlockMoveData(newSourceRef, &sourceCurrentRef, sizeof(FSRef));
-                       
-                       /* move dest file to source parent directory */
-                       result = FSMoveObject(&destCurrentRef, &sourceParentRef, newDestRef);
-                       require_noerr(result, FSMoveObject2Failed);
-                       BlockMoveData(newDestRef, &destCurrentRef, sizeof(FSRef));
-               }
-               
-               /* At this point, the files are in their new locations (if they were moved). */
-               /* The source file is named sourceUniqueName and is in the directory referred to */
-               /* by destParentRef. The destination file is named destUniqueName and is in the */
-               /* directory referred to by sourceParentRef. */
-                               
-               /* give source file the dest file's catalog information except for mod dates */
-               result = FSSetCatalogInfo(&sourceCurrentRef, kSetCatinformationMask, &destCatalogInfo);
-               require_noerr(result, FSSetCatalogInfo1Failed);
-               
-               /* give dest file the source file's catalog information except for mod dates */
-               result = FSSetCatalogInfo(&destCurrentRef, kSetCatinformationMask, &sourceCatalogInfo);
-               require_noerr(result, FSSetCatalogInfo2Failed);
-               
-               /* rename source file with dest file's name */
-               result = FSRenameUnicode(&sourceCurrentRef, destName.length, destName.unicode, destCatalogInfo.textEncodingHint, newSourceRef);
-               require_noerr(result, FSRenameUnicode3Failed);
-               BlockMoveData(newSourceRef, &sourceCurrentRef, sizeof(FSRef));
-               
-               /* rename dest file with source file's name */
-               result = FSRenameUnicode(&destCurrentRef, sourceName.length, sourceName.unicode, sourceCatalogInfo.textEncodingHint, newDestRef);
-               require_noerr(result, FSRenameUnicode4Failed);
-               
-               /* we're done with no errors, so swap newSourceRef and newDestRef */
-               BlockMoveData(newDestRef, newSourceRef, sizeof(FSRef));
-               BlockMoveData(&sourceCurrentRef, newDestRef, sizeof(FSRef));
-       }
-       
-       return ( result );
-       
-       /**********************/
-
-/* If there are any failures while emulating FSExchangeObjects, attempt to reverse any steps */
-/* already taken. In any case, newSourceRef and newDestRef will refer to the files in whatever */
-/* state and location they ended up in so that both files can be found by the calling code. */
-       
-FSRenameUnicode4Failed:
-
-       /* attempt to rename source file to sourceUniqueName */
-       if ( noErr == FSRenameUnicode(&sourceCurrentRef, sourceUniqueName.length, sourceUniqueName.unicode, kTextEncodingUnknown, newSourceRef) )
-       {
-               BlockMoveData(newSourceRef, &sourceCurrentRef, sizeof(FSRef));
-       }
-
-FSRenameUnicode3Failed:
-
-       /* attempt to restore dest file's catalog information */
-       verify_noerr(FSSetCatalogInfo(&destCurrentRef, kFSCatInfoSettableInfo, &destCatalogInfo));
-
-FSSetCatalogInfo2Failed:
-
-       /* attempt to restore source file's catalog information */
-       verify_noerr(FSSetCatalogInfo(&sourceCurrentRef, kFSCatInfoSettableInfo, &sourceCatalogInfo));
-
-FSSetCatalogInfo1Failed:
-
-       if ( !sameParentDirs )
-       {
-               /* attempt to move dest file back to dest directory */
-               if ( noErr == FSMoveObject(&destCurrentRef, &destParentRef, newDestRef) )
-               {
-                       BlockMoveData(newDestRef, &destCurrentRef, sizeof(FSRef));
-               }
-       }
-
-FSMoveObject2Failed:
-
-       if ( !sameParentDirs )
-       {
-               /* attempt to move source file back to source directory */
-               if ( noErr == FSMoveObject(&sourceCurrentRef, &sourceParentRef, newSourceRef) )
-               {
-                       BlockMoveData(newSourceRef, &sourceCurrentRef, sizeof(FSRef));
-               }
-       }
-
-FSMoveObject1Failed:
-
-       /* attempt to rename dest file to original name */
-       verify_noerr(FSRenameUnicode(&destCurrentRef, destName.length, destName.unicode, destCatalogInfo.textEncodingHint, newDestRef));
-
-FSRenameUnicode2Failed:
-
-       /* attempt to rename source file to original name */
-       verify_noerr(FSRenameUnicode(&sourceCurrentRef, sourceName.length, sourceName.unicode, sourceCatalogInfo.textEncodingHint, newSourceRef));
-
-FSRenameUnicode1Failed:
-GenerateUniqueHFSUniStr2Failed:
-GenerateUniqueHFSUniStr1Failed:
-NotAFile:
-NotSameVolume:
-DestFSGetCatalogInfoFailed:
-SourceFSGetCatalogInfoFailed:
-DetermineSourceVRefNumFailed:  
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- Shared Environment Routines -----
-
-/*****************************************************************************/
-
-OSErr
-FSLockRange(
-       SInt16 refNum,
-       SInt32 rangeLength,
-       SInt32 rangeStart)
-{
-       OSErr                   result;
-       ParamBlockRec   pb;
-
-       pb.ioParam.ioRefNum = refNum;
-       pb.ioParam.ioReqCount = rangeLength;
-       pb.ioParam.ioPosMode = fsFromStart;
-       pb.ioParam.ioPosOffset = rangeStart;
-       result = PBLockRangeSync(&pb);
-       require_noerr(result, PBLockRangeSync);
-       
-PBLockRangeSync:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSUnlockRange(
-       SInt16 refNum,
-       SInt32 rangeLength,
-       SInt32 rangeStart)
-{
-       OSErr                   result;
-       ParamBlockRec   pb;
-
-       pb.ioParam.ioRefNum = refNum;
-       pb.ioParam.ioReqCount = rangeLength;
-       pb.ioParam.ioPosMode = fsFromStart;
-       pb.ioParam.ioPosOffset = rangeStart;
-       result = PBUnlockRangeSync(&pb);
-       require_noerr(result, PBUnlockRangeSync);
-       
-PBUnlockRangeSync:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetDirAccess(
-       const FSRef *ref,
-       SInt32 *ownerID,                /* can be NULL */
-       SInt32 *groupID,                /* can be NULL */
-       SInt32 *accessRights)   /* can be NULL */
-{
-       OSErr                   result;
-       FSSpec                  spec;
-       HParamBlockRec  pb;
-       
-       /* get FSSpec from FSRef */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, NULL, &spec, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* get directory access info for FSSpec */
-       pb.accessParam.ioNamePtr = (StringPtr)spec.name;
-       pb.accessParam.ioVRefNum = spec.vRefNum;
-       pb.fileParam.ioDirID = spec.parID;
-       result = PBHGetDirAccessSync(&pb);
-       require_noerr(result, PBHGetDirAccessSync);
-       
-       /* return the IDs and access rights */
-       if ( NULL != ownerID )
-       {
-               *ownerID = pb.accessParam.ioACOwnerID;
-       }
-       if ( NULL != groupID )
-       {
-               *groupID = pb.accessParam.ioACGroupID;
-       }
-       if ( NULL != accessRights )
-       {
-               *accessRights = pb.accessParam.ioACAccess;
-       }
-       
-PBHGetDirAccessSync:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetDirAccess(
-       const FSRef *ref,
-       SInt32 ownerID,
-       SInt32 groupID,
-       SInt32 accessRights)
-{
-       OSErr                   result;
-       FSSpec                  spec;
-       HParamBlockRec  pb;
-
-       enum
-       {
-               /* Just the bits that can be set */
-               kSetDirAccessSettableMask = (kioACAccessBlankAccessMask +
-                       kioACAccessEveryoneWriteMask + kioACAccessEveryoneReadMask + kioACAccessEveryoneSearchMask +
-                       kioACAccessGroupWriteMask + kioACAccessGroupReadMask + kioACAccessGroupSearchMask +
-                       kioACAccessOwnerWriteMask + kioACAccessOwnerReadMask + kioACAccessOwnerSearchMask)
-       };
-       
-       /* get FSSpec from FSRef */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, NULL, &spec, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* set directory access info for FSSpec */
-       pb.accessParam.ioNamePtr = (StringPtr)spec.name;
-       pb.accessParam.ioVRefNum = spec.vRefNum;
-       pb.fileParam.ioDirID = spec.parID;
-       pb.accessParam.ioACOwnerID = ownerID;
-       pb.accessParam.ioACGroupID = groupID;
-       pb.accessParam.ioACAccess = accessRights & kSetDirAccessSettableMask;
-       result = PBHSetDirAccessSync(&pb);
-       require_noerr(result, PBHSetDirAccessSync);
-       
-PBHSetDirAccessSync:
-FSGetCatalogInfo:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetVolMountInfoSize(
-       FSVolumeRefNum volRefNum,
-       SInt16 *size)
-{
-       OSErr                   result;
-       ParamBlockRec   pb;
-
-       /* check parameters */
-       require_action(NULL != size, BadParameter, result = paramErr);
-       
-       pb.ioParam.ioNamePtr = NULL;
-       pb.ioParam.ioVRefNum = volRefNum;
-       pb.ioParam.ioBuffer = (Ptr)size;
-       result = PBGetVolMountInfoSize(&pb);
-       require_noerr(result, PBGetVolMountInfoSize);
-       
-PBGetVolMountInfoSize:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSGetVolMountInfo(
-       FSVolumeRefNum volRefNum,
-       void *volMountInfo)
-{
-       OSErr                   result;
-       ParamBlockRec   pb;
-
-       /* check parameters */
-       require_action(NULL != volMountInfo, BadParameter, result = paramErr);
-       
-       pb.ioParam.ioNamePtr = NULL;
-       pb.ioParam.ioVRefNum = volRefNum;
-       pb.ioParam.ioBuffer = (Ptr)volMountInfo;
-       result = PBGetVolMountInfo(&pb);
-       require_noerr(result, PBGetVolMountInfo);
-       
-PBGetVolMountInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSVolumeMount(
-       const void *volMountInfo,
-       FSVolumeRefNum *volRefNum)
-{
-       OSErr                   result;
-       ParamBlockRec   pb;
-
-       /* check parameters */
-       require_action(NULL != volRefNum, BadParameter, result = paramErr);
-       
-       pb.ioParam.ioBuffer = (Ptr)volMountInfo;
-       result = PBVolumeMount(&pb);
-       require_noerr(result, PBVolumeMount);
-       
-       /* return the volume reference number */
-       *volRefNum = pb.ioParam.ioVRefNum;
-
-PBVolumeMount:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSMapID(
-       FSVolumeRefNum volRefNum,
-       SInt32 ugID,
-       SInt16 objType,
-       Str31 name)
-{
-       OSErr                   result;
-       HParamBlockRec  pb;
-
-       /* check parameters */
-       require_action(NULL != name, BadParameter, result = paramErr);
-       
-       pb.objParam.ioNamePtr = NULL;
-       pb.objParam.ioVRefNum = volRefNum;
-       pb.objParam.ioObjType = objType;
-       pb.objParam.ioObjNamePtr = name;
-       pb.objParam.ioObjID = ugID;
-       result = PBHMapIDSync(&pb);
-       require_noerr(result, PBHMapIDSync);
-       
-PBHMapIDSync:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSMapName(
-       FSVolumeRefNum volRefNum,
-       ConstStr255Param name,
-       SInt16 objType,
-       SInt32 *ugID)
-{
-       OSErr                   result;
-       HParamBlockRec  pb;
-
-       /* check parameters */
-       require_action(NULL != ugID, BadParameter, result = paramErr);
-       
-       pb.objParam.ioNamePtr = NULL;
-       pb.objParam.ioVRefNum = volRefNum;
-       pb.objParam.ioObjType = objType;
-       pb.objParam.ioObjNamePtr = (StringPtr)name;
-       result = PBHMapNameSync(&pb);
-       require_noerr(result, PBHMapNameSync);
-       
-       /* return the user or group ID */
-       *ugID = pb.objParam.ioObjID;
-       
-PBHMapNameSync:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSCopyFile(
-       const FSRef *srcFileRef,
-       const FSRef *dstDirectoryRef,
-       UniCharCount nameLength,
-       const UniChar *copyName,        /* can be NULL (no rename during copy) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef)                          /* can be NULL */
-{
-       OSErr                                   result;
-       FSSpec                                  srcFileSpec;
-       FSCatalogInfo                   catalogInfo;
-       HParamBlockRec                  pb;
-       Str31                                   hfsName;
-       GetVolParmsInfoBuffer   volParmsInfo;
-       UInt32                                  infoSize;
-       
-       /* get source FSSpec from source FSRef */
-       result = FSGetCatalogInfo(srcFileRef, kFSCatInfoNone, NULL, NULL, &srcFileSpec, NULL);
-       require_noerr(result, FSGetCatalogInfo_srcFileRef);
-       
-       /* Make sure the volume supports CopyFile */
-       result = FSGetVolParms(srcFileSpec.vRefNum, sizeof(GetVolParmsInfoBuffer),
-               &volParmsInfo, &infoSize);
-       require_action((noErr == result) && VolHasCopyFile(&volParmsInfo),
-               NoCopyFileSupport, result = paramErr);
-
-       /* get destination volume reference number and destination directory ID from destination FSRef */
-       result = FSGetCatalogInfo(dstDirectoryRef, kFSCatInfoVolume + kFSCatInfoNodeID,
-               &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo_dstDirectoryRef);
-       
-       /* tell the server to copy the object */
-       pb.copyParam.ioVRefNum = srcFileSpec.vRefNum;
-       pb.copyParam.ioDirID = srcFileSpec.parID;
-       pb.copyParam.ioNamePtr = (StringPtr)srcFileSpec.name;
-       pb.copyParam.ioDstVRefNum = catalogInfo.volume;
-       pb.copyParam.ioNewDirID = (long)catalogInfo.nodeID;
-       pb.copyParam.ioNewName = NULL;
-       if ( NULL != copyName )
-       {
-               result = UnicodeNameGetHFSName(nameLength, copyName, textEncodingHint, false, hfsName);
-               require_noerr(result, UnicodeNameGetHFSName);
-               
-               pb.copyParam.ioCopyName = hfsName;
-       }
-       else
-       {
-               pb.copyParam.ioCopyName = NULL;
-       }
-       result = PBHCopyFileSync(&pb);
-       require_noerr(result, PBHCopyFileSync);
-       
-       if ( NULL != newRef )
-       {
-               verify_noerr(FSMakeFSRef(pb.copyParam.ioDstVRefNum, pb.copyParam.ioNewDirID,
-                       pb.copyParam.ioCopyName, newRef));
-       }
-               
-PBHCopyFileSync:
-UnicodeNameGetHFSName:
-FSGetCatalogInfo_dstDirectoryRef:
-NoCopyFileSupport:
-FSGetCatalogInfo_srcFileRef:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSMoveRename(
-       const FSRef *srcFileRef,
-       const FSRef *dstDirectoryRef,
-       UniCharCount nameLength,
-       const UniChar *moveName,        /* can be NULL (no rename during move) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef)                          /* can be NULL */
-{
-       OSErr                                   result;
-       FSSpec                                  srcFileSpec;
-       FSCatalogInfo                   catalogInfo;
-       HParamBlockRec                  pb;
-       Str31                                   hfsName;
-       GetVolParmsInfoBuffer   volParmsInfo;
-       UInt32                                  infoSize;
-       
-       /* get source FSSpec from source FSRef */
-       result = FSGetCatalogInfo(srcFileRef, kFSCatInfoNone, NULL, NULL, &srcFileSpec, NULL);
-       require_noerr(result, FSGetCatalogInfo_srcFileRef);
-       
-       /* Make sure the volume supports MoveRename */
-       result = FSGetVolParms(srcFileSpec.vRefNum, sizeof(GetVolParmsInfoBuffer),
-               &volParmsInfo, &infoSize);
-       require_action((noErr == result) && VolHasMoveRename(&volParmsInfo),
-               NoMoveRenameSupport, result = paramErr);
-
-       /* get destination volume reference number and destination directory ID from destination FSRef */
-       result = FSGetCatalogInfo(dstDirectoryRef, kFSCatInfoVolume + kFSCatInfoNodeID,
-               &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo_dstDirectoryRef);
-       
-       /* make sure the source and destination are on the same volume */
-       require_action(srcFileSpec.vRefNum == catalogInfo.volume, NotSameVolume, result = diffVolErr);
-       
-       /* tell the server to move and rename the object */
-       pb.copyParam.ioVRefNum = srcFileSpec.vRefNum;
-       pb.copyParam.ioDirID = srcFileSpec.parID;
-       pb.copyParam.ioNamePtr = (StringPtr)srcFileSpec.name;
-       pb.copyParam.ioNewDirID = (long)catalogInfo.nodeID;
-       pb.copyParam.ioNewName = NULL;
-       if ( NULL != moveName )
-       {
-               result = UnicodeNameGetHFSName(nameLength, moveName, textEncodingHint, false, hfsName);
-               require_noerr(result, UnicodeNameGetHFSName);
-               
-               pb.copyParam.ioCopyName = hfsName;
-       }
-       else
-       {
-               pb.copyParam.ioCopyName = NULL;
-       }
-       result = PBHMoveRenameSync(&pb);
-       require_noerr(result, PBHMoveRenameSync);
-       
-       if ( NULL != newRef )
-       {
-               verify_noerr(FSMakeFSRef(pb.copyParam.ioVRefNum, pb.copyParam.ioNewDirID,
-                       pb.copyParam.ioCopyName, newRef));
-       }
-       
-PBHMoveRenameSync:
-UnicodeNameGetHFSName:
-NotSameVolume:
-FSGetCatalogInfo_dstDirectoryRef:
-NoMoveRenameSupport:
-FSGetCatalogInfo_srcFileRef:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- File ID Routines -----
-
-/*****************************************************************************/
-
-OSErr
-FSResolveFileIDRef(
-       FSVolumeRefNum volRefNum,
-       SInt32 fileID,
-       FSRef *ref)
-{
-       OSErr           result;
-       FIDParam        pb;
-       Str255          tempStr;
-       
-       /* check parameters */
-       require_action(NULL != ref, BadParameter, result = paramErr);
-       
-       /* resolve the file ID reference */
-       tempStr[0] = 0;
-       pb.ioNamePtr = tempStr;
-       pb.ioVRefNum = volRefNum;
-       pb.ioFileID = fileID;
-       result = PBResolveFileIDRefSync((HParmBlkPtr)&pb);
-       require_noerr(result, PBResolveFileIDRefSync);
-       
-       /* and then make an FSRef to the file */
-       result = FSMakeFSRef(volRefNum, pb.ioSrcDirID, tempStr, ref);
-       require_noerr(result, FSMakeFSRef);
-       
-FSMakeFSRef:
-PBResolveFileIDRefSync:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSCreateFileIDRef(
-       const FSRef *ref,
-       SInt32 *fileID)
-{
-       OSErr           result;
-       FSSpec          spec;
-       FIDParam        pb;
-       
-       /* check parameters */
-       require_action(NULL != fileID, BadParameter, result = paramErr);
-       
-       /* Get an FSSpec from the FSRef */
-       result = FSGetCatalogInfo(ref, kFSCatInfoNone, NULL, NULL, &spec, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* Create (or get) the file ID reference using the FSSpec */
-       pb.ioNamePtr = (StringPtr)spec.name;
-       pb.ioVRefNum = spec.vRefNum;
-       pb.ioSrcDirID = spec.parID;
-       result = PBCreateFileIDRefSync((HParmBlkPtr)&pb);
-       require((noErr == result) || (fidExists == result) || (afpIDExists == result),
-               PBCreateFileIDRefSync);
-       
-       /* return the file ID reference */
-       *fileID = pb.ioFileID;
-       
-PBCreateFileIDRefSync:
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-#pragma mark ----- Utility Routines -----
-
-/*****************************************************************************/
-
-Ptr
-GetTempBuffer(
-       ByteCount buffReqSize,
-       ByteCount *buffActSize)
-{
-       enum
-       {
-               kSlopMemory = 0x00008000        /* 32K - Amount of free memory to leave when allocating buffers */
-       };
-       
-       Ptr tempPtr;
-       
-       /* check parameters */
-       require_action(NULL != buffActSize, BadParameter, tempPtr = NULL);
-       
-       /* Make request a multiple of 4K bytes */
-       buffReqSize = buffReqSize & 0xfffff000;
-       
-       if ( buffReqSize < 0x00001000 )
-       {
-               /* Request was smaller than 4K bytes - make it 4K */
-               buffReqSize = 0x00001000;
-       }
-       
-       /* Attempt to allocate the memory */
-       tempPtr = NewPtr(buffReqSize);
-       
-       /* If request failed, go to backup plan */
-       if ( (tempPtr == NULL) && (buffReqSize > 0x00001000) )
-       {
-               /*
-               **      Try to get largest 4K byte block available
-               **      leaving some slop for the toolbox if possible
-               */
-               long freeMemory = (FreeMem() - kSlopMemory) & 0xfffff000;
-               
-               buffReqSize = MaxBlock() & 0xfffff000;
-               
-               if ( buffReqSize > freeMemory )
-               {
-                       buffReqSize = freeMemory;
-               }
-               
-               if ( buffReqSize == 0 )
-               {
-                       buffReqSize = 0x00001000;
-               }
-               
-               tempPtr = NewPtr(buffReqSize);
-       }
-       
-       /* Return bytes allocated */
-       if ( tempPtr != NULL )
-       {
-               *buffActSize = buffReqSize;
-       }
-       else
-       {
-               *buffActSize = 0;
-       }
-       
-BadParameter:
-
-       return ( tempPtr );
-}
-
-/*****************************************************************************/
-
-OSErr
-FileRefNumGetFSRef(
-       short refNum,
-       FSRef *ref)
-{
-       return ( FSGetForkCBInfo(refNum, 0, NULL, NULL, NULL, ref, NULL) );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSSetDefault(
-       const FSRef *newDefault,
-       FSRef *oldDefault)
-{
-       OSErr                   result;
-       FSVolumeRefNum  vRefNum;
-       long                    dirID;
-       FSCatalogInfo   catalogInfo;
-       
-       /* check parameters */
-       require_action((NULL != newDefault) && (NULL != oldDefault), BadParameter, result = paramErr);
-       
-       /* Get nodeFlags, vRefNum and dirID (nodeID) of newDefault */
-       result = FSGetCatalogInfo(newDefault,
-               kFSCatInfoNodeFlags + kFSCatInfoVolume + kFSCatInfoNodeID,
-               &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* Make sure newDefault is a directory */
-       require_action(0 != (kFSNodeIsDirectoryMask & catalogInfo.nodeFlags), NewDefaultNotDirectory,
-               result = dirNFErr);
-       
-       /* Get the current working directory. */
-       result = HGetVol(NULL, &vRefNum, &dirID);
-       require_noerr(result, HGetVol);
-       
-       /* Return the oldDefault FSRef */
-       result = FSMakeFSRef(vRefNum, dirID, NULL, oldDefault);
-       require_noerr(result, FSMakeFSRef);
-       
-       /* Set the new current working directory */
-       result = HSetVol(NULL, catalogInfo.volume, catalogInfo.nodeID);
-       require_noerr(result, HSetVol);
-
-HSetVol:
-FSMakeFSRef:
-HGetVol:
-NewDefaultNotDirectory:
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
-
-OSErr
-FSRestoreDefault(
-       const FSRef *oldDefault)
-{
-       OSErr                   result;
-       FSCatalogInfo   catalogInfo;
-       
-       /* check parameters */
-       require_action(NULL != oldDefault, BadParameter, result = paramErr);
-       
-       /* Get nodeFlags, vRefNum and dirID (nodeID) of oldDefault */
-       result = FSGetCatalogInfo(oldDefault,
-               kFSCatInfoNodeFlags + kFSCatInfoVolume + kFSCatInfoNodeID,
-               &catalogInfo, NULL, NULL, NULL);
-       require_noerr(result, FSGetCatalogInfo);
-       
-       /* Make sure oldDefault is a directory */
-       require_action(0 != (kFSNodeIsDirectoryMask & catalogInfo.nodeFlags), OldDefaultNotDirectory,
-               result = dirNFErr);
-       
-       /* Set the current working directory to oldDefault */
-       result = HSetVol(NULL, catalogInfo.volume, catalogInfo.nodeID);
-       require_noerr(result, HSetVol);
-
-HSetVol:
-OldDefaultNotDirectory:
-FSGetCatalogInfo:
-BadParameter:
-
-       return ( result );
-}
-
-/*****************************************************************************/
diff --git a/Source/MoreFilesX.h b/Source/MoreFilesX.h
deleted file mode 100644 (file)
index 00560e9..0000000
+++ /dev/null
@@ -1,1849 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-/*
-       File:           MoreFilesX.h
-
-       Contains:       A collection of useful high-level File Manager routines
-                               which use the HFS Plus APIs wherever possible.
-
-       Version:        MoreFilesX 1.0.1
-
-       Copyright:      Â© 1992-2002 by Apple Computer, Inc., all rights reserved.
-
-       Disclaimer:     IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc.
-                               ("Apple") in consideration of your agreement to the following terms, and your
-                               use, installation, modification or redistribution of this Apple software
-                               constitutes acceptance of these terms.  If you do not agree with these terms,
-                               please do not use, install, modify or redistribute this Apple software.
-
-                               In consideration of your agreement to abide by the following terms, and subject
-                               to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
-                               copyrights in this original Apple software (the "Apple Software"), to use,
-                               reproduce, modify and redistribute the Apple Software, with or without
-                               modifications, in source and/or binary forms; provided that if you redistribute
-                               the Apple Software in its entirety and without modifications, you must retain
-                               this notice and the following text and disclaimers in all such redistributions of
-                               the Apple Software.  Neither the name, trademarks, service marks or logos of
-                               Apple Computer, Inc. may be used to endorse or promote products derived from the
-                               Apple Software without specific prior written permission from Apple.  Except as
-                               expressly stated in this notice, no other rights or licenses, express or implied,
-                               are granted by Apple herein, including but not limited to any patent rights that
-                               may be infringed by your derivative works or by other works in which the Apple
-                               Software may be incorporated.
-
-                               The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
-                               WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
-                               WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-                               PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
-                               COMBINATION WITH YOUR PRODUCTS.
-
-                               IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
-                               CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-                               GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-                               ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
-                               OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
-                               (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
-                               ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-       File Ownership:
-
-               DRI:                            Apple Macintosh Developer Technical Support
-
-               Other Contact:          For bug reports, consult the following page on
-                                                       the World Wide Web:
-                                                               http://developer.apple.com/bugreporter/
-
-               Technology:                     DTS Sample Code
-
-       Writers:
-
-               (JL)    Jim Luther
-
-       Change History (most recent first):
-
-                <3>     4/19/02        JL              [2853905]  Fixed #if test around header includes.
-                <2>     4/19/02        JL              [2853901]  Updated standard disclaimer.
-                <1>     1/25/02        JL              MoreFilesX 1.0
-       
-       Notes:
-               What do those arrows in the documentation for each routine mean?
-                       
-                       --> The parameter is an input
-                       
-                       <-- The parameter is an output. The pointer to the variable
-                               where the output will be returned (must not be NULL).
-                       
-                       <** The parameter is an optional output. If it is not a
-                               NULL pointer, it points to the variable where the output
-                               will be returned. If it is a NULL pointer, the output will
-                               not be returned and will possibly let the routine and the
-                               File Manager do less work. If you don't need an optional output,
-                               don't ask for it.
-                       **> The parameter is an optional input. If it is not a
-                               NULL pointer, it points to the variable containing the
-                               input data. If it is a NULL pointer, the input is not used
-                               and will possibly let the routine and the File Manager
-                               do less work.
-*/
-
-#ifndef __MOREFILESX__
-#define __MOREFILESX__
-
-#ifndef __CARBON__
-       #if defined(__MACH__)
-               #include <Carbon/Carbon.h>
-       #else
-               #include <Carbon.h>
-       #endif
-#endif
-
-#if PRAGMA_ONCE
-#pragma once
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if PRAGMA_IMPORT
-#pragma import on
-#endif
-
-#if PRAGMA_STRUCT_ALIGN
-       #pragma options align=mac68k
-#elif PRAGMA_STRUCT_PACKPUSH
-       #pragma pack(push, 2)
-#elif PRAGMA_STRUCT_PACK
-       #pragma pack(2)
-#endif
-
-/*****************************************************************************/
-
-#ifndef WIN32
-#pragma mark ----- FinderInfo and ExtendedFinderInfo -----
-#endif
-
-/*
- *     FSGetFinderInfo and FSSetFinderInfo use these unions for Finder information.
- */
-
-union FinderInfo
-{
-  FileInfo                             file;
-  FolderInfo                   folder;
-};
-typedef union FinderInfo FinderInfo;
-
-union ExtendedFinderInfo
-{
-  ExtendedFileInfo             file;
-  ExtendedFolderInfo   folder;
-};
-typedef union ExtendedFinderInfo ExtendedFinderInfo;
-
-/*****************************************************************************/
-
-#pragma mark ----- GetVolParmsInfoBuffer Macros -----
-
-/*
- *     Macros to get information out of GetVolParmsInfoBuffer.
- */
-
-/* version 1 field getters */
-#define GetVolParmsInfoVersion(volParms) \
-               ((volParms)->vMVersion)
-#define GetVolParmsInfoAttrib(volParms) \
-               ((volParms)->vMAttrib)
-#define GetVolParmsInfoLocalHand(volParms) \
-               ((volParms)->vMLocalHand)
-#define GetVolParmsInfoServerAdr(volParms) \
-               ((volParms)->vMServerAdr)
-
-/* version 2 field getters (assume zero result if version < 2) */
-#define GetVolParmsInfoVolumeGrade(volParms) \
-               (((volParms)->vMVersion >= 2) ? (volParms)->vMVolumeGrade : 0)
-#define GetVolParmsInfoForeignPrivID(volParms) \
-               (((volParms)->vMVersion >= 2) ? (volParms)->vMForeignPrivID : 0)
-
-/* version 3 field getters (assume zero result if version < 3) */
-#define GetVolParmsInfoExtendedAttributes(volParms) \
-               (((volParms)->vMVersion >= 3) ? (volParms)->vMExtendedAttributes : 0)
-
-/* attribute bits supported by all versions of GetVolParmsInfoBuffer */
-#define VolIsNetworkVolume(volParms) \
-               ((volParms)->vMServerAdr != 0)
-#define VolHasLimitFCBs(volParms) \
-               (((volParms)->vMAttrib & (1L << bLimitFCBs)) != 0)
-#define VolHasLocalWList(volParms) \
-               (((volParms)->vMAttrib & (1L << bLocalWList)) != 0)
-#define VolHasNoMiniFndr(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoMiniFndr)) != 0)
-#define VolHasNoVNEdit(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoVNEdit)) != 0)
-#define VolHasNoLclSync(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoLclSync)) != 0)
-#define VolHasTrshOffLine(volParms) \
-               (((volParms)->vMAttrib & (1L << bTrshOffLine)) != 0)
-#define VolHasNoSwitchTo(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoSwitchTo)) != 0)
-#define VolHasNoDeskItems(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoDeskItems)) != 0)
-#define VolHasNoBootBlks(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoBootBlks)) != 0)
-#define VolHasAccessCntl(volParms) \
-               (((volParms)->vMAttrib & (1L << bAccessCntl)) != 0)
-#define VolHasNoSysDir(volParms) \
-               (((volParms)->vMAttrib & (1L << bNoSysDir)) != 0)
-#define VolHasExtFSVol(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasExtFSVol)) != 0)
-#define VolHasOpenDeny(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasOpenDeny)) != 0)
-#define VolHasCopyFile(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasCopyFile)) != 0)
-#define VolHasMoveRename(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasMoveRename)) != 0)
-#define VolHasDesktopMgr(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasDesktopMgr)) != 0)
-#define VolHasShortName(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasShortName)) != 0)
-#define VolHasFolderLock(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasFolderLock)) != 0)
-#define VolHasPersonalAccessPrivileges(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasPersonalAccessPrivileges)) != 0)
-#define VolHasUserGroupList(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasUserGroupList)) != 0)
-#define VolHasCatSearch(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasCatSearch)) != 0)
-#define VolHasFileIDs(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasFileIDs)) != 0)
-#define VolHasBTreeMgr(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasBTreeMgr)) != 0)
-#define VolHasBlankAccessPrivileges(volParms) \
-               (((volParms)->vMAttrib & (1L << bHasBlankAccessPrivileges)) != 0)
-#define VolSupportsAsyncRequests(volParms) \
-               (((volParms)->vMAttrib & (1L << bSupportsAsyncRequests)) != 0)
-#define VolSupportsTrashVolumeCache(volParms) \
-               (((volParms)->vMAttrib & (1L << bSupportsTrashVolumeCache)) != 0)
-
-/* attribute bits supported by version 3 and greater versions of GetVolParmsInfoBuffer */
-#define VolIsEjectable(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bIsEjectable)) != 0)
-#define VolSupportsHFSPlusAPIs(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsHFSPlusAPIs)) != 0)
-#define VolSupportsFSCatalogSearch(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsFSCatalogSearch)) != 0)
-#define VolSupportsFSExchangeObjects(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsFSExchangeObjects)) != 0)
-#define VolSupports2TBFiles(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupports2TBFiles)) != 0)
-#define VolSupportsLongNames(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsLongNames)) != 0)
-#define VolSupportsMultiScriptNames(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsMultiScriptNames)) != 0)
-#define VolSupportsNamedForks(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsNamedForks)) != 0)
-#define VolSupportsSubtreeIterators(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsSubtreeIterators)) != 0)
-#define VolL2PCanMapFileBlocks(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bL2PCanMapFileBlocks)) != 0)
-#define VolParentModDateChanges(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bParentModDateChanges)) != 0)
-#define VolAncestorModDateChanges(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bAncestorModDateChanges)) != 0)
-#define VolSupportsSymbolicLinks(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bSupportsSymbolicLinks)) != 0)
-#define VolIsAutoMounted(volParms) \
-               ((GetVolParmsInfoExtendedAttributes(volParms) & (1L << bIsAutoMounted)) != 0)
-
-/*****************************************************************************/
-
-#pragma mark ----- userPrivileges Bit Masks and Macros -----
-
-/*
- *     Bit masks and macros to get common information out of userPrivileges byte
- *     returned by FSGetCatalogInfo.
- *
- *     Note:   The userPrivileges byte is the same as the ioACUser byte returned
- *                     by PBGetCatInfo, and is the 1's complement of the user's privileges
- *                     byte returned in ioACAccess by PBHGetDirAccess. That's where the
- *                     ioACUser names came from.
- *
- *                     The userPrivileges are user's effective privileges based on the
- *                     user ID and the groups that user belongs to, and the owner, group,
- *                     and everyone privileges for the given directory.
- */
-
-enum
-{
-       /* mask for just the access restriction bits */
-       kioACUserAccessMask             = (kioACUserNoSeeFolderMask +
-                                                          kioACUserNoSeeFilesMask +
-                                                          kioACUserNoMakeChangesMask),
-       /* common access privilege settings */
-       kioACUserFull                   = 0x00, /* no access restiction bits on */
-       kioACUserNone                   = kioACUserAccessMask, /* all access restiction bits on */
-       kioACUserDropBox                = (kioACUserNoSeeFolderMask +
-                                                          kioACUserNoSeeFilesMask), /* make changes, but not see files or folders */
-       kioACUserBulletinBoard  = kioACUserNoMakeChangesMask /* see files and folders, but not make changes */
-};
-
-
-/* Macros for testing ioACUser bits. */
-
-#define UserIsOwner(userPrivileges) \
-               (((userPrivileges) & kioACUserNotOwnerMask) == 0)
-#define UserHasFullAccess(userPrivileges)      \
-               (((userPrivileges) & (kioACUserAccessMask)) == kioACUserFull)
-#define UserHasDropBoxAccess(userPrivileges)   \
-               (((userPrivileges) & kioACUserAccessMask) == kioACUserDropBox)
-#define UserHasBulletinBoard(userPrivileges)   \
-               (((userPrivileges) & kioACUserAccessMask) == kioACUserBulletinBoard)
-#define UserHasNoAccess(userPrivileges)                \
-               (((userPrivileges) & kioACUserAccessMask) == kioACUserNone)
-
-/*****************************************************************************/
-
-#pragma mark ----- File Access Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSCopyFork
-
-OSErr
-FSCopyFork(
-       SInt16 srcRefNum,
-       SInt16 dstRefNum,
-       void *copyBufferPtr,
-       ByteCount copyBufferSize);
-
-/*
-       The FSCopyFork function copies all data from the source fork to the
-       destination fork of open file forks and makes sure the destination EOF
-       is equal to the source EOF.
-
-       srcRefNum                       --> The source file reference number.
-       dstRefNum                       --> The destination file reference number.
-       copyBufferPtr           --> Pointer to buffer to use during copy. The
-                                                       buffer should be at least 4K-bytes minimum.
-                                                       The larger the buffer, the faster the copy
-                                                       (up to a point).
-       copyBufferSize          --> The size of the copy buffer.
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- Volume Access Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSGetVolParms
-
-OSErr
-FSGetVolParms(
-       FSVolumeRefNum volRefNum,
-       UInt32 bufferSize,
-       GetVolParmsInfoBuffer *volParmsInfo,
-       UInt32 *actualInfoSize);
-
-/*
-       The FSGetVolParms function returns information about the characteristics
-       of a volume. A result of paramErr usually just means the volume doesn't
-       support GetVolParms and the feature you were going to check
-       for isn't available.
-       
-       volRefNum                       --> Volume specification.
-       bufferSize                      --> Size of buffer pointed to by volParmsInfo.
-       volParmsInfo            <-- A GetVolParmsInfoBuffer record where the volume
-                                                       attributes information is returned.
-       actualInfoSize          <-- The number of bytes actually returned
-                                                       in volParmsInfo.
-       
-       __________
-       
-       Also see:       The GetVolParmsInfoBuffer Macros for checking attribute bits
-                               in this file
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetVRefNum
-
-OSErr
-FSGetVRefNum(
-       const FSRef *ref,
-       FSVolumeRefNum *vRefNum);
-
-/*
-       The FSGetVRefNum function determines the volume reference
-       number of a volume from a FSRef.
-
-       ref                                     --> The FSRef.
-       vRefNum                         <-- The volume reference number.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetVInfo
-
-OSErr
-FSGetVInfo(
-       FSVolumeRefNum volume,
-       HFSUniStr255 *volumeName,       /* can be NULL */
-       UInt64 *freeBytes,                      /* can be NULL */
-       UInt64 *totalBytes);            /* can be NULL */
-
-/*
-       The FSGetVInfo function returns the name, available space (in bytes),
-       and total space (in bytes) for the specified volume.
-
-       volume                          --> The volume reference number.
-       volumeName                      <** An optional pointer to a HFSUniStr255.
-                                                       If not NULL, the volume name will be returned in
-                                                       the HFSUniStr255.
-       freeBytes                       <** An optional pointer to a UInt64.
-                                                       If not NULL, the number of free bytes on the
-                                                       volume will be returned in the UInt64.
-       totalBytes                      <** An optional pointer to a UInt64.
-                                                       If not NULL, the total number of bytes on the
-                                                       volume will be returned in the UInt64.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetVolFileSystemID
-
-OSErr
-FSGetVolFileSystemID(
-       FSVolumeRefNum volume,
-       UInt16 *fileSystemID,   /* can be NULL */
-       UInt16 *signature);             /* can be NULL */
-
-/*
-       The FSGetVolFileSystemID function returns the file system ID and signature
-       of a mounted volume. The file system ID identifies the file system
-       that handles requests to a particular volume. The signature identifies the
-       volume type of the volume (for example, FSID 0 is Macintosh HFS Plus, HFS
-       or MFS, where a signature of 0x4244 identifies the volume as HFS).
-       Here's a partial list of file system ID numbers (only Apple's file systems
-       are listed):
-               FSID    File System
-               -----   -----------------------------------------------------
-               $0000   Macintosh HFS Plus, HFS or MFS
-               $0100   ProDOS File System
-               $0101   PowerTalk Mail Enclosures
-               $4147   ISO 9660 File Access (through Foreign File Access)
-               $4242   High Sierra File Access (through Foreign File Access)
-               $464D   QuickTake File System (through Foreign File Access)
-               $4953   Macintosh PC Exchange (MS-DOS)
-               $4A48   Audio CD Access (through Foreign File Access)
-               $4D4B   Apple Photo Access (through Foreign File Access)
-               $6173   AppleShare (later versions of AppleShare only)
-       
-       See the Technical Note "FL 35 - Determining Which File System
-       Is Active" and the "Guide to the File System Manager" for more
-       information.
-       
-       volume                          --> The volume reference number.
-       fileSystemID            <** An optional pointer to a UInt16.
-                                                       If not NULL, the volume's file system ID will
-                                                       be returned in the UInt16.
-       signature                       <** An optional pointer to a UInt16.
-                                                       If not NULL, the volume's signature will
-                                                       be returned in the UInt16.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetMountedVolumes
-
-OSErr
-FSGetMountedVolumes(
-       FSRef ***volumeRefsHandle,      /* pointer to handle of FSRefs */
-       ItemCount *numVolumes);
-
-/*
-       The FSGetMountedVolumes function returns the list of volumes currently
-       mounted in an array of FSRef records. The array of FSRef records is
-       returned in a Handle, volumeRefsHandle, which is allocated by
-       FSGetMountedVolumes. The caller is responsible for disposing of
-       volumeRefsHandle if the FSGetMountedVolumes returns noErr.
-               
-       volumeRefsHandle        <-- Pointer to an FSRef Handle where the array of
-                                                       FSRefs is to be returned.
-       numVolumes                      <-- The number of volumes returned in the array.
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- FSRef/FSpec/Path/Name Conversion Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSRefMakeFSSpec
-
-OSErr
-FSRefMakeFSSpec(
-       const FSRef *ref,
-       FSSpec *spec);
-
-/*
-       The FSRefMakeFSSpec function returns an FSSpec for the file or
-       directory specified by the ref parameter.
-
-       ref                                     --> An FSRef specifying the file or directory.
-       spec                            <-- The FSSpec.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMakeFSRef
-
-OSErr
-FSMakeFSRef(
-       FSVolumeRefNum volRefNum,
-       SInt32 dirID,
-       ConstStr255Param name,
-       FSRef *ref);
-
-/*
-       The FSMakeFSRef function creates an FSRef from the traditional
-       volume reference number, directory ID and pathname inputs. It is
-       functionally equivalent to FSMakeFSSpec followed by FSpMakeFSRef.
-       
-       volRefNum                       --> Volume specification.
-       dirID                           --> Directory specification.
-       name                            --> The file or directory name, or NULL.
-       ref                                     <-- The FSRef.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMakePath
-
-OSStatus
-FSMakePath(
-       SInt16 vRefNum,
-       SInt32 dirID,
-       ConstStr255Param name,
-       UInt8 *path,
-       UInt32 maxPathSize);
-
-/*
-       The FSMakePath function creates a pathname from the traditional volume reference
-       number, directory ID, and pathname inputs. It is functionally equivalent to
-       FSMakeFSSpec, FSpMakeFSRef, FSRefMakePath.
-       
-       volRefNum                       --> Volume specification.
-       dirID                           --> Directory specification.
-       name                            --> The file or directory name, or NULL.
-       path                            <-- A pointer to a buffer which FSMakePath will
-                                                       fill with a C string representing the pathname
-                                                       to the file or directory specified. The format of
-                                                       the pathname returned can be determined with the
-                                                       Gestalt selector gestaltFSAttr's
-                                                       gestaltFSUsesPOSIXPathsForConversion bit.
-                                                       If the gestaltFSUsesPOSIXPathsForConversion bit is
-                                                       clear, the pathname is a Mac OS File Manager full
-                                                       pathname in a C string, and file or directory names
-                                                       in the pathname may be mangled as returned by
-                                                       the File Manager. If the
-                                                       gestaltFSUsesPOSIXPathsForConversion bit is set,
-                                                       the pathname is a UTF8 encoded POSIX absolute
-                                                       pathname in a C string. In either case, the
-                                                       pathname returned can be passed back to
-                                                       FSPathMakeRef to create an FSRef to the file or
-                                                       directory, or FSPathMakeFSSpec to craete an FSSpec
-                                                       to the file or directory.
-       maxPathSize                     --> The size of the path buffer in bytes. If the path
-                                                       buffer is too small for the pathname string,
-                                                       FSMakePath returns pathTooLongErr or
-                                                       buffersTooSmall.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSPathMakeFSSpec
-
-OSStatus
-FSPathMakeFSSpec(
-       const UInt8 *path,
-       FSSpec *spec,
-       Boolean *isDirectory);  /* can be NULL */
-
-/*
-       The FSPathMakeFSSpec function converts a pathname to an FSSpec.
-       
-       path                            --> A pointer to a C String that is the pathname. The
-                                                       format of the pathname you must supply can be
-                                                       determined with the Gestalt selector gestaltFSAttr's
-                                                       gestaltFSUsesPOSIXPathsForConversion bit.
-                                                       If the gestaltFSUsesPOSIXPathsForConversion bit is
-                                                       clear, the pathname must be a Mac OS File Manager
-                                                       full pathname in a C string. If the
-                                                       gestaltFSUsesPOSIXPathsForConversion bit is set,
-                                                       the pathname must be a UTF8 encoded POSIX absolute
-                                                       pathname in a C string.
-       spec                            <-- The FSSpec.
-       isDirectory                     <** An optional pointer to a Boolean.
-                                                       If not NULL, true will be returned in the Boolean
-                                                       if the specified path is a directory, or false will
-                                                       be returned in the Boolean if the specified path is
-                                                       a file.
-*/
-
-/*****************************************************************************/
-
-#pragma mark UnicodeNameGetHFSName
-
-OSErr
-UnicodeNameGetHFSName(
-       UniCharCount nameLength,
-       const UniChar *name,
-       TextEncoding textEncodingHint,
-       Boolean isVolumeName,
-       Str31 hfsName);
-
-/*
-       The UnicodeNameGetHFSName function converts a Unicode string
-       to a Pascal Str31 (or Str27) string using an algorithm similar to that used
-       by the File Manager. Note that if the name is too long or cannot be converted
-       using the given text encoding hint, you will get an error instead of the
-       mangled name that the File Manager would return.
-       
-       nameLength                      --> Number of UniChar in name parameter.
-       name                            --> The Unicode string to convert.
-       textEncodingHint        --> The text encoding hint used for the conversion.
-                                                       You can pass kTextEncodingUnknown to use the
-                                                       "default" textEncodingHint.
-       isVolumeName            --> If true, the output name will be limited to
-                                                       27 characters (kHFSMaxVolumeNameChars). If false,
-                                                       the output name will be limited to 31 characters
-                                                       (kHFSMaxFileNameChars).
-       hfsName                         <-- The hfsName as a Pascal string.
-       
-       __________
-       
-       Also see:       HFSNameGetUnicodeName
-*/
-
-/*****************************************************************************/
-
-#pragma mark HFSNameGetUnicodeName
-
-OSErr
-HFSNameGetUnicodeName(
-       ConstStr31Param hfsName,
-       TextEncoding textEncodingHint,
-       HFSUniStr255 *unicodeName);
-
-/*
-       The HFSNameGetUnicodeName function converts a Pascal Str31 string to an
-       Unicode HFSUniStr255 string using the same routines as the File Manager.
-       
-       hfsName                         --> The Pascal string to convert.
-       textEncodingHint        --> The text encoding hint used for the conversion.
-                                                       You can pass kTextEncodingUnknown to use the
-                                                       "default" textEncodingHint.
-       unicodeName                     <-- The Unicode string.
-       
-       __________
-       
-       Also see:       UnicodeNameGetHFSName
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- File/Directory Manipulation Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSRefValid
-
-Boolean FSRefValid(const FSRef *ref);
-
-/*
-       The FSRefValid function determines if an FSRef is valid. If the result is
-       true, then the FSRef refers to an existing file or directory.
-       
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetParentRef
-
-OSErr
-FSGetParentRef(
-       const FSRef *ref,
-       FSRef *parentRef);
-
-/*
-       The FSGetParentRef function gets the parent directory FSRef of the
-       specified object.
-       
-       Note: FSRefs always point to real file system objects. So, there cannot
-       be a FSRef to the parent of volume root directories. If you call
-       FSGetParentRef with a ref to the root directory of a volume, the
-       function result will be noErr and the parentRef will be invalid (using it
-       for other file system requests will fail).
-
-       ref                                     --> FSRef to a file or directory.
-       parentRef                       <-- The parent directory's FSRef.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetFileDirName
-
-OSErr
-FSGetFileDirName(
-       const FSRef *ref,
-       HFSUniStr255 *outName);
-
-/*
-       The FSGetFileDirName function gets the name of the file or directory
-       specified.
-
-       ref                                     --> FSRef to a file or directory.
-       outName                         <-- The file or directory name.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetNodeID
-
-OSErr
-FSGetNodeID(
-       const FSRef *ref,
-       long *nodeID,                   /* can be NULL */
-       Boolean *isDirectory);  /* can be NULL */
-
-/*
-       The GetNodeIDFromFSRef function gets the node ID number of the
-       file or directory specified (note: the node ID is the directory ID
-       for directories).
-
-       ref                                     --> FSRef to a file or directory.
-       nodeID                          <** An optional pointer to a long.
-                                                       If not NULL, the node ID will be returned in
-                                                       the long.
-       isDirectory                     <** An optional pointer to a Boolean.
-                                                       If not NULL, true will be returned in the Boolean
-                                                       if the object is a directory, or false will be
-                                                       returned in the Boolean if object is a file.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetUserPrivilegesPermissions
-
-OSErr
-FSGetUserPrivilegesPermissions(
-       const FSRef *ref,
-       UInt8 *userPrivileges,          /* can be NULL */
-       UInt32 permissions[4]);         /* can be NULL */
-
-/*
-       The FSGetUserPrivilegesPermissions function gets the userPrivileges and/or
-       permissions of the file or directory specified.
-
-       ref                                     --> FSRef to a file or directory.
-       userPrivileges          <** An optional pointer to a UInt8.
-                                                       If not NULL, the userPrivileges will be returned
-                                                       in the UInt8.
-       permissions                     <** An optional pointer to an UInt32[4] array.
-                                                       If not NULL, the permissions will be returned
-                                                       in the UInt32[4] array.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSCheckLock
-
-OSErr
-FSCheckLock(
-       const FSRef *ref);
-
-/*
-       The FSCheckLock function determines if a file or directory is locked.
-       If FSCheckLock returns noErr, then the file or directory is not locked
-       and the volume it is on is not locked either. If FSCheckLock returns
-       fLckdErr, then the file or directory is locked. If FSCheckLock returns
-       wPrErr, then the volume is locked by hardware (i.e., locked tab on
-       removable media). If FSCheckLock returns vLckdErr, then the volume is
-       locked by software.
-       
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetForkSizes
-
-OSErr
-FSGetForkSizes(
-       const FSRef *ref,
-       UInt64 *dataLogicalSize,        /* can be NULL */
-       UInt64 *rsrcLogicalSize);       /* can be NULL */
-
-/*
-       The FSGetForkSizes returns the size of the data and/or resource fork for
-       the specified file.
-       
-       ref                                     --> FSRef to a file or directory.
-       dataLogicalSize         <** An optional pointer to a UInt64.
-                                                       If not NULL, the data fork's size will be
-                                                       returned in the UInt64.
-       rsrcLogicalSize         <** An optional pointer to a UInt64.
-                                                       If not NULL, the resource fork's size will be
-                                                       returned in the UInt64.
-       
-       __________
-       
-       Also see:       FSGetTotalForkSizes
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetTotalForkSizes
-
-OSErr
-FSGetTotalForkSizes(
-       const FSRef *ref,
-       UInt64 *totalLogicalSize,       /* can be NULL */
-       UInt64 *totalPhysicalSize,      /* can be NULL */
-       ItemCount *forkCount);          /* can be NULL */
-
-/*
-       The FSGetTotalForkSizes returns the total logical size and/or the total
-       physical size of the specified file (i.e., it adds the sizes of all file
-       forks). It optionally returns the number of file forks.
-       
-       ref                                     --> FSRef to a file or directory.
-       totalLogicalSize        <** An optional pointer to a UInt64.
-                                                       If not NULL, the sum of all fork logical sizes
-                                                       will be returned in the UInt64.
-       totalPhysicalSize       <** An optional pointer to a UInt64.
-                                                       If not NULL, the sum of all fork physical sizes
-                                                       will be returned in the UInt64.
-       forkCount                       <** An optional pointer to a ItemCount.
-                                                       If not NULL, the number of file forks
-                                                       will be returned in the ItemCount.
-       
-       __________
-       
-       Also see:       FSGetForkSizes
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSBumpDate
-
-OSErr
-FSBumpDate(
-       const FSRef *ref);
-
-/*
-       The FSBumpDate function changes the content modification date of a file
-       or directory to the current date/time. If the content modification date
-       is already equal to the current date/time, then add one second to the
-       content modification date.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetFinderInfo
-
-OSErr
-FSGetFinderInfo(
-       const FSRef *ref,
-       FinderInfo *info,                                       /* can be NULL */
-       ExtendedFinderInfo *extendedInfo,       /* can be NULL */
-       Boolean *isDirectory);                          /* can be NULL */
-
-/*
-       The FSGetFinderInfo function gets the finder information for a file or
-       directory.
-
-       ref                                     --> FSRef to a file or directory.
-       info                            <** An optional pointer to a FinderInfo.
-                                                       If not NULL, the FileInfo (if ref is a file) or
-                                                       the FolderInfo (if ref is a folder) will be
-                                                       returned in the FinderInfo.
-       extendedInfo            <** An optional pointer to a ExtendedFinderInfo.
-                                                       If not NULL, the ExtendedFileInfo (if ref is a file)
-                                                       or the ExtendedFolderInfo (if ref is a folder) will
-                                                       be returned in the ExtendedFinderInfo.
-       isDirectory                     <** An optional pointer to a Boolean.
-                                                       If not NULL, true will be returned in the Boolean
-                                                       if the object is a directory, or false will be
-                                                       returned in the Boolean if object is a file.
-
-       __________
-
-       Also see:       FSSetFinderInfo
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetFinderInfo
-
-OSErr
-FSSetFinderInfo(
-       const FSRef *ref,
-       const FinderInfo *info,                                         /* can be NULL */
-       const ExtendedFinderInfo *extendedInfo);        /* can be NULL */
-
-/*
-       The FSSetFinderInfo function sets the finder information for a file or
-       directory.
-
-       ref                                     --> FSRef to a file or directory.
-       info                            **> A pointer to a FinderInfo record with the new
-                                                       FileInfo (if ref is a file) or new FolderInfo
-                                                       (if ref is a folder), or NULL if the FinderInfo
-                                                       is not to be changed.
-       extendedInfo            **> A pointer to a FinderInfo record with the new
-                                                       ExtendedFileInfo (if ref is a file) or new
-                                                       ExtendedFolderInfo (if ref is a folder), or NULL
-                                                       if the ExtendedFinderInfo is not to be changed.
-               
-       __________
-
-       Also see:       FSGetFinderInfo
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSChangeCreatorType
-
-OSErr
-FSChangeCreatorType(
-       const FSRef *ref,
-       OSType fileCreator,
-       OSType fileType);
-
-/*
-       The FSChangeCreatorType function changes the creator and/or file type of a file.
-
-       ref                                     --> FSRef to a file.
-       creator                         --> The new creator type or 0x00000000 to leave
-                                                       the creator type alone.
-       fileType                        --> The new file type or 0x00000000 to leave the
-                                                       file type alone.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSChangeFinderFlags
-
-OSErr
-FSChangeFinderFlags(
-       const FSRef *ref,
-       Boolean setBits,
-       UInt16 flagBits);
-
-/*
-       The FSChangeFinderFlags function sets or clears flag bits in
-       the finderFlags field of a file's FileInfo record or a
-       directory's FolderInfo record.
-
-       ref                                     --> FSRef to a file or directory.
-       setBits                         --> If true, then set the bits specified in flagBits.
-                                                       If false, then clear the bits specified in flagBits.
-       flagBits                        --> The flagBits parameter specifies which Finder Flag
-                                                       bits to set or clear. If a bit in flagBits is set,
-                                                       then the same bit in fdFlags is either set or
-                                                       cleared depending on the state of the setBits
-                                                       parameter.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetInvisible
-
-OSErr
-FSSetInvisible(
-       const FSRef *ref);
-
-#pragma mark FSClearInvisible
-
-OSErr
-FSClearInvisible(
-       const FSRef *ref);
-
-/*
-       The FSSetInvisible and FSClearInvisible functions set or clear the
-       kIsInvisible bit in the finderFlags field of the specified file or
-       directory's finder information.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetNameLocked
-
-OSErr
-FSSetNameLocked(
-       const FSRef *ref);
-
-#pragma mark FSClearNameLocked
-
-OSErr
-FSClearNameLocked(
-       const FSRef *ref);
-
-/*
-       The FSSetNameLocked and FSClearNameLocked functions set or clear the
-       kNameLocked bit bit in the finderFlags field of the specified file or
-       directory's finder information.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetIsStationery
-
-OSErr
-FSSetIsStationery(
-       const FSRef *ref);
-
-#pragma mark FSClearIsStationery
-
-OSErr
-FSClearIsStationery(
-       const FSRef *ref);
-
-/*
-       The FSSetIsStationery and FSClearIsStationery functions set or clear the
-       kIsStationery bit bit in the finderFlags field of the specified file or
-       directory's finder information.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetHasCustomIcon
-
-OSErr
-FSSetHasCustomIcon(
-       const FSRef *ref);
-
-#pragma mark FSClearHasCustomIcon
-
-OSErr
-FSClearHasCustomIcon(
-       const FSRef *ref);
-
-/*
-       The FSSetHasCustomIcon and FSClearHasCustomIcon functions set or clear the
-       kHasCustomIcon bit bit in the finderFlags field of the specified file or
-       directory's finder information.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSClearHasBeenInited
-
-OSErr
-FSClearHasBeenInited(
-       const FSRef *ref);
-
-/*
-       The FSClearHasBeenInited function clears the kHasBeenInited bit in the
-       finderFlags field of the specified file or directory's finder information.
-       
-       Note:   There is no FSSetHasBeenInited function because ONLY the Finder
-                       should set the kHasBeenInited bit.
-
-       ref                                     --> FSRef to a file or directory.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSCopyFileMgrAttributes
-
-OSErr
-FSCopyFileMgrAttributes(
-       const FSRef *sourceRef,
-       const FSRef *destinationRef,
-       Boolean copyLockBit);
-
-/*
-       The CopyFileMgrAttributes function copies all File Manager attributes
-       from the source file or directory to the destination file or directory.
-       If copyLockBit is true, then set the locked state of the destination
-       to match the source.
-
-       sourceRef                       --> FSRef to a file or directory.
-       destinationRef          --> FSRef to a file or directory.
-       copyLockBit                     --> If true, set the locked state of the destination
-                                                       to match the source.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMoveRenameObjectUnicode
-
-OSErr
-FSMoveRenameObjectUnicode(
-       const FSRef *ref,
-       const FSRef *destDirectory,
-       UniCharCount nameLength,
-       const UniChar *name,                    /* can be NULL (no rename during move) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef);                                 /* if function fails along the way, newRef is final location of file */
-
-/*
-       The FSMoveRenameObjectUnicode function moves a file or directory and
-       optionally renames it.  The source and destination locations must be on
-       the same volume.
-       
-       Note:   If the input ref parameter is invalid, this call will fail and
-                       newRef, like ref, will be invalid.
-
-       ref                                     --> FSRef to a file or directory.
-       destDirectory           --> FSRef to the destination directory.
-       nameLength                      --> Number of UniChar in name parameter.
-       name                            --> An Unicode string with the new name for the
-                                                       moved object, or NULL if no rename is wanted.
-       textEncodingHint        --> The text encoding hint used for the rename.
-                                                       You can pass kTextEncodingUnknown to use the
-                                                       "default" textEncodingHint.
-       newRef                          <-- The new FSRef of the object moved. Note that if
-                                                       this function fails at any step along the way,
-                                                       newRef is still then final location of the object.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSDeleteContainerContents
-
-OSErr
-FSDeleteContainerContents(
-       const FSRef *container);
-
-/*
-       The FSDeleteContainerContents function deletes the contents of a container
-       directory. All files and subdirectories in the specified container are
-       deleted. If a locked file or directory is encountered, it is unlocked and
-       then deleted. If any unexpected errors are encountered,
-       FSDeleteContainerContents quits and returns to the caller.
-       
-       container                       --> FSRef to a directory.
-       
-       __________
-       
-       Also see:       FSDeleteContainer
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSDeleteContainer
-
-OSErr
-FSDeleteContainer(
-       const FSRef *container);
-
-/*
-       The FSDeleteContainer function deletes a container directory and its contents.
-       All files and subdirectories in the specified container are deleted.
-       If a locked file or directory is encountered, it is unlocked and then
-       deleted.  After deleting the container's contents, the container is
-       deleted. If any unexpected errors are encountered, FSDeleteContainer
-       quits and returns to the caller.
-       
-       container                       --> FSRef to a directory.
-       
-       __________
-       
-       Also see:       FSDeleteContainerContents
-*/
-
-/*****************************************************************************/
-
-#pragma mark IterateContainerFilterProcPtr
-
-typedef CALLBACK_API( Boolean , IterateContainerFilterProcPtr ) (
-       Boolean containerChanged,
-       ItemCount currentLevel,
-       const FSCatalogInfo *catalogInfo,
-       const FSRef *ref,
-       const FSSpec *spec,
-       const HFSUniStr255 *name,
-       void *yourDataPtr);
-
-/*
-       This is the prototype for the IterateContainerFilterProc function which
-       is called once for each file and directory found by FSIterateContainer.
-       The IterateContainerFilterProc can use the read-only data it receives for
-       whatever it wants.
-
-       The result of the IterateContainerFilterProc function indicates if
-       iteration should be stopped. To stop iteration, return true; to continue
-       iteration, return false.
-
-       The yourDataPtr parameter can point to whatever data structure you might
-       want to access from within the IterateContainerFilterProc.
-
-       containerChanged        --> Set to true if the container's contents changed
-                                                       during iteration.
-       currentLevel            --> The current recursion level into the container.
-                                                       1 = the container, 2 = the container's immediate
-                                                       subdirectories, etc.
-       catalogInfo                     --> The catalog information for the current object.
-                                                       Only the fields requested by the whichInfo
-                                                       parameter passed to FSIterateContainer are valid.
-       ref                                     --> The FSRef to the current object.
-       spec                            --> The FSSpec to the current object if the wantFSSpec
-                                                       parameter passed to FSIterateContainer is true.
-       name                            --> The name of the current object if the wantName
-                                                       parameter passed to FSIterateContainer is true.
-       yourDataPtr                     --> An optional pointer to whatever data structure you
-                                                       might want to access from within the
-                                                       IterateFilterProc.
-       result                          <-- To stop iteration, return true; to continue
-                                                       iteration, return false.
-
-       __________
-
-       Also see:       FSIterateContainer
-*/
-
-/*****************************************************************************/
-
-#pragma mark CallIterateContainerFilterProc
-
-#define CallIterateContainerFilterProc(userRoutine, containerChanged, currentLevel, catalogInfo, ref, spec, name, yourDataPtr) \
-       (*(userRoutine))((containerChanged), (currentLevel), (catalogInfo), (ref), (spec), (name), (yourDataPtr))
-
-/*****************************************************************************/
-
-#pragma mark FSIterateContainer
-
-OSErr
-FSIterateContainer(
-       const FSRef *container,
-       ItemCount maxLevels,
-       FSCatalogInfoBitmap whichInfo,
-       Boolean wantFSSpec,
-       Boolean wantName,
-       IterateContainerFilterProcPtr iterateFilter,
-       void *yourDataPtr);
-
-/*
-       The FSIterateContainer function performs a recursive iteration (scan) of the
-       specified container directory and calls your IterateContainerFilterProc
-       function once for each file and directory found.
-
-       The maxLevels parameter lets you control how deep the recursion goes.
-       If maxLevels is 1, FSIterateContainer only scans the specified directory;
-       if maxLevels is 2, FSIterateContainer scans the specified directory and
-       one subdirectory below the specified directory; etc. Set maxLevels to
-       zero to scan all levels.
-
-       The yourDataPtr parameter can point to whatever data structure you might
-       want to access from within your IterateContainerFilterProc.
-
-       container                       --> The FSRef to the container directory to iterate.
-       maxLevels                       --> Maximum number of directory levels to scan or
-                                                       zero to scan all directory levels.
-       whichInfo                       --> The fields of the FSCatalogInfo you wish to get.
-       wantFSSpec                      --> Set to true if you want the FSSpec to each
-                                                       object passed to your IterateContainerFilterProc.
-       wantName                        --> Set to true if you want the name of each
-                                                       object passed to your IterateContainerFilterProc.
-       iterateFilter           --> A pointer to the IterateContainerFilterProc you
-                                                       want called once for each file and directory found
-                                                       by FSIterateContainer.
-       yourDataPtr                     --> An optional pointer to whatever data structure you
-                                                       might want to access from within the
-                                                       IterateFilterProc.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetDirectoryItems
-
-OSErr
-FSGetDirectoryItems(
-       const FSRef *container,
-       FSRef ***refsHandle,    /* pointer to handle of FSRefs */
-       ItemCount *numRefs,
-       Boolean *containerChanged);
-
-/*
-       The FSGetDirectoryItems function returns the list of items in the specified
-       container. The array of FSRef records is returned in a Handle, refsHandle,
-       which is allocated by FSGetDirectoryItems. The caller is responsible for
-       disposing of refsHandle if the FSGetDirectoryItems returns noErr.
-               
-       container                       --> FSRef to a directory.
-       refsHandle                      <-- Pointer to an FSRef Handle where the array of
-                                                       FSRefs is to be returned.
-       numRefs                         <-- The number of FSRefs returned in the array.
-       containerChanged        <-- Set to true if the container changes while the
-                                                       list of items is being obtained.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSExchangeObjectsCompat
-
-OSErr
-FSExchangeObjectsCompat(
-       const FSRef *sourceRef,
-       const FSRef *destRef,
-       FSRef *newSourceRef,
-       FSRef *newDestRef);
-
-/*
-       The FSExchangeObjectsCompat function exchanges the data between two files.
-       
-       The FSExchangeObjectsCompat function is an enhanced version of
-       FSExchangeObjects function. The two enhancements FSExchangeObjectsCompat
-       provides are:
-       
-       1,      FSExchangeObjectsCompat will work on volumes which do not support
-               FSExchangeObjects. FSExchangeObjectsCompat does this by emulating
-               FSExchangeObjects through a series of File Manager operations. If
-               there is a failure at any step along the way, FSExchangeObjectsCompat
-               attempts to undo any steps already taken to leave the files in their
-               original state in their original locations.
-               
-       2.      FSExchangeObjectsCompat returns new FSRefs to the source and
-               destination files. Note that if this function fails at any step along
-               the way, newSourceRef and newDestRef still give you access to the final
-               locations of the files being exchanged -- even if they are renamed or
-               not in their original locations.
-
-       sourceRef                       --> FSRef to the source file.
-       destRef                         --> FSRef to the destination file.
-       newSourceRef            <-- The new FSRef to the source file.
-       newDestRef                      <-- The new FSRef to the destination file.
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- Shared Environment Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSLockRange
-
-OSErr
-FSLockRange(
-       SInt16 refNum,
-       SInt32 rangeLength,
-       SInt32 rangeStart);
-
-/*
-       The LockRange function locks (denies access to) a portion of a file
-       that was opened with shared read/write permission.
-
-       refNum                          --> The file reference number of an open file.
-       rangeLength                     --> The number of bytes in the range.
-       rangeStart                      --> The starting byte in the range to lock.
-
-       __________
-
-       Also see:       UnlockRange
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSUnlockRange
-
-OSErr
-FSUnlockRange(
-       SInt16 refNum,
-       SInt32 rangeLength,
-       SInt32 rangeStart);
-
-/*
-       The UnlockRange function unlocks (allows access to) a previously locked
-       portion of a file that was opened with shared read/write permission.
-
-       refNum                          --> The file reference number of an open file.
-       rangeLength                     --> The number of bytes in the range.
-       rangeStart                      --> The starting byte in the range to unlock.
-
-       __________
-
-       Also see:       LockRange
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetDirAccess
-
-OSErr
-FSGetDirAccess(
-       const FSRef *ref,
-       SInt32 *ownerID,                /* can be NULL */
-       SInt32 *groupID,                /* can be NULL */
-       SInt32 *accessRights);  /* can be NULL */
-
-/*
-       The FSGetDirAccess function retrieves the directory access control
-       information for a directory on a shared volume.
-
-       ref                                     --> An FSRef specifying the directory.
-       ownerID                         <** An optional pointer to a SInt32.
-                                                       If not NULL, the directory's owner ID
-                                                       will be returned in the SInt32.
-       groupID                         <** An optional pointer to a SInt32.
-                                                       If not NULL, the directory's group ID, or 0
-                                                       if no group affiliation, will be returned in
-                                                       the SInt32.
-       accessRights            <** An optional pointer to a SInt32.
-                                                       If not NULL, the directory's access rights
-                                                       will be returned in the SInt32.
-
-       __________
-
-       Also see:       FSSetDirAccess, FSMapID, FSMapName
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetDirAccess
-
-OSErr
-FSSetDirAccess(
-       const FSRef *ref,
-       SInt32 ownerID,
-       SInt32 groupID,
-       SInt32 accessRights);
-
-/*
-       The FSpSetDirAccess function changes the directory access control
-       information for a directory on a shared volume. You must be the owner of
-       a directory to change its access control information.
-       
-       ref                                     --> An FSRef specifying the directory.
-       ownerID                         --> The directory's owner ID.
-       groupID                         --> The directory's group ID or 0 if no group affiliation.
-       accessRights            --> The directory's access rights.
-       
-       __________
-       
-       Also see:       FSGetDirAccess, FSMapID, FSMapName
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetVolMountInfoSize
-
-OSErr
-FSGetVolMountInfoSize(
-       FSVolumeRefNum volRefNum,
-       SInt16 *size);
-
-/*
-       The FSGetVolMountInfoSize function determines the how much space the
-       program needs to allocate for a volume mounting information record.
-
-       volRefNum                       --> Volume specification.
-       size                            <-- The space needed (in bytes) of the volume
-                                                       mounting information record.
-
-       __________
-
-       Also see:       FSGetVolMountInfo, VolumeMount
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSGetVolMountInfo
-
-OSErr
-FSGetVolMountInfo(
-       FSVolumeRefNum volRefNum,
-       void *volMountInfo);
-
-/*
-       The FSGetVolMountInfo function retrieves a volume mounting information
-       record containing all the information needed to mount the volume,
-       except for passwords.
-
-       volRefNum                       --> Volume specification.
-       volMountInfo            <-- The volume mounting information.
-
-       __________
-
-       Also see:       FSGetVolMountInfoSize, VolumeMount
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSVolumeMount
-
-OSErr
-FSVolumeMount(
-       const void *volMountInfo,
-       FSVolumeRefNum *volRefNum);
-
-/*
-       The VolumeMount function mounts a volume using a volume mounting
-       information record.
-
-       volMountInfo            --> A volume mounting information record.
-       volRefNum                       <-- The volume reference number.
-
-       __________
-
-       Also see:       FSGetVolMountInfoSize, FSGetVolMountInfo
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMapID
-
-OSErr
-FSMapID(
-       FSVolumeRefNum volRefNum,
-       SInt32 ugID,
-       SInt16 objType,
-       Str31 name);
-
-/*
-       The FSMapID function determines the name of a user or group if you know
-       the user or group ID.
-
-       volRefNum                       --> Volume specification.
-       objType                         --> The mapping function code:
-                                                       kOwnerID2Name to map a user ID to a user name
-                                                       kGroupID2Name to map a group ID to a group name
-       name                            <** An optional pointer to a buffer (minimum Str31).
-                                                       If not NULL, the user or group name
-                                                       will be returned in the buffer.
-
-       __________
-
-       Also see:       FSGetDirAccess, FSSetDirAccess, FSMapName
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMapName
-
-OSErr
-FSMapName(
-       FSVolumeRefNum volRefNum,
-       ConstStr255Param name,
-       SInt16 objType,
-       SInt32 *ugID);
-
-/*
-       The FSMapName function determines the user or group ID if you know the
-       user or group name.
-       
-       volRefNum                       --> Volume specification.
-       name                            --> The user or group name.
-       objType                         --> The mapping function code:
-                                                       kOwnerName2ID to map a user name to a user ID
-                                                       kGroupName2ID to map a user name to a group ID
-       ugID                            <-- The user or group ID.
-
-       __________
-       
-       Also see:       FSGetDirAccess, FSSetDirAccess, FSMapID
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSCopyFile
-
-OSErr
-FSCopyFile(
-       const FSRef *srcFileRef,
-       const FSRef *dstDirectoryRef,
-       UniCharCount nameLength,
-       const UniChar *copyName,        /* can be NULL (no rename during copy) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef);                         /* can be NULL */
-
-/*
-       The FSCopyFile function duplicates a file and optionally renames it.
-       The source and destination volumes must be on the same file server.
-       This function instructs the server to copy the file.
-       
-       srcFileRef                      --> An FSRef specifying the source file.
-       dstDirectoryRef         --> An FSRef specifying the destination directory.
-       nameLength                      --> Number of UniChar in copyName parameter (ignored
-                                                       if copyName is NULL).
-       copyName                        --> Points to the new file name if the file is to be
-                                                       renamed, or NULL if the file isn't to be renamed.
-       textEncodingHint        --> The text encoding hint used for the rename.
-                                                       You can pass kTextEncodingUnknown to use the
-                                                       "default" textEncodingHint.
-       newRef                          <** An optional pointer to a FSRef.
-                                                       If not NULL, the FSRef of the duplicated file
-                                                       will be returned in the FSRef.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSMoveRename
-
-OSErr
-FSMoveRename(
-       const FSRef *srcFileRef,
-       const FSRef *dstDirectoryRef,
-       UniCharCount nameLength,
-       const UniChar *moveName,        /* can be NULL (no rename during move) */
-       TextEncoding textEncodingHint,
-       FSRef *newRef);                         /* can be NULL */
-
-/*
-       The FSMoveRename function moves a file or directory (object), and
-       optionally renames it. The source and destination locations must be on
-       the same shared volume.
-       
-       srcFileRef                      --> An FSRef specifying the source file.
-       dstDirectoryRef         --> An FSRef specifying the destination directory.
-       nameLength                      --> Number of UniChar in moveName parameter (ignored
-                                                       if copyName is NULL)
-       moveName                        --> Points to the new object name if the object is to be
-                                                       renamed, or NULL if the object isn't to be renamed.
-       textEncodingHint        --> The text encoding hint used for the rename.
-                                                       You can pass kTextEncodingUnknown to use the
-                                                       "default" textEncodingHint.
-       newRef                          <** An optional pointer to a FSRef.
-                                                       If not NULL, the FSRef of the moved object
-                                                       will be returned in the FSRef.
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- File ID Routines -----
-
-/*****************************************************************************/
-
-#pragma mark FSResolveFileIDRef
-
-OSErr
-FSResolveFileIDRef(
-       FSVolumeRefNum volRefNum,
-       SInt32 fileID,
-       FSRef *ref);
-
-/*
-       The FSResolveFileIDRef function returns an FSRef for the file with the
-       specified file ID reference.
-
-       volRefNum                       --> Volume specification.
-       fileID                          --> The file ID reference.
-       ref                                     <-- The FSRef for the file ID reference.
-
-       __________
-
-       Also see:       FSCreateFileIDRef, FSDeleteFileIDRef
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSCreateFileIDRef
-
-OSErr
-FSCreateFileIDRef(
-       const FSRef *ref,
-       SInt32 *fileID);
-
-/*
-       The FSCreateFileIDRef function creates a file ID reference for the
-       specified file, or if a file ID reference already exists, supplies
-       the file ID reference and returns the result code fidExists or afpIDExists.
-
-       ref                                     --> The FSRef for the file.
-       fileID                          <-- The file ID reference (if result is noErr,
-                                                       fidExists, or afpIDExists).
-
-       __________
-
-       Also see:       GetFSRefFromFileIDRef, FSDeleteFileIDRef
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSDeleteFileIDRef
-
-/*
-       Why is there no FSDeleteFileIDRef routine? There are two reasons:
-       
-       1.      Since Mac OS 8.1, PBDeleteFileIDRef hasn't deleted file ID references.
-               On HFS volumes, deleting a file ID reference breaks aliases (which
-               use file ID references to track files as they are moved around on a
-               volume) and file ID references are automatically deleted when the file
-               they refer to is deleted. On HFS Plus volumes, file ID references are
-               always created when a file is created, deleted when the file is deleted,
-               and cannot be deleted at any other time.
-               
-       2.      PBDeleteFileIDRef causes a memory access fault under Mac OS X 10.0
-               through 10.1.x. While this will be fixed in a future release, the
-               implementation, like the Mac OS 8/9 implementation, does not delete
-               file ID references.
-               
-       __________
-
-       Also see:       GetFSRefFromFileIDRef, FSCreateFileIDRef
-*/
-
-/*****************************************************************************/
-
-#pragma mark ----- Utility Routines -----
-
-/*****************************************************************************/
-
-#pragma mark GetTempBuffer
-
-Ptr
-GetTempBuffer(
-       ByteCount buffReqSize,
-       ByteCount *buffActSize);
-
-/*
-       The GetTempBuffer function allocates a temporary buffer for file system
-       operations which is at least 4K bytes and a multiple of 4K bytes.
-       
-       buffReqSize                     --> Size you'd like the buffer to be.
-       buffActSize                     <-- The size of the buffer allocated.
-       function result         <-- Pointer to memory allocated, or NULL if no memory
-                                                       was available. The caller is responsible for
-                                                       disposing of this buffer with DisposePtr.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FileRefNumGetFSRef
-
-OSErr
-FileRefNumGetFSRef(
-       short refNum,
-       FSRef *ref);
-
-/*
-       The FileRefNumGetFSRef function gets the FSRef of an open file.
-
-       refNum                          --> The file reference number of an open file.
-       ref                                     <-- The FSRef to the open file.
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSSetDefault
-
-OSErr
-FSSetDefault(
-       const FSRef *newDefault,
-       FSRef *oldDefault);
-
-/*
-       The FSSetDefault function sets the current working directory to the
-       directory specified by newDefault. The previous current working directory
-       is returned in oldDefault and must be used to restore the current working
-       directory to its previous state with the FSRestoreDefault function.
-       These two functions are designed to be used as a wrapper around
-       Standard I/O routines where the location of the file is implied to be the
-       current working directory. This is how you should use these functions:
-       
-               result = FSSetDefault(&newDefault, &oldDefault);
-               if ( noErr == result )
-               {
-                       // call the Stdio functions like remove, rename,
-                       // fopen, freopen, etc here!
-
-                       result = FSRestoreDefault(&oldDefault);
-               }
-       
-       newDefault                      --> An FSRef that specifies the new current working
-                                                       directory.
-       oldDefault                      <-- The previous current working directory's FSRef.
-       
-       __________
-       
-       Also see:       FSRestoreDefault
-*/
-
-/*****************************************************************************/
-
-#pragma mark FSRestoreDefault
-
-OSErr
-FSRestoreDefault(
-       const FSRef *oldDefault);
-
-/*
-       The FSRestoreDefault function restores the current working directory
-       to the directory specified by oldDefault. The oldDefault parameter was
-       previously obtained from the FSSetDefault function.
-       These two functions are designed to be used as a wrapper around
-       Standard I/O routines where the location of the file is implied to be the
-       current working directory. This is how you should use these functions:
-       
-               result = FSSetDefault(&newDefault, &oldDefault);
-               if ( noErr == result )
-               {
-                       // call the Stdio functions like remove, rename,
-                       // fopen, freopen, etc here!
-
-                       result = FSRestoreDefault(&oldDefault);
-               }
-               
-       oldDefault                      --> The FSRef of the location to restore.
-       
-       __________
-       
-       Also see:       FSSetDefault
-*/
-
-/*****************************************************************************/
-
-#if PRAGMA_STRUCT_ALIGN
-       #pragma options align=reset
-#elif PRAGMA_STRUCT_PACKPUSH
-       #pragma pack(pop)
-#elif PRAGMA_STRUCT_PACK
-       #pragma pack()
-#endif
-
-#ifdef PRAGMA_IMPORT_OFF
-#pragma import off
-#elif PRAGMA_IMPORT
-#pragma import reset
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MOREFILESX__ */
-
-
diff --git a/Source/OpenGL_Full_Screen.cpp b/Source/OpenGL_Full_Screen.cpp
deleted file mode 100644 (file)
index bbd3696..0000000
+++ /dev/null
@@ -1,1793 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-#include "Game.h"
-#include "nommgr.h"
-
-extern bool buttons[3];
-extern float multiplier;
-extern float screenwidth,screenheight;
-extern float sps;
-extern float realmultiplier;
-extern int slomo;
-extern bool ismotionblur;
-extern float usermousesensitivity;
-extern int detail;
-extern bool floatjump;
-extern bool cellophane;
-extern int terraindetail;
-extern int texdetail;
-extern int bloodtoggle;
-extern bool osx;
-extern bool autoslomo;
-extern bool foliage;
-extern bool musictoggle;
-extern bool trilinear;
-extern float gamespeed;
-extern int difficulty;
-extern bool damageeffects;
-extern int numplayers;
-extern bool decals;
-extern bool invertmouse;
-extern bool texttoggle;
-extern bool ambientsound;
-extern bool mousejump;
-extern bool freeze;
-extern Person player[maxplayers];
-extern bool vblsync;
-extern bool stillloading;
-extern bool showpoints;
-extern bool alwaysblur;
-extern bool immediate;
-extern bool velocityblur;
-extern bool debugmode;
-extern int mainmenu;
-extern int kBitsPerPixel;
-extern float slomospeed;
-extern float slomofreq;
-extern float oldgamespeed;
-
- #define kUseAGLFullScreenX 1
- #define kUseFades 1
-// system includes ----------------------------------------------------------
-
-#ifdef __APPLE_CC__
-    #include "Carbon Include.h"
-    #include <Carbon/Carbon.h>
-    
-    #include <DrawSprocket/DrawSprocket.h>
-       #include <AGL/agl.h>
-       #include <AGL/aglRenderers.h>
-       #include <OpenGL/gl.h>
-       #include <OpenGL/glu.h>
-#else
-    #include <DrawSprocket.h>
-    
-    #include <Devices.h>
-    #include <Dialogs.h>
-    #include <DriverServices.h>
-    #include <Events.h>
-    #include <Gestalt.h>
-    #include <LowMem.h>
-    #include <Sound.h>
-    #include <TextEdit.h>
-    #include <ToolUtils.h>
-    #include <Windows.h>
-
-    // profile
-    #include <Profiler.h>
-
-       #include "agl.h"
-    #include "gamegl.h"
-       #include "glu.h"
-#endif
-
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-#include <Folders.h>
-#include <fstream.h>
-// project includes ---------------------------------------------------------
-
-#include "aglString.h"
-#include "MacInput.h"
-
-// functions (internal/private) ---------------------------------------------
-
-static UInt32 CheckMacOSX (void);
-void CToPStr (StringPtr outString, const char *inString);
-void ReportError (char * strError);
-OSStatus DSpDebugStr (OSStatus error);
-GLenum aglDebugStr (void);
-GLenum glDebugStr (void);
-
-CGrafPtr SetupDSpFullScreen (GDHandle hGD);
-void ShutdownDSp (CGrafPtr pDSpPort);
-
-AGLContext SetupAGL (GDHandle hGD, AGLDrawable win);
-AGLContext SetupAGLFullScreen (GDHandle display, short * pDepth, short * pWidth, short * pHeight);
-void CleanupAGL (AGLContext ctx);
-void DrawGL (Rect * pRectPort);
-
-void InitToolbox(void);
-void CreateGLWindow (void);
-Boolean SetUp (void);
-void DoMenu (SInt32 menuResult);
-void DoKey (SInt8 theKey, SInt8 theCode);
-void DoUpdate (void);
-
-pascal void IdleTimer (EventLoopTimerRef inTimer, void* userData);
-EventLoopTimerUPP GetTimerUPP (void);
-static Boolean RunningOnCarbonX(void);
-
-void DoEvent (void);
-void CleanUp (void);
-
-// profile wrappers
-Boolean WaitNextEventWrapper (EventMask eventMask, EventRecord *theEvent, unsigned long sleep,RgnHandle mouseRgn);
-OSStatus DSpProcessEventWrapper (EventRecord *inEvent, Boolean *outEventWasProcessed);
-void UpdateWrapper (EventRecord *theEvent);
-
-// statics/globals (internal only) ------------------------------------------
-
-Point delta;
-
-// Menu defs
-enum 
-{
-       kMenuApple = 128,
-       kMenuFile = 129,
-       
-       kAppleAbout = 1,
-       kFileQuit = 1
-};
-
-enum 
-{
-       kForegroundSleep = 10,
-       kBackgroundSleep = 10000
-};
-EventLoopTimerRef gTimer = NULL;
-
-int kContextWidth;
-int kContextHeight;
-
-const RGBColor rgbBlack = { 0x0000, 0x0000, 0x0000 };
-
-NumVersion gVersionDSp;
-DSpContextAttributes gContextAttributes;
-DSpContextReference gContext = 0;
-extern AGLContext gaglContext;
-GLuint gFontList;
-char gcstrMode [256] = "";
-
-AGLDrawable gpDSpPort = NULL; // will be NULL for full screen under X
-Rect gRectPort = {0, 0, 0, 0};
-
-UInt32 gSleepTime = kForegroundSleep;
-Boolean gDone = false, gfFrontProcess = true;
-
-Game game;
-
-// profile
-#if __profile__
-OSErr gProfErr = noErr;
-#endif
-
-#pragma mark -
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// are we running on Mac OS X
-// returns 0 if < Mac OS X or version number of Mac OS X (10.0 for GM)
-
-static UInt32 CheckMacOSX (void)
-{
-       UInt32 response;
-    
-       if ((Gestalt(gestaltSystemVersion, (SInt32 *) &response) == noErr) && (response >= 0x01000))
-               return response;
-       else
-               return 0;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// Copy C string to Pascal string
-
-void CToPStr (StringPtr outString, const char *inString)
-{      
-       unsigned char x = 0;
-       do
-               *(((char*)outString) + x + 1) = *(inString + x++);
-       while ((*(inString + x) != 0)  && (x < 256));
-       *((char*)outString) = (char) x;                                                                 
-}
-
-// --------------------------------------------------------------------------
-
-void ReportError (char * strError)
-{
-       char errMsgCStr [256];
-       Str255 strErr;
-
-       sprintf (errMsgCStr, "%s", strError); 
-
-       // out as debug string
-       CToPStr (strErr, errMsgCStr);
-       DebugStr (strErr);
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-OSStatus DSpDebugStr (OSStatus error)
-{
-       switch (error)
-       {
-               case noErr:
-                       break;
-               case kDSpNotInitializedErr:
-                       ReportError ("DSp Error: Not initialized");
-                       break;
-               case kDSpSystemSWTooOldErr:
-                       ReportError ("DSp Error: system Software too old");
-                       break;
-               case kDSpInvalidContextErr:
-                       ReportError ("DSp Error: Invalid context");
-                       break;
-               case kDSpInvalidAttributesErr:
-                       ReportError ("DSp Error: Invalid attributes");
-                       break;
-               case kDSpContextAlreadyReservedErr:
-                       ReportError ("DSp Error: Context already reserved");
-                       break;
-               case kDSpContextNotReservedErr:
-                       ReportError ("DSp Error: Context not reserved");
-                       break;
-               case kDSpContextNotFoundErr:
-                       ReportError ("DSp Error: Context not found");
-                       break;
-               case kDSpFrameRateNotReadyErr:
-                       ReportError ("DSp Error: Frame rate not ready");
-                       break;
-               case kDSpConfirmSwitchWarning:
-//                     ReportError ("DSp Warning: Must confirm switch"); // removed since it is just a warning, add back for debugging
-                       return 0; // don't want to fail on this warning
-                       break;
-               case kDSpInternalErr:
-                       ReportError ("DSp Error: Internal error");
-                       break;
-               case kDSpStereoContextErr:
-                       ReportError ("DSp Error: Stereo context");
-                       break;
-       }
-       return error;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// if error dump agl errors to debugger string, return error
-
-GLenum aglDebugStr (void)
-{
-       GLenum err = aglGetError();
-       if (AGL_NO_ERROR != err)
-               ReportError ((char *)aglErrorString(err));
-       return err;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// if error dump agl errors to debugger string, return error
-
-GLenum glDebugStr (void)
-{
-       GLenum err = glGetError();
-       if (GL_NO_ERROR != err)
-               ReportError ((char *)gluErrorString(err));
-       return err;
-}
-
-#pragma mark -
-//-----------------------------------------------------------------------------------------------------------------------
-
-// Set up DSp screen on graphics device requested
-// side effect: sets both gpDSpWindow and gpPort
-
-CGrafPtr SetupDSpFullScreen (GDHandle hGD)
-{
-       DSpContextAttributes foundAttributes;
-       DisplayIDType displayID = NULL;
-       
-       if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) DSpGetVersion) 
-       {
-               ReportError ("DrawSprocket not installed.");
-               return NULL;
-       }
-       else
-               gVersionDSp = DSpGetVersion ();
-
-       if ((gVersionDSp.majorRev == 0x01) && (gVersionDSp.minorAndBugRev < 0x99))
-       {
-               // this version of DrawSprocket is not completely functional on Mac OS X
-               if (CheckMacOSX ())
-               {
-                       ReportError ("DrawSprocket 1.99 or greate required on Mac OS X, please update to at least Mac OS X 10.1.");
-                       return NULL;
-               }
-       }
-                       
-       // Note: DSp < 1.7.3 REQUIRES the back buffer attributes even if only one buffer is required
-       memset(&gContextAttributes, 0, sizeof (DSpContextAttributes));
-       gContextAttributes.displayWidth                 = kContextWidth;
-       gContextAttributes.displayHeight                = kContextHeight;
-       gContextAttributes.colorNeeds                   = kDSpColorNeeds_Require;
-       gContextAttributes.displayBestDepth             = kBitsPerPixel;
-       gContextAttributes.backBufferBestDepth  = kBitsPerPixel;
-       gContextAttributes.displayDepthMask             = kDSpDepthMask_All;
-       gContextAttributes.backBufferDepthMask  = kDSpDepthMask_All;
-       gContextAttributes.pageCount                    = 1;                                                            // only the front buffer is needed
-       
-       screenwidth=kContextWidth;
-       screenheight=kContextHeight;
-       
-       DMGetDisplayIDByGDevice (hGD, &displayID, true);
-       
-       if (noErr != DSpDebugStr (DSpFindBestContextOnDisplayID (&gContextAttributes, &gContext, displayID)))
-       {
-               ReportError ("DSpFindBestContext() had an error.");
-               return NULL;
-       }
-
-       if (noErr != DSpDebugStr (DSpContext_GetAttributes (gContext, &foundAttributes))) // see what we actually found
-       {
-               ReportError ("DSpContext_GetAttributes() had an error.");
-               return NULL;
-       }
-
-       // reset width and height to full screen and handle our own centering
-       // HWA will not correctly center less than full screen size contexts
-       gContextAttributes.displayWidth         = foundAttributes.displayWidth;
-       gContextAttributes.displayHeight        = foundAttributes.displayHeight;
-       gContextAttributes.pageCount            = 1;                                                                    // only the front buffer is needed
-       gContextAttributes.contextOptions       = 0 | kDSpContextOption_DontSyncVBL;    // no page flipping and no VBL sync needed
-
-       DSpSetBlankingColor(&rgbBlack);
-
-       if (noErr !=  DSpDebugStr (DSpContext_Reserve ( gContext, &gContextAttributes))) // reserve our context
-       {
-               ReportError ("DSpContext_Reserve() had an error.");
-               return NULL;
-       }
-       HideCursor ();
-
-       if (noErr != DSpDebugStr (DSpContext_SetState (gContext, kDSpContextState_Active))) // activate our context
-       {
-               ReportError ("DSpContext_SetState() had an error.");
-               return NULL;
-       }
-
-
-       if ((CheckMacOSX ()) && !((gVersionDSp.majorRev > 0x01) || ((gVersionDSp.majorRev == 0x01) && (gVersionDSp.minorAndBugRev >= 0x99))))// DSp should be supported in version after 1.98
-       {
-               ReportError ("Mac OS X with DSp < 1.99 does not support DrawSprocket for OpenGL full screen");
-               return NULL;
-       }
-       else if (CheckMacOSX ()) // DSp should be supported in versions 1.99 and later
-       {
-               CGrafPtr pPort;
-               // use DSp's front buffer on Mac OS X
-               if (noErr != DSpDebugStr (DSpContext_GetFrontBuffer (gContext, &pPort)))
-               {
-                       ReportError ("DSpContext_GetFrontBuffer() had an error.");
-                       return NULL;
-               }
-               // there is a problem in Mac OS X 10.0 GM CoreGraphics that may not size the port pixmap correctly
-               // this will check the vertical sizes and offset if required to fix the problem
-               // this will not center ports that are smaller then a particular resolution
-               {
-                       long deltaV, deltaH;
-                       Rect portBounds;
-                       PixMapHandle hPix = GetPortPixMap (pPort);
-                       Rect pixBounds = (**hPix).bounds;
-                       GetPortBounds (pPort, &portBounds);
-                       deltaV = (portBounds.bottom - portBounds.top) - (pixBounds.bottom - pixBounds.top) +
-                                (portBounds.bottom - portBounds.top - kContextHeight) / 2;
-                       deltaH = -(portBounds.right - portBounds.left - kContextWidth) / 2;
-                       if (deltaV || deltaH)
-                       {
-                               GrafPtr pPortSave;
-                               GetPort (&pPortSave);
-                               SetPort ((GrafPtr)pPort);
-                               // set origin to account for CG offset and if requested drawable smaller than screen rez
-                               SetOrigin (deltaH, deltaV);
-                               SetPort (pPortSave);
-                       }
-               }
-               return pPort;
-       }
-       else // Mac OS 9 or less
-       {
-               WindowPtr pWindow;
-               Rect rectWin;
-               RGBColor rgbSave;
-               GrafPtr pGrafSave;
-               // create a new window in our context 
-               // note: OpenGL is expecting a window so it can enumerate the devices it spans, 
-               // center window in our context's gdevice
-               rectWin.top  = (short) ((**hGD).gdRect.top + ((**hGD).gdRect.bottom - (**hGD).gdRect.top) / 2);         // h center
-               rectWin.top  -= (short) (kContextHeight / 2);
-               rectWin.left  = (short) ((**hGD).gdRect.left + ((**hGD).gdRect.right - (**hGD).gdRect.left) / 2);       // v center
-               rectWin.left  -= (short) (kContextWidth / 2);
-               rectWin.right = (short) (rectWin.left + kContextWidth);
-               rectWin.bottom = (short) (rectWin.top + kContextHeight);
-               
-               pWindow = NewCWindow (NULL, &rectWin, "\p", 0, plainDBox, (WindowPtr)-1, 0, 0);
-
-               // paint back ground black before fade in to avoid white background flash
-               ShowWindow(pWindow);
-               GetPort (&pGrafSave);
-               SetPortWindowPort (pWindow);
-               GetForeColor (&rgbSave);
-               RGBForeColor (&rgbBlack);
-               {
-                       Rect paintRect;
-                       GetWindowPortBounds (pWindow, &paintRect);
-                       PaintRect (&paintRect);
-               }
-               RGBForeColor (&rgbSave);                // ensure color is reset for proper blitting
-               SetPort (pGrafSave);
-               return (GetWindowPort (pWindow));
-       }
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// clean up DSp
-
-void ShutdownDSp (CGrafPtr pDSpPort)
-{
-       if ((NULL != pDSpPort) && !CheckMacOSX ())
-               DisposeWindow (GetWindowFromPort (pDSpPort));
-       DSpContext_SetState( gContext, kDSpContextState_Inactive);
-       DSpContext_Release (gContext);
-}
-
-#pragma mark -
-//-----------------------------------------------------------------------------------------------------------------------
-
-// OpenGL Setup
-
-
-AGLContext SetupAGL (GDHandle hGD, AGLDrawable drawable)
-{
-       GLint                   attrib[64];
-       
-       AGLPixelFormat  fmt;
-       AGLContext      ctx;
-
-// different possible pixel format choices for different renderers 
-// basics requirements are RGBA and double buffer
-// OpenGLz will select acclerated context if available
-
-       short i = 0;
-       attrib [i++] = AGL_RGBA; // red green blue and alpha
-       attrib [i++] = AGL_DOUBLEBUFFER; // double buffered
-       attrib [i++] = AGL_DEPTH_SIZE; 
-       attrib [i++] = 8; 
-       attrib [i++] = AGL_ACCELERATED; // HWA pixel format only
-       attrib [i++] = AGL_NONE;
-
-       if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat) // check for existance of OpenGL
-       {
-               ReportError ("OpenGL not installed");
-               return NULL;
-       }       
-
-       if (hGD)
-               fmt = aglChoosePixelFormat (&hGD, 1, attrib); // get an appropriate pixel format
-       else
-               fmt = aglChoosePixelFormat(NULL, 0, attrib); // get an appropriate pixel format
-       aglDebugStr ();
-       if (NULL == fmt) 
-       {
-               ReportError("Could not find valid pixel format");
-               return NULL;
-       }
-
-       ctx = aglCreateContext (fmt, NULL); // Create an AGL context
-       aglDebugStr ();
-       if (NULL == ctx)
-       {
-               ReportError ("Could not create context");
-               return NULL;
-       }
-
-       if (!aglSetDrawable (ctx, drawable)) // attach the window to the context
-       {
-               ReportError ("SetDrawable failed");
-               aglDebugStr ();
-               return NULL;
-       }
-
-
-       if (!aglSetCurrentContext (ctx)) // make the context the current context
-       {
-               aglDebugStr ();
-               aglSetDrawable (ctx, NULL);
-               return NULL;
-       }
-
-       aglDestroyPixelFormat(fmt); // pixel format is no longer needed
-
-       return ctx;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// OpenGL Setup
-
-AGLContext SetupAGLFullScreen (GDHandle display, short * pDepth, short * pWidth, short * pHeight)
-{
-       //GLint                 attrib[64];
-       GLint attrib[] ={AGL_RGBA, AGL_DOUBLEBUFFER,AGL_DEPTH_SIZE, 16, AGL_FULLSCREEN,AGL_ALL_RENDERERS, AGL_NONE};
-
-       AGLPixelFormat  fmt;
-       AGLContext      ctx;
-
-
-       if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) aglChoosePixelFormat) // check for existance of OpenGL
-       {
-               ReportError ("OpenGL not installed");
-               return NULL;
-       }       
-
-       fmt = aglChoosePixelFormat(&display, 1, attrib); // this may fail if looking for acclerated across multiple monitors
-       if (NULL == fmt) 
-       {
-               ReportError("Could not find valid pixel format");
-               aglDebugStr ();
-               return NULL;
-       }
-
-       ctx = aglCreateContext (fmt, NULL); // Create an AGL context
-       if (NULL == ctx)
-       {
-               ReportError ("Could not create context");
-               aglDebugStr ();
-               return NULL;
-       }
-
-       if (!aglSetFullScreen (ctx, *pWidth, *pHeight, 60, 0))
-       {
-               ReportError ("SetFullScreen failed");
-               aglDebugStr ();
-               return NULL;
-       }
-
-       if (!aglSetCurrentContext (ctx)) // make the context the current context
-       {
-               ReportError ("SetCurrentContext failed");
-               aglDebugStr ();
-               aglSetDrawable (ctx, NULL); // turn off full screen
-               return NULL;
-       }
-
-       aglDestroyPixelFormat(fmt); // pixel format is no longer needed
-
-       return ctx;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// OpenGL Cleanup
-
-void CleanupAGL(AGLContext ctx)
-{
-       aglSetDrawable (ctx, NULL);
-       aglSetCurrentContext (NULL);
-       aglDestroyContext (ctx);
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-// OpenGL Drawing
-
-void DrawGL (Rect * pRectPort)
-{
-       if (gaglContext == 0)
-               return;
-       aglSetCurrentContext (gaglContext); // ensure our context is current prior to drawing
-       
-    {
-        GLint width = pRectPort->right - pRectPort->left;
-        GLint height = pRectPort->bottom - pRectPort->top;
-        screenwidth=width;
-        screenheight=height;
-       /* glViewport ((width - (width * 1)) / 2, (height - (height * 1)) / 2,
-                    width * 1, height * 1);*/
-     }
-    
-       game.DrawGLScene();
-       
-       
-       //glDebugStr ();
-
-       // draw info
-       /*{
-               GLint matrixMode;
-        glViewport (0, 0, pRectPort->right - pRectPort->left, pRectPort->bottom - pRectPort->top);
-               glGetIntegerv (GL_MATRIX_MODE, &matrixMode);
-               glMatrixMode (GL_PROJECTION);
-               glPushMatrix();
-                       glLoadIdentity ();
-                       glMatrixMode (GL_MODELVIEW);
-                       glPushMatrix();
-                               glLoadIdentity ();
-                               glScalef (2.0 / (pRectPort->right - pRectPort->left), -2.0 /  (pRectPort->bottom - pRectPort->top), 1.0);
-                               glTranslatef (-(pRectPort->right - pRectPort->left) / 2.0, -(pRectPort->bottom - pRectPort->top) / 2.0, 0.0);
-                               glColor3f (1.0, 1.0, 1.0);
-                               glRasterPos3d (10, 12, 0); 
-                               DrawFrameRate (gFontList);
-                               glRasterPos3d (10, 24, 0); 
-                               DrawCStringGL (gcstrMode, gFontList);
-                               glRasterPos3d (10, (pRectPort->bottom - pRectPort->top) - 15, 0); 
-                               DrawCStringGL ((char*) glGetString (GL_VENDOR), gFontList);
-                               glRasterPos3d (10, (pRectPort->bottom - pRectPort->top) - 3, 0); 
-                               DrawCStringGL ((char*) glGetString (GL_RENDERER), gFontList);
-                               static char aChar[256] = "";
-                               sprintf (aChar, "     Mac OS X: %d",  RunningOnCarbonX());
-                               DrawCStringGL (aChar, gFontList);
-                       glPopMatrix();
-                       glMatrixMode (GL_PROJECTION);
-               glPopMatrix();
-               glMatrixMode (matrixMode);
-       }*/
-       //glDebugStr ();
-       //aglSwapBuffers(gaglContext); // send swap command
-}
-
-#pragma mark -
-//-----------------------------------------------------------------------------------------------------------------------
-
-static pascal OSErr QuitAppleEventHandler( const AppleEvent *appleEvt, AppleEvent* reply, SInt32 refcon )
-{
-       #pragma unused (appleEvt, reply, refcon)
-       //gDone =  true;
-       game.tryquit=1;
-       return false;
-}
-
-//-----------------------------------------------------------------------------------------------------------------------
-
-void InitToolbox(void)
-{
-       OSErr err;
-       long response;
-       MenuHandle menu;
-       
-       InitCursor();
-       
-// profile
-#if __profile__
-//     prototype:
-//             ProfilerInit (collection method, time base, num funcs, stack depth)
-       // default call
-       gProfErr = ProfilerInit (collectDetailed, bestTimeBase, 20, 10); // set up profiling
-       // something that you may need to do (may need more memory)
-//     gProfErr = ProfilerInit (collectSummary, bestTimeBase, 1000, 100); // set up profiling
-// Note: application will likely run slower, but still should be useful info
-       if (noErr == gProfErr)
-               ProfilerSetStatus(FALSE);
-#endif
-       
-       // Init Menus
-       menu = NewMenu (kMenuApple, "\p\024");                  // new  apple menu
-       InsertMenu (menu, 0);                                                   // add menu to end
-
-       menu = NewMenu (kMenuFile, "\pFile");                   // new menu
-       InsertMenu (menu, 0);                                                   // add menu to end
-
-       // insert application menus here
-       
-       // add quit if not under Mac OS X
-       err = Gestalt (gestaltMenuMgrAttr, &response);
-       if ((err == noErr) && !(response & gestaltMenuMgrAquaLayoutMask))
-                       AppendMenu (menu, "\pQuit/Q");                                  // add quit
-
-       DrawMenuBar();
-       err = AEInstallEventHandler( kCoreEventClass, kAEQuitApplication, NewAEEventHandlerUPP(QuitAppleEventHandler), 0, false );
-       if (err != noErr)
-               ExitToShell();
-}
-
-// --------------------------------------------------------------------------
-
-static Point gMidPoint;
-
-Boolean SetUp (void)
-{
-       char string[10];
-       
-       SetQDGlobalsRandomSeed(TickCount());
-       
-       osx = 0;
-       if(CheckMacOSX ())osx = 1;
-       ifstream ipstream(":Data:config.txt");
-       detail=1;
-       ismotionblur=0;
-       usermousesensitivity=1;
-       kContextWidth=640;
-       kContextHeight=480;
-       kBitsPerPixel = 32;
-       floatjump=0;
-       cellophane=0;
-       texdetail=4;
-       autoslomo=1;
-       decals=1;
-       invertmouse=0;
-       bloodtoggle=0;
-       terraindetail=2;
-       foliage=1;
-       musictoggle=1;
-       trilinear=1;
-       gamespeed=1;
-       difficulty=1;
-       damageeffects=0;
-       texttoggle=1;
-       alwaysblur=0;
-       showpoints=0;
-       immediate=0;
-       velocityblur=0;
-       slomospeed=0.25;
-       slomofreq=8012;
-       
-       game.crouchkey=MAC_SHIFT_KEY;
-    game.jumpkey=MAC_SPACE_KEY;
-    game.leftkey=MAC_A_KEY;
-    game.forwardkey=MAC_W_KEY;
-    game.backkey=MAC_S_KEY;
-    game.rightkey=MAC_D_KEY;
-    game.drawkey=MAC_E_KEY;
-    game.throwkey=MAC_Q_KEY;
-    game.attackkey=MAC_MOUSEBUTTON1;
-    game.chatkey=MAC_T_KEY;
-    numplayers=1;
-    ambientsound=1;
-    vblsync=0;
-    debugmode=0;
-    if(!ipstream) {
-        ofstream opstream(":Data:config.txt"); 
-        opstream << "Screenwidth:\n";
-        opstream << kContextWidth;
-        opstream << "\nScreenheight:\n";
-           opstream << kContextHeight;
-           opstream << "\nMouse sensitivity:\n";
-           opstream << usermousesensitivity;
-           opstream << "\nBlur(0,1):\n";
-           opstream << ismotionblur;
-               opstream << "\nOverall Detail(0,1,2) higher=better:\n";
-           opstream << detail;
-           opstream << "\nFloating jump:\n";
-           opstream << floatjump;
-           opstream << "\nMouse jump:\n";
-           opstream << mousejump;
-           opstream << "\nAmbient sound:\n";
-           opstream << ambientsound;
-               opstream << "\nBlood (0,1,2):\n";
-        opstream << bloodtoggle;
-        opstream << "\nAuto slomo:\n";
-        opstream << autoslomo;
-           opstream << "\nFoliage:\n";
-        opstream << foliage;
-        opstream << "\nMusic:\n";
-        opstream << musictoggle;
-        opstream << "\nTrilinear:\n";
-        opstream << trilinear;
-           opstream << "\nDecals(shadows,blood puddles,etc):\n";
-        opstream << decals;
-           opstream << "\nInvert mouse:\n";
-        opstream << invertmouse;
-           opstream << "\nGamespeed:\n";
-        opstream << gamespeed;
-        opstream << "\nDifficulty(0,1,2) higher=harder:\n";
-        opstream << difficulty;
-        opstream << "\nDamage effects(blackout, doublevision):\n";
-        opstream << damageeffects;
-           opstream << "\nText:\n";
-        opstream << texttoggle;
-           opstream << "\nDebug:\n";
-        opstream << debugmode;
-           opstream << "\nVBL Sync:\n";
-        opstream << vblsync;
-        opstream << "\nShow Points:\n";
-        opstream << showpoints;
-        opstream << "\nAlways Blur:\n";
-        opstream << alwaysblur;
-           opstream << "\nImmediate mode (turn on on G5):\n";
-        opstream << immediate;
-           opstream << "\nVelocity blur:\n";
-        opstream << velocityblur;
-           opstream << "\nForward key:\n";
-           opstream << KeyToChar(game.forwardkey);
-           opstream << "\nBack key:\n";
-           opstream << KeyToChar(game.backkey);
-           opstream << "\nLeft key:\n";
-           opstream << KeyToChar(game.leftkey);
-           opstream << "\nRight key:\n";
-           opstream << KeyToChar(game.rightkey);
-           opstream << "\nJump key:\n";
-           opstream << KeyToChar(game.jumpkey);
-           opstream << "\nCrouch key:\n";
-           opstream << KeyToChar(game.crouchkey);
-           opstream << "\nDraw key:\n";
-           opstream << KeyToChar(game.drawkey);
-           opstream << "\nThrow key:\n";
-           opstream << KeyToChar(game.throwkey);
-           opstream << "\nAttack key:\n";
-           opstream << KeyToChar(game.attackkey);
-           opstream << "\nChat key:\n";
-           opstream << KeyToChar(game.chatkey);
-           opstream.close();
-    }
-    if(ipstream){
-               ipstream.ignore(256,'\n');
-           ipstream >> kContextWidth;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> kContextHeight;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> usermousesensitivity;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> ismotionblur;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> detail;
-           if(detail!=0)kBitsPerPixel=32;
-           else kBitsPerPixel=16;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> floatjump;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> mousejump;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> ambientsound;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> bloodtoggle;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> autoslomo;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> foliage;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> musictoggle;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> trilinear;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> decals;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> invertmouse;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> gamespeed;
-           oldgamespeed=gamespeed;
-           if(oldgamespeed==0){
-               gamespeed=1;
-               oldgamespeed=1;
-           }
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> difficulty;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> damageeffects;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> texttoggle;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> debugmode;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> vblsync;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> showpoints;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> alwaysblur;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> immediate;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> velocityblur;
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n'); 
-           ipstream >> string;
-           game.forwardkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.backkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.leftkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.rightkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.jumpkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.crouchkey=CharToKey(string);
-           ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.drawkey=CharToKey(string);
-            ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.throwkey=CharToKey(string);
-             ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.attackkey=CharToKey(string);
-            ipstream.ignore(256,'\n');
-           ipstream.ignore(256,'\n');
-           ipstream >> string;
-           game.chatkey=CharToKey(string);
-           ipstream.close();
-           
-           if(detail>2)detail=2;
-           if(detail<0)detail=0;
-               if(screenwidth<0)screenwidth=640;
-               if(screenheight<0)screenheight=480;
-#if !USE_SDL  // we'll take anything that works.
-           if(screenwidth>3000)screenwidth=640;
-               if(screenheight>3000)screenheight=480;
-#endif
-       }
-
-       
-       if(vblsync){    
-               GLint swapInt = 1;
-               aglSetInteger(gaglContext, AGL_SWAP_INTERVAL, &swapInt);
-       }
-       
-       if(kBitsPerPixel!=32&&kBitsPerPixel!=16){
-               kBitsPerPixel=16;
-       }
-
-       
-       GDHandle hGD, hTargetDevice = NULL;
-       short numDevices = 0;
-       short fNum = 0;
-       short whichDevice = 0; // number of device to try (0 = 1st device)
-
-       InitToolbox ();
-       
-       gpDSpPort = NULL;
-       gaglContext = 0;
-       
-       // check for DSp
-       if ((Ptr) kUnresolvedCFragSymbolAddress == (Ptr) DSpStartup) 
-               ReportError ("DSp not installed");
-
-       if (noErr != DSpDebugStr (DSpStartup()))
-               return NULL;
-//     DSpSetDebugMode (true);
-#if defined kUseFades
-       DSpDebugStr (DSpContext_FadeGammaOut (NULL, NULL)); // fade display, remove for debug
-#endif
-       
-       hGD = DMGetFirstScreenDevice (true); // check number of screens
-       hTargetDevice = hGD; // default to first device                                                 
-       do
-       {
-               if (numDevices == whichDevice)
-                       hTargetDevice = hGD; // if device number matches                                                
-               numDevices++;
-               hGD = DMGetNextScreenDevice (hGD, true);
-       }
-       while (hGD);
-
-#if defined (kUseAGLFullScreenX)
-       if (CheckMacOSX ()) // Try AGL full screen on Mac OS X
-       {
-               short depth = kBitsPerPixel, width = kContextWidth, height = kContextHeight; 
-               gaglContext = SetupAGLFullScreen (hTargetDevice, &depth, &width, &height); // Setup the OpenGL context
-               SetRect (&gRectPort, 0, 0, width, height); // l, t, r, b
-               sprintf (gcstrMode, "AGL Full Screen: %d x %d x %d", width, height, depth);
-       }
-#endif
-       if (!gaglContext) //try DSp
-       {
-               if (NULL != (gpDSpPort = SetupDSpFullScreen (hTargetDevice))) // Setup DSp for OpenGL sets hTargetDeviceto device actually used 
-               {
-                       GetPortBounds (gpDSpPort, &gRectPort);
-                       sprintf (gcstrMode, "DrawSprocket Full Screen: %d x %d x %d", gRectPort.right - gRectPort.left, gRectPort.bottom - gRectPort.top, (**(**hTargetDevice).gdPMap).pixelSize);
-                       gaglContext = SetupAGL (hTargetDevice, gpDSpPort);
-               }
-       }
-       if (gaglContext)
-       {
-               GetFNum("\pMonaco", &fNum);                                                                     // build font
-               gFontList = BuildFontGL (gaglContext, fNum, normal, 9);
-               //InstallEventLoopTimer (GetCurrentEventLoop(), 0, 0.0001, GetTimerUPP (), 0, &gTimer);
-       }
-       
-       //gMidPoint.h = (gRectPort.left + gRectPort.right)/2;
-       //gMidPoint.v = (gRectPort.top + gRectPort.bottom)/2;
-       gMidPoint.h = 200;
-       gMidPoint.v = 200;
-       GLint swapInt = 1;
-       //aglSetInteger(gaglContext, AGL_SWAP_INTERVAL, &swapInt);
-       
-#if defined kUseFades
-       DSpDebugStr (DSpContext_FadeGammaIn (NULL, NULL));
-#endif
-       
-       
-       HideCursor();
-       
-       
-    GLint width = gRectPort.right - gRectPort.left;
-    GLint height = gRectPort.bottom - gRectPort.top;
-    screenwidth=width;
-    screenheight=height;
-     
-    game.newdetail=detail;
-       game.newscreenwidth=screenwidth;
-       game.newscreenheight=screenheight;
-     
-       game.InitGame();
-       
-       if (gaglContext)
-               return true;
-       else
-               return false;
-       
-}
-
-static Boolean RunningOnCarbonX(void)
-{
-       static Boolean first = true;
-       static Boolean result = false;
-
-       if (first)
-       {
-               UInt32 response;
-
-               first = false;
-
-               result = (Gestalt(gestaltSystemVersion, 
-                    (SInt32 *) &response) == noErr)
-                && (response >= 0x01000);
-       }
-    return result;
-}
-
-static OSStatus LoadFrameworkBundle(CFStringRef pFrameworkCFStrRef, CFBundleRef *pFrameworkCFBndlRef)
-{
-       OSStatus        err;
-       FSRef           frameworksFolderRef;
-       CFURLRef        baseURL;
-       CFURLRef        bundleURL;
-       
-       if (nil == pFrameworkCFBndlRef) return paramErr;
-       
-       *pFrameworkCFBndlRef = nil;
-       
-       baseURL = nil;
-       bundleURL = nil;
-       
-       err = FSFindFolder(kOnAppropriateDisk, kFrameworksFolderType, true, &frameworksFolderRef);
-       if (err == noErr) {
-               baseURL = CFURLCreateFromFSRef(kCFAllocatorSystemDefault, &frameworksFolderRef);
-               if (baseURL == nil) {
-                       err = coreFoundationUnknownErr;
-               }
-       }
-       if (err == noErr) {
-               bundleURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, baseURL, pFrameworkCFStrRef, false);
-               if (bundleURL == nil) {
-                       err = coreFoundationUnknownErr;
-               }
-       }
-       if (err == noErr) {
-               *pFrameworkCFBndlRef = CFBundleCreate(kCFAllocatorSystemDefault, bundleURL);
-               if (*pFrameworkCFBndlRef == nil) {
-                       err = coreFoundationUnknownErr;
-               }
-       }
-       if (err == noErr) {
-           if ( ! CFBundleLoadExecutable( *pFrameworkCFBndlRef ) ) {
-                       err = coreFoundationUnknownErr;
-           }
-       }
-
-       // Clean up.
-       
-       if (err != noErr && *pFrameworkCFBndlRef != nil) {
-               CFRelease(*pFrameworkCFBndlRef);
-               *pFrameworkCFBndlRef = nil;
-       }
-       if (bundleURL != nil) {
-               CFRelease(bundleURL);
-       }       
-       if (baseURL != nil) {
-               CFRelease(baseURL);
-       }       
-       
-       return err;
-}
-
-
-
-static CFragConnectionID gCFragConnectionID = 0;
-
-typedef pascal OSErr (*CDM_NewDeviceProcPtr)(CursorDevicePtr * ourDevice);
-
-static OSErr MyCursorDeviceNewDevice(CursorDevicePtr * ourDevice)
-{
-       static CDM_NewDeviceProcPtr sCDM_NewDeviceProcPtr = nil;
-       OSStatus anErr = noErr;
-
-       if (nil == ourDevice) return paramErr;
-
-       if (!RunningOnCarbonX())
-       {
-               if (!sCDM_NewDeviceProcPtr)
-               {
-                       if (!gCFragConnectionID)
-                       {
-                               Ptr             mainAddr;
-                               Str255  errName;
-
-                               anErr = GetSharedLibrary("\pInterfaceLib", kPowerPCCFragArch,
-                                        kFindCFrag, &gCFragConnectionID, &mainAddr, errName);
-                               if (noErr != anErr) return anErr;
-                       }
-
-                       if (gCFragConnectionID)
-                       {
-                               CFragSymbolClass symClass;
-
-                               anErr = FindSymbol(gCFragConnectionID, "\pCrsrDevNewDevice",
-                                       (Ptr*) &sCDM_NewDeviceProcPtr, &symClass);
-                               if (noErr != anErr) return anErr;
-                       }
-               }
-               if (sCDM_NewDeviceProcPtr)
-                       anErr = (*sCDM_NewDeviceProcPtr)(ourDevice);
-               else
-                       anErr = paramErr;
-       }
-
-       return anErr;
-}
-
-typedef pascal OSErr (*CDM_CursorDeviceMoveToProcPtr)(
-                                                       CursorDevicePtr   ourDevice,
-                                                       long              absX,
-                                                       long              absY);
-
-typedef UInt32 (*CGWarpMouseCursorPositionProcPtr)(CGPoint newCursorPosition);
-typedef UInt32 (*CGSetLocalEventsSuppressionIntervalProcPtr)(double pSeconds);
-
-static OSErr MyCursorDeviceMoveTo(     CursorDevicePtr   ourDevice,
-                                                       long              absX,
-                                                       long              absY)
-{
-       OSStatus anErr = noErr;
-
-       if (RunningOnCarbonX())
-       {
-               static CGWarpMouseCursorPositionProcPtr sCGWarpMouseCursorPositionProcPtr = nil;
-
-               if (nil == sCGWarpMouseCursorPositionProcPtr)
-               {
-                       CFBundleRef tCFBundleRef;
-
-                       anErr = LoadFrameworkBundle(CFSTR("ApplicationServices.framework"), &tCFBundleRef);
-
-                       if (noErr == anErr)
-                       {
-                               CGSetLocalEventsSuppressionIntervalProcPtr tCGSetLocalEventsSuppressionIntervalProcPtr = nil;
-
-                               sCGWarpMouseCursorPositionProcPtr = (CGWarpMouseCursorPositionProcPtr)
-                                       CFBundleGetFunctionPointerForName( tCFBundleRef, CFSTR("CGWarpMouseCursorPosition") );
-                               if (nil == sCGWarpMouseCursorPositionProcPtr)
-                                       anErr = cfragNoSymbolErr;
-
-                               tCGSetLocalEventsSuppressionIntervalProcPtr = (CGSetLocalEventsSuppressionIntervalProcPtr)
-                                       CFBundleGetFunctionPointerForName(tCFBundleRef,CFSTR("CGSetLocalEventsSuppressionInterval"));
-                               if (nil != tCGSetLocalEventsSuppressionIntervalProcPtr)
-                                       (*tCGSetLocalEventsSuppressionIntervalProcPtr)(0.0f);
-                       }
-               }
-
-               if (nil != sCGWarpMouseCursorPositionProcPtr)
-               {
-                       CGPoint tCGPoint;
-
-                       tCGPoint.x = absX;
-                       tCGPoint.y = absY;
-
-                       (*sCGWarpMouseCursorPositionProcPtr)(tCGPoint);
-               }
-       }
-       else
-       {
-               static CDM_CursorDeviceMoveToProcPtr sCDM_CursorDeviceMoveToProcPtr = nil;
-
-               if (!ourDevice) return paramErr;
-
-               if (!sCDM_CursorDeviceMoveToProcPtr)
-               {
-                       if (!gCFragConnectionID)
-                       {
-                               Ptr             mainAddr;
-                               Str255  errName;
-
-                               anErr = GetSharedLibrary("\pInterfaceLib", kPowerPCCFragArch,
-                                        kFindCFrag, &gCFragConnectionID, &mainAddr, errName);
-                               if (noErr != anErr) return anErr;
-                       }
-
-                       if (gCFragConnectionID)
-                       {
-                               CFragSymbolClass symClass;
-
-                               anErr = FindSymbol(gCFragConnectionID, "\pCrsrDevMoveTo",
-                                       (Ptr*) &sCDM_CursorDeviceMoveToProcPtr, &symClass);
-                               if (noErr != anErr) return anErr;
-                       }
-               }
-               if (sCDM_CursorDeviceMoveToProcPtr)
-                       anErr = (*sCDM_CursorDeviceMoveToProcPtr)(ourDevice,absX,absY);
-               else
-                       anErr = paramErr;
-       }
-
-       return anErr;
-}
-
-static void DoMouse(void)
-{
-       static CursorDevicePtr virtualCursorDevicePtr = nil;
-       OSStatus anErr = noErr;
-
-        HideCursor();
-
-       if (nil == virtualCursorDevicePtr)
-               anErr = MyCursorDeviceNewDevice(&virtualCursorDevicePtr);
-
-       {
-               static Point lastMouse = {-1,-1};
-               Point globalMouse;
-
-               GetGlobalMouse(&globalMouse);
-       
-               if (EqualPt(lastMouse, globalMouse))
-               {
-                       game.deltah=0;
-                       game.deltav=0;
-               }
-
-               if (!EqualPt(lastMouse, globalMouse))
-               {
-                       static Point virtualMouse = {0,0};
-                       delta = globalMouse;
-
-                       SubPt(lastMouse, &delta);
-                       GetGlobalMouse(&lastMouse);
-                       //AddPt(delta, &virtualMouse);
-                       
-                       if(mainmenu||(abs(delta.h)<10*realmultiplier*1000&&abs(delta.v)<10*realmultiplier*1000)){
-                       game.deltah=delta.h*usermousesensitivity;
-                       game.deltav=delta.v*usermousesensitivity;
-                       game.mousecoordh=globalMouse.h;
-                       game.mousecoordv=globalMouse.v;
-                       }
-#if 1
-                       //printf("\nMouse Moved: {%d,%d}.",globalMouse.h,globalMouse.v);
-                       //printf("\tdelta: {%d,%d}.",delta.h,delta.v);
-                       //printf("\tvirtual: {%d,%d}.",virtualMouse.h,virtualMouse.v);
-#endif
-                       if(!mainmenu)
-                       if(lastMouse.h>gMidPoint.h+100||lastMouse.h<gMidPoint.h-100||lastMouse.v>gMidPoint.v+100||lastMouse.v<gMidPoint.v-100){
-                               MyCursorDeviceMoveTo(virtualCursorDevicePtr,gMidPoint.h,gMidPoint.v);
-                               lastMouse = gMidPoint;
-                       }
-               }
-       }
-}
-
-
-// --------------------------------------------------------------------------
-
-void DoMenu (SInt32 menuResult)
-{
-       SInt16 theMenu;
-       SInt16 theItem;
-       MenuRef theMenuHandle;
-               
-       theMenu = HiWord(menuResult);
-       theItem = LoWord(menuResult);
-       theMenuHandle = GetMenuHandle(theMenu);
-
-       switch (theMenu)
-       {
-               case kMenuApple:
-                       switch (theItem)
-                       {
-                               case kAppleAbout:
-                                       break;
-                               default:
-                                       break;
-                       }
-                       break;
-               case kMenuFile:
-                       switch (theItem)
-                       {
-                               case kFileQuit:
-                                       game.quit = true;
-                                       break;
-                       }
-                       break;
-       }
-       HiliteMenu(0);
-       DrawMenuBar();
-}
-
-// --------------------------------------------------------------------------
-
-void DoKey (SInt8 theKey, SInt8 theCode)
-{
-       #pragma unused (theCode, theKey)
-    /*if ((theKey == '=') || (theKey == '+'))
-        gfScale *= 1.1;
-    if (theKey == '-')
-        gfScale /= 1.1;*/
-       // do nothing
-}
-
-// --------------------------------------------------------------------------
-
-
-
-/*void DoUpdate (void)
-{
-       static float sps=200;
-       static int count;
-       static float oldmult;
-
-       DoFrameRate();
-       
-       count = multiplier*sps;
-       if(count<2)count=2;
-       
-       oldmult=multiplier;
-       multiplier/=count;
-       
-       for(int i=0;i<count;i++){
-               game.Tick();
-       }
-       multiplier=oldmult;
-       
-       game.TickOnce();
-       
-       DoMouse();
-
-       DrawGL (&gRectPort);
-}*/
-
-void DoUpdate (void)
-{
-       static float sps=200;
-       static int count;
-       static float oldmult;
-       
-       DoFrameRate(1);
-       
-       if(multiplier>.6)multiplier=.6;
-       
-       game.fps=1/multiplier;
-
-       count = multiplier*sps;
-       if(count<2)count=2;
-       //if(count>10)count=10;
-       
-       realmultiplier=multiplier;
-       multiplier*=gamespeed;
-       if(difficulty==1)multiplier*=.9;
-       if(difficulty==0)multiplier*=.8;
-       
-       if(game.loading==4)multiplier*=.00001;
-
-       //multiplier*.9;
-       if(slomo&&!mainmenu)multiplier*=slomospeed;
-       //if(freeze)multiplier*=0.00001;
-       oldmult=multiplier;
-       multiplier/=(float)count;
-       
-       DoMouse();
-       
-       game.TickOnce();
-       
-       for(int i=0;i<count;i++){
-               game.Tick();
-       }
-       multiplier=oldmult;
-       
-       game.TickOnceAfter();
-       
-       DrawGL (&gRectPort);
-}
-
-// --------------------------------------------------------------------------
-
-Boolean WaitNextEventWrapper (EventMask eventMask, EventRecord *theEvent, unsigned long sleep,RgnHandle mouseRgn)
-{
-       return WaitNextEvent (eventMask, theEvent, sleep, mouseRgn);
-}
-
-// --------------------------------------------------------------------------
-
-OSStatus DSpProcessEventWrapper (EventRecord *inEvent, Boolean *outEventWasProcessed)
-{
-       return DSpProcessEvent (inEvent, outEventWasProcessed);
-}
-
-// --------------------------------------------------------------------------
-
-void UpdateWrapper (EventRecord *theEvent)
-{
-       WindowRef whichWindow;
-       GrafPtr pGrafSave;
-       
-       whichWindow = (WindowRef) theEvent->message;
-       GetPort (&pGrafSave);
-       SetPort((GrafPtr) GetWindowPort(whichWindow));
-       BeginUpdate(whichWindow);
-       DoUpdate();
-       SetPort((GrafPtr) GetWindowPort(whichWindow));
-       EndUpdate(whichWindow);
-       SetPort (pGrafSave);
-}
-
-// --------------------------------------------------------------------------
-
-pascal void IdleTimer (EventLoopTimerRef inTimer, void* userData)
-{
-       #pragma unused (inTimer, userData)
-       if(!stillloading)DoUpdate ();
-}
-
-// --------------------------------------------------------------------------
-
-EventLoopTimerUPP GetTimerUPP (void)
-{
-       static EventLoopTimerUPP        sTimerUPP = NULL;
-       
-       if (sTimerUPP == NULL)
-               sTimerUPP = NewEventLoopTimerUPP (IdleTimer);
-       
-       return sTimerUPP;
-}
-
-// --------------------------------------------------------------------------
-
-pascal OSStatus mDown (EventHandlerCallRef ref, EventRef e,void * thedata) {
-       EventMouseButton button;
-       OSStatus status;
-       
-       status = GetEventParameter (e, kEventParamMouseButton, typeMouseButton, NULL, 
-               sizeof (button), NULL, &button);
-       
-       buttons[button-1] = true;               
-       
-       return eventNotHandledErr;
-}
-
-pascal OSStatus mUp (EventHandlerCallRef ref, EventRef e,void * thedata) {
-       EventMouseButton button = 0;
-       OSStatus status;
-       
-       status = GetEventParameter (e, kEventParamMouseButton, typeMouseButton, NULL, 
-               sizeof (EventMouseButton), NULL, &button);
-       
-       buttons[button-1] = false;      
-       
-       return eventNotHandledErr;      
-}
-
-void InstallHandlers(void){
-       OSStatus status;
-       EventTypeSpec spec;
-       
-       spec.eventClass = kEventClassMouse;
-       spec.eventKind = kEventMouseDown;
-
-       status = InstallEventHandler (GetApplicationEventTarget(), 
-               NewEventHandlerUPP (mDown), 1, &spec, NULL, NULL);
-       
-       
-       spec.eventKind = kEventMouseUp;
-       
-       status = InstallEventHandler (GetApplicationEventTarget(), 
-               NewEventHandlerUPP (mUp), 1, &spec, NULL, NULL);
-
-}
-
-void NewEvent(void) {
-       EventRecord e;
-       OSStatus s;
-       
-       
-       /*ReceiveNextEvent (0, NULL, 1, true, &er);
-       
-       s = SendEventToEventTarget (er, GetEventDispatcherTarget());*/
-       WaitNextEvent (everyEvent, &e, 0, NULL);
-       
-       DoUpdate();
-}
-
-void DoEvent (void)
-{
-       EventRecord theEvent;
-       WindowRef whichWindow;
-       SInt16 whatPart;
-       Boolean fProcessed;
-       
-// profile
-#if __profile__
-       if (noErr == gProfErr)
-               ProfilerSetStatus(TRUE); // turn on profiling
-#endif
-
-       if (WaitNextEventWrapper (everyEvent, &theEvent, gSleepTime, NULL))
-       {
-               DSpProcessEventWrapper (&theEvent, &fProcessed);
-               if (!fProcessed)
-               {
-                       switch (theEvent.what)
-                       {
-                               case mouseDown:
-                                       whatPart = FindWindow (theEvent.where, &whichWindow);
-                                       switch (whatPart)
-                                       {
-                                               case inContent:
-//                                                     if (GetWindowFromPort (gpDSpPort) != FrontWindow()) 
-//                                                             SelectWindow (GetWindowFromPort (gpDSpPort));
-                                                       break;
-                                               case inMenuBar:
-                                               {
-                                                       SInt32 menuResult = MenuSelect (theEvent.where);
-                                                       if (HiWord (menuResult) != 0)
-                                                               DoMenu (menuResult);
-                                               }
-                                                       break;
-                                               case inDrag:
-                                                       {
-                                                               // full screen no drag
-                                                       }
-                                                       break;
-                                               case inGrow:
-                                                       {
-                                                               // full screen no grow
-                                                       }
-                                                       break;
-                                               case inGoAway:
-                                                       {
-                                                               // full screen no go away
-                                                       }
-                                                       break;
-                                               case inZoomIn:
-                                               case inZoomOut:
-                                                       {
-                                                               // full screen no zoom
-                                                       }
-                                                       break;
-                                               case inSysWindow:
-                                                       break;
-                                       }
-                                       break;
-                               case keyDown:
-                               case autoKey:
-                               {
-                                       SInt8 theKey;
-                                       SInt8 theCode;
-                                       theKey = theEvent.message & charCodeMask;
-                                       theCode = (theEvent.message & keyCodeMask) >> 8;
-                                       if ((theEvent.modifiers & cmdKey) != 0)
-                                       {
-                                               SInt32 menuResult = MenuKey (theKey);
-                                               if (HiWord(menuResult) != 0)
-                                                       DoMenu (menuResult);
-                                       }
-                                       else
-                                               DoKey (theKey, theCode);
-                               }
-                                       break;
-                               case updateEvt:
-                               {
-                                       UpdateWrapper (&theEvent);
-                               }
-                                       break;
-                               case diskEvt:
-                                       break;
-                               /*case osEvt:
-                                       if (theEvent.message & 0x01000000)              //      Suspend/resume event
-                                       {
-                                               if (theEvent.message & 0x00000001)      //      Resume
-                                               {
-                                                       gSleepTime = kForegroundSleep;  
-                                                       gfFrontProcess = true;
-                                               }
-                                               else
-                                               {
-                                                       gSleepTime = kBackgroundSleep;  //      Suspend
-                                                       gfFrontProcess = false;
-                                               }
-                                       }
-                                       break;*/
-
-                               case kHighLevelEvent:
-                                       AEProcessAppleEvent (&theEvent);
-                                       break;
-                       }
-               }
-       }
-// profile
-#if __profile__
-       if (noErr == gProfErr)
-               ProfilerSetStatus(FALSE); // turn profiling off again
-#endif
-}
-
-// --------------------------------------------------------------------------
-
-void CleanUp (void)
-{
-       MenuHandle hMenu;
-       
-// profile
-#if __profile__
-       if (noErr == gProfErr)
-       {
-               ProfilerDump ("\pGL DSp Carbon.prof");
-               ProfilerTerm ();
-       }
-#endif
-
-       game.Dispose();
-       
-#if defined kUseFades
-       DSpDebugStr (DSpContext_FadeGammaOut (NULL, NULL)); // fade display, remove for debug
-#endif
-
-       RemoveEventLoopTimer(gTimer);
-       gTimer = NULL;
-
-       DeleteFontGL (gFontList);
-       CleanupAGL (gaglContext); // Cleanup the OpenGL context
-       gaglContext = 0;
-       if (gpDSpPort)
-       {
-               ShutdownDSp (gpDSpPort); // DSp shutdown
-               gpDSpPort = NULL;
-       }
-
-       
-       hMenu = GetMenuHandle (kMenuFile);
-       DeleteMenu (kMenuFile);
-       DisposeMenu (hMenu);
-
-       hMenu = GetMenuHandle (kMenuApple);
-       DeleteMenu (kMenuApple);
-       DisposeMenu (hMenu);
-
-#if defined kUseFades
-       DSpDebugStr (DSpContext_FadeGammaIn (NULL, NULL)); // fade display, remove for debug
-#endif
-       DSpShutdown ();
-       
-       ShowCursor();
-}
-
-// --------------------------------------------------------------------------
-#include <iostream>
-#include <InternetConfig.h>
-
-/*void openURL()
-{
-#ifdef Q_WS_MAC
-       QString url("http://www.wolfire.com/");
-       ICInstance icInstance
-       OSType psiSignature = 'Psi ';
-       OSStatus error = ::ICStart( &icInstance, psiSignature);
-       if(error=noErr){
-               ConstStr255Param hint( 0x0 );
-               const char* data = url.latin1();
-               long length = url.length();
-               long start( 0 );
-               long end( length );
-               ::ICLaunchURL( icInstance, hint, data, length, &start, &end);
-               ICStop( icInstance);
-       }
-       #endif
-}*/
-
-void LaunchURL(char *url)
-{
-       ICInstance gICInstance;
-       ICStart (&gICInstance, 0);
-       long int start,fin;
-       start=0;
-       fin=strlen(url);
-       ICLaunchURL(gICInstance, "\p" ,url, fin, &start, &fin);
-}
-       
-       
-       
-int main (void)
-{
-       try { 
-               if (SetUp ())   {
-                       InstallHandlers();
-                       while (!gDone&&!game.quit&&(!game.tryquit||!game.registered)) {
-                               NewEvent ();
-                       }
-               }
-               CleanUp ();
-               if(game.registernow){
-                       char url[100];
-                       sprintf(url,"http://www.wolfire.com/register.html");
-                       LaunchURL(url);
-               }
-               return 0;
-       } catch (const std::exception& error) { 
-               ofstream opstream("error.txt"); 
-        opstream << "Caught exception: " << error.what() << std::endl;
-           opstream.close();
-       }       
-}
index 9afd511ce880918b071d7087dc197a0c4b14712d..1ee4964f94c8182969e026bbb9548276c25ac75c 100644 (file)
@@ -19,11 +19,15 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 
-/* No need for Visual Leak Detector
 #ifdef WIN32
-#include <vld.h>
+#define UINT8 WIN32API_UINT8
+#define UINT16 WIN32API_UINT16
+#define boolean WIN32API_boolean
+#include <windows.h>
+#undef UINT8
+#undef UINT16
+#undef boolean
 #endif
-*/
 
 #define USE_DEVIL 0
 
@@ -175,14 +179,24 @@ typedef struct tagPOINT {
 #endif
 
 #if USE_SDL
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4273)
+#endif
+
 #define GL_FUNC(ret,fn,params,call,rt) \
     extern "C" { \
-        static ret GLAPIENTRY (*p##fn) params = NULL; \
+        static ret (GLAPIENTRY *p##fn) params = NULL; \
         ret GLAPIENTRY fn params { rt p##fn call; } \
     }
 #include "glstubs.h"
 #undef GL_FUNC
 
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
 static bool lookup_glsym(const char *funcname, void **func)
 {
     *func = SDL_GL_GetProcAddress(funcname);
@@ -222,18 +236,14 @@ void sdlGetCursorPos(POINT *pt)
 #define SetCursorPos(x, y) SDL_WarpMouse(x, y)
 #define ScreenToClient(x, pt)
 #define ClientToScreen(x, pt)
+#ifdef MessageBox
+#undef MessageBox
+#endif
 #define MessageBox(hwnd,text,title,flags) STUBBED("msgbox")
 #endif
 
 Point delta;
 
-#ifdef WIN32
-static const char g_wndClassName[]={ "LUGARUWINDOWCLASS" };
-static HINSTANCE g_appInstance;
-static HWND g_windowHandle;
-static HGLRC hRC;
-#endif
-
 static bool g_button, fullscreen = true;
 
 
@@ -263,7 +273,7 @@ Boolean gDone = false, gfFrontProcess = true;
 
 Game * pgame = 0;
 
-#ifndef WIN32
+#ifndef __MINGW32__
 static int _argc = 0;
 static char **_argv = NULL;
 #endif
@@ -287,7 +297,7 @@ bool cmdline(const char *cmd)
 
 void ReportError (char * strError)
 {
-#ifdef WIN32  // !!! FIXME.  --ryan.
+#ifdef _MSC_VER  // !!! FIXME.  --ryan.
        throw std::exception( strError);
 #endif
 
@@ -304,44 +314,11 @@ void ReportError (char * strError)
 
 void SetupDSpFullScreen ()
 {
-#ifdef WIN32
-       LOGFUNC;
-
-       if (fullscreen)
-       {
-               DEVMODE dmScreenSettings;
-               memset( &dmScreenSettings, 0, sizeof( dmScreenSettings));
-               dmScreenSettings.dmSize = sizeof( dmScreenSettings);
-               dmScreenSettings.dmPelsWidth    = kContextWidth;
-               dmScreenSettings.dmPelsHeight   = kContextHeight;
-               dmScreenSettings.dmBitsPerPel   = kBitsPerPixel;
-               dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
-
-               // set video mode
-               if (ChangeDisplaySettings( &dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
-               {
-                       ReportError( "Could not set display mode");
-                       return;
-               }
-       }
-
-       ShowCursor(FALSE);
-#endif
 }
 
 
 void ShutdownDSp ()
 {
-#ifdef WIN32
-       LOGFUNC;
-
-       if (fullscreen)
-       {
-               ChangeDisplaySettings( NULL, 0);
-       }
-
-       ShowCursor(TRUE);
-#endif
 }
 
 
@@ -351,11 +328,6 @@ void ShutdownDSp ()
 
 void DrawGL (Game & game)
 {
-#ifdef WIN32
-       if (hDC == 0)
-               return;
-#endif
-
        game.DrawGLScene();
 }
 
@@ -589,6 +561,8 @@ static void sdlEventProc(const SDL_Event &e, Game &game)
                 ClearKey(MAC_CONTROL_KEY);
             if ((mod & KMOD_ALT) == 0)
                 ClearKey(MAC_OPTION_KEY);
+            if ((mod & KMOD_META) == 0)
+                ClearKey(MAC_COMMAND_KEY);
             if ((mod & KMOD_SHIFT) == 0)
                 ClearKey(MAC_SHIFT_KEY);
             if ((mod & KMOD_CAPS) == 0)
@@ -998,115 +972,6 @@ Boolean SetUp (Game & game)
 
     if (!cmdline("nomousegrab"))
         SDL_WM_GrabInput(SDL_GRAB_ON);
-
-#elif (defined WIN32)
-       //------------------------------------------------------------------
-       // create window
-       int x = 0, y = 0;
-       RECT r = {0, 0, kContextWidth-1, kContextHeight-1};
-       DWORD dwStyle = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE;
-       DWORD dwExStyle = WS_EX_APPWINDOW;
-
-       if (fullscreen)
-       {
-               dwStyle |= WS_POPUP;
-       }
-       else
-       {
-
-               dwStyle |= WS_OVERLAPPEDWINDOW;
-               dwExStyle |= WS_EX_WINDOWEDGE;
-       }
-
-       AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle);
-
-       if (!fullscreen)
-       {
-               x = (GetSystemMetrics(SM_CXSCREEN) >> 1) - ((r.right - r.left + 1) >> 1);
-               y = (GetSystemMetrics(SM_CYSCREEN) >> 1) - ((r.bottom - r.top + 1) >> 1);
-       }
-
-       g_windowHandle=CreateWindowEx(
-               dwExStyle,
-               g_wndClassName, "Lugaru", dwStyle,
-               x, y,
-//             kContextWidth, kContextHeight,
-               r.right - r.left + 1, r.bottom - r.top + 1,
-               NULL,NULL,g_appInstance,NULL );
-       if (!g_windowHandle)
-       {
-               ReportError("Could not create window");
-               return false;
-       }
-
-       //------------------------------------------------------------------
-       // setup OpenGL
-
-       static PIXELFORMATDESCRIPTOR pfd =
-       {
-               sizeof(PIXELFORMATDESCRIPTOR),                          // Size Of This Pixel Format Descriptor
-                       1,                                                                                      // Version Number
-                       PFD_DRAW_TO_WINDOW |                                            // Format Must Support Window
-                       PFD_SUPPORT_OPENGL |                                            // Format Must Support OpenGL
-                       PFD_DOUBLEBUFFER,                                                       // Must Support Double Buffering
-                       PFD_TYPE_RGBA,                                                          // Request An RGBA Format
-                       kBitsPerPixel,                                                          // Select Our Color Depth
-                       0, 0, 0, 0, 0, 0,                                                       // Color Bits Ignored
-                       0,                                                                                      // No Alpha Buffer
-                       0,                                                                                      // Shift Bit Ignored
-                       0,                                                                                      // No Accumulation Buffer
-                       0, 0, 0, 0,                                                                     // Accumulation Bits Ignored
-                       16,                                                                                     // 16Bit Z-Buffer (Depth Buffer)  
-                       0,                                                                                      // No Stencil Buffer
-                       0,                                                                                      // No Auxiliary Buffer
-                       PFD_MAIN_PLANE,                                                         // Main Drawing Layer
-                       0,                                                                                      // Reserved
-                       0, 0, 0                                                                         // Layer Masks Ignored
-       };
-
-       if (!(hDC = GetDC( g_windowHandle)))
-               ReportError( "Could not get device context");
-
-       GLuint PixelFormat;
-       if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd)))
-       {
-               ReportError( "Could not find appropriate pixel format");
-               return false;
-       }
-
-       if (!DescribePixelFormat(hDC, PixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd))
-       {
-               ReportError( "Could not retrieve pixel format");
-               return false;
-       }
-
-       if (!SetPixelFormat( hDC, PixelFormat, &pfd))
-       {
-               ReportError( "Could not set pixel format");
-               return false;
-       }
-
-       if (!(hRC = wglCreateContext(hDC)))
-       {
-               ReportError( "Could not create rendering context");
-               return false;
-       }
-
-       if (!wglMakeCurrent(hDC, hRC))
-       {
-               ReportError( "Could not activate rendering context");
-               return false;
-       }
-
-       if (fullscreen)
-       {
-               // Place the window above all topmost windows
-               SetWindowPos( g_windowHandle, HWND_TOPMOST, 0,0,0,0,
-                       SWP_NOMOVE | SWP_NOSIZE );
-       }
-
-       SetForegroundWindow(g_windowHandle);
-       SetFocus(g_windowHandle);
 #endif
 
        glClear( GL_COLOR_BUFFER_BIT );
@@ -1205,50 +1070,6 @@ static void DoMouse(Game & game)
         else if (game.mousecoordv >= kContextHeight)
             game.mousecoordv = kContextHeight - 1;
        }
-#else
-       static Point lastMouse = {-1,-1};
-       Point globalMouse;
-
-       POINT pos;
-       GetCursorPos(&pos);
-       ScreenToClient(g_windowHandle, &pos);
-       globalMouse.h = pos.x;
-       globalMouse.v = pos.y;
-
-       if (lastMouse.h == globalMouse.h && lastMouse.v == globalMouse.v)
-       {
-               game.deltah=0;
-               game.deltav=0;
-       }
-       else
-       {
-               static Point virtualMouse = {0,0};
-               delta = globalMouse;
-
-               delta.h -= lastMouse.h;
-               delta.v -= lastMouse.v;
-               lastMouse.h = pos.x;
-               lastMouse.v = pos.y;
-
-               if(mainmenu||(abs(delta.h)<10*realmultiplier*1000&&abs(delta.v)<10*realmultiplier*1000)){
-                       game.deltah=delta.h*usermousesensitivity;
-                       game.deltav=delta.v*usermousesensitivity;
-                       game.mousecoordh=globalMouse.h;
-                       game.mousecoordv=globalMouse.v;
-               }
-
-               if(!mainmenu)
-               {
-                       if(lastMouse.h>gMidPoint.h+100||lastMouse.h<gMidPoint.h-100||lastMouse.v>gMidPoint.v+100||lastMouse.v<gMidPoint.v-100){
-                               pos.x = gMidPoint.h;
-                               pos.y = gMidPoint.v;
-                               ClientToScreen(g_windowHandle, &pos);
-                               //SetCursorPos( gMidPoint.h,gMidPoint.v);
-                               SetCursorPos(pos.x, pos.y);
-                               lastMouse = gMidPoint;
-                       }
-               }
-       }
 #endif
 }
 
@@ -1397,30 +1218,6 @@ void CleanUp (void)
     // cheat here...static destructors are calling glDeleteTexture() after
     //  the context is destroyed and libGL unloaded by SDL_Quit().
     pglDeleteTextures = glDeleteTextures_doNothing;
-
-#elif (defined WIN32)
-       if (hRC)
-       {
-               wglMakeCurrent( NULL, NULL);
-               wglDeleteContext( hRC);
-               hRC = NULL;
-       }
-
-       if (hDC)
-       {
-               ReleaseDC( g_windowHandle, hDC);
-               hDC = NULL;
-       }
-
-       if (g_windowHandle)
-       {
-               ShowWindow( g_windowHandle, SW_HIDE );
-               DestroyWindow( g_windowHandle);
-               g_windowHandle = NULL;
-       }
-
-       ShutdownDSp ();
-       ClipCursor(NULL);
 #endif
 }
 
@@ -1431,17 +1228,7 @@ static bool g_focused = true;
 
 static bool IsFocused()
 {
-#ifdef WIN32
-       if (!g_focused)
-               return false;
-
-       if (GetActiveWindow() != g_windowHandle)
-               return false;
-
-       if (IsIconic( g_windowHandle))
-               return false;
-#endif
-
+    STUBBED("write me");
        return true;
 }
 
@@ -1574,17 +1361,19 @@ static inline void chdirToAppPath(const char *argv0)
 
 int main(int argc, char **argv)
 {
+#ifndef __MINGW32__
     _argc = argc;
     _argv = argv;
+#endif
+
+    // !!! FIXME: we could use a Win32 API for this.  --ryan.
 #ifndef WIN32
     chdirToAppPath(argv[0]);
 #endif
 
        LOGFUNC;
 
-#ifndef WIN32  // this is in WinMain, too.
        memset( &g_theKeys, 0, sizeof( KeyMap));
-#endif
 
     initSDLKeyTable();
 
@@ -1624,23 +1413,6 @@ int main(int argc, char **argv)
                                                }
                                                sdlEventProc(e, game);
                                        }
-
-                                       #elif (defined WIN32)
-                                       MSG msg;
-                                       // message pump
-                                       while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE | PM_NOYIELD ) )
-                                       {
-                                               if( msg.message == WM_QUIT )
-                                               {
-                                                       gDone=true;
-                                                       break;
-                                               }
-                                               else
-                                               {
-                                                       TranslateMessage( &msg );
-                                                       DispatchMessage( &msg );
-                                               }
-                                       }
                                        #endif
 
                                        // game
@@ -1656,31 +1428,7 @@ int main(int argc, char **argv)
                                        }
 
                                        // game is not in focus, give CPU time to other apps by waiting for messages instead of 'peeking'
-                    #ifdef WIN32
-                                       MSG msg;
-                                       BOOL bRet;
-                                       //if (GetMessage( &msg, g_windowHandle, 0, 0 ))
-                                       /*if (GetMessage( &msg, NULL, 0, 0 ))
-                                       {
-                                               TranslateMessage(&msg);
-                                               DispatchMessage(&msg);
-                                       }*/
-                                       if ( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
-                                       { 
-                                               if (bRet <= 0)
-                                               {
-                                                       // handle the error and possibly exit
-                                                       gDone=true;
-                                               }
-                                               else
-                                               {
-                                                       TranslateMessage(&msg); 
-                                                       DispatchMessage(&msg); 
-                                               }
-                                       }
-                    #else
                     STUBBED("give up CPU but sniff the event queue");
-                    #endif
                                }
                        }
 
@@ -1727,523 +1475,6 @@ int main(int argc, char **argv)
 
        // --------------------------------------------------------------------------
 
-#ifdef WIN32
-#define MAX_WINKEYS 256
-       static unsigned short KeyTable[MAX_WINKEYS]=
-       {
-               0xffff,  // (0)
-                       MAC_MOUSEBUTTON1,  // VK_LBUTTON        (1)
-                       MAC_MOUSEBUTTON2,  // VK_RBUTTON        (2)
-                       0xffff,  // VK_CANCEL   (3)
-                       0xffff,  // VK_MBUTTON  (4)
-                       0xffff,  // (5)
-                       0xffff,  // (6)
-                       0xffff,  // (7)
-                       MAC_DELETE_KEY,  // VK_BACK     (8)
-                       MAC_TAB_KEY,  // VK_TAB (9)
-                       0xffff,  // (10)
-                       0xffff,  // (11)
-                       0xffff,  // VK_CLEAR    (12)
-                       MAC_RETURN_KEY,  // VK_RETURN   (13)
-                       0xffff,  // (14)
-                       0xffff,  // (15)
-                       MAC_SHIFT_KEY,  // VK_SHIFT     (16)
-                       MAC_CONTROL_KEY,  // VK_CONTROL (17)
-                       MAC_OPTION_KEY,  // VK_MENU     (18)
-                       0xffff,  // VK_PAUSE    (19)
-                       MAC_CAPS_LOCK_KEY,  // #define VK_CAPITAL       (20)
-                       0xffff,  // (21)
-                       0xffff,  // (22)
-                       0xffff,  // (23)
-                       0xffff,  // (24)
-                       0xffff,  // (25)
-                       0xffff,  // (26)
-                       MAC_ESCAPE_KEY,  // VK_ESCAPE   (27)
-                       0xffff,  // (28)
-                       0xffff,  // (29)
-                       0xffff,  // (30)
-                       0xffff,  // (31)
-                       MAC_SPACE_KEY,  // VK_SPACE     (32)
-                       MAC_PAGE_UP_KEY,  // VK_PRIOR   (33)
-                       MAC_PAGE_DOWN_KEY,  // VK_NEXT  (34)
-                       MAC_END_KEY,  // VK_END (35)
-                       MAC_HOME_KEY,  // VK_HOME       (36)
-                       MAC_ARROW_LEFT_KEY,  // VK_LEFT (37)
-                       MAC_ARROW_UP_KEY,  // VK_UP     (38)
-                       MAC_ARROW_RIGHT_KEY,  // VK_RIGHT       (39)
-                       MAC_ARROW_DOWN_KEY,  // VK_DOWN (40)
-                       0xffff,  // VK_SELECT   (41)
-                       0xffff,  // VK_PRINT    (42)
-                       0xffff,  // VK_EXECUTE  (43)
-                       0xffff,  // VK_SNAPSHOT (44)
-                       MAC_INSERT_KEY,  // VK_INSERT   (45)
-                       MAC_DEL_KEY,  // VK_DELETE      (46)
-                       0xffff,  // VK_HELP     (47)
-                       MAC_0_KEY,  // VK_0     (48)
-                       MAC_1_KEY,  // VK_1     (49)
-                       MAC_2_KEY,  // VK_2     (50)
-                       MAC_3_KEY,  // VK_3     (51)
-                       MAC_4_KEY,  // VK_4     (52)
-                       MAC_5_KEY,  // VK_5     (53)
-                       MAC_6_KEY,  // VK_6     (54)
-                       MAC_7_KEY,  // VK_7     (55)
-                       MAC_8_KEY,  // VK_8     (56)
-                       MAC_9_KEY,  // VK_9     (57)
-                       0xffff,  // (58)
-                       0xffff,  // (59)
-                       0xffff,  // (60)
-                       0xffff,  // (61)
-                       0xffff,  // (62)
-                       0xffff,  // (63)
-                       0xffff,  // (64)
-                       MAC_A_KEY,  // VK_A     (65)
-                       MAC_B_KEY,  // VK_B     (66)
-                       MAC_C_KEY,  // VK_C     (67)
-                       MAC_D_KEY,  // VK_D     (68)
-                       MAC_E_KEY,  // VK_E     (69)
-                       MAC_F_KEY,  // VK_F     (70)
-                       MAC_G_KEY,  // VK_G     (71)
-                       MAC_H_KEY,  // VK_H     (72)
-                       MAC_I_KEY,  // VK_I     (73)
-                       MAC_J_KEY,  // VK_J     (74)
-                       MAC_K_KEY,  // VK_K     (75)
-                       MAC_L_KEY,  // VK_L     (76)
-                       MAC_M_KEY,  // VK_M     (77)
-                       MAC_N_KEY,  // VK_N     (78)
-                       MAC_O_KEY,  // VK_O     (79)
-                       MAC_P_KEY,  // VK_P     (80)
-                       MAC_Q_KEY,  // VK_Q     (81)
-                       MAC_R_KEY,  // VK_R     (82)
-                       MAC_S_KEY,  // VK_S     (83)
-                       MAC_T_KEY,  // VK_T     (84)
-                       MAC_U_KEY,  // VK_U     (85)
-                       MAC_V_KEY,  // VK_V     (86)
-                       MAC_W_KEY,  // VK_W     (87)
-                       MAC_X_KEY,  // VK_X     (88)
-                       MAC_Y_KEY,  // VK_Y     (89)
-                       MAC_Z_KEY,  // VK_Z     (90)
-                       0xffff,  // (91)
-                       0xffff,  // (92)
-                       0xffff,  // (93)
-                       0xffff,  // (94)
-                       0xffff,  // (95)
-                       MAC_NUMPAD_0_KEY,  // VK_NUMPAD0        (96)
-                       MAC_NUMPAD_1_KEY,  // VK_NUMPAD1        (97)
-                       MAC_NUMPAD_2_KEY,  // VK_NUMPAD2        (98)
-                       MAC_NUMPAD_3_KEY,  // VK_NUMPAD3        (99)
-                       MAC_NUMPAD_4_KEY,  // VK_NUMPAD4        (100)
-                       MAC_NUMPAD_5_KEY,  // VK_NUMPAD5        (101)
-                       MAC_NUMPAD_6_KEY,  // VK_NUMPAD6        (102)
-                       MAC_NUMPAD_7_KEY,  // VK_NUMPAD7        (103)
-                       MAC_NUMPAD_8_KEY,  // VK_NUMPAD8        (104)
-                       MAC_NUMPAD_9_KEY,  // VK_NUMPAD9        (105)
-                       MAC_NUMPAD_ASTERISK_KEY,  // VK_MULTIPLY        (106)
-                       MAC_NUMPAD_PLUS_KEY,  // VK_ADD (107)
-                       MAC_NUMPAD_ENTER_KEY,  // VK_SEPARATOR  (108)
-                       MAC_NUMPAD_MINUS_KEY,  // VK_SUBTRACT   (109)
-                       MAC_NUMPAD_PERIOD_KEY,  // VK_DECIMAL   (110)
-                       MAC_NUMPAD_SLASH_KEY,  // VK_DIVIDE     (111)
-                       MAC_F1_KEY,  // VK_F1   (112)
-                       MAC_F2_KEY,  // VK_F2   (113)
-                       MAC_F3_KEY,  // VK_F3   (114)
-                       MAC_F4_KEY,  // VK_F4   (115)
-                       MAC_F5_KEY,  // VK_F5   (116)
-                       MAC_F6_KEY,  // VK_F6   (117)
-                       MAC_F7_KEY,  // VK_F7   (118)
-                       MAC_F8_KEY,  // VK_F8   (119)
-                       MAC_F9_KEY,  // VK_F9   (120)
-                       MAC_F10_KEY,  // VK_F10 (121)
-                       MAC_F11_KEY,  // VK_F11 (122)
-                       MAC_F12_KEY,  // VK_F12 (123)
-                       0xffff,  // (124)
-                       0xffff,  // (125)
-                       0xffff,  // (126)
-                       0xffff,  // (127)
-                       0xffff,  // (128)
-                       0xffff,  // (129)
-                       0xffff,  // (130)
-                       0xffff,  // (131)
-                       0xffff,  // (132)
-                       0xffff,  // (133)
-                       0xffff,  // (134)
-                       0xffff,  // (135)
-                       0xffff,  // (136)
-                       0xffff,  // (137)
-                       0xffff,  // (138)
-                       0xffff,  // (139)
-                       0xffff,  // (130)
-                       0xffff,  // (141)
-                       0xffff,  // (142)
-                       0xffff,  // (143)
-                       0xffff,  // VK_NUMLOCK  (144)
-                       0xffff,  // VK_SCROLL   (145)
-                       0xffff,  // (146)
-                       0xffff,  // (147)
-                       0xffff,  // (148)
-                       0xffff,  // (149)
-                       0xffff,  // (150)
-                       0xffff,  // (151)
-                       0xffff,  // (152)
-                       0xffff,  // (153)
-                       0xffff,  // (154)
-                       0xffff,  // (155)
-                       0xffff,  // (156)
-                       0xffff,  // (157)
-                       0xffff,  // (158)
-                       0xffff,  // (159)
-                       MAC_SHIFT_KEY,  // VK_LSHIFT    (160)
-                       MAC_SHIFT_KEY,  // VK_RSHIFT    (161)
-                       MAC_CONTROL_KEY,  // VK_LCONTROL        (162)
-                       MAC_CONTROL_KEY,  // VK_RCONTROL        (163)
-                       MAC_OPTION_KEY,  // VK_LMENU    (164)
-                       MAC_OPTION_KEY,  // VK_RMENU    (165)
-                       0xffff,  // (166)
-                       0xffff,  // (167)
-                       0xffff,  // (168)
-                       0xffff,  // (169)
-                       0xffff,  // (170)
-                       0xffff,  // (171)
-                       0xffff,  // (172)
-                       0xffff,  // (173)
-                       0xffff,  // (174)
-                       0xffff,  // (175)
-                       0xffff,  // (176)
-                       0xffff,  // (177)
-                       0xffff,  // (178)
-                       0xffff,  // (179)
-                       0xffff,  // (180)
-                       0xffff,  // (181)
-                       0xffff,  // (182)
-                       0xffff,  // (183)
-                       0xffff,  // (184)
-                       0xffff,  // (185)
-                       MAC_SEMICOLON_KEY,  // (186)
-                       MAC_PLUS_KEY,  // (187)
-                       MAC_COMMA_KEY,  // (188)
-                       MAC_MINUS_KEY,  // (189)
-                       MAC_PERIOD_KEY,  // (190)
-                       MAC_SLASH_KEY,  // (191)
-                       MAC_TILDE_KEY,  // (192)
-                       0xffff,  // (193)
-                       0xffff,  // (194)
-                       0xffff,  // (195)
-                       0xffff,  // (196)
-                       0xffff,  // (197)
-                       0xffff,  // (198)
-                       0xffff,  // (199)
-                       0xffff,  // (200)
-                       0xffff,  // (201)
-                       0xffff,  // (202)
-                       0xffff,  // (203)
-                       0xffff,  // (204)
-                       0xffff,  // (205)
-                       0xffff,  // (206)
-                       0xffff,  // (207)
-                       0xffff,  // (208)
-                       0xffff,  // (209)
-                       0xffff,  // (210)
-                       0xffff,  // (211)
-                       0xffff,  // (212)
-                       0xffff,  // (213)
-                       0xffff,  // (214)
-                       0xffff,  // (215)
-                       0xffff,  // (216)
-                       0xffff,  // (217)
-                       0xffff,  // (218)
-                       MAC_LEFTBRACKET_KEY,  // (219)
-                       MAC_BACKSLASH_KEY,  // (220)
-                       MAC_RIGHTBRACKET_KEY,  // (221)
-                       MAC_APOSTROPHE_KEY,  // (222)
-                       0xffff,  // (223)
-                       0xffff,  // (224)
-                       0xffff,  // (225)
-                       0xffff,  // (226)
-                       0xffff,  // (227)
-                       0xffff,  // (228)
-                       0xffff,  // (229)
-                       0xffff,  // (230)
-                       0xffff,  // (231)
-                       0xffff,  // (232)
-                       0xffff,  // (233)
-                       0xffff,  // (234)
-                       0xffff,  // (235)
-                       0xffff,  // (236)
-                       0xffff,  // (237)
-                       0xffff,  // (238)
-                       0xffff,  // (239)
-                       0xffff,  // (240)
-                       0xffff,  // (241)
-                       0xffff,  // (242)
-                       0xffff,  // (243)
-                       0xffff,  // (244)
-                       0xffff,  // (245)
-                       0xffff,  // (246)
-                       0xffff,  // (247)
-                       0xffff,  // (248)
-                       0xffff,  // (249)
-                       0xffff,  // (250)
-                       0xffff,  // (251)
-                       0xffff,  // (252)
-                       0xffff,  // (253)
-                       0xffff,  // (254)
-                       0xffff,  // (255)
-       };
-
-       void ClipMouseToWindow(HWND window)
-       {
-               RECT wRect;
-
-               GetClientRect(window, &wRect);
-
-               ClientToScreen(window, (LPPOINT)&wRect.left);
-               ClientToScreen(window, (LPPOINT)&wRect.right);
-
-               ClipCursor(&wRect);
-
-               return;
-       }
-
-       LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
-       {
-               /* this is where we receive all messages concerning this window
-               * we can either process a message or pass it on to the default
-               * message handler of windows */
-
-               static PAINTSTRUCT ps;
-
-               switch(msg)
-               {
-               case WM_ACTIVATE:       // Watch For Window Activate Message
-                       {
-                               // Check Minimization State
-                               BOOL iconified = HIWORD(wParam) ? TRUE : FALSE;
-
-                               if (LOWORD(wParam) == WA_INACTIVE)
-                               {
-                                       ClipCursor(NULL);
-
-                                       if (fullscreen)
-                                       {
-                                               if( !iconified )
-                                               {
-                                                       // Minimize window
-                                                       CloseWindow( hWnd );
-
-                                                       // The window is now iconified
-                                                       iconified = GL_TRUE;
-                                               }
-                                       }
-
-                                       ShutdownDSp();
-
-                                       g_focused=false;                                // Program Is Active
-                               }
-                               else
-                               {
-                                       SetupDSpFullScreen();
-
-                                       if( iconified )
-                                       {
-                                               // Minimize window
-                                               OpenIcon( hWnd );
-
-                                               // The window is now iconified
-                                               iconified = GL_FALSE;
-
-                                               // Activate window
-                                               ShowWindow( hWnd, SW_SHOW );
-                                               SetForegroundWindow( hWnd );
-                                               SetFocus( hWnd );
-                                       }
-
-                                       ClipMouseToWindow(hWnd);
-                                       g_focused=true;                 // Program Is No Longer Active
-                               }
-
-                               return 0;                                               // Return To The Message Loop
-                       }
-
-               case WM_KEYDOWN:
-               case WM_SYSKEYDOWN:
-                       {
-                               // check for Alt-F4 (exit hotkey)
-                               if (wParam == VK_F4)
-                               {
-                                       if (GetKeyState( VK_MENU) & 0x8080)
-                                       {
-                                               gDone = true;
-                                               break;
-                                       }
-                               }
-                               if (wParam < MAX_WINKEYS)
-                               {
-                                       if (KeyTable[wParam] != 0xffff)
-                                               SetKey( KeyTable[wParam]);
-                               }
-                               return (0);
-                       }
-
-               case WM_KEYUP:
-               case WM_SYSKEYUP:
-                       {
-                               if (wParam < MAX_WINKEYS)
-                                       if (KeyTable[wParam] != 0xffff)
-                                               ClearKey( KeyTable[wParam]);
-                               return (0);
-                       }
-
-               case WM_CHAR:
-               case WM_DEADCHAR:
-               case WM_SYSCHAR:
-               case WM_SYSDEADCHAR:
-                       return (0);
-
-               case WM_NCLBUTTONDOWN:
-               case WM_LBUTTONDOWN:
-                       {
-                               g_button = true;
-                               buttons[ 0] = true;
-                       }
-                       return (0);
-
-               case WM_NCRBUTTONDOWN:
-               case WM_RBUTTONDOWN:
-                       {
-                               buttons[ 1] = true;
-                       }
-                       return (0);
-
-               case WM_NCMBUTTONDOWN:
-               case WM_MBUTTONDOWN:
-                       {
-                               buttons[ 2] = true;
-                       }
-                       return (0);
-
-               case WM_NCLBUTTONUP:
-               case WM_LBUTTONUP:
-                       {
-                               g_button = false;
-                               buttons[ 0] = false;
-                       }
-                       return (0);
-
-               case WM_NCRBUTTONUP:
-               case WM_RBUTTONUP:
-                       {
-                               buttons[ 1] = false;
-                       }
-                       return (0);
-
-               case WM_NCMBUTTONUP:
-               case WM_MBUTTONUP:
-                       {
-                               buttons[ 2] = false;
-                       }
-                       return (0);
-
-               case WM_NCLBUTTONDBLCLK:
-               case WM_NCRBUTTONDBLCLK:
-               case WM_NCMBUTTONDBLCLK:
-               case WM_LBUTTONDBLCLK:
-                       return (0);
-               case WM_RBUTTONDBLCLK:
-               case WM_MBUTTONDBLCLK:
-                       return (0);
-
-               case WM_NCMOUSEMOVE:
-               case WM_MOUSEMOVE:
-                       /*                      ((WindowInfo *)g_lastWindow->GetInfo())->m_mouseX = (signed short)(lParam & 0xffff);
-                       ((WindowInfo *)g_lastWindow->GetInfo())->m_mouseY = (signed short)(lParam >> 16);
-                       if (g_lastWindow->m_mouseCallbacksEnabled) g_lastWindow->MouseMoveCallback();
-                       *///                    goto winmessage;
-                       return (0);
-
-               case WM_SYSCOMMAND:                                             // Intercept System Commands
-                       {
-                               switch (wParam)                                         // Check System Calls
-                               {
-                               case SC_SCREENSAVE:                             // Screensaver Trying To Start?
-                               case SC_MONITORPOWER:                   // Monitor Trying To Enter Powersave?
-                                       return 0;                                       // Prevent From Happening
-
-                                       // User trying to access application menu using ALT?
-                               case SC_KEYMENU:
-                                       return 0;
-                               }
-                       }
-                       break;
-
-               case WM_MOVE:
-//                     {
-//                             ReleaseCapture();
-//                             ClipMouseToWindow(hWnd);
-//                     }
-                       break;
-
-               case WM_SIZE:
-                       break;
-
-               case WM_CLOSE:
-                       {
-                               //gDone =  true;
-                               //game.tryquit=1;
-                       }
-                       //return (0);
-
-               case WM_DESTROY:
-                       {
-                               //ClipCursor(NULL);
-                               PostQuitMessage(0);  /* Terminate Application */
-                       }
-                       return (0);
-
-               case WM_ERASEBKGND:
-                       break;
-
-               case WM_PAINT:
-//                     BeginPaint( g_windowHandle,&ps);
-//                     EndPaint( g_windowHandle,&ps);
-                       break;
-
-               default:
-                       break;
-               }
-
-               /* We processed the message and there
-               * is no processing by Windows necessary */
-
-               /* We didn't process the message so let Windows do it */
-               return DefWindowProc(hWnd,msg,wParam,lParam);
-       }
-
-
-       static BOOL RegisterWindowClasses(HINSTANCE hFirstInstance)
-       {
-               WNDCLASSEX wc;
-               memset( &wc, 0, sizeof( wc));
-
-               /* Register the window class. */
-               wc.cbSize = sizeof(wc);
-#undef style
-               wc.style = (CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_OWNDC);  /* Combination of Class Styles */
-               wc.lpfnWndProc = AppWndProc;       /* Adress of Window Procedure */
-               wc.cbClsExtra = 0;                 /* Extra Bytes allocated for this Class */
-               wc.cbWndExtra = 0;                 /* Extra Bytes allocated for each Window */
-               wc.hInstance = hFirstInstance;     /* Handle of program instance */
-               wc.hIcon = LoadIcon( hFirstInstance, MAKEINTRESOURCE(IDI_LUGARU) );
-               wc.hCursor = LoadCursor(NULL, IDC_ARROW);
-               wc.hbrBackground = NULL;
-               wc.lpszMenuName  = NULL;
-               wc.lpszClassName = g_wndClassName; /* Name of the Window Class */
-               wc.hIconSm = LoadIcon( hFirstInstance, MAKEINTRESOURCE(IDI_LUGARU) );
-
-               if (!RegisterClassEx(&wc)) return FALSE;  /* Register Class failed */
-
-               return TRUE;
-       }
-#endif
-
 #if !USE_SDL
        int resolutionID(int width, int height)
        {
@@ -2359,69 +1590,6 @@ int main(int argc, char **argv)
                return res;
        }
 
-    #ifdef WIN32
-       int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
-       {
-               int argc = 0;
-               LPWSTR * cl = CommandLineToArgvW(GetCommandLineW(), &argc);
-               if (argc > 1)
-               {
-                       if (0 == _wcsicmp(cl[1], L"-windowed"))
-                       {
-                               fullscreen = false;
-                       }
-               }
-
-               memset( &g_theKeys, 0, sizeof( KeyMap));
-
-               unsigned int i = 0;
-               DEVMODE mode;
-               memset(&mode, 0, sizeof(mode));
-               mode.dmSize = sizeof(mode);
-               while (EnumDisplaySettings(NULL, i++, &mode))
-               {
-                       if (mode.dmBitsPerPel < 16)
-                       {
-                               continue;
-                       }
-
-                       int res = resolutionID(mode.dmPelsWidth, mode.dmPelsHeight);
-
-                       if (res > -1 && res < 8)
-                       {
-                               if (DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettings(&mode, CDS_TEST))
-                               {
-                                       continue;
-                               }
-
-                               switch(mode.dmBitsPerPel)
-                               {
-                               case 32:
-                               case 24:
-                                       resolutionDepths[res][1] = mode.dmBitsPerPel;
-                                       break;
-                               case 16:
-                                       resolutionDepths[res][0] = mode.dmBitsPerPel;
-                                       break;
-                               }
-                       }
-               }
-
-               /* if there is no Instance of our program in memory then register the window class */
-               if (hPrevInstance == NULL && !RegisterWindowClasses(hInstance))
-                       return FALSE;  /* registration failed! */
-
-               g_appInstance=hInstance;
-
-               main(0, NULL);
-
-               UnregisterClass( g_wndClassName, hInstance);
-
-               return TRUE;
-
-       }
-    #endif
-
        extern int channels[100];
        extern OPENAL_SAMPLE * samp[100];
        extern OPENAL_STREAM * strm[20];
index 82501be5f4cb081c5a1e66258fc853d8bdec24c9..b27cb182aa4601fea6b0e6e56d6991985f0a1183 100644 (file)
@@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #define Polygon WinPolygon
 #include <windows.h>
 #undef Polygon
-#include <gl/gl.h>
+#include "GL/gl.h"
 #else
 #include "gamegl.h"
 //     #include "MoreFilesX.h"
index 1298b38fc8ddaf19792ce227fe3451aacfb168a1..e1c2878b4fc4686c665e9421a4f89422872e6a96 100644 (file)
@@ -85,30 +85,18 @@ void Text::BuildFont()                                                              // Build Our Font Display List
 //     base=glGenLists(256);                                                           // Creating 256 Display Lists
        base=glGenLists(512);                                                           // Creating 256 Display Lists
        glBindTexture(GL_TEXTURE_2D, FontTexture);                      // Select Our Font Texture
-       for (loop=0; loop<256; loop++)                                          // Loop Through All 256 Lists
+       for (loop=0; loop<512; loop++)                                          // Loop Through All 256 Lists
        {
-               cx=float(loop%16)/16.0f;                                                // X Position Of Current Character
-               cy=float(loop/16)/16.0f;                                                // Y Position Of Current Character
-
-               glNewList(base+loop,GL_COMPILE);                                // Start Building A List
-               glBegin(GL_QUADS);                                                      // Use A Quad For Each Character
-               glTexCoord2f(cx,1-cy-0.0625f+.001);                     // Texture Coord (Bottom Left)
-               glVertex2i(0,0);                                                // Vertex Coord (Bottom Left)
-               glTexCoord2f(cx+0.0625f,1-cy-0.0625f+.001);     // Texture Coord (Bottom Right)
-               glVertex2i(16,0);                                               // Vertex Coord (Bottom Right)
-               glTexCoord2f(cx+0.0625f,1-cy-.001);                     // Texture Coord (Top Right)
-               glVertex2i(16,16);                                              // Vertex Coord (Top Right)
-               glTexCoord2f(cx,1-cy-+.001);                                    // Texture Coord (Top Left)
-               glVertex2i(0,16);                                               // Vertex Coord (Top Left)
-               glEnd();                                                                        // Done Building Our Quad (Character)
-               glTranslated(10,0,0);                                           // Move To The Right Of The Character
-               glEndList();                                                                    // Done Building The Display List
-       }                                                                                                       // Loop Until All 256 Are Built
-       for (loop=256; loop<512; loop++)                                                // Loop Through All 256 Lists
-       {
-               cx=float((loop-256)%16)/16.0f;                                          // X Position Of Current Character
-               cy=float((loop-256)/16)/16.0f;                                          // Y Position Of Current Character
-
+               if (loop < 256)
+               {
+                       cx=float(loop%16)/16.0f;                                                // X Position Of Current Character
+                       cy=float(loop/16)/16.0f;                                                // Y Position Of Current Character
+               }
+               else
+               {
+                       cx=float((loop-256)%16)/16.0f;                                          // X Position Of Current Character
+                       cy=float((loop-256)/16)/16.0f;                                          // Y Position Of Current Character
+               }
                glNewList(base+loop,GL_COMPILE);                                // Start Building A List
                glBegin(GL_QUADS);                                                      // Use A Quad For Each Character
                glTexCoord2f(cx,1-cy-0.0625f+.001);                     // Texture Coord (Bottom Left)
@@ -120,43 +108,20 @@ void Text::BuildFont()                                                            // Build Our Font Display List
                glTexCoord2f(cx,1-cy-+.001);                                    // Texture Coord (Top Left)
                glVertex2i(0,16);                                               // Vertex Coord (Top Left)
                glEnd();                                                                        // Done Building Our Quad (Character)
-               glTranslated(8,0,0);                                            // Move To The Right Of The Character
+               if (loop < 256)
+                       glTranslated(10,0,0);                                           // Move To The Right Of The Character
+               else
+                       glTranslated(8,0,0);                                            // Move To The Right Of The Character
                glEndList();                                                                    // Done Building The Display List
        }                                                                                                       // Loop Until All 256 Are Built
 }
 
 void Text::glPrint(float x, float y, char *string, int set, float size, float width, float height)     // Where The Printing Happens
 {
-       if (set>1)
-       {
-               set=1;
-       }
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
-       glBindTexture(GL_TEXTURE_2D, FontTexture);                      // Select Our Font Texture
-       glDisable(GL_DEPTH_TEST);                                                       // Disables Depth Testing
-       glDisable(GL_LIGHTING);
-       glEnable(GL_BLEND);
-       glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-       glPushMatrix();                                                                         // Store The Projection Matrix
-               glLoadIdentity();                                                                       // Reset The Projection Matrix
-               glOrtho(0,width,0,height,-100,100);                                             // Set Up An Ortho Screen
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-               glPushMatrix();                                                                         // Store The Modelview Matrix
-                       glLoadIdentity();
-                       glTranslated(x,y,0);                                                            // Position The Text (0,0 - Bottom Left)
-                       glScalef(size,size,1);                                                                  // Reset The Modelview Matrix
-                       glListBase(base-32+(128*set));                                          // Choose The Font Set (0 or 1)
-                       glCallLists(strlen(string),GL_BYTE,string);                     // Write The Text To The Screen
-                       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-               glPopMatrix();                                                                          // Restore The Old Projection Matrix
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-       glPopMatrix();                                                                          // Restore The Old Projection Matrix
-       glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+       glPrint(x, y, string, set, size, width, height, 0, strlen(string));
 }
 
-void Text::glPrint(float x, float y, char *string, int set, float size, float width, float height,int start,int end)   // Where The Printing Happens
+void Text::_glPrint(float x, float y, char *string, int set, float size, float width, float height,int start,int end, int offset)      // Where The Printing Happens
 {
        if (set>1)
        {
@@ -177,7 +142,7 @@ void Text::glPrint(float x, float y, char *string, int set, float size, float wi
                        glLoadIdentity();
                        glTranslated(x,y,0);                                                            // Position The Text (0,0 - Bottom Left)
                        glScalef(size,size,1);                                                                  // Reset The Modelview Matrix
-                       glListBase(base-32+(128*set));                                          // Choose The Font Set (0 or 1)
+                       glListBase(base-32+(128*set) + offset);                                         // Choose The Font Set (0 or 1)
                        glCallLists(end-start,GL_BYTE,&string[start]);                  // Write The Text To The Screen
                        glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
                glPopMatrix();                                                                          // Restore The Old Projection Matrix
@@ -187,75 +152,23 @@ void Text::glPrint(float x, float y, char *string, int set, float size, float wi
        glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
 }
 
+void Text::glPrint(float x, float y, char *string, int set, float size, float width, float height,int start,int end)   // Where The Printing Happens
+{
+       _glPrint(x, y, string, set, size, width, height, start, end, 0);
+}
 
 void Text::glPrintOutline(float x, float y, char *string, int set, float size, float width, float height)      // Where The Printing Happens
 {
-       if (set>1)
-       {
-               set=1;
-       }
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
-       glBindTexture(GL_TEXTURE_2D, FontTexture);                      // Select Our Font Texture
-       glDisable(GL_DEPTH_TEST);                                                       // Disables Depth Testing
-       glDisable(GL_LIGHTING);
-       glEnable(GL_BLEND);
-       glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-       glPushMatrix();                                                                         // Store The Projection Matrix
-               glLoadIdentity();                                                                       // Reset The Projection Matrix
-               glOrtho(0,width,0,height,-100,100);                                             // Set Up An Ortho Screen
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-               glPushMatrix();                                                                         // Store The Modelview Matrix
-                       glLoadIdentity();
-                       glTranslated(x,y,0);                                                            // Position The Text (0,0 - Bottom Left)
-                       glScalef(size,size,1);                                                                  // Reset The Modelview Matrix
-                       glListBase(base-32+(128*set)+256);                                              // Choose The Font Set (0 or 1)
-                       glCallLists(strlen(string),GL_BYTE,string);                     // Write The Text To The Screen
-                       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-               glPopMatrix();                                                                          // Restore The Old Projection Matrix
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-       glPopMatrix();                                                                          // Restore The Old Projection Matrix
-       glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+       glPrintOutline(x, y, string, set, size, width, height, 0, strlen(string));
 }
 
 void Text::glPrintOutline(float x, float y, char *string, int set, float size, float width, float height,int start,int end)    // Where The Printing Happens
 {
-       if (set>1)
-       {
-               set=1;
-       }
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
-       glBindTexture(GL_TEXTURE_2D, FontTexture);                      // Select Our Font Texture
-       glDisable(GL_DEPTH_TEST);                                                       // Disables Depth Testing
-       glDisable(GL_LIGHTING);
-       glEnable(GL_BLEND);
-       glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
-       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-       glPushMatrix();                                                                         // Store The Projection Matrix
-               glLoadIdentity();                                                                       // Reset The Projection Matrix
-               glOrtho(0,width,0,height,-100,100);                                             // Set Up An Ortho Screen
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-               glPushMatrix();                                                                         // Store The Modelview Matrix
-                       glLoadIdentity();
-                       glTranslated(x,y,0);                                                            // Position The Text (0,0 - Bottom Left)
-                       glScalef(size,size,1);                                                                  // Reset The Modelview Matrix
-                       glListBase(base-32+(128*set)+256);                                              // Choose The Font Set (0 or 1)
-                       glCallLists(end-start,GL_BYTE,&string[start]);                  // Write The Text To The Screen
-                       glMatrixMode(GL_PROJECTION);                                            // Select The Projection Matrix
-               glPopMatrix();                                                                          // Restore The Old Projection Matrix
-               glMatrixMode(GL_MODELVIEW);                                                     // Select The Modelview Matrix
-       glPopMatrix();                                                                          // Restore The Old Projection Matrix
-       glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
-       glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
+       _glPrint(x, y, string, set, size, width, height, start, end, 256);
 }
-
 void Text::glPrintOutlined(float x, float y, char *string, int set, float size, float width, float height)     // Where The Printing Happens
 {
-       glColor4f(0,0,0,1);
-       glPrintOutline( x-2*size,  y-2*size, string,  set,  size*2.5/2,  width,  height);
-       glColor4f(1,1,1,1);
-       glPrint( x,  y, string,  set,  size,  width,  height);
+       glPrintOutlined(1, 1, 1, x, y, string, set, size, width, height);
 }
 
 void Text::glPrintOutlined(float r, float g, float b, float x, float y, char *string, int set, float size, float width, float height)  // Where The Printing Happens
index 8627479092ceaf9ad285a3bc6d216bbc3974fb7f..d2502abed9d3e5cc4f8ffd7bc5185af6fa1974fc 100644 (file)
@@ -46,6 +46,9 @@ public:
 
        Text();
        ~Text();
+
+private:
+       void _glPrint(float x, float y, char *string, int set, float size, float width, float height, int start, int end, int offset);
 };
 
 #endif
index c13bb917b9f79c95939eee2550b218e5e176c171..59b1277eb2f90e50c6de09f759417a7504b5a9c9 100644 (file)
@@ -61,306 +61,6 @@ Boolean     IsKeyDown( unsigned char *keyMap, unsigned short theKey )
        return 0;
 }
 
-#if defined(_WIN32)
-unsigned short         CharToKey(const char* which)
-{
-       // alphabetic keys
-       if(!stricmp(which,"a")){
-               return MAC_A_KEY;
-       }
-       if(!stricmp(which,"b")){
-               return MAC_B_KEY;
-       }
-       if(!stricmp(which,"c")){
-               return MAC_C_KEY;
-       }
-       if(!stricmp(which,"d")){
-               return MAC_D_KEY;
-       }
-       if(!stricmp(which,"e")){
-               return MAC_E_KEY;
-       }
-       if(!stricmp(which,"f")){
-               return MAC_F_KEY;
-       }
-       if(!stricmp(which,"g")){
-               return MAC_G_KEY;
-       }
-       if(!stricmp(which,"h")){
-               return MAC_H_KEY;
-       }
-       if(!stricmp(which,"i")){
-               return MAC_I_KEY;
-       }
-       if(!stricmp(which,"j")){
-               return MAC_J_KEY;
-       }
-       if(!stricmp(which,"k")){
-               return MAC_K_KEY;
-       }
-       if(!stricmp(which,"l")){
-               return MAC_L_KEY;
-       }
-       if(!stricmp(which,"m")){
-               return MAC_M_KEY;
-       }
-       if(!stricmp(which,"n")){
-               return MAC_N_KEY;
-       }
-       if(!stricmp(which,"o")){
-               return MAC_O_KEY;
-       }
-       if(!stricmp(which,"p")){
-               return MAC_P_KEY;
-       }
-       if(!stricmp(which,"q")){
-               return MAC_Q_KEY;
-       }
-       if(!stricmp(which,"r")){
-               return MAC_R_KEY;
-       }
-       if(!stricmp(which,"s")){
-               return MAC_S_KEY;
-       }
-       if(!stricmp(which,"t")){
-               return MAC_T_KEY;
-       }
-       if(!stricmp(which,"u")){
-               return MAC_U_KEY;
-       }
-       if(!stricmp(which,"v")){
-               return MAC_V_KEY;
-       }
-       if(!stricmp(which,"w")){
-               return MAC_W_KEY;
-       }
-       if(!stricmp(which,"x")){
-               return MAC_X_KEY;
-       }
-       if(!stricmp(which,"y")){
-               return MAC_Y_KEY;
-       }
-       if(!stricmp(which,"z")){
-               return MAC_Z_KEY;
-       }
-
-       // keypad keys
-       if(!stricmp(which,"KP0")){
-               return MAC_NUMPAD_0_KEY;
-       }
-       if(!stricmp(which,"KP1")){
-               return MAC_NUMPAD_1_KEY;
-       }
-       if(!stricmp(which,"KP2")){
-               return MAC_NUMPAD_2_KEY;
-       }
-       if(!stricmp(which,"KP3")){
-               return MAC_NUMPAD_3_KEY;
-       }
-       if(!stricmp(which,"KP4")){
-               return MAC_NUMPAD_4_KEY;
-       }
-       if(!stricmp(which,"KP5")){
-               return MAC_NUMPAD_5_KEY;
-       }
-       if(!stricmp(which,"KP6")){
-               return MAC_NUMPAD_6_KEY;
-       }
-       if(!stricmp(which,"KP7")){
-               return MAC_NUMPAD_7_KEY;
-       }
-       if(!stricmp(which,"KP8")){
-               return MAC_NUMPAD_8_KEY;
-       }
-       if(!stricmp(which,"KP9")){
-               return MAC_NUMPAD_9_KEY;
-       }
-
-       // enter
-       if(!stricmp(which,"enter")){
-               return MAC_ENTER_KEY;
-       }
-
-       // number keys
-       if(!stricmp(which,"0")){
-               return MAC_0_KEY;
-       }
-       if(!stricmp(which,"1")){
-               return MAC_1_KEY;
-       }
-       if(!stricmp(which,"2")){
-               return MAC_2_KEY;
-       }
-       if(!stricmp(which,"3")){
-               return MAC_3_KEY;
-       }
-       if(!stricmp(which,"4")){
-               return MAC_4_KEY;
-       }
-       if(!stricmp(which,"5")){
-               return MAC_5_KEY;
-       }
-       if(!stricmp(which,"6")){
-               return MAC_6_KEY;
-       }
-       if(!stricmp(which,"7")){
-               return MAC_7_KEY;
-       }
-       if(!stricmp(which,"8")){
-               return MAC_8_KEY;
-       }
-       if(!stricmp(which,"9")){
-               return MAC_9_KEY;
-       }
-
-       // function keys
-       if(!stricmp(which,"F1")){
-               return MAC_F1_KEY;
-       }
-       if(!stricmp(which,"F2")){
-               return MAC_F2_KEY;
-       }
-       if(!stricmp(which,"F3")){
-               return MAC_F3_KEY;
-       }
-       if(!stricmp(which,"F4")){
-               return MAC_F4_KEY;
-       }
-       if(!stricmp(which,"F5")){
-               return MAC_F5_KEY;
-       }
-       if(!stricmp(which,"F6")){
-               return MAC_F6_KEY;
-       }
-       if(!stricmp(which,"F7")){
-               return MAC_F7_KEY;
-       }
-       if(!stricmp(which,"F8")){
-               return MAC_F8_KEY;
-       }
-       if(!stricmp(which,"F9")){
-               return MAC_F9_KEY;
-       }
-       if(!stricmp(which,"F10")){
-               return MAC_F10_KEY;
-       }
-       if(!stricmp(which,"F11")){
-               return MAC_F11_KEY;
-       }
-       if(!stricmp(which,"F12")){
-               return MAC_F12_KEY;
-       }
-
-       // escape
-       if(!stricmp(which,"escape")){
-               return MAC_ESCAPE_KEY;
-       }
-       if(!stricmp(which,"backspace")){
-               return MAC_DELETE_KEY;
-       }
-       if(!stricmp(which,"tab")){
-               return MAC_TAB_KEY;
-       }
-       if(!stricmp(which,"`")){
-               return MAC_TILDE_KEY;
-       }
-       if(!stricmp(which,"caps_lock")){
-               return MAC_CAPS_LOCK_KEY;
-       }
-//     if(which==){
-//             return "";
-//     }
-       if(!stricmp(which,"command")){
-               return MAC_COMMAND_KEY;
-       }
-       if(!stricmp(which,"option")){
-               return MAC_OPTION_KEY;
-       }
-       if(!stricmp(which,"delete")){
-               return MAC_DEL_KEY;
-       }
-       if(!stricmp(which,"insert")){
-               return MAC_INSERT_KEY;
-       }
-       if(!stricmp(which,"home")){
-               return MAC_HOME_KEY;
-       }
-       if(!stricmp(which,"end")){
-               return MAC_END_KEY;
-       }
-       if(!stricmp(which,"page_up")){
-               return MAC_PAGE_UP_KEY;
-       }
-       if(!stricmp(which,"page_down")){
-               return MAC_PAGE_DOWN_KEY;
-       }
-       if(!stricmp(which,"clear")){
-               return MAC_NUMPAD_CLEAR_KEY;
-       }
-
-       if(!stricmp(which,"control")){
-               return MAC_CONTROL_KEY;
-       }
-       if(!stricmp(which,"return")){
-               return MAC_RETURN_KEY;
-       }
-       if(!stricmp(which,"space")){
-               return MAC_SPACE_KEY;
-       }
-       if(!stricmp(which,"shift")){
-               return MAC_SHIFT_KEY;
-       }
-       if(!stricmp(which,"uparrow")){
-               return MAC_ARROW_UP_KEY;
-       }
-       if(!stricmp(which,"downarrow")){
-               return MAC_ARROW_DOWN_KEY;
-       }
-       if(!stricmp(which,"leftarrow")){
-               return MAC_ARROW_LEFT_KEY;
-       }
-       if(!stricmp(which,"rightarrow")){
-               return MAC_ARROW_RIGHT_KEY;
-       }
-       if(!stricmp(which,"mouse1")){
-               return MAC_MOUSEBUTTON1;
-       }
-       if(!stricmp(which,"mouse2")){
-               return MAC_MOUSEBUTTON2;
-       }
-       if(!stricmp(which,"+")){
-               return MAC_NUMPAD_PLUS_KEY;
-       }
-       if(!stricmp(which,"*")){
-               return MAC_NUMPAD_ASTERISK_KEY;
-       }
-       if(!stricmp(which,"/")){
-               return MAC_SLASH_KEY;
-       }
-       if(!stricmp(which,"\\")){
-               return MAC_BACKSLASH_KEY;
-       }
-       if(!stricmp(which,"[")){
-               return MAC_LEFTBRACKET_KEY;
-       }
-       if(!stricmp(which,"]")){
-               return MAC_RIGHTBRACKET_KEY;
-       }
-       if(!stricmp(which,".")){
-               return MAC_PERIOD_KEY;
-       }
-       if(!stricmp(which,",")){
-               return MAC_COMMA_KEY;
-       }
-       if(!stricmp(which,"\"")){
-               return MAC_APOSTROPHE_KEY;
-       }
-       if(!stricmp(which,";")){
-               return MAC_SEMICOLON_KEY;
-       }
-       return UNKNOWN_KEY;
-}
-#else
 unsigned short         CharToKey(const char* which)
 {
        // alphabetic keys
@@ -659,7 +359,6 @@ unsigned short      CharToKey(const char* which)
        }
        return UNKNOWN_KEY;
 }
-#endif
 
 const char*    KeyToChar(unsigned short which)
 {
index 20d94ce125d9799cc2c84c6a1ecb9afe411f1991..e6823615fdbe9e82094d816305f886aec343d394 100644 (file)
@@ -30,32 +30,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <map>
 #include <string>
 
-#ifndef WIN32
-  #if PLATFORM_UNIX
-    #define GL_GLEXT_PROTOTYPES
-    #include "GL/gl.h"
-    #include "GL/glu.h"
-    #include "GL/glext.h"
-  #else
-    #include <GL/gl.h>
-    #include <GL/glu.h>
-    #include <GL/glext.h>
-  #endif
-#else
+#ifdef WIN32
   #define WIN32_LEAN_AND_MEAN
   #define Polygon WinPolygon
   #include <windows.h>
   #undef Polygon
-  #define GL_GLEXT_PROTOTYPES
-  #include <gl/gl.h>
-  #include <gl/glu.h>
-  //#include <gl/glaux.h> -- EVIL and OLD, NEVER USE IT!
-  #include <gl/glext.h>
-  #include "MacCompatibility.h"
-  //#include "il/ilut.h"
-
 #endif
 
+#define GL_GLEXT_PROTOTYPES 1
+#include "GL/gl.h"
+#include "GL/glu.h"
+#include "GL/glext.h"
+#include "MacCompatibility.h"
+
 #if !PLATFORM_MACOSX
 struct RGBColor
 {
index 08ab1bea3969a76fd0be4efbb6d2a00fac49dea0..f31c6c081277da807afc713ab0b9db4080c62e43 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef OPENAL_WRAPPER_H
 #define OPENAL_WRAPPER_H
 
+#ifdef _WIN32
+#include <malloc.h>
+#endif
+
 #include "AL/al.h"
 #include "AL/alc.h"
 
diff --git a/Source/wincompat.h b/Source/wincompat.h
deleted file mode 100644 (file)
index f521267..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-Copyright (C) 2003, 2010 - Wolfire Games
-
-This file is part of Lugaru.
-
-Lugaru is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-*/
-
-#if !defined(WINCOMPAT_INCLUDED) && !defined(PLATFORM_WINDOWS) && !defined(WIN32) && !defined(WINDOWS) && !defined(__WIN32__)
-#define WINCOMPAT_INCLUDED
-
-/**
- * 
- * Author: Magnus Naeslund (mag@fbab.net, mag@bahnhof.se)
- * (c) 2000 Magnus Naeslund, all rights reserved
- * 
- */
-
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <termios.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef TRUE
-  #define TRUE 1
-#endif
-#ifndef FALSE
-  #define FALSE 0
-#endif
-
-#define _kbhit kbhit
-#define stricmp strcasecmp
-#define strnicmp strncasecmp
-
-#define Sleep(x) usleep((x)*1000)
-
-static int            inited=0;
-static struct termios ori;
-
-static void tcatexit(){
-   tcsetattr(0,0,&ori);
-}
-
-static void init_terminal(){
-   struct termios t;
-   tcgetattr(0,&t);
-   tcgetattr(0,&ori);
-   t.c_lflag &= ~(ICANON);
-   tcsetattr(0,0,&t);
-   atexit(tcatexit);
-}
-
-static inline int kbhit(){
-  fd_set rfds;
-  struct timeval tv;
-
-   if (!inited){
-         inited=1;
-         init_terminal();
-   }
-   
-   FD_ZERO(&rfds);
-   FD_SET(0, &rfds);
-   tv.tv_sec = 0;
-   tv.tv_usec = 10*1000;
-   return select(1, &rfds, NULL, NULL, &tv)>0;
-}
-
-static inline int getch(){
-   fd_set rfds;
-   
-   if (!inited){
-         inited=1;
-         init_terminal();
-   }
-   
-   FD_ZERO(&rfds);
-   FD_SET(0, &rfds);
-   if (select(1, &rfds, NULL, NULL, NULL)>0)
-        return getchar();
-   else{
-         printf("wincompat.h: select() on fd 0 failed\n");
-         return 0xDeadBeef;
-   }    
-}
-
-#endif
-
index 5dd3b426cd527fd61f0bdaf78986a272421e65eb..4527b4518bed3d6c7d0e9da8ccb8cb794cb4d3a5 100644 (file)
@@ -100,6 +100,9 @@ ifeq ($(strip $(macosx)),true)
     LDFLAGS += -Wl,-syslibroot,$(XCODE_DIR)/SDKs/$(macosx_sdk_dir)
        LDFLAGS += -framework Cocoa -framework OpenGL -framework IOKit -framework CoreFoundation -framework Carbon -framework OpenAL
        LDFLAGS += ./Dependencies/SDL12/lib/macosx/libSDL-1.2.0.dylib ./Dependencies/SDL12/lib/macosx/libSDLmain-osx.a
+
+       INCLUDES += -IDependencies/OpenAL/include/AL
+       INCLUDES += -IDependencies/SDL12/include
 else
        CXX := g++
        CC := gcc