fbizzell
Programmer
- Jul 3, 2000
- 217
Is there a clipper function for browsing a text file? All I want to do is display it on the screen and move up and down the display. I do not want to edit the text, only display it.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Mody_Memo(MemoRead("C:\TextFile.txt"))
FUNCTION MODY_MEMO
** this is a read / write memo edit function
PARAMETER MSTRING
PRIVATE MSTRING,Tp,Lt,Bt,Rt,WRAP,MACTFLG,OLDLINE
PRIVATE MINSERT
WRAP = 1
Tp = 6
Lt = 2
Bt = 20
Rt = 76
DROP_BOX(Tp,Lt,Bt,Rt,17)
D_MSG(" Enter revised note, @F4 to save, @Esc to abort")
SET CURSOR ON
MSTRING = STRTRAN(MEMOEDIT(MSTRING,Tp+1,Lt+1,Bt-1,Rt-1,.T.,"MEMOFUNC",(Rt-Lt)-1),CHR(26),"")
SET CURSOR OFF
RETURN(MSTRING)
FUNCTION MEMOFUNC
PARAMETERS MSTATUS,MROW,MCOL
PRIVATE MSTATUS,MROW,MCOL,RETVAL
RETVAL = 0
IF MSTATUS = 3
IF WRAP = 0
WRAP = 1
RETVAL = 34
ENDIF
ELSE
IF MSTATUS = 0
@ Bt,Lt+1 SAY "Row:"+STR(MROW,3)+" Col:"+STR(MCOL,3)
ENDIF
IF LASTKEY() = F4
RETVAL = 23 && CTRL-W
ENDIF
ENDIF
RETURN(RETVAL)
FUNCTION D_MSG
PARAMETER MSG,MLINE,MLGTH
PRIVATE MSG,MLINE,MLGTH
PRIVATE OLDCOLOR,X,STRING,Y,VAL_STRING,Z
DECLARE HI_LITE[20],HI_POS[20]
IF PCOUNT() < 3
MLGTH = 78
ENDIF
IF PCOUNT() < 2
MLINE = 23
ENDIF
VOID=AFILL(HI_LITE,"")
VOID=AFILL(HI_POS,-1)
OLDCOLOR=SETCOLOR(COLORS[10])
RESTSCREEN(MLINE+1,2,MLINE+1,MLGTH,BGC(SAVESCREEN(MLINE+1,2,MLINE+1,MLGTH),8))
STRING =""
VAL_STRING =""
Y=0
IF LEFT(MSG,1) <> " "
MSG = " "+MSG
ENDIF
IF "$"$MSG .OR. "@"$MSG
** Scan string looking for Highlighters...
FOR X =1 TO LEN(MSG)
DO CASE
** Highlight next char only...
CASE SUBSTR(MSG,X+Y,1) ="$"
Y=Y+1
HI_LITE[Y] =SUBSTR(MSG,X+Y,1)
HI_POS[Y] =X
** Highlight next word only...
CASE SUBSTR(MSG,X+Y,1) ="@"
Y=Y+1
FOR Z =0 TO 10
IF !(SUBSTR(MSG,X+Y+Z,1)$" -,.>])")
HI_LITE[Y] =HI_LITE[Y]+SUBSTR(MSG,X+Y+Z,1)
ELSE
Z =10
ENDIF
NEXT
HI_POS[Y] =X
ENDCASE
STRING =STRING+SUBSTR(MSG,X+Y,1)
NEXT
ELSE
STRING=MSG
ENDIF
** Display the string...
@ MLINE,1 SAY LEFT(STRING+SPACE(MLGTH-1),MLGTH-1)
VOID=SETCOLOR(COLORS[11])
** Just do the highlights...
FOR X =1 TO Y
IF HI_POS[X] <> -1
@ MLINE,HI_POS[X] SAY HI_LITE[X]
** Not using the VAL_string...
** VAL_STRING=VAL_STRING+HI_LITE[X]
ELSE
X =Y+1
ENDIF
NEXT
VOID=SETCOLOR(OLDCOLOR)
RETURN(STRING)
FUNCTION BGC
PARAMETERS STRING,X
** pass the function the 'save screen' string and the ascii value to be used
PRIVATE X,I,NEWSTRING
** invent a new string...
NEWSTRING=""
FOR I = 1 TO LEN(STRING) STEP 2
** take each alternate char and add to new string...
NEWSTRING = NEWSTRING+SUBSTR(STRING,I,1)+CHR(X)
NEXT
** return the new string to the caller...
RETURN(NEWSTRING)
FUNCTION DROP_BOX
PARAMETERS T,L,B,R
PRIVATE T,L,B,R,X,I
*FOR X = T TO B
RESTSCREEN(T+1,L+1,B+1,R+1,BGC(SAVESCREEN(T+1,L+1,B+1,R+1),8))
*NEXT
FOR X = T TO B
@ X,L CLEAR TO X,R
FOR I = 1 TO 20 && Short delay loop...
NEXT I
NEXT
@ T,L TO B,R
RETURN(.T.)
MSTRING = STRTRAN(MEMOEDIT(MSTRING,Tp+1,Lt+1,Bt-1,Rt-1,.F.,"MEMOFUNC",(Rt-Lt)-1),CHR(26),"")
D_MSG(" Reviewing File, press @Esc to abort")
Public Colors[20]
Public F4
COLORS[ 1] = "GB+/B"
COLORS[ 2] = "W/N"
COLORS[ 3] = "B/W,W+/R"
COLORS[ 4] = "GR+/B,W+/R"
COLORS[ 5] = "W/GR+"
COLORS[ 6] = "W/B,N/W,,W/B"
COLORS[ 7] = "N/W,W+/B"
COLORS[ 8] = "W+/B"
COLORS[ 9] = "W/GB"
COLORS[10] = "W/R"
COLORS[11] = "N/W"
COLORS[12] = "R/W"
COLORS[13] = "GR+/B,W+/GR"
F4 = -3
PUBLIC COLORS[20]
PUBLIC F4
COLORS[ 1] = "GB+/B"
COLORS[ 2] = "W/N"
COLORS[ 3] = "B/W,W+/R"
COLORS[ 4] = "GR+/B,W+/R"
COLORS[ 5] = "W/GR+"
COLORS[ 6] = "W/B,N/W,,W/B"
COLORS[ 7] = "N/W,W+/B"
COLORS[ 8] = "W+/B"
COLORS[ 9] = "W/GB"
COLORS[10] = "W/R"
COLORS[11] = "N/W"
COLORS[12] = "R/W"
COLORS[13] = "GR+/B,W+/GR"
F4 = -3
Mody_Memo(MemoRead("C:\TextFile.txt"))
FUNCTION MODY_MEMO
** this is a read / write memo edit function
PARAMETER MSTRING
PRIVATE MSTRING,Tp,Lt,Bt,Rt,WRAP,MACTFLG,OLDLINE
PRIVATE MINSERT
WRAP = 1
Tp = 6
Lt = 2
Bt = 20
Rt = 76
DROP_BOX(Tp,Lt,Bt,Rt,17)
D_MSG(" Enter revised note, @F4 to save, @Esc to abort")
SET CURSOR ON
MSTRING = STRTRAN(MEMOEDIT(MSTRING,Tp+1,Lt+1,Bt-1,Rt-1,.T.,"MEMOFUNC",(Rt-Lt)-1),CHR(26),"")
SET CURSOR OFF
RETURN(MSTRING)
FUNCTION MEMOFUNC
PARAMETERS MSTATUS,MROW,MCOL
PRIVATE MSTATUS,MROW,MCOL,RETVAL
RETVAL = 0
IF MSTATUS = 3
IF WRAP = 0
WRAP = 1
RETVAL = 34
ENDIF
ELSE
IF MSTATUS = 0
@ Bt,Lt+1 SAY "Row:"+STR(MROW,3)+" Col:"+STR(MCOL,3)
ENDIF
IF LASTKEY() = F4
RETVAL = 23 && CTRL-W
ENDIF
ENDIF
RETURN(RETVAL)
FUNCTION D_MSG
PARAMETER MSG,MLINE,MLGTH
PRIVATE MSG,MLINE,MLGTH
PRIVATE OLDCOLOR,X,STRING,Y,VAL_STRING,Z
DECLARE HI_LITE[20],HI_POS[20]
IF PCOUNT() < 3
MLGTH = 78
ENDIF
IF PCOUNT() < 2
MLINE = 23
ENDIF
VOID=AFILL(HI_LITE,"")
VOID=AFILL(HI_POS,-1)
OLDCOLOR=SETCOLOR(COLORS[10])
RESTSCREEN(MLINE+1,2,MLINE+1,MLGTH,BGC(SAVESCREEN(MLINE+1,2,MLINE+1,MLGTH),8))
STRING =""
VAL_STRING =""
Y=0
IF LEFT(MSG,1) <> " "
MSG = " "+MSG
ENDIF
IF "$"$MSG .OR. "@"$MSG
** Scan string looking for Highlighters...
FOR X =1 TO LEN(MSG)
DO CASE
** Highlight next char only...
CASE SUBSTR(MSG,X+Y,1) ="$"
Y=Y+1
HI_LITE[Y] =SUBSTR(MSG,X+Y,1)
HI_POS[Y] =X
** Highlight next word only...
CASE SUBSTR(MSG,X+Y,1) ="@"
Y=Y+1
FOR Z =0 TO 10
IF !(SUBSTR(MSG,X+Y+Z,1)$" -,.>])")
HI_LITE[Y] =HI_LITE[Y]+SUBSTR(MSG,X+Y+Z,1)
ELSE
Z =10
ENDIF
NEXT
HI_POS[Y] =X
ENDCASE
STRING =STRING+SUBSTR(MSG,X+Y,1)
NEXT
ELSE
STRING=MSG
ENDIF
** Display the string...
@ MLINE,1 SAY LEFT(STRING+SPACE(MLGTH-1),MLGTH-1)
VOID=SETCOLOR(COLORS[11])
** Just do the highlights...
FOR X =1 TO Y
IF HI_POS[X] <> -1
@ MLINE,HI_POS[X] SAY HI_LITE[X]
** Not using the VAL_string...
** VAL_STRING=VAL_STRING+HI_LITE[X]
ELSE
X =Y+1
ENDIF
NEXT
VOID=SETCOLOR(OLDCOLOR)
RETURN(STRING)
FUNCTION BGC
PARAMETERS STRING,X
** pass the function the 'save screen' string and the ascii value to be used
PRIVATE X,I,NEWSTRING
** invent a new string...
NEWSTRING=""
FOR I = 1 TO LEN(STRING) STEP 2
** take each alternate char and add to new string...
NEWSTRING = NEWSTRING+SUBSTR(STRING,I,1)+CHR(X)
NEXT
** return the new string to the caller...
RETURN(NEWSTRING)
FUNCTION DROP_BOX
PARAMETERS T,L,B,R
PRIVATE T,L,B,R,X,I
*FOR X = T TO B
RESTSCREEN(T+1,L+1,B+1,R+1,BGC(SAVESCREEN(T+1,L+1,B+1,R+1),8))
*NEXT
FOR X = T TO B
@ X,L CLEAR TO X,R
FOR I = 1 TO 20 && Short delay loop...
NEXT I
NEXT
@ T,L TO B,R
RETURN(.T.)