                                XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 1
                                                                19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    0	      1 MODULE XPUT (	IDENT = 'X1.2-19'		%TITLE 'XPO$PUT - XPORT File Output'
    0	      2 		%BLISS32( ,ADDRESSING_MODE( EXTERNAL=LONG_RELATIVE ) )
    0	      3 		%BLISS36( ,ENTRY( XPO$PUT ),OTS='' )
    0	      4 		) =
    0	      5 BEGIN
    1	      6 
    1	      7 !
    1	      8 !			  COPYRIGHT (c) 1982 BY
    1	      9 !	      DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
    1	     10 !
    1	     11 ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
    1	     12 ! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
    1	     13 ! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
    1	     14 ! COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
    1	     15 ! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
    1	     16 ! TRANSFERRED.
    1	     17 !
    1	     18 ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
    1	     19 ! AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
    1	     20 ! CORPORATION.
    1	     21 !
    1	     22 ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
    1	     23 ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
    1	     24 !
    1	     25 
    1	     26 !++
    1	     27 !
    1	     28 ! FACILITY:  BLISS Library
    1	     29 !
    1	     30 ! ABSTRACT:
    1	     31 !
    1	     32 !	This module is the XPORT file output module.
    1	     33 !
    1	     34 ! ENVIRONMENT:  User mode - multiple host operating/file systems
    1	     35 !
    1	     36 ! AUTHORS:  Ward Clark,			CREATION DATE:  26 June 1978
    1	     37 !	    Linda Duffell
    1	     38 !
    1	     39 ! MODIFIED BY: Edward G. Freedman	See CMS history for details
    1	     40 !
    1	     41 !--

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 2
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    1	     43 !
    1	     44 ! TABLE OF CONTENTS:
    1	     45 !
    1	     46 
    1	     47 FORWARD ROUTINE
    1	     48     XPO$PUT;						! XPORT File Output Routine
    1	     49 
    1	     50 !
    1	     51 ! INCLUDE FILES:
    1	     52 !
    1	     53 
    1	     54 LIBRARY  'XPORT' ;					! Public XPORT control block and macro definitions
    1	     56 LIBRARY  'XPOSYS' ;					! Internal XPORT macro definitions
    1	     58 
    1	     59     $XPO_SYS_TEST( $TOPS10, $TOPS20, $VMS, $11M, $RSTS, $RT11 )
		; %PRINT:		This module was compiled for VAX/VMS
		; %PRINT:		XPORT V1.3-51    XPOSYS V1.3-16    XPO$K_VERSION = 1    XPO$K_LEVEL = 3
    1	     60 
    1	     61 %IF $TOPS10 %THEN
U   1	     62 REQUIRE  'XT10' ;					! TOPS-10 I/O interface macros
U   1	     63 %FI
    1	     64 
    1	     65 %IF $TOPS20 %THEN
U   1	     66 REQUIRE  'XT20' ;					! TOPS-20 I/O interface macros
U   1	     67 %FI
    1	     68 
    1	     69 %IF $VMS %THEN
    1	     70 REQUIRE  'XVMS' ;					! XPORT-specific VAX/VMS interface definitions
    1	    100 %FI
    1	    101 
    1	    102 %IF $11M %THEN
U   1	    103 REQUIRE  'XRSX' ;					! XPORT-specific RSX-11 and FCS-11 interface definitions
U   1	    104 %FI
    1	    105 
    1	    106 %IF $RSTS %THEN
U   1	    107 REQUIRE  'XRSTS' ;					! RSTS system interface definitions
U   1	    108 %FI
    1	    109 
    1	    110 %IF $RT11 %THEN
U   1	    111 REQUIRE  'XRT11' ;					! RT-11 system interface definitions
U   1	    112 %FI
    1	    113 
    1	    114 !
    1	    115 ! MACROS:
    1	    116 !
    1	    117 
    1	    118 %IF $TOPS10 %THEN
U   1	    119 MACRO
U   1	    120     put_file( value ) =
U   1	    121 	BEGIN
U   1	    122 	CH$WCHAR_A( value, buffer_cb[$BFPTR] );		! Place one character/value in the output buffer.
U   1	    123 	buffer_cb[$BFCTR] = .buffer_cb[$BFCTR] - 1;	! Decrement the output buffer count.
U   1	    124 	IF .buffer_cb[$BFCTR] LEQ 0			! If the output buffer is full,
U   1	    125 	THEN						!
U   1	    126 	    IF NOT $T10_OUT( .iob[IOB$H_CHANNEL] )	! output the buffer and get another.
U   1	    127 	    THEN
U   1	    128 		$XPO_QUIT( IO_ERROR );			! Return an error code if the output fails.

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 3
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   1	    129 	END % ;
U   1	    130 %FI
    1	    131 
    1	    132 %IF $TOPS20 %THEN
U   1	    133 MACRO
U   1	    134     put_file( value ) =
U   1	    135 	BEGIN
U   1	    136 	CH$WCHAR_A( value, buffer_cb[$BFPTR] );		! Place one character/value in the output buffer.
U   1	    137 	buffer_cb[$BFCTR] = .buffer_cb[$BFCTR] - 1;	! Decrement the output buffer count.
U   1	    138 	IF .buffer_cb[$BFCTR] LEQ 0			! If the output buffer is full,
U   1	    139 	THEN						!
U   1	    140 	    IF NOT X20$OUT( .iob )			! output the buffer and get another.
U   1	    141 	    THEN
U   1	    142 		$XPO_QUIT();				! Return an error completion code if the output fails.
U   1	    143 	END %;
U   1	    144 %FI
    1	    145 
    1	    146 %IF $RSTS %THEN
U   1	    147 MACRO
U   1	    148     put_file( value ) =
U   1	    149 	BEGIN
U   1	    150 	CH$WCHAR_A( value, buffer_cb[XRSTS$A_BFPTR] );	! Place one character/value in the output buffer.
U   1	    151 	buffer_cb[XRSTS$G_BFCTR] = 			! Decrement the output buffer count.
U   1	    152     			.buffer_cb[XRSTS$G_BFCTR] - 1;
U   1	    153 	IF .buffer_cb[XRSTS$G_BFCTR] LEQ 0		! If the output buffer is full,
U   1	    154 	THEN						!
U   1	    155 	    IF NOT XRST$OUT( .iob )			! output the buffer and get another.
U   1	    156 	    THEN
U   1	    157 		$XPO_QUIT();				! Return an error completion code if the output fails.
U   1	    158 	END %;
U   1	    159 %FI
    1	    160 
    1	    161 %IF $RT11 %THEN
U   1	    162 MACRO
U   1	    163     put_file( value ) =
U   1	    164 	BEGIN
U   1	    165 	CH$WCHAR_A( value, buffer_cb[$BFPTR] );		! Place one character in the output buffer. 
U   1	    166 	buffer_cb[$BFCTR] = .buffer_cb[$BFCTR] - 1;	! Decrement the output buffer count.
U   1	    167 	IF .buffer_cb[$BFCTR] LEQ 0			! If the output buffer is full,
U   1	    168 	THEN						!
U   1	    169 	    IF NOT XRT$OUT( .iob )			! output the buffer and get another.
U   1	    170 	    THEN
U   1	    171 		$XPO_QUIT();				! Return an error completion code if the output fails.
U   1	    172 	END %;
U   1	    173 %FI
    1	    174 
    1	    175 !
    1	    176 ! EQUATED SYMBOLS:
    1	    177 !
    1	    178 
    1	    179 LITERAL
    1	    180     term_buff_len = 132 + 3;				! Length of the local terminal output buffer
    1	    181 
    1	    182 !
    1	    183 ! PSECT DECLARATIONS:
    1	    184 !
    1	    185 

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 4
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    1	    186     $XPO_PSECTS						! Declare XPORT PSECT names and attributes
    1	    187 
    1	    188 !
    1	    189 ! OWN STORAGE:
    1	    190 !
    1	    191 
    1	    192 !
    1	    193 ! EXTERNAL REFERENCES:
    1	    194 !
    1	    195 
    1	    196 %IF $TOPS20 %THEN
U   1	    197 EXTERNAL ROUTINE
U   1	    198     X20$OUT,						! File output routine.
U   1	    199     X20$ERROR :  NOVALUE;				! TOPS-20 to XPORT completion code conversion routine
U   1	    200 %FI
    1	    201 
    1	    202 %IF $VMS %THEN
    1	    203 EXTERNAL ROUTINE
    1	    204     XPO$RMS_ERROR :  NOVALUE,				! RMS-to-XPORT completion code conversion routine
    1	    205     LIB$GET_EF : ADDRESSING_MODE(GENERAL),		! Event flag allocation
    1	    206     LIB$FREE_EF : ADDRESSING_MODE(GENERAL);		! Event flag deallocation
    1	    207 %FI
    1	    208 
    1	    209 %IF $11M %THEN
U   1	    210 EXTERNAL
U   1	    211     XRSX$EVENT_FLAG;					! XPORT QIO/FCS event flag number
U   1	    212 
U   1	    213 EXTERNAL ROUTINE
U   1	    214     XRSX$IO_ERROR :  NOVALUE;				! RSX-to-XPORT completion code conversion routine
U   1	    215 %FI
    1	    216 
    1	    217 %IF $RSTS %THEN
U   1	    218 EXTERNAL ROUTINE
U   1	    219     XRST$OUT,						! File output routine
U   1	    220     XRST$ERROR :  NOVALUE;				! RSTS-to_XPORT completion code conversion routine
U   1	    221 %FI
    1	    222 
    1	    223 %IF $RT11 %THEN
U   1	    224 EXTERNAL ROUTINE
U   1	    225     XRT$OUT;						! File output routine
U   1	    226 %FI

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 5
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    1	    228 GLOBAL ROUTINE XPO$PUT ( iob, success_action, failure_action ) =
    1	    229 
    1	    230 !++
    1	    231 !
    1	    232 ! FUNCTIONAL DESCRIPTION:
    1	    233 !
    1	    234 !	This routine outputs a single record into the file described
    1	    235 !	by the caller's IOB.
    1	    236 !
    1	    237 ! FORMAL PARAMETERS:
    1	    238 !
    1	    239 !	iob - address of IOB
    1	    240 !	success_action - address of success action routine
    1	    241 !	failure_action - address of failure action routine
    1	    242 !
    1	    243 ! IMPLICIT INPUTS:
    1	    244 !
    1	    245 !	Information contained in or pointed to by the caller's IOB
    1	    246 !
    1	    247 ! IMPLICIT OUTPUTS:
    1	    248 !
    1	    249 !	Various fields in the caller's IOB are updated to reflect
    1	    250 !	the results of the requested I/O function
    1	    251 !
    1	    252 ! COMPLETION CODES:  (also returned in IOB$G_COMP_CODE)
    1	    253 !
    1	    254 !	XPO$_NORMAL - the output operation was successful
    1	    255 !
    1	    256 !	XPO$_BAD_IOB - invalid IOB
    1	    257 !		(IOB$G_2ND_CODE = XPO$_BAD_LENGTH - invalid IOB length)
    1	    258 !	XPO$_BAD_REQ - invalid output request
    1	    259 !		(IOB$G_2ND_CODE = XPO$_BAD_ADDR - invalid memory address
    1	    260 !				or completion code from $STR_VALIDATE)
    1	    261 !	XPO$_FREE_MEM - I/O buffer deallocation error
    1	    262 !		(IOB$G_2ND_CODE = $XPO_FREE_MEM completion code)
    1	    263 !	XPO$_GET_MEM - I/O buffer allocation error (TOPS-10)
    1	    264 !		(IOB$G_2ND_CODE = $XPO_GET_MEM completion code)
    1	    265 !	XPO$_IO_ERROR - I/O error writing file
    1	    266 !	XPO$_NOT_OUTPUT - file is not open for output
    1	    267 !	XPO$_NOT_OPEN - the file is not opened
    1	    268 !	XPO$_TRUNCATED - the output record was truncated
    1	    269 !	XPO$_SYS_ERROR - unexpected operating system error (VMS)
    1	    270 !		( IOB$G_2ND_CODE = completion code from LIB$GET_EF or LIB$FREE_EF)
    1	    271 !	failure completion code from $XPO_GET_MEM (TOPS-10,TOPS-20,RSTS,RT-11)
    1	    272 !	failure completion codes from X20$OUT (TOPS-20)
    1	    273 !	failure completion codes from X20$ERROR (TOPS-20)
    1	    274 !	failure completion codes from XPO$RMS_ERROR (VMS)
    1	    275 !	failure completion codes from XRSX$IO_ERROR (11M)
    1	    276 !	failure completion codes from XRST$ERROR (RSTS)
    1	    277 !	failure completion codes from XRT$OUT (RT-11)
    1	    278 !
    1	    279 ! SIDE EFFECTS:
    1	    280 !
    1	    281 !	None
    1	    282 !
    1	    283 !--
    1	    284 

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 6
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    1	    285     BEGIN
    2	    286 
    2	    287     MAP
    2	    288 	iob :  REF $XPO_IOB();				! Redefine the IOB parameter
    2	    289 
    2	    290     BIND
    2	    291 	output = .iob[IOB$A_OUTPUT] : $STR_DESCRIPTOR();! Redefine the output data descriptor
    2	    292 
    2	    293     LOCAL
    2	    294 	output_length,					! length of output data
    2	    295 	pad_length,					! number of pad characters
    2	    296 	max_output_len;					! total output data length
    2	    297 
    2	    298 !
    2	    299 ! XPORT routine initialization.
    2	    300 !
    2	    301 
    2	    302     $XPO_MAIN_BEGIN( IO )				! Define the MAIN_BLOCK code block
    3	    303 							! and validate the caller's IOB.
    3	    304 
    3	    305 !
    3	    306 ! Validate the caller's IOB.
    3	    307 !
    3	    308 
    3	    309     IF NOT .iob[IOB$V_OPEN]				! If the file is not open,
    3	    310     THEN						!
    3	    311 	$XPO_QUIT( NOT_OPEN );				! return an error code to the caller.
    3	    312 
    3	    313     IF NOT .iob[IOB$V_OUTPUT]				! If the file is not open for output,
    3	    314     THEN						!
    3	    315 	$XPO_QUIT( NOT_OUTPUT );			! return an error code to the caller.
    3	    316 
    3	    317     IF .iob[IOB$V_RECORD] OR .iob[IOB$V_STREAM]
    3	    318     THEN
    3	    319 	$STR_VALIDATE( .iob[IOB$A_OUTPUT],		! Validate an output string descriptor
P   3	    320 			(XPO$_BAD_REQ) )
    4	    321     ELSE
    3	    322 	IF output EQL 0					! Validate an output data descriptor
    3	    323 	THEN
    3	    324 	    $XPO_QUIT( BAD_REQ );
    3	    325 	    
    3	    326 
    3	    327 !
    3	    328 ! Setup for fixed length records.
    3	    329 !
    3	    330 
    3	    331     IF .iob[IOB$V_RECORD] AND				! If this is a fixed-length record file,
    3	    332 	.iob[IOB$G_REC_SIZE] GTR 0			!
    3	    333     THEN						!
    3	    334 	IF .output[STR$H_LENGTH] LEQ			! setup normal record and pad lengths
    3	    335 				.iob[IOB$G_REC_SIZE]	!
    3	    336 	THEN						!
    3	    337 	    BEGIN					!
    4	    338 	    output_length = .output[STR$H_LENGTH];	!
    4	    339 	    pad_length = .iob[IOB$G_REC_SIZE] -		!
    4	    340 				.output[STR$H_LENGTH];	!
    4	    341 	    END						!

XPUT                            XPO$PUT - XPORT File Output      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 7
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    4	    342 	ELSE						! or setup truncated record and pad lengths.
    3	    343 	    BEGIN
    4	    344 	    output_length = .iob[IOB$G_REC_SIZE];
    4	    345 	    pad_length = 0;
    4	    346 	    END
    4	    347     ELSE						! If no output record length exists,
    3	    348 	BEGIN						!
    4	    349 	output_length = .output[STR$H_LENGTH];		! setup the actual record length
    4	    350 	pad_length = 0;					! and indicate no padding is needed.
    4	    351 	END;
    3	    352 
    3	    353     max_output_len = .output_length + .pad_length;	! Calculate the total output length.
    3	    354 
    3	    355 !+
    3	    356 !
    3	    357 !	System-specific file output processing follows.
    3	    358 !
    3	    359 !-

XPUT                            TOPS-10/TOPS-20/RT-11 Terminal   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 8
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	    361 %TITLE 'TOPS-10/TOPS-20/RT-11 Terminal PUT'
    3	    362 %IF $TOPS10 OR $TOPS20 OR $RT11 %THEN
