      SUBROUTINE GSCAN
      COMMON/LNK/X1LINS,Y1LINS,X2LINS,Y2LINS,
     1 DELXLN,CURXLN,LNPNTR,TRVSPT,CURINT,INTSLP,
     2 CURRED,REDSLP,CURGRN,GRNSLP,CURBLU,BLUSLP,
     3 IYSTEP,CURNDX,NDXSLP
      REAL X1LINS(1500),Y1LINS(1500),X2LINS(1500),Y2LINS(1500),
     1 DELXLN(1500),CURXLN(1500),CURINT(1500),INTSLP(1500),
     2 CURRED(1500),REDSLP(1500),CURGRN(1500),GRNSLP(1500),
     3 CURBLU(1500),BLUSLP(1500),IYSTEP,CURNDX(1500),NDXSLP(1500)
      INTEGER LNPNTR,TRVSPT
      COMMON/ACT/ACTLIL,LSTACT,XRASOR,ENDPTR
      INTEGER ACTLIL(1500),LSTACT,ENDPTR
      REAL XRASOR(1500,4)
      COMMON/ATR/LWIDT,LWMAX,LSTYL,LSMAX,PEN,PENMAX,FONT,FONMAX,
     1     CHSIZ,CHSPC,CHPREC,CHPLN,PIKID,PIKMAX,CHPATH,CHJUST,
     2     MRKR,MRKMAX,CHARUP,CURPOS,BGDNDX,BGDCOL,BGDINT,
     3     LINNDX,LINCOL,LININT,FILNDX,FILCOL,FILINT,TEXNDX,
     4     TEXCOL,TEXINT,NDXMAX,PINTR,PEDGE,COLMOD
      INTEGER LSTYL,LSMAX,PEN,PENMAX,FONT,FONMAX,CHPREC,PIKID,
     1     PIKMAX,CHPATH,CHJUST(2),MRKR,MRKMAX,BGDNDX,LINNDX,
     2     FILNDX,TEXNDX,NDXMAX,PINTR,PEDGE,COLMOD
      REAL LWIDT,LWMAX,CHSIZ(2),CHSPC,CHPLN(3),CHARUP(3),CURPOS(4),
     1     BGDCOL(3),BGDINT,LINCOL(3),LININT,FILCOL(3),FILINT,
     2     TEXCOL(3),TEXINT
      COMMON /PAR/ PARRAY,MAXARY
      INTEGER*4 PARRAY(5000),MAXARY
      COMMON/VSP/INITVS,VSINIT,VSSELC,SELSLT,VSTYPE,
     1     VSXCM,VSYCM,VSXNDC,VSYNDC,
     2     VSXCHR,VSYCHR,VSLNSC,VSLNSS,VSLNWC,VSLNWS,
     3     VSFNTC,VSPENC,VSPENS,VSCSC,VSMRKC,VSMRKS,
     4     VSOLVL,VSHILS,VSBATC,VSOTYP,VSPIX,VSCTAB,VSHIDS,
     5     VSPFIL,VSEDGE,VSPIXX,VSPIXY,VSCMOD,VSBGDC,
     6     VSBGDT,VSCINX,VSCNUM,VSCTYP,VSIINX,VSINUM,
     7     VSITYP,VSSCMX,VSSCMY,VSSNDX,VSSNDY,VSLWMN,
     8     VSLWMX,VSCSMN,VSCSMX,VSPMAX,SRFUSE,MODE,VSPPIK
      INTEGER*4 INITVS(5,2),SELSLT,VSTYPE(5),VSLNSC(5),VSLNSS(5),
     1     VSLNWC(5),VSLNWS(5),VSFNTC(5),VSPENC(5),VSPENS(5),
     2     VSCSC(5),VSMRKC(5),VSMRKS(5),VSOLVL(5),VSHILS(5),
     3     VSBATC(5),VSOTYP(5),VSPIX(5),VSCTAB(5),VSHIDS(5),
     4     VSPFIL(5,3),VSEDGE(5),VSPIXX(5),VSPIXY(5),VSCMOD(5),
     5     VSBGDC(5),VSBGDT(5),VSCINX(5),VSCNUM(5),VSCTYP(5),
     6     VSIINX(5),VSINUM(5),VSITYP(5),VSPMAX,SRFUSE(5),
     7     MODE(5),VSPPIK(5)
      REAL VSXCM(5),VSYCM(5),VSXNDC(5),VSYNDC(5),VSXCHR(5),
     1     VSYCHR(5),VSSCMX(5),VSSCMY(5),VSSNDX(5),
     2     VSSNDY(5),VSLWMN(5),VSLWMX(5),VSCSMN(5),VSCSMX(5)
      LOGICAL VSINIT(5),VSSELC(5)
      COMMON/OPC/PMARK3,PMARK2,PLIN3,PLIN2,POLY3,POLY2,TEXT,MOVE,
     1     IMTRAN,HGHLTG,VSIBLE,DTECT,NWFRM,DELETS,DELETA,IMMEDV,
     2     PICCUR,BGNBAT,ENDBAT,CRSEG,CTSEG,CLOSRS,CLOSTS,RENAMS,
     3     INITDD,TERMDD,INTIZE,TRM,SNDC,INQDVC,COLR,BGCOLR,TENSTY,
     4     BGINTY,SNDX,BGINDX,COLNDX,INTNDX,IQCNDX,IQINDX,
     5     LNSTYL,ILNSTL,LNWITH,PENS,IDENSE,CHFONT,CHARSZ,CHARSP,
     6     STRROT,CHARPH,CHARJT,CHAREX,MRKSYM,PICK,ALLATR,POLEDG,
     7     POLINT,PIXCOL,PIXINT,PIXNDX,WRSCOL,WRSINT,WRSNDX,RRSCOL,
     8     RRSINT,RRSNDX,ESCAP,IESCAP,AMODE,OUTUNT
      INTEGER PMARK3,PMARK2,PLIN3,PLIN2,POLY3,POLY2,TEXT,MOVE,
     1     IMTRAN,HGHLTG,VSIBLE,DTECT,NWFRM,DELETS,DELETA,IMMEDV,
     2     PICCUR,BGNBAT,ENDBAT,CRSEG,CTSEG,CLOSRS,CLOSTS,RENAMS,
     3     INITDD,TERMDD,INTIZE,TRM,SNDC,INQDVC,COLR,BGCOLR,TENSTY,
     4     BGINTY,SNDX,BGINDX,COLNDX,INTNDX,IQCNDX,IQINDX,
     5     LNSTYL,ILNSTL,LNWITH,PENS,IDENSE,CHFONT,CHARSZ,CHARSP,
     6     STRROT,CHARPH,CHARJT,CHAREX,MRKSYM,PICK,ALLATR,POLEDG,
     7     POLINT,PIXCOL,PIXINT,PIXNDX,WRSCOL,WRSINT,WRSNDX,RRSCOL,
     8     RRSINT,RRSNDX,ESCAP,IESCAP,AMODE,OUTUNT
      LOGICAL SOLEDG,INTEDG
      LOGICAL FAST,PLAIN,SHADE,PATERN,DITHER
      LOGICAL COLOR,INTEN,INDEX
      REAL RARRAY(5000),FASTX(1500),FASTY(1500)
      REAL ISCAN,IYSCAN
      INTEGER STARTX,ENDX,ROWY,STARTN,ENDN
      INTEGER NVERT
      EQUIVALENCE (PARRAY,RARRAY)

      INTEGER TRUNCR,TRUNCG,TRUNCB,CEILR,CEILG,CEILB,
     +            VR,VG,VB,L1,L2,L3,I,JJ,SLOT,XX,YY,NN

      REAL      DELX,R,G,B,IR,IG,IB,C,DELR,DELG,DELB,DX,
     +            STARTR,STARTG,STARTB,ENDR,ENDG,ENDB
      COMMON /STD/ VSRF,CLEN1,CLEN2,CLEN3,CLOW1,CLOW2,CLOW3,
     1     CHIGH1,CHIGH2,CHIGH3,INTLOW,INTHI,LENINT
      INTEGER VSRF(5,2),CLEN1(5),CLEN2(5),CLEN3(5),LENINT(5)
      REAL CLOW1(5),CLOW2(5),CLOW3(5),CHIGH1(5),CHIGH2(5),
     1     CHIGH3(5),INTLOW(5),INTHI(5)
      COMMON /PLT/ PCOLMN,PROW,POLARY,PCMAX,PRMAX,XORG,YORG
      INTEGER PCOLMN,PROW,POLARY(100,100),PCMAX,PRMAX
      REAL XORG,YORG
      INTEGER      SRTD(1500),SRTACT
      COMMON            /KEY/ SRTD
      COMMON /VEW/ NDCSPC, VEWPRT, WINDOW, VEWREF,
     1  VEWPLN, VEWUP, PJTYP, PJDIR, PJPNT, VEWDIS, FDIS,
     2  BDIS,MXFORM,NDCUSE,FDSET,BDSET,WCLIP,FCLIP,BCLIP,CRDSYS,
     3  CRDSET,VPRTFG,VEWTYP,WRNGVS,VEWSET,PRMUSE,VEWUSE,WORLD3,
     4  VIWUP,VIWPN,PRJDIR
      REAL NDCSPC(3), VEWPRT(3,2), WINDOW(2,2), VEWREF(4),
     1  VEWPLN(4), VEWUP(4), PJDIR(4), PJPNT(4), VEWDIS, FDIS,
     2  BDIS,MXFORM(4,4),VIWUP(3),VIWPN(3),PRJDIR(3)
      INTEGER PJTYP, CRDSYS
      LOGICAL NDCUSE,FDSET,BDSET,WCLIP,FCLIP,BCLIP,CRDSET,VPRTFG,
     1    VEWTYP,WRNGVS,VEWSET,PRMUSE,VEWUSE,WORLD3

      INTEGER POINT,BASE
C  COMMON BLOCK /VEW/ & NEXT 3 LINES ADDED ON 21/9,83
        INTEGER MAKSCN (1500)
         DO 6 I = 1,1500
   6     MAKSCN (I) =0
      SLOT = 2
      L1 = 8
      L2 = 16
      L3 = 8

        NN=PCOLMN*PROW -1
      XMAX=VSXNDC(SELSLT)
      YMAX=VSYNDC(SELSLT)
C      XMAX = 380
C      YMAX = 511

      SOLEDG = .FALSE.
      INTEDG = .FALSE.
      IF (PEDGE .EQ. 1) SOLEDG = .TRUE.
      IF (PEDGE .EQ. 2) INTEDG = .TRUE.

      PLAIN=.FALSE.
      SHADE=.FALSE.
      PATERN=.FALSE.
      IF (PINTR .EQ. 0) FAST = .TRUE.
      IF(PINTR.EQ.1)PLAIN=.TRUE.
      IF(PINTR.EQ.2)SHADE=.TRUE.
      IF(PINTR.EQ.3)PATERN=.TRUE.
      IF (PINTR.EQ.4) DITHER= .TRUE.
      IF(PLAIN) GO TO 20
      IF(SRFUSE(SELSLT).EQ.1.AND.MODE(SELSLT).EQ.1)COLOR=.TRUE.
      IF(SRFUSE(SELSLT).EQ.2.AND.MODE(SELSLT).EQ.1)INTEN=.TRUE.
      IF(MODE(SELSLT).EQ.2)INDEX=.TRUE.
  20  CONTINUE

      IF (SOLEDG .OR. FAST) THEN
         NVERT = PARRAY(4)/3
         I = 4
         DO 30 J= 1, NVERT
            FASTX(J) = RARRAY(I+1)
            FASTY(J) = RARRAY(I+2)
            I = I+3
  30     CONTINUE
      ENDIF



      IF (FAST) GOTO 1000

C  1.0 IS CHANGED TO NDCSPC(2) ON 21/9,83
      IYSTEP=NDCSPC(2)/YMAX
        IF (PLAIN .OR. PATERN) CALL GBRKLN
        IF (SHADE .OR. DITHER) CALL GBSHAD
        CALL GSORTL
         LSTACT=0
         TRVSPT=1
         ISCAN=(Y1LINS(SRTD(TRVSPT)))/IYSTEP
         IYSCAN=ISCAN*IYSTEP
  50  CONTINUE
      IF(.NOT.PLAIN) GO TO 55
      PARRAY(1)=5
      PARRAY(2)=71
      PARRAY(3)=1
      PARRAY(4)=0
      PARRAY(5)=FILNDX
      POINT = 6
      GOTO 60

  55      CONTINUE
      PARRAY(2) = 63

  60  CONTINUE
100      IF(TRVSPT.GT.LNPNTR) GO TO 110
         IF(IYSCAN.GT.Y1LINS(SRTD(TRVSPT))) GO TO 110
           LSTACT=LSTACT+1
           ACTLIL(LSTACT)=TRVSPT
           TRVSPT=TRVSPT+1
           GO TO 100
110      CONTINUE
         I=1
120       IF(IYSCAN.GT.Y2LINS(SRTD(ACTLIL(I)))) GO TO 150
          DO 130 J=I,LSTACT
             ACTLIL(J)=ACTLIL(J+1)
130       CONTINUE
          LSTACT=LSTACT-1
         GO TO 160
150      I=I+1
160      CONTINUE
         IF(I.LE.LSTACT) GO TO 120
         IF(LSTACT.EQ.0) GO TO 1000
         IF (SHADE .OR. DITHER) GO TO 260
         DO 250 I=1,LSTACT
            XRASOR(I,1)=CURXLN(SRTD(ACTLIL(I)))
250      CONTINUE
         GO TO 290
 260     CONTINUE
         DO 265 I=1,LSTACT
            SRTACT = SRTD(ACTLIL(I))
             XRASOR(I,1)=CURXLN(SRTACT)
             IF(INTEN)XRASOR(I,2)=CURINT(SRTACT)
C             IF(INDEX)XRASOR(I,2)=CURNDX(SRTACT)
             IF(COLOR .OR. INDEX) THEN
                 XRASOR(I,2)=CURRED(SRTACT)
                 XRASOR(I,3)=CURGRN(SRTACT)
                 XRASOR(I,4)=CURBLU(SRTACT)
             ENDIF
 265     CONTINUE
         GO TO 290
 290    CONTINUE
        ENDPTR=LSTACT
        CALL GSORTX
         IF(SHADE .OR. DITHER) GO TO 400
         IF(PATERN) GO TO 500
