bartitle(&cp, "Options controlling PuTTY's appearance", IDC_TITLE_APPEARANCE);
static void create_controls(HWND hwnd, int dlgtype, int panel){    if (panel == sessionpanelstart) {	/* The Session panel. Accelerators used: [acgo] nprtih elsd w */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Basic options for your PuTTY session",		 IDC_TITLE_SESSION);	if (dlgtype == 0) {	    beginbox(&cp, "Specify your connection by host name or IP address",		     IDC_BOX_SESSION1);	    multiedit(&cp,		      "Host &Name (or IP address)",		      IDC_HOSTSTATIC, IDC_HOST, 75,		      "&Port", IDC_PORTSTATIC, IDC_PORT, 25, NULL);	    if (backends[3].backend == NULL) {		/* this is PuTTYtel, so only three protocols available */		radioline(&cp, "Protocol:", IDC_PROTSTATIC, 3,			  "&Raw", IDC_PROTRAW,			  "&Telnet", IDC_PROTTELNET,			  "Rlog&in", IDC_PROTRLOGIN, NULL);	    } else {		radioline(&cp, "Protocol:", IDC_PROTSTATIC, 4,			  "&Raw", IDC_PROTRAW,			  "&Telnet", IDC_PROTTELNET,			  "Rlog&in", IDC_PROTRLOGIN,#ifdef FWHACK			  "SS&H/hack",#else			  "SS&H",#endif			  IDC_PROTSSH, NULL);	    }	    endbox(&cp);	    beginbox(&cp, "Load, save or delete a stored session",		     IDC_BOX_SESSION2);	    sesssaver(&cp, "Sav&ed Sessions",		      IDC_SESSSTATIC, IDC_SESSEDIT, IDC_SESSLIST,		      "&Load", IDC_SESSLOAD,		      "&Save", IDC_SESSSAVE, "&Delete", IDC_SESSDEL, NULL);	    endbox(&cp);	}	beginbox(&cp, NULL, IDC_BOX_SESSION3);	radioline(&cp, "Close &window on exit:", IDC_CLOSEEXIT, 4,		  "Always", IDC_COEALWAYS,		  "Never", IDC_COENEVER,		  "Only on clean exit", IDC_COENORMAL, NULL);	endbox(&cp);    }    if (panel == loggingpanelstart) {	/* The Logging panel. Accelerators used: [acgo] tplfwe */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling session logging",		 IDC_TITLE_LOGGING);	beginbox(&cp, NULL, IDC_BOX_LOGGING1);	radiobig(&cp,		 "Session logging:", IDC_LSTATSTATIC,		 "Logging &turned off completely", IDC_LSTATOFF,		 "Log &printable output only", IDC_LSTATASCII,		 "&Log all session output", IDC_LSTATRAW, NULL);	editbutton(&cp, "Log &file name:",		   IDC_LGFSTATIC, IDC_LGFEDIT, "Bro&wse...",		   IDC_LGFBUTTON);	statictext(&cp, "(Log file name can contain &&Y, &&M, &&D for date,"		   " &&T for time, and &&H for host name)", 2, IDC_LGFEXPLAIN);	radiobig(&cp,		 "What to do if the log file already &exists:",		 IDC_LSTATXIST, "Always overwrite it", IDC_LSTATXOVR,		 "Always append to the end of it", IDC_LSTATXAPN,		 "Ask the user every time", IDC_LSTATXASK, NULL);	endbox(&cp);    }    if (panel == terminalpanelstart) {	/* The Terminal panel. Accelerators used: [acgo] wdlen hts */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling the terminal emulation",		 IDC_TITLE_TERMINAL);	beginbox(&cp, "Set various terminal options", IDC_BOX_TERMINAL1);	checkbox(&cp, "Auto &wrap mode initially on", IDC_WRAPMODE);	checkbox(&cp, "&DEC Origin Mode initially on", IDC_DECOM);	checkbox(&cp, "Implicit CR in every &LF", IDC_LFHASCR);	checkbox(&cp, "Use background colour to &erase screen", IDC_BCE);	checkbox(&cp, "Enable bli&nking text", IDC_BLINKTEXT);	multiedit(&cp,		  "An&swerback to ^E:", IDC_ANSWERBACK,		  IDC_ANSWEREDIT, 100, NULL);	endbox(&cp);	beginbox(&cp, "Line discipline options", IDC_BOX_TERMINAL2);	radioline(&cp, "Local ec&ho:", IDC_ECHOSTATIC, 3,		  "Auto", IDC_ECHOBACKEND,		  "Force on", IDC_ECHOYES, "Force off", IDC_ECHONO, NULL);	radioline(&cp, "Local line edi&ting:", IDC_EDITSTATIC, 3,		  "Auto", IDC_EDITBACKEND,		  "Force on", IDC_EDITYES, "Force off", IDC_EDITNO, NULL);	endbox(&cp);    }    if (panel == bellpanelstart) {	/* The Bell panel. Accelerators used: [acgo] bdsm wit */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling the terminal bell",		 IDC_TITLE_BELL);	beginbox(&cp, "Set the style of bell", IDC_BOX_BELL1);	radiobig(&cp,		 "Action to happen when a &bell occurs:", IDC_BELLSTATIC,		 "None (bell disabled)", IDC_BELL_DISABLED,		 "Play Windows Default Sound", IDC_BELL_DEFAULT,		 "Play a custom sound file", IDC_BELL_WAVEFILE,		 "Visual bell (flash window)", IDC_BELL_VISUAL, NULL);	editbutton(&cp, "Custom sound file to play as a bell:",		   IDC_BELL_WAVESTATIC, IDC_BELL_WAVEEDIT,		   "Bro&wse...", IDC_BELL_WAVEBROWSE);	radioline(&cp, "Taskbar/caption &indication on bell:",		  IDC_B_IND_STATIC, 3, "Disabled", IDC_B_IND_DISABLED,		  "Flashing", IDC_B_IND_FLASH, "Steady", IDC_B_IND_STEADY,		  NULL);	endbox(&cp);	beginbox(&cp, "Control the bell overload behaviour",		 IDC_BOX_BELL2);	checkbox(&cp, "Bell is temporarily &disabled when over-used",		 IDC_BELLOVL);	staticedit(&cp, "Over-use means this &many bells...",		   IDC_BELLOVLNSTATIC, IDC_BELLOVLN, 20);	staticedit(&cp, "... in &this many seconds",		   IDC_BELLOVLTSTATIC, IDC_BELLOVLT, 20);	statictext(&cp,		   "The bell is re-enabled after a few seconds of silence.",		   1, IDC_BELLOVLEXPLAIN);	staticedit(&cp, "Seconds of &silence required", IDC_BELLOVLSSTATIC,		   IDC_BELLOVLS, 20);	endbox(&cp);    }    if (panel == keyboardpanelstart) {	/* The Keyboard panel. Accelerators used: [acgo] bhf ruyntd */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	/*	   bartitle(&cp, "Options controlling the effects of keys",	   IDC_TITLE_KEYBOARD);	 */	beginbox(&cp, "Change the sequences sent by:", IDC_BOX_KEYBOARD1);	radioline(&cp, "The &Backspace key", IDC_DELSTATIC, 2,		  "Control-H", IDC_DEL008,		  "Control-? (127)", IDC_DEL127, NULL);	radioline(&cp, "The &Home and End keys", IDC_HOMESTATIC, 2,		  "Standard", IDC_HOMETILDE, "rxvt", IDC_HOMERXVT, NULL);	radioline(&cp, "The &Function keys and keypad", IDC_FUNCSTATIC, 3,		  "ESC[n~", IDC_FUNCTILDE,		  "Linux", IDC_FUNCLINUX,		  "Xterm R6", IDC_FUNCXTERM,		  "VT400", IDC_FUNCVT400,		  "VT100+", IDC_FUNCVT100P, "SCO", IDC_FUNCSCO, NULL);	endbox(&cp);	beginbox(&cp, "Application keypad settings:", IDC_BOX_KEYBOARD2);	checkbox(&cp,		 "Application c&ursor keys totally disabled",		 IDC_NOAPPLICC);	radioline(&cp, "Initial state of cu&rsor keys:", IDC_CURSTATIC, 2,		  "Normal", IDC_CURNORMAL,		  "Application", IDC_CURAPPLIC, NULL);	checkbox(&cp,		 "Application ke&ypad keys totally disabled",		 IDC_NOAPPLICK);	radioline(&cp, "Initial state of &numeric keypad:", IDC_KPSTATIC,		  3, "Normal", IDC_KPNORMAL, "Application", IDC_KPAPPLIC,		  "NetHack", IDC_KPNH, NULL);	endbox(&cp);	beginbox(&cp, "Enable extra keyboard features:",		 IDC_BOX_KEYBOARD3);	checkbox(&cp, "AltGr ac&ts as Compose key", IDC_COMPOSEKEY);	checkbox(&cp, "Control-Alt is &different from AltGr",		 IDC_CTRLALTKEYS);	endbox(&cp);    }    if (panel == windowpanelstart) {	/* The Window panel. Accelerators used: [acgo] rmz sdkp w4ylt f */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling PuTTY's window",		 IDC_TITLE_WINDOW);	beginbox(&cp, "Set the size of the window", IDC_BOX_WINDOW1);	multiedit(&cp,		  "&Rows", IDC_ROWSSTATIC, IDC_ROWSEDIT, 50,		  "Colu&mns", IDC_COLSSTATIC, IDC_COLSEDIT, 50, NULL);	checkbox(&cp, "Lock window size against resi&zing", IDC_LOCKSIZE);	endbox(&cp);	beginbox(&cp, "Control the scrollback in the window",		 IDC_BOX_WINDOW2);	staticedit(&cp, "Lines of &scrollback",		   IDC_SAVESTATIC, IDC_SAVEEDIT, 50);	checkbox(&cp, "&Display scrollbar", IDC_SCROLLBAR);	checkbox(&cp, "Reset scrollback on &keypress", IDC_SCROLLKEY);	checkbox(&cp, "Reset scrollback on dis&play activity",		 IDC_SCROLLDISP);	endbox(&cp);	beginbox(&cp, NULL, IDC_BOX_WINDOW3);	checkbox(&cp, "&Warn before closing window", IDC_CLOSEWARN);	checkbox(&cp, "Window closes on ALT-F&4", IDC_ALTF4);	checkbox(&cp, "S&ystem menu appears on ALT-Space", IDC_ALTSPACE);	checkbox(&cp, "System menu appears on A&LT alone", IDC_ALTONLY);	checkbox(&cp, "Ensure window is always on &top", IDC_ALWAYSONTOP);	checkbox(&cp, "&Full screen on Alt-Enter", IDC_FULLSCREENONALTENTER);	endbox(&cp);    }    if (panel == appearancepanelstart) {	/* The Appearance panel. Accelerators used: [acgo] luvb h ti p s */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling PuTTY's appearance",		 IDC_TITLE_APPEARANCE);	beginbox(&cp, "Adjust the use of the cursor", IDC_BOX_APPEARANCE1);	radioline(&cp, "Cursor appearance:", IDC_CURSORSTATIC, 3,		  "B&lock", IDC_CURBLOCK,		  "&Underline", IDC_CURUNDER,		  "&Vertical line", IDC_CURVERT, NULL);	checkbox(&cp, "Cursor &blinks", IDC_BLINKCUR);	endbox(&cp);	beginbox(&cp, "Set the font used in the terminal window",		 IDC_BOX_APPEARANCE2);	staticbtn(&cp, "", IDC_FONTSTATIC, "C&hange...", IDC_CHOOSEFONT);	endbox(&cp);	beginbox(&cp, "Adjust the use of the window title",		 IDC_BOX_APPEARANCE3);	multiedit(&cp,		  "Window &title:", IDC_WINTITLE, IDC_WINEDIT, 100, NULL);	checkbox(&cp, "Avoid ever using &icon title", IDC_WINNAME);	endbox(&cp);	beginbox(&cp, "Adjust the use of the mouse pointer",		 IDC_BOX_APPEARANCE4);	checkbox(&cp, "Hide mouse &pointer when typing in window",		 IDC_HIDEMOUSE);	endbox(&cp);	beginbox(&cp, "Adjust the window border", IDC_BOX_APPEARANCE5);	checkbox(&cp, "&Sunken-edge border (slightly thicker)",		 IDC_SUNKENEDGE);	endbox(&cp);    }    if (panel == translationpanelstart) {	/* The Translation panel. Accelerators used: [acgo] rxbepu */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling character set translation",		 IDC_TITLE_TRANSLATION);	beginbox(&cp, "Character set translation on received data",		 IDC_BOX_TRANSLATION2);	combobox(&cp, "&Received data assumed to be in which character set:",		 IDC_CODEPAGESTATIC, IDC_CODEPAGE);	endbox(&cp);	beginbox(&cp, "Adjust how PuTTY displays line drawing characters",		 IDC_BOX_TRANSLATION1);	radiobig(&cp,		 "Handling of line drawing characters:", IDC_VTSTATIC,		 "Font has &XWindows encoding", IDC_VTXWINDOWS,		 "Use font in &both ANSI and OEM modes", IDC_VTOEMANSI,		 "Use font in O&EM mode only", IDC_VTOEMONLY,		 "&Poor man's line drawing (" "+" ", " "-" " and " "|" ")",		 IDC_VTPOORMAN, "&Unicode mode", IDC_VTUNICODE, NULL);	endbox(&cp);    }    if (panel == selectionpanelstart) {	/* The Selection panel. Accelerators used: [acgo] d wxp hst */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling copy and paste",		 IDC_TITLE_SELECTION);	beginbox(&cp, "Translation of pasted characters",		 IDC_BOX_SELECTION1);	checkbox(&cp,		 "&Don't translate line drawing chars into +, - and |",		 IDC_RAWCNP);	endbox(&cp);	beginbox(&cp, "Control which mouse button does which thing",		 IDC_BOX_SELECTION2);	radiobig(&cp, "Action of mouse buttons:", IDC_MBSTATIC,		 "&Windows (Right pastes, Middle extends)", IDC_MBWINDOWS,		 "&xterm (Right extends, Middle pastes)", IDC_MBXTERM,		 NULL);	checkbox(&cp,		 "Shift overrides a&pplication's use of mouse",		 IDC_MOUSEOVERRIDE);	endbox(&cp);	beginbox(&cp, "Control the select-one-word-at-a-time mode",		 IDC_BOX_SELECTION3);	charclass(&cp, "C&haracter classes:", IDC_CCSTATIC, IDC_CCLIST,		  "&Set", IDC_CCSET, IDC_CCEDIT,		  "&to class", IDC_CCSTATIC2);	endbox(&cp);    }    if (panel == colourspanelstart) {	/* The Colours panel. Accelerators used: [acgo] blum */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling use of colours",		 IDC_TITLE_COLOURS);	beginbox(&cp, "General options for colour usage",		 IDC_BOX_COLOURS1);	checkbox(&cp, "&Bolded text is a different colour",		 IDC_BOLDCOLOUR);	checkbox(&cp, "Attempt to use &logical palettes", IDC_PALETTE);	endbox(&cp);	beginbox(&cp, "Adjust the precise colours PuTTY displays",		 IDC_BOX_COLOURS2);	colouredit(&cp, "Select a colo&ur and then click to modify it:",		   IDC_COLOURSTATIC, IDC_COLOURLIST,		   "&Modify...", IDC_CHANGE,		   "Red:", IDC_RSTATIC, IDC_RVALUE,		   "Green:", IDC_GSTATIC, IDC_GVALUE,		   "Blue:", IDC_BSTATIC, IDC_BVALUE, NULL);	endbox(&cp);    }    if (panel == connectionpanelstart) {	/* The Connection panel. Accelerators used: [acgo] tuk */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	bartitle(&cp, "Options controlling the connection",		 IDC_TITLE_CONNECTION);	if (dlgtype == 0) {	    beginbox(&cp, "Data to send to the server",		     IDC_BOX_CONNECTION1);	    staticedit(&cp, "Terminal-&type string", IDC_TTSTATIC,		       IDC_TTEDIT, 50);	    staticedit(&cp, "Auto-login &username", IDC_LOGSTATIC,		       IDC_LOGEDIT, 50);	    endbox(&cp);	} else {	    beginbox(&cp, "Adjust telnet session.", IDC_BOX_CONNECTION1);	    checkbox(&cp, "Keyboard sends telnet Backspace and Interrupt",		     IDC_TELNETKEY);	    endbox(&cp);	}	beginbox(&cp, "Sending of null packets to keep session active",		 IDC_BOX_CONNECTION2);	staticedit(&cp, "Seconds between &keepalives (0 to turn off)",		   IDC_PINGSTATIC, IDC_PINGEDIT, 20);	endbox(&cp);    }    if (panel == telnetpanelstart) {	/* The Telnet panel. Accelerators used: [acgo] svldr bftk */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	if (dlgtype == 0) {	    bartitle(&cp, "Options controlling Telnet connections",		     IDC_TITLE_TELNET);	    beginbox(&cp, "Data to send to the server", IDC_BOX_TELNET1);	    staticedit(&cp, "Terminal-&speed string", IDC_TSSTATIC,		       IDC_TSEDIT, 50);	    envsetter(&cp, "Environment variables:", IDC_ENVSTATIC,		      "&Variable", IDC_VARSTATIC, IDC_VAREDIT, "Va&lue",		      IDC_VALSTATIC, IDC_VALEDIT, IDC_ENVLIST, "A&dd",		      IDC_ENVADD, "&Remove", IDC_ENVREMOVE);	    endbox(&cp);	    beginbox(&cp, "Telnet protocol adjustments", IDC_BOX_TELNET2);	    radioline(&cp, "Handling of OLD_ENVIRON ambiguity:",		      IDC_EMSTATIC, 2, "&BSD (commonplace)", IDC_EMBSD,		      "R&FC 1408 (unusual)", IDC_EMRFC, NULL);	    radioline(&cp, "&Telnet negotiation mode:", IDC_ACTSTATIC, 2,		      "Passive", IDC_TPASSIVE, "Active",		      IDC_TACTIVE, NULL);	    checkbox(&cp, "&Keyboard sends telnet Backspace and Interrupt",		     IDC_TELNETKEY);	    endbox(&cp);	}    }    if (panel == rloginpanelstart) {	/* The Rlogin panel. Accelerators used: [acgo] sl */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	if (dlgtype == 0) {	    bartitle(&cp, "Options controlling Rlogin connections",		     IDC_TITLE_RLOGIN);	    beginbox(&cp, "Data to send to the server", IDC_BOX_RLOGIN1);	    staticedit(&cp, "Terminal-&speed string", IDC_R_TSSTATIC,		       IDC_R_TSEDIT, 50);	    staticedit(&cp, "&Local username:", IDC_RLLUSERSTATIC,		       IDC_RLLUSEREDIT, 50);	    endbox(&cp);	}    }    if (panel == sshpanelstart) {	/* The SSH panel. Accelerators used: [acgo] r pe12i s */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	if (dlgtype == 0) {	    bartitle(&cp, "Options controlling SSH connections",		     IDC_TITLE_SSH);	    beginbox(&cp, "Data to send to the server", IDC_BOX_SSH1);	    multiedit(&cp,		      "&Remote command:", IDC_CMDSTATIC, IDC_CMDEDIT, 100,		      NULL);	    endbox(&cp);	    beginbox(&cp, "Protocol options", IDC_BOX_SSH2);	    checkbox(&cp, "Don't allocate a &pseudo-terminal", IDC_NOPTY);	    checkbox(&cp, "Enable compr&ession", IDC_COMPRESS);	    radioline(&cp, "Preferred SSH protocol version:",		      IDC_SSHPROTSTATIC, 2,		      "&1", IDC_SSHPROT1, "&2", IDC_SSHPROT2, NULL);	    checkbox(&cp, "&Imitate SSH 2 MAC bug in commercial <= v2.3.x",		     IDC_BUGGYMAC);	    endbox(&cp);	    beginbox(&cp, "Encryption options", IDC_BOX_SSH3);	    prefslist(&cipherlist, &cp, "Encryption cipher &selection policy:",		      IDC_CIPHERSTATIC2, IDC_CIPHERLIST, IDC_CIPHERUP,		      IDC_CIPHERDN);	    endbox(&cp);	}    }    if (panel == sshauthpanelstart) {	/* The SSH authentication panel. Accelerators used: [acgo] m fkw */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	if (dlgtype == 0) {	    bartitle(&cp, "Options controlling SSH authentication",		     IDC_TITLE_SSHAUTH);	    beginbox(&cp, "Authentication methods",		     IDC_BOX_SSHAUTH1);	    checkbox(&cp, "Atte&mpt TIS or CryptoCard authentication",		     IDC_AUTHTIS);	    endbox(&cp);	    beginbox(&cp, "Authentication parameters",		     IDC_BOX_SSHAUTH2);	    checkbox(&cp, "Allow agent &forwarding", IDC_AGENTFWD);	    editbutton(&cp, "Private &key file for authentication:",		       IDC_PKSTATIC, IDC_PKEDIT, "Bro&wse...",		       IDC_PKBUTTON);	    endbox(&cp);	}    }    if (panel == tunnelspanelstart) {	/* The Tunnels panel. Accelerators used: [acgo] deilmrstx */	struct ctlpos cp;	ctlposinit(&cp, hwnd, 80, 3, 13);	if (dlgtype == 0) {	    bartitle(&cp, "Options controlling SSH tunnelling",		     IDC_TITLE_TUNNELS);	    beginbox(&cp, "X11 forwarding", IDC_BOX_TUNNELS1);	    checkbox(&cp, "&Enable X11 forwarding", IDC_X11_FORWARD);	    multiedit(&cp, "&X display location", IDC_X11_DISPSTATIC,		      IDC_X11_DISPLAY, 50, NULL);	    endbox(&cp);    	    beginbox(&cp, "Port forwarding", IDC_BOX_TUNNELS2);	    checkbox(&cp, "Local ports accept connections from o&ther hosts", IDC_LPORT_ALL);	    staticbtn(&cp, "Forwarded ports:", IDC_PFWDSTATIC,		      "&Remove", IDC_PFWDREMOVE);	    fwdsetter(&cp, IDC_PFWDLIST,		      "Add new forwarded port:", IDC_PFWDSTATIC2,		      "&Source port", IDC_SPORTSTATIC, IDC_SPORTEDIT,		      "Dest&ination", IDC_DPORTSTATIC, IDC_DPORTEDIT,		      "A&dd", IDC_PFWDADD);	    bareradioline(&cp, 2,			  "&Local", IDC_PFWDLOCAL, "Re&mote", IDC_PFWDREMOTE, NULL);	    endbox(&cp);	}    }}