! SEQRAN.BAS - Convert a Sequential Image file back to Random
!  (Hash total remains the same)
! Originally appeared in AMUS.LOG Vol 8 No 10 (Oct'85) pp 41+
! Modified by Brad Horine, 29-Jan-87
!
! The hash totals will be the same ONLY if the .SEQ file was created
! using RANSEQ or a similar program.
!
! NOTE: This program also makes use of the XCALL routine CONT.SBR
!
       PROGRAM SEQRAN, 1.0(103)
!
MAP1 REC01,F
MAP1 RAND'SIZE,F
MAP1 EXT$,S,3
MAP1 FOUND,F
MAP1 RAND'NAME$,S,30
MAP1 SEQ'NAME$,S,30
MAP1 SEQ'SAVE$,S,30
MAP1 SEQ'DOT,F
MAP1 SEQ'COLON,F
MAP1 SEQ'BRACK,F
MAP1 SEQ'DELIM,F
MAP1 ERR'CODE,F
MAP1 ERROR'MSG(2),S,40
       ERROR'MSG(1) = "Sequential file not found"
       ERROR'MSG(2) = "File is not sequential"
!
       PRINT TAB(-1,0); "Sequential to Random File Conversion Utility"
!
       PRINT TAB(3,1); "Name of .SEQ image file: ";
       INPUT LINE SEQ'NAME$
!
! Default to .SEQ if no extension given
!
SEQ'DEFAULT:
       SEQ'SAVE$ = SEQ'NAME$
       SEQ'COLON = INSTR(1, SEQ'NAME$, ":")
       SEQ'DOT =   INSTR(1, SEQ'NAME$, ".")
       SEQ'BRACK = INSTR(1, SEQ'NAME$, "[")
       IF SEQ'DOT <> 0 THEN GOTO LOOKUP'FILE
       IF SEQ'BRACK = 0 THEN SEQ'NAME$ = SEQ'NAME$ + ".SEQ" &
          ELSE  SEQ'NAME$ = SEQ'NAME$[1;SEQ'BRACK-1] + ".SEQ" &
                + SEQ'NAME$[SEQ'BRACK,LEN(SEQ'NAME$)]
!
LOOKUP'FILE:
       LOOKUP SEQ'NAME$, FOUND
       IF FOUND = 0 THEN ERR'CODE = 1: GOTO ERROR'OUT
       IF FOUND < 0 THEN ERR'CODE = 2: GOTO ERROR'OUT
       RAND'SIZE = INT((FOUND * 510)/512)
!
       PRINT TAB(5,1); "Enter 3-letter EXTENSION of random file: ";
       INPUT LINE EXT$
!
! Create a filnam.EXT in this PPN
!
       IF SEQ'COLON = 0 AND SEQ'DOT = 0 AND SEQ'BRACK = 0 &
          THEN RAND'NAME$ = SEQ'SAVE$ + "." + EXT$ : &
          GOTO MAKE'RANDOM
       IF SEQ'DOT > 0 AND SEQ'BRACK = 0 THEN SEQ'DELIM = SEQ'DOT
       IF SEQ'BRACK > 0 AND SEQ'DOT = 0 THEN SEQ'DELIM = SEQ'BRACK
       IF SEQ'BRACK > 0 AND SEQ'DOT > 0 THEN SEQ'DELIM = &
          SEQ'DOT MIN SEQ'BRACK
       RAND'NAME$ = SEQ'NAME$[(1 MAX SEQ'COLON),SEQ'DELIM-1] + EXT$
!
MAKE'RANDOM:
       ALLOCATE RAND'NAME$, RAND'SIZE
!
       PRINT TAB(7,1); "Performing conversion, please wait ... ";
!
       OPEN #1, RAND'NAME$, RANDOM, 512, REC01
       OPEN #2, SEQ'NAME$, INPUT
!
       XCALL CONT
!
       PRINT TAB(9,1); "Conversion complete.  Data is in "; RAND'NAME$
       GOTO CLOSE'FILES
!
ERROR'OUT:
       PRINT : PRINT CHR(7); "?"; ERROR'MSG(ERR'CODE)
!
CLOSE'FILES:
       CLOSE #1: CLOSE #2
       PRINT : END