"James_A._Gray.OsbuSouth"@XEROX.COM (05/27/88)
+-+-+-+ Beginning of part 3 +-+-+-+ V __copy_text( FAO( "$!!!12* concatenate ALL parts to ONE file and execute (@) Xthat file." ) ); X __copy_text( FAO( "$!!" ) ); X X !+ V ! Skip the first part for now since the number of parts will have to be corre Xcted later. X !- X X POSITION( BEGINNING_OF( b_packed ) ); X __find_part_end; X MOVE_HORIZONTAL( -(CURRENT_OFFSET + 1) ); X X !+ X ! Determine if a GOTO/label pair is needed for Part 1/Part 2 boundary. X !- X X MOVE_VERTICAL( -1 ); X s_x := CURRENT_CHARACTER; X MOVE_VERTICAL( 1 ); X IF s_x = "$" X THEN X i_label_needed := 1; X ELSE X i_label_needed := 0; X ENDIF; X X !+ X ! Initialize the number of parts and the starting part number. X !- X X i_part_num := 2; X i_parts := 1; X X !+ X ! Loop through the rest of the parts moving the text to part buffers. X !- X X LOOP X X !+ X ! Move the next part into the part buffer. X !- X X POSITION( b_packed ); X EXITIF MARK( NONE ) = END_OF( b_packed ); X X MOVE_HORIZONTAL( -(CURRENT_OFFSET) ); X m_part_begin := MARK( NONE ); X __find_part_end; X MOVE_HORIZONTAL( -(CURRENT_OFFSET + 1) ); X r_part := CREATE_RANGE( m_part_begin, MARK( NONE ), NONE ); X b_part := CREATE_BUFFER( FAO( "{Part !UL}", i_part_num ) ); X POSITION( b_part ); X COPY_TEXT( FAO( s_part_begin, i_part_num ) ); X IF i_label_needed <> 0 X THEN X SPLIT_LINE; X COPY_TEXT( FAO( s_part_label, i_part_num ) ); X ENDIF; X POSITION( END_OF( b_part ) ); X MOVE_TEXT( r_part ); X POSITION( END_OF( b_part ) ); X X !+ X ! Determine if a GOTO/label pair is needed for Part n/Part n+1 boundary. X !- X X MOVE_VERTICAL( -1 ); X s_x := CURRENT_CHARACTER; X MOVE_VERTICAL( 1 ); X IF ( s_x = "$" ) AND ( END_OF( r_part ) <> END_OF( b_packed ) ) X THEN X __copy_text( FAO( s_part_goto, i_part_num + 1 ) ); X i_label_needed := 1; X ELSE X i_label_needed := 0; X ENDIF; X COPY_TEXT( FAO( s_part_end, i_part_num ) ); X X !+ X ! Increment to the next part. X !- X X i_part_num := i_part_num + 1; X i_parts := i_parts + 1; X X ENDLOOP; X X !+ V ! Now that the number of parts is known, update the number of parts in part 1 X and move it to it's part buffer. X !- X X POSITION( m_attention_text ); X r_parts := SEARCH( "999", FORWARD ); X ERASE( r_parts ); X POSITION( END_OF( r_parts ) ); X COPY_TEXT( STR( i_parts ) ); X b_part := CREATE_BUFFER( "{Part 1}" ); X POSITION( b_part ); X MOVE_TEXT( b_packed ); X POSITION( END_OF( b_part ) ); X MOVE_VERTICAL( -1 ); X s_x := CURRENT_CHARACTER; X MOVE_VERTICAL( 1 ); X IF s_x = "$" X THEN X __copy_text( FAO( s_part_goto, 2 ) ); X ENDIF; X COPY_TEXT( FAO( s_part_end, 1 ) ); X DELETE( b_packed ); X X !+ X ! Determine the maximum number of digits in part numbers. X !- X X IF i_parts <= 9 X THEN X i_digits := 1; X ELSE X IF i_parts <= 99 X THEN X i_digits := 2; X ELSE X i_digits := 3; X ENDIF; X ENDIF; X X !+ X ! Initialize the starting part number. X !- X X i_part_num := 1; X X !+ V ! Loop through all of the parts setting the file name to be associated with t Xhat part. X !- X X LOOP X X EXITIF i_part_num > i_parts; X b_part := __find_buffer( FAO( "{Part !UL}", i_part_num ) ); X X !+ X ! Set the name of the output file for this part. X !- X V SET( OUTPUT_FILE, b_part, FAO( "!AS!#ZL_OF_!UL", s_output_file, i_digits, i X_part_num, i_parts ) ); X X !+ X ! Increment to the next part. X !- X X i_part_num := i_part_num + 1; X X ENDLOOP; X XENDIF; X X!+ X! Create final output message buffer and fill it. X!- X Xb_message := CREATE_BUFFER( "{Message}" ); XPOSITION( b_message ); V__copy_text( FAO( "SHARE-file !AS was written in !UL part!%S as follows:", s_sh Xare_file, i_parts ) ); XSET( NO_WRITE, b_message, OFF ); XSET( OUTPUT_FILE, b_message, "SYS$COMMAND" ); X XEXIT; X$ DELETE/NOLOG/NOCONFIRM VMS_SHARE_DUMMY.DUMMY;* V$ DIRECTORY/DATE=CREATED/NOHEADER/SIZE=USED/VERSIONS=1/WIDTH=(FILENAME=47,SIZE= X4) 'SHARE_FILE'*_OF_* X$ VERIFY = F$VERIFY( VERIFY ) $ GOSUB UNPACK_FILE $ EXIT -+-+-+-+-+ End of part 3 +-+-+-+-+-