home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / ctest.c < prev    next >
C/C++ Source or Header  |  1998-11-24  |  6KB  |  259 lines

  1. /* $Id: ctest.c,v 1.9 1998/11/24 12:25:56 zeller Exp $ */
  2. /* C Test program */
  3.  
  4. /*
  5.  * Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  6.  * Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  7.  * 
  8.  * This file is part of DDD.
  9.  * 
  10.  * DDD is free software; you can redistribute it and/or
  11.  * modify it under the terms of the GNU General Public
  12.  * License as published by the Free Software Foundation; either
  13.  * version 2 of the License, or (at your option) any later version.
  14.  * 
  15.  * DDD is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  18.  * See the GNU General Public License for more details.
  19.  * 
  20.  * You should have received a copy of the GNU General Public
  21.  * License along with DDD -- see the file COPYING.
  22.  * If not, write to the Free Software Foundation, Inc.,
  23.  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  * 
  25.  * DDD is the data display debugger.
  26.  * For details, see the DDD World-Wide-Web page, 
  27.  * `http://www.cs.tu-bs.de/softech/ddd/',
  28.  * or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  29.  */
  30.  
  31. /* --------------------------------------------------------------------------
  32.  *  This program defines some data structures and values that may be
  33.  *  examined using DDD.
  34.  * --------------------------------------------------------------------------
  35.  */
  36.  
  37. char ctest_rcsid[] =
  38.     "$Id: ctest.c,v 1.9 1998/11/24 12:25:56 zeller Exp $";
  39.  
  40. #include <stdio.h>
  41. #include <stdlib.h>
  42.  
  43. typedef enum _DayOfWeek {Sun, Mon, Tue, Wed, Thu, Fri, Sat} DayOfWeek;
  44.  
  45. int a_global = 42;    /* Place watchpoints on this one */
  46.  
  47. typedef struct Date {
  48.     DayOfWeek day_of_week;
  49.     int day;
  50.     int month;
  51.     int year;
  52. } Date;
  53.  
  54. void set_date(d, day_of_week, day, month, year)
  55.     Date *d;
  56.     DayOfWeek day_of_week;
  57.     int day, month, year;
  58. {
  59.     d->day_of_week = day_of_week;
  60.     d->day         = day;
  61.     d->month       = month;
  62.     d->year        = year;
  63. }
  64.  
  65. Date *new_date(day_of_week, day, month, year)
  66.     DayOfWeek day_of_week;
  67.     int day, month, year;
  68. {
  69.     Date *date = (Date *)malloc(sizeof(Date));
  70.     set_date(date, day_of_week, day, month, year);
  71.  
  72.     return date;
  73. }
  74.  
  75. void free_date(date)
  76.     Date *date;
  77. {
  78.     free(date);
  79. }
  80.  
  81. /*--------------------------------------------------------------------------*/
  82. typedef struct _Holiday {
  83.     Date date;
  84.     char *name;
  85. } Holiday;
  86.  
  87. void set_holiday(d, day_of_week, day, month, year, name)
  88.     Holiday *d;
  89.     DayOfWeek day_of_week;
  90.     int day, month, year;
  91.     char *name;
  92. {
  93.     set_date(&d->date, day_of_week, day, month, year);
  94.     d->name = name;
  95.     a_global = 1;
  96. }
  97.  
  98. /*--------------------------------------------------------------------------*/
  99. typedef struct _Tree {
  100.     int   value;
  101.     char *name;
  102.  
  103.     Date date;
  104.     struct _Tree *left;
  105.     struct _Tree *right;
  106. } Tree;
  107.  
  108. Tree *new_tree(value, name)
  109.     int value;
  110.     char *name;
  111. {
  112.     Tree *tree = (Tree *)malloc(sizeof(Tree));
  113.     tree->value = value;
  114.     tree->name  = name;
  115.     tree->left  = NULL;
  116.     tree->right = NULL;
  117.  
  118.     return tree;
  119. }
  120.  
  121. void free_tree(tree)
  122.     Tree *tree;
  123. {
  124.     if (tree->left)
  125.     free_tree(tree->left);
  126.     if (tree->right)
  127.     free_tree(tree->right);
  128.  
  129.     free(tree);
  130. }
  131.  
  132. /*--------------------------------------------------------------------------*/
  133. typedef struct _List {
  134.     int value;
  135.  
  136.     struct _List *self;
  137.     struct _List *next;
  138. } List;
  139.  
  140. List *new_list(value)
  141.     int value;
  142. {
  143.     List *list = (List *)malloc(sizeof(List));
  144.     list->value = value;
  145.     list->self  = list;
  146.     list->next  = list;
  147.  
  148.     return list;
  149. }
  150.  
  151. /*--------------------------------------------------------------------------*/
  152. void tree_test ()
  153. {
  154.     Tree *tree = NULL;
  155.     tree =              new_tree (7, "Ada");      /* Byron Lovelace */
  156.     tree->left =        new_tree (1, "Grace");    /* Murray Hopper  */
  157.     tree->left->left =  new_tree (5, "Judy");     /* Clapp          */
  158.     tree->left->right = new_tree (6, "Kathleen"); /* McNulty        */
  159.     tree->right =       new_tree (9, "Mildred");  /* Koss           */
  160.  
  161.     set_date(&tree->date, Tue, 29, 11, 1994);
  162.     set_date(&tree->date, Wed, 30, 11, 1994);
  163.  
  164.     free_tree(tree);
  165. }
  166.  
  167. /*--------------------------------------------------------------------------*/
  168. void list_test(start)
  169.     int start;
  170. {
  171.     List *list = 0;
  172.  
  173.     list                         = new_list(a_global + start++);
  174.     list->next                   = new_list(a_global + start++);
  175.     list->next->next             = new_list(a_global + start++);
  176.     list->next->next->next       = list;
  177.  
  178.     free(list->next->next);
  179.     free(list->next);
  180.     free(list);
  181. }
  182.  
  183. /*--------------------------------------------------------------------------*/
  184. void array_test ()
  185. {
  186.     int i;
  187.     static DayOfWeek days_of_week[7] = {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
  188.  
  189.     static char* twodim [2][3] = {{ "Pioneering", "women", "in"},
  190.                   { "computer", "science", "!"}};
  191.  
  192.     Date dates[4];
  193.     Date* date_ptrs[4];
  194.     date_ptrs[0] = new_date (Thu, 1, 9, 1994);
  195.     date_ptrs[1] = new_date (Tue, 10, 5, 1994);
  196.     date_ptrs[2] = new_date (Fri, 15, 7, 1994);
  197.     date_ptrs[3] = new_date (Sat, 24, 12, 1994);
  198.  
  199.     for (i = 0; i < 4; i++)
  200.     {
  201.     dates[i] = *date_ptrs[i];
  202.     free_date(date_ptrs[i]);
  203.     }
  204. }
  205.  
  206. /*--------------------------------------------------------------------------*/
  207.  
  208. void type_test ()
  209. {
  210.     Holiday holiday;
  211.     Date* date = new_date(Sat, 24, 12, 1994);
  212.     void* voidptr = date;
  213.  
  214.     struct Uni {
  215.     int ii;
  216.     union jj {
  217.         int j;
  218.         char c;
  219.     } u;
  220.     } uni;
  221.  
  222.     float f  = 0.0;
  223.     double d = 0.0;
  224.     char sc  = 'a';
  225.  
  226.     set_holiday(&holiday, Sat, 31, 12, 1994, "May all acquaintance be forgot");
  227.  
  228.     uni.ii  = 7;
  229.     uni.u.j = 9;
  230. }
  231.  
  232. /*--------------------------------------------------------------------------*/
  233. void in_out_test ()
  234. {
  235.     char name[80];
  236.     fprintf(stderr, "This is stderr speaking\n");
  237.     printf("What's your name? ");
  238.     gets(name);
  239.     printf("Hello, %s!\n", name);
  240. }
  241.  
  242. /*--------------------------------------------------------------------------*/
  243. int main (argc, argv)
  244.     int argc;
  245.     char *argv[];
  246. {
  247.     int i = 42;
  248.     tree_test();
  249.     i++;
  250.     list_test(i);
  251.     i++;
  252.     array_test();
  253.     i++;
  254.     type_test();
  255.     --i;
  256.     in_out_test();
  257.     return 0;
  258. }
  259.