! VCRDOC.BAS  - VCR directory reformatting program
! Version 1.0
! Author:       John R. Plumlee, Sterling Quality Software, Inc.
!
! (C) 1985 Sterling Quality Software, Inc.  All rights reserved.
!
! Permission is granted to any individual or institution to copy or use this
! software and the routines described in it, except for explicitly commercial
! purposes. This software must not be sold to any person or institution.
!
!*************************** D I S C L A I M E R ****************************
!*   No warranty of the software or of the accuracy of the documentation   **
!*   surrounding it is expressed or implied, and neither the authors,      **
!*   Sterling Quality Software, Inc. nor AMUS acknowledge any liability    **
!*   resulting from program or documentation errors.                       **
!****************************************************************************
!
! usage format:
!       VCRDOC [<optional-output-file-name>] [<optional-work-file-name>]
!
       STRSIZ 80
       MAP1 INPUT'LINE,S,74
       MAP1 INPUT'WORK'AREA,@INPUT'LINE
               MAP2 FILE'NUMBER,S,7
               MAP2 FILE'DISK,S,6
               MAP2 FILE'NAME,S,7
               MAP2 FILE'EXT,S,4
               MAP2 FILE'PPN,S,8
               MAP2 FILE'SIZE,S,6
               MAP2 FILE'TYPE,S,2
               MAP2 FILE'DATE,S,10
               MAP2 FILE'TIME,S,8
               MAP2 FILE'FILLER,S,20
       MAP1 HEADER'TABLE
               MAP2 HEADER'LINE(6)
                       MAP3 HEADER'FILLER'1,S,15
                       MAP3 HEADER'TITLE,S,50
                       MAP3 HEADER'FILLER'2,S,11
                       MAP3 HEADER'PAGE,S,4
       MAP1 PPN'HEADER
               MAP2 PPN'DISK,S,6,"      "
               MAP2 PPN'B'1,S,1,"["
               MAP2 PPN'PPN,S,8,"        "
               MAP2 PPN'B'2,S,1,"]"
               MAP2 PPN'SPACE,S,4,"    "
               MAP2 PPN'CONTINUE,S,11,"           "
       MAP1 PPN'HEADER'WORK,S,31
       MAP1 DETAIL'TABLE
               MAP2 MAPLINE(51)
                       MAP3 OUT'COLUMN(4)
                               MAP4 OUT'NAME,S,7
                               MAP4 OUT'EXT,S,4
                               MAP4 OUT'SIZE,S,6
                               MAP4 OUT'TYPE,S,2
                               MAP4 OUT'FILLER,S,1
       MAP1 REMAP'DETAIL'TABLE,@DETAIL'TABLE
               MAP2 OUTLINE(51),S,80
       MAP1 NUMBER'OF'HEADERS,B,2,6
       MAP1 PAGE'NUMBER,B,2
       MAP1 LINE'NUMBER,B,2,9999
       MAP1 LINES'PER'PAGE,B,2,56
       MAP1 PPN'FILES,F,6,0
       MAP1 PPN'BLOCKS,F,6,0
       MAP1 DISK'FILES,F,6,0
       MAP1 DISK'BLOCKS,F,6,0
       MAP1 TOTAL'FILES,F,6,0
       MAP1 TOTAL'BLOCKS,F,6,0
       MAP1 SOURCE'FILE'NAME,S,10
       MAP1 OUTPUT'FILE'NAME,S,10
       FOR X = 1 TO NUMBER'OF'HEADERS
               HEADER'LINE(X)          =  SPACE(80)
       NEXT X
       MAPLINE(51)             =  SPACE(80)
       FOR X = 1 TO 4
               OUT'NAME(51,X)  =  ""
       NEXT X
       FOR X = 1 TO 50
               MAPLINE(X)      =  MAPLINE(51)
       NEXT X
       PRINT TAB(-1,0)
       PRINT "THE DATA MANAGER Tape Directory Reformatter Version 1.0"
       PRINT "Copyright 1985 by Sterling Quality Software, Inc."
       PRINT " "
       INPUT "Source file name = ",SOURCE'FILE'NAME
       SOURCE'FILE'NAME=  UCS(SOURCE'FILE'NAME)
       INPUT "Output file name = ",OUTPUT'FILE'NAME
       OUTPUT'FILE'NAME=  UCS(OUTPUT'FILE'NAME)
       I               =  INSTR(1,SOURCE'FILE'NAME,".")
       IF I            =  0                    THEN                      &
               SOURCE'FILE'NAME=  SOURCE'FILE'NAME + ".LST"
       I               =  INSTR(1,SOURCE'FILE'NAME,".")
       IF OUTPUT'FILE'NAME     =  "*"                  THEN                      &
               OUTPUT'FILE'NAME=  SOURCE'FILE'NAME[1,I] + "PRT"
       I               =  INSTR(1,OUTPUT'FILE'NAME,".")
       IF I            =  0                    THEN                      &
               OUTPUT'FILE'NAME=  OUTPUT'FILE'NAME + ".PRT"
       OPEN #1,SOURCE'FILE'NAME,INPUT
       OPEN #2,OUTPUT'FILE'NAME,OUTPUT
       GOSUB READ'INPUT'FILE
       GOSUB READ'INPUT'FILE
       GOSUB READ'INPUT'FILE
       HEADER'TITLE(1)         =  "               Reformated Tape Directory          "
       HEADER'TITLE(2)         =  "                        For                       "
010 GET'TITLES:
       FOR X = 3 TO 5
       GOSUB READ'INPUT'FILE
       HEADER'TITLE(X)         =  INPUT'LINE + SPACE(50)
       NEXT X
       HEADER'FILLER'2(5)      =  "      Page "
       ROW                     =  0
       COL                     =  1
020 PROCESS'INPUT'FILE:
       GOSUB READ'INPUT'FILE
       IF EOF(1)                                       THEN              &
               GOTO WRAP'UP'PROGRAM
       IF VAL(FILE'NUMBER)     =  0                    THEN              &
               GOTO PROCESS'INPUT'FILE

       IF (FILE'DISK           <> PPN'DISK             OR                &
           FILE'PPN            <> PPN'PPN)             AND               &
           PPN'DISK            <> " "                  AND               &
           PPN'PPN             <> " "                  THEN              &
               GOSUB HEADERS                                           : &
               GOSUB PRINT'PAGE                                        : &
               GOSUB CONTROL'BREAK                                     : &
               PPN'DISK        =  FILE'DISK                            : &
               PPN'PPN         =  FILE'PPN                             : &
               PPN'CONTINUE    =  "           "                        : &
               ROW             =  0                                    : &
               COL             =  1
       ROW                     =  ROW + 1
       IF ROW                  >  50                   THEN              &
               COL             =  COL + 1                              : &
               ROW             =  1
       IF COL                  >  4                    THEN              &
               GOSUB HEADERS                                           : &
               GOSUB PRINT'PAGE                                        : &
               PPN'CONTINUE    =  "(continued)"                        : &
               ROW             =  1                                    : &
               COL             =  1
       PPN'DISK                =  FILE'DISK
       PPN'PPN                 =  FILE'PPN
       OUT'NAME(ROW,COL)       =  FILE'NAME
       OUT'EXT(ROW,COL)        =  FILE'EXT
       OUT'SIZE(ROW,COL)       =  FILE'SIZE
       OUT'TYPE(ROW,COL)       =  FILE'TYPE
       PPN'FILES               =  PPN'FILES    + 1
       PPN'BLOCKS              =  PPN'BLOCKS   + VAL(FILE'SIZE)
       DISK'FILES              =  DISK'FILES   + 1
       DISK'BLOCKS             =  DISK'BLOCKS  + VAL(FILE'SIZE)
       TOTAL'FILES             =  TOTAL'FILES  + 1
       TOTAL'BLOCKS            =  TOTAL'BLOCKS + VAL(FILE'SIZE)
       GOTO PROCESS'INPUT'FILE
030 HEADERS:
       PAGE'NUMBER             =  PAGE'NUMBER + 1
       HEADER'PAGE(NUMBER'OF'HEADERS - 1)                                &
                               =  PAGE'NUMBER USING "####"
       PRINT #2,CHR(12);
       FOR X = 1 TO NUMBER'OF'HEADERS
               PRINT #2,HEADER'LINE(X)
       NEXT X
       RETURN
040 PRINT'PAGE:
       PPN'HEADER'WORK         =  PPN'HEADER
       X                       =  2
045 PRINT'PAGE'PPN'SQUEEZE:
       IF PPN'HEADER'WORK[X,X] =  " "                  THEN              &
               PPN'HEADER'WORK =  PPN'HEADER'WORK[  1,X-1] +             &
                                  PPN'HEADER'WORK[X+1, 20] +             &
                                  " "                      +             &
                                  PPN'HEADER'WORK[ 21, 31]             : &
               GOTO PRINT'PAGE'PPN'SQUEEZE
       IF PPN'HEADER'WORK[X,X] <> "]"                  AND               &
          X                    <  20                   THEN              &
               X               =  X + 1                                : &
               GOTO PRINT'PAGE'PPN'SQUEEZE
       PRINT #2,"  ";PPN'HEADER'WORK
       PRINT #2,""
       FOR X = 1 TO 50
               PRINT #2,"  ";OUTLINE(X)[1,-3]
       NEXT X
       PRINT #2,""
       FOR X = 1 TO 50
               MAPLINE(X)      =  MAPLINE(51)
       NEXT X
       RETURN
050 CONTROL'BREAK:
       PPN'HEADER'WORK         =  "[" + PPN'PPN + "]"
       X                       =  2
055 CONTROL'BREAK'SQUEEZE:
       IF PPN'HEADER'WORK[X,X] =  " "                  THEN              &
               PPN'HEADER'WORK =  PPN'HEADER'WORK[  1,X-1] +             &
                                  PPN'HEADER'WORK[X+1, -1]             : &
               GOTO CONTROL'BREAK'SQUEEZE
       IF PPN'HEADER'WORK[X,X] <> "]"                  AND               &
          X                    <  20                   THEN              &
               X               =  X + 1                                : &
               GOTO CONTROL'BREAK'SQUEEZE
       FOR X = 2 TO 9
               IF PPN'HEADER'WORK[X,X] =  " "          THEN              &
                       PPN'HEADER'WORK =  PPN'HEADER'WORK[  1,X-1] +     &
                                          PPN'HEADER'WORK[X+1, 20]
       NEXT X
       IF FILE'DISK            <> PPN'DISK             OR                &
           FILE'PPN            <> PPN'PPN              THEN              &
               PRINT #2,"  ";PPN'FILES;" files in ";                     &
                       PPN'BLOCKS;" blocks for ";PPN'HEADER'WORK       : &
               PRINT #2,""                                             : &
               PPN'FILES       =  0                                    : &
               PPN'BLOCKS      =  0
       IF FILE'DISK            <> PPN'DISK             THEN              &
               PRINT #2,"  ";DISK'FILES;" files in ";                    &
                       DISK'BLOCKS;" blocks for ";PPN'DISK             : &
               PRINT #2,""                                             : &
               DISK'FILES      =  0                                    : &
               DISK'BLOCKS     =  0
       RETURN
060 WRAP'UP'PROGRAM:
       FILE'DISK               =  SPACE(10)
       FILE'PPN                =  SPACE(10)
       GOSUB HEADERS
       GOSUB PRINT'PAGE
       GOSUB CONTROL'BREAK
       PRINT #2,"  Total of ";TOTAL'FILES;" files in ";TOTAL'BLOCKS;" blocks"
       PRINT #2,CHR(12);
       CLOSE #1
       CLOSE #2
       END
070 READ'INPUT'FILE:
       IF EOF(1)                                       THEN              &
               RETURN
       INPUT LINE #1,INPUT'LINE
       RETURN