Am.s                  B Append data from memory location [0] to dest.
*As                   D Open new batch [s=0] #commands to skip on success
+A#v.a.[#]c.s         V Compare variable
Bs.d                  B Select source and dest buffers (reset extraction ptr)
*Ba.s                 D Select batch for read ops
+B#v,a                C Calculate Block Character Check of dest buffer
Ca.s                  F Verify check digits
*Ca.s                 D Copy dest buffer to batch
+Ca.s                 P Buffer comparison
Dn                    B Delete characters [1]from the end of dest buffer.
*Da.s                 D Delete batch, records or headers
+Dt                   C Dial DTMF digits in dest buffer, [t=5]x10ms duration
Es1a.j.s2.i.s3.a2.c   E Input from cardreader or Keypad
*Ea.s                 D Append batch detail to dest buffer
+En1.n2.a             E Input and display with decimal places
Fn.a                  O Display fixed prompt
*Fs.a                 D Detect data capture errors
+Fa                   C Enable [0], Disable (1) and send ACK immediately (5)
G                     B Clear dest buffer
*Ga                   O Terminal beep
+Ga.s                 D Append detail record to batch
Hs.c1.j.c2            B Search for string/constant c1 [28] in source buffer
*Hi.j.a               S Encrypt PIN and account number
+Hs                   S Wait for encrypted block from PIN pad -> dest buffer
Is.a.c                P Compare source buffer against string/constant
*Ia.t.s.n             C Character I/O over DIN 8 port
+Ia.t.s.n             C Character I/O over MODEM port (parms same as *I)
J1or'fmt'             B if '1', set time from dest buffer: WYYMMDDHHMMSS
*Ja                   O Justify display
+Ja                   B Buffer modification [0]
Ka.j.s.i              E Input from keypad only
*Ka                   P Abort process, string or transaction
+Ka.s                 C Carrier control
Lm                    P Link to control string [re-execute current]
*Lm.n                 P Call subroutine at location m, execute [n=1] times
+La                   P Lock [0] and unlock [1] the keypad
Ms.a.c                E Input from cardreader only
*M                    P Exit subroutine (breaks subroutine loops)
+Ma1.a2.a3.a4         C Set modem parameters
Nn.a.t                O Send destination buffer to printer
*N#v.[#]c             V Set variable v [0] to constant/variable [0]
On                    B Move extraction pointer within src buffer [1] (+/-n)
*O#v.o.[#]c.s         V Perform arithmetic on variables
Pm                    O Display custom prompts (update only when entry occurs)
*Pc1.c2.n.a1.a2       C Specify communications parameters
+Pt                   P Pause [t=1000] milliseconds
Qc                    B Append Write Control Character [0]
*Q#v.b.a              V Set variable to content of buffer
+Q#v.a                V Append variable to destination buffer
Rc                    B Append constant value/string [28] to dest buffer
*Ra1.a2.a3.a4         C Select communication device speed
+Ra.s                 C Get/Set RS-232 handshake lines
Sa.m                  P Dial or set multiple-transaction function
*Ss.n.a               D Verify memory available
+Sb.a.#v              B Get size of buffer b [dest] into variable #v [0]
Tm.o                  B Perform arithmetic between memory location and dest
*Tt1.t2.t3.t4.t5.a    C Specify communications timeouts
+Ta.t.s.b             C Character I/O over Din6 port (parms same as *I)
Um.b                  B Copy buffer [0=dest] to memory location [0]

*Us.a1.a2.s2          E Barcode reader input
+Ua1.a2               C Set Din6 communications parameters
Vb.a.t                O Display buffer
*V                    C Append phone status to destination
+Va                   B Append signon message [0=signon message]
Wa.s                  P Wait until print buffer is empty
*Wt.s.a               P General wait (time or key -> dest buffer)
Xn.c                  B Append n [0=All] from extract ptr in src to dest
*Xm1.m2.s             E Select account number range
+Xc.a1.a2             C Transmit data to network
Ys                    B Append next non-blank memory location (for dump)
*Yt.s1.s2.s3.s4.s5.s6 E Check input devices
+Yc.t.n.a.s           C Receive network data with timeout
Zn.c.j                B Padd dest buffer to length n with char [32], with
*Za                   D Calculate # free bytes and append to dest buffer

