PROGRAM TYPE
****
*  TYPE
*  A program to display the contents of a record.
LastUpdated... = "Rev: 09:51 27JUL88 REP REP 32 Z UTILITIES>BP>TYPE.IBAS"
*  Written by Andrew McLaughlin.
*  REV 1.10
****
*                           R E V I S I O N   L O G
* PR#     WHEN     WHO        WHY
* ======= ======== ========== ==========================================
*         AUG85    MCLAUGHLIN INITIAL CODING
* 001     22OCT85  MCLAUGHLIN Add "X" option at continue ... prompt.
* 002     11OCT86  MCLAUGHLIN Add code to append recordname with
*                  .IBAS if the filename ends in "BP" or "PL" and if
*                  it fails to read the given recordname.
****
$INSERT REP>PROGS>STANDARD.SYMBOLS
     RESOLVE.PATH$ = '*RESOLVE.PATH'
     READ.BP.PL$ = '*READ.BP.PL'

     CLS = @(-1)
     PROMPT ''
     SCREEN.LINE = 1
     BAD.CHARACTERS = ''
     FOR I = 0 TO 31
        BAD.CHARACTERS := CHAR(I)
     NEXT I
     FOR I = 127 TO 249
        BAD.CHARACTERS := CHAR(I)
     NEXT I
     BAD.CHARACTERS := CHAR(255)
     PERIODS = STR('.',LEN(BAD.CHARACTERS))
     CMD = TRIM(@SENTENCE)
     CONVERT LCASE$ TO UCASE$ IN CMD
     NEXT.TOKEN = 2
     GOSUB GET.TOKEN
     IF NO.MORE.TOKENS THEN STOP 'TYPE what?'
     IF (TOKEN = 'DICT') THEN
        DICT = 'DICT'
        GOSUB GET.TOKEN
        IF NO.MORE.TOKENS THEN STOP 'Filename missing.'
        FILENAME = TOKEN
     END
     ELSE
        DICT = ''
        FILENAME = TOKEN
     END
     GOSUB GET.TOKEN
     RECORDNAME = TOKEN
     ERROR = ''
     PATH = ''
     CALL @RESOLVE.PATH$(DICT, FILENAME, PATH, ERROR)
     IF ERROR NE '' THEN
        STOP ERROR
     END
     OPEN DICT,FILENAME TO FILE ELSE STOP FILENAME:' file not found.'
     IF RECORDNAME EQ '*'
     THEN
        PRINT 'Selecting all records of ':DICT:' ':FILENAME
        SELECT FILE
        RECORDNAME = ''
     END
     IF RECORDNAME EQ ''
     THEN
        LOOP
           READNEXT RECORDNAME ELSE STOP
           GOSUB DISPLAY
        REPEAT
     END
     ELSE
        LOOP UNTIL NO.MORE.TOKENS
           GOSUB DISPLAY
           GOSUB GET.TOKEN
           RECORDNAME = TOKEN
        REPEAT
     END
     STOP
*
*
*
DISPLAY:
     FOUND = TRUE$                                                 ;*[002]
     RECORD = ''
     CALL @READ.BP.PL$(RECORDNAME, FILE, RECORD, 'OLD,SHARE', ERROR)
     IF ERROR NE '' THEN
        PRINT ERROR
        RETURN
     END
     IF @(0,0) THEN NULL
     SIZE = COUNT(RECORD,@FM) + (RECORD NE '')
     HDG = SPACE(10):PATH:'>':RECORDNAME:'     ':SIZE:' fields.'
     PRINT HDG
     SCREEN.LINE += 1
     MORE.FIELDS = LEN(RECORD) GT 0
     RECORD.LINE = 1
     LOOP
     WHILE MORE.FIELDS
        FIELD = RECORD<1>
        DEL RECORD<1>
        MORE.FIELDS = LEN(RECORD) GT 0
        CONVERT BAD.CHARACTERS TO PERIODS IN FIELD
        PT = FMT(RECORD.LINE,'"0"R#4'):' ':TRIMB(FIELD[1,75])
        PRINT PT
        RECORD.LINE += 1
        SCREEN.LINE += 1
        IF SCREEN.LINE GT 23 THEN
           SCREEN.LINE = 1
           PRINT @(0,23):'Press <RETURN> to continue ...':
           INPUT KEY,1
           CONVERT LCASE$ TO UCASE$ IN KEY
           IF KEY EQ 'Q' THEN RETURN
           IF KEY EQ 'X' THEN STOP                                 ;*[001]
           PRINT HDG
        END
     REPEAT
     RETURN
*
*
*
GET.TOKEN:
     TOKEN = FIELD(CMD,' ',NEXT.TOKEN)
     NO.MORE.TOKENS = (TOKEN EQ '')
     NEXT.TOKEN += 1
     RETURN
  END
