7524 Extended Terminal Services Flash

Images for 7524 Extended Terminal Services flash are available in the flavors
listed below.  Since IBM no longer logos the Intermec/Norand 11xx, 17xx and
59xx terminals, the images and batch files are no named based on the Norand
part numbers rather than the old IBM 7524-xxx part numbers.

  ETS11BAT.HEX - Norand 1100 Batch (IBM 7524-050)           Small Hand-held
  ETS17BAT.HEX - Norand 1700 Batch (IBM 7524-100)           Larger Hand-held
  ETS37BAT.HEX - Special 37-key version of ETS17BAT.HEX
  ETS59BAT.HEX - Norand 5920 Batch (IBM 7524-200)           Mobile-mount

  ETS11UHF.HEX - Norand 1100 UHF (IBM 7524-051)             Small Hand-held
  ETS17UHF.HEX - Norand 1700 UHF (IBM 7524-101)             Larger Hand-held
  ETS37UHF.HEX - Special 37-key version of ETS17UHF.HEX
  ETS59UHF.HEX - Norand 5920 UHF (IBM 7524-201)             Mobile-mount

  ETS11SST.HEX - Norand 1140 900mhz SST (IBM 7524-052)      Small Hand-held
  ETS17SST.HEX - Norand 1740 900mhz SST (IBM 7524-102)      Larger Hand-held
  ETS37SST.HEX - Special 37-key version of ETS17SST.HEX
  ETS59SST.HEX - Norand 5940 900mhz SST (IBM 7524-202)      Mobile-mount

  ETS11FAL.HEX - Norand 1160 'Falcon' 900mhz OWL (no IBM #) Small Hand-held
  ETS17FAL.HEX - Norand 1760 'Falcon' 900mhz OWL (no IBM #) Larger Hand-held
  ETS37FAL.HEX - Special 37-key version of ETS17FAL.HEX
  ETS59FAL.HEX - Norand 5960 'Falcon' 900mhz OWL (no IBM #) Mobile-mount

  ETS11OWL.HEX - Norand 1180 2.4ghz OWL (IBM 7524-054)      Small Hand-held
  ETS17OWL.HEX - Norand 1780 2.4ghz OWL (IBM 7524-104)      Larger Hand-held
  ETS37OWL.HEX - Special 37-key version of ETS17OWL.HEX
  ETS59OWL.HEX - Norand 5980 2.4ghz OWL (IBM 7524-204)      Mobile-mount

The self-extracting ZIP files containing the above flash images also contain
the following files:

 - LD*.CMD and LD*.BAT files for loading the flash images.  These call
   DOLOAD.BAT or DOLOAD.CMD which in turn call PROGDUX.EXE (for DOS) or
   PROGDUX2.EXE (for OS/2) to do the actual flash load.
 - CFRAPI24.LIB and CFRAPI24.H for building CFRs
 - This readme file

To expand the self-extracting zip file, simply copy it to an empty
subdirectory, such as C:\FLASH, and run the executable.

If you need multiple zip files, you will have duplicates of several of the
files.  This should not be a problem; just specify the -o option to overwrite
existing files when you run the self-extracting zip executable.

By default the batch/command files for loading the flash assume you are using
COM1.  If you need to use a different serial port, for example COM2, then add
the parameter: -c2 to the invocation of the batch/command file.  For example:

To load a Norand 1700 UHF (IBM 7524-101) from COM1, type the following command:

  ld17uhf

To load a Norand 1700 UHF (IBM 7524-101) from COM2, type the following command:

  ld17uhf -c2

The cable needed to load the flash into the 11xx (IBM 7524-05x) and 17xx
(IBM 7524-10X) terminals is the one that attaches to the round connector of
the terminal.

The cable needed to load flash into the 59xx (IBM 7524-20X) terminals is
216-831-XXX which is a 9-pin female (PC side) to 15-pin female (terminal
side) cable. (XXX is: 001 = 6', 002 = 25', 003 = 50').

If you are using any of the 900mhz SST flash images, then make sure you have
at least version 2.10 of the SST controller flash as well as at least
version 2.10 of the SST base flash.  Controller and base flash must have
the same version.

If you are using any of the UHF flash images, you should also be using
at least version 2.10 of the UHF controller flash.

Change History for Package
--------------------------
6-21-95:  Package created.

          Note this version of flash will show 0.90 from the Version Menu.
          All previous versions actually were called 1.00 by default.  We
          should have called them something else but unfortunately that
          can't be changed now.  Version 0.90 shows a later date on the
          Version Menu than any other ETS flash distributed to this point.

          There is one known bug in version 0.90: If you download a
          terminal that is out of service that download will start over
          as soon as it completes - looping forever.  The workaround
          is to put the terminal in service before downloading or while
          the current download attempt is in progress.

10-18-95: Version 1.01 created.

10-25-95: Still version 1.01 - fixed the corrupted PROGDUX*.EXE files.

...       For all other versions, see the boxes below that delineate the
          set of changes for each version.


Change History for Flash:
-------------------------
Below is a list of changes made to the 7524 ETS flash starting in June 1995.
Some changes are fixes to problems and others are new features.  The changes
apply to all the different models of the 7524:

6-4-95:   Terminal now kept in the same service state (in or out of) when
          powered off and on.

6-9-95:   Added support for the CFR APIs QueryTransactionCnt and
          SendTransaction.  Here are the prototypes:

            VOID  QueryTransactionCnt(PUSHORT numtxtns, PUSHORT numfree);
            INT   SendTransaction (VOID);

          QueryTransactionCnt() allows you to find out how many transactions
          are currently in the terminal's queue and how many additional
          transactions can be added to the queue.  All 7524 terminals have a
          capacity of 736 transactions regardless of what size was specified
          for the transaction buffer in the General Parameters configuration.

          SendTransaction() is just like the 7526 API of the same name; it
          sends the current contents of the transaction buffer to the host as
          a transaction, adding the current transaction ID, time stamp and
          sequence number.

6-15-95:  Fixed bug where out of service terminal would request a download
          even after a download had successfully completed.

6-16-95:  Adjustments made to keyboard and menus to accommodate the 7524-5X
          terminals (Norand 11X0).

......... A new TXTN COUNT screen was added to allow user to view
          how many transactions are stored and how much space is left.  The
          batch terminal jumps to this screen when the communications trigger
          is activated (key trigger and power trigger only).

......... The VERSION INFO screen has been moved down one level.  The option
          on the main menu has been replaced by INFO/STATUS.  Selecting this
          new option brings up the INFO/STATUS screen from which you can choose
          to go to the VERSION INFO screen or the TXTN COUNT screen.

......... A log of RF communications can now be sent to the screen and/or
          RS-232 port by pressing 1 (screen only), 2 (RS-232 port), or
          3 (both) from the VERSION INFO screen.  Only one screen's worth
          of data can be viewed on the screen.  The last 128 messages can
          be sent out the RS-232 port.

......... For batch terminal, fixed bug where it took too long to read data
          from the host on the RS-232 port.

8-8-95:   Added support for the CFR API AliasTransID.  Has the following
          prototype:

            INT   AliasTransID (UCHAR NewId);

          AliasTransID() is used to change the transaction ID field of the
          current transaction.  Valid values are 1 through 255.  This works
          the same as it does in 7526 and 7527 CFRs.

8-10-95:  Cleaned up CFRAPI24.H

8-11-95:  Fix to lockup of communications in SST terminals.  Terminal could
          get in state where it could receive messages but could not
          transmit them.  Powering terminal off and on fixed the condition -
          until the next occurrence.

......... Minor problem remains: When address of terminal is first set, the
          terminal is unable to communicate.  It must be powered off and
          on first.  After that communication is fine.

8-15-95:  Remote validation cleaned up.  It now handles the case where a
          validation request is made to a validation file that is being
          downloaded (batch terminal only).

......... The batch terminal can now handle downloads of validation files
          while the terminal is in service.

8-16-95:  Interactive/buffered mode has now been implemented.  Also
          cleaned up timeouts in interactive mode.

......... Terminal will now handle host CMD 0 properly by erasing all of its
          files while maintaining the address and other menu parameters.

......... Terminal now properly determines if it needs a download when
          it is powered on.  If terminal was powered off in the middle
          of a complete load, a CFR load or validation file load, the
          terminal recognizes that it does not have a valid set of files.

8-17-95:  Several annunciators (battery status, carrier loss) are now
          updated with every screen refresh.  Before they were only
          updated when some external event happened (host message
          received, key pressed or bar code scanned).

......... Backlight timer can now be adjusted only in 5 second increments.

......... Timers are now more accurate.

8-18-95:  Three warning levels for battery power are now given.  The
          actual time left at each warning level can vary considerably
          depending on the age and condition of the battery.  Very roughly
          level 3 indicates 15-20 minutes of power left, level 2 indicates
          10-15 minutes and level 1 indicates 5-10 minutes.  I must emphasize
          again that these times can vary greatly because determining battery
          life is a very inexact science. The symbol for these 3 levels are a
          plus sign and the number 3, 2 or 1.

          When the terminal is first powered on, it will be at least 5 minutes
          before the terminal will show any of the 3 warning level states -
          even if the battery is relatively low.

......... The transaction program command :I (set buffering mode for
          current transaction) is no longer allowed when the terminal is
          configured to be in interactive/buffered mode.

......... Error transactions now generated for host timeout during remote
          validation or while waiting for an interactive response.

8-23-95:  Added Alias String support (file B).  This includes allowing
          PF Keys for input of strings during a READ command as well as
          allowing the PF and Touch Point strings to be used as the
          source for APND, SEND and SHOW commands and as the target of
          the APND and CLRD commands.

......... Version menu now shows time of the last code build - regardless
          of which source module was changed.  Removed some extra beeps
          and clicks in the menus where beep and click parameters are set.

......... Cancelling a transaction while waiting for remote validation
          response or interactive response now works properly.

8-24-95:  When an input field fills up, the cursor now stays in the last
          position of the field rather than ending up one position past
          the field.  This emulates what a 7527 does.

8-30-95:  Added RF test to menus for Norand to verify radio units are working.

......... The CFR API RtcGetAsciiDate now handles the formats that include
          Julian days.

9-5-95:   Changes to RF test so that it does not affect the radio parameters
          that are preserved through a cycle of the power.

9-7-95:   Found that the '^' character was not properly being encoded in
          messages sent from the terminal.  This would cause a bad checksum
          at the PC because the '^' is a control character which should be
          followed by another '^' or by a two byte hex value.  The probability
          of this occurring was very slim.  The only place I could see is
          the response to an MB (initialize CFR) command.

......... Found that with the shift state not locked, transactions could not
          be started.  The shift lock state no longer has an effect in the idle
          state or in the menus.

9-14-95:  A dyslexic typo caused Code 93 to operate as Code 39 instead.

9-15-95:  SST problem regarding no communication after initial setting of
          address has been fixed.  Minor problem remains: communications
          lock up and can't get back into menus when address is changed to
          another address.  Terminal must be powered off and on to fix the
          condition.

10-3-95:  Corrected title for INFO/STATUS screen to match menu option; used
          to say STATUS/INFO.

10-3-95:  ComRead, ComQuery and some other Com???? APIs have not yet been
          implemented.  Reads cannot yet be done on the RS-232 port from
          the CFR or from transaction programs.  No plan to implement in
          the near future unless demand arises.

10-5-95:  Changed the title for the Main Menu to also show the current
          terminal address.  Now you don't have to go any further into
          the menus to find out the address.

10-16-95: The cursor type is now preserved when the menus are shown so that
          it can be restored when the menus are exited.

10-26-95: Fixed SEND (:W) so that it acknowledged changes to the transaction
          ID done by an AKA (;A) command or the CFR API AliasTransID.

......... Changed the default RF Power Timer setting to 60 seconds (was 8).

......... Fixed problem where the SenRead CFR API was returning the wrong
          bar code type values.

11-03-95: The 10-26-95 fix for SEND (:W) and AKA (;A) did not fully fix
          the transaction ID processing.  The GOTO (:G) and ONKEY (:Z)
          commands were not working right either.  They now change the
          transaction ID if they jump to another program - unless an
          AKA command (or AliasTransID CFR call) was issued in the
          program.  After any AKA or AliasTransID call, GOTOs and ONKEYs
          no longer change the transaction ID for the current transaction
          program execution.  This behavior emulates what a 7527 does.

12-21-95: Added a 'Save Config' option to the menus.  This option causes
          the terminal configuration (those things you can change through
          the menus) to be saved to flash memory.  In the event the terminal
          is powered on and it determines the RAM memory has been erased, it
          will automatically restore from flash memory the latest
          configuration that was saved to it.  The Reset Parms option does
          not affect the saved flash.  However when the terminal is powered
          on after the parameters have been reset, the terminal does not
          read any saved configurations from flash memory; all parameters
          remain initialized.

......... Added the ability for the terminal to request a time update so
          that it could guarantee the terminal clock's accuracy to within
          7 seconds.  A version of DCXRFOS2.EXE dated 12-21-95 or later
          is required in order to take advantage of this change to the
          terminal.  However, the terminal will still perform time synchs
          as before, if an older version of DCXRFOS2.EXE is installed.

4-23-95:  The resend timer now is affected by the receipt of the CMD K
          (transaction release command) rather than by the ACK that is
          send in response to the transaction.

......... The setting of the non-prompt message display time to 0 was not
          implemented correctly.  It now works properly whether set from
          the General Parameters or from a CFR.

......... For READ commands where numeric input only was specified for
          sensor or RS-232 reads, the terminal was not disregarding
          non-numeric data.

......... Fixed problem where message text was being put into transaction
          if a particular message could not be found.  Now the
          transaction program is aborted - just like a 7527 would do.

......... Code for processing Code 39 bar codes was not properly handling
          the Check Digit Y/N setting in the bar code configuration of
          General Parameters.

......... The 'waiting for host' type messages shown for interactive
          transactions and remote validation requests are now disabled if
          the good transaction message has been disabled.  This is how a
          7527 operates.

......... A timeout on remote validation used to always abort the transaction.
          It now follows the SKIP_IF_ABSENT or SKIP_IF_PRESENT paths if
          they were selected for the READ/VRFY.

......... A calculation in a timer truncated the seconds value to 0 in one
          case.  This was a harmless case.

6-7-96:   Several fixes made for mode 2 CFRs: status is now set to OK for an
          A1 command before the CFR is called.  CallKeyDef no longer causes
          scanner to be turned off.  CallKeyDef also now actually processes
          the steps in a transaction program (it used to return without
          doing anything).

......... CFR was not being called on power up - it is now.

......... Buffer for CFR parameters as passed by a CCFR command had prior
          CCFR's contents after the end of the current command's string.  We
          now clean out the buffer before putting in the current string -
          for every CCFR call.  While this was not a bug, it can eliminate
          some potential CFR problems processing the command line string.

......... Added sending of confirmation to A1X command - a DC3 character on
          the X channel - if no transaction or load request is returned.
          This in conjunction with the retry of the A1X that will be in
          DCC/2 1.11, will better ensure a terminal does not get stuck with
          transaction in it waiting for DCC/2 to tell it to send the next
          one.

9-19-96:  Added automatic shutdown when the battery level reaches a certain
          level.  By default this is now warning level 3.  However, a menu
          option has been added so that this can be changed.

          The new menu option POWER WARNING is on the RF/RS-232 PARAMETERS
          menu.  Use it to set the automatic shut off to occur at warning
          level 3, 2 or 1.  It can also be turned off so that the terminal
          only does an automatic power off as it did before - when you got
          the +/- icon.

......... Can now show sub-version levels (e.g. 1.09a, 1.09b).  Show ADK
          level that code was built with.

......... Created 37-key versions of 7524-10X models - although they aren't
          yet generally available.

......... Redid serial port support based on requirements of new ADK.  Batch
          terminal communications should now be more reliable.

1-27-97:  Added new API GetTerminalAddress().  This works similar to the
          7526 CFR API of the same name.  The prototype is:

            extern INT far cdecl GetTerminalAddress(PUCHAR AddressBuffer);

          If you don't have the latest CFRAPI24.H that includes this prototype,
          you could add the above line.

          The address that comes back is a null-terminated string:

          - For RF terminals, you get a value from "0" - "126".
          - For batch terminals, you get a value from "A" - "Y" or "0" - "6".

......... Added the 128/EAN option to the 128 bar code configuration.  This is
          enabled only when 128 is selected.  This may actually have no effect
          based on the results of our tests: we could read 128/EAN using the
          integrated scanner prior to making this change.  However, with a
          tethered scanner in wand emulation mode we could not read 128/EAN bar
          codes before or after the change.  We could read regular 128 bar
          codes with the tethered scanner before and after the change.

......... Fixed bug where terminal would get hung up if it received a reset
          command (CMD 0).  Terminal now responds with a DC1 to a poll if it
          requires a download - even the RF flashes.

......... POWER WARNING option changed to bring up a menu with two options.
          The first option lets you set the level at which the warning will
          occur: 3, 2, 1 or OFF.  The second option lets you decide what
          happens after the warning occurs.  You can choose to have the
          terminal powered off automatically (the default) or you can choose
          to leave the terminal powered on showing the warning message.

          Leaving the terminal on showing the message allows terminal users
          to get an explicit message that the battery is low - rather than
          relying on seeing the tiny icon on the right or hearing the beeps
          that occur when the warning first occurs.  When the warning
          message is showing the user can't do anything with the terminal
          except turn it off - at which time they should change the battery.

----------------------------------------------------------------------------
End of changes in version 1.09B version of product (January 1997).
----------------------------------------------------------------------------

1-31-97:  Added two new options to the INFO/STATUS menu:

          3) TRACE LOG
          4) DUMP MEMORY

          Option 3 lets you view the last series of messages to/from the
          terminal.  You can send the output to the screen to the RS-232
          port or both.  If going to the RS-232 port, the receiving
          device must be configured as 19200,N,8,1.  The function for this
          option was in the terminal for a while - just not documented.

          Option 4 lets you view the contents of any of the files that have
          been downloaded to the terminal.  Like the previous option, output
          can go to the screen, RS-232 port or both.

          As you view the contents of a particular file, the bottom of the
          screen shows the position in the file of the first byte that is
          visibile on the screen.  The total number of bytes in the file is
          also shown.

          Use the Enter key to move from screen to screen.  Use the Backspace
          key to stop viewing in the middle of a file.

......... Added new API GetPowerStatus which returns the status of the
          terminal battery as reported by the hardware.  You'll need the
          latest CFRAPI24.H and CFRAPI24.LIB to make use of this API.  The
          CFRAPI24.H has a bunch of new constants in the form POWER_????
          which are the possible power states you can have.

......... Added ability edit the power warning message from the POWER WARNING
          menu.  Two options were added to accomplish this:

          3) VIEW MESSAGE
          4) EDIT MESSAGE

          You can change the title of the warning screen and have up to 6
          lines of text.

          Option 3, as you might expect, let's you see the full screen as the
          terminal would see it.  (The <> at the bottom is not
          part of what the terminal user would see.

          Option 4 lets you change the warning screen line by line, starting
          with the title.  You simply use the backspace key to delete
          characters as necessary and then type in the new message.

----------------------------------------------------------------------------
End of changes in version 1.09C version of product (January 1997).
----------------------------------------------------------------------------

2-02-97:  Fixed bug in GetPowerState API - (had not yet tested in in previous
          release).

......... Added ability to generate in terminal any ASCII character with a
          value from 32-255 - when entering the power warning message.  This
          is done by pressing the tab or backtab key and then entering the
          ASCII value.

......... Power warning message will now come up in the lowest battery state
          (where the terminal will power itself off in 2 minutes
          automatically).

......... Cursor type in menus and in transaction programs were somewhat
          interlated before.  These should now be independent.

......... Fixed problem with batch terminal RS-232 communications.  Incoming
          messages were not being serviced quick enough - which could cause
          frequent failed downloads and other communications problems.

----------------------------------------------------------------------------
End of changes in version 1.09D version of product (February 1997).
----------------------------------------------------------------------------

2-6-97:   When code was built with Norand's ADK version 4.42 we lost the
          ability to properly display ASCII characters with values > 127.
          A different procedure is required with the new ADK.  This version
          of flash uses that new procedure.

----------------------------------------------------------------------------
End of changes in version 1.09E version of product (February 1997).
----------------------------------------------------------------------------

2-10-97:  DISPLAY PARMS option now replaces the DISPLAY SIZES option from
          the SYSTEM MENU.  This option brings up the DISPLAY PARMS menu
          which has the following options:

          1) DISPLAY SIZES (formerly on SYSTEM MENU)
          2) STATUS ROW 20 / STATUS BOTTOM / STATUS TOP
          3) STATUS TEXT
          4) RETURN

          Option 2 is new and allows you to specify which row status messages
          such as 'Waiting for files', 'Out of service', 'Waiting for host
          response', ... should be displayed.  The choices are ROW 20 - how
          it always worked before, STATUS TOP - row 1, STATUS BOTTOM - the
          last row of the physical screen.  For the last option, if your
          screen size was configured to be 17x10 the status row would be
          row 10.

          Option 3 allows you to change the text for some of the status
          messages.  At this time there are 2:

          - Waiting for files
          - Buffer full:

          On the edit screen that comes up you'll be shown each message as
          it is - one at a time - and be given the opportunity to change it.
          The length of the message depends on your currently configured
          DISPLAY SIZE.  If you need to generate a character in the message
          that is not available on the terminal keyboard, use the tab or
          backtab key and then enter a value from 32-255 for the ASCII
          character.

