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 BTLLINESN BTSLINEDD 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 programNotes
- 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.