[BACK]Return to oxmisc2.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / plugin

Diff for /OpenXM/src/kan96xx/plugin/oxmisc2.c between version 1.1 and 1.4

version 1.1, 1999/10/08 02:12:05 version 1.4, 1999/11/27 01:41:11
Line 1 
Line 1 
   /* $OpenXM: OpenXM/src/kan96xx/plugin/oxmisc2.c,v 1.3 1999/11/18 00:54:17 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
 #include "ox_kan.h"  #include "ox_kan.h"
 #include "oxmisc2.h"   /* This file requires sm1 object description. */  #include "oxmisc2.h"   /* This file requires sm1 object description. */
Line 128  int oxReq(oxclientp client,int func,struct object ob)
Line 129  int oxReq(oxclientp client,int func,struct object ob)
   case SM_setMathCap:    case SM_setMathCap:
     /* ob = [(mathcap-obj) [[version num, system name] [sm tags]      /* ob = [(mathcap-obj) [[version num, system name] [sm tags]
                              ob1                        smtags                               ob1                        smtags
                                                 [[ox numbers] [cmo numbers]]]                                      oxtags      [[ox numbers, [cmo numbers]]]
                                                     ob3         ob2 */                                                      ob3         ob2 */
      /*     oxtags      [[OX_DATA, [cmo numbers]],[OX_DATA_LOCAL,[opt]],...]*/
     {      {
       struct object ob1;        struct object ob1;
       struct object ob2;        struct object ob2;
       struct object ob3;        struct object ob3;
         struct object obm;
       struct object smtags;        struct object smtags;
         struct object oxtags;
         struct object ox;
     int n,i;      int n,i;
     struct mathCap mathcap;      struct mathCap mathcap;
   
Line 143  int oxReq(oxclientp client,int func,struct object ob)
Line 148  int oxReq(oxclientp client,int func,struct object ob)
       client->dstate = DSTATE_ANY;        client->dstate = DSTATE_ANY;
       break;        break;
     }      }
       ob1 = getoa(getoa(ob,1),0);        obm = getoa(ob,1);
       smtags = getoa(getoa(ob,1),1);        ob1 = getoa(obm,0);
       ob2 = getoa(getoa(getoa(ob,1),2),1);        smtags = getoa(obm,1);
       ob3 = getoa(getoa(getoa(ob,1),2),0);        oxtags = getoa(obm,2);
         if (smtags.tag != Sarray || oxtags.tag != Sarray) {
           errorOxmisc2("data format error in oxReqSetMathCap");
         }
       ob1p = (struct object *) sGC_malloc(sizeof(struct object));        ob1p = (struct object *) sGC_malloc(sizeof(struct object));
       *ob1p = ob1;        *ob1p = ob1;
       mathcap.infop = ob1p;        mathcap.infop = ob1p;
       n = getoaSize(ob2);  
       mathcap.n = n;        n = getoaSize(oxtags);
       if (n >= MATHCAP_SIZE) errorOxmisc2("Too big mathcap of your peer.");        if (n >= MATHCAP_SIZE) errorOxmisc2("Too big mathcap of your peer.");
       for (i=0; i<n; i++) {  
         mathcap.cmo[i] = KopInteger(getoa(ob2,i));  
       }  
       n = getoaSize(ob3);  
       if (n >= MATHCAP_SIZE) errorOxmisc2("Too big mathcap of your peer.");  
       mathcap.oxSize = n;        mathcap.oxSize = n;
       for (i=0; i<n; i++) {        for (i=0; i<n; i++) {
         mathcap.ox[i] = KopInteger(getoa(ob3,i));          ox = getoa(oxtags,i);
           if (ox.tag != Sarray) {
             errorOxmisc2("Data format error of the third argument of mathcap.");
           }
           mathcap.ox[i] = KopInteger(getoa(ox,0));
           if (mathcap.ox[i] == OX_DATA) {
             if (getoaSize(ox) < 2) {
               errorOxmisc2("Data format error in an entry of the third argument of mathcap.");
             }
             ob2 = getoa(ox,1);
             if (ob2.tag != Sarray) {
               errorOxmisc2("Data format error in an entry of the third argument of mathcap.");
             }
             mathcap.n = getoaSize(ob2);
             if (n >= MATHCAP_SIZE) errorOxmisc2("Too big mathcap of your peer.");
             for (i=0; i<mathcap.n; i++) {
               mathcap.cmo[i] = KopInteger(getoa(ob2,i));
             }
           }
       }        }
   
       n = getoaSize(smtags);        n = getoaSize(smtags);
Line 584  struct object KoxWatch(struct object client,struct obj
Line 604  struct object KoxWatch(struct object client,struct obj
   int ans,k;    int ans,k;
   static oxclientp cc1 = NULL;    static oxclientp cc1 = NULL;
   struct object rob;    struct object rob;
     extern int WatchStream;
   rob.tag = Snull;    rob.tag = Snull;
     if (client.tag == Sinteger) {
           if (KopInteger(client)) {
             WatchStream = 1;
           }else{
             WatchStream = 0;
           }
           return;
     }
   if (cc1 == NULL) {    if (cc1 == NULL) {
     cc1 = (oxclientp) mymalloc(sizeof(oxclient));      cc1 = (oxclientp) mymalloc(sizeof(oxclient));
     if (cc1 == NULL) {      if (cc1 == NULL) {
Line 713  int cmoCheckMathCap(struct object obj, struct object *
Line 742  int cmoCheckMathCap(struct object obj, struct object *
 {  {
   struct object mathcap;    struct object mathcap;
   struct object cmolist;    struct object cmolist;
     struct object mathcapMain;
     struct object mathcapThird;
     struct object ox;
     struct object oxtag;
     struct object ob0;
     int oxsize;
   int n;    int n;
   int i;    int i;
 #define CMO_CHECK_MATH_CAP_LIST_SIZE 1024  #define CMO_CHECK_MATH_CAP_LIST_SIZE 1024
   int cmo[CMO_CHECK_MATH_CAP_LIST_SIZE];    int cmo[CMO_CHECK_MATH_CAP_LIST_SIZE];
   if (obp == NULL) return(1);    if (obp == NULL) return(1);
     /* printObject(*obp,0,stderr); for debug*/
   if (obp->tag != Sarray) {    if (obp->tag != Sarray) {
     fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");      fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
     printObject(*obp,0,stderr);      printObject(*obp,0,stderr);
Line 725  int cmoCheckMathCap(struct object obj, struct object *
Line 761  int cmoCheckMathCap(struct object obj, struct object *
     errorOxmisc2("cmoCheckMathCap: format error in the client->mathcapObjp field.\n");      errorOxmisc2("cmoCheckMathCap: format error in the client->mathcapObjp field.\n");
   }    }
   mathcap = *obp;    mathcap = *obp;
     /* Example of mathcap
       [    $mathcap-object$ ,
          [    [    199909080 , $Ox_system=ox_sm1.plain$ , $Version=2.991106$ ,
                    $HOSTTYPE=i386$ ]  ,
               [    262 , 263 , 264 , 265 , 266 , 268 , 269 , 272 , 273 , 275 ,
                    276 ]  ,
               [    [    514  , [    2130706434 , 1 , 2 , 4 , 5 , 17 , 19 , 20 , 22 , 23 , 24 , 25 , 26 , 30 , 31 , 60 , 61 , 27 , 33 , 40 , 16 , 34 ] ] ]  ]  ]
     */
   
   n = getoaSize(mathcap);    n = getoaSize(mathcap);
   if (n < 2) {    if (n < 2) {
     fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");      fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
Line 732  int cmoCheckMathCap(struct object obj, struct object *
Line 777  int cmoCheckMathCap(struct object obj, struct object *
     fprintf(stderr,"\n");      fprintf(stderr,"\n");
     errorOxmisc2("cmoCheckMathCap: length of mathcap is wrong in the client->mathcapObjp field.\n");      errorOxmisc2("cmoCheckMathCap: length of mathcap is wrong in the client->mathcapObjp field.\n");
   }    }
   /* I should check    ob0 = getoa(mathcap,0);
          getoa(getoa(mathcap,2),0)    if (ob0.tag != Sdollar) {
      contains OX_DATA.  
      It has not yet implemented.  
   */  
   mathcap = getoa(getoa(mathcap,1),2);  
   n = getoaSize(mathcap);  
   if (n < 2) {  
     fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");      fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
     printObject(*obp,0,stderr);      printObject(*obp,0,stderr);
     fprintf(stderr,"\n");      fprintf(stderr,"\n");
     errorOxmisc2("cmoCheckMathCap: length of mathcap is wrong in the client->mathcapObjp field.\n");      errorOxmisc2("cmoCheckMathCap: The first field must be the string mathcap-object.\n");
   }    }
   cmolist = getoa(mathcap,1);    if (strcmp(KopString(ob0),"mathcap-object") != 0) {
   if (cmolist.tag != Sarray) {  
     fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");      fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
     printObject(*obp,0,stderr);      printObject(*obp,0,stderr);
     fprintf(stderr,"\n");      fprintf(stderr,"\n");
     errorOxmisc2("cmoCheckMathCap: mathcap[1] must be an array of integers.\n");      errorOxmisc2("cmoCheckMathCap: The mathcap must be of the form [(mathcap-object) [...]]\n");
   }    }
   n = getoaSize(cmolist);  
   if (n > CMO_CHECK_MATH_CAP_LIST_SIZE) {    /* I should check
     errorOxmisc2("cmoCheckMathCap: Too big cmo list.\n");           getoa(getoa(mathcap,1),2)
        contains OX_DATA.
        It has not yet implemented.
     */
     mathcapMain = getoa(mathcap,1);
     if (mathcapMain.tag != Sarray) {
       fprintf(stderr,"cmoCheckMathCap: mathcap[1] is \n");
       printObject(mathcapMain,0,stderr);
       fprintf(stderr,"\n");
       errorOxmisc2("cmoCheckMathCap: format error in the (client->mathcapObjp)[1] field. It should be an array.\n");
   }    }
   for (i=0; i<n; i++) {    if (getoaSize(mathcapMain) < 3) {
     cmo[i] = KopInteger(getoa(cmolist,i));      fprintf(stderr,"cmoCheckMathCap: mathcap[1] is \n");
       printObject(mathcapMain,0,stderr);
       fprintf(stderr,"\n");
       errorOxmisc2("cmoCheckMathCap: format error in the (client->mathcapObjp)[1] field. It should be an array of which length is more than 2.\n");
     }
     mathcapThird = getoa(mathcapMain,2);
     oxsize = getoaSize(mathcapThird);
     for (i=0; i<oxsize; i++) {
       ox = getoa(mathcapThird,i);
       if (ox.tag != Sarray) {
         fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
         printObject(*obp,0,stderr);
         fprintf(stderr,"\n");
         errorOxmisc2("cmoCheckMathCap: the third element of mathcap is a list of lists.");
       }
       if (getoaSize(ox) != 0) {
         oxtag = getoa(ox,0);
         if (oxtag.tag != Sinteger) {
           fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
           printObject(*obp,0,stderr);
           fprintf(stderr,"\n");
           errorOxmisc2("cmoCheckMathCap: the third element of mathcap must be [OX_DATA_xxx, [  ]].");
         }
         if (KopInteger(oxtag) == OX_DATA) {
           if (getoaSize(ox) > 1) {
             cmolist = getoa(ox,1);
             if (cmolist.tag != Sarray) {
               fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
               printObject(*obp,0,stderr);
               fprintf(stderr,"\n");
               errorOxmisc2("cmoCheckMathCap: mathcap[1] must be an array of integers.\n");
             }
             n = getoaSize(cmolist);
             if (n > CMO_CHECK_MATH_CAP_LIST_SIZE) {
               errorOxmisc2("cmoCheckMathCap: Too big cmo list.\n");
             }
             for (i=0; i<n; i++) {
               cmo[i] = KopInteger(getoa(cmolist,i));
             }
           }else{
             fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n");
             printObject(*obp,0,stderr);
             fprintf(stderr,"\nox=");
             printObject(ox,0,stderr);
             errorOxmisc2("cmoCheckMathCap: [OX_DATA, cmolist]");
           }
         }
       }
   }    }
   return(cmoCheck00(obj,cmo,n));    return(cmoCheck00(obj,cmo,n));
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

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