GRASS Programmer's Manual
6.4.2(2012)
|
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 }