rem: if (!Sleepy)
add: if (!Sleepy || (GLOBAL (CurrentActivity) & CHECK_ABORT))
context: MakeReport (SOUND ReadOutSounds, UNICODE *pStr, COUNT StrLen){	BYTE ButtonState;	int end_page_len;	UNICODE last_c, end_page_buf[80];	COUNT row_cells;	BOOLEAN Sleepy;	RECT r;	TEXT t;	wsprintf (end_page_buf, "%s\n", GAME_STRING (SCAN_STRING_BASE + NUM_SCAN_TYPES));	end_page_len = wstrlen (end_page_buf);	GetFrameRect (SetAbsFrameIndex (SpaceJunkFrame, 18), &r);	t.align = ALIGN_LEFT;	t.CharCount = 1;	t.pStr = pStr;	last_c = *pStr;	Sleepy = TRUE;	ClearSemaphore (GraphicsSem);	FlushInput ();	goto InitPageCell;	while (StrLen)	{		COUNT col_cells;		UNICODE *pLastStr;		UNICODE *pTempStr;		COUNT lf_pos;		pLastStr = t.pStr;		// scan for LFs in the remaining string		// trailing LF will be ignored		for (lf_pos = StrLen, pTempStr = t.pStr;				lf_pos && *pTempStr != '\n';				--lf_pos, ++pTempStr)			;		col_cells = 0;		// check if the remaining text fits on current screen		if (row_cells == NUM_CELL_ROWS - 1				&& (StrLen > NUM_CELL_COLS || lf_pos > 1))		{			col_cells = (NUM_CELL_COLS >> 1) - (end_page_len >> 1);			t.pStr = end_page_buf;			StrLen += end_page_len;		}		t.baseline.x = 1 + (r.extent.width >> 1)				+ (col_cells * (r.extent.width + 1)) - 1;		do		{			COUNT word_chars;			UNICODE *pStr;			pStr = t.pStr;			while (isgraph (*pStr))				++pStr;			word_chars = (COUNT)(pStr - t.pStr);			if ((col_cells += word_chars) <= NUM_CELL_COLS)			{				DWORD TimeOut;				if (StrLen -= word_chars)					--StrLen;				TimeOut = GetTimeCounter ();				while (word_chars--)				{					if (!Sleepy)						font_DrawText (&t);					else					{						SetSemaphore (GraphicsSem);						font_DrawText (&t);						ClearSemaphore (GraphicsSem);						PlaySound (ReadOutSounds, NotPositional (), NULL, GAME_SOUND_PRIORITY);						if (t.pStr[0] == ',')							TimeOut += ONE_SECOND / 4;						if (t.pStr[0] == '.')							TimeOut += ONE_SECOND / 2;						else							TimeOut += ONE_SECOND / 20;						if (word_chars == 0)							TimeOut += ONE_SECOND / 20;						TaskSwitch();						while (GetTimeCounter () < TimeOut)						{							if (ButtonState)							{								if (!AnyButtonPress (TRUE))									ButtonState = 0;							}							else if (AnyButtonPress (TRUE))							{								Sleepy = FALSE;								SetSemaphore (GraphicsSem);								BatchGraphics ();								break;							}							TaskSwitch();						}					}					++t.pStr;					t.baseline.x += r.extent.width + 1;				}				++col_cells;				last_c = *t.pStr++;				t.baseline.x += r.extent.width + 1;			}		} while (col_cells <= NUM_CELL_COLS && last_c != '\n' && StrLen);		t.baseline.y += r.extent.height + 1;		if (++row_cells == NUM_CELL_ROWS || StrLen == 0)		{			t.pStr = pLastStr;			if (!Sleepy)			{				UnbatchGraphics ();				ClearSemaphore (GraphicsSem);			}			while (AnyButtonPress (TRUE))				TaskSwitch ();			while (!AnyButtonPress (TRUE))				TaskSwitch ();InitPageCell:			ButtonState = 1;			t.baseline.y = r.extent.height + 1;			row_cells = 0;			if (StrLen)			{				SetSemaphore (GraphicsSem);				if (!Sleepy)					BatchGraphics ();				ClearReportArea();				SetContextForeGroundColor (BUILD_COLOR (MAKE_RGB15 (0, 0x1F, 0), 0xFF));				if (Sleepy)					ClearSemaphore (GraphicsSem);			}		}	}	SetSemaphore (GraphicsSem);}