| 49 |
#include "compat_win.h" |
#include "compat_win.h" |
| 50 |
#include "asprintf.h" |
#include "asprintf.h" |
| 51 |
|
|
| 52 |
|
#include "ttcmn_dup.h" |
| 53 |
|
|
| 54 |
#define DllExport __declspec(dllexport) |
#define DllExport __declspec(dllexport) |
| 55 |
#include "ttcommon.h" |
#include "ttcommon.h" |
| 56 |
|
|
| 58 |
typedef struct { |
typedef struct { |
| 59 |
size_t size_tmap; /* sizeof TMap */ |
size_t size_tmap; /* sizeof TMap */ |
| 60 |
size_t size_tttset; /* sizeof TTTSet */ |
size_t size_tttset; /* sizeof TTTSet */ |
|
/* Setup information from "teraterm.ini" */ |
|
|
TTTSet ts; |
|
| 61 |
// Window list |
// Window list |
| 62 |
int NWin; |
int NWin; |
| 63 |
HWND WinList[MAXNWIN]; |
HWND WinList[MAXNWIN]; |
| 71 |
WINDOWPLACEMENT WinPrevRect[MAXNWIN]; |
WINDOWPLACEMENT WinPrevRect[MAXNWIN]; |
| 72 |
BOOL WinUndoFlag; |
BOOL WinUndoFlag; |
| 73 |
int WinUndoStyle; |
int WinUndoStyle; |
| 74 |
|
// Duplicate Teraterm data |
| 75 |
|
HANDLE DuplicateDataHandle; |
| 76 |
|
DWORD DuplicateDataSizeLow; |
| 77 |
} TMap; |
} TMap; |
| 78 |
typedef TMap *PMap; |
typedef TMap *PMap; |
| 79 |
|
|
| 99 |
WIN_SIDEBYSIDE, |
WIN_SIDEBYSIDE, |
| 100 |
}; |
}; |
| 101 |
|
|
| 102 |
|
static const char DupDataName[] = "dupdata"; |
| 103 |
|
|
| 104 |
void WINAPI CopyShmemToTTSet(PTTSet ts) |
void WINAPI CopyShmemToTTSet(PTTSet ts) |
| 105 |
{ |
{ |
| 106 |
// 現在の設定を共有メモリからコピーする |
DWORD size = pm->DuplicateDataSizeLow; |
| 107 |
memcpy(ts, &pm->ts, sizeof(TTTSet)); |
HANDLE handle = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, DupDataName); |
| 108 |
|
void *ptr = (void *)MapViewOfFile(handle, FILE_MAP_ALL_ACCESS, 0, 0, 0); |
| 109 |
|
TTCMNUnserialize(ptr, (size_t)size, ts); |
| 110 |
|
UnmapViewOfFile(ptr); |
| 111 |
|
CloseHandle(handle); |
| 112 |
|
pm->DuplicateDataSizeLow = 0; |
| 113 |
} |
} |
| 114 |
|
|
| 115 |
void WINAPI CopyTTSetToShmem(PTTSet ts) |
void WINAPI CopyTTSetToShmem(PTTSet ts) |
| 116 |
{ |
{ |
| 117 |
// 現在の設定を共有メモリへコピーする |
size_t size; |
| 118 |
memcpy(&pm->ts, ts, sizeof(TTTSet)); |
void *ptr = TTCMNSerialize(ts, &size); |
| 119 |
|
if (ptr != NULL) { |
| 120 |
|
HANDLE handle = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, (DWORD)size, DupDataName); |
| 121 |
|
void *dest = (void *)MapViewOfFile(handle, FILE_MAP_ALL_ACCESS,0,0,0); |
| 122 |
|
memcpy(dest, ptr, size); |
| 123 |
|
UnmapViewOfFile(dest); |
| 124 |
|
//CloseHandle(handle); do not close, 使用しない状態になるとなくなってしまう |
| 125 |
|
|
| 126 |
|
if (pm->DuplicateDataHandle != NULL) { |
| 127 |
|
// 1回前の情報を削除する |
| 128 |
|
CloseHandle(pm->DuplicateDataHandle); |
| 129 |
|
} |
| 130 |
|
pm->DuplicateDataHandle = handle; |
| 131 |
|
pm->DuplicateDataSizeLow = (DWORD)size; |
| 132 |
|
free(ptr); |
| 133 |
|
} |
| 134 |
} |
} |
| 135 |
|
|
| 136 |
static void CopyFiles(const wchar_t *file_list[], const wchar_t *src_dir, const wchar_t *dest_dir) |
static void CopyFiles(const wchar_t *file_list[], const wchar_t *src_dir, const wchar_t *dest_dir) |
| 170 |
} |
} |
| 171 |
else { |
else { |
| 172 |
/* only the first instance uses saved position */ |
/* only the first instance uses saved position */ |
| 173 |
pm->ts.VTPos.x = CW_USEDEFAULT; |
ts->VTPos.x = CW_USEDEFAULT; |
| 174 |
pm->ts.VTPos.y = CW_USEDEFAULT; |
ts->VTPos.y = CW_USEDEFAULT; |
| 175 |
pm->ts.TEKPos.x = CW_USEDEFAULT; |
ts->TEKPos.x = CW_USEDEFAULT; |
| 176 |
pm->ts.TEKPos.y = CW_USEDEFAULT; |
ts->TEKPos.y = CW_USEDEFAULT; |
| 177 |
} |
} |
| 178 |
|
|
|
memcpy(ts,&(pm->ts),sizeof(TTTSet)); |
|
|
|
|
| 179 |
// if (FirstInstance) { の部分から移動 (2008.3.13 maya) |
// if (FirstInstance) { の部分から移動 (2008.3.13 maya) |
| 180 |
// 起動時には、共有メモリの HomeDir と SetupFName は空になる |
// 起動時には、共有メモリの HomeDir と SetupFName は空になる |
| 181 |
/* Get home directory (ttermpro.exeのフォルダ) */ |
/* Get home directory (ttermpro.exeのフォルダ) */ |