The text console

OSLib inclui seu próprio console de texto, independente do oferecido pela Sony. Entretanto, ele é completamente identico ao primeiro e a única diferença é que ele utiliza o modo double buffer, o que significa que se você desenhar algum texto, você não poderá ver a modificações antes de ter trocado o buffer, o que é feito através da chamada para oslSyncFrame ou oslSwapBuffers. No modo simple buffer, as modificações são visíveis diretamente na tela. Portanto, esse modo deve ser escolhido se você escolher um jogo baseado em console.

Entretanto, se você usar o modo double buffering, aqui está um exemplo:

oslInitGfx(OSL_PF_8888, 1);
oslPrintf("Hello world!");
oslSwapBuffers();
oslWaitKey();
oslPrintf("Second test");
oslSwapBuffers();
oslWaitKey();
oslQuit();

Outra maneira de desenhar diretamente na tela é redefinir o drawbuffer para o tela corrente (secondary buffer).

oslInitGfx(OSL_PF_8888, 1);
oslSetDrawBuffer(OSL_SECONDARY_BUFFER);
oslPrintf("Hello world!");
oslWaitKey();
oslPrintf("Second test");
oslWaitKey();
oslQuit();

As funções disponíves são as seguintes:

oslPrintf(format...);			//Funcionaa como um Printf
oslCls();					/Limpa a tela
oslMoveTo(x,y)				//Moves the cursor
oslPrintf_xy(x,y, format...)		//Printf at a specific position

Há também as seguintes funções para mostrar o resultado de um benchmark (não acredite muito porque é como foi dito no capítulo sobre o cache de CPU)

void oslSysBenchmarkDisplay();

Há muitas funções, as quais mostram caixas de mensagem para o usuário. Muito parecido com as caixas de mensagem do Windows 98 e também trabalham no modo double buffering.

void oslDebug(format...);

Mostra uma mensagem de debug com a linha do código, arquivo e função no titulo da janela.

void oslWarning(format...);

Mostra uma mensagem de warning para o usuário.

void oslFatalError(format...);

Mostra uma mensagem de erro fatal para o usuário e sai da aplicação imediatamente depois do usuário selecionar a opção default.

void oslAssert(condition);

Verifica se uma condição passou um paramentro verdadeiro. Senão, ele apresenta um warnning para o usuário. Util para propósitos de debug. Aqui há um exemplo:

image = oslLoadImageFile("test.png", OSL_IN_RAM, OSL_PF_8888);
oslAssert(image);

Nós assguramos que uma imagem foi carregada corretamente (não é NULL) e continuamos a execussão do programa nesse caso.

oslSetTextColor(OSL_COLOR color);

Ajusta a cor corrente do texto. Se o modo alpha corrente é OSL_FX_RGBA (esse é o modo default), cores podem ser definidas em RGBA, que significa que pelo menos 8 bits definem a transparência. Por exemplo, você pode definir um texto vermelho semi-trasparente, como este:

oslSetTextColor(RGBA(255,0,0,128));

oslSetBkColor(OSL_COLOR color);

Define o cor de fundo usada para o texto. Você pode torná-lo trasparente dessa maneira:

oslSetBkColor(RGBA(0,0,0,0));

unsigned int oslMessageBox(const char *text, const char *title, unsigned int flags);

Mostra uma mensagem na qual você especifica o texto (captalizado), o titulo e uma flag de botão suplementar, e retorna o valor correspondente da escolha do usuário. Para definir botões, use a função nomeada oslMake3Buttons

.

oslMake3Buttons(b1,a1,b2,a2,b3,a3);

Cria o valor da flag para o oslMessageBox com os botões específicos. Por exemplo:

oslMessageBox("Test", "Title", oslMake3Buttons(OSL_KEY_CROSS,OSL_MB_OK,OSL_KEY_TRIANGLE,OSL_MB_QUIT,0,0));

Isto ira mostrar a mensagem onde o primeiro botão terá o texto OK, associado ao botão da cruz (cross button), o texto Quit associado ao botão triangulo. Os possiveis valores são os seguintes: OSL_MB_OK, OSL_MB_CANCEL, OSL_MB_YES, OSL_MB_NO, OSL_MB_QUIT, e as chaves são: OSL_KEY_SELECT, OSL_KEY_START, OSL_KEY_UP, OSL_KEY_RIGHT, OSL_KEY_DOWN, OSL_KEY_LEFT, OSL_KEY_L, OSL_KEY_R, OSL_KEY_TRIANGLE, OSL_KEY_CIRCLE, OSL_KEY_CROSS, OSL_KEY_SQUARE, OSL_KEY_HOME, OSL_KEY_HOLD, OSL_KEY_NOTE. O OSL_MB_QUIT é um valor especial, porque se o usuário escolhe este, o jogo sai (quit) imediatamente. Para todos os outros, a escolha do usuário é retornada e o jogo continua

Finalmente, como o console suporta double buffering, você pode usar-lo em qualquer jogo gráfico, mas oslPrintf_xy você pode ter certeza de colocá-lo aonde queira desenhar o texto. Aqui está um exemplo:

	int x = 0;
	oslInit(0);
	oslInitGfx(OSL_PF_8888, 1);
	oslInitConsole();
	
	//Main loop
	while (!osl_quit)
	{
		oslStartDrawing();
		oslClearScreen(0);
		oslPrintf_xy(0, 0, "x = %i", x);				//Position (x,y) is at pixel, unlike oslMoveTo
		oslEndDrawing();
		oslSyncFrame();
		x++;
	}
	oslQuit();