Windows vm now tries vm-console.image or vm.image first, then removes -console if it exists and tries to find the image again
parent
5e4265507e
commit
ed7b49df78
11
Makefile
11
Makefile
|
@ -3,7 +3,7 @@ AR = ar
|
||||||
LD = ld
|
LD = ld
|
||||||
|
|
||||||
EXECUTABLE = factor
|
EXECUTABLE = factor
|
||||||
CONSOLE_EXECUTABLE = factor_console
|
CONSOLE_EXECUTABLE = factor-console
|
||||||
VERSION = 0.92
|
VERSION = 0.92
|
||||||
|
|
||||||
IMAGE = factor.image
|
IMAGE = factor.image
|
||||||
|
@ -140,15 +140,10 @@ zlib1.dll:
|
||||||
winnt-x86-32: freetype6.dll zlib1.dll
|
winnt-x86-32: freetype6.dll zlib1.dll
|
||||||
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
|
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
|
||||||
$(MAKE) $(CONSOLE_EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
|
$(MAKE) $(CONSOLE_EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.32
|
||||||
$(MAKE) winnt-finish
|
|
||||||
|
|
||||||
winnt-x86-64:
|
winnt-x86-64:
|
||||||
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64
|
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64
|
||||||
$(MAKE) $(CONSOLE_EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64
|
$(MAKE) $(CONSOLE_EXECUTABLE) CONFIG=vm/Config.windows.nt.x86.64
|
||||||
$(MAKE) winnt-finish
|
|
||||||
|
|
||||||
winnt-finish:
|
|
||||||
cp misc/factor-cygwin.sh ./factor
|
|
||||||
|
|
||||||
wince-arm:
|
wince-arm:
|
||||||
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm
|
$(MAKE) $(EXECUTABLE) CONFIG=vm/Config.windows.ce.arm
|
||||||
|
@ -169,10 +164,10 @@ factor: $(DLL_OBJS) $(EXE_OBJS)
|
||||||
$(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \
|
$(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \
|
||||||
$(CFLAGS) -o $@$(EXE_SUFFIX)$(EXE_EXTENSION) $(EXE_OBJS)
|
$(CFLAGS) -o $@$(EXE_SUFFIX)$(EXE_EXTENSION) $(EXE_OBJS)
|
||||||
|
|
||||||
factor_console: $(DLL_OBJS) $(EXE_OBJS)
|
factor-console: $(DLL_OBJS) $(EXE_OBJS)
|
||||||
$(LINKER) $(ENGINE) $(DLL_OBJS)
|
$(LINKER) $(ENGINE) $(DLL_OBJS)
|
||||||
$(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \
|
$(CC) $(LIBS) $(LIBPATH) -L. $(LINK_WITH_ENGINE) \
|
||||||
$(CFLAGS) $(CFLAGS_CONSOLE) -o $(EXECUTABLE)$(EXE_SUFFIX)$(CONSOLE_EXE_EXTENSION) $(EXE_OBJS)
|
$(CFLAGS) $(CFLAGS_CONSOLE) -o $@$(EXE_SUFFIX)$(EXE_EXTENSION) $(EXE_OBJS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f vm/*.o
|
rm -f vm/*.o
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
./factor.com "$@"
|
|
|
@ -2,7 +2,6 @@ CFLAGS += -DWINDOWS -mno-cygwin
|
||||||
LIBS = -lm
|
LIBS = -lm
|
||||||
PLAF_DLL_OBJS += vm/os-windows.o
|
PLAF_DLL_OBJS += vm/os-windows.o
|
||||||
EXE_EXTENSION=.exe
|
EXE_EXTENSION=.exe
|
||||||
CONSOLE_EXE_EXTENSION=.com
|
|
||||||
DLL_EXTENSION=.dll
|
DLL_EXTENSION=.dll
|
||||||
LINKER = $(CC) -shared -mno-cygwin -o
|
LINKER = $(CC) -shared -mno-cygwin -o
|
||||||
LINK_WITH_ENGINE = -l$(DLL_PREFIX)factor$(DLL_SUFFIX)
|
LINK_WITH_ENGINE = -l$(DLL_PREFIX)factor$(DLL_SUFFIX)
|
||||||
|
|
100
vm/os-windows.c
100
vm/os-windows.c
|
@ -59,39 +59,9 @@ void ffi_dlclose(F_DLL *dll)
|
||||||
dll->dll = NULL;
|
dll->dll = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* You must free() this yourself. */
|
bool windows_stat(F_CHAR *path)
|
||||||
const F_CHAR *default_image_path(void)
|
|
||||||
{
|
|
||||||
F_CHAR full_path[MAX_UNICODE_PATH];
|
|
||||||
F_CHAR *ptr;
|
|
||||||
F_CHAR path_temp[MAX_UNICODE_PATH];
|
|
||||||
|
|
||||||
if(!GetModuleFileName(NULL, full_path, MAX_UNICODE_PATH))
|
|
||||||
fatal_error("GetModuleFileName() failed", 0);
|
|
||||||
|
|
||||||
if((ptr = wcsrchr(full_path, '.')))
|
|
||||||
*ptr = 0;
|
|
||||||
|
|
||||||
snwprintf(path_temp, sizeof(path_temp)-1, L"%s.image", full_path);
|
|
||||||
path_temp[sizeof(path_temp) - 1] = 0;
|
|
||||||
|
|
||||||
return safe_strdup(path_temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* You must free() this yourself. */
|
|
||||||
const F_CHAR *vm_executable_path(void)
|
|
||||||
{
|
|
||||||
F_CHAR full_path[MAX_UNICODE_PATH];
|
|
||||||
if(!GetModuleFileName(NULL, full_path, MAX_UNICODE_PATH))
|
|
||||||
fatal_error("GetModuleFileName() failed", 0);
|
|
||||||
return safe_strdup(full_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void primitive_existsp(void)
|
|
||||||
{
|
{
|
||||||
BY_HANDLE_FILE_INFORMATION bhfi;
|
BY_HANDLE_FILE_INFORMATION bhfi;
|
||||||
|
|
||||||
F_CHAR *path = unbox_u16_string();
|
|
||||||
HANDLE h = CreateFileW(path,
|
HANDLE h = CreateFileW(path,
|
||||||
GENERIC_READ,
|
GENERIC_READ,
|
||||||
FILE_SHARE_READ,
|
FILE_SHARE_READ,
|
||||||
|
@ -107,17 +77,67 @@ void primitive_existsp(void)
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
|
|
||||||
if(INVALID_HANDLE_VALUE == (h = FindFirstFile(path, &st)))
|
if(INVALID_HANDLE_VALUE == (h = FindFirstFile(path, &st)))
|
||||||
dpush(F);
|
return false;
|
||||||
else
|
FindClose(h);
|
||||||
{
|
return true;
|
||||||
FindClose(h);
|
}
|
||||||
dpush(T);
|
bool ret;
|
||||||
}
|
ret = GetFileInformationByHandle(h, &bhfi);
|
||||||
return;
|
CloseHandle(h);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void windows_image_path(F_CHAR *full_path, F_CHAR *temp_path, unsigned int length)
|
||||||
|
{
|
||||||
|
snwprintf(temp_path, length-1, L"%s.image", full_path);
|
||||||
|
temp_path[sizeof(temp_path) - 1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* You must free() this yourself. */
|
||||||
|
const F_CHAR *default_image_path(void)
|
||||||
|
{
|
||||||
|
F_CHAR full_path[MAX_UNICODE_PATH];
|
||||||
|
F_CHAR *ptr;
|
||||||
|
F_CHAR temp_path[MAX_UNICODE_PATH];
|
||||||
|
|
||||||
|
if(!GetModuleFileName(NULL, full_path, MAX_UNICODE_PATH))
|
||||||
|
fatal_error("GetModuleFileName() failed", 0);
|
||||||
|
|
||||||
|
if((ptr = wcsrchr(full_path, '.')))
|
||||||
|
*ptr = 0;
|
||||||
|
|
||||||
|
snwprintf(temp_path, sizeof(temp_path)-1, L"%s.image", full_path);
|
||||||
|
temp_path[sizeof(temp_path) - 1] = 0;
|
||||||
|
|
||||||
|
if(!windows_stat(temp_path)) {
|
||||||
|
unsigned int len = wcslen(full_path);
|
||||||
|
F_CHAR magic[] = L"-console";
|
||||||
|
unsigned int magic_len = wcslen(magic);
|
||||||
|
|
||||||
|
if(!wcsncmp(full_path + len - magic_len, magic, MIN(len, magic_len)))
|
||||||
|
full_path[len - magic_len] = 0;
|
||||||
|
snwprintf(temp_path, sizeof(temp_path)-1, L"%s.image", full_path);
|
||||||
|
temp_path[sizeof(temp_path) - 1] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
box_boolean(GetFileInformationByHandle(h, &bhfi));
|
return safe_strdup(temp_path);
|
||||||
CloseHandle(h);
|
}
|
||||||
|
|
||||||
|
/* You must free() this yourself. */
|
||||||
|
const F_CHAR *vm_executable_path(void)
|
||||||
|
{
|
||||||
|
F_CHAR full_path[MAX_UNICODE_PATH];
|
||||||
|
if(!GetModuleFileName(NULL, full_path, MAX_UNICODE_PATH))
|
||||||
|
fatal_error("GetModuleFileName() failed", 0);
|
||||||
|
return safe_strdup(full_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void primitive_existsp(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
F_CHAR *path = unbox_u16_string();
|
||||||
|
box_boolean(windows_stat(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
F_SEGMENT *alloc_segment(CELL size)
|
F_SEGMENT *alloc_segment(CELL size)
|
||||||
|
|
|
@ -19,6 +19,7 @@ typedef wchar_t F_CHAR;
|
||||||
#define STRCMP wcscmp
|
#define STRCMP wcscmp
|
||||||
#define STRNCMP wcsncmp
|
#define STRNCMP wcsncmp
|
||||||
#define STRDUP _wcsdup
|
#define STRDUP _wcsdup
|
||||||
|
#define MIN(a,b) ((a)>(b)?(b):(a))
|
||||||
|
|
||||||
#ifdef WIN64
|
#ifdef WIN64
|
||||||
#define CELL_FORMAT "%Iu"
|
#define CELL_FORMAT "%Iu"
|
||||||
|
|
Loading…
Reference in New Issue