=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/README,v retrieving revision 1.2 retrieving revision 1.15 diff -u -p -r1.2 -r1.15 --- OpenXM/src/ox_toolkit/README 1999/12/15 01:59:58 1.2 +++ OpenXM/src/ox_toolkit/README 2000/11/21 07:59:08 1.15 @@ -1,34 +1,49 @@ # Author: ¾®¸¶¸ùǤ @ ¶âÂôÂç³ØÍý³ØÉô·×»»²Ê³Ø¶µ¼¼ # URI: http://omega.s.kanazawa-u.ac.jp/ohara/ -# $OpenXM: OpenXM/src/ox_toolkit/README,v 1.1 1999/12/09 22:44:55 ohara Exp $ +# $OpenXM: OpenXM/src/ox_toolkit/README,v 1.14 2000/11/20 17:59:34 ohara Exp $ -¡ù libox.a ¥Þ¥Ë¥å¥¢¥ë¡£ +/*&ja ox_toolkit ¥æ¡¼¥¶¥¬¥¤¥É -libox.a ¤òÍøÍѤ¹¤ë¤Ë¤Ï¼¡¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ +*/ +/*&en A user's guide for OpenXM C library. -#include -#include -#include +*/ +/* &ja ¤¤¤­¤µ¤Ä +¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï ox_math ¤ª¤è¤Ó math2ox ¤ò³«È¯¤¹¤ë¤¿¤á¤ËÀ߷פµ¤ì¤¿¡£ +¥é¥¤¥Ö¥é¥ê¼«¿È¤Ë¤Ï¡¢ Mathematica ¤Ë°Í¸¤·¤¿Éôʬ¤Ï¤Ê¤¤¡£ +*/ +/* &en Introduction -³Æ¹½Â¤ÂΤª¤è¤Ó´Ø¿ô¤ÎÀë¸À¤Ï¤½¤ì¤¾¤ì¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£ -¤³¤³¤Ç¤Ï´ðËÜŪ¤Ê¹Í¤¨Êý¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£ +*/ +/*&ja +libox.a ¤òÍøÍѤ¹¤ë¤Ë¤Ï¼¡¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ +*/ +/*&en +How to use OpenXM C library? -¤Þ¤º¡¢¤¹¤Ù¤Æ¤Î CMO ¥Ç¡¼¥¿¤Ï¤½¤Î¥Ç¡¼¥¿·¿¤ËÂбþ¤·¤¿ new ´Ø¿ô¤Ë¤è¤Ã¤ÆÀ¸À® -¤·¤Þ¤¹¡£¤¿¤È¤¨¤Ð CMO_ZZ ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï new_cmo_zz() ´Ø¿ô¤Ë¤è¤Ã¤ÆÀ¸ -À®¤µ¤ì¤Þ¤¹¡£ +In order to use libox.a, you need to include the following header files: +*/ +/*&common -CMO ¥Ç¡¼¥¿¤òÁ÷¼õ¿®¤¹¤ë¤Ë¤Ï¡¢CMO ¤Î¼ïÎà¤Ë¤è¤é¤º send_cmo(), -receive_cmo() ¤òÍѤ¤¤Þ¤¹¡£¤³¤ì¤é¤Î´Ø¿ô¤Ï OX ¥Ø¥Ã¥À¤ò°·¤¤¤Þ¤»¤ó¤Î¤Ç¡¢OX -¥á¥Ã¥»¡¼¥¸¤òÁ÷¼õ¿®¤¹¤ë¤È¤­¤Ë¤Ï send_ox_tag(), receive_ox_tag() ¤ò¤½¤Î -Á°¤Ë¸Æ¤ÖɬÍפ¬¤¢¤ê¤Þ¤¹¡£ +#include +*/ +/*&ja 1. ¥Ç¡¼¥¿·¿ ¤³¤Î¥Ä¡¼¥ë¥­¥Ã¥È¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë³Æ¹½Â¤ÂΤÎÀ¸À®¤Ë¤Ä¤¤¤Æ¤Ï¼¡Àá¤ò»²¾È¤»¤è¡£ 1.1 CMO (Common Math Object) ¼¡¤Î¥Ç¡¼¥¿·¿(¹½Â¤ÂÎ)¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£ +*/ +/*&en +1. Types +1.1 CMO (Common Math Object) +The following structures are defined in ox_toolkit.h: +*/ +/*&common + cmo cmo_null cmo_int32 @@ -46,25 +61,54 @@ cmo_distributed_polynomial cmo_indeterminate cmo_error2 +*/ +/*&ja ¤³¤Î¤¦¤Á cmo ·¿¤Ï¤¤¤ï¤ÐÃê¾Ý´ðÄ쥯¥é¥¹¤ËÁêÅö¤¹¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤³¤Î·¿¤Î¥ª ¥Ö¥¸¥§¥¯¥È¤òÌÀ¼¨Åª¤Ë¤ÏÀ¸À®¤µ¤ì¤Ê¤¤¡£¤³¤Î¥¯¥é¥¹¤Ï¥Ý¥¤¥ó¥¿·¿¤Î¥­¥ã¥¹¥È¤Î ¤¿¤á¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£¤Þ¤¿ cmo_distributed_polynomial ¤Ï cmo_list ¤ÎÇÉ À¸¥¯¥é¥¹¤Ç¤¢¤ë¤È»×¤Ã¤Æ¤â¤è¤¤¡£ +*/ +/*&en +The cmo above is abstract base class; you never make an object of cmo +class. + +*/ +/*&ja 1.2 OX ¥ª¥Ö¥¸¥§¥¯¥È ¼¡¤Î¥Ç¡¼¥¿·¿(¹½Â¤ÂÎ)¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£ +*/ +/*&en +1.2 OX objects +The following structures are defined in ox_toolkit.h: +*/ +/*&common ox ox_command ox_data +*/ +/*&ja ¤³¤Î¤¦¤Á¡¢ox ·¿¤ÏÃê¾Ý´ðÄ쥯¥é¥¹¤Ê¤Î¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤ò¤Ä¤¯¤Ã¤Æ¤Ï¤¤¤±¤Ê¤¤¡£ +*/ +/*&en +The ox above is abstract base class. + +*/ +/*&ja 2. ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À® ¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë¡¢new ´Ø¿ô·²¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£¤½¤ì¤¾¤ì¤Î´Ø ¿ô¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Æ¡¢¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ +*/ +/*&en +2. How to make CMObjects? +Use the following functions to generate an object. It returns a +pointer to the object. */ /*&common + new_cmo_null(); new_cmo_int32(int i); new_cmo_string(char* s); @@ -83,17 +127,87 @@ new_cmo_ring_by_name(cmo* ob); new_cmo_indeterminate(cmo* ob); new_cmo_error2(cmo* ob); -3. ¹â¿å½à API +*/ +/*&ja +3. ¥³¥Í¥¯¥·¥ç¥ó +OXFILE ¤Ï OpenXM ¤Ç¤ÎÄÌ¿®Ï©¤òɽ¸½¤¹¤ë¥¯¥é¥¹¤Ç¤¢¤ë¡£¤³¤Î¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§ +¥¯¥È¤òÌÀ¼¨Åª¤Ë¤ÏÀ¸À®¤·¤Ê¤¤¤³¤È¡£É¬¤º¥³¥ó¥¹¥È¥é¥¯¥¿¤òÍøÍѤ·¤Ê¤±¤ì¤Ð¤Ê¤é +¤Ê¤¤¡£¤³¤ì¤Ï¥¯¥é¥¤¥¢¥ó¥È¤È¥µ¡¼¥Ð¤ÇÀܳ»þ¤Î¼ê½ç¤¬°Û¤Ê¤ë¤³¤È¤ËͳÍ褹¤ë¡£ +¥Ð¥¤¥È¥ª¡¼¥À¤Ë´ØÏ¢¤·¤¿½èÍý¤Ï¤³¤Î¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤Ç¼Â¸½¤µ¤ì¤ë¡£¤³¤Î¥¯¥é +¥¹¤Î¥á¥½¥Ã¥É¤È¤·¤Æ¼¡¤Î¤â¤Î¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£ + +3.1 ¥³¥ó¥¹¥È¥é¥¯¥¿ + +OXFILE *oxf_connect_active(char *hostname, short port); + +ǽưŪ¤ËÀܳ¤¹¤ë¾ì¹ç¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¡£Ä̾¥µ¡¼¥Ð¤ÇÍøÍѤ¹¤ë¡£ + +OXFILE *oxf_connect_passive(int listened); + +¼õưŪ¤ËÀܳ¤¹¤ë¤¿¤á¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¡£ +ÆâÉô¤Ç accept() ¤ò¸Æ¤Ö¤Î¤Ç¡¢listened ¤Ë¤Ï mysocketListen() ¤ÎÊÖ¤·¤¿Ãͤ¬É¬Íס£ + +OXFILE *oxf_open(int fd); + +¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤ë¤À¤±¤Ç¡¢Àܳ¤Ï¹Ô¤ï¤Ê¤¤¡£¤¹¤Ç¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤¿¥Õ¥¡ +¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò fd ¤Ë»ØÄꤹ¤ë¡£·×»»¥µ¡¼¥Ð¤Ç¤ÎÍøÍѤòÁÛÄê¡£ + +3.2 ǧ¾Ú¤Ë´ØÏ¢¤·¤¿¥á¥½¥Ã¥É + +int oxf_confirm_client(OXFILE *oxfp, char *passwd); + +¥¯¥é¥¤¥¢¥ó¥È¦¤Ç¤Îǧ¾Ú¤ò¹Ô¤¦¡£ÊÖ¤êÃͤ¬1¤Î¤È¤­¤ËÀ®¸ù¡¢0¤Î¤È¤­¤Ë¼ºÇÔ¡£ + +int oxf_confirm_server(OXFILE *oxfp, char *passwd); + +¥µ¡¼¥Ð¦¤Ç¤Îǧ¾Ú¤ò¹Ô¤¦¡£¾ï¤ËÀ®¸ù¤¹¤ë¡£ + +void oxf_determine_byteorder_client(OXFILE *oxfp); +void oxf_determine_byteorder_server(OXFILE *oxfp); + +oxfp ¤Î»Ø¤¹ÄÌ¿®Ï©¤Ç¤Î¥Ð¥¤¥È¥ª¡¼¥À¤ò·èÄꤷ¡¢oxfp ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò½ñ¤­´¹¤¨¤ë¡£ + +void oxf_setopt(OXFILE *oxfp, int mode); + +oxfp ¤ÎÀßÄê¤ò¹Ô¤¦¡£oxf_determine_byteorder_XXX() ¤ÇÍѤ¤¤é¤ì¤Æ¤¤¤ë¡£ + +3.3 ¤½¤Î¾¤Î¥á¥½¥Ã¥É + +int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp); +int oxf_write(void *buffer, size_t size, size_t num, OXFILE *oxfp); +void oxf_flush(OXFILE *oxfp); +void oxf_close(OXFILE *oxfp); + +fread, fwrite, fflush, fclose ¤Ë½àµò¡£ + +*/ +/*&ja +4. ¹â¿å½à API(¤³¤Îµ­½Ò¤Ï¸Å¤¤¤Î¤Ç»È¤ï¤Ê¤¤¤³¤È) + ¹â¿å½à API ¤Ï¡ÖOpenXM ¥¯¥é¥¤¥¢¥ó¥È¡×¤«¤éÍøÍѤ¹¤ë¤³¤È¤òÁ°Äó¤ËÀ߷פµ¤ì¤Æ¤¤¤ë¡£ -3.1 ÄÌ¿®¤Î³«»Ï +4.1 ÄÌ¿®¤Î³«»Ï ÄÌ¿®¤ò³«»Ï¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¼¡¤Î´Ø¿ô¤Î¤¤¤º¤ì¤«¤òÍøÍѤ¹¤ë¡£ +*/ +/*&en +4. High-level API -ox_file_t ox_start(char* host, char* prog1, char* prog2); -ox_file_t ox_start_insecure_nonreverse(char* host, short portControl, short portStream); +High-level API is prepared to help an implementation of OpenXM clients. +4.1 How to make connections to OpenXM servers? + +In order to open a connection to an OpenXM server, you need to call +ox_start() or to call ox_start_insecure_nonreverse(). +*/ +/*&common + +OXFILE *ox_start(char* host, char* prog1, char* prog2); +OXFILE *ox_start_insecure_nonreverse(char* host, short portControl, short portStream); + +*/ +/*&ja Âè°ì¤Î´Ø¿ô¤Ï¡¢¥í¡¼¥«¥ë¥Þ¥·¥ó¾å¤Ë OpenXM ¥µ¡¼¥Ð¤òµ¯Æ°¤·¡¢¤½¤Î¥µ¡¼¥Ð¤È¤Î ´Ö¤Ë"reverse ¥â¡¼¥É"¤ÇÄÌ¿®Ï©¤ò³«Àߤ¹¤ë¡£ÄÌ¿®¤Ë»È¤ï¤ì¤ë¥Ý¡¼¥ÈÈÖ¹æ¤Ï¼«Æ° Ū¤ËÀ¸À®¤µ¤ì¤ë¡£host ¤Ï¥í¡¼¥«¥ë¥Þ¥·¥ó¤Î¥Û¥¹¥È̾(¤¢¤ë¤¤¤Ï "localhost")¡¢ @@ -109,71 +223,460 @@ portStream ¤Ï·×»»¥µ¡¼¥Ð¤È¤ÎÄÌ¿®¤Î¤¿¤á¤Î¥Ý¡¼¥ÈÈÖ¹æ¤Ç¤¢¤ ¤½¤ì¤¾¤ì¤Î´Ø¿ô¤Ï¥µ¡¼¥Ð(Àµ³Î¤Ë¤ÏÆó¤Ä¤Î¥µ¡¼¥Ð¤ÎÁÈ)¤Î¼±Ê̻ҤòÊÖ¤¹¡£ ¤³¤Î¼±Ê̻ҤϹâ¿å½à API ¤Î³Æ´Ø¿ô¤ÇÍøÍѤµ¤ì¤ë¡£ -3.2 ÄÌ¿®¤Î½ªÎ» +*/ +/*&en +The ox_start() function invoke an OpenXM server on its local machine +and open a connection to the server with "reverse" mode. The client +choose a port number of TCP/IP automatically. +The ox_start_insecure_nonreverse() function open a connection to an +OpenXM server run on a remote host and you need to provide port numbers. + +*/ +/*&ja +4.2 ÄÌ¿®¤Î½ªÎ» + ÄÌ¿®¤Î½ªÎ»¤Î¤¿¤á¤Ë¤Ï¼¡¤ÎÆó¤Ä¤Î´Ø¿ô¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£ -void ox_close(ox_file_t sv); -void ox_shutdown(ox_file_t sv); +*/ +/*&en +4.2 How to close connections to OpenXM servers? +In order to close a connection to an OpenXM server, you need to call +ox_close() or to call ox_shutdown(). + +*/ +/*&common +void ox_close(OXFILE *sv); +void ox_shutdown(OXFILE *sv); + +*/ +/*&ja Âè°ì¤Î´Ø¿ô¤Ï¥³¥ó¥È¥í¡¼¥ë¥µ¡¼¥Ð¤Ë SM_control_kill ¤òÁ÷¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ ¥µ¡¼¥Ð¤ò½ªÎ»¤µ¤»¤ë¡£ÂèÆó¤Î´Ø¿ô¤Ï·×»»¥µ¡¼¥Ð¤Ë SM_shutdown ¤òÁ÷¤ë¤³¤È¤Ë ¤è¤Ã¤Æ¡¢¥µ¡¼¥Ð¤ò½ªÎ»¤µ¤»¤ë(ͽÄê)¡£ -3.3 SM ¥³¥Þ¥ó¥É¤ÎÁ÷¿® +*/ +/*&ja +4.3 SM ¥³¥Þ¥ó¥É¤ÎÁ÷¿® +*/ +/*&en +4.3 How to command to OpenXM stack machines? +*/ +/*&common -void ox_push_cmd(ox_file_t sv, int sm_code); +void ox_push_cmd(OXFILE *sv, int sm_code); +*/ +/*&ja ¥µ¡¼¥Ð¤Ë¥¹¥¿¥Ã¥¯¥Þ¥·¥ó¥³¥Þ¥ó¥É¤òÁ÷¤ë¡£¥³¥Þ¥ó¥É¤Ï¥³¥Þ¥ó¥ÉÈÖ¹æ¤ÇÍ¿¤¨¤ë¡£ -3.4 CMO ¤ÎÁ÷¼õ¿® +*/ +/*&en +ox_push_cmd() sends an operation code to an OpenXM stack machine. +See OpenXM/include/ox_toolkit_tags.h for a list of operation codes. -void ox_push_cmo(ox_file_t sv, cmo *c); -cmo* ox_pop_cmo(ox_file_t sv); -char* ox_popString(ox_file_t sv); +*/ +/*&ja +4.4 CMO ¤ÎÁ÷¼õ¿® +*/ +/*&en +4.4 How to receive a CMO? +*/ +/*&common +void ox_push_cmo(OXFILE *sv, cmo *c); +cmo* ox_pop_cmo(OXFILE *sv); +char* ox_popString(OXFILE *sv); + +*/ +/*&ja ox_push_cmo ¤Ï cmo ¤òÁ÷¿®¡¢ox_pop_cmo ¤Ï cmo ¤ò¼õ¿®¤¹¤ë¡£ox_popString ¤Ï cmo ¤òʸ»úÎó·Á¼°¤ËÊÑ´¹¤·¤Æ¼õ¿®¤¹¤ë¤¬¡¢ÊÑ´¹¤Î·ë²Ì¤Ï¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ°Û ¤Ê¤ë¡£ -3.5 ¥¹¥¿¥Ã¥¯½èÍý +*/ +/*&en +*/ +/*&ja +4.5 ¥¹¥¿¥Ã¥¯½èÍý +*/ +/*&common -int ox_pops(ox_file_t sv, int num); +int ox_pops(OXFILE *sv, int num); +*/ +/*&ja ¥¹¥¿¥Ã¥¯¾å¤Î num ¸Ä¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÇÑ´þ¤¹¤ë¡£ -3.6 +*/ +/*&ja +4.6 ÄÌ¿®Ï©¤Î¥Õ¥é¥Ã¥·¥å +*/ +/*&common -int ox_flush(ox_file_t sv); +int ox_flush(OXFILE *sv); +*/ +/*&ja ÄÌ¿®Ï©¤ò flush ¤¹¤ë(¼ÂºÝ¤Ë¤Ï²¿¤â¤·¤Ê¤¤)¡£ -3.7 +*/ +/*&ja +4.7 ÄÌ¿®¤ÎÃæÃÇ +*/ +/*&common -void ox_reset(ox_file_t sv); +void ox_reset(OXFILE *sv); +*/ +/*&ja ·×»»¤òÃæÃǤ¹¤ë¡£ -3.8 +*/ +/*&ja +4.8 ¥í¡¼¥«¥ë¸À¸ì¤Ç½ñ¤«¤ì¤¿¥³¥Þ¥ó¥É¤Îɾ²Á +*/ +/*&common -void ox_execute_string(ox_file_t sv, char* str); +void ox_execute_string(OXFILE *sv, char* str); +*/ +/*&ja ¥µ¡¼¥Ð¤Î¥í¡¼¥«¥ë¸À¸ì¤Ç½ñ¤«¤ì¤¿Ì¿Îá¤òɾ²Á¤·¡¢·ë²Ì¤ò¥¹¥¿¥Ã¥¯¤ËÀѤࡣ -3.9 +*/ +/*&ja +4.9 ´Ø¿ô¸Æ¤Ó½Ð¤· +*/ +/*&common -int ox_cmo_rpc(ox_file_t sv, char *function, int argc, cmo *argv[]); +int ox_cmo_rpc(OXFILE *sv, char *function, int argc, cmo *argv[]); +*/ +/*&ja function(argv[1], ...) ¤ò·×»»¤·¡¢·ë²Ì¤ò¥¹¥¿¥Ã¥¯¤ËÀѤࡣ -3.10 +*/ +/*&ja +4.10 Mathcap ¤Î¼õ¿® -cmo_mathcap* ox_mathcap(ox_file_t sv); +*/ +/*&common +cmo_mathcap* ox_mathcap(OXFILE *sv); +*/ +/*&ja Mathcap ¤ò¼õ¤±¼è¤ë¡£¸½ºß¤Ï Mathcap ¤Î½èÍý¤Ï¥æ¡¼¥¶¥×¥í¥°¥é¥à¤ËǤ¤µ¤ì¤Æ¤¤¤ë¡£ ¤¤¤º¤ì¤³¤Î´Ø¿ô¤ÏÇѻߤµ¤ì¤ëͽÄê¡£ +*/ +/*&ja -4. Äã¿å½à API +5. Äã¿å½à API -4.1 ÄÌ¿®¤Î³«»Ï +Äã¿å½à API ¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òľÀÜÍøÍѤ¹¤ë¡£ + +5.1 ÄÌ¿®¤Ë»È¤ï¤ì¤ë¥Ð¥¤¥È¥ª¡¼¥À¤Î·èÄê +*/ +/*&en + +5. Low-level API. + +In this section, ``fd'' is an identifier of an OpenXM connection. + +5.1 How to decide a byte order of integers? + +*/ +/*&common +int decideByteOrderServer(int fd, int order); + +*/ +/*&ja +¤³¤Î¥Ä¡¼¥ë¥­¥Ã¥È¤Ï¡¢¥µ¡¼¥Ð¤¬³«»Ï¤µ¤ì¤ë¤È¤­¤Ë¤Ï¤¹¤Ç¤ËÄÌ¿®Ï©¤¬ÀßÄꤵ¤ì¤Æ +¤¤¤ë¤¬¡¢¤½¤ÎÄÌ¿®Ï©¤ËÍѤ¤¤ë¥Ð¥¤¥È¥ª¡¼¥À¤Î·èÄê¤Ï¹Ô¤ï¤ì¤Æ¤¤¤Ê¤¤¤È²¾Äꤷ¤Æ +¤¤¤ë¡£¾Ü¤·¤¯¤Ï¡¢¹â»³-ÌîϤ, "OpenXM ¤ÎÀ߷פȼÂÁõ" ¤ò»²¾È¤»¤è¡£ + +(Ãí°Õ) ¥¯¥é¥¤¥¢¥ó¥È¦¤Ç¤Î¥Ð¥¤¥È¥ª¡¼¥À¤ÎÀßÄê¤Ï¡¢¹â¿å½à API ¤Ç¼«Æ°Åª¤Ë¹Ô¤ï¤ì¤ë¡£ +*/ +/*&en +You need to call it when your OpenXM server is initialized. +This function always choose the network byte order +as an expression for integers. +*/ +/*&common + +5.2 + +*/ +/*&common +int send_int32(int fd, int integer); +int receive_int32(int fd); + +*/ +/*&ja +fd ¤Ë 32bit À°¿ô¤ò½ñ¤­¹þ¤à¡£ +fd ¤«¤é 32bit À°¿ô¤òÆɤ߹þ¤à¡£ +*/ +/*&en +send_int32() writes 32bits integer to an OpenXM connection. +receive_int32() reads 32bits integer from an OpenXM connection. +*/ +/*&common + +5.3 + +*/ +/*&common +int send_cmo(int fd, cmo* m); +cmo* receive_cmo(int fd); + +*/ +/*&ja +fd ¤Ë cmo ¤ò½ñ¤­¹þ¤à¡£ +fd ¤«¤é cmo ¤òÆɤ߹þ¤à¡£ +*/ +/*&en +send_cmo() writes an CMObject to an OpenXM connection. +receive_cmo() reads an CMObject from an OpenXM connection. +*/ +/*&common + +5.4 + +*/ +/*&common +int next_serial(); + +*/ +/*&ja +¥·¥ê¥¢¥ë¥Ê¥ó¥Ð¤òÀ¸À®¤¹¤ë¡£ +*/ +/*&en +next_serial() generates a serial number for ox message. +*/ +/*&common + +5.5 + +*/ +/*&common +int send_ox_tag(int fd, int tag); +int receive_ox_tag(int fd); + +*/ +/*&ja +fd ¤Ë OX ¥á¥Ã¥»¡¼¥¸¤Î¥Ø¥Ã¥À(tag+serial#)¤ò½ñ¤­¹þ¤à¡£¥·¥ê¥¢¥ëÈÖ¹æ¤Ï +¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤ë¡£ +fd ¤«¤é OX ¥á¥Ã¥»¡¼¥¸¤Î¥Ø¥Ã¥À(tag+serial#)¤òÆɤ߹þ¤à¡£ +*/ +/*&en +send_ox_tag() writes a tag and an automatically generated serial number +of an ox message to an OpenXM conection. +receive_ox_tag() reads a tag and a serial number of an ox message. +*/ +/*&common + +5.6 Sending OX messages. + +*/ +/*&common +int send_ox(int fd, ox* m); +int send_ox_cmo(int fd, cmo* m); +void send_ox_command(int fd, int sm_command); + +*/ +/*&ja +OX ¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë¡£ +*/ + +/*&ja + +6. OX expression ¥Ñ¡¼¥µ + +*/ +/*&en + +6. Parser for OX expressions + +*/ +/*&ja +OpenXM C library ¤Ë¤Ï ʸ»úÎóɽ¸½¤µ¤ì¤¿ OX expression ¤ª¤è¤Ó CMO +expression ¤«¤é¡¢ox ¹½Â¤ÂΤޤ¿¤Ï cmo ¹½Â¤ÂΤòÀ¸À®¤¹¤ë¤¿¤á¤Î¥Ñ¡¼¥µ¤¬ÉÕ +°¤·¤Æ¤¤¤ë¡£¤³¤³¤Ç¤Ï¤³¤Î¥Ñ¡¼¥µ¤Ë¤Ä¤¤¤ÆÀâÌÀ¤¹¤ë¡£ +*/ +/*&en +We have a parser which generate an OX object or a CMO from a string +encoded OX/CMO expression. In this section, we explain the parser. +*/ +/*&en + +6.1 Setting an option +*/ +/*&ja + +6.1 ¥ª¥×¥·¥ç¥ó +*/ +/*&common + +int setflag_parse(int flag); + +*/ +/*&ja +setflag_parse(PFLAG_ADDREV) ¤Ë¤è¤Ã¤Æ¡¢CMO ¤Îû½Ìɽ¸½¤òµö¤¹¡£ +*/ +/*&en +We set an option for the parser. If we call +setflag_parse(PFLAG_ADDREV), then the parser admits external +expressios. +*/ +/*&en + +6.2 Initializing +*/ +/*&ja + +6.2 ½é´ü²½ +*/ +/*&common + +int init_parser(char *str); + +*/ +/*&ja +¥Ñ¡¼¥µ¤¬½èÍý¤¹¤Ù¤­Ê¸»úÎó¤ò¥»¥Ã¥È¤¹¤ë¡£ +*/ +/*&en +We give the parser an OX/CMO expression, that is, a Lisp style string. +*/ +/*&en + +6.3 Getting an object +*/ +/*&ja + +6.3 ·ë²Ì¤òÆÀ¤ë +*/ +/*&common + +cmo *parse(); + +*/ +/*&ja +Lisp ɽ¸½¤Ë¤è¤ë OX expression, CMO expression ¤Î¹½Ê¸²òÀÏ´ï¡£¤¢¤é¤«¤¸¤á +ÀßÄꤵ¤ì¤¿Ê¸»úÎó¤ò²òÀϤ·¤Æ ox ¹½Â¤ÂΡ¢¤¢¤ë¤¤¤Ï cmo ¹½Â¤ÂΤòÀ¸À®¤¹¤ë¡£ +*/ +/*&en +The parser returns an OX/CMO object. If the given string is illegal, +then the parser returns NULL. +*/ +/*&ja + +7. Mathcap ¥¯¥é¥¹ +¥Ç¡¼¥¿¥Ù¡¼¥¹ + +7.1. ³µÍ× + +Mathcap ¥¯¥é¥¹¤Ï OpenXM ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î Mathcap ¤òɽ¸½¤¹¤ë¥¯¥é¥¹¤Ç +¤¢¤ë¡£¤³¤ì¤Ï cmo_mathcap ¤È¤ÏÊÌʪ¤Ç¤¢¤ë¡£Mathcap ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹ +¤Ï³ÆÄÌ¿®Ï©¤´¤È¤ËÀ¸À®¤µ¤ì¡¢OXFILE ¥¯¥é¥¹¤Î¥á¥ó¥Ð¤Ë¤Ê¤ë¡£¤³¤Î¤³¤È¤Ï¡¢Ê£ +¿ô¤Î·×»»¥×¥í¥»¥¹¤ÈƱ»þ¤ËÄÌ¿®¤¹¤ë¥¯¥é¥¤¥¢¥ó¥È¤òºîÀ®¤¹¤ë¤¿¤á¤Ç¤¢¤ë¡£¤µ¤Æ¡¢ +Mathcap ¥¯¥é¥¹¤Ï¡¢ÀÅŪ¥á¥ó¥Ð¤â¤â¤Ä¡£¤³¤ì¤éÀÅŪ¥á¥ó¥Ð¤Ï¡¢ÄÌ¿®Ï©¤«¤éÆÈΩ +¤·¤¿¡¢ OpenXM ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¼«ÂΤξðÊó¤òÊÝ»ý¤¹¤ë¤¿¤á¤ËÍѤ¤¤é¤ì¤ë¡£¤Þ¤¿¡£ +¥¤¥ó¥¹¥¿¥ó¥¹¤ÎÀ¸À®»þ¤Ë¤â¤½¤Î¾ðÊó¤ÏÍøÍѤµ¤ì¤ë¡£ + +7.2. ¥á¥½¥Ã¥É + +Mathcap ¥¯¥é¥¹¤Ï mathcap.c ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£¥æ¡¼¥¶¤Ï¼¡¤Î´Ø¿ô¤ò²ð¤·¤Æ¡¢ +Mathcap ¥¯¥é¥¹¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ + +void mathcap_init(int version, char *id, char *sysname, int cmo[], sm_cmd[]); + +ÀÅŪ¥á¥ó¥Ð¤ò½é´ü²½¤¹¤ë¡£Mathcap ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤ë¤Þ¤¨¤Ë¡¢ +¤·¤¿¤¬¤Ã¤Æ¡¢¥¯¥é¥¤¥¢¥ó¥È¤ª¤è¤Ó¥µ¡¼¥Ð¤Ï¥×¥í¥°¥é¥à¤ò³«»Ï¤¹¤ë¤È¤­¤Ë¡¢¤³¤Î +´Ø¿ô¤ò¸Æ¤Ð¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£cmo ¤Ï¡¢¤½¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÍøÍѤ¹¤ë CMO +¤Î¥¿¥°¤Î¥ê¥¹¥È¤Ç¤¢¤Ã¤Æ¡¢0 ¤Ç½ªÃ¼¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£NULL ¤Î¤È¤­¤Ë¤Ï´û +ÄêÃͤ¬ÍѤ¤¤é¤ì¤ë¡£sm_cmd ¤âƱÍÍ¡£ + +cmo_mathcap *mathcap_get(mathcap *this); + +Mathcap ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò cmo_mathcap ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ËÊÑ´¹¤¹¤ë¡£ + +mathcap *mathcap_update(mathcap *this, cmo_mathcap *mc); + +ÄÌ¿®Áê¼ê¤«¤éÆþ¼ê¤·¤¿ cmo_mathcap ¥ª¥Ö¥¸¥§¥¯¥È¤òÍѤ¤¤Æ¡¢Mathcap ¥¯¥é¥¹¤Î +¥¤¥ó¥¹¥¿¥ó¥¹¤ò¹¹¿·¤¹¤ë¡£ + +*/ +/*&ja + +8. ÉÕ°¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ + +*/ +/*&en + +8. Sample programs. + +*/ +/*&common +testclient + +*/ +/*&ja +¥Æ¥¹¥ÈÍѤµ¤Ê OpenXM ¥¯¥é¥¤¥¢¥ó¥È¡£OX expression ¤òÆþÎϤ·¤ÆÁ÷¿®¤¹¤ë +¤³¤È¤Î¤ß²Äǽ¡£SM_popCMO, SM_popString ¤ò´Þ¤à¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤·¤¿¾ì¹ç¤Ë +¤Ï¡¢¥µ¡¼¥Ð¤«¤éÁ÷¤é¤ì¤Æ¤¯¤ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£ + +*/ +/*&en +This is a small OpenXM client. We send an OX message by inputting an +OX expression and display data messages gotten from a server. + +*/ +/*&common +bconv + +*/ +/*&ja +¥Ð¥¤¥È¥³¡¼¥É¥¨¥ó¥³¡¼¥À¡£OX expression ¤¢¤ë¤¤¤Ï CMO expression ¤òÆþÎϤ¹ +¤ë¤È¡¢Âбþ¤¹¤ë¥Ð¥¤¥ÈÎó¤òɽ¼¨¤¹¤ë¡£ + +*/ +/*&en +A byte code encoder. It shows a byte stream which corresponds to an +OX expression. + +*/ +/*&common +ox_Xsample + +*/ +/*&ja +GUI ɽ¼¨¤¹¤ë OpenXM ¥µ¡¼¥Ð¤Î¥µ¥ó¥×¥ë¡£ + +*/ +/*&ja +9. ÉÕÏ¿ + +9.1 ox.c ¤Ë¤ª¤±¤ë´Ø¿ô¤Î̿̾µ¬Â§ + +(1) receive_cmo ´Ø¿ô¤ÏCMO¥¿¥°¤È¥Ç¡¼¥¿ËÜÂΤò¼õ¿®¤¹¤ë. ¤³¤Î´Ø¿ô¤Ï CMO¥¿ +¥°¤ÎÃͤ¬»öÁ°¤Ëʬ¤«¤é¤Ê¤¤¤È¤­¤Ë»ÈÍѤ¹¤ë. ÊÖ¤êÃͤȤ·¤Æ¡¢cmo ¤Ø¤Î¥Ý¥¤¥ó¥¿ +¤òÊÖ¤¹. +(2) receive_cmo_X ´Ø¿ô¤Ï, CMO¥¿¥°¤ò¿Æ¤Î´Ø¿ô¤Ç¼õ¿®¤·¤Æ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë +´Ø¿ô¤Ç¡¢¥Ç¡¼¥¿ËÜÂΤΤߤò¼õ¿®¤·¡¢cmo_X ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹. ¤·¤«¤â¡¢´Ø +¿ôÆâÉô¤Ç new_cmo_X ´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹. +(3) send_cmo ´Ø¿ô¤ÏCMO¥¿¥°¤È¥Ç¡¼¥¿ËÜÂΤòÁ÷¿®¤¹¤ë. +(4) send_cmo_X ´Ø¿ô¤ÏCMO¥¿¥°¤ò¿Æ¤Î´Ø¿ô¤ÇÁ÷¿®¤·¤Æ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Ç¡¢ +¥Ç¡¼¥¿ËÜÂΤΤߤòÁ÷¿®¤¹¤ë. +(5) ¤¿¤À¤· receive_ox_tag ¤ò½ü¤¤¤Æ, receive_ox_X ´Ø¿ô¤Ïºî¤é¤Ê¤¤. +receive_cmo ¤òÍøÍѤ¹¤ë. +(6) send_ox_X ´Ø¿ô¤Ï OX ¥¿¥°¤ò´Þ¤á¤ÆÁ÷¿®¤¹¤ë. +(7) ox_X ´Ø¿ô¤Ï°ìÏ¢¤ÎÁ÷¼õ¿®¤ò´Þ¤à¤è¤êÃê¾ÝŪ¤ÊÁàºî¤òɽ¸½¤¹¤ë. ox_X ´Ø +¿ô¤Ï¡¢Âè°ì°ú¿ô¤È¤·¤Æ¡¢ox_file_t·¿¤ÎÊÑ¿ô sv ¤ò¤È¤ë. +(8) Y_cmo ´Ø¿ô¤È Y_cmo_X ´Ø¿ô¤Î´Ø·¸¤Ï¼¡¤ÎÄ̤ê: +¤Þ¤º Y_cmo ´Ø¿ô¤Ç cmo ¤Î¥¿¥°¤ò½èÍý¤·¡¢¥¿¥°¤ò½ü¤¤¤¿»Ä¤ê¤ÎÉôʬ¤òY_cmo_X +´Ø¿ô¤¬½èÍý¤¹¤ë. cmo ¤ÎÆâÉô¤Ë cmo_Z ¤Ø¤Î¥Ý¥¤¥ó¥¿¤¬¤¢¤ë¤È¤­¤Ë¤Ï¡¢¤½¤Î¼ï +Îà¤Ë¤è¤é¤º¤Ë Y_cmo ´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹. + +*/