FTN,L 
C 
C 
C 
CC************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  ALL RIGHTS    *
C RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
CC************************************************************
C 
C 
C 
C      NAME: GRID,LGRID 
C      SOURCE: 92840 - 18021
C      RELOC:  92840 - 16001
C 
C 
C 
CC*********************************************************** 
C 
      SUBROUTINE GRIDS(IND,IGCB ,P1,P2,P3,
     1P4,P5,P6,P7), 92840-16001 REV.1901 781020 
      DIMENSION VAR(15),BEGIN(2),IBUFR(6) 
      DIMENSION ICODE(4)
      INTEGER READ,WRITE,EFLG 
      EQUIVALENCE (VAR,A),(VAR(2),B),(VAR(3),C),(VAR(4),D)
      EQUIVALENCE (VAR(5),X1),(VAR(6),Y1) 
      EQUIVALENCE (AP,VAR(9)),(BP,VAR(10)),(CP,VAR(11)),(DP,VAR(12))
      EQUIVALENCE (VAR(7),XEND),(VAR(8),YEND) 
      EQUIVALENCE (BEGIN(2),BEG2) 
      EQUIVALENCE (ICODE(2),ICD2),(ICODE(3),ICD3) 
      EQUIVALENCE (IBUFR(5),THETA),(XLNTH,IBUFR(2)) 
      EQUIVALENCE (IBUFR(4),LRG),(ICODE(4),LNTYP) 
C 
      DATA READ/1/
      DATA WRITE/2/                                                     EM1901
      DATA LNTYP/23/
C 
C     THIS IS THE AGL MODULE FOR AGL COMMANDS GRID AND LGRID. 
C     THE PARAMETERS IN THE CALLING SEQUENCE HAVE THE FOLLOWING 
C  MEANINGS FOR EACH AGL COMMAND: 
C 
C  PARAMETER       AGL COMMAND      MEANING          DEFAULT
C    P1                             X-TIC SPACING     0-NO TICS 
C    P2              "              Y-TIC SPACING     0 
C    P3              "              X-ORIGIN          0 
C    P4              "              Y-ORIGIN          0.
C    P5              "              X-MAJOR COUNT     1.0 
C    P6              "              Y-MAJOR COUNT     1.0 
C    P7                             CROSS SIZE        0(NO CROSS) 
C*************************************************************
C 
C     DETERMINE UNITS MODE AND WHICH TRANSFORMATION CONSTANTS TO
C  USE. 
C 
CCCC
C     THIS CALL ESTABLISHES AN ADDRESS LINK BETWEEN THE GRAPGHICS 
C  PACKAGE AND THE CURRENT GCB AND ALSO CHECKS FOR A SUSPENDED GCB. 
C 
      ISUSP= 0
      CALL GCBIM(99,1,IGCB,ISUSP) 
      IF(ISUSP.NE.0)RETURN
      ICODE = IADCD(D)
      ICD2     = 9
      ICD3     = 11 
      CALL GCBIM(ICODE,4,VAR,0,READ)
      CALL GCBIM(LNTYP,1,IBUFR,0,1) 
C 
C WE ARE PROBABLY GOING TO CALL SUBROUTINE 'LINE' IN THIS PROCEDURE     EM1901
C WHICH WILL ALTER BIT 11 IN THE STATUS WORD. SAVE STATE OF THIS BIT    EM1901
C FOR RESETTING, SO IT DOESN'T FALSELY INDICATE USER CALL TO 'LINE'     EM1901
      CALL GRSTS(READ,4000B,LNSET)                                      EM1901
C 
C     CONVERT MU TO GDUS FOR LABELLING
C 
C 
C     CLIP X(ORIGIN),Y(ORIGIN) USING EITHER S1,S2 OR V1,V2 AS LIMITS. 
C 
      XEND = (XEND - B)/A 
      YEND = (YEND - D)/C 
      X1 = (X1 - B)/A 
      Y1 = (Y1 - D)/C 
C 
C     ABSOLUTIZE PARAMETERS 
C 
      XP1 = P1
      XP2 = P2
      GO TO(10,20),IND
10    XP1 = ABS(P1) 
      XP2 = ABS(P2) 
20    XP5 = ABS(P5) 
      XP6 = ABS(P6) 
      XP7 = ABS(P7) 
C 
C     NOW BEGIN TO DRAW THE AXES, FIRST THE X AXES AND TIC MARKS
C  THEN THE Y AXES AND TIC MARKS. 
C 
      CALL MOVE(IGCB,X1,Y1) 
      BEGIN = X1
      BEG2 = Y1 
      TICSZ =(XP7 * CP)/C 
      IF(XP1.NE.0.)GO TO 25 
      CALL LINE(IGCB,0) 
      CALL DRAW(IGCB,XEND,Y1) 
      GO TO 110 
C 
C     INVOKE SUBROUTINE TO DRAW AXES FIRST THE X AXIS 
C  AND THEN THE Y AXIS. 
C 
25    CALL SUBGD(IND,BEGIN,Y1,YEND,XEND,TICSZ,P3,XP1,XP5,1,2,IGCB)
110   BEGIN = Y1
      BEG2 = X1 
      TICSZ =(XP7 * AP)/A 
      CALL MOVE(IGCB,X1,Y1) 
      IF(XP2.NE.0.)GO TO 35 
      CALL LINE(IGCB,0) 
      CALL DRAW(IGCB,X1,YEND) 
      GO TO 45
35    CALL SUBGD(IND,BEGIN,X1,XEND,YEND,TICSZ,P4,XP2,XP6,2,1,IGCB)
C 
C     RESET LDIR AND LINE TYPE
C 
45    CALL LINE (IGCB,IBUFR,XLNTH)
      CALL LORG(IGCB,LRG) 
      CALL LDIR(IGCB,THETA) 