C         DO 300 J=1,ENDPTR,2
C              STARTX=XRASOR(J,1) * XMAX + 0.4999
C              ENDX=XRASOR(J+1,1) * XMAX + 0.4999
C              ROWY=IYSCAN * YMAX + 0.4999
C              PARRAY(1)=PARRAY(1)+3
C              PARRAY(3)=PARRAY(3)+3
C              PARRAY(POINT)=ROWY
C              PARRAY(POINT+1)=STARTX
C              PARRAY(POINT+2)=ENDX
C              POINT=POINT+3
C300      CONTINUE
C         GO TO 700
C NEXT 14 LINES ADDED ON 21/9,83
        PARRAY (1) =10
        PARRAY (2) =PLIN3
        PARRAY (3) =0
        PARRAY (4) =6
       DO 308 J =1, ENDPTR,2
        RARRAY (5) =XRASOR (J,1)
        RARRAY (6) =IYSCAN
        RARRAY (7) =0.0
        RARRAY (8) =XRASOR (J+1,1)
        RARRAY (9) =IYSCAN
        RARRAY (10) = 0.0
       CALL GDSPCH
 308    CONTINUE
        GO TO 700
  400 CONTINUE

      ROWY = IYSCAN * YMAX + 0.4999
      YY = ROWY
        IF (DITHER) JJ=MOD(YY,PROW) + 1
      DO 480 J=1,ENDPTR,2
          STARTX = XRASOR(J,1) * XMAX + 0.4999
          ENDX = XRASOR(J+1,1) * XMAX + 0.4999
          PARRAY(5) = ROWY
          PARRAY(6) = STARTX
          PARRAY(7) = ENDX - STARTX + 1
          PARRAY(3) = 3
          PARRAY(4) = 0
        IF (COLOR) PARRAY(4) = PARRAY(7) * 3
        IF (INTEN) PARRAY(4) = PARRAY(7)
        IF (INDEX) PARRAY(3) = PARRAY(7) + 3
          PARRAY(1) = PARRAY(3) + 4
          IF(COLOR) GO TO 420
          IF(INTEN) GO TO 440
          IF(INDEX) GO TO 460
  420     CONTINUE
          PARRAY(2) = WRSCOL
          STARTR = XRASOR(J,2)
          ENDR = XRASOR(J+1,2)
          DELR = ENDR - STARTR
          STARTG = XRASOR(J,3)
          ENDG = XRASOR(J+1,3)
          DELG = ENDG - STARTG
          STARTB = XRASOR(J,4)
          ENDB = XRASOR(J+1,4)
          DELB = ENDB - STARTB
          DELX = IABS(ENDX - STARTX)
          RED = STARTR
          GREEN = STARTG
          BLUE = STARTB
          IF (DELX.EQ.0) THEN
              SLPR = 0
              SLPG = 0
              SLPB = 0
          ELSE
              SLPR = DELR/DELX
              SLPG = DELG/DELX
              SLPB = DELB/DELX
          ENDIF
          BASE = 8
          K = 0
          DO 430 L=STARTX,ENDX
              K = K+1
              RARRAY(BASE) = RED
              RARRAY(BASE+1) = GREEN
              RARRAY(BASE+2) = BLUE
              RED = STARTR + (K * SLPR)
              GREEN = STARTG + (K * SLPG)
              BLUE = STARTB + (K * SLPB)
              BASE = BASE + 3
  430     CONTINUE
          GO TO 475
  440  CONTINUE
  460     CONTINUE
          DELX = IABS(ENDX - STARTX)

          STARTR = XRASOR(J,2)
          STARTG = XRASOR(J,3)
          STARTB = XRASOR(J,4)

          ENDR = XRASOR(J+1,2)
          ENDG = XRASOR(J+1,3)
          ENDB = XRASOR(J+1,4)

          DX = ENDX-STARTX
        R = STARTR
        G = STARTG
        B = STARTB
        DELR = 0
        DELB = 0
        DELG = 0
        IF (DX .NE. 0) THEN
           DELR = (ENDR-STARTR)/DX
           DELG = (ENDG-STARTG)/DX
           DELB = (ENDB-STARTB)/DX
        END IF


          DO 470 L=STARTX,ENDX
           XX = L
           K = XX - STARTX
             IF (DITHER) I = MOD(XX,PCOLMN) +1
             C = POLARY(I,JJ)

           IF (SHADE) THEN
            VR = R + 0.5
            VG = G + 0.5
            VB = B + 0.5
           END IF

           IF (DITHER) THEN
              TRUNCR = R
            IR = NN * (R - TRUNCR)
            VR = TRUNCR
            IF (IR .GT. C) VR = VR + 1

              TRUNCG = G
            IG = NN * (G - TRUNCG)
            VG = TRUNCG
            IF (IG .GT. C) VG = VG +1

              TRUNCB = B
            IB = NN * (B - TRUNCB)
            VB = TRUNCB
            IF (IB .GT. C) VB = VB + 1
           END IF


           INDX = VR + L1*(VG + L2*VB)
           PARRAY(8+K) = INDX

           R = R + DELR
           G = G + DELG
              B = B + DELB

  470     CONTINUE
          GO TO 475
  475     CONTINUE
          CALL GDSPCH
  480 CONTINUE
      GO TO 700
  500 CONTINUE

      ROWY = IYSCAN * YMAX
      YY = ROWY
      DO 580 J=1,ENDPTR,2
          STARTX = XRASOR(J,1) * XMAX + 0.4999
          ENDX = XRASOR(J+1,1) * XMAX + 0.4999
          PARRAY(5) = ROWY
          PARRAY(6) = STARTX
          PARRAY(7) = ENDX - STARTX + 1
          PARRAY(3) = 3
          PARRAY(4) = 0
        IF (COLOR) PARRAY(4) = PARRAY(7) * 3
        IF (INTEN) PARRAY(4) = PARRAY(7)
        IF (INDEX) PARRAY(3) = PARRAY(7) + 3
          PARRAY(1) = PARRAY(4) + 7
          IF(COLOR) GO TO 520
          IF(INTEN) GO TO 550
          IF(INDEX) GO TO 560
  520     CONTINUE

          GO TO 700
  550  CONTINUE
        GOTO 575
  560     CONTINUE
          STARTN = XRASOR(J,2)
          ENDN = XRASOR(J+1,2)

        DO 570 L = STARTX,ENDX
           K = L - STARTX
           XX = L - XORG
           YY = ROWY - YORG
           I = MOD(XX,PCOLMN) +1
           JJ = MOD(YY,PROW) +1
           IF (I .LT. 0) I = I + PCOLMN
           IF (JJ .LT. 0) JJ= JJ + PROW

           INDX = POLARY(I,JJ)
           PARRAY(8+K) = INDX
  570     CONTINUE
  575        CONTINUE
        CALL GDSPCH
  580        CONTINUE
      GO TO 700
 700  CONTINUE
         DO 705 I=1,LSTACT
            SRTACT = SRTD(ACTLIL(I))
           CURXLN(SRTACT)= CURXLN(SRTACT)+DELXLN(SRTACT)
           IF(PLAIN.OR.PATERN)GO TO 705
           CURINT(SRTACT)= CURINT(SRTACT) + INTSLP(SRTACT)
