(svn r1972) Several cleanups and fix some latent bugs
authortron
Wed, 09 Mar 2005 16:56:26 +0000
changeset 1468 8073826fe82d
parent 1467 c8a9a122dac4
child 1469 c9ded9c427d6
(svn r1972) Several cleanups and fix some latent bugs
win32.c
--- a/win32.c	Wed Mar 09 15:37:36 2005 +0000
+++ b/win32.c	Wed Mar 09 16:56:26 2005 +0000
@@ -49,7 +49,7 @@
 static void MakePalette(void)
 {
 	LOGPALETTE *pal;
-	int i;
+	uint i;
 	byte *b;
 
 	pal = alloca(sizeof(LOGPALETTE) + (256-1) * sizeof(PALETTEENTRY));
@@ -57,7 +57,7 @@
 	pal->palVersion = 0x300;
 	pal->palNumEntries = 256;
 
-	for(i=0,b=_cur_palette; i!=256;i++,b+=3) {
+	for (i = 0, b = _cur_palette; i != 256; i++, b += 3) {
 		pal->palPalEntry[i].peRed = b[0];
 		pal->palPalEntry[i].peGreen = b[1];
 		pal->palPalEntry[i].peBlue = b[2];
@@ -75,7 +75,7 @@
 	uint i;
 	byte *b;
 
-		for(i=0,b = _cur_palette + start*3; i!=count; i++,b+=3) {
+		for (i = 0, b = _cur_palette + start * 3; i != count; i++, b += 3) {
 		rgb[i].rgbRed = b[0];
 		rgb[i].rgbGreen = b[1];
 		rgb[i].rgbBlue = b[2];
@@ -102,8 +102,8 @@
 	byte map_to;
 } VkMapping;
 
-#define AS(x,z) {x,0,z}
-#define AM(x,y,z,w) {x,y-x,z}
+#define AS(x, z) {x, 0, z}
+#define AM(x, y, z, w) {x, y - x, z}
 
 #ifndef	VK_OEM_3
 #define VK_OEM_3 0xC0
@@ -161,7 +161,10 @@
 
 static void ClientSizeChanged(int w, int h)
 {
-	if (_wnd.double_size) { w >>= 1; h >>= 1; }
+	if (_wnd.double_size) {
+		w /= 2;
+		h /= 2;
+	}
 
 	// allocate new dib section of the new size
 	if (AllocateDibSection(w, h)) {
@@ -182,7 +185,7 @@
 
 static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	switch(msg) {
+	switch (msg) {
 	case WM_PAINT: {
 		PAINTSTRUCT ps;
 		HDC dc,dc2;
@@ -226,8 +229,8 @@
 		if (_game_mode == GM_MENU) { // do not ask to quit on the main screen
 			_exit_game = true;
 		} else if (_patches.autosave_on_exit) {
-				DoExitSave();
-				_exit_game = true;
+			DoExitSave();
+			_exit_game = true;
 		} else
 			AskExitGame();
 
@@ -261,8 +264,8 @@
 		POINT pt;
 
 		if (_wnd.double_size) {
-			x >>= 1;
-			y >>= 1;
+			x /= 2;
+			y /= 2;
 		}
 
 		if (_cursor.fix_at) {
@@ -308,10 +311,10 @@
 
 		_pressed_key = w | MapWindowsKey(wParam) << 16;
 
-		if( scancode == 41 )
+		if (scancode == 41)
 			_pressed_key = w | WKC_BACKQUOTE << 16;
 
-		if ((_pressed_key>>16) == ('D' | WKC_CTRL) && !_wnd.fullscreen) {
+		if ((_pressed_key >> 16) == ('D' | WKC_CTRL) && !_wnd.fullscreen) {
 			_double_size ^= 1;
 			_wnd.double_size = _double_size;
 			ClientSizeChanged(_wnd.width, _wnd.height);
@@ -321,7 +324,7 @@
 
 
 	case WM_SYSKEYDOWN: /* user presses F10 or Alt, both activating the title-menu */
-		switch(wParam) {
+		switch (wParam) {
 		case VK_RETURN: /* Full Screen */
 			MakeWindow(!_wnd.fullscreen);
 			return 0;
@@ -352,10 +355,16 @@
 
 		w = r->right - r->left - (r2.right - r2.left);
 		h = r->bottom - r->top - (r2.bottom - r2.top);
-		if (_wnd.double_size) { w >>= 1; h >>= 1; }
+		if (_wnd.double_size) {
+			w /= 2;
+			h /= 2;
+		}
 		w = clamp(w, 64, MAX_SCREEN_WIDTH);
 		h = clamp(h, 64, MAX_SCREEN_HEIGHT);
-		if (_wnd.double_size) { w <<= 1; h <<= 1; }
+		if (_wnd.double_size) {
+			w *= 2;
+			h *= 2;
+		}
 		SetRect(&r2, 0, 0, w, h);
 
 		AdjustWindowRect(&r2, GetWindowLong(hwnd, GWL_STYLE), FALSE);
@@ -405,6 +414,7 @@
 
 	case WM_MOUSEWHEEL: {
 		int delta = GET_WHEEL_DELTA_WPARAM(wParam);
+
 		if (delta < 0) {
 			_cursor.wheel++;
 		} else if (delta > 0) {
@@ -452,7 +462,7 @@
 	_wnd.double_size = _double_size && !full_screen;
 
 	// recreate window?
-	if ((full_screen|_wnd.fullscreen) && _wnd.main_wnd) {
+	if ((full_screen || _wnd.fullscreen) && _wnd.main_wnd) {
 		DestroyWindow(_wnd.main_wnd);
 		_wnd.main_wnd = 0;
 	}
@@ -469,9 +479,10 @@
 		}
 		settings.dmPelsWidth = _wnd.width_org;
 		settings.dmPelsHeight = _wnd.height_org;
-		if ((settings.dmDisplayFrequency = _display_hz) != 0)
+		settings.dmDisplayFrequency = _display_hz;
+		if (settings.dmDisplayFrequency != 0)
 			settings.dmFields |= DM_DISPLAYFREQUENCY;
-		if ( !ChangeDisplaySettings(&settings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL ) {
+		if (ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
 			MakeWindow(false);
 			return;
 		}
@@ -485,7 +496,8 @@
 		uint style;
 		int x, y, w, h;
 
-		if ((_wnd.fullscreen=full_screen) != false) {
+		_wnd.fullscreen = full_screen;
+		if (_wnd.fullscreen) {
 			style = WS_POPUP | WS_VISIBLE;
 			SetRect(&r, 0, 0, _wnd.width_org, _wnd.height_org);
 		} else {
@@ -496,15 +508,16 @@
 		AdjustWindowRect(&r, style, FALSE);
 		w = r.right - r.left;
 		h = r.bottom - r.top;
-		x = (GetSystemMetrics(SM_CXSCREEN)-w)>>1;
-		y = (GetSystemMetrics(SM_CYSCREEN)-h)>>1;
+		x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2;
+		y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
 
 		if (_wnd.main_wnd) {
 			SetWindowPos(_wnd.main_wnd, 0, x, y, w, h, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
 		} else {
 			char Windowtitle[50] = "OpenTTD ";
-			// also show revision number/release in window title
-			strncat(Windowtitle, _openttd_revision, sizeof(Windowtitle)-(strlen(Windowtitle) + 1));
+
+			snprintf(Windowtitle, lengthof(Windowtitle), "OpenTTD %s",
+				_openttd_revision);
 
 			_wnd.main_wnd = CreateWindow("TTD", Windowtitle, style, x, y, w, h, 0, 0, _inst, 0);
 			if (_wnd.main_wnd == NULL)
@@ -540,7 +553,7 @@
 
 	if (_wnd.double_size) {
 		w = (w + 3) & ~0x3;
-		_wnd.alloced_bits = _wnd.buffer_bits = (byte*)malloc(w * h);
+		_wnd.alloced_bits = _wnd.buffer_bits = malloc(w * h);
 		w *= 2;
 		h *= 2;
 	}
@@ -588,18 +601,21 @@
 
 	while (EnumDisplaySettings(NULL, i++, &dm)) {
 		if (dm.dmBitsPerPel == 8 &&
-				IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH+1) &&
-				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT+1) &&
-				(n == 0 || _resolutions[n-1][0] != dm.dmPelsWidth || _resolutions[n-1][1] != dm.dmPelsHeight)) {
+				IS_INT_INSIDE(dm.dmPelsWidth, 640, MAX_SCREEN_WIDTH + 1) &&
+				IS_INT_INSIDE(dm.dmPelsHeight, 480, MAX_SCREEN_HEIGHT + 1) && (
+					n == 0 ||
+					_resolutions[n - 1][0] != dm.dmPelsWidth ||
+					_resolutions[n - 1][1] != dm.dmPelsHeight
+				)) {
 			_resolutions[n][0] = dm.dmPelsWidth;
 			_resolutions[n][1] = dm.dmPelsHeight;
-			if (++n == sizeof(_resolutions) / (sizeof(uint16)*2)) break;
+			if (++n == lengthof(_resolutions)) break;
 		}
 	}
 
 	if (n == 0) {
 		memcpy(_resolutions, default_resolutions, sizeof(default_resolutions));
-		n = 6;
+		n = lengthof(default_resolutions);
 	}
 
 	_num_resolutions = n;
@@ -631,9 +647,7 @@
 
 static void Win32GdiStop(void)
 {
-	if ( _wnd.fullscreen ) {
-		ChangeDisplaySettings(NULL, 0);
-	}
+	if (_wnd.fullscreen) ChangeDisplaySettings(NULL, 0);
 	MyShowCursor(true);
 	DeleteObject(_wnd.gdi_palette);
 	DeleteObject(_wnd.dib_sect);
@@ -646,25 +660,28 @@
 	uint p = _screen.pitch;
 	byte *s = (byte*)_wnd.buffer_bits + top * p + left;
 	byte *d = (byte*)_wnd.bitmap_bits + top * p * 4 + left * 2;
-	int i;
 
-	while (height) {
-		for(i=0; i!=width; i++) {
-			d[i*2] = d[i*2+1] = d[i*2+p*2] = d[i*2+1+p*2] = s[i];
+	for (; height > 0; height--) {
+		int i;
+
+		for (i = 0; i != width; i++) {
+			d[i * 2] = d[i * 2 + 1] = d[i * 2 + p * 2] = d[i * 2 + 1 + p * 2] = s[i];
 		}
 		s += p;
 		d += p * 4;
-		height--;
 	}
 }
 
 static void Win32GdiMakeDirty(int left, int top, int width, int height)
 {
-	RECT r = {left, top, left+width, top+height};
+	RECT r = { left, top, left + width, top + height };
+
 	if (_wnd.double_size) {
 		filter(left, top, width, height);
-		//filter(0, 0, 640, 480);
-		r.left *= 2;r.top *= 2;r.right *= 2;r.bottom *= 2;
+		r.left *= 2;
+		r.top *= 2;
+		r.right *= 2;
+		r.bottom *= 2;
 	}
 	InvalidateRect(_wnd.main_wnd, &r, FALSE);
 }
@@ -699,7 +716,9 @@
 #endif
 			/* Disable speeding up game with ALT+TAB (if syskey is pressed, the
 			 * real key is in the upper 16 bits (see WM_SYSKEYDOWN in WndProcGdi()) */
-			if (((_pressed_key>>16) & WKC_TAB) && !_networking && _game_mode != GM_MENU) _fast_forward |= 2;
+			if ((_pressed_key >> 16) & WKC_TAB && !_networking &&
+					_game_mode != GM_MENU)
+				_fast_forward |= 2;
 		} else if (_fast_forward & 2)
 			_fast_forward = 0;
 
@@ -766,7 +785,7 @@
  * WIN32 MIDI PLAYER
  **********************/
 
-struct {
+static struct {
 	bool stop_song;
 	bool terminate;
 	bool playing;
@@ -787,7 +806,7 @@
 {
 	if (_midi.playing) {
 		_midi.stop_song = true;
-		_midi.start_song[0] = 0;
+		_midi.start_song[0] = '\0';
 		SetEvent(_midi.wait_obj);
 	}
 }
@@ -806,6 +825,7 @@
 static long CDECL MidiSendCommand(const char *cmd, ...) {
 	va_list va;
 	char buf[512];
+
 	va_start(va, cmd);
 	vsprintf(buf, cmd, va);
 	va_end(va);
@@ -831,7 +851,7 @@
 static void MidiIntSetVolume(int vol)
 {
 	uint v = (vol * 65535 / 127);
-	midiOutSetVolume((HMIDIOUT)-1, v + (v<<16));
+	midiOutSetVolume((HMIDIOUT)-1, v + (v << 16));
 }
 
 static bool MidiIntIsSongPlaying(void)
@@ -843,27 +863,30 @@
 
 static DWORD WINAPI MidiThread(LPVOID arg)
 {
-	char *s;
-	int vol;
-
 	_midi.wait_obj = CreateEvent(NULL, FALSE, FALSE, NULL);
 
 	do {
-		if ((vol=_midi.new_vol) != -1) {
+		char *s;
+		int vol;
+
+		vol = _midi.new_vol;
+		if (vol != -1) {
 			_midi.new_vol = -1;
 			MidiIntSetVolume(vol);
-
 		}
-		if ((s=_midi.start_song)[0]) {
+
+		s = _midi.start_song;
+		if (s[0] != '\0') {
 			_midi.playing = MidiIntPlaySong(s);
-			s[0] = 0;
+			s[0] = '\0';
 
 			// Delay somewhat in case we don't manage to play.
 			if (!_midi.playing) {
 				Sleep(5000);
 			}
 		}
-		if (_midi.stop_song != false && _midi.playing) {
+
+		if (_midi.stop_song && _midi.playing) {
 			_midi.stop_song = false;
 			_midi.playing = false;
 			MidiIntStopSong();
@@ -882,6 +905,7 @@
 static const char *Win32MidiStart(const char * const *parm)
 {
 	DWORD threadId;
+
 	memset(&_midi, 0, sizeof(_midi));
 	_midi.new_vol = -1;
 	CreateThread(NULL, 8192, MidiThread, 0, 0, &threadId);
@@ -910,32 +934,37 @@
 static int _bufsize;
 static void PrepareHeader(WAVEHDR *hdr)
 {
-	hdr->dwBufferLength = _bufsize*4;
+	hdr->dwBufferLength = _bufsize * 4;
 	hdr->dwFlags = 0;
-	hdr->lpData = malloc(_bufsize*4);
-	if (hdr->lpData == NULL || waveOutPrepareHeader(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
+	hdr->lpData = malloc(_bufsize * 4);
+	if (hdr->lpData == NULL ||
+			waveOutPrepareHeader(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
 		error("waveOutPrepareHeader failed");
 }
 
 static void FillHeaders(void)
 {
 	WAVEHDR *hdr;
-	for(hdr=_wave_hdr; hdr != endof(_wave_hdr); hdr++) {
+
+	for (hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) {
 		if (!(hdr->dwFlags & WHDR_INQUEUE)) {
-			MxMixSamples(_mixer, hdr->lpData, hdr->dwBufferLength >> 2);
+			MxMixSamples(_mixer, hdr->lpData, hdr->dwBufferLength / 4);
 			if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
 				error("waveOutWrite failed");
 		}
 	}
 }
 
-static void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
+static void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance,
+	DWORD dwParam1, DWORD dwParam2)
 {
-	switch(uMsg) {
-	case WOM_DONE:
-		if (_waveout)
-			FillHeaders();
-		break;
+	switch (uMsg) {
+		case WOM_DONE:
+			if (_waveout) FillHeaders();
+			break;
+
+		default:
+			break;
 	}
 }
 
@@ -963,6 +992,7 @@
 static void Win32SoundStop(void)
 {
 	HWAVEOUT waveout = _waveout;
+
 	_waveout = NULL;
 	waveOutReset(waveout);
 	waveOutUnprepareHeader(waveout, &_wave_hdr[0], sizeof(WAVEHDR));
@@ -981,13 +1011,13 @@
 	HMODULE lib;
 	void *p;
 
-	while (*dll) {
+	while (*dll != '\0') {
 		lib = LoadLibrary(dll);
 		if (lib == NULL)
 			return false;
 		while (true) {
-			while(*dll++);
-			if (!*dll)
+			while(*dll++ != '\0');
+			if (*dll == '\0')
 				break;
 			p = GetProcAddress(lib, dll);
 			if (p == NULL)
@@ -1036,22 +1066,22 @@
 
 	_crc_table = table;
 
-	for (i=0; i!=256; i++) {
+	for (i = 0; i != 256; i++) {
 		crc = i;
-		for (j=8; j!=0; j--) {
+		for (j = 8; j != 0; j--) {
 			if (crc & 1)
 				crc = (crc >> 1) ^ poly;
 			else
-				crc>>=1;
+				crc >>= 1;
 		}
 		table[i] = crc;
 	}
 }
 
 static uint32 CalcCRC(byte *data, uint size, uint32 crc) {
-	do {
-		crc = ((crc>>8) & 0x00FFFFFF) ^ _crc_table[ (crc^(*data++)) & 0xFF ];
-	} while (--size);
+	for (; size > 0; size--) {
+		crc = ((crc >> 8) & 0x00FFFFFF) ^ _crc_table[(crc ^ *data++) & 0xFF];
+	}
 	return crc;
 }
 
@@ -1067,10 +1097,12 @@
 		FILETIME write_time;
 		uint32 crc = (uint32)-1;
 
-		file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+		file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+			OPEN_EXISTING, 0, 0);
 		if (file != INVALID_HANDLE_VALUE) {
 			while(true) {
-				if (ReadFile(file, buffer, sizeof(buffer), &numread, NULL) == 0 || numread==0)
+				if (ReadFile(file, buffer, sizeof(buffer), &numread, NULL) == 0 ||
+						numread == 0)
 					break;
 				filesize += numread;
 				crc = CalcCRC(buffer, numread, crc);
@@ -1091,6 +1123,7 @@
 {
 	char buffer[MAX_PATH];
 	DebugFileInfo dfi;
+
 	GetModuleFileName(mod, buffer, MAX_PATH);
 	GetFileInfo(&dfi, buffer);
 	output += sprintf(output, " %-20s handle: %.8X size: %d crc: %.8X date: %d-%.2d-%.2d %.2d:%.2d:%.2d\r\n",
@@ -1123,8 +1156,9 @@
 			res = EnumProcessModules(proc, modules, sizeof(modules), &needed);
 			CloseHandle(proc);
 			if (res) {
-				count = min(needed/sizeof(HMODULE*), sizeof(modules)/sizeof(HMODULE*));
-				for(i=0; i!=count; i++)
+				count =
+					min(needed / sizeof(HMODULE), lengthof(modules));
+				for (i = 0; i != count; i++)
 					output = PrintModuleInfo(output, modules[i]);
 				return output;
 			}
@@ -1137,13 +1171,14 @@
 static const char _crash_desc[] =
 	"A serious fault condition occured in the game. The game will shut down.\n"
 	"Press \"Submit report\" to send crash information to the developers. "
-	"This will greatly help debugging. The information contained in the report is "
-	"displayed below.\n"
+	"This will greatly help debugging. "
+	"The information contained in the report is displayed below.\n"
 	"Press \"Emergency save\" to attempt saving the game.";
 
 static const char _save_succeeded[] =
-	"Emergency save succeeded.\nBe aware that critical parts of the internal game state "
-	"may have become corrupted. The saved game is not guaranteed to work.";
+	"Emergency save succeeded.\n"
+	"Be aware that critical parts of the internal game state may have become "
+	"corrupted. The saved game is not guaranteed to work.";
 
 bool EmergencySave();
 
@@ -1255,12 +1290,13 @@
 	if (mode >= 0) {
 		GetWindowRect(GetDlgItem(wnd, 11), &r2);
 		offs = r2.bottom - r2.top + 10;
-		if (!mode) offs=-offs;
-		SetWindowPos(wnd, HWND_TOPMOST, 0, 0, r.right - r.left, r.bottom - r.top + offs, SWP_NOMOVE | SWP_NOZORDER);
+		if (!mode) offs = -offs;
+		SetWindowPos(wnd, HWND_TOPMOST, 0, 0,
+			r.right - r.left, r.bottom - r.top + offs, SWP_NOMOVE | SWP_NOZORDER);
 	} else {
 		SetWindowPos(wnd, HWND_TOPMOST,
-			(GetSystemMetrics(SM_CXSCREEN) - (r.right - r.left)) >> 1,
-			(GetSystemMetrics(SM_CYSCREEN) - (r.bottom - r.top)) >> 1,
+			(GetSystemMetrics(SM_CXSCREEN) - (r.right - r.left)) / 2,
+			(GetSystemMetrics(SM_CYSCREEN) - (r.bottom - r.top)) / 2,
 			0, 0, SWP_NOSIZE);
 	}
 }
@@ -1350,7 +1386,7 @@
 	char *output;
 	static bool had_exception;
 
-	if (had_exception) { ExitProcess(0); }
+	if (had_exception) ExitProcess(0);
 	had_exception = true;
 
 	_ident = GetTickCount(); // something pretty unique
@@ -1375,7 +1411,8 @@
 		);
 	}
 
-	if (_exception_string) output += sprintf(output, "Reason: %s\r\n", _exception_string);
+	if (_exception_string)
+		output += sprintf(output, "Reason: %s\r\n", _exception_string);
 
 	output += sprintf(output, "Exception %.8X at %.8X\r\n"
 		"Registers:\r\n"
@@ -1400,7 +1437,7 @@
 	{
 		byte *b = (byte*)ep->ContextRecord->Eip;
 		int i;
-		for(i=0; i!=24; i++) {
+		for (i = 0; i != 24; i++) {
 			if (IsBadReadPtr(b, 1)) {
 				output += sprintf(output, " ??"); // OCR: WAS: , 0);
 			} else {
@@ -1417,8 +1454,8 @@
 	{
 		int i,j;
 		uint32 *b = (uint32*)ep->ContextRecord->Esp;
-		for(j=0; j!=24; j++) {
-			for(i=0; i!=8; i++) {
+		for (j = 0; j != 24; j++) {
+			for (i = 0; i != 8; i++) {
 				if (IsBadReadPtr(b,sizeof(uint32))) {
 					output += sprintf(output, " ????????"); //OCR: WAS - , 0);
 				} else {
@@ -1438,7 +1475,8 @@
 		os.dwOSVersionInfoSize = sizeof(os);
 		GetVersionEx(&os);
 		output += sprintf(output, "\r\nSystem information:\r\n"
-			" Windows version %d.%d %d %s\r\n", os.dwMajorVersion, os.dwMinorVersion, os.dwBuildNumber, os.szCSDVersion);
+			" Windows version %d.%d %d %s\r\n",
+			os.dwMajorVersion, os.dwMinorVersion, os.dwBuildNumber, os.szCSDVersion);
 	}
 
 	{
@@ -1466,7 +1504,7 @@
 static void Win32InitializeExceptions(void)
 {
 	_asm {
-		mov _safe_esp,esp
+		mov _safe_esp, esp
 	}
 
 	SetUnhandledExceptionFilter(ExceptionHandler);
@@ -1507,14 +1545,17 @@
 }
 
 int CDECL compare_FiosItems (const void *a, const void *b) {
-	const FiosItem *da = (const FiosItem *) a;
-	const FiosItem *db = (const FiosItem *) b;
+	const FiosItem *da = (const FiosItem *)a;
+	const FiosItem *db = (const FiosItem *)b;
 	int r;
 
 	if (_savegame_sort_order < 2) // sort by date
     r = da->mtime < db->mtime ? -1 : 1;
 	else
-		r = stricmp(da->title[0] ? da->title : da->name, db->title[0] ? db->title : db->name);
+		r = stricmp(
+			da->title[0] != '\0' ? da->title : da->name,
+			db->title[0] != '\0' ? db->title : db->name
+		);
 
 	if (_savegame_sort_order & 1) r = -r;
 	return r;
@@ -1552,7 +1593,8 @@
 	if (h != INVALID_HANDLE_VALUE) {
 		do {
 			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
-					!(fd.cFileName[0] == '.' && (fd.cFileName[1] == 0 || (fd.cFileName[1] == '.' && fd.cFileName[2] == 0)))) {
+					strcmp(fd.cFileName, ".") != 0 &&
+					strcmp(fd.cFileName, "..") != 0) {
 				fios = FiosAlloc();
 				fios->type = FIOS_TYPE_DIR;
 				strcpy(fios->name, fd.cFileName);
@@ -1585,7 +1627,11 @@
 					ttd_strlcpy(fios->name, fd.cFileName, strlen(fd.cFileName)-3);
 				}	else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
 					int ext = 0; // start of savegame extensions in _old_extensions[]
-					if (t && ((ext++, !stricmp(t, ".SS1")) || (ext++, !stricmp(t, ".SV1")) || (ext++, !stricmp(t, ".SV2"))) ) { // TTDLX(Patch)
+					if (t != NULL && (
+								(ext++, stricmp(t, ".SS1") == 0) ||
+								(ext++, stricmp(t, ".SV1") == 0) ||
+								(ext++, stricmp(t, ".SV2") == 0)
+							)) { // TTDLX(Patch)
 						fios = FiosAlloc();
 						fios->old_extension = ext-1;
 						fios->mtime = *(uint64*)&fd.ftLastWriteTime;
@@ -1639,7 +1685,7 @@
 	_fios_path = _fios_scn_path;
 
 	// Parent directory, only if not of the type C:\.
-	if (_fios_path[3] != 0 && mode != SLD_NEW_GAME) {
+	if (_fios_path[3] != '\0' && mode != SLD_NEW_GAME) {
 		fios = FiosAlloc();
 		fios->type = FIOS_TYPE_PARENT;
 		strcpy(fios->title, ".. (Parent directory)");
@@ -1650,7 +1696,8 @@
 	if (h != INVALID_HANDLE_VALUE && mode != SLD_NEW_GAME) {
 		do {
 			if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
-					!(fd.cFileName[0] == '.' && (fd.cFileName[1] == 0 || (fd.cFileName[1] == '.' && fd.cFileName[2] == 0)))) {
+					strcmp(fd.cFileName, ".") != 0 &&
+					strcmp(fd.cFileName, "..") != 0) {
 				fios = FiosAlloc();
 				fios->type = FIOS_TYPE_DIR;
 				strcpy(fios->name, fd.cFileName);
@@ -1673,16 +1720,22 @@
 		do {
 			if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
 				char *t = strrchr(fd.cFileName, '.');
-				if (t && !stricmp(t, ".SCN")) { // OpenTTD
+
+				if (t != NULL && !stricmp(t, ".SCN")) { // OpenTTD
 					fios = FiosAlloc();
 					fios->mtime = *(uint64*)&fd.ftLastWriteTime;
 					sprintf(buf, "%s\\%s", _fios_path, fd.cFileName);
 					fios->type = FIOS_TYPE_SCENARIO;
-					fios->title[0] = 0;
+					fios->title[0] = '\0';
 					ttd_strlcpy(fios->name, fd.cFileName, strlen(fd.cFileName)-3);
-				}	else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO || mode == SLD_NEW_GAME) {
+				}	else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO ||
+						mode == SLD_NEW_GAME) {
 					int ext = 3; // start of scenario extensions in _old_extensions[]
-					if (t && ((ext++, !stricmp(t, ".SV0")) || (ext++, !stricmp(t, ".SS0"))) ) { // TTDLX(Patch)
+
+					if (t != NULL && (
+								(ext++, stricmp(t, ".SV0") == 0) ||
+								(ext++, stricmp(t, ".SS0") == 0)
+							)) { // TTDLX(Patch)
 						fios = FiosAlloc();
 						fios->old_extension = ext-1;
 						fios->mtime = *(uint64*)&fd.ftLastWriteTime;
@@ -1702,16 +1755,14 @@
 	// Drives
 	if (mode != SLD_NEW_GAME) {
 		char drives[256];
-		char *s;
+		const char *s;
+
 		GetLogicalDriveStrings(sizeof(drives), drives);
-		s=drives;
-		while (*s) {
+		for (s = drives; *s != '\0';) {
 			fios = FiosAlloc();
 			fios->type = FIOS_TYPE_DRIVE;
-			fios->title[0] = s[0];
-			fios->title[1] = ':';
-			fios->title[2] = 0;
-			while (*s++) {}
+			sprintf(fios->title, "%c:", s[0]);
+			while (*s++ != '\0') {}
 		}
 	}
 
@@ -1732,28 +1783,28 @@
 {
 	static char str_buffr[512];
 	char *path = _fios_path;
-	char *s;
 
-	switch(item->type) {
+	switch (item->type) {
 	case FIOS_TYPE_DRIVE:
 		sprintf(path, "%c:\\", item->title[0]);
 		break;
 
-	case FIOS_TYPE_PARENT:
+	case FIOS_TYPE_PARENT: {
+		char *s;
+
 		// Skip drive part
 		path += 3;
 		s = path;
-		while (*path) {
-			if (*path== '\\')
-				s = path;
-			path++;
+		for (; *path != '\0'; path++) {
+			if (*path== '\\') s = path;
 		}
-		*s = 0;
+		*s = '\0';
 		break;
+	}
 
 	case FIOS_TYPE_DIR:
 		// Scan to end
-		while (*++path);
+		while (*++path != '\0');
 		// Add backslash?
 		if (path[-1] != '\\') *path++ = '\\';
 
@@ -1765,14 +1816,17 @@
 		return str_buffr;
 
 	case FIOS_TYPE_OLDFILE:
-		sprintf(str_buffr, "%s\\%s.%s", _fios_path, item->name, _old_extensions[item->old_extension]);
+		sprintf(str_buffr, "%s\\%s.%s",
+			_fios_path, item->name, _old_extensions[item->old_extension]);
 		return str_buffr;
 
 	case FIOS_TYPE_SCENARIO:
 		sprintf(str_buffr, "%s\\%s.scn", path, item->name);
 		return str_buffr;
+
 	case FIOS_TYPE_OLD_SCENARIO:
-		sprintf(str_buffr, "%s\\%s.%s", path, item->name, _old_extensions[item->old_extension]);
+		sprintf(str_buffr, "%s\\%s.%s",
+			path, item->name, _old_extensions[item->old_extension]);
 		return str_buffr;
 	}
 
@@ -1788,12 +1842,9 @@
 	DWORD spc, bps, nfc, tnc;
 	*path = _fios_path;
 
-	root[0] = _fios_path[0];
-	root[1] = ':';
-	root[2] = '\\';
-	root[3] = 0;
+	sprintf(root, "%c:\\", _fios_path[0]);
 	if (GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) {
-		uint32 tot = ((spc*bps)*(uint64)nfc) >> 20;
+		uint32 tot = ((spc * bps) * (uint64)nfc) >> 20;
 		SetDParam(0, tot);
 		return STR_4005_BYTES_FREE;
 	} else {
@@ -1803,7 +1854,7 @@
 
 void FiosMakeSavegameName(char *buf, const char *name)
 {
-	if(_game_mode == GM_EDITOR)
+	if (_game_mode == GM_EDITOR)
 		sprintf(buf, "%s\\%s.scn", _fios_path, name);
 	else
 		sprintf(buf, "%s\\%s.sav", _fios_path, name);
@@ -1928,24 +1979,24 @@
 			line++;
 
 		// end?
-		if (*line == 0)
+		if (*line == '\0')
 			break;
 
 		// special handling when quoted
 		if (*line == '"') {
 			argv[n++] = ++line;
 			while (*line != '"') {
-				if (*line == 0) return n;
+				if (*line == '\0') return n;
 				line++;
 			}
 		} else {
 			argv[n++] = line;
 			while (*line != ' ' && *line != '\t') {
-				if (*line == 0) return n;
+				if (*line == '\0') return n;
 				line++;
 			}
 		}
-		*line++ = 0;
+		*line++ = '\0';
 	} while (n != max_argc);
 
 	return n;
@@ -1953,7 +2004,7 @@
 
 
 #if defined(_MSC_VER)
-__int64 _declspec(naked) rdtsc()
+static uint64 _declspec(naked) rdtsc(void)
 {
 	_asm {
 		rdtsc
@@ -1990,9 +2041,9 @@
 	*stderr = *fdopen(2, "w" );
 #endif
 
-	setvbuf( stdin, NULL, _IONBF, 0 );
-	setvbuf( stdout, NULL, _IONBF, 0 );
-	setvbuf( stderr, NULL, _IONBF, 0 );
+	setvbuf(stdin, NULL, _IONBF, 0);
+	setvbuf(stdout, NULL, _IONBF, 0);
+	setvbuf(stderr, NULL, _IONBF, 0);
 }
 
 void ShowInfo(const char *str)
@@ -2014,7 +2065,8 @@
 }
 
 
-int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+	LPTSTR lpCmdLine, int nCmdShow)
 {
 	int argc;
 	char *argv[64]; // max 64 command line arguments
@@ -2031,8 +2083,8 @@
 #if defined(_MSC_VER)
 	{
 		uint64 seed = rdtsc();
-		_random_seeds[0][0] = ((uint32*)&seed)[0];
-		_random_seeds[0][1] = ((uint32*)&seed)[1];
+		_random_seeds[0][0] = seed & 0xffffffff;
+		_random_seeds[0][1] = seed >> 32;
 	}
 #else
 	_random_seeds[0][0] = GetTickCount();
@@ -2070,7 +2122,7 @@
 
 
 	s = strchr(cfg, 0);
-	if (s[-1] != '\\') { s[0] = '\\'; s[1] = 0; }
+	if (s[-1] != '\\') strcpy(s, "\\");
 
 	_path.save_dir = str_fmt("%ssave", cfg);
 	_path.autosave_dir = str_fmt("%s\\autosave", _path.save_dir);