summaryrefslogtreecommitdiff
path: root/src/base/textFile.c~
diff options
context:
space:
mode:
authorTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
committerTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
commite12753d2ec9db83ec08bb9db63902a82fb245cdd (patch)
tree6e4a63b790d6335f969f88b797a927e0fb25f37a /src/base/textFile.c~
parent0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (diff)
X
Diffstat (limited to 'src/base/textFile.c~')
-rw-r--r--src/base/textFile.c~160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/base/textFile.c~ b/src/base/textFile.c~
new file mode 100644
index 0000000..48e5044
--- /dev/null
+++ b/src/base/textFile.c~
@@ -0,0 +1,160 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include <unistd.h>
+
+#include "main.h"
+#include "textFile.h"
+
+textFile_t* newTextFile(char *s)
+{
+ textFile_t *new;
+ char path[STR_PATH_SIZE];
+ assert( s != NULL );
+
+ if( isFillPath(s) )
+ {
+ strcpy(path, s);
+ }
+ else
+ {
+ getcwd(path, STR_PATH_SIZE);
+ strcat(path, "/");
+ strcat(path, s);
+ }
+
+ new = malloc(sizeof(textFile_t));
+ new->file = strdup(path);
+ new->text = newList();
+
+ return new;
+}
+
+static void createLine(list_t *list, char *p, int len)
+{
+ char *line;
+ char *begin_line;
+ char *end_line;
+ int length_line = 0;
+
+ assert( list != NULL );
+ assert( p != NULL );
+ assert( len >= 0 );
+
+ begin_line = p;
+
+ do{
+ end_line = memchr( begin_line, '\n', len);
+ if( end_line == NULL )break;
+
+ length_line = (int ) (end_line - ( begin_line ) );
+
+ line = malloc( (length_line+1) * sizeof(char) );
+ memset(line, 0, (length_line+1) * sizeof(char) );
+ strncpy(line, begin_line, length_line);
+
+ addList(list, line);
+ len -= (length_line+1);
+
+ begin_line = end_line+1;
+
+ }while( begin_line != NULL );
+}
+
+/*
+ * Nacita subor *s a vrati ho f
+ * formatovany v type textFile_t*
+ */
+textFile_t* loadTextFile(char *s)
+{
+ FILE *file;
+ textFile_t *ret;
+ char *p;
+ int file_length = 0;
+ struct stat buf;
+
+ assert( s != NULL );
+
+ if( lstat(s, &buf) < 0 )
+ {
+ fprintf(stderr, _("ERROR: unable to get file status for %s!\n"), s);
+ return NULL;
+ }
+
+ file_length = buf.st_size;
+ if( (file = fopen(s, "rb")) == NULL )
+ {
+ fprintf(stderr, _("ERROR: unable to open file %s for reading\n"), s);
+ return NULL;
+ }
+
+ p = malloc(file_length * sizeof(char));
+
+ if( fread(p, file_length * sizeof(char), 1, file) != 1 )
+ {
+ fprintf(stderr, _("ERROR: unable to read data from file %s\n"),s);
+ fclose(file);
+ return NULL;
+ }
+
+ fclose(file);
+
+ ret = newTextFile(s);
+ createLine(ret->text, p, file_length);
+
+ free(p);
+
+ return ret;
+}
+
+/*
+ * Zobrazi text ulozeny v *p
+ * do stdout
+ */
+void printTextFile(textFile_t *p)
+{
+ int i;
+
+ assert( p != NULL );
+
+ printf(_("Printing file: \"%s\"\n\n"), p->file);
+
+ for(i = 0; i < p->text->count; i++)
+ {
+ printf("%3d >> %s\n", i, (char *)p->text->list[i]);
+ }
+}
+
+void saveTextFile(textFile_t *p)
+{
+ int i;
+ FILE *file;
+ assert( p != NULL );
+
+ file = fopen(p->file, "wb");
+ for(i = 0; i < p->text->count; i++)
+ {
+ fprintf(file, "%s\n", (char *)p->text->list[i]);
+ }
+
+ fclose(file);
+}
+
+/*
+ * Uvolni text ulozeny v type textFile_t*
+ * z pamate.
+ */
+void destroyTextFile(textFile_t *p)
+{
+ assert( p != NULL );
+
+ free(p->file);
+ destroyListItem(p->text, free);
+ free(p);
+}
+
+
+