----------------------------------------------------------------------------
End of changes in version 1.09F version of product (February 1997).
----------------------------------------------------------------------------

3-13-97:  Fixed a bug in the serial port parameter initialization code done
          when the terminal is put into service.  Memory corruption resulted
          from this bug.  In batch terminals this could cause the download to
          fail at the very end when the terminal was being put into service.

          There were probably other side effects in other flashes that we
          were not specifically aware of.

4-4-97:   Idle screen did not show if the first row of the idle screen was
          blank.  This has been fixed.

......... PC versions of code did not properly set the time.

----------------------------------------------------------------------------
End of changes in version 1.10 version of product (April 1997).
----------------------------------------------------------------------------

6-3-97:   Fixed problem with AKA command setting the transaction ID for
          values greater than 159 decimal.  The first digit of the hex
          translation of the ID was being set to : ; < = > ? instead of
          A B C D E F respectively.

8-11-97:  Number of user variables has now been increased to 100 (0-99).
          The new user variables (20-99) act just like user variables 10-19
          which are 'global'.  'Global' user variables retain their values
          across transactions and downloads and can be set from the PC.

........  Added support for extra parameters on the APND command.  These
          are the source field qualifier.  They could indicate a particular
          position and length for the source that should be appended.  Or
          they could indicate a field number.  If the latter, the delimiter
          character is also specified.

