version 1.7, 2002/02/24 10:27:21 |
version 1.12, 2003/11/19 01:02:40 |
|
|
/* $OpenXM: OpenXM/src/kxx/oxserver00.c,v 1.6 2001/12/21 02:32:11 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/kxx/oxserver00.c,v 1.11 2003/11/18 11:08:27 takayama Exp $ */ |
/* nullserver01 */ |
/* nullserver01 */ |
#include <stdio.h> |
#include <stdio.h> |
#include <sys/types.h> |
#include <sys/types.h> |
Line 27 jmp_buf EnvOfChildServer; |
|
Line 27 jmp_buf EnvOfChildServer; |
|
#endif |
#endif |
|
|
int JmpMessage = 0; |
int JmpMessage = 0; |
|
extern int Lisplike; |
|
|
static char *getSuffix(char *s); |
static char *getSuffix(char *s); |
main(int argc, char *argv[]) { |
main(int argc, char *argv[]) { |
Line 43 main(int argc, char *argv[]) { |
|
Line 44 main(int argc, char *argv[]) { |
|
if (strcmp(argv[1],"-monitor")==0) { |
if (strcmp(argv[1],"-monitor")==0) { |
fprintf(stderr,"Taking the packet monitor.\n"); |
fprintf(stderr,"Taking the packet monitor.\n"); |
PacketMonitor = 1; |
PacketMonitor = 1; |
|
}else if (strcmp(argv[1],"-lispLike")==0) { |
|
fprintf(stderr,"Output lispLike expression.\n"); |
|
Lisplike = 1; |
}else{ |
}else{ |
fprintf(stderr,"Unknown option. Possible options are -monitor\n"); |
fprintf(stderr,"Unknown option. Possible options are -monitor\n"); |
} |
} |
Line 63 main(int argc, char *argv[]) { |
|
Line 67 main(int argc, char *argv[]) { |
|
Sm1_start(0, NULL, "ox_sm1"); |
Sm1_start(0, NULL, "ox_sm1"); |
} |
} |
|
|
nullserver(3); |
nullserver(3,4); |
} |
} |
|
|
static char *getSuffix(char *s) { |
static char *getSuffix(char *s) { |
Line 82 static char *getSuffix(char *s) { |
|
Line 86 static char *getSuffix(char *s) { |
|
} |
} |
return(s); |
return(s); |
} |
} |
nullserver(int fdStream) { |
nullserver(int fdStreamIn,int fdStreamOut) { |
int mtag; |
int mtag; |
int message = 1; |
int message = 1; |
ox_stream ostream; |
ox_stream ostreamIn; |
|
ox_stream ostreamOut; |
char sreason[1024]; |
char sreason[1024]; |
extern void controlResetHandler(); |
extern void controlResetHandler(); |
#if defined(__CYGWIN__) |
#if defined(__CYGWIN__) |
Line 95 nullserver(int fdStream) { |
|
Line 100 nullserver(int fdStream) { |
|
#endif |
#endif |
int engineByteOrder; |
int engineByteOrder; |
|
|
|
/* for debug, use -monitor |
|
PacketMonitor = 1; */ |
|
|
fflush(NULL); |
fflush(NULL); |
engineByteOrder = oxTellMyByteOrder(fdStream); |
engineByteOrder = oxTellMyByteOrder(fdStreamOut,fdStreamIn); |
/* Set the network byte order. */ |
/* Set the network byte order. */ |
fprintf(stderr,"engineByteOrder=%x\n",engineByteOrder); |
fprintf(stderr,"engineByteOrder=%x\n",engineByteOrder); |
|
|
if (fdStream != -1) { |
if (fdStreamIn != -1) { |
ostream = fp2open(fdStream); |
ostreamIn = fp2open(fdStreamIn); |
if (ostream == NULL) { |
if (ostreamIn == NULL) { |
fprintf(stderr,"fp2open(fdStream) failed.\n"); |
fprintf(stderr,"fp2open(fdStreamIn) failed.\n"); |
fdStream = -1; |
fdStreamIn = -1; |
} |
} |
if (PacketMonitor) fp2watch(ostream,stdout); |
if (PacketMonitor) fp2watch(ostreamIn,stdout); |
} |
} |
|
if (fdStreamOut != -1) { |
|
ostreamOut = fp2open(fdStreamOut); |
|
if (ostreamOut == NULL) { |
|
fprintf(stderr,"fp2open(fdStreamOut) failed.\n"); |
|
fdStreamOut = -1; |
|
} |
|
if (PacketMonitor) fp2watch(ostreamOut,stdout); |
|
} |
|
|
aaa : ; |
aaa : ; |
#if defined(__CYGWIN__) |
#if defined(__CYGWIN__) |
if (sigsetjmp(EnvOfChildServer,1)) { |
if (sigsetjmp(EnvOfChildServer,1)) { |
Line 118 nullserver(int fdStream) { |
|
Line 135 nullserver(int fdStream) { |
|
if (OxInterruptFlag == 0) { |
if (OxInterruptFlag == 0) { |
fprintf(stderr," ?! \n"); fflush(NULL); |
fprintf(stderr," ?! \n"); fflush(NULL); |
} |
} |
|
KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ |
|
KSexecuteString(" (Computation is interrupted.) "); |
signal(SIGUSR1,controlResetHandler); goto aaa; |
signal(SIGUSR1,controlResetHandler); goto aaa; |
} else { |
} else { |
if (JmpMessage) fprintf(stderr,"Set EnvOfChildServer.\n"); |
if (JmpMessage) fprintf(stderr,"Set EnvOfChildServer.\n"); |
Line 128 nullserver(int fdStream) { |
|
Line 147 nullserver(int fdStream) { |
|
#else |
#else |
if (setjmp(EnvOfStackMachine)) { |
if (setjmp(EnvOfStackMachine)) { |
#endif |
#endif |
fprintf(stderr,"childServerMain: jump here by EnvOfStackMachine.\n"); |
fprintf(stderr,"childServerMain: jump here by EnvOfStackMachine or timeout.\n"); |
if (OxInterruptFlag == 0) { |
if (OxInterruptFlag == 0) { |
fprintf(stderr," ?! \n"); fflush(NULL); |
fprintf(stderr," ?! \n"); fflush(NULL); |
} |
} |
Line 142 nullserver(int fdStream) { |
|
Line 161 nullserver(int fdStream) { |
|
*/ |
*/ |
Sm1_pushError2(SerialCurrent,-1,"Global jump by sm1 error"); |
Sm1_pushError2(SerialCurrent,-1,"Global jump by sm1 error"); |
|
|
|
KSexecuteString(" ctrlC-hook "); /* Execute User Defined functions. */ |
signal(SIGUSR1,controlResetHandler); goto aaa ; |
signal(SIGUSR1,controlResetHandler); goto aaa ; |
} else { |
} else { |
if (JmpMessage) fprintf(stderr,"Set EnvOfStackMachine.\n"); |
if (JmpMessage) fprintf(stderr,"Set EnvOfStackMachine.\n"); |
Line 151 nullserver(int fdStream) { |
|
Line 171 nullserver(int fdStream) { |
|
} |
} |
|
|
while (1) { |
while (1) { |
message = OXprintMessage; |
message = OXprintMessage; |
if (OxInterruptFlag) { |
if (OxInterruptFlag) { |
OxCritical = 1; |
OxCritical = 1; |
if (message) {fprintf(stderr,"Clearing the read buffer.\n");fflush(NULL); } |
if (message) {fprintf(stderr,"Clearing the read buffer.\n");fflush(NULL); } |
fp2clearReadBuf(ostream); /* clear the read buffer */ |
fp2clearReadBuf(ostreamIn); /* clear the read buffer */ |
if (message) {fprintf(stderr,"Throwing OX_SYNC_BALL\n"); fflush(NULL);} |
if (message) {fprintf(stderr,"Throwing OX_SYNC_BALL\n"); fflush(NULL);} |
oxSendSyncBall(ostream); |
oxSendSyncBall(ostreamOut); |
if (message) {fprintf(stderr,"Waiting for OX_SYNC_BALL\n");fflush(NULL);} |
if (message) {fprintf(stderr,"Waiting for OX_SYNC_BALL\n");fflush(NULL);} |
oxWaitSyncBall(ostream); |
oxWaitSyncBall(ostreamIn); |
if (message) {fprintf(stderr,"Done changing OX_SYNC_BALL\n"); fflush(NULL);} |
if (message) {fprintf(stderr,"Done changing OX_SYNC_BALL\n"); fflush(NULL);} |
OxInterruptFlag = 0; |
OxInterruptFlag = 0; |
OxCritical = 0; |
OxCritical = 0; |
goto aaa ; |
goto aaa ; |
} |
} |
OxCritical = 0; |
OxCritical = 0; |
if (fp2select(ostream,-1)) { |
if (fp2select(ostreamIn,-1)) { |
/* If there is an data in the ostream, then read data in the buffer and |
/* If there is an data in the ostream, then read data in the buffer and |
read data in the communication stream. */ |
read data in the communication stream. */ |
OxCritical = 1; |
OxCritical = 1; |
Line 175 nullserver(int fdStream) { |
|
Line 195 nullserver(int fdStream) { |
|
/* This part is never reached. */ |
/* This part is never reached. */ |
} |
} |
OxCritical = 1; |
OxCritical = 1; |
mtag = oxGetOXheader(ostream,&SerialCurrent); /* get the message_tag */ |
mtag = oxGetOXheader(ostreamIn,&SerialCurrent); /* get the message_tag */ |
if (message) { |
if (message) { |
fprintf(stderr,"\nmtag is %d (serial=%d) : ",mtag,SerialCurrent); |
fprintf(stderr,"\nmtag is %d (serial=%d) : ",mtag,SerialCurrent); |
switch(mtag) { |
switch(mtag) { |
Line 183 nullserver(int fdStream) { |
|
Line 203 nullserver(int fdStream) { |
|
case OX_DATA: fprintf(stderr," OX_DATA \n"); break; |
case OX_DATA: fprintf(stderr," OX_DATA \n"); break; |
case OX_SYNC_BALL: fprintf(stderr," OX_SYNC_BALL \n"); break; |
case OX_SYNC_BALL: fprintf(stderr," OX_SYNC_BALL \n"); break; |
case -1: fprintf(stderr," End of file. Exiting the server child.\n"); |
case -1: fprintf(stderr," End of file. Exiting the server child.\n"); |
exit(); break; |
exit(0); break; |
default: fprintf(stderr," ?! \n"); break; |
default: fprintf(stderr," ?! \n"); break; |
} |
} |
} |
} |
/*sleep(2); /* for dubug OX_SYNC_BALL */ |
/*sleep(2); /* for dubug OX_SYNC_BALL */ |
switch(mtag) { |
switch(mtag) { |
case OX_COMMAND: |
case OX_COMMAND: |
nullserverCommand(ostream); |
nullserverCommand(ostreamIn,ostreamOut); |
goto aaa ; /* We always reset the jump vector. cf. memo1.txt 1998 2/13*/ |
goto aaa ; /* We always reset the jump vector. cf. memo1.txt 1998 2/13*/ |
break; |
break; |
case OX_DATA: |
case OX_DATA: |
Sm1_pushCMO(ostream); |
Sm1_pushCMO(ostreamIn); |
break; |
break; |
case OX_SYNC_BALL: |
case OX_SYNC_BALL: |
/* if (OxInterruptFlag) think about it later. */ |
/* if (OxInterruptFlag) think about it later. */ |
Line 206 nullserver(int fdStream) { |
|
Line 226 nullserver(int fdStream) { |
|
} |
} |
} |
} |
|
|
nullserverCommand(ox_stream ostream) { |
nullserverCommand(ox_stream ostreamIn,ox_stream ostreamOut) { |
int id; |
int id; |
int mtag; |
int mtag; |
int n; |
int n; |
Line 218 nullserverCommand(ox_stream ostream) { |
|
Line 238 nullserverCommand(ox_stream ostream) { |
|
char *emsg; |
char *emsg; |
extern void controlResetHandler(); |
extern void controlResetHandler(); |
|
|
message = OXprintMessage; |
message = OXprintMessage; |
/* message_body */ |
/* message_body */ |
id = oxGetInt32(ostream); /* get the function_id */ |
id = oxGetInt32(ostreamIn); /* get the function_id */ |
if (message) {fprintf(stderr,"\nfunction_id is %d\n",id);} |
if (message) {fprintf(stderr,"\nfunction_id is %d; %s\n",id,oxFIDtoStr(id));} |
switch( id ) { |
switch( id ) { |
case SM_mathcap: |
case SM_mathcap: |
if (message) fprintf(stderr," mathcap\n"); |
if (message) fprintf(stderr," mathcap\n"); |
Line 230 nullserverCommand(ox_stream ostream) { |
|
Line 250 nullserverCommand(ox_stream ostream) { |
|
break; |
break; |
case SM_setMathCap: |
case SM_setMathCap: |
if (message) fprintf(stderr," setMathCap\n"); |
if (message) fprintf(stderr," setMathCap\n"); |
Sm1_setMathCap(ostream); |
Sm1_setMathCap(ostreamOut); |
break; |
break; |
case SM_pops: |
case SM_pops: |
if (message) fprintf(stderr," pops \n"); |
if (message) fprintf(stderr," pops \n"); |
Line 286 nullserverCommand(ox_stream ostream) { |
|
Line 306 nullserverCommand(ox_stream ostream) { |
|
break; |
break; |
case SM_popCMO: |
case SM_popCMO: |
if (message) fprintf(stderr,"popCMO. Start to sending data.\n",n); |
if (message) fprintf(stderr,"popCMO. Start to sending data.\n",n); |
oxSendOXheader(ostream,OX_DATA,SerialOX++); |
oxSendOXheader(ostreamOut,OX_DATA,SerialOX++); |
n=Sm1_popCMO(ostream,SerialCurrent); |
n=Sm1_popCMO(ostreamOut,SerialCurrent); |
if (message) fprintf(stderr,"Done.\n"); |
if (message) fprintf(stderr,"Done.\n"); |
break; |
break; |
case SM_popString: |
case SM_popString: |
if (message) fprintf(stderr,"popString. send data from the stack.\n",n); |
if (message) fprintf(stderr,"popString. send data from the stack.\n",n); |
oxSendOXheader(ostream,OX_DATA,SerialOX++); |
oxSendOXheader(ostreamOut,OX_DATA,SerialOX++); |
oxSendCmoString(ostream,Sm1_popString()); |
oxSendCmoString(ostreamOut,Sm1_popString()); |
if (message) fprintf(stderr,"Done.\n"); |
if (message) fprintf(stderr,"Done.\n"); |
break; |
break; |
case SM_shutdown: |
case SM_shutdown: |
Line 327 void controlResetHandler(sig) |
|
Line 347 void controlResetHandler(sig) |
|
int sig; |
int sig; |
{ |
{ |
signal(sig,SIG_IGN); |
signal(sig,SIG_IGN); |
|
cancelAlarm(); |
fprintf(stderr,"From controlResetHandler. OxCritical = %d\n",OxCritical); |
fprintf(stderr,"From controlResetHandler. OxCritical = %d\n",OxCritical); |
OxInterruptFlag = 1; |
OxInterruptFlag = 1; |
if (OxCritical) { |
if (OxCritical) { |