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
		
			
				
	
	
		
			591 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			591 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* r4style.c   (c)Copyright Sequiter Software Inc., 1991-1994.  All rights reserved. */
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION style4lookup( REPORT4 *report, char *style_name )
 | 
						|
{
 | 
						|
  STYLE4 *style_on;
 | 
						|
 | 
						|
  if( report == NULL || style_name == NULL )
 | 
						|
    return NULL;
 | 
						|
 | 
						|
  style_on = (STYLE4 *)l4first( &report->styles );
 | 
						|
  while( style_on )
 | 
						|
  {
 | 
						|
#ifdef S4WINDOWS
 | 
						|
    if( !lstrcmp( (LPCSTR)style_name, (LPCSTR)style_on->name ) )
 | 
						|
#else
 | 
						|
      if( !strcmp( (char *)style_name, (char *)style_on->name ) )
 | 
						|
#endif
 | 
						|
        return style_on;
 | 
						|
 | 
						|
    style_on = (STYLE4 *)l4next( &report->styles, style_on );
 | 
						|
  }
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
BOOL S4FUNCTION style4free( REPORT4 *report, STYLE4 *style )
 | 
						|
{
 | 
						|
  if( report == NULL || style == NULL )
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
 | 
						|
  if( report )
 | 
						|
    l4remove( &report->styles, style );
 | 
						|
 | 
						|
#ifdef S4WINDOWS
 | 
						|
  if( style->screen_font )
 | 
						|
  {
 | 
						|
    DeleteObject( style->screen_font );
 | 
						|
    style->screen_font = NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  if( style->printer_font )
 | 
						|
  {
 | 
						|
    DeleteObject( style->printer_font );
 | 
						|
    style->printer_font = NULL;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
  if( style->codes_before )
 | 
						|
  {
 | 
						|
    u4free( style->codes_before );
 | 
						|
    style->codes_before = NULL;
 | 
						|
    style->codes_before_len = 0;
 | 
						|
  }
 | 
						|
  if( style->codes_after )
 | 
						|
  {
 | 
						|
    u4free( style->codes_after );
 | 
						|
    style->codes_after = NULL;
 | 
						|
    style->codes_after_len = 0;
 | 
						|
  }
 | 
						|
 | 
						|
  u4free( style );
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
BOOL S4FUNCTION style4delete( REPORT4 *report, char *style_name )
 | 
						|
{
 | 
						|
  STYLE4 *style_on;
 | 
						|
 | 
						|
  if( report == NULL || style_name == NULL )
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
  style_on = style4lookup( report, style_name );
 | 
						|
  if( !style_on )
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
  style4free( report, style_on );
 | 
						|
  return TRUE;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION style4color( PSTYLE4 style, R4COLORREF color )
 | 
						|
{
 | 
						|
  if( style == NULL )
 | 
						|
    return -1;
 | 
						|
 | 
						|
  style->color = color;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION style4default_set( PREPORT4 report, PSTYLE4 style )
 | 
						|
{
 | 
						|
  if( report == NULL || style == NULL )
 | 
						|
    return -1;
 | 
						|
 | 
						|
  report->active_style = style;
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef S4WINDOWS
 | 
						|
STYLE4 FAR* S4FUNCTION style4create( REPORT4 *report, PR4LOGFONT lfont,
 | 
						|
                                    char *name, R4COLORREF color, int point_size )
 | 
						|
{
 | 
						|
  STYLE4 *style = NULL;
 | 
						|
#ifdef S4WIN32
 | 
						|
  LOGFONT ntFont;
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
  if( !name || name[0] == '\0' )
 | 
						|
  {
 | 
						|
    if( report )
 | 
						|
      e4describe( report->code_base, e4parm, E4_REP_NOSNAM, 0, 0 );
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  if( report )
 | 
						|
  {
 | 
						|
    style = style4lookup( report, name );
 | 
						|
    if( style != NULL )
 | 
						|
    {
 | 
						|
      e4describe( report->code_base, e4style_create, E4_REP_DUPSNAM, 0, 0 );
 | 
						|
      return NULL;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if( report )
 | 
						|
    style = (PSTYLE4)u4alloc_free( report->code_base, sizeof(STYLE4) );
 | 
						|
  else
 | 
						|
    style = (PSTYLE4)u4alloc( sizeof(STYLE4) );
 | 
						|
 | 
						|
  if( style == NULL )
 | 
						|
    return NULL;
 | 
						|
 | 
						|
  style->color = color;
 | 
						|
  style->point_size = point_size;
 | 
						|
  u4ncpy( style->name, name, sizeof(style->name) ) ;
 | 
						|
  memcpy( &style->lfont, lfont, sizeof(R4LOGFONT) ) ;
 | 
						|
 | 
						|
#ifdef S4WIN32
 | 
						|
  ntFont.lfHeight         = lfont->lfHeight         ;
 | 
						|
  ntFont.lfWidth          = lfont->lfWidth          ;
 | 
						|
  ntFont.lfEscapement     = lfont->lfEscapement     ;
 | 
						|
  ntFont.lfOrientation    = lfont->lfOrientation    ;
 | 
						|
  ntFont.lfWeight         = lfont->lfWeight         ;
 | 
						|
  ntFont.lfItalic         = lfont->lfItalic         ;
 | 
						|
  ntFont.lfUnderline      = lfont->lfUnderline      ;
 | 
						|
  ntFont.lfStrikeOut      = lfont->lfStrikeOut      ;
 | 
						|
  ntFont.lfCharSet        = lfont->lfCharSet        ;
 | 
						|
  ntFont.lfOutPrecision   = lfont->lfOutPrecision   ;
 | 
						|
  ntFont.lfClipPrecision  = lfont->lfClipPrecision  ;
 | 
						|
  ntFont.lfQuality        = lfont->lfQuality        ;
 | 
						|
  ntFont.lfPitchAndFamily = lfont->lfPitchAndFamily ;
 | 
						|
  lstrcpy( ntFont.lfFaceName, lfont->lfFaceName );
 | 
						|
  memcpy( &style->ntFont, &ntFont, sizeof(LOGFONT) );
 | 
						|
  style->screen_font =  CreateFontIndirect( (const LOGFONT FAR*)&style->ntFont ) ;
 | 
						|
  if ( style->screen_font == NULL )
 | 
						|
  {
 | 
						|
    u4free( style );
 | 
						|
    return NULL ;
 | 
						|
  }
 | 
						|
#else
 | 
						|
  style->screen_font =  CreateFontIndirect( (const LOGFONT FAR*)&style->lfont ) ;
 | 
						|
  if ( style->screen_font == NULL )
 | 
						|
  {
 | 
						|
    u4free( style );
 | 
						|
    return NULL ;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  style->codes_before_len = style->codes_after_len = 0;
 | 
						|
  style->codes_before = NULL;
 | 
						|
  style->codes_after = NULL;
 | 
						|
 | 
						|
  if( report )
 | 
						|
  {
 | 
						|
    style->menu_id = 600 + report->styles.n_link;
 | 
						|
    l4add( &report->styles, style ) ;
 | 
						|
 | 
						|
    if ( report->active_style == NULL )
 | 
						|
      report->active_style =  style ;
 | 
						|
  }
 | 
						|
 | 
						|
  return style ;
 | 
						|
}
 | 
						|
#else
 | 
						|
PSTYLE4 style4create( PREPORT4 report, char *name, int before_len, char *before, int after_len, char *after )
 | 
						|
{
 | 
						|
  STYLE4 *style = NULL;
 | 
						|
 | 
						|
  if( !name || name[0] == '\0' )
 | 
						|
  {
 | 
						|
    if( report )
 | 
						|
      e4describe( report->code_base, e4parm, E4_REP_NOSNAM, 0, 0 );
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  if( report )
 | 
						|
  {
 | 
						|
    style = style4lookup( report, name );
 | 
						|
    if( style != NULL )
 | 
						|
    {
 | 
						|
      e4describe( report->code_base, e4style_create, E4_REP_DUPSNAM, 0, 0 );
 | 
						|
      return NULL;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if( report )
 | 
						|
    style = (PSTYLE4)u4alloc_free( report->code_base, sizeof(STYLE4) );
 | 
						|
  else
 | 
						|
    style = (PSTYLE4)u4alloc( sizeof(STYLE4) );
 | 
						|
 | 
						|
  if( style == NULL )
 | 
						|
    return NULL;
 | 
						|
 | 
						|
  u4ncpy( style->name, name, sizeof( style->name ) );
 | 
						|
 | 
						|
  if( before_len > 0 && before != NULL )
 | 
						|
  {
 | 
						|
    style->codes_before_len = before_len;
 | 
						|
    style->codes_before = (char *)u4alloc( before_len );
 | 
						|
    if( style->codes_before == NULL )
 | 
						|
      return NULL;
 | 
						|
 | 
						|
    memcpy( style->codes_before, before, before_len );
 | 
						|
  }
 | 
						|
 | 
						|
  if( after_len >0 && after != NULL )
 | 
						|
  {
 | 
						|
    style->codes_after_len = after_len;
 | 
						|
    style->codes_after = (char *)u4alloc( after_len );
 | 
						|
    if( style->codes_after == NULL )
 | 
						|
    {
 | 
						|
      if( style->codes_before != NULL )
 | 
						|
        u4free( style->codes_before );
 | 
						|
      return NULL;
 | 
						|
    }
 | 
						|
    memcpy( style->codes_after, after, after_len );
 | 
						|
  }
 | 
						|
 | 
						|
  if( report )
 | 
						|
  {
 | 
						|
    l4add( &report->styles, style );
 | 
						|
 | 
						|
    if( report->active_style == NULL )
 | 
						|
      report->active_style = style;
 | 
						|
  }
 | 
						|
 | 
						|
  return style;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
void style4swap( POBJ4 obj, PSTYLE4 old, PSTYLE4 newstyle )
 | 
						|
{
 | 
						|
  POBJ4 obj_on;
 | 
						|
 | 
						|
  if( obj->style == old )
 | 
						|
    obj->style = newstyle;
 | 
						|
 | 
						|
  obj_on = (POBJ4)l4first( &obj->contained );
 | 
						|
  while( obj_on )
 | 
						|
  {
 | 
						|
    style4swap( obj_on, old, newstyle );
 | 
						|
    obj_on = (POBJ4)l4next( &obj->contained, obj_on );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void style4changeLoadedStyles( REPORT4 *report, STYLE4 *old_style, STYLE4 *new_style )
 | 
						|
{
 | 
						|
  GROUP4 *group_on;
 | 
						|
  AREA4 *area_on;
 | 
						|
  OBJ4 *obj_on;
 | 
						|
 | 
						|
 | 
						|
  area_on = (AREA4 *)l4first( &report->page_header_footer->header_areas );
 | 
						|
  while( area_on )
 | 
						|
  {
 | 
						|
    obj_on = (OBJ4 *)l4first( &area_on->objects );
 | 
						|
    while( obj_on )
 | 
						|
    {
 | 
						|
      if( obj_on->style == old_style )
 | 
						|
      {
 | 
						|
        style4swap( obj_on, old_style, new_style );
 | 
						|
      }
 | 
						|
      obj_on = (OBJ4 *)l4next( &area_on->objects, obj_on );
 | 
						|
    }
 | 
						|
    area_on = (AREA4 *)l4next( &report->page_header_footer->header_areas, area_on );
 | 
						|
  }
 | 
						|
 | 
						|
  area_on = (AREA4 *)l4first( &report->page_header_footer->footer_areas );
 | 
						|
  while( area_on )
 | 
						|
  {
 | 
						|
    obj_on = (OBJ4 *)l4first( &area_on->objects );
 | 
						|
    while( obj_on )
 | 
						|
    {
 | 
						|
      if( obj_on->style == old_style )
 | 
						|
      {
 | 
						|
        style4swap( obj_on, old_style, new_style );
 | 
						|
      }
 | 
						|
      obj_on = (OBJ4 *)l4next( &area_on->objects, obj_on );
 | 
						|
    }
 | 
						|
    area_on = (AREA4 *)l4next( &report->page_header_footer->footer_areas, area_on );
 | 
						|
  }
 | 
						|
 | 
						|
  group_on = (GROUP4 *)l4first( &report->groups );
 | 
						|
  while( group_on )
 | 
						|
  {
 | 
						|
    area_on = (AREA4 *)l4first( &group_on->header_areas );
 | 
						|
    while( area_on )
 | 
						|
    {
 | 
						|
      obj_on = (OBJ4 *)l4first( &area_on->objects );
 | 
						|
      while( obj_on )
 | 
						|
      {
 | 
						|
        if( obj_on->style == old_style )
 | 
						|
        {
 | 
						|
          style4swap( obj_on, old_style, new_style );
 | 
						|
        }
 | 
						|
        obj_on = (OBJ4 *)l4next( &area_on->objects, obj_on );
 | 
						|
      }
 | 
						|
      area_on = (AREA4 *)l4next( &group_on->header_areas, area_on );
 | 
						|
    }
 | 
						|
 | 
						|
    area_on = (AREA4 *)l4first( &group_on->footer_areas );
 | 
						|
    while( area_on )
 | 
						|
    {
 | 
						|
      obj_on = (OBJ4 *)l4first( &area_on->objects );
 | 
						|
      while( obj_on )
 | 
						|
      {
 | 
						|
        if( obj_on->style == old_style )
 | 
						|
        {
 | 
						|
          style4swap( obj_on, old_style, new_style );
 | 
						|
        }
 | 
						|
        obj_on = (OBJ4 *)l4next( &area_on->objects, obj_on );
 | 
						|
      }
 | 
						|
      area_on = (AREA4 *)l4next( &group_on->footer_areas, area_on );
 | 
						|
    }
 | 
						|
    group_on = (GROUP4 *)l4next( &report->groups, group_on );
 | 
						|
  }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION report4styleSheetSave( REPORT4 *report, char *file_name )
 | 
						|
{
 | 
						|
  CODE4 *c4;
 | 
						|
  FILE4 file;
 | 
						|
  FILE4SEQ_WRITE seq;
 | 
						|
  char name_buf[512], buf[1024];
 | 
						|
  short sval;
 | 
						|
  STYLE4 *style_on;
 | 
						|
  int create_error, safety;
 | 
						|
 | 
						|
  c4 = report->code_base;
 | 
						|
 | 
						|
  u4ncpy( name_buf, file_name, sizeof(name_buf) );
 | 
						|
  u4name_ext( name_buf, sizeof(name_buf), "CRS", 0 );
 | 
						|
  create_error = c4->create_error;
 | 
						|
  safety = c4->safety;
 | 
						|
 | 
						|
  c4->create_error = 0;
 | 
						|
  c4->safety = 0;
 | 
						|
 | 
						|
  if( (file4create( &file, c4, name_buf, 1 )) != 0 )
 | 
						|
  {
 | 
						|
    e4set( c4, 0 );
 | 
						|
    c4->create_error = create_error;
 | 
						|
    c4->safety = safety;
 | 
						|
    return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  file4seq_write_init( &seq, &file, 0L, buf, sizeof(buf) );
 | 
						|
 | 
						|
  name_buf[0] = STYLE_MASK;
 | 
						|
  name_buf[1] = VERSION_MASK;
 | 
						|
 | 
						|
  file4seq_write( &seq, name_buf, 2 );
 | 
						|
 | 
						|
  sval = report->styles.n_link;
 | 
						|
  file4seq_write( &seq, &sval, sizeof(short) );
 | 
						|
 | 
						|
  style_on = (STYLE4 *)l4first( &report->styles );
 | 
						|
  while( style_on )
 | 
						|
  {
 | 
						|
    report4save_style( &seq, style_on );
 | 
						|
    style_on = (STYLE4 *)l4next( &report->styles, style_on );
 | 
						|
  }
 | 
						|
 | 
						|
  file4seq_write_flush( &seq );
 | 
						|
  file4close( &file );
 | 
						|
 | 
						|
  c4->create_error = create_error;
 | 
						|
  c4->safety = safety;
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION report4styleSheetLoad( REPORT4 *report, char *file_name, int override )
 | 
						|
{
 | 
						|
  FILE4 file;
 | 
						|
  FILE4SEQ_READ seq;
 | 
						|
  int auto_open, create_error, expr_error, open_error;
 | 
						|
  char name_buf[512];
 | 
						|
  int m1, m2, m3, m4, i;
 | 
						|
  short sval;
 | 
						|
  CODE4 *c4;
 | 
						|
  PSTYLE4 style, style_old;
 | 
						|
  char buf[1024];
 | 
						|
 | 
						|
  c4 = report->code_base;
 | 
						|
 | 
						|
  auto_open = c4->auto_open;
 | 
						|
  create_error = c4->create_error;
 | 
						|
  expr_error = c4->expr_error;
 | 
						|
  open_error = c4->open_error;
 | 
						|
 | 
						|
  c4->auto_open = c4->create_error = c4->expr_error = c4->open_error = 0;
 | 
						|
 | 
						|
  u4ncpy( name_buf, file_name, sizeof(name_buf) );
 | 
						|
  u4name_ext( name_buf, sizeof(name_buf), "REP", 0 );
 | 
						|
#ifndef S4UNIX
 | 
						|
  c4upper( name_buf );
 | 
						|
#endif
 | 
						|
 | 
						|
  if( file4open( &file, c4, name_buf, 1 ) != 0 )
 | 
						|
  {
 | 
						|
    e4set( c4, 0 );
 | 
						|
    return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  file4seq_read_init( &seq, &file, 0L, buf, sizeof(buf) );
 | 
						|
 | 
						|
 | 
						|
  file4seq_read( &seq, &m1, 1 );
 | 
						|
  file4seq_read( &seq, &m2, 1 );
 | 
						|
 | 
						|
  m3 = m1 & STYLE_MASK;
 | 
						|
  m4 = m2 & VERSION_MASK;
 | 
						|
 | 
						|
  if( m3 != STYLE_MASK )
 | 
						|
    return -1;
 | 
						|
 | 
						|
  if( m4 != VERSION_MASK  )
 | 
						|
    return -1;
 | 
						|
 | 
						|
  file4seq_read( &seq, &sval, sizeof(short) );
 | 
						|
  for( i = 0; i < sval; i++ )
 | 
						|
  {
 | 
						|
 | 
						|
    style = report4retrieve_style( &seq, NULL );
 | 
						|
    if( !style )
 | 
						|
    {
 | 
						|
      file4close( &file );
 | 
						|
      return -1;
 | 
						|
    }
 | 
						|
 | 
						|
    if( (style_old = style4lookup( report, style->name )) != NULL )
 | 
						|
    {
 | 
						|
      if( !override )
 | 
						|
      {
 | 
						|
        style4free( NULL, style );
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        style4changeLoadedStyles( report, style_old, style );
 | 
						|
        style4free( report, style_old );
 | 
						|
        l4add( &report->styles, style );
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      if( !override )
 | 
						|
      {
 | 
						|
        style4free( NULL, style );
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        style4changeLoadedStyles( report, style_old, style );
 | 
						|
        style4free( report, style_old );
 | 
						|
        l4add( &report->styles, style );
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  c4->auto_open = auto_open;
 | 
						|
  c4->create_error = create_error;
 | 
						|
  c4->expr_error = expr_error;
 | 
						|
  c4->open_error = open_error;
 | 
						|
  file4close( &file );
 | 
						|
  return 0;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION report4styleFirst( PREPORT4 report )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  return (PSTYLE4)l4first( &report->styles );
 | 
						|
}
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION report4styleNext( PREPORT4 report, PSTYLE4 style )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
  return (PSTYLE4)l4next( &report->styles, style );
 | 
						|
}
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION report4styleLast( PREPORT4 report )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  return (PSTYLE4)l4last( &report->styles );
 | 
						|
}
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION report4stylePrev( PREPORT4 report, PSTYLE4 style )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  return (PSTYLE4)l4prev( &report->styles, style );
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION report4numStyles( PREPORT4 report )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
 | 
						|
  return report->styles.n_link;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION report4styleSelected( PREPORT4 report )
 | 
						|
{
 | 
						|
  if( !report )
 | 
						|
  {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  return report->active_style;
 | 
						|
}
 | 
						|
 | 
						|
int S4FUNCTION report4styleSelect( PREPORT4 report, PSTYLE4 style )
 | 
						|
{
 | 
						|
  if( !report || !style )
 | 
						|
  {
 | 
						|
    if( report && !style )
 | 
						|
      e4describe( report->code_base, e4style_select, E4_REP_SSELECT, 0, 0 );
 | 
						|
    return -1;
 | 
						|
  }
 | 
						|
  report->active_style = style;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
PSTYLE4 S4FUNCTION style4index( PREPORT4 report, int index )
 | 
						|
{
 | 
						|
  int i;
 | 
						|
  PSTYLE4 style = NULL;
 | 
						|
 | 
						|
  if( !report || index < 0 )
 | 
						|
  {
 | 
						|
    if( report )
 | 
						|
      e4describe( report->code_base, e4style_index, E4_REP_SINDEX, 0, 0 );
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  for( i = 0; i <= index; i++ )
 | 
						|
  {
 | 
						|
    style = (PSTYLE4)l4next( &report->styles, style );
 | 
						|
    if( style == NULL )
 | 
						|
      break;
 | 
						|
  }
 | 
						|
 | 
						|
  return style;
 | 
						|
}
 |