Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Add line numbers to a PB source

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Add line numbers to a PB source

    Code:
    '
    ' NumeraPB
    '
    ' Add line numbers to a PB/CC source to help
    ' locate errors
    '
    ' Quick adaptation from a tool of mine that works on
    ' QuickBASIC sources. Tested a bit only with PB/CC.
    ' May works with PB/Win, maybe with minor modifications
    ' ------------------------------------------------------
    
    $DIM ALL
    
    %TRUE = -1
    %FALSE = 0
    
    $ProgramVer = "1.00"
    
    ' --- Titoli
    
    SUB Header
      DIM sTitle AS STRING
      sTitle = "NumeraPB v" & $ProgramVer & " - Add line numbers to a PB/CC source"
      STDOUT
      STDOUT sTitle
      STDOUT STRING$(LEN(sTitle), "-") 
    END SUB
    
    ' --- Main program
    
    FUNCTION PBMAIN
      
      CALL Header
      
      DIM sBasName    AS STRING ' Source file name
      DIM sBasNameNum AS STRING 
      
      DIM fIn  AS LONG ' Sources files handles
      DIM fOut AS LONG 
      
      DIM sText AS STRING  ' Current line text
      DIM lNum  AS LONG    ' Line number counter
      
      DIM fNumera   AS LONG ' Flag - number the line
      DIM fOutBlock AS LONG ' Flag - Out of a non-numerable block
      
      DIM sPrefix AS STRING ' Prefix to be added to the output line
      
      DIM sToken  AS STRING ' First and second tokens of the line
      DIM sToken2 AS STRING  
      
      DIM lTotLines AS LONG ' Counters
      DIM lModLines AS LONG
      DIM lTotLab AS LONG
      
      sBasName = COMMAND$
      
      IF DIR$(sBasName) = "" THEN
        STDOUT "File not found: <" & sBasName & ">"
        EXIT FUNCTION
      END IF
    
      fIn = FREEFILE
      OPEN sBasName FOR INPUT AS #fIn LEN=16384
      
      sBasNameNum = sBasName & ".num"
      STDOUT "Output file: " & sBasNameNum
    
      fOut = FREEFILE
      OPEN sBasNameNum FOR OUTPUT AS #fOut LEN=16384
      
      fOutBlock = %TRUE
      DO WHILE NOT EOF(fIn)
        LINE INPUT #fIn, sText$
    
        INCR lNum
        sToken$ = UCASE$(LTRIM$(RTRIM$(sText$), ANY " " & CHR$(9)))
        sToken2$ = ""
        IF sToken$ = "" THEN
          fNumera = %FALSE
        ELSEIF INSTR("'#$%", LEFT$(sToken$, 1)) THEN
          fNumera = %FALSE
        ELSE
          sToken2$ = PARSE$(sToken$, ANY " (,", 2) 
          sToken$ = PARSE$(sToken$, ANY " (,", 1)
          IF RIGHT$(sToken$, 1) = ":" THEN
            fNumera = %FALSE
            INCR lTotLab
          ELSEIF VERIFY(sToken$, "0123456789") = 0 THEN
            fNumera = %FALSE
            INCR lTotLab
          ELSE
            SELECT CASE sToken$
            CASE "DECLARE", "REM", "CONST"
              fNumera = %FALSE
            CASE "SELECT", "CASE"
              fNumera = %FALSE
            CASE "DEF", "DEFINT", "DEFLNG", "DEFCUR", "DEFSNG", "DEFDBL"
              fNumera = %FALSE
            CASE "TYPE", "MACRO"
              fOutBlock = %FALSE
              fNumera = %FALSE
            CASE "END"
              IF (sToken2$ = "TYPE") OR (sToken2$ = "MACRO") THEN
                fOutBlock = %TRUE
              END IF
            CASE ELSE
              IF fOutBlock = %TRUE THEN
                fNumera = %TRUE
              ELSE
                fNumera = %FALSE
              END IF
            END SELECT
          END IF
        END IF
        
        
        INCR lTotLines
        IF fNumera = %TRUE THEN
          sPrefix$ = RIGHT$(STR$(10000 + lNum), 5)
          INCR lModLines
        ELSE
          sPrefix$ = SPACE$(5)
        END IF
        sText$ = sPrefix$ & " " & sText$  
        PRINT #fOut, sText$ 
        LOCATE ,1
        STDOUT LEFT$(sText$, 78);
      
        IF RIGHT$(RTRIM$(sText$, ANY CHR$(0, 9, 32)), 1) = "_" THEN
          PRINT:WAITKEY$
          fOutBlock = %FALSE    
        END IF
      LOOP
      
      CLOSE fOut
      CLOSE fIn
    
      STDOUT SPACE$(78);
      LOCATE ,1
      STDOUT "Labels found:" & STR$(lTotLab)
      STDOUT "Total/Modified Lines:" & STR$(lTotLines) & "/" & LTRIM$(STR$(lModLines))
      STDOUT "Finished!"
      
      ' WAITKEY$
    
    END FUNCTION
    ------------------
    Try Online TrID file identifier! Recognize over 2.100 filetypes and counting...
    Give a powerfull scriptable Lua interface to your application with PowerBLua
    Leakout - Firewall outbound control tester - BitmapRip Extract/recover bitmaps from any file!

    [This message has been edited by Marco Pontello (edited October 27, 2006).]
    -- The universe tends toward maximum irony. Don't push it.

    File Extension Seeker - Metasearch engine for file extensions / file types
    Online TrID file identifier | TrIDLib - Identify thousands of file formats
Working...
X