domingo, 29 de junho de 2014

FZX Length

Uma dificuldade de fontes proporcionais como FZX é o fato de não ser fácil calcular o tamanho que um string irá ocupar quando impresso na tela.


No BASIC do TK90X, existe a função LEN que permite calcular o tamanho de um string. Como os caracteres da ROM do BASIC têm as mesmas larguras (8 pixels), fica fácil saber qual e espaço ocupado por um certo número de caracteres. Também é conhecido que uma linha da tela comporta um máximo de 32 caracteres. Com tais dados, fica fácil criar alguns efeitos na impressão, como a centralização ou alinhamento à margem direita.

Entretanto cada caractere de uma fonte proporcional tem largura diferente, portanto não basta saber o número de caracteres para formatar a impressão, pois é necessário saber seu comprimento de número de pixels. Criei a sub-rotina em linguagem de máquina FZX_Length para esta finalidade que, fornecendo os dados da string (HL=endereço inicial e BC=comprimento), retorna no par de registrador DE o comprimento em número de pixels. A fonte desta sub-rotina encontra-se no arquivo FZX_Length.asm, que pode ser incluído em programas assembly.

Nem todo programador tem intimidade com o assembly, portanto criei também uma interface com o BASIC que é o FZXLength_Basic. Uma vez com o FZX Driver instalado e inicializado e com uma fonte FZX localizada no endereço 60000, deve-se carregar FZXLength_Basic a partir de 59800. Para usá-lo, dever-se ter uma função definida pelo usuário no BASIC, como no exemplo:

  10 DEF FN l(a$)=USR 59800

Esta função pode ser empregado a qualquer momento no programa BASIC, retornando o número de pixels ocupado por um string. Por exemplo:

  50 LET a$="Qualquer string": PRINT FN l(a$)

imprimirá na tela o comprimento do string a$.

Com o uso desta função e do comando AT, é possível alinhar um string no centro:

  60 PRINT #4; AT 20,128-FN l(a$)/2;a$

ou na margem direita:

  70 PRINT #4; AT 20,256-FN l(a$);a$

Assim, creio que tenha ficado claro como foi impresso strings na tela da figura no topo desta postagem. Um lembrete: o PRINT #4 é empregado no FZX Driver para imprimir caracteres em fonte FZX na tela.

Para baixar o arquivo ZIP contendo  FZX_LengthFZXLength_Basic,  programa demo, documentação e código fonte, acesse este link. Agora não há mais desculpas para imprimir no TK90X com a fonte sem graça da ROM do BASIC.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.