% \iffalse ^^A -*- coding: koi8-r -*-
%<*driver>
\documentclass[a4paper,dvips]{article}

\usepackage{doc}
\usepackage{verbatim}
\EnableCrossrefs
%%\DisableCrossrefs
%%\OnlyDescription
\CodelineIndex

\DoNotIndex{\-,\\,\ }
\DoNotIndex{\addtolength}
\DoNotIndex{\begin\bf,\bfseries}
\DoNotIndex{\centerline,\cline,\CurrentOption,\cyrg}
\DoNotIndex{\DeclareOption,\define@key,\draft}
\DoNotIndex{\edef,\end}
\DoNotIndex{\itshape}
\DoNotIndex{\line,\linethickness}
\DoNotIndex{\makebox}
\DoNotIndex{\newcommand,\newsavebox}
\DoNotIndex{\put}
\DoNotIndex{\renewcommand}
\DoNotIndex{\savebox}
\DoNotIndex{\unitlength,\usebox}
\DoNotIndex{\if,\else,\fi}
%%\DoNotIndex{}
%%\DoNotIndex{}

\usepackage{pscyr}
\usepackage{type1cm}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}

\renewcommand{\rmdefault}{far}

%%\usepackage{url}
\usepackage{graphicx}

\MakeShortVerb{\|}

\newcommand{\ndm}{\par\noindent\DescribeMacro}

\author{Вячеслав~А.~Федоров\\ 
Тольяттинский государственный университет,\\
Центр новых информационных технологий
}
\title{Класс ЕСКД}
\date{\small $ $Id: eskd.dtx,v 1.3 2004/10/15 05:34:29 fva Exp $ $}
\begin{document}
\DocInput{eskd.dtx}
\end{document}
%</driver>
%
%% Copyright 2004 Vjacheslav A. Fyodorov
%
% This program may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.2 or later is part of all distributions of LaTeX 
% version 1999/12/01 or later.
%
% This program consists of the files eskd.dtx and example.tex

% \fi
%
%\CheckSum{987}
% \maketitle 
% \begin{abstract}
%   This class designed for making documents in accordance with russian
%   (and probably post USSR) standards for designers. So it documented
%   in russian. PsCyr package required.
% \end{abstract}

% Идея разработки класса возникла из необходимости создания большого
% набора документов в формате похожем на ЕСКД. Имеющиеся на тот момент
% шаблоны для текстовых процессоров пугали своей странной реакцией на смену
% принтера и объем документа, поэтому все и началось.

% Несмотря на название, класс не претендует на стопроцентное следование
% ЕСКД: частично устаревшая  документация и, конечно, недостаток времени
% не позволили сделать все как должно быть,
% но наверное, плохой класс лучше чем его отсутствие.

% Итак, что мы умеем:
% \begin{itemize}
% \item рисовать рамки по краю страницы. Три вида --- для титульного
%   листа, первой и последующих страниц,
% \item заполнять поля рамок,
% \item готовить документ для двусторонней печати,
% \item регулировать высоту рамки,
% \item печатать титульный лист и лист изменений.
% \end{itemize}

% \section{Параметры класса}

% \ndm{twoside} --- двусторонняя печать. По умолчанию
% --- нет (односторонняя).
% \ndm{height} --- высота рамки в миллиметрах (принтеры
% бывают разные). По умолчанию --- 282. Значение параметра сохраняется в
% макрокоманде \DescribeMacro{\eskdheight}|\eskdheight|.
% \ndm{title} --- печать титульного листа. По умолчанию
% --- нет (без титульного листа).
% \ndm{encoding} --- кодировка текста
% cp866,koi8-r,cp1251\dots По умолчанию --- koi8-r. Значение параметра
% сохраняется в макрокоманде \DescribeMacro{\eskdencoding}|\eskdencoding|.
% \ndm{year} --- год документа.  По умолчанию
% --- |\number\year| --- текущий.  Значение параметра сохраняется в
% макрокоманде \DescribeMacro{\eskdyear}|\eskdyear|.
% \ndm{draft} --- черновик. По умолчанию
% --- нет (чистовик). В режиме черновика на строках переполнения
% печатаются пометки.

% \section{Заполнение полей документа}

% \begin{figure}[htbp]
%   \centering
%   \includegraphics[width=\textwidth]{example}
%     \caption{Поля документа}
%   \label{fig:fields}
% \end{figure}

% На рис.~\ref{fig:fields} представлен результат форматирования файла
% содержащего команды\footnote{чистая обратная сторона титульного
% листа не показана}: 
% 
% {\tt\verbatiminput{example}
% }

% \section{Команды формирования полей документа}

% \subsection{Команды с одним параметром}

