[BACK]Return to ox_texmacs.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kxx

Diff for /OpenXM/src/kxx/ox_texmacs.c between version 1.24 and 1.30

version 1.24, 2006/01/21 12:23:15 version 1.30, 2006/03/03 02:30:09
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kxx/ox_texmacs.c,v 1.23 2006/01/21 12:04:47 takayama Exp $ */  /* $OpenXM: OpenXM/src/kxx/ox_texmacs.c,v 1.29 2006/02/04 02:56:49 takayama Exp $ */
   
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
Line 52  char *Data_begin_ps[] = {
Line 52  char *Data_begin_ps[] = {
 char *Data_end[] = {  char *Data_end[] = {
   "</S>",    "</S>",
   "\005",    "\005",
   "\n\005"    "\n\005"    /* \n is not a part of the protocol. */
 };  };
   
   /* todo:  start_of_input */
   
 /*  char End_of_input[] = {
 #define TEXMACS_END_OF_INPUT  '#'    0x5,              /* Use ^E and Return to end the input. */
 */    '\n',  /* TEXMACS_END_OF_INPUT. 0xd should be used for multiple lines. */
 #define TEXMACS_END_OF_INPUT '\n'    0x5    /* CFEP_END_OF_INPUT    */
 #define CFEP_END_OF_INPUT 0x5  };
   
 /* Table for the engine type. */  /* Table for the engine type. */
 #define ASIR          1  #define ASIR          1
Line 83  int TM_do_not_print = 0;
Line 84  int TM_do_not_print = 0;
   
 int Xm_noX = 0;  int Xm_noX = 0;
 int NoCopyright = 0;  int NoCopyright = 0;
   int Cpp = 0;                 /* Use cpp before sending to the engine. */
   int EngineLogToStdout = 0;   /* Do not run the ox engine inside xterm. */
   
   char *LanguageResource = NULL;
   
 void ctrlC();  void ctrlC();
 struct object KpoString(char *s);  struct object KpoString(char *s);
 char *KSpopString(void);  char *KSpopString(void);
Line 99  static int isPS(char *s);
Line 104  static int isPS(char *s);
 static int end_of_input(int c);  static int end_of_input(int c);
 static void setDefaultParameterForCfep();  static void setDefaultParameterForCfep();
   
   static void myEncoder(int c);
   static void myEncoderS(unsigned char *s);
   static void myEncoderSn(unsigned char *s,int n);
   static void outputStringToTunnel0(int channel, unsigned char *s, int size, int view);
   static void outputStringToTunnel(int channel, unsigned char *s,  int view);
   
 /* tail -f /tmp/debug-texmacs.txt  /* tail -f /tmp/debug-texmacs.txt
    Debug output to understand the timing problem of pipe interface.     Debug output to understand the timing problem of pipe interface.
 */  */
Line 131  main(int argc,char *argv[]) {
Line 142  main(int argc,char *argv[]) {
       }else if (strcmp(argv[i],"cfep")==0) {        }else if (strcmp(argv[i],"cfep")==0) {
         View = V_CFEP; setDefaultParameterForCfep();          View = V_CFEP; setDefaultParameterForCfep();
       }else{        }else{
           View = GENERIC;
         /* printv("Unknown view type.\n"); */          /* printv("Unknown view type.\n"); */
       }        }
     } else if (strcmp(argv[i],"--sm1") == 0) {      } else if (strcmp(argv[i],"--sm1") == 0) {
Line 146  main(int argc,char *argv[]) {
Line 158  main(int argc,char *argv[]) {
       Xm_noX = 1;        Xm_noX = 1;
     }else if (strcmp(argv[i],"--noCopyright") == 0) {      }else if (strcmp(argv[i],"--noCopyright") == 0) {
       NoCopyright = 1;        NoCopyright = 1;
       }else if (strcmp(argv[i],"--cpp") == 0) {
         Cpp = 1;
       }else if (strcmp(argv[i],"--engineLogToStdout") == 0) {
         EngineLogToStdout = 1;
       }else if (strcmp(argv[i],"--languageResource") == 0) {
         i++;
         LanguageResource = (char *)sGC_malloc(strlen(argv[i])+80);
         sprintf(LanguageResource,
                             " /localizedString.file (%s) def localizedString.load ",argv[i]);
     }else{      }else{
       /* printv("Unknown option\n"); */        /* printv("Unknown option\n"); */
     }      }
Line 175  main(int argc,char *argv[]) {
Line 196  main(int argc,char *argv[]) {
   /* engine id should be set to ox.engine */    /* engine id should be set to ox.engine */
   KSexecuteString(" [(parse) (ox.sm1) pushfile] extension ");    KSexecuteString(" [(parse) (ox.sm1) pushfile] extension ");
   if (Xm_noX) KSexecuteString(" /Xm_noX 1 def ");    if (Xm_noX) KSexecuteString(" /Xm_noX 1 def ");
     if (EngineLogToStdout) KSexecuteString(" /Xm_engineLogToStdout 1 def ");
     if (LanguageResource != NULL) KSexecuteString(LanguageResource);
   startEngine(TM_Engine," ");    startEngine(TM_Engine," ");
   
   if (signal(SIGINT,SIG_IGN) != SIG_IGN) {    if (signal(SIGINT,SIG_IGN) != SIG_IGN) {
Line 214  main(int argc,char *argv[]) {
Line 237  main(int argc,char *argv[]) {
     if (s == NULL) { irt = 1; continue; }      if (s == NULL) { irt = 1; continue; }
     if (!irt) printf("%s",Data_begin_v[View]);      if (!irt) printf("%s",Data_begin_v[View]);
     /* Evaluate the input on the engine */      /* Evaluate the input on the engine */
       KSexecuteString(" ox.engine oxclearstack ");
     KSexecuteString(" ox.engine ");      KSexecuteString(" ox.engine ");
     ob = KpoString(s);      ob = KpoString(s);
     KSpush(ob);      KSpush(ob);
     KSexecuteString(" oxsubmit ");      KSexecuteString(" oxsubmit ");
   
     /* Get the result in string. */      /* Get the result in string for cfep. */
       if (View != V_TEXMACS) {
         KSexecuteString(" ox.engine oxgeterrors ");
         ob = KSpop();
         if (ob.tag == Sarray) {
           if (getoaSize(ob) > 0) {
             ob = getoa(ob,0);
             KSpush(ob);
             KSexecuteString(" translateErrorForCfep ");
             r = KSpopString();
             outputStringToTunnel(0,(unsigned char *)r,View);
           }
         }
         if (!TM_do_not_print) {
           KSexecuteString(" ox.engine oxpopstring ");
           r = KSpopString();
           printv(r);
         }else{
           KSexecuteString(" ox.engine 1 oxpops ");
           KSexecuteString(" ox.engine 0 oxpushcmo ox.engine oxpopcmo ");
           ob = KSpop();
           printv("");
         }
         continue;
       }
       /* Get the result in string for texmacs  */
     if (Format == 1 && (! TM_do_not_print)) {      if (Format == 1 && (! TM_do_not_print)) {
       /* translate to latex form */        /* translate to latex form */
       KSexecuteString(" ox.engine oxpushcmotag ox.engine oxpopcmo ");        KSexecuteString(" ox.engine oxpushcmotag ox.engine oxpopcmo ");
Line 267  main(int argc,char *argv[]) {
Line 316  main(int argc,char *argv[]) {
         printv("");          printv("");
       }        }
     }      }
       /* note that there is continue above. */
   }    }
 }  }
   
Line 312  static char *readString(FILE *fp, char *prolog, char *
Line 362  static char *readString(FILE *fp, char *prolog, char *
 #endif  #endif
     if (end_of_input(c)) {      if (end_of_input(c)) {
       /* If there remains data in the stream,        /* If there remains data in the stream,
          read the remaining data. */           read the remaining data. (for debug) */
           /*            /*
       if (oxSocketSelect0(0,1)) {        if (oxSocketSelect0(0,1)) {
         if (c == '\n') c=' ';          if (c == '\n') c=' ';
Line 381  static char *readString(FILE *fp, char *prolog, char *
Line 431  static char *readString(FILE *fp, char *prolog, char *
 }  }
   
 static int end_of_input(int c) {  static int end_of_input(int c) {
   switch(View) {    if (c == End_of_input[View]) return 1;
   case V_TEXMACS:    else return 0;
     if (c == TEXMACS_END_OF_INPUT) return 1;  
     else 0;  
     break;  
   case V_CFEP:  
     if (c == CFEP_END_OF_INPUT) return 1;  
     else 0;  
     break;  
   default:  
     if (c == '\n') return 1;  
     else 0;  
   }  
 }  }
   
 static void setDefaultParameterForCfep() {  static void setDefaultParameterForCfep() {
   Format = 0;    Format = 0;
 }  }
Line 456  static int startEngine(int type,char *msg) {
Line 496  static int startEngine(int type,char *msg) {
     /* Initialize the setting of sm1. */      /* Initialize the setting of sm1. */
     KSexecuteString("  oxsm1.ccc ( [(cmoLispLike) 0] extension ) oxsubmit ");      KSexecuteString("  oxsm1.ccc ( [(cmoLispLike) 0] extension ) oxsubmit ");
     KSexecuteString("  oxsm1.ccc ( ox_server_mode ) oxsubmit ");      KSexecuteString("  oxsm1.ccc ( ox_server_mode ) oxsubmit ");
     KSexecuteString("  oxsm1.ccc ( ( ) message (------------- Message from sm1 ----------------)message ) oxsubmit ");      KSexecuteString("  oxsm1.ccc ( ( ) message (------------- Message from sm1 ----------------)message ) oxsubmit [(flush)] extension pop ");
     TM_sm1Started = 1;      TM_sm1Started = 1;
         /* Welcome message.  BUG. Copyright should be returned by a function. */          /* Welcome message.  BUG. Copyright should be returned by a function. */
     if (! NoCopyright) {      if (! NoCopyright) {
Line 466  static int startEngine(int type,char *msg) {
Line 506  static int startEngine(int type,char *msg) {
       printf("Info: http://www.math.kobe-u.ac.jp/KAN, kan@math.kobe-u.ac.jp.\n");        printf("Info: http://www.math.kobe-u.ac.jp/KAN, kan@math.kobe-u.ac.jp.\n");
       printf("0 usages to show a list of functions. \n(keyword) usages to see a short description\n");        printf("0 usages to show a list of functions. \n(keyword) usages to see a short description\n");
     }      }
     printf("%s\n",msg);      printf("%s\n",msg); fflush(NULL);
   }else if (type == K0) {    }else if (type == K0) {
     if (!TM_k0Started) KSexecuteString(" k0connectr ");      if (!TM_k0Started) KSexecuteString(" k0connectr ");
     KSexecuteString(" /ox.engine oxk0.ccc def ");      KSexecuteString(" /ox.engine oxk0.ccc def ");
Line 514  static int startEngine(int type,char *msg) {
Line 554  static int startEngine(int type,char *msg) {
 4.  print("hello"); shift+return print("afo");  4.  print("hello"); shift+return print("afo");
   
 */  */
   
   static void myEncoder(int c) {
     putchar(0xf8 | (0x3 & (c >> 6)));
     putchar(0xf0 | (0x7 & (c >> 3)));
     putchar(0xf0 | (0x7 & c));
   }
   static void myEncoderS(unsigned char *s) {
     int i,n;
     n = strlen(s);
     for (i = 0; i<n ; i++) myEncoder(s[i]);
   }
   static void myEncoderSn(unsigned char *s,int n) {
     int i;
     for (i = 0; i<n ; i++) myEncoder(s[i]);
   }
   static void outputStringToTunnel0(int channel, unsigned char *s, int n,int view) {
     unsigned char ts[128];
     int i;
     if (view == GENERIC) {
       printf("{%d<%d ",channel,n+1);
       for (i=0; i<n; i++) putchar(s[i]);
       printf("%c>}",0);
     }else if (view == V_CFEP) {
       sprintf(ts,"{%d<%d ",channel,n+1);
       myEncoderS(ts);
       myEncoderSn(s,n); myEncoder(0);
       myEncoderS(">}");
     }
     fflush(stdout);
   }
   #define LINE_FEED 0xc   /* ^L */
   static void outputStringToTunnel(int channel, unsigned char *s, int view) {
     int start, i;
     start = i = 0;
     while (s[i] != 0) {
           if (s[i] == LINE_FEED) {
             outputStringToTunnel0(channel,&(s[start]),i-start,view);
             start = i+1;
           }
           i++;
     }
   }
   
   
   
   

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.30

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>