// 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; }
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); } } }
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; }
LaunchCommandActuator::~LaunchCommandActuator() { FreeArgv(fArgv); }
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"); }
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"); }
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"); }
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"); }