home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
dispfil3.zip
/
DISPFIL3.COM
/
DISPFILE.CLA
next >
Wrap
Text File
|
1989-11-08
|
15KB
|
487 lines
MEMBER('LF')
DISPFILE PROCEDURE(DISFNAME)
!╔════════════╦════════════════════════════════════════════════════════════════╗
!║ PROGRAM ║ DISPFILE.CLA - LIST FILE TO MONITOR (9-1-88 GREG) ║
!╚════════════╩════════════════════════════════════════════════════════════════╝
!
!╔═════════════════════════════════════════════════════════════════════════════╗
!║ DISPLAY FILE PROCEDURE (MODIFIED 11-7-89) ║
!║ ║
!║ This procedure display the file named in the DISFNAME parameter to the ║
!║ screen. The user can use F7 & F8 to mark column and row ranges to freeze. ║
!║ ║
!║ Modifications include changes that reduce memory table size from 132 bytes ║
!║ per record to 4 bytes per record (you will save lots of memory), allowing ║
!║ almost any size file to be scanned. The maximum viewing width has been ║
!║ increased to 255 bytes. Ctrl Right Arrow will change the last column being ║
!║ displayed to the greatest width of any line in the file. The procedure has ║
!║ been changed to recieve the name and path of the file to be displayed. ║
!║ Additional messages and a help window have also been added. And last but ║
!║ not least the up and down arrow keys now take advantage of the scroll ║
!║ function instead of redisplaying the entire screen. ║
!║ ║
!║ Modified By: Todd A. Seidel ║
!║ Micro Solutions Group, Inc. ║
!║ 17 Aldrich Rd. ║
!║ Columbus, OH 43214 Phone (614) 261-4545 ║
!║ ║
!╚═════════════════════════════════════════════════════════════════════════════╝
DISFNAME STRING(100) ! FILE NAME WITH PATH
NAMEONLY STRING(25) ! USED TO STORE JUST THE NAME WITHOUT THE PATH
DSCREEN SCREEN WINDOW(25,80),HLP('DISP_HLP'),HUE(2,0)
ROW(25,1) PAINT(1,80),HUE(15,3)
COL(29) STRING('Size:')
COL(44) STRING('Line:')
COL(56) STRING('of')
COL(67) STRING('Cols:')
COL(76) STRING('-')
FILE_SIZE COL(35) STRING(@P######P)
CLINE COL(50) STRING(@P#####P)
TLINE COL(59) STRING(@P#####P)
CCOL COL(73) STRING(@P###P)
CCOL1 COL(77) STRING(@P###P)
MESSAGE COL(2) STRING(25)
.
ASCII DOS,ASCII,NAME(DISFNAME) ! FILE TO DISPLAY
RECORD
ASCREC STRING(255)
. .
FTABLE TABLE ! FREEZE MEMORY TABLE
FABREC STRING(255)
.
POINT_TBL TABLE
DOS_POINT LONG
.
CUREC SHORT ! CURRENT REC IN TABLE
NORECS LONG ! NO OF RECS IN TABLE
SLINE BYTE ! CURRENT SCREEN LINE
LEFTCOL SHORT(1) ! LEFT COLUMN WINDOW 0
LEFTCOL1 SHORT(11) ! LEFT COLUMN WINDOW 1
NO_LOC SHORT(10) ! # OF COLUMNS WINDOW 0
NO_LOC1 SHORT(70) ! # OF COLUMNS WINDOW 1
LOCK STRING(1) ! IS COLUMN LOCKED
MOVEMENT BYTE(5) ! AMOUNT TO MOVE
TOP_REC SHORT ! RECORD AT TOP OF SCREEN
TOP_SCN SHORT(1) ! TOP SCREEN LINE
BOT_SCN SHORT(24) ! BOTTOM SCREEN LINE
NO_SLINE SHORT ! NUMBER OF SCREEN LINES
NO_FREEZE SHORT(0) ! NUMBER OF FREEZE LINES
LCTR SHORT ! MISC COUNTER
RIGHT_LOC SHORT ! RIGHT SIDE LOCATION MAX
TEXT_FORE EQUATE(2) ! TEXT FOREGROUND COLOR
TEXT_BACK EQUATE(0) ! TEXT BACKGROUND COLOR
SPLIT_FORE EQUATE(15) ! SPLIT WINDOW AREA FORE COLOR
SPLIT_BACK EQUATE(1) ! SPLIT WINDOW AREA BACK COLOR
ENTER_KEY EQUATE(257) !ENTER KEY
HOME_KEY EQUATE(261) !HOME KEY
UP_KEY EQUATE(262) !CURSOR UP KEY
PGUP_KEY EQUATE(263) !PGUP KEY
LEFT_KEY EQUATE(265) !CURSOR LEFT KEY
RIGHT_KEY EQUATE(266) !CURSOR RIGHT KEY
END_KEY EQUATE(268) !END KEY
DOWN_KEY EQUATE(269) !CURSOR DOWN KEY
PGDN_KEY EQUATE(270) !PGDN KEY
CTRL_ESC EQUATE(279) !CTRL-ESC KEY
CTRL_LEFT EQUATE(285) !CTRL-CURSOR LEFT KEY
CTRL_RIGHT EQUATE(286) !CTRL-CURSOR RIGHT KEY
F7_KEY EQUATE(2055) !F7 KEY
F8_KEY EQUATE(2056) !F8 KEY
SLASH_POS BYTE
CODE
SLASH_POS = 1
NAMEONLY = LEFT(RIGHT(DISFNAME),25)
LOOP
SLASH_POS = INSTRING('\',NAMEONLY)
IF SLASH_POS = 0 THEN BREAK.
NAMEONLY = SUB(NAMEONLY,SLASH_POS+1,30)
.
HELP('DISPFILE.HLP')
OPEN(ASCII) ! OPEN FILE TO DISPLAY
FREE(POINT_TBL) ! CLEAR OUT MEM TABLE
CUREC=1 ! BEGIN PROC AT LINE #1
OPEN(DSCREEN)
MESSAGE = 'Loading ' & CLIP(LEFT(FORMAT(BYTES(ASCII),@N_6))) & ' Bytes...'
SET(ASCII)
LOOP UNTIL EOF(ASCII) ! LOAD FILE POINTERS INTO TABLE
NEXT(ASCII)
DOS_POINT=POINTER(ASCII)
ADD(POINT_TBL)
FILE_SIZE = DOS_POINT
IF LEN(CLIP(ASCREC)) > RIGHT_LOC THEN RIGHT_LOC = LEN(CLIP(ASCREC)).
.
FILE_SIZE += BYTES(ASCII) -1
RIGHT_LOC -= 79 ! SET RIGHT SIDE LOCATION
IF RIGHT_LOC > 175 THEN RIGHT_LOC = 175.
IF RIGHT_LOC < 1 THEN RIGHT_LOC = 1. ! FOR CTRL/-> KEY
NORECS=RECORDS(POINT_TBL) ! HOW MANY RECS/LINES
TLINE = NORECS ! SHOW NORECS ON SCREEN
LEFTCOL = 1 ! LEFT COLUMN WINDOW 0
LEFTCOL1 = 11 ! LEFT COLUMN WINDOW 1
NO_LOC = 10 ! # OF COLUMNS WINDOW 0
NO_LOC1 = 70 ! # OF COLUMNS WINDOW 1
LOCK = 'N' ! IS COLUMN LOCKED
MOVEMENT = 5 ! AMOUNT TO MOVE
TOP_SCN = 1 ! TOP SCREEN LINE
BOT_SCN = 24 ! BOTTOM SCREEN LINE
NO_FREEZE= 0 ! NUMBER OF FREEZE LINES
NO_SLINE=BOT_SCN-TOP_SCN+1 ! CALC # OF SCREEN LINES
DO SHOWLINES ! DISPLAY THE NEXT 24 LINES
LOOP ! LOOP UNTIL PRESS CTRL/ESC
ASK ! GET USER KEYPRESS
CASE KEYCODE() ! GET USER KEYPRESS
OF PGUP_KEY ! DISPLAY PREVIOUS 24 LINES
CUREC=TOP_REC-NO_SLINE
IF CUREC < 1 THEN CUREC = 1.
OF PGDN_KEY ! DISPLAY NEXT 24 LINES
IF NORECS <= 24 - NO_FREEZE THEN MESSAGE=NAMEONLY;CYCLE.
IF CUREC + 24 - NO_FREEZE > NORECS
CUREC -= (CUREC + 23 - NO_FREEZE) - NORECS
.
OF UP_KEY ! DISPLAY PREVIOUS LINE
DO SCROLLUP
CYCLE
OF DOWN_KEY ! DISPLAY NEXT LINE
CUREC=TOP_REC+24-NO_FREEZE
DO SCROLLDN
CYCLE
OF HOME_KEY ! DISPLAY TOP OF FILE
CUREC=1
OF END_KEY ! DISPLAY END OF FILE
IF NORECS < 25 THEN CYCLE.
CUREC=NORECS-NO_SLINE+1
OF RIGHT_KEY ! SHIFT DISPLAY TO THE LEFT
CUREC=TOP_REC
IF LOCK='N' THEN ! NO column SPLIT
LEFTCOL=LEFTCOL+MOVEMENT
IF LEFTCOL > 175 THEN LEFTCOL = 175.
LEFTCOL1=LEFTCOL+NO_LOC
ELSE ! Columns are split
LEFTCOL1=LEFTCOL1+MOVEMENT
IF LEFTCOL1+NO_LOC1 > 255 THEN LEFTCOL1=255-NO_LOC1.
.
OF LEFT_KEY ! SHIFT DISPLAY TO THE RIGHT
CUREC=TOP_REC
IF LOCK='N' THEN ! NO Column SPLIT
LEFTCOL=LEFTCOL-MOVEMENT
IF LEFTCOL < 1 THEN LEFTCOL = 1.
LEFTCOL1=LEFTCOL+NO_LOC
ELSE ! Columns are SPLIT
LEFTCOL1=LEFTCOL1-MOVEMENT
IF LEFTCOL1 < 1 THEN LEFTCOL1=1.
.
OF CTRL_RIGHT ! SHIFT ALL WAY TO THE LEFT
CUREC=TOP_REC
IF LOCK='N' THEN ! NO Column SPLIT
LEFTCOL=RIGHT_LOC
LEFTCOL1=LEFTCOL+NO_LOC
ELSE ! Columns are SPLIT
LEFTCOL1=RIGHT_LOC+NO_LOC
.
OF CTRL_LEFT ! SHIFT ALL WAY TO THE RIGHT
CUREC=TOP_REC
IF LOCK='N' THEN ! NO Column SPLIT
LEFTCOL=1
LEFTCOL1=LEFTCOL+NO_LOC
ELSE ! Columns are SPLIT
LEFTCOL1=1
.
OF CTRL_ESC ! STOP DISPLAY
FREE(POINT_TBL)
FREE(FTABLE)
CLOSE(ASCII)
BREAK ! exit to Caller
OF F7_KEY ! SET/RESET Column split
IF LOCK='N' THEN
MESSAGE = 'Use ENTER To Mark Columns'
DO SETLOCK
ELSE
DO RSETLOCK
.
OF F8_KEY ! SET/RESET TOP FREEZE
IF NO_FREEZE=0 THEN
MESSAGE = 'Use ENTER To Mark Rows'
DO SETFREZ
IF CUREC >= NORECS THEN ! DISPLAY END OF FILE MSG
MESSAGE='** END OF FILE **'
ELSE
MESSAGE=NAMEONLY
.
ELSE
DO RSETFREZ
.
ELSE
CYCLE
.
IF CUREC > NORECS THEN ! DONT GO PAST END OF FILE
CUREC=TOP_REC
.
DO SHOWLINES
.
CLOSE(DSCREEN) ! CLOSE SCREEN
FREE(POINT_TBL) ! FREE UP MEMORY
RETURN
OMIT('**-ENDSD-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ SCROLLUP ROUTINE - SCROLLS SCREEN DATA FOR UP KEY ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDSD-**
SCROLLUP ROUTINE
IF TOP_REC = 1 THEN EXIT.
CUREC-=1
TOP_REC -= 1
SLINE = NO_FREEZE + 1
SCROLL(1+NO_FREEZE,1,24-NO_FREEZE,80,-1) ! SCROLL TEXT AREA DOWN
GET(POINT_TBL,TOP_REC)
GET(ASCII,DOS_POINT)
SHOW(SLINE,1,SUB(ASCREC,LEFTCOL,NO_LOC))
SHOW(SLINE,1+NO_LOC,SUB(ASCREC,LEFTCOL1,NO_LOC1))
MESSAGE=NAMEONLY
CLINE=CUREC-1 ! STATUS LINE VARS
CCOL=LEFTCOL
CCOL1=LEFTCOL+79
OMIT('**-ENDSD-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ SCROLLDN ROUTINE - SCROLLS SCREEN DATA FOR DOWN KEY ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDSD-**
SCROLLDN ROUTINE
IF CUREC <= NORECS THEN ! DISPLAY LINE if NOT EOF
SLINE = 24
SCROLL(1+NO_FREEZE,1,24-NO_FREEZE,80,1) ! SCROLL TEXT AREA UP
GET(POINT_TBL,CUREC)
GET(ASCII,DOS_POINT)
SHOW(SLINE,1,SUB(ASCREC,LEFTCOL,NO_LOC))
SHOW(SLINE,1+NO_LOC,SUB(ASCREC,LEFTCOL1,NO_LOC1))
CUREC+=1
TOP_REC+=1
CLINE=CUREC-1 ! STATUS LINE VARS
CCOL=LEFTCOL
CCOL1=LEFTCOL+79
.
IF CUREC >= NORECS THEN ! DISPLAY END OF FILE MSG
MESSAGE='** END OF FILE **'
ELSE
MESSAGE=NAMEONLY
.
OMIT('**-ENDHS-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ SHOWLINES ROUTINE - DISPLAYS 24 LINES ON THE MONITOR ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDHS-**
SHOWLINES ROUTINE
TOP_REC=CUREC ! TOP OF SCREEN RECORD
NO_LOC1=80-NO_LOC ! No. of columns for wind 1
IF NO_LOC1 < 1 THEN NO_LOC1 = 1.
GET(POINT_TBL,CUREC)
SET(ASCII,DOS_POINT)
LOOP SLINE = 1 TO 24 ! DO FOR 24 LINES
IF SLINE <= NO_FREEZE ! DISPLAY FREEZE LINES
GET(FTABLE,SLINE)
SHOW(SLINE,1,SUB(FABREC,LEFTCOL,LEFTCOL+NO_LOC-1))
SHOW(SLINE,1+NO_LOC,SUB(FABREC,LEFTCOL1,NO_LOC1))
ELSIF CUREC <= NORECS ! DISPLAY LINE if NOT EOF
NEXT(ASCII)
SHOW(SLINE,1,SUB(ASCREC,LEFTCOL,NO_LOC))
SHOW(SLINE,1+NO_LOC,SUB(ASCREC,LEFTCOL1,NO_LOC1))
CUREC+=1
.
.
IF CUREC >= NORECS THEN ! DISPLAY END OF FILE MSG
MESSAGE='** END OF FILE **'
ELSE
MESSAGE=NAMEONLY
.
CLINE=CUREC-1 ! STATUS LINE VARS
IF LOCK = 'N'
CCOL=LEFTCOL
CCOL1=LEFTCOL+79
ELSE
CCOL=LEFTCOL1
CCOL1=LEFTCOL1+79-NO_LOC
.
OMIT('**-ENDHF-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ FREEZE THE TOP OF THE DISPLAY ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDHF-**
SETFREZ ROUTINE
FREE(FTABLE) ! Clear Freeze Table
NO_FREEZE=2 ! Min lines =2
SETHUE(SPLIT_FORE,SPLIT_BACK) ! Highlight current lines(2)
COLOR(1,1,NO_FREEZE,80)
LOOP ! Get area to Mark from user
ASK
CASE KEYCODE()
OF DOWN_KEY ! Mark another line
NO_FREEZE+=1
IF NO_FREEZE > 12 THEN NO_FREEZE=12.
IF NO_FREEZE > NORECS THEN NO_FREEZE = NORECS.
COLOR(1,1,NO_FREEZE,80)
OF UP_KEY ! Unmark line
NO_FREEZE-=1
IF NO_FREEZE <=2 THEN NO_FREEZE=2.
SETHUE(TEXT_FORE,TEXT_BACK)
IF LOCK='N' THEN ! Dont unmark a column lock
COLOR(NO_FREEZE+1,1,1,80)
ELSE
COLOR(NO_FREEZE+1,NO_LOC+1,1,80)
.
SETHUE(SPLIT_FORE,SPLIT_BACK)
OF ENTER_KEY ! Accept current area as mark
LOOP LCTR=TOP_REC TO TOP_REC+NO_FREEZE ! Build "Freeze" table
GET(POINT_TBL,LCTR)
GET(ASCII,DOS_POINT)
FABREC=ASCREC
ADD(FTABLE)
.
TOP_REC=TOP_REC+NO_FREEZE ! House Clean
CUREC=TOP_REC
TOP_SCN=NO_FREEZE+1
NO_SLINE=BOT_SCN-TOP_SCN+1 ! CALC # OF SCREEN LINES
SETHUE ! Reset to Normal Attr.
EXIT
.
.
OMIT('**-ENDHRF-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ RESET THE FREEZE FOR THE TOP OF THE DISPLAY ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDHRF-**
RSETFREZ ROUTINE
FREE(FTABLE) ! Free up memory
IF LOCK='N' THEN ! Unmark Freeze area
COLOR(1,1,NO_FREEZE,80)
ELSE ! Dont unmark column lock
COLOR(1,NO_LOC+1,NO_FREEZE,80)
.
TOP_REC=TOP_REC-NO_FREEZE ! House Clean
IF TOP_REC<1 THEN TOP_REC=1.
CUREC=TOP_REC
NO_FREEZE=0
TOP_SCN=1
NO_SLINE=BOT_SCN-TOP_SCN+1 ! CALC # OF SCREEN LINES
OMIT('**-ENDHSL-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ SET THE COLUMN LOCK/SPLIT FOR THE DISPLAY ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDHSL-**
SETLOCK ROUTINE
LOCK='Y'
NO_LOC=10 ! Min of 10 Columns for mark
SETHUE(SPLIT_FORE,SPLIT_BACK)
COLOR(1,1,24,NO_LOC) ! Highlight the Columns
LOOP ! Get area to mark from user
ASK
CASE KEYCODE()
OF RIGHT_KEY ! mark one more column
NO_LOC+=1
IF NO_LOC > 40 THEN NO_LOC=40. ! Max. of 40 Cols
COLOR(1,1,24,NO_LOC)
OF LEFT_KEY ! Reduce No of Cols by one
NO_LOC-=1
IF NO_LOC < 2 THEN NO_LOC=2. ! Min of 2 Cols
SETHUE(TEXT_FORE,TEXT_BACK)
IF NO_FREEZE = 0 THEN
COLOR(1,NO_LOC+1,24,1)
ELSE
COLOR(NO_FREEZE+1,NO_LOC+1,24-NO_FREEZE,1)
.
SETHUE(SPLIT_FORE,SPLIT_BACK)
OF ENTER_KEY ! Accept current area as mark
SETHUE
CUREC=TOP_REC
LEFTCOL1=1+NO_LOC
EXIT
.
.
OMIT('**-ENDHRC-**')
╔══════════════════════════════════════════════════════════════════════════════╗
║ RESET THE COLUMN LOCK/SPLIT ║
╚══════════════════════════════════════════════════════════════════════════════╝
**-ENDHRC-**
RSETLOCK ROUTINE
LOCK='N'
IF NO_FREEZE = 0 THEN ! Unmark column area
COLOR(1,1,24,NO_LOC)
ELSE ! Dont unmark line/freeze area
COLOR(NO_FREEZE+1,1,24-NO_FREEZE,NO_LOC)
.
NO_LOC=10 ! House Clean
LEFTCOL=1
LEFTCOL1=LEFTCOL+NO_LOC
CUREC=TOP_REC