home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / bbs / cmpbbs10.arc / CMPBBS.BAS next >
BASIC Source File  |  1990-02-26  |  14KB  |  341 lines

  1. DECLARE SUB BreakFileName (FileSpec$, DrvPath$, Prefix$, Extension$, ForJoining%)
  2. DECLARE SUB FindLast (LookIn$, LookFor$, WhereFound%, NumFinds%)
  3. DECLARE SUB TRIM (TRIM.PARM$)
  4. DECLARE SUB TrimTrail (TRIM.PARM$, TRIM.THIS$)
  5. DEFINT A-Z
  6. DIM BBSList$(200), Headers$(200), DirStartCol(200)                   ' 022490
  7. TRUE = -1
  8. FALSE = 0
  9. FOR I = 1 TO 200                                                     ' 022490
  10.    DirStartCol(I) = 1                                                ' 022490
  11. NEXT                                                                 ' 022490
  12. MasterStartCol = 1                                                   ' 022490
  13. MasterList$ = "UPLOADS.DIR"
  14. OutFile$ = "NEWFILES.DIR"
  15. NumNewLists = 0
  16. ConfigFile$ = "CMPBBS.CFG"
  17.  
  18. PassedArguments$ = COMMAND$
  19. PassedArguments$ = UCASE$(PassedArguments$)
  20. X = INSTR(PassedArguments$, "/B")
  21. RunBatch = (X > 0)
  22. IF RunBatch THEN
  23.    PassedArguments$ = LEFT$(PassedArguments$, X - 1) + RIGHT$(PassedArguments$, LEN(PassedArguments$) - X - 1)
  24. END IF
  25. X = INSTR(PassedArguments$, "/SHARE")
  26. SHARING = (X > 0)
  27. IF SHARING THEN
  28.    PassedArguments$ = LEFT$(PassedArguments$, X - 1) + RIGHT$(PassedArguments$, LEN(PassedArguments$) - X - 1)
  29. END IF
  30. IF PassedArguments$ <> "" THEN
  31.    ConfigFile$ = PassedArguments$
  32. END IF
  33.  
  34. ON ERROR GOTO 40000
  35. IF SHARING THEN
  36.    OPEN ConfigFile$ FOR INPUT SHARED AS #1
  37. ELSE
  38.    OPEN ConfigFile$ FOR INPUT AS #1
  39. END IF
  40. ON ERROR GOTO 0
  41. WHILE NOT EOF(1)
  42.    LINE INPUT #1, A$
  43.    X$ = LEFT$(A$, 1)
  44.    IF X$ <> "" AND X$ <> "*" THEN
  45.       A$ = UCASE$(A$)
  46.       IF LEFT$(A$, 12) = "/MASTERLIST=" THEN
  47.          MasterList$ = MID$(A$, 13)
  48.          CALL TRIM(MasterList$)
  49.       END IF
  50.       IF LEFT$(A$, 9) = "/ADDLIST=" THEN
  51.          NewList$ = MID$(A$, 10)
  52.          CALL TRIM(NewList$)
  53.          NumNewLists = NumNewLists + 1
  54.          BBSList$(NumNewLists) = NewList$
  55.       END IF
  56.       IF LEFT$(A$, 8) = "/HEADER=" THEN
  57.          Headers$(NumNewLists) = MID$(A$, 9)
  58.          CALL TRIM(Headers$(NumNewLists))
  59.       END IF
  60.       IF LEFT$(A$, 9) = "/OUTFILE=" THEN
  61.          OutFile$ = MID$(A$, 10)
  62.          CALL TRIM(OutFile$)
  63.       END IF
  64.       IF LEFT$(A$, 6) = "/SHARE" THEN
  65.          SHARING = TRUE
  66.       END IF
  67.       IF LEFT$(A$, 13) = "/DIRSTARTCOL=" THEN                        ' 022490
  68.          X$ = MID$(A$, 14)                                           ' 022490
  69.          CALL TRIM(X$)                                               ' 022490
  70.          DirStartCol(NumNewLists) = VAL(X$)                          ' 022490
  71.       END IF                                                         ' 022490
  72.       IF LEFT$(A$, 16) = "/MASTERSTARTPOS=" THEN                     ' 022490
  73.          X$ = MID$(A$, 15)                                           ' 022490
  74.          CALL TRIM(X$)                                               ' 022490
  75.          MasterStartCol = VAL(X$)                                    ' 022490
  76.       END IF                                                         ' 022490
  77.       IF LEFT$(A$, 10) = "/OUTCATAT=" THEN                           ' 022690
  78.          X$ = MID$(A$, 11)                                           ' 022690
  79.          CALL TRIM(X$)                                               ' 022690
  80.          OutCatAt = VAL(X$)                                          ' 022690
  81.       END IF                                                         ' 022690
  82.    END IF
  83. WEND
  84. CLOSE 1
  85.  
  86. PRINT "CMPBBS version 1.0 Feb 26, 1990 copyright (c) 1990 by Ken Goosens"
  87. PRINT "A SysOp utility to compare BBS file lists"
  88. PRINT
  89. PRINT "On this run"
  90. PRINT "Configuration file used ....... "; ConfigFile$
  91. PRINT "Name of master list of files... "; MasterList$
  92. PRINT "File names begin in column....."; MasterStartCol              ' 022490
  93. PRINT "# of file lists to process ...."; NumNewLists
  94. PRINT "Writing list of new files to... "; OutFile$
  95. PRINT "Adding category code at column.";                             ' 022690
  96. IF OutCatAt > 0 THEN                                                 ' 022690
  97.    PRINT OutCatAt                                                    ' 022690
  98. ELSE                                                                 ' 022690
  99.    PRINT " <none>"                                                   ' 022690
  100. END IF                                                               ' 022690
  101. PRINT
  102. IF NOT RunBatch THEN
  103.    INPUT "A to abort, anything else runs"; ANS$
  104.    ANS$ = UCASE$(ANS$)
  105.    IF ANS$ = "A" THEN
  106.       END
  107.    END IF
  108. END IF
  109.  
  110. ON ERROR GOTO 40010
  111. FileIn$ = MasterList$
  112. IF SHARING THEN
  113.    OPEN MasterList$ FOR INPUT SHARED AS #1
  114. ELSE
  115.    OPEN MasterList$ FOR INPUT AS #1
  116. END IF
  117. ON ERROR GOTO 0
  118.  
  119. GOSUB BuildCRC
  120.  
  121. OPEN OutFile$ FOR OUTPUT AS #2
  122.  
  123. AddToNew = TRUE
  124. NumFilesAdded = 0
  125. FOR ix = 1 TO NumNewLists
  126.    PRINT "Processing BBS list "; BBSList$(ix);
  127.    ON ERROR GOTO 40100
  128.    FileIn$ = BBSList$(ix)
  129.    StartCol = DirStartCol(ix)                                        ' 022490
  130.    IF SHARING THEN
  131.       OPEN BBSList$(ix) FOR INPUT SHARED AS #1
  132.    ELSE
  133.       OPEN BBSList$(ix) FOR INPUT SHARED AS #1
  134.    END IF
  135.    ON ERROR GOTO 0
  136.    IF ERC > 0 THEN
  137.       ERC = 0
  138.       PRINT " not found - skipping"
  139.    ELSE
  140.       CatCode$ = ""                                                  ' 022690
  141.       IF Headers$(ix) <> "" THEN                                     ' 022690
  142.          PRINT #2, " "; Headers$(ix)                                 ' 022690
  143.          IF OutCatAt > 0 THEN                                        ' 022690
  144.             X = INSTR(Headers$(ix), "M! ")                           ' 022690
  145.             IF X > 0 THEN                                            ' 022690
  146.                X$ = MID$(Headers$(ix), X + 3)                        ' 022690
  147.                CALL BreakFileName(X$, DrvPath$, CatCode$, Ext$, 0)   ' 022690
  148.                CatCode$ = LEFT$(CatCode$, 3)                         ' 022690
  149.                IF LEN(CatCode$) < 3 THEN                             ' 022690
  150.                   CatCode$ = CatCode$ + SPACE$(3 - LEN(CatCode$))    ' 022690
  151.                END IF                                                ' 022690
  152.             END IF                                                   ' 022690
  153.          END IF                                                      ' 022690
  154.       END IF                                                         ' 022690
  155.       GOSUB ProcessList
  156.    END IF
  157. NEXT
  158.  
  159. END
  160.  
  161. BuildCRC:
  162.  
  163.    WorkName$ = SPACE$(12)
  164.    WorkComp$ = WorkName$                                             ' 022490
  165.    CRCMaster$ = ""
  166.    FileCRC$ = MKI$(0)
  167.    AddToNew = FALSE
  168.    PRINT
  169.    PRINT "Indexing "; MasterList$;
  170.    StartCol = MasterStartCol                                         ' 022490
  171.    GOSUB ProcessList
  172.  
  173. RETURN
  174.  
  175. ProcessList:
  176.  
  177.    AddedAtStart = NumFilesAdded
  178.    NumRead = 0
  179.    AddCat = (CatCode$ <> "")
  180.    CutOffCat = OutCatAt + LEN(CatCode$) - 1
  181.    PrintAt = POS(0) + 1
  182.    ON ERROR GOTO 40020
  183.    WHILE NOT EOF(1)
  184. 4     LINE INPUT #1, A$
  185.       NumRead = NumRead + 1
  186.       LOCATE , PrintAt
  187.       PRINT NumRead;
  188.       IF LEN(A$) < StartCol THEN                                     ' 022490
  189.          GOTO NotAFile                                               ' 022490
  190.       END IF                                                         ' 022490
  191.       IF StartCol > 1 THEN                                           ' 022490
  192.          A$ = MID$(A$, StartCol)                                     ' 022490
  193.       END IF                                                         ' 022490
  194.       IF INSTR("/[]|<>+=;, ?*", LEFT$(A$, 1)) > 0 THEN
  195.          GOTO NotAFile
  196.       END IF
  197.       Y = INSTR(A$ + " ", " ")
  198.       IF Y > 13 THEN                                                 ' 022690
  199.          GOTO NotAFile                                               ' 022490
  200.       END IF                                                         ' 022490
  201.       LSET WorkName$ = A$
  202.       X = LEN(A$)
  203.       IF X < 12 THEN
  204.          MID$(WorkName$, X + 1) = "            "
  205.       END IF
  206.       Y = INSTR(WorkName$, " ")
  207.       Z = INSTR(WorkName$, ".")                                      ' 022490
  208.       IF Z = 0 THEN                                                  ' 022490
  209.          IF Y = 0 OR Y > 9 THEN                                      ' 022490
  210.             GOTO NotAFile                                            ' 022490
  211.          END IF                                                      ' 022490
  212.       END IF                                                         ' 022490
  213.       IF Y > 0 THEN
  214.          IF Y < 10 THEN
  215.             MID$(WorkName$, Y) = "." + MID$(WorkName$, 10) + SPACE$(9 - Y)
  216.          END IF
  217.       ELSE                                                           ' 022490
  218.          IF Z = 0 OR Z > 9 THEN                                      ' 022490
  219.             GOTO NotAFile                                            ' 022490
  220.          END IF                                                      ' 022490
  221.       END IF
  222.       LSET WorkComp$ = WorkName$                                     ' 022490
  223.       WorkName$ = UCASE$(WorkName$)                                  ' 022490
  224.       IF WorkComp$ <> WorkName$ THEN                                 ' 022490
  225.          GOTO NotAFile                                               ' 022490
  226.       END IF                                                         ' 022490
  227.       CALL Xmodem(WorkName$, XmodemChecksum, CRCValue, CRCHigh, CRCLow)
  228.       LSET FileCRC$ = MKI$(CRCValue)
  229.       Z = 1
  230. SearchAgain:
  231.       HitCRC = INSTR(Z, CRCMaster$, FileCRC$)
  232.       IF HitCRC > 0 THEN
  233.          Y = HitCRC MOD 2
  234.          IF Y = 0 THEN
  235.             Z = HitCRC + 1
  236.             GOTO SearchAgain
  237.          END IF
  238.       END IF
  239.  
  240.       IF HitCRC = 0 THEN
  241.          CRCMaster$ = CRCMaster$ + FileCRC$
  242.          IF AddToNew THEN
  243.             NumFilesAdded = NumFilesAdded + 1
  244.             IF AddCat THEN                                           ' 022690
  245.                X = LEN(A$)                                           ' 022690
  246.                IF X > CutOffCat THEN                                 ' 022690
  247.                   A$ = LEFT$(A$, CutOffCat)                          ' 022690
  248.                ELSE                                                  ' 022690
  249.                   IF X < CutOffCat THEN                              ' 022690
  250.                      A$ = A$ + SPACE$(CutOffCat - X)                 ' 022690
  251.                   END IF                                             ' 022690
  252.                END IF                                                ' 022690
  253.                MID$(A$, OutCatAt) = CatCode$                         ' 022690
  254.             END IF                                                   ' 022690
  255. 5           PRINT #2, A$
  256.          END IF
  257.       END IF
  258. NotAFile:
  259.    WEND
  260.    ON ERROR GOTO 0
  261.    CLOSE 1
  262.    IF AddToNew THEN
  263.       PRINT "  # new"; NumFilesAdded - AddedAtStart
  264.    ELSE
  265.       PRINT
  266.    END IF
  267.  
  268. RETURN
  269.  
  270.  
  271. 40000 PRINT "Missing configuration file "; ConfigFile$
  272.       END
  273. 40010 PRINT "Missing master file list "; MasterList$
  274.       END
  275. 40020 IF ERL = 4 THEN
  276.          PRINT "Error "; ERR; " while reading "; FileIn$
  277.       ELSE
  278.          PRINT "Error "; ERR; " while writing "; OutFile$
  279.       END IF
  280.       PRINT "Aborting..."
  281.       END
  282.       
  283.  
  284. 40100 ERC = ERR
  285.       RESUME NEXT
  286.  
  287.       SUB BreakFileName (FileSpec$, DrvPath$, Prefix$, Extension$, ForJoining) STATIC
  288.       FileSpec$ = UCASE$(FileSpec$)
  289.       DrvPath$ = ""
  290.       Prefix$ = ""
  291.       Extension$ = ""
  292.       CALL TrimTrail(FileSpec$, "\")
  293.       WasL = LEN(FileSpec$)
  294.       IF WasL < 1 THEN EXIT SUB
  295.       CALL FindLast(FileSpec$, "\", WasX, WasY)
  296.       IF WasX < 1 THEN IF MID$(FileSpec$, 2, 1) = ":" THEN DrvPath$ = LEFT$(FileSpec$, 1):                                ZWasS = 3 ELSE ZWasS = 1 ELSE DrvPath$ = LEFT$(FileSpec$, WasX - 1):                         ZWasS = WasX + 1:             IF  _
  297. WasY = 1 THEN DrvPath$ = DrvPath$ + "\"
  298.       WasX = INSTR(FileSpec$ + ".", ".")
  299.       IF WasX < WasL THEN Extension$ = MID$(FileSpec$, WasX + 1)
  300.       IF ZWasS <= WasL THEN IF WasX >= ZWasS THEN Prefix$ = MID$(FileSpec$, ZWasS, WasX - ZWasS)
  301.       IF NOT ForJoining THEN EXIT SUB
  302.       IF LEN(DrvPath$) = 1 THEN IF DrvPath$ <> "\" THEN DrvPath$ = DrvPath$ + ":"
  303.       IF INSTR(DrvPath$, "\") > 0 AND RIGHT$(DrvPath$, 1) <> "\" THEN DrvPath$ = DrvPath$ + "\"
  304.       IF LEN(Extension$) > 0 THEN Extension$ = "." + Extension$
  305.       END SUB
  306.  
  307.       SUB FindLast (LookIn$, LookFor$, WhereFound, NumFinds) STATIC
  308.       WhereFound = INSTR(LookIn$, LookFor$)
  309.       NumFinds = -(WhereFound > 0)
  310.       NextFound = INSTR(WhereFound + 1, LookIn$, LookFor$)
  311.       WHILE NextFound > 0
  312.          NumFinds = NumFinds + 1
  313.          WhereFound = NextFound
  314.          NextFound = INSTR(WhereFound + 1, LookIn$, LookFor$)
  315.       WEND
  316.       END SUB
  317.  
  318.       SUB TRIM (TRIM.PARM$) STATIC
  319.       L = INSTR(TRIM.PARM$, " ")
  320.       IF L < 1 THEN EXIT SUB
  321.       IF L = 1 THEN
  322.          WHILE LEFT$(TRIM.PARM$, 1) = " "
  323.             TRIM.PARM$ = RIGHT$(TRIM.PARM$, LEN(TRIM.PARM$) - 1)
  324.          WEND
  325.       END IF
  326.       CALL TrimTrail(TRIM.PARM$, " ")
  327.       END SUB
  328.  
  329.       SUB TrimTrail (TRIM.PARM$, TRIM.THIS$) STATIC
  330.       IF RIGHT$(TRIM.PARM$, 1) <> TRIM.THIS$ THEN EXIT SUB                                                             ' KG081003
  331.       J = LEN(TRIM.PARM$) - 1                                        ' KG081003
  332. 108   IF J > 0 THEN
  333.          IF MID$(TRIM.PARM$, J, 1) = TRIM.THIS$ THEN
  334.             J = J - 1
  335.             GOTO 108
  336.          END IF
  337.       END IF
  338.       TRIM.PARM$ = LEFT$(TRIM.PARM$, J)                              ' KG081003
  339.       END SUB
  340.  
  341.