FTN4,L
C 
C 
C 
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: GTEX2
C      SOURCE: 92840 - 18144
C      RELOC:  92840 - 16021
C 
C 
C 
CC*********************************************************** 
      SUBROUTINE GTEX2(IGCB,ITEXT,ISTRT,ITEXL)
     +,92840-16021 REV.2013 790904
C*************************************************************
C GTEX2 OUTPUTS HARDWARE CHARACTERS TO THE GRAPHICS LU OPEN 
C TO IGCB.
C 
C NOTE: IF THE ISTRT CHARACTER IS NOT ON A WORD BOUNDARY, GTEX2 
C SAVES THE FIRST CHARACTER AND THEN
C DOES A LEFT SHIFT ON ALL THE CHARACTERS IN ITEXT TO ALIGN THEM
C AT A WORD BOUNDARY. THEN THE LABON CALL IS MADE AND AN EXEC 
C CALL IS MADE TO OUTPUT THE CHARACTERS. (EXEC ONLY OUTPUTS 
C CHARACTERS ON A WORD BOUNDARY). AFTER ALL OF THIS, THE CHARACTER
C STRING IS THEN RIGHT-SHIFTED BACK TO ITS ORIGINAL POSITION. 
C 
C 
C ITEXT = THE CHARACTERS TO BE OUTPUT.
C ISTRT = INDEX OF THE FIRST CHARACTER TO BE OUTPUT.
C ISTRT = LOCAL VARIABLE THAT STARTS OUT = ISTRT, THEN GETS 
C         BUMPED AS YOU OUTPUT THE CHARACTERS IN THE SUBSRING.
C ITEXL = NUMBER OF CHARACTERS TO BE OUTPUT.
C FLAG  = .TRUE. IF STRING STARTS ON A WORD BOUNDARY, ELSE FALSE. 
C*************************************************************
      INTEGER IGCB(1),ITEXT(1),ITEXL
      LOGICAL FLAG
C*************************************************************
C IMPLEMENT A STUB. 
C 
D     LU=LOGLU(IDUMY) 
D     WRITE(LU,1000)
D1000 FORMAT("GTEX2 HIT A STUB.") 
C**************************************************************** 
C GET THE GRAPHICS LU OUT OF THE GCB. 
C 
      CALL GCBIM(2,1,LUG,0,1) 
C**************************************************************** 
C GET THE POSITIVE NUMBER OF CHARACTERS INTO NUMB.
C 
      IF ((ISTRT .LE. 0) .OR. (ITEXL .LE. 0)) GO TO 8500
      NUMB=ITEXL
      ISTRC=ISTRT 
C***************************************************************
C BRANCH TO BELOW IF ISTRC IS ON A WORD BOUNDARY. 
C NOTE: FLAG IS .TRUE. IFF FIRST CHARACTER IS ON A WORD BOUNDARY. 
C 
      FLAG=.TRUE. 
      IF (MOD(ISTRC,2) .EQ. 1) GO TO 100
C************************************************************** 
C ISTRC IS NOT ON A WORD BOUNDARY. SAVE THE CHARACTER AT
C POSITION (ISTRC-1) THEN LEFT SHIFT THE CHARACTER STRING 
C TO BE AT A WORD BOUNDARY. SET ISTRC TO POINT TO THE NEW 
C FIRST CHARACTER.
C 
      FLAG=.FALSE.
      CALL SGET(ITEXT,ISTRC-1,ITEMP)
C 
      DO 10 J=0,NUMB-1
      CALL SGET(ITEXT,ISTRC+J,ICHAR)
      CALL SPUT(ITEXT,ISTRC+J-1,ICHAR)
10    CONTINUE
      ISTRC=ISTRC-1 
C**************************************************************** 
C CALCULATE THE WORD BOUNDARY.
C 
100   IWORD=(ISTRC+1)/2 
C*******************************************************************
C JUST LET LABON AND LABOF HANDLE THE WHOLE TRANSACTION.
C 
      CALL LABON(IGCB)
      CALL REIO(2,LUG,ITEXT(IWORD),-NUMB) 
      CALL LABOF(IGCB)
C*****************************************************************
C RIGHT SHIFT IT BACK IF NECESSARY. 
C 
      IF (FLAG) RETURN
C 
      DO 20 J=NUMB-1,0,-1 
      CALL SGET(ITEXT,ISTRC+J,ICHAR)
      CALL SPUT(ITEXT,ISTRC+J+1,ICHAR)
20    CONTINUE
      CALL SPUT(ITEXT,ISTRC,ITEMP)
      RETURN
C****************************************************************** 
C ITEXL OR ISTRC .LE. 0 
C 
8500  CONTINUE
      CALL PLTER(31,IDUMY)
      RETURN
      END 
                                              