U   3	    363 
U   3	    364 !+
U   3	    365 !
U   3	    366 !	TOPS-10/TOPS-20/RT-11 PUT Processing
U   3	    367 !
U   3	    368 !-
U   3	    369 
U   3	    370     BEGIN
U   3	    371 
U   3	    372     BIND
U   3	    373 	buffer_cb = .iob[IOB$A_BUFFER_CB] : VECTOR;	! TOPS-10/TOPS-20 buffer control block
U   3	    374 
U   3	    375     LOCAL
U   3	    376 	data_pointer;					! local pointer to output data
U   3	    377 
U   3	    378 !+
U   3	    379 !
U   3	    380 !	TOPS-10/TOPS-20 Terminal Output Processing
U   3	    381 !
U   3	    382 !-
U   3	    383 
U   3	    384     IF .iob[IOB$V_TERMINAL]				! If the output file is a terminal,
U   3	    385     THEN						! perform special output processing.
U   3	    386 	BEGIN
U   3	    387 	LOCAL
U   3	    388 	    user_buff_ptr,				! pointer into user's output buffer
U   3	    389 	    local_term_buff :				! local terminal output buffer
U   3	    390 		VECTOR[ CH$ALLOCATION(term_buff_len) ],
U   3	    391 	    term_buff_ptr;				! pointer to actual output buffer
U   3	    392 
U   3	    393 !
U   3	    394 ! Output the string in one operation.
U   3	    395 !
U   3	    396 
U   3	    397 	IF .max_output_len LEQ term_buff_len - 3	! If the local terminal buffer is
U   3	    398 							! large enough for the output string,
U   3	    399 	THEN						!
U   3	    400 	    term_buff_ptr = CH$PTR( local_term_buff )	! setup to use the local buffer.
U   3	    401 	ELSE
U   3	    402 	    $XPO_IF_NOT( $XPO_GET_MEM(			! Otherwise, allocate a dynamic output buffer.
U   3	    403 				CHARACTERS = .max_output_len + 3,
U   3	    404 				RESULT = term_buff_ptr,
U   3	    405 				FAILURE = 0 ) )
U   3	    406 	    THEN
U   3	    407 		$XPO_QUIT( GET_MEM, (.$XPO_STATUS) );
U   3	    408 
U   3	    409 	user_buff_ptr = .output[STR$A_POINTER];		! Setup "from" and "to" buffer pointers.
U   3	    410 	data_pointer = .term_buff_ptr;
U   3	    411 
U   3	    412 	INCR index FROM 1 TO .output_length DO		! Move the output string into a local buffer.
U   3	    413 	    BEGIN
U   3	    414 	    LOCAL character;
U   3	    415 	    character = CH$RCHAR_A( user_buff_ptr );
U   3	    416 	    IF .character EQL null
U   3	    417 	    THEN

XPUT                            TOPS-10/TOPS-20/RT-11 Terminal   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 9
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	    418 		CH$WCHAR_A( del, data_pointer )		! Change NULLs to DELETEs.
U   3	    419 	    ELSE
U   3	    420 		CH$WCHAR_A( .character, data_pointer );
U   3	    421 	    END;
U   3	    422 
U   3	    423 	data_pointer = CH$FILL( space, .pad_length,	! Pad the record with spaces if necessary.
U   3	    424 				.data_pointer );
U   3	    425 
U   3	    426 %IF NOT $RT11 %THEN
U   3	    427 	IF .iob[IOB$V_RECORD]				! If this is record-mode output,
U   3	    428 	THEN						!
U   3	    429 	    CH$MOVE( 3, CH$PTR( UPLIT( %STRING(		! add the following characters to the string:
U   3	    430 			    %CHAR( cr ),		!    carriage return
U   3	    431 			    %CHAR( lf ),		!    line feed
U   3	    432 			    %CHAR( null ) ) ) ),	!    null
U   3	    433 			.data_pointer )			!
U   3	    434 	ELSE
U   3	    435 	    CH$WCHAR( null, .data_pointer );		! Otherwise, just add a null to the string.
U   3	    436 %FI
U   3	    437 
U   3	    438 %IF $TOPS10 %THEN
U   3	    439 	$T10_OUTSTR( $XPO_ADDRESS(.term_buff_ptr) );	! Send the string to the user's terminal.
U   3	    440 %FI
U   3	    441 
U   3	    442 %IF $TOPS20 %THEN
U   3	    443 	IF NOT $T20_PSOUT( .term_buff_ptr )		! Send the string to the user's terminal.
U   3	    444 	THEN
U   3	    445 	    BEGIN
U   3	    446 	    LOCAL error;				! Storage area for error code.
U   3	    447 	    $T20_GETER( $FHSLF, error );		! Get the TOPS-20 error code
U   3	    448 	    X20$ERROR( .iob, .error );			! and convert it to the equivalent XPORT completion code,
U   3	    449 	    $XPO_QUIT();				! and return to the caller.
U   3	    450 	    END;
U   3	    451 %FI
U   3	    452 
U   3	    453 %IF $RT11 %THEN
U   3	    454 	IF .iob[IOB$V_RECORD]				! If this is record-mode output,
U   3	    455 	THEN						!
U   3	    456 	    CH$WCHAR( null, .data_pointer )		! append a null to the string to automatically get a crlf.
U   3	    457 	ELSE						!
U   3	    458 	    CH$WCHAR( %O'200', .data_pointer );		! Otherwise, indicate that we don't want a crlf.
U   3	    459 
U   3	    460 	$PRINT( .term_buff_ptr );			! Send the string to the user's terminal.
U   3	    461 %FI
U   3	    462 
U   3	    463 	IF .term_buff_ptr NEQ CH$PTR(local_term_buff)	! If a dynamic output buffer was allocated,
U   3	    464 	THEN						!
U   3	    465 	    $XPO_FREE_QUIT(				! free the buffer memory.
U   3	    466 		    STRING = (.max_output_len+3,
U   3	    467 				.term_buff_ptr) );
U   3	    468 
U   3	    469 !
U   3	    470 ! Check for truncated output.
U   3	    471 !
U   3	    472 
U   3	    473 	IF .output[STR$H_LENGTH] GTR .output_length	! If the output record was truncated,
U   3	    474 	THEN						!

XPUT                            TOPS-10/TOPS-20/RT-11 Terminal   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 10
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	    475 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
U   3	    476 
U   3	    477 !
U   3	    478 ! Return to the caller after terminal output.
U   3	    479 !
U   3	    480 
U   3	    481 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	    482 
U   3	    483 	END;
U   3	    484 %FI

XPUT                            TOPS-10/TOPS-20/RT-11 File PUT   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 11
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	    486 %TITLE 'TOPS-10/TOPS-20/RT-11 File PUT'
    3	    487 %IF $TOPS10 OR $TOPS20 OR $RT11 %THEN
U   3	    488 
U   3	    489 !+
U   3	    490 !
U   3	    491 !	TOPS-10/TOPS-20/RT-11 File Output Processing
U   3	    492 !
U   3	    493 !-
U   3	    494 !+
U   3	    495 !   Random access i/o has been implemented and tested for VMS.  Though some code is in place to
U   3	    496 !   support random access i/o for TOPS-20 as well, it is NOT COMPLETE and is known to not be
U   3	    497 !   reliable.  Therefor, a conditional check for use of the random attribute is in XPORT.REQ and
U   3	    498 !   XOPEN.BLI.  When the TOPS20 code is completed and tested, this conditional can be changed to 
U   3	    499 !   	" %IF NOT $VMS OR NOT $TOPS20 %THEN "  for XOPEN.BLI
U   3	    500 !   	" %IF NOT %BLISS(BLISS32) OR NOT %BLISS(BLISS36) %THEN "  for XPORT.REQ
U   3	    501 !   
U   3	    502 !   See also:
U   3	    503 !   		XPORT.REQ  -  $XPO_OPEN definition, random disallowed.
U   3	    504 !   		XOPEN.BLI  -  $IOB initialization, random disallowed.
U   3	    505 !   		XGET.BLI  -  comments in 'TOPS-10/TOPS-20 Stream-mode and Binary-mode GET'
U   3	    506 !   		XPUT.BLI  -  comments in 'TOPS-10/TOPS-20/RT-11 File PUT'
U   3	    507 !-
U   3	    508 
U   3	    509 !
U   3	    510 ! Output sequenced-file information if necessary.
U   3	    511 !
U   3	    512 
U   3	    513 %IF NOT $RT11 %THEN
U   3	    514     IF .iob[IOB$V_SEQUENCED]				! If this is a sequenced output file,
U   3	    515     THEN						! output form feeds and/or a line number.
U   3	    516 	BEGIN
U   3	    517 	LOCAL
U   3	    518 	    seq_number :  VECTOR[5],			! sequence number character vector
U   3	    519 	    temp;					! temporary value
U   3	    520 
U   3	    521 	WHILE (.BLOCK[buffer_cb[$BFPTR],0,30,6,0]	! Output nulls to the file until a buffer
U   3	    522 	    GTR 1 OR .buffer_cb[$BFCTR] LSS 10) DO	! word boundary is reached and at least
U   3	    523 		put_file( null );			! 2 unused words remain in the buffer.
U   3	    524 
U   3	    525 	IF .iob[IOB$G_SEQ_NUMB] EQL 0 AND		! Test for an implicit page mark.
U   3	    526 	    .output_length EQL 0 AND
U   3	    527 	    CH$RCHAR( .output[STR$A_POINTER] ) EQL ff
U   3	    528 	THEN
U   3	    529 	    BEGIN
U   3	    530 	    INCR count FROM 1 TO 5 DO			! Output a word of spaces (5)
U   3	    531 		put_file( space );			!
U   3	    532 	    .buffer_cb[$BFPTR] = ..buffer_cb[$BFPTR]+1;	! and turn on bit 35 of this word.
U   3	    533 
U   3	    534 							! Output the second word of a page mark:
U   3	    535 	    put_file( cr );				!    a single carriage return
U   3	    536 	    put_file( ff );				!    a single form feed
U   3	    537 	    INCR count FROM 1 TO 3 DO			!
U   3	    538 		put_file( null );			!    3 nulls
U   3	    539 
U   3	    540 	    $XPO_QUIT( NORMAL );			! Return to the caller.
U   3	    541 	    END;
U   3	    542 

XPUT                            TOPS-10/TOPS-20/RT-11 File PUT   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 12
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	    543 	WHILE .buffer_cb[$BFCTR] LSS 10 DO		! If the current buffer does not have 2 words left,
U   3	    544 	    put_file( null );				! fill it with nulls.
U   3	    545 
U   3	    546 	temp = .iob[IOB$G_SEQ_NUMB];			! Pickup the current sequence number
U   3	    547 	INCR count FROM 0 TO 4 DO			! and convert it to a vector of characters.
U   3	    548 	    BEGIN
U   3	    549 	    seq_number[ 4 - .count ] =			! Convert 1 decimal digit to character.
U   3	    550 		.temp MOD 10 + %C'0';
U   3	    551 	    temp = .temp / 10;				! Remove that digit from the number.
U   3	    552 	    END;
U   3	    553 
U   3	    554 	INCR count FROM 0 TO 4 DO			! Output a sequence number word
U   3	    555 	    put_file( .seq_number[.count] );		!
U   3	    556 	.buffer_cb[$BFPTR] = ..buffer_cb[$BFPTR]+1;	! and turn on bit 35 of this word.
U   3	    557 
U   3	    558 	put_file( ht );					! Output a tab to follow the sequence number.
U   3	    559 	END;
U   3	    560 
U   3	    561 !
U   3	    562 ! Setup a character string pointer or binary data pointer.
U   3	    563 !
U   3	    564 
U   3	    565     IF .iob[IOB$V_RECORD] OR .iob[IOB$V_STREAM]		! If this is a character file,
U   3	    566     THEN						!
U   3	    567 	data_pointer = .output[STR$A_POINTER]		! pickup the pointer to the output string.
U   3	    568     ELSE
U   3	    569 	data_pointer =					! Otherwise, construct a binary data pointer.
U   3	    570 	    CH$PTR( .output[STR$A_POINTER], 0, %BPVAL );
U   3	    571 %FI
U   3	    572 
U   3	    573 %IF $RT11 %THEN
U   3	    574     data_pointer = .output[STR$A_POINTER];		! Always an 8-bit pointer for RT-11.
U   3	    575 %FI
U   3	    576 
U   3	    577 !
U   3	    578 ! Position the file for random I/O
U   3	    579 !
U   3	    580 
U   3	    581 %IF $TOPS20 %THEN
U   3	    582 
U   3	    583     IF .iob[IOB$V_RANDOM]
U   3	    584     THEN
U   3	    585         BEGIN
U   3	    586         LOCAL
U   3	    587             file_pos ;
U   3	    588     
U   3	    589 !        IF .iob[IOB$G_REC_NUMB] EQL 0
U   3	    590 !        THEN
U   3	    591 !           BEGIN
U   3	    592 !           file_pos = .iob[IOB$G_PREV_REC] ;     ! Perform sequential I/O because no new record number was given
U   3	    593 !           iob[IOB$G_PREV_REC] = .iob[IOB$G_PREV_REC ] + .iob[IOB$H_FULLWORDS] ;
U   3	    594 !           END
U   3	    595 !        ELSE
U   3	    596 !            BEGIN
U   3	    597 !            file_pos = .iob[IOB$G_REC_NUMB] ;   ! Go to the indicated record
U   3	    598 !            iob[IOB$G_PREV_REC] = .iob[IOB$G_REC_NUMB ] +
U   3	    599 !                .iob[IOB$H_FULLWORDS] ;

XPUT                            TOPS-10/TOPS-20/RT-11 File PUT   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 13
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	    600 !            END ;
U   3	    601     
U   3	    602 	file_pos = .iob[IOB$G_NEXT_POS];
U   3	    603 
U   3	    604 	$T20_SFPTR ( .iob[IOB$H_CHANNEL], .file_pos ) ; ! And position file
U   3	    605 
U   3	    606 
U   3	    607 !
U   3	    608 ! If the last operation was a GET, then the buffer pointer and address must
U   3	    609 ! be reset.
U   3	    610 !
U   3	    611 
U   3	    612         IF .iob[$IOB$FILLER2] EQL 1
U   3	    613         THEN
U   3	    614             BEGIN
U   3	    615             buffer_cb[$BFPTR] =				! make the pointer a fullword pointer
U   3	    616                  CH$PTR( .buffer_cb[$BFADR], 0, %BPVAL );	!
U   3	    617             buffer_cb[$BFCTR] = X20$K_BUFFER_SZ;		! and set the counter in terms of words.
U   3	    618             END ;                       ! of IF .iob[IOB$FILLER2]
U   3	    619 
U   3	    620         iob[$IOB$FILLER2] = 2 ;        ! Indicate the the last operation was a PUT
U   3	    621     
U   3	    622         END ;
U   3	    623 
U   3	    624 %FI
U   3	    625 
U   3	    626 !
U   3	    627 ! Output the requested number of characters/units.
U   3	    628 !
U   3	    629 
U   3	    630     INCR count FROM 1 TO .output_length DO		! Output one character/value at a time.
U   3	    631 	put_file( CH$RCHAR_A( data_pointer ) );
U   3	    632 
U   3	    633     INCR count FROM 1 TO .pad_length DO			! Add any necessary padding characters.
U   3	    634 	put_file( space );
U   3	    635 
U   3	    636 !
U   3	    637 ! For RANDOM I/O files, we must "flush" the output buffer after each WRITE
U   3	    638 ! 
U   3	    639 
U   3	    640 %IF $TOPS20 %THEN
U   3	    641 
U   3	    642     IF .iob[IOB$V_RANDOM]
U   3	    643     THEN
U   3	    644 	BEGIN
U   3	    645 	X20$OUT ( .iob ) ;
U   3	    646 	iob[IOB$G_CURR_POS] = .iob[IOB$G_NEXT_POS];
U   3	    647 	iob[IOB$G_NEXT_POS] = .iob[IOB$G_NEXT_POS] + .iob[IOB$H_UNITS];
U   3	    648 	END;
U   3	    649 %FI
U   3	    650 
U   3	    651 !
U   3	    652 ! Add a carriage return and line feed to the end of an output record.
U   3	    653 !
U   3	    654 
U   3	    655     IF .iob[IOB$V_RECORD]				! If this a character record file,
U   3	    656     THEN						!

XPUT                            TOPS-10/TOPS-20/RT-11 File PUT   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 14
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	    657 	BEGIN						!
U   3	    658 	put_file( cr );					! add a carriage return and
U   3	    659 	put_file( lf );					! a line feed to the end of the record.
U   3	    660 	END;
U   3	    661 
U   3	    662 !
U   3	    663 ! Check for truncated output.
U   3	    664 !
U   3	    665 
U   3	    666     IF .output[STR$H_LENGTH] GTR .output_length		! If the output record was truncated,
U   3	    667     THEN						!
U   3	    668 	$XPO_QUIT( TRUNCATED );				! return an error code to the caller.
U   3	    669 
U   3	    670 !
U   3	    671 ! Return to the caller after file output.
U   3	    672 !
U   3	    673 
U   3	    674     $XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	    675 
U   3	    676     END;						! End of TOPS-10-specific processing
U   3	    677 
U   3	    678 !+
U   3	    679 !
U   3	    680 !	End of TOPS-10/TOPS-20/RT-11 PUT Processing
U   3	    681 !
U   3	    682 !-
U   3	    683 
U   3	    684 %FI

XPUT                            VAX/VMS Terminal Output          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 15
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	    686 %TITLE 'VAX/VMS Terminal Output'
    3	    687 %IF $VMS %THEN
    3	    688 
    3	    689 !+
    3	    690 !
    3	    691 !	VAX/VMS PUT Processing
    3	    692 !
    3	    693 !-
    3	    694 
    3	    695 !+
    3	    696 !
    3	    697 !	VAX/VMS Terminal Output Processing
    3	    698 !
    3	    699 !	NOTE:  This code is very similar to the corresponding code for RSX-11M.
    3	    700 !
    3	    701 !-
    3	    702 
    3	    703     IF .iob[IOB$V_TERMINAL]				! If the output file is a terminal,
    3	    704     THEN						! perform special output processing.
    3	    705 	BEGIN
    4	    706 	LOCAL
    4	    707 	    control,					! QIO control code
    4	    708 	    status :  $VIOSB,				! QIO status block
    4	    709 	    event_flag;					! Event flag number for QIOW
    4	    710 
    4	    711 !
    4	    712 ! Output a single record/string to the terminal.
    4	    713 !
    4	    714 
    4	    715 	IF .iob[IOB$V_RECORD]				! If this is a record-mode file,
    4	    716 	THEN						!
    4	    717 	    control = %X'80800000' + cr^24 + lf^16	! setup for single spacing.
    4	    718 	ELSE
    4	    719 	    control = 0;				! Otherwise, don't do any automatic carriage control.
    4	    720 
    4	    721 	$XPO_IF_NOT ( LIB$GET_EF ( event_flag ) )	! Allocate an event flag
    6	    722 	THEN						! If the allocation failed,
    5	    723 	    $XPO_QUIT( SYS_ERROR, (.$XPO_STATUS) );	! return these codes to the caller.
    4	    724 
    4	    725 	$QIOW( FUNC = IO$_WRITELBLK,			! Write a record/stream to the terminal:
P   4	    726 		EFN = .event_flag,			!    Event flag number
P   4	    727 		CHAN = .iob[IOB$H_CHANNEL],		!    QIO channel number
P   4	    728 		IOSB = status,				!    address of QIO status block
P   4	    729 		P1 = .output[STR$A_POINTER],		!    address of output data
P   4	    730 		P2 = .output_length,			!    length of output data
P   4	    731 		P4 = .control );			!    carriage control indicator
    4	    732 
    4	    733 	$XPO_IF_NOT ( LIB$FREE_EF ( event_flag ) )	! Free the allocated event flag
    6	    734 	THEN						! If the free failed,
    5	    735 	    $XPO_QUIT( SYS_ERROR, (.$XPO_STATUS) );	! return these codes to the caller.
    4	    736 
    4	    737 	IF NOT .status[VIOSB$H_STATUS]			! If the QIO operation failed,
    4	    738 	THEN						!
    4	    739 	    BEGIN					!
    5	    740 	    XPO$RMS_ERROR( .iob,			! convert the QIO error code into XPORT completion codes
    5	    741 			.status[VIOSB$H_STATUS], 0 );	!
    5	    742 	    $XPO_QUIT();				! and return these codes to the caller.

XPUT                            VAX/VMS Terminal Output          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 16
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    5	    743 	    END;
    4	    744 
    4	    745 !
    4	    746 ! Check for truncated output.
    4	    747 !
    4	    748 
    4	    749 	IF .output[STR$H_LENGTH] GTR .output_length	! If the terminal output was truncated,
    4	    750 	THEN						!
    4	    751 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
    4	    752 
    4	    753 !
    4	    754 ! Return to the caller after successful character output.
    4	    755 !
    4	    756 
    4	    757 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
    4	    758 
    4	    759 	END;
    3	    760 %FI

XPUT                            VAX/VMS Character-mode File PUT  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 17
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	    762 %TITLE 'VAX/VMS Character-mode File PUT'
    3	    763 %IF $VMS %THEN
    3	    764 
    3	    765 !+
    3	    766 !
    3	    767 !	VAX/VMS Character-mode File PUT Processing
    3	    768 !
    3	    769 !-
    3	    770 
    3	    771     BEGIN
    4	    772 
    4	    773     BIND
    4	    774 	rab = .iob[IOB$A_RMS_RAB] :  $RAB_DECL;		! Define the IOB's RAB
    4	    775 
    4	    776     LOCAL
    4	    777 	sequence_number :  WORD;
    4	    778 
    4	    779     IF .iob[IOB$V_RECORD] OR .iob[IOB$V_STREAM]		! If this is a record-mode or stream-mode file,
    4	    780     THEN						! execute the following block.
    4	    781 	BEGIN
    5	    782 
    5	    783 !
    5	    784 ! Setup a local sequence number.
    5	    785 !
    5	    786 
    5	    787 	IF .iob[IOB$V_SEQUENCED]
    5	    788 	THEN
    5	    789 	    IF .iob[IOB$G_SEQ_NUMB] EQL 0 AND		! If this is an implicit page mark,
    5	    790 		.output_length EQL 1 AND		!
    5	    791 		CH$RCHAR(.output[STR$A_POINTER]) EQL ff	!
    5	    792 	    THEN					!
    5	    793 		sequence_number = %X'FFFF'		! setup a maximum sequence number.
    5	    794 	    ELSE
    5	    795 		sequence_number = .iob[IOB$G_SEQ_NUMB];	! Otherwise, use the caller's sequence number.
    5	    796 
    5	    797 !
    5	    798 ! Output a single record or character stream.
    5	    799 !
    5	    800 
    5	    801 							! Setup the RAB for a PUT:
    5	    802 	rab[RAB$L_RBF] = .output[STR$A_POINTER];	!    address of record text
    5	    803 	rab[RAB$W_RSZ] = .output_length;		!    size of the record
    5	    804 	rab[RAB$L_RHB] = sequence_number;		!    address of sequence number
    5	    805 
    5	    806 	IF NOT $RMS_PUT( RAB = rab )			! If the output is not successful,
    6	    807 	THEN						!
    5	    808 	    BEGIN
    6	    809 	    XPO$RMS_ERROR( .iob,			! convert the RMS completion codes
    6	    810 			    .rab[RAB$L_STS],		! into appropriate XPORT completion codes
    6	    811 			    .rab[RAB$L_STV] );		!
    6	    812 	    $XPO_QUIT();				! and then jump to return an error to the caller.
    6	    813 	    END;
    5	    814 
    5	    815 !
    5	    816 ! Check for truncated output.
    5	    817 !
    5	    818 

XPUT                            VAX/VMS Character-mode File PUT  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 18
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    5	    819 	IF .output[STR$H_LENGTH] GTR .output_length	! If the output record was truncated,
    5	    820 	THEN						!
    5	    821 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
    5	    822 
    5	    823 !
    5	    824 ! Return to the caller after successful character output.
    5	    825 !
    5	    826 
    5	    827 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
    5	    828 
    5	    829 	END;
    4	    830 %FI

XPUT                            VAX/VMS Binary-mode File PUT     4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 19
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    4	    832 %TITLE 'VAX/VMS Binary-mode File PUT'
    4	    833 %IF $VMS %THEN
    4	    834 
    4	    835 !+
    4	    836 !
    4	    837 !	VAX/VMS Binary-mode File PUT Processing
    4	    838 !
    4	    839 !-
    4	    840 
    4	    841     IF .iob[IOB$V_BINARY] AND NOT .iob[IOB$V_RANDOM] THEN	! If this is a binary-mode file put,
    4	    842     BEGIN							! execute the following block.
    5	    843 
    5	    844     MACRO
    5	    845 	amt_buff_used = rab[RAB$L_CTX] %;		! Amount used in the XPORT internal output buffer
    5	    846 
    5	    847     LOCAL
    5	    848 	amt_buff_left,					! Amount of space left in the XPORT internal output buffer
    5	    849 	output_address;					! Dynamic pointer to the output data
    5	    850 
    5	    851 !
    5	    852 ! Move binary output data into the XPORT internal output buffer.
    5	    853 !
    5	    854 
    5	    855     output_address = .output[STR$A_POINTER];		! Setup the output data pointer.
    5	    856 
    5	    857     WHILE .output_length GTR 0 DO			! Loop until all the output data has been processed.
    5	    858 	BEGIN
    6	    859 	amt_buff_left = .rab[RAB$W_USZ] -		! Calculate how much space is left in the output buffer.
    6	    860 				.amt_buff_used;
    6	    861 
    6	    862 	IF .output_length LSS .amt_buff_left		! If the output data will not fill the buffer,
    6	    863 	THEN						!
    6	    864 	    BEGIN					!
    7	    865 	    CH$MOVE( .output_length, .output_address,	! move the data into the buffer,
    7	    866 		    .rab[RAB$L_UBF] + .amt_buff_used );	!
    7	    867 	    amt_buff_used = .amt_buff_used +		! increment the buffer used amount,
    7	    868 				    .output_length;	!
    7	    869 	    output_length = 0;				! and indicate all output data has been processed.
    7	    870 	    END
    7	    871 	ELSE
    6	    872 	    BEGIN
    7	    873 	    CH$MOVE( .amt_buff_left, .output_address,	! Otherwise, fill the output buffer,
    7	    874 		    .rab[RAB$L_UBF] + .amt_buff_used );	!
    7	    875 	    output_length = .output_length -		! decrement the output data length,
    7	    876 				    .amt_buff_left;	!
    7	    877 	    output_address = .output_address +		! and increment the output data address.
    7	    878 				    .amt_buff_left;
    7	    879 
    7	    880 !
    7	    881 ! Write out a completed output buffer.
    7	    882 !
    7	    883 
    7	    884 	    rab[RAB$W_RSZ] = .rab[RAB$W_USZ];		! Setup the output block length
    7	    885 	    rab[RAB$L_RBF] = .rab[RAB$L_UBF];		! and address of the data buffer.
    7	    886 
    7	    887 	    IF $RMS_WRITE( RAB = rab )			! If the write operation is successful,
    8	    888 	    THEN					!

XPUT                            VAX/VMS Binary-mode File PUT     4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 20
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    7	    889 		amt_buff_used = 0			! indicate that the output buffer is empty.
    7	    890 	    ELSE
    7	    891 		BEGIN
    8	    892 		XPO$RMS_ERROR( .iob,			! Otherwise, convert the RMS completion codes
    8	    893 				.rab[RAB$L_STS],	! into appropriate XPORT completion codes
    8	    894 				.rab[RAB$L_STV] );	!
    8	    895 		$XPO_QUIT();				! and then jump to return an error to the caller.
    8	    896 		END;
    7	    897 	    END;
    6	    898 	END;						! End of the output processing loop.
    5	    899 
    5	    900 !
    5	    901 ! Return to the caller after all binary output data has been processed.
    5	    902 !
    5	    903 
    5	    904     $XPO_QUIT( NORMAL );				! Jump to return to the caller.
    5	    905 
    5	    906     END;						! End of binary output processing.
    4	    907 %FI

XPUT                            VAX/VMS Random Binary-mode File  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 21
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    4	    909 %TITLE 'VAX/VMS Random Binary-mode File PUT'
    4	    910 %IF $VMS %THEN
    4	    911 
    4	    912 !+
    4	    913 !	VAX/VMS Random Binary-mode PUT Processing
    4	    914 !
    4	    915 ! Implicit inputs:
    4	    916 !	IOB$G_NEXT_POS - the byte after the last read/write
    4	    917 !	amt_buff_used (rab[RAB$L_CTX]) - indicates modified data in the XPORT internal output buffer
    4	    918 !		set by XPO$PUT, cleared by XPO$GET and XPO$CLOSE
    4	    919 !
    4	    920 ! Implicit outputs:
    4	    921 !	IOB$G_CURR_POS - the byte starting the current write
    4	    922 !	amt_buff_used (rab[RAB$L_CTX]) - indicates modified data in the XPORT internal output buffer
    4	    923 !		tested by XPO$PUT, XPO$GET and XPO$CLOSE
    4	    924 !-
    4	    925 
    4	    926     IF .iob[IOB$V_RANDOM] THEN
    4	    927     BEGIN
    5	    928 
    5	    929     BIND
    5	    930 	fab = .iob[IOB$A_RMS_FAB] :  $FAB_DECL,		! Define the IOB's FAB
    5	    931 	rab = .iob[IOB$A_RMS_RAB] :  $RAB_DECL;		! and RAB.
    5	    932 
    5	    933     MACRO
    5	    934 	amt_buff_used = rab[RAB$L_CTX] %,		! Indicates modified data in the XPORT internal output buffe
    5	    934 r
    5	    935 
    5	    936    	requested_block = ( ( .next_pos  / .rab[RAB$W_USZ] ) + 1 ) %,		! VBN is 1 origin
    5	    937 	requested_unit = ( .next_pos  MOD .rab[RAB$W_USZ] ) %;			! byte in block
    5	    938 
    5	    939     LOCAL
    5	    940 	move_amt,					! Amount of data to move after a given $RMS_READ
    5	    941 	next_pos,					! Position in file of requested characters/units
    5	    942 	output_address;					! Dynamic pointer to the output data
    5	    943 
    5	    944 !+
    5	    945 !   Begin executable code
    5	    946 !-
    5	    947 
    5	    948     next_pos = .iob[IOB$G_NEXT_POS];			! Pickup the position of requested units
    5	    949     output_address = .output[STR$A_POINTER];		! Setup the output data pointer.
    5	    950 
    5	    951     WHILE .output_length GTR 0 DO			! Loop until all the output data has been processed.
    5	    952 	BEGIN
    6	    953 	!+
    6	    954 	!   A copy of the disk block is modified in memory,
    6	    955 	!   so before a block can be written to, it must be read.
    6	    956 	!-
    6	    957 	IF requested_block NEQ .rab[RAB$L_RFA0]		! If the block has not been read into the buffer,
    6	    958 	THEN						!
    6	    959 	    BEGIN					!
    7	    960 	    IF .amt_buff_used NEQ 0			! and there is modified data in the buffer
    7	    961 	    THEN					!
    7	    962 		BEGIN					! then flush the buffer to disk.
    8	    963 
    8	    964 		rab[RAB$W_RSZ] = .rab[RAB$W_USZ];		! Setup the output block length

XPUT                            VAX/VMS Random Binary-mode File  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 22
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    8	    965 		rab[RAB$L_RBF] = .rab[RAB$L_UBF];		! and address of the data buffer.
    8	    966 
    8	    967 		IF $RMS_WRITE( RAB = rab )			! If the write operation is successful,
    9	    968 		THEN						!
    8	    969 		    amt_buff_used = 0				! indicate that the output buffer is empty.
    8	    970 		ELSE
    8	    971 		    BEGIN
    9	    972 		    XPO$RMS_ERROR( .iob,			! Otherwise, convert the RMS completion codes
    9	    973 				    .rab[RAB$L_STS],		! into appropriate XPORT completion codes
    9	    974 				    .rab[RAB$L_STV] );		!
    9	    975 		    $XPO_QUIT();				! and then jump to return an error to the caller.
    9	    976 		    END;
    8	    977 		END;
    7	    978 
    7	    979 	    rab[RAB$L_BKT] = requested_block;		! Now specify the block to read
    7	    980 	    $RMS_READ( RAB = rab );			! and read a single block.
    7	    981 	
    7	    982 	    IF NOT .rab[RAB$L_STS]			! If there was an RMS read error
    7	    983 		AND .rab[RAB$L_STS] NEQ RMS$_EOF	! other than end of file,
    7	    984 	    THEN
    7	    985 		BEGIN				!
    8	    986 		XPO$RMS_ERROR( .iob,		!    Convert the RMS completion codes into
    8	    987 			.rab[RAB$L_STS],	!    equivalent XPORT completion codes
    8	    988 			.rab[RAB$L_STV] );	!
    8	    989 		$XPO_QUIT();			!    and then jump to return to the caller.
    8	    990 		END;
    7	    991 
    7	    992 	    CH$FILL ( 0,				! Initialize buffer beyond EOF
    7	    993 		.rab[RAB$W_USZ] - .rab[RAB$W_RSZ],
    7	    994 		.rab[RAB$L_RBF] + .rab[RAB$W_RSZ] );
    7	    995 	    END;
    6	    996 
    6	    997 !
    6	    998 ! Move binary output data into the XPORT internal output buffer.
    6	    999 !
    6	   1000 
    6	   1001 	move_amt = MINU (					! amount to move is the minimum of
    6	   1002 			.output_length,				! the requested length to write
    6	   1003 			.rab[RAB$W_USZ] - requested_unit );	! and the amount of space available
    6	   1004 
    6	   1005 	CH$MOVE( .move_amt,				! move the data
    6	   1006 	    .output_address,				! from the user's buffer
    6	   1007 	    .rab[RAB$L_UBF] + requested_unit );		! to the XPORT internal output buffer
    6	   1008 
    6	   1009 	output_length = .output_length - .move_amt;	! update the pointers to the user's data
    6	   1010 	output_address = .output_address + .move_amt;
    6	   1011 
    6	   1012 	amt_buff_used = .rab[RAB$W_USZ];		! Indicate that the output buffer contains modified data,
    6	   1013 							! so that it will be written to disk next time around.
    6	   1014 
    6	   1015 	next_pos = .next_pos + .move_amt;		! update the file pointer (requested_block and requested_byt
    6	   1015 e)
    6	   1016 
    6	   1017 	END;		! of WHILE output processing loop.
    5	   1018 
    5	   1019     iob[IOB$G_CURR_POS] = .iob[IOB$G_NEXT_POS];		! position just written to (in UNITS)
    5	   1020     iob[IOB$G_NEXT_POS] = .next_pos;			! next position to write to (in UNITS)

XPUT                            VAX/VMS Random Binary-mode File  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 23
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    5	   1021 
    5	   1022 !
    5	   1023 ! Return to the caller after all binary output data has been processed.
    5	   1024 !
    5	   1025 
    5	   1026     $XPO_QUIT( NORMAL );				! Jump to return to the caller.
    5	   1027 
    5	   1028 
    5	   1029 
    5	   1030 
    5	   1031     END;						! End of IF .iob[IOB$V_RANDOM]
    4	   1032 
    4	   1033     END;						! End of VAX/VMS PUT processing.
    3	   1034 
    3	   1035 !+
    3	   1036 !
    3	   1037 !	End of VAX/VMS PUT Processing
    3	   1038 !
    3	   1039 !-
    3	   1040 
    3	   1041 %FI

