'===========================================================================
' Subject: STRIP LEADING TABS FROM FILE       Date: 06-27-98 (00:00)       
'  Author: PowerBASIC, Inc.                   Code: PBCC                   
'  Origin: ftp.powerbasic.com               Packet: PBCC.ABC
'===========================================================================
'=============================================================================
'
'  Strip leading tabs from a text file.
'  Copyright (c) 1998 by PowerBASIC, Inc.  All Rights Reserved.
'
'=============================================================================

'-----------------------------------------------------------------------------
'
FUNCTION Exist(BYVAL Filenam AS STRING) AS LONG

  FUNCTION = LEN(DIR$(Filenam)) > 0

END FUNCTION

'-----------------------------------------------------------------------------
' MakeBAK - Rename a file with a .BAK extension and return the new filename
'
' Filename = Name of the file to rename.
'
' Returns:
'   Name of file with .BAK extension.
'
FUNCTION MakeBAK(BYVAL Filename AS STRING) AS STRING

  DIM Bak AS STRING
  DIM Dot AS LONG

  Bak = Filename

  '***  Add BAK extension  ***

  Dot = INSTR(Bak, ".")
  IF Dot = 0 THEN
    Bak = Bak + ".BAK"
  ELSE
    Bak = LEFT$(Bak, Dot) + "BAK"
  END IF

  '***  If .BAK file already exists, kill it  ***

  IF Exist(Bak) THEN
    KILL Bak
  END IF

  '***  Rename file  ***

  NAME Filename AS Bak

  '*** Return the new file name ***

  FUNCTION = Bak

END FUNCTION

'----------------------------------------------------------------------------
' ArgC - Return the number of arguments passed in string of command
'        arguments (such as COMMAND$).
'
' Cmd  = COMMAND$, or string of command arguments
'
FUNCTION ArgC(BYVAL Cmd AS STRING) AS LONG

  DIM arg AS LONG
  DIM f   AS STRING
  DIM q   AS LONG

  DO WHILE LEN(cmd)
    INCR arg
    f = LEFT$(cmd, 1)
    IF ASC(f) = 34 THEN
      q = INSTR(MID$(cmd,2), CHR$(34))
      IF q THEN
        f = LEFT$(cmd, q+1)
      ELSE
        f = cmd
      END IF
    ELSE
      f = f + EXTRACT$(MID$(cmd,2), ANY CHR$(34)+" /")
    END IF
    cmd = LTRIM$(MID$(cmd, len(f)+1))
  LOOP

  FUNCTION = arg

END FUNCTION


'----------------------------------------------------------------------------
' ArgV - Return the specified command line argument passed in a string of
'        command arguments (such as COMMAND$).
'
' Which = Number of argument to return.
' Cmd   = COMMAND$, or string of command arguments
'
FUNCTION ArgV(BYVAL Which AS LONG, BYVAL Cmd AS STRING) AS STRING

  DIM arg AS LONG
  DIM f   AS STRING
  DIM q   AS LONG

  DO WHILE LEN(cmd)
    INCR arg
    f = LEFT$(cmd, 1)
    IF ASC(f) = 34 THEN
      q = INSTR(MID$(cmd,2), CHR$(34))
      IF q THEN
        f = LEFT$(cmd, q+1)
      ELSE
        f = cmd
      END IF
    ELSE
      f = f + EXTRACT$(MID$(cmd,2), ANY CHR$(34)+" /")
    END IF
    cmd = LTRIM$(MID$(cmd, len(f)+1))
    IF arg = which THEN
      EXIT DO
    ELSE
      f = ""
    END IF
  LOOP

  FUNCTION = f

END FUNCTION

'----------------------------------------------------------------------------

FUNCTION PbMain() AS LONG

  LOCAL Filename AS STRING
  LOCAL InFile   AS STRING
  LOCAL Buffer   AS STRING
  LOCAL Temp     AS STRING
  LOCAL Spaces   AS LONG
  LOCAL x        AS LONG

  STDOUT "DETAB v1.0 þ Strip Leading Tabs from Text Files"
  STDOUT "Copyright (c) 1998 by PowerBASIC, Inc.  All Rights Reserved."
  STDOUT ""

  IF ArgC(COMMAND$) = 0 THEN
    STDOUT "Usage:  DETAB filename [spaces]"
    FUNCTION = 1
    EXIT FUNCTION
  END IF

  Filename = ArgV(1, COMMAND$)
  IF ArgC(COMMAND$) = 2 THEN
    Spaces = VAL( ArgV(2, COMMAND$) )
  ELSE
    Spaces = 2                     'default to two spaces
  END IF

  IF NOT Exist(Filename) THEN
    STDOUT "Error!  " + Filename + " does not exist."
    FUNCTION = 2
    EXIT FUNCTION
  END IF

  Infile = MakeBAK(Filename)    'back up the original file

  OPEN Infile FOR INPUT AS #1
    OPEN Filename FOR OUTPUT AS #2

      WHILE NOT EOF(1)

        LINE INPUT #1, Buffer
        Temp = ""

        FOR x = 1 TO LEN(Buffer)
          IF ASC(Buffer) <> 9 THEN  'if char is not a tab
            EXIT FOR                'then exit the loop
          END IF
          Temp = Temp + SPACE$(Spaces)
          Buffer = MID$(Buffer, 2)
        NEXT x

        PRINT #2, Temp + Buffer
      WEND

    CLOSE #2
  CLOSE #1

  STDOUT "Done!"
END FUNCTION
