📄 util.c
字号:
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <stdarg.h>#include <ctype.h>#include "clustalw.h"extern char **seq_array;extern sint *seqlen_array;extern char **names,**titles;extern sint *output_index;extern sint *seq_weight;extern double **tmat;/** ckalloc()** Tries to allocate "bytes" bytes of memory. Exits program if failed.* Return value:* Generic pointer to the newly allocated memory.*/void *ckalloc(size_t bytes){ register void *ret; if( (ret = calloc(bytes, sizeof(char))) == NULL)/* if( (ret = malloc(bytes)) == NULL)*/ fatal("Out of memory\n"); else return ret; return ret; }/** ckrealloc()** Tries to reallocate "bytes" bytes of memory. Exits program if failed.* Return value:* Generic pointer to the re-allocated memory.*/void *ckrealloc(void *ptr, size_t bytes){ register void *ret=NULL; if (ptr == NULL) fatal("Bad call to ckrealloc\n"); else if( (ret = realloc(ptr, bytes)) == NULL) fatal("Out of memory\n"); else return ret; return ret; }/** ckfree()** Tries to free memory allocated by ckalloc.* Return value:* None.*/void *ckfree(void *ptr){ if (ptr == NULL) warning("Bad call to ckfree\n"); else { free(ptr); ptr = NULL; } return ptr;}/** rtrim()** Removes trailing blanks from a string** Return values:* Pointer to the processed string*/char * rtrim(char *str){ register int p; p = strlen(str) - 1; while ( isspace(str[p]) ) p--; str[p + 1] = EOS; return str;}/** blank_to_()** Replace blanks in a string with underscores** Also replaces , ; : ( or ) with _** Return value:* Pointer to the processed string*/char * blank_to_(char *str){ int i,p; p = strlen(str) - 1; for(i=0;i<=p;i++) if( (str[i]==' ') || (str[i]==';') || (str[i]==',') || (str[i]=='(') || (str[i]==')') || (str[i]==':') ) str[i] = '_'; return str;}/** upstr()** Converts string str to uppercase.* Return values:* Pointer to the converted string.*/char * upstr(char *str){ register char *s = str; while( (*s = toupper(*s)) ) s++; return str;}/** lowstr()** Converts string str to lower case.* Return values:* Pointer to the converted string.*/char * lowstr(char *str){ register char *s = str; while( (*s = tolower(*s)) ) s++; return str;}void getstr(char *instr,char *outstr){ fprintf(stdout,"%s: ",instr); gets(outstr);}double getreal(char *instr,double minx,double maxx,double def){ int status; float ret; char line[MAXLINE]; while(TRUE) { fprintf(stdout,"%s (%.1f-%.1f) [%.1f]: ",instr,minx,maxx,def); gets(line); status=sscanf(line,"%f",&ret); if(status == EOF) return def; if(ret>maxx) { fprintf(stdout,"ERROR: Max. value=%.1f\n\n",maxx); continue; } if(ret<minx) { fprintf(stdout,"ERROR: Min. value=%.1f\n\n",minx); continue; } break; } return (double)ret;}int getint(char *instr,int minx,int maxx, int def){ int ret,status; char line[MAXLINE]; while(TRUE) { fprintf(stdout,"%s (%d..%d) [%d]: ", instr,(pint)minx,(pint)maxx,(pint)def); gets(line); status=sscanf(line,"%d",&ret); if(status == EOF) return def; if(ret>maxx) { fprintf(stdout,"ERROR: Max. value=%d\n\n",(pint)maxx); continue; } if(ret<minx) { fprintf(stdout,"ERROR: Min. value=%d\n\n",(pint)minx); continue; } break; } return ret;}void do_system(void){ char line[MAXLINE]; getstr("\n\nEnter system command",line); if(*line != EOS) system(line); fprintf(stdout,"\n\n");}Boolean linetype(char *line,char *code){ return( strncmp(line,code,strlen(code)) == 0 );}Boolean keyword(char *line,char *code){ int i; char key[MAXLINE]; for(i=0;!isspace(line[i]) && line[i]!=EOS;i++) key[i]=line[i]; key[i]=EOS; return( strcmp(key,code) == 0 );}Boolean blankline(char *line){ int i; for(i=0;line[i]!='\n' && line[i]!=EOS;i++) { if( isdigit(line[i]) || isspace(line[i]) || (line[i] == '*') || (line[i] == ':') || (line[i] == '.')) ; else return FALSE; } return TRUE;}void get_path(char *str,char *path){ register int i; strcpy(path,str); for(i=strlen(path)-1;i>-1;--i) { if(str[i]==DIRDELIM) { i = -1; break; } if(str[i]=='.') break; } if(i<0) strcat(path,"."); else path[i+1]=EOS;}void alloc_aln(sint nseqs){ sint i,j; seqlen_array = (sint *)ckalloc( (nseqs+1) * sizeof (sint)); seq_array = (char **)ckalloc( (nseqs + 1) * sizeof (char *) ); for(i=0;i<nseqs+1;i++) seq_array[i]=NULL; names = (char **)ckalloc( (nseqs+1) * sizeof (char *) ); for(i=1;i<=nseqs;i++) names[i] = (char *)ckalloc((MAXNAMES+1) * sizeof (char)); titles = (char **)ckalloc( (nseqs+1) * sizeof (char *) ); for(i=1;i<=nseqs;i++) titles[i] = (char *)ckalloc((MAXTITLES+1) * sizeof (char)); output_index = (sint *)ckalloc( (nseqs+1) * sizeof (sint)); tmat = (double **) ckalloc( (nseqs+1) * sizeof (double *) ); for(i=1;i<=nseqs;i++) tmat[i] = (double *)ckalloc( (nseqs+1) * sizeof (double) ); for(i=1;i<=nseqs;i++) for(j=1;j<=nseqs;j++) tmat[i][j]=0.0; seq_weight = (sint *)ckalloc( (nseqs+1) * sizeof (sint)); for(i=1;i<=nseqs;i++) seq_weight[i]=100;}void realloc_aln(sint first_seq,sint nseqs){ sint i,j; seqlen_array = (sint *)ckrealloc(seqlen_array, (first_seq+nseqs+1) * sizeof (sint)); seq_array = (char **)ckrealloc(seq_array, (first_seq+nseqs+1) * sizeof (char *) ); for(i=first_seq;i<first_seq+nseqs+1;i++) seq_array[i]=NULL; names = (char **)ckrealloc(names, (first_seq+nseqs+1) * sizeof (char *) ); for(i=first_seq;i<first_seq+nseqs;i++) names[i] = (char *)ckalloc((MAXNAMES+1) * sizeof (char)); titles = (char **)ckrealloc(titles, (first_seq+nseqs+1) * sizeof (char *) ); for(i=first_seq;i<first_seq+nseqs;i++) titles[i] = (char *)ckalloc((MAXTITLES+1) * sizeof (char)); output_index = (sint *)ckrealloc(output_index, (first_seq+nseqs+1) * sizeof (sint)); seq_weight = (sint *)ckrealloc(seq_weight, (first_seq+nseqs+1) * sizeof (sint)); for(i=first_seq;i<first_seq+nseqs;i++) seq_weight[i]=100; tmat = (double **) ckrealloc(tmat, (first_seq+nseqs+1) * sizeof (double *) ); for(i=1;i<first_seq;i++) tmat[i] = (double *)ckrealloc(tmat[i], (first_seq+nseqs+1) * sizeof (double) ); for(i=first_seq;i<first_seq+nseqs;i++) tmat[i] = (double *)ckalloc( (first_seq+nseqs+1) * sizeof (double) ); for(i=1;i<first_seq;i++) for(j=first_seq;j<first_seq+nseqs;j++) { tmat[i][j]=0.0; tmat[j][i]=0.0; }}void free_aln(sint nseqs){ sint i; if(nseqs<=0) return; seqlen_array = ckfree(seqlen_array); for(i=1;i<=nseqs;i++) seq_array[i] = ckfree(seq_array[i]); seq_array = ckfree(seq_array); for(i=1;i<=nseqs;i++) names[i] = ckfree(names[i]); names = ckfree(names); for(i=1;i<=nseqs;i++) titles[i] = ckfree(titles[i]); titles = ckfree(titles); output_index = ckfree(output_index); seq_weight = ckfree(seq_weight); for(i=1;i<=nseqs;i++) tmat[i] = ckfree(tmat[i]); tmat = ckfree(tmat);}void alloc_seq(sint seq_no,sint length){ seq_array[seq_no] = (char *)ckalloc((length+2) * sizeof (char));}void realloc_seq(sint seq_no,sint length){ seq_array[seq_no] = (char *)realloc(seq_array[seq_no], (length+2) * sizeof (char));}void free_seq(sint seq_no){ seq_array[seq_no]=ckfree(seq_array[seq_no]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -