Saltar para o conteúdo

POSXML

Origem: Wikipédia, a enciclopédia livre.

Criada no Brasil em 2005, POSXML(acrônimo para Point Of Sale eXtended Markup Language) é uma linguagem de programação usada para criar aplicações para um terminal P.O.S., do inglês, Point Of Sale ou Point Of Service.

Geralmente, o desenvolvimentos de aplicações para terminais POS, são realizados através de uma linguagem de programação chamada C ou C++, o que demanda um conhecimento profundo das especificações técnicas da máquina (Hardware) e um programador qualificado para exercer tal tarefa. Seu propósito principal é facilitar o trabalho de desenvolvimento de aplicações para os terminais POS, pois possui um conjunto de instruções e comandos previamente programados que interagem diretamente com a máquina, por assim dizer, reduzindo consideravelmente o tempo de programação de aplicações.

Características da Linguagem

[editar | editar código-fonte]

A estrutura do POSXML

[editar | editar código-fonte]

A linguagem POSXML, assim como o próprio nome sugere, segue o padrão aberto de linguagem XML, amplamente difundido atualmente na indústria de software. O padrão XML é totalmente flexível e possibilita uma rápida expansão da linguagem.

  • A linguagem POSXML é organizada e estruturada em forma de TAGs apresentando níveis e subníveis de um conjunto de comandos e instruções que formam a estrutura lógica de um aplicativo POSXML.

Exemplo:

Display 
<stringvariable value="" variable="sTicketInfo"/>
<stringvariable value="" variable="sCityInfo"/>
<integervariable value="0" variable="iQtdTickets"/>
<integervariable value="0" variable="iInvalidInfo"/>
		
<!-- Function Display MAIN Menu -->
<function name="fMainMenu">
	<integervariable value="0" variable="iOption"/>
			
	<!-- Main Menu -->
	<menu options="MENU PRINCIPAL:\\1.VENDA DE INGRESSO\2.RELATORIO\3.SAIR" variable="$(iOption)"/>
			
	<!-- 1.VENDA DE INGRESSO -->
	<if operator="equalto" value="1" variable="$(iOption)">
            ...
	</if>
        ...			
</function>
  • A primeira versão da linguagem POSXML exigia que todos os programas escritos na linguagem, possuíssem uma TAG Pai ou TAG Root identificada por um identificador/nome válido. A partir da nova versão online, onde os programadores podem escrever os programas em POSXML na WEB, disponível em formato Cloud Computing, a "TAG Pai" ou "TAG Root" foi abolida, simplificando o processo de programação.

A única limitação que o programador encontra é o tamanho do aplicativo que não pode ultrapassar 32 kbytes de código compilado! Para se ter uma ideia da compilação oferecida pela plataforma, um aplicativo comum de 1600 linhas de códigos POSXML e 76 kbytes, quando compilado tem seu tamanho reduzido para 15 kbytes.

Exemplo:

<function name="display_test">
        <display line="1" column="0" message="Aplicativo POSXML" />
        <display line="2" column="0" message="Empresa A"/>
        <waitkey />
        <cleandisplay />
</function>
  • Por padrão, a estrutura da linguagem XML possui alguns caracteres reservados sendo respeitados também pela linguagem POSXML e são escritos da forma correta:
* &lt ;   <
* &gt ;   >
* &amp ;  &
* &apos ; '
* &quot ; "

Exemplo:

<function name="mostramensagem">
   <display line="0" colunm="0" message="&lt; = menor" />
   <waitkey />
</function>

<function name="display_test">
   <callfunction name="mostramensagem" />
</function>
  • Assim como no XML, a linguagem POSXML aceita a definição de seções de comentários que facilita a documentação do programa.

Exemplo:

<function name="mostramensagem">
  <display line="0" column="0" message="&lt; = menor" />
  <waitkey />
</function>

<function name="display_test">
  <!-- Este exemplo demonstra  a utilização de  uma -->
  <!-- função que apresenta uma mensagem no display -->
  <callfunction name="mostramensagem"/>
</function>

Linguagem Compilada

[editar | editar código-fonte]

Assim como a grande maioria das linguagens de programação existentes, POSXML também é compilada em um formato específico, de tamanho reduzido para que possa ser executado no terminal POS através de um framework (máquina virtual). Um programa escrito em POSXML, quando compilado, transforma-se em um conjunto de bytecodes que são interpretados pela máquina virtual resultando na execução do programa no terminal POS.

Cada comando, função ou instrução do programa escrito em POSXML, quando compilado, se transforma em um bytecode único que o identifica na biblioteca de comandos do framework (máquina virtual).

Exemplo:

<display line="0" column="0" message="Exemplo de Bytecode" />

Bytecode compilado:

d0 \x0A 0 \x0A Exemplo de Bytecode \x0A \x0D
  • O perfeito funcionamento de um programa compilado em POSXML no terminal fica por conta de uma máquina virtual, chamada de framework, que trabalha sobre o sistema operacional do equipamento POS. Em outras palavras, uma aplicação em POSXML compilada e instalada no terminal POS fica localizada na 4a. camada de softwares encontrados no aparelho, como pode-se observar a figura abaixo:

O modelo usado de compilação em bytecodes que podem ser interpretados por uma máquina virtual, permite que um programa escrito em linguagem POSXML possa ser usado, ou melhor, possa ser interpretado pela máquina virtual em diferentes terminais POS, desde que a marca e modelos especificados possuam um framework próprio. Isso significa que, uma vez programada uma aplicação para um determinado modelo de terminal POS, o programador pode escolher usar a mesma aplicação em outro terminal, cuja máquina virtual seja compatível com tal equipamento, não havendo a necessidade de nenhuma alteração ou implementação no código-fonte POSXML original do primeiro equipamento.

  • Tal portabilidade assegura que, haverá um esforço mínimo, ou nenhum esforço para migração de aplicações entre terminais POS de diferentes marcas e diferentes modelos.

De fácil leitura e sua forma estruturada em formato XML, a linguagem POSXML é caracterizada por um conjunto de comandos e instruções próprios que interagem com o equipamento e torna fácil tarefas como a impressão de dados, a leitura de dados em um cartão com tarja magnética, a entrada de dados através de um teclado numérico, entre outras funções do terminal POS.

Os comandos e instruções do POSXML devem obrigatoriamente obedecer algumas regras de formação, e uma delas é a observância quanto ao uso de letras maiúsculas e minúsculas (case sensitive). Alguns comandos pertencentes à linguagem não requerem parâmetros, ao contrário de outros comandos que precisam de parâmetros para interagir com a máquina.

Exemplos:

Comandos que não exigem instruções ou parâmetros.

<exit />
<cleandisplay />
<waitkey />

Comandos que requerem instruções e parâmetros para interação com o equipamento.

<display line="1" column="1" message="POSXML" />
<menu variable="$(option)" options="OPTION 1\OPTION 2\OPTION 3" />
<waitkeytimeout seconds="10"/>

Os nomes atribuídos à funções, variáveis e funções também devem obedecer as regras de escrita em letras maiúsculas e minúsculas, portanto, se um programador criar uma função chamada "calcula_digito", ele não terá êxito se fizer uma chamada na função "Calcula_Digito", ou seja, a invocação de uma função, aplicativo ou variável deve obedecer o nome exatamente igual ao nome atribuído pelo programador.

Comandos e instruções

[editar | editar código-fonte]

Por se tratar de uma linguagem estruturada e baseada no formato XML, o POSXML é uma linguagem que está constantemente evoluindo, e novos comandos e instruções podem ser adicionados em sua biblioteca a qualquer momento. Inicialmente a linguagem contava com não menos que duas dezenas de comandos básicos, indispensáveis para se criar um programa, digamos, no mínimo funcional em um terminal POS, com poucos recursos, apenas o básico de display (visor), teclado numérico, cartão magnético e impressão.

Com a evolução da linguagem, atualmente são quase uma centena de comandos e instruções que lidam com arquivos, imagens, operadores matemáticos, funções para manipular variáveis do tipo string, definição de variáveis, operadores lógicos, classes para se trabalhar com protocolo ISO 8583 (protocolo padrão para intercâmbio de informações nas operações com cartões de crédito), comandos e instruções para trabalhar com transações EMV e com transações Contacless, entre outros.

Lista de comandos/instruções da linguagem

[editar | editar código-fonte]
  • if
Instrução de tomada de decisão ou comparação lógica
  • else
Condição lógica em um bloco da instrução if
  • while
Instrução que permite a execução de um código multiplas vezes
  • break
O comando break possibilita a saída imediata do loop while
  • function
Define um bloco de código que pode ser posteriormente executado
  • callfunction
Realiza uma chamada em uma função previamente definida
  • execute
Executa um aplicativo POSXML compilado e armazenado no POS
  • exit
Encerra imediatamente a execução do aplicativo POSXML
  • getcardvariable
Obtém o número do cartão e o armazena diretamente em uma variável
  • system.readcard
Aguarda até que um cartão seja passado ou uma tecla seja pressionada
  • system.inputtransaction
Instrução para receber os dados do cartão em uma transação contactless
  • menu
Monta um menu na tela do terminal, baseado no número de linhas do POS
  • menuwithheader
Monta um menu com cabeçalho, baseado no número de linhas do POS
  • displaybitmap
Exibe um bitmap monocromático no display do POS
  • display
Exibe uma mensagem customizada no display do terminal POS
  • cleandisplay
Apaga todo conteúdo do display do terminal POS
  • system.gettouchscreen
Captura as coordenadas (x e y) de onde o display foi pressionado
  • print
Imprime uma mensagem customizada em tamanho de fonte padrão
  • printbig
Imprime uma mensagem customizada em tamanho de fonte dupla
  • printbitmap
Imprime um bitmap monocromático presente no terminal POS
  • printbarcode
Imprime um código de barras no formato I25, na horizontal ou vertical
  • checkpaperout
Verificar se o compartimento de papel ainda contém papel
  • paperfeed
Envia um sinal para a impressora adicionando linhas em branco no ticket
  • inputfloat
Permite a entrada de um valor com ponto (.) através da tecla (*)
  • inputformat
Permite a entrada de um valor baseado em um formato pré-definido
  • inputinteger
Permite a entrada de um valor inteiro
  • inputoption
Armazena em uma variável a opção de um item de menu
  • inputmoney
Permite a entrada de um valor monetário
  • crypto.crc
Calculo CRC 16 bits, suporte a CRC-CCITT
  • crypto.encryptdecrypt
Rotinas de criptografia com algoritmos DES, 3DES ou NEWDES
  • crypto.lrc
Gera um byte de LRC da string em buffer
  • crypto.xor
Realiza uma operação binária XOR entre os bytes de 2 strings
  • downloadfile
Faz o download de um arquivo previamente cadastrado no WALK Manager
  • filesystem.filesize
Retorna o tamanho de um arquivo na memória do POS
  • filesystem.listfiles
Lista os arquivos de um diretório salvando-os em um arquivo
  • filesystem.space
Verifica o espaço (livre e utilizado) e o número de arquivos na memória
  • file.open
Abre um arquivo para leitura ou escrita
  • file.close
Fecha um arquivo que foi previamente aberto com file.open
  • file.read
Lê um arquivo que foi previamente aberto com file.open
  • file.write
Grava um arquivo que foi previamente aberto com file.open
  • readfile
Realiza a leitura de um arquivo WALK dbfile (chave/valor)
  • readfilebyindex
Realiza a leitura de uma chave de um arquivo WALK dbfile
  • editfile
Permite escrever um arquivo no formato WALK dbfile (chave/valor)
  • deletefile
Efetua a exclusão de um arquivo da memória do terminal POS
  • iso8583.initfieldtable
Inicia a tabela de campos ISO8583 baseado em um arquivo especificado
  • iso8583.initmessage
Inicia a montagem de uma mensagem ISO
  • iso8583.putfield
Insere um campo na mensagem, obrigatoriamente em ordem crescente
  • iso8583.endmessage
Finaliza a montagem da mensagem ISO
  • iso8583.transactmessage
Acrescenta size, header e trailer e envia a mensagem ISO ao autorizador
  • iso8583.analyzemessage
Inicia o processo de análise e decomposição dos campos da mensagem
  • iso8583.getfield
Extrai um campo de uma mensagem previamente analisada
  • openserialport
Abre a porta serial para comunicação com periféricos externos
  • writeserialport
Escreve um buffer na porta serial
  • readserialport
Lê um buffer de um dispositivo externo capturado pela porta serial
  • closeserialport
Fecha a porta serial
  • getdatetime
Armazena em uma variável a data e a hora no momento da execução
  • time.calculate
