/*砍掉字串右邊空格*/ void CUT_RIGHT_SPACE(char *s) { int i,j; i=strlen(s)-1; for(j=i;j>-1;j--) if (s[j]!=' ') break; s[j+1]=0; }/*顯示一個字串*/ void DISPLAY(char *s) { union REGS regs; int color,x,y; x=wherex(); y=wherey(); color=16*bjys+qjys; while(*s) { if(x>80) break; regs.h.ah=9; regs.h.al=*s; regs.h.bh=0; regs.h.bl=color; regs.x.cx=1; /*顯示的次數,不改變游標位置*/ int86(16,®s,®s); x++; if(x>80) { x=1; y++; if(y>25) y=25; } gotoxy(x,y); s++; } } /*定義螢幕顏色*/ void COLOR(int ForeColor,int BackColor) { if(ForeColor<0||ForeColor>15) return; if(BackColor<0||BackColor>15) return; qjys=ForeColor; bjys=BackColor; } /*顯示提示視窗*/ void quit_YesNo(char *s1,char *s2) { char buffer[2000],jx; gettext(30,8,76,16,buffer); textbackground(3); CLSXY(8,32,9,30,6); CLSXY(4,30,8,30,6); COLOR(15,4); gotoxy(35,10); DISPLAY(s1); gotoxy(35,12); DISPLAY(s2); gotoxy(35+strlen(s2)+1,12); jx=getch(); puttext(30,8,76,16,buffer); if (jx=='n'||jx=='N') return; textbackground(0); textcolor(15); clrscr(); CURSOR(ON); exit(0); } /*顯示警告視窗*/ void warn_message(char *s1,char *s2) { char buffer[2000]; gettext(30,8,76,16,buffer); CLSXY(8,32,9,30,6); CLSXY(4,30,8,30,6); COLOR(15,4); gotoxy(35,10); DISPLAY(s1); gotoxy(35,12); DISPLAY(s2); gotoxy(40,13); DISPLAY("按任意鍵繼續..."); getch(); puttext(30,8,76,16,buffer); } /*得到檔案長度*/ long GetFileLength(char *file) { FILE *fp; int i; if ((fp=fopen(file,"rb"))==NULL) { clrscr(); printf("Can't open the file %s .",file); return 0; } i=0; while(!feof(fp)) { i++; fgetc(fp); } fclose(fp); return (i-1); } /*視窗滾屏*/ void WINDOW_ROLL(int y1,int x1,int yl,int xl,int direct) { union REGS regs; int x2,y2; x1--; y1--; x2=x1+xl-1; y2=y1+yl-1; regs.h.ah=5+direct; /*ah=06h 向上滾動當前頁*/ /*ah=07h 向下。。。 */ regs.h.al=1; regs.h.bh=16*pmbj+pmqj; regs.h.ch=y1; /*左上方行*/ regs.h.cl=x1; /*列*/ regs.h.dh=y2; /*右下角行*/ regs.h.dl=x2; /*列*/ int86(16,®s,®s); } /*掃描鍵盤*/ int scan_keyboard(int *m) { union inkey { unsigned char ch[2]; int ii; }cc; while(!bioskey(1)) {;} cc.ii=bioskey(0); *m=cc.ch[1]; return cc.ch[0]; } /*插入字串*/ void INSERT_STRING(char *ds,char *ss,int n) { char s[100]; MID(ds,s,n,-1); ds[n-1]=0; strcat(ds,ss); strcat(ds,s); } void STR_ADD_CHAR(char *s,char ch) { char s1[2]; s1[0]=ch; s1[1]=0; strcat(s,s1); } /*檢測磁碟是否準備就緒*/ int CheckDiskReading(int n) { int result; char buffer[512]; result=biosdisk(4,n,0,0,0,1,buffer); result=result&0x02; if (result!=0x02) return 0; return 1; } /*檢測磁碟是否防寫保護*/ int CheckDiskWriteProf(void) { int result; char buffer[512]; result=biosdisk(5,0,0,0,0,1,buffer); if (result==0x03) return 0; return 1; } /*修改檔案的某一行*/ int ModifyFileLine(char *filename,char *s,int n) { char data[20][80]; int i; FILE *fp; if ((fp=fopen(filename,"r"))==NULL) return 0; i=0; while(READ_STR(data,fp)) i++; fclose(fp); fp=fopen(filename,"w"); strcpy(data[n-1],s); n=i-1; for(i=0;i<=n;i++) WRITE_STR(data,fp); fclose(fp); return 1; } /*成批拷貝檔案*/ int CopyFile(char *sfile,char *dfile,int f2d,int barlong,int height,int x,int y) { int Copyfile(char *sf,char *df); int MakeNdir(char *Dir); char filename[200][13],d[40],s[40],s1[40]; struct ffblk ffblk; int done,i,j,l,len; i=0; done=findfirst(sfile,&ffblk,0); if (!done) strcpy(filename,ffblk.ff_name); while(!done) { done=findnext(&ffblk); if (!done) { i++; strcpy(filename,ffblk.ff_name); } } if (f2d) { Copyfile(sfile,dfile); return 1; } strcpy(s,sfile); l=strlen(sfile); for(j=l-1;j>=0;j--) if (s[j]=='//') { s[j+1]=0; break; } /*拷貝一個檔案*/ int Copyfile(char *sf,char *df) { FILE *in,*out; char ch; in=0; out=0; if ((in=fopen(sf,"rb"))==NULL) exit(0); if ((out=fopen(df,"wb"))==NULL) exit(0); while(!feof(in)) { ch=fgetc(in); if (ferror(in)) return 0; fputc(ch,out); if (ferror(out)) return 0; } fclose(in); fclose(out); return 1; } /*建立目錄*/ int MakeNdir(char *Dir) { int i,l,j; char s[10][40]; j=0; l=strlen(Dir); for(i=0;i<l;i++) if (Dir=='//') { LEFT(s[j],Dir,i); j++; } strcpy(s[j],Dir); for(i=0;i<=j;i++) if (access(s,0)) mkdir(s); return 1; } /*得到目錄*/ int GetDir(char *dirF,char dataK[][14]) { struct ffblk ffblk; int done; int i; i=0; done=findfirst(dirF,&ffblk,FA_DIREC); while(!done) { if (ffblk.ff_attrib==16||ffblk.ff_attrib==17) { strcpy(dataK,ffblk.ff_name); strcat(dataK,"//"); i++; } done=findnext(&ffblk); } return i; } /*得到檔案名稱*/ int GetFile(char *dirF,char dataK[][14]) { struct ffblk ffblk; int done; int i; i=0; done=findfirst(dirF,&ffblk,0); while(!done) { strcpy(dataK,ffblk.ff_name); done=findnext(&ffblk); i++; } return i; } /*任意兩個正整數相加(<80位)*/ /*參數說明:numA,numB分別為加數和被加數,result存放相加後的結果*/ void add(char *numA,char *numB,char *result) { int i,j,a,b,c,jw,Alen,Blen; /*定義變數*/ char num[81]; char numC[81]; /*定義新的字串,長度與numA相同*/ char ch; char s[1]; num[0]=0; numC[0]=0; if (strlen(numA)>=80) return; if (strlen(numB)>=80) return; for(i=0;i<strlen(numA);i++) /*判斷輸入數是否非法*/ if (!isdigit(numA)) return; /*如果非法返回結果為空白*/ for(i=0;i<strlen(numB);i++) if (!isdigit(numB)) return; if (strlen(numA)<strlen(numB)) /*將較大的數放入numA中*/ { strcpy(num,numA); strcpy(numA,numB); strcpy(numB,num); num[0]=0; } Alen=strlen(numA); Blen=strlen(numB); strcpy(numC,numB); for(i=0;i<Alen;i++) numC[Alen-i-1]=numC[Blen-i-1]; for(i=0;i<Alen-Blen;i++) /*在numC中插入n個0,使其長度等於numA*/ numC='0'; jw=0; /*進位*/ for(i=0;i<Alen;i++) { s[0]=numA[Alen-i-1]; s[1]=0; a=atoi(s); s[0]=numC[Alen-i-1]; s[1]=0; b=atoi(s); c=a+b+jw; if (c>=10) { jw=1; c=c-10; } else jw=0; itoa(c,s,10); num=s[0]; } if (jw==1) {num='1';num[i+1]=0;} else num=0; j=strlen(num); for(i=0;i<j/2;i++) { ch=num; num=num[j-i-1]; /*將num反轉*/ num[j-i-1]=ch; } strcpy(result,num); return; /*返回相加結果*/ } /*任意兩個正整數相乘*/ /*參數說明:numA,numB 分別為乘數和被乘數,resultm存放積*/ void mult(char *numA,char *numB,char *resultm) { int i,j,k,l,m,a,b,c,jw,Alen,Blen,f; /*定義變數*/ char resulta[82]; char num[161]; char ch; char s[1]; num[0]=0; f=0; if (strlen(numA)>=80) return; if (strlen(numB)>=80) return; for(i=0;i<strlen(numA);i++) /*判斷輸入數是否非法*/ if (!isdigit(numA)) return; /*如果非法返回結果為空白*/ for(i=0;i<strlen(numB);i++) if (!isdigit(numB)) return; if (strlen(numA)<strlen(numB)) /*將較大的數放入numA中*/ { strcpy(num,numA); strcpy(numA,numB); strcpy(numB,num); num[0]=0; } Alen=strlen(numA); Blen=strlen(numB); strcpy(resultm,"0"); for(i=0;i<Blen;i++) { s[0]=numB[Blen-i-1]; s[1]=0; c=atoi(s); strcpy(resulta,numA); if (c==0) strcpy(resulta,"0"); for(j=0;j<c-1;j++) {add(resulta,numA,resulta);} l=strlen(resulta); for(k=0;k<i;k++) { resulta[l+k]='0'; resulta[l+k+1]=0; } add(resultm,resulta,resultm); } } |