49911 (Програма емуляції роботи командного процесора операційної системи), страница 3
Описание файла
Документ из архива "Програма емуляції роботи командного процесора операційної системи", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49911"
Текст 3 страницы из документа "49911"
printf("Error reading source file\n");
fclose(fi);
fclose(fo);
return;
}
sz1-=i;
if(fwrite(buf,1,i,fo)!=i){
printf("Error writing destantion file\n");
fclose(fi);
fclose(fo);
return;
}
}
fflush(fo);
fclose(fo);
fo=fopen(args[3],"wb");
if(!fo){
printf("Fatal error: cannot open destantion file\n");
fclose(fi);
return;
}
while(sz2){
fpos_t i;
fpos_t toread;
toread=min(bufsz,sz2);
i=fread(buf,1,toread,fi);
if((i==0)&&(sz2!=0)){
printf("Error reading source file\n");
fclose(fi);
fclose(fo);
return;
}
sz2-=i;
if(fwrite(buf,1,i,fo)!=i){
printf("Error writing destantion file\n");
fclose(fi);
fclose(fo);
}
}
fflush(fo);
fclose(fo);
printf("File %s is splited to files %s and %s.\n", args[1],args[2],args[3]);
}
void splithelp(void){
printf("Usage: split source dest1 dest2\n"
"\tsource Name of source file\n"
"\tdest1, dest2 Names of files to split in\n");
}
void editexec(unsigned argc,char **argv){
if(argc!=2){
printf("Invalid artgument count\n");
return;
}
if(_creat(argv[1],FA_NORMAL)==-1){
printf("Error creating file\n");
}
}
void edithelp(void){
printf("Usage: edit \nCreate file\n");
}
CLIST clist[]={{"",NULL,NULL}, {"exit",NULL,NULL}, {"help",Help,NULL},
{"split",splitexec,splithelp}, {"ar",arexec,arhelp},
{"edit",editexec,edithelp}, {"join",joinexec,joinhelp}};
void main(void){
char cmdline[100];
cmdnum=6;
while(1){
printf("***KOM*** > ");
gets(cmdline);
if(!strlen(cmdline)) continue;
args[0]=strtok(cmdline," ");
argc=1;
while(args[argc]=strtok(NULL," ")) argc++;
cmd=0;
for(int i=1;i<=cmdnum;i++)
if(!strcmpi(args[0],clist[i].cmdname)){
cmd=i;
break;
}
if(cmd==0){
printf("Unknown command\n");
continue;
}
if(cmd==1) return;
if(cmd==2){
clist[2].execu(0,NULL);
continue;
}
if(!strcmp(args[1],"/?")){
clist[cmd].hlp();
continue;
}
clist[cmd].execu(argc,args);
}
}
ДОДАТОК Б
Лістинг команди мовою Assembler
model small
public C joinhelp,C joinexec
.code
help db "Usage: join ",10,13,"Join given 2 files to one",10,13,"$"
errormsg db "Error.",10,13,"$"
joinexec proc
arg argc:word,argv:word ;char**
push bp
mov bp,sp
mov si,argv;Load address of pointers array
mov dx,[si+2];Load address of second argument(argv[1])
mov ah,3ah
int 21h ;rmdir
jnc fin
push ds
push cs
pop ds
mov ah,9
mov dx,offset errormsg
int 21h
transerr:
mov ah,9
mov dx,offset transfermsg
int 21h
mov bx,file1
call fclose ;close src
mov bx,file2
call fclose ;close dst
pop ds
jmp fin
opensrc1err:
push ds
push cs
pop ds
mov ah,9
mov dx,offset erropen1
int 21h
pop ds
jmp fin
opendst2err:
push ds
push cs
pop ds
mov ah,9
mov dx,offset erropen2
int 21h
mov bx,file1
call fclose ;close src
pop ds
jmp fin
fin:pop bp
ret
pop ds
fin:pop bp
ret
joinexec endp
opensrc proc
mov ax,3d00h
mov dx,[si+2];Open src. file argv[1]
int 21h
ret
opensrc endp
fclose proc
mov ah,3eh
int 21h ;Close source
ret
fclose endp
createdst proc
mov ah,3ch
xor cx,cx
mov dx,[si+4];Open dst. file argv[2]
int 21h
ret
createdst endp
joinhelp proc
push ds
push cs
pop ds
mov ah,9
mov dx,offset help
int 21h
pop ds
ret
joinhelp endp
end
ДОДАТОК В
Алгоритм головної програми