|  | @@ -1548,16 +1548,6 @@ show_error(void)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void *
 | 
	
		
			
				|  |  | -align(void *ptr, uintptr_t alig)
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -	uintptr_t ul = (uintptr_t)ptr;
 | 
	
		
			
				|  |  | -	ul += alig;
 | 
	
		
			
				|  |  | -	ul &= ~alig;
 | 
	
		
			
				|  |  | -	return ((void *)ul);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  save_config(HWND hDlg, FILE *fp)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -1607,38 +1597,41 @@ struct dlg_header_param {
 | 
	
		
			
				|  |  |  	WORD menu, dlg_class;
 | 
	
		
			
				|  |  |  	wchar_t caption[1];
 | 
	
		
			
				|  |  |  	WORD fontsize;
 | 
	
		
			
				|  |  | -	wchar_t fontface[7];
 | 
	
		
			
				|  |  | +	wchar_t fontface[7]; /* L"Tahoma" = 6 characters + terminating zero */
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* complete data required to create a dialog including child elements */
 | 
	
		
			
				|  |  | +struct dlg_complete {
 | 
	
		
			
				|  |  | +	struct dlg_header_param header;
 | 
	
		
			
				|  |  | +	/* TODO: if sizeof(header)%4 is not 0, add some filling bytes here */
 | 
	
		
			
				|  |  | +	BYTE elements[4096 * 2];
 | 
	
		
			
				|  |  | +	int used;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static struct dlg_header_param
 | 
	
		
			
				|  |  | -GetDlgHeader(const short width)
 | 
	
		
			
				|  |  | +static void
 | 
	
		
			
				|  |  | +FillDialogHeader(struct dlg_complete *dlg, const short width)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -#if defined(_MSC_VER)
 | 
	
		
			
				|  |  | -/* disable MSVC warning C4204 (non-constant used to initialize structure) */
 | 
	
		
			
				|  |  | -#pragma warning(push)
 | 
	
		
			
				|  |  | -#pragma warning(disable : 4204)
 | 
	
		
			
				|  |  | -#endif /* if defined(_MSC_VER) */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	struct dlg_header_param dialog_header = {
 | 
	
		
			
				|  |  | -	    /* DLGTEMPLATE */
 | 
	
		
			
				|  |  | -	    {/* style */ WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
 | 
	
		
			
				|  |  | -	         | DS_SETFONT | DS_CENTER | WS_DLGFRAME,
 | 
	
		
			
				|  |  | -	     /* extstyle */ WS_EX_TOOLWINDOW,
 | 
	
		
			
				|  |  | -	     /* cdit */ 0,
 | 
	
		
			
				|  |  | -	     /* x ignored by DS_CENTER */ 0,
 | 
	
		
			
				|  |  | -	     /* y ignored by DS_CENTER */ 0,
 | 
	
		
			
				|  |  | -	     width,
 | 
	
		
			
				|  |  | -	     /* height - to be calculated */ 0},
 | 
	
		
			
				|  |  | -	    /* menu */ 0,
 | 
	
		
			
				|  |  | -	    /* dlg_class */ 0,
 | 
	
		
			
				|  |  | -	    /* caption */ L"",
 | 
	
		
			
				|  |  | -	    /* fontsize */ 8,
 | 
	
		
			
				|  |  | -	    /* font */ L"Tahoma"};
 | 
	
		
			
				|  |  | -#if defined(_MSC_VER)
 | 
	
		
			
				|  |  | -#pragma warning(pop)
 | 
	
		
			
				|  |  | -#endif /* if defined(_MSC_VER) */
 | 
	
		
			
				|  |  | -	return dialog_header;
 | 
	
		
			
				|  |  | +	memset(dlg, 0, sizeof(*dlg));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.style = WS_CAPTION | WS_POPUP | WS_SYSMENU
 | 
	
		
			
				|  |  | +	                                 | WS_VISIBLE | DS_SETFONT | DS_CENTER
 | 
	
		
			
				|  |  | +	                                 | WS_DLGFRAME;
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.dwExtendedStyle = WS_EX_TOOLWINDOW;
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.cdit = 0;
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.x = 0; /* ignored by DS_CENTER */
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.y = 0; /* ignored by DS_CENTER */
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.cx = width;
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.cy =
 | 
	
		
			
				|  |  | +	    0; /* to be calculated after adding elements */
 | 
	
		
			
				|  |  | +	dlg->header.menu = 0;
 | 
	
		
			
				|  |  | +	dlg->header.dlg_class = 0;
 | 
	
		
			
				|  |  | +	dlg->header.caption[0] = (wchar_t)0;
 | 
	
		
			
				|  |  | +	dlg->header.fontsize = 8;
 | 
	
		
			
				|  |  | +	wcscpy(dlg->header.fontface, L"Tahoma");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* counting used bytes */
 | 
	
		
			
				|  |  | +	dlg->used = 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1926,8 +1919,7 @@ suggest_passwd(char *passwd)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void add_control(unsigned char **mem,
 | 
	
		
			
				|  |  | -                        DLGTEMPLATE *dia,
 | 
	
		
			
				|  |  | +static void add_control(struct dlg_complete *dlg,
 | 
	
		
			
				|  |  |                          WORD type,
 | 
	
		
			
				|  |  |                          WORD id,
 | 
	
		
			
				|  |  |                          DWORD style,
 | 
	
	
		
			
				|  | @@ -1950,13 +1942,10 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	short LABEL_WIDTH = 90;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Other variables */
 | 
	
		
			
				|  |  | -	unsigned char mem[4096], *p;
 | 
	
		
			
				|  |  | -	DLGTEMPLATE *dia = (DLGTEMPLATE *)mem;
 | 
	
		
			
				|  |  | +	struct dlg_complete dlg;
 | 
	
		
			
				|  |  | +	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  |  	int ok;
 | 
	
		
			
				|  |  |  	short y;
 | 
	
		
			
				|  |  | -	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const struct dlg_header_param dialog_header = GetDlgHeader(WIDTH);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	DEBUG_ASSERT((user != NULL) && (realm != NULL) && (passwd != NULL));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1969,6 +1958,8 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  		return 0;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	FillDialogHeader(&dlg, WIDTH);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/* Do not open a password dialog, if the username is empty */
 | 
	
		
			
				|  |  |  	if (user[0] == 0) {
 | 
	
		
			
				|  |  |  		s_dlg_proc_param.guard = 0;
 | 
	
	
		
			
				|  | @@ -1984,14 +1975,8 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.buflen = passwd_len;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Create the dialog */
 | 
	
		
			
				|  |  | -	(void)memset(mem, 0, sizeof(mem));
 | 
	
		
			
				|  |  | -	p = mem;
 | 
	
		
			
				|  |  | -	(void)memcpy(p, &dialog_header, sizeof(dialog_header));
 | 
	
		
			
				|  |  | -	p = mem + sizeof(dialog_header);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	y = HEIGHT;
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x82,
 | 
	
		
			
				|  |  |  	            ID_STATIC,
 | 
	
		
			
				|  |  |  	            WS_VISIBLE | WS_CHILD,
 | 
	
	
		
			
				|  | @@ -2000,8 +1985,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            LABEL_WIDTH,
 | 
	
		
			
				|  |  |  	            HEIGHT,
 | 
	
		
			
				|  |  |  	            "User:");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x81,
 | 
	
		
			
				|  |  |  	            ID_CONTROLS + 1,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2013,8 +1997,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            user);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	y += HEIGHT;
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x82,
 | 
	
		
			
				|  |  |  	            ID_STATIC,
 | 
	
		
			
				|  |  |  	            WS_VISIBLE | WS_CHILD,
 | 
	
	
		
			
				|  | @@ -2023,8 +2006,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            LABEL_WIDTH,
 | 
	
		
			
				|  |  |  	            HEIGHT,
 | 
	
		
			
				|  |  |  	            "Realm:");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x81,
 | 
	
		
			
				|  |  |  	            ID_CONTROLS + 2,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2036,8 +2018,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            realm);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	y += HEIGHT;
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x82,
 | 
	
		
			
				|  |  |  	            ID_STATIC,
 | 
	
		
			
				|  |  |  	            WS_VISIBLE | WS_CHILD,
 | 
	
	
		
			
				|  | @@ -2046,8 +2027,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            LABEL_WIDTH,
 | 
	
		
			
				|  |  |  	            HEIGHT,
 | 
	
		
			
				|  |  |  	            "Password:");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x81,
 | 
	
		
			
				|  |  |  	            ID_INPUT_LINE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2058,8 +2038,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            "");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	y += (WORD)(HEIGHT * 2);
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            IDOK,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2068,8 +2047,7 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            55,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Ok");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            IDCANCEL,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2079,16 +2057,17 @@ get_password(const char *user,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Cancel");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	DEBUG_ASSERT((intptr_t)p - (intptr_t)mem < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	dia->cy = y + (WORD)(HEIGHT * 1.5);
 | 
	
		
			
				|  |  | +	dlg.header.dlg_template.cy = y + (WORD)(HEIGHT * 1.5);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.name = "Modify password";
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.fRetry = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ok = (IDOK
 | 
	
		
			
				|  |  | -	      == DialogBoxIndirectParam(
 | 
	
		
			
				|  |  | -	             NULL, dia, NULL, InputDlgProc, (LPARAM)&s_dlg_proc_param));
 | 
	
		
			
				|  |  | +	      == DialogBoxIndirectParam(NULL,
 | 
	
		
			
				|  |  | +	                                &dlg.header.dlg_template,
 | 
	
		
			
				|  |  | +	                                NULL,
 | 
	
		
			
				|  |  | +	                                InputDlgProc,
 | 
	
		
			
				|  |  | +	                                (LPARAM)&s_dlg_proc_param));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.hWnd = NULL;
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.guard = 0;
 | 
	
	
		
			
				|  | @@ -2172,8 +2151,7 @@ PasswordDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  | -add_control(unsigned char **mem,
 | 
	
		
			
				|  |  | -            DLGTEMPLATE *dia,
 | 
	
		
			
				|  |  | +add_control(struct dlg_complete *dlg,
 | 
	
		
			
				|  |  |              WORD type,
 | 
	
		
			
				|  |  |              WORD id,
 | 
	
		
			
				|  |  |              DWORD style,
 | 
	
	
		
			
				|  | @@ -2185,12 +2163,19 @@ add_control(unsigned char **mem,
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	DLGITEMTEMPLATE *tp;
 | 
	
		
			
				|  |  |  	LPWORD p;
 | 
	
		
			
				|  |  | +	WORD cap_len = caption ? (WORD)strlen(caption) : 0;
 | 
	
		
			
				|  |  | +	int i;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	dia->cdit++;
 | 
	
		
			
				|  |  | +	/* Add one child element */
 | 
	
		
			
				|  |  | +	dlg->header.dlg_template.cdit++;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	*mem = (unsigned char *)align(*mem, 3);
 | 
	
		
			
				|  |  | -	tp = (DLGITEMTEMPLATE *)*mem;
 | 
	
		
			
				|  |  | +	/* align to 4 bytes */
 | 
	
		
			
				|  |  | +	while (dlg->used % 4) {
 | 
	
		
			
				|  |  | +		dlg->used++;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/* start with DLGITEMTEMPLATE structure */
 | 
	
		
			
				|  |  | +	tp = (DLGITEMTEMPLATE *)(dlg->elements + dlg->used);
 | 
	
		
			
				|  |  |  	tp->id = id;
 | 
	
		
			
				|  |  |  	tp->style = style;
 | 
	
		
			
				|  |  |  	tp->dwExtendedStyle = 0;
 | 
	
	
		
			
				|  | @@ -2198,19 +2183,30 @@ add_control(unsigned char **mem,
 | 
	
		
			
				|  |  |  	tp->y = y;
 | 
	
		
			
				|  |  |  	tp->cx = cx;
 | 
	
		
			
				|  |  |  	tp->cy = cy;
 | 
	
		
			
				|  |  | +	dlg->used += sizeof(*tp);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	p = (LPWORD)align(*mem + sizeof(*tp), 1);
 | 
	
		
			
				|  |  | -	*p++ = 0xffff;
 | 
	
		
			
				|  |  | -	*p++ = type;
 | 
	
		
			
				|  |  | +	/* add class */
 | 
	
		
			
				|  |  | +	p = (LPWORD)(dlg->elements + dlg->used);
 | 
	
		
			
				|  |  | +	p[0] = 0xffff;
 | 
	
		
			
				|  |  | +	p[1] = type;
 | 
	
		
			
				|  |  | +	dlg->used += 2 * sizeof(*p);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* add title */
 | 
	
		
			
				|  |  | +	p = (LPWORD)(dlg->elements + dlg->used);
 | 
	
		
			
				|  |  | +	for (i = 0; i <= cap_len; i++) {
 | 
	
		
			
				|  |  | +		p[i] = (WCHAR)caption[i];
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	dlg->used += (cap_len+1) * sizeof(*p);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	while (*caption != '\0') {
 | 
	
		
			
				|  |  | -		*p++ = (WCHAR)*caption++;
 | 
	
		
			
				|  |  | +	/* align to 2 bytes */
 | 
	
		
			
				|  |  | +	while (dlg->used % 2) {
 | 
	
		
			
				|  |  | +		dlg->used++;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	*p++ = 0;
 | 
	
		
			
				|  |  | -	p = (LPWORD)align(p, 1);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	*p++ = 0;
 | 
	
		
			
				|  |  | -	*mem = (unsigned char *)p;
 | 
	
		
			
				|  |  | +	/* add creation data */
 | 
	
		
			
				|  |  | +	p = (LPWORD)(dlg->elements + dlg->used);
 | 
	
		
			
				|  |  | +	*p = 0;
 | 
	
		
			
				|  |  | +	dlg->used += sizeof(*p);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2220,6 +2216,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	/* Parameter for size/format tuning of the dialog */
 | 
	
		
			
				|  |  |  	short HEIGHT = 15;
 | 
	
		
			
				|  |  |  	short BORDER_WIDTH = 10;
 | 
	
		
			
				|  |  | +	short BORDER_HEIGTH = BORDER_WIDTH / 2;
 | 
	
		
			
				|  |  |  	short CELL_WIDTH = 125;
 | 
	
		
			
				|  |  |  	short LABEL_WIDTH = 115;
 | 
	
		
			
				|  |  |  	short FILE_DIALOG_BUTTON_WIDTH = 15;
 | 
	
	
		
			
				|  | @@ -2233,17 +2230,14 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	short DIALOG_WIDTH = BORDER_WIDTH + NO_OF_COLUMNS * COLUMN_WIDTH;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* All other variables */
 | 
	
		
			
				|  |  | -	unsigned char mem[16 * 1024], *p;
 | 
	
		
			
				|  |  |  	const struct mg_option *cv_options;
 | 
	
		
			
				|  |  |  	DWORD style;
 | 
	
		
			
				|  |  | -	DLGTEMPLATE *dia = (DLGTEMPLATE *)mem;
 | 
	
		
			
				|  |  |  	WORD i, cl, nelems = 0;
 | 
	
		
			
				|  |  |  	short x, y, next_cell_width, next_cell_height;
 | 
	
		
			
				|  |  |  	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  |  	short *option_index, *option_top, *option_bottom;
 | 
	
		
			
				|  |  |  	char text[64];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const struct dlg_header_param dialog_header = GetDlgHeader(DIALOG_WIDTH);
 | 
	
		
			
				|  |  | +	struct dlg_complete dlg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (s_dlg_proc_param.guard == 0) {
 | 
	
		
			
				|  |  |  		memset(&s_dlg_proc_param, 0, sizeof(s_dlg_proc_param));
 | 
	
	
		
			
				|  | @@ -2253,10 +2247,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		return;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	(void)memset(mem, 0, sizeof(mem));
 | 
	
		
			
				|  |  | -	p = mem;
 | 
	
		
			
				|  |  | -	(void)memcpy(p, &dialog_header, sizeof(dialog_header));
 | 
	
		
			
				|  |  | -	p = mem + sizeof(dialog_header);
 | 
	
		
			
				|  |  | +	FillDialogHeader(&dlg, DIALOG_WIDTH);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Determine space required for input fields */
 | 
	
		
			
				|  |  |  	cv_options = mg_get_valid_options();
 | 
	
	
		
			
				|  | @@ -2280,8 +2271,12 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	 */
 | 
	
		
			
				|  |  |  	option_index = (short *)calloc(NO_OF_OPTIONS + 2 * NO_OF_COLUMNS,
 | 
	
		
			
				|  |  |  	                               sizeof(short)); /* 1 */
 | 
	
		
			
				|  |  | -	option_top = option_index + NO_OF_OPTIONS;     /* 2 */
 | 
	
		
			
				|  |  | -	option_bottom = option_top + NO_OF_COLUMNS;    /* 3 */
 | 
	
		
			
				|  |  | +	if (!option_index) {
 | 
	
		
			
				|  |  | +		/* unlikely case of "out of memory" */
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	option_top = option_index + NO_OF_OPTIONS;  /* 2 */
 | 
	
		
			
				|  |  | +	option_bottom = option_top + NO_OF_COLUMNS; /* 3 */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Initialize option order */
 | 
	
		
			
				|  |  |  	for (i = 0; i < NO_OF_OPTIONS; i++) {
 | 
	
	
		
			
				|  | @@ -2323,7 +2318,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		/* Position and size of the input field (will be modified) */
 | 
	
		
			
				|  |  |  		x = BORDER_WIDTH + COLUMN_WIDTH * (nelems / NO_OF_ROWS);
 | 
	
		
			
				|  |  | -		y = BORDER_WIDTH / 2 + HEIGHT + HEIGHT * (nelems % NO_OF_ROWS);
 | 
	
		
			
				|  |  | +		y = BORDER_HEIGTH + HEIGHT + HEIGHT * (nelems % NO_OF_ROWS);
 | 
	
		
			
				|  |  |  		next_cell_width = CELL_WIDTH;
 | 
	
		
			
				|  |  |  		next_cell_height = HEIGHT - 3;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2351,8 +2346,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  			cl = 0x81;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			/* Additional button for file dialog */
 | 
	
		
			
				|  |  | -			add_control(&p,
 | 
	
		
			
				|  |  | -			            dia,
 | 
	
		
			
				|  |  | +			add_control(&dlg,
 | 
	
		
			
				|  |  |  			            0x80,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + option_index[i] + ID_FILE_BUTTONS_DELTA,
 | 
	
		
			
				|  |  |  			            WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
 | 
	
	
		
			
				|  | @@ -2381,8 +2375,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		/* Add label (static text) */
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x82,
 | 
	
		
			
				|  |  |  		            ID_STATIC,
 | 
	
		
			
				|  |  |  		            WS_VISIBLE | WS_CHILD,
 | 
	
	
		
			
				|  | @@ -2393,8 +2386,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		            opt->name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		/* Add input field */
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            cl,
 | 
	
		
			
				|  |  |  		            ID_CONTROLS + option_index[i],
 | 
	
		
			
				|  |  |  		            style,
 | 
	
	
		
			
				|  | @@ -2404,8 +2396,6 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		            next_cell_height,
 | 
	
		
			
				|  |  |  		            "");
 | 
	
		
			
				|  |  |  		nelems++;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* "Settings" frame around all options */
 | 
	
	
		
			
				|  | @@ -2415,8 +2405,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  		        " Settings %c - %c ",
 | 
	
		
			
				|  |  |  		        cv_options[option_top[i]].name[0],
 | 
	
		
			
				|  |  |  		        cv_options[option_bottom[i]].name[0]);
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x80,
 | 
	
		
			
				|  |  |  		            ID_GROUP,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
 | 
	
	
		
			
				|  | @@ -2430,8 +2419,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Buttons below "Settings" frame */
 | 
	
		
			
				|  |  |  	y += HEIGHT;
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_SAVE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2440,8 +2428,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Save Settings");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_DEFAULTS,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2450,8 +2437,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Reset to defaults");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_FILE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2460,8 +2446,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Reload from file");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            ID_RESET_ACTIVE,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2470,8 +2455,7 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            65,
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Reload active");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x82,
 | 
	
		
			
				|  |  |  	            ID_STATIC,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | WS_DISABLED,
 | 
	
	
		
			
				|  | @@ -2481,16 +2465,16 @@ show_settings_dialog()
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            g_server_base_name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/* Check befor every release */
 | 
	
		
			
				|  |  | -	DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	/* Calculate total height of the dialog */
 | 
	
		
			
				|  |  | -	dia->cy = y + HEIGHT;
 | 
	
		
			
				|  |  | +	dlg.header.dlg_template.cy = y + HEIGHT;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.fRetry = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	DialogBoxIndirectParam(
 | 
	
		
			
				|  |  | -	    NULL, dia, NULL, SettingsDlgProc, (LPARAM)&s_dlg_proc_param);
 | 
	
		
			
				|  |  | +	DialogBoxIndirectParam(NULL,
 | 
	
		
			
				|  |  | +	                       &dlg.header.dlg_template,
 | 
	
		
			
				|  |  | +	                       NULL,
 | 
	
		
			
				|  |  | +	                       SettingsDlgProc,
 | 
	
		
			
				|  |  | +	                       (LPARAM)&s_dlg_proc_param);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	free(option_index);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2514,12 +2498,9 @@ change_password_file()
 | 
	
		
			
				|  |  |  	HWND hDlg = NULL;
 | 
	
		
			
				|  |  |  	FILE *f;
 | 
	
		
			
				|  |  |  	short y, nelems;
 | 
	
		
			
				|  |  | -	unsigned char mem[4096], *p;
 | 
	
		
			
				|  |  | -	DLGTEMPLATE *dia = (DLGTEMPLATE *)mem;
 | 
	
		
			
				|  |  |  	const char *domain = mg_get_option(g_ctx, "authentication_domain");
 | 
	
		
			
				|  |  |  	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const struct dlg_header_param dialog_header = GetDlgHeader(WIDTH);
 | 
	
		
			
				|  |  | +	struct dlg_complete dlg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (s_dlg_proc_param.guard == 0) {
 | 
	
		
			
				|  |  |  		memset(&s_dlg_proc_param, 0, sizeof(s_dlg_proc_param));
 | 
	
	
		
			
				|  | @@ -2554,10 +2535,8 @@ change_password_file()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	do {
 | 
	
		
			
				|  |  |  		s_dlg_proc_param.hWnd = NULL;
 | 
	
		
			
				|  |  | -		(void)memset(mem, 0, sizeof(mem));
 | 
	
		
			
				|  |  | -		p = mem;
 | 
	
		
			
				|  |  | -		(void)memcpy(p, &dialog_header, sizeof(dialog_header));
 | 
	
		
			
				|  |  | -		p = mem + sizeof(dialog_header);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		FillDialogHeader(&dlg, WIDTH);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		f = fopen(path, "r+");
 | 
	
		
			
				|  |  |  		if (!f) {
 | 
	
	
		
			
				|  | @@ -2574,8 +2553,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  			u[255] = 0;
 | 
	
		
			
				|  |  |  			d[255] = 0;
 | 
	
		
			
				|  |  |  			y = (nelems + 1) * HEIGHT + 5;
 | 
	
		
			
				|  |  | -			add_control(&p,
 | 
	
		
			
				|  |  | -			            dia,
 | 
	
		
			
				|  |  | +			add_control(&dlg,
 | 
	
		
			
				|  |  |  			            0x80,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + nelems + ID_FILE_BUTTONS_DELTA * 3,
 | 
	
		
			
				|  |  |  			            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2584,8 +2562,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  			            65,
 | 
	
		
			
				|  |  |  			            12,
 | 
	
		
			
				|  |  |  			            "Modify password");
 | 
	
		
			
				|  |  | -			add_control(&p,
 | 
	
		
			
				|  |  | -			            dia,
 | 
	
		
			
				|  |  | +			add_control(&dlg,
 | 
	
		
			
				|  |  |  			            0x80,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + nelems + ID_FILE_BUTTONS_DELTA * 2,
 | 
	
		
			
				|  |  |  			            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2594,8 +2571,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  			            55,
 | 
	
		
			
				|  |  |  			            12,
 | 
	
		
			
				|  |  |  			            "Remove user");
 | 
	
		
			
				|  |  | -			add_control(&p,
 | 
	
		
			
				|  |  | -			            dia,
 | 
	
		
			
				|  |  | +			add_control(&dlg,
 | 
	
		
			
				|  |  |  			            0x81,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + nelems + ID_FILE_BUTTONS_DELTA,
 | 
	
		
			
				|  |  |  			            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2605,8 +2581,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  			            60,
 | 
	
		
			
				|  |  |  			            12,
 | 
	
		
			
				|  |  |  			            d);
 | 
	
		
			
				|  |  | -			add_control(&p,
 | 
	
		
			
				|  |  | -			            dia,
 | 
	
		
			
				|  |  | +			add_control(&dlg,
 | 
	
		
			
				|  |  |  			            0x81,
 | 
	
		
			
				|  |  |  			            ID_CONTROLS + nelems,
 | 
	
		
			
				|  |  |  			            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2618,13 +2593,11 @@ change_password_file()
 | 
	
		
			
				|  |  |  			            u);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			nelems++;
 | 
	
		
			
				|  |  | -			DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		fclose(f);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		y = (nelems + 1) * HEIGHT + 10;
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x80,
 | 
	
		
			
				|  |  |  		            ID_ADD_USER,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2633,8 +2606,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  		            55,
 | 
	
		
			
				|  |  |  		            12,
 | 
	
		
			
				|  |  |  		            "Add user");
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x81,
 | 
	
		
			
				|  |  |  		            ID_ADD_USER_NAME,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2644,8 +2616,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  		            100,
 | 
	
		
			
				|  |  |  		            12,
 | 
	
		
			
				|  |  |  		            "");
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x81,
 | 
	
		
			
				|  |  |  		            ID_ADD_USER_REALM,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2657,8 +2628,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  		            domain);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		y = (nelems + 2) * HEIGHT + 10;
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x80,
 | 
	
		
			
				|  |  |  		            ID_GROUP,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
 | 
	
	
		
			
				|  | @@ -2669,8 +2639,7 @@ change_password_file()
 | 
	
		
			
				|  |  |  		            " Users ");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		y += HEIGHT;
 | 
	
		
			
				|  |  | -		add_control(&p,
 | 
	
		
			
				|  |  | -		            dia,
 | 
	
		
			
				|  |  | +		add_control(&dlg,
 | 
	
		
			
				|  |  |  		            0x82,
 | 
	
		
			
				|  |  |  		            ID_STATIC,
 | 
	
		
			
				|  |  |  		            WS_CHILD | WS_VISIBLE | WS_DISABLED,
 | 
	
	
		
			
				|  | @@ -2680,18 +2649,18 @@ change_password_file()
 | 
	
		
			
				|  |  |  		            12,
 | 
	
		
			
				|  |  |  		            g_server_base_name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		DEBUG_ASSERT(((intptr_t)p - (intptr_t)mem) < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		dia->cy = y + 20;
 | 
	
		
			
				|  |  | +		dlg.header.dlg_template.cy = y + 20;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		s_dlg_proc_param.name = path;
 | 
	
		
			
				|  |  |  		s_dlg_proc_param.fRetry = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	} while (
 | 
	
		
			
				|  |  | -	    (IDOK
 | 
	
		
			
				|  |  | -	     == DialogBoxIndirectParam(
 | 
	
		
			
				|  |  | -	            NULL, dia, NULL, PasswordDlgProc, (LPARAM)&s_dlg_proc_param))
 | 
	
		
			
				|  |  | -	    && (!g_exit_flag));
 | 
	
		
			
				|  |  | +	} while ((IDOK
 | 
	
		
			
				|  |  | +	          == DialogBoxIndirectParam(NULL,
 | 
	
		
			
				|  |  | +	                                    &dlg.header.dlg_template,
 | 
	
		
			
				|  |  | +	                                    NULL,
 | 
	
		
			
				|  |  | +	                                    PasswordDlgProc,
 | 
	
		
			
				|  |  | +	                                    (LPARAM)&s_dlg_proc_param))
 | 
	
		
			
				|  |  | +	         && (!g_exit_flag));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.hWnd = NULL;
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.guard = 0;
 | 
	
	
		
			
				|  | @@ -2734,13 +2703,10 @@ show_system_info()
 | 
	
		
			
				|  |  |  	short LABEL_WIDTH = 50;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Other parameters */
 | 
	
		
			
				|  |  | -	unsigned char mem[4096], *p;
 | 
	
		
			
				|  |  | -	DLGTEMPLATE *dia = (DLGTEMPLATE *)mem;
 | 
	
		
			
				|  |  |  	int ok;
 | 
	
		
			
				|  |  |  	short y;
 | 
	
		
			
				|  |  |  	static struct dlg_proc_param s_dlg_proc_param;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	const struct dlg_header_param dialog_header = GetDlgHeader(WIDTH);
 | 
	
		
			
				|  |  | +	struct dlg_complete dlg;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Only allow one instance of this dialog to be open. */
 | 
	
		
			
				|  |  |  	if (s_dlg_proc_param.guard == 0) {
 | 
	
	
		
			
				|  | @@ -2752,14 +2718,10 @@ show_system_info()
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Create the dialog */
 | 
	
		
			
				|  |  | -	(void)memset(mem, 0, sizeof(mem));
 | 
	
		
			
				|  |  | -	p = mem;
 | 
	
		
			
				|  |  | -	(void)memcpy(p, &dialog_header, sizeof(dialog_header));
 | 
	
		
			
				|  |  | -	p = mem + sizeof(dialog_header);
 | 
	
		
			
				|  |  | +	FillDialogHeader(&dlg, WIDTH);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	y = HEIGHT;
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x82,
 | 
	
		
			
				|  |  |  	            ID_STATIC,
 | 
	
		
			
				|  |  |  	            WS_VISIBLE | WS_CHILD,
 | 
	
	
		
			
				|  | @@ -2768,8 +2730,7 @@ show_system_info()
 | 
	
		
			
				|  |  |  	            LABEL_WIDTH,
 | 
	
		
			
				|  |  |  	            HEIGHT,
 | 
	
		
			
				|  |  |  	            "System Information:");
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x81,
 | 
	
		
			
				|  |  |  	            ID_CONTROLS + 1,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
 | 
	
	
		
			
				|  | @@ -2782,8 +2743,7 @@ show_system_info()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	y += (WORD)(HEIGHT * 8);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            IDRETRY,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2793,8 +2753,7 @@ show_system_info()
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Reload");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	add_control(&p,
 | 
	
		
			
				|  |  | -	            dia,
 | 
	
		
			
				|  |  | +	add_control(&dlg,
 | 
	
		
			
				|  |  |  	            0x80,
 | 
	
		
			
				|  |  |  	            IDOK,
 | 
	
		
			
				|  |  |  	            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,
 | 
	
	
		
			
				|  | @@ -2804,17 +2763,18 @@ show_system_info()
 | 
	
		
			
				|  |  |  	            12,
 | 
	
		
			
				|  |  |  	            "Close");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	DEBUG_ASSERT((intptr_t)p - (intptr_t)mem < (intptr_t)sizeof(mem));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	dia->cy = y + (WORD)(HEIGHT * 1.5);
 | 
	
		
			
				|  |  | +	dlg.header.dlg_template.cy = y + (WORD)(HEIGHT * 1.5);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.name = "System information";
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.fRetry = sysinfo_reload;
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.idRetry = ID_CONTROLS + 1; /* Reload field with this ID */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	ok = (IDOK
 | 
	
		
			
				|  |  | -	      == DialogBoxIndirectParam(
 | 
	
		
			
				|  |  | -	             NULL, dia, NULL, InputDlgProc, (LPARAM)&s_dlg_proc_param));
 | 
	
		
			
				|  |  | +	      == DialogBoxIndirectParam(NULL,
 | 
	
		
			
				|  |  | +	                                &dlg.header.dlg_template,
 | 
	
		
			
				|  |  | +	                                NULL,
 | 
	
		
			
				|  |  | +	                                InputDlgProc,
 | 
	
		
			
				|  |  | +	                                (LPARAM)&s_dlg_proc_param));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.hWnd = NULL;
 | 
	
		
			
				|  |  |  	s_dlg_proc_param.guard = 0;
 |