shape2: shape2.c

/* 
 * First example: shapes
 * 2. Modularized, uses typedefs, but still in C
 *
 * RunStuff:: gcc THISFILE
 */

#include <stdio.h>

/*
 * Type definitions
 */
typedef struct { //*1 Type definitions: Use structs to hold the data
	int x, y, wid, ht; //*1
} Rect; //*1

typedef struct { //*1
	int x, y, rad; //*1
} Circle; //*1

/*
 * Data definitions
 */
Rect r1, r2; //*2 Data definitions
Circle c1; //*2

/* 
 * Procedure definitions
 */
void drawRect (Rect r) { //*3 Procedure definitions: Pass struct as parameter
	printf ("Drawing rectangle at %d, %d, %d, %d\n", r.x, r.y, r.wid, r.ht);
}

void drawCircle (Circle c) { //*3
	printf ("Drawing circle at %d, %d, radius = %d\n", c.x, c.y, c.rad);
}

float areaRect (Rect r) { //*3
	return (float) (r.wid * r.ht);
}

float areaCircle (Circle c) { //*3
	return (float) (c.rad * c.rad * 3.14159);
}

int main () {
	/*
	 * Set the locations of the 3 objects
	 */
	r1.x = 10; r1.y = 10; //*4 Set the data
	r1.wid = 50; r1.ht = 50; //*4

	r2.x = 80; r2.y = 10; //*4
	r2.wid = 10; r2.ht = 100; //*4

	c1.x = 35; c1.y = 90; //*4
	c1.rad = 10; //*4

	/*
	 * Draw them
	 */
	drawRect (r1); //*5 Call the procedures
	drawRect (r2); //*5
	drawCircle (c1); //*5

	/*
	 * Compute and print total area
	 */
	printf ("Total area = %f\n",
		areaRect (r1) + areaRect (r2) + areaCircle (c1)); //*5

	return 0;
}
[download file]