which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			188 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* m4create.c   (c)Copyright Sequiter Software Inc., 1990-1994.  All rights reserved.  */
 | |
| 
 | |
| #include "d4all.h"
 | |
| #ifndef S4UNIX
 | |
| #ifdef __TURBOC__
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifndef S4MEMO_OFF
 | |
| #ifndef S4OFF_WRITE
 | |
| 
 | |
| int memo4file_create( MEMO4FILE *m4file, CODE4 *c4, DATA4 *d4, char *name )
 | |
| {
 | |
|   MEMO4HEADER *header_ptr ;
 | |
|   char buf[258] ;
 | |
|   int rc, save_flag, safety ;
 | |
| #ifndef S4MFOX
 | |
| #ifndef S4MNDX
 | |
|   char memo_name[9] ;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
|   m4file->data = d4 ;
 | |
| 
 | |
| #ifndef S4MNDX
 | |
| #ifdef S4DEBUG
 | |
|   if ( sizeof( MEMO4HEADER ) > c4->mem_size_memo )
 | |
|     e4severe( e4info, E4_MEMO4FILE_CR ) ;
 | |
| 
 | |
| #ifdef S4MFOX
 | |
|   if ( c4->mem_size_memo <= 32 || c4->mem_size_memo > 512 * 32 )
 | |
| #else
 | |
|     if ( c4->mem_size_memo % 512 != 0 || c4->mem_size_memo > 512 * 63 )
 | |
| #endif
 | |
|       e4severe( e4info, E4_INFO_C4C ) ;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
|   header_ptr = (MEMO4HEADER *)u4alloc_er( c4, sizeof(MEMO4HEADER) ) ;
 | |
|   if ( header_ptr == 0 )
 | |
|     return -1 ;
 | |
| 
 | |
| #ifdef S4MFOX
 | |
|   m4file->block_size = (short)c4->mem_size_memo ;
 | |
|   if ( m4file->block_size > 512 )
 | |
|     header_ptr->next_block = 0x01000000 ;
 | |
|   else
 | |
|   {
 | |
|     header_ptr->next_block = B4BLOCK_SIZE/m4file->block_size ;
 | |
|     header_ptr->next_block = x4reverse_long( (void *)&header_ptr->next_block) ;
 | |
|   }
 | |
|   header_ptr->block_size = x4reverse_short( (void *)&m4file->block_size ) ;
 | |
| #else
 | |
| #ifdef S4MNDX
 | |
|   m4file->block_size = MEMO4SIZE ;
 | |
|   header_ptr->next_block = 1 ;
 | |
| #else
 | |
|   header_ptr->next_block = 1 ;
 | |
|   header_ptr->x102 = 0x102 ;
 | |
|   m4file->block_size = header_ptr->block_size = (short)c4->mem_size_memo ;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
|   if ( name == 0 )
 | |
|   {
 | |
|     u4name_piece( buf, sizeof( buf ), d4->file.name, 1, 0 ) ;
 | |
|     u4name_ext( buf, sizeof( buf ), "TMP", 1 ) ;
 | |
| 
 | |
|     save_flag = c4->create_error ;
 | |
|     safety = c4->safety ;
 | |
|     c4->create_error = c4->safety = 0 ;
 | |
|     rc = file4create( &m4file->file, c4, buf, 1 ) ;
 | |
|     c4->create_error = save_flag ;
 | |
|     c4->safety = safety ;
 | |
| 
 | |
|     if ( rc == 0 )
 | |
|       m4file->file.is_temp = 1 ;
 | |
|     else
 | |
|       return -1 ;
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     u4ncpy( buf, name, sizeof( buf ) ) ;
 | |
| #ifndef S4MFOX
 | |
| #ifndef S4MNDX
 | |
|     memset( memo_name, 0, sizeof( memo_name ) ) ;
 | |
|     u4name_piece( memo_name, sizeof(memo_name), name, 0, 0 ) ;
 | |
|     memcpy( header_ptr->file_name, memo_name, 8 ) ;
 | |
| #endif
 | |
| #endif
 | |
| #ifdef S4MFOX
 | |
| #ifdef S4UNIX
 | |
|     u4name_ext( buf, sizeof(buf), "fpt", 1 ) ;
 | |
| #else
 | |
|     u4name_ext( buf, sizeof(buf), "FPT", 1 ) ;
 | |
| #endif
 | |
| #else
 | |
| #ifdef S4UNIX
 | |
|     u4name_ext( buf, sizeof(buf), "dbt", 1 ) ;
 | |
| #else
 | |
|     u4name_ext( buf, sizeof(buf), "DBT", 1 ) ;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
|     file4create( &m4file->file, c4, name, 1 ) ;
 | |
|   }
 | |
| #ifdef S4BYTE_SWAP
 | |
|   header_ptr->next_block = x4reverse_long( (void *)&header_ptr->next_block ) ;
 | |
| #ifndef S4MFOX
 | |
|   header_ptr->x102 = 0x201 ;
 | |
| #endif
 | |
|   header_ptr->block_size = x4reverse_short( (void *)&header_ptr->block_size ) ;
 | |
| #endif
 | |
| 
 | |
|   rc = file4write( &m4file->file, 0L, header_ptr, sizeof(  MEMO4HEADER ) ) ;
 | |
| #ifdef S4MFOX
 | |
|   file4len_set( &m4file->file, 512 ) ;
 | |
| #endif
 | |
|   u4free( header_ptr ) ;
 | |
|   return rc ;
 | |
| }
 | |
| 
 | |
| int memo4file_dump( MEMO4FILE *f4memo, long memo_id, char *ptr, unsigned len )
 | |
| {
 | |
|   long pos ;
 | |
|   int  rc ;
 | |
| 
 | |
| #ifdef S4MNDX
 | |
|   char one_a = 0x1A ;
 | |
| #else
 | |
|   MEMO4BLOCK  memo_block ;
 | |
|   S4LONG long_len = (S4LONG) len ;
 | |
| 
 | |
| #ifdef S4MFOX
 | |
| #ifdef S4BYTE_SWAP
 | |
|   memo_block.type = (S4LONG)1 ;
 | |
|   memo_block.num_chars = long_len ;
 | |
| #else
 | |
|   memo_block.type = 0x01000000 ;
 | |
|   memo_block.num_chars = x4reverse_long( (void *)&long_len ) ;
 | |
| #endif
 | |
| #else
 | |
|   memo_block.minus_one = -1 ;
 | |
|   memo_block.start_pos = sizeof(S4LONG) + 2 * sizeof( short ) ;
 | |
|   memo_block.num_chars = memo_block.start_pos + long_len ;
 | |
| #ifdef S4BYTE_SWAP
 | |
|   memo_block.start_pos = x4reverse_short( (void *)&memo_block.start_pos ) ;
 | |
|   memo_block.num_chars = x4reverse_long( (void *)&memo_block.num_chars ) ;
 | |
| #endif
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
|   pos = memo_id * f4memo->block_size ;
 | |
| 
 | |
| #ifndef S4MNDX
 | |
|   rc = file4write( &f4memo->file, pos, &memo_block, sizeof( MEMO4BLOCK ) ) ;
 | |
|   if ( rc != 0 )
 | |
|     return rc ;
 | |
| #ifdef S4MFOX
 | |
|   pos += sizeof( MEMO4BLOCK) ;
 | |
| #else
 | |
|   pos += sizeof(S4LONG) + 2*sizeof(short) ;
 | |
| #endif
 | |
| #endif
 | |
| 
 | |
| #ifdef S4MNDX
 | |
|   rc = file4write( &f4memo->file, pos, ptr, len ) ;
 | |
|   if ( rc != 0 )
 | |
|     return rc ;
 | |
|   return file4write( &f4memo->file, pos+len, &one_a, 1 ) ;
 | |
| #else
 | |
|   rc = file4write( &f4memo->file, pos, ptr, len ) ;
 | |
|   /*      #ifndef S4OPTIMIZE_OFF */
 | |
|   /*         if ( rc < 0 ) */
 | |
|   /*            return rc ; */
 | |
|   /*         if ( f4memo->file->buffer_writes == 1 ) */
 | |
|   /*            if ( f4memo->block_size < f4memo->data->code_base->opt->block_size ) */
 | |
|   /*               opt4repeat_write( &f4memo->file,  */
 | |
|   /*      #else */
 | |
|   return rc ;
 | |
|   /*      #endif */
 | |
| #endif
 | |
| }
 | |
| 
 | |
| #endif  /* S4OFF_WRITE */
 | |
| #endif  /* S4MEMO_OFF */
 |