Listing 1

#include <stdio.h>
#include <stdlib.h>

#define scr_put(line, colm, c)           /* position cursor and write */ \
       printf("\033[%d;%dH%c", line, colm, c)
#define scr_clr() printf("\033[2J")      /* clear screen */

void wait(unsigned int seconds);

typedef struct node {
       struct node *pfwd;      /* ptr to next node in list */
       unsigned char line;     /* cursor position line */
       unsigned char colm;     /* cursor position column */
       unsigned char ch;       /* char to be displayed */
} Node;

main ()
{
       Node *proot_node = NULL;/* start of data list */
       Node *pnode;            /* Node just allocated */
       Node *pprev_node;       /* Node previously allocated */
       unsigned int line, colm;
       unsigned char ch;

/* get input data pairs until EOF */

       while (1) {
/*              printf("Enter line, colm, char: "); */
             if (scanf("%u %u %c", &line, &colm, &ch) == EOF)
                    break;

             pnode = malloc(sizeof(Node));
             if (pnode == NULL) {
                    fprintf(stderr, "Can't malloc Node\n");
                    exit(EXIT_FAILURE);
             }

             /* update root on first node only */

             if (proot_node == NULL)
                    proot_node = pnode;
             else
                    pprev_node->pfwd = pnode;

             pnode->line = line;
             pnode->colm = colm;
             pnode->ch = ch;
             pnode->pfwd = proot_node;
             pprev_node = pnode;
       }

/* End of File */