User's Guide: IBM Electronic Journal For 4690 OS, Version 2
User's Guide: IBM Electronic Journal For 4690 OS, Version 2
User's Guide: IBM Electronic Journal For 4690 OS, Version 2
User’s Guide
Note
Before using this information and the product it supports, be sure to read the general information under “Notices” on page v.
iii
iv Electronic Journal User’s Guide
Notices
References in this publication to IBM products, programs, or services do not imply
that IBM intends to make these available in all countries in which IBM operates. Any
reference to an IBM product, program, or service is not intended to state or imply
that only IBM’s product, program, or service may be used. Any functionally
equivalent product, program, or service that does not infringe any of IBM’s
intellectual property rights may be used instead of the IBM product, program, or
service. Evaluation and verification of operation in conjunction with other products,
except those expressly designated by IBM, are the user’s responsibility.
IBM may have patents or pending patent applications covering subject matter in this
document. The furnishing of this document does not give you any license to these
patents. You can send license inquiries, in writing, to the IBM Director of Licensing,
IBM Corporation, North Castle Drive, Armonk, NY 10504-1785, U.S.A.
Trademarks
The following terms are trademarks of IBM Corporation in the United States or other
countries or both:
IBM
Other company, product, and service names, which may be denoted by a double
asterisk (**), may be trademarks or service marks of others.
v
vi Electronic Journal User’s Guide
Chapter 1. IBM Electronic Journal for 4690 OS—overview
This chapter describes the application features, functions, sizing information, offline
operations, system requirements, and installation.
Application features
| The IBM 4690 Electronic Journal for 4690 OS (5697-G45) is designed to provide
| fast access to store level transaction data for the sales audit staff and the store
| manager at the store level.
1
| v Schedule host file daily build
| You can define the schedule for building and compressing the QXLTRANS file.
| You can also specify the time that you want end-of-day tasks to run. You can
| schedule electronic journal end-of-day tasks to minimize interference with other
| end-of-day tasks.
|
Application functions
The IBM 4690 Electronic Journal application provides an electronic journal function
for the register sales application. With the electronic journal function enabled,
instead of printing on the register journal roll, the application captures journal data
at the register and saves it in a store controller file that is unique for that register for
that day. Electronic journal data is immediately available for the review function of
the Electronic Journal once the transaction completes. Journal data is separate
from Transaction Log data maintained by the system.
To review an electronic journal file, select it by date and register number. The
selected journal file can be reviewed in full using a scrolling capability that lets you
move swiftly through the file or, you can use a string search to locate specific items
of interest.
| The Electronic Journal Enhanced LAN Feature changes the specific instance of
| how the Electronic Journal spools journal data when the file server is unavailable.
| Without it, the Electronic Journal spools data to the local store controller when a
| register cannot write directly to the Electronic Journal database on the file server.
| When the register is once more online to the file server, the Electronic Journal has
| responsibility for retrieving the data it wrote to the local store controller and writing
| the data to the proper file on the file server.
| With ELF, a register writes to a Journal Log file that functions much like the
| Transaction Log (TLog) file. An associated background application (QXLELFSV)
| reads the Journal Log data and updates appropriate Electronic Journal files for
| each individual register just as the Checkout Support background application reads
| TLog data and updates accounting files. If the file server is momentarily
| unavailable, the 4690 Operating System (4690 OS) automatically spools the data to
| the local store controller and despools it from the local store controller to the file
| server when it becomes available again. This reduces processing that the Electronic
| Journal application must perform and uses the already existing capabilities of 4690
| OS.
Personalizing registers to use the Electronic Journal uses both Store options
and Terminal options. Store options control where journal data files reside on disk
and how long they stay there. The number of days worth of information kept in
electronic data journal files is a user-specified parameter although there are
practical limitations related to store controller disk drive size. The POS application
Terminal options relate journal options to individual registers. You can specify
default terminal options that apply to all registers unless overridden for an individual
register. These options are described in “Chapter 2. IBM 4690 Electronic
Journal—personalization options” on page 7.
Tailoring the Electronic Journal for your store occurs by responding to a series of
questions that the Electronic Journal displays on tailoring panels. Point-of-sale
(POS) registers are further personalized for electronic journal functions through a
series of panels for both store options and terminal options.
| The first tailoring options select one of four possible environments, which are
| whether the Electronic Journal is being used over a LAN (LAN or no LAN) and
| whether the Enhanced LAN Feature is being used (ELF or no ELF). Further options
| tailor each resulting environment. These options are described in “Chapter 3. IBM
| Electronic Journal for 4690 OS—tailoring options” on page 11.
| The Electronic Journal File Utility, QXLT4690, lets you combine a number of files
| into one file for transmission to a host system. You can compress the individual files
| before combining them to form the output file, thereby reducing the number of
| characters to be transmitted.
| You can initiate collecting individual journal files into a single file in one of three
| ways:
| v The automatic host file build on an Electronic Journal server can automatically
| initiate this function at a time of day you specify in personalization. This option is
| described in “Chapter 2. IBM 4690 Electronic Journal—personalization options”
| on page 7.
| v A user program can initiate this function, for example as part of a store closing
| or end-of-day processing routine.
| v The QXLT4690 command can be executed from the command line or as part of
| a BAT file. Examples of using the command appear in “Chapter 5. IBM Electronic
| Journal for 4690 OS file utility” on page 21.
|
Sizing information
The IBM 4690 Electronic Journal application captures the journal image before it is
printed and saves the ASCII image in the Electronic Journal file. Each register has
a separate electronic journal file for each day of activity. The size of the file is
dependent on how many transactions were performed during the day, and how
many print lines were issued for each transaction.
A simple rule of thumb to determine the size of the file for an average (or peak) day
for a specific register is:
Feet of journal roll used during the day X 72 (lines per foot) X 40 (bytes per line)
This calculation estimates the number of bytes of data to be stored. Multiplying the
result by the number of registers in the store gives the bytes needed per day for
Electronic Journal files.
| Without ELF, if a register is offline to the File Server and the Electronic Journal, the
| Electronic Journal background application, QXLSERVE, is responsible for spooling
| journal data to the local store controller. When the local store controller regains
| access to the File Server (or becomes the File Server), QXLSERVE is responsible
| for despooling local electronic journal transactions into appropriate electronic journal
| files on the File Server.
| The application can record journal data in IBM 4610 printer memory when a
| register is offline to all controllers. The 4610 memory holds the journal information
| until the register is back online. When the register returns to online status,
| transactions in printer memory are sent to the controller at the time specified in the
| C:\EJ\QXLUTIME.DAT file, if present.
| Note: If you have been using QXLUTIME to control unloading stored transactions
| from printer memory and now wish to use the Trickle Transmit feature
| instead, you must delete the QXLUTIME file from your system. Trickle
| Transmit does not function correctly if the QXLUTIME file is present.
| Specify the time in QXLUTIME.DAT in the format HHMM, where HH is the hour
| from 0 - 23, and MM is the minutes from 0 - 59. If this file exists and the data is
| null, the transmission time defaults to 0000, which is midnight.
| You can create QXLUTIME.DAT using an ASCII editor such as DREDIX, which is
| available on the 4690 controller. In an MCF environment, you must cause the file to
| be distributed by selecting distribution type 3 in the 4690 Distributed File Utilities. If
| the file is not distributed and the master file server is offline, the register receives an
| error when attempting to open the file. When this happens, the Electronic Journal
| cannot read whatever time is in the file, which causes it to default to immediate
| transmission of the data.
Other IBM 4690 printers (Models 1 to 4) have a journal station and no internal
memory. In this case, the journal tape is printed automatically when the register is
offline to the store controller. The decision to print or not print on the journal is
made at the end of the transaction. If the register is online when the transaction is
started, but goes offline during the transaction, the complete transaction is printed
on the journal roll for security and audit purposes. If the register comes online
during a transaction, the current transaction is not printed on the register journal roll
because as far as the register is concerned, it is online at the critical time.
System requirements
| The IBM Electronic Journal for 4690 OS executes on both 4680 and 4690 hardware
| platforms.
Operating Systems:
| v IBM 4680 OS, Version 2 5601-192
| v IBM 4680 OS, Version 4 5696-039
v IBM 4690 OS, Version 1 5696-538
| v IBM 4690 OS, Version 2 5639-F53
Applications:
v IBM 4680 Chain Sales Application 5669-212
v IBM 4680 Supermarket Application 5669-032
v IBM 4680 General Sales Application 5669-031
v IBM 4680 Specialty Sales Application 5799-CRC
v IBM 4680-4690 Supermarket Application 5696-536
v IBM 4680-4690 General Sales Application 5696-546
Installation
The README file on the first installation diskette contains information on how to
install the Electronic Journal feature. Print the file and perform the steps indicated to
complete the installation. Be sure to check the installation log for any error
messages and resolve any errors logged.
When you have completed this successfully, follow the instructions in “Chapter 6.
IBM Electronic Journal for 4690 OS integration” on page 23 to incorporate the
required code changes into your POS terminal application.
Personalization options are divided into store options and terminal options. Store
options specify information about journal files. Terminal options specify information
about registers and the type of journals desired. The application uses default
settings if you do not update the options file. Terminal options for register 000
provide defaults for all store registers. Choosing a specific register number
overrides default settings for that particular terminal only.
| From a secondary application menu, select the IBM 4690 Electronic Journal
| Personalization option. The following panel is displayed. F3 is used to exit the
| process.
|
QXLSCREN30 ELECTRONIC JOURNAL PERSONALIZATION
1. Terminal Options
2. Host File Build
3. End of Day
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
After changing options on any panel, press Enter to update the Options file. You
must reload the terminal after changing personalization options to put them into
effect, or wait until the system reloads all terminal options at the beginning of a new
day (usually midnight).
7
Terminal options
| If you pick Terminal Options from the Personalization panel, additional information
| appears on the panel as shown in boldface font in Figure 2.
|
QXLSCREN34 ELECTRONIC JOURNAL PERSONALIZATION
1. Terminal Options
2. Host File Build
3. End of Day
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
| When you select a terminal number and press Enter, the panel shown in Figure 3
| appears.
|
QXLSCREN31 ELECTRONIC JOURNAL TERMINAL OPTIONS
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
Build the QXLTRANS file every day at: ==> 12:34 (HH:MM)
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
1. Terminal Options
2. Host File Build
3. End of Day
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
| End-of-day journal routines run automatically at the specified time. These routines:
| v Erase Journals when the retention period has expired
| v Compress Journals when it is time to do so
| If they do not not run for some reason, the Electronic Journal detects the condition
| and runs the end-of-day routines as soon as possible.
Tailoring options lead you through the process of gathering information that is
important to the Electronic Journal. Tailoring allows the Electronic Journal
application to interface with a wide variety of environments.
| On the command line of the 4690 operating system, type QXLTAYLR and press
| Enter. The TAILOR ELECTRONIC JOURNAL FEATURE panel appears. F3 is used
| to exit the process.
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
11
| Feature, the correct response is Y. This is information that the application uses
| to identify the execution environment and available resources for offline
| conditions.
| Note: This option does not appear if the Do you use ELF? option is Yes.
| Do you use 4610 Printer?
| Default = Y. If all registers have the IBM 4610 printer attached, the correct
| response is Y. In offline conditions, the memory in the 4610 printer is used
| instead of a printed copy of the journal data. Use N if any registers have older
| IBM Model 1 through Model 4 printers attached.
| Do you use Medium Model in your Terminal Sales Application?
| Default = N. This information is used to suggest the appropriate modules to be
| linked together for the terminal sales application with electronic journal.
| Note: It is recommended that you use the Big Memory Model in your POS
| application when doing electronic journaling. Using the Medium Model
| might not provide enough memory in your application data space.
| Maximum Number of lines per Transaction
| Default = 0, which implies no limit. Setting a maximum number of lines to occur
| in any electronic journal transaction allows the program to request the largest
| block of memory that it needs during the day. This is particularly important when
| the terminal application is compiled with the medium memory model. If a
| transaction has more lines than specified in this parameter, it is truncated in the
| journal file.
| When the Do you use ELF? field is Y on the first tailoring panel, the panel shown in
| Figure 7 appears:
|
QXLSCREN52 TAILOR ELECTRONIC JOURNAL: ENHANCED LAN FEATURE (ELF)
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
| You can review selected options before saving them. Error messages point out any
| setting conflicts. To resolve errors or change a value, press F3 to return to the
| previous panel.
| When the Do you use ELF? field is Y on the first TAILOR ELECTRONIC
| JOURNAL FEATURE panel, and all other data entry is complete, a summary panel
| appears that is similar to that shown in Figure 8:
|
QXLSCREN53 TAILOR ELECTRONIC JOURNAL FEATURE WITH ELF
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
| You can review selected options before saving them. Error messages point out any
setting conflicts. To resolve errors or change a value, press F3 to return to the
previous panel.
| When Do you use ELF? = N and Do you use MCF? = N and all other data is
| entered, a summary panel similar to that shown in Figure 10 appears:
| Error messages point out any setting conflicts. F3 lets you change settings. Press
QXLSCREN54 TAILOR ELECTRONIC JOURNAL FEATURE - NO ELF
| When Do you use ELF? = N, Do you use MCF? = Y and all other data is entered, a
| panel similar to that shown in Figure 12 appears:
|
QXLSCREN51 TAILOR ELECTRONIC JOURNAL FEATURE - NO ELF
Control File Session ==> 91 Spool Session ==> 92 DeSpool Session ==> 93
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
If a register is offline to all controllers, the journal for the offline transactions is
written on the paper journal unless the printer is an IBM 4610 printer.
| You can review the selected options. If there is a conflict with any of the choices, an
error message is displayed. From the error message panel, you return to the first
panel in the process.
IBM 4690 Electronic Journal provides a journal review program that makes it easy
to look at the information contained in a journal.
1 Display Journal
2 Print Journal
3 List Journal, by Date
4 List Journal, by Register
F1 F2 F3 QUIT F4 F5
F6 F7 F8 F9 F10
If you know which journal they need to review, they can directly select the journal
by supplying the date and the register number.
If you do not know which register journals are available, selections 3 and 4 provide
this information either by register number or activity date.
You can select either to display the journal or to print a copy on the store controller
printer. If you elect to display the journal, a function key on the displayed report lets
you print a copy after review.
17
Journal list by date
F1 F2 F3 QUIT F4 PRINT F5
F6 F7 F8 F9 REPEAT F10 SEARCH
Note: In the above panel, $JJ:428095 is the ID of the journal being displayed.
Once you select the individual journal for review, the Electronic Journal reads the
journal information and formats the report for display. The following keys facilitate
journal review:
Home Sets the display to show the first line of the report at the top of the panel.
End Sets the display to show the last line of the report at the bottom of the
panel.
PageUp
Moves the displayed report up eighteen lines at a time.
PageDown
Moves the displayed report down eighteen lines at a time.
ArrowUp/Down
Moves the displayed report up or down one line at a time.
If you press F4 while the report is displayed, a copy of the entire journal is sent to
the store controller printer.
If you press F10 to initiate a search, the Basic Journal String Search panel is
displayed.
The % read indicator in the upper right hand portion of the panel shows how much
of the journal has been read into memory. For fast access, only a portion of the
journal is read and displayed. As more of the journal is requested by paging
operations, more of the journal is read. This is a productivity feature.
You can enter a string of characters to match during the search operation. The
character string is not case-sensitive, which means that upper and lowercase letters
are treated the same. Press Enter after keying the character string. The program
then searches for the next occurrence of the string data. The journal display is
refreshed with the matching information shown on the first data line of the display.
By pressing the F9 key, the same search can be repeated multiple times. The
character string is not automatically reset to allow paging through the entire journal.
If the matching condition is not found, END OF FILE REACHED WITHOUT FINDING MATCH
| is displayed.
| Combines all files in the path EJJ:805*.* to form the single file jt805.dat. It does not
| perform compression and does not list files as it adds them to the single file.
| "QXLT4690 -i *.* -o jt805.dat -c -v"
|
| Compresses all files in the path EJJ:805*.* to form the single file jt805.dat. It lists
| each file on the display as it compresses and adds the file to the single file.
21
22 Electronic Journal User’s Guide
Chapter 6. IBM Electronic Journal for 4690 OS integration
IBM 4680/4690 Terminal Applications Overview The IBM 4690 Electronic Journal
Feature must be integrated into your POS terminal application. At appropriate points
in your application you must insert calls to the entry points in the Electronic Journal
Feature. If you use the General Sales Application or the Supermarket Application,
these calls are inserted in your terminal user exits. If you use the Chain Sales
Application, changes to the source are required.
Once you have changed and recompiled the appropriate terminal sales application
modules you must relink your terminal sales application with an Electronic Journal
Link Library.
The Electronic Journal Feature also provides a User Exit module. When you link
your terminal sales application you must include an object module for the User Exit
Module.
The Journal function calls QXLEXIT1, before it adds a line to the electronic journal.
This gives you the opportunity to modify the text before it is saved. If a null string is
returned then this line is not included in the electronic journal.
QXLEXIT1 = PrintLine
FEND
The Journal function calls QXLEXIT2, after it adds a line to the electronic journal
and before it returns to the caller. The purpose of this exit is to allow you to force
the line to be printed on the paper journal regardless of the print option you
selected for this register. The default is to not print the line. If QXLEXIT2 returns
anything other than a null string, then the line of information is printed on the
physical journal. The default QXLEXIT2 code is:
INTEGER*1 GLOBAL PaperOn
FUNCTION QXLEXIT2(PrintLine) PUBLIC
STRING QXLEXIT2, PrintLine
QXLEXIT2 = ""
IF PaperOn THEN QXLEXIT2 = PrintLine
FEND
23
General Sales Application
You may copy these files into your development directory. You must either use
these user exits or integrate their contents into your version of the user exit.
If you do not use the source files provided with the Electronic Journal Feature, do
the following:
1. In module EALTSU06, insert the following code before the FUNCTION
PRINT.EXIT$ statement:
The ’Journal’ function puts the information in the electronic journal, and
determines whether the data needs to be printed on the physical journal. If the
Journal function returns a null, then the data does not need to be printed,
otherwise it does.
4. In the module EALTSU15, insert the lines that appear in bold text.
%ENVIRON T
FEND
5. In the module EALTSU16, insert the lines that appear in bold text. Substitute
the session number that you want the IBM 4690 Electronic Journal to use for
option files.
%ENVIRON T
INTEGER*2 GLOBAL QXL.SESSION
Copy the QXL*.* files from the root subdirectory of the first Integration Diskette into
the ADX_UPGM directory. From the EAL subdirectory copy the correct L86 files
from the chart below depending on memory model and the features that are being
used.
Add to your INP file an entry for QXLEXITS and an entry for the L86 file you have
chosen. Issue the LINK86 command to link your terminal application. Follow this
with a POSTLINK command.
After linking and postlinking, copy the terminal load file to ADX_IPGM and distribute
the file (compound on close) if using a Local Area Network (LAN). This must be
done for all applications.
You may copy these files into your development directory. Either use these J86 files
to compile EAMTSUPC, or integrate the contents of these J86 files into your
versions of these user exits.
Note: You must pass a session number when calling User Exit 7. This session
number is used to open the IBM 4690 Electronic Journal options files at
execution time. Important: Select a session number that is not used
anywhere else in the terminal sales application.
If you do not use the source files provided with the IBM 4690 Electronic Journal, do
the following:
1. In module EAMTSUSU.J86, insert the code:
FUNCTION QXL.TSUPEC01 EXTERNAL
FEND
| Note: You must also add one set of code described in “Insert hooks for the
| Enhanced LAN Feature or for MCF without ELF” to your version of the user
| exits, depending on whether you use the Enhanced LAN feature.
| Insert hooks for the Enhanced LAN Feature or for MCF without ELF
| Insert hooks for the Enhanced LAN Feature
| To use the Enhanced LAN Feature of the Electronic Journal, you must add the user
| exit code described in this section. A directory named EAM on one of the
| Integration diskettes contains the following User Exit modules:
| v EAMTSUSU.J86
| v EAMTSU21.J86
| v EAMTSU53.J86
| You can copy these files into your development directory. Either use these J86 files
| to compile EAMTSUPC, or integrate the contents of these J86 files into your
| versions of these user exits.
| If you do not use the source files provided with the IBM 4690 Electronic Journal, do
| the following:
| 1. In module EAMTSUSU.J86, insert the code:
| FUNCTION QXL.TSUPEC21(PRTLINE) EXTERNAL
| STRING QXL.TSUPEC21, PRTLINE
| FEND
|
| FUNCTION QXL.TSUPEC53 EXTERNAL
| FEND
|
| 2. In module EAMTSU21.J86, insert the code:
| STRING PRTLINE
| INTEGER*1 TRAINING.EXIT
| INTEGER*2 I
| The QXL.TSUPE21 function puts the information in the electronic journal, and
| determines whether the data needs to be printed on the physical journal. If the
| QXL.TSUPE21 function returns a null, then you need not print the data;
| otherwise, you do need to print it.
| 3. In module EAMTSU53.J86, insert the code:
| CALL QXL.TSUPEC53
|
| You can copy these files into your development directory. Either use these J86 files
| to compile EAMTSUPC, or integrate the contents of these J86 files into your
| versions of these user exits.
| If you do not use the source files provided with the IBM 4690 Electronic Journal, do
| the following:
| 1. In module EAMTSUSU.J86, insert the code:
| FUNCTION JOURNAL(PRTLINE) EXTERNAL
| STRING JOURNAL,PRTLINE
| FEND
|
|
| 2. In module EAMTSU21.J86, insert the code:
| STRING PRTLINE
| INTEGER*1 TRAINING.EXIT
| INTEGER*2 I
| The JOURNAL function puts the information in the electronic journal, and
| determines whether the data needs to be printed on the physical journal. If the
| JOURNAL function returns a null, then you need not print the data; otherwise,
| you do need to print it.
Copy the QXL*.* files from the root subdirectory of the first Integration Diskette into
the ADX_UPGM directory. From the EAM subdirectory copy the correct L86 files
from the chart below depending on the memory model and features being used.
Add to your INP file an entry for QXLEXITS and an entry for the L86 file you have
chosen. Issue the LINK86 command to link your terminal application. Follow this
with a POSTLINK command.
After linking and postlinking, copy the terminal load file to ADX_IPGM and distribute
the file (compound on close) if using a Local Area Network (LAN). This must be
done for all applications.
| Compile EAMTSUPC.
Copy the QXL*.* files from the root subdirectory of the first Integration Diskette into
the ADX_UPGM directory. From the EGH subdirectory on the second Integration
Diskette copy the correct L86 files from the chart below depending on the memory
model and features being used.
Add to your INP file an entry for QXLEXITS, or replace the EGHTNOEJ entry with
QXLEXITS (QXLEXITS.LBJ for big memory model), and add an entry for the L86
file you have chosen. Issue the LINK86 command to link your terminal application.
Follow this with a POSTLINK command.
After linking and postlinking, copy the terminal load file to ADX_IPGM and distribute
the file (compound on close) if using a Local Area Network (LAN). This must be
done for all applications.
In all modules that have direct writes to the SJ: session include the following
external reference:
!*****************************************************************
! FUNCTION: Journal
!*****************************************************************
! Prtline is 40 bytes long.
! The first two bytes contain the number of lines to be skipped
! after printing.
! The remaining 38 bytes are the text to be printed
!
! If Journal returns a Null string, then don't print to the
! paper journal, otherwise do.
!*****************************************************************
FUNCTION Journal(PrtLine) EXTERNAL
STRING Journal
STRING PrtLine
FEND
Replace all direct writes to the SJ: with a call to the Journal function. This is an
example of the replacement:
old.code:
gl.temp1$ = "Line of text"
write form "C38A01"; #sess.printsj; gl.temp1$
new.code:
gl.temp1$ = "Line of text"
IF Journal("01" + \ ! ELECTRONIC JOURNAL
GL.temp1$) <> "" THEN \ ! ELECTRONIC JOURNAL
write form "C38A01"; #sess.printsj; gl.temp1$
Changes to EGHTCKOT
In the subroutine TOTAL insert the bold text: (marked with ==>)
SUB TOTAL
INTEGER*2 I
INTEGER*1 W.FCFLAG ! flag for foreign currency !IR85937
INTEGER*4 W.TENDPREV ! save for foreign curr prt !IR85937
INTEGER*4 W.TENDAMT ! foreign amount tendered !IR85937
\!AIR85937
REM*********************************************
REM display foreign currency amount due
REM
W.FOREIGN: ! !IR85937
W.FCFLAG = GL.OFF ! clear foreign currency flag !IR85937
GOTO PD.RETURN
PD.DISCPROG = GL.ON ! don't allow another discount
! to be taken
IF IP.FCODE2 = 62 THEN \ if it's empl. disc get the
BEGIN
IF (SP.SALEFLAG AND 0100H) = 0000H THEN \ !check for auth
BEGIN
CALL ERRMSG(76)
TND.20:
IP.DATA1$ = "2000" ! force 20.00 into kybd buffer
GL.TENDTYP = 1 ! set subscript for cash tender
GOTO TND.OK
TND.10:
IP.DATA1$ = "1000" ! force 10.00 into kybd buffer
GL.TENDTYP = 1 ! set subscript for cash tender
GOTO TND.OK
TND.5:
IP.DATA1$ = "500" ! force 5.00 into kybd buffer
GL.TENDTYP = 1 ! set subscript for cash tender
GOTO TND.OK
TND.1:
IP.DATA1$ = "100" ! force 1.00 into kybd buffer
GL.TENDTYP = 1 ! set subscript for cash tender
GOTO TND.OK
TND.TYP1:
GL.TENDTYP = 1 ! set subscript for tend type 1
GOTO TND.OK
TND.TYP2:
GL.TENDTYP = 2 ! set subscript for tend type 2
GOTO TND.OK
TND.TYP4:
GL.TENDTYP = 4 ! set subscript for tend type 4
GOTO TND.OK
TND.TYP5:
GL.TENDTYP = 5 ! set subscript for tend type 5
GOTO TND.OK
TND.TYP6:
GL.TENDTYP = 6 ! set subscript for tend type 6
GOTO TND.OK
TND.TYP7:
GL.TENDTYP = 7 ! set subscript for tend type 7
GOTO TND.OK
TND.TYP8:
\!AIR85937
IF SO.EXCHRATE <> 0 THEN \ if selected
W.FCFLAG = GL.ON :\ set switch
GOSUB W.CALCFAMT ! calc foreign amt
\!EIR85937
GL.TENDTYP = 8 ! set subscript for tend type 8
TND.OK:
!AIR85937
REM*****************************************
REM if foreign currency flip back to American equivalent
REM*****************************************
IF W.FCFLAG THEN BEGIN
IF GL.TENDAMT = 0 THEN \ if tender amt = 0
IF SO.TENDFLAG(GL.TENDTYP) AND 0040H THEN\ auto bal due allow
GL.TENDAMT = W.SAVEFAMT \ tender amt = tender bal due
ELSE \ else
CALL ERRMSG (52) :\ display zero amount error
GOTO TND.END ! skip to end
W.TENDAMT = GL.TENDAMT ! save amount entered
IF W.SAVEFAMT = W.TENDAMT THEN \
GL.TENDAMT = W.SAVEAAMT \
ELSE \
GL.TENDAMT = ?AMERICAN( W.TENDAMT)
W.SAVEAAMT = GL.TENDAMT
ENDIF
\!EIR85937
!AIR75331
!AIR83961 IF GL.NEGBALDUE = GL.ON THEN !
! GL.BALAMT = GL.BALAMT + GL.TENDAMT !
!EIR83961 ELSE !
GL.BALAMT = GL.BALAMT - GL.TENDAMT !
!EIR75331
! if over-tendered by
\!AIR85937
REM*****************************************
REM if foreign currency print foreign amount due
REM followed by exchange rate
REM*****************************************
IF W.FCFLAG THEN \
BEGIN !
GL.TEMP1I4 = ?FOREIGN(W.TENDPREV)!
IF GL.NEGBALDUE = GL.ON THEN \ if bal due negative
GL.TEMP1I4 = -GL.TEMP1I4
GL.PRTLINE$ = " " + \ build total print line
"FOREIGN CURR TOTAL" + \
REM try to clean it up a little, strip off leading and trailing 0's
FOR GL.TEMP1I2 = 1 TO 2 !
IF LEFT$(GL.TEMP1$,1) = "0" THEN \
GL.TEMP1$ = RIGHT$(GL.TEMP1$,(11-GL.TEMP1I2)) :\
ELSE \
GL.TEMP1I2 = 3 !
NEXT GL.TEMP1I2 !
GL.TEMP2I2 = LEN(GL.TEMP1$) !
FOR GL.TEMP1I2 = GL.TEMP2I2 TO 5 STEP -1
IF RIGHT$(GL.TEMP1$,1) = "0" THEN \
GL.TEMP1$ = LEFT$(GL.TEMP1$,(GL.TEMP1I2 -1)) :\
ELSE \
GL.TEMP1I2 = 3 !set to get out of loop
NEXT GL.TEMP1I2 !
GL.PRTLINE$ = " " + \
GL.TEMP1$ + \ print current exch rate
"EXCHANGE RATE" !
CALL PRINTER (PRD0J1C2) ! print it
ENDIF !
\!EIR8593
IF GL.TENDDUE < 0 THEN \ food stamp tax adjustment
GL.CHANGE = GL.CHANGE + \ add food stamp tax
GL.TENDDUE = 0 ! stop tender processing
\!AIR85937
REM*****************************************
REM if foreign currency flip tender amount to foreign equivalent
REM*****************************************
IF GL.NEGBALDUE = GL.ON THEN \ if bal due is negative
W.TENDAMT = -W.TENDAMT :\ reverse sign on tend amt
W.SAVEAAMT = -W.SAVEAAMT ! reverse sign on tend amt
IF W.FCFLAG THEN \
GL.TENDAMT = W.TENDAMT
\!EIR85937
\!AIR85937
REM*****************************************
REM if foreign currency flip back to Foreign equivalent
REM*****************************************
IF W.FCFLAG THEN \
GL.TENDAMT = W.TENDAMT
\!EIR85937
TND.END:
GL.FSCHANGE = 0 ! clear f/s change filed
WEND
ENDIF \
ELSE \
BEGIN !
CALL TAXCALC (PARMTOTL) ! for tax lines & logging !IR73472
==> !************************************
==> ! ELECTRONIC JOURNAL START
==> !************************************
==> CALL JOURNAL.TOTAL(?FORMAT.AMOUNT$(0))
==> !************************************
==> ! ELECTRONIC JOURNAL STOP
==> !************************************
GL.PRTLINE$ = " " + \ build zero total print line
TD.TDSC$(103) + " " + \
?FORMAT.AMOUNT$(0) !
CALL PRINTER (PRD0J1C2) ! print it
ENDIF !
IF GL.VOIDTOT THEN \ if void totaled
GOTO TOT.END ! skip to end
TOT.END:
EXIT SUB
TND.AMTPROMPT:
GL.AMTPROMPT$ = LEFT$(TD.TDSC$(103),6) + \ build total display
IF GL.NEGBALDUE = GL.ON THEN \ if bal due negative
GL.AMTPROMPT$ = LEFT$(GL.AMTPROMPT$,15) + - !
RETURN
!****************************************************************
! ELECTRONIC JOURNAL STOP
!****************************************************************
In the LWAY.PAYMENT subroutine add the bold text: (marked with ==>)
SUB LWAY.PAYMENT PUBLIC
INTEGER*2 I
!IR80907
IF (IP.FCODE2 = KB.TOTAL) AND \IF TOTAL KEY BUT NOT
(IP.FCODE8 <> KB.VOID) THEN \VOID KEY, DISPLAY
CALL ERRMSG (3) :\ KEYING SEQ ERR MSG
GOTO LWAY.PAY.PROMPT ! AND TRY AGAIN
!IR80907
ELSE \
IF (LWAY.PMT <> LW.PAYMENTS) AND \ if payment not = total pmts
(LWAY.PMT <> 0) THEN \ and not = 0 (cust not pres)
BEGIN !
CALL ERRMSG(84) ! display error
GOTO LWAY.PAY.PROMPT ! try again
ENDIF :\
IF LWAY.PMT = 0 THEN \ if customer not present
LW.FLAGS = LW.FLAGS OR 20H \ set no refund flag on
ELSE \
LWAY.PMT = -LWAY.PMT :\ reverse sign on payment
LW.FLAGS = LW.FLAGS OR 40H ! set refunded flag on
IF LW.INITIAL = 0 THEN \ if initial layaway
GL.TENDPROG = GL.OFF :\NO TAX DELTA IR79818
CALL TAXCALC(PARMTOTL) :\ force taxes to print
GL.TENDPROG = GL.ON :\RESET IND IR79818
GL.TEMP1I4 = GL.BALDUE + \ calculate total
GL.TAX(1) + GL.TAX(2) + \
GL.TAX(3) + GL.TAX(4) + \
END SUB
!****************************************************************
! ELECTRONIC JOURNAL STOP
!****************************************************************
After the open of the journal station insert a call to Journal.Init. The parameter
passed to Journal.Init is a session number that must not be used anywhere else in
the terminal sales application.
OPEN "SJ:" AS SESS.PRINTSJ ! Open journal printer driver
!***************************************************************
! ELECTRONIC JOURNAL START
!***************************************************************
CALL Journal.Init(95)
!***************************************************************
! ELECTRONIC JOURNAL STOP
!***************************************************************
In the SUB RECALL in the END.OF.TRANS routine insert the code that appears in
bold text: (marked with ==>)
END.OF.TRANS:
CALL EXTRACT1(GL.TEMP1$,1,GL.TRANPROG) ! Transaction in progress
CALL EXTRACT1(GL.TEMP1$,2,GL.TRANTYPE) ! Trantype as integer
CALL EXTRACT1(GL.TEMP1$,3,GL.CKOTPROG) ! Checkout in progress
CALL EXTRACT1(GL.TEMP1$,4,GL.TOTALED) ! Checkout totaled flag
CALL EXTRACT1(GL.TEMP1$,5,GL.DRWRFLAG) ! Tender open drawer flag
CALL EXTRACT1(GL.TEMP1$,6,GL.TENDPROG) ! Tender in progress flag
CALL EXTRACT1(GL.TEMP1$,7,GL.NEGBALDUE) ! Tender negative bal due flag
CALL EXTRACT1(GL.TEMP1$,8,GL.MOREITEM) ! Item requested in tender state
CALL EXTRACT1(GL.TEMP1$,9,GL.TRAINING) ! Training mode flag
CALL EXTRACT1(GL.TEMP1$,10,GL.REENTRY) ! Reentry mode flag
CALL EXTRACT1(GL.TEMP1$,11,GL.TAXFLAG) ! Checkout tlog tax flag
CALL EXTRACT1(GL.TEMP1$,12,GL.DISFLAG) ! Checkout tlog discount flag
CALL EXTRACT1(GL.TEMP1$,13,GL.TENDTYP) ! Tender type
CALL EXTRACT1(GL.TEMP1$,14,GL.LAYAWAY) ! Layaway in progress flag
CALL EXTRACT4(GL.TEMP1$,15,GL.TEMP1I4) ! Four byte integer work field
CALL EXTRACT4(GL.TEMP1$,19,GL.BALDUE) ! Checkout balance due
CALL EXTRACT4(GL.TEMP1$,23,GL.TENDDUE) ! Tender balance due
CALL EXTRACT4(GL.TEMP1$,27,GL.STAMPTAX(1)) ! Stampable taxable totals
CALL EXTRACT4(GL.TEMP1$,31,GL.STAMPTAX(2)) ! Stampable taxable totals
CALL EXTRACT4(GL.TEMP1$,35,GL.STAMPTAX(3)) ! Stampable taxable totals
CALL EXTRACT4(GL.TEMP1$,39,GL.STAMPTAX(4)) ! Stampable taxable totals
CALL EXTRACT4(GL.TEMP1$,43,GL.STAMPTOT) ! Stampable total
CALL EXTRACT4(GL.TEMP1$,47,GL.TENDSTPTOT) ! Tender stampable total
CALL EXTRACT4(GL.TEMP1$,51,GL.TENDAMT) ! Checkout tender amount
CALL EXTRACT4(GL.TEMP1$,55,GL.CHANGE) ! Cash change
CALL EXTRACT4(GL.TEMP1$,59,GL.FSCHANGE) ! Food stamp change
CALL EXTRACT4(GL.TEMP1$,63,GL.TRANFSCHG) ! Tender trans food stamp change
IF K > 0 THEN \
BEGIN
FOR L = 0 TO K-1
LOOP = TAXARR(L)
GL.TAXFLAG = VAL(UNPACK$(MID$(TL.ARRAY$(LOOP),2,1))) ! flag
GL.TAXM = VAL(UNPACK$(MID$(TL.ARRAY$(LOOP),3,4))) ! tax amount
IF GL.TAXFLAG AND 01H THEN \
GL.TEMP2I1 = 3 \
ELSE \
IF GL.TAXFLAG AND 02H THEN \
GL.TEMP2I1 = 2 \
ELSE \
IF GL.TAXFLAG AND 04H THEN \
GL.TEMP2I1 = 1 \
ELSE \
IF GL.TAXFLAG AND 08H THEN \
GL.TEMP2I1 = 0
IF GL.TAXFLAG AND 010H THEN \
GL.PRTLINE$ = " "+ \ build tax line
TD.TDSC$(149)+" "+ \
?FORMAT.AMOUNT$(GL.TAXM) :\
CALL PRINTER (PRD0J1C1) :\ print it
ELSE \
GL.PRTLINE$ = " "+ \ build tax line
TX.DESC$(GL.TEMP2I1) + \
RIGHT$(?FORMAT.AMOUNT$(GL.TAXM),8) :\
CALL PRINTER (PRD0J1C1) ! print it
NEXT L
ENDIF
GL.TEMP1I4 = GL.BALDUE+ \
GL.TAX(1) + GL.TAX(2)+ \
GL.TAX(3) + GL.TAX(4)+ \
GL.TAXMAN !
==> !************************************
==> ! ELECTRONIC JOURNAL START
==> !************************************
==> CALL JOURNAL.TOTAL(?FORMAT.AMOUNT$(GL.TEMP1I4))
==> !************************************
==> ! ELECTRONIC JOURNAL STOP
==> !************************************
IF I > 0 THEN \
BEGIN
FOR J = 0 TO I-1
LOOP = TENDARR(J)
GL.TENDTYP = VAL(UNPACK$(MID$(TL.ARRAY$(LOOP),2,1))) ! type
GL.TEMP1I1 = VAL(UNPACK$(MID$(TL.ARRAY$(LOOP),3,1))) ! flag
GL.TENDAMT = VAL(UNPACK$(MID$(TL.ARRAY$(LOOP),4,4))) ! amount
IF GL.TEMP1I1 AND 08H THEN \
GL.TENDAMT = -GL.TENDAMT !
DIM TENDARR(0)
DIM TAXARR(0)
GL.INDICAT1 = GL.INDICAT1 AND 0FFFBH ! turn off suspend flg
GL.RECALL = GL.ON
IF GL.TRAINING = GL.OFF THEN \ if not training
DELREC SESS.SD; SD.KEY$ ! delete record from VP file
EXIT SUB
In the PRINTER subroutine add the bold text: (marked with ==>)
SUB PRINTER (PRT.PARM) PUBLIC
INTEGER*1 PRT.DISPFLAG
INTEGER*2 PRT.PARM,PRT.SAVPARM,PRT.TEMPI2
INTEGER*4 PRT.WRKPARM,PRT.TEMPI4
STRING PRT.FORM$,PRT.DISPLAY$
PRT.TESTDI:
PRT.TEMPI4 = GETLONG(SESS.PRINTDI) ! get printer status
IF ((PRT.TEMPI4 AND 00000010H) <> 0) AND \ if doc inserted and
((PRT.TEMPI4 AND 00000020H) = 0) THEN \ di throat closed
GOSUB PRT.RSTDISP :\ restore disp if needed
ELSE \
IF PRT.DISPFLAG = GL.OFF THEN \ first pass only
begin !
TCLOSE SESS.PRINTCR ! wait for all cr prts
WRITE FORM "C38A00"; #SESS.PRINTCR; \ blank print to over-
LEFT$(GL.BLANKS$,38) ! ride tclose problem
ENDIF :\
GOSUB PRT.SAVDISP :\ save disp if needed
GL.DISPLINE$ = "C013 "+TM.TMSG$(13) :\ insert form msg
CALL DISPLAY (1,1,40) :\ display it
WAIT ;500 :\ wait
GOTO PRT.TESTDI ! try again
ENDIF
ELSE \
PRT.TEMPI2 = PRT.SAVPARM AND 0880H :\ test parm for DI and SJ
IF PRT.TEMPI2 = 0880H THEN \ DI and SJ requested
IF GL.PRTFLAG THEN \ direction flag on ?
GL.PRTFLAG = GL.OFF :\ turn it off
GOSUB PRINTSJ :\ do SJ
GOSUB PRINTDI :\ do DI
ELSE \
GL.PRTFLAG = GL.ON :\ turn it on
GOSUB PRINTDI :\ do DI
GOSUB PRINTSJ :\ do SJ
ELSE \
EXIT SUB
PRINTCR:
PRT.WRKPARM = PRT.SAVPARM AND 0007H ! get cr feed bits
IF PRT.WRKPARM = 7 THEN \ if eject (7 feeds)
PRT.WRKPARM = 8 ! need 8 for eject
PRT.FORM$ = "C38A0" + STR$(PRT.WRKPARM) ! format string
WRITE FORM PRT.FORM$; # SESS.PRINTCR; GL.PRTLINE$ ! prt at CR
!AIR81483
IF MONITORING = GL.ON THEN \ if term monitor on
CALL MONITOR ("P",RIGHT$(PRT.FORM$,2)+GL.PRTLINE$) ! write data
!EIR81483
RETURN
PRINTSJ:
PRT.WRKPARM = PRT.SAVPARM AND 0070H ! get sj feed bits
PRT.WRKPARM = SHIFT(PRT.WRKPARM,4) ! shift sj line feeds
IF PRT.WRKPARM = 7 THEN \ if eject (7 feeds)
PRT.WRKPARM = 8 ! need 8 for eject
PRT.FORM$ = "C38A0" + STR$(PRT.WRKPARM) ! format string
==> !**********************************************************
==> ! ELECTRONIC JOURNAL START
==> !**********************************************************
==> IF Journal(RIGHT$("00"+STR$(PRT.WRKPARM),2) + \
==> GL.PRTLINE$) <> THEN \ !
==> WRITE FORM PRT.FORM$; # SESS.PRINTSJ; GL.PRTLINE$ ! prt at SJ
==> !**********************************************************
==> ! ELECTRONIC JOURNAL STOP
==> !**********************************************************
RETURN
PRINTDI:
IF ((PRT.SAVPARM AND 0700H)=0700H) THEN \ if eject requested
BEGIN !
PRT.WRKPARM = 1 ! set 1 line feed
ENDIF \
ELSE \
BEGIN !
PRT.WRKPARM = PRT.SAVPARM AND 0700H ! get di feed bits
PRT.WRKPARM = SHIFT(PRT.WRKPARM,8) ! shift di line feeds
ENDIF !
PRT.FORM$ = "C38A0" + STR$(PRT.WRKPARM) ! format string
WRITE FORM PRT.FORM$; # SESS.PRINTDI; GL.PRTLINE$ ! prt at DI
!AIR81483
IF (MONITORING = GL.ON) AND \ if term monitor on
(GL.CRTODI = GL.ON) THEN \ and document trans
CALL MONITOR ("P",RIGHT$(PRT.FORM$,2)+GL.PRTLINE$) ! write data
!EIR81483
IF ((PRT.SAVPARM AND 0700H)=0700H) THEN \ if eject requested
BEGIN !
GOSUB PRT.EJECT
RETURN
PRT.EJECT:
PRT.TEMPI4 = GETLONG(SESS.PRINTDI) ! get printer status
IF ((PRT.TEMPI4 AND 00000010H) <> 0) THEN \ if doc inserted
IF PRT.DISPFLAG = GL.OFF THEN \ first pass only
begin !
TCLOSE SESS.PRINTDI ! wait for all di prts
PRT.SAVDISP:
IF PRT.DISPFLAG = GL.OFF THEN \ disp not saved ?
LOCATE # SESS.DISPLAY; 1, 1 :\ locate pos 1
READ FORM "C40"; # SESS.DISPLAY; PRT.DISPLAY$:\ read display
LOCATE # SESS.DISPLAY; 1, 1 :\ reset pointer
PRT.DISPFLAG = GL.ON ! set saved on
RETURN
PRT.RSTDISP:
IF PRT.DISPFLAG = GL.ON THEN \ disp saved ?
LOCATE # SESS.DISPLAY; 1, 1 :\ locate pos 1
WRITE FORM C40 ; # SESS.DISPLAY; PRT.DISPLAY$:\ restore disp
PRT.DISPFLAG = GL.OFF ! set saved off
RETURN
END SUB
This is a copy of the HEADER subroutine. Add the lines that are in bold text:
(marked with ==>)
SUB HEADER PUBLIC
IF GL.ENDORSDI = GL.ON THEN \ If request from ENDORSE
GOTO HDR.NOMSG ! skip messages
==> !***********************************************************
==> ! ELECTRONIC JOURNAL START
==> !***********************************************************
==> CALL JOURNAL.HEADER
==> !***********************************************************
==> ! ELECTRONIC JOURNAL STOP
==> !***********************************************************
HDR.NOMSG:
GL.TEMP1$ = UNPACK$(SP.SPID$) ! get s'per id
GL.TEMP1$ = RIGHT$(GL.TEMP1$,GL.SPERLEN) ! sig digits only
GL.TEMP1$ = LEFT$(GL.TEMP1$+GL.BLANKS$,10) ! pad right w/ blanks
GL.TEMP2$ = RIGHT$("00"+STR$(GL.TRANTYPE),2) ! tran type
GL.TEMP3$ = RIGHT$("000"+STR$(GL.TRANSNUM),4)! tran number
GL.TEMP4$ = RIGHT$(GL.TERMNUM$,3) ! terminal number
This is a copy of the TRAILER subroutine. Add the lines that are in bold text:
(marked with ==>)
SUB TRAILER PUBLIC
IF GL.TRAINING = GL.ON THEN \ if training mode
GL.PRTLINE$ = TD.TDSC$(142) :\ get training banner
IF GL.ENDORSDI = GL.ON THEN \ if endorsement request
CALL PRINTER (PRD1J0C0) \ print at di
ELSE \
CALL PRINTER (PRD0J1C2) ! print at sj/cr !AIR71343
TRL.NOMSG:
==> !*******************************************************
==> ! ELECTRONIC JOURNAL START
==> !*******************************************************
==> CALL JOURNAL.TRAILER
==> !*******************************************************
==> ! ELECTRONIC JOURNAL STOP
==> !*******************************************************
END SUB
This is a copy of the INPTWAIT subroutine. Add the lines that are in bold text:
(marked with ==>)
!AIR90602
INTEGER*2 bannering ! 1 = I am bannering
INTEGER*2 ban.inp.state ! input state
INTEGER*2 ban.work ! work field
INTEGER*2 ban.length ! length of banner message
INTEGER*2 ban.msg.pos ! position in the banner I'm at
INTEGER*2 ban.first.pass ! first pass switch
INTEGER*2 ban.steps.per.sec ! steps per second
INTEGER*2 wait.time ! wait time
INTEGER*2 inp.bantime ! banner wait time counter
STRING ban.message$ ! banner message
!EIR90602
INP.LOCKTIME = 0
!AIR90602
REM********************************************************
REM set up for bannering
REM********************************************************
ban.inp.state=inp.state ! save input state
gosub setup.banner ! go setup banner
!EIR90602
INP.WAIT:
GL.ERRCODE$ = GL.NULL$ ! clear error code !IR70452
IF (GL.MSR.INPUT = GL.ON) AND \ if msr input valid and
(GL.MSR.OPEN = GL.ON) THEN \ msr is opened
WAIT SESS.KEYBOARD,SESS.MSR; wait.time \ wait for kybd !CIR90602
ELSE \
WAIT SESS.KEYBOARD; wait.time ! wait for kybd input !CIR90602
GOTO INP.WAIT
INP.MSR.RECD:
GL.ERRCODE$ = GL.NULL$ ! clear error
READ #SESS.MSR; LINE GL.TEMP1$ ! read msr input
IF GL.ERRCODE$ <> GL.NULL$ THEN \ if bad read on msr
LOCKDEV SESS.MSR, PURGE :\ lock msr
UNLOCKDEV SESS.MSR :\ re-unlock msr
GOTO INP.WAIT ! wait again
WRITE FORM "C4,C3"; # SESS.TONE; "1000","1" ! Sound tone
LOCKDEV SESS.MSR, PURGE ! lock msr
INP.KYBD.RECD:
INP.EXIT:
!AIR90602
if bannering=1 then BEGIN \ right state ?
ban.message$="" ! remove string
bannering=0 ! null switch
old.line=gl.ban.line ! set line
old.disp=gl.ban.disp ! set disp
ban.first.pass=1
gosub display.line ! go clear line
ENDIF
!EIR90602
EXIT SUB
!AIR90602
construct.msg:
gl.ban.display$=gl.ban.msg$(gl.msg.to.do) ! get msg
!AIR93603 ban.work=match("|",gl.ban.display$,1) ! find end char
!AIR93603 if ban.work>1 then gl.ban.display$=left$(gl.ban.display$,ban.work-1) ! remove extra
ban.message$=string$(gl.ban.size-1," ")+gl.ban.display$ ! pad with blanks
ban.length=len(ban.message$) ! get message length
ban.message$=ban.message$+left$(gl.ban.display$,gl.ban.size) ! add extra
return
get.next.msg.nmbr:
gl.msg.to.do=gl.msg.to.do+1 ! step to next msg
if gl.msg.to.do>10 then \ past last msg ?
gl.msg.to.do=1 ! yes
if gl.ban.msg$(gl.msg.to.do)="" then begin ! null msg ?
loop.limit=1 ! set loop limit
while gl.ban.msg$(gl.msg.to.do)="" and loop.limit<11 ! loop till non-null found
loop.limit=loop.limit+1 ! count this loop
gl.msg.to.do=gl.msg.to.do+1 ! step to next msg
if gl.msg.to.do>10 then \ past last msg ?
gl.msg.to.do=1 ! yes
wend
endif
return
setup.banner:
wait.time=995 ! preset wait time
ban.steps.per.sec=1 ! preset step rate
bannering=0 ! preset switch
if (gl.ban.on.off = 1) AND \ configed Y AND
(gl.ban.state=ban.inp.state) AND \ right state AND
((ban.inp.state<>6) OR \ not ITEMENT OR
(gl.ckotprog=gl.off)) then BEGIN ! ckeckout not in progress
bannering=1 ! I'm bannering
ban.steps.per.sec=gl.ban.steps.per.sec
wait.time=944/ban.steps.per.sec ! calc wait time
INP.BANTIME = 0 ! clear time field
ban.msg.pos=1 ! position in the banner message
gosub construct.msg ! go construct banner msg
times.displayed=1 ! reset counter
ban.first.pass=1 ! set first pass
ENDIF
gl.msg.changed=0 ! reset switch
return
!AIR70452 The following code was made a Gosub routine for this apar
INP.REUNLOCK:
IF GL.PRIORITY = GL.ON THEN \
UNLOCKDEV SESS.KEYBOARD,IP.MAJOR,PRIORITY \ unlock maj state
ELSE \
GL.TEMP1I4 = GETLONG(SESS.KEYBOARD) :\ get kbd stat !IR70452
IF GL.TEMP1I4 AND 01000000H THEN \ if locked !IR70452
UNLOCKDEV SESS.KEYBOARD,IP.MAJOR ! unlock maj state
RETURN
!EIR70452
END SUB
63
User Response: N/A day’s mega file and is ready to advance to the next
date. QXLELFSV will not advance to the next date until
Programmer Response: N/A
it is certain that all transactions for the current date
have been processed. This means that QXLELFSV is
98 Cannot rename yet->EJL:yyyymmdd unable to contact one or more controllers within the
store network and so cannot be certain that all the
Severity: Informational transactions for that date have been processed. The
Explanation: QXLELFSV has failed in the attempt to QXLELFSV task will wait until it has access to all
rename or erase the journal log file. This condition controllers in its network.
implies that one or more registers have not closed the User Response: N/A
current processing date’s journal log. The QXLELFSV
task will wait until all registers have closed the current Programmer Response: N/A
date’s journal log.
User Response: N/A 130 Awaiting despool...
Programmer Response: N/A Severity: Informational
Explanation: QXLELFSV has reached end of file in a
99 Ready to process->EJL:yyyymmdd day’s mega file and is ready to advance to the next
date. QXLELFSV will not advance to the next date until
Severity: Informational it is certain that all transactions for the current date
Explanation: All processing required to switching have been processed. This message means that the
journal logs has been completed. QXLELFSV is ready QXLELFSV has detected that there are spool files on
to begin processing data for mm/dd/yyyy. one or more of the controllers in the store network
which may contain transactions for the current
User Response: N/A processing date. The QXLELFSV task will wait until all
Programmer Response: N/A spool files have been despooled before proceeding.
User Response: N/A
101, 102 Processing EJL:yyyymmdd Programmer Response: N/A
offset->nnnnn
Severity: Informational 131 Awaiting register closes
Explanation: QXLELFSV is processing a journal log. It Severity: Informational
is currently processing the record that begins at offset
nnnnn in the journal log. Explanation: QXLELFSV has reached end of file in a
day’s mega file and is ready to advance to the next
User Response: N/A date. QXLELFSV will not advance to the next date until
Programmer Response: N/A it is certain that all transactions for the current date
have been processed. This message means that the
QXLELFSV has detected that one or more registers
105, 106 Waiting...EJL:yyyymmdd eof -> nnnnn have not closed the current processing date’s journal
Severity: Informational log. The QXLELFSV task will wait until all registers have
closed the current date’s journal log.
Explanation: QXLELFSV is processing a journal log. It
is has reached the current end of file and is waiting for User Response: N/A
the registers to write more transactions. Programmer Response: N/A
User Response: N/A
Programmer Response: N/A