📄 lt86.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 + -