dos_compilers/Microsoft QuickBASIC v45/EXAMPLES/ENTAB.BAS
2024-07-01 21:19:24 -07:00

105 lines
2.6 KiB
QBasic

' ENTAB.BAS
'
' Replace runs of spaces in a file with tabs.
'
DECLARE SUB SetTabPos ()
DECLARE SUB StripCommand (CLine$)
DEFINT A-Z
DECLARE FUNCTION ThisIsATab (Column AS INTEGER)
CONST MAXLINE = 255
CONST TABSPACE = 8
CONST NO = 0, YES = NOT NO
DIM SHARED TabStops(MAXLINE) AS INTEGER
StripCommand (COMMAND$)
' Set the tab positions (uses the global array TabStops).
SetTabPos
LastColumn = 1
DO
CurrentColumn = LastColumn
' Replace a run of blanks with a tab when you reach a tab
' column. CurrentColumn is the current column read.
' LastColumn is the last column that was printed.
DO
C$ = INPUT$(1,#1)
IF C$ <> " " AND C$ <> CHR$(9) THEN EXIT DO
CurrentColumn = CurrentColumn + 1
IF C$=CHR$(9) OR ThisIsATab(CurrentColumn) THEN
' Go to a tab column if we have a tab and this
' is not a tab column.
DO WHILE NOT ThisIsATab(CurrentColumn)
CurrentColumn=CurrentColumn+1
LOOP
PRINT #2, CHR$(9);
LastColumn = CurrentColumn
END IF
LOOP
' Print out any blanks left over.
DO WHILE LastColumn < CurrentColumn
PRINT #2, " ";
LastColumn = LastColumn + 1
LOOP
' Print the non-blank character.
PRINT #2, C$;
' Reset the column position if this is the end of a line.
IF C$ = CHR$(10) THEN
LastColumn = 1
ELSE
LastColumn = LastColumn + 1
END IF
LOOP UNTIL EOF(1)
CLOSE #1, #2
END
'------------------SUB SetTabPos-------------------------
' Set the tab positions in the array TabStops.
'
SUB SetTabPos STATIC
FOR I = 1 TO 255
TabStops(I) = ((I MOD TABSPACE) = 1)
NEXT I
END SUB
'
'------------------SUB StripCommand----------------------
'
SUB StripCommand (CommandLine$) STATIC
IF CommandLine$ = "" THEN
INPUT "File to entab: ", InFileName$
INPUT "Store entabbed file in: ", OutFileName$
ELSE
SpacePos = INSTR(CommandLine$, " ")
IF SpacePos > 0 THEN
InFileName$ = LEFT$(CommandLine$, SpacePos - 1)
OutFileName$ = LTRIM$(MID$(CommandLine$, SpacePos))
ELSE
InFileName$ = CommandLine$
INPUT "Store entabbed file in: ", OutFileName$
END IF
END IF
OPEN InFileName$ FOR INPUT AS #1
OPEN OutFileName$ FOR OUTPUT AS #2
END SUB
'---------------FUNCTION ThisIsATab----------------------
' Answer the question, "Is this a tab position?"
'
FUNCTION ThisIsATab (LastColumn AS INTEGER) STATIC
IF LastColumn > MAXLINE THEN
ThisIsATab = YES
ELSE
ThisIsATab = TabStops(LastColumn)
END IF
END FUNCTION