[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.14 and 1.24

version 1.14, 2002/11/07 13:32:06 version 1.24, 2004/09/17 08:46:10
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/plugin/oxmisc2.c,v 1.13 2002/02/24 10:27:20 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/plugin/oxmisc2.c,v 1.23 2004/09/17 07:27:28 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 226  int oxReq(oxclientp client,int func,struct object ob)
Line 226  int oxReq(oxclientp client,int func,struct object ob)
     oxReqExecuteFunction(client->datafp2,KopString(ob));      oxReqExecuteFunction(client->datafp2,KopString(ob));
     client->dstate = DSTATE_ANY;      client->dstate = DSTATE_ANY;
     break;      break;
     case SM_executeFunctionWithOptionalArgument:
       if (ob.tag != Sdollar) {
         errorOxmisc2("SM_executeFunctionWithOptionalArgument : the argument must be a string.");
         return(-1);
       }
       oxReqExecuteFunctionWithOptionalArgument(client->datafp2,KopString(ob));
       client->dstate = DSTATE_ANY;
       break;
   case SM_popString:    case SM_popString:
     oxReqPopString(client->datafp2);      oxReqPopString(client->datafp2);
     client->dstate = DSTATE_ANY;      client->dstate = DSTATE_ANY;
Line 254  int oxReq(oxclientp client,int func,struct object ob)
Line 262  int oxReq(oxclientp client,int func,struct object ob)
     oxReqSingleOperand(client->datafp2,SM_dupErrors);      oxReqSingleOperand(client->datafp2,SM_dupErrors);
     client->dstate = DSTATE_ANY;      client->dstate = DSTATE_ANY;
     break;      break;
     case SM_pushCMOtag:
       oxReqSingleOperand(client->datafp2,SM_pushCMOtag);
       client->dstate = DSTATE_ANY;
       break;
   default:    default:
     fprintf(MyErrorOut,"func=%d ",func);      fprintf(MyErrorOut,"func=%d ",func);
     errorOxmisc2("This function is not implemented.");      errorOxmisc2("This function is not implemented.");
Line 265  int oxReq(oxclientp client,int func,struct object ob)
Line 277  int oxReq(oxclientp client,int func,struct object ob)
   
 struct object KoxCreateClient(struct object ip,  struct object KoxCreateClient(struct object ip,
                               struct object portStream,                                struct object portStream,
                               struct object portControl)                                struct object portControl,struct object pass)
 {  {
   struct object rob;    struct object rob;
   oxclientp client;    oxclientp client;
     char *passControl; char *passData;
     struct object tob;
     passControl = NULL; passData = NULL;
   rob.tag = Snull;    rob.tag = Snull;
   if (ip.tag != Sdollar) {    if (ip.tag != Sdollar) {
     errorOxmisc2("KoxCreateClient(): The first argument must be a hostname given by a string.");      errorOxmisc2("KoxCreateClient(): The first argument must be a hostname given by a string.");
Line 294  struct object KoxCreateClient(struct object ip,
Line 309  struct object KoxCreateClient(struct object ip,
     errorOxmisc2("KoxCreateClient(): The third argument must be a port number given in an integer.");      errorOxmisc2("KoxCreateClient(): The third argument must be a port number given in an integer.");
     return(rob);      return(rob);
   }    }
   client = oxCreateClient(KopString(ip),KopInteger(portStream),KopInteger(portControl));    if (pass.tag == Sarray) {
       if (getoaSize(pass) < 2) {
             errorOxmisc2("KoxCreateClient(): the fourth argument --- pass must be an array of strings.");
             return rob;
           }
       tob = getoa(pass,0);
           if (tob.tag != Sdollar) {
             errorOxmisc2("KoxCreateClient(): the fourth argument --- pass must be an array of strings.");
             return rob;
           }
       passControl = KopString(tob);
       tob = getoa(pass,1);
           if (tob.tag != Sdollar) {
             errorOxmisc2("KoxCreateClient(): the fourth argument --- pass must be an array of strings.");
             return rob;
           }
       passData = KopString(tob);
     }
     client = oxCreateClient(KopString(ip),KopInteger(portStream),KopInteger(portControl),passControl,passData);
   if (client == NULL) {    if (client == NULL) {
     errorOxmisc2("KoxCreateClient(): Open error.");      errorOxmisc2("KoxCreateClient(): Open error.");
     return(rob);      return(rob);
Line 382  int oxClientToObject(oxclientp client,struct object ro
Line 415  int oxClientToObject(oxclientp client,struct object ro
   }    }
   putoa(rob,11,KpoInteger(client->engineByteOrder));    putoa(rob,11,KpoInteger(client->engineByteOrder));
   putoa(rob,12,KpoInteger(client->controlByteOrder));    putoa(rob,12,KpoInteger(client->controlByteOrder));
     putoa(rob,13,KpoInteger(client->engineID));
   return(0);    return(0);
 }  }
   
Line 438  int oxObjectToClient(struct object ob,oxclientp cp)
Line 472  int oxObjectToClient(struct object ob,oxclientp cp)
   cp->engineByteOrder = KopInteger(ob1);    cp->engineByteOrder = KopInteger(ob1);
   ob1 = getoa(ob,12);    ob1 = getoa(ob,12);
   cp->controlByteOrder = KopInteger(ob1);    cp->controlByteOrder = KopInteger(ob1);
   
     ob1 = getoa(ob,13);
     cp->engineID = KopInteger(ob1);
   
   
   return(0);    return(0);
Line 644  struct object KoxWatch(struct object client,struct obj
Line 681  struct object KoxWatch(struct object client,struct obj
   return(KpoInteger(ans));    return(KpoInteger(ans));
 }  }
   
   struct object KoxLog(struct object client,struct object in,struct object out)
   {
     int ans,k;
     static oxclientp cc1 = NULL;
     struct object rob;
     rob.tag = Snull;
     if (cc1 == NULL) {
       cc1 = (oxclientp) mymalloc(sizeof(oxclient));
       if (cc1 == NULL) {
         errorOxmisc2("KoxLog(): no more memory.");
         return(rob);
       }
       oxInitClient(cc1);
     }
   
     if (oxObjectToClient(client,cc1) == -1) return(rob);
     if (cc1 == NULL) {
       errorOxmisc2("KoxLog(): the first argument must be a client object.");
       return(rob);
     }
   
     if (in.tag != Sfile) {
           errorOxmisc2("KoxLog(): the second argument is not a file object.");
           return rob;
     }
     if (out.tag != Sfile) {
           errorOxmisc2("KoxLog(): the third argument is not a file object.");
           return rob;
     }
     k = fp2log(cc1->datafp2,in.rc.file,out.rc.file);
     fputc(cc1->engineByteOrder,out.rc.file); /* Output engineByteOrder. */
     /* synchronize cc1 and client. */
     oxClientToObject(cc1,client);
   
     return(KpoInteger(ans));
   }
   
   struct object KoxLogStop(struct object client) {
     static oxclientp cc1 = NULL;
     struct object rob;
     rob.tag = Snull;
     if (cc1 == NULL) {
       cc1 = (oxclientp) mymalloc(sizeof(oxclient));
       if (cc1 == NULL) {
         errorOxmisc2("KoxLog(): no more memory.");
         return(rob);
       }
       oxInitClient(cc1);
     }
   
     if (oxObjectToClient(client,cc1) == -1) return(rob);
     if (cc1 == NULL) {
       errorOxmisc2("KoxLog(): the first argument must be a client object.");
       return(rob);
     }
     return(KpoInteger(fp2stopLog(cc1->datafp2)));
   }
   
 struct object KoxCloseClient(struct object client) {  struct object KoxCloseClient(struct object client) {
   oxclientp cc1 = NULL;    oxclientp cc1 = NULL;
Line 705  static int cmoCheck00(struct object obj,int cmo[], int
Line 799  static int cmoCheck00(struct object obj,int cmo[], int
     /* typeTrans[Spoly] = CMO_DMS;  */      /* typeTrans[Spoly] = CMO_DMS;  */
     typeTrans[Spoly] = CMO_DISTRIBUTED_POLYNOMIAL;      typeTrans[Spoly] = CMO_DISTRIBUTED_POLYNOMIAL;
     typeTrans[Sdouble] = CMO_64BIT_MACHINE_DOUBLE;      typeTrans[Sdouble] = CMO_64BIT_MACHINE_DOUBLE;
           typeTrans[SrationalFunction] = CMO_RATIONAL;
     typeTrans[CLASSNAME_ERROR_PACKET]   = CMO_ERROR2;      typeTrans[CLASSNAME_ERROR_PACKET]   = CMO_ERROR2;
     typeTrans[CLASSNAME_mathcap] = CMO_MATHCAP;      typeTrans[CLASSNAME_mathcap] = CMO_MATHCAP;
     typeTrans[CLASSNAME_indeterminate] = CMO_INDETERMINATE;      typeTrans[CLASSNAME_indeterminate] = CMO_INDETERMINATE;
Line 949  struct object KoxCreateClient2(struct object peer,
Line 1044  struct object KoxCreateClient2(struct object peer,
   int fdStream, portStream, fdControl, portControl;    int fdStream, portStream, fdControl, portControl;
   int i;    int i;
   struct object ob1;    struct object ob1;
     struct object opassControl, opassData;
   rob.tag = Snull;    rob.tag = Snull;
   if (peer.tag != Sarray) {    if (peer.tag != Sarray) {
     errorOxmisc2("KoxCreateClient2(): The first argument must be an array [fdStream, portStream, fdControl, portControl]");      errorOxmisc2("KoxCreateClient2(): The first argument must be an array [fdStream, portStream, fdControl, portControl]");
Line 972  struct object KoxCreateClient2(struct object peer,
Line 1068  struct object KoxCreateClient2(struct object peer,
   if (ipmask.tag != Sinteger) {    if (ipmask.tag != Sinteger) {
     errorOxmisc2("KoxCreateClient2(): ipmask must be an integer.");      errorOxmisc2("KoxCreateClient2(): ipmask must be an integer.");
   }    }
   if (pass.tag != Sdollar) {    if (pass.tag == Sdollar) {
     errorOxmisc2("KoxCreateClient2(): pass must be a string.");      opassControl = pass; opassData = pass;
     }else if (pass.tag == Sarray) {
       if (getoaSize(pass) < 2) errorOxmisc2("KoxCreateClient2: #passArray < 2.");
       opassControl = getoa(pass,0);
       opassData = getoa(pass,1);
     }else{
       errorOxmisc2("KoxCreateClient2(): pass must be a string or an array.");
   }    }
     if ((opassControl.tag != Sdollar) || (opassData.tag != Sdollar)) {
       errorOxmisc2("KoxCreateClient2(): opassControl or opassData must be a string.");
     }
   
   client = oxCreateClient2(fdStream, portStream, fdControl, portControl,    client = oxCreateClient2(fdStream, portStream, fdControl, portControl,
                            KopInteger(ipmask), KopString(pass));                             KopInteger(ipmask),
                              KopString(opassControl),KopString(opassData));
   if (client == NULL) {    if (client == NULL) {
     errorOxmisc2("KoxCreateClient2(): Open error.");      errorOxmisc2("KoxCreateClient2(): Open error.");
     return(rob);      return(rob);
Line 1296  oxclientp oxCreateEngine_RFC_101(int fdstream,int port
Line 1402  oxclientp oxCreateEngine_RFC_101(int fdstream,int port
   client->dataport = portStream;    client->dataport = portStream;
   client->controlport = -1;    client->controlport = -1;
   client->controlfd = -1;    client->controlfd = -1;
   client->id = engineID;    client->id = oxGetClientID();
     client->engineID = engineID;
   client->type = CLIENT_SOCKET; /* socket */    client->type = CLIENT_SOCKET; /* socket */
   client->engineByteOrder = engineByteOrder;    client->engineByteOrder = engineByteOrder;
   client->controlByteOrder = -1;    client->controlByteOrder = -1;
   return(client);    return(client);
 }  }
   
 #define MAX_N_OF_CLIENT 1024  
 static struct object OxClientList[MAX_N_OF_CLIENT];  
 static int OxClientListn = 0;  
 int oxGetClientID() {  
   extern struct object OxClientList[];  
   extern int OxClientListn;  
   extern struct object Nobj;  
   int i;  
   for (i=0; i<OxClientListn; i++) {  
         if ((OxClientList[i]).tag == Snull) {  
           return i;  
         }  
   }  
   i = OxClientListn;  
   (OxClientList[i]).tag = Snull;  
   if (OxClientListn < MAX_N_OF_CLIENT-1) {  
         OxClientListn++;  
         return i;  
   }else{  
         errorOxmisc2("oxGetClientID(): the client table is full.\n");  
         return 0;  
   }  
 }  
 void oxClientListUpdate(struct object ob) {  void oxClientListUpdate(struct object ob) {
   int id;    int id;
   extern struct object OxClientList[];    extern struct object OxClientList[];
Line 1347  void oxClientListRemove(struct object ob) {
Line 1431  void oxClientListRemove(struct object ob) {
         /* errorOxmisc2("oxClientListRemove(): the client table is full.\n");*/          /* errorOxmisc2("oxClientListRemove(): the client table is full.\n");*/
   }    }
 }  }
   static void KoxCleanClientList() {
     extern int OxClientListn;
     extern struct object OxClientList[];
     int i,j,n;
     struct object ob;
     n = 0;
     for (i=0; i<OxClientListn; i++) {
           if ((OxClientList[i]).tag != Snull) {
             if (!isItClientObject(OxClientList[i])) {
                   (OxClientList[i]).tag = Snull;
             }
           }
     }
   }
 struct object KoxGetClientList() {  struct object KoxGetClientList() {
   extern int OxClientListn;    extern int OxClientListn;
   extern struct object OxClientList[];    extern struct object OxClientList[];
   int i,j,n;    int i,j,n;
   struct object rob;    struct object rob;
     KoxCleanClientList();
   n = 0;    n = 0;
   for (i=0; i<OxClientListn; i++) {    for (i=0; i<OxClientListn; i++) {
         if ((OxClientList[i]).tag != Snull) n++;          if ((OxClientList[i]).tag != Snull) n++;

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

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