POSXML
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:
* < ; < * > ; > * & ; & * &apos ; ' * " ; "
Exemplo:
<function name="mostramensagem">
<display line="0" colunm="0" message="< = 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="< = 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:
![](http://upload.wikimedia.org/wikipedia/commons/e/e2/Camadas_ptBr.png)
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.
![](http://upload.wikimedia.org/wikipedia/commons/e/e1/Terminais_camadas.png)
A linguagem
[editar | editar código-fonte]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.
Síntaxe
[editar | editar código-fonte]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
- 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" />
Visão geral
[editar | editar código-fonte]História
[editar | editar código-fonte]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.
Atributos
[editar | editar código-fonte]- 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/>
Menu, funções e impressão
[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 />
Ver também
[editar | editar código-fonte]Ligações externas
[editar | editar código-fonte]- VeriFone The Way to Pay (inglês)
- Ingênico (inglês)
- Teste
- Sagem (inglês)
- Lyra Network
- CloudWalk