Entry of Data:

  Es1.a.j.s2.i.s3.a2.c - Input from cardreader or Keypad
                    s1: # commands to skip when input is from card [0]
                    a : Input type flag
                        1=Alphanum 2=num [3=alphanum-chars] 4=hidden
                        5=alphanum/hidden 6=num/hidden 7=Alphanum/password
                    j : Max # of input chars from keypad [60]
                    s2: # commands to skip after NULL entry from kpad
                    i : Min # of input chars from keypad [0]
                    s2:a2:c - 380 only
  +En1.n2.a     - Input and display with decimal places (keyboard)
                    n1: # decimal places to display [2]
                    n2: Max # input digits [10]
                    a : type of radix to use [0]
  Ka.j.s.i      - Input from keypad only
                    a: Input type flag
                        1=alphanum-char 2=num 3=alphanum-char
                        4=numbers/2forcedDecimal 5=alphanum/hidden
                        6=num/hidden 7=Alphanum/password
                    j: Max # input chars [60]
                    s: # commands to skip after a NULL entry
                    i: Min # input chars [0]
  Ms.a.c        - Input from cardreader only
                    s: # command to skip if three bad cards read [0]
                    a: track selection options:
                        [0=Trk2] 1=Trk1 2=Trks1&2 3=Trk3 4=Trks2&3
                    c: Track separater [29]
  *Us.a1.a2.s2  - Barcode reader input
                    s : #cmds to skip when barcode read (keyboard ->next)
                    a1: Barcode algorithm (0=3 of 9)
                    a2: 0=No Luhn check 1=Luhn check/code 39 if data numeric)
                    s2: (Indus EEPROM only) #cmds to skip on bad barcode
  *Xm1.m2.s     - Select account number range (from source buffer)
                    m1: Memory location of first account range (0-255) [40]
                    m2: Memory location of last account range (0-255) [59]
                    s : # commands to skip if account is within range
                    rang_entry= low . high . data (2 '.'s required!)
  *Yt.s1.s2.s3.s4.s5.s6 - Check input devices
                    t : seconds to wait for data from device [0=infinite]
                    s1-6: # commands to skip when input from:
                        cardreader, keypad, barcode, RS-232, modem, Pinpad
Communication Control (see Appendix B and D):

  +B#v,a        - Calculate Block Character Check of dest buffer and place
                  in variable [0]. A: [0=LRC] 1=CRC (Initial BCC=variable)
  +Dt           - Dial DTMF digits in dest buffer, [t=5]x10ms duration
  +Fa           - MODEM ACK: Enable [0], Disable (1), Send immediately (5)
  *Ia.t.s.n     - Character I/O over DIN 8 port
                    a:  [0=send TRANSMIT buffer]
                        1=append TERMCHAR (*P cmd) + LRC and send TXBUF
                        5=Wait for n characters RX, append to dest buffer
                        6=Wait for 1 char RX, append to dest, if STX, wait
                          for packet, perform LRC, NAK bad packet
                        7=Wait for pass character or packet. Rexmit last
                          data if NAK rx, append rx char or packet to dest
                          buffer; LRC check and NAK on bad packet
                    t:  RX timeout in seconds [0=notimeout] (rx only)
                    s:  # commands to skip if data rx (rx only)
                    n:  min # chars to wait if (a==5 rx only) [1]
                    (EOT=4 ENQ=5 ACK=6 NAK=21 CR=13 vACK=7 vWACK=17 vWAIT=18)
  +Ia.t.s.n     - Character I/O over MODEM port (parms same as *I)
  +Ka.s         - Carrier control
                    a:[0]=Raise Carrier
                        1=Drop Carrier (clears modem RX buffer)
                        2=Raise Answer Tone
                        5=Wait for debounced carrier detect (200ms)
                        6=Wait for debounced carried with 500ms silence
                        7=Skip s commands if carrier detect
                    s:  # commands to skip (a == 7 only)
  +Ma1.a2.a3.a4 - Set modem parameters
                    a1: [0=No change] 1=Set originate  2=Set answer
                    a2: [0=No change] 1=7E1pass7 2=8N1pass7 3=8N1pass8
                    a3: [0=No change] 1=enable 2=disable retrans on NAK
                    a4: [0=No change] 1=enable 2=disable retrans on ENQ
  *Pc1.c2.n.a1.a2 - Specify communications parameters
                    c1: [ETX] character signalling end of request packet
                    c2: [STX] receive exit character (1-127)
                    n : [3] number of NAK's sent/received before hangup
                    a1: [0=No change] 1=disable 2=enable multi-ACK protocol
                    a2: [0=No change] 1=300 2=1200 baud
  *Ra1.a2.a3.a4 - Select communication device speed
                    a1: [0=Internal modem] 1=RS-232 port
                    a2: [0=300] 1=600 2=1200 3=2400 4=4800 5=9600 6=19200
                    a3: [0=No change] 1=NoHandshake 2=TXonMARK 3=TXonSPACE
                    a4: [0=No change] 1=7E 2=8N data bits/parity
  +Ra.s         - Get/Set RS-232 handshake lines
                    a:[0]=Drop output handshake
                        1=Raise output handshake
                        5=Skip 's' commands if signal1 (DSR) high
                        6=Skip 's' commands if signal2 (CTS) high
                        7=Skip 's' commands if signal1&2 are high
                    s: # commands to skip (a==5-7 only) [0]
  *Tt1.t2.t3.t4.t5.a - Specify communications timeouts
                    t1: End of dial to carrier detect [45 sec]
                    t2: Carrier detect to ENQ [30 sec]
                    t3: send packet to response rx [45 sec]
                    t4: # t3's to allow before hang-up [1]
                    t5: Response packet to EOT (2 sec)
                    a : [0=No change] 1=enable 2=disable EOT timeout
  +Ta.t.s.b     - Character I/O over DIN 6 port (parms same as *I)
  +Ua1.a2       - Set DIN 6 communications parameters

                    a1: [0=300] 1=600 2=1200 3=2400 4=4800 5=9600
                    a2: [0=No change] 1=7E1pass7 2=8N1pass7 3=8N1pass8
  *V            - Append phone status to destination
                    (1=off-hook 2-off-hook+carrier 3=on-hook+lineOK
                     4=Line!OK 5=on-hook+ring 6=off-hook+wait_for_line
                     7=off-hook+dialing 8=off-hook+wait_for_answer)
  +Xc.a1.a2     - Transmit data to network
                    c : string/value to send [0] (sent AFTER a1 data)
                    a1: login parm: 0=No 1=name 2=pass 3=loc 4=loc_pass
                    a2: [0=Nothing] 1=SPACE "break"
  +Yc.t.n.a.s   - Receive network data with timeout
                    c: termination char/value to match [13]
                    t: time [30000ms] to wait
                    n: number of tries [1]
                    a: [0=no output] 1=right 2=left 16 chars till c match
                    s: # command (+/-) to skip on no data [0]

Data Capture and Batch Functions:

  *As           - Open new batch [s=0] #commands to skip on success
  *Ba.s         - Select batch for read ops
                    a: [0=Current/Young] 1=Oldest 2=Next 3=Match dest buffer
                    s: # commands to skip if successful
  *Ca.s         - Copy dest buffer to batch
                    a: [0=Copy to end of open batch] 1=replace current record
                    s: # commands to skip if successful
  *Da.s         - Delete batch, records or headers
                    a: 0=[Selected batch/headers]  1=All detail records
                         for selected batch  2=All batches
                    s: # commands to skip if successful
  *Ea.s         - Append batch detail to dest buffer
                    a: [0=Next detail] 1=1stDetail 2=BatchHeader
                       3=NextDetail matching data in source buffer
                    s: # commands to skip if successful
  *Fs.a         - Detect data capture errors
                    s: # commands to skip if error value != a [0]
                    a: Code identifying type of error [0=no error]
  +Ga.s         - Append detail record to batch
                    a: [0=append to selected batch] 1=Insert at front
                    s: # commands to skip if successful
  *Ss.n.a       - Verify memory available
                    s: # commands to skip when available > n [0]
                    n: number of free bytes required
                    a: Type of memory [0=Program] 1=Batch
  *Za           - Calculate # free bytes and append to dest buffer
                    a: [0=Program] 1=Batch

