'=========================================================================== ' Subject: FILE PAGING DEMO Date: 01-05-96 (00:00) ' Author: Raymond Joh Code: QB, QBasic, PDS ' Origin: Dslayer@gnn.com Packet: DOS.ABC '=========================================================================== '=============================FILE PAGING DEMO=============================== 'RAYMOND JOH 'COMPUTERS SOLUTIONS 'PANAMA CITY,FLA. ' 'THIS PROGRAM IS DESIGNED TO BE AS FLEXIBLE AND USER FRIENDLY AS POSSIBLE. 'THE "USER VARIABLES" SECTION BELOW, ALLOWS YOU PLACE YOUR TEXT TO BE PAGED 'ANYWHERE ON THE SCREEN.BY REMOVING MY SCREEN.GRAPHICS SUB AND PLACING THE 'THE REST OF THIS DEMO IN YOUR PROGRAM,YOU CAN EASILY PAGE ANY FILE. THIS 'EXAMPLE PAGES YOUR C: DRIVE DIRECTORY. ' 'DONATED TO THE PUBLIC DOMAIN 1/05/95 ' DECLARE SUB SCREEN.GRAPHICS (CURPAGE%, TOTALPAGES%, FILESIZE%, DL%, LIN%, LP%, DLI%) DECLARE SUB PAGE.1 (EXAMFILE$(), COUNT%, PAGE%, DL%, LIN%, LP%, DLI%) DECLARE SUB PAGEUP (EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI%) DECLARE SUB PAGEDOWN (EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI%) DECLARE FUNCTION GETKEY% () CONST UPKEY = 72 * 256, DOWNKEY = 80 * 256, PGDN = 81 * 256, PGUP = 73 * 256 CONST ESCAPE = 27 SCREEN 12 'SCREEN MODE OF CHOICE OF AUTHOR ' ' ##################### ' ## USER VARIBLES ## ' ##################### LIN% = 22 'NUMBER OF FILES FOR DISPLAY:CAN BE UP TO 26 DL% = 3 'BEGINNING DISPLAY LINE,ADJUST ACCORDINGLY LP% = 15 'BEGINNING LINE POSITION,ADJUST ACCORDINGLY ' ###################### ' ## CREATE .DAT FILE ## ' ###################### ' SHELL "DIR C:/ON/B>C:\DOS\DATA.DAT" 'OR CREATE YOUR OWN ' ############################### ' ## READ .DAT FILE INTO ARRAY ## ' ############################### DIM EXAMFILE$(1 TO 500) 'DIM ARRAYS OPEN "C:\DOS\DATA.DAT" FOR INPUT AS #1 'OPEN .DAT FILE OPEN "C:\DOS\DOSDATA.DAT" FOR OUTPUT AS #2 'DETERMINE FILE SIZE FILESIZE% = 1 'BY COPYING TO FILE #2 DO LINE INPUT #1, EXAMFILE$(FILESIZE%) PRINT #2, EXAMFILE$(FILESIZE%) FILESIZE% = FILESIZE% + 1 LOOP UNTIL EOF(1) FILESIZE% = FILESIZE% - 1 CLOSE (1) ' ########################## ' ## CALL SCREEN GRAPHICS ## ' ########################## DLI% = DL% 'NOTE INITIAL LINE POSITION TP = FILESIZE% / LIN% 'COUNT TOTAL PAGES CURPAGE% = 1 'BEGINNING PAGE NUMBER IF TP > INT(TP) THEN TOTALPAGES% = INT(TP) + 1 CALL SCREEN.GRAPHICS(CURPAGE%, TOTALPAGES%, FILESIZE%, DL%, LIN%, LP%, DLI%) CALL PAGE.1(EXAMFILE$(), COUNT%, PAGE%, DL%, LIN%, LP%, DLI%) DO KEYIN% = GETKEY% 'INITIATE INKEY% BY CALLING GETKEY% SELECT CASE KEYIN% ' CASE DOWNKEY, PGDN 'DOWN-ARROW OR PGDN PRESSED PAGEDOWN EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI% CASE UPKEY, PGUP 'UP-ARROW OR PGUP PRESSED PAGEUP EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI% CASE ESCAPE 'CASE ESCAPE--->>>GOODBYE CLOSE (2) KILL "C:\DOS\DATA.DAT" KILL "C:\DOS\DOSDATA.DAT" SYSTEM END SELECT LOOP ' ##################### ' ## FUNCTION GETKEY ## ' ##################### ' FUNCTION GETKEY% DO KEYIN$ = INKEY$ LOOP UNTIL LEN(KEYIN$) GETKEY% = CVI(KEYIN$ + CHR$(0)) END FUNCTION ' ######################## ' ## SUB-ROUTINE PAGE.1 ## ' ######################## ' SUB PAGE.1 (EXAMFILE$(), COUNT%, CURPAGE%, DL%, LIN%, LP%, DLI%) FOR N% = 1 TO LIN% COLOR 12: LOCATE DL% + N%, LP% PRINT EXAMFILE$(N%) COUNT% = COUNT% + 1 PAGE% = PAGE% + 1 NEXT N% END SUB ' ########################## ' ## SUB-ROUTINE PAGEDOWN ## ' ########################## ' SUB PAGEDOWN (EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI%) IF CURPAGE% < TOTALPAGES% THEN IF LASTKEY% = 1 THEN COUNT% = COUNT% + LIN% CLS : COLOR 12 CURPAGE% = CURPAGE% + 1 FOR F% = 1 + COUNT% TO COUNT% + LIN% SCREEN.GRAPHICS CURPAGE%, TOTALPAGES%, FILESIZE%, DL%, LIN%, LP%, DLI% LOCATE DL% + (F% - COUNT%), LP%: PRINT EXAMFILE$(F%) NEXT F% LASTKEY% = 0 COUNT% = COUNT% + LIN% END IF END SUB ' ######################## ' ## SUB-ROUTINE PAGEUP ## ' ######################## ' SUB PAGEUP (EXAMFILE$(), FILESIZE%, COUNT%, TOTALPAGES%, CURPAGE%, LASTKEY%, DL%, LIN%, LP%, DLI%) IF CURPAGE% > 1 THEN CLS : COLOR 12 CURPAGE% = CURPAGE% - 1 IF LASTKEY% = 1 THEN COUNT% = COUNT% - LIN% IF LASTKEY% = 0 THEN COUNT% = COUNT% - (2 * LIN%): LASTKEY% = LASTKEY% + 1 SCREEN.GRAPHICS CURPAGE%, TOTALPAGES%, FILESIZE%, DL%, LIN%, LP%, DLI% FOR F% = 1 + COUNT% TO COUNT% + LIN% LOCATE DL% + (F% - COUNT%), LP%: PRINT EXAMFILE$(F%) NEXT F% END IF END SUB ' ################################# ' ## SUB-ROUTINE SCREEN.GRAPHICS ## ' ################################# ' SUB SCREEN.GRAPHICS (CURPAGE%, TOTALPAGES%, FILESIZE%, DL%, LIN%, LP%, DLI%) COLOR 3: LOCATE 2, 33: PRINT " PAGE "; CURPAGE%; "OF"; TOTALPAGES% LINE (50, 36)-(580, 36), 12 LINE (50, 37)-(580, 37), 15 LINE (50, 38)-(580, 38), 7 LOCATE 27, 23: PRINT " OR TO PAGE DOWN" LOCATE 28, 23: PRINT " OR TO PAGE UP" LINE (50, 406)-(580, 406), 12 LINE (50, 407)-(580, 407), 15 LINE (50, 408)-(580, 408), 7 COLOR 15: LOCATE 12, 50: PRINT "TOTAL FILESIZE ="; FILESIZE% LOCATE 13, 45: PRINT "TEXT STARTS ON LINE ="; DLI% LOCATE 14, 47: PRINT "TEXT ENDS ON LINE ="; LIN% + DLI% COLOR 12 END SUB