
Bem vindo ao mundo fantástico dos códigos ASCII.

ASCII, é uma sigla que significa American Standard Code for Information Interchange.
Traduzindo: Código Padrão Americano para Intercâmbio de Informações.

A sigla é pronunciada, ásqui.
Algumas pessoas erroneamente atribuem as duas letras, I, maiúsculas do final da sigla, ao número 2, como se fossem algarismos Romanos, resultando em ASC2.
Isso apenas revela o desconhecimento do significado da sigla.

Neste padrão, a cada caracter é associado um número de 0 a 255.
Isso ocorre porque internamente, o computador só sabe lidar com números.
É necessário converter nossas letras para que o computador possa lidar com elas, processando, imprimindo e transmitindo a outros computadores.

Todos os caracteres que podem ser impressos na tela, como letras, números e símbolos, tem seu código ASCII correspondente.

O código ASCII da letra, A, maiúscula por exemplo, é 65.
O da letra, B, maiúscula, é 66, e assim por diante, até, Z, que é 90, em se tratando de letras maiúsculas.
O código da letra, a, minúscula é 97, e o espaço é 32.

De 0 a 127 os caracteres são fixos, e contém todos os caracteres necessários para a escrita da língua inglesa.
Lembre-se que é um Código Padrão Americano.

De 128 a 255, estão os códigos para idiomas estrangeiros, no nosso caso os acentos, cedilha e outros símbolos.

Há também os códigos do início da tabela, que não representam caracteres que possam ser impressos na tela ou na impressora, mas que estão associados a certas funções.
Exemplos são a tecla Enter, cujo código é 13, Tab=9, Escape=27 e BackSpace=8.
O código 12 é conhecido como "Form Feed", alimentação de formulário, que faz com que a impressora avance para a próxima página.

Mas por quê você deveria se preocupar como são armazenados internamente os caracteres no computador?
Porquê você é um programador!

Existem processamentos que necessitam dessa informação.

Um exemplo seria o caso de conversão em maiúsculas.
Para converter uma letra minúscula em maiúscula, basta subtrair 32 do seu código ASCII.

Você diria: Basta usar a função MAIÚSC do ScriptVox.
Sim" Isso é correto!
Mas, e se fosse o contrário?
Se você quisesse converter maiúsculas em minúsculas?
Não existe uma função MINUSC.

Ao receber um caracter, como o seu programa poderia saber se é maiúsculo ou minúsculo?
Comparando com dois alfabetos inteiros, um maiúsculo e outro minúsculo?

Como você faria para converter apenas a primeira letra de uma palavra em maiúscula, e o restante em minúscula?

Como você faria para alterar os caracteres de modo a criar um tipo de código?
O comando substitui poderia ser utilizado, mas tem limitações.

A resposta é através dos códigos ASCII.

Curiosamente, funções de conversão de caracteres em códigos ASCII e vice versa, não estão presentes no ScriptVox, por alguma razão desconhecida.

Todas as linguagens de programação possuem funções para esse tipo de conversão.

Exemplos são o Basic, com ASC() e CHR$(), o Pascal com CHR() e ORD(), o dBase com ASC() e CHR() e o Python com CHR() e ORD().
Na linguagem C, você não precisa de funções de conversão, porquê você pode atribuir indiferentemente um valor ou um caracter a uma variável do tipo char.
Exemplo:
char c;
c='a';
c=97;
, resultam no mesmo
, e na hora de imprimir, você poderá usar:
printf("%d",c);
, para imprimir como valor numérico, ou:
printf("%c",c);
, para imprimir como caracter.
.

Para que os usuários do ScriptVox versão 5 também possam fazer uso destas funções, foi lançada a nova versão do sv+, a sv51c.exe.

Nela estão presentes as funções ASC e CHR para o comando seja.

A função ASC retorna o código ASCII de um caracter.
O seu nome vem justamente das três primeiras letras da sigla do código.

Sua sintaxe é:
seja variável ASC caracter
, onde:
variável, poderá ser rápida ou lenta, e receberá o resultado da conversão,
caracter, pode ser uma constante ou outra variável, que contenha um único caracter.
O código retornado por ASC é uma string contendo o caracter #(#number), seguido dos dígitos que representam um valor numérico de 0 a 255.
Exemplo:
seja x asc "a"
, resultando #97 em x.
, ou:
seja x "B"
seja y asc x
, resultando #66 em y.
.

Caso a função não possa realizar a conversão, ela retornará uma string vazia.
Exemplo:
seja k asc "12"
, resultando uma string nula em k.
.
O valor a ser convertido deve ser um único caracter.
Isso torna o resultado do comando lê, terminado por & (é comercial), e o retorno da tecla acionada do comando menu, fortes candidatos para a utilização desta função.
Outra utilização seria verificar uma string, caracter por caracter, usando o comando copia.

O script bin\ASC.cmd mostra um exemplo interessante de utilização da função.
Veja outros exemplos adiante.

Por questões de tradição, os números do códigos são precedidos de um sinal de #(#number).
Veja por exemplo no manual original do ScriptVox, os códigos das teclas simples como Tab, Enter e BackSpace.
Os códigos estendidos, aqueles que utilizam dois números como por exemplo a tecla F1 (#0#59), não podem ser convertidos em caracteres.
Estes são códigos de teclas, e não de caracteres.
Lembre-se de que os códigos ASCII vão de 0 a 255 (1 byte).

A outra função de manipulação de códigos ASCII, é a função CHR.
O nome vem das três primeiras consoantes da palavra character, caracter em inglês.

A função CHR retorna o caracter correspondente a um código ASCII (precedido por #(number)).
Sua sintaxe é:
seja variável CHR código
, onde:
variável, poderá ser uma variável rápida ou lenta, e receberá o caracter correspondente ao código fornecido,
código, poderá ser uma constante ou uma variável, que contenha o código desejado.
O código a ser convertido, deverá ser uma string iniciada por um sinal de #(number), seguido dos dígitos que representam um valor de 0 a 255, tudo entre aspas.
Exemplo:
seja x chr "#98"
, resultando, b, minúsculo na variável x.
ou:
seja x "#67"
seja y chr x
, resultando a letra, C, maiúscula em y.
.
Curiosamente, no ScriptVox versão 5, o código #256 está associado a um caracter misterioso denominado "traço".

Se a conversão não for possível, a função retornará uma string vazia ("").
Exemplo:
seja z chr "bilu"
seja w chr "#0"
, resultando uma string nula em ambos casos.
.

Veja um exemplo interessante de uso em bin\CHR.cmd, onde é processado o resultado da cláusula tecla do comando lê.

Outra utilização interessante é a conversão de maiúsculas em minúsculas em bin\minusc.cmd.

Para os que gostariam de enviar e receber mensagens codificadas, o exemplo bin\crypto.cmd, demonstra uma possibilidade.

Há um exemplo de treinamento de digitação em bin\cbtkeys.cmd.
Veja também o texto doc\CBT.txt para mais informações sobre treinamento.

Com estas duas novas ferramentas você poderá se divertir bastante.
Experimente!

Boas conversões.
#
