Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0049/iplhit.for
There is 1 other file named iplhit.for in the archive. Click here to see a list.
      FUNCTION IPLHIT(KONTRL,IWIDE,IHIGH,IX,IY,JX,JY,
     1IPENX,IPENY)
C
C     DONALD BARTH, CHEMISTRY DEPT., HARVARD UNIVERISTY
C
C     FUNCTION TO TEST IF TABLET STYLUS POINTS TO POINT
C     OR LINE
C
C     IPLHIT = 0 RETURNED IF STYLUS DOESN'T POINT TO LINE
C            = 1 RETURNED IF STYLUS POINTS TO LINE
C
C     KONTRL = 0, DOES NOT OUTLINE ACTIVE AREA
C            = 1, OUTLINES ACTIVE AREA IF TEST SUCCESSFUL
C     IWIDE  = HALF-WIDTH OF ACTIVE AREA AROUND POINT
C              OR LINE
C     IHIGH  = -1, TEST IF STYLUS POINTS TO LINE
C              (ACITIVE AREA EXTENDS BEYOND ENDS OF LINE)
C            = 0, TEST IF STYLUS POINTS TO MIDDLE OF LINE
C              (ACTIVE AREA EXTENDS ONLY TO ENDS OF LINE)
C            = POSITIVE, HALF-HEIGHT OF ACTIVE AREA
C              AROUND POINT (JX AND JY ARE NOT USED)
C     IX     = HORIZONTAL COORDINATE OF POINT OR
C              OF END 1 OF LINE
C     IY     = VERTICAL COORDINATE OF POINT OR
C              OF END 1 OF LINE
C     JX     = HORIZONTAL COORDINATE OF END 2 OF LINE
C     JY     = VERTICAL COORDINATE OF END 2 OF LINE
C     IPENX  = HORIZONTAL POSITION OF STYLUS
C     IPENY  = VERTICAL POSITION OF STYLUS
C
C     TEST IF LINE OR POINT TEST TO BE MADE
      IF(IHIGH)7,7,111
C
C     TEST IF STYLUS POINTS TO POINT
C
  111 MOVEX=IHIGH
    1 IF(IX-IWIDE-IPENX)2,2,31
    2 IF(IX+IWIDE-IPENX)31,3,3
    3 IF(IY-MOVEX-IPENY)4,4,31
    4 IF(IY+MOVEX-IPENY)31,5,5
    5 IF(KONTRL)30,30,6
    6 MOVEY=0
      KX=IX+IWIDE
      KY=IY
      LX=IX-IWIDE
      LY=IY
      GO TO 29
   91 IF(IHIGH)92,31,31
   92 MOVEX=IWIDE
      GO TO 1
C
C     TEST IF STYLUS POINTS TO LINE
C
C     DETERMINE OCTANT CONTAINING LINE
    7 IDSTX=JX-IX
      IDSTY=JY-IY
      IF(IDSTX-IDSTY)8,9,10
    8 IF(IDSTX+IDSTY)14,11,11
    9 IF(IDSTX+IDSTY)14,91,12
   10 IF(IDSTX+IDSTY)13,12,12
   11 MOVEY=IWIDE
      MOVEX=(IDSTX*MOVEY)/IDSTY
      IF(IDSTX)15,16,16
   12 MOVEX=IWIDE
      MOVEY=(IDSTY*MOVEX)/IDSTX
      IF(IDSTY)17,18,18
   13 MOVEY=-IWIDE
      MOVEX=(IDSTX*MOVEY)/IDSTY
      IF(IDSTX)15,16,16
   14 MOVEX=-IWIDE
      MOVEY=(IDSTY*MOVEX)/IDSTX
      IF(IDSTY)17,18,18
C
C     CORRECT WIDTH OF STRIP FOR ANGLE OF LINE
   15 KX=IWIDE+(MOVEX/4)
      GO TO 19
   16 KX=IWIDE-(MOVEX/4)
      GO TO 19
   17 KX=IWIDE+(MOVEY/4)
      GO TO 19
   18 KX=IWIDE-(MOVEY/4)
   19 MOVEX=(KX*MOVEX)/IWIDE
      MOVEY=(KX*MOVEY)/IWIDE
C
C     TEST IF STYLUS IS WITHIN STRIP ALONG LINE
      IF((IDSTX*(IPENY-IY-MOVEX))-
     1   (IDSTY*(IPENX-IX+MOVEY)))20,20,31
   20 IF((IDSTX*(IPENY-JY+MOVEX))-
     1   (IDSTY*(IPENX-JX-MOVEY)))31,22,22
   22 IF(IHIGH)23,24,24
C
C     DEFINE ACTIVE AREA EXTENDING BEYOND LINE ENDS
   23 KX=IX-MOVEX
      KY=IY-MOVEY
      LX=JX+MOVEX
      LY=JY+MOVEY
      GO TO 25
C
C     DEFINE ACTIVE AREA TOUCHING LINE ENDS
   24 KX=IX
      KY=IY
      LX=JX
      LY=JY
C
C     TEST IF STYLUS IS BETWEEN ENDS OF ACTIVE AREA
   25 IF((IDSTX*(IPENX-KX))+(IDSTY*(IPENY-KY)))31,31,27
   27 IF((IDSTX*(IPENX-LX))+(IDSTY*(IPENY-LY)))28,28,31
   28 IF(KONTRL)30,30,29
C
C     OUTLINE ACTIVE AREA AROUND LINE
   29 CALL CRTOFF(KX+MOVEY,KY-MOVEX)
      CALL CRTON (LX+MOVEY,LY-MOVEX)
      CALL CRTON (LX-MOVEY,LY+MOVEX)
      CALL CRTON (KX-MOVEY,KY+MOVEX)
      CALL CRTON (KX+MOVEY,KY-MOVEX)
C
C     SET VALUE OF FUNCTION AND RETURN
   30 IPLHIT=1
      GO TO 32
   31 IPLHIT=0
   32 RETURN
      END