'=========================================================================== ' Subject: TEXT FILE VIEWER FOR PB/CC Date: 06-27-98 (00:00) ' Author: PowerBASIC, Inc. Code: PBCC ' Origin: ftp.powerbasic.com Packet: PBCC.ABC '=========================================================================== '============================================================================= ' ' Text File Viewer for PowerBASIC Console Compiler ' Copyright (c) 1995-98 by PowerBASIC, Inc. All Rights Reserved. ' ' Supports long filenames and text files of unlimited size. ' '============================================================================= $REGISTER NONE $INCLUDE "WIN32API.INC" $INCLUDE "SCRNIO.INC" '============================================================================ FUNCTION Exist(BYVAL Filenam AS STRING) AS LONG FUNCTION = LEN(DIR$(Filenam)) > 0 END FUNCTION '============================================================================ FUNCTION FileDateTime(BYVAL Filenam AS STRING) AS STRING LOCAL fd AS WIN32_FIND_DATA LOCAL fh AS LONG LOCAL zText AS ASCIIZ * 256 LOCAL st AS SYSTEMTIME LOCAL Temp AS STRING zText = Filenam ' -- Find the file fh = FindFirstFile(zText, fd) IF fh = %INVALID_HANDLE_VALUE THEN EXIT FUNCTION END IF FindClose fh ' -- Convert the file time from UTC to local time FileTimeToLocalFileTime fd.ftLastWriteTime, fd.ftLastWriteTime ' -- Convert the file time into a compatible system time FileTimeToSystemTime fd.ftLastWriteTime, st ' -- Create a date string using the local settings GetDateFormat %LOCALE_USER_DEFAULT, %DATE_SHORTDATE, st, BYVAL %NULL, zText, 256 Temp = zText ' -- Create a time string using the local settings GetTimeFormat %LOCALE_USER_DEFAULT, %TIME_NOSECONDS, st, BYVAL %NULL, zText, 256 ' -- Return the file date and time FUNCTION = Temp + " " + zText END FUNCTION '============================================================================ FUNCTION PbMain() EXPORT AS LONG LOCAL Arrows AS STRING LOCAL CurX AS LONG LOCAL CurY AS LONG LOCAL FileDate AS STRING LOCAL FileName AS STRING LOCAL FileTime AS STRING LOCAL I AS STRING LOCAL Last AS LONG LOCAL Percent AS LONG LOCAL Tmp AS STRING LOCAL Y AS LONG LOCAL hConOut AS LONG LOCAL Rect AS SMALL_RECT LOCAL Char AS CHAR_INFO LOCAL Cord AS COORD hConOut = GETSTDOUT CurY = 1 CurX = 1 Last = 0 Arrows = CHR$(24,25,26,27) Char.Ch = ASC(" ") Char.Attributes = 7 FileName = UCASE$(COMMAND$) PRINT "PBLIST v1.00 - Text file viewer for Win32" PRINT "Copyright (c) 1995-98 by PowerBASIC, Inc. All Rights Reserved." PRINT IF LEN(Filename) = 0 THEN PRINT "Usage: PBLIST filename" PRINT "" PRINT "Long filenames are supported." EXIT FUNCTION ELSEIF INSTR(FileName, ANY "?*") THEN PRINT "Error! Wildcards not supported." EXIT FUNCTION ELSEIF NOT Exist(FileName) THEN PRINT Filename; " not found!" EXIT FUNCTION ELSE FileDate = FileDateTime(Filename) END IF DIM Text(1:35000) AS STRING 'maximum of 35,000 lines of text 'Read the text file into memory OPEN FileName FOR INPUT AS #1 WHILE NOT EOF(1) INCR Last LINE INPUT #1, Text(Last) IF Last = 35000 THEN EXIT DO END IF WEND CLOSE CURSOR OFF QPRINT SCREENY, 1, SPACE$(80), &H1F QPRINT SCREENY, 2, Filename + " - " + FileDate + " ³", &H1F QPRINT SCREENY, 47, " ³ " + Arrows + " PgDn PgUp ³ Esc = Exit", &H1F DO BeginBuffer FOR y = 0 TO SCREENY - 2 Tmp = LEFT$(MID$(Text(CurY + y), CurX, 80) + SPACE$(80), 80) QPRINT y + 1, 1, Tmp, &H07 NEXT y EndBuffer SkipWrite: Percent = (CurY * 100) \ (Last - 23) IF Percent < 0 THEN Percent = 0 ELSEIF Percent > 100 THEN Percent = 100 END IF QPRINT SCREENY, 42, FORMAT$(Percent, "###%"), &H1F I = WAITKEY$ SELECT CASE I CASE CHR$(27) 'ESC EXIT DO CASE CHR$(0, 72) 'Up Arrow IF CurY > 1 THEN DECR CurY Rect.xLeft = 0 Rect.xTop = 0 Rect.xRight = SCREENX - 1 Rect.xBottom = SCREENY - 3 SCROLL UP 1, 1, 1, SCREENY - 1, SCREENX QPRINT 1, 1, LEFT$(MID$(Text(CurY), CurX, 80) + SPACE$(80), 80), &H07 GOTO SkipWrite END IF CASE CHR$(0, 80) 'Down Arrow IF CurY < Last - 22 THEN INCR CurY Rect.xLeft = 0 Rect.xTop = 1 Rect.xRight = SCREENX - 1 Rect.xBottom = SCREENY - 2 SCROLL DOWN 1, 1, 1, SCREENY - 1, SCREENX QPRINT SCREENY - 1, 1, LEFT$(MID$(Text(CurY + SCREENY - 2), CurX, 80) + SPACE$(80), 80), &H07 GOTO SkipWrite END IF CASE CHR$(0, 75) 'Left Arrow IF CurX > 1 THEN CurX = CurX - 4 END IF CASE CHR$(0, 77) 'Right Arrow CurX = CurX + 4 CASE CHR$(0, 73) 'PgUp CurY = CurY - (SCREENY - 2) IF CurY < 1 THEN CurY = 1 END IF CASE CHR$(0, 81) 'PgDn IF CurY + 23 <= Last THEN CurY = CurY + (SCREENY - 2) END IF CASE CHR$(0, 71) 'Home CurY = 1 CASE CHR$(0, 79) 'End CurY = Last - (SCREENY - 3) IF CurY < 1 THEN CurY = 1 END IF END SELECT LOOP QPRINT SCREENY, 1, SPACE$(80), &H07 LOCATE SCREENY - 1, 1 CURSOR ON, 1 END FUNCTION