home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / BBS_UTIL / BM0406_A.ZIP / MAKETABS.ZIP / MAKETABS.BAS next >
BASIC Source File  |  1994-04-06  |  5KB  |  127 lines

  1. DEFINT A-Z
  2. PassedArguments$ = COMMAND$ + " "
  3. X = INSTR(" H h ? ", PassedArguments$)
  4. IF X > 0 THEN
  5.    CLS
  6.    PRINT "MAKETABS version 1.0 Copyright (c) 1989 by Ken Goosens"
  7.    PRINT "an RBBS utility to make an index tab for sorted file list"
  8.    PRINT
  9.    PRINT "Format:      MAKETABS <options>    where options are:"
  10.    PRINT
  11.    PRINT "/IN=<input file>                       Default:  FIDX.DEF"
  12.    PRINT "/OUT=<output file>                     Default:  LIDX.DEF"
  13.    PRINT "/B  (run batch)                        Default:  (no)"
  14.    PRINT "/INDEXPOS=<column position to index>   Default:  1"
  15.    PRINT                                                             ' RM070693
  16.    IF X > 1 THEN END
  17. END IF
  18.  
  19. ' Initialize
  20.  
  21. InFile$ = "FIDX.DEF"
  22. OutFile$ = "FIDXT.DEF"
  23. IndexPos = 1
  24. TRUE = -1
  25. FALSE = 0
  26. RunBatch = FALSE
  27.  
  28. ' Process Command Line
  29.  
  30. PassedArguments$ = UCASE$(PassedArguments$)
  31. X = INSTR(PassedArguments$, "/INDEXPOS=")
  32. IF X > 0 THEN
  33.    IndexPos = VAL(MID$(PassedArguments$, X + 10))
  34. END IF
  35. X = INSTR(PassedArguments$, "/IN=")
  36. IF X > 0 THEN
  37.    Y = INSTR(X, PassedArguments$, " ")
  38.    InFile$ = MID$(PassedArguments$, X + 4, Y - X - 4)
  39. END IF
  40. X = INSTR(PassedArguments$, "/OUT=")
  41. IF X > 0 THEN
  42.    Y = INSTR(X, PassedArguments$, " ")
  43.    OutFile$ = MID$(PassedArguments$, X + 5, Y - X - 5)
  44. END IF
  45. RunBatch = (INSTR(PassedArguments$, "/B ") > 0)
  46.  
  47. PRINT "MAKETABS version 1.0 Copyright (c) 1989 by Ken Goosens"       ' RM070693
  48. PRINT                                                                ' RM070693
  49. PRINT "Modified by R. Molinelli on 07/06/93 for Large Indices &"     ' RM070693
  50. PRINT "additional characters in filenames for compatiblity with"     ' RM070693
  51. PRINT "LRGE174 & TAB174 mods by Yaser Behbehani (STUNY)"             ' RM070693
  52. PRINT
  53. PRINT "File to Create Tabs for .. "; InFile$
  54. PRINT "TAB file to make ......... "; OutFile$
  55. PRINT "Position to index ........ "; IndexPos
  56. PRINT
  57. IF NOT RunBatch THEN
  58.    INPUT "A to abort, anything else runs"; ANS$
  59.    ANS$ = UCASE$(ANS$)
  60.    IF ANS$ = "A" THEN END
  61. END IF
  62.  
  63. DIM StartPos&(40)                                                    ' RM071793
  64. CharsCounted$ = "!#$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_"           ' RM070693
  65. OPEN InFile$ FOR INPUT AS #1
  66. FOR i = 1 TO 40                                                      ' RM070693
  67.    StartPos&(i) = 0                                                  ' RM071793
  68. NEXT
  69. LinesRead& = 0                                                       ' RM071193
  70. PRINT "Processing file "; InFile$; " ";
  71. ColPos = POS(0)
  72. WHILE NOT EOF(1)
  73.    LINE INPUT #1, A$
  74.    LinesRead& = LinesRead& + 1                                       ' RM071193
  75.    LOCATE , ColPos
  76.    PRINT LinesRead&;                                                 ' RM071193
  77.    IndexChar$ = MID$(A$, IndexPos, 1)
  78.    Position = INSTR(CharsCounted$, IndexChar$)
  79.    IF Position > 0 THEN
  80.       IF StartPos&(Position) = 0 THEN                                ' RM071793
  81.          StartPos&(Position) = LinesRead&                            ' RM071193/071793
  82.       END IF
  83.    END IF
  84. WEND
  85. CLOSE 1
  86.  
  87. OPEN OutFile$ FOR RANDOM AS #1 LEN = 160                             ' RM070693
  88. FIELD #1, 160 AS OutRec$                                             ' RM070693
  89. PrevValue& = 0                                                       ' RM071793
  90. ' put 1 in for leading 0's
  91. i = 1
  92. WHILE i < 41 AND StartPos&(i) = 0                                    ' RM070693/071793
  93.    StartPos&(i) = 1                                                  ' RM071793
  94.    i = i + 1
  95. WEND
  96. ' find last non-zero value
  97. i = 40                                                               ' RM070693
  98. WHILE i > 0 AND StartPos&(i) = 0                                     ' RM071793
  99.    i = i - 1
  100. WEND
  101. StartPos&(40) = StartPos&(i)                                         ' RM070693/071793
  102. ' propagate high values to left over 0's
  103. FOR i = 40 TO 1 STEP -1                                              ' RM070693
  104.    IF StartPos&(i) = 0 THEN                                          ' RM071793
  105.       CurrentValue& = 1                                              ' RM071793
  106.       IF PrevValue& > CurrentValue& THEN                             ' RM071793
  107.          CurrentValue& = PrevValue&                                  ' RM071793
  108.       END IF
  109.    ELSE
  110.       CurrentValue& = StartPos&(i)                                   ' RM071793
  111.    END IF
  112.    StartPos&(i) = CurrentValue&                                      ' RM071793
  113.    PrevValue& = CurrentValue&                                        ' RM071793
  114. NEXT
  115. FOR i = 1 TO 40                                                      ' RM070693
  116.    MID$(OutRec$, 1 + 4 * (i - 1), 4) = MKL$(StartPos&(i))            ' RM070693/071793
  117. NEXT
  118. PUT 1, 1
  119. CLOSE 1
  120. PRINT
  121. PRINT "Created TAB file "; OutFile$
  122. 'FOR i = 1 TO 36
  123. '   PRINT MID$(CharsCounted$, i, 1); StartPos(i); ". ";
  124. 'NEXT
  125. END
  126.  
  127.