| 186 | } |
| 187 | |
| 188 | void |
| 189 | onMSNHCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) |
| 190 | { |
| 191 | PNHTextWindow data; |
| 192 | |
| 193 | data = (PNHTextWindow) GetWindowLongPtr(hWnd, GWLP_USERDATA); |
| 194 | switch (wParam) { |
| 195 | case MSNH_MSG_PUTSTR: { |
| 196 | PMSNHMsgPutstr msg_data = (PMSNHMsgPutstr) lParam; |
| 197 | TCHAR wbuf[BUFSZ]; |
| 198 | size_t text_size; |
| 199 | |
| 200 | if (!data->window_text) { |
| 201 | text_size = strlen(msg_data->text) + 4; |
| 202 | data->window_text = |
| 203 | (TCHAR *) malloc(text_size * sizeof(data->window_text[0])); |
| 204 | if (data->window_text) { |
| 205 | ZeroMemory(data->window_text, |
| 206 | text_size * sizeof(data->window_text[0])); |
| 207 | } |
| 208 | } else { |
| 209 | TCHAR *was = data->window_text; |
| 210 | |
| 211 | text_size = |
| 212 | _tcslen(data->window_text) + strlen(msg_data->text) + 4; |
| 213 | data->window_text = (TCHAR *) realloc( |
| 214 | data->window_text, text_size * sizeof(data->window_text[0])); |
| 215 | if (!data->window_text) { |
| 216 | free(was); |
| 217 | } |
| 218 | } |
| 219 | if (!data->window_text) |
| 220 | break; |
| 221 | |
| 222 | _tcscat(data->window_text, NH_A2W(msg_data->text, wbuf, BUFSZ)); |
| 223 | _tcscat(data->window_text, TEXT("\r\n")); |
| 224 | break; |
| 225 | } |
| 226 | |
| 227 | case MSNH_MSG_RANDOM_INPUT: { |
| 228 | PostMessage(GetDlgItem(hWnd, IDC_TEXT_CONTROL), |
| 229 | WM_MSNH_COMMAND, MSNH_MSG_RANDOM_INPUT, 0); |
| 230 | } |
| 231 | break; |
| 232 | |
| 233 | } |
| 234 | } |
| 235 | |
| 236 | void |
| 237 | LayoutText(HWND hWnd) |