示例#1
0
// factory function
CommandActuator*
CreateCommandActuator(const char* command)
{
	CommandActuator* act = NULL;
	int32 argc;
	char** argv = ParseArgvFromString(command, argc);
	if (command[0] == '*') {
		if (argc > 0) {
			char* c = argv[0] + 1;
			if (strcmp(c, "InsertString") == 0)
				act = new KeyStrokeSequenceCommandActuator(argc, argv);
			else if (strcmp(c, "MoveMouse") == 0)
				act = new MoveMouseByCommandActuator(argc, argv);
			else if (strcmp(c, "MoveMouseTo") == 0)
				act = new MoveMouseToCommandActuator(argc, argv);
			else if (strcmp(c, "MouseButton") == 0)
				act = new MouseButtonCommandActuator(argc, argv);
			else if (strcmp(c, "LaunchHandler") == 0)
				act = new MIMEHandlerCommandActuator(argc, argv);
			else if (strcmp(c, "Multi") == 0)
				act = new MultiCommandActuator(argc, argv);
			else if (strcmp(c, "MouseDown") == 0)
				act = new MouseDownCommandActuator(argc, argv);
			else if (strcmp(c, "MouseUp") == 0)
				act = new MouseUpCommandActuator(argc, argv);
			else if (strcmp(c, "SendMessage") == 0)
				act = new SendMessageCommandActuator(argc, argv);
			else
				act = new BeepCommandActuator(argc, argv);
		}
	} else
		act = new LaunchCommandActuator(argc, argv);

	FreeArgv(argv);
	return act;
}
bool
ShortcutsSpec::_AttemptTabCompletion()
{
	bool ret = false;

	int32 argc;
	char** argv = ParseArgvFromString(fCommand, argc);
	if (argc > 0) {
		// Try to complete the path partially expressed in the last argument!
		char* arg = argv[argc - 1];
		char* fileFragment = strrchr(arg, '/');
		if (fileFragment) {
			const char* directoryName = (fileFragment == arg) ? "/" : arg;
			*fileFragment = '\0';
			fileFragment++;
			int fragLen = strlen(fileFragment);

			BDirectory dir(directoryName);
			if (dir.InitCheck() == B_NO_ERROR) {
				BEntry nextEnt;
				BPath nextPath;
				BList matchList;
				int maxEntryLen = 0;

				// Read in all the files in the directory whose names start
				// with our fragment.
				while (dir.GetNextEntry(&nextEnt) == B_NO_ERROR) {
					if (nextEnt.GetPath(&nextPath) == B_NO_ERROR) {
						char* filePath = strrchr(nextPath.Path(), '/') + 1;
						if (strncmp(filePath, fileFragment, fragLen) == 0) {
							int len = strlen(filePath);
							if (len > maxEntryLen)
								maxEntryLen = len;
							char* newStr = new char[len + 1];
							strcpy(newStr, filePath);
							matchList.AddItem(newStr);
						}
					}
				}

				// Now slowly extend our keyword to its full length, counting
				// numbers of matches at each step. If the match list length
				// is 1, we can use that whole entry. If it's greater than one
				// , we can use just the match length.
				int matchLen = matchList.CountItems();
				if (matchLen > 0) {
					int i;
					BString result(fileFragment);
					for (i = fragLen; i < maxEntryLen; i++) {
						// See if all the matching entries have the same letter
						// in the next position... if so, we can go farther.
						char commonLetter = '\0';
						for (int j = 0; j < matchLen; j++) {
							char nextLetter = GetLetterAt(
								(char*)matchList.ItemAt(j), i);
							if (commonLetter == '\0')
								commonLetter = nextLetter;

							if ((commonLetter != '\0')
								&& (commonLetter != nextLetter)) {
								commonLetter = '\0';// failed;
								beep();
								break;
							}
						}
						if (commonLetter == '\0')
							break;
						else
							result.Append(commonLetter, 1);
					}

					// Free all the strings we allocated
					for (int k = 0; k < matchLen; k++)
						delete [] ((char*)matchList.ItemAt(k));

					DoStandardEscapes(result);

					BString wholeLine;
					for (int l = 0; l < argc - 1; l++) {
						wholeLine += argv[l];
						wholeLine += " ";
					}

					BString file(directoryName);
					DoStandardEscapes(file);

					if (directoryName[strlen(directoryName) - 1] != '/')
						file += "/";

					file += result;

					// Remove any trailing slash...
					const char* fileStr = file.String();
					if (fileStr[strlen(fileStr)-1] == '/')
						file.RemoveLast("/");

					// And re-append it iff the file is a dir.
					BDirectory testFileAsDir(file.String());
					if ((strcmp(file.String(), "/") != 0)
						&& (testFileAsDir.InitCheck() == B_NO_ERROR))
						file.Append("/");

					wholeLine += file;

					SetCommand(wholeLine.String());
					ret = true;
				}
			}
			*(fileFragment - 1) = '/';
		}
	}
	FreeArgv(argv);
	return ret;
}
示例#3
0
文件: shell.c 项目: dellagustin/mp31
void Shell(COMMAND commands[],char *help[])
{
	char cmdline[STRING],argv[MAXCMD],argp[MAXCMD];
	
	int i,opcja,n=0,j,ok,len,count=0,itmp;
	
	while(commands[n].command!=NULL) n++;
	
	for( ; ; )
	{					/* Interactive mode */
		fprintf(stdout,"[%d]MP> ",count); fflush(stdout);
		argv[0]=argp[0]=0; cmdline[0]=0;
		
		if(!fgets(cmdline,sizeof(cmdline)-1,stdin))
		{
			fprintf(stderr,"Read error ! [%s]\n",cmdline);
			return;
		}
		
		i=0;
		while(cmdline[i] && isspace(cmdline[i])) i++;
		(void)sscanf(cmdline+i,"%s",argv);
		
		len=strlen(argv);
		if(len==0) continue;
		i+=len;
		while(cmdline[i] && isspace(cmdline[i])) i++;
		(void)sscanf(cmdline+i,"%[^\n]\n",argp);
		
		AppendHistory(count,argv,argp); count++;
		
		if(strcmp(argv,"history")==0)
		{
			if(strlen(argp)>0)
			{
				itmp=atoi(argp);
				ok=0;
				for(i=0 ; i<CountHist ; i++)
				{
					if(HistTable[i]->count==itmp)
					{
						ok=1;
						strcpy(argv,HistTable[i]->napis);
						strcpy(argp,HistTable[i]->opt);
						fprintf(stdout,"[%d] (HISTORY [%d]) MP> %s %s\n",
							count-1,itmp,argv,argp);
						break;
					}
				}
					
				if(!ok)
				{
					fprintf(stderr,"No such number\n");
					continue;
				}
			}
			else
			{
				fprintf(stdout,"\t\t<<< HISTORY >>>\n");
				
				for(i=0 ; i<CountHist ; i++)
				{
					fprintf(stdout,"[%d] %s %s\n",HistTable[i]->count,
						HistTable[i]->napis,
						HistTable[i]->opt);
				
					if(((i+1)%20)==0) 
						pause();
				}
				
				fprintf(stdout,"\n");
				continue;
			}
		}
		
		if(strcmp(argv,"man")==0)
		{
			fprintf(stdout,"\n\t\t<<< BUILT-IN COMMANDS >>\n"
				"exit        \t\t- leave shell\n"
				"ls          \t\t- current directory listing\n"
				"history [nr]\t\t- display entered commands or execute [nr] if given\n"
				"batch       \t\t- run commands from file\n"
				"!comd       \t\t- run a shell command comd\n"
				"man         \t\t- display all available help\n"
				"sys comd    \t\t- run shell command comd in script\n");
			
			fprintf(stdout,"<<< NEXT - ENTER q - QUIT >>> ");
		
			if(getchar()!='q')
			{
				if(help!=NULL)
					PrintAllHelp(commands,help,n); 
			}
			else 
				(void)getchar();
			
			continue;
		}
		
		if(strcmp(argv,"help")==0 || strcmp(argv,"?")==0 || strcmp(argv,"h")==0)
		{
			ok=0;
			
			if(strlen(argp)>0)
			{
				if(strcmp(argp,"help")==0 || strcmp(argp,"?")==0)
				{
					ok=1;
					fprintf(stderr,"help [arg] or ? [arg] -- info about the arg command\n");
				} 
				else if(strcmp(argp,"batch")==0)
				{
					ok=1;
					fprintf(stderr,"batch file -- run script file\n");
				}	
				else if(strcmp(argp,"sys")==0)
				{
					ok=1;
					fprintf(stderr,"sys comd -- run shell command comd (from a script only)\n");
				}
				else if(strcmp(argp,"ls")==0)
				{
					ok=1;
					fprintf(stderr,"ls adir -- listing of directory adir, regexp allowed\n"); 
				}
				else if(strcmp(argp,"history")==0)
				{
					ok=1;
					fprintf(stderr,"history [nr] -- list entered commands\n"	
						"\t\t or if [nr] given - run command No [nr]\n");
				}
				else
					for(j=0 ; j<n ; j++)
					if(strcmp(commands[j].command,argp)==0)
					{
						ok=1;
						fprintf(stdout,"%-10s - ",commands[j].command);
						if(help!=NULL)
							fprintf(stdout,"%s ",help[j]);
						fprintf(stdout,"\n");
						break;
					}
					if(!ok) 
						fprintf(stdout,"Unknown command : %s\n",argp);
			}
			else
			{ fprintf(stdout,"%s\n",firsthelp); }
			continue;
		}
		
		if(strcmp(argv,"exit")==0) {
			DeleteHistory();
			if(prn==1)
				fprintf(stdout,"<<< LEAVING MP SHELL >>>\n");
			Quit("");
			break;
		}
		
		if(strcmp(argv,"ls")==0)
		{
			ls(argp);
			continue;
		}
		
		if(strcmp(argv,"batch")==0)
		{
			char *newargv[MAXCMD];
			int i,argc;
			
			for(i=0 ; i<MAXCMD ; i++)
				newargv[i]=NULL;
			
			StrToArgv(argp,newargv,&argc);
			if(Batch(commands,newargv[0],newargv)==-1)
				fprintf(stderr,"Missing file %s !\n",argp);
			FreeArgv(newargv,argc);
			continue;
		}
		
		if(strcmp(argv,"!")==0)
		{
			if(system(argp)==-1)
				fprintf(stderr,"Error executing system command !\n");
			continue;
		}
		
		if(argv[0]=='!')
		{
			argv[0]=' ';
			(void)strcat(argv," "); (void)strcat(argv,argp);
			if(system(argv)==-1)
				fprintf(stderr,"Error executing system command !\n");
			continue;
		}
		
		opcja=-1;				/* Opcje zewnetrzne */
		
		for(i=0 ; i<n ; i++)
			if(strcmp(commands[i].command,argv)==0)
			{
				opcja=i;
				(*commands[i].func)(argp);
				break;
			}
			
			if(opcja==-1)
			{
				char name[STRING],*newargv[MAXCMD],buffor[STRING];
				int argc,i;
				
				for(i=0 ; i<MAXCMD ; i++)
					newargv[i]=NULL;
				
				sprintf(buffor,"%s %s",argv,argp);
				StrToArgv(buffor,newargv,&argc);
				
				if(Batch(commands,newargv[0],newargv)==-1)
				{	 /* Polecenia w biezacym katologu */
					int index=0,ok=0;
					
					for( ; ; index++)
					{
						if(makePathName(name,index)==NULL)
							break;
						
						strcat(name,newargv[0]);
						if(Batch(commands,name,newargv)!=-1) {
							ok=1;
							break;
						}
					}

					if(ok==0) 
						fprintf(stderr,"MP: Unknown command %s or bad script path %s\n",
						argv,BatchPath);
				}
				
				FreeArgv(newargv,argc);
			}    
      }
}
示例#4
0
文件: shell.c 项目: dellagustin/mp31
int Batch(COMMAND commands[],char *filename,char *argv[])
{
	FILE *plik;
	char *cmdline,*comand,*opt;
	int i,k=0,ok,n=0,count=0;
	
	if((cmdline=(char *)malloc(MAXCMD*sizeof(char)))==NULL)
		return -1;
	
	if((comand=(char *)malloc(MAXCMD*sizeof(char)))==NULL)
	{
		free((void *)cmdline);
		return -1;
	}
	
	if((opt=(char *)malloc(MAXCMD*sizeof(char)))==NULL)
	{
		free((void *)cmdline);
		free((void *)comand);

		return -1;
	}
	
	if((plik=fopen(filename,"rt"))==NULL)
		return -1;
	
	if(prn==1)
		fprintf(stdout,"\t\t\t<<< START OF SCRIPT %s >>>\n",filename);
	
	while(commands[n].command!=NULL) 
		n++; /* Liczba dostepnych opcji */

	while(!feof(plik))
    {
		comand[0]='\0'; opt[0]='\0';
		fscanf(plik,"%[^\n]\n",cmdline);
		ok=i=0;
		
		while(cmdline[i] && isspace(cmdline[i]))
			i++;
		
		if(cmdline[i]=='#')				/* Komentarz */
			continue;
		
		sscanf(cmdline+i,"%s",comand);
		
		i+=strlen(comand);
		
		while(cmdline[i] && isspace(cmdline[i]))
			i++;

		sscanf(cmdline+i,"%[^\n]\n",opt);
		
		if(strcmp(comand,"end")==0) 			/* Zakonczenie skryptu */
		{
			if(prn==1)
				fprintf(stdout,"[%d] BATCH(%s)>end\n",count,filename);
			break;
		}
		
		if(strcmp(comand,"batch")==0)
		{
			if(strcmp(opt,filename)!=0)			/* Zapobiega rekurencji (prymitywnie) */
			{
				char **newargv,*buffor;
				int argc,i;
				
				if((newargv=(char **)malloc(MAXCMD*sizeof(char *)))==NULL)
					continue;
				
				if((buffor=(char *)malloc(MAXCMD*sizeof(char)))==NULL) {
					free((void *)newargv);
					continue;
				}
				
				if(prn==1)
					fprintf(stdout,"[%d] BATCH(%s)>batch %s\n",count,filename,opt);
				
				for(i=0 ; i<MAXCMD ; i++)
					newargv[i]=NULL;
				
				Replace(argv,opt,buffor);                     /* Rozwniecie parametrow */
				StrToArgv(buffor,newargv,&argc);
				if(Batch(commands,newargv[0],newargv)==-1)
					fprintf(stderr,"File %s is missing !\n",opt);
				FreeArgv(newargv,argc); free((void *)buffor); free((void *)newargv);
				count++;
				continue;
			}
		}
		
		if(strcmp(comand,"sys")==0)
		{
			if(prn==1)
				fprintf(stdout,"[%d] BATCH(%s)>!%s\n",count,filename,opt);
			if(system(opt)==-1)
				fprintf(stderr,"Shell command not executed properly !\n");
			count++;
			continue;
		}
		
		for(i=0 ; i<n ; i++)
		{
			/* Nieznane komedy sa ignorowane */
			if(strcmp(commands[i].command,comand)==0)
			{
				char buffor[STRING];
				
				ok=1;
				Replace(argv,opt,buffor);                   /* Rozwiniecie parametrow */
				if(prn==1)
					fprintf(stdout,"[%d] BATCH(%s)> %s %s\n",count,filename,comand,buffor);
				(*commands[i].func)(buffor);
				count++;
				break;
			}
		}
		
		if(ok!=1) 
		{
			char name[STRING],*newargv[MAXCMD],buffor[STRING],buff[STRING];
			int i,argc;
			
			for(i=0 ; i<MAXCMD ; i++)
				newargv[i]=NULL;
			
			Replace(argv,opt,buff);                       /* Rozwiniecie parametrow */
			
			sprintf(buffor,"%s %s",comand,buff);
			StrToArgv(buffor,newargv,&argc);
			
			if(Batch(commands,newargv[0],newargv)==-1)
			{	
				/* W biezacym katalogu */
				int index=0,ok=0;
				
				for( ; ; index++)
				{
					if(makePathName(name,index)==NULL)
						break;
					
					strcat(name,newargv[0]);

					if(Batch(commands,name,newargv)!=-1)
					{
						ok=1;
						break;
					}
					
					if(ok==0)
						k++;
				}
			}
			
			FreeArgv(newargv,argc);
		}
    }
    
	fclose(plik);
	
	free((void *)cmdline); 
	free((void *)comand); 
	free((void *)opt);
	
	if(prn==1)
		fprintf(stdout,"\n%4d ignored command(s)\n\t\t\t<<< END OF SCRIPT %s >>>\n",
		k,filename);
	
	return 0;  
}
示例#5
0
LaunchCommandActuator::~LaunchCommandActuator()
{
	FreeArgv(fArgv);
}
示例#6
0
void WigToGif(char *opt)		/* Generacja mapy Wignera w postaci GIF'a */
 {
   char *argv[STRING],filename[STRING]="wigner.gif",title[STRING]="",
        avrfilename[STRING],bmpfile[STRING]="wigner.bin";
   int i,j,argc,x=DimBase,y=DimBase/2,opcja,paleta=COLOR,MaxYpoz,
       MaxXpoz,avropt=OFF,TmpDimRoz,IncludeSignal=OFF,
       BitMap=NOGENBITMAP,MakeDyspers=OFF,Laplas=0,reverse=0;
   float GammaCorect=1.0F,SplitFactor=1.0F,Crop=1.0F;
   PSBOOK *tmpbook;

   LogarytmStat=0;
   StrToArgv(opt,argv,&argc);
   opterr=optind=0; sp=1;
   while((opcja=Getopt(argc,argv,"O:X:Y:LF:cgxa:sS:bB:dk:l:Ri"))!=EOF)
     switch(opcja) {
     case 'R':
       reverse=1;
       break;
     case 'l':
       Laplas=atoi(optarg);
       break;
     case 'k':
       Crop=atof(optarg);
       break;
     case 'B':
       (void)strcpy(bmpfile,optarg);
     case 'b':
       BitMap=GENBITMAP;
       break;
     case 'S':
       SplitFactor=atof(optarg);
       break;
     case 's':
       IncludeSignal=ON;
       break;
     case 'a':
       (void)strcpy(avrfilename,optarg);
       avropt=ON;
       break;
     case 'x':
       (void)strcpy(title,Comment);
       break;
     case 'c':
       paleta=COLOR;
       break;
     case 'g':
       paleta=GRAY;
       break;
     case 'i':
       paleta=INVERT_GRAY;
       break;
     case 'O':
       (void)strcpy(filename,optarg);
       break;
     case 'F':
       GammaCorect=atof(optarg);
       break;
     case 'X':
       x=atoi(optarg);
       break;
     case 'Y':
       y=atoi(optarg);
       break;
     case 'L':
       LogarytmStat=1;
       break;
     case 'd':
       MakeDyspers=ON;
       break;
     default:
       fprintf(stderr,"Nieznana opcja !\n");
       FreeArgv(argv,argc);
       return;
     }

   FreeArgv(argv,argc);
   if(avropt==OFF)
     if(Compute==OFF)
       {
	 fprintf(stderr,"Nie wykonane obliczenia !\n");
	 return;
       }
       
  psbook=NULL;
  if(avropt==OFF)
   if((psbook=(PSBOOK *)malloc((unsigned)dimroz*sizeof(PSBOOK)))==NULL)
    {
      fprintf(stderr,"Brak pamieci (Wig2Gif) !\n");
      return;
    }

   MaxXpoz=x+100;
   MaxYpoz=450+((y>256) ? y-256 : 0);
  
   if(BitMap==NOGENBITMAP)
     if(OpenVirtualScreen(MaxXpoz,MaxYpoz)==-1)
       {
         fprintf(stderr,"Brak pamieci w OpenVirtualScreen (Wig2Gif) !\n");
         if(psbook!=NULL) 
          free((void *)psbook);
         return;
       }

   if(avropt==OFF)
    for(i=0 ; i<dimroz; i++)  /* Konwersja na format funkcji MakeWignerMap */
     {
       psbook[i].s=book[i].param[0];
       psbook[i].t=book[i].param[1];
       psbook[i].w=book[i].waga;
       psbook[i].f=book[i].param[2];
     }

   if((ImageTab=MakeTableUChar(x,y))==NULL)	/* Obraz mapy Wignera */
     {
       fprintf(stderr,"No memory (Wig2Gif) !\n");
       CloseVirtualScreen();
       if(psbook!=NULL) free((void *)psbook);
       return;
     }

   if(prn==1)
     fprintf(stdout,"\n<<< GENERATING TIME-FREQUENCY MAP >>>\n");

   if(avropt==OFF)
     MakeWignerMap(psbook,dimroz,x,y,DimBase,
                   ImageTab,GammaCorect,SplitFactor,bmpfile,
		   BitMap,Crop);
   else
     {
       if((tmpbook=ReadAllAtoms(avrfilename,&TmpDimRoz))==NULL)
	{
	  fprintf(stderr,"Error (Wig2Gif,ReadAllAtoms) !\n");
	  CloseVirtualScreen();
	  if(psbook!=NULL) free((void *)psbook);
	  return;
	}
       if(MakeDyspers==OFF) 
          MakeWignerMap(tmpbook,TmpDimRoz,x,y,DimBase,ImageTab,
                        GammaCorect,SplitFactor,bmpfile,BitMap,Crop);
       else
	 MakeDyspersWignerMap(tmpbook,TmpDimRoz,x,y,DimBase,ImageTab,
                              GammaCorect,SplitFactor,bmpfile,BitMap,Crop);                 
       free((void *)tmpbook);
     }

   if(BitMap==NOGENBITMAP)
    {
     for(i=0 ; i<x ; i++)		/* Rysowanie mapy Wignara na ekranie wirtualnym */
       for(j=0 ; j<y ; j++)
         if(ImageTab[i][j]==0)
           PutPixel(POZX(i),POZY(j),1);
         else
           PutPixel(POZX(i),POZY(j),ImageTab[i][j]);

     if(avropt==OFF || IncludeSignal==ON)
       SignalToVirtualScreen(MaxYpoz,x,reverse);	      /* Rysowanie sygnalu */
     MakeImageFrame(title,MaxXpoz,MaxYpoz,x,y,
                    ((avropt==OFF || IncludeSignal==ON) ? OFF : ON),
                    SplitFactor); /* Osnowa rysunku */
					      /* Generacja gif'a */
     (void)ImageToGif(VirtualScreen,MaxXpoz,MaxYpoz,filename,paleta,Laplas);
     CloseVirtualScreen();
   }
   
   if(psbook!=NULL) 
     free((void *)psbook);
   FreeTableUChar(ImageTab,x);   /* Zwolnienie pamieci jest bezpieczne */
  
   if(prn==1)
     fprintf(stdout,"<<< KONIEC >>>\n");
 }
示例#7
0
文件: mceeg.c 项目: dellagustin/mp31
void MakeCanalEEG(char *opt) /* Analiza EEG (niezalezne warunki brzegowe) */
 {
   static char Common[STRING],*argv[MAXARGS],filename[STRING],
	       Para[STRING],bookname[STRING],tmpstr[STRING];
   int argc,opcja,offset=0,ok=0,IleSegmentow,Nkan=1,i,
       ok2=0,maxseg=-1,k,ReinicRandomDic=OFF,ascii=OFF;
       
   Common[0]='\0'; (void)strcpy(bookname,"-a"); /* Domyslna nazwa ksiazki */
   StrToArgv(opt,argv,&argc);
   opterr=optind=0; sp=1;
   while((opcja=Getopt(argc,argv,"O:#:c:h:s:e:f:I:M:Rt:"))!=EOF)
    switch(opcja) {	/* Podstawowe opcje sa powtarzane */
       case 'R':
                ReinicRandomDic=ON;
                break;
       case 'O':
		strcpy(filename,optarg);
		if(CzyJestTakiPlik(filename)==-1) {
		  FreeArgv(argv,argc);
		  return;
		}
		sprintf(tmpstr,"-O%s ",optarg);
		strcat(Common,tmpstr);
		ok=1;
		break;
       case 'c':
		sprintf(tmpstr,"-c%d ",(ChannelNumber=atoi(optarg)-1)+1);
		strcat(Common,tmpstr);
		break;
       case 'h':
		sprintf(tmpstr,"-h%d ",ChannelMaxNum=atoi(optarg));
		strcat(Common,tmpstr);
		Nkan=atoi(optarg);
		break;
       case 's':
		sprintf(tmpstr,"-s%s ",optarg);
		strcat(Common,tmpstr);
		break;
       case 'e':
		sprintf(tmpstr,"-e%d ",atoi(optarg));
		strcat(Common,tmpstr);
		break;
       case 'f':
		sprintf(tmpstr,"-f%d ",atoi(optarg));
		strcat(Common,tmpstr);
		break;
       case '#':
		offset=atoi(optarg);
		break;
       case 'I':			/* Zmiana nazwy ksiazki */
		sprintf(bookname,"-A %s",optarg);
		break;
       case 'M':
		maxseg=atoi(optarg);	/* Maksymalny numer segmentu */
		break;
       case 't':
                if(strcmp(optarg,"ascii")==0)
                  ascii=ON;
                else if(strcmp(optarg,"binary")==0)
                  ascii=OFF;
                else fprintf(stderr,"Opcja -t %s zignorowana !\n",optarg);  
                break;  
       default:
		fputs("Niezana opcja !\n\r",stderr);
		FreeArgv(argv,argc);
		return;
     }

  FreeArgv(argv,argc);
  if(ok==0)
    {
      fputs("Nie podano nazwy pliku !\n\r",stderr);
      return;
    }

  setChannel=0;
  IleSegmentow=(int)(FileSizeChar(filename)/
		    ((long)Nkan*(long)sizeof(short)*(long)DimBase));

  if(maxseg>0)
    IleSegmentow=((IleSegmentow<maxseg) ? IleSegmentow : maxseg);

  if(IleSegmentow<3)
   {
     fputs("Za malo segmentow do analizy (>3) !\n\r",stderr);
     return;
   }
				/* Utworzenie ksiazki z calego kanalu */
  if(prn==1)
    fprintf(stdout,"\t\t<<<     ANALIZA KANALU EEG     >>>\n"
		   "\t\t   (%d SEGMENTOW %d DO ANALIZY)\n",IleSegmentow,IleSegmentow-offset);
  if(prn==1)
    fprintf(stdout,"\n\t<<< ANALIZA 1 REKORDU >>>\n");

  Reset(NULL);			/* Domyslnie lewym warunkiem brzegowym beda 0 */
  LOAD_SIGNAL(offset,-C);	/* Lodowanie sygnalu */
  LOAD_SIGNAL(offset+1,-R);     /* Lodowanie prawego warunku brzegowego */
  REINIC();			/* Reinicjacja slownika */
  AnalizaMP(NULL);			/* Analiza sygnalu */
  file_offset=offset;		/* Ustawiamy offset pliku (ladowanie przekreca) */
 
  if(ascii==OFF)
    SaveAllNewAtoms(bookname);	/* Zapis ksiazki na dysku */
  else {
    TranslateAtoms(DimBase*offset);
    AscSaveAllAtoms(bookname);   
  }  

  for(i=offset+1,k=1 ; i<IleSegmentow-1 ; i++,k++)
   {
     if(prn==1)
       fprintf(stdout,"\t<<< ANALIZA %d REKORDU >>>\n",i+1);

     Reset(NULL);
     LOAD_SIGNAL(i-1,-L);
     LOAD_SIGNAL(i,-C);
     LOAD_SIGNAL(i+1,-R);
     REINIC();
     AnalizaMP(NULL);
     file_offset=i;		/* Ladowanie zmienia file_offset */
    
     if(ascii==OFF)
       SaveAllNewAtoms(bookname);	/* Zapis ksiazki na dysku */
     else {
       TranslateAtoms(DimBase*i);
       AscSaveAllAtoms(bookname);   
     }  
   }

  if(prn==1)
    fprintf(stdout,"\t<<< ANALIZA OSTATNIEGO REKORDU >>>\n");

  Reset(NULL);                  /* Domyslnie prawy warunek brzegowy jest 0 */
  LOAD_SIGNAL(IleSegmentow-2,-L);
  LOAD_SIGNAL(IleSegmentow-1,-C);
  REINIC();
  AnalizaMP(NULL);
  file_offset=i;
  
  if(ascii==OFF)
    SaveAllNewAtoms(bookname);	/* Zapis ksiazki na dysku */
  else {
    TranslateAtoms(DimBase*i);
    AscSaveAllAtoms(bookname);   
  }  

  setChannel=1;
  if(prn==1)
    fprintf(stdout,"<<< KONIEC ANALIZY KANALU EEG >>>\n");
 }
示例#8
0
文件: mceeg.c 项目: dellagustin/mp31
void FloatCanalEEG(char *opt)	/* Analiza kanalu z symetrycznymi warunkami brzegowymi */
 {
   static char Common[STRING],*argv[MAXARGS],filename[STRING],
	       Para[STRING],bookname[STRING],tmpstr[STRING];
   int argc,opcja,offset=0,ok=0,IleSegmentow,Nkan=1,i,ok2=0,maxseg=-1,
       k,j,shift=0,ReinicRandomDic=OFF,ascii=OFF;

   Common[0]='\0'; strcpy(bookname,"-a"); /* Domyslna nazwa ksiazki */
   StrToArgv(opt,argv,&argc);
   opterr=optind=0; sp=1;
   while((opcja=Getopt(argc,argv,"O:#:c:t:h:I:M:s:R"))!=EOF)
    switch(opcja) {
       case 'R':
               ReinicRandomDic=ON;
               break;  
       case 'O':
		(void)strcpy(filename,optarg);
		if(CzyJestTakiPlik(filename)==-1)
		 {
		   FreeArgv(argv,argc);
		   return;
		 }
		sprintf(tmpstr,"-O%s ",optarg);
		(void)strcat(Common,tmpstr);
		ok=1;
		break;
       case 'c':
		sprintf(tmpstr,"-c%d ",(ChannelNumber=atoi(optarg)-1)+1);
		(void)strcat(Common,tmpstr);
		break;
       case 's':
		sprintf(tmpstr,"-s%s ",optarg);
		(void)strcat(Common,tmpstr);
		shift=atoi(optarg);
		break;
       case 'h':
		sprintf(tmpstr,"-h%d ",ChannelMaxNum=atoi(optarg));
		(void)strcat(Common,tmpstr);
		Nkan=atoi(optarg);
		break;
       case '#':
		offset=atoi(optarg);
		break;
       case 'I':			/* Zmiana nazwy ksiazki */
		sprintf(bookname,"-A %s",optarg);
		break;
       case 'M':
		maxseg=atoi(optarg);	/* Maksymalny numer segmentu */
		break;
       case 't':
	        if(strcmp(optarg,"ascii")==0)
	          ascii=ON;
	        else if(strcmp(optarg,"binary")==0)
                  ascii=OFF;
                else fprintf(stderr,"Opcja -t %s zignorowana !\n",optarg);  
                break;  
       default:
		fputs("Niezana opcja !\n\r",stderr);
		FreeArgv(argv,argc);
		return;
     }

  FreeArgv(argv,argc);
  if(ok==0)
    {
      fputs("Nie podano nazwy pliku !\n\r",stderr);
      return;
    }
  setChannel=0;
		/* Okreslenie liczby segmentow (FLOAT) */
  IleSegmentow=(int)(FileSizeChar(filename)/
		    ((long)Nkan*(long)sizeof(float)*(long)(DimBase+shift)));
  if(maxseg>0)
    IleSegmentow=MIN(IleSegmentow,maxseg);

  if(prn==1)
    fprintf(stdout,"\t\t<<<     ANALIZA KANALU EEG (FLOATROTT WITH SYM)    >>>\n"
		   "\t\t           (%d SEGMENTOW %d DO ANALIZY)\n",
		   IleSegmentow,IleSegmentow-offset);

  for(i=offset,k=1 ; i<IleSegmentow ; i++,k++)
   {
     const int itmp=2*(int)DimBase;

     if(prn==1)
       fprintf(stdout,"\t<<< ANALIZA %d REKORDU >>>\n",i+1);

     Reset(NULL);                	/* Zera wszedzie */
     LOAD_FLOAT_SIGNAL(i,-C);	/* Ladujemy segment centralny */
     for(j=0 ; j<(int)DimBase ; j++) /* Asymetryczne warunki brzegowe */
      {
	sygnal[(int)DimBase-1-j]=-sygnal[j];
	sygnal[itmp+j]=-sygnal[itmp-1-j];
      }
      
     REINIC(); 
     AnalizaMP(NULL);
     file_offset=i;		/* Ladowanie zmienia file_offset */
     if(ascii==OFF)
       SaveAllNewAtoms(bookname);	/* Zapis ksiazki na dysku */
     else {
       TranslateAtoms(DimBase*i);
       AscSaveAllAtoms(bookname);   
     }  
   }

  setChannel=1;
  if(prn==1)
    fprintf(stdout,"<<< KONIEC ANALIZY KANALU EEG (FLOATROTT WITH SYM) >>>\n");
 }
示例#9
0
文件: mceeg.c 项目: dellagustin/mp31
void FloatRottCanalEEG(char *opt) /* Obliczenia kanalu EEG z dynamicznymi warunkami brzegowymi */
 {
   static char Common[STRING],*argv[MAXARGS],filename[STRING],
	       Para[STRING],bookname[STRING],tmpstr[STRING];
   int argc,opcja,offset=0,ok=0,IleSegmentow,Nkan=1,i,ok2=0,maxseg=-1,
       k,j,itmp,itmp2,shift=0,ReinicRandomDic=OFF,ascii=OFF;

   Common[0]='\0'; (void)strcpy(bookname,"-a"); /* Domyslna nazwa ksiazki */
   StrToArgv(opt,argv,&argc);
   opterr=optind=0; sp=1;
   while((opcja=Getopt(argc,argv,"O:#:c:h:I:M:s:Rt:"))!=EOF)
    switch(opcja) {	/* Podstawowe opcje sa powtarzane */
       case 'R':
               ReinicRandomDic=ON;
               break; 
       case 'O':
		(void)strcpy(filename,optarg);
		if(CzyJestTakiPlik(filename)==-1)
		 {
		   FreeArgv(argv,argc);
		   return;
		 }
		sprintf(tmpstr,"-O%s ",optarg);
		(void)strcat(Common,tmpstr);
		ok=1;
		break;
       case 'c':
		sprintf(tmpstr,"-c%d ",(ChannelNumber=atoi(optarg)-1)+1);
		(void)strcat(Common,tmpstr);
		break;
       case 's':
		sprintf(tmpstr,"-s%s ",optarg);
		(void)strcat(Common,tmpstr);
		shift=atoi(optarg);
		break;
       case 'h':
		sprintf(tmpstr,"-h%d ",ChannelMaxNum=atoi(optarg));
		(void)strcat(Common,tmpstr);
		Nkan=atoi(optarg);
		break;
       case '#':
		offset=atoi(optarg);
		break;
       case 'I':			/* Zmiana nazwy ksiazki */
		sprintf(bookname,"-A %s",optarg);
		break;
       case 'M':
		maxseg=atoi(optarg);	/* Maksymalny numer segmentu */
		break;
       case 't':
                if(strcmp(optarg,"ascii")==0)
                  ascii=ON;
                else if(strcmp(optarg,"binary")==0)
                  ascii=OFF;
                else fprintf(stderr,"Opcja -t %s zignorowana !\n",optarg);  
                break;  
       default:
		fputs("Niezana opcja !\n\r",stderr);
		FreeArgv(argv,argc);
		return;
     }

  FreeArgv(argv,argc);
  if(ok==0)
    {
      fputs("Nie podano nazwy pliku !\n\r",stderr);
      return;
    }
  setChannel=0;
		/* Okreslenie liczby segmentow (FLOAT) */
  IleSegmentow=(int)(FileSizeChar(filename)/
		    ((long)Nkan*(long)sizeof(float)*(long)(DimBase+shift)));

  if(maxseg>0)
    IleSegmentow=MIN(IleSegmentow,maxseg);

  if(IleSegmentow<3)
   {
     fputs("Za malo segmentow do analizy (>3) !\n\r",stderr);
     return;
   }
				/* Utworzenie ksiazki z calego kanalu */
  if(prn==1)
    fprintf(stdout,"\t\t<<<     ANALIZA KANALU EEG (FLOATROTT)    >>>\n"
		   "\t\t        (%d SEGMENTOW %d DO ANALIZY)\n",
		   IleSegmentow,IleSegmentow-offset);
  if(prn==1)
    fprintf(stdout,"\n\t<<< ANALIZA 1 REKORDU >>>\n");

  Reset(NULL);			/* Domyslnie lewym warunkiem brzegowym beda 0 */
  LOAD_FLOAT_SIGNAL(offset,-C);	/* Lodowanie sygnalu */
  LOAD_FLOAT_SIGNAL(offset+1,-R); /* Lodowanie prawego warunku brzegowego */
  REINIC();
  AnalizaMP(NULL);			/* Analiza sygnalu */
  file_offset=offset;		/* Ustawiamy offset pliku (ladowanie przekreca) */
  if(ascii==OFF)
     SaveAllNewAtoms(bookname);	/* Zapis ksiazki na dysku */
  else
   {
     TranslateAtoms(DimBase*offset);
     AscSaveAllAtoms(bookname);   
   }  

  for(i=offset+1,k=1 ; i<IleSegmentow-1 ; i++,k++)
   {
     if(prn==1)
       fprintf(stdout,"\t<<< ANALIZA %d REKORDU >>>\n",i+1);

     for(j=0 ; j<DimBase; j++)		/* Przesuniecie ramki sygnalu po */
       {                                /* kanale (dynamiczny warunek brzegowy) */
	 itmp=DimBase+j;
	 sygnal[j]=sygnal[itmp];
	 sygnal[itmp]=sygnal[DimBase+itmp];
       }

     LOAD_FLOAT_SIGNAL(i,-C);
     REINIC();
     AnalizaMP(NULL);
     file_offset=i;		/* Ladowanie zmienia file_offset */
     
     if(ascii==OFF)
       SaveAllNewAtoms(bookname);
     else {
       TranslateAtoms(DimBase*i);
       AscSaveAllAtoms(bookname);
     }     
   }

  if(prn==1)
    fprintf(stdout,"\t<<< ANALIZA OSTATNIEGO REKORDU >>>\n");

  for(j=0 ; j<DimBase; j++) /* Przesuniecie z ustawienie prawego */
   {				 /* warunku brzegowego */
     itmp=DimBase+j; itmp2=itmp+DimBase;
     sygnal[j]=sygnal[itmp];
     sygnal[itmp]=sygnal[itmp2];
     sygnal[itmp2]=0.0F;	/* Prawy warunek brzegowy jest rowny 0 */
   }

  REINIC();
  AnalizaMP(NULL);
  file_offset=IleSegmentow-1;
  if(ascii==OFF)
    SaveAllNewAtoms(bookname);
  else {
    TranslateAtoms(DimBase*(IleSegmentow-1));
    AscSaveAllAtoms(bookname); 
  }  
  
  setChannel=1;
  if(prn==1)
    fprintf(stdout,"<<< KONIEC ANALIZY KANALU EEG (FLOATROTT) >>>\n");
 }