XPUT                            RSX-11M Terminal Output          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 24
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1043 %TITLE 'RSX-11M Terminal Output'
    3	   1044 %IF $11M %THEN
U   3	   1045 
U   3	   1046 !+
U   3	   1047 !
U   3	   1048 !	RSX-11M PUT Processing
U   3	   1049 !
U   3	   1050 !-
U   3	   1051 
U   3	   1052 !+
U   3	   1053 !
U   3	   1054 !	RSX-11M Terminal Output Processing
U   3	   1055 !
U   3	   1056 !	NOTE:  This code is very similar to the corresponding code for VAX/VMS.
U   3	   1057 !
U   3	   1058 !-
U   3	   1059 
U   3	   1060     IF .iob[IOB$V_TERMINAL]				! If the output file is a terminal,
U   3	   1061     THEN						! perform special output processing.
U   3	   1062 	BEGIN
U   3	   1063 	LOCAL
U   3	   1064 	    control,					! QIO control code
U   3	   1065 	    status :  $QIO_STATUS;			! QIO status block
U   3	   1066 
U   3	   1067 !
U   3	   1068 ! Output a single record/string to the terminal.
U   3	   1069 !
U   3	   1070 
U   3	   1071 	IF .iob[IOB$V_RECORD]				! If this is a record-mode file,
U   3	   1072 	THEN						!
U   3	   1073 	    control = %O'040'				! setup for single spacing.
U   3	   1074 	ELSE
U   3	   1075 	    control = 0;				! Otherwise, don't do any automatic carriage control.
U   3	   1076 
U   3	   1077 	QIOW$S( IO$WVB,					! Write a "virtual block" to the terminal:
U   3	   1078 			.iob[IOB$H_CHANNEL],		!    LUN
U   3	   1079 			.XRSX$EVENT_FLAG,,		!    event flag number
U   3	   1080 			status,,			!    address of QIO status block
U   3	   1081 			< .output[STR$A_POINTER],	!    address of output data
U   3	   1082 			    .output_length,		!    length of output data
U   3	   1083 			    .control > );		!    carriage control indicator
U   3	   1084 
U   3	   1085 	IF .status[QS$ERR] NEQ IS$SUC			! If writing to the terminal fails,
U   3	   1086 	THEN						!
U   3	   1087 	    BEGIN					!
U   3	   1088 	    XRSX$IO_ERROR( .iob, .status[QS$ERR] );	! convert the QIO error code to XPORT completion codes
U   3	   1089 	    $XPO_QUIT();				! and return these codes to the caller.
U   3	   1090 	    END;
U   3	   1091 
U   3	   1092 !
U   3	   1093 ! Check for truncated output.
U   3	   1094 !
U   3	   1095 
U   3	   1096 	IF .output[STR$H_LENGTH] GTR .output_length	! If the terminal output was truncated,
U   3	   1097 	THEN						!
U   3	   1098 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
U   3	   1099 

XPUT                            RSX-11M Terminal Output          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 25
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	   1100 !
U   3	   1101 ! Return to the caller after successful character output.
U   3	   1102 !
U   3	   1103 
U   3	   1104 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	   1105 
U   3	   1106 	END;
U   3	   1107 %FI

XPUT                            RSX-11M Record-mode and Stream-  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 26
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1109 %TITLE 'RSX-11M Record-mode and Stream-mode File PUT'
    3	   1110 %IF $11M %THEN
U   3	   1111 
U   3	   1112 !+
U   3	   1113 !
U   3	   1114 !	RSX-11M Record-mode and Stream-mode File PUT Processing Processing
U   3	   1115 !
U   3	   1116 !-
U   3	   1117 
U   3	   1118     BEGIN
U   3	   1119     BIND						! Declare the FCS control blocks
U   3	   1120 	fcs_blocks = .iob[IOB$A_FCS_FDB] :  $FCS_BLOCKS,
U   3	   1121 	fdb = fcs_blocks[FCS$Z_FDB] :  FDB$;
U   3	   1122 
U   3	   1123     IF .iob[IOB$V_RECORD] OR .iob[IOB$V_STREAM]		! If this is a record-mode or stream-mode file,
U   3	   1124     THEN						! execute the following block.
U   3	   1125 	BEGIN
U   3	   1126 
U   3	   1127 !
U   3	   1128 ! Setup an appropriate record sequence number in the FAB.
U   3	   1129 !
U   3	   1130 
U   3	   1131 	IF .iob[IOB$V_SEQUENCED]
U   3	   1132 	THEN
U   3	   1133 	    IF .iob[IOB$G_SEQ_NUMB] EQL 0 AND		! If this is an implicit page mark,
U   3	   1134 		.output_length EQL 1 AND		!
U   3	   1135 		CH$RCHAR(.output[STR$A_POINTER]) EQL ff	!
U   3	   1136 	    THEN					!
U   3	   1137 		fdb[F$SEQN] = %X'FFFF'			! setup a maximum sequence number.
U   3	   1138 	    ELSE
U   3	   1139 		fdb[F$SEQN] = .iob[IOB$G_SEQ_NUMB];	! Otherwise, use the caller's sequence number.
U   3	   1140 
U   3	   1141 !
U   3	   1142 ! Output a single record or character stream.
U   3	   1143 !
U   3	   1144 
U   3	   1145 	IF NOT PUT$( fdb,				! Output the record/string:
U   3	   1146 			.output[STR$A_POINTER],		!    address of the output record/string
U   3	   1147 			.output_length )		!    length of the output record/string
U   3	   1148 	THEN
U   3	   1149 	    BEGIN					! If the output fails,
U   3	   1150 	    XRSX$IO_ERROR( .iob,			! convert the FCS-11 competion code into
U   3	   1151 			    .fdb[F$ERR] );		! appropriate XPORT completion codes
U   3	   1152 	    $XPO_QUIT();				! and then jump to return an error to the caller.
U   3	   1153 	    END;
U   3	   1154 
U   3	   1155 !
U   3	   1156 ! Check for truncated output.
U   3	   1157 !
U   3	   1158 
U   3	   1159 	IF .output[STR$H_LENGTH] GTR .output_length	! If the output record was truncated,
U   3	   1160 	THEN						!
U   3	   1161 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
U   3	   1162 
U   3	   1163 !
U   3	   1164 ! Return to the caller after successful character output.
U   3	   1165 !

XPUT                            RSX-11M Record-mode and Stream-  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 27
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	   1166 
U   3	   1167 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	   1168 
U   3	   1169 	END;
U   3	   1170 %FI

XPUT                            RSX-11M Binary-mode PUT          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 28
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1172 %TITLE 'RSX-11M Binary-mode PUT'
    3	   1173 %IF $11M %THEN
U   3	   1174 
U   3	   1175 !+
U   3	   1176 !
U   3	   1177 !	RSX-11M Binary-mode PUT Processing
U   3	   1178 !
U   3	   1179 !-
U   3	   1180 
U   3	   1181     BEGIN
U   3	   1182 
U   3	   1183     LOCAL
U   3	   1184 	amt_buff_left,					! Amount of space left in the XPORT internal output buffer
U   3	   1185 	output_address;					! Dynamic pointer to the output data
U   3	   1186 
U   3	   1187 !
U   3	   1188 ! Move binary output data into the XPORT internal output buffer.
U   3	   1189 !
U   3	   1190 
U   3	   1191     output_address = .output[STR$A_POINTER];		! Setup the output data pointer.
U   3	   1192 
U   3	   1193     WHILE .output_length GTR 0 DO			! Loop until all the output data has been processed.
U   3	   1194 	BEGIN
U   3	   1195 	amt_buff_left = .fdb[F$BKDS$S] -		! Calculate how much space is left in the output buffer.
U   3	   1196 			    .fcs_blocks[FCS$G_BUFF_USED];
U   3	   1197 
U   3	   1198 	IF .output_length LSS .amt_buff_left		! If the output data will not fill the buffer,
U   3	   1199 	THEN						!
U   3	   1200 	    BEGIN					!
U   3	   1201 	    CH$MOVE( .output_length, .output_address,	! move the data into the buffer,
U   3	   1202 		    .fdb[F$BKDS$A] +			!
U   3	   1203 			.fcs_blocks[FCS$G_BUFF_USED] );	!
U   3	   1204 	    fcs_blocks[FCS$G_BUFF_USED] =		! increment the buffer used amount,
U   3	   1205 		.fcs_blocks[FCS$G_BUFF_USED] +		!
U   3	   1206 				    .output_length;	!
U   3	   1207 	    output_length = 0;				! and indicate all output data has been processed.
U   3	   1208 	    END
U   3	   1209 	ELSE
U   3	   1210 	    BEGIN
U   3	   1211 	    CH$MOVE( .amt_buff_left, .output_address,	! Otherwise, fill the output buffer,
U   3	   1212 		    .fdb[F$BKDS$A] +			!
U   3	   1213 			.fcs_blocks[FCS$G_BUFF_USED] );	!
U   3	   1214 	    output_length = .output_length -		! decrement the output data length,
U   3	   1215 				    .amt_buff_left;	!
U   3	   1216 	    output_address = .output_address +		! and increment the output data address.
U   3	   1217 				    .amt_buff_left;
U   3	   1218 
U   3	   1219 !
U   3	   1220 ! Write out a completed output buffer.
U   3	   1221 !
U   3	   1222 
U   3	   1223 	    WRITE$( fdb );
U   3	   1224 
U   3	   1225 	    IF .fdb[F$ERR] EQL IS$SUC
U   3	   1226 	    THEN
U   3	   1227 		WAIT$( fdb );
U   3	   1228 

XPUT                            RSX-11M Binary-mode PUT          4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 29
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	   1229 	    IF .fdb[F$ERR] EQL IS$SUC			! If the write operation is successful,
U   3	   1230 	    THEN					!
U   3	   1231 		fcs_blocks[FCS$G_BUFF_USED] = 0		! indicate that the output buffer is empty.
U   3	   1232 	    ELSE
U   3	   1233 		BEGIN
U   3	   1234 		XRSX$IO_ERROR( .iob, .fdb[F$ERR] );
U   3	   1235 		$XPO_QUIT();
U   3	   1236 		END;
U   3	   1237 	    END;
U   3	   1238 	END;						! End of the output processing loop.
U   3	   1239 
U   3	   1240 !
U   3	   1241 ! Return to the caller after all binary output data has been processed.
U   3	   1242 !
U   3	   1243 
U   3	   1244     $XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	   1245 
U   3	   1246     END;						! End of binary output processing.
U   3	   1247 
U   3	   1248     END;						! End of RSX-11M PUT processing.
U   3	   1249 
U   3	   1250 !+
U   3	   1251 !
U   3	   1252 !	End of RSX-11M PUT Processing
U   3	   1253 !
U   3	   1254 !-
U   3	   1255 
U   3	   1256 %FI

XPUT                            RSTS/E Terminal PUT              4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 30
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1258 %TITLE 'RSTS/E Terminal PUT'
    3	   1259 %IF $RSTS %THEN
U   3	   1260 
U   3	   1261 !+
U   3	   1262 !
U   3	   1263 !	RSTS/E PUT Processing
U   3	   1264 !
U   3	   1265 !	NOTE: This code is very similar to the TOPS10/TOPS20/RT11 PUT processing code.
U   3	   1266 !
U   3	   1267 !-
U   3	   1268 
U   3	   1269     BEGIN
U   3	   1270 
U   3	   1271     BIND
U   3	   1272 	buffer_cb = .iob[IOB$A_RSTS_CB] : $XRSTS_CB;	! RSTS/E buffer control block
U   3	   1273 
U   3	   1274     LOCAL
U   3	   1275 	data_pointer;					! local pointer to output data
U   3	   1276 
U   3	   1277 !+
U   3	   1278 !
U   3	   1279 !	RSTS/E Terminal Output Processing
U   3	   1280 !
U   3	   1281 !-
U   3	   1282 
U   3	   1283     IF .iob[IOB$V_TERMINAL]				! If the output file is a terminal,
U   3	   1284     THEN						! perform special output processing.
U   3	   1285 	BEGIN
U   3	   1286 	LOCAL
U   3	   1287 	    local_term_buff :				! local terminal output buffer
U   3	   1288 		VECTOR[ CH$ALLOCATION(term_buff_len) ],
U   3	   1289 	    term_buff_ptr;				! pointer to actual output buffer
U   3	   1290 
U   3	   1291 !
U   3	   1292 ! Output the string in one operation.
U   3	   1293 !
U   3	   1294 
U   3	   1295 	IF .max_output_len LEQ term_buff_len - 2	! If the local terminal buffer is
U   3	   1296 							! large enough for the output string,
U   3	   1297 	THEN						!
U   3	   1298 	    term_buff_ptr = CH$PTR( local_term_buff )	! setup to use the local buffer.
U   3	   1299 	ELSE
U   3	   1300 	    $XPO_IF_NOT( $XPO_GET_MEM(			! Otherwise, allocate a dynamic output buffer.
U   3	   1301 				CHARACTERS = .max_output_len + 2,
U   3	   1302 				RESULT = term_buff_ptr,
U   3	   1303 				FAILURE = 0 ) )
U   3	   1304 	    THEN
U   3	   1305 		$XPO_QUIT( GET_MEM, (.$XPO_STATUS) );
U   3	   1306 
U   3	   1307 	data_pointer = CH$MOVE( .output_length,		! Move the output string into a buffer.
U   3	   1308 			.output[STR$A_POINTER],
U   3	   1309 			.term_buff_ptr );
U   3	   1310 
U   3	   1311 	data_pointer = CH$FILL( space, .pad_length,	! Pad the record with spaces if necessary.
U   3	   1312 				.data_pointer );
U   3	   1313 
U   3	   1314 	IF .iob[IOB$V_RECORD]				! If this is record-mode output,

