/* SPINNER.C              */
/* S. Van Dyke, AFAB Ent. */
/* 7918 N. Central        */
/* K.C., Mo. 64118        */

/* Spinning cursor for long, quiet applications */

#include <stdio.h>
#include <conio.h>                            /* if following example 2 */

#define BACKSPACE 8                              /* BackSpace character */

void main(void)
{
   char spinner[] = {"\\|/-"};                       /* '\\' yields '\' */
   int spinpos;
   int i, nrecs;

   clrscr();
   printf("Spinning cursor demo program\n");

                   /* Example 1                                         */
                   /* For applications that do not print to the screen  */

   spinpos = 0;                                        /* reset spinner */
   printf("Working %c%c", spinner[spinpos++], BACKSPACE);
   spinpos &= 0x03;                        /* limit to valid characters */

   for (i=0; i < 100; ++i)
   {                                            /* Long processing loop */

                                                      /* Update spinner */
      printf("%c%c", spinner[spinpos++], BACKSPACE);
      spinpos &= 0x03;                     /* limit to valid characters */

                                /* Whatever operation the loop performs */
         delay(100);                      /* approx 1/10th second delay */
   }                                     /* end of main processing loop */


               /* Example 2                                             */
               /* For applications that may output to the screen and/or */
               /*     where the total number of iterations is known     */
               /* Note: gotoxy() and cprintf() are Turbo C specific     */

   nrecs = 100;               /* determine number iterations to perform */

   spinpos = 0;                                        /* reset spinner */
   gotoxy(1, 3);                            /* spinner message position */
   cprintf("Processing: %c %-5d ", spinner[spinpos++], nrecs);
   spinpos &= 0x03;                        /* limit to valid characters */

   for (i=nrecs; i > 0; --i)
   {                                            /* Long processing loop */

                                                      /* Update spinner */
      gotoxy(13, 3);                         /* set to spinner position */
      cprintf("%c %-5d ", spinner[spinpos++], nrecs--);
      spinpos &= 0x03;                     /* limit to valid characters */

                                /* Whatever operation the loop performs */
         delay(100);                      /* approx 1/10th second delay */
   }                                     /* end of main processing loop */

   gotoxy(11, 3);
   cprintf(" complete.");                         /* overwrites spinner */

}

/* End of file */
