Загрузить архив: | |
Файл: vdv-1419.zip (396kb [zip], Скачиваний: 130) скачать |
#include
#include
#define FA_DIREC 0x10
#define CONTROL '$'
#define OPEN"<174>"
#define CLOSE"<175>"
#define DEFIS"<197>"
#define NUM "<102>"
#define EOLN' '
#define ITALIC ""
#define BOLD"
// $$narg=1;
charin[20],x[40],z[80],str[120],img[80];
int empty,befor;
FILE*fdi, *fdo;
int c0num,cnum,inum,nstr,tnum;
int sign,old,expand;
int GetStr()
{
befor = old; old = 1;
if (empty==0)
{
nstr++;
if (fgets(str,80,fdi)==NULL) return(-1);
if (str[0]==0 || str[0]=='n')
{
befor=1;
nstr++;
if (fgets(str,80,fdi)==NULL) return(-1);
if (str[0]==0 || str[0]=='n')
return(2);
else
{ empty=1; return(1); }
}
else
{ old=0; return(0); }
}
else
{
empty=0; old=0; return(0);
}
}
int NoLF()
{
int i;
for (i=0; str[i]!=0; i++)
if (str[i]=='n') break;
str[i]=0;
}
Cat(s,pi,ss)
chars[],ss[];
int *pi;
{
int i;
for (i=0; ss[i]!=0; i++,(*pi)++) s[*pi]=ss[i];
}
voidProcProg()
{
int i,j,n,k;
charxx[120];
strcpy(xx,str);
for (i=j=n=k=0; xx[j]!=0; j++)
{
switch (xx[j])
{
case '<':
case '>': str[i++]=xx[j];
str[i++]=xx[j];
break;
case '/':if (xx[j+1]=='/')
{
k++;
str[i++] = xx[j++];
str[i++] = xx[j];
Cat(str,&i,ITALIC);
}
else
str[i++] = xx[j];
break;
case '"': if (n)
{
Cat(str,&i,BOLD);
str[i++] = xx[j];
}
else
{
str[i++] = xx[j];
Cat(str,&i,ITALIC);
}
n = !n; break;
default: str[i++] = xx[j];
}
}
if (k) Cat(str,&i,BOLD);
str[i]=0;
}
int Proc()
{
int i,j,n,k;
charxx[120];
if (str[0]=='t' && str[1]=='-') fprintf(fdo,"nn");
for (i=0; str[i]!=0; i++) xx[i]=str[i];
xx[i]=0;
for (i=j=n=0; xx[j]!=0; j++)
{
switch (xx[j])
{
case 'n':
case 't':
case ' ': n++; if (n==1) str[i++]=' '; break;
case '-': if (!expand) str[i++]=xx[j]; break;
n=0;
if (xx[j+1]!=0 || xx[j-1]==' ')
Cat(str,&i,DEFIS);
else
str[i++]='-';
break;
case '"':if (!expand) str[i++]=xx[j]; break;
n=0;
if (sign)
Cat(str,&i,CLOSE);
else
Cat(str,&i,OPEN);
sign = !sign; break;
default: n=0; str[i++] = xx[j];
}
}
str[i]=0;
for (i--; i>=0 && str[i]==' '; i--) str[i]=0;
if (str[i]=='-' && str[i-1]!=' ')
{
str[i]=0;
fprintf(fdo,"%s",str);
}
else
fprintf(fdo,"%s%c",str,EOLN);
}
int Copy(ext,num,mode)
char*ext;
int num;
int mode;
{
FILE *fd1;
int n;
sprintf(x,"%s%d.%s",in,num,ext);
puts(x);
if ((fd1=fopen(x,"w"))==NULL) return(0);
fprintf(fdo,"n{ %s }nn",x);
if (mode==1)
{
sprintf(z,"//────────────────────────────────────────────── %sn",x);
fprintf(fd1,"%s",z);
}
if ((mode & 1) && expand) ProcProg();
if (mode!=0) fprintf(fd1,"%sn",str);
if (mode==0)
sprintf(img,"n Рис.%s%d. %s",in,num,str+1);
while ((n=GetStr())!=-1)
{
NoLF();
if ((mode & 1) && expand)
{
fprintf(fd1,"n");
ProcProg();
}
if (n==2 || str[0]==CONTROL || mode==2 && n==1)
{
if (mode==0) fprintf(fd1,"%sn",img);
fclose(fd1);
return(1);
}
if (n==1)
fprintf(fd1,"n");
else
fprintf(fd1,"%sn",str);
}
fclose(fd1);
return(0);
}
char A[]="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩъЫЬЭЮЯ";
char B[]="абвгдежзийклмнопрстуфхцчшщъыьэюя";
charAlpha(c)
char c;
{
int i;
for (i=0; A[i]!=0; i++) if (c==A[i]) return(B[i]);
return(0);
}
void keywords()
{
FILE *fdi,*fdo;
int i,j,n;
charcc,out[100];
sprintf(x,"%s0.txt",in);
if ((fdi=fopen(x,"r"))==NULL) return;
if ((fdo=fopen("keys.txt","a"))==NULL) return;
fseek(fdo,0L,2);
while ((cc=getc(fdi)) !=EOF)
{
if (Alpha(cc)==0) continue;
for (i=1,out[0]=cc; (cc=getc(fdi))!=EOF; i++)
{
if (cc ==' ' || (cc=Alpha(cc))!=0)
out[i]=cc;
elsebreak;
}
out[i]=0;
if (i > 2) fprintf(fdo,"%stt%sn",out,in);
}
fclose(fdi);
fclose(fdo);
}
void step()
{
int i,n,mode;
sprintf(x,"%s.000",in);
if ((fdi=fopen(x,"r"))==NULL) return;
sprintf(x,"%s0.txt",in);
if ((fdo=fopen(x,"w"))==NULL) return;
c0num=cnum=inum=tnum=1;
nstr=0;
sign=0;
while((n=GetStr())!=-1)
{
NoLF();
if (n!=0)
fprintf(fdo,"nn");
else
{
mode=0;
if (str[0]==CONTROL) mode=1;
if (str[0]=='┌') mode=3;
if (str[0]=='╔') mode=3;
if (str[0]=='/' && str[1]=='/' && befor) mode=2;
if (str[0]=='#' && befor) mode=2;
for (i=0; str[i]!=0 && befor; i++)
{
if (str[i]==' ')continue;
if (str[i]=='t') continue;
if (str[i]>='a' && str[i]<='z') mode=4;
break;
}
switch(mode)
{
case 0: Proc();
break;
case 3: if (!Copy("TBL",tnum++,2)) return;
break;
case 2: if (!Copy("C",cnum++,1)) return;
break;
case 1: if (!Copy("TXT",inum++,0)) return;
break;
case 4: if (!Copy("C0",c0num++,3)) return;
break;
}
}
}
fclose(fdi);
fclose(fdo);
keywords();
}
void main(int narg, char *argv[])
{
struct ffblk DIR;
int done,i;
expand=0;
if (narg < 2)
{
printf("bk.exe файл | * [+]n* - всефайлыn+ - преобразование c-файловтиппо умолчанию - .000n");
exit(0);
}
strcpy(in,argv[1]);
if (narg==3 && argv[2][0]=='+') expand++;
if (in[0]!='*')
{
step();
}
else
{
for (done=findfirst("*.000",&DIR,FA_DIREC); !done; done=findnext(&DIR))
{
if ((DIR.ff_attrib & FA_DIREC) ==0 && DIR.ff_name[0] !='.')
{
strcpy(in,DIR.ff_name);
for (i=0; in[i]!='.'; i++);
in[i]=0;
step();
}
}
}
}
Идентификатор BK1
Определением переменнойBK1
Тип данных BK1
Индекс BK1
Инициализация BK1
Функция BK1
Заголовок функцииBK1
Имя функции BK1
Результат функции BK1
Формальные параметры BK1
Локальные переменные BK1
Глобальные переменные BK1
Вызов функции BK1
Фактические параметры BK1
Инкремент BK1
Декремент BK1
Логическая операция ИЛИ BK1
Логическая операция НЕ BK1
Логическая операция И BK1
Оператор BK1
Ограничитель BK1
Составной оператор BK1
Блок BK1
Тело цикла BK1
Шаг цикла BK1
Заголовочный файлBK1
Переменная BK21
Тип данных BK21
Определение переменной BK21
Базовый тип данных BK21
Машинное слово BK21
Бит BK21
Разрядность BK21
Байт BK21
Стандартное машинное слово BK21
Двойное слово BK21
Тетрада BK21
Дополнительный код BK21
Перечислимый тип BK21
Код символа BK21
Индекс BK21
Направление выполнения операций BK22
Приведение типов BK22
Логическая операция Или BK22
Логическая операция Не BK22
Адресное выражение BK22
Пустой оператор BK23
Составной оператор BK23
Блок BK23
Условие продолжения BK23
Заголовок функцииBK24
Тело функции BK24
Определение функции BK24
Фактические параметры BK24
Локальные переменные BK24
Автоматические переменные BK24
Передача параметров по значению BK24
Глобальные переменные BK24
Внешние переменные BK24
Объявление функции BK24
Прототип BK24
Расширение имени файла BK25
Макроопределение BK25
Макроподстановка BK25
Макропроцессор BK25
Макросредства BK25
Лексика BK25
Идентификатор BK25
Синтаксис BK25
Семантика BK25
Генерация кода BK25
Объектный модуль BK25
Модульное программирование BK25
Библиотека объектных модулей BK25
Компоновка BK25
Программирование без goto BK31
Итерационный циклBK33
Метод последовательных приближений BK33
Строка BK34
Строковая константа BK34
Машинно-ориентированные операции BK35
Операции над машинными словами BK35
Поразрядные операции BK35
Поразрядная операция ИЛИ BK35
Поразрядная операция ИСКЛЮЧАЮЩЕЕ ИЛИ BK35
Поразрядная операция ИНВЕРСИИ BK35
Операция СДВИГА ВПРАВО BK35
Операция СДВИГА ВЛЕВО BK35
Маска BK35
Установка битов BK35
Выделение битов BK35
Маскирование BK35
Проверка битов BK35
Очистка битов BK35
Неравнозначность BK35
Сложение по модулю 2 BK35
Инверсия битов BK35
Логический сдвиг BK35
Арифметический сдвиг BK35
Ключ BK37
Последовательный поиск BK37
Линейный поиск BK37
Двоичный поиск BK37
Сортировка подсчетом BK37
Сортировка вставками BK37
Сортировка выбором BK37
Обменная сортировка BK37
Сортировка слиянием BK37
Сортировка методом пузырька BK37
Шейкер-сортировка BK37
Быстрая сортировка BK37
Медиана BK37
Поразрядная сортировка BK37
Простая вставка BK37
Вставка погружением BK37
Сортировка Шелла BK37
Простое слияние BK37
Поразрядная распределяющая сортировка BK37
Оперативная память BK41
Адресом памяти BK41
Прямая адресация BK41
Косвенная адресация BK41
Указатель BK41
Назначение указателя BK41
Указуемая переменная BK41
Косвенное обращение по указателю BK41
Тип указателя BK41
Адресная арифметика BK41
Передача параметров по значению BK41
Передача параметров по ссылке BK41
Сравнение указателей на равенствоBK41
Преобразование типа указателя BK41
Указатель на пустой типvoid* BK41
Сравнение указателей на больше-меньше BK41
Разность значений указателей BK41
Указатель на строку BK41
Строковая константа BK41
Элемент структурыBK42
Объект BK42
Производный тип данных BK43
Выделение составляющего типа данныхBK43
Преобразование типа указателя BK44
Регистровая переменная BK46
Динамические переменныеBK51
Динамическая память BK51
Виртуальный массив BK52
Дескриптор файла BK57
Двоичный файл произвольного доступа BK57
Текущая позиция в файле BK57
Смещение в файле BK57
Адрес в файле BK57
Файловый указатель BK57
Объект BK61
Метод BK61
Класс BK61
Наследование BK61
Полиморфизм BK61
Передача параметра по ссылке BK62
Базовый класс BK64
Производный класс BK64
Виртуальная функция BK64
Абстрактным базовый класс BK64
Приложение 1. Операции и приоритеты
─────────────────────────────────────
┌─────┬─────────────────────────────────────────┬───────┐
│Прио─│ Операции │Направ-│
│ритет│ │ление│
├─────┼─────────────────────────────────────────┼───────┤
│1│ () (вызов функции), [], ->, "." │ ────> │
│2│ !, ~, +, - (унарные), ++, --, *, (тип), │ <──── │
│ │ sizeof, (new,delete - Си++) │ │
│3│ .* , ->* - Си++ │ ────> │
│4│ *, /, % (бинарные) │ ────> │
│5│ +, - (бинарные) │ ────> │
│6│ <<, >> │ ────> │
│7│ <, <=, =>, > │ ────> │
│8│ ==, != │ ────> │
│9│ & (поразрядное) │ ────> │
│ 10│ ^ │ ────> │
│ 11│ | (поразрядное) │ ────> │
│ 12│ && (логическое) │ ────> │
│ 13│ || (логическое) │ ────> │
│ 14│ ?: (условная) │ <──── │
│ 15│ =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, │ <──── │
│ │ >>= │ │
│ 16│ "," (запятая) │ ────> │
└─────┴─────────────────────────────────────────┴───────┘
Приложение 2. Интерфейс командной строки main
─────────────────────────────────────────────
// Вывод компонент командной строки, переданной в main
// Командная строка разбиваетсяна части,каждая
// компонента оформляется отдельной строкой
#include
// ┌─────────────── количество компонент
// │ ┌── массив указателей на компоненты
main(int narg, char *argv[])
{ for
(int i=0; i >test.exe aaa 100 bbbb
┌──────────┬─────┬─────┬─────┐ │test.exe