*DECK TWRITE
          IDENT  TWRITE 
          EXT    OMSG 
          EXT    XTRACE 
*IF DEF,IMS 
*#
*1DC  TWRITE
* 
*     1. PROC NAME           AUTHOR              DATE 
*        TWRITE              P.C.TAM             78/09/12 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        RECORD MESSAGES INTO ZZZZZDN FILE
* 
*     3. METHOD USED. 
*          IF I/O ERROR OCCURRED ON ZZZZZDN FILE, 
*            RETURN.
*          ELSE (NO I/O ERROR YET ON ZZZZZDN FILE), 
*            EXECUTE RTIME MACRO TO GET CURRENT SYSTEM RTIME. 
*            EXECUTE WRITEO MACRO TO WRITE CURRENT RTIME TO FILE. 
*            IF NO I/O ERROR YET ON ZZZZZDN FILE, 
*              EXECUTE WRITEW MACRO TO WRITE TRACE TEXT TO FILE.
*            IF I/O ERROR OCCURRED ON ZZZZZDN FILE, 
*              CALL OMSG TO ISSUE INFORMATIVE DAYFILE MESSAGE.
* 
*     4. ENTRY PARAMETERS.
*        (A1)   ADDRESS OF THE ADDRESS OF FET.
*        (A1)+1 ADDRESS OF THE ADDRESS OF MESSAGE ADDRESS.
*        (A1)+2 ADDRESS OF THE ADDRESS OF MESSAGE LENGTH. 
*        (A1)+3 ADDRESS OF THE ADDRESS OF NIP-JUST-ALLOCATE-BUFFER
*               FLAG. 
* 
*     5. EXIT PARAMETERS. 
*        NONE.
* 
*     6. COMMON DECKS USED. 
*        CYBERDEFS INPARU MACDEF BPIPBUF SYSTIME
* 
*     7. ROUTINES CALLED. 
*        OMSG                ISSUE DAYFILE MESSAGE
*        RTIME               GET REAL TIME MACRO. 
*        WRITEO              WRITE WORD TO CIO BUFFER MACRO.
*        WRITEW              WRITE BLOCK TO CIO BUFFER MACRO. 
*        XTRACE              TRACE CALLER 
* 
*     8. DAYFILE MESSAGES.
*        " CIO ERROR NNB, LFN = ZZZZZDN." 
* 
*#
*ENDIF
*CALL MACDEF
*CALL CYBERDEFS 
*CALL INPARU
*CALL SYSTIME 
  
 TW1      IFEQ   ZZDN,1 
  
          ENTRY  TWRITE 
  
 TWRITE   SUBR   =           ENTRY/EXIT 
  
          SX6    A1          ADDRESS OF PARAMETER BLOCK 
          SA6    TEMP        SAVE ADDRESS OF PARAMETER BLOCK IN TEMP
  
          IFEQ   DEBUG,1,4
          SX1     XTWRITE 
          RJ     XTRACE 
          SA1    TEMP 
          SA1    X1 
  
          MX4    5           MASK FOR ABNORMAL TERMINATION FIELD IN FET 
          SA2    X1          X2 = FIRST WORD OF FET 
          LX4    9+5         SHIFT MASK TO POSITION OF ABNORMAL TERM FLD
          BX5    X4*X2       EXTRACT ABNORMAL TERMINATION FIELD FROM FET
          NZ     X5,TWRITEX  IF I/O ERROR HAS OCCURRED ON FILE
  
          RTIME  TIM1,R 
          SA1    TEMP        X1 = ADDRESS OF PARAMETER BLOCK
          SA1    X1          X1 = ADDRESS OF FET
          SA2    TIM1 
          BX6    X2 
          WRITEO X1          RECORD ELAPSED TIME
          SA1    TEMP        X1 = ADDRESS OF PARAMETER BLOCK
          SA1    X1          X1 = ADDRESS OF FET
          MX4    5           MASK FOR ABNORMAL TERMINATION FIELD IN FET 
          SA2    X1          X2 = FIRST WORD OF FET 
          LX4    9+5         SHIFT MASK TO POSITION OF ABNORMAL TERM FLD
          BX5    X4*X2       EXTRACT ABNORMAL TERMINATION FIELD FROM FET
          NZ     X5,TWRITE2  IF I/O ERROR HAS OCCURRED ON FILE
  
          SB1    1
          SA2    A1+B1
          SA3    A2+B1
          SA4    A3+B1
          SA2    X2          (X2)=MESSAGE ADDRESS 
          SA3    X3          (X3)=MESSAGE LENGTH
          WRITEW X1,X2,X3 
          SA1    TEMP        X1 = ADDRESS OF PARAMETER BLOCK
          SA1    X1          X1 = ADDRESS OF FET
          MX5    5           MASK FOR ABNORMAL TERMINATION FIELD IN FET 
          SA2    X1          X2 = FIRST WORD OF FET 
          LX5    9+5         SHIFT MASK TO ABNORMAL TERM FIELD POSITION 
          BX5    X5*X2       EXTRACT ABNORMAL TERMINATION CODE
          ZR     X5,TWRITEX  RETURN IF NO I/O ERROR 
  
 TWRITE2  MX0    3           MASK FOR ONE OCTAL DIGIT 
          AX5    9           RIGHT JUSTIFY ABNORMAL TERM CODE 
          LX0    3           RIGHT JUSTIFY OCTAL DIGIT MASK 
          SA2    ERRMSGC     X2 = WORD OF DAYFILE MSG TO CONTAIN CODE 
          BX4    X0*X5       EXTRACT LEAST SIGNIFICANT DIGIT
          AX5    3           EXTRACT MOST SIGNIFICANT DIGIT 
          SX4    X4+33B      CONVERT OCTAL DIGIT TO OCTAL DISPLAY 
          SX5    X5+33B      CONVERT OCTAL DIGIT TO OCTAL DISPLAY 
          LX5    6           SHIFT MOST SIG DIGIT TO 2ND DIGIT POS
          MX0    12D         MASK FOR ABNORMAL TERM FIELD IN DAY MSG
          BX5    X5+X4       ABNORMAL TERM CODE IN OCTAL DISPLAY CODE 
          LX0    42D+12D     SHIFT MASK TO ABNORMAL TERM FIELD POSITION 
          LX5    42D         SHIFT DISPLAY CODE NO TO DAY MSG POSITION
          BX0    -X0*X2      CLEAR ABNORMAL TERM CODE FIELD IN DAY MSG
          BX6    X0+X5       ADD ABNORMAL TERM CODE TO DAY MSG
          SA6    A2 
          SA1    LOCMSG      A1 = ADDRESS OF PARAMETER BLOCK
          RJ     OMSG        ISSUE DAYFILE MESSAGE
  
          EQ     TWRITEX
  
 TIM1     BSS    1
 TW1      ENDIF 
 XTWRITE  DATA    L*TWRIT*
 TEMP     BSS    1
  
 ERRMSG   DIS    ,* CIO ERROR NNB, LFN = ZZZZZDN.*
 ERRMSGC  EQU    ERRMSG+1    WORD TO CONTAIN ABNORMAL TERM CODE 
  
 LOCMSG   VFD    60D/ERRMSG  LOCATION OF DAYFILE MESSAGE
  
          END 
