work in progress...
[oweals/busybox.git] / sort.c
diff --git a/sort.c b/sort.c
index 4ab673b4d397a86c71a25339aef6ce3197e574f2..d82351797640f479aea3090aad2fae562dd16a1c 100644 (file)
--- a/sort.c
+++ b/sort.c
@@ -32,6 +32,7 @@ static const char sort_usage[] =
 "Usage: sort [OPTION]... [FILE]...\n\n"
 ;
 
+/* structs ________________________________________________________________ */
 
 /* line node */
 typedef struct {
@@ -42,19 +43,51 @@ typedef struct {
 /* singly-linked list of lines */
 typedef struct {
     int                len;        /* number of Lines */
-    Line       *line;      /* array fed to qsort */
+    Line       *sorted;    /* array fed to qsort */
+
     Line       *head;      /* head of List */
+    Line       *current    /* current Line */
 } List;
 
 
-/* Line methods */
+/* methods ________________________________________________________________ */
 
 static const int max = 1024;
 
+/* mallocate Line */
 static Line *
-line_new()
+line_alloc()
 {
-    char buffer[max];
+    Line *self;
+    self = malloc(1 * sizeof(Line));
+    return self;
+}
+
+/* Initialize Line with string */
+static Line *
+line_init(Line *self, const char *string)
+{
+    self->data = malloc((strlen(string) + 1) * sizeof(char));
+    if (self->data == NULL) { return NULL; }
+    strcpy(self->data, string);
+    self->next = NULL;
+    return self;
+}
+
+/* Construct Line from FILE* */
+static Line *
+line_newFromFile(FILE *src)
+{
+    char    buffer[max];
+    Line    *self;
+
+    if (fgets(buffer, max, src)) {
+       self = line_alloc();
+       if (self == NULL) { return NULL; }
+       line_init(self, buffer);
+       return self;
+    }
+    return NULL;
 }
 
 
@@ -69,15 +102,54 @@ compare_numeric(const void *, const void *);
 
 /* List */
 
-static void
-list_insert();
+/* */
+static List *
+list_init(List *self)
+{
+    self->len     = 0;
+    self->sorted  = NULL;
+    self->head    = NULL;
+    self->current = NULL;
+    return self;
+}
 
+/* for simplicity, the List gains ownership of the line */
 static void
-list_sort();
+list_insert(List *self, Line *line)
+{
+    if (line == NULL) { return NULL; }
 
-static void
-list_print();
+    /* first insertion */
+    if (self->head == NULL) {
+       self->head    = line;
+       self->current = line;
+
+    /* all subsequent insertions */
+    } else {
+       self->current->next = line;
+       self->current       = line;
+    }
+    self->len++;
+    return self;
+}
 
+/* */
+static List *
+list_sort(List *self);
+
+/* precondition:  list must be sorted */
+static List *
+list_writeToFile(List *self, FILE* dst)
+{
+    if (self->sorted == NULL) { return NULL; }
+}
+
+/* deallocate */
+static List *
+list_release(List *self)
+{
+    return self;
+}
 
 
 /*
@@ -123,5 +195,4 @@ sort_main(int argc, char **argv)
     exit(0);
 }
 
-/* $Date: 1999/12/21 20:00:35 $ */
-/* $Id: sort.c,v 1.1 1999/12/21 20:00:35 beppu Exp $ */
+/* $Id: sort.c,v 1.2 1999/12/22 00:30:29 beppu Exp $ */