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

📄 convmain.c

📁 卷积程序
💻 C
字号:
/****************************************************************
 *	Convolution program for Monte Carlo simulation of photon
 *	distribution in multilayered turbid media.
 *
 ****/

#include "conv.h"

#define EPS 0.1			/* default relative error in convolution. */

void        ReadMcoFile(InputStruct *, OutStruct *);
void        OutputOrigData(InputStruct *, OutStruct *);
void        OutputConvData(InputStruct *, OutStruct *);
void        ContourOrigData(InputStruct *, OutStruct *);
void        ContourConvData(InputStruct *, OutStruct *);
void        ScanOrigData(InputStruct *, OutStruct *);
void        ScanConvData(InputStruct *, OutStruct *);
void        LaserBeam(BeamStruct *, OutStruct *);
void        ConvResolution(InputStruct *, OutStruct *);
void        ConvError(InputStruct *, OutStruct *);

/****************************************************************
 ****/
void 
ShowMainMenu()
{
  puts("i  = Input filename of mcml output");
  puts("b  = specify laser Beam");
  puts("r  = convolution Resolution. ");
  puts("e  = convolution Error. ");
  puts("oo = Output Original data");
  puts("oc = Output Convolved data");
  puts("co = Contour output of Original data");
  puts("cc = Contour output of Convolved data");
  puts("so = Scanning output of Original data");
  puts("sc = Scanning output of Convolved data");
  puts("q  = Quit");
  puts("* Commands in conv are not case-sensitive");
}

/****************************************************************
 ****/
void 
QuitProgram(InputStruct * In_Ptr, OutStruct * Out_Ptr)
{
  char        ch, cmd_str[STRLEN];

  printf("Do you really want to quit conv (y/n): ");
  gets(cmd_str);
  sscanf(cmd_str, "%c", &ch);
  if (toupper(ch) == 'Y') {	/* really quit. */
    if (Out_Ptr->allocated) {
      FreeOrigData(In_Ptr, Out_Ptr);
      FreeConvData(In_Ptr, Out_Ptr);
    }
    exit(0);
  }
}

/****************************************************************
 ****/
void 
BranchMainCmd1(char *Cmd,	/* Cmd is command char. */
	       InputStruct * In_Ptr, OutStruct * Out_Ptr)
{
  switch (toupper(Cmd[0])) {
    case 'I':ReadMcoFile(In_Ptr, Out_Ptr);
    break;
  case 'B':
    LaserBeam(&In_Ptr->beam, Out_Ptr);
    break;
  case 'R':
    ConvResolution(In_Ptr, Out_Ptr);
    break;
  case 'E':
    ConvError(In_Ptr, Out_Ptr);
    break;
  case 'H':
    ShowMainMenu();
    break;
  case 'Q':
    QuitProgram(In_Ptr, Out_Ptr);
    break;
  default:
    puts("...Wrong command");
  }
}

/****************************************************************
 ****/
void 
BranchMainCmd2(char *Cmd,	/* Cmd is command char. */
	       InputStruct * In_Ptr, OutStruct * Out_Ptr)
{
  switch (toupper(Cmd[0])) {
    case 'O':
    if (toupper(Cmd[1]) == 'O')
      OutputOrigData(In_Ptr, Out_Ptr);
    else if (toupper(Cmd[1]) == 'C')
      OutputConvData(In_Ptr, Out_Ptr);
    break;
  case 'C':
    if (toupper(Cmd[1]) == 'O')
      ContourOrigData(In_Ptr, Out_Ptr);
    else if (toupper(Cmd[1]) == 'C')
      ContourConvData(In_Ptr, Out_Ptr);
    break;
  case 'S':
    if (toupper(Cmd[1]) == 'O')
      ScanOrigData(In_Ptr, Out_Ptr);
    else if (toupper(Cmd[1]) == 'C')
      ScanConvData(In_Ptr, Out_Ptr);
    break;
  default:
    puts("...Wrong command");
  }
}

/****************************************************************
 ****/
void 
BranchMainCmd(char *Cmd)
{				/* Cmd is command char. */
  static InputStruct in_parm;
  static OutStruct out_parm = NULLOUTSTRUCT;
  static char first_time = 1;	/* used to initialize. */

  if (first_time) {
    in_parm.eps = EPS;
    first_time = 0;
  }
  if (strlen(Cmd) == 1)
    BranchMainCmd1(Cmd, &in_parm, &out_parm);
  else if (strlen(Cmd) == 2)
    BranchMainCmd2(Cmd, &in_parm, &out_parm);
  else
    puts("...Wrong command");
}

/****************************************************************
 ****/
int 
main(void)
{
  char        cmd_str[STRLEN];

  ShowVersion();
  do {
    printf("\n> Main menu (h for help) => ");
    do				/* get the command input. */
      gets(cmd_str);
    while (!strlen(cmd_str));
    BranchMainCmd(cmd_str);
  } while (1);
}

⌨️ 快捷键说明

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