home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d3xx / d326 / snap.lha / Snap / source / settings.c < prev    next >
C/C++ Source or Header  |  1990-03-05  |  12KB  |  360 lines

  1. #include "snap.h"
  2. #include <stdio.h>
  3.  
  4. #define ARGVAL() (*++(*argv) || (--argc && *++argv))
  5.  
  6. struct SnapRsrc *SnapRsrc = NULL;
  7.  
  8. SHORT isdigit(c)
  9. REGISTER char c;
  10. {
  11.     return (c>='0' && c<='9');
  12. }
  13.  
  14. #ifdef AZTEC_C
  15. char *strupr(str)
  16. char *str;
  17. {
  18.     register char *p = str;
  19.     register char c;
  20.     while (c = *p) {
  21.         if ('a' <= c && c <= 'z') {
  22.             *p = c - ('a' - 'A');
  23.         }
  24.         ++p;
  25.     }
  26.     return str;
  27. }
  28. #endif AZTEC_C
  29.  
  30. LONG dectoint(str)
  31. REGISTER char *str;
  32. {
  33.     REGISTER long val = 0;
  34.     REGISTER char c;
  35.     while (isdigit(c = *str)) {
  36.         val = (((val<<2)+val)<<1) + c-'0';
  37.         str++;
  38.     }
  39.     return(val);
  40. }
  41.  
  42. LONG hextoint(str)
  43. REGISTER char *str;
  44. {
  45.     REGISTER long val = 0;
  46.     REGISTER char c;
  47.     while (c = *str) {
  48.         val <<= 4;
  49.         val |= (c & 15) + (isdigit(c) ? 0 : 9);
  50.         str++;
  51.     }
  52.     return(val);
  53. }
  54.  
  55. main(argc, argv)
  56. WORD argc;
  57. char *argv[];
  58. {
  59.     WORD usage = 0;
  60.  
  61.     SnapRsrc = (struct SnapRsrc *)OpenResource(SNAPRSRC);
  62.     if (!SnapRsrc) {
  63.         puts("Snap not installed");
  64.         exit(0);
  65.     }
  66.  
  67.     if (argc == 1) {
  68.         puts("Snap settings:");
  69.         printf("Priority:    %d\n", SnapRsrc->Priority);
  70.         printf("Gfx Qual:    %x, ", SnapRsrc->gfxqual);
  71.         printf("Text Qual:   %x\n", SnapRsrc->textqual);
  72.         printf("Insert key:  %x, ", SnapRsrc->insertkey);
  73.         printf("CW key:      %x\n", SnapRsrc->cwkey);
  74.         printf("Prepend:     \"%s\"\n", &SnapRsrc->Prepend);
  75.         printf("Append:      \"%s\"\n", &SnapRsrc->Append);
  76.         printf("Xerox:       %s, ", (SnapRsrc->flags & XEROX ? "On " : "Off"));
  77.         printf("Early patch: %s\n", (SnapRsrc->flags & EARLYPATCH ? "On " : "Off"));
  78.         printf("Join long:   %s, ", (SnapRsrc->flags & JOINLONG ? "On " : "Off"));
  79.         printf("Underscore:  %s\n", (SnapRsrc->flags & TRUEUNDERSCORE ? "True" : "Fake"));
  80.         printf("Line Delay:  %ld, ", SnapRsrc->linedelay);
  81.         printf("Char Delay:  %ld\n", SnapRsrc->chardelay);
  82.         printf("Crawl Ptrn:  %x\n", SnapRsrc->CrawlPtrn);
  83.         printf("Start Unit:  %d\n", SnapRsrc->StartUnit);
  84.         printf("Frame Mask:  %x\n", SnapRsrc->FrameMask);
  85.         printf("Gad Offset:  %d\n", SnapRsrc->GadOffset);
  86.         printf("Cache Size:  %d\n", SnapRsrc->CacheSize);
  87.         printf("Bad char:    %d\n", SnapRsrc->BadChar);
  88.         exit(0);
  89.     }
  90.  
  91.     for (argc--, argv++; argc > 0; argc--, argv++) {
  92.         if (**argv == '-') { /* Argument coming up */
  93.             switch(*++(*argv)) {
  94.                 case 'p': priority: {  /* Priority */
  95.                     if (ARGVAL()) {
  96.                         WORD pri = dectoint(*argv);
  97.                         if (pri>50 && pri<128) {
  98.                             SnapRsrc->Priority = pri;
  99.                         }
  100.                     } else {
  101.                         usage = 1;
  102.                     }
  103.                     break;
  104.                 }
  105.                 case 't': textqual: {
  106.                     if (ARGVAL()) {
  107.                         SnapRsrc->textqual = hextoint(*argv);
  108.                     } else {
  109.                         usage = 1;
  110.                     }
  111.                     break;
  112.                 }
  113.                 case 'g': gfxqual: {
  114.                     if (ARGVAL()) {
  115.                         SnapRsrc->gfxqual = hextoint(*argv);
  116.                     } else {
  117.                         usage = 1;
  118.                     }
  119.                     break;
  120.                 }
  121.                 case 'i': insertkey: {
  122.                     if (ARGVAL()) {
  123.                         SnapRsrc->insertkey = hextoint(*argv);
  124.                     } else {
  125.                         usage = 1;
  126.                     }
  127.                     break;
  128.                 }
  129.                 case 'w': cwkey: {
  130.                     if (ARGVAL()) {
  131.                         SnapRsrc->cwkey = hextoint(*argv);
  132.                     } else {
  133.                         usage = 1;
  134.                     }
  135.                     break;
  136.                 }
  137.                 case 'c': chardelay: {
  138.                     if (ARGVAL()) {
  139.                         SnapRsrc->chardelay = dectoint(*argv) * 1000;
  140.                     } else {
  141.                         usage = 1;
  142.                     }
  143.                     break;
  144.                 }
  145.                 case 'l': linedelay: {
  146.                     if (ARGVAL()) {
  147.                         SnapRsrc->linedelay = dectoint(*argv) * 1000;
  148.                     } else {
  149.                         usage = 1;
  150.                     }
  151.                     break;
  152.                 }
  153.                 case 'a': crawlptrn: {
  154.                     if (ARGVAL()) {
  155.                         SnapRsrc->CrawlPtrn = hextoint(*argv);
  156.                     } else {
  157.                         usage = 1;
  158.                     }
  159.                     break;
  160.                 }
  161.                 case 'X': noxerox: {
  162.                     SnapRsrc->flags &= ~XEROX;
  163.                     break;
  164.                 }
  165.                 case 'x': xerox: {
  166.                     SnapRsrc->flags |= XEROX;
  167.                     break;
  168.                 }
  169.                 case 'E': noearlypatch: {
  170.                     SnapRsrc->flags &= ~EARLYPATCH;
  171.                     break;
  172.                 }
  173.                 case 'e': earlypatch: {
  174.                     SnapRsrc->flags |= EARLYPATCH;
  175.                     break;
  176.                 }
  177.                 case 'R': fakeunderscore: {
  178.                     SnapRsrc->flags &= ~TRUEUNDERSCORE;
  179.                     break;
  180.                 }
  181.                 case 'r': realunderscore: {
  182.                     SnapRsrc->flags |= TRUEUNDERSCORE;
  183.                     break;
  184.                 }
  185.                 case 'J': nojoinlong: {
  186.                     SnapRsrc->flags &= ~JOINLONG;
  187.                     break;
  188.                 }
  189.                 case 'j': joinlong: {
  190.                     SnapRsrc->flags |= JOINLONG;
  191.                     break;
  192.                 }
  193.                 case 'A': append:
  194.                 case 'P': prepend: {
  195.                     char *dest = (**argv == 'A' ?
  196.                       &SnapRsrc->Append[0] : &SnapRsrc->Prepend[0]);
  197.                     if (*++(*argv) || (--argc && ++argv)) { /* "" is ok */
  198.                         char *src = *argv;
  199.                         WORD i = 16;
  200.                         while (*src && i--) {
  201.                             *dest++ = *src++;
  202.                         }
  203.                         *dest = '\0';
  204.                     } else {
  205.                         usage = 1;
  206.                     }
  207.                     break;
  208.                 }
  209.                 case 'u': startunit: {
  210.                     if (ARGVAL()) {
  211.                         switch(dectoint(*argv)) {
  212.                             case 1: {
  213.                                 SnapRsrc->StartUnit = UNIT_CHAR;
  214.                                 break;
  215.                             }
  216.                             case 0:
  217.                             default: {
  218.                                 SnapRsrc->StartUnit = UNIT_FRAME;
  219.                                 break;
  220.                             }
  221.                         }
  222.                     } else {
  223.                         usage = 1;
  224.                     }
  225.                     break;
  226.                 }
  227.                 case 'b': planemask: {
  228.                     if (ARGVAL()) {
  229.                         SnapRsrc->FrameMask = hextoint(*argv);
  230.                     } else {
  231.                         usage = 1;
  232.                     }
  233.                     break;
  234.                 }
  235.                 case 'o': gadoffset: {
  236.                     if (ARGVAL()) {
  237.                         SnapRsrc->GadOffset = dectoint(*argv);
  238.                     } else {
  239.                         usage = 1;
  240.                     }
  241.                     break;
  242.                 }
  243.                 case 'C': cachesize: {
  244.                     if (ARGVAL()) {
  245.                         SnapRsrc->CacheSize = dectoint(*argv);
  246.                     } else {
  247.                         usage = 1;
  248.                     }
  249.                     break;
  250.                 }
  251.                 case 'B': badchar: {
  252.                     if (ARGVAL()) {
  253.                         SnapRsrc->BadChar = dectoint(*argv);
  254.                     } else {
  255.                         usage = 1;
  256.                     }
  257.                     break;
  258.                 }
  259.                 case 'Q': quit: {
  260.                     Signal(SnapRsrc->Task, SIGBREAKF_CTRL_C);
  261.                     exit(0);
  262.                 }
  263.                 case '?': {
  264.                     usage = 1;
  265.                     break;
  266.                 }
  267.                 default: {
  268.                     printf("Bad option: -%c.\n", **argv);
  269.                     usage = 1;
  270.                     break;
  271.                 }
  272.             }
  273.         } else {
  274.             (VOID)strupr(*argv);
  275.             if (!strcmp(*argv, "PRIORITY")) {
  276.                 (*argv)[1] = '\0';                  /* Fake no argument */
  277.                 goto priority;                      /* Terrible, ain't it? */
  278.             } else if (!strcmp(*argv, "TEXTQUAL")) {
  279.                 (*argv)[1] = '\0';
  280.                 goto textqual;
  281.             } else if (!strcmp(*argv, "GFXQUAL")) {
  282.                 (*argv)[1] = '\0';
  283.                 goto gfxqual;
  284.             } else if (!strcmp(*argv, "INSERTKEY")) {
  285.                 (*argv)[1] = '\0';
  286.                 goto insertkey;
  287.             } else if (!strcmp(*argv, "CWKEY")) {
  288.                 (*argv)[1] = '\0';
  289.                 goto cwkey;
  290.             } else if (!strcmp(*argv, "PREPEND")) {
  291.                 (*argv)[1] = '\0';
  292.                 goto prepend;
  293.             } else if (!strcmp(*argv, "APPEND")) {
  294.                 (*argv)[1] = '\0';
  295.                 goto append;
  296.             } else if (!strcmp(*argv, "CHARDELAY")) {
  297.                 (*argv)[1] = '\0';
  298.                 goto chardelay;
  299.             } else if (!strcmp(*argv, "LINEDELAY")) {
  300.                 (*argv)[1] = '\0';
  301.                 goto linedelay;
  302.             } else if (!strcmp(*argv, "CRAWLPTRN")) {
  303.                 (*argv)[1] = '\0';
  304.                 goto crawlptrn;
  305.             } else if (!strcmp(*argv, "XEROX")) {
  306.                 goto xerox;
  307.             } else if (!strcmp(*argv, "NOXEROX")) {
  308.                 goto noxerox;
  309.             } else if (!strcmp(*argv, "EARLYPATCH")) {
  310.                 goto earlypatch;
  311.             } else if (!strcmp(*argv, "NOEARLYPATCH")) {
  312.                 goto noearlypatch;
  313.             } else if (!strcmp(*argv, "TRUEUNDERSCORE")) {
  314.                 goto realunderscore;
  315.             } else if (!strcmp(*argv, "FAKEUNDERSCORE")) {
  316.                 goto fakeunderscore;
  317.             } else if (!strcmp(*argv, "JOINLONG")) {
  318.                 goto joinlong;
  319.             } else if (!strcmp(*argv, "NOJOINLONG")) {
  320.                 goto nojoinlong;
  321.             } else if (!strcmp(*argv, "STARTUNIT")) {
  322.                 (*argv)[1] = '\0';
  323.                 goto startunit;
  324.             } else if (!strcmp(*argv, "PLANEMASK")) {
  325.                 (*argv)[1] = '\0';
  326.                 goto planemask;
  327.             } else if (!strcmp(*argv, "GADOFFSET")) {
  328.                 (*argv)[1] = '\0';
  329.                 goto gadoffset;
  330.             } else if (!strcmp(*argv, "CACHESIZE")) {
  331.                 (*argv)[1] = '\0';
  332.                 goto cachesize;
  333.             } else if (!strcmp(*argv, "BADCHAR")) {
  334.                 (*argv)[1] = '\0';
  335.                 goto badchar;
  336.             } else if (!strcmp(*argv, "QUIT")) {
  337.                 goto quit;
  338.             } else if (strcmp(*argv, "?")) {
  339.                 printf("Bad switch/keyword: %s.\n", *argv);
  340.             }
  341.             usage = 1;
  342.         }
  343.     }
  344.  
  345.     if (usage) {
  346.         puts("Usage:");
  347.         puts(" snap -pNN -tXX -gXX -iXX -wXX -Pstr -Astr -cNN -lNN -aXXXX");
  348.         puts("   -x -X -e -E -r -R -j -J -uN -bXX -oNN -CNN -BNN -Q");
  349.         puts(" or");
  350.         puts(" snap PRIORITY/k TEXTQUAL/k GFXQUAL/k INSERTKEY/k CWKEY/k");
  351.         puts("   PREPEND/k APPEND/k CHARDELAY/k LINEDELAY/k CRAWLPTRN/k");
  352.         puts("   XEROX/s NOXEROX/s EARLYPATCH/s NOEARLYPATCH/s STARTUNIT/k");
  353.         puts("   TRUEUNDERSCORE/s FAKEUNDERSCORE/s JOINLONG/s NOJOINLONG/s");
  354.         puts("   PLANEMASK/k GADOFFSET/k CACHESIZE/k BADCHAR/s QUIT/s");
  355.     }
  356.  
  357.       /* Tell him there are new settings available */
  358.     Signal(SnapRsrc->Task, SIGBREAKF_CTRL_F);
  359. }
  360.