# INPDES - INPUT DATA ARRAY DESCRIPTION FOR STAGING MEMORY MANAGER # # PURPOSE: SEE GER-17062, SECT. 1 # # CALLING SEQUENCE: # # LOGICAL = INPDES(TERMIN) # # TERMIN IS TRUE IF INTERACTIVE TERMINAL IO IS TO BE USED, FALSE # IF DATA IS FROM A FIXED INPUT FILE. # FUNCTION VALUE IS TRUE IF USER TYPES END-OF-FILE IN RESPONSE # TO ANY INPUT REQUEST OR THE DATA FILE CONTAINS INSUFFICIENT DATA # # PROGRAMMER: CARL T. MICKELSON # GOODYEAR AEROSPACE CORP # 1210 MASSILLON ROAD # AKRON, OHIO 44315 # # PROJECT: MASSIVELY PARALLEL PROCESSOR (MPP) # # DATE: APRIL 1983 # ## INCLUDE "SMMDEF.RAT" LOGICAL FUNCTION INPDES(TERMIN) LOGICAL TERMIN INCLUDE "CSMMDF.RAT" INTEGER OKBNKS(4),OKWTH(3) INTEGER*4 OKWRDS(3) INTEGER*4 ONE LOGICAL OK,CONF INTEGER I,J DATA OKBNKS/4,8,16,32/ DATA OKWRDS/16384,65536,262144/ DATA OKWTH/WDR11,WDR780,WARU/ DATA ONE/1/ IF (TERMIN) CALL ARMTHD INPDES = .FALSE. REPEAT $( REPEAT $( IF (TERMIN) $( 10 CONTINUE WRITE(ERROUT,100) READ(STDIN,99,END=1000,ERR=10) NBANKS $) ELSE READ(STDIN,99,END=1000,ERR=1100) NBANKS OK = .FALSE. DO I = 1,4 IF (NBANKS == OKBNKS(I)) OK = .TRUE. IF (OK) BREAK IF (.NOT. TERMIN) GOTO 1100 $) REPEAT $( IF (TERMIN) $( 20 CONTINUE WRITE(ERROUT,101) READ(STDIN,99,END=1000,ERR=20) NWORDS $) ELSE READ(STDIN,99,END=1000,ERR=1100) NWORDS OK = .FALSE. DO I = 1,3 IF (NWORDS == OKWRDS(I)) OK = .TRUE. IF (OK) BREAK IF (.NOT. TERMIN) GOTO 1100 $) IF (.NOT. TERMIN) BREAK 25 CONTINUE WRITE(ERROUT,109) READ(STDIN,98,END=1000,ERR=25) CONF IF (CONF) BREAK $) WRITE(SMMOUT,200) NBANKS WRITE(LSTOUT,200) NBANKS WRITE(SMMOUT,201) NWORDS WRITE(LSTOUT,201) NWORDS REPEAT $( REPEAT $( IF (TERMIN) $( 30 CONTINUE WRITE(ERROUT,102) READ(STDIN,99,END=1000,ERR=30) NDIM $) ELSE READ(STDIN,99,END=1000,ERR=1100) NDIM IF ((NDIM > 0) & (NDIM <= NDIMAX)) BREAK IF (.NOT. TERMIN) GOTO 1100 $) DO I = 1,NDIM $( REPEAT $( IF (TERMIN) $( 40 CONTINUE WRITE(ERROUT,103) I READ(STDIN,99,END=1000,ERR=40) LENGTH(I) $) ELSE READ(STDIN,99,END=1000,ERR=1100) LENGTH(I) IF (LENGTH(I) > ONE) BREAK IF (.NOT. TERMIN) GOTO 1100 $) $) IF (.NOT. TERMIN) BREAK 45 CONTINUE WRITE(ERROUT,110) READ(STDIN,98,END=1000,ERR=45) CONF IF (CONF) BREAK $) WRITE(SMMOUT,202) NDIM WRITE(LSTOUT,202) NDIM DO I=1,NDIM $( WRITE(SMMOUT,203) LENGTH(I),I WRITE(LSTOUT,203) LENGTH(I),I $) REPEAT $( IF (TERMIN) $( 50 CONTINUE WRITE(ERROUT,104) READ(STDIN,99,END=1000,ERR=50) NMOVE $) ELSE READ(STDIN,99,END=1000,ERR=1100) NMOVE IF ((NMOVE > 1) & (NMOVE <= NMVMAX)) BREAK IF (.NOT. TERMIN) GOTO 1100 $) WRITE(SMMOUT,204) NMOVE WRITE(LSTOUT,204) NMOVE DO J = 1,NMOVE $( REPEAT $( REPEAT $( IF (TERMIN) $( 60 CONTINUE WRITE(ERROUT,105) J READ(STDIN,99,END=1000,ERR=60) WIDTH(J) $) ELSE READ(STDIN,99,END=1000,ERR=1100) WIDTH(J) OK = .FALSE. DO I = 1,3 IF (WIDTH(J) == OKWTH(I)) OK = .TRUE. IF (OK) BREAK IF (.NOT. TERMIN) GOTO 1100 $) IF (TERMIN) $( 70 CONTINUE WRITE(ERROUT,106) J READ(STDIN,99,END=1000,ERR=70) BASE(J) $) ELSE READ(STDIN,99,END=1000,ERR=1100) BASE(J) IF (TERMIN) $( 80 CONTINUE WRITE(ERROUT,107) J READ(STDIN,99,END=1000,ERR=80) RECSIZ(J) $) ELSE READ(STDIN,99,END=1000,ERR=1100) RECSIZ(J) DO I = 1,NDIM $( IF (TERMIN) $( 90 CONTINUE WRITE(ERROUT,108) J,I READ(STDIN,99,END=1000,ERR=90) MPR(I,J) $) ELSE READ(STDIN,99,END=1000,ERR=1100) MPR(I,J) $) IF (.NOT. TERMIN) BREAK 95 CONTINUE WRITE(ERROUT,111) J READ(STDIN,98,END=1000,ERR=95) CONF IF (CONF) BREAK $) WRITE(SMMOUT,205) WIDTH(J),J WRITE(LSTOUT,205) WIDTH(J),J WRITE(SMMOUT,206) BASE(J),J WRITE(LSTOUT,206) BASE(J),J WRITE(SMMOUT,207) RECSIZ(J),J WRITE(LSTOUT,207) RECSIZ(J),J DO I=1,NDIM $( WRITE(SMMOUT,208) MPR(I,J),J,I WRITE(LSTOUT,208) MPR(I,J),J,I $) $) IF (INPDES) $( 1000 CONTINUE 1100 CONTINUE INPDES = .TRUE. $) IF (TERMIN) CALL ATNOFF RETURN #-FORMAT STATEMENTS 98 FORMAT(L) 99 FORMAT(I15) 100 FORMAT(' ENTER NUMBER OF BANKS: ',$ ) 200 FORMAT(I10,', NUMBER OF BANKS') 101 FORMAT(' ENTER NUMBER OF WORDS PER BANK: ',$ ) 201 FORMAT(I10,', NUMBER OF WORDS PER BANK') 102 FORMAT(' ENTER NUMBER OF ARRAY DIMENSIONS: ',$ ) 202 FORMAT(I10,', NUMBER OF ARRAY DIMENSIONS') 103 FORMAT(' ENTER LENGTH OF DIMENSION ',I2,': ',$ ) 203 FORMAT(I10,', LENGTH OF DIMENSION ',I2) 104 FORMAT(' ENTER NUMBER OF DATA MOVES: ',$ ) 204 FORMAT(I10,', NUMBER OF DATA MOVES') 105 FORMAT(' ENTER CHANNEL WIDTH FOR MOVE ',I2,': ',$ ) 205 FORMAT(I10,', CHANNEL WIDTH FOR MOVE ',I2) 106 FORMAT(' ENTER POSITION OF BIT(0,0,...0) ON CHANNEL FOR MOVE ',I2,': ',$ ) 206 FORMAT(I10,', POSITION OF BIT(0,0,...0) ON CHANNEL FOR MOVE ',I2) 107 FORMAT(' ENTER SUBSTAGER RECORD SIZE FOR MOVE ',I2,': ',$ ) 207 FORMAT(I10,', SUBSTAGER RECORD SIZE FOR MOVE ',I2) 108 FORMAT(' ENTER MULTIPLIER FOR MOVE ',I2,', DIMENSION ',I2,': ',$ ) 208 FORMAT(I10,', MULTIPLIER FOR MOVE ',I2,', DIMENSION ',I2) 109 FORMAT(' CONFIRM STAGER CONFIGURATION OK (T/F): ',$ ) 110 FORMAT(' CONFIRM ARRAY DIMENSION DATA OK (T/F): ',$ ) 111 FORMAT(' CONFIRM MOVE ',I2,' PARAMETERS OK (T/F): ',$ ) END