📄 fileop.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
int fileopenforread(const char *filename, int &errorcode)
{
int result;
asm mov dx, filename
asm mov al, 0h
asm mov ah, 3dh
asm int 21h
asm jnc open_ok
asm mov result, 0
asm mov errorcode, ax
asm jmp over
open_ok:
asm mov result, ax
over:
return result;
}
/*
int fileopenforwrite(const char *filename, int &errorcode)
{
int result;
asm mov dx, filename
asm mov al, 1
asm mov ah, 3dh
asm int 21h
asm jnc open_ok
asm mov dx, filename
asm mov cx, 0
asm mov ah, 3ch
asm int 21h
asm jnc open_ok
asm mov result, 0
asm mov errorcode, ax
asm jmp over
open_ok:
asm mov result, ax
over:
return result;
}
*/
int fileopenforreadwrite(const char *filename, int &errorcode)
{
int result;
asm mov dx, filename
asm mov al, 2
asm mov ah, 3dh
asm int 21h
asm jnc open_ok
asm mov dx, filename
asm mov cx, 0
asm mov ah, 3ch
asm int 21h
asm jnc open_ok
asm mov result, 0
asm mov errorcode, ax
asm jmp over
open_ok:
asm mov result, ax
over:
return result;
}
int fileread(int fhandle, char *pbuff, int count, int &errorcode)
{
int result;
asm mov cx, count
asm mov dx, pbuff
asm mov bx, fhandle
asm mov ah, 3fh
asm int 21h
asm jc read_err
asm mov result, ax
asm jmp over
read_err:
asm mov result, -1
asm mov errorcode, ax
over:
return result;
}
int filewrite(int fhandle, char *pbuff, int count, int &errorcode)
{
int result;
asm mov cx, count
asm mov dx, pbuff
asm mov bx, fhandle
asm mov ah, 40h
asm int 21h
asm jc write_err
asm mov result, ax
asm jmp over
write_err:
asm mov result, -1
asm mov errorcode, ax
over:
return result;
}
int fileseek(int fhandle, long foffset, char origin, int &errorcode)
{
int result, lowword, highword;
lowword = (int)(foffset & 0xff);
highword = (int)((foffset >> 16) & 0xff);
asm mov bx, fhandle
asm mov cx, highword
asm mov dx, lowword
asm mov al, origin
asm mov ah, 42h
asm int 21h
asm jnc seek_ok
asm mov result, -1
asm mov errorcode, ax
errorcode = (char)(*((int*)(&errorcode)));
asm jmp over
seek_ok:
asm mov result, 1
over:
return result;
}
/*
long filetell(int fhandle, int &errorcode)
{
int lowword, highword;
long result;
asm mov bx, fhandle
asm mov cx, 0
asm mov dx, 0
asm mov al, 1
asm mov ah, 42h
asm int 21h
asm jnc tell_ok
asm mov result, -1
asm mov errorcode, ax
errorcode = (char)(*((int*)(&errorcode)));
asm jmp over
tell_ok:
asm mov lowword, ax
asm mov highword, dx
result = (long)(highword << 16) + (long)lowword;
over:
return result;
}
*/
int fileclose(int fhandle)
{
int result;
asm mov bx, fhandle
asm mov ah, 3eh
asm int 21h
asm jnc close_ok
asm mov result, -1
asm jmp over
close_ok:
asm mov result, 1
over:
return result;
}
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, 0L, SEEK_SET);
length -= ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int main(int argc, char *argv[])
{
FILE *sfile, *tfile1, *tfile2, *tfile3, *mfile2, *mfile3, *smfile;
long length, i;
int sfhandler, mfhandler, errorcode;
char *c = NULL, ch;
printf("\nWritten by ZhangZuoYang.\t2001.2.6\n\n");
if(argc != 2)
{
printf("Usage:fileop filename\n");
return 1;
}
sfile = tfile1 = tfile2 = tfile3 = mfile2 = mfile3 = smfile = NULL;
sfhandler = mfhandler = 0;
sfile = fopen(argv[1], "r");
mfile2 = fopen("mf2.txt", "w");
mfile3 = fopen("mf3.txt", "w");
c = (char*)malloc(9 * sizeof(char));
c[8] = '\0';
length = filesize(sfile);
for(i = 0; i < length/8; i++)
{
fread(c, 1, 8, sfile);
fwrite(c, 1, 8, mfile3);
}
if(length%8)
{
fread(c, 1, length%8, sfile);
fwrite(c, 1, length%8, mfile3);
}
ch = 26;
fwrite((char*)(&ch), 1, 1, mfile3);
fseek(sfile, 0, SEEK_SET);
for(i = 0; i < length/8; i++)
{
fread(c, 1, 8, sfile);
fwrite(c, 1, 8, mfile3);
}
if(length%8)
{
fread(c, 1, length%8, sfile);
fwrite(c, 1, length%8, mfile3);
}
fseek(sfile, 0, SEEK_SET);
while(!feof(sfile))
{
ch = fgetc(sfile);
fputc(ch, mfile2);
}
fputc(26, mfile2);
fseek(sfile, 0, SEEK_SET);
while(!feof(sfile))
{
ch = fgetc(sfile);
fputc(ch, mfile2);
}
fclose(sfile);
fclose(mfile2);
fclose(mfile3);
sfhandler = fileopenforread(argv[1], errorcode);
if(sfhandler == 0)
{
printf("sfhandler open error 0x%x\n", errorcode);
return 1;
}
mfhandler = fileopenforreadwrite("mf1.txt", errorcode);
if(mfhandler == 0)
{
printf("mfhandler open error 0x%x\n", errorcode);
fileclose(mfhandler);
return 1;
}
length = 8;
while(length == 8)
{
length = fileread(sfhandler, c, 8, errorcode);
filewrite(mfhandler, c, length, errorcode);
}
ch = 26;
filewrite(mfhandler, (char*)(&ch), 1, errorcode);
fileseek(sfhandler, 0, 0, errorcode);
length = 8;
while(length == 8)
{
length = fileread(sfhandler, c, 8, errorcode);
filewrite(mfhandler, c, length, errorcode);
}
fileclose(sfhandler);
tfile3 = fopen("tf3.txt", "w");
fileseek(mfhandler, 0, 0, errorcode);
length = 8;
while(length == 8)
{
length = fileread(mfhandler, c, 8, errorcode);
fwrite(c, 1, length, tfile3);
}
fileclose(mfhandler);
fclose(tfile3);
smfile = fopen("mf1.txt", "r");
tfile1 = fopen("tf1.txt", "w");
tfile2 = fopen("tf2.txt", "w");
length = filesize(smfile);
for(i = 0; i < length/8; i++)
{
fread(c, 1, 8, smfile);
fwrite(c, 1, 8, tfile1);
}
if(length%8)
{
fread(c, 1, length%8, smfile);
fwrite(c, 1, length%8, tfile1);
}
fseek(smfile, 0, SEEK_SET);
while(!feof(smfile))
{
ch = fgetc(smfile);
fputc(ch, tfile2);
}
free(c);
fclose(smfile);
fclose(tfile1);
fclose(tfile2);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -