COMSTIO 
COMMON
          CTEXT  COMSTIO - TEXT I/O MACROS. 
          BASE   M
*         COPYRIGHT CONTROL DATA SYSTEMS INC.  1992.
          SPACE  4
***       COMSTIO - TEXT I/O MACROS.
*         W. E. GOEBEL.      85/02/17.
 COMSTIO  SPACE  4,10 
***       COMSTIO - TEXT I/O MACROS.
* 
*         COMSTIO PROVIDES MACROS TO PERFORM TEXT I/O FROM
*         COMPASS PROGRAMS.  TEXT IS ADDED TO A FILE IN CHARACTER 
*         INCREMENTS, INSTEAD OF IN WORD INCREMENTS.  NUMERIC DATA
*         ITEMS ARE CONVERTED TO EITHER LEFT OR RIGHT JUSTIFIED 
*         CHARACTERS.  NOS END OF LINE CONVENTIONS ARE INSURED. 
* 
*         NOTE   FET+5 IS USED BY THESE MACROES.
* 
*         THE FOLLOWING MACROES ARE DEFINED - 
*         PRINTC APPENDS A SPECIFIED NUMBER OF CHARACTERS TO A LINE.
*         PRINTI CONVERTS A NUMBER TO DECIMALHARACTERS EITHER LEFT
*                OR RIGHT JUSTIFIED AND ADDS THE CHARACTERS TO THE
*                CURRENT LINE.
*         PRINTO CONVERTS A NUMBER TO OCTAL CHARACTERS EITHER LEFT
*                OR RIGHT JUSTIFIED AND ADDS THE CHARACTERS TO THE
*                CURRENT LINE.
*         PRINTL APPENDS CHARACTERS TO A LINE AND TERMINATES THE LINE.
*         RESET  PREPARES A FILE FOR READS OR WRITES. 
 PRINTC   SPACE  4,15 
**        PRINTC - WRITES CHARACTERS TO A TEXT FILE.
* 
*         THIS MACRO APPENDS A SPECIFIED NUMBER OF CHARACTERS TO
*         THE CURRENT LINE BEING WRITTEN TO A TEXT FILE.
* 
*         PRINTC FILE,CH,N
*         WHERE - 
*         FILE = THE FILE TO WRITE TO.
*         CH   = CHARACTERS TO APPEND.
*              = *, IF (A3), (X3) CONTAINS FIRST WORD OF CHARACTERS.
*                $NNNN, IF NNNN IS THE ADDRESS OF THE CHARACTERS TO 
*                APPEND.
*         N    = NUMBER OF CHARACTERS, 0 IMPLIES PRINT ALL CHARACTERS 
*                UNTIL Z LINE TERMINATOR FOUND. 
  
  
          PURGMAC  PRINTC 
 PRINTC   MACRO  FILE,CH,N
          R=     X2,FILE
 A        MICRO  1,1, CH
 .1       IFC    EQ,/"A"/$/ 
 A        MICRO  2,, CH 
          R=     A3,"A" 
          R=     B6,0_N 
 .1       ELSE
 .2       IFC    EQ,/CH/*/
          R=     B6,0_N 
 .2       ELSE
          SA3    =Z/CH/ 
 A        MICRO  1,,/CH/
 A        MICCNT A
          R=     B6,A 
 .2       ENDIF 
 .1       ENDIF 
          RJ     WRC=        WRITE CHARACTERS TO TEXT FILE
          ENDM
 PRINTI   SPACE  4,15 
**        PRINTI - WRITES AN INTEGER IN DECIMAL FORMAT TO A TEXT FILE.
* 
*         THIS MACRO CONVERTS A NUMBER TO DECIMAL CHARACTERS AND
*         APPENDS THE CHARACTERS TO THE CURRENT LINE BEING WRITTEN
*         TO A TEXT FILE. 
* 
*         PRINTI FILE,NUM,N 
*         WHERE - 
*         FILE = THE FILE TO WRITE TO.
*         NUM  = NUMBER TO CONVERT TO CHARACTERS AND APPEND.
*              = *, IF (X1) CONTAINS THE NUMBER TO CONVERT. 
*         N    = NUMBER OF CHARACTERS TO APPEND TO LINE.
  
  
          PURGMAC  PRINTI 
 PRINTI   MACRO  FILE,NUM,N 
          IFC    NE,/NUM/*/,1 
          R=     A1,NUM 
          RJ     CTI         CONVERT TO DECIMAL DISPLAY CODE WITH LEA 
          R=     X2,FILE
          IFC    NE,*N**
          SB4    B6-N+10
          SB3    B4+B4
          SB4    B3+B4
          SB4    B4+B4
          LX3    B4 
          R=     B6,N 
          ENDIF 
          RJ     WRC=        WRITE CHARACTERS TO TEXT FILE
          ENDM
 PRINTL   SPACE  4,15 