XPUT                            RSTS/E Terminal PUT              4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 31
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	   1315 	THEN						!
U   3	   1316 	    BEGIN					!
U   3	   1317             CH$MOVE( 2, CH$PTR( UPLIT( %STRING(		! add the following characters to the string:
U   3	   1318 			    %CHAR( cr ),		!    carriage return
U   3	   1319 			    %CHAR( lf ) ) ) ),		!    line feed
U   3	   1320 			.data_pointer );		
U   3	   1321     	    max_output_len = .max_output_len +2;
U   3	   1322     	    END;
U   3	   1323 
U   3	   1324     	$XRSTS_INI_FIRQB;				! Initialize the FIRQB.
U   3	   1325     	$XRSTS_INI_XRB;					! Initialize the XRB.
U   3	   1326     							! Setup the XRB:
U   3	   1327     	$XRSTS_XRB[XRLEN] = .max_output_len;		!    length of output buffer
U   3	   1328     	$XRSTS_XRB[XRBC] = .max_output_len;		!    number of bytes to be written
U   3	   1329     	$XRSTS_XRB[XRLOC] = .term_buff_ptr;		!    starting address of buffer
U   3	   1330     	$XRSTS_XRB[XRCI] = 0;				!    channel number times 2 (user's terminal is always 0)
U   3	   1331 
U   3	   1332     	$WRITE;						! Output the string.
U   3	   1333     	IF .$XRSTS_FIRQB[FQIOSTS] NEQ 0			! Report any errors.
U   3	   1334     	THEN
U   3	   1335     	    BEGIN
U   3	   1336     	    XRST$ERROR( .iob, .$XRSTS_FIRQB[FQIOSTS] );
U   3	   1337     	    $XPO_QUIT();
U   3	   1338     	    END;
U   3	   1339 
U   3	   1340 !
U   3	   1341 ! Free the dynamic output buffer
U   3	   1342 !
U   3	   1343 
U   3	   1344 	IF .term_buff_ptr NEQ CH$PTR(local_term_buff)	! If a dynamic output buffer was allocated,
U   3	   1345 	THEN						!
U   3	   1346 	    $XPO_FREE_QUIT(				! free the buffer memory.
U   3	   1347 		    STRING = (.max_output_len,
U   3	   1348 				.term_buff_ptr) );
U   3	   1349 
U   3	   1350 !
U   3	   1351 ! Check for truncated output.
U   3	   1352 !
U   3	   1353 
U   3	   1354 	IF .output[STR$H_LENGTH] GTR .output_length	! If the output record was truncated,
U   3	   1355 	THEN						!
U   3	   1356 	    $XPO_QUIT( TRUNCATED );			! return an error code to the caller.
U   3	   1357 
U   3	   1358 !
U   3	   1359 ! Return to the caller after terminal output.
U   3	   1360 !
U   3	   1361 
U   3	   1362 	$XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	   1363 
U   3	   1364 	END;
U   3	   1365 %FI

XPUT                            RSTS/E File PUT                  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 32
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1367 %TITLE 'RSTS/E File PUT'
    3	   1368 %IF $RSTS %THEN
U   3	   1369 
U   3	   1370 !+
U   3	   1371 !
U   3	   1372 !	RSTS/E File Output Processing
U   3	   1373 !
U   3	   1374 !-
U   3	   1375 
U   3	   1376 !
U   3	   1377 ! Setup a character string pointer or binary data pointer.
U   3	   1378 !
U   3	   1379 
U   3	   1380     data_pointer = .output[STR$A_POINTER];		
U   3	   1381 
U   3	   1382 !
U   3	   1383 ! Output the requested number of characters/units.
U   3	   1384 !
U   3	   1385 
U   3	   1386     INCR count FROM 1 TO .output_length DO		! Output one character/value at a time.
U   3	   1387 	put_file( CH$RCHAR_A( data_pointer ) );
U   3	   1388 
U   3	   1389     INCR count FROM 1 TO .pad_length DO			! Add any necessary padding characters.
U   3	   1390 	put_file( space );
U   3	   1391 
U   3	   1392 !
U   3	   1393 ! Add a carriage return and line feed to the end of an output record.
U   3	   1394 !
U   3	   1395 
U   3	   1396     IF .iob[IOB$V_RECORD]				! If this a character record file,
U   3	   1397     THEN						!
U   3	   1398 	BEGIN						!
U   3	   1399 	put_file( cr );					! add a carriage return and
U   3	   1400 	put_file( lf );					! a line feed to the end of the record.
U   3	   1401 	END;
U   3	   1402 
U   3	   1403 !
U   3	   1404 ! Check for truncated output.
U   3	   1405 !
U   3	   1406 
U   3	   1407     IF .output[STR$H_LENGTH] GTR .output_length		! If the output record was truncated,
U   3	   1408     THEN						!
U   3	   1409 	$XPO_QUIT( TRUNCATED );				! return an error code to the caller.
U   3	   1410 
U   3	   1411 !
U   3	   1412 ! Return to the caller after file output.
U   3	   1413 !
U   3	   1414 
U   3	   1415     $XPO_QUIT( NORMAL );				! Jump to return to the caller.
U   3	   1416 
U   3	   1417     END;						! End of RSTS/E specific processing
U   3	   1418 
U   3	   1419 !+
U   3	   1420 !
U   3	   1421 !	End of RSTS/E PUT Processing
U   3	   1422 !
U   3	   1423 !-

XPUT                            RSTS/E File PUT                  4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 33
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

U   3	   1424 
U   3	   1425 %FI

XPUT                            XPO$PUT Routine Termination      4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 34
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

    3	   1427 %TITLE 'XPO$PUT Routine Termination'
    3	   1428 
    3	   1429 !+
    3	   1430 !
    3	   1431 !	Continuation of system-independent file open processing
    3	   1432 !
    3	   1433 !-
    3	   1434 
    3	   1435 !
    3	   1436 ! End of MAIN_BLOCK code block.
    3	   1437 !
    3	   1438 
    3	   1439     $XPO_MAIN_END;					! Terminate MAIN_BLOCK.
    2	   1440 
    2	   1441 !
    2	   1442 ! Call an appropriate action routine.
    2	   1443 !
    2	   1444 
    2	   1445     $XPO_ACTION_RTN( .iob );				! Call a success or failure action routine.
    2	   1446 
    2	   1447 !
    2	   1448 ! Free a temporary output string.
    2	   1449 !
    2	   1450 
    2	   1451     IF ( .iob[IOB$A_OUTPUT] NEQ 0 AND .iob[IOB$V_RECORD] ) OR
    2	   1452        ( .iob[IOB$A_OUTPUT] NEQ 0 AND .iob[IOB$V_STREAM] ) 
    3	   1453     THEN
    2	   1454 	IF $STR_FREE_TEMP( .iob[IOB$A_OUTPUT] )
    3	   1455 	THEN
    2	   1456 	    iob[IOB$A_OUTPUT] = 0;
    2	   1457     
    2	   1458 !
    2	   1459 ! Return to the caller.
    2	   1460 !
    2	   1461 
    2	   1462     RETURN .iob[IOB$G_COMP_CODE]			! Return the IOB completion code to the caller.
    2	   1463 
    2	   1464     END;						! End of XPO$PUT routine
    1	   1465 END
    1	   1466 ELUDOM

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 35
X1.2-19                                                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

				      .psect _XPO$CODE, CON, LCL, SHR, EXE, NOWRT, NOVEC
				      .proc   XPO$PUT
				      .align 32
				      .global  XPO$PUT
			XPO$PUT:											   // 000228
			   { .mii 
002C058C1D80     0000		      alloc   r118 = rspfs, 3, 85, 8, 0
0000B20000C0     0001		      sxt4    r3 = IOB				// r3 = r32				   // 000291
0119F8C80300     0002		      adds    r12 = -64, r12 ;;								   // 000228
			   }
			   { .mii 
010800300A00     0010		      mov     r40 = r3									   // 000291
000188001D40     0011		      mov     r117 = br0								   // 000228
010800101DC0     0012		      mov     r119 = r1
			   }
			   { .mmi 
00A0403882C0     0020		      ld2     r11 = [r3], 68 ;;								   // 000302
008080300240     0021		      ld4     r9 = [r3]									   // 000291
01CC00B7A1C0     0022		      cmp4.eq pr7, pr0 = 61, r11 ;;							   // 000302
			   }
			   { .mib 
000008000000     0030		      nop.m   0
0000B0900A40     0031		      sxt4    r41 = r9									   // 000291
00860000A007     0032	       (pr7)  br.cond.dpnt.few L$5								   // 000302
			   }
			   { .mii 
010808328480     0040		      adds    r18 = 148, r3
010808330500     0041		      adds    r20 = 152, r3
000008000000     0042		      nop.i   0
			   }
			   { .mlx 
000008000000     0050		      nop.m   0
800000000000     0051		      movl    r17 = 2146308 ;;
0198004108
			   }
			   { .mlx 
008C81222000     0060		      st4     [r18] = r17
800000000000     0061		      movl    r19 = 2138210 ;;
0194005889
			   }
			   { .mfb 
008C81426000     0070		      st4     [r20] = r19
000008000000     0071		      nop.f   0
0080001E8000     0072		      br.sptk.few L$6 ;;
			   }
	         0080	L$5:
			   { .mmi 
010802860A00     0080		      adds    r40 = 48, r40 ;;								   // 000309
008082800540     0081		      ld4     r21 = [r40]
01080A8585C0     0082		      adds    r23 = 172, r40 ;;								   // 000302
			   }
			   { .mib 
0119FA8A0A00     0090		      adds    r40 = -48, r40
00A401540580     0091		      extr.u  r22 = r21, 16, 1								   // 000309
004000000000     0092		      nop.b   0 ;;
			   }
			   { .mib 

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 36
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

008C81700000     00A0		      st4     [r23] = r0								   // 000302
00A041600240     00A1		      tbit.z  pr9, pr8 = r22, 0								   // 000309
008600006008     00A2	       (pr8)  br.cond.dpnt.few L$7
			   }
			   { .mlx 
01080A8B0640     00B0		      adds    r25 = 216, r40								   // 000311
000000000000     00B1		      movl    r24 = 2138586 ;;
019430568C
			   }
			   { .mfb 
008C81930000     00C0		      st4     [r25] = r24
000008000000     00C1		      nop.f   0
0080001DE000     00C2		      br.sptk.few L$6 ;;
			   }
	         00D0	L$7:												   // 000309
			   { .mmi 
010802858A00     00D0		      adds    r40 = 44, r40 ;;								   // 000313
00B08A8A8680     00D1		      ld4     r26 = [r40], -44
000008000000     00D2		      nop.i   0 ;;
			   }
			   { .mii 
000008000000     00E0		      nop.m   0
00A401A44680     00E1		      extr.u  r26 = r26, 17, 1 ;;
00A051A002C0     00E2		      tbit.z  pr11, pr10 = r26, 0
			   }
			   { .mfb 
000008000000     00F0		      nop.m   0
000008000000     00F1		      nop.f   0
00860000600A     00F2	       (pr10) br.cond.dpnt.few L$9
			   }
			   { .mlx 
01080A8B0700     0100		      adds    r28 = 216, r40								   // 000315
800000000000     0101		      movl    r27 = 2138594 ;;
019430588D
			   }
			   { .mfb 
008C81C36000     0110		      st4     [r28] = r27
000008000000     0111		      nop.f   0
0080001D4000     0112		      br.sptk.few L$6 ;;
			   }
	         0120	L$9:												   // 000313
			   { .mii 
000008000000     0120		      nop.m   0
00A40150C740     0121		      extr.u  r29 = r21, 3, 1								   // 000317
00A401508540     0122		      extr.u  r21 = r21, 2, 1 ;;
			   }
			   { .mii 
010161D02740     0130		      and     r29 = 1, r29
010161502540     0131		      and     r21 = 1, r21 ;;
01007153A540     0132		      or      r21 = r29, r21 ;;
			   }
			   { .mfb 
01C461500340     0140		      cmp4.eq pr13, pr12 = r0, r21
000008000000     0141		      nop.f   0
00860000C00D     0142	       (pr13) br.cond.dpnt.few L$12
			   }
			   { .mib 

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 37
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

012000002640     0150		      mov     r25 = 1									   // 000320
0000B0901E00     0151		      sxt4    r120 = r9
00A000001000     0152		      br.call.sptk.many br0 = XST$VALIDATE
			   }
			   { .mib 
010807700040     0160		      mov     r1 = r119
00A0308001C0     0161		      tbit.z  pr7, pr6 = $STR$STATUS, 0		// pr7, pr6 = r8, 0
00860000E006     0162	       (pr6)  br.cond.dpnt.few L$13
			   }
			   { .mii 
01080A8B0AC0     0170		      adds    r43 = 216, r40
01080A8B8B00     0171		      adds    r44 = 220, r40
000008000000     0172		      nop.i   0
			   }
			   { .mlx 
000008000000     0180		      nop.m   0
000000000000     0181		      movl    r42 = 2138266 ;;
0194104695
			   }
			   { .mmb 
008C82B54000     0190		      st4     [r43] = r42
008C82C10000     0191		      st4     [r44] = $STR$STATUS		// [r44] = r8
0080001C4000     0192		      br.sptk.few L$6 ;;
			   }
	         01A0	L$12:												   // 000317
			   { .mfb 
01C442900240     01A0		      cmp4.eq pr9, pr8 = r0, r41							   // 000322
000008000000     01A1		      nop.f   0
008600006008     01A2	       (pr8)  br.cond.dpnt.few L$13
			   }
			   { .mlx 
01080A8B0B80     01B0		      adds    r46 = 216, r40								   // 000324
800000000000     01B1		      movl    r45 = 2138266 ;;
0194104696
			   }
			   { .mfb 
008C82E5A000     01C0		      st4     [r46] = r45
000008000000     01C1		      nop.f   0
0080001BE000     01C2		      br.sptk.few L$6 ;;
			   }
	         01D0	L$13:												   // 000317
			   { .mmi 
010802860A00     01D0		      adds    r40 = 48, r40 ;;								   // 000331
00B08A8A0BC0     01D1		      ld4     r47 = [r40], -48
000008000000     01D2		      nop.i   0 ;;
			   }
			   { .mii 
000008000000     01E0		      nop.m   0
00A402F0CC00     01E1		      extr.u  r48 = r47, 3, 1 ;;
00A0530002C0     01E2		      tbit.z  pr11, pr10 = r48, 0 ;;
			   }
			   { .mib 
01C00000134B     01F0	       (pr11) cmp.eq.unc pr13, pr0 = r0, r0
01C00000130A     01F1	       (pr10) cmp.eq.unc pr12, pr0 = r0, r0
00860000E00D     01F2	       (pr13) br.cond.dpnt.few L$22
			   }
			   { .mmi 

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 38
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

0108028B0A00     0200		      adds    r40 = 88, r40 ;;								   // 000332
00B08A850C40     0201		      ld4     r49 = [r40], -88
000008000000     0202		      nop.i   0 ;;
			   }
			   { .mfb 
018C7B100380     0210		      cmp4.lt pr14, pr15 = 0, r49
000008000000     0211		      nop.f   0
00860000A00F     0212	       (pr15) br.cond.dpnt.few L$22
			   }
			   { .mmi 
0108028B0A00     0220		      adds    r40 = 88, r40								   // 000335
008042900CC0     0221		      ld2     r51 = [r41]								   // 000334
000008000000     0222		      nop.i   0 ;;
			   }
			   { .mmi 
00B08A851E40     0230		      ld4     r121 = [r40], -88 ;;							   // 000335
018407966180     0231		      cmp4.lt pr6, pr0 = r51, r121							   // 000344
000008000000     0232		      nop.i   0 ;;
			   }
			   { .mmi 
010803301E46     0240	       (pr6)  mov     r121 = r51 ;;
010807900D00     0241		      mov     OUTPUT_LENGTH = r121		// r52 = r121
000008000000     0242		      nop.i   0
			   }
			   { .mfb 
000008000000     0250		      nop.m   0
000008000000     0251		      nop.f   0
008000004000     0252		      br.sptk.few L$23 ;;								   // 000334
			   }
	         0260	L$22:												   // 000331
			   { .mfi 
008042900D00     0260		      ld2     OUTPUT_LENGTH = [r41]		// r52 = [r41]				   // 000349
000008000000     0261		      nop.f   0
000008000000     0262		      nop.i   0
			   }
	         0270	L$23:												   // 000331
			   { .mii 
000008000000     0270		      nop.m   0
00A402F50D80     0271		      extr.u  r54 = r47, 20, 1 ;;							   // 000703
00A03B600200     0272		      tbit.z  pr8, pr7 = r54, 0
			   }
			   { .mfb 
000008000000     0280		      nop.m   0
000008000000     0281		      nop.f   0
008600046008     0282	       (pr8)  br.cond.dpnt.few L$25
			   }
			   { .mii 
010800C70E40     0290		      adds    r57 = 56, r12								   // 000721
010800000E00     0291		      mov     r56 = r0									   // 000717
000008000000     0292		      nop.i   0
			   }
			   { .mlx 
012000002640     02A0		      mov     r25 = 1									   // 000721
81FFFFFFFE36     02A1		      movl    r55 = -1920335872 ;;							   // 000717
01A005001B
			   }
			   { .mib 

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 39
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

010803700E0C     02B0	       (pr12) mov     r56 = r55
0000B3901E00     02B1		      sxt4    r120 = r57								   // 000721
00A000001000     02B2		      br.call.sptk.many br0 = LIB$GET_EF
			   }
			   { .mib 
010807700040     02C0		      mov     r1 = r119
00A0308001C0     02C1		      tbit.z  pr7, pr6 = $XPO$STATUS, 0		// pr7, pr6 = r8, 0
008600008006     02C2	       (pr6)  br.cond.dpnt.few L$26
			   }
			   { .mii 
01080A8B0EC0     02D0		      adds    r59 = 216, r40								   // 000723
01080A8B8F00     02D1		      adds    r60 = 220, r40
000008000000     02D2		      nop.i   0
			   }
			   { .mlx 
000008000000     02E0		      nop.m   0
000000000000     02E1		      movl    r58 = 2138794 ;;
0194504A9D
			   }
			   { .mmb 
008C83B74000     02F0		      st4     [r59] = r58
008C83C10000     02F1		      st4     [r60] = $XPO$STATUS		// [r60] = r8
008000198000     02F2		      br.sptk.few L$6 ;;
			   }
	         0300	L$26:												   // 000731
			   { .mii 
01080A8E0F40     0300		      adds    r61 = 240, r40
010800C70F80     0301		      adds    r62 = 56, r12
010800C20FC0     0302		      adds    r63 = 16, r12
			   }
			   { .mmi 
010802908A40     0310		      adds    r41 = 4, r41
010800C31000     0311		      adds    r64 = 24, r12
0000B3800E00     0312		      sxt4    CONTROL = CONTROL ;;		// r56 = r56
			   }
			   { .mii 
008043D01E80     0320		      ld2     r122 = [r61]
010800C41040     0321		      adds    r65 = 32, r12
010800C51080     0322		      adds    r66 = 40, r12
			   }
			   { .mmi 
00B08A9F9F80     0330		      ld4     r126 = [r41], -4
008083E00F80     0331		      ld4     r62 = [r62]
010800C810C0     0332		      adds    r67 = 64, r12 ;;
			   }
			   { .mii 
008CC3F00000     0340		      st8     [r63] = r0
0000AFA01E80     0341		      sxt2    r122 = r122
012000018640     0342		      mov     r25 = 12
			   }
			   { .mii 
008CC4070000     0350		      st8     [r64] = CONTROL			// [r64] = r56
0000B3401FC0     0351		      sxt4    r127 = OUTPUT_LENGTH		// r127 = r52
0000B7E01F80     0352		      sxt4    r126 = r126 ;;
			   }
			   { .mmi 
008CC4100000     0360		      st8     [r65] = r0

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 40
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

008CC4200000     0361		      st8     [r66] = r0
0000B7A01E40     0362		      sxt4    r121 = r122
			   }
			   { .mii 
012000041E80     0370		      mov     r122 = 32
0000B0001F40     0371		      sxt4    r125 = r0
0000B0001F00     0372		      sxt4    r124 = r0
			   }
			   { .mii 
000008000000     0380		      nop.m   0
0000B4301EC0     0381		      sxt4    r123 = r67
0000B3E01E00     0382		      sxt4    r120 = r62
			   }
			   { .mfb 
000008000000     0390		      nop.m   0
000008000000     0391		      nop.f   0
00A000001000     0392		      br.call.sptk.many br0 = SYS$QIOW ;;
			   }
			   { .mii 
012000002640     03A0		      mov     r25 = 1									   // 000733
0000B3901E00     03A1		      sxt4    r120 = r57
010807700040     03A2		      mov     r1 = r119									   // 000731
			   }
			   { .mfb 
000008000000     03B0		      nop.m   0
000008000000     03B1		      nop.f   0
004000000000     03B2		      nop.b   0 ;;
			   }
			   { .mfb 
000008000000     03C0		      nop.m   0
000008000000     03C1		      nop.f   0
00A000001000     03C2		      br.call.sptk.many br0 = LIB$FREE_EF						   // 000733
			   }
			   { .mib 
010807700040     03D0		      mov     r1 = r119
00A0308001C0     03D1		      tbit.z  pr7, pr6 = $XPO$STATUS, 0		// pr7, pr6 = r8, 0
008600008006     03D2	       (pr6)  br.cond.dpnt.few L$28
			   }
			   { .mii 
01080A8B1180     03E0		      adds    r70 = 216, r40								   // 000735
01080A8B91C0     03E1		      adds    r71 = 220, r40
000008000000     03E2		      nop.i   0
			   }
			   { .mlx 
000008000000     03F0		      nop.m   0
800000000000     03F1		      movl    r69 = 2138794 ;;
0194504AA2
			   }
			   { .mmb 
008C8468A000     0400		      st4     [r70] = r69
008C84710000     0401		      st4     [r71] = $XPO$STATUS		// [r71] = r8
008000176000     0402		      br.sptk.few L$6 ;;
			   }
	         0410	L$28:												   // 000733
			   { .mmi 
010800C81200     0410		      adds    r72 = 64, r12 ;;								   // 000737
008044801240     0411		      ld2     r73 = [r72]

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 41
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

000008000000     0412		      nop.i   0 ;;
			   }
			   { .mib 
000008000000     0420		      nop.m   0
00A044900240     0421		      tbit.z  pr9, pr8 = r73, 0
008600008008     0422	       (pr8)  br.cond.dpnt.few L$30
			   }
			   { .mii 
012000006640     0430		      mov     r25 = 3									   // 000740
0000B0001E80     0431		      sxt4    r122 = r0
0000B4901E40     0432		      sxt4    r121 = r73
			   }
			   { .mib 
000008000000     0440		      nop.m   0
0000B2001E00     0441		      sxt4    r120 = IOB			// r120 = r32
00A000001000     0442		      br.call.sptk.many br0 = XPO$RMS_ERROR
			   }
			   { .mfb 
010807700040     0450		      mov     r1 = r119
000008000000     0451		      nop.f   0
00800016C000     0452		      br.sptk.few L$6 ;;								   // 000742
			   }
	         0460	L$30:												   // 000737
			   { .mii 
008042900A40     0460		      ld2     r41 = [r41]								   // 000749
01080A8B1380     0461		      adds    r78 = 216, r40								   // 000757
000008000000     0462		      nop.i   0
			   }
			   { .mlx 
000008000000     0470		      nop.m   0
000000000000     0471		      movl    r76 = 2129921
0190004066
			   }
			   { .mlx 
000008000000     0480		      nop.m   0
800000000000     0481		      movl    r77 = 2138666 ;;
0194404AA6
			   }
			   { .mmi 
018432968000     0490		      cmp4.lt pr0, pr6 = OUTPUT_LENGTH, r41 ;;	// pr0, pr6 = r52, r41			   // 000749
010804C01346     0491	       (pr6)  mov     r77 = r76									   // 000757
000008000000     0492		      nop.i   0 ;;
			   }
			   { .mfb 
008C84E9A000     04A0		      st4     [r78] = r77
000008000000     04A1		      nop.f   0
008000162000     04A2		      br.sptk.few L$6 ;;
			   }
	         04B0	L$25:												   // 000776
			   { .mii 
01080A8D9400     04B0		      adds    r80 = 236, r40								   // 000774
00A402F093C0     04B1		      extr.u  r79 = r47, 2, 1 ;;							   // 000779
00A03CF00200     04B2		      tbit.z  pr8, pr7 = r79, 0 ;;
			   }
			   { .mii 
008085001400     04C0		      ld4     r80 = [r80]								   // 000774
01C268000307     04C1	       (pr7)  cmp.eq.or.andcm pr12, pr13 = r0, r0 ;;						   // 000779

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 42
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

0000B5001440     04C2		      sxt4    r81 = r80									   // 000774
			   }
			   { .bbb 
00860000200C     04D0	       (pr12) br.cond.dpnt.few L$32								   // 000779
004000000000     04D1		      nop.b   0
00860003800D     04D2	       (pr13) br.cond.dpnt.few L$33
			   }
	         04E0	L$32:
			   { .mii 
000008000000     04E0		      nop.m   0
00A402F11480     04E1		      extr.u  r82 = r47, 4, 1 ;;							   // 000787
00A04D200280     04E2		      tbit.z  pr10, pr9 = r82, 0
			   }
			   { .mfb 
000008000000     04F0		      nop.m   0
000008000000     04F1		      nop.f   0
00860001600A     04F2	       (pr10) br.cond.dpnt.few L$35
			   }
			   { .mii 
010802898A00     0500		      adds    r40 = 76, r40								   // 000789
01CC73402000     0501		      cmp4.eq pr0, pr14 = 1, OUTPUT_LENGTH	// pr0, pr14 = 1, r52			   // 000790
000008000000     0502		      nop.i   0 ;;
			   }
			   { .mmi 
00B08A8694C0     0510		      ld4     r83 = [r40], -76 ;;							   // 000789
01C4300A63C0     0511		      cmp4.eq pr15, pr6 = r83, r0
000008000000     0512		      nop.i   0 ;;
			   }
			   { .mfb 
01C20000018E     0520	       (pr14) cmp.eq.or.andcm pr6, pr0 = r0, r0
000008000000     0521		      nop.f   0
00860000E006     0522	       (pr6)  br.cond.dpnt.few L$42								   // 000790
			   }
			   { .mmi 
010802908A40     0530		      adds    r41 = 4, r41 ;;								   // 000791
00B08A9F9500     0531		      ld4     r84 = [r41], -4
000008000000     0532		      nop.i   0 ;;
			   }
			   { .mib 
000008000000     0540		      nop.m   0
0000B5401500     0541		      sxt4    r84 = r84
004000000000     0542		      nop.b   0 ;;
			   }
			   { .mmi 
008005401500     0550		      ld1     r84 = [r84] ;;
01CC3D418000     0551		      cmp4.eq pr0, pr7 = 12, r84
000008000000     0552		      nop.i   0
			   }
			   { .mfb 
000008000000     0560		      nop.m   0
000008000000     0561		      nop.f   0
008600006007     0562	       (pr7)  br.cond.dpnt.few L$42
			   }
			   { .mii 
010800C61580     0570		      adds    r86 = 48, r12								   // 000793
012FF80FF540     0571		      addl    r85 = 65535, r0
000008000000     0572		      nop.i   0 ;;

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 43
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   }
			   { .mfb 
008C456AA000     0580		      st2     [r86] = r85
000008000000     0581		      nop.f   0
008000004000     0582		      br.sptk.few L$35 ;;								   // 000789
			   }
	         0590	L$42:
			   { .mmi 
010800C615C0     0590		      adds    r87 = 48, r12 ;;								   // 000795
008C457A6000     0591		      st2     [r87] = r83
000008000000     0592		      nop.i   0
			   }
	         05A0	L$35:												   // 000787
			   { .mii 
010802908A40     05A0		      adds    r41 = 4, r41								   // 000802
010800C61640     05A1		      adds    r89 = 48, r12								   // 000804
012000002640     05A2		      mov     r25 = 1 ;;								   // 000806
			   }
			   { .mii 
00B08A9F9600     05B0		      ld4     r88 = [r41], -4								   // 000802
010805145440     05B1		      adds    r81 = 34, r81								   // 000803
000008000000     05B2		      nop.i   0 ;;
			   }
			   { .mmi 
00AC45168180     05C0		      st2     [r81] = OUTPUT_LENGTH, 6 ;;	// [r81] = r52, 6
00AC851B0100     05C1		      st4     [r81] = r88, 4								   // 000802
000008000000     05C2		      nop.i   0 ;;
			   }
			   { .mmi 
00BC8D1B3500     05D0		      st4     [r81] = r89, -44 ;;							   // 000804
000008000000     05D1		      nop.m   0
0000B5101E00     05D2		      sxt4    r120 = r81								   // 000806
			   }
			   { .mfb 
000008000000     05E0		      nop.m   0
000008000000     05E1		      nop.f   0
00A000001000     05E2		      br.call.sptk.many br0 = SYS$PUT
			   }
			   { .mib 
010807700040     05F0		      mov     r1 = r119
00A0308001C0     05F1		      tbit.z  pr7, pr6 = r8, 0
00860000A006     05F2	       (pr6)  br.cond.dpnt.few L$43 ;;
			   }
			   { .mii 
010805119440     0600		      adds    r81 = 12, r81								   // 000809
012000006640     0601		      mov     r25 = 3
0000B2001E00     0602		      sxt4    r120 = IOB ;;			// r120 = r32
			   }
			   { .mmi 
00B08D1F9E80     0610		      ld4     r122 = [r81], -4 ;;
008085101E40     0611		      ld4     r121 = [r81]
0000B7A01E80     0612		      sxt4    r122 = r122 ;;
			   }
			   { .mib 
000008000000     0620		      nop.m   0
0000B7901E40     0621		      sxt4    r121 = r121
00A000001000     0622		      br.call.sptk.many br0 = XPO$RMS_ERROR

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 44
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   }
			   { .mfb 
010807700040     0630		      mov     r1 = r119
000008000000     0631		      nop.f   0
008000130000     0632		      br.sptk.few L$6 ;;								   // 000812
			   }
	         0640	L$43:												   // 000806
			   { .mii 
008042900A40     0640		      ld2     r41 = [r41]								   // 000819
01080A8B1800     0641		      adds    r96 = 216, r40								   // 000827
000008000000     0642		      nop.i   0
			   }
			   { .mlx 
000008000000     0650		      nop.m   0
000000000000     0651		      movl    r94 = 2129921
019000406F
			   }
			   { .mlx 
000008000000     0660		      nop.m   0
800000000000     0661		      movl    r95 = 2138666 ;;
0194404AAF
			   }
			   { .mmi 
018432968000     0670		      cmp4.lt pr0, pr6 = OUTPUT_LENGTH, r41 ;;	// pr0, pr6 = r52, r41			   // 000819
010805E017C6     0671	       (pr6)  mov     r95 = r94									   // 000827
000008000000     0672		      nop.i   0 ;;
			   }
			   { .mfb 
008C860BE000     0680		      st4     [r96] = r95
000008000000     0681		      nop.f   0
008000126000     0682		      br.sptk.few L$6 ;;
			   }
	         0690	L$33:												   // 000779
			   { .mii 
000008000000     0690		      nop.m   0
00A402F05840     0691		      extr.u  r97 = r47, 1, 1								   // 000841
00A04AF00280     0692		      tbit.z  pr10, pr9 = r47, 0 ;;
			   }
			   { .mii 
000008000000     06A0		      nop.m   0
00A03E100200     06A1		      tbit.z  pr8, pr7 = r97, 0 ;;
01C0000012C7     06A2	       (pr7)  cmp.eq.unc pr11, pr0 = r0, r0 ;;
			   }
			   { .mib 
01C000001308     06B0	       (pr8)  cmp.eq.unc pr12, pr0 = r0, r0
01C24800028B     06B1	       (pr11) cmp.eq.or.andcm pr10, pr9 = r0, r0
008600004009     06B2	       (pr9)  br.cond.dpnt.few L$45
			   }
			   { .mfb 
000008000000     06C0		      nop.m   0
000008000000     06C1		      nop.f   0
00860003800A     06C2	       (pr10) br.cond.dpnt.few L$46
			   }
	         06D0	L$45:												   // 000847
			   { .mii 
010802909880     06D0		      adds    r98 = 4, r41								   // 000855
018C6B400380     06D1		      cmp4.lt pr14, pr13 = 0, OUTPUT_LENGTH	// pr14, pr13 = 0, r52			   // 000857

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 45
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

000008000000     06D2		      nop.i   0 ;;
			   }
			   { .mfb 
008086200A40     06E0		      ld4     OUTPUT_ADDRESS = [r98]		// r41 = [r98]				   // 000855
000008000000     06E1		      nop.f   0
00860002800D     06E2	       (pr13) br.cond.dpnt.few L$49 ;;								   // 000857
			   }
	         06F0	L$51:
			   { .mmi 
010805131440     06F0		      adds    r81 = 24, r81 ;;								   // 000860
00A0851118C0     06F1		      ld4     r99 = [r81], 8
000008000000     06F2		      nop.i   0 ;;
			   }
			   { .mmi 
00B04D1C1900     0700		      ld2     r100 = [r81], -32 ;;							   // 000859
01002E3C9900     0701		      sub     AMT_BUFF_LEFT = r100, r99		// r100 = r100, r99
000008000000     0702		      nop.i   0 ;;
			   }
			   { .mfb 
018436468000     0710		      cmp4.lt pr0, pr6 = OUTPUT_LENGTH, 	// pr0, pr6 = r52, r100			   // 000862
					      AMT_BUFF_LEFT
000008000000     0711		      nop.f   0
00860000C006     0712	       (pr6)  br.cond.dpnt.few L$53
			   }
			   { .mii 
010805149440     0720		      adds    r81 = 36, r81								   // 000866
0000B6301980     0721		      sxt4    r102 = r99
0000B3401E40     0722		      sxt4    r121 = OUTPUT_LENGTH ;;		// r121 = r52				   // 000865
			   }
			   { .mii 
00B08D1E9940     0730		      ld4     r101 = [r81], -12								   // 000866
0000B2901E80     0731		      sxt4    r122 = OUTPUT_ADDRESS ;;		// r122 = r41				   // 000865
0000B6501940     0732		      sxt4    r101 = r101 ;;								   // 000866
			   }
			   { .mfb 
0100066CBE00     0740		      add     r120 = r101, r102
000008000000     0741		      nop.f   0
00A000001000     0742		      br.call.sptk.many br0 = OTS$MOVE							   // 000865
			   }
			   { .mii 
0080851019C0     0750		      ld4     r103 = [r81]								   // 000867
010807700040     0751		      mov     r1 = r119 ;;								   // 000865
0100034CF9C0     0752		      add     r103 = r103, OUTPUT_LENGTH ;;	// r103 = r103, r52			   // 000867
			   }
			   { .mmb 
010800000D00     0760		      mov     OUTPUT_LENGTH = r0		// r52 = r0				   // 000869
00BC8D1CFA00     0761		      st4     [r81] = r103, -24								   // 000867
008000016000     0762		      br.sptk.few L$91 ;;
			   }
	         0770	L$53:												   // 000862
			   { .mii 
010805149440     0770		      adds    r81 = 36, r81								   // 000874
0000B63018C0     0771		      sxt4    r99 = r99
0000B6401E40     0772		      sxt4    r121 = AMT_BUFF_LEFT		// r121 = r100				   // 000873
			   }
			   { .mii 
01002E468D00     0780		      sub     OUTPUT_LENGTH = OUTPUT_LENGTH, 	// r52 = r52, r100			   // 000875

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 46
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

					      AMT_BUFF_LEFT
0000B2901E80     0781		      sxt4    r122 = OUTPUT_ADDRESS		// r122 = r41				   // 000873
010006452A40     0782		      add     OUTPUT_ADDRESS = OUTPUT_ADDRESS,  // r41 = r41, r100			   // 000877
					      AMT_BUFF_LEFT ;;
			   }
			   { .mmi 
008085101A40     0790		      ld4     r105 = [r81] ;;								   // 000874
000008000000     0791		      nop.m   0
0000B6901A40     0792		      sxt4    r105 = r105 ;;
			   }
			   { .mfb 
0100063D3E00     07A0		      add     r120 = r105, r99
000008000000     07A1		      nop.f   0
00A000001000     07A2		      br.call.sptk.many br0 = OTS$MOVE							   // 000873
			   }
			   { .mii 
00B08D1F9AC0     07B0		      ld4     r107 = [r81], -4								   // 000885
012000002640     07B1		      mov     r25 = 1									   // 000887
010807700040     07B2		      mov     r1 = r119 ;;								   // 000873
			   }
			   { .mmi 
00A045111A80     07C0		      ld2     r106 = [r81], 8 ;;							   // 000884
00BC8D1D7E80     07C1		      st4     [r81] = r107, -6								   // 000885
000008000000     07C2		      nop.i   0 ;;
			   }
			   { .mmi 
00BC4D1D5780     07D0		      st2     [r81] = r106, -34 ;;							   // 000884
000008000000     07D1		      nop.m   0
0000B5101E00     07D2		      sxt4    r120 = r81								   // 000887
			   }
			   { .mfb 
000008000000     07E0		      nop.m   0
000008000000     07E1		      nop.f   0
00A000001000     07E2		      br.call.sptk.many br0 = SYS$WRITE
			   }
			   { .mib 
010807700040     07F0		      mov     r1 = r119
00A0308001C0     07F1		      tbit.z  pr7, pr6 = r8, 0
00860000A007     07F2	       (pr7)  br.cond.dpnt.few L$60
			   }
			   { .mmi 
010805131440     0800		      adds    r81 = 24, r81 ;;								   // 000889
00BC8D101A00     0801		      st4     [r81] = r0, -24
000008000000     0802		      nop.i   0
			   }
	         0810	L$91:												   // 000857
			   { .mfb 
018C03400240     0810		      cmp4.lt pr9, pr0 = 0, OUTPUT_LENGTH	// pr9, pr0 = 0, r52
000008000000     0811		      nop.f   0
0095FFFDC009     0812	       (pr9)  br.cond.dptk.few L$51
			   }
	         0820	L$49:
			   { .mlx 
01080A8B1C00     0820		      adds    r112 = 216, r40								   // 000904
800000000000     0821		      movl    r111 = 2129921 ;;
0190004077
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 47
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mfb 
008C870DE000     0830		      st4     [r112] = r111
000008000000     0831		      nop.f   0
0080000F0000     0832		      br.sptk.few L$6 ;;
			   }
	         0840	L$60:												   // 000887
			   { .mii 
010805111440     0840		      adds    r81 = 8, r81								   // 000892
012000006640     0841		      mov     r25 = 3
0000B2001E00     0842		      sxt4    r120 = IOB ;;			// r120 = r32
			   }
			   { .mmi 
00A085109E40     0850		      ld4     r121 = [r81], 4 ;;
008085101E80     0851		      ld4     r122 = [r81]
0000B7901E40     0852		      sxt4    r121 = r121 ;;
			   }
			   { .mib 
000008000000     0860		      nop.m   0
0000B7A01E80     0861		      sxt4    r122 = r122
00A000001000     0862		      br.call.sptk.many br0 = XPO$RMS_ERROR
			   }
			   { .mfb 
010807700040     0870		      mov     r1 = r119
000008000000     0871		      nop.f   0
0080000E8000     0872		      br.sptk.few L$6 ;;								   // 000895
			   }
	         0880	L$46:												   // 000841
			   { .bbb 
00860000200B     0880	       (pr11) br.cond.dpnt.few L$63								   // 000926
0086000E600C     0881	       (pr12) br.cond.dpnt.few L$6
004000000000     0882		      nop.b   0
			   }
	         0890	L$63:												   // 000939
			   { .mii 
0108028A8A00     0890		      adds    r40 = 84, r40								   // 000948
010802908A40     0891		      adds    r41 = 4, r41								   // 000939
018C33400000     0892		      cmp4.lt pr0, pr6 = 0, OUTPUT_LENGTH ;;	// pr0, pr6 = 0, r52			   // 000951
			   }
			   { .mmb 
00B08A859C40     08A0		      ld4     NEXT_POS = [r40], -84		// r113 = [r40], -84			   // 000948
008082900A40     08A1		      ld4     OUTPUT_ADDRESS = [r41]		// r41 = [r41]				   // 000949
0086000DA006     08A2	       (pr6)  br.cond.dpnt.few L$66								   // 000951
			   }
			   { .mii 
010805141440     08B0		      adds    r81 = 32, r81								   // 000957
0128204F5CC0     08B1		      addl    r115 = 98938, r0								   // 000983
000008000000     08B2		      nop.i   0 ;;
			   }
			   { .mfi 
00B04D1C1C80     08C0		      ld2     r114 = [r81], -32								   // 000957
000008000000     08C1		      nop.f   0
000008000000     08C2		      nop.i   0 ;;
			   }
	         08D0	L$68:												   // 000951
			   { .mii 
0119F80FC440     08D0		      adds    r17 = -2, r0								   // 000957
0000B7200A80     08D1		      sxt4    r42 = r114

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 48
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

0000B7101D00     08D2		      sxt4    r116 = NEXT_POS ;;		// r116 = r113
			   }
			   { .mfi 
01C002A00200     08E0		      cmp.eq  pr8, pr0 = r0, r42
000008000000     08E1		      nop.f   0
000008000000     08E2		      nop.i   0 ;;
			   }
			   { .mmi 
001000000048     08F0	       (pr8)  break.m 1048577
00C7080541C0     08F1		      setf.sig f7 = r42
010805121440     08F2		      adds    r81 = 16, r81 ;;
			   }
			   { .mmi 
00C7080E8180     0900		      setf.sig f6 = r116
00B08D1E0B00     0901		      ld4     r44 = [r81], -16
000008000000     0902		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0910		      nop.m   0
0000E000E240     0911		      fcvt.xf f9 = f7
000008000000     0912		      nop.i   0
			   }
			   { .mfi 
000008000000     0920		      nop.m   0
0000E000C200     0921		      fcvt.xf f8 = f6
000008000000     0922		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0930		      nop.m   0
000640910280     0931		      frcpa.s1 f10, pr8 = f8, f9
000008000000     0932		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0940		      nop.m   0
018448A021C8     0941	       (pr8)  fnma.s1 f7 = f10, f9, f1
000008000000     0942		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0950		      nop.m   0
010438A142C8     0951	       (pr8)  fma.s1  f11 = f10, f7, f10
000008000000     0952		      nop.i   0
			   }
			   { .mfi 
000008000000     0960		      nop.m   0
010438700188     0961	       (pr8)  fma.s1  f6 = f7, f7, f0
000008000000     0962		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0970		      nop.m   0
0104508001C8     0971	       (pr8)  fma.s1  f7 = f8, f10, f0
000008000000     0972		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0980		      nop.m   0
010430B16288     0981	       (pr8)  fma.s1  f10 = f11, f6, f11
000008000000     0982		      nop.i   0 ;;
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 49
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mfi 
000008000000     0990		      nop.m   0
0184389102C8     0991	       (pr8)  fnma.s1 f11 = f9, f7, f8
000008000000     0992		      nop.i   0
			   }
			   { .mfi 
000008000000     09A0		      nop.m   0
018448A02188     09A1	       (pr8)  fnma.s1 f6 = f10, f9, f1
000008000000     09A2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     09B0		      nop.m   0
010430A14288     09B1	       (pr8)  fma.s1  f10 = f10, f6, f10
000008000000     09B2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     09C0		      nop.m   0
010450B0E1C8     09C1	       (pr8)  fma.s1  f7 = f11, f10, f7
000008000000     09C2		      nop.i   0
			   }
			   { .mfi 
000008000000     09D0		      nop.m   0
018450902188     09D1	       (pr8)  fnma.s1 f6 = f9, f10, f1
000008000000     09D2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     09E0		      nop.m   0
010430A142C8     09E1	       (pr8)  fma.s1  f11 = f10, f6, f10
000008000000     09E2		      nop.i   0
			   }
			   { .mfi 
000008000000     09F0		      nop.m   0
018438910188     09F1	       (pr8)  fnma.s1 f6 = f9, f7, f8
000008000000     09F2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0A00		      nop.m   0
010430B0E288     0A01	       (pr8)  fma.s1  f10 = f11, f6, f7
000008000000     0A02		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0A10		      nop.m   0
0004D00141C0     0A11		      fcvt.fx.trunc.s1 f7 = f10
000008000000     0A12		      nop.i   0 ;;
			   }
			   { .mmi 
00870800EAC0     0A20		      getf.sig r43 = f7 ;;
010802B02AC0     0A21		      adds    r43 = 1, r43
000008000000     0A22		      nop.i   0 ;;
			   }
			   { .mfb 
01C402C56280     0A30		      cmp4.eq pr10, pr0 = r43, r44
000008000000     0A31		      nop.f   0
00860005400A     0A32	       (pr10) br.cond.dpnt.few L$70
			   }
			   { .mmi 
010805131440     0A40		      adds    r81 = 24, r81 ;;								   // 000960

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 50
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

00B08D1D0B40     0A41		      ld4     r45 = [r81], -24
000008000000     0A42		      nop.i   0 ;;
			   }
			   { .mfb 
01C402D00380     0A50		      cmp4.eq pr14, pr0 = r0, r45
000008000000     0A51		      nop.f   0
00860000E00E     0A52	       (pr14) br.cond.dpnt.few L$72
			   }
			   { .mii 
010805149440     0A60		      adds    r81 = 36, r81								   // 000965
012000002640     0A61		      mov     r25 = 1									   // 000967
000008000000     0A62		      nop.i   0 ;;
			   }
			   { .mmi 
00B08D1FCB80     0A70		      ld4     r46 = [r81], -2 ;;							   // 000965
00AC451E4180     0A71		      st2     [r81] = r114, 6								   // 000964
000008000000     0A72		      nop.i   0 ;;
			   }
			   { .mmi 
00BC8D15D600     0A80		      st4     [r81] = r46, -40 ;;							   // 000965
000008000000     0A81		      nop.m   0
0000B5101E00     0A82		      sxt4    r120 = r81								   // 000967
			   }
			   { .mfb 
000008000000     0A90		      nop.m   0
000008000000     0A91		      nop.f   0
00A000001000     0A92		      br.call.sptk.many br0 = SYS$WRITE
			   }
			   { .mib 
010807700040     0AA0		      mov     r1 = r119
00A0308001C0     0AA1		      tbit.z  pr7, pr6 = r8, 0
00860008A007     0AA2	       (pr7)  br.cond.dpnt.few L$74
			   }
			   { .mmi 
010805131440     0AB0		      adds    r81 = 24, r81 ;;								   // 000969
00BC8D101A00     0AB1		      st4     [r81] = r0, -24
000008000000     0AB2		      nop.i   0 ;;
			   }
	         0AC0	L$72:												   // 000960
			   { .mib 
010805141440     0AC0		      adds    r81 = 32, r81								   // 000979
0000B7100D40     0AC1		      sxt4    r53 = NEXT_POS			// r53 = r113
004000000000     0AC2		      nop.b   0 ;;
			   }
			   { .mmi 
00A045130440     0AD0		      ld2     r17 = [r81], 24 ;;
000008000000     0AD1		      nop.m   0
0000B1100D80     0AD2		      sxt4    r54 = r17 ;;
			   }
			   { .mii 
0119F80FC440     0AE0		      adds    r17 = -2, r0
01C003600200     0AE1		      cmp.eq  pr8, pr0 = r0, r54
000008000000     0AE2		      nop.i   0 ;;
			   }
			   { .mmi 
001000000048     0AF0	       (pr8)  break.m 1048577
00C70806C1C0     0AF1		      setf.sig f7 = r54

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 51
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

012000002640     0AF2		      mov     r25 = 1 ;;								   // 000980
			   }
			   { .mfi 
00C70806A180     0B00		      setf.sig f6 = r53									   // 000979
0000E000E240     0B01		      fcvt.xf f9 = f7
000008000000     0B02		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B10		      nop.m   0
0000E000C200     0B11		      fcvt.xf f8 = f6
000008000000     0B12		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B20		      nop.m   0
000640910280     0B21		      frcpa.s1 f10, pr8 = f8, f9
000008000000     0B22		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B30		      nop.m   0
018448A021C8     0B31	       (pr8)  fnma.s1 f7 = f10, f9, f1
000008000000     0B32		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B40		      nop.m   0
010438A142C8     0B41	       (pr8)  fma.s1  f11 = f10, f7, f10
000008000000     0B42		      nop.i   0
			   }
			   { .mfi 
000008000000     0B50		      nop.m   0
010438700188     0B51	       (pr8)  fma.s1  f6 = f7, f7, f0
000008000000     0B52		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B60		      nop.m   0
0104508001C8     0B61	       (pr8)  fma.s1  f7 = f8, f10, f0
000008000000     0B62		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B70		      nop.m   0
010430B16288     0B71	       (pr8)  fma.s1  f10 = f11, f6, f11
000008000000     0B72		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0B80		      nop.m   0
0184389102C8     0B81	       (pr8)  fnma.s1 f11 = f9, f7, f8
000008000000     0B82		      nop.i   0
			   }
			   { .mfi 
000008000000     0B90		      nop.m   0
018448A02188     0B91	       (pr8)  fnma.s1 f6 = f10, f9, f1
000008000000     0B92		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0BA0		      nop.m   0
010430A14288     0BA1	       (pr8)  fma.s1  f10 = f10, f6, f10
000008000000     0BA2		      nop.i   0 ;;
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 52
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mfi 
000008000000     0BB0		      nop.m   0
010450B0E1C8     0BB1	       (pr8)  fma.s1  f7 = f11, f10, f7
000008000000     0BB2		      nop.i   0
			   }
			   { .mfi 
000008000000     0BC0		      nop.m   0
018450902188     0BC1	       (pr8)  fnma.s1 f6 = f9, f10, f1
000008000000     0BC2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0BD0		      nop.m   0
010430A142C8     0BD1	       (pr8)  fma.s1  f11 = f10, f6, f10
000008000000     0BD2		      nop.i   0
			   }
			   { .mfi 
000008000000     0BE0		      nop.m   0
018438910188     0BE1	       (pr8)  fnma.s1 f6 = f9, f7, f8
000008000000     0BE2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0BF0		      nop.m   0
010430B0E288     0BF1	       (pr8)  fma.s1  f10 = f11, f6, f7
000008000000     0BF2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0C00		      nop.m   0
0004D00141C0     0C01		      fcvt.fx.trunc.s1 f7 = f10
000008000000     0C02		      nop.i   0 ;;
			   }
			   { .mmi 
00870800EDC0     0C10		      getf.sig r55 = f7 ;;
010803702DC0     0C11		      adds    r55 = 1, r55
000008000000     0C12		      nop.i   0 ;;
			   }
			   { .mmi 
00BC8D16F200     0C20		      st4     [r81] = r55, -56 ;;
000008000000     0C21		      nop.m   0
0000B5101E00     0C22		      sxt4    r120 = r81								   // 000980
			   }
			   { .mfb 
000008000000     0C30		      nop.m   0
000008000000     0C31		      nop.f   0
00A000001000     0C32		      br.call.sptk.many br0 = SYS$READ
			   }
			   { .mii 
010805111440     0C40		      adds    r81 = 8, r81								   // 000982
010807700040     0C41		      mov     r1 = r119									   // 000980
000008000000     0C42		      nop.i   0 ;;
			   }
			   { .mmi 
00B08D1F0EC0     0C50		      ld4     r59 = [r81], -8 ;;							   // 000982
01C407376240     0C51		      cmp4.eq pr9, pr0 = r59, r115							   // 000983
00A033B001C0     0C52		      tbit.z  pr7, pr6 = r59, 0 ;;							   // 000982
			   }
			   { .mfb 
01C238000009     0C60	       (pr9)  cmp.eq.or.andcm pr0, pr7 = r0, r0							   // 000983

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 53
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

000008000000     0C61		      nop.f   0
00860005A007     0C62	       (pr7)  br.cond.dpnt.few L$75								   // 000982
			   }
			   { .mii 
010805141440     0C70		      adds    r81 = 32, r81								   // 000993
010800001E80     0C71		      mov     r122 = r0									   // 000992
000008000000     0C72		      nop.i   0 ;;
			   }
			   { .mmi 
00A045104FC0     0C80		      ld2     r63 = [r81], 2 ;;								   // 000993
00A04510CF40     0C81		      ld2     r61 = [r81], 6
000008000000     0C82		      nop.i   0 ;;
			   }
			   { .mii 
00B08D1B0F00     0C90		      ld4     r60 = [r81], -40								   // 000994
01002BD7FE40     0C91		      sub     r121 = r63, r61								   // 000993
0000B3D00F40     0C92		      sxt4    r61 = r61 ;;								   // 000994
			   }
			   { .mii 
000008000000     0CA0		      nop.m   0
0000B3C00F00     0CA1		      sxt4    r60 = r60
0000B7901E40     0CA2		      sxt4    r121 = r121 ;;								   // 000992
			   }
			   { .mfb 
010003D79E00     0CB0		      add     r120 = r60, r61								   // 000994
000008000000     0CB1		      nop.f   0
00A000001000     0CB2		      br.call.sptk.many br0 = OTS$FILL							   // 000992
			   }
			   { .mfi 
010807700040     0CC0		      mov     r1 = r119
000008000000     0CC1		      nop.f   0
000008000000     0CC2		      nop.i   0
			   }
	         0CD0	L$70:												   // 000957
			   { .mii 
010805141440     0CD0		      adds    r81 = 32, r81								   // 001003
0000B7101000     0CD1		      sxt4    r64 = NEXT_POS			// r64 = r113
0119F80FC440     0CD2		      adds    r17 = -2, r0 ;;
			   }
			   { .mmi 
00A045108E00     0CE0		      ld2     r56 = [r81], 4 ;;
000008000000     0CE1		      nop.m   0
0000B3801040     0CE2		      sxt4    r65 = r56 ;;
			   }
			   { .mfi 
01C004100180     0CF0		      cmp.eq  pr6, pr0 = r0, r65
000008000000     0CF1		      nop.f   0
000008000000     0CF2		      nop.i   0 ;;
			   }
			   { .mmi 
001000000046     0D00	       (pr6)  break.m 1048577
00C7080821C0     0D01		      setf.sig f7 = r65
010800C910C0     0D02		      adds    r67 = 72, r12								   // 001001
			   }
			   { .mii 
00C708080180     0D10		      setf.sig f6 = r64									   // 001003
010800C91100     0D11		      adds    r68 = 72, r12								   // 001005

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 54
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

010800C911C0     0D12		      adds    r71 = 72, r12								   // 001009
			   }
			   { .mii 
00B08D1F8F80     0D20		      ld4     r62 = [r81], -4								   // 001007
0000B2901E80     0D21		      sxt4    r122 = OUTPUT_ADDRESS ;;		// r122 = r41				   // 001006
0000B3E00F80     0D22		      sxt4    r62 = r62									   // 001007
			   }
			   { .mfi 
000008000000     0D30		      nop.m   0
0000E000E240     0D31		      fcvt.xf f9 = f7									   // 001003
000008000000     0D32		      nop.i   0
			   }
			   { .mfi 
000008000000     0D40		      nop.m   0
0000E000C200     0D41		      fcvt.xf f8 = f6
000008000000     0D42		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0D50		      nop.m   0
000630910280     0D51		      frcpa.s1 f10, pr6 = f8, f9
000008000000     0D52		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0D60		      nop.m   0
018448A021C6     0D61	       (pr6)  fnma.s1 f7 = f10, f9, f1
000008000000     0D62		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0D70		      nop.m   0
010438A142C6     0D71	       (pr6)  fma.s1  f11 = f10, f7, f10
000008000000     0D72		      nop.i   0
			   }
			   { .mfi 
000008000000     0D80		      nop.m   0
010438700186     0D81	       (pr6)  fma.s1  f6 = f7, f7, f0
000008000000     0D82		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0D90		      nop.m   0
0104508001C6     0D91	       (pr6)  fma.s1  f7 = f8, f10, f0
000008000000     0D92		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0DA0		      nop.m   0
010430B16286     0DA1	       (pr6)  fma.s1  f10 = f11, f6, f11
000008000000     0DA2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0DB0		      nop.m   0
0184389102C6     0DB1	       (pr6)  fnma.s1 f11 = f9, f7, f8
000008000000     0DB2		      nop.i   0
			   }
			   { .mfi 
000008000000     0DC0		      nop.m   0
018448A02186     0DC1	       (pr6)  fnma.s1 f6 = f10, f9, f1
000008000000     0DC2		      nop.i   0 ;;
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 55
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mfi 
000008000000     0DD0		      nop.m   0
010430A14286     0DD1	       (pr6)  fma.s1  f10 = f10, f6, f10
000008000000     0DD2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0DE0		      nop.m   0
010450B0E1C6     0DE1	       (pr6)  fma.s1  f7 = f11, f10, f7
000008000000     0DE2		      nop.i   0
			   }
			   { .mfi 
000008000000     0DF0		      nop.m   0
018450902186     0DF1	       (pr6)  fnma.s1 f6 = f9, f10, f1
000008000000     0DF2		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0E00		      nop.m   0
010430A142C6     0E01	       (pr6)  fma.s1  f11 = f10, f6, f10
000008000000     0E02		      nop.i   0
			   }
			   { .mfi 
000008000000     0E10		      nop.m   0
018438910186     0E11	       (pr6)  fnma.s1 f6 = f9, f7, f8
000008000000     0E12		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0E20		      nop.m   0
010430B0E286     0E21	       (pr6)  fma.s1  f10 = f11, f6, f7
000008000000     0E22		      nop.i   0
			   }
			   { .mfi 
00C7080821C0     0E30		      setf.sig f7 = r65
000008000000     0E31		      nop.f   0
000008000000     0E32		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0E40		      nop.m   0
0004D0014200     0E41		      fcvt.fx.trunc.s1 f8 = f10
000008000000     0E42		      nop.i   0 ;;
			   }
			   { .mfi 
000008000000     0E50		      nop.m   0
01D040700240     0E51		      xma.l   f9 = f7, f8, f0
000008000000     0E52		      nop.i   0 ;;
			   }
			   { .mmi 
008708013080     0E60		      getf.sig r66 = f9 ;;
01002C280440     0E61		      sub     r17 = r64, r66
000008000000     0E62		      nop.i   0 ;;
			   }
			   { .mii 
010029170E00     0E70		      sub     r56 = r56, r17
0000B1100440     0E71		      sxt4    r17 = r17 ;;								   // 001007
01A4038681C0     0E72		      cmp4.ltu pr7, pr0 = OUTPUT_LENGTH, r56 ;; // pr7, pr0 = r52, r56			   // 001001
			   }
			   { .mii 
01000117DE00     0E80		      add     r120 = r62, r17								   // 001007

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 56
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

010803400E07     0E81	       (pr7)  mov     r56 = OUTPUT_LENGTH		// r56 = r52				   // 001001
000008000000     0E82		      nop.i   0 ;;
			   }
			   { .mmi 
008C84370000     0E90		      st4     [r67] = r56
008084401E40     0E91		      ld4     r121 = [r68]								   // 001005
000008000000     0E92		      nop.i   0 ;;
			   }
			   { .mii 
0080847011C0     0EA0		      ld4     r71 = [r71]								   // 001009
0100079E3C40     0EA1		      add     NEXT_POS = NEXT_POS, r121		// r113 = r113, r121			   // 001015
010007952A40     0EA2		      add     OUTPUT_ADDRESS = OUTPUT_ADDRESS,  // r41 = r41, r121			   // 001010
					      r121
			   }
			   { .mib 
000008000000     0EB0		      nop.m   0
000097901E40     0EB1		      zxt4    r121 = r121								   // 001005
00A000001000     0EB2		      br.call.sptk.many br0 = OTS$MOVE ;;
			   }
			   { .mii 
00B04D1F1C80     0EC0		      ld2     r114 = [r81], -8								   // 001012
01002C768D00     0EC1		      sub     OUTPUT_LENGTH = OUTPUT_LENGTH, 	// r52 = r52, r71			   // 001009
					      r71
010807700040     0EC2		      mov     r1 = r119 ;;								   // 001005
			   }
			   { .mmb 
018C034001C0     0ED0		      cmp4.lt pr7, pr0 = 0, OUTPUT_LENGTH	// pr7, pr0 = 0, r52			   // 000951
00BC8D1E5A00     0ED1		      st4     [r81] = r114, -24								   // 001012
0095FFF40007     0ED2	       (pr7)  br.cond.dptk.few L$68								   // 000951
			   }
			   { .mfb 
000008000000     0EE0		      nop.m   0
000008000000     0EE1		      nop.f   0
008000012000     0EE2		      br.sptk.few L$66 ;;
			   }
	         0EF0	L$74:												   // 000967
			   { .mii 
010805111440     0EF0		      adds    r81 = 8, r81								   // 000972
012000006640     0EF1		      mov     r25 = 3
0000B2001E00     0EF2		      sxt4    r120 = IOB ;;			// r120 = r32
			   }
			   { .mmi 
00A085109E40     0F00		      ld4     r121 = [r81], 4 ;;
008085101E80     0F01		      ld4     r122 = [r81]
0000B7901E40     0F02		      sxt4    r121 = r121 ;;
			   }
			   { .mib 
000008000000     0F10		      nop.m   0
0000B7A01E80     0F11		      sxt4    r122 = r122
00A000001000     0F12		      br.call.sptk.many br0 = XPO$RMS_ERROR
			   }
			   { .mfb 
010807700040     0F20		      mov     r1 = r119
000008000000     0F21		      nop.f   0
008000012000     0F22		      br.sptk.few L$6 ;;								   // 000975
			   }
	         0F30	L$75:												   // 000982

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 57
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mii 
010805111440     0F30		      adds    r81 = 8, r81								   // 000986
012000006640     0F31		      mov     r25 = 3
0000B2001E00     0F32		      sxt4    r120 = IOB ;;			// r120 = r32
			   }
			   { .mmi 
00A085109E40     0F40		      ld4     r121 = [r81], 4 ;;
008085101E80     0F41		      ld4     r122 = [r81]
0000B7901E40     0F42		      sxt4    r121 = r121 ;;
			   }
			   { .mib 
000008000000     0F50		      nop.m   0
0000B7A01E80     0F51		      sxt4    r122 = r122
00A000001000     0F52		      br.call.sptk.many br0 = XPO$RMS_ERROR
			   }
			   { .mfb 
010807700040     0F60		      mov     r1 = r119
000008000000     0F61		      nop.f   0
00800000A000     0F62		      br.sptk.few L$6 ;;								   // 000989
			   }
	         0F70	L$66:												   // 000951
			   { .mlx 
0108028A8A00     0F70		      adds    r40 = 84, r40								   // 001019
000000000000     0F71		      movl    r76 = 2129921 ;;								   // 001026
0190004066
			   }
			   { .mii 
008082801280     0F80		      ld4     r74 = [r40]								   // 001019
01080A809340     0F81		      adds    r77 = 132, r40								   // 001026
000008000000     0F82		      nop.i   0 ;;
			   }
			   { .mmi 
00BC8A8E3F00     0F90		      st4     [r40] = NEXT_POS, -4		// [r40] = r113, -4			   // 001020
008C84D98000     0F91		      st4     [r77] = r76								   // 001026
000008000000     0F92		      nop.i   0 ;;
			   }
			   { .mmi 
00BC8A894C00     0FA0		      st4     [r40] = r74, -80 ;;							   // 001019
000008000000     0FA1		      nop.m   0
000008000000     0FA2		      nop.i   0
			   }
	         0FB0	L$6:												   // 001445
			   { .mii 
01080A8B13C0     0FB0		      adds    r79 = 216, r40
010802201480     0FB1		      mov     r82 = FAILURE_ACTION		// r82 = r34
000008000000     0FB2		      nop.i   0 ;;
			   }
			   { .mmi 
008084F01400     0FC0		      ld4     r80 = [r79] ;;
000008000000     0FC1		      nop.m   0
00A035000000     0FC2		      tbit.z  pr0, pr6 = r80, 0 ;;
			   }
			   { .mmi 
010802101486     0FD0	       (pr6)  mov     r82 = SUCCESS_ACTION ;;		// r82 = r33
01C405200200     0FD1		      cmp4.eq pr8, pr0 = r0, $XPO$ACTION	// pr8, pr0 = r0, r82
000008000000     0FD2		      nop.i   0
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 58
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mfb 
000008000000     0FE0		      nop.m   0
000008000000     0FE1		      nop.f   0
008600010008     0FE2	       (pr8)  br.cond.dpnt.few L$84
			   }
			   { .mii 
01080A8B9E80     0FF0		      adds    r122 = 220, r40
0000B5201480     0FF1		      sxt4    r82 = $XPO$ACTION			// r82 = r82
01080A8B1580     0FF2		      adds    r86 = 216, r40
			   }
			   { .mii 
012000008640     1000		      mov     r25 = 4
0000B2001EC0     1001		      sxt4    r123 = IOB			// r123 = r32
0000B5001E40     1002		      sxt4    r121 = r80 ;;
			   }
			   { .mii 
008087A01E80     1010		      ld4     r122 = [r122]
012000003E00     1011		      mov     r120 = 1
010805211480     1012		      adds    r82 = 8, r82 ;;
			   }
			   { .mib 
000008000000     1020		      nop.m   0
0000B7A01E80     1021		      sxt4    r122 = r122
004000000000     1022		      nop.b   0
			   }
			   { .mmi 
00B0CD2F0040     1030		      ld8     r1 = [r82], -8 ;;
0080C5201480     1031		      ld8     r82 = [r82]
000008000000     1032		      nop.i   0 ;;
			   }
			   { .mib 
000008000000     1040		      nop.m   0
000E001A4180     1041		      mov     br6 = r82
00210000C000     1042		      br.call.sptk.few br0 = br6
			   }
			   { .mii 
008C85610000     1050		      st4     [r86] = r8
010807700040     1051		      mov     r1 = r119
000008000000     1052		      nop.i   0
			   }
	         1060	L$84:
			   { .mmi 
010802888A00     1060		      adds    r40 = 68, r40 ;;								   // 001451
00B08A8795C0     1061		      ld4     r87 = [r40], -68
000008000000     1062		      nop.i   0 ;;
			   }
			   { .mmi 
01C4357001C0     1070		      cmp4.eq pr7, pr6 = r0, r87 ;;
01C000001247     1071	       (pr7)  cmp.eq.unc pr9, pr0 = r0, r0
01C000001206     1072	       (pr6)  cmp.eq.unc pr8, pr0 = r0, r0 ;;
			   }
			   { .mib 
01C0000012C9     1080	       (pr9)  cmp.eq.unc pr11, pr0 = r0, r0
01C000001288     1081	       (pr8)  cmp.eq.unc pr10, pr0 = r0, r0
008600008009     1082	       (pr9)  br.cond.dpnt.few L$85
			   }
			   { .mmi 

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 59
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

010802860A00     1090		      adds    r40 = 48, r40 ;;
00B08A8A1640     1091		      ld4     r89 = [r40], -48
000008000000     1092		      nop.i   0 ;;
			   }
			   { .mii 
000008000000     10A0		      nop.m   0
00A40590D640     10A1		      extr.u  r89 = r89, 3, 1 ;;
00A065900340     10A2		      tbit.z  pr13, pr12 = r89, 0 ;;
			   }
			   { .mii 
01C0000012CD     10B0	       (pr13) cmp.eq.unc pr11, pr0 = r0, r0
01C00000128C     10B1	       (pr12) cmp.eq.unc pr10, pr0 = r0, r0
000008000000     10B2		      nop.i   0
			   }
	         10C0	L$85:
			   { .mfb 
000008000000     10C0		      nop.m   0
000008000000     10C1		      nop.f   0
00860000E00A     10C2	       (pr10) br.cond.dpnt.few L$88
			   }
			   { .mib 
01C0000013C9     10D0	       (pr9)  cmp.eq.unc pr15, pr0 = r0, r0							   // 001452
01C000001388     10D1	       (pr8)  cmp.eq.unc pr14, pr0 = r0, r0
008600008009     10D2	       (pr9)  br.cond.dpnt.few L$87
			   }
			   { .mmi 
010802860A00     10E0		      adds    r40 = 48, r40 ;;
00B08A8A1680     10E1		      ld4     r90 = [r40], -48
000008000000     10E2		      nop.i   0 ;;
			   }
			   { .mii 
000008000000     10F0		      nop.m   0
00A405A09680     10F1		      extr.u  r90 = r90, 2, 1 ;;
00A035A001C0     10F2		      tbit.z  pr7, pr6 = r90, 0 ;;
			   }
			   { .mii 
01C0000013C7     1100	       (pr7)  cmp.eq.unc pr15, pr0 = r0, r0
01C000001386     1101	       (pr6)  cmp.eq.unc pr14, pr0 = r0, r0
000008000000     1102		      nop.i   0 ;;
			   }
	         1110	L$87:
			   { .mib 
01C0000012CF     1110	       (pr15) cmp.eq.unc pr11, pr0 = r0, r0							   // 001451
01C00000128E     1111	       (pr14) cmp.eq.unc pr10, pr0 = r0, r0
00860000400A     1112	       (pr10) br.cond.dpnt.few L$88
			   }
			   { .mfb 
000008000000     1120		      nop.m   0
000008000000     1121		      nop.f   0
00860000800B     1122	       (pr11) br.cond.dpnt.few L$89
			   }
	         1130	L$88:												   // 001454
			   { .mib 
012000002640     1130		      mov     r25 = 1
0000B5701E00     1131		      sxt4    r120 = r87
00A000001000     1132		      br.call.sptk.many br0 = XST$FREE_TEMP
			   }

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 60
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

			   { .mib 
010807700040     1140		      mov     r1 = r119
00A0308001C0     1141		      tbit.z  pr7, pr6 = r8, 0
008600004007     1142	       (pr7)  br.cond.dpnt.few L$89
			   }
			   { .mmi 
010802888A00     1150		      adds    r40 = 68, r40 ;;								   // 001456
00BC8A800F00     1151		      st4     [r40] = r0, -68
000008000000     1152		      nop.i   0 ;;
			   }
	         1160	L$89:												   // 001451
			   { .mmi 
01080A8B0A00     1160		      adds    r40 = 216, r40 ;;								   // 001462
008082800200     1161		      ld4     r8 = [r40]
000008000000     1162		      nop.i   0 ;;
			   }
			   { .mib 
000008000000     1170		      nop.m   0
0000B0800200     1171		      sxt4    r8 = r8
004000000000     1172		      nop.b   0
			   }
			   { .mii 
000008000000     1180		      nop.m   0
0001540EC000     1181		      mov.i   rspfs = r118
010800C80300     1182		      adds    r12 = 64, r12 ;;
			   }
			   { .mib 
000008000000     1190		      nop.m   0
000E001EA000     1191		      mov     br0 = r117
000108001100     1192		      br.ret.sptk.many br0 ;;
			   }
				      .endp   XPO$PUT

Routine Size: 4512 bytes,    Routine Base: _XPO$CODE + 0000

				      .section .data
				      .type   XST$VALIDATE, @function 
				      .global  XST$VALIDATE
				      .section .data
				      .type   LIB$GET_EF, @function 
				      .global  LIB$GET_EF
				      .section .data
				      .type   SYS$QIOW, @function 
				      .global  SYS$QIOW
				      .section .data
				      .type   LIB$FREE_EF, @function 
				      .global  LIB$FREE_EF
				      .section .data
				      .type   XPO$RMS_ERROR, @function 
				      .global  XPO$RMS_ERROR
				      .section .data
				      .type   SYS$PUT, @function 
				      .global  SYS$PUT
				      .section .data
				      .type   OTS$MOVE, @function 
				      .global  OTS$MOVE
				      .section .data

XPUT                            Machine Code Listing             4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 61
X1.2-19                         XPO$PUT                         19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

				      .type   SYS$WRITE, @function 
				      .global  SYS$WRITE
				      .section .data
				      .type   SYS$WRITE, @function 
				      .global  SYS$WRITE
				      .section .data
				      .type   SYS$READ, @function 
				      .global  SYS$READ
				      .section .data
				      .type   OTS$FILL, @function 
				      .global  OTS$FILL
				      .section .data
				      .type   XST$FREE_TEMP, @function 
				      .global  XST$FREE_TEMP


;				Library Statistics
;
;					     -------- Symbols --------	    Pages
;	File				     Total    Loaded   Percent      Mapped
;
;  DISK$NORMS_OWN:[LASTOVICA.XPORT.VMSGEN]XPORT.L32;14
;					       590       122        20       270
;  DISK$NORMS_OWN:[LASTOVICA.XPORT.VMSGEN]XPOSYS.L32;14
;					        91        22        24        27
;  SYS$COMMON:[SYSLIB]STARLET.L32;1	     28352        24         0      2178




                                Source Listing                   4-FEB-2004 11:01:40  BLISS-32I T1.1-053                Page 62
                                Source Listing                  19-MAR-2002 10:52:16  [LASTOVICA.XPORT.VMSGEN]XPUT.BLI;2

COMMAND LINE:

BLISSXPUT/VARIANT=3/LIST/DEBUG
