Girish Mahajan (Editor)

POSXML

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

POSXML (acronym for Point Of Sale eXtended Markup Language) is a programming language, based on XML, that is used to create applications for a POS terminal.

Contents

Normally the programming language used to develop such applications is C or C++. The main purpose of POSXML is to simplify the development of applications for POS terminals. It contains a set of instructions and pre-programmed commands, which allow direct interaction with the machine, resulting in a large reduction in application development time.

The structure of POSXML

POSXML is organized and structured in the form of tags, showing levels and subsets of a set of commands and instructions, that form the logical structure of a POSXML application.

Example:

Compiled language

Similar to the vast majority of existing programming languages, POSXML is compiled in a specific format to reduce the file size which allows the application to be run on a POS terminal using a framework (virtual machine).

When compiled, a program written in POSXML, becomes a set of bytecodes that are interpreted by the virtual machine on the POS terminal which results in the implementation on the POS terminal.

Example:

Compiled bytecode:

d0 x0A 0 x0A Bytecode example x0A x0D

Syntax

The commands and instructions of POSXML, such as the compliance on the use of capital letters and lowercase letters (case sensitive), are acquired through training. Some commands that belong to the language do not require parameters, unlike other commands that need input to interact with the machine.

Examples:

Commands that do not require instructions or parameters.

Commands that require instructions and parameters to interact with the equipment.

The names given to functions, variables, and pages should also obey the rules written in capital letters and lowercase letters, so if a developer creates a function called "calcula_digito" he will not be able to call on the variable via "Calcula_Digito". The call of a function, or variable page must meet the exact name that was assigned by the programmer.

Commands and instructions

Because it is a structured language based on XML, POSXML is a language that is constantly evolving, new commands and instructions can be added to your library at any time. Initially, the language had only two dozen basic commands to create a functional application on a POS terminal, using few resources: only the basic display (LCD), keypad, magnetic card reader and printer.

With the evolution of language, there are now almost one hundred commands and instructions available to deal with files, pictures, mathematical operators, functions to manipulate variables of the String type, definition of variables, logical operators, classes for working with protocol ISO 8583 (Protocol standard for exchanging information in transactions with credit cards), among others.