**        PRINTL - WRITE LINE TO A TEXT FILE. 
* 
*         PRINTL ADDS LINES TO A TEXT FILE. 
* 
*         PRINTL FILE,CH,N
*         WHERE - 
*         FILE = THE FILE TO WRITE TO.
*         CH   = CHARACTERS TO APPEND.
*              = *, IF (A3), (X3) CONTAINS FIRST WORD OF CHARACTERS.
*                $NNNN, IF NNNN IS THE ADDRESS OF THE CHARACTERS TO 
*                APPEND.
*                IF CH IS NOT PRESENT THEN THE CURRENT LINE IS WRITTEN
*                AND THE NEXT LINE INITIALIZED TO NULL. 
*         N    = NUMBER OF CHARACTERS, 0 IMPLIES PRINT ALL CHARACTERS 
*                UNTIL Z LINE TERMINATOR FOUND. 
  
  
 PRINTL   MACRO  FILE,CH,N
          R=     X2,FILE
          IFC    NE,/CH//,1 
          PRINTC X2,(CH),N
          RJ     WRL=        WRITE LINE 
          ENDM
 PRINTO   SPACE  4,15 
**        PRINTO - WRITES AN INTEGER IN OCTAL FORMAT TO A TEXT FILE.
* 
*         THIS MACRO CONVERTS A NUMBER TO OCTAL CHARACTERS
*         AND APPENDS A SPECIFIED NUMBER OF CHARACTERS TO 
*         THE CURRENT LINE BEING WRITTEN TO A TEXT FILE.
* 
*         PRINTO FILE,NUM,N 
*         WHERE - 
*         FILE = THE FILE TO WRITE TO.
*         NUM  = NUMBER TO CONVERT TO CHARACTERS AND APPEND.
*              = *, IF (X1) CONTAINS THE NUMBER TO CONVERT. 
*         N    = NUMBER OF CHARACTERS TO APPEND TO LINE.
  
  
          PURGMAC  PRINTO 
 PRINTO   MACRO  FILE,NUM,N 
          IFC    NE,/NUM/*/,1 
          R=     A1,NUM 
          RJ     CTO         CONVERT TO OCTAL DISPLAY CODE WITH LEADI 
          R=     X2,FILE
          IFC    NE,*N**
          SB4    B6-N+10
          SB3    B4+B4
          SB4    B3+B4
          SB4    B4+B4
          LX3    B4 
          R=     B6,N 
          ENDIF 
          RJ     WRC=        WRITE CHARACTERS TO TEXT FILE
          ENDM
 RESET    SPACE  4,10 
**        RESET - RESET TEXT FILE FOR TEXTIO MACROS.
* 
*         RESET  FILE,OP
*         FILE = FILE TO RESET. 
*         OP   = OPERATION TO RESET FOR (READ OR WRITE).
  
  
 RESET    MACRO  FILE,OP
          SX2    FILE 
          SA1    X2+B1
          SX6    X1 
          IFC    EQ,*OP*WRITE*,1
          SA6    A1+B1       IN 
          IFC    EQ,*OP*READ*,1 
          SA6    X2+3        OUT
          SX6    B0          SET LINE POINTERS IN FET 
          PX6    X6 
          SA6    X2+5 
          ENDM
          SPACE  4
          BASE   *
          ENDX
