*DECK FCSOWOF 
USETEXT TEXTFCS;
      PROC FCSOWOF (BUFFER, BUFLEN);
*CALL COPYRITE
# TITLE FCSOWOF - WRITE TO OUTPUT FILE.                                #
  
      BEGIN                            # FCSOWOF                       #
  
# 
**    FCSOWOF - WRITE TO OUTPUT FILE. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE WRITES A MESSAGE TO THE OUTPUT FILE. 
* 
*     PROC FCSOWOF (BUFFER, BUFLEN) 
* 
*     ENTRY   BUFFER     = BUFFER CONTAINING MESSAGE TO WRITE.
*             BUFLEN     = LENGTH OF MESSAGE IN OCTETS. 
*                        = INTERNAL$ MEANS BUFFER CONTAINS 6/12 
*                          DATA ZERO BYTE TERMINATED. 
*             FTPOUTPUT  = FTP OUTPUT FILE. 
*             FTPINTER   = TRUE IF JOB ORIGIN IS INTERACTIVE. 
* 
*     EXIT    MESSAGE WRITTEN TO OUTPUT FILE. 
* 
*     NOTES   IF DATA IS 6/12 ASCII THEN ONLY 1 LINE WILL BE OUTPUT 
*             PER CALL TO THIS PROCEDURE. 
*             IF DATA IS 8/8 ASCII THEN MULTIPLE LINES WILL BE OUTPUT 
*             BASED ON THE LENGTH OF DATA IN THE BUFFER AND ANY EMBEDDED
*             CARRIAGE RETURNS AND LINE FEEDS.
*             IF NOT INTERACTIVE THEN DATA IS PRECEEDED BY 10 SPACES. 
* 
*     METHOD  IF NOT 6/12 DATA THEN CONVERT ASCII DATA TO 6/12 DATA.
*             WRITE 6/12 DATA TO THE CURRENT OUTPUT FILE. 
* 
# 
  
# 
****  PROC FCSOWOF - XREF LIST
# 
      XREF
        BEGIN 
        PROC MOVE;                     # MOVE AN AREA OF MEMORY        #
        PROC NETUCA6;                  # CONVERT FROM ASCII TO 6/12    #
        PROC RECALL;                   # WAIT FOR FET COMPLETION       #
        PROC WRITEC;                   # WRITE CODED LINE              #
        END 
# 
****
# 
      ARRAY BUFFER [00:00] S(1);       # BUFFER CONTAINING MESSAGE     #
        BEGIN 
        ITEM BUF$WORD    U(00,00,60);  # FIRST WORD REFERENCE          #
        END 
      ITEM BUFLEN        I;            # BUFFER LENGTH                 #
  
      ITEM DIND          I;            # DESTINATION CHARACTER INDEX   #
      ITEM NUMC          I;            # NUMBER OF CHARACTERS LEFT     #
      ITEM SIND          I;            # SOURCE CHARACTER INDEX        #
      ITEM SPACES        C(10) = "          ";
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF FTPOUTPUT EQ "0" 
      THEN
        BEGIN                          # NO OUTPUT FILE EXISTS         #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     DATA IN 6/12, JUST TRANSFER IT. 
# 
      IF BUFLEN EQ INTERNAL$
      THEN
        BEGIN                          # DATA ALREADY IN 6/12 FORMAT   #
        IF FTPINTER 
        THEN
          BEGIN                        # INTERACTIVE MODE              #
          WRITEC (MBT[MBOX],
                  BUFFER[0]);          # TRANSFER LINE TO CIO BUFFER   #
          END 
        ELSE
          BEGIN                        # NON-INTERACTIVE MODE          #
          MOVE (WORKSIZ$, BUFFER[0],
                WORKBUF[1]);           # COPY LINE TO WORKING BUFFER   #
          WORK$WORD[0] = SPACES;       # ADD WORD OF SPACES            #
          WRITEC (MBT[MBOX],
                  WORKBUF[0]);         # TRANSFER LINE TO CIO BUFFER   #
          END 
        END 
# 
*    CONVERT EACH LINE OF ASCII MESSAGE TO 6/12 AND TRANSFER IT.
# 
      ELSE
        BEGIN 
        SIND = 0;                      # START FROM FIRST CHARACTER    #
        FOR NUMC = BUFLEN 
          WHILE NUMC NQ 0 DO
          BEGIN                        # LOOP THRU ALL LINES           #
          IF FTPINTER 
          THEN
            BEGIN                      # INTERACTIVE MODE              #
            DIND = 0;                  # RESET DESTINATION INDEX       #
            NETUCA6 (BUFFER[0], SIND, NUMC, 
                     WORKBUF[0], DIND);# CONVERT TO 6/12 ASCII         #
            END 
          ELSE
            BEGIN                      # NON-INTERACTIVE MODE          #
            DIND = 10;                 # UPDATE DESTINATION INDEX      #
            NETUCA6 (BUFFER[0], SIND, NUMC, 
                     WORKBUF[0], DIND);# CONVERT TO 6/12 ASCII         #
            WORK$WORD[0] = SPACES;     # ADD WORD OF SPACES            #
            END 
          WRITEC (MBT[MBOX],
                  WORKBUF[0]);         # TRANSFER LINE TO CIO BUFFER   #
          END 
        END 
# 
*     IF OUTPUT FILE NOT ASSIGNED TO TERMINAL THEN WAIT FOR 
*     COMPLETION OF REQUEST.
# 
      IF MBT$DT[MBOX] NQ "TT" 
      THEN
        BEGIN                          # OUTPUT NOT ASSIGNED TO TERM   #
        RECALL (MBT[MBOX]);            # WAIT TILL REQUEST COMPLETES   #
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSOWOF                       #
  
      TERM
