Tải bản đầy đủ (.doc) (7 trang)

Đồ án Lập trình hệ thống- Mô phỏng lệnh Type

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (198.68 KB, 7 trang )

Mở đầu
1. Cú pháp lệnh TYPE
- Cú pháp lệnh:
TYPE [ổ đĩa:][đường dẫn]<tên file>
Các thành phần trong dấu ngoặc vuông “[ ]” là không bắt buộc.
Các thành phần trong dấu “< >” là bắt buộc phải có.
- Không có các tham số như một số lệnh khác(xem theo trang(/p), theo dòng…).
- Trợ giúp:
TYPE -? Hoặc: HELP TYPE
- Xem nhiều file cùng lúc:
TYPE [ổ đĩa:][đường dẫn]<tên file.*> : Xem tất cả các file cùng tên nhưng khác phần
đuôi mở rộng(định dạng).
TYPE [drive:][path] *.TXT : Xem tất cả các file có đuôi txt
TYPE [drive:][path]<baitap*> : Xem tất cả các file có tên bắt đầu bằng “baitap”
Trong môi trường DOS không phân biệt chữ hoa hay chữ thường
Các lỗi trong lệnh TYPE
+ Không tìm thấy đường dẫn: “The system cannot find the path specified.”
+ Không tìm thấy file (trong thư mục đã chỉ ra):
“The system cannot find the file specified.”
+ Không đúng cú pháp lệnh: “The syntax of the command is incorrect.”
2. Các ngắt được sử dụng.
Ngắt 0x21,0x3D: dùng để mở tệp.
Ngắt 0x21,0x3E: dùng để đóng tệp.
Ngắt 0x21,0x3F: dùng để đọc tệp.
I. Chương trình
1. Mở file

Để mở file ta sử dụng ngắt 0x21,0x3D.
Sau khi mở tệp ta tra về số hiệu tệp được mở để dùng cho đọc tệp.
Báo lỗi nếu quá trình mở tệp xảy ra lỗi
2. Đọc file và in lên màn hình


Để đọc file ta sử dụng ngắt 0x21,0x3F.
Để thuận lợi cho việc xem toan bộ tệp đầy đủ và phù hợp với màn hình sau khi in 700
ký tự ta dừng lại để đọc.
Báo lỗi nếu quá trình đọc tệp xảy ra lỗi
//Ham mo tep
int motep(char *tentep)
{
union REGS in, out;
struct SREGS nd;
in.h.ah=0x3d; //ngat (0x21,0x3D) dung de mo tep
in.h.al=0; //AL chua mot mo (0:doc)
nd.ds=FP_SEG(tentep); //DS:DX chua ten duong dan va ten file can mo
in.x.dx=FP_OFF(tentep);
int86x(0x21,&in,&out,&nd); // goi ngat 21h
if (out.x.cflag) // neu co loi trong qua trinh mo
{
printf("\n Loi khi mo tep.Ma loi:%d ",out.x.cflag);
getch();
exit(1); // thoat khoi chuong trinh neu file khong ton tai
} //hoac loi khi mo file
return out.x.ax; //tra ve so hieu tep duoc mo
}
//Ham doc va in noi dung tep
void docintep(int shtep,int dai)
{
int sb,i;
char h[10000];
union REGS in,out;
struct SREGS nd;
in.h.ah=0x3f; //ngat (0x21,0x3F) dung de doc tep

in.x.bx=shtep; //BX nhan so hieu tep
in.x.cx=dai; //CX nhan so byte muon doc
nd.ds=FP_SEG(h); //DS:DX chua dia chi vung nho nhan du lieu

3. Đóng file sau khi đọc.
Để đóng tệp ta sử dụng ngắt 0x21,0x3E.
Báo lỗi nếu quá trình đóng tệp xảy ra lỗi.


in.x.dx=FP_OFF(h);
int86x(0x21,&in,&out,&nd); // Goi ngat 21h
if (out.x.cflag!=0)
{
printf("\n Loi khi doc tep");
getch();
}
for (i=0;i<out.x.ax;i++) // out.x.ax la so byte doc duoc
{
printf("%c",h[i]); // in noi dung kieu char
if((i!=0)&&(i%700)==0) //in moi lan 700 ki tu roi dung lai de doc
getch();
}
}
//Ham dong tep
void dongtep(int shtep)
{
union REGS in, out;
in.h.ah=0x3e; //ngat (0x21,0x3E) dung de dong tep
in.x.bx=shtep; //BX nhan so hieu tep can dong
int86(0x21,&in,&out); // goi ngat 21h

if (out.x.cflag) //neu co loi khi dong tep
{
printf("\n Loi khi dong tep.");
getch();
}
}

4. Hàm main.
//CHUONG TRINH MO PHONG LENH TYPE DUNG NGAT
#include "stdio.h"
#include "dos.h"
#include "conio.h"
#include "stdlib.h"
//Khai bao cac ham
int motep(char *tentep); //Mo tep
void dongtep(int shtep); //Dong tep
void docintep(int shtep,int dai); //Doc va in noi dung tep
//Chuong trinh chinh
void main()
{
clrscr();
char *tentep;
int shtep,dai=10000; //so hieu tep, do dai toi da co the doc
//10000(byte)
printf("\nNhap duong dan va ten file:\n");
gets(tentep);
shtep= motep(tentep);
docintep(shtep,dai);
dongtep(shtep);
getch();

}


II. Kết quả
1. Chương trình hoàn chỉnh.
//CHUONG TRINH MO PHONG LENH TYPE DUNG NGAT
#include "stdio.h"
#include "dos.h"
#include "conio.h"
#include "stdlib.h"
//Khai bao cac ham
int motep(char *tentep); //Mo tep
void dongtep(int shtep); //Dong tep
void docintep(int shtep,int dai); //Doc va in noi dung tep
//Chuong trinh chinh
void main()
{
clrscr();
char *tentep;
int shtep,dai=10000; //so hieu tep, do dai toi da co the doc
//10000(byte)
printf("\nNhap file va duong dan ");
gets(tentep);
shtep= motep(tentep);
docintep(shtep,dai);
dongtep(shtep);
getch();
}
//Ham mo tep
int motep(char *tentep)

{
union REGS in, out;
struct SREGS nd;
in.h.ah=0x3d; //ngat (0x21,0x3D) dung de mo tep
in.h.al=0; //AL chua mot mo (0:doc)

nd.ds=FP_SEG(tentep); //DS:DX chua ten duong dan va ten file can mo
in.x.dx=FP_OFF(tentep);
int86x(0x21,&in,&out,&nd); // goi ngat 21h
if (out.x.cflag) // neu co loi trong qua trinh mo
{
printf("\n Loi khi mo tep.Ma loi:%d ",out.x.cflag);
getch();
exit(1); // thoat khoi chuong trinh neu file khong ton tai
} //hoac loi khi mo file
return out.x.ax; //tra ve so hieu tep duoc mo
}
//Ham dong tep
void dongtep(int shtep)
{
union REGS in, out;
in.h.ah=0x3e; //ngat (0x21,0x3E) dung de dong tep
in.x.bx=shtep; //BX nhan so hieu tep can dong
int86(0x21,&in,&out);
if (out.x.cflag) //neu CF#0 thi loi dong tep
{
printf("\n Loi khi dong tep.");
getch();
}
}

//Ham doc va in noi dung tep
void docintep(int shtep,int dai)
{
int sb,i;
char h[10000];
union REGS in,out;
struct SREGS nd;
in.h.ah=0x3f; //ngat (0x21,0x3F) dung de doc tep
in.x.bx=shtep; //BX nhan so hieu tep
in.x.cx=dai; //CX nhan so byte muon doc
nd.ds=FP_SEG(h); //DS:DX chua dia chi vung nho nhan du lieu
in.x.dx=FP_OFF(h);
int86x(0x21,&in,&out,&nd); // goi ngat 21h
if (out.x.cflag) // neu co loi khi doc tep
{

printf("\n Loi khi doc tep");
getch();
}
for (i=0;i<out.x.ax;i++) // out.x.ax la so byte doc duoc
{
printf("%c",h[i]); // in noi dung kieu char
if((i!=0)&&(i%700)==0) //in moi lan 700 ki tu roi dung de doc
getch();
}
}
2. Kết quả chạy chương trình.

×