Listing 2 (cswitch.c)

/* ---------------------------------------------------------
     This module contains functions that support a genneric
   command-line switch.

   Global Functions Defined Herein:
      csw_ison(), csw_parse()

   Local Functions Defined Herein:
      strupr()

   Written by: William J. McMahon     on: August 25, 1990
-------------------------------------------------------- */
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include "cswitch.h"

#define FNAME_SIZE       8
#define MAX_CSW_AREAS   10

/* ... defines an area for which a switch is "turned on". */
static struct {
   char file[FNAME_SIZE];     /*  ... source (name only). */
   int min;                   /*  First line that is "on". */
   int max;                   /*  Last line that is "on". */
   } csw_area[MAX_CSW_AREAS];

static int n_csw_areas = 0;  /*  Number of areas in use. */

#ifdef TEST       /*  ----------- Test Harness ----------- */
main(argc, argv)
   int argc;
   char *argv[];

{

   csw_parse(argc, argv);

   CSW_EXEC(printf("\nSwitch @ line %d is on.",__LINE__));

   CSW_EXEC(printf("\nSwitch @ line %d is on.",__LINE__));

   CSW_EXEC(printf("\nSwitch @ line %d is on.",__LINE__));

   CSW_EXEC(printf("\nSwitch @ line %d is on.",__LINE__));

   CSW_EXEC(printf("\nSwitch @ line %d is on.",__LINE__));

}
#endif            /*  ---------------------------------- */

/* --------------------------------------------------------
                       CSW_ISON

   Test whether a source file location (file name and line
   number) has been switched "on".

   If 'file' is NULL it will test for ANY switch on.
   If 'line' is zero it will test for ANY line in the file.

   Returns: TRUE or FALSE
-------------------------------------------------------- */
BOOL csw_ison(
   char *file,
   int line)
{
   char   name[FNAME_SIZE + 1];
   char  *p;
   int    i;
   
   if (n_csw_areas == 0)         /*  If no debug areas    */
      return (FALSE);           /*  are set quick exit.  */

   if (file == NULL)             /*  NULL 'file' asks     */
      return (TRUE);            /*  if ANY are on.       */

   p = strrchr(file, '\\');      /*  Find begining of     */
   if (p != NULL)                /*  file name.  */
      ++p;                      /*  Skip past \.         */

   else
      p = file;                 /*  No path was spec'd.  */

   strncpy(name, p, FNAME_SIZE);
   name[FNAME_SIZE] = '\0';      /*  Terminate string.    */

/* End of File */