C           CURNDX(SRTACT)= CURNDX(SRTACT) + NDXSLP(SRTACT)
           CURRED(SRTACT)= CURRED(SRTACT) + REDSLP(SRTACT)
           CURGRN(SRTACT)= CURGRN(SRTACT) + GRNSLP(SRTACT)
           CURBLU(SRTACT)= CURBLU(SRTACT) + BLUSLP(SRTACT)
705      CONTINUE
          IYSCAN=IYSCAN-IYSTEP
         GO TO 100
 1000 CONTINUE
         IF (PLAIN) CALL GDSPCH


      IF (SOLEDG .OR. FAST) THEN
         PARRAY(1) = 4 + NVERT*2
         PARRAY(2) = 4
         PARRAY(3) = 0
         PARRAY(4) = NVERT*2

         I=4
         DO 1100 J=1,NVERT
            RARRAY(I+1) = FASTX(J)
            RARRAY(I+2) = FASTY(J)
            I = I +2
 1100    CONTINUE
         CALL GDSPCH
      ENDIF
       RETURN
      END
      SUBROUTINE GBRKLN
      COMMON/LNK/X1LINS,Y1LINS,X2LINS,Y2LINS,
     1 DELXLN,CURXLN,LNPNTR,TRVSPT,CURINT,INTSLP,
     2 CURRED,REDSLP,CURGRN,GRNSLP,CURBLU,BLUSLP,
     3 IYSTEP,CURNDX,NDXSLP
      REAL X1LINS(1500),Y1LINS(1500),X2LINS(1500),Y2LINS(1500),
     1 DELXLN(1500),CURXLN(1500),CURINT(1500),INTSLP(1500),
     2 CURRED(1500),REDSLP(1500),CURGRN(1500),GRNSLP(1500),
     3 CURBLU(1500),BLUSLP(1500),IYSTEP,CURNDX(1500),NDXSLP(1500)
      INTEGER LNPNTR,TRVSPT,CLRPTR
      COMMON/PLY/VRTNDX,VRTCOL,VRTINT,VERMAX,CNTCOL,CNTINT,
     1    CNTNDX,VERCNT
       INTEGER VRTNDX(1500),VERMAX,CNTCOL,CNTINT,CNTNDX,VERCNT
       REAL VRTCOL(1500,3),VRTINT(1500)
      COMMON /PAR/ PARRAY,MAXARY
      INTEGER*4 PARRAY(5000),MAXARY
       REAL RARRAY(5000)
       REAL XFPNT,YFPNT,TEMP(16),X1,Y1,X2,Y2
       REAL XDEL,RDEL,GDEL,BDEL
       REAL REJC1,REJC2
       EQUIVALENCE (PARRAY,RARRAY)

      LOGICAL INDEX

      INTEGER RED1,RED2,GREEN1,GREEN2,BLUE1,BLUE2
       LNPNTR=1
        XFPNT=RARRAY(5)
        YFPNT=RARRAY(6)
        I=4
       N=PARRAY(4)
