; *********************************************   IOPORT.SBR
;
;       IOPORT - SEND CHARS TO OTHER PORT OUTPUT AREA IN BASIC
;
;       by DAVID PARKER, SNOWMASS VILLAGE, CO 18623, (303) 923-4263
;
;       USAGE   MAP1 TEST$,S,80
;               TEST$="HI THERE"+CHR(13)+CHR(10)
;               MAP1 JOB$,S,6,"JOB9  "
;               XCALL IOPORT,JOB$,TEST$
;
;       NOTE JOB$ MUST BE 6 CHARS LONG (PADD WITH SPACES
;
;Edit History:
;       1.0 06-01-86 created. /DGP
;
;
;Program version number
       VMAJOR=1
       VMINOR=0

       OBJNAM  IOPORT.SBR

       SEARCH SYS
       SEARCH SYSSYM
       SEARCH TRM

       BUFFER=0

       PHDR    -1,0,PH$REE!PH$REU
       MOV     JOBTBL,A0
       MOV     4(A3),A6                ; A3 POINTS AT JOB DESIRED

LOOP:
       MOV     (A0)+,A1                ; PARSE DOWN JOBTBL LOOK FOR CORRECT JOB
       MOV     A1,D0
       BMI     ENDIT                   ; END OF JOB TABLE ?
       BEQ     ENDIT

       LEA     A1,JOBNAM(A1)           ; UNPACK JOBNAM FROM RAD50 IN JCB
       LEA     A2,BUFFER(A4)
       PUSH    A6                      ; SAVE A6 FROM BEING WRECKED BY UNPACK
       UNPACK
       UNPACK
       POP     A6                      ; GET A6 BACK
       CLRB    @A2
       LEA     A2,BUFFER(A4)           ; A2 POINTS AT CURRENT JOB TABLE ENTRY

       MOV     @A2,D2                  ; CHECK 1ST 4 BYTES FOR JOB MATCH
       MOV     @A6,D3
       CMP     D2,D3
       BNE     LOOP                    ; NO MATCH - NEXT JOB

       CLR     D2                      ; CHECK LAST 2 BYTES FOR JOB MATCH
       CLR     D3
       MOVW    4(A2),D2
       MOVW    4(A6),D3
       CMP     D2,D3

       BEQ     FOUND                   ; FOUND CORRECT JOB
       BR      LOOP                    ; NO MATCH - NEXT JOB

FOUND:
       MOV     -(A0),A0                ; OOPS NEED TO REVERSE INCREMENT
       MOV     JOBTRM(A0),A5           ; A5 SET FOR TTYOUT
       MOV     16(A3),A3               ; A3 POINTS AT PASSED MESSAGE

LOOP2:
       CLR     D1
       MOVB    (A3)+,D1                ; MOVE IN MESSAGE BYTE AT A TIME
       BEQ     ENDIT                   ; LOOK FOR 0 BYTE
       TTYOUT                          ; BLAST IT TO OTHER JOB
       BR      LOOP2

ENDIT:
       RTN                             ; RETURN
       EXIT
       END