Security/Encryption:

  *Hi.j.a       - Encrypt PIN and account number
                    i: Min # pin digits (4-12) [4]
                    j: Max # pin digits (4-12) [12]
                    a:  1=PIN from PinPad Account from TRANZ
                        2=PIN and account number from PinPad
  +Hs           - Wait for encrypted block from PIN pad -> dest buffer
                    s: # commands to skip if successful

Buffer Operations:
    1=TRANSMIT  2=RECEIVE  3=DATA_CAPTURE  4=PRINT_LINE  5=TEMP

  Am.s          - Append data from memory location [0] to dest.
                    s: # commands to skip when location is empty
  Bs.d          - Select source and dest buffers (reset extraction ptr)
                  s=9 = Reset extraction ptr in current source buffer.
  Dn            - Delete characters [1]from the end of dest buffer.
  G             - Clear dest buffer
  Hs.c1.j.c2    - Search for string/constant c1 [28] in source buffer
                  s is number of commands to skip if not found [0]
                  j is maximum number of characters to search [to end],
                  c2 is decimal value of end marker [0],
  J1or'fmt'     - if '1', set time from dest buffer: WYYMMDDHHMMSS
                  if 'fmt', append time to dest buffer in this format
                    A=yr2 B=mo2 C=dy2 D=hr12 E=min F=sec G=A/P
                    H=yr4 I=mo3 j=mo  K=hr24 L=dy3 M='M' N=day
                    O=':' P='=' Q=day(Sun=0-Sat=6)
  +Ja           - Buffer modification [0]
                    0=Append src to dest, remove '.' and ','s
                    1=Append src to dest, add '$' and decimal point
                    2=Append src to dest, convert control chars to print
                    3=Copy source to dest using mask in dest
                    4=Logically AND src and dest -> dest
                    5=Logically OR  src and dest -> dest
                    6=Logically XOR src and dest -> dest
  On            - Move extraction pointer within src buffer [1] (+/-n)
  Qc            - Append Write Control Character [0]
                    WCC format: 01ttttmc
                    tttt - From c parameter (4=0001 8=0010 etc.)
                    m    - 0=Single 1=Multi transaction
                    c    - Account data came from: 0=Keypad 1=Cardreader
  Rc            - Append constant value/string [28] to dest buffer
  +Sb.a.#v      - Get size of buffer b [dest] into variable #v [0]
                  a: [0=Uncompressed]  1=Compressed
  Tm.o          - Perform arithmetic between memory location and dest
                  m = [0] memory location to be used
                  o = [0]: m = m + dest   Output can be up to 15 digits
                        1: m = m - dest   All non digit chars are ignored
                        2: m = m * dest   '-' anywhere reads as minus
                        3: m = m / dest
                        4: m = m % dest
  Um.b          - Copy buffer [0=dest] to memory location [0]
  +Va           - Append signon message [0=signon message]
  Xn.c          - Append n [0=All] from extract ptr in src to dest
                    c is end marker [0] (copy up to but not including)
  Ys            - Append next non-blank memory location (for dump)
                    s [0] is # commands to skip after all have been read
  Zn.c.j        - Padd dest buffer to length n with char [32], with
                  justification [0=Left] 1=Right 2=Center

Fraud control:

  Ca.s          - Verify check digits
                    a:[0]=verify LUHN check digit within last data entry
                        1=Verify LUHN check within the destination buffer
                        2=Verify MOD11 check digit on the dest buffer
                    s: # of commands to skip if digit is invalid

