version 1.3, 1999/11/18 00:54:17 |
version 1.4, 1999/11/27 01:41:11 |
|
|
/* $OpenXM: OpenXM/src/kan96xx/plugin/oxmisc2.c,v 1.2 1999/11/09 09:57:32 takayama Exp $ */ |
/* $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 129 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 144 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 724 int cmoCheckMathCap(struct object obj, struct object * |
|
Line 743 int cmoCheckMathCap(struct object obj, struct object * |
|
struct object mathcap; |
struct object mathcap; |
struct object cmolist; |
struct object cmolist; |
struct object mathcapMain; |
struct object mathcapMain; |
|
struct object mathcapThird; |
|
struct object ox; |
|
struct object oxtag; |
struct object ob0; |
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 |
Line 744 int cmoCheckMathCap(struct object obj, struct object * |
|
Line 767 int cmoCheckMathCap(struct object obj, struct object * |
|
$HOSTTYPE=i386$ ] , |
$HOSTTYPE=i386$ ] , |
[ 262 , 263 , 264 , 265 , 266 , 268 , 269 , 272 , 273 , 275 , |
[ 262 , 263 , 264 , 265 , 266 , 268 , 269 , 272 , 273 , 275 , |
276 ] , |
276 ] , |
[ [ 514 ] , [ 2130706434 , 1 , 2 , 4 , 5 , 17 , 19 , 20 , 22 , 23 , 24 , 25 , 26 , 30 , 31 , 60 , 61 , 27 , 33 , 40 , 16 , 34 ] ] ] ] |
[ [ 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); |
Line 786 int cmoCheckMathCap(struct object obj, struct object * |
|
Line 809 int cmoCheckMathCap(struct object obj, struct object * |
|
fprintf(stderr,"\n"); |
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"); |
errorOxmisc2("cmoCheckMathCap: format error in the (client->mathcapObjp)[1] field. It should be an array of which length is more than 2.\n"); |
} |
} |
mathcap = getoa(mathcapMain,2); |
mathcapThird = getoa(mathcapMain,2); |
n = getoaSize(mathcap); |
oxsize = getoaSize(mathcapThird); |
if (n < 2) { |
for (i=0; i<oxsize; i++) { |
fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n"); |
ox = getoa(mathcapThird,i); |
printObject(*obp,0,stderr); |
if (ox.tag != Sarray) { |
fprintf(stderr,"\n"); |
fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n"); |
errorOxmisc2("cmoCheckMathCap: length of mathcap is wrong in the client->mathcapObjp field.\n"); |
printObject(*obp,0,stderr); |
} |
fprintf(stderr,"\n"); |
cmolist = getoa(mathcap,1); |
errorOxmisc2("cmoCheckMathCap: the third element of mathcap is a list of lists."); |
if (cmolist.tag != Sarray) { |
} |
fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n"); |
if (getoaSize(ox) != 0) { |
printObject(*obp,0,stderr); |
oxtag = getoa(ox,0); |
fprintf(stderr,"\n"); |
if (oxtag.tag != Sinteger) { |
errorOxmisc2("cmoCheckMathCap: mathcap[1] must be an array of integers.\n"); |
fprintf(stderr,"cmoCheckMathCap: the mathcap obj is \n"); |
} |
printObject(*obp,0,stderr); |
n = getoaSize(cmolist); |
fprintf(stderr,"\n"); |
if (n > CMO_CHECK_MATH_CAP_LIST_SIZE) { |
errorOxmisc2("cmoCheckMathCap: the third element of mathcap must be [OX_DATA_xxx, [ ]]."); |
errorOxmisc2("cmoCheckMathCap: Too big cmo list.\n"); |
} |
} |
if (KopInteger(oxtag) == OX_DATA) { |
for (i=0; i<n; i++) { |
if (getoaSize(ox) > 1) { |
cmo[i] = KopInteger(getoa(cmolist,i)); |
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)); |
} |
} |