home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 10 / AU_CD10.iso / Archived / Updates / Flash / writeflash / !MakeFlash / c / main < prev    next >
Text File  |  2000-04-25  |  2KB  |  107 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <math.h>
  6. #include <ctype.h>
  7. //
  8. #include "proto.h"
  9. #include "main.h"
  10. #include "bucket.h"
  11. #include "parser.h"
  12. #include "preprocess.h"
  13. #include "evaluate.h"
  14. #ifdef RISCOS
  15. #include "os.h"
  16. #endif
  17.  
  18. int debug_print_lines;
  19.  
  20.  
  21. void usage() {
  22.  
  23.   fprintf(stderr, "writeflash 0.09\n");
  24.   fprintf(stderr, "syntax:   writeflash [switches] <infile> [<outfile>]\n");
  25.   fprintf(stderr, "switches:      -pl   print lines\n");
  26.   exit(-1);
  27. }
  28.  
  29.  
  30. int main(int argc, char *argv[]) {
  31.  
  32.   U8 *buffer;
  33.   U32 size;
  34.   int arg;
  35.  
  36.   if ((argc < 2) || (argc > 4))   usage();
  37.  
  38.   // default arguments/switches
  39.   debug_print_lines = 0;
  40.  
  41.   // next unused argument
  42.   arg = 1;
  43.   while (argv[arg][0] == '-') {
  44.     if (strcmp(argv[arg], "-pl") == 0) {
  45.       debug_print_lines = 1;
  46.  
  47.     }
  48.     arg++;
  49.   }
  50.  
  51.   init_evaluator();
  52.  
  53.   if (arg == argc) {
  54.     fprintf(stderr, "Too few arguments\n");
  55.     usage();
  56.   }
  57.  
  58.   // load/preprocess the input file
  59.   if (preprocessor(argv[arg]))   exit(0);
  60.   arg++;
  61.  
  62.   if (parse_file()) {
  63.     printf("failed to parse file\n");
  64.     exit(0);
  65.   }
  66.  
  67.   if (init_bucket(NULL, 0)) {
  68.     fprintf(stderr, "Failed to initialise buffer\n");
  69.     exit(0);
  70.   }
  71.  
  72.   if (write_flash_file()) {
  73.     fprintf(stderr, "Failed to create file\n");
  74.   }
  75.  
  76.   if (close_bucket(&buffer, &size)) {
  77.     fprintf(stderr, "Failed to read output buffer\n");
  78.     exit(0);
  79.   }
  80.  
  81.   buffer[4] = size       & 255;
  82.   buffer[5] = (size>> 8) & 255;
  83.   buffer[6] = (size>>16) & 255;
  84.   buffer[7] = (size>>24) & 255;
  85.  
  86.   if (arg == argc) {
  87.     U32 i;
  88.     for (i = 0; i < size; i++)
  89. #ifdef RISCOS
  90.       xos_writec(buffer[i]);
  91. #else
  92.       printf("%c", buffer[i];
  93. #endif
  94.  
  95.   } else {
  96.     FILE *fh;
  97.  
  98.     fh = fopen(argv[arg], "wb");
  99.     if (!fh) {
  100.       fprintf(stderr, "Failed to open file %s\n", argv[arg]);
  101.       exit(0);
  102.     }
  103.     fwrite(buffer, 1, size, fh);
  104.     fclose(fh);
  105.   }
  106. }
  107.