home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 192.lha / Snip_v1.3 / parse.c < prev    next >
C/C++ Source or Header  |  1988-04-28  |  5KB  |  182 lines

  1.  
  2. #include "snip:defs.h"
  3. #include "ctype.h"
  4. #include "intuition/intuitionbase.h"
  5.  
  6. typedef union bits32
  7. {
  8.     UBYTE bytes[8];
  9.     ULONG longword[2];
  10. }       long_byte;
  11.  
  12. extern long_byte char_bitmap[];
  13. extern short save_format, x_offset, y_offset;
  14. extern char usage[];
  15. extern struct FileHandle *outfilehandle;
  16. extern struct NewWindow nwindow;
  17. extern struct IntuitionBase *IntuitionBase;
  18.  
  19. BOOL reactivate = FALSE;
  20.  
  21. parse_args(argc,argv)
  22. register int argc;
  23. register char **argv;
  24. {
  25.     register short index=1;
  26.     register struct FileHandle *out = Output();
  27.     char fname[128];
  28.     register char *filename = fname;
  29.     register struct FileHandle *fp;
  30.     register char opt;
  31.     struct Screen *Screen, *findscreen();
  32.  
  33.     filename[0] = 's';
  34.     filename[1] = ':';
  35.  
  36.     while (argc-- > 1)
  37.     {
  38.         if (!strcmp(argv[index],"on"))
  39.         {
  40.             if (argc <= 1)
  41.             {
  42.                 Wrlen(out,usage);
  43.                 return 0;
  44.             }
  45.  
  46.             if ((Screen = findscreen(argv[++index])) == NULL)
  47.             {
  48.                 Wr(out,"Can't locate given screen\n");
  49.                 return 0;
  50.             }
  51.  
  52.             nwindow.Screen = Screen;
  53.             nwindow.Type = CUSTOMSCREEN;
  54.             ScreenToFront(Screen);
  55.  
  56.             argc--;
  57.             index++;
  58.         }
  59.         else if (*(argv[index]) == '-')
  60.         {
  61.             if (isdigit(opt = *(argv[index]+1)))
  62.                 goto parse_offsets;
  63.  
  64.             switch(opt)
  65.             {
  66.                 case 'p':
  67.                     save_format = WRITE_PIPE;
  68.                     break;
  69.  
  70.                 case 'c':
  71.                     save_format = PASTE_CLIPBOARD;
  72.                     break;
  73.  
  74.                 case 's':
  75.                     save_format = PRINT_STDOUT;
  76.                     break;
  77.  
  78.                 case 'k':
  79.                     save_format = TYPE_KEYBOARD;
  80.                     break;
  81.  
  82.                 case 'K':
  83.                     save_format = KEYBOARD_NOCR;
  84.                     break;
  85.  
  86.                 case 'a':
  87.                     reactivate = TRUE;
  88.                     break;
  89.  
  90.                 case 'f':
  91.                     index++;
  92.                     if (argc-- <= 1)
  93.                     {
  94.                         Wr(out,"Please supply a filename\n");
  95.                         Wrlen(out,usage);
  96.                         return(0);
  97.                     }
  98.                     strcpy(filename+2,argv[index]);
  99.                     strcat(filename+2,".fontdef");
  100.  
  101.                     if (!((fp=Open(filename+2,MODE_OLDFILE)) ||
  102.                           (fp=Open(filename,MODE_OLDFILE))))
  103.                     {
  104.                         Wr(out,"Can't open font definition file\n");
  105.                         return(0);
  106.                     }
  107.  
  108.                     if (Read(fp,&char_bitmap[0],760) != 760)
  109.                     {
  110.                         Wr(out,"Invalid file length (should be 760)\n");
  111.                         Close(fp);
  112.                         return(0);
  113.                     }
  114.                     Close(fp);
  115.                     break;
  116.  
  117.                 case 'o':
  118.                     index++;
  119.                     if (argc-- <= 1)
  120.                     {
  121.                         Wr(out,"Please supply an output filename\n");
  122.                         Wrlen(out,usage);
  123.                         return(0);
  124.                     }
  125.                     if (!(outfilehandle = Open(argv[index],MODE_NEWFILE)))
  126.                     {
  127.                         Wr(out,"Couldn't open output file!\n");
  128.                         return(0);
  129.                     }
  130.                     break;
  131.  
  132.                 default:
  133.                     Wr(out,"Unknown option\n");
  134.                     Wrlen(out,usage);
  135.                     return(0);
  136.                     break;
  137.             }
  138.             index++;
  139.         }
  140.         else
  141.         {
  142. parse_offsets:
  143.             if (argc <= 1)
  144.             {
  145.                 Wr(out,"Bad syntax for offsets\n");
  146.                 Wrlen(out,usage);
  147.                 return(0);
  148.             }
  149.  
  150.             x_offset = (short)atoi(argv[index++]);
  151.             y_offset = (short)atoi(argv[index++]);
  152.  
  153.             argc--;
  154.         }
  155.     }
  156.     return(1);
  157. }
  158.  
  159. struct Screen *findscreen(title)
  160. char *title;
  161. {
  162.     struct Screen *Screen;
  163.  
  164.     for (Screen = IntuitionBase->FirstScreen; Screen; Screen = Screen->NextScreen)
  165.         if (!compare(title, Screen->Title) ||
  166.            (Screen->Title == NULL && !compare(title,"-null")))
  167.                 return Screen;
  168.  
  169.     return NULL;
  170. }
  171.  
  172. compare(string1, string2)
  173. char *string1, *string2;
  174. {
  175.     while ((*string1 != '\0') && (*string1 != ' ')) {
  176.         if (toupper(*string1++) != toupper(*string2++)) /* space and null both end conditions */
  177.             return(1);
  178.     }
  179.     return(0);  /* return weird values like strcmp() */
  180. }
  181.  
  182.