% \ndm{\docName} --- ( синоним |\fI|) наименование изделия/документа ---
% графа 1.
% \ndm{\docSignature} --- (|\fII|)    обозначение --- графа 2.
% \ndm{\docLabel} --- (|\fIX|) графа 9.
% \ndm{\middleLabel} --- (|\fX|) графа 10 --- недостающая должность.
% \ndm{\docAuthor} --- (|\fXIi|)   фамилия автора.
% \ndm{\docChecker} --- (|\fXIii|)  фамилия проверившего.
% \ndm{\middleName} ---    (|\fXIiii|) фамилия неизвестного.
% \ndm{\normController} --- (|\fXIiv|)  фамилия нормоконтролера.
% \ndm{\approvedBy} ---    (|\fXIv|)   фамилия утвердившего.
% \ndm{\titleTop} ---      (|\tfI|)    шапка титульного листа.
% \ndm{\tfIII} --- поле согласовано/утверждаю титульного листа. Генерируется
%                       командами |\titleAgreedBy| и |\titleApprovedBy|.
% \ndm{\titleName} ---     (|\tfIV|)   наименование (на титульном
% листе). По умолчанию берется из |\docName|.
% \ndm{\titleSignature} --- (|\tfVI|)   обозначение. По умолчанию
% берется из |\docSignature|.
% \ndm{\titleBottom} --- нижнее поле титула. По умолчанию берется  год
% из параметра класса. 

% \subsection{Команды с двумя параметрами}


% \ndm{\titleApprovedBy} --- задание должности и фамилии утвердившего на
% титульном листе. Параметры соответственно --- должность и фамилия.

% \ndm{\titleAgreedBy} ---  должность и фамилия согласовавшего на
% титульном листе. Можно использовать несколько раз --- дополнительные
% появятся внизу слева. 

% \ndm{\titleDesignedBy} --- должность соавтора, фамилия соавтора.
%       Можно использовать несколько раз.


% \section{Лист регистрации изменений}

% Команда \DescribeMacro{\eskdListOfChanges}|\eskdListOfChanges|
% печатает лист регистрации изменений с новой страницы.


% \bigskip
% \StopEventually{Конец описания пакета ЕСКД. Вопросы задавать по
%  адресу: {\it V.Fyodorov@tltsu.ru}}



% \section{Детали реализации}


% \subsection{Идентификация}

%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e} \ProvidesClass{eskd}[2004/10/12 a4 eskd
format (V.Fyodorov@tltsu.ru)]
%    \end{macrocode}

% \subsection{Создание и инициализация параметров}
% двусторонняя печать:
%    \begin{macrocode}
\newif\ifeskd@twoside
\eskd@twosidefalse

%    \end{macrocode}
% титульный лист:
%    \begin{macrocode}
\newif\ifeskd@title
\eskd@titlefalse

%    \end{macrocode}
% высота рамки в миллиметрах по умолчанию:
%    \begin{macrocode}
\newcommand{\eskdheight}{282}
%    \end{macrocode}
% кодировка по умолчанию:
%    \begin{macrocode}
\newcommand{\eskdencoding}{koi8-r}
%    \end{macrocode}
% год документа:
%    \begin{macrocode}
\newcommand{\eskdyear}{\number\year}

%    \end{macrocode}
% толщина тонкой линии в мм:\footnote{не умею делить вещественные
% числа, поэтому второй параметр (должен быть равен половине от первого)}
%    \begin{macrocode}
\newcommand{\eskd@thin}{0.2}
\newcommand{\eskd@half@thin}{0.1}

%    \end{macrocode}
% ... толстой:\footnote{аналогично}
%    \begin{macrocode}
\newcommand{\eskd@thick}{0.4}
\newcommand{\eskd@half@thick}{0.2}
%    \end{macrocode}

% \subsection{Обработка параметров класса}
%    \begin{macrocode}
\RequirePackage{keyval}

\define@key{eskd}{height}{\renewcommand{\eskdheight}{#1}}
\define@key{eskd}{encoding}{\renewcommand{\eskdencoding}{#1}}
\define@key{eskd}{year}{\renewcommand{\eskdyear}{#1}}

\DeclareOption{title}{\eskd@titletrue}

\DeclareOption{twoside}{%
  \eskd@twosidetrue
  \PassOptionsToClass{\CurrentOption}{article}
  \PassOptionsToPackage{twosideshift=0pt}{geometry}
  }

\DeclareOption{draft}{\PassOptionsToClass{\CurrentOption}{article}}

\DeclareOption*{\edef\@tempa{%
    \noexpand\setkeys{eskd}{\CurrentOption}}\@tempa}

\ProcessOptions\relax

\LoadClass[a4paper]{article}
%    \end{macrocode}

% \subsection{Дополнительные пакеты}

%    \begin{macrocode}
\RequirePackage[koi8-r,\eskdencoding]{inputenc}
\RequirePackage[russian]{babel}
\RequirePackage[T2A]{fontenc}
\RequirePackage{rotating}
\RequirePackage{lastpage}
\RequirePackage{ifthen}
\RequirePackage{fancyhdr}

\RequirePackage{pscyr}
\renewcommand{\rmdefault}{far}

\RequirePackage[left=24mm,right=11mm%
,top=10mm,nofoot,headsep=0pt]{geometry}
%    \end{macrocode}


% \subsection{Управление размером нижнего поля}

% Команда \DescribeMacro{\set@eskd@bottom}|\set@eskd@bottom|
% устанавливает нижнее поле текста относительно нижней рамки.

%    \begin{macrocode}
\newcommand{\set@eskd@bottom}[1]{%
  \setlength{\textheight}{\eskdheight mm}
  \addtolength{\textheight}{-#1}
  \addtolength{\textheight}{5 mm}
  }
%    \end{macrocode}


% \subsection{Вертикальная неизменяемая часть. 148x12}

% Не будем дважды рисовать одно и то же. Макет
% будет в виде текста:

% \begin{verbatim}
% +-----------------------------------------------------------------------+
% |Инв. N подл.| Подп. и дата | Взам. инв. N | Инв. N дубл.| Подп. и дата |
% |------------|--------------|--------------|-------------|--------------|
% |            |              |              |             |              |
% \end{verbatim}

% Повернутая на 90 градусов относительно левого нижнего угла.

%    \begin{macrocode}
\newsavebox{\eskd@vertical@frame}

\newcommand{\make@eskd@vertical@frame}{%
        \unitlength 1mm %
    \savebox{\eskd@vertical@frame}(0,0){%
      \begin{rotate}{90}
        \begin{picture}(0,0)(0,0)
          \linethickness{\eskd@thick mm}
%    \end{macrocode}
% вертикальные линии:
%    \begin{macrocode}
%                                
          \put(0,0){\line(0,1){12}}
          \put(25,0){\line(0,1){12}}
          \put(60,0){\line(0,1){12}}
          \put(85,0){\line(0,1){12}}
          \put(110,0){\line(0,1){12}}
          \put(145,0){\line(0,1){12}}
%    \end{macrocode}
% углы:
%    \begin{macrocode}
          \put(0,12){\line(0,1){\eskd@half@thick}}
          \put(145,12){\line(0,1){\eskd@half@thick}}
%    \end{macrocode}
% горизонтальные линии:
%    \begin{macrocode}
%                                
          \put(0,7){\line(1,0){145}}
          \put(0,12){\line(1,0){145}}
%    \end{macrocode}
% текст:
%    \begin{macrocode}
%                                
          \put(12.5,9.5){\makebox(0,0){\itshape
              \textar{Инв. \textnumero\ подл.}}}
          \put(42.5,9.5){\makebox(0,0){\itshape
              \textar{Подп. и дата}}}
          \put(72.5,9.5){\makebox(0,0){\itshape
              \textar{Взам. инв. \textnumero}}}
          \put(97.5,9.5){\makebox(0,0){\itshape
              \textar{Инв. \textnumero\ дубл.}}}
          \put(127.5,9.5){\makebox(0,0){\itshape
              \textar{Подп. и дата}}}
                                %
        \end{picture}%
        \end{rotate}
      }}

%    \end{macrocode}

% \subsection{Граница поля с основанием в левом верху.}

% \begin{verbatim}
%
%    O----------------------------------+
%    |                     ^            |
%    |                     |            |
%    |               \eskdheight mm     |
%    |                     |            |
%    |<-------- 185 mm ----|----------->|
%    |                     |            |
%    |                     v            |
%    +----------------------------------+
%
% \end{verbatim}
%    \begin{macrocode}
\newsavebox{\eskd@border}

\newcommand{\make@eskd@border}{%
   \savebox{\eskd@border}(0,0){%
      \unitlength 1mm
      \begin{picture}(0,0)(0,\eskdheight)
         \linethickness{\eskd@thick mm}
%    \end{macrocode}
% рамка:
%    \begin{macrocode}
         \put(0,0){\line(1,0){185}}             
         \put(0,\eskdheight){\line(1,0){185}}
         \put(0,0){\line(0,1){\eskdheight}}
         \put(185,0){\line(0,1){\eskdheight}}
%    \end{macrocode}
% углы:
%    \begin{macrocode}
         \put(-\eskd@half@thick,0){\line(1,0){\eskd@half@thick}}
         \put(-\eskd@half@thick,\eskdheight){\line(1,0){\eskd@half@thick}}
         \put(185,0){\line(1,0){\eskd@half@thick}}
         \put(185,\eskdheight){\line(1,0){\eskd@half@thick}}
      \end{picture}
}}


%    \end{macrocode}

% \subsection{Надпись}
%
%   Надпись общую разобьем на три куска из которых будем складывать
%   четную/нечетную и общую часть.
%
% \subsubsection{Левая часть надписи.}
% \begin{verbatim}
% ------+------+----------+-------+-----
%       |      |          |       |
% ------+------+----------+-------+-----
%       |      |          |       |
% ------+------+----------+-------+-----
%  Изм. | Лист | N докум. | Подп. | Дата
% \end{verbatim}
%    \begin{macrocode}

\newsavebox{\eskd@common@left}

\newcommand{\make@eskd@common@left}{%
  \savebox{\eskd@common@left}(0,0){%
    \unitlength 1mm %
    \begin{picture}(0,0)(0,0)
      \linethickness{\eskd@thick mm}
%    \end{macrocode}
% толстые вертикальные:
%    \begin{macrocode}
%                                
      \put(7,0){\line(0,1){15}}
      \put(17,0){\line(0,1){15}}
      \put(40,0){\line(0,1){15}}
      \put(55,0){\line(0,1){15}}
%    \end{macrocode}
% толстые горизонтальные:
%    \begin{macrocode}
%                                
      \put(0,5){\line(1,0){65}}
      \put(0,15){\line(1,0){65}}
%    \end{macrocode}
% тонкие горизонтальные:
%    \begin{macrocode}
%                                
      \linethickness{\eskd@thin mm}
      \put(0,10){\line(1,0){65}}
%    \end{macrocode}
% текст:
%    \begin{macrocode}
%                                
      \put(3.5,2.5){\makebox(0,0){\footnotesize\itshape\textar{Изм.}}}
      \put(12,2.5){\makebox(0,0){\itshape\textar{Лист}}}
      \put(28.5,2.5){\makebox(0,0){\itshape
          \textar{\textnumero\ докум.}}}
      \put(47.5,2.5){\makebox(0,0){\itshape\textar{Подп.}}}
      \put(60,2.5){\makebox(0,0){\small\itshape\textar{Дата}}}
%
    \end{picture}
    }}
%    \end{macrocode}

% \subsubsection{Дырка (поле 2). 110x15}
% \begin{verbatim}
% +--------------+
% |              |
% |              |
%
% \end{verbatim}

%    \begin{macrocode}
%
\newsavebox{\eskd@common@hole}
%
\newcommand{\make@eskd@common@hole}{%
  \savebox{\eskd@common@hole}(0,0){%
    \unitlength 1mm
    \begin{picture}(0,0)(0,0)
      \linethickness{\eskd@thick mm}
%    \end{macrocode}
% толстые вертикальные:
%    \begin{macrocode}
%                                
      \put(0,0){\line(0,1){15}}
      \put(110,0){\line(0,1){15}}
%    \end{macrocode}
% толстые горизонтальные:
%    \begin{macrocode}
%                                
      \put(0,15){\line(1,0){110}}
                                %
    \end{picture}
    }}
%    \end{macrocode}

% \subsubsection{Лист/страница}

%    \begin{macrocode}

\newsavebox{\eskd@common@page}

\newcommand{\make@eskd@common@page}{%
  \savebox{\eskd@common@page}(0,0){%
    \unitlength 1mm
    \begin{picture}(0,0)(0,0)
      \linethickness{\eskd@thick mm}
%    \end{macrocode}
% толстые горизонтальные:
%    \begin{macrocode}
%                                
      \put(0,15){\line(1,0){10}}
      \put(0,8){\line(1,0){10}}
                                %
    \end{picture}
    }}

%    \end{macrocode}

% \subsection{Обычная страница}

% команда создающая обычный стиль страницы
%    \begin{macrocode}
\newcommand{\make@eskd@common@style}{%
  \newsavebox{\eskd@common@list}
%    \end{macrocode}
% надпись перед номером страницы:
%    \begin{macrocode}
  \savebox{\eskd@common@list}{\itshape
    \textar{\ifeskd@twoside Стр.\else Лист\fi}}
%
%    \end{macrocode}
% надпись внизу страницы:
%    \begin{macrocode}
  \newsavebox{\eskd@common@gost}
  \savebox{\eskd@common@gost}{\scriptsize\textar{ГОСТ 2.104-68 
      Форма 2\ifeskd@twoside б\else a\fi}}
%    \end{macrocode}
% обозначение:
%    \begin{macrocode}
  \newsavebox{\eskd@common@signature}
  \savebox{\eskd@common@signature}{{\inputencoding{\eskdencoding}\eskd@ii}}
%
%    \end{macrocode}
% собственно стиль:
%    \begin{macrocode}
  \fancypagestyle{common}{% 
  \fancyhf{}
  \fancyhead[L]{%
    \unitlength 1mm
    \begin{picture}(0,0)(3,-6)
      \put(0,0){\usebox{\eskd@border}}
      \put(0,-\eskdheight){\usebox{\eskd@vertical@frame}}
      \put(0,-\eskdheight){\usebox{\eskd@common@left}}
      \put(65,-\eskdheight){\usebox{\eskd@common@hole}}
      \put(175,-\eskdheight){\usebox{\eskd@common@page}}
      \put(0,-\eskdheight){\begin{picture}(0,0)
          \put(180,4){\makebox(0,0){\large\textbf{\textar{\thepage}}}}
          \put(120,7.5){\makebox(0,0){\usebox{\eskd@common@signature}}}
          \put(180,11.5){\makebox(0,0){\usebox{\eskd@common@list}}}
          \put(185,\ifeskd@twoside-1\else0\fi){\makebox(0,0)[rt]{%
              \usebox{\eskd@common@gost}}}
        \end{picture}}
    \end{picture}
    }
  \ifeskd@twoside
  \fancyhead[LE]{%
    \unitlength 1mm
    \begin{picture}(0,0)(3,-6)
      \put(0,0){\usebox{\eskd@border}}
      \put(120,-\eskdheight){\usebox{\eskd@common@left}}
      \put(10,-\eskdheight){\usebox{\eskd@common@hole}}
      \put(0,-\eskdheight){\usebox{\eskd@common@page}}
      \put(0,-\eskdheight){\begin{picture}(0,0)
          \put(5,4){\makebox(0,0){\large\textbf{\textar{\thepage}}}}
          \put(65,7.5){\makebox(0,0){\usebox{\eskd@common@signature}}}
          \put(5,11.5){\makebox(0,0){\usebox{\eskd@common@list}}}
          \put(185,\ifeskd@twoside-1\else0\fi){\makebox(0,0)[rt]{%
              \usebox{\eskd@common@gost}}}
        \end{picture}}
    \end{picture}
    }
  \fi
  \renewcommand{\headrulewidth}{0pt}
  \renewcommand{\footrulewidth}{0pt}}
}


%    \end{macrocode}

% \subsection{Стиль первого листа}

%    \begin{macrocode}

\newcommand{\make@eskd@first@style}{%
  \newsavebox{\eskd@first@text}
  \savebox{\eskd@first@text}{%
    \unitlength 1mm
    \begin{picture}(0,0)(0,0)
      \put(185,-1){\makebox(0,0)[rt]{\scriptsize 
          ГОСТ 2.104-68 Форма 2}}
      \put(3.5,27.5){\makebox(0,0){\footnotesize\itshape Изм.}}
      \put(12,27.5){\makebox(0,0){\itshape Лист}}
      \put(28.5,27.5){\makebox(0,0){\itshape\textnumero\ докум.}}
      \put(47.5,27.5){\makebox(0,0){\itshape Подп.}}
      \put(60,27.5){\makebox(0,0){\small\itshape Дата}}
%
      \put(8.5,22.5){\makebox(0,0){\itshape Разраб.}}
      \put(8.5,17.5){\makebox(0,0){\itshape Пров.}}
      \put(8.5,7.5){\makebox(0,0){\itshape Н. контр.}}
      \put(8.5,2.5){\makebox(0,0){\itshape Утв.}}
%
      \put(142.5,22.5){\makebox(0,0){\itshape Лит.}}
      \put(157.5,22.5){\makebox(0,0){\itshape
          \ifeskd@twoside Стр.\else Лист\fi}}
      \put(175,22.5){\makebox(0,0){\itshape
          \ifeskd@twoside Страниц\else Листов\fi}}

    \end{picture}
    }
%
  \fancypagestyle{first}{%
    \fancyhf{}
    \fancyhead[L]{%
      \unitlength 1mm
      \begin{picture}(0,0)(3,-6)
        \put(0,0){\usebox{\eskd@border}}
        \put(0,-\eskdheight){\usebox{\eskd@vertical@frame}}
        \put(0,-\eskdheight){\makebox(0,0){%
            \unitlength 1mm
            \begin{picture}(0,0)(0,0)
              \put(157.5,17.5){\makebox(0,0){\ifthenelse
                  {\pageref{LastPage}=1}{}{\thepage}}}
              \put(175,17.5){\makebox(0,0){\pageref{LastPage}}}
              \put(18,22.5){\makebox(0,0)[l]{\eskd@xiI}}
              \put(18,17.5){\makebox(0,0)[l]{\eskd@xiII}}
              \put(18,12.5){\makebox(0,0)[l]{\eskd@xiIII}}
              \put(18,7.5){\makebox(0,0)[l]{\eskd@xiIV}}
              \put(18,2.5){\makebox(0,0)[l]{\eskd@xiV}}
              \put(67,12.5){\makebox(0,0)[l]{%
                  \parbox{66mm}{\large\raggedright\eskd@i}}}
              \put(125,32.5){\makebox(0,0){\LARGE\eskd@ii}}
              \put(160,7.5){\makebox(0,0){\eskd@ix}}
              \put(8.5,12.5){\makebox(0,0){\itshape\eskd@x}}
              \linethickness{\eskd@thick mm}
%    \end{macrocode}
% vertical lines thick:
%    \begin{macrocode}
%                                
              \put(7,25){\line(0,1){15}}
              \put(17,0){\line(0,1){40}}
              \put(40,0){\line(0,1){40}}
              \put(55,0){\line(0,1){40}}
              \put(65,0){\line(0,1){40}}
              \put(135,0){\line(0,1){25}}
              \put(140,15){\line(0,1){5}}
              \put(145,15){\line(0,1){5}}
              \put(150,15){\line(0,1){10}}
              \put(165,15){\line(0,1){10}}
%    \end{macrocode}
% horizontal lines thick:
%    \begin{macrocode}
%                                
              \put(0,40){\line(1,0){185}}
              \put(0,30){\line(1,0){65}}
              \put(0,25){\line(1,0){185}}
              \put(135,20){\line(1,0){50}}
              \put(135,15){\line(1,0){50}}
%    \end{macrocode}
% horizontal lines thin:
%    \begin{macrocode}
%                                
              \linethickness{\eskd@thin mm}
              \put(0,35){\line(1,0){65}}
              \multiput(0,5)(0,5){4}{\line(1,0){65}}
%    \end{macrocode}
% labels:
%    \begin{macrocode}
%                                
              \put(0,0){\usebox{\eskd@first@text}}
                                %       
            \end{picture}
            }}
      \end{picture}
      }
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}}
  }
%    \end{macrocode}
% \subsection{Стиль титульного листа}
%    \begin{macrocode}

\newcommand{\make@eskd@title@style}{%
  \newsavebox{\eskd@title@text}
  \savebox{\eskd@title@text}{\scriptsize\textar{Ф. 1288}}
  \newsavebox{\eskd@agr}
  \savebox{\eskd@agr}{\usefont{T2A}{far}{b}{n}\Large Согласовано}
  \newsavebox{\eskd@appr}
  \savebox{\eskd@appr}{\usefont{T2A}{far}{b}{n}\Large Утверждаю}
  \fancypagestyle{title}{%
    \fancyhf{}
    \fancyhead[L]{%
      \unitlength 1mm
      \begin{picture}(0,0)(3,-6)
        \put(0,0){\usebox{\eskd@border}}
        \put(0,-\eskdheight){\usebox{\eskd@vertical@frame}}
        \put(185,-\eskdheight){%
          \begin{picture}(0,0)
            \put(0,-1){\makebox(0,0)[rt]{\usebox{\eskd@title@text}}}
          \end{picture}}
      \end{picture}
      }
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}}
  }
%    \end{macrocode}

% \subsection{Определение команд заполнения полей}

% \subsubsection{Наименование изделия/документа --- графа 1}
% \DescribeMacro{\docName}\DescribeMacro{\eskd@i}
%    \begin{macrocode}
\newcommand{\eskd@i}{}
\newcommand{\docName}[1]{\renewcommand{\eskd@i}{#1}}
%    \end{macrocode}
% синоним :\DescribeMacro{\fI}
%    \begin{macrocode}
\newcommand{\fI}{\docName}

%    \end{macrocode}
% \subsubsection{Обозначение - графа 2.}
%    \begin{macrocode}
\newcommand{\eskd@ii}{}
\newcommand{\docSignature}[1]{\renewcommand{\eskd@ii}{#1}}
%    \end{macrocode}
% синоним :
%    \begin{macrocode}
\newcommand{\fII}[1]{\renewcommand{\eskd@ii}{#1}}

%    \end{macrocode}
% \subsubsection{Графа 9.}
%    \begin{macrocode}
\newcommand{\eskd@ix}{}
\newcommand{\fIX}[1]{\renewcommand{\eskd@ix}{#1}}
\newcommand{\docLabel}[1]{\renewcommand{\eskd@ix}{#1}}

%    \end{macrocode}
% \subsubsection{Графа 10 - недостающая должность.}
%    \begin{macrocode}
\newcommand{\eskd@x}{}
\newcommand{\middleLabel}[1]{\renewcommand{\eskd@x}{#1}}
\newcommand{\fX}[1]{\renewcommand{\eskd@x}{#1}}

%    \end{macrocode}
% \subsubsection{Фамилия автора.}
%    \begin{macrocode}
\newcommand{\eskd@xiI}{}
\newcommand{\docAuthor}[1]{\renewcommand{\eskd@xiI}{#1}}
%    \end{macrocode}
% синоним :
%    \begin{macrocode}
\newcommand{\fXIi}[1]{\renewcommand{\eskd@xiI}{#1}}

%    \end{macrocode}
% \subsubsection{Фамилия проверившего.}
%    \begin{macrocode}
\newcommand{\eskd@xiII}{}
\newcommand{\docChecker}[1]{\renewcommand{\eskd@xiII}{#1}}
%    \end{macrocode}
% синоним :
%    \begin{macrocode}
\newcommand{\fXIii}[1]{\renewcommand{\eskd@xiII}{#1}}

%    \end{macrocode}
% \subsubsection{Фамилия неизвестного.}
%    \begin{macrocode}
\newcommand{\eskd@xiIII}{}
\newcommand{\middleName}[1]{\renewcommand{\eskd@xiIII}{#1}}
\newcommand{\fXIiii}[1]{\renewcommand{\eskd@xiIII}{#1}} 

%    \end{macrocode}
% \subsubsection{Фамилия нормоконтролера.}
%    \begin{macrocode}
\newcommand{\eskd@xiIV}{}
\newcommand{\normController}[1]{\renewcommand{\eskd@xiIV}{#1}}
\newcommand{\fXIiv}[1]{\renewcommand{\eskd@xiIV}{#1}} 

%    \end{macrocode}
% \subsubsection{Фамилия утвердившего.}
%    \begin{macrocode}
\newcommand{\eskd@xiV}{}
\newcommand{\approvedBy}[1]{\renewcommand{\eskd@xiV}{#1}}
\newcommand{\fXIv}[1]{\renewcommand{\eskd@xiV}{#1}} 

%    \end{macrocode}

% \subsection{Команды заполнения титульного листа.}
%    \begin{macrocode}
\newcommand{\eskd@title@i}{}
\newcommand{\titleTop}[1]{\renewcommand{\eskd@title@i}{#1}}
\newcommand{\tfI}[1]{\renewcommand{\eskd@title@i}{#1}} 

%    \end{macrocode}
% нужен <утверждаю>:
%    \begin{macrocode}
\newif\ifeskd@title@appr \eskd@title@apprfalse   
%    \end{macrocode}
% нужен <согласовано>:
%    \begin{macrocode}
\newif\ifeskd@title@agr  \eskd@title@agrfalse    

%    \end{macrocode}
% список разработчиков (дополнительно):
%    \begin{macrocode}
\newcommand{\eskd@des@list}{} 

%    \end{macrocode}
% должность утвердившего:
%    \begin{macrocode}
\newcommand{\eskd@title@iii@right@position}{} 
%    \end{macrocode}
% фамилия утвердившего:
%    \begin{macrocode}
\newcommand{\eskd@title@iii@right@name}{} 
\newcommand{\titleApprovedBy}[2]{%
  \renewcommand{\eskd@title@iii@right@position}{#1}
  \renewcommand{\eskd@title@iii@right@name}{#2}
  \eskd@title@apprtrue
  }

%    \end{macrocode}
% должность согласовавшего:
%    \begin{macrocode}
\newcommand{\eskd@title@iii@left@position}{} 
%    \end{macrocode}
% фамилия согласовавшего:
%    \begin{macrocode}
\newcommand{\eskd@title@iii@left@name}{} 
%    \end{macrocode}
% \subsubsection{Список согласовавших (дополнительно).}
%    \begin{macrocode}
\xdef\eskd@agr@list{} 
\newcommand{\titleAgreedBy}[2]{%
%    \end{macrocode}
% добавить в дополнительный список:
%    \begin{macrocode}
  \ifeskd@title@agr 
  \xdef\eskd@agr@list{\eskd@agr@list#1\par\vrule 
    depth 0.8pt height -0.4pt width31mm~#2\par
    ''\vrule depth 0.8pt height -0.4pt width8mm''\vrule
    depth 0.8pt height -0.4pt width20mm\ \eskdyear\ \cyrg\par\vskip 3mm}
  \else
  \renewcommand{\eskd@title@iii@left@position}{#1}
  \renewcommand{\eskd@title@iii@left@name}{#2}
  \eskd@title@agrtrue
  \fi
  }

%    \end{macrocode}
% \subsubsection{Список титульных авторов.}
%    \begin{macrocode}
\xdef\eskd@author@list{} 
\newcommand{\titleDesignedBy}[2]{%
  \xdef\eskd@author@list{\eskd@author@list#1\par\vrule 
    depth 0.8pt height -0.4pt width31mm~#2\par
    ''\vrule depth 0.8pt height -0.4pt width8mm''\vrule
    depth 0.8pt height -0.4pt width20mm\ \eskdyear\ \cyrg\par\vskip 3mm}
  }

\newcommand{\tfIII}{\hyphenpenalty=10000 %
  \begin{tabular}{@{\hspace{5mm}}p{80mm}@{\hspace{10mm}}p{80mm}}%
    \ifeskd@title@agr  \hspace{15mm}\usebox{\eskd@agr}\fi &%
    \ifeskd@title@appr \hspace{15mm}\usebox{\eskd@appr}\fi \\[3mm]
    \ifeskd@title@agr{\raggedright \eskd@title@iii@left@position}\fi &%
    \ifeskd@title@appr{\raggedright 
      \eskd@title@iii@right@position}\fi\\[3mm]
    \ifeskd@title@agr \rule[-1mm]{31mm}{0.4pt}~%
    \eskd@title@iii@left@name \fi &%
    \ifeskd@title@appr \rule[-1mm]{31mm}{0.4pt}~%
    \eskd@title@iii@right@name \fi\\[3mm]
    \ifeskd@title@agr ''\rule[-1mm]{8mm}{0.4pt}''\rule[-1mm]{20mm}{0.4pt}
    \eskdyear\ \cyrg\fi &%
    \ifeskd@title@appr ''\rule[-1mm]{8mm}{0.4pt}''\rule[-1mm]{20mm}{0.4pt}
    \eskdyear\ \cyrg\fi 
  \end{tabular}
  }

%    \end{macrocode}
% \subsubsection{Наименование.}
%    \begin{macrocode}
\newcommand{\eskd@title@iv}{\eskd@i}
\newcommand{\titleName}[1]{\renewcommand{\eskd@title@iv}{#1}}
\newcommand{\tfIV}[1]{\renewcommand{\eskd@title@iv}{#1}} 

%    \end{macrocode}
% \subsubsection{Обозначение.}
%    \begin{macrocode}
\newcommand{\eskd@title@vi}{\eskd@ii}
\newcommand{\titleSignature}[1]{\renewcommand{\eskd@title@vi}{#1}}
\newcommand{\tfVI}[1]{\renewcommand{\eskd@title@vi}{#1}} 

%    \end{macrocode}

% \subsubsection{Год документа.}

%    \begin{macrocode}
\newcommand{\eskd@title@bottom}{\eskdyear}
\newcommand{\titleBottom}[1]{\renewcommand{\eskd@title@bottom}{#1}}

%    \end{macrocode}
% \subsection{Создание титульного листа.}
%    \begin{macrocode}
\renewcommand{\maketitle}{}
\newcommand{\eskd@maketitle}{%
\thispagestyle{title}
%    \end{macrocode}
% следующая страница первая:
%    \begin{macrocode}
\set@eskd@bottom{55mm}                  
\usefont{T2A}{far}{m}{n}
%    \end{macrocode}
% увеличить нормальный шрифт:
%    \begin{macrocode}
\large                                  
%    \end{macrocode}
% пропуск перед шапкой:
%    \begin{macrocode}
\vspace*{1mm}                           
%    \end{macrocode}
% \subsubsection{Шапка титульного листа.}
%    \begin{macrocode}
\begin{center}                          
%    \end{macrocode}
% жирным и побольше:
%    \begin{macrocode}
\bfseries\Large                         
\eskd@title@i
%    \end{macrocode}
% конец шапки:
%    \begin{macrocode}
\end{center}                            
%    \end{macrocode}
% растягивающийся верт. пропуск :
%    \begin{macrocode}
\vfill                                  
%    \end{macrocode}
% \subsubsection{Поле "утверждаю".}
%    \begin{macrocode}
%
\centerline{\raisebox{0mm}[0mm][0mm]{\tfIII}}
%    \end{macrocode}
% растягивающийся верт. пропуск:
%    \begin{macrocode}
\vfill                                  
%    \end{macrocode}
% \subsubsection{Название.}
% начало :
%    \begin{macrocode}
\begin{center}                          
%    \end{macrocode}
% жирным и побольше:
%    \begin{macrocode}
{\bfseries\Large                        
\MakeUppercase{\eskd@title@iv}}\mbox{}\\[3mm]
{\large\MakeUppercase{\eskd@title@vi}}
%    \end{macrocode}
% конец названия:
%    \begin{macrocode}
\end{center}                            
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    \end{macrocode}
% растягивающийся верт. пропуск:
%    \begin{macrocode}
\vfill                                  
%    \end{macrocode}
% \subsubsection{Начало полей согласования/авторов.}
%    \begin{macrocode}
%
\unitlength\textwidth\begin{picture}(0,0)
\put(0,0){\makebox(0,0)[l]{\hyphenpenalty=10000 %
\begin{tabular}{@{\hspace{5mm}}p{80mm}@{\hspace{10mm}}p{80mm}}
\raggedright\eskd@agr@list &{\raggedright\eskd@author@list}\\
\end{tabular}
}}
\end{picture}
%    \end{macrocode}
% растягивающийся верт. пропуск:
%    \begin{macrocode}
\vfill\vfill                                    
%    \end{macrocode}
% \subsubsection{Год документа.}
%    \begin{macrocode}
\begin{center}
  \eskd@title@bottom
\end{center}
%    \end{macrocode}
% \subsubsection{Завершение титульного листа.}
%    \begin{macrocode}
\newpage

\ifeskd@twoside
\thispagestyle{empty}
\cleardoublepage
\fi

\thispagestyle{first}
\set@eskd@bottom{30mm}

}


\set@eskd@bottom{\ifeskd@title15mm\else55mm\fi}

%    \end{macrocode}

% \subsection{Выполнить настройки зависящие от параметров.}

%    \begin{macrocode}

\AtBeginDocument{%
 
  \inputencoding{koi8-r}

%    \end{macrocode}
% \subsubsection{Лист регистрации изменений.}
%    \begin{macrocode}
\newcommand{\eskdListOfChanges}{\newpage
{\small\noindent
\begin{tabular}{|c|*{7}{p{1.5cm}|}c|c|}
  \multicolumn{10}{c}{\Large\bf Лист регистрации изменений}\\\hline 
& \multicolumn{4}{c|}{Номера листов 
(страниц)}&&&&&\\\cline{2-5}
Изм.&из\-ме\-нен\-ных&за\-ме\-нен\-ных&но\-вых&%
ан\-ну\-ли\-ро\-ван\-ных&
Всего листов (страниц) 
в докум.&\No\ докум.&Вхо\-дя\-щий \No\ 
сопроводительного докум. и дата&Подпись&Дата\\\hline
\vbox{\vspace{\eskdheight mm}\vspace{-6cm}}&&&&&&&&&\\\hline
\end{tabular}
}
}

%    \end{macrocode}
% \subsubsection{Выполнить установки.}
%    \begin{macrocode}

  \make@eskd@border
  \make@eskd@vertical@frame

  \make@eskd@common@left
  \make@eskd@common@hole
  \make@eskd@common@page

  \make@eskd@first@style
  \make@eskd@title@style
  \make@eskd@common@style

  \pagestyle{common}
  \inputencoding{\eskdencoding}
  \ifeskd@title\eskd@maketitle
  \else\thispagestyle{first}\set@eskd@bottom{30mm}\fi

  \renewcommand{\make@eskd@border}{}
  \renewcommand{\make@eskd@vertical@frame}{}
  \renewcommand{\make@eskd@common@left}{}
  \renewcommand{\make@eskd@common@hole}{}
  \renewcommand{\make@eskd@common@page}{}
  \renewcommand{\make@eskd@first@style}{}
  \renewcommand{\make@eskd@title@style}{}
  \renewcommand{\make@eskd@common@style}{}
  \renewcommand{\eskd@maketitle}{}
  \relax
}
%    \end{macrocode}
% \Finale
% \clearpage\setcounter{IndexColumns}{2}
% \addcontentsline{toc}{section}{Index}\PrintIndex
% \clearpage\tableofcontents