home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d2xx / d267 / diglib.lha / Diglib / diglib.zoo / diglib / GSDRW3.FOR < prev    next >
Text File  |  1989-06-20  |  2KB  |  68 lines

  1.         SUBROUTINE GSDRW3(X0,Y0,X1,Y1)
  2. C
  3. C        DRAW A LINE FROM (X0,Y0) TO (X1,Y1) IN ABSOLUTE COORDINATES.
  4. C        ASSUMES THAT CLIPPING HAS ALREADY BEEN DONE.   TO SUPPRESS UNNECESSA
  5. C        "MOVES", THIS IS THE ONLY ROUTINE THAT SHOULD CALL GSDRVR(3,,,).
  6. C        THE LINE IS DRAWN IN THE CURRENT LINE TYPE.   THIS ROUTINE DOES NOT
  7. C        SET THE ABSOLUTE POSITION (XAPOS,YAPOS).   IT IS UP TO THE CALLER TO
  8. C        DO SO IF NECESSARY.
  9. C
  10.         INCLUDE GCLTYP.PRM
  11. C
  12.         IF (ILNTYP .GT. 1) GO TO 50
  13.         IF (.NOT. LPOSND) CALL GSDRVR(3,X0,Y0)
  14.         GO TO 220
  15. C
  16. C       SEGMENT LINE TO MAKE CURRENT LINE TYPE
  17. C
  18. 50      CONTINUE
  19.         IF (.NOT. LINILT) GO TO 100
  20.         INXTL = 1
  21.         DLEFT = DIST(1,ILNTYP-1)
  22.         LINILT = .FALSE.
  23.         IF (.NOT. LPOSND) CALL GSDRVR(3,X0,Y0)
  24. 100     DX = X1-X0
  25.         DY = Y1-Y0
  26.         DL = SQRT(DX**2+DY**2)
  27. C
  28. C       SEE IF THIS SEGMENT IS SHORTER THAT DIST. LEFT ON LINE TYPE
  29. C
  30.         IF (DL .LE. DLEFT) GO TO 200
  31. C
  32. C       SEGMENT IS LONGER, SO ADVANCE TO LINE TYPE BREAK
  33. C
  34.         S = DLEFT/DL
  35.         X0 = S*DX+X0
  36.         Y0 = S*DY+Y0
  37. C
  38. C       SEE IF THIS PART OF THE LINE TYPE IS DRAWN OR SKIPPED
  39. C
  40.         IF (IAND(INXTL,1) .NE. 0) GO TO 120
  41.                 CALL GSDRVR(3,X0,Y0)
  42.                 GO TO 140
  43. 120         CONTINUE
  44.                 CALL GSDRVR(4,X0,Y0)
  45. 140     CONTINUE
  46. C
  47. C       NOW GO TO NEXT PORTION OF LINE TYPE
  48. C
  49.         INXTL = INXTL + 1
  50.         IF (INXTL .GT. 4) INXTL = 1
  51.         DLEFT = DIST(INXTL,ILNTYP-1)
  52.         GO TO 100
  53. C
  54. C       DRAW LAST OF LINE IF DRAWN
  55. C
  56. 200     CONTINUE
  57.         DLEFT = DLEFT - DL
  58.         IF (IAND(INXTL,1) .NE. 0) GO TO 220
  59.                 LPOSND = .FALSE.
  60.                 GO TO 240
  61. 220         CONTINUE
  62.                 CALL GSDRVR(4,X1,Y1)
  63.                 LPOSND = .TRUE.
  64. 240     CONTINUE
  65.         RETURN
  66.         END
  67.  
  68.