100       X1=RARRAY(I+1)
          Y1=RARRAY(I+2)
           IF((I+3).LT.N) GO TO 125
            X2=XFPNT
            Y2=YFPNT
           GO TO 140
125       X2=RARRAY(I+4)
          Y2=RARRAY(I+5)
140       DELX=X2-X1
          DELY=Y2-Y1
           XDEL=0.0
           IF(DELY.EQ.0.0) GO TO 150
            XDEL=-(IYSTEP*DELX)/DELY
150       REJC1=Y1/IYSTEP
          REJC2=Y2/IYSTEP
          IF(REJC1.EQ.REJC2) GO TO 900
          IF(Y1.GT.Y2) GO TO 300
            TEMP(1)=X2
            TEMP(2)=Y2
            TEMP(3)=X1
            TEMP(4)=Y1
            X1=TEMP(1)
            Y1=TEMP(2)
            X2=TEMP(3)
            Y2=TEMP(4)
300       X1LINS(LNPNTR)=X1
          Y1LINS(LNPNTR)=Y1
          X2LINS(LNPNTR)=X2
          Y2LINS(LNPNTR)=Y2
          CURXLN(LNPNTR)=X1
          DELXLN(LNPNTR)=XDEL
          LNPNTR=LNPNTR+1
900      I=I+3
         IF(I.LT.N) GO TO 100
       LNPNTR=LNPNTR-1
       RETURN
      ENTRY GBSHAD

         INDEX = .TRUE.

      SLOT = 2
      L1=8
      L2=16
      L3=8

       LNPNTR=1
       CLRPTR=1
        XFPNT=RARRAY(5)
        YFPNT=RARRAY(6)
        I=4
       N=PARRAY(4)
1000       X1=RARRAY(I+1)
          Y1=RARRAY(I+2)
           IF((I+3).LT.N) GO TO 1250
            X2=XFPNT
            Y2=YFPNT
           GO TO 1400
1250       X2=RARRAY(I+4)
          Y2=RARRAY(I+5)
1400      DELX=X2-X1
          DELY=Y2-Y1
1500      REJC1=Y1/IYSTEP
          REJC2=Y2/IYSTEP
          IF(REJC1.EQ.REJC2) GO TO 1900
          NEXT=CLRPTR + 1

          INTEN1=VRTINT(CLRPTR)
          INTEN2=VRTINT(NEXT)
          RED1=VRTCOL(CLRPTR,1)
          RED2=VRTCOL(NEXT,1)
          GREEN1=VRTCOL(CLRPTR,2)
          GREEN2=VRTCOL(NEXT,2)
          BLUE1=VRTCOL(CLRPTR,3)
          BLUE2=VRTCOL(NEXT,3)
          IF (INDEX) THEN
             INDEX1= VRTNDX(CLRPTR)
             INDEX2= VRTNDX(NEXT)

             BLUE1 = INDEX1/(L1*L2)
             GREEN1 = (INDEX1 - L1*L2*BLUE1)/L1
             RED1 = (INDEX1 - L1*(GREEN1 + L2*BLUE1))

             BLUE2 = INDEX2/(L1*L2)
             GREEN2 = (INDEX2 - L1*L2*BLUE2)/L1
             RED2 = (INDEX2 - L1*(GREEN2 + L2*BLUE2))
          ENDIF

          INDEX1=VRTNDX(LNPNTR)
          INDEX2=VRTNDX(NEXT)

          XDEL= -(IYSTEP*DELX)/DELY
          RDEL= -(IYSTEP*(RED2-RED1))/DELY
          GDEL= -(IYSTEP*(GREEN2-GREEN1))/DELY
          BDEL= -(IYSTEP*(BLUE2-BLUE1))/DELY

          IF(Y1.GT.Y2) GO TO 1600
            TEMP(1)=X2
            TEMP(2)=Y2
            TEMP(3)=X1
            TEMP(4)=Y1
            TEMP(5)=INTEN1
            TEMP(6)=INTEN2
            TEMP(7)=RED1
            TEMP(8)=RED2
            TEMP(9)=GREEN1
            TEMP(10)=GREEN2
            TEMP(11)=BLUE1
            TEMP(12)=BLUE2
            X1=TEMP(1)
            Y1=TEMP(2)
            X2=TEMP(3)
            Y2=TEMP(4)
            INTEN1=TEMP(6)
            INTEN2=TEMP(5)
            RED1=TEMP(8)
            RED2=TEMP(7)
            GREEN1=TEMP(10)
            GREEN2=TEMP(9)
            BLUE1=TEMP(12)
            BLUE2=TEMP(11)
1600       X1LINS(LNPNTR)=X1
          Y1LINS(LNPNTR)=Y1
          X2LINS(LNPNTR)=X2
          Y2LINS(LNPNTR)=Y2
          CURXLN(LNPNTR)=X1
          DELXLN(LNPNTR)=XDEL
          CURINT(LNPNTR)=INTEN1
          CURRED(LNPNTR)=RED1
          CURGRN(LNPNTR)=GREEN1
          CURBLU(LNPNTR)=BLUE1
          REDSLP(LNPNTR)= RDEL
          GRNSLP(LNPNTR)= GDEL
          BLUSLP(LNPNTR)= BDEL
          LNPNTR=LNPNTR+1
1900      I=I+3
          CLRPTR=CLRPTR+1
         IF(I.LT.N) GO TO 1000
       LNPNTR=LNPNTR-1

      CURRED(NEXT) = RED2
      CURGRN(NEXT) = GREEN2
      CURBLU(NEXT) = BLUE2

       RETURN
      END
      SUBROUTINE GSORTL
      COMMON/LNK/X1LINS,Y1LINS,X2LINS,Y2LINS,
     1 DELXLN,CURXLN,LNPNTR,TRVSPT,CURINT,INTSLP,
     2 CURRED,REDSLP,CURGRN,GRNSLP,CURBLU,BLUSLP,
     3 IYSTEP,CURNDX,NDXSLP
      REAL X1LINS(1500),Y1LINS(1500),X2LINS(1500),Y2LINS(1500),
     1 DELXLN(1500),CURXLN(1500),CURINT(1500),INTSLP(1500),
     2 CURRED(1500),REDSLP(1500),CURGRN(1500),GRNSLP(1500),
     3 CURBLU(1500),BLUSLP(1500),IYSTEP,CURNDX(1500),NDXSLP(1500)
      INTEGER LNPNTR,TRVSPT
      INTEGER FLAG
      REAL TEMP

      INTEGER SRTD(1500)
      COMMON /KEY/ SRTD

      DO 50 I=1,LNPNTR
         SRTD(I) = I
  50  CONTINUE

        DO 200 I=1,LNPNTR-1
          FLAG=0
          DO 100 J=1,LNPNTR-I
            IF(Y1LINS(SRTD(J+1)).LE.Y1LINS(SRTD(J))) GO TO 100
            TEMP = SRTD(J)
            SRTD(J) = SRTD(J+1)
            SRTD(J+1) = TEMP
            FLAG=1
100       CONTINUE
         IF(FLAG.EQ.0) GO TO 500
200     CONTINUE
500     CONTINUE
       RETURN
      END
      SUBROUTINE GSORTX
      COMMON/ACT/ACTLIL,LSTACT,XRASOR,ENDPTR
      INTEGER ACTLIL(1500),LSTACT,ENDPTR
      REAL XRASOR(1500,4)
        INTEGER FLAG
      REAL TEMP(4),TEMPX
         DO 1000 I=1,ENDPTR-1
           FLAG=0
           DO 500 J=1,ENDPTR-I
            IF(XRASOR(J+1,1).GE.XRASOR(J,1))  GO TO 500
               DO 100 K= 1,4
                  TEMP(K) = XRASOR(J,K)
                  XRASOR(J,K) = XRASOR(J+1,K)
                  XRASOR(J+1,K) = TEMP(K)
 100           CONTINUE
            FLAG=1
500        CONTINUE
          IF(FLAG.EQ.0) GO TO 2000
1000     CONTINUE
2000    CONTINUE
       RETURN
       END
**IN -1
