home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 116.lha / SmallTalk / Sources / MAIN.C < prev    next >
C/C++ Source or Header  |  1986-11-20  |  2KB  |  116 lines

  1. /*
  2.     Little Smalltalk, version 2
  3.     Written by Tim Budd, Oregon State University, July 1987
  4.  
  5.     unix specific driver (front-end) for bytecode interpreter.
  6. */
  7. # include <stdio.h>
  8.  
  9. # include "env.h"
  10. # include "memory.h"
  11. # include "names.h"
  12. # include "interp.h"
  13. # include "process.h"
  14.  
  15. # ifdef STRING
  16. # include <string.h>
  17. # endif
  18. # ifdef STRINGS
  19. # include <strings.h>
  20. # endif
  21. # ifdef SIGNALS
  22. # include <signal.h>
  23. # include <setjmp.h>
  24. jmp_buf intenv;
  25. # endif
  26. # ifdef SSIGNALS
  27. # include <signal.h>
  28. # include <setjmp.h>
  29. jmp_buf intenv;
  30. # endif
  31.  
  32. extern int processStackTop;
  33. extern object processStack[];
  34.  
  35. # ifdef SIGNALS
  36. brkfun() { longjmp(intenv, 1); }
  37. # endif
  38. # ifdef SSIGNALS
  39. brkfun() { longjmp(intenv, 1); }
  40. # endif
  41.  
  42. main(argc, argv) 
  43. int argc;
  44. char **argv;
  45. {
  46. FILE *fp;
  47. char fileName[120];
  48.  
  49. initMemoryManager();
  50.  
  51. if ((argc == 1) || ((argc > 1) && streq(argv[1],"-"))){
  52. # ifdef BINREADWRITE
  53.     fp = fopen(INITIALIMAGE,"rb");
  54. # endif
  55. # ifndef BINREADWRITE
  56.     fp = fopen(INITIALIMAGE,"r");
  57. # endif
  58.     if (fp == NULL)
  59.         sysError("cannot read image file",INITIALIMAGE);
  60.     }
  61. else {
  62. # ifdef BINREADWRITE
  63.     fp = fopen(argv[1], "rb");
  64. # endif
  65. # ifndef BINREADWRITE
  66.     fp = fopen(argv[1], "r");
  67. # endif
  68.     if (fp == NULL)
  69.         sysError("cannot read image file", argv[1]);
  70.     }
  71. imageRead(fp);
  72. ignore fclose(fp);
  73.  
  74. initCommonSymbols();
  75.  
  76. ignore fprintf(stderr,"initially %d objects\n", objcount());
  77.  
  78. /* now we are ready to start */
  79.  
  80. # ifdef SIGNALS
  81. ignore signal(SIGINT, brkfun);
  82. ignore setjmp(intenv);
  83. # endif
  84. # ifdef SSIGNALS
  85. ignore ssignal(SIGINT, brkfun);
  86. ignore setjmp(intenv);
  87. # endif
  88.  
  89. prpush(smallobj);
  90. sendMessage(newSymbol("commandLoop"), getClass(smallobj), 0);
  91. flushstack();
  92.  
  93. ignore fprintf(stderr,"finally %d objects\n", objcount());
  94.  
  95. if (argc > 2) {
  96.     if (streq(argv[2],"-"))
  97.         ignore strcpy(fileName, INITIALIMAGE);
  98.     else
  99.         ignore strcpy(fileName, argv[2]);
  100. # ifdef BINREADWRITE
  101.     fp = fopen(fileName,"wb");
  102. # endif
  103. # ifndef BINREADWRITE
  104.     fp = fopen(fileName,"w");
  105. # endif
  106.     if (fp == NULL)
  107.         sysError("cannot write image file",fileName);
  108.     else {
  109.         ignore fprintf(stderr,"creating image file %s\n", fileName);
  110.         imageWrite(fp);
  111.         ignore fclose(fp);
  112.         }
  113.     }
  114. exit(0);
  115. }
  116.