Output and Display:

  Fn.a          - Display fixed prompt
                    n: Fixed prompt number
                    a: [0=Display if no pend input] 1=Append to dest buff
  *Ga           - Terminal beep
                    a: 0=[Normal]  1=Error  2=Normal-none-if-turned-off
  *Ja           - Justify display
                    a: [0=Rightmost]  1=Leftmost
  Nn.a.t        - Send destination buffer to printer
                    n: number of CRLF pairs to append [0]
                    a: out-of-paper: [0=Immed] 1=Wait(t) 2=Prompt/Enter
                    t: 1/2second time to wait when (a==1) [0]
  Pm            - Display custom prompts (update only when entry occurs)
                    m: memory location contining prompt [0]
  Vb.a.t        - Display buffer
                    b: buffer to be displayed [0=dest]
                    a: [0=Wait/ENTER] 1=Allow multi-host 2=Wait/Key/time
                    t: 1/2 second time to wait when (a==2) [0]

Process and Control Flow:

  +Ca.s         - Buffer comparison
                    a: [0=source==dest] 1=source>dest 2=source<dest
                    s: # commands to skip if compare is true [0]
  Is.a.c        - Compare source buffer against string/constant
                    s: # commands to skip if compare is true (+/-) [0]
                    a: [0=Unconditional] 1:== 2:!= 3:< 4:>
                       5:single-transaction 6:!first-pass-of-multitran
                       7:Decrement variable 'c' skip if !0
                    c: constant/string [28] or #variable (a==7 only)
  *Ka           - Abort process, string or transaction
                  Clears all system buffers, stops printing.
                    a: [0=Idle prompt] 1=ExistingDisp
                        2=HangUp-leave-multi-tran-enabled-continue
                        3=HangUp-disable-multi-tran-continue
  Lm            - Link to control string [re-execute current]
  *Lm.n         - Call subroutine at location m, execute [n=1] times
  +La           - Lock [0] and unlock [1] the keypad
  *M            - Exit subroutine (breaks subroutine loops)
                  Not needed at the end of a control string
  +Pt           - Pause [t=1000] milliseconds
  Sa.m          - Dial or set multiple-transaction function
                    a: [0=Dial] 1=Enable-m-tran_no_view
                       2=enable-m-tran-allow-view 3=off-hookNOW
                    m: memory location to dial [0]
  Wa.s          - Wait until print buffer is empty
                    a: [0=WaitEmpty] 1=SkipIfReady 2=SkipIfBufferEmpty
                    s: # commands to skip (a > 0 only)
  *Wt.s.a       - General wait (time or key -> dest buffer)
                    t: Timeout in seconds (1-65) [0=No time]
                    s: # commands to skip when timeout or keypress
                    a: [0=0-9,*,#] 1=+ENTER 2=+BKSPC,ALPHA,ENTER 3=None

Variable Operations:

  +A#v.a.[#]c.s - Compare variable
                    v: variable to compare [0]
                    a: 0:v==c 1:v>c 2:v<c [0]
                    c: Constant/#variable to compare against [0]
                    s: # commands to skip if compare is true [0]
  *N#v.[#]c     - Set variable v [0] to constant/variable [0]
  *O#v.o.[#]c.s - Perform arithmetic on variables
                    v: variable for first operand [0]
                    o: 0=+ 1=- 2=* 3=/ 4=% 5=AND 6=OR 7=XOR [0]
                    c: Constant/#variable for second operand [1 A=0-4]
                    s: # commands to skip if result of operation in 0 [0]
  *Q#v.b.a      - Set variable to content of buffer
                    v: Variable to set [0]
                    b: buffer to be used [dest]
                    a: 0=string->num 1=ASCII->num
  +Q#v.a        - Append variable to destination buffer
                    v: variable to read
                    a: 0=num->string 1=num->ASCII

Reserved memory locations:

000     X   20  Download phone number
001     X   10  Serial number
002     -   -   TRANSMIT buffer (1)
003     -   -   RECEIVE buffer  (2)
004     9   6   Program Data MMDDYY
005     9   4   Message sequence number
006     9   2   Number of chars to scroll
007     9   1   Multi-transaction timeout 1-8x20sec 9=90min
008     9   5   Reserved (Printer type 5=roll 18=slip)
009     9   1   Beeper 0=On 1=Off
010     9   2   Dial 0=Tone 1=std_pulse 2=10-n_pulse 3=n+1
011     9   1   Dial 0=5 1=7 2=10 3=15 4=20 9=user-spec pulses per sec.
012     9   1   Parallel phone 0=not_connected 1=connected
013     9   1   Number if retries
014     9   1   TelTest 0=+A/A1+test 1=+A/A1-test 2=-A/A1+test 3=-A/A1-test
015     9   3   Delay before auto-answer
016     X   120 Encrypted working key  Master key pointer
017     9   1   RECALL, Clock, Unit/Unit Restriction (0=no_password)
019     X   7   Application Identification
020-029 X   60  Logon strings #0-9
030     X   120 Idle prompt
031-036 X   120 Function key #1-6 (031-036) control strings
037     X   120 Reserved (Out of memory control string)
038     X   120 Auto answer control string
039     X   120 Function key #9 control string
040-099 X   120 General records
x00     X   32  Primary phone number
x01     X   32  Secondary phone number
x02     X   32  Call center phone number
x03     X   32  Referral phone number
x04     X   46  Merchant/Terminal ID
x05     9   3   Message format flag
x06     9   3   Fraud control flag
x07     X   120 Transaction control string
x08     X   16  Transaction type prompt
x09     9   4   Floor limit

x10     X   120 Response analysis control string
x11     X   120 Auxiliary control string
x12     9   1   Multi-transaction group code
113-199 X   120 General locations
213-299 X   120 General locations
313-399 X   120 General locations
413-499 X   120 General locations
513-599 X   120 General locations
613-699 X   120 General locations
713-799 X   120 General locations
813-899 X   120 General locations
913-949 X   120 General locations
950     9   1   Printer 0=none 1=GenericRoll 2=200/250 3=100/150
951     9   3   # line feeds for roll printer [6]
952     9   1   GenericRoll baud [0=3] 1=6 2=12 3=24 4=48 5=96 6=192 x100
953     9   1   GenericRoll format [0=7E2] 1=8N2
954     9   1   GenericRoll handshake [0=Hardware] 1=None
955-957 X   60  Reserved
958     9   1   Bell/CCITT [0=Bell] 1=CCITT
959     X   60  Reserved
960     9   1   DialUp Ul/Dl speed 1=300 2=1200
961     X   60  Silence     \
962     X   60  Dial Tone   +- CCITT units only
963     X   60  Busy        +- otherwise Reserved
964     X   60  Ringback    /
965     9   1   AutoAnswer speed 1=300 2=1200
966     9   1   AutoAnswer Processing
967     9   1   AutoAnswer pkt inactive timeout: 0=20s 1-8x20s 9=90min
968-969 X   60  Reserved
970     9   1   DIN6: 0=Empty 1=BarCode 2=PinPad 3=Generic
971     9   3   Extended redial flag
972-974 X   60  Reserved
975     9   1   Line recovery time [0=3 seconds]
976     X   60  Moment of Silence
977     9   1   MemManag reclaim 0=1_Store 1=1_Abort 2=All_Abort >3=None
979     X   120 Abort control string
980     X   120 Delay Executing Idle Loop control string [0=Disable]
981     X   120 Idle loop control string
982     X   60  Idle loop phone number
983     X   120 Idle loop response analysis control string
984     X   60  Idle loop inactivity timeout
985     9   1   Host number for card transaction
986     9   1   Host number for bar-code transaction
987-989 X   60  Reserved
990     X   120 Communication error control string
991-996 X   60  Reserved
997     X   120 VeriFone control string
998     X   60  Reserved
999     X   60  Programming Error Recovery Log
