home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e065 / 2.ddi / UIO_IF_I.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-28  |  7.2 KB  |  284 lines

  1. /*****************************************************************/
  2. /*                                                               */
  3. /*    uioif_i.c - UserIO InterFace platform Independent Code     */
  4. /*    Author: John C. Fairman           August 31, 1990          */
  5. /*    Copyright 1990 by Neuralware Inc.                          */
  6. /*                                                               */
  7. /*    $Author   :  $                                             */
  8. /*    $Date     :  $                                             */
  9. /*    $Source   :  $                                             */
  10. /*    $Revision :  $                                             */
  11. /*    $Log      :  $                                             */
  12. /*                                                               */
  13. /*****************************************************************/
  14.  
  15. #define UIO_SERVER             1
  16. #define SERVER_EMULATOR_FILE   2
  17. #define HOME_FOR_TRANSFER_DATA 1
  18. #define SKIP_COMPAT_DATA       1
  19. #include "userutl.h"
  20. #include "uio_strc.h"
  21. #include "uio_tran.h"
  22. #include "uio_cmds.pro"
  23. #include "uio_tran.pro"
  24. #include "uio_if_i.pro"
  25.  
  26. /*******************************************************************/
  27. /*   This function upacks the data transfer buffer and calls the   */
  28. /*   userio cmd.                                                  */
  29. /*******************************************************************/
  30.  
  31. /* FUNCTION */
  32. EXPORT VOID Handle_command()
  33. {
  34.   RPC_AREA_T *rpc;
  35.  
  36.   rpc = &Data_transfer_ptr->RPC_area;
  37.   switch ((UNINT)rpc->request)
  38.   {
  39.     /* General Purpose Commands */
  40.     case CMD_INIT :
  41.     {
  42.       RPC_AREA_T *rpc;
  43.       INITCMD    *initcmd;
  44.       NINT       process_id;
  45.       TEXT       process_name[FNALC];
  46.  
  47.       rpc = &Data_transfer_ptr->RPC_area;
  48.       initcmd = &rpc->all_arg_lists.initcmd;
  49.       strcpy(process_name, initcmd->filename);
  50.  
  51.       rpc->return_value.buffer_int = process_id = UIO_Init(process_name);
  52.     }
  53.     break;
  54.  
  55. /* */
  56.     case CMD_TERM :
  57.     {
  58.       RPC_AREA_T *rpc;
  59.       INITCMD    *initcmd;
  60.  
  61.       rpc = &Data_transfer_ptr->RPC_area;
  62.       initcmd = &rpc->all_arg_lists.initcmd;
  63.  
  64.       rpc->return_value.buffer_int = UIO_Term(initcmd->process_id);
  65.     }
  66.     break;
  67.  
  68.     case CMD_ATTENTION :
  69.  
  70.       rpc->return_value.buffer_int = UIO_Attention();
  71.  
  72.     break;
  73.  
  74.     /* Learning Commands */
  75.     case CMD_LEARN_START :
  76.  
  77.       rpc->return_value.buffer_int = UIO_Learn_Start();
  78.  
  79.     break;
  80.  
  81.     case CMD_LEARN_INPUT :
  82.     {
  83.       RPC_AREA_T *rpc;
  84.       DATACMD    *datacmd;
  85.       NINT       npes;
  86.  
  87.       rpc = &Data_transfer_ptr->RPC_area;
  88.       datacmd = &rpc->all_arg_lists.datacmd;
  89.       npes = (NINT)datacmd->npes;
  90.  
  91.       rpc->return_value.buffer_int =
  92.         UIO_Learn_Input((NINT)datacmd->layn, (NINT)datacmd->npes,
  93.         (SREAL *)(Data_transfer_ptr->data_area.data));
  94.  
  95.       Put_data_into_transfer_buffer(
  96.         (BUFFER_CHAR *)(Data_transfer_ptr->data_area.data),
  97.         npes, (NINT)DATA_TYPE);
  98.     }
  99.     break;
  100.  
  101.     case CMD_LEARN_OUTPUT :
  102.     {
  103.       RPC_AREA_T *rpc;
  104.       DATACMD    *datacmd;
  105.       NINT       npes;
  106.  
  107.       rpc = &Data_transfer_ptr->RPC_area;
  108.       datacmd = &rpc->all_arg_lists.datacmd;
  109.       npes = (NINT)datacmd->npes;
  110.  
  111.       rpc->return_value.buffer_int =
  112.         UIO_Learn_Output(datacmd->layn, datacmd->npes,
  113.         (SREAL *)(Data_transfer_ptr->data_area.data));
  114.  
  115.       Put_data_into_transfer_buffer(
  116.         (BUFFER_CHAR *)(Data_transfer_ptr->data_area.data),
  117.         npes, (NINT)DATA_TYPE);
  118.     }
  119.     break;
  120.  
  121. /* */
  122.     case CMD_LEARN_RESULT :
  123.     {
  124.       RPC_AREA_T *rpc;
  125.       DATACMD    *datacmd;
  126.  
  127.       rpc = &Data_transfer_ptr->RPC_area;
  128.       datacmd = &rpc->all_arg_lists.datacmd;
  129.  
  130.       rpc->return_value.buffer_int =
  131.         UIO_Learn_Result(datacmd->layn, datacmd->npes,
  132.         (SREAL *)(Data_transfer_ptr->data_area.data));
  133.     }
  134.     break;
  135.  
  136.     case CMD_LEARN_END :
  137.  
  138.       rpc->return_value.buffer_int = UIO_Learn_End();
  139.  
  140.     break;
  141.  
  142.  
  143.     /* Recall Commands */
  144.     case CMD_RECALL_START :
  145.  
  146.       rpc->return_value.buffer_int = UIO_Recall_Start();
  147.  
  148.     break;
  149.  
  150.     case CMD_READ :
  151.     {
  152.       RPC_AREA_T *rpc;
  153.       DATACMD    *datacmd;
  154.       NINT       npes;
  155.  
  156.       rpc = &Data_transfer_ptr->RPC_area;
  157.       datacmd = &rpc->all_arg_lists.datacmd;
  158.       npes = (NINT)datacmd->npes;
  159.  
  160.       rpc->return_value.buffer_int =
  161.         UIO_Read(datacmd->layn, datacmd->npes,
  162.         (SREAL *)(Data_transfer_ptr->data_area.data));
  163.       Put_data_into_transfer_buffer(
  164.         (BUFFER_CHAR*)(Data_transfer_ptr->data_area.data),
  165.         npes, (NINT)DATA_TYPE);
  166.     }
  167.     break;
  168.  
  169.     case CMD_WRITE :
  170.     {
  171.       RPC_AREA_T *rpc;
  172.       DATACMD    *datacmd;
  173.  
  174.       rpc = &Data_transfer_ptr->RPC_area;
  175.       datacmd = &rpc->all_arg_lists.datacmd;
  176.  
  177.       rpc->return_value.buffer_int =
  178.         UIO_Write(datacmd->layn, datacmd->npes,
  179.         (SREAL *)(Data_transfer_ptr->data_area.data));
  180.     }
  181.     break;
  182.  
  183. /* */
  184.     case CMD_WRITE_STEP :
  185.     {
  186.       RPC_AREA_T *rpc;
  187.       DATACMD    *datacmd;
  188.  
  189.       rpc = &Data_transfer_ptr->RPC_area;
  190.       datacmd = &rpc->all_arg_lists.datacmd;
  191.  
  192.       rpc->return_value.buffer_int =
  193.         UIO_Write_Step(datacmd->layn, datacmd->npes,
  194.         (SREAL *)(Data_transfer_ptr->data_area.data));
  195.     }
  196.     break;
  197.  
  198.     case CMD_RECALL_TEST :
  199.     {
  200.       RPC_AREA_T *rpc;
  201.       DATACMD    *datacmd;
  202.       NINT       npes;
  203.  
  204.       rpc = &Data_transfer_ptr->RPC_area;
  205.       datacmd = &rpc->all_arg_lists.datacmd;
  206.       npes = (NINT)datacmd->npes;
  207.  
  208.       rpc->return_value.buffer_int =
  209.         UIO_Recall_Test(datacmd->layn, datacmd->npes,
  210.         (SREAL *)(Data_transfer_ptr->data_area.data));
  211.  
  212.       Put_data_into_transfer_buffer(
  213.         (BUFFER_CHAR *)(Data_transfer_ptr->data_area.data),
  214.         npes, (NINT)DATA_TYPE);
  215.     }
  216.     break;
  217.  
  218.     case CMD_RECALL_END :
  219.  
  220.       rpc->return_value.buffer_int = UIO_Recall_End();
  221.  
  222.     break;
  223.  
  224.     /* Other Commands */
  225.     case CMD_INSTRUMENT :
  226.     {
  227.       RPC_AREA_T    *rpc;
  228.       INSTRUMENTCMD *instrumentcmd;
  229.  
  230.       rpc = &Data_transfer_ptr->RPC_area;
  231.       instrumentcmd = &rpc->all_arg_lists.instrumentcmd;
  232.  
  233.       rpc->return_value.buffer_int =
  234.         UIO_Instrument(instrumentcmd->instrument_id,
  235.         instrumentcmd->ndataelems,
  236.         (SREAL *)(Data_transfer_ptr->data_area.data));
  237.     }
  238.     break;
  239.  
  240.     case CMD_REWIND :
  241.  
  242.       rpc->return_value.buffer_int = UIO_Rewind();
  243.  
  244.     break;
  245.  
  246.     case CMD_EXPLAIN :
  247.     {
  248.       RPC_AREA_T *rpc;
  249.       DATACMD    *datacmd;
  250.  
  251.       rpc = &Data_transfer_ptr->RPC_area;
  252.       datacmd = &rpc->all_arg_lists.datacmd;
  253.  
  254.       rpc->return_value.buffer_int =
  255.         UIO_Explain(datacmd->layn, datacmd->npes,
  256.         (SREAL *)(Data_transfer_ptr->data_area.data));
  257.     }
  258.     break;
  259.  
  260. /* This can't ever happen!
  261.     case CMD_WRITE_VECTOR :
  262.  
  263.       UIO_Write_Vector();
  264.  
  265.     break;
  266. */
  267.  
  268.     default :
  269.  
  270.       UIO_server_error((NINT)UNKNOWN_COMMAND);
  271.   }
  272.  
  273. /* */
  274.   rpc->request = REQ_ACKNOWLEDGE;
  275.   Data_transfer_ptr->RPC_area.process_from_id = Process_id;
  276.   Data_transfer_ptr->RPC_area.process_to_id = HOST_PROCESS_ID;
  277.   if (UIO_error_value != 0)
  278.   {
  279.     rpc->request = (BUFFER_INT)UIO_error_value;
  280.     UIO_error_value = 0;
  281.   }
  282. }
  283.  
  284.