9-5-97:   Fixed problem characterized by terminal failing download if that
          download took less than 20 seconds from the time the terminal
          was powered on (very rare occurrence).  If the opening screen was
          not cleared by the time the download was about to end, the last
          step of the download would fail.

......... Also fixed handling of cursor positioning at the end of a full
          input field that was positioned at the end of a row.

9-10-97:  Cleaned up the operation of some of the entry fields in the menus.
          In particular, the use of the backspace key is now consistent.

......... Fixed bug with truck mounts in trying to display annunciators.  In
          fact, the flash would not even come up at all.

10-1-97:  2.4 GHZ versions now available; the models are 7524-054, 7524-104
          and 7524-204.

10-15-97: Removed HELP_KEY from CFRAPI24.H because it conflicts with constant
          of the same name in a windows header file.

......... Added 'PF Mapping' feature which can be turned on or of from the
          menus.  PF Mapping is the ability to use the numeric keys 1-9 and 0
          in place of PF1-PF9 and PF10 respectively to start a program bound
          to PF1-PF10 or when in an ONKEY statement that is looking for PF1-
          PF10.

          The numeric keys are much larger than the PF keys and do not require
          shifting.

          To turn on PF Mapping in the menus, choose SYSTEM SETUP from the
          MAIN MENU and enter the password.  Then choose DISPLAY/KEYS (which
          was formerly called DISPLAY PARMS).  Option 4 on the DISPLAY/KEYS
          menu defaults to PF MAPPING OFF.  Pressing 4 repeatedly will toggle
          this setting between ON and OFF.

10-24-97: If the terminal is put out of service while an ONKEY command is
          waiting for a key press, the ONKEY command - and the transaction
          program - is now aborted.  Before the ONKEY would keep waiting and
          the download would not complete properly.

----------------------------------------------------------------------------
End of changes in version 1.11A version of product (November 1997).
----------------------------------------------------------------------------

1-28-98:  - Selection of status row in menus now includes choices for all
            rows in the range 1-20 as well as the original TOP and BOTTOM
            choices.  Fixed bug that occurred when BOTTOM was selected for
            the status row and the current dimension settings had a row
            greater than 20.

........  - Added support for GOSUB (:GS), ONSUB (:ZS) and RETURN (;R)
            commands.  Subroutines can be nested up to 50 levels deep.

........  - During downloads, the status line will now show which file
            is being created or loaded (0-9, A-E).  When loading files, a
            block count is also displayed.

........  - During ONKEY commands, if the CAPS lock had been turned off,
            selecting lower case letters would not work.  It does now.

........  - When using the RESET PARMS option from the menus, you will
            now be asked if saved parameters should be restored after the
            reset - but only if parameters had been saved since the last
            flash load.

----------------------------------------------------------------------------
End of changes in version 1.11D version of product (February 1998).
----------------------------------------------------------------------------

2-10-98:  - Previous changes made for emulator had broken the setting of the
            cursor type for 7524 flashes.  That's been fixed.

3-03-98:  - Fixed problem with subroutines: was using transaction ID instead
            of current program ID - so if actual transaction ID ever differed
            from the current program ID due to a GOTO or ONKEY or AKA, RETURN
            would go to the wrong program.

----------------------------------------------------------------------------
End of changes in version 1.11E version of product (March 1998).
----------------------------------------------------------------------------

4-07-98:  - Added support for 9.02 OWL Norand 'Falcon' devices: 1160, 1760 and
            5960 plus their counterparts with integrated scanners.  The 37-key
            versions of both the 1760 and the 1780 (IBM 7524-104S) are now
            also supported.

4-08-98:  - Changed the behavior of the scanner during idle mode and during
            input.  During idle mode, the scanner is now off unless a program
            is bound to function 29 (badge-init no fast clocking) or unless
            fast clocking is active.  In addition, during data entry
            (e.g. READ command) where both keyboard input and sensor input is
            allowed, if any data is in the input field, the scanner is
            turned off.  If you then clear that data, the scanner is reenabled.

----------------------------------------------------------------------------
End of changes in version 1.11F version of product (April 1998).
----------------------------------------------------------------------------

4-29-98:  - The WaitEvent() call from a CFR no longer blocks if keystrokes
            are waiting in the keyboard buffer.

