1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{pinoutikz}[1.0.1 Pinout diagram definitions]
\RequirePackage{ifthen}
\RequirePackage{lmodern}
\RequirePackage{xstring}
\RequirePackage{upquote}
\RequirePackage{amsmath,amssymb}
\RequirePackage{amsfonts}
\RequirePackage{forarray}
\RequirePackage{arrayjob}
\RequirePackage{tikz}
%% 'sans serif' option
\DeclareOption{sans}{
\renewcommand{\familydefault}{\sfdefault}
}
%% 'roman' option
\DeclareOption{roman}{
\renewcommand{\familydefault}{\rmdefault}
}
%% Global indentation option
\newif\if@neverindent\@neverindentfalse
\DeclareOption{neverindent}{
\@neverindenttrue
}
\ExecuteOptions{sans}
\ProcessOptions\relax
\def\pinoutikzname {pinouTikz}
\def\pinoutikzversion {1.0.1}
\def\pinoutikzdate {2019/11/23}
%% Formatt a pin name
\def\FormatPinLabel#1{
\pgfmathparse{0}\let\negstate\pgfmathresult
\pgfmathparse{0}\let\index\pgfmathresult
\ForEach{~}%
{%
\StrLen{\thislevelitem}[\itemlen]%
\ifthenelse{\itemlen>0}{%
\ifthenelse{\equal{\negstate}{1}}{$\overline{\thislevelitem}$}{\thislevelitem}%
\pgfmathparse{\index+1}\let\index\pgfmathresult
}{}%
\pgfmathparse{!\negstate}\let\negstate\pgfmathresult%
}%
{#1}
}
%% PIN diagram with label decoding
%% @param#1: options
%% @param#2: offset
%% @param#3: pin name
%% @param#4: pin number
\def\PIN[#1](#2)#3#4{
% decode label
\begin{scope}[shift={(#2)}]
\def\pinlabel{#3}
\ifthenelse{\equal{#1}{right}}{%
\draw (0.12,0) node[label=right:{\footnotesize \pinlabel},label=left:{\small \pgfmathprintnumber{#4}} ]{};
\draw (0,-.15) rectangle(0.12,0.15);
}%
{%
\draw (0,0) node[label=left:{\footnotesize \pinlabel},label=right:{\small \pgfmathprintnumber{#4}} ]{};
\draw (0,-.15) rectangle(0.12,0.15);
}%
\end{scope}
}
%% PDIP package diagram
%% @param#1: offset
%% @param#2: number of pins (divisible by 2)
%% @param#3: comma separated definitions list for every pin - every pin definition must be enclosed in quotation marks ("")
\def\PDIP(#1)#2{%
\begin{tikzpicture}
\begin{scope}[shift={(0,0)}]
\sffamily
\textsf{%
\def\pins{{#2}}
\pgfmathparse{#1/2-1}\let\cntpinsl\pgfmathresult
\pgfmathparse{#1/2}\let\cntstr\pgfmathresult
\pgfmathparse{#1-1}\let\cntpinsr\pgfmathresult
\pgfmathparse{\cntstr*.5}\let\height\pgfmathresult
\draw[line width=1.5pt] (0.12,-0.5) rectangle (1.88,\height);
\draw (0.80,\height) arc (180:360:2mm);
%iterate through pin definitions
\foreach \pinnum/\i in {#2}%
{%
\pgfmathparse{\pinnum-1}\let\pinidx\pgfmathresult
\pgfmathparse{(\pinnum>0 && \pinnum<(\cntstr+1)) ? 0 : 1}\let\pinrange\pgfmathresult
\ifthenelse{\equal{\pinrange}{0} }
{%
\pgfmathparse{(\cntpinsl-\pinidx)*0.5}\let\ypin\pgfmathresult
\PIN[left](0,\ypin){\i}{\pinnum}
}%else
{%
\pgfmathparse{(\pinidx-\cntstr)*0.5}\let\ypin\pgfmathresult
\PIN[right](1.88,\ypin){\i}{\pinnum}
}
% \fi
}
}
\end{scope}
\end{tikzpicture}
}
%%
\newlength{\pardefault}
\setlength{\pardefault}{\parindent}
\newcommand{\neverindent}{ \setlength{\parindent}{0pt} }
\newcommand{\autoindent}{ \setlength{\parindent}{\pardefault} }
\if@neverindent
\neverindent
\fi
% ...
\endinput
|