C 
C RESET STATUS OF 'LINE CALLED' BIT                                     EM1901
      CALL GRSTS(WRITE,173777B,LNSET)                                   EM1901
C 
      RETURN
      END 
      SUBROUTINE SUBGD(IND,BEGIN,ST1,ST2,ENDPT,TCSZ,ORG,P12,P56,
     1I,J,IB), 92840-16001 REV.1901 781020
C 
C NOTE - THIS SUBROUTINE DOES NOT PRESERVE THE STATUS OF THE            EM1901
C        'LINE CALLED' BIT, BIT 11 OF THE STATUS WORD. THIS IS DONE     EM1901
C        BY SUBROUTINE GRIDS WHICH IS THE ONLY CALLER OF SUBGD AT THIS  EM1901
C        TIME.  IF SUBGD IS CALLED BY ANY OTHER ROUTINE, PRESERVING     EM1901
C        MUST BE DONE                                                   EM1901
C 
      DIMENSION BEGIN(2)
      INTEGER READ,WRITE,GRIFX
C 
C 
C     ST1 = Y1 OR X1
C     ST2 = YEND,OR XEND
C     THIS SUBROUTINE IS RESPONSIBLE FOR DRAWING THE GRIDS FOR THE
C  GRID AND LGRID COMMANDS. 
C 
      BEG1 = BEGIN
      IORG = 0
      IFLG = 1
C 
      K = 0 
      XP12 = ABS(P12) 
      EPSI = .1 * XP12
      TCNT = 0. 
      BEG2 = BEGIN(2) 
C 
C     SEE IF MINOR TICS NOT DESIRED AND IF SO DRAW A MAJOR TIC MARK 
C 
C 
C 
C     THIS PORTION OF THE ROUTINE IS RESPONSIBLE FOR DRAWING THE
C MAJOR AND MINOR TIC MARKS. IF THIS IS A LABELED AXES (LAXES)
C CALL THE LABEL DRAWING SUBROUTINE (LABL) IS INVOKED.
C 
100   LIN = 1 
      IF(TCNT.EQ.P56.OR.BEGIN.EQ.ORG.OR.P56.EQ.1.0.OR.TCNT.EQ.0.0)
     1LIN = 0 
      CALL LINE(IB,LIN) 
C 
C     SEE IF LIGHT LINES OR TIC MARKS ARE DESIRED.
C 
      IF(TCSZ.EQ.0.AND.LIN.EQ.1)GO TO 50
      IF(LIN.EQ.0)GO TO 50
      CALL LINE(IB,0) 
      TIC1 = BEG2 + TCSZ
      TIC2 = BEG2 - TCSZ
      IF(I.EQ.2)GO TO 52
      CALL MOVE(IB,BEGIN,TIC2)
      GRIDX = BEGIN 
      GRIDY = TIC1
      GO TO 55
C 
C     Y AXIS
52    CALL MOVE(IB,TIC2,BEGIN)
      GRIDX = TIC1
      GRIDY = BEGIN 
      GO TO 55
C 
C     DETERMINE WHICH AXES IS BEING DRAWN I= 1 FOR X AXIS, =2 FOR Y AXIS
C 
50    GRIDX = BEGIN 
      GRIDY = ST2 
      IF(I.EQ.1)GO TO 55
      GRIDX = ST2 
      GRIDY = BEGIN 
C 
C     AVOID DRAWING OVER PREVIOUS X AXIS
C 
55    IF(K.EQ.0)GO TO 57
      CALL DRAW(IB,GRIDX,GRIDY) 
57    CALL MOVE(IB,BEGIN(I),BEGIN(J)) 
      TCNT = TCNT + 1.0 
C 
      K = 1 
C     NOW SEE IF WE SHOULD DRAW A LABEL 
C 
      IF(LIN.EQ.1)GO TO 200 
      IF(IORG.GE.0)TCNT = 1.
      IF(IND.NE.2)GO TO 200 
      CALL LABAX(P12,ST1,BEGIN,I,J,IB)
C 
C 
C 
C     COMPUTE  X OR Y + (TIC SPACING) 
C 
200   BEGIN = BEGIN + XP12
C 
C 
C     DRAW LINE TO NEXT TIC MARK. 
C 
205   CALL LINE(IB,0) 
      IF(IORG.LT.0)GO TO 350
      IF(BEGIN.GE.ORG .AND.ORG.GE.BEG1.AND.IORG.EQ.0)GO TO 300
250   CALL DRAW  (IB, BEGIN(I),BEGIN(J))
      IFLG = 2
      IF(BEGIN.LE.ENDPT)GO TO 100 
      IF(ABS(BEGIN - ENDPT).GT.EPSI)RETURN
C 
      GO TO 100 
C 
C  FIRST SEE IF IFLG =1 FOR BEGINNING 
C 
300   IF(IFLG.EQ.2)GO TO 310
      IORG = 1
      GO TO 250 
C 
C     CHECK TO SEE IF MAJOR TIC HAS ALREADY BEEN DONE 
C 
310   SAVBG = BEGIN 
      IORG = -1 
      BEGIN = ORG 
      GO TO 250 
C 
C 
C 
350   BEGIN = SAVBG 
      IT1 = GRIFX(BEGIN)
      IT2 = GRIFX(ORG)
      IF(TCNT.GT.P56.OR.IT1.GT.IT2)TCNT = TCNT - 1.0
      IF(TCNT.EQ.P56.AND.IT1.LE.IT2)TCNT = 1.0
      IF(IT1.EQ.IT2)  BEGIN = BEGIN + XP12
      IORG = 1
      GO TO 250 
C 
C 
      END 
                                                                                                                        