4-29-98:  - All 7524-10x models (and the Norand 17xx equivalents) now support
            the 16 rows x 31 column display mode.

----------------------------------------------------------------------------
End of changes in version 1.20A version of product (May 1998).
----------------------------------------------------------------------------

5-16-98:  - Added support for the CFR API ComRead().  The prototype for this
            API is the same as it is for 7526 and 7527 terminals:

              USHORT FAR ComRead(UCHAR port_num, USHORT buflen, PUCHAR bufptr,
                                 PUSHORT xfercnt);

            where: 'port_num' Should always be set to RS232
                   'buflen'   Indicates the maximum number of bytes that should
                              be returned by the call.  ComRead() will not wait
                              for this number to be available; it returns
                              immediately with as many bytes as are available
                              up to this value.
                   'bufptr'   Is the pointer to the buffer in which the data
                              should be copied.  This buffer should be at least
                              as big as the 'buflen' value.
                   'xfercnt'  Is the number of bytes that are actually copied
                              into the buffer when the call completes.  This
                              value will only be set if the return code for
                              the API is E_OK.

            The possible return codes are:

            E_OK      - At least 1 byte of data was copied to the buffer; check
                        'xfercnt' to get the actual number copied.
            E_NO_DATA - no data was available to return
            E_PARAM   - The 'port_num' parameter was not set to RS232
            E_DEVICE  - An error occurred with the serial port device.  It may
                        already be in use (perhaps for communicating to data
                        collection server).


            The ComRead() API will return whatever data is currently available
            in the ETS serial input buffer - up to the length specified on the
            call.  It does not strip any characters or make use of the header
            or trailer string that may be defined.  Whatever comes in the port
            is returned by the API.

            If the 1024 byte buffer overflows, the oldest bytes are thrown
            away.

            The ComRead call should be used in conjunction with the WaitEvent
            call to maximize processor efficiency.  The WaitEvent call will
            unblock when data is received on the serial port.  The code below
            illustrates the use of WaitEvent with ComRead.  This code is for
            a CFR call to get a message which is terminated by a carriage
            return character.  The data received is put into user variable 1 -
            without the carriage return character.  For simplicity, error
            checking code is not included in this example.  We also assume
            no null characters are received.


            #define BUFF_SIZE 128
            #define TRUE      1
            #define FALSE     0

            char inBuffer[BUFF_SIZE + 1];

            int main(USHORT code, UCHAR far * params)
             {
              USHORT xfercnt;
              USHORT rc;

              switch (code)
               {
                case 0:
                case 2:
                  rc = ComSetParams(RS232, BAUD_19200 | PARITY_NONE |
                                           STOPBITS_1 | DATABITS_8);
                  /* Check return code */
                  break;

                case 3:
                 {
                  int    done      = FALSE;
                  int    quit      = FALSE;
                  int    nextWrite = 0;
                  int    lastCheck = 0;
                  USHORT key       = 0;

                  while (!done && !quit)
                   {
                    if (ComRead(RS232, BUFF_SIZE - nextWrite,
                                &inBuffer[nextWrite], &xfercnt) == E_OK)
                     {
                      nextWrite += xfercnt;

                      while (lastCheck < nextWrite)
                       {
                        if (inBuffer[lastCheck] == 0x0d)
                         {
                          inBuffer[lastCheck] = 0;
                          done = TRUE;
                          break;
                         }
                        lastCheck++;
                       }

                      if (nextWrite == BUFF_SIZE)
                       {
                        /* Handle buffer full */
                       }
                     } /* End if (ComRead returned data) */

                    if (KbdReadAscii(&key) == E_OK)
                      if (key == CANCEL_KEY)
                        quit = TRUE;

                    if (!quit && !done)
                      WaitEvent(1000L);
                   } /* End while (!done & !quit) */

                  if (!quit)
                   {
                    /* Writes up to the null character */
                    ClearUserVariable(1);
                    WriteUserVariable(1, inBuffer);
                   }

                  return (NO_SKIP);
                 } /* End case 3 */
               }   /* End switch */
              return(NO_SKIP);
             }