Command list

  • if
  • Instruction of decision making or logical comparison
  • else
  • Logical condition in a block of the if statement
  • while
  • Instruction that allows the execution of a code multiple times
  • break
  • The break command allows immediate exit from while loop
  • function
  • Defines a block of code that can be executed later
  • callfunction
  • Makes a call on a previously defined function
  • execute
  • Execute a POSXML application stored on the device
  • exit
  • Immediately closes the execution of the POSXML application
  • getcardvariable
  • Gets the card number and stores it directly on a variable
  • system.readcard
  • Waits until a card is passed or a key is pressed
  • system.inputtransaction
  • Instruction to receive the data card on a contactless transaction
  • menu
  • Displays a menu based on the device screen (number of lines)
  • menuwithheader
  • Displays a header with a menu based on the device screen (number of lines)
  • displaybitmap
  • Displays a monochromatic bitmap on the display
  • display
  • Displays a custom message on device's display
  • cleandisplay
  • Clean the device display (like a clear or cls)
  • system.gettouchscreen
  • Captures the coordinates (x and y) where the display was pressed
  • print
  • Prints a custom message in the default font size
  • printbig
  • Prints a custom message in the double font size
  • printbitmap
  • Prints a monochromatic bitmap
  • printbarcode
  • Prints a bar code in the I25 format, horizontal or vertical
  • checkpaperout
  • Checks if the paper compartment still contains paper
  • paperfeed
  • Sends a signal to the printer by adding blank lines on the ticket
  • inputfloat
  • Allows the entry of a value with dot (.) by pressing (*)
  • inputformat
  • Allows the entry of a value based on a pre-defined format
  • inputinteger
  • Allows the entry of an integer
  • inputoption
  • Stores in a variable the option of a menu item
  • inputmoney
  • Allows the entry of a monetary value
  • crypto.crc
  • 16-bit CRC calculation, support CRC-CCITT
  • crypto.encryptdecrypt
  • Encryption routines with algorithms DES, 3DES or NEWDES
  • crypto.lrc
  • Generates a LRC byte of the string in the buffer
  • crypto.xor
  • Performs a binary XOR operation between the bytes of two strings
  • downloadfile
  • Downloads a file previously registered on the WALK Manager
  • filesystem.filesize
  • Returns the size of a file in the memory of the POS
  • filesystem.listfiles
  • Lists the files of a directory by saving them in a file
  • filesystem.space
  • Checks the space (free and used) and the number of files in memory
  • file.open
  • Opens a file for reading or writing
  • file.close
  • Closes a file that was previously opened by file.open
  • file.read
  • Reads a file that was previously opened by file.open
  • file.write
  • Writes a file that was previously opened by file.open
  • readfile
  • Reads a dbfile WALK file (key/value)
  • readfilebyindex
  • Reads a key from a file WALK dbfile
  • editfile
  • Allows write a file in WALK dbfile format (key/value)
  • deletefile
  • Deletes a file from the device memory
  • iso8583.initfieldtable
  • Starts field table ISO8583 based on a specified file
  • iso8583.initmessage
  • Initiates assembly of the ISO message
  • iso8583.putfield
  • Inserts a field in the message, necessarily in ascending order
  • iso8583.endmessage
  • Ends assembly of the ISO message
  • iso8583.transactmessage
  • Adds size, header and trailer and sends the ISO message to the authorizer
  • iso8583.analyzemessage
  • Starts the process of analysis and decomposition of the fields of the message
  • iso8583.getfield
  • Extracts a field of the previously analyzed message
  • openserialport
  • Opens the serial port for communication with external peripherals
  • writeserialport
  • Writes a buffer on the serial port
  • readserialport
  • Reads a buffer from an external device captured by the serial port
  • closeserialport
  • Closes the serial port
  • getdatetime
  • Stores in a variable date and time at runtime
  • time.calculate
  • Calculates time. Supports addition, subtraction and difference
  • adjustdatetime
  • Updates the device internal clock
  • predial
  • Performs a dial-up connection with the provider
  • preconnect
  • Connects to the host authorizer
  • shutdownmodem
  • Turns off the modem and cancels the operations
  • network.checkgprssignal
  • Checks the status of the connection, if the POS supports GPRS
  • network.hostdisconnect
  • Disconnects the device from the host, keeping it connected to the network
  • network.ping
  • Checks the status of the connection with the host
  • network.send
  • Sends a buffer to the host previously connected
  • network.receive
  • Receives from the host buffer previously connected
  • pinpad.open
  • Enables communication with the external or internal pinpad
  • pinpad.loadipek
  • Records an initial key and an initial ksn on the memory of pinpad
  • pinpad.getkey
  • Captures a key that is pressed on the external pinpad
  • pinpad.getpindukpt
  • Catches a PIN and encrypts it using DUKPT standard
  • pinpad.display
  • Displays a custom message on the display of the pinpad
  • pinpad.close
  • Terminates communication with the external or internal pinpad
  • emv.open
  • Initializes EMV library
  • emv.loadtables
  • Load tables EMV and PKI of the file for the buyer
  • emv.cleanstructures
  • Clears all input and output parameters
  • emv.adddata
  • Adds parameters to EMV process
  • emv.getinfo
  • Returns information parameters after the execution of the EMV process
  • emv.inittransaction
  • Initializes the EMV process with inserted parameters
  • emv.processtransaction
  • Starts the execution of the EMV process
  • emv.finishtransaction
  • Terminates the execution of the EMV process
  • emv.removecard
  • Waits for card removal
  • emv.settimeout
  • Define timeout (in seconds) of the library of the EMV process
  • system.readcard
  • Waits until a card is passed or a key is pressed
  • system.inputtransaction
  • Instruction to receive the data card on a contactless transaction
  • integervariable
  • Creates an instance of the variable of integer type
  • stringvariable
  • Creates an instance of the variable of string type
  • integerconvert
  • Conversion from integer to binary, octal or hexadecimal
  • convert.toint
  • Converts binary, decimal or hexadecimal to integer
  • inttostring
  • Conversion from integer to string
  • stringtoint
  • Conversion from string to integer
  • integeroperator
  • Increases by 1 (+1) or decrements by 1 (-1) a variable of integer type
  • string.tohex
  • Converts a string to its hexadecimal representation
  • string.fromhex
  • Converts a hexadecimal representation to a string
  • string.charat
  • Extracts specified string character
  • string.elementat
  • Returns a specific element in the string
  • string.elements
  • Returns how many elements there are in the specified string
  • string.find
  • Searches for a substring in the specified string
  • string.getvaluebykey
  • Searches in the string for a value based on key/value
  • string.trim
  • Eliminates the blanks on the left and right of the string
  • string.insertat
  • Inserts an element at specific index in string
  • string.length
  • Returns length of the specified string
  • string.pad
  • Adds a padding with specific character in string
  • string.removeat
  • Removes an element from specific index in string
  • string.replace
  • Replace all occurrences of the specified substring
  • string.replaceat
  • Replaces an element at a specific index in string
  • string.substring
  • Capture a specific part of string
  • substring
  • Copies part of a variable string to another variable
  • joinstring
  • Concatenates in a string the value of another 2 strings
  • input.getvalue
  • Captures a string and displays it on the screen in any position
  • smartcard.insertedcard
  • Checks if the card is inserted in the smart card reader
  • smartcard.closereader
  • Terminates communication process of with the smart card
  • smartcard.startreader
  • Starts the smart card reader and try to start the card
  • smartcard.transmitapdu
  • Sends an APDU command to the smart card
  • mathematicaloperation
  • Performs a mathematical operation between two values
  • system.beep
  • Produces a short beep
  • system.checkbattery
  • Checks the device battery status
  • system.backlight
  • Allows to control the backlight level of the terminal
  • system.info
  • Gets device information (MAC Address, SIM ID, etc
  • system.restart
  • Restarts the device
  • unzipfile
  • Unpacks a zip file
  • waitkey
  • Pauses execution until a button is pressed
  • waitkeytimeout
  • Same as command waitkey but has a timeout
  • readkey
  • Same as command waitkey, but holds the pressed key
  • wait
  • Pauses execution for a set time

    Tens of commands and instructions complete the set of language.

    Variables and data types

    Variables in POSXML are typed; there are only two types, integer and string. POSXML limits the number of declared variables to 512.

    These variables are declared global, i.e. They are shared throughout all the scheduled pages of the POSXML program in runtime process.

    Examples:

    String type variable:

    Integer type variable:

    A call to a variable that is declared in the memory, is made by $(name_of_the_variable), regardless of its type.

    It is also possible to covert a variable of one type into the other type. In POSXML the commands inttostring and stringtoint are used for this.

    Examples:

    File system

    When writing an application for a POS terminal, the developer is faced with the need to write to the specific file system of the equipment. The POSXML language works with files of type WALK dbFile (A file system defined by the framework that interprets a program compiled POSXML). This file system WALK dbFile uses the format: key = buffer n key = buffer n, basically the format of text files in a Unix environment, where n is used to wrap. There are 8 basic commands in the POSXML language to work with files in the POS terminal, they are.

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

    Examples:

    References

    POSXML Wikipedia