try2.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. ** Written by David Gerdes US Army Construction Engineering Research Lab
  3. ** April 1992
  4. ** Copyright 1992 USA-CERL All rights reserved.
  5. **
  6. */
  7. /*
  8. ** read from stdin and each line into a linked list of chars
  9. ** then print it back out. if there is any argument specified
  10. ** the lines will be printed out reversed.
  11. */
  12. #include <stdio.h>
  13. #include <grass/linkm.h>
  14. struct link
  15. {
  16. char let;
  17. struct link *next;
  18. };
  19. int main(int argc, char *argv[])
  20. {
  21. register int i;
  22. VOID_T *head;
  23. struct link List, *tmp, *p;
  24. int rev = 0;
  25. char buf[4096];
  26. if (argc == 2)
  27. rev = 1;
  28. List.next = NULL;
  29. List.let = ' ';
  30. link_set_chunk_size(1);
  31. head = (VOID_T *) link_init(sizeof(struct link));
  32. while (NULL != gets(buf)) {
  33. for (i = 0; buf[i] != '\0'; i++) {
  34. tmp = (struct link *)link_new(head);
  35. tmp->let = buf[i];
  36. if (rev)
  37. add_link_rev(&List, tmp);
  38. else
  39. add_link(&List, tmp);
  40. }
  41. dumplist(&List);
  42. p = List.next;
  43. while (p != NULL && p->next != NULL) {
  44. tmp = p->next;
  45. link_dispose(head, p);
  46. p = tmp;
  47. }
  48. List.next = NULL;
  49. }
  50. link_cleanup(head);
  51. exit(0);
  52. }
  53. int add_link_rev(struct link *List, struct link *link)
  54. {
  55. struct link *p;
  56. p = List->next;
  57. List->next = link;
  58. link->next = p;
  59. }
  60. int add_link(struct link *List, struct link *link)
  61. {
  62. struct link *p;
  63. p = List;
  64. while (p->next != NULL)
  65. p = p->next;
  66. p->next = link;
  67. link->next = NULL;
  68. }
  69. int dumplist(struct link *List)
  70. {
  71. struct link *p;
  72. p = List->next;
  73. while (p != NULL) {
  74. putchar(p->let);
  75. p = p->next;
  76. }
  77. putchar('\n');
  78. }