Calculo de tempo com suporte a adição, subtração e diferença
  • adjustdatetime
Atualiza o relógio interno do terminal POS
  • predial
Inicializa o dispositivo de discagem
  • preconnect
Efetua a conexão ao host autorizador
  • shutdownmodem
Desliga o modem e cancela as operações do dispositivo de conexão
  • network.checkgprssignal
Verifica o status da conexão, caso o POS tenha suporte a GPRS
  • network.hostdisconnect
Desconecta o terminal do host, mantendo-o conectado a rede
  • network.ping
Verifica o status da conexão com o host
  • network.send
Envia um buffer para o host previamente conectado
  • network.receive
Recebe um buffer do host previamente conectado
  • pinpad.open
Habilita a comunicação com o pinpad externo ou interno
  • pinpad.loadipek
Grava uma chave inicial e uma ksn inicial na memória do pinpad
  • pinpad.getkey
Captura uma tecla que seja pressionada no pinpad externo
  • pinpad.getpindukpt
Captura um PIN e o encripta usando o padrão DUKPT
  • pinpad.display
Exibe uma mensagem customizada no display do pinpad
  • pinpad.close
Encerra a comunicação com o pinpad externo ou interno
  • emv.open
Inicializa biblioteca EMV
  • emv.loadtables
Carrega tabelas EMV e PKI de arquivo por adquirente
  • emv.cleanstructures
Limpa todos os Parâmetros de entrada e saída
  • emv.adddata
Adiciona parâmetros ao processo EMV
  • emv.getinfo
Retorna parâmetros de informação após execução de processo EMV
  • emv.inittransaction
Inicializa o processo EMV com os parâmetros inseridos
  • emv.processtransaction
Inicia a execução do processo EMV
  • emv.finishtransaction
Finaliza a execução do processo EMV
  • emv.removecard
Aguarda remoção do cartão
  • emv.settimeout
Define Timeout (em segundos) da biblioteca de processos EMV
  • system.readcard
Aguarda até que um cartão seja passado ou uma tecla seja pressionada
  • system.inputtransaction
Instrução para receber os dados do cartão em uma transação contactless
  • integervariable
Cria uma instância de variável do tipo inteiro
  • stringvariable
Cria uma instância de variável do tipo string
  • integerconvert
Conversão de inteiro para binário, octal ou hexadecimal
  • convert.toint
Conversão de binário, decimal ou hexadecimal para inteiro
  • inttostring
Conversão de inteiro para string
  • stringtoint
Conversão de string para inteiro
  • integeroperator
Incrementa em +1 ou decrementa em -1 uma variável do tipo inteiro
  • string.tohex
Converte uma string para sua representação em hexadecimal
  • string.fromhex
Converte uma representação em hexadecimal para uma string
  • string.charat
Extrai um character da string especificada
  • string.elementat
Retorna um elemento em um index específico na string
  • string.elements
Retorna quantos elementos existem na string especificada
  • string.find
Procura por uma substring na string especificada
  • string.getvaluebykey
Procura em uma string por um valor baseado em key/value
  • string.trim
Elimina os espaços em branco a esquerda e a direita da string
  • string.insertat
Insere um elemento em um índice específico na string
  • string.length
Retorna o tamanho da string especificada
  • string.pad
Efetua um padding com um caracter específico na string
  • string.removeat
Remove um elemento em um índice específico na string
  • string.replace
Substitui todas as ocorrências da substring especificada
  • string.replaceat
Substitui um elemento em um índice específico na string
  • string.substring
Captura uma parte específica da string
  • substring
Copia o trecho de uma variável string para outra variável
  • joinstring
Concatena em uma string o valor de outras 2 strings
  • input.getvalue
Captura uma string e a exibe na tela em qualquer posição
  • smartcard.insertedcard
Verifica se o cartão está inserido no leitor de smart card do POS
  • smartcard.closereader
Finaliza o processo de comunicação com o smart card
  • smartcard.startreader
Inicia o leitor de smart card e tenta iniciar o cartão
  • smartcard.transmitapdu
Envia um comando APDU para o smart card
  • mathematicaloperation
Realiza uma operação matemática entre dois valores
  • system.beep
Produz um sinal sonoro curto no terminal POS
  • system.checkbattery
Verifica o status da bateria do terminal
  • system.backlight
Permite controlar o nível de intensidade do backlight do terminal
  • system.info
Busca de informações no sistema do POS (MAC Address, SIM ID, etc)
  • system.restart
Executa uma instrução que reinicia o terminal POS
  • unzipfile
Descompacta um arquivo compactado no formato zip
  • waitkey
Pausa a execução até que o operador pressione uma tecla
  • waitkeytimeout
Idem ao comando waitkey, mas possui um timeout
  • readkey
Idem ao comando waitkey, mas a guarda a tecla pressionada
  • wait
Pause a execução por um tempo definido

Outros comandos e instruções podem futuramente fazer parte da linguagem.

Variáveis e tipos de dados

[editar | editar código-fonte]

Como toda linguagem de programação, assim como Basic, Pascal, C, C++ ou outra linguagem, POSXML também permite o uso de variáveis de memória com tipos definidos. Não tão abrangente na variação de tipos de dados como a grande maioria das linguagens, POSXML apresenta na verdade, dois tipos de variáveis possíveis: inteiros e strings.

Na programação em POSXML pode-se ainda obter uma variável do tipo Double (Decimal ou Ponto Flutuante) através da declaração de uma variável do tipo string, porém alimentando-a com valores que contenham casas decimais separadas da parte inteira por um ponto (".") e não por uma vírgula (",").

Apesar de se poder declarar variáveis de memória em um programa em POSXML, há uma limitação que deve ser citada. O número máximo de variáveis inteiras e strings não pode ultrapassar o limite de 512 ao todo, portanto, se um programador precisar declarar 256 variáveis do tipo string e 256 variáveis do tipo inteiro, é possível, não mais que isso.

Vale lembrar também que todas as variáveis de memória declaradas são globais, ou seja, são compartilhadas em todo o programa POSXML e em todas as páginas programadas, isso em tempo de execução. Exemplos:

Variável do tipo String

<!-- Declarando uma variável do tipo String com o conteúdo: "http://pt.wikipedia.org/wiki/posxml" -->
<stringvariable value="http://pt.wikipedia.org/wiki/posxml" variable="url" />

<!-- Acessando o conteúdo de uma variável declarada -->
<display line="0" column="0" message="$(url)" />

Variável do tipo Inteiro

<!-- Declarando uma variável do tipo Inteiro com o conteúdo: "0" -->
<integervariable value="0" variable="iValor" />

<!-- Acessando o conteúdo de uma variável declarada -->
<inputmoney column="0" line="0" message="Digite o valor:" variable="$(iValor)" />

O programador deve observar que, sempre que se referir a uma variável de memória já declarada, deve-se usar a convenção $(nome_da_variavel), independente do tipo declarado.

Trabalhar com variáveis de memória quase sempre requer a troca de tipos ou a conversão do tipo de dados em algum momento na programação. Em POSXML é possível realizar a conversão de dados do tipo inteiro para dados do tipo string e também da forma inversa, através de dois comandos existentes na linguagem: inttostring e stringtoint.

Exemplos:

<integervariable value="1" variable="iOpcao_Tipo_Inteiro" />
<integervariable value=""  variable="sOpcao_Tipo_String" />

<inttostring integervariable="$(iOpcao_Tipo_Inteiro)" stringvariable="$(sOpcao_Tipo_String)" />

Sistema de arquivos

[editar | editar código-fonte]

Na grande maioria das vezes, ao se programar um terminal POS, o programador se depara com a necessidade de gravar informações no sistema de arquivos do equipamento. A linguagem POSXML consegue trabalhar com arquivos do tipo WALK dbFile (Um sistema de arquivos definido pelo framework ou máquina virtual que interpreta um programa em POSXML compilado). O sistema de arquivos WALK dbFile usa o formato: key=buffer\nkey=buffer\n, basicamente o formato de arquivos textos em ambiente Unix, onde o \n é usado para quebra de linhas. Existem 8 comandos básicos na linguagem POSXML para se trabalhar com arquivos no terminal POS, são eles:

* editfile
* readfile
* readfilebyindex
* deletefile
* file.open
* file.read
* file.write
* file.close

Exemplos:

<editfile filename="teste.txt" key="$(sChave)" value="$(sValor)" />

<readfile filename="teste.txt" key="$(sChave)" variabledestination="$(sRetorno)" />

