ugl_main.c 1008 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "ugl.h"
  2. #include "ugl_bc.h"
  3. #include <stdio.h>
  4. #define UGL_MAX_INPUT_LINE_LEN 1024
  5. FILE *ugl_input_fp;
  6. char ugl_input_line[UGL_MAX_INPUT_LINE_LEN];
  7. int ugl_read_fp(void)
  8. {
  9. const char *s;
  10. ugl_current_input_line = 0;
  11. for(;;)
  12. {
  13. if ( fgets(ugl_input_line, UGL_MAX_INPUT_LINE_LEN, ugl_input_fp) == NULL )
  14. break;
  15. ugl_current_input_line++;
  16. s = &(ugl_input_line[0]);
  17. if ( ugl_read_line(&s) == 0 )
  18. return 0;
  19. }
  20. return 1;
  21. }
  22. int ugl_read_filename(const char *name)
  23. {
  24. ugl_input_fp = fopen(name, "r");
  25. if ( ugl_input_fp == NULL )
  26. return 0;
  27. printf("file '%s'\n", name);
  28. if ( ugl_read_fp() == 0 )
  29. return fclose(ugl_input_fp), 0;
  30. fclose(ugl_input_fp);
  31. return 1;
  32. }
  33. extern uint8_t ugl_bytecode_array[];
  34. void ugl_ExecBytecode(void)
  35. {
  36. bc_t bc;
  37. bc_exec(&bc, ugl_bytecode_array, 0);
  38. }
  39. int main(void)
  40. {
  41. ugl_InitBytecode();
  42. ugl_read_filename("test.ugl");
  43. ugl_ResolveSymbols();
  44. ugl_ExecBytecode();
  45. ugl_WriteBytecodeCArray(stdout, "code");
  46. }