BBS: Inland Empire Archive Date: 03-19-92 (10:23) Number: 136 From: TOM HAMMOND Refer#: NONE To: ALL Recvd: NO Subj: Text center/highlighting Conf: (2) Quik_Bas
For anyone who might be able to use it, here's a routine I wrote several
years ago to permit me to easily center text on-screen AND to easily
highlight certain words within a line of text.
I'm sure it's not as professional as many would turn out, but it DOES
work and it saves me a lot of time now that it's available.
Maybey someone can make some use of it... or possibly improve upon it.
As usual, ya' gets what ya' pays for...
Tom Hammond N0SS
DECLARE SUB ScrnCtr (Txt$, PTab%) 'Last touched: 03/19/92
Txt$ = "Testing {1}... {2}... {3}... <Key> to continue... <{Y>/N}
PTab% = 0
Call ScrnCtr
SUB ScrnCtr (Txt$, PTab%)
'By: Tom Hammond
' Text centering and hightlighting routine.
' Text enclosed by {}'s is highlighted WITHOUT the {}'s printed.
' Text enclosed by <>'s is highlighted WITH the <>'s printed,
' EXCEPT if text within the <>'s is enclosed by {}'s, in which
' case ONLY the text within {}'s is highlighted regardless of the
' <>'s (e.g. TxT$ = "<Y/{N}>", where only the 'N' is highlighted).
' PTab% is reset to zero after each pass through this routine.
' If the PTab% = 0 then TXT$ will be centered.
' If PTab% > 0 then centering will be bypassed and the PTAB% value
' will be used as a TAB value.
' If PTab% < 0 then NO centering or TABbing is done, TXT$ is parsed
' and printed at the current cursor position.
DEFINT A-Z
' Check for matching Opening and Closing braces
OBrace = 0
CBrace = 0
DO 'Count opening braces
X = INSTR(X + 1, Txt$, "{")
IF X THEN OBrace = OBrace + 1
LOOP WHILE X
DO ' Count closing braces
XBrace = INSTR(XBrace + 1, Txt$, "}")
IF XBrace THEN CBrace = CBrace + 1
LOOP WHILE XBrace
IF OBrace - CBrace = 0 THEN Braces = OBrace + CBrace
IF PTab% = 0 THEN
LOCATE CSRLIN, INT((80 - LEN(Txt$) + Braces) / 2) + 1
ELSEIF PTab% > 0 THEN
LOCATE CSRLIN, PTab%
END IF
IF OBrace - CBrace <> 0 THEN GOTO PrintAsIs
PTab% = 0
Pointer = 1
Parsed = 0
Parse1: ' Parse text to locate delimiters
OBrace = INSTR(Pointer, Txt$, "{")
LTSymb = INSTR(Pointer, Txt$, "<")
IF OBrace = 0 AND LTSymb = 0 AND Parsed = 0 THEN GOTO PrintAsIs
Parsed = -1
IF LTSymb AND OBrace = LTSymb + 1 THEN
GOTO Parse3
ELSEIF (LTSymb AND LTSymb < OBrace) OR (OBrace = 0 AND LTSymb) THEN
GOTO Parse2
ELSEIF (OBrace AND OBrace < LTSymb) OR (LTSymb = 0 AND OBrace) THEN
GOTO Parse3
END IF
PRINT MID$(Txt$, Pointer, LEN(Txt$))
EXIT SUB
Parse2: 'Highlight and print text, including the <> symbols
IF LTSymb > 1 THEN
PRINT MID$(Txt$, Pointer, LTSymb - Pointer + 1);
ELSE
PRINT LEFT$(Txt$, 1);
END IF
GTSymb = INSTR(LTSymb, Txt$, ">")
'If there's an Open Brace WITHIN the <>'s, then don't highlight yet
IF OBrace > 0 AND GTSymb > OBrace THEN
PRINT MID$(Txt$, LTSymb + 1, OBrace - LTSymb - 1);
Pointer = OBrace
GOTO Parse3
END IF
COLOR 15
PRINT MID$(Txt$, LTSymb + 1, GTSymb - LTSymb - 1);
COLOR 7
PRINT MID$(Txt$, GTSymb, 1);
Pointer = GTSymb + 1
GOTO Parse1
Parse3: 'Highlight and print text (only) within {} symbols
IF OBrace > 1 THEN
PRINT MID$(Txt$, Pointer, OBrace - Pointer);
END IF
COLOR 15
CBrace = INSTR(OBrace, Txt$, "}")
PRINT MID$(Txt$, OBrace + 1, CBrace - OBrace - 1);
COLOR 7
Pointer = CBrace + 1
GOTO Parse1
PrintAsIs: 'Print entire line (no <'s OR {'s found)
COLOR 7
PRINT Txt$
EXIT SUB
END SUB
-------------- CUT LINE --------------
---
þ SLMR 2.1 þ All hope abandon, ye who enter messages here.
--- WM v2.00/91-0231
* Origin: The Modem Zone BBS (314) 893-5106 (1:289/2)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET