home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / banners-1.1 / part01 / banner-12 / main.c < prev    next >
C/C++ Source or Header  |  1993-04-11  |  3KB  |  168 lines

  1. #include <stdio.h>
  2. #ifdef OSK
  3. #include <modes.h>
  4. #else
  5. #define S_IREAD 0
  6. #endif
  7. #include "flags.h"
  8.  
  9. #define TRUE  1
  10. #define FALSE 0
  11.  
  12. extern int    errno;
  13. extern void    exit();
  14.  
  15. #ifdef OSK
  16. int sighandler() {}
  17. #endif
  18.  
  19. /*
  20.  * m a i n
  21.  */
  22.  
  23. main(argc, argv)
  24. int    argc;
  25. char    *argv[];
  26. {
  27.     char        *str, strbuf[200];
  28.     int        i, j, strnum;
  29.     FILE        *infp;
  30.     char        *from;
  31. #ifdef OSK
  32.     char        *plife;
  33. #endif
  34.     banflags    flags;
  35.  
  36.     flags        = banFlagDefault;
  37.     strnum        = 0;
  38.     from        = NULL;
  39. #ifdef OSK
  40.     plife        = NULL;
  41. #endif
  42.  
  43. for (i = 1; i < argc; i++)
  44.     if (argv[i][0] == '-')
  45.         for (j = 1; j < strlen(argv[i]); j++)
  46.             switch(tolower(argv[i][j])) {
  47.             case '?':
  48.                 usage();
  49.                 exit(1);
  50.  
  51.             case 'i':    /* italic printing */
  52.                 flags.italic = TRUE;
  53.                 break;
  54.  
  55.             case 'd':    /* double sized characters */
  56.                 flags.height = 2;
  57.                 flags.dblwidth = TRUE;
  58.                 break;
  59. #ifdef OSK
  60.             case 'l':    /* secret option for OSK */
  61.                 plife = argv[i] + j + (argv[i][j+1] == '=' ? 2 : 1);
  62.                 j = strlen(argv[i]);
  63.                 break;
  64. #endif
  65.             case 'c':    /* character for banner */
  66.                 j += argv[i][j+1] == '=' ? 2 : 1;
  67.                 flags.bannerch = argv[i][j];
  68.                 break;
  69.  
  70.             case 's':    /* use character */
  71.                 flags.bannerch = '\0';
  72.                 break;
  73.  
  74.             case 'z':    /* get text from */
  75.                 if (from) {
  76.                     usage();
  77.                     (void)fputs("multiple 'z' options not allowed\n", stderr);
  78.                     exit(1);
  79.                 }
  80.                 from = argv[i] + j + (argv[i][j+1] == '=' ? 2 : 1);
  81.                 j = strlen(argv[i]);
  82.                 break;
  83.  
  84.             default:
  85.                 usage();
  86.                 (void)fprintf(stderr, "unknown option '%c'\n", argv[i][j]);
  87.                 exit(1);
  88.                 }
  89.     else
  90.         strnum++;     /* count number of strings */
  91.  
  92.     if (strnum == 0 && from == NULL) {
  93.         usage();
  94. #ifdef OSK
  95.         exit(_errmsg(1, "no string given\n"));
  96. #else
  97.         (void)fputs("no string given\n", stderr);
  98.         exit(1);
  99. #endif
  100.     }
  101.  
  102.     if (strnum && from) {
  103.         usage();
  104. #ifdef OSK
  105.         exit(_errmsg(1, "'z' option not allowed if string(s) given\n"));
  106. #else
  107.         (void)fputs("'z' option not allowed if string(s) given\n", stderr);
  108.         exit(1);
  109. #endif
  110.     }
  111.  
  112.     if (from) {
  113.         if (from[0]) {
  114.             if ((infp = fopen(from, "r")) == NULL) {
  115. #ifdef OSK
  116.                 exit(_errmsg(errno, "can't open '%s'\n", from));
  117. #else
  118.                 (void)fprintf(stderr, "can't open '%s'\n", from);
  119.                 exit(errno);
  120. #endif
  121.             }
  122.         }
  123.         else
  124.             infp = stdin;
  125.     }
  126.  
  127. #ifdef OSK
  128.     if (plife && !strcmp(plife, "dont_kill_me"))
  129.         intercept(sighandler);
  130. #endif
  131.  
  132.     str    = strbuf;
  133.     i    = 1;
  134.     while (TRUE) {
  135.         if (from) {    /* read strings from file/stdin */
  136.             if (fgets(strbuf, sizeof(strbuf)-1, infp) == NULL)
  137.                 break;
  138.             strbuf[strlen(strbuf)-1] = '\0';
  139.         }
  140.         else {        /* get strings from argument line */
  141.             if ((str = argv[i++]) == NULL)
  142.                 break;
  143.             if (str[0] == '-')
  144.                 continue;
  145.         }
  146.         /* call the banner subroutine */
  147.         banner(stdout, str, &flags);
  148.     }
  149.     return 0;
  150. }
  151.  
  152. /*
  153.  * u s a g e
  154.  */
  155.  
  156. usage()
  157. {
  158.     (void)fputs("Syntax: banner [<opts>] {<string>} [<opts>]\n", stderr);
  159.     (void)fputs("Function: prints a banner to stdout\n", stderr);
  160.     (void)fputs("Options:\n", stderr);
  161.     (void)fputs("     -i         prints italic\n", stderr);
  162.     (void)fputs("     -d         double size\n", stderr);
  163.     (void)fputs("     -c=<char>  character\n", stderr);
  164.     (void)fputs("     -s         use same character\n", stderr);
  165.     (void)fputs("     -z         read strings from standard input\n", stderr);
  166.     (void)fputs("     -z=<file>  read strings from <file>\n", stderr);
  167. }
  168.