SUBROUTINE DSHPLT(X,Y,IPEN,ITYPE) C C This subroutine will draw various styles of lines C depending upon the value of ITYPE. If ITYPE equals: C C 0 - No Line C 1 - Solid C 2 - Short dashes C 3 - Long and Short dashes C 4 - Long dashes C 5 - Long and 2 short dashes C 6 - Dotted C 7 - Long and 3 short dashes C 8 - 2 Long and 1 short dashes C 9 - 2 Long and 2 Short dashes C 10 - 2 Long and 3 Short dashes C C IPEN equal to +/-3 will reset the arc length gauge to zero. C C INTEGER UPDOWN(29), START(10), LENGTH(10) DATA UPDOWN/ 8*2, 3, 8*2, 3, 2,2, 3, 2,2, 3, 2,2, 3, 2, 3/ DATA START/ 0, 25, 10, 10, 10, 28, 10, 1, 1, 1/ DATA LENGTH/ 0, 3, 12, 9, 15, 2, 18, 21, 24, 27/ DATA ARC, XLAST, YLAST/3*0./, I/0/, JLAST/0/ DATA DARC/.0375/ C C - IF PEN UP, RESET LINE PARAMETERS AND MOVE. IF( IABS(IPEN) .NE. 3 ) GO TO 100 ARC = 0.0 I = 0 CALL CALPLT(X,Y,IPEN) GO TO 1200 C C - NO LINE? 100 IF( ITYPE .NE. 0 ) GO TO 200 CALL CALPLT(X,Y,3) GO TO 1200 C C - WHICH TYPE OF LINE? 200 JTYPE = MOD( ITYPE-1, 10 ) + 1 IF( JTYPE .NE. 1 ) GO TO 300 CALL CALPLT(X,Y,IPEN) GO TO 1200 C C - DASHED LINE. 300 DELTAX = X - XLAST DELTAY = Y - YLAST DELTA = SQRT( DELTAX*DELTAX + DELTAY*DELTAY + 1.E-30 ) JSTYLE = START( JTYPE ) NUMBER = LENGTH( JTYPE ) IF( JTYPE .NE. JLAST ) I = 0 JLAST = JTYPE IF( DELTA .GE. ARC ) GO TO 400 ARC = ARC-DELTA CALL CALPLT(X,Y,UPDOWN(JSTYLE+I)) GO TO 1200 C 400 COSTH = DELTAX/DELTA SINTH = DELTAY/DELTA DX = ARC*COSTH+XLAST DY = ARC*SINTH+YLAST CALL CALPLT(DX,DY,UPDOWN(JSTYLE+I)) XLAST = DX YLAST = DY DELTA = DELTA-ARC ARC = 0.0 I = MOD( I+1, NUMBER ) C INT = DELTA/DARC IF( INT .LT. 1 ) GO TO 1100 C DX = DARC*COSTH DY = DARC*SINTH DO 1000 J=1,INT XLAST = XLAST+DX YLAST = YLAST+DY CALL CALPLT(XLAST,YLAST,UPDOWN(JSTYLE+I)) DELTA = DELTA-DARC 1000 I = MOD( I+1, NUMBER ) C 1100 ARC = DARC - DELTA CALL CALPLT(X,Y,UPDOWN(JSTYLE+I)) C 1200 XLAST = X YLAST = Y IF( IPEN .GT. 0 ) RETURN CALL CALPLT(X,Y,-3) XLAST = 0.0 YLAST = 0.0 RETURN END