Вход на сайт
Командный интерпретатор 22.03.2025
90 просмотров
Перейти к просмотру всей ветки
Последний раз изменено 22.03.25 03:22 (uscheswoi_82)
Всем привет! Делаю командный интерпретатор:
Вот код interp.c:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TRUE 0 #define FALSE !TRUE #define MAX_SUBSTR 10 #define MAX_CMD 15 #define MAX_BUFFER 512 char *cmd[] = {"CON", // 0 "PRN",// 1 "F",// 2 "D",// 3 "DEL",// 4 "IF",// 5 "Q.",// 6 "MD",// 7 "CD",// 8 "FOR",// 9 "WAIT",// 10 "REM",// 11 "VR",// 12 "VAR",//13 "BEEP",// 14 "JMP",//15 "CL",// 16 "GXY",// 17 "RET",// 18 "ENUM",// 19 "RUN",// 20 "DR",// 21 "ED",// 22 "MSG",// 23 "CAL", // 24 "none"}; // 25 /* См. https://groups.germany.ru/showmessage.pl? Number=41060081&Board=12994140000001 */ char splits[MAX_SUBSTR][250]; int split_str(char *buf, char del, int idx) { int j=0, i=0, k=-1; for(j=0; j<idx; j++) splits[j][0] = '\0'; for(j=0; j<strlen(buf); j++) { k++; splits[ i ][k] = buf[j]; if(buf[j] == del) { splits[ i ][k] = '\0'; i++; k=-1; } } splits[ i ][k+1] = '\0'; return i; } int main(void) { char buf[MAX_BUFFER]; // Буфер для команды char scr[MAX_BUFFER]; // Буфер для экрана FILE *f; // Для файла int i = 0; // Для цикла for int is_new_line = FALSE; // Перенос строки? int is_echo = FALSE; // Эхо? int is_file = FALSE; // Читаем из файла? f = fopen("STARTUP.INT", "r"); // Открываем файл startup.int if(f != NULL) { is_file = TRUE; } START: while(1) { if(is_file == FALSE) { printf("\n? "); gets(buf); } else { fgets(buf, 512, f); if(feof(f)) { fclose(f); is_file = FALSE; goto START; } } // Если команда Q., то выходим из файла или программы if(strcmp(strupr(buf), "Q.") == 0) { if(is_file == FALSE) exit(0); else { fclose(f); goto START; } } // Расщипляем строку на подстроки split_str(buf, ' ', MAX_SUBSTR); for(i=0; i<MAX_CMD; i++) { if(strcmp(strupr(splits[0]), cmd[ i ]) == 0) break; } switch(i) { case 0: //printf("\nCON"); // Перенос строки if(strcmp(strupr(splits[1]), "NON") == 0) is_new_line = TRUE; else if(strcmp(strupr(splits[1]), "EON") == 0) is_echo = TRUE; // Эхо else { strncpy(scr, buf+4, strlen(buf)-2); printf("%s", scr); } break; default: f = fopen(buf, "r"); // Читаем из файла команды if(f != NULL) { is_file = TRUE; goto START; } else printf("\nНет такого файла или команды."); break; } } return 0; }
Продолжение следует...
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение