This program, cookie.c, asks for a cookie. The response must be entered in uppercase, or it is incorrect. You can also find the prime factor of a number. In the process of doing these two things, you can see how the trace function works.
To compile this program and get an executable called cookie(), use
$ cc -o cookie cookie.c
Five probe points are defined (and highlighted) in this program. They are named start (line 17), inloop (line 33), factor_start (line 60), found_a_factor (line 65), and factor_end (line 72). More information about these probe points is gathered and explained in "A Sample prex Session".
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <tnf/probe.h>
#define MAX_RESPONSE_SIZE 256
static void find_factor(int n);
int
main(int argc, char **argv)
{
boolean_t shouldexit = B_FALSE;
int sum = 0, max_loop = 5;
int i;
TNF_PROBE_0(start, "cookie main",
"sunw%debug starting main");
while (!shouldexit) {
char response[MAX_RESPONSE_SIZE];
int factor_input;
(void) printf("give me a COOKIE! ");
(void) scanf("%s", response);
if (!strcmp(response, "COOKIE")) {
(void) printf("thanks!\n");
shouldexit = B_TRUE;
}
else if (!strcmp(response, "loop")) {
for (i = 0; i < max_loop; i++) {
TNF_PROBE_2(inloop, "cookie main
loop","sunw%debug in the loop",
tnf_long, loop_count, i,
tnf_long, total_iterations, sum);
sum++;
}
max_loop += 2 ;
}
else if (!strcmp(response, "factor")) {
(void) printf("number you want factored? ");
(void) scanf("%d", &factor_input);
find_factor(factor_input);
}
else {
(void) printf("not a %s, ", response);
}
}
return 0;
} /* end main */
static void
find_factor(int n)
{
int i;
(void) printf("\tfactors of %d = ", n);
TNF_PROBE_1(factor_start, "factor", "",
tnf_long, input_number, n);
for (i=2; i <= n; i++) {
while (n % i == 0) {
TNF_PROBE_2(found_a_factor, "cookie find_factor",
"", tnf_long, searching_for, n,
tnf_long, factor, i);
(void) printf("%d ", i);
n /= i;
}
}
TNF_PROBE_0(factor_end, "factor", "");
(void) printf("\n");
}