summaryrefslogtreecommitdiff
path: root/graphics/circuit_macros/liblog.m4
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/circuit_macros/liblog.m4')
-rw-r--r--graphics/circuit_macros/liblog.m458
1 files changed, 32 insertions, 26 deletions
diff --git a/graphics/circuit_macros/liblog.m4 b/graphics/circuit_macros/liblog.m4
index 0e8d4a5022..495ab2ad2b 100644
--- a/graphics/circuit_macros/liblog.m4
+++ b/graphics/circuit_macros/liblog.m4
@@ -1,12 +1,12 @@
divert(-1)
liblog.m4 Logic gates
-* Circuit_macros Version 9.1, copyright (c) 2019 J. D. Aplevich under *
-* the LaTeX Project Public License. The files of this distribution may *
-* be redistributed or modified provided that this copyright notice is *
-* included and provided that modifications are clearly marked to *
-* distinguish them from this distribution. There is no warranty *
-* whatsoever for these files. *
+* Circuit_macros Version 9.2, copyright (c) 2020 J. D. Aplevich under *
+* the LaTeX Project Public Licence in file Licence.txt. The files of *
+* this distribution may be redistributed or modified provided that this *
+* copyright notice is included and provided that modifications are clearly *
+* marked to distinguish them from this distribution. There is no warranty *
+* whatsoever for these files. *
define(`liblog_')
@@ -29,7 +29,7 @@ ifdef(`libcct_',,`include(libcct.m4)divert(-1)')
inserted into a macro will display the macro name and current arguments
========================================================================='
- `Size parameter for logic and grid mesh'
+ `Nonzero parameter for logic size and grid mesh'
define(`L_unit',`(linewid/10)')
`Dimensions in L_units, also for external use:'
@@ -993,26 +993,29 @@ ifdef(`m4LI',
############################
- `FlipFlop( D|T|RS|JK, label, boxspec )'
+ `FlipFlop( D|T|RS|JK, label, boxspec, pinlength )'
define(`FlipFlop',`ifelse(
`$1',D, `FlipFlopX(`$3',`$2',
- : D:PinD;E:CK:PinCK, , :Q:PinQ;:lg_bartxt(Q):PinNQ,, `$4')',
+ : D:PinD;E:CK:PinCK, , :Q:PinQ;:lg_bartxt(Q):PinNQ,,`$4',`$5')',
`$1',T, `FlipFlopX(`$3',`$2',
- : T:PinT;E:CK:PinCK, , :Q:PinQ;:lg_bartxt(Q):PinNQ,, `$4')',
+ : T:PinT;E:CK:PinCK, , :Q:PinQ;:lg_bartxt(Q):PinNQ,,`$4',`$5')',
`$1',RS, `FlipFlopX(`$3',`$2',
- : R:PinR;: S:PinS, , :Q:PinQ;:lg_bartxt(Q):PinNQ,, `$4')',
+ : R:PinR;: S:PinS, , :Q:PinQ;:lg_bartxt(Q):PinNQ,,`$4',`$5')',
`$1',SR, `FlipFlopX(`$3',`$2',
- : S:PinS;: R:PinR, , :Q:PinQ;:lg_bartxt(Q):PinNQ,, `$4')',
+ : S:PinS;: R:PinR, , :Q:PinQ;:lg_bartxt(Q):PinNQ,,`$4',`$5')',
`$1',JK, `FlipFlopX(`$3',`$2',
: J:PinJ;NE:CK:PinCK;: K:PinK, N:CLR:PinCLR,
- :Q:PinQ;:lg_bartxt(Q):PinNQ, N:PR:PinPR, `$4')',
-`FlipFlopX(`$3',`$2', ::Pin;, , :Q:PinQ;:lg_bartxt(Q):PinNQ, ,`$4')')')
+ :Q:PinQ;:lg_bartxt(Q):PinNQ, N:PR:PinPR,`$4',`$5')',
+`FlipFlopX(`$3',`$2', ::Pin;, , :Q:PinQ;:lg_bartxt(Q):PinNQ,,`$4',`$5')')')
`FlipFlopX( boxspec, center label,
- leftpins, toppins, rightpins, bottompins)
- General flipflop. Each of args 3 to 6 is null or
- a string of pinspecs separated by semicolons (;).
- Pinspecs are either empty (null) or of the form
+ leftpins, toppins, rightpins, bottompins,
+ pinlength)
+ General flipflop. Arg1 modifies the
+ box (labelled Chip) default specification.
+ Each of args 3 to 6 is null or a string of
+ pinspecs separated by semicolons (;).
+ A pinspec is either empty (null) or of the form
[pinopts]:[label[:Picname]]. The first colon (:)
draws the pin. Pins are placed top to bottom
or left to right along the box edges with null
@@ -1022,16 +1025,18 @@ define(`FlipFlop',`ifelse(
:Picname is present in a pinspec then Picname
replaces the default name. A pinspec label is text
placed at the pin base. Semicolons are not
- allowed in labels; use eg \char59{} instead,
- and to put a bar over a label, use
- lg_bartxt(label). The pinopts are [L|M|I|O][N][E]
- L=active low out; M=active low in;
- I=inward arrow; O=outward arrow;
- N=pin with not circle; E=edge trigger'
+ allowed in labels; use eg \char59{} instead.
+ To put a bar over a label, use lg_bartxt(label).
+ The pinopts are [L|M|I|O][N][E]
+ L=active low out; M=active low in;
+ I=inward arrow; O=outward arrow;
+ N=pin with not circle; E=edge trigger
+ Optional arg7 is the length of pins'
define(`FlipFlopX',`[
- Chip: box ifelse(`$1',,`wid_ FF_wid*L_unit ht_ FF_ht*L_unit',`$1')
+ Chip: box wid_ FF_wid*L_unit ht_ FF_ht*L_unit `$1'
dnl Center label
ifelse(`$2',,,"ifsvg(`svg_small($2,75)',`\scriptsize $2')" at Chip.c)
+ ifelse(`$7',,,`pushdef(`lg_plen',(`$7')/L_unit)')dnl
ifelse(`$3',,,
`m4_ffside(`(m4x-0.5)/m4_pc between Chip.nw_ and Chip.sw_',`$3',W,w)')
ifelse(`$4',,,
@@ -1040,7 +1045,8 @@ dnl Center label
`m4_ffside(`(m4x-0.5)/m4_pc between Chip.ne_ and Chip.se_',`$5',E,e)')
ifelse(`$6',,,
`m4_ffside(`(m4x-0.5)/m4_pc between Chip.sw_ and Chip.se_',`$6',S,s)')
- `$7' ]')
+ ifelse(`$7',,,`popdef(`lg_plen')')dnl
+ `$8' ]')
dnl `Stack, count, and draw the pins on the given side'
define(`m4_ffside',
`stacksplit_(`m4pr',`$2',;)define(`m4_pc',0)dnl