Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Вывести на экран содержимое файла с программой на языке С, выделяя в строке все заголовки функций*/
- #include <stdio.h>
- #include <string.h>
- #include <windows.h>
- #define BEGIN 1
- #define END 0
- //#define _CRT_SECURE_NO_WARNINGS 1
- void main(void)
- {
- FILE *f;
- HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
- char line[1024]; // считываемая строка файла
- int i=0, flag=0, flag_hdr=0; // flag - на комментарий, flag_hdr - на заголовок
- f=fopen("test.txt", "r");
- if (f==NULL) return;
- while (! feof(f))
- {
- fgets (line, 1024, f);
- if (strstr(line, "/*") && !strstr(line, "*/")) flag=BEGIN;
- if ((((strstr(line, "int "))!=NULL)||(strstr(line, "void "))!=NULL) && (strstr(line, "["))==NULL && (strstr(line, "="))==NULL || (flag_hdr!=END) || (flag==BEGIN)) // если в строке есть тип INT или VOID, открывающая скобка и это не объявление и инициализация переменной или уже ранее начался заголовок
- {
- for (i=0; line[i]!='\0'; i++) // пока не закончится строка
- {
- /*Если встречен просто комментарий*/
- /*то, начиная с //, всё записывать (белым) и выход из цикла (переход на след строку)*/
- SetConsoleTextAttribute(handle, 15); // белый
- if (line[i]=='/' && line[i+1]=='/')
- {
- printf(strstr(line,"//"));
- break;
- }
- else
- {
- /*Если встречен граничный комментарий*/
- /*поднять на него флаг и записывать всё (белым), пока очередные символы не будут закрывающей границей*/
- if (line [i]=='/' && line [i+1]=='*' || flag==BEGIN)
- {
- flag=BEGIN;
- printf("%c", line[i]);
- if (line[i-1]=='*' && line [i]=='/')
- flag=END;
- if (line[i]=='\0')
- break;
- }
- else
- /*Если встречена ;*/
- /*написать её (белым)*/
- if ((line[i]==';') || (line[i]==' '))
- printf("%c", line[i]);
- /*Если встречено всё остальное*/
- /*записывать красным, вернуть белый*/
- else
- {
- if ((flag!=BEGIN) || (flag_hdr!=END)) // если это не часть ранее открытого комментария или заголовок уже начался
- {
- SetConsoleTextAttribute(handle, 12); // красный
- printf("%c", line[i]);
- flag_hdr=BEGIN;
- if (strstr(line, ")"))
- flag_hdr=END;
- }
- }
- }
- }
- }
- else // если не строка с заголовком
- {
- SetConsoleTextAttribute(handle, 15);
- printf(line);
- }
- }
- fclose (f);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement