C ***** Program to Extract State Data ***** C ***** from the Philips Logic Analyzer ***** C ***** file. ***** C ***** 6-AUG-1997 MSU PHYSICS ***** PROGRAM EXTRACT_1 C ***************************************** C DEFINE ALL VARIABLES AND ARRAYS C ***************************************** IMPLICIT NONE INTEGER*2 Index, IOSTATUS INTEGER*4 ITemp, JTemp, KTemp, LTemp, MTemp INTEGER*2 Junk(4096), RawJunk(256) CHARACTER FileName*32 C *********************************************************** C Get the name of the fixed point input raw data file. C *********************************************************** WRITE ( 6, 30 ) 30 FORMAT ( ////////////////////////// & ' ******************************************* '/ & ' * * '/ & ' * This is the EXTRACT 1 Program * '/ & ' * * '/ & ' * Revision 1 AUGUST 1997 * '/ & ' ******************************************* '// ) 40 WRITE ( 6, 50 ) 50 FORMAT ( // & ' To quit this program enter just a Carriage Return ', // & ' or else, to EXTRACT a State File enter the ', / & ' filename of the Philips State file. ', / & ' DEVC:[DIR]NAME.EXT;VER: ', $ ) READ ( 5, 55 ) FileName 55 FORMAT ( A ) IF ( FileName .EQ. ' ' ) THEN GOTO 998 END IF WRITE ( 6, 60 ) FileName 60 FORMAT ( // & ' The Philips Logic Analyzer Filename ' / & ' specification is: ', A & // ) C ****************************************************** C Open the Philips Logic Analyzer State Data File C ****************************************************** OPEN ( UNIT=10, FILE=FileName, STATUS='OLD', & FORM='UNFORMATTED', READONLY, ACCESS='SEQUENTIAL', & ERR=950, IOSTAT=IOSTATUS ) C C ***** Read the Philips Logic Analyzer State File ***** C WRITE ( 6, 215 ) 215 FORMAT ( // & ' ***** Now Reading Logic Analyzer State Data File. ***** ' & // ) C ***** We will read this State Data as 6 Records, ***** C ***** i.e. Blocks, of 256 Words (1 word = 16 bits). ***** READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index) = RawJunk(Index) END DO READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index+256) = RawJunk(Index) END DO READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index+512) = RawJunk(Index) END DO READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index+768) = RawJunk(Index) END DO READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index+1024) = RawJunk(Index) END DO READ ( 10 , ERR=970, IOSTAT=IOSTATUS ) RawJunk DO Index=1,256,1 Junk(Index+1280) = RawJunk(Index) END DO C ***** Findout if there should be an output file ***** C ***** and get its FileName ***** WRITE ( 6, 250 ) 250 FORMAT ( // ' To build an ASCII file of this Logic ' / & ' Analyzer State Date - ' / & ' Enter the FileName of the Output File ' / & ' or else ' / & ' to Quit enter just a carriage return. ' // ) WRITE ( 6, 251 ) 251 FORMAT ( ' Enter carriage return or ' / $ ' DEVC:[DIR]NAME.EXT;VER: ',$ ) READ ( 5, 255 ) FileName 255 FORMAT ( A ) IF ( FileName .EQ. ' ' ) THEN WRITE ( 6, 257 ) 257 FORMAT (// ' NO ASCII Output File Will Be Written. ' // ) WRITE ( 6, 80 ) 80 FORMAT ( / ' ****************************************** '/ & ' * * '/ & ' * Restarting the EXTRACT Program * '/ & ' * for the Philips Logic Analyzer * '/ & ' * * '/ & ' ****************************************** '// ) GOTO 40 END IF WRITE ( 6, 270 ) FileName 270 FORMAT (// ' The specification of the output file is: ', A //) OPEN ( UNIT=15, FILE=FileName, STATUS='NEW', & FORM='FORMATTED', CARRIAGECONTROL='LIST', & ACCESS='SEQUENTIAL', ERR=960, IOSTAT=IOSTATUS ) C ***** Now write the ASCII State Output File ***** C ***** Note that we need to swap bytes to make up ***** C ***** for the endian difference between the VAX ***** C ***** and the 68k in the Logic Analyzer. ***** DO Index=22,1050,1 ITemp = 0 JTemp = 0 KTemp = 0 ITemp = IAND ( Junk(Index), 65280 ) JTemp = IAND ( Junk(Index), 63 ) KTemp = ( 256 * JTemp ) + ( ITemp / 256 ) WRITE ( 15, 300 ) KTemp END DO 300 FORMAT ( ' ', I6 ) CLOSE ( UNIT = 15 ) WRITE ( 6, 280 ) 280 FORMAT ( ' The ASCII output file ', & 'has been successfully written. ', // ) WRITE ( 6, 80 ) GOTO 40 C ******************************************************************* C ************************************************************ C THIS IS THE SECTION FOR HANDLING IO ERRORS AND ALL EXITS C ***********************************---------*********-----** 950 WRITE ( 6, 951 ) IOSTATUS 951 FORMAT ( //, ' THERE HAS BEEN AN IO SYSTEM ERROR TRYING ', / & ' TO OPEN THE SPECIFIED RAW DATA FILE. ', // & ' DID YOU TYPE THE FILENAME CORRECTLY? ', // & ' FORTRAN OPEN IOSTAT = ', I3, / ) WRITE ( 6, 80 ) GOTO 40 960 WRITE ( 6, 961 ) IOSTATUS 961 FORMAT ( //, ' THERE HAS BEEN AN IO SYSTEM ERROR TRYING ', / & ' TO OPEN THE SPECIFIED ASCII OUTPUT FILE. ', // & ' DID YOU TYPE THE FILENAME CORRECTLY? ', // & ' FORTRAN OPEN IOSTAT = ', I3, / ) WRITE ( 6, 80 ) GOTO 40 970 WRITE ( 6, 971 ) IOSTATUS 971 FORMAT ( //, ' THERE HAS BEEN AN IO SYSTEM ERROR TRYING ', / & ' TO READ THE RAW DATA FILE. ', / & ' DID YOU TYPE THE FILENAME CORRECTLY? ', // & ' FORTRAN READ IOSTAT = ', I3, / ) WRITE ( 6, 80 ) GOTO 40 998 WRITE ( 6, 999 ) 999 FORMAT ( // ' Extract_1 Program Is Exiting. ', // ) STOP ' ' END