This is the code for loading a subfile a page at a time written in RPG-ILE.
*************** Beginning of data ************************************* 0001.00 * All "1 page at a time" logic is indicated with a comment that 0002.00 * has !!!!! at the beginning 0003.00 * 0004.00 * Define the subfile and the variable that will hold record # (R EC#) 0005.00 FT400D002 CF E WORKSTN 0006.00 F SFILE(SFDATA:REC#) 0007.00 FCUS01 IF E K DISK 0008.00 * 0009.00 D REC# S 4 0 0010.00 * 0011.00 C DoW *In03 = *off 0012.00 * Show screen for user to enter the salesperson's number 0013.00 C ExFmt ENTSLS 0014.00 C If *In03 = *off 0015.00 * Clear the subfile 0016.00 C ExSr ClearSubFile 0017.00 * !!!!! Start reading the customer file for this salesperson 0018.00 C CUSSLS SetLL CUS01 0019.00 C CUSSLS ReadE CUS01 95 0020.00 * !!!!! Turn off indicator that indicates SFLEND 0021.00 C Eval *In95 = *off 0022.00 * Load the subfile 0023.00 C ExSr LoadSubFile 0024.00 * Show the command key footer and then the subfile SFCTL 0025.00 C Write CMDKEYS 0026.00 C ExFmt SFCTL 0027.00 * !!!!! Loop to continue loading a new page when PAGE-DOWN hit 0028.00 C DoW *In21 = *on 0029.00 C ExSr LoadSubFile 0030.00 C ExFmt SFCTL 0031.00 C EndDo 0032.00 * Process any seleted records 0033.00 C ExSr SelectRecord 0034.00 C EndIf 0035.00 C EndDo 0036.00 C Eval *INLR = *on 0037.00 C Return 0038.00 *--------------------------------------------------------------- 0039.00 C ClearSubFile BEGSR 0040.00 * Clear the subfile by writing a SFCTL record with Indicator 50 0041.00 C Eval *In50 = *off 0042.00 C Write SFCTL 0043.00 C Eval *In50 = *on 0044.00 * Set the record number variable to zero 0045.00 C Eval REC# = *zero 0046.00 C EndSr 0047.00 *-------------------------------------------------------------- 0048.00 C LoadSubFile BEGSR 0049.00 * !!!!! Keep record number for positioning cursor in sub-file 0050.00 C Eval SFLRCD = REC# + 1 0051.00 * !!!!! load 1 page of subfile (DO this # of times = to SFLPAG) 0052.00 C Do 5 0053.00 C Eval REC# = REC# + 1 0054.00 C Write SFDATA 0055.00 C CUSSLS ReadE CUS01 95 0056.00 C If *In95 = *on 0057.00 C Leave 0058.00 C EndIf 0059.00 C EndDo 0060.00 * If subfile is empty, write a record that says "*NO RECORDS" 0061.00 C If REC# = *zero 0062.00 C Eval REC# = REC# + 1 0063.00 C Clear SFDATA 0064.00 C Eval CUSNAM = '*NO RECORDS*' 0065.00 C Write SFDATA 0066.00 C EndIf 0067.00 C EndSr 0068.00 *---------------------------------------------------------------- 0069.00 C SelectRecord BEGSR 0070.00 * Read the changed subfile data records 0071.00 C ReadC SFDATA 96 0072.00 C DoW *In96 = *off 0073.00 C If SEL = 'X' or SEL = '1' 0074.00 * Process the customer 0075.00 * either CHAIN to customer master and EXFMT a display screen 0076.00 * or CALL a program with CUSNUM as a parameter 0077.00 C EndIf 0078.00 C ReadC SFDATA 96 0079.00 C EndDo 0080.00 C EndSr 0081.00 *----------------------------------------------------------------