C PROGRAM IBNDREAD.FT C ---------------- C C C FUNCTION IBNDREAD(DEV,FILE,HDR,IX,IY,ICHAIN,S1,S2,IS1,IS2,IOPR) C C C PETER LEMKIN C IMAGE PROCESSING UNIT, DCBD C NATIONAL CANCER INSTITUTE C NATIONAL INSTITUTES OF HEALTH C 9000 ROCKVILLE PIKE C BETHESDA, MD. 20014 C C OCT 26, 1977 C OCT 11, 1977 C JULY 1, 1977 C JUNE 30, 1977 C JUNE 27, 1977 C JUNE 26, 1977 C JUNE 22, 1977 C JUNE 21, 1977 C JUNE 20, 1977 C C C C INTRODUCTION C ------------ C IBNDREAD.FT IS A SUBROUTINE TO OPEN AND READ BOUNDARY FILES C PRODUCED BY SEGBND.SV IN BMON2. C C C IOPR FUNCTION C ---- -------- C 1 LOOKUP DEV:FILE.DA. IF NOT FOUND THEN C RETURN (-1) ELSE RETURN (0); C C 2 READ "NEXT" BOUNDARY HEADER INTO HDR[1:n]. C IF IX=1 THEN PRINT HEADER ON LPT AS WELL. C IF THERE ARE NO MORE BOUNDARIES THEN RETURN (-1) C ELSE RETURN (0); C C 3 READ (IY'TH TO ICHAIN'TH BOUNDARY) HDR[1:N]. IF C IX=1 THEN PRINT HEADER ON LPT: AS WELL. C IF NOT FOUND, THEN RETURN (-1) ELSE RETURN (0). C C 4 READ IY'TH BOUNDARY HDR[1:N]. IF IX=1 C THEN PRINT HEADER ON LPT AS WELL. C IF NOT FOUND THEN RETURN (-1) ELSE RETURN (0); C C 5 READ NEXT 2-TUPLE IN (IX,IY), IF DONE THEN C RETURN (-1) ELSE RETURN (0); C C 6 READ NEXT 4-TUPLE INTO (IX,IY,ICHAIN,SEMBP,ISEM) C IF DONE THEN RETURN (-1) ELSE RETURN (0); C (NOTE: ILLEGAL SEMBP='?????' AND ISEM=-1). C C C HDR[I] FUNCTION C ------ -------- C 1 CC # C 2 IXPOSITION C 3 IYPOSITION C 4 HSIZE C 5 VSIZE C 6 FILLED AREA C 7 DENSITY C 8 AREA C 9 PERIMETER C 10 UNAME C 11 # BOUNDARY POINTS C 12 DENSITY/AREA C 13 P*P/AREA C 14 # EDGES TOUCHING BM/OBJECT C OPDEFS C ------ S OPDEF TADI 1400 S OPDEF ISZI 2400 S OPDEF DCAI 3400 C C S OPDEF MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C S OPDEF DISP2 6436 DIMENSION III(3) EQUIVALENCE(III,PRINTNAME) C C [1] INITIALIZATION C IF(IOPR)999,999,901 901 IF(IOPR-6)902,902,999 999 WRITE(1,998)IOPR 998 FORMAT(' ILLEGAL IBNDREAD IOPR=',I5) CALL CHAIN('BMON2') C C [2] DISPATCH 902 IBNDREAD=0 GOTO(100,200,250,108,400,400),IOPR C C C [2.1] OPEN THE INPUT FILE 100 FDEV=DEV FFILE=FILE C IF SOFTWARE MACHINE DON'T GET TIME OF DAY S CLA CMA S DISP2 S SZA CLA S JMP SOFTWARE8E C CALL DAYTIME(1) CALL DAYTIME(3) S SOFTWARE8E, CLA C C C CHECK THE FILE IOPSW=1 IF(IO(FDEV,FFILE,'DA',1))101,108,101 C C FILE NOT FOUND! 101 DO 1101 INDEX=1,3,2 1101 WRITE(INDEX,103)FDEV,FFILE 103 FORMAT(' ',A4,':',A6,'.DA NOT FOUND') IBNDREAD=-1 RETURN C C C [2.1.1] OPEN IT IN FORTRAN II C IF IOPSW = 1 C THEN OPEN FILE C ELSE PRINT OUT FAILURE MSG 108 IF(IOPSW)113,101,113 113 CALL IOPEN(FDEV,FFILE) C C DO 1109 INDEX=1,3,2 1109 WRITE(INDEX,109)FDEV,FFILE 109 FORMAT(' FILE ',A4,':',A6,'.DA') C IBNDREAD=0 C C C [2.1.22] IF IOPR=4 (READING SPECIFIC FILE) C THEN GOTO [2.3] IF(IOPR-4)112,300,112 112 RETURN C [2.2] READ NEXT BOUNDARY HEADER INTO HDR[1:N] C RETURN -1 IF NOT FOUND (DONE!). 200 CONTINUE ILCC=2 IUCC=255 GOTO 330 C C C [2.2.1] READ BOUNDARY IN [IY:ICHAIN] 250 ILCC=IY IUCC=ICHAIN GOTO 330 C C C [2.3] READ BOUNDARY "IY" INTO HDR[1:N]. 300 CONTINUE ILCC=IY IUCC=IY C C C [2.3.1] READ UNTIL MATCH OR EOF 330 READ(4,331)CN,IXPOSITION,IYPOSITION,HS,VS,FC 331 FORMAT(5X,A5,15X,I3,1X,I3,1X,F6.1,1X,F6.1,12X,F6.1) C IF CN[4 FOR 1]="-" C THEN DONE, RETURN(-1); S TAD \CN# S AND (77 S TAD (200 S TAD (-"- S SNA CLA S JMP \320 /DONE" C C ELSE NC<==CVD(CS[1 FOR 4]); S TAD \CN /" D3" S AND (3 /GET 0,1,2 DIGIT S DCA \ID3 S TAD \CN# /"D2D1" S BSW S AND (17 /D2 S DCA \ID2 S TAD \CN# S AND (17 /D1 S DCA \ID1 NC=(100*ID3)+(10*ID2)+ID1 C C READ(4,332)DENSITY,AREA,PERIMETER,UNAME 332 FORMAT(11X,F9.0,5X,F7.1,4X,F7.1,1X,A6) C C READ(4,333)BP,DA,PSQA,IEDGES 333 FORMAT(16X,F6.0,6X,F9.1,10X,F9.3,10X,I1) C C IF (ILCC LEQ NC LEQ IUCC) C THEN IOUTSPOOL_1 "PRINT HEADER" ELSE IOUTSPOOL_0; IOUTSPOOL=0 S TAD \ILCC S CIA S TAD \NC S SPA CLA S JMP \309 C S TAD \NC S CIA S TAD \IUCC S SPA CLA S JMP \309 IOUTSPOOL=1 C OUTPUT HEADER C C SAVE THE HEADER C C HDR[1]=NC HDR=NC S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[2]=IXPOSITION HDR=IXPOSITION S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[3]=IYPOSITION HDR=IYPOSITION S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[4]=HS HDR=HS S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[5]=VS HDR=VS S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[6]=FC HDR=FC S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[7]=DENSITY HDR=DENSITY S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[8]=AREA HDR=AREA S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[9]=PERIMETER HDR=PERIMETER S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[10]=UNAME HDR=UNAME S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[11]=BP HDR=BP S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[12]=DA HDR=DA S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[13]=EXT HDR=EXT S INC \HDR# S INC \HDR# S INC \HDR# C C HDR[14]=IEDGES HDR=IEDGES S INC \HDR# S INC \HDR# S INC \HDR# C C IF IX=1 THEN PRINT ELSE RETURN IF(IX-1)350,351,350 C 351 WRITE(3,490)NC,IXPOSITION,IYPOSITION,HS,VS,FC 490 FORMAT(/,' CC#=',I4,',[HP,VP,HS,VS]=[',I3,',',I3,',', 1,F6.1,',',F6.1,'], FILLED A=',F6.1) C WRITE(3,488)DENSITY,AREA,PERIMETER,UNAME 488 FORMAT(9X,'D=',F9.0,', A=',F7.1,', P=',F7.1,' ',A6) C WRITE(3,489)BP,DA,PSQA,IEDGES 489 FORMAT(9X,'# B.P.=',F6.0,', D/A=',F9.1,', (P*P)/A=' 1,F9.3,', # EDGES=',I2) 350 RETURN C C C [2.3.2] READ TO START OF NEXT ENTRY 309 READ(4,334)KX,KY C IF KX > 0 C THEN GOTO [2.3.2] C ELSE GOTO [2.3] IF(KX)330,309,309 C C C [2.3.3] FINISHED READING DATA IN FILE, RETURN -1 320 IBNDREAD=-1 RETURN C [2.4] READ AND PRINT (X,Y,CHCODE,LOOKUP(BMSEMANTIC) 400 READ(4,334)IX,IY,ICHAIN,ISS1,ISS2 334 FORMAT(5I5) IS1=ISS1 IS2=ISS2 C C [2.4.1] IF IX GEQ 0 C THEN RETURN(0) AND (IX,IY,ICHAIN,SEMBP,ISEM) C ELSE DONE! RETURN (-1); S TAD I \IX S SPA CLA S JMP \380 C C C [2.4.2] COMPUTE SEMBP C IF IOPR=6 C THEN LOOKUP SEMBP IF(IOPR-6)410,420,410 420 CONTINUE IZ=ISS1-1 S TAD \IZ S CLL RAL /MULT BY 2 S TAD \IZ /MULT BY 3 S TAD PTABLE S DCA GS1# S CALL 1,FAD S GS1, ARG (0 S CALL 1,ISTO S ARG \S1 C IZ=ISS2-1 S TAD \IZ S CLL RAL /MULT BY 2 S TAD \IZ /MULT BY 3 S TAD PTABLE S DCA GS2# S CALL 1,FAD S GS2, ARG (0 S CALL 1,ISTO S ARG \S2 C GOTO 410 370 CONTINUE C C C [2.4.3] RETURN 2-TUPLE 410 RETURN C C C [2.4.4] DONE, RETURN 1 380 IBNDREAD=-1 RETURN C************** P A R A M E T E R S ************* S PIII, \III S PTABLE, TABLE C S PAGE S LAP S TEXT /?ERR?!/ S TABLE, BLOCK 0 S TEXT /CGLHSP/ S TEXT /CGRHSP/ S TEXT /CPALFT/ S TEXT /CPARHT/ S TEXT /CPNLFT/ S TEXT /CPNRHT/ S TEXT /CMPUNY/ S TEXT /DUP-PT/ S TEXT /EXALFT/ S TEXT /EXARHT/ S TEXT /EXNLFT/ S TEXT /EXNRHT/ S TEXT /HAIREP/ S TEXT /IMPLFT/ S TEXT /IMPRHT/ S TEXT /IMPLFH/ S TEXT /IMPRHH/ S TEXT /INCDPT/ S TEXT /MRGLFT/ S TEXT /MRGRHT/ S TEXT /NEWRUN/ S TEXT /NULPNT/ S TEXT /SPCW*L/ S TEXT /SPCW*R/ S TEXT /SPCCWL/ S TEXT /SPCCWR/ S TEXT /NEWOVF/ S EAP END