Source massager

 BBS: Inland Empire Archive
Date: 04-01-93 (22:21)             Number: 300
From: QUINN TYLER JACKSON          Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: Source massager                Conf: (2) Quik_Bas
   ' This file massaged by STRUCT v1.0
   ' STRUCT v1.0 BASIC FILE MASSAGER
   ' Written by Quinn Tyler Jackson
   '
   ' This program massages BASIC files for visual ease of reading.
   '
   ' I wrote it so that files in this echo could be written this way:
   '
   ' FOR i = 1 TO 10
   ' PRINT 10
   ' SELECT CASE i
   ' CASE 1
   ' PRINT "One"
   ' CASE 2
   ' PRINT "Two"
   ' DO
   ' PTR = PTR + 1
   ' PRINT ":)"
   ' LOOP UNTIL Ptr = 10
   ' CASE ELSE
   ' PRINT "Else"
   ' END SELECT
   ' NEXT i
   '
   '
   ' Files like this have less chance of wrap occuring, but they are hard
   ' to read.  This program turns the above type of thing into this, so it
   ' is easier to read:
   '
   ' FOR i = 1 TO 10
   '   PRINT 10
   '   SELECT CASE i
   '   CASE 1
   '       PRINT "One"
   '   CASE 2
   '       PRINT "Two"
   '       DO
   '           Ptr = Ptr + 1
   '           PRINT ":)"
   '       LOOP UNTIL Ptr = 10
   '   CASE ELSE
   '       PRINT "Else"
   '   END SELECT
   ' NEXT i
   '

   DECLARE SUB BuildBox (Title$)

   DEFINT A-Z

   CONST LMARGIN = 3
   CONST TABSIZE = 5
   CONST TBLSIZE = 9


   DIM TabOver$(TBLSIZE)
   DIM TabBack$(TBLSIZE)
   DIM SHARED InFile, OutFile

   Ptr = 0

   INPUT InFile$, OutFile$
   InFile = FREEFILE
   OPEN InFile$ FOR INPUT AS InFile LEN = 1024
   OutFile = FREEFILE
   OPEN OutFile$ FOR OUTPUT AS OutFile LEN = 1024

   FOR i = 1 TO TBLSIZE
        READ TabOver$(i), TabBack$(i)
   NEXT i

   PRINT #OutFile, SPACE$(LMARGIN); "' This file massaged by STRUCT v1.0"

   DO UNTIL EOF(InFile)

        LINE INPUT #InFile, Buffer$
        Buffer$ = RTRIM$(LTRIM$(Buffer$)) + " "

        IF LEFT$(Buffer$, 3) = "REM" THEN
             MID$(Buffer$, 1, 3) = "'  "
        END IF

        FOR i = 1 TO TBLSIZE
             Temp$ = TabOver$(i)
             IF LEFT$(Buffer$, LEN(Temp$) + 1) = Temp$ + " " THEN
                  Flag = -1
                  GOTO Jump
             END IF
        NEXT i

        FOR i = 1 TO TBLSIZE
             Temp$ = TabBack$(i)
             IF LEFT$(Buffer$, LEN(Temp$) + 1) = Temp$ + " " THEN
                  Ptr = Ptr - 1
                  IF Ptr < 0 THEN
                       Ptr = 0
                  END IF
                  EXIT FOR
             END IF
        NEXT i

        SELECT CASE LEFT$(Buffer$, 4)
        CASE "ELSE", "CASE"
             Ptr = Ptr - 1
             PRINT #OutFile, SPACE$(Ptr * TABSIZE + LMARGIN) + Buffer$
             Ptr = Ptr + 1
             GOTO PastPrint
        END SELECT

        Jump:
        PRINT #OutFile, SPACE$(Ptr * TABSIZE + LMARGIN) + Buffer$

        PastPrint:
        IF Flag THEN
             Flag = 0
             Ptr = Ptr + 1
        END IF

   LOOP

   END

   DATA SELECT,END SELECT
   DATA IF,END IF
   DATA DO,LOOP
   DATA WHILE,WEND
   DATA FOR,NEXT
   DATA SUB,END SUB
   DATA FUNCTION,END FUNCTION
   DATA STATIC SUB,END SUB
   DATA STATIC FUNCTION,END FUNCTION



--- Maximus 2.01wb
 * Origin: VKUG/VPCC QuickBasic Echo - Richmond, BC (1:153/151)
Outer Court
Echo Basic Postings

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