(svn r626) Merge r438 to trunk:
authortron
Mon, 15 Nov 2004 12:05:01 +0000
changeset 427 d87c7d677d2f
parent 426 bd6f3c2cad9f
child 428 532ec9578634
(svn r626) Merge r438 to trunk:
Some whitespace and magic number cleanup (in news_gui)
news.h
news_gui.c
--- a/news.h	Mon Nov 15 11:54:35 2004 +0000
+++ b/news.h	Mon Nov 15 12:05:01 2004 +0000
@@ -19,9 +19,9 @@
 
 #define NEWS_FLAGS(mode,flag,type,cb) ((cb)<<24 | (type)<<16 | (flag)<<8 | (mode))
 void AddNewsItem(StringID string, uint32 flags, uint data_a, uint data_b);
-void NewsLoop();
-void DrawNewsBorder(Window *w);
-void InitNewsItemStructs();
+void NewsLoop(void);
+void DrawNewsBorder(const Window *w);
+void InitNewsItemStructs(void);
 
 VARDEF NewsItem _statusbar_news_item;
 
--- a/news_gui.c	Mon Nov 15 11:54:35 2004 +0000
+++ b/news_gui.c	Mon Nov 15 12:05:01 2004 +0000
@@ -23,14 +23,18 @@
            forced
 */
 
-# define MAX_NEWS 30
+#define MAX_NEWS 30
+
+#define INVALID_NEWS 255
 
 static NewsItem _news_items[MAX_NEWS];
-static byte _current_news = 255; // points to news item that should be shown next
+static byte _current_news = INVALID_NEWS; // points to news item that should be shown next
 static byte _oldest_news = 0;    // points to first item in fifo queue
-static byte _latest_news = 255;  // points to last item in fifo queue
-static byte _forced_news = 255;  // if the message being shown was forced by the user, its index is stored in _forced_news.
-																 //forced_news is 255 otherwise. (Users can force messages through history or "last message")
+static byte _latest_news = INVALID_NEWS;  // points to last item in fifo queue
+/* if the message being shown was forced by the user, its index is stored in
+ * _forced_news. forced_news is INVALID_NEWS otherwise.
+ * (Users can force messages through history or "last message") */
+static byte _forced_news = INVALID_NEWS;
 
 static byte _total_news = 0; // total news count
 
@@ -39,7 +43,7 @@
 void DrawNewsNewShipAvail(Window *w);
 void DrawNewsNewAircraftAvail(Window *w);
 void DrawNewsBankrupcy(Window *w);
-static void MoveToNexItem();
+static void MoveToNexItem(void);
 
 StringID GetNewsStringNewTrainAvail(NewsItem *ni);
 StringID GetNewsStringNewRoadVehAvail(NewsItem *ni);
@@ -48,32 +52,32 @@
 StringID GetNewsStringBankrupcy(NewsItem *ni);
 
 static DrawNewsCallbackProc * const _draw_news_callback[] = {
-	DrawNewsNewTrainAvail, /* DNC_TRAINAVAIL */
-	DrawNewsNewRoadVehAvail, /* DNC_ROADAVAIL */
-	DrawNewsNewShipAvail, /* DNC_SHIPAVAIL */
+	DrawNewsNewTrainAvail,    /* DNC_TRAINAVAIL */
+	DrawNewsNewRoadVehAvail,  /* DNC_ROADAVAIL */
+	DrawNewsNewShipAvail,     /* DNC_SHIPAVAIL */
 	DrawNewsNewAircraftAvail, /* DNC_AIRCRAFTAVAIL */
-	DrawNewsBankrupcy, /* DNC_BANKRUPCY */
+	DrawNewsBankrupcy,        /* DNC_BANKRUPCY */
 };
 
 GetNewsStringCallbackProc * const _get_news_string_callback[] = {
-	GetNewsStringNewTrainAvail, /* DNC_TRAINAVAIL */
-	GetNewsStringNewRoadVehAvail, /* DNC_ROADAVAIL */
-	GetNewsStringNewShipAvail, /* DNC_SHIPAVAIL */
+	GetNewsStringNewTrainAvail,    /* DNC_TRAINAVAIL */
+	GetNewsStringNewRoadVehAvail,  /* DNC_ROADAVAIL */
+	GetNewsStringNewShipAvail,     /* DNC_SHIPAVAIL */
 	GetNewsStringNewAircraftAvail, /* DNC_AIRCRAFTAVAIL */
-	GetNewsStringBankrupcy, /* DNC_BANKRUPCY */
+	GetNewsStringBankrupcy,        /* DNC_BANKRUPCY */
 };
 
-void InitNewsItemStructs()
+void InitNewsItemStructs(void)
 {
-	memset(_news_items, 0, sizeof(NewsItem)*MAX_NEWS);
-	_current_news = 255;
+	memset(_news_items, 0, sizeof(_news_items));
+	_current_news = INVALID_NEWS;
 	_oldest_news = 0;
-	_latest_news = 255;
-	_forced_news = 255;
+	_latest_news = INVALID_NEWS;
+	_forced_news = INVALID_NEWS;
 	_total_news = 0;
 }
 
-void DrawNewsBorder(Window *w)
+void DrawNewsBorder(const Window *w)
 {
 	int left = 0;
 	int right = w->width - 1;
@@ -92,62 +96,74 @@
 
 static void NewsWindowProc(Window *w, WindowEvent *e)
 {
-	switch(e->event) {
+	switch (e->event) {
 	case WE_PAINT: {
-		NewsItem *ni = WP(w,news_d).ni;
+		const NewsItem *ni = WP(w, news_d).ni;
 		ViewPort *vp;
 
-		if (ni->display_mode == NM_NORMAL || ni->display_mode == NM_THIN) {
-			DrawNewsBorder(w);
-
-			DrawString(2, 1, STR_00C6, 0);
-
-			SET_DPARAM16(0, ni->date);
-			DrawStringRightAligned(428, 1, STR_01FF, 0);
-
-			if (!(ni->flags & NF_VIEWPORT)) {
-				COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
-				DrawStringMultiCenter(215, ni->display_mode == NM_NORMAL ? 76 : 56, ni->string_id, 426);
-			} else {
-				byte bk = _display_opt;
-				_display_opt |= DO_TRANS_BUILDINGS;
-				DrawWindowViewport(w);
-				_display_opt = bk;
+		switch (ni->display_mode) {
+			case NM_NORMAL:
+			case NM_THIN: {
+				DrawNewsBorder(w);
 
-				/* Shade the viewport into gray, or color*/
-				vp = w->viewport;
-				GfxFillRect(vp->left - w->left, vp->top - w->top, vp->left - w->left + vp->width - 1, vp->top - w->top + vp->height - 1,
-					ni->flags & NF_INCOLOR ? 0x4322:0x4323
-				);
+				DrawString(2, 1, STR_00C6, 0);
 
-				COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
-				DrawStringMultiCenter((w->width>>1), 20, ni->string_id, 428);
+				SET_DPARAM16(0, ni->date);
+				DrawStringRightAligned(428, 1, STR_01FF, 0);
+
+				if (!(ni->flags & NF_VIEWPORT)) {
+					COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
+					DrawStringMultiCenter(215, ni->display_mode == NM_NORMAL ? 76 : 56,
+						ni->string_id, 426);
+				} else {
+					byte bk = _display_opt;
+					_display_opt |= DO_TRANS_BUILDINGS;
+					DrawWindowViewport(w);
+					_display_opt = bk;
+
+					/* Shade the viewport into gray, or color*/
+					vp = w->viewport;
+					GfxFillRect(vp->left - w->left, vp->top - w->top,
+						vp->left - w->left + vp->width - 1, vp->top - w->top + vp->height - 1,
+						ni->flags & NF_INCOLOR ? 0x4322 : 0x4323
+					);
+
+					COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
+					DrawStringMultiCenter(w->width / 2, 20, ni->string_id, 428);
+				}
+				break;
 			}
-		} else if (ni->display_mode == NM_CALLBACK) {
-			_draw_news_callback[ni->callback](w);
-		} else {
-			DrawWindowWidgets(w);
-			if (!(ni->flags & NF_VIEWPORT)) {
-				COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
-				DrawStringMultiCenter(140,38, ni->string_id, 276);
-			} else {
-				DrawWindowViewport(w);
-				COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
-				DrawStringMultiCenter((w->width>>1), w->height - 16, ni->string_id, 276);
+
+			case NM_CALLBACK: {
+				_draw_news_callback[ni->callback](w);
+				break;
+			}
+
+			default: {
+				DrawWindowWidgets(w);
+				if (!(ni->flags & NF_VIEWPORT)) {
+					COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
+					DrawStringMultiCenter(140, 38, ni->string_id, 276);
+				} else {
+					DrawWindowViewport(w);
+					COPY_IN_DPARAM(0, ni->params, lengthof(ni->params));
+					DrawStringMultiCenter(w->width / 2, w->height - 16, ni->string_id, 276);
+				}
+				break;
 			}
 		}
 	} break;
 
 	case WE_CLICK: {
-		switch(e->click.widget) {
+		switch (e->click.widget) {
 		case 1: {
-			NewsItem *ni = WP(w,news_d).ni;
+			NewsItem *ni = WP(w, news_d).ni;
 			DeleteWindow(w);
 			ni->duration = 0;
-			if(_forced_news!=255) _forced_news = 255;
+			_forced_news = INVALID_NEWS;
 		} break;
 		case 0: {
-			NewsItem *ni = WP(w,news_d).ni;
+			NewsItem *ni = WP(w, news_d).ni;
 			if (ni->flags & NF_VEHICLE) {
 				Vehicle *v = &_vehicles[ni->data_a];
 				ScrollMainWindowTo(v->x_pos, v->y_pos);
@@ -186,10 +202,10 @@
 // (to deal with overflows)
 byte increaseIndex(byte i)
 {
-	if(i==255)
+	if (i == INVALID_NEWS)
 		return 0;
 	i++;
-	if(i >= MAX_NEWS)
+	if (i >= MAX_NEWS)
 		i = i % MAX_NEWS;
 	return i;
 }
@@ -204,17 +220,17 @@
 		return;
 
 	// check the rare case that the oldest (to be overwritten) news item is open
-	if(_oldest_news == _current_news || _oldest_news == _forced_news)
+	if (_oldest_news == _current_news || _oldest_news == _forced_news)
 		MoveToNexItem();
 
-	_forced_news = 255;
-	if(_total_news < MAX_NEWS) _total_news++;
+	_forced_news = INVALID_NEWS;
+	if (_total_news < MAX_NEWS) _total_news++;
 
 	// make sure our pointer isn't overflowing
 	_latest_news = increaseIndex(_latest_news);
 
 	// overwrite oldest news entry
-	if( _oldest_news == _latest_news && _news_items[_oldest_news].string_id != 0)
+	if (_oldest_news == _latest_news && _news_items[_oldest_news].string_id != 0)
 		_oldest_news = increaseIndex(_oldest_news); // but make sure we're not overflowing here
 
 	// add news to _latest_news
@@ -236,7 +252,7 @@
 	COPY_OUT_DPARAM(ni->params, 0, lengthof(ni->params));
 
 	w = FindWindowById(WC_MESSAGE_HISTORY, 0);
-	if(w==NULL) return;
+	if (w == NULL) return;
 	SetWindowDirty(w);
 	w->vscroll.count = _total_news;
 }
@@ -245,28 +261,28 @@
 static const byte _news_items_age[] = {60, 60, 90, 60, 90, 30, 150, 30, 90, 180};
 
 static const Widget _news_type13_widgets[] = {
-{      WWT_PANEL,    15,     0,   429,     0,   169, 0x0,	STR_NULL},
-{      WWT_PANEL,    15,     0,    10,     0,    11, 0x0,	STR_NULL},
+{      WWT_PANEL,    15,     0,   429,     0,   169, 0x0, STR_NULL},
+{      WWT_PANEL,    15,     0,    10,     0,    11, 0x0, STR_NULL},
 {   WIDGETS_END},
 };
 
 static WindowDesc _news_type13_desc = {
 	WDP_CENTER, 476, 430, 170,
-	WC_NEWS_WINDOW,0,
+	WC_NEWS_WINDOW, 0,
 	WDF_DEF_WIDGET,
 	_news_type13_widgets,
 	NewsWindowProc
 };
 
 static const Widget _news_type2_widgets[] = {
-{      WWT_PANEL,    15,     0,   429,     0,   129, 0x0,	STR_NULL},
-{      WWT_PANEL,    15,     0,    10,     0,    11, 0x0,	STR_NULL},
+{      WWT_PANEL,    15,     0,   429,     0,   129, 0x0, STR_NULL},
+{      WWT_PANEL,    15,     0,    10,     0,    11, 0x0, STR_NULL},
 {   WIDGETS_END},
 };
 
 static WindowDesc _news_type2_desc = {
 	WDP_CENTER, 476, 430, 130,
-	WC_NEWS_WINDOW,0,
+	WC_NEWS_WINDOW, 0,
 	WDF_DEF_WIDGET,
 	_news_type2_widgets,
 	NewsWindowProc
@@ -282,13 +298,24 @@
 
 static WindowDesc _news_type0_desc = {
 	WDP_CENTER, 476, 280, 87,
-	WC_NEWS_WINDOW,0,
+	WC_NEWS_WINDOW, 0,
 	WDF_DEF_WIDGET,
 	_news_type0_widgets,
 	NewsWindowProc
 };
 
-static byte _news_sounds[] = { 27, 27, 0, 0, 0, 0, 28, 0, 0, 0 };
+static const SoundFx _news_sounds[] = {
+	SND_1D_APPLAUSE,
+	SND_1D_APPLAUSE,
+	0,
+	0,
+	0,
+	0,
+	SND_1E_OOOOH,
+	0,
+	0,
+	0
+};
 
 // open up an own newspaper window for the news item
 static void ShowNewspaper(NewsItem *ni)
@@ -296,7 +323,7 @@
 	Window *w;
 	int sound;
 	int top;
-	ni->flags &= ~(NF_NOEXPIRE|NF_FORCE_BIG);
+	ni->flags &= ~(NF_NOEXPIRE | NF_FORCE_BIG);
 	ni->duration = 555;
 
 	sound = _news_sounds[ni->type];
@@ -304,60 +331,68 @@
 		SndPlayFx(sound);
 
 	top = _screen.height - 4;
-	if (ni->display_mode == NM_NORMAL || ni->display_mode == NM_CALLBACK) {
-		_news_type13_desc.top = top;
-		w = AllocateWindowDesc(&_news_type13_desc);
-		if (ni->flags & NF_VIEWPORT) {
-			AssignWindowViewport(w, 2, 58, 0x1AA, 0x6E, ni->data_a | ((ni->flags&NF_VEHICLE) ? 0x80000000 : 0), 0);
+	switch (ni->display_mode) {
+		case NM_NORMAL:
+		case NM_CALLBACK: {
+			_news_type13_desc.top = top;
+			w = AllocateWindowDesc(&_news_type13_desc);
+			if (ni->flags & NF_VIEWPORT)
+				AssignWindowViewport(w, 2, 58, 0x1AA, 0x6E,
+					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), 0);
+			break;
 		}
-	} else if (ni->display_mode == NM_THIN) {
-		_news_type2_desc.top = top;
-		w = AllocateWindowDesc(&_news_type2_desc);
-		if (ni->flags & NF_VIEWPORT) {
-			AssignWindowViewport(w, 2, 58, 0x1AA, 0x46, ni->data_a | ((ni->flags&NF_VEHICLE) ? 0x80000000 : 0), 0);
+
+		case NM_THIN: {
+			_news_type2_desc.top = top;
+			w = AllocateWindowDesc(&_news_type2_desc);
+			if (ni->flags & NF_VIEWPORT)
+				AssignWindowViewport(w, 2, 58, 0x1AA, 0x46,
+					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), 0);
+			break;
 		}
-	} else {
-		_news_type0_desc.top = top;
-		w = AllocateWindowDesc(&_news_type0_desc);
-		if (ni->flags & NF_VIEWPORT) {
-			AssignWindowViewport(w, 3, 17, 0x112, 0x2F, ni->data_a | ((ni->flags&NF_VEHICLE) ? 0x80000000 : 0), 0);
+
+		default: {
+			_news_type0_desc.top = top;
+			w = AllocateWindowDesc(&_news_type0_desc);
+			if (ni->flags & NF_VIEWPORT)
+				AssignWindowViewport(w, 3, 17, 0x112, 0x2F,
+					ni->data_a | (ni->flags & NF_VEHICLE ? 0x80000000 : 0), 0);
+			break;
 		}
 	}
-	WP(w,news_d).ni = &_news_items[(_forced_news==255)?_current_news:_forced_news];
+	WP(w, news_d).ni = &_news_items[_forced_news == INVALID_NEWS ? _current_news : _forced_news];
 	w->flags4 |= WF_DISABLE_VP_SCROLL;
 }
 
 // show news item in the ticker
-static void ShowTicker(NewsItem *ni)
+static void ShowTicker(const NewsItem *ni)
 {
 	Window *w;
 
 	SndPlayFx(20);
 	_statusbar_news_item = *ni;
 	w = FindWindowById(WC_STATUS_BAR, 0);
-	if (w != 0)
-		WP(w,def_d).data_1 = 360;
+	if (w != NULL)
+		WP(w, def_d).data_1 = 360;
 }
 
 
 // Are we ready to show another news item?
 // Only if nothing is in the newsticker and no newspaper is displayed
-static bool ReadyForNextItem()
+static bool ReadyForNextItem(void)
 {
-	Window *w;
-	byte item = (_forced_news==255)?_current_news:_forced_news;
+	const Window *w;
+	byte item = _forced_news == INVALID_NEWS ? _current_news : _forced_news;
 	NewsItem *ni;
 
-	if(item>=MAX_NEWS) return true;
+	if (item >= MAX_NEWS) return true;
 	ni = &_news_items[item];
 
 	// Ticker message
 	// Check if the status bar message is still being displayed?
 	w = FindWindowById(WC_STATUS_BAR, 0);
-	if (w != NULL && WP(w,def_d).data_1 > -1280)
-	{
+	if (w != NULL && WP(w, def_d).data_1 > -1280)
 		return false;
-	}
 
 	// Newspaper message
 	// Wait until duration reaches 0
@@ -370,44 +405,43 @@
 	return true;
 }
 
-static void MoveToNexItem()
+static void MoveToNexItem(void)
 {
 	DeleteWindowById(WC_NEWS_WINDOW, 0);
-	_forced_news = 255;
+	_forced_news = INVALID_NEWS;
 
 	// if we're not at the last item, than move on
-	if(_current_news != _latest_news)
-	{
+	if (_current_news != _latest_news) {
 		NewsItem *ni;
 
 		_current_news = increaseIndex(_current_news);
 		ni = &_news_items[_current_news];
 
 		// check the date, don't show too old items
-		if(_date - _news_items_age[ni->type] > ni->date)
+		if (_date - _news_items_age[ni->type] > ni->date)
 			return;
 
 		// show newspaper or send to ticker?
-		if(!HASBIT(_news_display_opt, ni->type) && !(ni->flags&NF_FORCE_BIG))
+		if (!HASBIT(_news_display_opt, ni->type) && !(ni->flags & NF_FORCE_BIG))
 			ShowTicker(ni);
 		else
 			ShowNewspaper(ni);
 	}
 }
 
-void NewsLoop()
+void NewsLoop(void)
 {
 	// no news item yet
-	if(_total_news==0) return;
+	if (_total_news == 0) return;
 
-	if( ReadyForNextItem() )
+	if (ReadyForNextItem())
 		MoveToNexItem();
 }
 
 /* Do a forced show of a specific message */
 void ShowNewsMessage(byte i)
 {
-	if(_total_news==0) return;
+	if (_total_news == 0) return;
 
 	// Delete the news window
 	DeleteWindowById(WC_NEWS_WINDOW, 0);
@@ -415,8 +449,7 @@
 	// setup forced news item
 	_forced_news = i;
 
-	if(_forced_news!=255)
-	{
+	if (_forced_news != INVALID_NEWS) {
 		NewsItem *ni = &_news_items[_forced_news];
 		ni->duration = 555;
 		ni->flags |= NF_NOEXPIRE | NF_FORCE_BIG;
@@ -425,34 +458,34 @@
 	}
 }
 
-void ShowLastNewsMessage()
+void ShowLastNewsMessage(void)
 {
-	if(_forced_news==255)
+	if (_forced_news == INVALID_NEWS)
 		ShowNewsMessage(_current_news);
-	else if(_forced_news!=0)
-		ShowNewsMessage(_forced_news-1);
+	else if (_forced_news != 0)
+		ShowNewsMessage(_forced_news - 1);
 	else {
-		if(_total_news != MAX_NEWS)
+		if (_total_news != MAX_NEWS)
 			ShowNewsMessage(_latest_news);
 		else
-			ShowNewsMessage(MAX_NEWS-1);
+			ShowNewsMessage(MAX_NEWS - 1);
 	}
 }
 
 
 /* return news by number, with 0 being the most
-recent news. Returns 255 if end of queue reached. */
+recent news. Returns INVALID_NEWS if end of queue reached. */
 static byte getNews(byte i)
 {
-	if(i>=_total_news)
-		return 255;
+	if (i >= _total_news)
+		return INVALID_NEWS;
 
-	if(_latest_news < i)
+	if (_latest_news < i)
 		i = _latest_news + MAX_NEWS - i;
 	else
 		i = _latest_news - i;
 
-	i = i % MAX_NEWS;
+	i %= MAX_NEWS;
 	return i;
 }
 
@@ -474,21 +507,21 @@
 	s = str_buffr;
 	d = buffer;
 
-	for(;;s++) {
+	for (;; s++) {
 		// cut strings that are too long
-		if(s >= str_buffr + 55) {
+		if (s >= str_buffr + 55) {
 			d[0] = d[1] = d[2] = '.';
-			d+=3;
-			*d = 0;
+			d += 3;
+			*d = '\0';
 			break;
 		}
 
-		if (*s == 0) {
-			*d = 0;
+		if (*s == '\0') {
+			*d = '\0';
 			break;
-		} else if (*s == 13) {
+		} else if (*s == '\r') {
 			d[0] = d[1] = d[2] = d[3] = ' ';
-			d+=4;
+			d += 4;
 		} else if (*s >= ' ' && (*s < 0x88 || *s >= 0x99)) {
 			*d++ = *s;
 		}
@@ -498,22 +531,21 @@
 
 static void MessageHistoryWndProc(Window *w, WindowEvent *e)
 {
-	switch(e->event) {
+	switch (e->event) {
 	case WE_PAINT: {
 		byte buffer[256];
-		int y=19;
+		int y = 19;
 		byte p, show;
 		NewsItem *ni;
 
 		DrawWindowWidgets(w);
 
-		if(_total_news==0) break;
+		if (_total_news == 0) break;
 		show = min(_total_news, 10);
 
-		for(p=w->vscroll.pos; p<w->vscroll.pos+show; p++)
-		{
+		for (p = w->vscroll.pos; p < w->vscroll.pos + show; p++) {
 			// get news in correct order
-			ni = &_news_items[ getNews(p) ];
+			ni = &_news_items[getNews(p)];
 
 			SET_DPARAM16(0, ni->date);
 			DrawString(4, y, STR_00AF, 16);
@@ -527,28 +559,30 @@
 	}
 
 	case WE_CLICK:
-		switch(e->click.widget) {
+		switch (e->click.widget) {
 		case 2: {
 			int y = (e->click.pt.y - 19) / 12;
 			byte p, q;
 
-			/* // === DEBUG code only
-			for(p=0; p<_total_news; p++)
+			#if 0 // === DEBUG code only
+			for (p = 0; p < _total_news; p++)
 			{
 				NewsItem *ni;
 				byte buffer[256];
-				ni=&_news_items[p];
+				ni = &_news_items[p];
 				GetNewsString(ni, buffer);
 				printf("%i\t%i\t%s\n", p, ni->date, buffer);
 			}
 			printf("=========================\n");
-			// === END OF DEBUG CODE */
+			#endif
 
 			p = y + w->vscroll.pos;
-			if( p > _total_news-1 ) break;
+			if (p > _total_news - 1) break;
 
-			if(_latest_news >= p) q=_latest_news - p;
-			else q=_latest_news + MAX_NEWS - p;
+			if (_latest_news >= p)
+				q = _latest_news - p;
+			else
+				q = _latest_news + MAX_NEWS - p;
 			ShowNewsMessage(q);
 
 			break;
@@ -568,20 +602,20 @@
 
 static const WindowDesc _message_history_desc = {
 	240, 22, 400, 140,
-	WC_MESSAGE_HISTORY,0,
+	WC_MESSAGE_HISTORY, 0,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 	_message_history_widgets,
 	MessageHistoryWndProc
 };
 
-void ShowMessageHistory()
+void ShowMessageHistory(void)
 {
 	Window *w;
 
 	DeleteWindowById(WC_MESSAGE_HISTORY, 0);
 	w = AllocateWindowDesc(&_message_history_desc);
 
-	if (w) {
+	if (w != NULL) {
 		w->vscroll.cap = 10;
 		w->vscroll.count = _total_news;
 		SetWindowDirty(w);
@@ -591,14 +625,14 @@
 
 static void MessageOptionsWndProc(Window *w, WindowEvent *e)
 {
-	switch(e->event) {
+	switch (e->event) {
 	case WE_PAINT: {
 		uint16 x = _news_display_opt;
 		uint32 cs = 0;
 		int i, y;
 
-		for(i=3; i!=23; i+=2) {
-			cs |= 1 << (i + (x&1));
+		for (i = 3; i != 23; i += 2) {
+			cs |= 1 << (i + (x & 1));
 			x >>= 1;
 		}
 		cs |= (w->click_state >> 23) << 23;
@@ -609,31 +643,30 @@
 		DrawStringCentered(185, 15, STR_0205_MESSAGE_TYPES, 0);
 
 		y = 27;
-		for(i=STR_0206_ARRIVAL_OF_FIRST_VEHICLE; i <= STR_020F_GENERAL_INFORMATION; i++) {
+		for (i = STR_0206_ARRIVAL_OF_FIRST_VEHICLE; i <= STR_020F_GENERAL_INFORMATION; i++) {
 			DrawString(124, y, i, 0);
 			y += 12;
 		}
 
 		break;
-		}
+	}
 
 	case WE_CLICK: {
 		int wid;
-		if ( (uint)(wid=e->click.widget - 3) < 20) {
-			if (!(wid & 1)) {
-				_news_display_opt &= ~(1 << (wid>>1));
-			} else {
-				_news_display_opt |= (1 << (wid>>1));
-			}
+		if ((uint)(wid = e->click.widget - 3) < 20) {
+			if (!(wid & 1))
+				_news_display_opt &= ~(1 << (wid / 2));
+			else
+				_news_display_opt |= (1 << (wid / 2));
 			SetWindowDirty(w);
 			// XXX: write settings
 		}
-		if( e->click.widget == 23) {
+		if (e->click.widget == 23) {
 			_news_display_opt = 0;
 			HandleButtonClick(w, 23);
 			SetWindowDirty(w);
 		}
-		if( e->click.widget == 24) {
+		if (e->click.widget == 24) {
 			_news_display_opt = ~0;
 			HandleButtonClick(w, 24);
 			SetWindowDirty(w);
@@ -675,13 +708,13 @@
 
 static const WindowDesc _message_options_desc = {
 	270, 22, 370, 173,
-	WC_GAME_OPTIONS,0,
+	WC_GAME_OPTIONS, 0,
 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
 	_message_options_widgets,
 	MessageOptionsWndProc
 };
 
-void ShowMessageOptions()
+void ShowMessageOptions(void)
 {
 	DeleteWindowById(WC_GAME_OPTIONS, 0);
 	AllocateWindowDesc(&_message_options_desc);