C ULN03 = Subroutine utility handler for the LN03. C C Calling Sequence: CALL ULN03(LUN,IOP,IP1,IP2) C C LUN = Logical Unit Number C IOP = Operation Code C IP1 = Parameter 1 C IP2 = Parameter 2 C C SUBROUTINE ULN03(LUN,IOP,IP1,IP2) INCLUDE 'QPLOT.NOD' PARAMETER IMAX=120 BYTE ESC,CAN,FF,GS,FS,DUM DATA ESC/27/,CAN/24/,FF/12/,GS/29/,FS/28/ BYTE PBUF(IMAX) INTEGER*4 ICC(9) REAL*4 XSIZ(8),YSIZ(8) c DATA XSIZ/7.6,10.0945,17.0,22.0,25.5,33.0,34.0,44.0/ c DATA YSIZ/10.0945,7.6,22.0,17.0,33.0,25.5,44.0,34.0/ DATA XSIZ/7.635,10.24,17.0,22.0,25.5,33.0,34.0,44.0/ DATA YSIZ/10.24,7.635,22.0,17.0,33.0,25.5,44.0,34.0/ DATA ICC/29,29,29,0,0,0,0,0,0/ DATA IR,M/0,0/ DATA NODE/0/ DATA NUN/25/ DATA IOPEN/0/ C 10 FORMAT(' ',130A1) C IX=IP1 IY=IP2 C WRITE(6,*)'IOP,IOP-63',IOP,IOP-63 IF(IOP.GT.0.AND.IOP.LE.9)GO TO 200 C WRITE(6,*)'IOP,IOP-63',IOP,IOP-63 GO TO(640,650,660,670,680,690,800,810,820)IOP-63 RETURN C C PROCESS DATA C 200 IX=(IX*SF)*XSCALE+X0*SF IY=(IY*SF)*YSCALE+Y0*SF IF(.NOT.IR)THEN IT=IX IX=IY IY=3071-IT ENDIF IX=MIN(4095,MAX(0,IX)) IY=MIN(3071,MAX(0,IY)) IYMS=IY/128 IYIS=(IY-128*IYMS)/4 IYLS=IY-128*IYMS-4*IYIS IXMS=IX/128 IXIS=(IX-128*IXMS)/4 IXLS=IX-128*IXMS-4*IXIS PBUF(M+1)=ICC(IOP) PBUF(M+2)=IYMS+32 PBUF(M+3)=4*IYLS+IXLS+96 PBUF(M+4)=IYIS+96 PBUF(M+5)=IXMS+32 PBUF(M+6)=IXIS+64 M=M+6 IF(M.LT.IMAX)RETURN C WRITE(LUN,10)GS,(PBUF(I),I=1,IMAX) M=6 DO 210 I=1,M 210 PBUF(I)=PBUF(IMAX-6+I) RETURN C C PROCESS START FILE C 640 IF(IOPEN.EQ.2) RETURN C WRITE(6,*)'START FILE' C IOPEN=1 OPEN(UNIT=LUN,NAME='LN03.IPF',TYPE='NEW') WRITE(LUN,10)ESC,'c' WRITE(LUN,10)ESC,'[','?','3','8','h' C IF(IOPEN.EQ.1) GO TO 150 C C ESTABLISH ORIGIN AND SCALE FACTORS - ENTER 0 0 1 1 FOR NO CHANGE C WRITE(6,*)'ENTER X0,Y0,XSCALE,YSCALE' READ(5,*) DX,DY,XSCALE,YSCALE X0=DX*16382/11.0 Y0=DY*16382/11.0 C C ESTABLISH OUTPUT NODE C 109 WRITE(6,119) 119 FORMAT(/,' OUTPUT NODE NAME:') DO INOD=1,MNOD,2 JNOD=INOD+1 IF(JNOD.GT.MNOD)THEN WRITE(6,129)(INOD-1)*2,NODE_NAME(INOD) 129 FORMAT(I3,' = ',A) ELSE WRITE(6,149)(INOD-1)*2,NODE_NAME(INOD),(JNOD-1)*2, 1 NODE_NAME(JNOD) 149 FORMAT(I3,' = ',A,10X,I3,' = ',A) ENDIF ENDDO WRITE(6,*)' ' 139 FORMAT(/) CALL URIP('NODE CODE',NODE,ISTAT) IF(ISTAT.GT.1)GO TO 109 C WRITE(6,*)'AFTER 139' 150 CONTINUE IOPEN=2 RETURN C C PROCESS START JOB C 650 CONTINUE C WRITE(6,*)'650' RETURN C C PROCESS START FRAME C 660 IR=IAND(IX,1) SF=(3072*11.)/(16382.*7.635) IF(IR)THEN SF=SF*10.24/XSIZ(IX+1) ELSE SF=SF*10.24/YSIZ(IX+1) ENDIF M=0 C WRITE(6,*)'START FRAME' RETURN C C PROCESS END FRAME C 670 IF(M.EQ.0)GO TO 671 WRITE(LUN,10)GS,(PBUF(I),I=1,M) M=0 671 WRITE(LUN,10)GS,ESC,FF C WRITE(6,*)'PROCESS END FRAME' RETURN C C PROCESS END JOB C 680 CONTINUE WRITE(6,*)'PROCESS END JOB' C IOPEN=0 RETURN C C PROCESS END FILE C 690 WRITE(LUN,10)ESC,'[','?','3','8','l' CLOSE(UNIT=LUN) C WRITE(6,*)'PROCESS END FILE' C C SUBMIT BATCH PRINT JOB TO NODE C if(node.eq.0)return ISTAT=LIB$SPAWN('PRINT LN03.IPF/NOTIF/QUE='//NODE_NAME(NODE/2+1)) IOPEN=1 RETURN C C PROCESS END STRIP CHART SEGMENT C 800 CONTINUE RETURN C C PROCESS SET INTENSITY C 810 CONTINUE RETURN C C PROCESS SET SPOT SIZE C 820 CONTINUE RETURN C C PROCESS ERRORS C 900 WRITE(6,901) 901 FORMAT(' *ULN03* OUTPUT ERROR') RETURN END