Trailing-Edge
-
PDP-10 Archives
-
decuslib10-07
-
43,50446/point.f4
There are no other files named point.f4 in the archive.
SUBROUTINE POINT(N, FILE, X, Y)
C************************************************************
C
C THIS ROUTINE INSERTS AN ABSOLUTE (INVISIBLE)
C POINT AT USER (X, Y).
C
C POSSIBLE ERRORS:
C NONE
C
C WARNING:
C IF ANY DISPLAY FILE CONTAINS A CALL TO POINT, THEN
C THE DISPLAY FILE IS NOT STRICTLY RELOCATABLE. THE
C FILE MAY BE MOVED, BUT ONLY THAT PORTION OF THE
C DISPLAY PRIOR TO THE POINT WILL CHANGE POSITION.
C
C HOWEVER, CALLS TO POINT DO HAVE THEIR ADVANTAGES.
C WHEN BUILDING RELOCATABLE DISPLAY FILES, ERRORS IN
C POSITION (DUE TO ROUNDOFF, AND INTEGER APPROXIMATION)
C TEND TO PROPAGATE. IF IT IS NOT ESSENTIAL TO HAVE
C A RELOCATABLE DISPLAY, AN OCCASSIONAL CALL TO POINT
C WILL RESULT IN A MORE ACCURATE DISPLAY FILE.
C
C ROUTINES CALLED:
C SETSTA - RETURNS A STATUS-A INSTRUCTION
C ADWORD - ADDS A WORD TO THE DISPLAY FILE
C SETGM - RETURNS A S.G.M. INSTRUCTION
C IPHYSX - RETURNS RASTER IX OF USER X
C IPHYSY - RETURNS RASTER IY OF USER Y
C
C************************************************************
IMPLICIT INTEGER (A - W, Z)
INTEGER FILE(N)
LOGICAL LP, BLINK, ITALA, LPA
COMMON /MODBLK/ MODE, INT, LP, BLINK, LINE, OLDSGM
COMMON /STABLK/ ITALA, LPA, OLDSTA
COMMON /SCLBLK/ XMIN, YMIN, XMAX, YMAX, BEAMX, BEAMY
BEAMX = FILE(2)
BEAMY = FILE(3)
OLDSGM = FILE(4)
OLDSTA = FILE(5)
NEWSTA = SETSTA(ITALA, LPA)
IF(NEWSTA .EQ. OLDSTA) GO TO 100
OLDSTA = NEWSTA
CALL ADWORD(N, FILE, OLDSTA)
100 MODE = "3
NEWSGM = SETGM(MODE, INT, LP, BLINK, LINE)
IF(NEWSGM .EQ. OLDSGM) GO TO 200
OLDSGM = NEWSGM
CALL ADWORD(N, FILE, OLDSGM)
200 BEAMX = IPHYSX(X)
IF(BEAMX .GT. "1777) BEAMX = "1777
BEAMY = IPHYSY(Y)
IF(BEAMY .GT. "1377) BEAMY = "1377
CALL ADWORD(N, FILE, BEAMX)
CALL ADWORD(N, FILE, BEAMY)
FILE(2) = BEAMX
FILE(3) = BEAMY
FILE(4) = OLDSGM
FILE(5) = OLDSTA
RETURN
END