www.pudn.com > TP333.3_S886.rar > ALLMAIN.C


//******************************************** 
//文件名:ALLMAIN.C 
//功能:1. 调用显示汉字函数 
//      2. 调用字符处理函数 
//      3. 对扇区数据进行十六进制读、字符读、 
//         备份、拷贝、搬移、写入、清零操作 
//******************************************** 
#include                            //1. 
#include                          //2. 
#include                             //3. 
#include                             //4. 
#include                             //5. 
#include                              //6. 
#include                             //7. 
#include                                //8. 
#include                            //9. 
int outhz(int,int,char *,int);                //10.对调用函数的声明 
void finame(int,int);                         //11.对调用函数的声明 
void main(int argc,char *argv[])              //12. 
{                                             //13. 
   char h[512];                               //14. 
   char sh[13];                               //15. 
   FILE *fp;                                  //16. 
   int i,c;                                   //17. 
   int cyl,head,sector;                       //18. 
   int cyl1,head1,sector1;                    //19. 
   extern char gsh[16];                       //20.声明数组是外部变量 
   int gdriver=DETECT,gmode;                  //21. 
   registerbgidriver(EGAVGA_driver);          //22. 
   initgraph(&gdriver,&gmode,"");             //23. 
   setbkcolor(0);                             //24. 
   cleardevice();                             //25. 
                                              //26. 
   if(argc==1)                                //27.命令行参数等于1时 
   {                                          //28. 
     outhz(0,20,"输入[HALLSE /?]获得帮助",7); //29. 
     outhz(0,40,"按一个键退出",7);            //30. 
     getch();                                 //31. 
     closegraph();                            //32.关闭图形方式 
     exit(0);                                 //33. 
   }                                          //34. 
   strcpy(sh,argv[1]);                        //35. 
   if((strcmp(sh,"/?")==0)&&argc==2)          //36.比较开关字符串 
   {                                          //37. 
     outhz(0,20,"程序HALLSE.EXE"              //38. 
     "使用方法:",7);                         //39. 
     outhz(0,40,"1. [HALLSE /?]"              //40. 
     "获得帮助",7);                           //41. 
     outhz(0,60,"2. [HALLSE /RH]"             //42. 
     "显示十六进制数据",7);                   //43. 
     outhz(0,80,"3. [HALLSE /RC]"             //44. 
     "显示字符",7);                           //45. 
     outhz(0,100,"4. [HALLSE /B]"             //46. 
     "备份扇区数据",7);                       //47. 
     outhz(0,120,"5. [HALLSE /C]"             //48. 
     "拷贝扇区数据",7);                       //49. 
     outhz(0,140,"6. [HALLSE /M]"             //50. 
     "搬移扇区数据",7);                       //51. 
     outhz(0,160,"7. [HALLSE /W]"             //52. 
     "文件数据写入扇区",7);                   //53. 
     outhz(0,180,"8. [HALLSE /CLE]"           //54. 
     "扇区清零",7);                           //55. 
     outhz(0,200,"按一个键退出",7);           //56. 
     getch();                                 //57. 
     closegraph();                            //58. 
     exit(0);                                 //59. 
   }                                          //60. 
                                              //61. 
   if((strcmp(sh,"/rh")==0)                   //62.比较开关字符串 
     ||(strcmp(sh,"/RH")==0)&&argc==2)        //63. 
   {                                          //64. 
     outhz(0,20,"输入柱面号:",7);            //65. 
     finame(100,20);                          //66. 
     cyl=atoi(gsh);                           //67.将字符串转为int型的值 
     setviewport(0,20,400,40,0);              //68. 
     outhz(0,20,"输入磁头号:",7);            //69. 
     finame(100,40);                          //70. 
     head=atoi(gsh);                          //71. 
     setviewport(0,40,400,60,0);              //72. 
     outhz(0,20,"输入扇区号:",7);            //73. 
     finame(100,60);                          //74. 
     sector=atoi(gsh);                        //75. 
     closegraph();                            //76. 
     biosdisk(0x02,0x80,head,cyl,sector,1,h); //77. 
     fp=tmpfile();                            //78. 
     for(i=0;i<=511;i++)                      //79. 
       fputc(h[i],fp);                        //80. 
     rewind(fp);                              //81. 
     for(i=1;i<=512;i++)                      //82. 
     {                                        //83. 
       c=fgetc(fp);                           //84. 
       printf("%2x",c);                       //85. 
       if(i%32==0)                            //86. 
       printf("\n");                          //87. 
     }                                        //88. 
     fclose(fp);                              //89. 
     printf("\n");                            //90. 
   }                                          //91. 
                                              //92. 
   if((strcmp(sh,"/rc")==0)                   //93. 
     ||(strcmp(sh,"/RC")==0)&&argc==2)        //94. 
   {                                          //95. 
     outhz(0,20,"输入柱面号:",7);            //96. 
     finame(100,20);                          //97. 
     cyl=atoi(gsh);                           //98. 
     setviewport(0,20,400,40,0);              //99. 
     outhz(0,20,"输入磁头号:",7);            //100. 
     finame(100,40);                          //101. 
     head=atoi(gsh);                          //102. 
     setviewport(0,40,400,60,0);              //103. 
     outhz(0,20,"输入扇区号:",7);            //104. 
     finame(100,60);                          //105. 
     sector=atoi(gsh);                        //106. 
     closegraph();                            //107. 
     biosdisk(0x02,0x80,head,cyl,sector,1,h); //108. 
     for(i=1;i<=512;i++)                      //109. 
     {                                        //110. 
       printf("%c ",h[i-1]);                  //111. 
       if(i%32==0)                            //112. 
       printf("\n");                          //113. 
     }                                        //114. 
     printf("\n");                            //115. 
   }                                          //116. 
                                              //117. 
   if((strcmp(sh,"/b")==0)                    //118. 
     ||(strcmp(sh,"/B")==0)&&argc==2)         //119. 
   {                                          //120. 
     outhz(0,20,"输入柱面号:",7);            //121. 
     finame(100,20);                          //122. 
     cyl=atoi(gsh);                           //123. 
     setviewport(0,20,400,40,0);              //124. 
     outhz(0,20,"输入磁头号:",7);            //125. 
     finame(100,40);                          //126. 
     head=atoi(gsh);                          //127. 
     setviewport(0,40,400,60,0);              //128. 
     outhz(0,20,"输入扇区号:",7);            //129. 
     finame(100,60);                          //130. 
     sector=atoi(gsh);                        //131. 
     setviewport(0,60,400,80,0);              //132. 
     outhz(0,20,"输入文件名:",7);            //133. 
     finame(100,80);                          //134. 
     fp=fopen(gsh,"wb");                      //135. 
     biosdisk(0x02,0x80,head,cyl,sector,1,h); //136. 
     for(i=0;i<=511;i++)                      //137. 
       fwrite(&h[i],1,1,fp);                  //138. 
     fclose(fp);                              //139. 
     closegraph();                            //140. 
   }                                          //141. 
                                              //142. 
   if((strcmp(sh,"/c")==0)                    //143. 
     ||(strcmp(sh,"/C")==0)&&argc==2)         //144. 
   {                                          //145. 
     outhz(0,20,"输入源柱面号:",7);          //146. 
     finame(120,20);                          //147. 
     cyl=atoi(gsh);                           //148. 
     setviewport(0,20,400,40,0);              //149. 
     outhz(0,20,"输入源磁头号:",7);          //150. 
     finame(120,40);                          //151. 
     head=atoi(gsh);                          //152. 
     setviewport(0,40,400,60,0);              //153. 
     outhz(0,20,"输入源扇区号:",7);          //154. 
     finame(120,60);                          //155. 
     sector=atoi(gsh);                        //156. 
     biosdisk(0x02,0x80,head,cyl,sector,1,h); //157. 
                                              //158. 
     setviewport(0,60,400,80,0);              //159. 
     outhz(0,20,"输入目的柱面号:",7);        //160. 
     finame(140,80);                          //161. 
     cyl1=atoi(gsh);                          //162. 
     setviewport(0,80,400,100,0);             //163. 
     outhz(0,20,"输入目的磁头号:",7);        //164. 
     finame(140,100);                         //165. 
     head1=atoi(gsh);                         //166. 
     setviewport(0,100,400,120,0);            //167. 
     outhz(0,20,"输入目的扇区号:",7);        //168. 
     finame(140,120);                         //169. 
     sector1=atoi(gsh);                       //170. 
     biosdisk(0x03,0x80,head1,cyl1,           //171. 
     sector1,1,h);                            //172. 
     closegraph();                            //173. 
   }                                          //174. 
                                              //175. 
   if((strcmp(sh,"/m")==0)                    //176. 
     ||(strcmp(sh,"/M")==0)&&argc==2)         //177. 
   {                                          //178. 
     outhz(0,20,"输入源柱面号:",7);          //179. 
     finame(120,20);                          //180. 
     cyl=atoi(gsh);                           //181. 
     setviewport(0,20,400,40,0);              //182. 
     outhz(0,20,"输入源磁头号:",7);          //183. 
     finame(120,40);                          //184. 
     head=atoi(gsh);                          //185. 
     setviewport(0,40,400,60,0);              //186. 
     outhz(0,20,"输入源扇区号:",7);          //187. 
     finame(120,60);                          //188. 
     sector=atoi(gsh);                        //189. 
     biosdisk(0x02,0x80,head,cyl,sector,1,h); //190. 
                                              //191. 
     setviewport(0,60,400,80,0);              //192. 
     outhz(0,20,"输入目的柱面号:",7);        //193. 
     finame(140,80);                          //194. 
     cyl1=atoi(gsh);                          //195. 
     setviewport(0,80,400,100,0);             //196. 
     outhz(0,20,"输入目的磁头号:",7);        //197. 
     finame(140,100);                         //198. 
     head1=atoi(gsh);                         //199. 
     setviewport(0,100,400,120,0);            //200. 
     outhz(0,20,"输入目的扇区号:",7);        //201. 
     finame(140,120);                         //202. 
     sector1=atoi(gsh);                       //203. 
     biosdisk(0x03,0x80,head1,cyl1,           //204. 
     sector1,1,h);                            //205. 
                                              //206. 
     for(i=0;i<=511;i++)                      //207. 
       h[i]=0;                                //208. 
     biosdisk(0x03,0x80,head,cyl,sector,1,h); //209. 
     closegraph();                            //210. 
   }                                          //211. 
                                              //212. 
   if((strcmp(sh,"/w")==0)                    //213. 
     ||(strcmp(sh,"/W")==0)&&argc==2)         //214. 
   {                                          //215. 
     outhz(0,20,"输入文件名:",7);            //216. 
     finame(100,20);                          //217. 
     if((fp=fopen(gsh,"rb"))==NULL)           //218.如果打开文件失败 
     {                                        //219. 
       setviewport(0,20,400,60,0);            //220. 
       outhz(0,20,"打开文件失败!",15);       //221. 
       outhz(0,40,"按一个键退出",15);         //222. 
       getch();                               //223.接收一个字符 
       closegraph();                          //224. 
       exit(0);                               //225. 
     }                                        //226. 
     i=open(gsh,O_CREAT);                     //227. 
     if(filelength(i)!=512)                   //228.若字节数不等于512 
     {                                        //229. 
       close(i);                              //230. 
       setviewport(0,20,400,60,0);            //231. 
       outhz(0,20,"输入的扇区数据文件名"      //232. 
       "错误!",14);                          //233. 
       outhz(0,40,"按一个键退出",14);         //234. 
       getch();                               //235. 
       closegraph();                          //236. 
       exit(0);                               //237. 
     }                                        //238. 
     close(i);                                //239. 
                                              //240. 
     setviewport(0,20,400,40,0);              //241. 
     outhz(0,20,"输入柱面号:",7);            //242. 
     finame(100,40);                          //243. 
     cyl=atoi(gsh);                           //244. 
     setviewport(0,40,400,60,0);              //245. 
     outhz(0,20,"输入磁头号:",7);            //246. 
     finame(100,60);                          //247. 
     head=atoi(gsh);                          //248. 
     setviewport(0,60,400,80,0);              //249. 
     outhz(0,20,"输入扇区号:",7);            //250. 
     finame(100,80);                          //251. 
     sector=atoi(gsh);                        //252. 
     for(i=0;i<=511;i++)                      //253. 
       fread(&h[i],1,1,fp);                   //254. 
     biosdisk(0x03,0x80,head,cyl,sector,1,h); //255. 
     fclose(fp);                              //256. 
     closegraph();                            //257. 
   }                                          //258. 
                                              //259. 
   if((strcmp(sh,"/cle")==0)                  //260. 
     ||(strcmp(sh,"/CLE")==0)&&argc==2)       //261. 
   {                                          //262. 
     outhz(0,20,"输入柱面号:",7);            //263. 
     finame(100,20);                          //264. 
     cyl=atoi(gsh);                           //265. 
     setviewport(0,20,400,40,0);              //266. 
     outhz(0,20,"输入磁头号:",7);            //267. 
     finame(100,40);                          //268. 
     head=atoi(gsh);                          //269. 
     setviewport(0,40,400,60,0);              //270. 
     outhz(0,20,"输入扇区号:",7);            //271. 
     finame(100,60);                          //272. 
     sector=atoi(gsh);                        //273. 
     for(i=0;i<=511;i++)                      //274. 
       h[i]=0;                                //275. 
     biosdisk(0x03,0x80,head,cyl,sector,1,h); //276. 
     closegraph();                            //277. 
   }                                          //278. 
}                                             //279. 
char gsh[16];                                 //280.定义全局数组变量