----------------------------------------------------------------------------
End of changes in version 1.20B version of product (May 1998).
----------------------------------------------------------------------------

9-17-98:  - Fixed bug in local validation where certain kinds of records
            would not be found in the file even though they exist.  If the
            target record (eg. ABCDEF) was preceded by a record that was a
            substring of it that started at the beginning (eg. ABC) then the
            target record would not be found.

9-17-98:  - Changed the response to CMD 3 (report terminal 'microcode' level)
            to return a 4-byte string for the ETS version.  For example,
            level 1.20D would be returned as 120D.  (In DCConnect, the
            TESTTERM.EXE program provides option '15. Report terminal info'
            which among other things, returns the terminal microcode level.)

9-26-98:  - Fixed problem processing transaction programs that contain the
            APNDSTR command (;7) in which the text includes a colon or
            semicolon character (these characters were being misinterpreted
            as command separators in the transaction program).

----------------------------------------------------------------------------
End of changes in version 1.20D version of product (September 1998).
----------------------------------------------------------------------------

9-30-98:  - When in the menus, CFR API calls are no longer suspended.  Prior
            to this change any CFR call that was made while the menus were
            being displayed would not complete until after the menus were
            exited.

----------------------------------------------------------------------------
End of changes in version 1.20E version of product (September 1998).
----------------------------------------------------------------------------

10-15-98: - Fixed fast clocking.  For one thing, swiping a badge during a
            fast clocking interval with no program bound to key ID 30 did not
            cause a transaction to be generated.  Another problem was that the
            idle prompt was not being updated when the switch into or out of
            fast clocking mode occurred during idle times.

10-16-98: - Fixed potential problem of terminal requiring a download and not
            requesting one.  This could happen if the terminal was reset and
            and powered on quickly.  If this is done before the host software
            (e.g. DCConnect) detects that the terminal had even gone away,
            the terminal would be stuck in a state where it thinks it's not
            allowed to send transactions or download requests (the initial
            state). To fix this problem, the terminal will now send a download
            request if it needs one and it receives an 'Are-you-there?'
            message from the host software.

          - Fixed minor problem that would occur if the terminal exhausted all
            available buffers for queued commands - a rare situation.  The
            thread that runs out used to block forever.