<readfilebyindex filename="teste.db" index="0" variablekey="$(var1)" variablevalue="$(var2)" variablereturn="$(var3)" />

<deletefile filename="teste.txt" />

Em meados de 2005, em um momento em que a utilização de equipamentos como os terminais POS encontravam-se em constante crescimento, impulsionado por um crescente número de empresas regionais que administravam seus próprios cartões de crédito, cartões Private label e com o surgimento de novos negócios, um programador brasileiro e seu sócio, que já trabalhavam com o desenvolvimento de aplicações para terminais POS e atendiam alguns clientes, se esbarravam com alguns problemas que os impediam ganhar velocidade e flexibilidade com estes terminais POS.

O desenvolvimento das aplicações tinham que ser realizados em linguagem C e cada vez que o mercado lançava um novo modelo de terminal ou quando surgia uma nova marca ou novo fabricante, a mesma aplicação desenvolvida em C tinha que ser totalmente reescrita e adaptada para o novo terminal a ser usado, um esforço elevado que resultava em algumas restrições: o processo era considerado lento e caro. Até mesmo quando se precisava implementar uma nova funcionalidade no terminal POS em uma aplicação em C já existente, esbarrava-se em tal dificuldade.

Pensando na necessidade de ganhar velocidade e flexibilidade no desenvolvimento de suas aplicações para atender seus clientes com mais eficácia, esse programador pensou em inovar de alguma forma e decidiu que, criando uma linguagem padrão, única e flexível, seria a melhor saída para resolverem seus problemas com seus clientes.

Nascia então o conceito da programação através de uma linguagem própria para terminais POS, cujos comandos e instruções fossem pré-programados e que de uma forma simples, interagissem com o equipamento.

O uso da estrutura em padrão XML foi decisão importante, pois daria flexibilidade suficiente para expandir a linguagem o quanto fosse necessário, sem muitas modificações na API básica da linguagem.

Meses depois da prova de conceito da linguagem estar pronta, decidiram que a linguagem poderia se tornar acessível a outros programadores e outros desenvolvedores de aplicações, o que pode expandir a cadeia de valor dos terminais POS.

A linguagem POSXML e suas ferramentas já foram testadas e usadas por programadores de vários países como México, Chile, Argentina, Colômbia, República Dominicana, EUA, Turquia, Índia, Rússia e alguns países do oriente médio.

  • Flexível
  • Expansível
  • Estruturada
  • Compilada
  • Fácil aprendizado
  • Interativa
  • Rápida
  • Não exige conhecimento do hardware (máquina)
  • Não exige conhecimento da linguagem C

O que não é

[editar | editar código-fonte]

Apesar da linguagem ser estruturada no padrão XML, POSXML não é uma linguagem aberta que pode ser usada por um browser (navegador) padrão como a linguagem WML, geralmente utilizada em aplicações WAP que são executadas por dispositivos móveis, tais como telefones celulares.

Exemplos de códigos

[editar | editar código-fonte]

O tradicional "Hello World"

[editar | editar código-fonte]
<!-- Uma aplicação de exemplo que mostra no display do terminal POS a frase: Hello World. -->

<!-- O comando 'display' exibe o conteúdo de mensagem na linha e coluna especificados -->
<display column="0" line="3" message="Hello World" />
<!-- O comando 'waitkey' aguarda até que o operador pressione alguma tecla para continuar a execução -->
<waitkey/>
[editar | editar código-fonte]
<stringvariable value="" variable="sNome" />
<stringvariable value="" variable="sValor" />

<integervariable value="0" variable="iValor" />
<integervariable value="0" variable="iOpcao" />
		
<!-- O comando 'menu' monta um menú de opções no display do terminal. O operador pode digitar de 0 a 9, ou seja,
pode-se inserir até 10 opções no menu. O valor digitado fica armazenado em uma variável -->

<menu variable="$(iOpcao)" options="\Menu\ 1) Funcao Main\ 2) Funcao Impressao" />

<if operator="equalto" value="1" variable="$(iOpcao)">
   <!-- O comando 'callfunction' realiza uma chamada em uma função previamente programada,veja neste exemplo a chamada na função 'Main' -->
   <callfunction name="Main"/>
</if>

<if operator="equalto" value="2" variable="$(iOpcao)">
   <callfunction name="Impressao"/>
</if>

<!-- Definindo uma função de nome 'Main' -->
<function name="Main">
   <!-- O comando 'inputmoney' é usado para guardar em uma variável do tipo inteiro os valores digitados pelo operador -->

   <inputmoney column="0" line="0" message="Digite o valor:" variable="$(iValor)" />
   <cleandisplay />

   <!-- O comando 'inttostring' converte valores de variáveis do tipo 'inteiro' em valores do tipo 'string' -->
   <inttostring integervariable="$(iValor)" stringvariable="$(sValor)" />
   <display column="0" line="2" message="Valor digitado:" />
   <display column="0" line="3" message="$(sValor)" />
   <waitkey />

</function>

<function name="Impressao">

<!-- O comando 'inputformat' é responsável de guardar em uma variável do tipo string valores ou caracteres digitados pelo operador.
     A quantidade máxima de caracteres é definida no parâmetro 'format'
-->

  <inputformat column="0" format="AAAAAAAAAA" line="0" message="Digite o nome:" variable="$(sNome)" />
  <print message="$(sNome)" />

   <!-- O comando 'paperfeed' avança o papel bobina em 3 linhas. -->
   <paperfeed />
</function>

Lidando com arquivo no POS

[editar | editar código-fonte]
<stringvariable value="" variable="sRet" />
<stringvariable value="" variable="sWriteKey" />
<stringvariable value="" variable="sWriteValue" />

<inputformat column="0" format="AAAAAAAAAA" line="0" message="Digite uma chave:" variable="$(sWriteKey)" />
<inputformat column="0" format="9999999999" line="2" message="Digite um  valor:" variable="$(sWriteValue)" />

<!-- o comando 'editfile' edita o valor de uma chave no arquivo especificado em 'filename'. Caso
 este arquivo não exista, o comando criará um arquivo com esta chave automaticamente -->

<editfile filename="teste.txt" key="$(sWriteKey)" value="$(sWriteValue)" />

<!-- O comando 'readfile' procura no sistema de arquivos do terminal algum arquivo com o nome especificado em
'filename'. Dentro deste arquivo o comando procura por uma chave com o nome especificado em 'key',
adicionando o valor da chave encontrada à variável do tipo string em 'variabledestination'. Caso não exista
esta chave ou arquivo, o valor da variável em 'variabledestination' será um espaco em branco. -->

<readfile filename="teste.txt" key="$(sWriteKey)" variabledestination="$(sRet)" />

<!-- O comando 'deletefile' apaga um arquivo especificado em 'filename' do sistema de arquivos do terminal -->
<deletefile filename="teste.xml" />

<!-- O comando 'joinstring' concatena dois valores do tipo string e armazena o resultado em 'variabledestination' -->
<joinstring firstvalue="Result:" secondvalue="$(sRet)" variabledestination="$(sRet)" />

<cleandisplay />
<display column="0" line="4" message="$(sRet)" />
<waitkey />

Um exemplo com "While"

[editar | editar código-fonte]
<!-- O comando 'stringvariable' cria na memória do terminal, uma variavel do tipo string, neste exemplo, com o nome 'sData' -->
<stringvariable value="" variable="sData" />
<stringvariable value="KEY_CANCEL" variable="sKey" />

<!-- O comando 'while' realiza um loop até que a condição especificada seja satisfeita,
     neste exemplo, quando o valor de 'sKey' for diferente de 'KEY_CANCEL'
-->

<while variable="$(sKey)" operator="equalto" value="KEY_CANCEL" >
   <!-- o comando 'getdatetime' extrai a data e a hora interna no formato especificado e a grava na string em variabledestination -->
   <getdatetime format="d/M/yy h:m:s" variabledestination="$(sData)" />

   <!-- o comando 'display' neste caso vai mostrar na linha 2 na coluna 0 a data e a hora -->
   <display column="0" line="2" message="$(sData)" />

   <!-- o comando 'readkey' espera o tempo especificado em miliseconds para gravar na string em variablereturn
    caso nao seja pressionado nenhuma tecla sera retornado o valor 'KEY_CANCEL' por default -->

   <readkey miliseconds="800" variablereturn="$(sKey)" />
</while>

<display column="0" line="2" message="$(sKey)" />
<waitkey />

Ligações externas

[editar | editar código-fonte]