diff options
| -rw-r--r-- | mixlib/mix_code_file.c | 8 | ||||
| -rw-r--r-- | mixlib/mix_code_file.h | 4 | ||||
| -rw-r--r-- | mixlib/mix_src_file.c | 39 | 
3 files changed, 28 insertions, 23 deletions
| diff --git a/mixlib/mix_code_file.c b/mixlib/mix_code_file.c index ba53a64..c290150 100644 --- a/mixlib/mix_code_file.c +++ b/mixlib/mix_code_file.c @@ -316,5 +316,11 @@ mix_code_file_set_address (mix_code_file_t *file, mix_address_t address)    }    return TRUE;  } - +/* get details about the source file */ +const gchar * +mix_code_file_get_source_path (const mix_code_file_t *file) +{ +  g_return_val_if_fail (file != NULL, NULL); +  return file->source_path; +} diff --git a/mixlib/mix_code_file.h b/mixlib/mix_code_file.h index 34c0f21..525ebc3 100644 --- a/mixlib/mix_code_file.h +++ b/mixlib/mix_code_file.h @@ -97,6 +97,10 @@ mix_code_file_write_next_ins(mix_code_file_t *file, mix_word_t ins,  extern gboolean  mix_code_file_set_address(mix_code_file_t *file, mix_address_t address); +/* get details about the source file */ +extern const gchar * +mix_code_file_get_source_path (const mix_code_file_t *file); +   #endif /* MIX_CODE_FILE_H */ diff --git a/mixlib/mix_src_file.c b/mixlib/mix_src_file.c index b8c4356..0569aa6 100644 --- a/mixlib/mix_src_file.c +++ b/mixlib/mix_src_file.c @@ -1,7 +1,7 @@  /* -*-c-*- -------------- mix_src_file.c :   * Implementation of the functions declared in mix_src_file.h   * ------------------------------------------------------------------ - *  Last change: Time-stamp: "00/12/16 16:41:46 jose" + *  Last change: Time-stamp: "00/12/17 12:56:50 jose"   * ------------------------------------------------------------------   * Copyright (C) 2000 jose antonio ortega ruiz <jaortega@acm.org>   *   @@ -21,7 +21,8 @@   *     */ - +#include <stdio.h> +#include <unistd.h>  #include "mix_src_file.h"  /* the MIXAL source file type */ @@ -44,26 +45,19 @@ mix_src_file_new_for_read (const gchar *path)      return NULL;    else      { +      enum {BUFFER_SIZE = 256}; +      static gchar BUFFER[BUFFER_SIZE]; +              mix_src_file_t *result = g_new (mix_src_file_t, 1);        FILE  *f = mix_file_to_FILE (file); -      result->lines = g_prt_array_new (); -      result->path = path; +      result->lines = g_ptr_array_new (); +      result->path = g_strdup (path);        result->lineno = 0; -      ssize_t s = 0; -      gchar *newline = NULL; -      size_t a = 0; -       -      while (s != -1) +      while (fgets (BUFFER, BUFFER_SIZE, f) == BUFFER)  	{ -	  s = getline (&newline, &a, f); -	  if (s>0) -	    { -	      g_ptr_array_add (result->lines, (gpointer) newline); -	      result->lineno++; -	    } -	  newline = NULL; -	  a = 0; +	  g_ptr_array_add (result->lines, (gpointer) g_strdup (BUFFER)); +	  result->lineno++;  	}        mix_file_delete (file); @@ -75,8 +69,9 @@ mix_src_file_new_for_read (const gchar *path)  void  mix_src_file_delete (mix_src_file_t *src)  { -  g_return_val_if_fail (src != NULL, NULL); -  g_ptr_array_free (src->lines); +  g_return_if_fail (src != NULL); +  g_ptr_array_free (src->lines, TRUE); +  g_free (src->path);    g_free (src);  } @@ -93,17 +88,17 @@ const gchar *  mix_src_file_get_line (const mix_src_file_t *src, guint lineno)  {    g_return_val_if_fail (src != NULL, NULL); -  if (lineno > src->lineo || lineno == 0) +  if (lineno > src->lineno || lineno == 0)      return NULL;    else -    return (gchar *)g_prt_array_index (src->lines, lineno - 1); +    return (gchar *)g_ptr_array_index (src->lines, lineno - 1);  }  /* get the total no. of lines in the file */  guint  mix_src_file_get_line_no (const mix_src_file_t *src)  { -  g_return_val_if_fail (src != NULL, NULL); +  g_return_val_if_fail (src != NULL, 0);    return src->lineno;  } | 