----------------------------------------------------------------------------
End of changes in version 1.20F version of product (October 1998).
----------------------------------------------------------------------------

10-27-98: - Fixed communications problem with serial port in batch versions
            of the Norand devices.  This problem was introduced in version
            1.20B - when adding support for the ComRead API.

----------------------------------------------------------------------------
End of changes in version 1.20G version of product (October 1998).
----------------------------------------------------------------------------

12-18-98: - Corrected return code for ComWrite API; it used to return
            E_NO_DATA when data was sent properly and E_OK if no data was
            sent.

----------------------------------------------------------------------------
End of changes in version 1.20H version of product (December 1998).
----------------------------------------------------------------------------

01-28-99: - Better enforcement of scan lengths is now done.  Fixed length
            scans are not accepted unless the length matches exactly.
            Variable length scans are not accepted if the length exceeds the
            maximum - with one exception: the SenRead CFR API will now
            return truncated data and will get a return code of E_SPACE if
            the length of the scan read is longer than the buffer size
            specified.

----------------------------------------------------------------------------
End of changes in version 1.20I version of product (January 1999).
----------------------------------------------------------------------------

04-06-99: - Opening screen and main menu now indicate which Norand model that
            the flash is built for (11xx, 17xx, 59xx).  For batch versions a
            'B' is added to the end.

04-08-99: - Fixed problem with Extended Code 39 bar codes where encoded
            characters were not properly decoded.

04-13-99: - Incorporated new Proxim code for support of the new 2.4 ghz
            Proxim radio (new code supports old radio too).

----------------------------------------------------------------------------
End of changes in version 1.21 version of product (April 1999).
----------------------------------------------------------------------------

04-20-99: - Fixed problem freeing memory when validation files were reloaded
            and a complete reload was not being performed.

----------------------------------------------------------------------------
End of changes in version 1.21A version of product (May 1999).
----------------------------------------------------------------------------

05-21-99: - Fixed problem with allocating and reallocating memory for timers.
            Could cause loss of terminal parameters and files after power off/
            on in batch versions of the flash - if the RS-232 Trigger parameter
            was set to KEY or PWR.

          - Fixed another problem that could lead to parameter/file loss in
            any flash after power off and on.

----------------------------------------------------------------------------
End of changes in version 1.21B version of product (May 1999).
----------------------------------------------------------------------------

07-16-99: - Fixed temporary loss of communication problem that occurs when
            loading large validation files in the serial version.  End-of-
            download processing which converts record separators to NULLs
            was not yielding the processor thus preventing incoming host
            commands from being processed.

----------------------------------------------------------------------------
End of changes in version 1.40A version of product (July 1999).
----------------------------------------------------------------------------

07-23-99: - For the SEND (:W) command, if the target is RS-232 and the
            length of the data being written is 0, message 9053, RS-232
            Length Error' will now be given and the transaction program
            will abort.  In the past 9316 BIOS ComWrite error was given in
            this error situation.

          - Corrected/enhanced the return codes for the following CFR APIs:

            - AliasTransID() now returns RANGE_ERROR, as is documented, instead
              of E_PARAM - if the ID is invalid.
            - ClearUserVariable() now returns RANGE_ERROR if the user variable
              is invalid.  Before no error was given.
            - Validation() now returns FILE_NOT_FOUND if the validation
              file could not be found.  Before RANGE_ERROR was given in
              certain error situations.
            - WaitEvent() will now return TERMINAL_OFFLINE if the terminal
              is put out of service during the call.  This is the same
              behavior as IdleManager().

          - Fixed problem that occurs if you send a transaction from case
            0 or 2 of a CFR.  The code was trying to run some other
            transaction program when the CFR completed resulting in one of
            several possible erroneous messages such as 'invalid parameter'.

----------------------------------------------------------------------------
End of changes in version 1.40B version of product (July 1999).
----------------------------------------------------------------------------

08-16-99: - Terminal is now considered in the transaction state when case 0
            or case 2 of a CFR are run during power on or a change to the in
            service state.  This fixes problem where certain keys were
            not being passed to the CFR in these scenarios.

08-17-99: - Initialization of radio parameters now specifies non-compressed
            mode.  This used to be the default in the radio libraries.  But
            with the new libraries for the new 2.4ghz OWL radio, the default
            changed to compressed so we have to explicitly undo that.

08-27-99: - Fixed the DUMP MEMORY option under INFO/STATUS menu for the
            CFR file (file C).   Before the fix, no file data would be dumped
            even when the CFR was loaded.

----------------------------------------------------------------------------
End of changes in version 1.40C version of product (August 1999).
----------------------------------------------------------------------------