⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 host.c

📁 basic.c */ /**//* Project:NeuroBasic, basic package*//**/ /* Survey:This is a simple Basic b-code
💻 C
📖 第 1 页 / 共 2 页
字号:
  fclose(fpt);} /* end of basic_load() */static void save_block(MFLOAT *pbuf, MINT offset, MINT fformat,		       MINT block_size, FILE *fpt, MINT width)/*===========================================================*/{  MINT		n;    if (fformat == FF_FLOAT32)    fwrite(pbuf, sizeof(MFLOAT), block_size, fpt);  else if (fformat == FF_FIXED8)  {    float2fixed(pbuf, block_size);    fwrite(pbuf, sizeof(char), block_size, fpt);  }  else  {			/* FF_ASCII */    for (n = 0; n < block_size; n++)    {      fprintf(fpt, " %g", *pbuf++);      if ((offset + n + 1) % width == 0) fprintf(fpt, "\n");    }  }} /* end of save_block() */void basic_save(message_t message)/********************************//* Creates an SN-matrix file "filename" (using the format given in   "sformat" (floating-point, fixed point or ASCII) and up-loads   the data from MUSIC. If necessary, the numbers are converted.*/{  MINT		block_size, ndim, xdim, ydim, zdim, sformat;  FILE		*fpt;  char		*filename;  sn_mathead_t	sn_header;  message_t	msg;  MINT		i, ndots, nnewdots;  MINT		ntotal_values, values_saved, current_block_size;  MFLOAT	*pbuf;  char		*msgs;  filename = bc_str_get(message[2].i, -1, NULL);  sformat = message[3].i;  Rd_from_music(msg, sizeof(msg));  ndim = msg[0].i;  xdim = msg[1].i;  ydim = msg[2].i;  zdim = msg[3].i;  block_size = msg[4].i;  /*===== select magic number and open file =====*/  if (sformat == FF_FLOAT32)    {      sn_header.sn_magic = SN_FMAGIC;      msgs = "floating-point";      fpt = fopen(filename, "wb");    }  else if (sformat == FF_FIXED8)    {      sn_header.sn_magic = SN_CMAGIC;      msgs = "fixed-point";      fpt = fopen(filename, "wb");    }  else if (sformat == FF_ASCII)  {    msgs = "ASCII";    fpt = fopen(filename, "w");  }  else  {    msg[0].i = ERR_PARCONF;    Wr_to_music(msg, sizeof(msg));		/* tell Music */    return;  }  if (fpt == NULL)  {    msg[0].i = ERR_DISKERROR;    Wr_to_music(msg, sizeof(msg));		/* tell Music */    return;  }  /*===== save header =====*/  if (sformat == FF_ASCII)  {    fprintf(fpt, ".MAT %ld", ndim);    if (ndim > 0) fprintf(fpt, " %ld", xdim);    if (ndim > 1) fprintf(fpt, " %ld", ydim);    if (ndim > 2) fprintf(fpt, " %ld", zdim);    fprintf(fpt, "\n");  }  else  {				/* fixed point or floating-point */    sn_header.sn_ndim = ndim;    sn_header.sn_xdim = xdim;    sn_header.sn_ydim = ydim;    sn_header.sn_zdim = zdim;    fwrite(&sn_header, sizeof(sn_header), 1, fpt);  }  /*===== allocate temporary buffer =====*/  pbuf = (MFLOAT*)malloc(BUF_SIZE * sizeof(MFLOAT));  if (pbuf == NULL)  {    msg[0].i = ERR_NOMEM;    Wr_to_music(msg, sizeof(msg));		/* tell Music */    fclose(fpt);    return;  }  msg[0].i = ERR_NOERROR;  Wr_to_music(msg, sizeof(msg));		/* tell Music ok */    /*===== upload and save matrix =====*/  printf(INDENT);  printf("Saving matrix (%ldx%ldx%ld) to \"%s\" in %s format\n",	 xdim, ydim, zdim, filename, msgs);  printf(INDENT);  printf("in 10 blocks "); fflush(stdout);  ntotal_values = xdim * ydim * zdim;  values_saved = 0;  ndots = 0;  while (values_saved < ntotal_values && !ferror(fpt))  {    if (BUF_SIZE > block_size - values_saved % block_size)      current_block_size = block_size - values_saved % block_size;    else      current_block_size = BUF_SIZE;    Rd_from_music(pbuf, current_block_size * sizeof(MFLOAT));    save_block(pbuf, values_saved, sformat, current_block_size, fpt,	       ydim);    values_saved += current_block_size;    nnewdots = values_saved * 10 / ntotal_values - ndots;    for (i = 0; i < nnewdots; i++) printf(".");    fflush(stdout);    ndots += nnewdots;  } /* end while () */  printf("\n");  fflush(stdout);  if (ferror(fpt) != 0)  {    printf(INDENT);    printf("Error while saving file \"%s\".\n", filename);    printf(INDENT);    printf("The matrix may not be valid!\n");  }    free(pbuf);  fclose(fpt);} /* end of basic_save() */static void display_block(MFLOAT *pbuf, MINT offset, MINT block_size,			  MINT width, MINT height)/*******************************************************************/{  MINT		n;  for (n = 0; n < block_size; n++)  {    if (fabs(*pbuf) < 0.01)      printf(" % -6.1g", *pbuf++);    else if (*pbuf < 0.1)      printf(" % -6.2g", *pbuf++);    else      printf(" % -6.3g", *pbuf++);    if ((offset + n + 1) % width == 0)    {      printf("\n");      if (((offset + n) / width + 1) % height == 0)	printf("\n");    }  }} /* end of display_block() */void basic_show(message_t message)/********************************/{  MINT		block_size, ndim, xdim, ydim, zdim;  MINT		values_transferred, ntotal_values, current_block_size;  MINT		display_width, display_height;  MFLOAT	*pbuf;  message_t	msg;  Rd_from_music(msg, sizeof(msg));  ndim = msg[0].i;  xdim = msg[1].i;  ydim = msg[2].i;  zdim = msg[3].i;  block_size = msg[4].i;  display_width = msg[2].i;	/* size of y dimension */  display_height = msg[1].i;	/* size of x dimension */  /*===== allocate temporary buffer =====*/  pbuf = (MFLOAT*)malloc(BUF_SIZE * sizeof(MFLOAT));  if (pbuf == NULL)  {    msg[0].i = ERR_NOMEM;    Wr_to_music(msg, sizeof(msg));		/* tell Music */    return;  }  msg[0].i = ERR_NOERROR;  Wr_to_music(msg, sizeof(msg));		/* tell Music */  /*===== upload and display matrix =====*/  printf(INDENT);  printf("Object dimensions: %ldx%ldx%ld\n\n", xdim, ydim, zdim);  ntotal_values = xdim * ydim * zdim;  values_transferred = 0;  while (values_transferred < ntotal_values)  {    if (BUF_SIZE > block_size - values_transferred % block_size)      current_block_size = block_size - values_transferred%block_size;    else      current_block_size = BUF_SIZE;    Rd_from_music(pbuf, current_block_size * sizeof(MFLOAT));    display_block(pbuf, values_transferred, current_block_size,		  display_width, display_height);    values_transferred += current_block_size;  } /* end while () */  printf("\n");  free(pbuf);} /* end of basic_show() */static void init_nbasic(void)/***************************/{#ifdef __MHOST__  if (MDISPLAY_get_numboards() > 0)    MDISPLAY_init(0,VIO_LOWRES+VIO_OUT_TRUECOLOR,VIDEO_X,VIDEO_Y);#endif   MCALL(init_musicside());  WAIT_FCT();} /* end of init_musicside() */int main (int argc, char *argv[])/*******************************/#define FILE_LIST_MAX	100#define TEMP_NAME1	"xq253341"#define TEMP_NAME2	"xq045298"{  int		i, nfiles;  char		*file_list[FILE_LIST_MAX];  FILE		*msystems = NULL;  int		sflag = FALSE;  int		success = FALSE;#if defined(sun) && defined(__MHOST__)  int		local_link_cnf;  FILE		*fptmp;#endif  nfiles = 0;  for (i = 1; i < argc; i++)  {    if (strncmp(argv[i], "-s", 2) != 0)    {						/* basic file name */      if (nfiles < FILE_LIST_MAX)	file_list[nfiles++] = argv[i];    }    else    {						/* -s option */      sflag = TRUE;#if defined(sun) && defined(__MHOST__)      if (msystems == NULL) msystems = fopen(TEMP_NAME1, "w");#endif      if (argv[i][2] != 0)      {						/* host name */	if (msystems != NULL)	  fprintf(msystems, "%s", argv[i]+2);      }      else if (++i < argc)      {						/* host name */	if (msystems != NULL)	  fprintf(msystems, "%s", argv[i]);      }      if (++i < argc)      {						/* link number */	if (msystems != NULL)	  fprintf(msystems, " %s\n", argv[i]);      }    }  }#if defined(sun) && defined(__MHOST__)  local_link_cnf = FALSE;  if (sflag && msystems != NULL)  {    fclose(msystems);    rename("link.cnf", TEMP_NAME2);    rename(TEMP_NAME1, "link.cnf");  }  else  {    fptmp = fopen("link.cnf", "r");    if (fptmp != NULL)      fclose(fptmp);    else    {      system("muquery 2>/dev/null|grep 'free *$'|sort +2 -o link.cnf");      local_link_cnf = TRUE;    }  }#else  if (sflag)    printf("Warning: -s option ignored\n");#endif    if (INIT_MUSIC())		/* initialize MUSIC */    if (BOOT_DSPs(LOD_NAME))	/* boot and load dsps */      success = TRUE;#if defined(sun) && defined(__MHOST__)  if (local_link_cnf)    remove("link.cnf");  else if (sflag && msystems != NULL)  {    remove("link.cnf");    if (rename(TEMP_NAME2, "link.cnf") != 0)      remove("link.cnf");  }#endif  if (!success) return EXIT_FAILURE;  init_nbasic();		/* initialize neuro-simulator */  basic(nfiles, file_list);	/* call basic interpreter */    EXIT_MUSIC();  fflush(stdout);  return EXIT_SUCCESS;} /* main */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -