
/***************************************************************/
/*                                                             */
/*       Fuga                                                  */
/*                                                             */
/*       erog.c                                                */
/*                                                             */
/*       Copyrighted  by  Laitche                              */
/*                                                             */
/***************************************************************/

#include "cpldef.h"

#include <stdio.h>
#include <ctype.h>
#include "define.h"
#include "typedef.h"
#include "global.h"
#include "function.h"
#include "macro.h"




reog_error_proc()
{
  reog_head_msg_clr();
  dsp_popup_msg( PUP_MSG_008 );
  if( mem_error.mem_buf_no != TEXT_REOG_BUF )
  {
    g_mem_free( mem_error.mem_buf_no );
  }
  else
  {
    chg_al_buf_no( mem_error.cur_file_no + EDT_PAD_MAX ,TEXT_REOG_BUF );
  }
  base_info.insurf_memory = TRUE;
  base_info.insurf_m_msg = INSURF_MSG_DSP;
}




ed_del_sight_erog( e_no )
short e_no;
{

  reog_head_msg();
  mem_error.status = REOG_STAT;
  mem_error.mem_buf_no = SIGHT_REOG_BUF;
  mem_error.cur_file_no = e_no;

  edit[ e_no ].del_sight_num = 0;

  edit[ e_no ].sight_adr = reog_set_prev_next_sight(
                  get_start_sight_adr( edit[ e_no ].sight_adr )
                                                ,edit[ e_no ].phy_line_num );

  edit[ e_no ].sight_adr = get_lower_num_sight( edit[ e_no ].sight_adr
                                              ,edit[ e_no ].sight_lin - 1L );

  g_mem_free( e_no + SIGHT_BUF_BASE );

  chg_al_buf_no( e_no + SIGHT_BUF_BASE ,SIGHT_REOG_BUF );

  reog_head_msg_clr();
}




sight_buf *reog_set_prev_next_sight( org_sight_adr ,num )
sight_buf *org_sight_adr;
long num;
{
  sight_info_t sight_info;

  sight_info = get_prev_next_sight( SIGHT_REOG_BUF ,num
                              ,( sight_buf * )EMPTY ,( sight_buf * )EMPTY );

  ed_copy_phy_line( sight_info.top_sight_adr ,org_sight_adr ,num );
  return( sight_info.top_sight_adr );
}






ed_del_log_erog( e_no )
short e_no;
{

  reog_head_msg();
  mem_error.status = REOG_STAT;
  mem_error.mem_buf_no = LOG_REOG_BUF;
  mem_error.cur_file_no = e_no;

  edit[ e_no ].del_log_num = 0;

  edit[ e_no ].log_adr = reog_set_prev_next_log(
                  get_start_lin_idx( e_no ,edit[ e_no ].log_adr )
                                                ,edit[ e_no ].log_line_num );

  edit[ e_no ].log_adr = get_lower_num_lpnt( edit[ e_no ].log_adr
                                              ,edit[ e_no ].cur_lin - 1L );

  g_mem_free( e_no + LOG_BUF_BASE );

  chg_al_buf_no( e_no + LOG_BUF_BASE ,LOG_REOG_BUF );

  reog_head_msg_clr();
}



l_buf *reog_set_prev_next_log( org_log_adr ,num )
l_buf *org_log_adr;
long num;
{
  log_info_t log_info;

  log_info = get_prev_next_pnt( LOG_REOG_BUF ,num
                                       ,( l_buf * )EMPTY ,( l_buf * )EMPTY );
  ed_copy_log_line( log_info.top_log_adr ,org_log_adr ,num );
  return( log_info.top_log_adr );
}




reog_set_text( e_no )
short e_no;
{
  l_buf *log_adr;
  long text_alc_rest ,cnt;
  uchar_t *cadr ,*text_alc_buf ,*text_alc_adr;

  reog_head_msg();
  mem_error.status = REOG_STAT;
  mem_error.mem_buf_no = TEXT_REOG_BUF;
  mem_error.cur_file_no = e_no;

  edit[ edt_no ].del_txt_lin_num = 0;
  text_alc_buf = ( uchar_t * )0;
  text_alc_rest = 0;
  for( log_adr = get_start_lin_idx( e_no ,edit[ e_no ].log_adr );
                        log_adr != ( l_buf * )EMPTY;log_adr = log_adr->next )
  {
    if( text_alc_rest < log_adr->ccnt )
    {
      if( text_alc_buf )
      {
        set_alloc_table( TEXT_REOG_BUF ,text_alc_buf ,text_alc_rest );
      }
      text_alc_buf = text_alc_adr = halloc_with_error( ( long )ALLOC_SEG );
      text_alc_rest = ALLOC_SEG;
    }
    cadr = text_alc_adr;
    text_alc_adr += log_adr->ccnt;
    text_alc_rest -= log_adr->ccnt;
    memmove( cadr ,log_adr->text ,( int )log_adr->ccnt );
    log_adr->text = cadr;
    log_adr->buf_num = log_adr->ccnt;
  }
  if( text_alc_buf )
  {
    set_alloc_table( TEXT_REOG_BUF ,text_alc_buf ,text_alc_rest );
  }
  g_mem_free( e_no + EDT_PAD_MAX );

  chg_al_buf_no( e_no + EDT_PAD_MAX ,TEXT_REOG_BUF );

  reog_head_msg_clr();
}


