| Другое > Hard'n'Soft |
| Организация управления ресурсами в ОС bat+cpp (помогите) |
| (1/1) |
| Silver_Shadow:
Короче проблема у меня возникла в процессе одной работы по предмету Операционые системы. На форумах программистов молчат. Может тут есть мегапрограммисты и подскажет? =) Вот текст самой проблемы Вообще есть почти готовая программа, но в ней есть ошибки не пойму как и где исправлять. по заданию Создать 3 программы 1 - C-программу организующую меню на экране состаящее из пунктов, файл должен иметь имя MenuN.cpp атрибуты для построения окна и тексты пунктов считать из данных AtribN.txt который должен быть предварительно создан Номер выбраного пункта записать в новый файл данных OtvN.txt Файл MenuN должен вызываться с указанием аргумента имени файла атрибутов окна AtribN.txt 2 С-программу выполняющий действия указанные в задании ProgN.cpp ProgN.cpp должен содержать проверку аргументов в строке вызова Вывести все результаты вычислений на экран и в файл на диск ResN.dat 3 Командный файл содержащий команды, позволяющие создать интерфейс при организации диалогового меню CmN.bat. Использовать в нем вызовы файлов MenuN и ProgN Вот мое индивидуальное задание Menu.cpp окно вывесте в центре правого края экрана обрамленое символами "+" содержащие пункты меню: - Наличие монохромного адаптера - Изменить номер байта в секторе Выход из меню завершить клавишей -> Prog.cpp В зависимости от номера пункта меню указаного в качестве параметра при вызове Prog.exe проверяет наличие монохромного видеоадаптера или изменяет указанный байт в указаном секторе Если видеоадаптер имеется то завершить программу с кодом 0 иначе с кодом -1 Если указаный байт изменился, то завершить программу с кодом 1, иначе с кодом 0 cm.bat Вызвать файл cm.bat c одним параметром res.dat Установить цвет экрана -белый, цвет символов красный. Вывести текущую дату Проанализировать код завершения: если он равен -1, то содержимое файла res.dat объеденить с содержимым файла otv.txt и сделать копию объединеного файла на диск A в текущий каталог, проверив предварительно, существует ли такой каталог, написав соответствующие команды, а при отсутствии такого создать если он равен 1, то удалить файл atrib.txt иначе вывести содержимое текущих каталогов дисков на экран Теперь коды программ Atrib6.txt 40 10 79 20 Menu.cpp #include<stdio.h> #include<stdlib.h> #include<conio.h> int main(int argc,char *argv[]) { clrscr(); int x,y,x1,y1,x2,y2,c,n; FILE*f,*f1; if(!(f=fopen(argv[1],"r+"))) {perror("The file not found"); exit(-1);} fscanf(f,"%d",&x1); fscanf(f,"%d",&y1); fscanf(f,"%d",&x2); fscanf(f,"%d",&y2); for (x=x1,y=y1;x<=x2;x++) {gotoxy(x,y); printf("+"); } for(x=x1,y=y1;y<=y2;y++) {gotoxy(x,y); printf("+");} for(x=x1,y=y2;x<=x2;x++) {gotoxy(x,y); printf("+");} for(x=x2,y=y1;y<=y2;y++) {gotoxy(x,y); printf("+"); } gotoxy(42,12); printf("1.Search monochrome videoadapter"); gotoxy(42,16); printf("2.Number of bytes in sector"); scanf("%d",&n); f1=fopen("Otv6.txt","w+"); fprintf(f1,"%d",n); fclose(f); fclose(f1); c=getchar(); if(c=='1') exit(1); else exit(0); } Prog6.cpp #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<iostream.h> #include<dos.h> #include<bios.h> int main(int argc,char *argv[]) {int sectsize,x,a,n; unsigned char buf[512],b[512]; FILE *i,*in; if (argc<2) {fprintf(stderr,"net parametrov"); exit(2);} i=fopen("Otv6.txt","r+"); in=fopen("Res6.dat","w+"); fscanf(i,"%d",&n); fclose(i); if(n==1) {a=peek (5, 0x0410); if(a==1) { printf(" \n there is monochrome videoadapter :\n"); fprintf(in," \n there is monochrome videoadapter :\n"); exit (0);} else printf(" \n monochrome videoadapter not found :\n"); fprintf(in," \n monochrome videoadapter not found :\n"); exit(-1);} if (n==2) {x=1; absread(x,1,0,buf); sectsize =buf[0xb]+buf[0xc]*256; cout<<"\n number of bytes in sector "<<sectsize; fprintf(in,"\n number of bytes in sector %d",sectsize); fclose(in); if(sectsize<2) exit(0); else exit(1); getch();} } cm6.bat echo off Menu6 Atrib6.txt Prog6 OTV6.txt color 74 date if errorlevel -1 goto b if errorlevel 1 goto c dir A:\ goto end :b copy %1 + OTV6.txt nik.txt copy nik.txt A:\FL\ goto end :c del Atrib6.txt goto end :end Вообщем при запуске bat-файла появляется меню с двумя опциями 1 Поиск монохр адпт. 2 Сколько байтов в секторе. Поиск Монохромного адапптера проходит нормально, а вот когда я нажимаю 2-ю опцию на количество байт в секторе, программа не реагиарует, а пропускает и показывает сразу текущую дату.Проблема в том что не работает вторая опция меню. Может проблема в связи между cm6.bat и prog6.exe или ошибка в самом prog6? Вообщем не показывает он кол-во cекторов. Вот картинка я нажал на опцию 2 и секторов не показало Еще не понимаю как сделать --- Цитата ---- Изменить номер байта в секторе --- Конец цитаты --- знаю как посчитать кол-во, может кто знает каким образом выглядит код на изменение номер байта в секторе и что это такое? --- Цитата ---Выход из меню завершить клавишей -> --- Конец цитаты --- Каким образом это засунуть в код? В методичке так написано, но какую клавишу имено ставить? И как это написать в код? Добавлено позже: Вообщем как я посмотрел связь c Prog6.exe с cm6.bat есть только вот после строчки поиска монохромного адаптера, у кода вероятно ошибка где то здесь у Prog6.exe if (n==2) {x=1; absread(x,1,0,buf); sectsize =buf[0xb]+buf[0xc]*256; cout<<"\n number of bytes in sector "<<sectsize; fprintf(in,"\n number of bytes in sector %d",sectsize); fclose(in); if(sectsize<2) exit(0); else exit(1); getch();} } Сама программа работает, проверял отдельно prog6.cpp, количество байт в секторе пишет без проблем. Проблема со связью в меню, не хочет он показывать кол-во байт в секторе |
| Навигация |
| Главная страница сообщений |