home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 07config / showtabs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  2.0 KB  |  95 lines

  1. /*
  2.  *    showtabs -- graphically display tabstop settings
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <local\std.h>
  8.  
  9. #define MAXCOL      80
  10. #define TABWIDTH  8
  11.  
  12. extern long Highest;
  13.  
  14. main(argc, argv)
  15. int argc;
  16. char *argv[];
  17. {
  18.     int ch, i;
  19.     int interval, tablist[MAXLINE + 1], *p;
  20.     char *tabstr;
  21.     BOOLEAN errflag, fflag, vflag;
  22.     static char pgm[MAXNAME + 1] = { "showtabs" };
  23.  
  24.     extern char *getpname(char *, char *);
  25.     extern int getopt(int, char **, char *);
  26.     extern char *optarg;
  27.     extern int optind, opterr;
  28.     extern int mkslist(char *);
  29.     extern int selected(long);
  30.     extern void fixtabs(int);
  31.     extern void vartabs(int *);
  32.     extern int tabstop(int);
  33.  
  34.     if (_osmajor >= 3)
  35.         getpname(*argv, pgm);
  36.  
  37.     /* process command-line options */
  38.     errflag = fflag = vflag = FALSE;
  39.     interval = 0;
  40.     while ((ch = getopt(argc, argv, "f:v:")) != EOF) {
  41.         switch (ch) {
  42.         case 'f':
  43.             /* used fixed tabbing interval */
  44.             if (vflag == FALSE) {
  45.                 fflag = TRUE;
  46.                 interval = atoi(optarg);
  47.             }
  48.             break;
  49.         case 'v':
  50.             /* use list of tabs */
  51.             if (fflag == FALSE) {
  52.                 vflag = TRUE;
  53.                 strcpy(tabstr, optarg);
  54.             }
  55.             break;
  56.         case '?':
  57.             errflag = TRUE;
  58.             break;
  59.         }
  60.     }
  61.     if (errflag == TRUE) {
  62.         fprintf(stderr, "Usage: %s [-f interval | -v tablist]\n", pgm);
  63.         exit(2);
  64.     }
  65.  
  66.     /* set the tabstops */
  67.     if (vflag == TRUE) {
  68.         /* user-supplied variable tab list */
  69.         mkslist(tabstr);
  70.         p = tablist;
  71.         for (i = 0; i < MAXLINE && i < Highest; ++i)
  72.             *p++ = selected((long)i + 1) ? i : 0;
  73.         *p = -1;    /* terminate the list */
  74.         vartabs(tablist);
  75.     }
  76.     else if (fflag == TRUE)
  77.         /* user-supplied fixed tabbing interval */
  78.         fixtabs(interval);
  79.     else
  80.         /* hardware default tabbing interval*/
  81.         fixtabs(TABWIDTH);
  82.  
  83.     /* display current tabs settings */
  84.     for (i = 0; i < MAXCOL; ++i)
  85.         if (tabstop(i))
  86.             fputc('T', stdout);
  87.         else if ((i + 1) % 10 == 0)
  88.             fputc('+', stdout);
  89.         else
  90.             fputc('-', stdout);
  91.     fputc('\n', stdout);
  92.  
  93.     exit(0);
  94. }
  95.