home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.mdf / Apps / DevTools / COWS / Code / COWSTestBench.m < prev    next >
Encoding:
Text File  |  1994-03-22  |  2.6 KB  |  128 lines

  1. /*
  2.     Copyright (C) 1994 Sean Luke
  3.  
  4.     COWSTestBench.m
  5.     Version 1.0
  6.     Sean Luke
  7.     
  8.     This object is just a front end to make the interpreter look pretty in this
  9.     example program...
  10.     
  11. */
  12.  
  13. #import "COWSTestBench.h"
  14. #import "COWSInterpreter.h"
  15. #import <appkit/appkit.h>
  16. #import "COWSLibrary.h"
  17. #import "COWSStringNode.h"
  18. #import <string.h>
  19.  
  20. @implementation COWSTestBench
  21.  
  22. - print:sender
  23. {
  24.     [interpreter printProgram];
  25.     [interpreter printDictionaries];
  26.     return self;
  27. }
  28.  
  29. - setTimedEntry:sender
  30. {
  31.     [interpreter setForeground: (BOOL)[[foreground cellAt:0:0] intValue]];
  32.     [interpreter setLocked: [locked intValue]];
  33.     [interpreter setTimedEntrySpeed:[timedEntry floatValue]];
  34.     [interpreter setRepeats:[repeats intValue]];
  35.     [self revertTimedEntry:sender];                    // makes fields pretty
  36.     return self;
  37. }
  38.  
  39. - revertTimedEntry:sender
  40. {
  41.     [foreground selectCellAt:
  42.         ([interpreter foreground] ? 0 : 1):0];
  43.     [timedEntry setFloatValue:[interpreter timedEntrySpeed]];
  44.     [repeats setIntValue:[interpreter repeats]];
  45.     [locked setIntValue:[interpreter locked]];
  46.     return self;
  47. }
  48.  
  49. - load:sender
  50. {
  51.     int x=[program textLength];
  52.     char prog[x+1];
  53.     
  54.     [program getSubstring:prog start:0 length:x];
  55.     prog[x]='\0';                            // some bug in Text object
  56.     [interpreter clearLibraryFunctions];
  57.     [interpreter addLibrary:library];
  58.     [interpreter addLibrary:jungle];
  59.     [interpreter addLibrary:ipc];
  60.     [interpreter addLibrary:array];
  61.     [interpreter setDelegate:self];
  62.     if ([interpreter setProgram:prog]>=0)
  63.         {
  64.         printf ("LOADED PROGRAM\n");
  65.         }
  66.     else printf ("ERROR PARSING PROGRAM\n");
  67.     return self;
  68. }
  69.  
  70. - execute:sender
  71. {
  72.     id arg_list=[[COWSArgumentList alloc] init];
  73.     int m=1;
  74.     id args=[[COWSArgumentList alloc] init];
  75.         
  76.     while (m<=6&&strlen([[matrix cellAt:m:0] stringValue]))
  77.         {
  78.         id temp=[[COWSStringNode alloc] init];
  79.         [temp setString:[[matrix cellAt:m:0] stringValue]];
  80.         [arg_list push:temp]; 
  81.         m++;
  82.         }
  83.     
  84.     // this is in wrong order...so reverse it...
  85.     
  86.     while([arg_list top]!=NULL)
  87.         {
  88.         [args push:[arg_list pop]];
  89.         }
  90.     [arg_list free];
  91.         
  92.     [interpreter interpretFunction:[[matrix cellAt:0:0] stringValue]
  93.         arguments:args];
  94.     [args free];
  95.     return self;
  96. }
  97.  
  98. - loadAndExecute:sender
  99. {
  100.     [self load:self];
  101.     [self execute:self];
  102.     return self;
  103. }
  104.  
  105. - stop:sender
  106. {
  107.     printf("\nSTOPPED PROGRAM\n");
  108.     [interpreter stopInterpreting];
  109.     return self;
  110. }
  111.  
  112.  
  113. - finishedInterpreting:(const char*)returnValue:(int)thisMessage:sender
  114. {
  115.     printf("\n FINISHED PROGRAM message: %d  return:  %s\n",thisMessage,returnValue);
  116.     return self;
  117. }
  118.  
  119. - errorInterpreting:(int) thisError:(const char*)thisFunction:
  120.     (int)thisPosition:(const char*)thisString:sender
  121. {
  122.     // doesn't do anything right now...my errors are printed to stdout.
  123.     return self;
  124. }
  125.  
  126.  
  127. @end
  128.