⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lt86.c

📁 软件编程入门丛书《C语言程序设计》源代码。
💻 C
字号:
# include "stdio.h"
 #include "ctype.h"
 #include "conio.h"
 #include "string.h"
 #include "dos.h"
 #include "dir.h"
 #define MAXLEN 13	         	/* 文件名总长度为 MAXLEN-1 */
 #define INT geninterrupt	    /* int 中断向量 */
 #define TRUE 1			        /* TRUE==1 */
 #define FALSE 0			   /* FALSE==0 */
 #define F1 0x3b00		       /* F1 标准扫描码 */
 #define F2 0x3c00            /* F2 标准扫描码 */
 #define F4 0x3e00            /* F4 标准扫描码 */
 #define DEL 0x5300		      /* DEL 标准扫描码 */
 #define ENTER 0x000d		  /* 回车符 标准扫描码 */
 #define ESC 0x001b		      /* ESC键 标准扫描码 */
 #define TAB 0x0f09		      /* TAB键 标准扫描码 */
 #define RIGHT 0x4d00	  	  /* RIGHT键 标准扫描码 */
 #define LEFT 0x4b00		  /* LEFT键 标准扫描码 */
 #define UP 0x4800		      /* UP键 标准扫描码 */
 #define DOWN 0x5000		  /* DOWN键 标准扫描码 */
 #define CR printf("\n")	  /* 换行 */
 #define BG textbackground	  /* 背景色宏 */
 #define FC textcolor		  /* 字符色宏 */
 void f_menu(void);		      /* 菜单函数 */
 void f_edit(char *);		  /* 文件编辑函数 */
 void f_rename(char *,char *);	/* 文件改名函数 */
 void f_del(char *);		  /* 文件删除函数 */
 int f_8_3(char *);		      /* 检查文件是否符合DOS 8.3 命名规则 */
 int key(void);
 int getkey(void);           /* 读标准扫描码函数 */
 void f_cls(void);		      /* 清黑屏函数 */
void any_key(int,int,int);	  /* 按任意键返回函数 */
void main(int edit_n,char *edit_c[])   /* 这是一个功能函数主要用来接收用户输入的信息,判断用户需要本程序执行哪些操作 */
 {
  strlwr(edit_c[1]);
  if (edit_n>1) {
     if (!strcmp(edit_c[1],"/r"))
        f_rename(edit_c[2],edit_c[3]); /* 当用户用到参数 r 时,调用 f_rename() 函数 */
     else if (!strcmp(edit_c[1],"/d")) 
 	    f_del(edit_c[2]); /* 当用户用到参数 d 时,调用 f_del() 函数 */
     else printf("无效参数.");
     exit(0);}
  else
     f_menu(); /* 用户在没有加任何参数的情况下,程序进入到菜单程序 */
 }
 void f_menu(void)   /* 菜单函数 */
 { 
  char chofun,filename[MAXLEN];
  int x1=5,y1=5,x2=30,y2=10;
  f_cls();
  window(x1+1,y1-1,x2+1,y2-1);
  BG(YELLOW);
  clrscr();
  window(x1,y1,x2,y2);
  BG(BLUE);
  FC(YELLOW);
  clrscr();
  gotoxy(x1,y1);
  cprintf("请选择:");
  gotoxy(x1,y1-2);
  cprintf("E-->退出");
  gotoxy(x1,y1-3);
  cprintf("D-->新建文件");
  gotoxy(x1+8,y1);
  chofun=key();
  if (chofun==18) {
     cprintf("E");
     exit(0); }
  else if (chofun==32) {
 	 cprintf("D");
 	 window(x1,y2+1,x2,y2+1);
 	 BG(WHITE);
 	 FC(BLACK);
 	 clrscr();
 	 gotoxy(x1,y2+1);
 	 cprintf("输入文件名:");
 	 scanf("%s",filename);
 	 if (f_8_3(filename)==FALSE) {
 	    CR;cprintf("请按任意键返回....");
 	    getch();
 	    f_cls(); }
 	 else
 	    f_edit(filename); }
 }
 void f_edit(char *file_name) /* 文件编辑函数 */
 {
  int x1=1,y1=2,x2=80,y2=24;
  FILE *fp;
  int inkey;
  fp=fopen(file_name,"w");
  f_cls();
  window(1,1,80,25);
  BG(WHITE);
  FC(BLACK);
  clrscr();
  gotoxy(5,1);
  cprintf("当前编辑文件名:%s",file_name);
  gotoxy(5,25);
  cprintf("F2存盘退出 F4退出编辑");
  window(x1,y1,x2,y2);
  BG(BLUE);
  FC(YELLOW);
  clrscr();
  do {
      if (wherex()==x2)
 	gotoxy(1,wherey()+1);
      if (wherey()==y2)
 	cputs("\n");
      inkey=getkey();
      switch(inkey) {
 	case UP : gotoxy(wherex(),wherey()-1); break;
 	case DOWN : gotoxy(wherex(),wherey()+1); break;
 	case RIGHT : gotoxy(wherex()+1,wherey()); break;
 	case LEFT : gotoxy(wherex()-1,wherey()); break; }
      if (inkey<<8) {
 	inkey=inkey&0x00ff;
 	if (inkey==ENTER) {
 	   gotoxy(1,wherey()+1);
 	   fputc('\n',fp); }
 	else if (inkey==DEL) {
 		gotoxy(wherex()-1,wherey());
 		fputc('\b',fp); }
 	     else if (inkey==TAB) {
 		     cputs("\t");
 		     fputc('\t',fp); }
 		  else if (inkey==ESC) ;
 		       else {
 			    cprintf("%c",inkey);
 			    fputc(inkey,fp); }
 	}
      else
 	if (inkey==F2 || inkey==F4) {
 	   close(fp);
 	   if (inkey==F4) unlink(file_name);
 	   f_cls();
 	   break; }
  } while(1);
 }
 void f_rename(char *oldname,char *newname)  /* 文件改名函数 */
 {  char yorn;
  if (f_find(oldname)==TRUE)
     if (f_8_3(newname)==TRUE)
        if (rename(oldname,newname)==FALSE)
 	  printf("\n文件改名成功,%s==>%s",oldname,newname);
 }
 void f_del(char *delname)    /* 文件删除函数 */
 {
  char yorn;
  if (f_find(delname)==TRUE) {
     printf("\n是否删除文件%s(Y/N):",delname);
     scanf("%c",&yorn);
     if (yorn=='y' || yorn=='Y')
        if (unlink(delname))
 	  printf("文件无法删除,文件为只读.");
        else
 	  printf("文件删除成功."); }
 }
 int f_find(char *find_filename)  /* 文件查找函数 */
 {  if (fopen(find_filename,"r")==NULL) {
     printf("文件找不到或文件路径错误.");
     return(0); }
  else
     return(1);
 }
 int f_8_3(char *filename_8_3) /* 检查文件是否符合DOS 8.3 命名规则 */
 {  char yorn='n',*fn;
  int strlong=0,str1=0,loopi;
  fn=filename_8_3;
  strlong=strlen(filename_8_3);
  str1=strcspn(filename_8_3,".");
  if (str1==FALSE) {
     if (strlen(filename_8_3)>8) /* 文件主名不得超过8个字符 */
        yorn='y'; }
else { if (str1>8 || (strlong-str1-1)>3) /* 文件扩展名不得超过3个字符 */
        yorn='y'; }
  for (;*fn!='\0';fn++)
      {if ((*fn>=58 && *fn<=62) || (*fn>=91 && *fn<=93) || *fn==47 || 
 fn==44 || *fn==32 || *fn==124) {
 	 yorn='y';
 	 break; }}
  if (yorn=='y') {
     printf("\n%s\n文件名不合DOS命名规则.",filename_8_3);
     return(0); }
  else
     return(1);
 }
 int key(void)
{union REGS rg;
  rg.h.ah=0;
  int86(0x16,&rg,&rg);
  return(rg.h.ah);
 }
 int getkey(void)  /* 读标准扫描码 */
 {  int key;
  key=bioskey(0);
  return key;
 }
 void f_cls(void) /* 清黑屏函数 */
 {  window(1,1,80,25);
  BG(BLACK);
  FC(WHITE);
  lowvideo();
  clrscr();
 }
 char find_disk(char *find_dn)  /* 取驱动器符号函数 */
 {  char st_1;
  strlwr(find_dn);
  if (strlen(find_dn)>2)
     st_1=NULL;
  else if (find_dn[0]>='a' && find_dn[0]<='z')
 	 st_1=find_dn[0];
       else
 	 st_1=NULL;
  return(st_1);
 }
 void any_key(int x1,int x2,int y2)  /* 按任意键返回函数 */
 {
  int x,y;
  window(x1-1,y2+2,x2+1,y2+6);
  BG(RED);
  clrscr();
  window(x1,y2+3,x2,y2+5);
  BG(BLACK);
  FC(WHITE);
  clrscr();
  x=wherex();
  y=wherey()+1;
  gotoxy(x,y);
  cprintf("请按任意键返回...");
  getch();
  f_cls();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -