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:
Esta função pode ser empregado a qualquer momento no programa BASIC, retornando o número de pixels ocupado por um string. Por exemplo:
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:
ou na margem direita:
Assim, creio que tenha ficado claro como foi impresso strings na tela da figura no topo desta postagem. Um lembrete: o
Para baixar o arquivo ZIP contendo FZX_Length, FZXLength_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.
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_Length, FZXLength_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.