This script uses LINE OFFSET to repeat one screen line five times, so the operator can enter and scroll through several records on the same screen. It handles the up and down arrows and the page up and page down keys.

LN BTLLINE
SN BTSLINE
DD START-LINE(2.0), SCROLL-FLAG(1)
MAINLINE
OPEN SCREEN BTSLINE
OPEN LINK BTLLINE
PRINT SCREEN BTSLINE
READ BTLLINE USING KEY RANGE FROM FIRST TO LAST
PROCESSING IS DELETE-RECS
INPUT SCREEN BTSLINE PRE PROCESS FIELD1, GET-START-LINE
LET L = 1 !line number or key to each record
LET L1 = 0 !line offset or position for printing
DO LOOP UNTIL TERM-KEY = 4
DO GET-DATA
PRINT SCREEN BTSLINE DATA
LINE OFFSET L1
INPUT SCREEN BTSLINE DATA-NAME FIELD2 LINE OFFSET IS L1
POST PROCESS FIELD2, SCROLL
IF TERM-KEY <> 4 AND SCROLL-FLAG <> "X" THEN
ADD BTLLINE USING KEY STR(L:"00000")
DUPLICATE KEY PROCESS IS DUPE-RECORD
LET L = L + 1
DO CLEAR-DATA
IF L1 < 4 THEN
LET L1 = L1 + 1
ELSE
LET L1 = 0
LET L = L - 4
DO INCREMENT-DATA
ENDIF
ENDIF
LET SCROLL-FLAG = ""
ENDLOOP
SCROLL !what type of scrolling to perform
IF TERM-KEY <> 0 THEN
LET SCROLL-FLAG = "X", BTSLINE.FIELD = 99
ENDIF
IF TERM-KEY = -4 THEN !testing for up arrow
DO CLEAR-DATA
IF L1 > 0 THEN
LET L1 = L1 - 1
ELSE
IF L > 1 THEN
LET L = L - 1
DO INCREMENT-DATA
LET L = L - 3
LET L1 = 0
ENDIF
ENDIF
IF L > 1 THEN
LET L = L - 1
ENDIF
ENDIF
IF TERM-KEY = -3 THEN !testing for down arrow
DO CLEAR-DATA
IF L1 < 4 THEN
LET L1 = L1 + 1
LET L = L + 1
ELSE
LET L1 = 0
LET L = L - 3
DO INCREMENT-DATA
ENDIF
ENDIF
IF TERM-KEY = -17 THEN !testing for page up
PRINT SCREEN BTSLINE DATA CLEAR
IF L1 > 0 THEN
LET N = L1
DO CLEAR-DATA
LET L1 = 0
IF L > 1 THEN
LET L = L - N
ENDIF
ELSE
LET L1 = 0
IF L > 5 THEN
LET L = L - 5
DO INCREMENT-DATA
ELSE
LET L = 1
DO LOOP UNTIL L = 5
DO GET-DATA
DO CLEAR-DATA
LET L = L + 1
LET L1 = L1 + 1
ENDLOOP
ENDIF
ENDIF
ENDIF
IF TERM-KEY = -16 THEN !testing for page down
IF L1 >= 0 THEN
LET L1 = 0
DO INCREMENT-DATA
ENDIF
ENDIF
CLEAR-DATA !clears data from specific fields
PRINT SCREEN BTSLINE CLEAR DATA-NAME LIST FIELD3, FIELD4, FIELD5
LINE OFFSET L1
GET-DATA !setting your key equal to
LET BTLLINE = "", FIELD1 = STR(L:"00000") !a specific line#,reading
READ BTLLINE USING KEY FIELD1 !the file and printing the
PRINT SCREEN BTSLINE DATA-NAME LIST FIELD1, FIELD2 !entire record
LINE OFFSET L1
INCREMENT-DATA !increments the line number and line
DO GET-DATA !offset in order to get the corect
DO CLEAR-DATA !record on the correct line.
DO LOOP UNTIL L1 = 4
LET L1 = L1 + 1
LET L = L + 1
DO GET-DATA
DO CLEAR-DATA
ENDLOOP
GET-START-LINE !sets up for correct line and field positioning
LET START-LINE = BTSLINE.LINE, BTSLINE.FIELD = 99
DELETE-RECS !erase the entire file
DELETE BTLLINE USING KEY FIELD1
DUPE-RECORD !allows you to change data records
LET A$ = BTLLINE
CHANGE BTLLINE USING KEY STR(L:"00000")
PROCESSING IS CHANGE-DATA
CHANGE-DATA !performs the change
LET BTLLINE = A$
ENDSCRIPT !end of program

Notes

  • The script uses screen BTSLINE and link BTLLINE. Each record is keyed by its line number.
  • When it starts, the script deletes every record in BTLLINE (procedure DELETE-RECS), so try it on a test link.
  • Press F4 to end input.

Search tbred.com