C   THIS IS A INTERFACE TO HANDLE HAND SHAKING OPERATIONS
C   BETWEEN A VAX COMPUTER AND A HP DIGITIZER. THE DIGITIZER IS HOOKED
C   UP TO A HP2647 TERMINAL VIA A UNIBUS. THE ACTUAL HAND SHAKING IS
C   DONE BETWEEN THE HP TERMINAL AND THE VAX COMPUTER.
C
C
C                     PROGRAMER James Caudle
C                     ARLB phone (505) 844-4691
C
C
C
	BYTE NUMS(3),PNUM(15),A,P,F,S,G
C
	CHARACTER*40 CHR_INT1,CHR_INT2,CHR_INT3,CHR_TERM
        CHARACTER*40 CHR_COM,STR
C
C
        DATA CHR_INT2 /',cA S H#6'/    ! character sequence for setting source
        DATA CHR_INT3 /',cA D H#6'/    ! setting detination
        DATA A/38/,P/112/,F/49/,S/83/,G/103/
C
        CHR_INT1(1:1) = CHAR(A)
        CHR_INT1(2:2) = CHAR(P)
        CHR_INT1(3:3) = CHAR(F)
        CHR_INT1(4:4) = CHAR(S)
C
        CHR_TERM(1:1) = CHAR(G)
C
        CALL SEND(CHR_INT2,1)         ! set source
        CALL SEND(CHR_INT3,1)         ! set destination
        CALL SEND(CHR_TERM,4)         ! set hand shake mode for hp2647
        CALL SEND(CHR_INT1,4)         ! set special mode for hp2647
C
C
        CHR_COM = 'IN;AA;AT;BP;SK 1;'     ! send digitizer intialize sequence
        CALL SEND(CHR_COM,3)
1       CHR_COM = 'OS;'                   ! request status
        CALL SEND(CHR_COM,3)
C
        CALL LISTEN(NUMS,PNUM,1,IDX,IDY)  ! recieve data from digitizer
        NUM = 0
        DO 2 J=1,IDY
          NUM = NUM + (NUMS(J)-48)
2       CONTINUE
        IF(NUM.EQ.9) GOTO 10              ! has a point been digitized
        IF(NUM.EQ.2) GOTO 20              ! has a special key been processed
3       CHR_COM = 'OC;'                   ! request curser update
        CALL SEND(CHR_COM,3)
        CALL LISTEN(NUMS,PNUM,2,IDX,IDY)
        CALL CVT(STR,PNUM,IDY)            ! get data in proper form
        CHR_COM = STR
        CALL SEND(CHR_COM,3)              ! send curser positon to display
        GOTO 1
10      CHR_COM = 'OK;'                   ! request key function
        CALL SEND(CHR_COM,3)              ! call routine to trnamitt string
        CALL LISTEN(NUMS,PNUM,1,IDX,IDY)
        NUM=0
        DO 11 I=1,IDY
          NUM = NUM + (NUMS(I)-48)
11      CONTINUE
        IF(NUM.EQ.1)IPN=2                 ! is pen up or down
        IF(NUM.EQ.2)IPN=1
        IF(NUM.EQ.4)GOTO 99               ! program terminator has been pressed
        GOTO 3
20      CHR_COM = 'OD;'                   ! request data point digitized
        CALL SEND(CHR_COM,3)
        CALL LISTEN(NUMS,PNUM,2,IDX,IDY)
        CALL CVT(STR,PNUM,IDY)
        READ(STR(3:IDX+2),100)XNUM        ! convert data point to numeric
        READ(STR(IDX+4:IDY-3),100)YNUM
        WRITE(1,*)XNUM,YNUM
        GOTO 3
99      CALL SEND(CHR_TERM,4)
        STOP
200     FORMAT(A)
100     FORMAT(F5.0)
	END
      INCLUDE 'CVT.FOR/LIST'
      INCLUDE 'LENG.FOR/LIST'
      INCLUDE 'LISTEN.FOR/LIST'
      INCLUDE 'SEND.FOR/LIST'
      INCLUDE 'TTINNUM.FOR/LIST'
      INCLUDE 'TTASSIGN.FOR/LIST'
      INCLUDE 'TTOUTNSTR.FOR/LIST'
