GRASS Programmer's Manual  6.4.2(2012)
linkm/try.c
Go to the documentation of this file.
00001 /*
00002  **  Written by David Gerdes  US Army Construction Engineering Research Lab
00003  **     April 1992
00004  **  Copyright 1992 USA-CERL   All rights reserved.
00005  **
00006  */
00007 
00008 /*
00009  **  takes 1st command line argument and stuffs each letter of it into
00010  **   a linked list.  then prints it back out to stdout.
00011  **  If a second argument is specified, the first argument is put in the
00012  **   list backwards.
00013  */
00014 #include <stdio.h>
00015 #include <grass/linkm.h>
00016 
00017 struct link
00018 {
00019     char let;
00020     struct link *next;
00021 };
00022 
00023 int main(int argc, char *argv[])
00024 {
00025     register int i;
00026     VOID_T *head;
00027     struct link List, *tmp, *p;
00028     int rev = 0;
00029 
00030     if (argc < 2)
00031         fprintf(stderr, "Usage: %s str [rev]\n", argv[0]), exit(1);
00032 
00033     if (argc > 2)
00034         rev = 1;
00035 
00036 
00037     List.next = NULL;
00038     List.let = ' ';
00039 
00040 
00041     head = (VOID_T *) link_init(sizeof(struct link));
00042 
00043     for (i = 0; argv[1][i]; i++) {
00044         tmp = (struct link *)link_new(head);
00045         tmp->let = argv[1][i];
00046         if (rev)
00047             add_link_rev(&List, tmp);
00048         else
00049             add_link(&List, tmp);
00050     }
00051 
00052     dumplist(&List);
00053 
00054     p = List.next;
00055     while (p->next != NULL) {
00056         tmp = p->next;
00057         link_dispose(head, p);
00058         p = tmp;
00059     }
00060 
00061     link_cleanup(head);
00062 
00063     exit(0);
00064 }
00065 
00066 int add_link_rev(struct link *List, struct link *link)
00067 {
00068     struct link *p;
00069 
00070     p = List->next;
00071     List->next = link;
00072     link->next = p;
00073 }
00074 
00075 int add_link(struct link *List, struct link *link)
00076 {
00077     struct link *p;
00078 
00079     p = List;
00080     while (p->next != NULL)
00081         p = p->next;
00082     p->next = link;
00083     link->next = NULL;
00084 }
00085 
00086 int dumplist(struct link *List)
00087 {
00088     struct link *p;
00089 
00090     p = List->next;
00091     while (p != NULL) {
00092         putchar(p->let);
00093         p = p->next;
00094     }
00095     putchar('\n');
00096 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines