starting to eliminate the file exchange
This commit is contained in:
parent
1edc41d324
commit
92bab154e0
|
@ -54,6 +54,7 @@ typedef Sys_File_Untrack_Sig(System_File_Untrack);
|
||||||
struct File_Loading{
|
struct File_Loading{
|
||||||
Plat_Handle handle;
|
Plat_Handle handle;
|
||||||
i32 size;
|
i32 size;
|
||||||
|
b32 exists;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define Sys_File_Load_Begin_Sig(name) File_Loading name(char *filename)
|
#define Sys_File_Load_Begin_Sig(name) File_Loading name(char *filename)
|
||||||
|
@ -62,7 +63,7 @@ typedef Sys_File_Load_Begin_Sig(System_File_Load_Begin);
|
||||||
#define Sys_File_Load_End_Sig(name) b32 name(File_Loading loading, char *buffer)
|
#define Sys_File_Load_End_Sig(name) b32 name(File_Loading loading, char *buffer)
|
||||||
typedef Sys_File_Load_End_Sig(System_File_Load_End);
|
typedef Sys_File_Load_End_Sig(System_File_Load_End);
|
||||||
|
|
||||||
#define Sys_File_Save_Sig(name) void name(char *filename, char *buffer, i32 size)
|
#define Sys_File_Save_Sig(name) b32 name(char *filename, char *buffer, i32 size)
|
||||||
typedef Sys_File_Save_Sig(System_File_Save);
|
typedef Sys_File_Save_Sig(System_File_Save);
|
||||||
|
|
||||||
|
|
||||||
|
|
212
win32_4ed.cpp
212
win32_4ed.cpp
|
@ -170,6 +170,35 @@ globalvar Win32_Vars win32vars;
|
||||||
globalvar Application_Memory memory_vars;
|
globalvar Application_Memory memory_vars;
|
||||||
globalvar Exchange exchange_vars;
|
globalvar Exchange exchange_vars;
|
||||||
|
|
||||||
|
internal HANDLE
|
||||||
|
Win32Handle(Plat_Handle h){
|
||||||
|
HANDLE result;
|
||||||
|
memcpy(&result, &h, sizeof(result));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal Plat_Handle
|
||||||
|
Win32Handle(HANDLE h){
|
||||||
|
Plat_Handle result = {0};
|
||||||
|
Assert(sizeof(Plat_Handle) >= sizeof(h));
|
||||||
|
memcpy(&result, &h, sizeof(h));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void*
|
||||||
|
Win32Ptr(Plat_Handle h){
|
||||||
|
void *result;
|
||||||
|
memcpy(&result, &h, sizeof(result));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal Plat_Handle
|
||||||
|
Win32Ptr(void *h){
|
||||||
|
Plat_Handle result = {0};
|
||||||
|
memcpy(&result, &h, sizeof(h));
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// System Layer Memory
|
// System Layer Memory
|
||||||
//
|
//
|
||||||
|
@ -244,7 +273,7 @@ INTERNAL_system_debug_message(char *message){
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// System Layer File Services
|
// Platform Layer File Services
|
||||||
//
|
//
|
||||||
|
|
||||||
internal
|
internal
|
||||||
|
@ -262,10 +291,87 @@ Sys_File_Can_Be_Made_Sig(system_file_can_be_made){
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_File_Load_Begin_Sig(system_file_load_begin){
|
||||||
|
File_Loading loading = {0};
|
||||||
|
HANDLE file = 0;
|
||||||
|
|
||||||
|
file = CreateFile(filename, GENERIC_READ, 0, 0,
|
||||||
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
|
|
||||||
|
if (file && file != INVALID_HANDLE_VALUE){
|
||||||
|
DWORD lo, hi;
|
||||||
|
lo = GetFileSize(file, &hi);
|
||||||
|
|
||||||
|
if (hi == 0){
|
||||||
|
loading.handle = Win32Handle(file);
|
||||||
|
loading.size = lo;
|
||||||
|
loading.exists = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CloseHandle(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(loading);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_File_Load_End_Sig(system_file_load_end){
|
||||||
|
b32 success = 0;
|
||||||
|
HANDLE file = Win32Handle(loading.handle);
|
||||||
|
|
||||||
|
DWORD read_size = 0;
|
||||||
|
BOOL read_result = 0;
|
||||||
|
|
||||||
|
if (loading.exists && file != INVALID_HANDLE_VALUE){
|
||||||
|
read_result =
|
||||||
|
ReadFile(file,
|
||||||
|
buffer, loading.size,
|
||||||
|
&read_size, 0);
|
||||||
|
|
||||||
|
if (read_result && read_size == (DWORD)loading.size){
|
||||||
|
success = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return(success);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_File_Save_Sig(system_file_save){
|
||||||
|
b32 success = 0;
|
||||||
|
|
||||||
|
HANDLE file =
|
||||||
|
CreateFile((char*)filename, GENERIC_WRITE, 0, 0,
|
||||||
|
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
|
|
||||||
|
if (!file || file == INVALID_HANDLE_VALUE){
|
||||||
|
success = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
BOOL write_result = 0;
|
||||||
|
DWORD bytes_written = 0;
|
||||||
|
|
||||||
|
if (buffer){
|
||||||
|
write_result = WriteFile(file, buffer, size, &bytes_written, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(file);
|
||||||
|
|
||||||
|
if (!write_result || bytes_written != (u32)size){
|
||||||
|
success = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(success);
|
||||||
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_Load_File_Sig(system_load_file){
|
Sys_Load_File_Sig(system_load_file){
|
||||||
File_Data result = {0};
|
File_Data result = {0};
|
||||||
HANDLE file = 0;
|
|
||||||
|
|
||||||
String fname_str = make_string_slowly(filename);
|
String fname_str = make_string_slowly(filename);
|
||||||
if (fname_str.size >= 1024) return(result);
|
if (fname_str.size >= 1024) return(result);
|
||||||
|
@ -274,83 +380,45 @@ Sys_Load_File_Sig(system_load_file){
|
||||||
String fixed_str = make_fixed_width_string(fixed_space);
|
String fixed_str = make_fixed_width_string(fixed_space);
|
||||||
copy(&fixed_str, fname_str);
|
copy(&fixed_str, fname_str);
|
||||||
terminate_with_null(&fixed_str);
|
terminate_with_null(&fixed_str);
|
||||||
|
|
||||||
replace_char(fixed_str, '/', '\\');
|
replace_char(fixed_str, '/', '\\');
|
||||||
|
|
||||||
file = CreateFile((char*)fixed_str.str, GENERIC_READ, 0, 0,
|
File_Loading loading =
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
system_file_load_begin(fixed_str.str);
|
||||||
if (!file || file == INVALID_HANDLE_VALUE){
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD lo, hi;
|
result.got_file = loading.exists;
|
||||||
lo = GetFileSize(file, &hi);
|
|
||||||
|
|
||||||
if (hi != 0){
|
if (loading.size > 0){
|
||||||
CloseHandle(file);
|
result.data.size = loading.size;
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
result.data.size = (lo) + (((u64)hi) << 32);
|
|
||||||
|
|
||||||
if (result.data.size > 0){
|
|
||||||
result.data.data = (byte*)Win32GetMemory(result.data.size);
|
result.data.data = (byte*)Win32GetMemory(result.data.size);
|
||||||
|
|
||||||
if (!result.data.data){
|
if (!result.data.data){
|
||||||
CloseHandle(file);
|
system_file_load_end(loading, 0);
|
||||||
result = file_data_zero();
|
result = file_data_zero();
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD read_size;
|
|
||||||
BOOL read_result =
|
|
||||||
ReadFile(file,
|
|
||||||
result.data.data, result.data.size,
|
|
||||||
&read_size, 0);
|
|
||||||
result.got_file = 1;
|
|
||||||
if (!read_result || read_size != (u32)result.data.size){
|
|
||||||
CloseHandle(file);
|
|
||||||
Win32FreeMemory(result.data.data);
|
|
||||||
result = file_data_zero();
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
result.got_file = 1;
|
if (!system_file_load_end(loading, (char*)result.data.data)){
|
||||||
|
Win32FreeMemory(result.data.data);
|
||||||
|
result = file_data_zero();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(file);
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(allen): eliminate this
|
||||||
internal
|
internal
|
||||||
Sys_Save_File_Sig(system_save_file){
|
Sys_Save_File_Sig(system_save_file){
|
||||||
HANDLE file =
|
return(system_file_save(filename, data, size));
|
||||||
CreateFile((char*)filename, GENERIC_WRITE, 0, 0,
|
|
||||||
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
|
||||||
|
|
||||||
if (!file || file == INVALID_HANDLE_VALUE){
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL write_result = 0;
|
|
||||||
DWORD bytes_written = 0;
|
|
||||||
write_result = WriteFile(file, data, size, &bytes_written, 0);
|
|
||||||
|
|
||||||
CloseHandle(file);
|
|
||||||
|
|
||||||
if (!write_result || bytes_written != (u32)size){
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(allen): THIS system does not really work.
|
// TODO(allen): THIS system does not really work.
|
||||||
// I want to eliminate them both entirely and find a better
|
// I want to eliminate them both entirely and find a better
|
||||||
// way to track the dirty state of files. It shouldn't be too
|
// way to track the dirty state of files. It shouldn't be too
|
||||||
// hard to get the * part right. The trick is how we will know
|
// hard to get the * part right. The trick is how we will know
|
||||||
// when a file is updated... hmm... maybe we can keep the file_time_stamp
|
// when a file is updated... hmm... maybe we can keep the
|
||||||
// part.
|
// file_time_stamp part.
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_File_Time_Stamp_Sig(system_file_time_stamp){
|
Sys_File_Time_Stamp_Sig(system_file_time_stamp){
|
||||||
|
@ -647,28 +715,6 @@ Win32Resize(i32 width, i32 height){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal HANDLE
|
|
||||||
Win32Handle(Plat_Handle h){
|
|
||||||
HANDLE result;
|
|
||||||
memcpy(&result, &h, sizeof(result));
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void*
|
|
||||||
Win32Ptr(Plat_Handle h){
|
|
||||||
void *result;
|
|
||||||
memcpy(&result, &h, sizeof(result));
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal Plat_Handle
|
|
||||||
Win32GenHandle(HANDLE h){
|
|
||||||
Plat_Handle result = {};
|
|
||||||
Assert(sizeof(Plat_Handle) >= sizeof(h));
|
|
||||||
memcpy(&result, &h, sizeof(h));
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal DWORD WINAPI
|
internal DWORD WINAPI
|
||||||
JobThreadProc(LPVOID lpParameter){
|
JobThreadProc(LPVOID lpParameter){
|
||||||
Thread_Context *thread = (Thread_Context*)lpParameter;
|
Thread_Context *thread = (Thread_Context*)lpParameter;
|
||||||
|
@ -853,7 +899,7 @@ Sys_Create_Coroutine_Sig(system_create_coroutine){
|
||||||
|
|
||||||
fiber = CreateFiber(0, Win32CoroutineMain, coroutine);
|
fiber = CreateFiber(0, Win32CoroutineMain, coroutine);
|
||||||
|
|
||||||
coroutine->plat_handle = Win32GenHandle(fiber);
|
coroutine->plat_handle = Win32Handle(fiber);
|
||||||
coroutine->func = func;
|
coroutine->func = func;
|
||||||
|
|
||||||
return(coroutine);
|
return(coroutine);
|
||||||
|
@ -1112,6 +1158,9 @@ Win32LoadSystemCode(){
|
||||||
win32vars.system->set_file_list = system_set_file_list;
|
win32vars.system->set_file_list = system_set_file_list;
|
||||||
win32vars.system->file_track = system_file_track;
|
win32vars.system->file_track = system_file_track;
|
||||||
win32vars.system->file_untrack = system_file_untrack;
|
win32vars.system->file_untrack = system_file_untrack;
|
||||||
|
win32vars.system->file_load_begin = system_file_load_begin;
|
||||||
|
win32vars.system->file_load_end = system_file_load_end;
|
||||||
|
win32vars.system->file_save = system_file_save;
|
||||||
|
|
||||||
win32vars.system->file_exists = system_file_exists;
|
win32vars.system->file_exists = system_file_exists;
|
||||||
win32vars.system->directory_cd = system_directory_cd;
|
win32vars.system->directory_cd = system_directory_cd;
|
||||||
|
@ -1717,9 +1766,8 @@ int main(int argc, char **argv){
|
||||||
win32vars.thread_memory = thread_memory;
|
win32vars.thread_memory = thread_memory;
|
||||||
|
|
||||||
exchange_vars.thread.queues[BACKGROUND_THREADS].semaphore =
|
exchange_vars.thread.queues[BACKGROUND_THREADS].semaphore =
|
||||||
Win32GenHandle(
|
Win32Handle(CreateSemaphore(0, 0,
|
||||||
CreateSemaphore(0, 0, win32vars.groups[BACKGROUND_THREADS].count, 0)
|
win32vars.groups[BACKGROUND_THREADS].count, 0));
|
||||||
);
|
|
||||||
|
|
||||||
u32 creation_flag = 0;
|
u32 creation_flag = 0;
|
||||||
for (i32 i = 0; i < win32vars.groups[BACKGROUND_THREADS].count; ++i){
|
for (i32 i = 0; i < win32vars.groups[BACKGROUND_THREADS].count; ++i){
|
||||||
|
|
Loading…
Reference in New Issue