[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.32 and 1.33

version 1.32, 2006/03/03 10:55:33 version 1.33, 2006/03/06 08:55:31
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kxx/ox_texmacs.c,v 1.31 2006/03/03 02:47:28 takayama Exp $ */  /* $OpenXM: OpenXM/src/kxx/ox_texmacs.c,v 1.32 2006/03/03 10:55:33 takayama Exp $ */
   
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
Line 7 
Line 7 
 #include <signal.h>  #include <signal.h>
 #include "ox_kan.h"  #include "ox_kan.h"
 #include "serversm.h"  #include "serversm.h"
   #include "ox_pathfinder.h"
   
 #if defined(__CYGWIN__)  #if defined(__CYGWIN__)
 #define JMP_BUF sigjmp_buf  #define JMP_BUF sigjmp_buf
Line 72  extern int Quiet;
Line 73  extern int Quiet;
 extern JMP_BUF EnvOfStackMachine;  extern JMP_BUF EnvOfStackMachine;
 extern int Calling_ctrlC_hook;  extern int Calling_ctrlC_hook;
 extern int RestrictedMode, RestrictedMode_saved;  extern int RestrictedMode, RestrictedMode_saved;
 int Format=1;  /* 1 : latex mode */  int Format=1;  /* 1 : latex mode, 2: cfep_png */
 int OutputLimit_for_TeXmacs = (1024*10);  int OutputLimit_for_TeXmacs = (1024*10);
   
   
Line 87  int NoCopyright = 0;
Line 88  int NoCopyright = 0;
 int Cpp = 0;                 /* Use cpp before sending to the engine. */  int Cpp = 0;                 /* Use cpp before sending to the engine. */
 int EngineLogToStdout = 0;   /* Do not run the ox engine inside xterm. */  int EngineLogToStdout = 0;   /* Do not run the ox engine inside xterm. */
   
 unsigned char *AsirInitFile = NULL;  char *AsirInitFile = NULL;
   
 char *LanguageResource = NULL;  char *LanguageResource = NULL;
   
Line 112  static void myEncoderSn(unsigned char *s,int n);
Line 113  static void myEncoderSn(unsigned char *s,int n);
 static void outputStringToTunnel0(int channel, unsigned char *s, int size, int view);  static void outputStringToTunnel0(int channel, unsigned char *s, int size, int view);
 static void outputStringToTunnel(int channel, unsigned char *s,  int view);  static void outputStringToTunnel(int channel, unsigned char *s,  int view);
   
   static void pngSendFile(char *path);
   static int pngCheck(void);
   static void pngNotAvailable(void);
   static char *pngGetResult();
   
 static void flushSm1();  static void flushSm1();
   
 /* tail -f /tmp/debug-texmacs.txt  /* tail -f /tmp/debug-texmacs.txt
Line 128  main(int argc,char *argv[]) {
Line 134  main(int argc,char *argv[]) {
   int vmode=1;    int vmode=1;
   char *openxm_home;    char *openxm_home;
   char *asir_config;    char *asir_config;
     char *path;
   int i;    int i;
   
   
Line 173  main(int argc,char *argv[]) {
Line 180  main(int argc,char *argv[]) {
                           " /localizedString.file (%s) def localizedString.load ",argv[i]);                            " /localizedString.file (%s) def localizedString.load ",argv[i]);
     }else if (strcmp(argv[i],"--asirInitFile") == 0) {      }else if (strcmp(argv[i],"--asirInitFile") == 0) {
       i++;        i++;
       AsirInitFile = (unsigned char *)sGC_malloc(strlen(argv[i])+80);        AsirInitFile = (char *)sGC_malloc(strlen(argv[i])+80);
       sprintf(AsirInitFile,"%s",argv[i]);        sprintf(AsirInitFile,"%s",argv[i]);
     }else{      }else{
       /* printv("Unknown option\n"); */        /* printv("Unknown option\n"); */
Line 267  main(int argc,char *argv[]) {
Line 274  main(int argc,char *argv[]) {
         }          }
       }        }
       if (!TM_do_not_print) {        if (!TM_do_not_print) {
         KSexecuteString(" ox.engine oxpopstring ");          if (Format == 2) { /* png mode */
         r = KSpopString();            r = pngGetResult();
           }else{
             KSexecuteString(" ox.engine oxpopstring ");
             r = KSpopString();
           }
         printv(r);          printv(r);
       }else{        }else{
         KSexecuteString(" ox.engine 1 oxpops ");          KSexecuteString(" ox.engine 1 oxpops ");
Line 279  main(int argc,char *argv[]) {
Line 290  main(int argc,char *argv[]) {
       continue;        continue;
     }      }
     /* Get the result in string for texmacs  */      /* 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 ");
       ob = KSpop();        ob = KSpop();
Line 330  main(int argc,char *argv[]) {
Line 341  main(int argc,char *argv[]) {
   }    }
 }  }
   
   static char *pngGetResult(void) {
     struct object ob;
     int vmode;
     char *r;
     char *path;
   
     /* translate to latex form */
     KSexecuteString(" ox.engine oxpushcmotag ox.engine oxpopcmo ");
     ob = KSpop();
     vmode = 0;
     /* printf("id=%d\n",ob.tag); bug: matrix return 17 instead of Sinteger
        or error. */
     if (ob.tag == Sinteger) {
       /* printf("cmotag=%d\n",ob.lc.ival);*/
       if (ob.lc.ival == CMO_ERROR2) {
         vmode = 1;
       }
       if (ob.lc.ival == CMO_STRING) {
         vmode = 1;
       }
     }
     if (vmode) {
       KSexecuteString(" ox.engine oxpopstring ");
       r = KSpopString();
     }else{
       KSexecuteString(" ox.engine 1 oxpushcmo ox.engine (print_png_form2) oxexec  ");
       KSexecuteString(" ox.engine oxpopcmo /tmp_ox_texmacs set tmp_ox_texmacs 0 get ");
       r = KSpopString();  /* input form */
       KSexecuteString(" tmp_ox_texmacs 1 get ");
       path = KSpopString(); /* path name of the png file. */
       pngSendFile(path);
     }
     return r;
   }
   
 #define SB_SIZE 1024  #define SB_SIZE 1024
 #define INC_BUF     if (n >= limit-3) { \  #define INC_BUF     if (n >= limit-3) { \
       tmp = s; \        tmp = s; \
Line 394  static char *readString(FILE *fp, char *prolog, char *
Line 440  static char *readString(FILE *fp, char *prolog, char *
   }    }
   /* Check the escape sequence to change the global env. */    /* Check the escape sequence to change the global env. */
   if (strcmp(&(s[start]),"!verbatim;") == 0) {    if (strcmp(&(s[start]),"!verbatim;") == 0) {
     printv("Output mode is changed to verbatim mode.");      if (View != V_CFEP) printv("Output mode is changed to verbatim mode.");
     Format=0;      Format=0;
     return NULL;      return NULL;
   }    }
Line 403  static char *readString(FILE *fp, char *prolog, char *
Line 449  static char *readString(FILE *fp, char *prolog, char *
     Format = 1;      Format = 1;
     return NULL;      return NULL;
   }    }
     if (strcmp(&(s[start]),"!cfep_png;") == 0) {
           if (pngCheck()) {
             if (View != V_CFEP) printv("Output mode is changed to cfep_png/verbose.");
         Format = 2;
       } else pngNotAvailable();
       return NULL;
     }
   if (strcmp(&(s[start]),"!asir;") == 0) {    if (strcmp(&(s[start]),"!asir;") == 0) {
     Format=1;      Format=1;
     TM_Engine=ASIR; startEngine(TM_Engine,"Asir");      TM_Engine=ASIR; startEngine(TM_Engine,"Asir");
Line 560  static int startEngine(int type,char *msg) {
Line 613  static int startEngine(int type,char *msg) {
     if (AsirInitFile) {  /* cf. asir-contrib/packages/src/cfep-init.rr */      if (AsirInitFile) {  /* cf. asir-contrib/packages/src/cfep-init.rr */
           unsigned char *ss;            unsigned char *ss;
           ss = (unsigned char *)GC_malloc(strlen(AsirInitFile)+256);            ss = (unsigned char *)GC_malloc(strlen(AsirInitFile)+256);
           sprintf(ss," oxasir.ccc (load(\"%s\");) oxsubmit oxasir.ccc oxgeterrors length 0 gt { (Error in loading asirInitFile) message} { } ifelse ",AsirInitFile);            sprintf((char *)ss," oxasir.ccc (load(\"%s\");) oxsubmit oxasir.ccc oxgeterrors length 0 gt { (Error in loading asirInitFile) message} { } ifelse ",AsirInitFile);
           /* printf("Loading --asirInitFile %s\n",AsirInitFile); */            /* printf("Loading --asirInitFile %s\n",AsirInitFile); */
           KSexecuteString(ss);            KSexecuteString(ss);
     }      }
Line 595  static void myEncoder(int c) {
Line 648  static void myEncoder(int c) {
 }  }
 static void myEncoderS(unsigned char *s) {  static void myEncoderS(unsigned char *s) {
   int i,n;    int i,n;
   n = strlen(s);    n = strlen((char *)s);
   for (i = 0; i<n ; i++) myEncoder(s[i]);    for (i = 0; i<n ; i++) myEncoder(s[i]);
 }  }
 static void myEncoderSn(unsigned char *s,int n) {  static void myEncoderSn(unsigned char *s,int n) {
Line 610  static void outputStringToTunnel0(int channel, unsigne
Line 663  static void outputStringToTunnel0(int channel, unsigne
     for (i=0; i<n; i++) putchar(s[i]);      for (i=0; i<n; i++) putchar(s[i]);
     printf("%c>}",0);      printf("%c>}",0);
   }else if (view == V_CFEP) {    }else if (view == V_CFEP) {
     sprintf(ts,"{%d<%d ",channel,n+1);      sprintf((char *)ts,"{%d<%d ",channel,n+1);
     myEncoderS(ts);      myEncoderS(ts);
     myEncoderSn(s,n); myEncoder(0);      myEncoderSn(s,n); myEncoder(0);
     myEncoderS(">}");      myEncoderS((unsigned char *)">}");
   }    }
   fflush(stdout);    fflush(stdout);
 }  }
Line 631  static void outputStringToTunnel(int channel, unsigned
Line 684  static void outputStringToTunnel(int channel, unsigned
 }  }
   
   
   static void pngSendFile(char *path) {
     char s[1024];
     if (strlen(path) > 1000) return;
     sprintf(s,"showFile,%s",path);
     outputStringToTunnel0(10,(unsigned char *)s,strlen(s),View);
     printf("\n");
     fflush(NULL);
   }
   static int pngCheck(void) {
     static int checked = 0;
     static int ans = 0;
     if (checked) return ans;
     checked = 1;
     if (!getCommandPath("latex")) return 0;
     if (!getCommandPath("dvips")) return 0;
     if (!getCommandPath("pstoimg")) return 0;
     ans = 1;  return 1;
   }
   static void pngNotAvailable(void) {
     char *s = "notAvailable";
     outputStringToTunnel0(10,(unsigned char *)s,strlen(s),View);
     fflush(NULL);
   }
   

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.33

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