📄 dna1.cc
字号:
}//-------------------------------------------------------------------//// basefilename //// strip path from filename & returns file name w/o path ////-------------------------------------------------------------------//char* basefilename(char* pathname){ int k; int slashpos=0; char temp[FILENAMELENGTH]; strcpy(temp,pathname); for(k=0;k<(int)strlen(temp);k++) // find last slash or colon if((temp[k]=='/')||(temp[k]=='\\')||(temp[k]==':')) slashpos=k+1; return(temp+slashpos);}//-------------------------------------------------------------------//// printstatus ////-------------------------------------------------------------------//void printstatus(int state){ state=state;}//--------------------------------------------------------------------------//// make_2d_alias //// usage: uint** array; //// uint* array_1d; //// array_1d = (uint*)malloc(x*y*sizeof(uint)); //// array = make_2d_alias(array_1d,x,y); // Dont mult.by sizeof uint//// ... // compiler knows its size //// free(array); //// free(array_1d); //// Address array using array[y][x] or array_1d[index] //// Last parameter is first index = slowest changing index //// Create a 2d alias from an array so the same data can be accessed using //// either [][] or [] notation. This permits interfacing with libraries //// requiring either type. ////--------------------------------------------------------------------------//int **make_2d_alias(int *b, int x, int y){ int k; int **result; result = (int**)malloc(y*sizeof(int *)); for(k=0;k<y;k++) result[k] = b + k*x; return result;}uint **make_2d_alias(uint *b, int x, int y){ int k; uint **result; result = (uint**)malloc(y*sizeof(uint *)); for(k=0;k<y;k++) result[k] = b + k*x; return result;} uchar **make_2d_alias(uchar *b, int x, int y){ int k; uchar **result; result = (uchar**)malloc(y*sizeof(uchar *)); for(k=0;k<y;k++) result[k] = b + k*x; return result;} double **make_2d_alias(double *b, int x, int y){ int k; double **result; result = (double**)malloc(y*sizeof(double *)); for(k=0;k<y;k++) result[k] = b + k*x; return result;} //--------------------------------------------------------------------------//// strupr ////--------------------------------------------------------------------------//char *strupr(char *s){ int k; for(k=0;k<(int)strlen(s);k++) s[k]=toupper(s[k]); return s;}//--------------------------------------------------------------------------//// strlwr ////--------------------------------------------------------------------------//char *strlwr(char *s){ int k; for(k=0;k<(int)strlen(s);k++) s[k]=tolower(s[k]); return s;} //--------------------------------------------------------------------------//// filesize ////--------------------------------------------------------------------------//int filesize(char *filename){ struct stat dstatus; stat(filename, &dstatus); return dstatus.st_size;} //-------------------------------------------------------------------//// savesettings ////-------------------------------------------------------------------//void savesettings(void){ FILE* fp; int k; char tempstring[FILENAMELENGTH]=""; sprintf(tempstring,"%s/dna.ini",g.homedir); if((fp=fopen(tempstring, "wt"))!=NULL ) { fprintf(fp,"version %s\n",g.version); fprintf(fp,"rows %d\n",g.rows); fprintf(fp,"cols %d\n",g.cols); fprintf(fp,"xsize %d\n",g.main_xsize); fprintf(fp,"ysize %d\n",g.main_ysize); fprintf(fp,"print_command %s\n",g.printer_command); fprintf(fp,"print_name %s\n",g.printer_name); fprintf(fp,"print_file %s\n",g.printer_file); fprintf(fp,"signif_digits %d\n",g.signif); fprintf(fp,"save_format %d\n",g.save_format); fprintf(fp,"sequence_mode %d\n",g.sequence_mode); fprintf(fp,"nbuttons %d\n",g.nbuttons); for(k=0;k<g.nbuttons;k++) fprintf(fp,"button %s %s:%s\n", g.button[k]->label, g.button[k]->activate_cmd, g.button[k]->deactivate_cmd); }else fprintf(stderr,"Can't save settings\n"); fclose(fp);} //-------------------------------------------------------------------//// readsettings ////-------------------------------------------------------------------//void readsettings(void){ FILE* fp; int gotconfig=1; int space=0, ret=0, but=0,k; char name[FILENAMELENGTH]=""; char value[FILENAMELENGTH]=""; char initversion[80]=""; char tempstring[1024]; int colon=0; sprintf(tempstring, "%s/dna.ini", g.homedir); if((fp=fopen(tempstring,"rb"))==NULL ) gotconfig=0; else fclose(fp); initversion[0]=0; if(gotconfig) { fp=fopen(tempstring,"rt"); while(!feof(fp)) { fgets(name, 80, fp); if(feof(fp))break; space = strcspn(name," "); // Position of 1st space ret = (int)index(name, '\n') - (int)name; // Position of final \n name[space]=0; name[ret]=0; strcpy(value, 1+name+space); if(strcmp(name,"version")==SAME) strcpy(initversion,value); if(strcmp(name,"button")==SAME) { if(but>=g.nbuttons) fprintf(stderr,"tnimage.ini: Error: button count mismatch, ignoring user button\n"); else { space = strcspn(value," "); // Position of 1st space colon = strcspn(value,":"); // Position of 1st colon strncpy(g.button[but]->label, value, space); g.button[but]->label[space]=0; strncpy(g.button[but]->activate_cmd, value+space+1, colon-space-1); g.button[but]->activate_cmd[colon-space-1]=0; if(colon<(int)strlen(value)) strncpy(g.button[but]->deactivate_cmd, value+colon+1, COMMAND_LENGTH); else strcpy(g.button[but]->deactivate_cmd, "null"); but++; } } if(strcmp(name,"nbuttons")==SAME) { g.nbuttons = max(0,atoi(value)); g.button = new ButtonStruct*[g.nbuttons]; for(k=0;k<g.nbuttons;k++) { g.button[k] = new ButtonStruct; g.button[k]->button = 0; g.button[k]->state = OFF; g.button[k]->widget = 0; g.button[k]->label = new char[LABEL_LENGTH]; g.button[k]->activate_cmd = new char[COMMAND_LENGTH]; g.button[k]->deactivate_cmd = new char[COMMAND_LENGTH]; } } if(strcmp(name,"rows")==SAME) g.rows=atoi(value); if(strcmp(name,"cols")==SAME) g.cols=atoi(value); if(strcmp(name,"xsize")==SAME) g.main_xsize=atoi(value); if(strcmp(name,"ysize")==SAME) g.main_ysize=atoi(value); g.xsize = g.main_xsize - 154 - 16; g.ysize = g.main_ysize - 24 - 16; if(strcmp(name,"print_command")==SAME) strcpy(g.printer_command,value); if(strcmp(name,"print_name")==SAME) strcpy(g.printer_name,value); if(strcmp(name,"print_file")==SAME) strcpy(g.printer_file,value); if(strcmp(name,"signif_digits")==SAME) g.signif=atoi(value); if(strcmp(name,"save_format")==SAME) g.save_format=atoi(value); if(strcmp(name,"sequence_mode")==SAME) g.sequence_mode=atoi(value); } fclose(fp); } if(!gotconfig) { const int NBUTTONS=24; g.nbuttons=NBUTTONS; char buttonname[NBUTTONS][20]= { "Open", "Save", "Config", "Close", "Compare", "Align", "Reverse", "Translate", "Edit", "Statistics", "Print", "Comments", "Offset#1", "Offset#2", "Prev.frame", "Next攆rame", "Up", "Down", "Left", "Right", "Undo", "Select", "DNA", "Quit", }; //// Non-null commands here will be activated when button is pushed. char activatecmd[NBUTTONS][20] = { "read", "save", "config", "close", "compare", "align", "reverse", "translate", "edit", "statistics", "print", "comments", "offset1", "offset2", "prevframe", "nextframe", "up", "down", "left", "right", "undo", "select", "dna", "quit", }; //// Non-null commands here will cause button to stay pushed, and //// the command activated when button is un-pushed. char deactivatecmd[NBUTTONS][20] = { "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", }; g.button = new ButtonStruct*[NBUTTONS]; for(k=0;k<NBUTTONS;k++) { g.button[k] = new ButtonStruct; g.button[k]->button = 0; g.button[k]->state = OFF; g.button[k]->widget = 0; g.button[k]->label = new char[LABEL_LENGTH]; g.button[k]->activate_cmd = new char[COMMAND_LENGTH]; g.button[k]->deactivate_cmd = new char[COMMAND_LENGTH]; strcpy(g.button[k]->label, buttonname[k]); strcpy(g.button[k]->activate_cmd, activatecmd[k]); strcpy(g.button[k]->deactivate_cmd, deactivatecmd[k]); } }} //-------------------------------------------------------------------//// abouttheprogram ////-------------------------------------------------------------------//void abouttheprogram(void){ char *tempstring = new char[1024]; sprintf(tempstring, "dna version %s\nCompiled on %s %s\nCopyright (C) 1999 by T. Nelson", g.version, __DATE__, __TIME__); message(tempstring); delete[] tempstring;}//-------------------------------------------------------------------//// help ////-------------------------------------------------------------------//void help(int helptopic){ char *tempstring = new char[1024]; message("The programmer forgot to add \na help system!!!",ERROR); delete[] tempstring;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -