PS
# Sevensegment.m4
# https://tex.stackexchange.com/questions/644009/seven-segments-anchors-how-to-use-them
gen_init
divert(-1)
                          `sevensegment(keys)
                           Seven-segment display in a [] block. keys:
                           hght=expr; (default boxht)
                           wdth=expr; (default hght*3.3/5.85)
                           slant=fraction; top is skewed slant fraction of ht
                           segwid=expr; segment width
                           gap=expr; gap between segments
                           bevel=fraction; corner truncation
                           on=attributes; "on" segment attributes
                           off=attributes; "off" segment attributes
                           code=[0-8][.]; displayed number .=decimal point
                              or
                           code=Xddddddd[.] where each d=0 or 1 to define
                              Segment1 to Segment7 off or on
                           Segments are labeled Seg1 Seg2 ... Seg7
                           and the decimal point is Seg8'
define(`sevensegment', # hght, wdth, slant, segwid, gap, bevel, on, off, code
`[ pushkeys_(`$1',`hght:boxht; wdth:m4`'hght*3.3/5.85; slant:0;
     segwid:0.75/3.2*m4`'wdth; gap:0.12/3.2*m4`'wdth; bevel:0.4;
     on:outlined "red" shaded "red":N; off:outlined "lightgray":N;
     code:00000010:N;')
 gapch = m4gap/2*sqrt(2)
 ifinstr(m4code,.,`define(`m4tmp',substr(m4code,0,decr(len(m4code))))dnl
   pushdef(`dodp',1)poppushdef(`m4code',m4tmp)')dnl
 ifinstr(m4code,X,`pushdef(`opcode',substr(m4code,1))',
  `foreach_(`m4cd',`pushdef(`Cd'decr(m4Lx),m4cd)',1111110,0110000,1101101,
     1111001,0110011,1011011,1011111,1110000,1111111,1111011)dnl
   pushdef(`opcode',Cd`'m4code)')dnl
 for_(1,7,1,`pushdef(`attrib'm4x,
  ifelse(substr(opcode,decr(m4x),1),1,`m4on',`m4off'))')dnl
 Seg1: m4segment(R,m4bevel,m4bevel,attrib1) \
   with .S at m4slu(0,m4hght-m4segwid)
 inner = distance(Seg1.SW,Seg1.SE) + gapch*2
 Seg2: m4segment(D,0.5,m4bevel,attrib2) with .S at \
   m4slu(m4wdth/2-m4segwid,m4hght-m4segwid-inner/2)
 Seg3: m4segment(D,m4bevel,0.5,attrib3) with .S at \
   m4slu(m4wdth/2-m4segwid,m4segwid+inner/2)
 Seg4: m4segment(L,m4bevel,m4bevel,attrib4) with .S at m4slu(0,m4segwid)
 Seg5: m4segment(U,0.5,m4bevel,attrib5) with .S at \
   m4slu(-m4wdth/2+m4segwid,m4segwid+inner/2)
 Seg6: m4segment(U,m4bevel,0.5,attrib6) with .S at \
   m4slu(-m4wdth/2+m4segwid,m4hght-m4segwid-inner/2)
 Seg7: m4segment(R,0.5,0.5,attrib7) with .c at m4slu(0,m4hght/2)
 ifelse(dodp,1,`Seg8: circle diam m4segwid m4on \
     at m4slu(Seg3.e.x+m4segwid/2+m4gap,Seg4.s.y+m4segwid/2)') popdef(`dodp')
 popdef(`m4hght',`m4wdth',`m4slant',`m4segwid',`m4gap',`m4bevel',
  `m4on',`m4off',`m4code',`opcode')dnl
 for_(1,7,1,`popdef(`attrib'm4x)') for_(0,9,1,`popdef(`Cd'm4x)')dnl
 ]')
define(`m4segment',`[ setdir_(`$1')
 m4seven_pos(SE,E,NE,,`$2'); m4seven_pos(SW,W,NW,-,`$3')
 resetdir_
 S: 1/2 between SW and SE
 Line: line from m4slu(S.x,S.y) to m4slu(SE.x,SE.y) then to m4slu(E.x,E.y) \
   then to m4slu(NE.x,NE.y) then to m4slu(NW.x,NW.y) then to m4slu(W.x,W.y) \
   then to m4slu(SW.x,SW.y) then to m4slu(S.x,S.y) `$4' ] ')
define(`m4seven_pos',
`AA: (`$4'(m4wdth/2-m4segwid-gapch),0); `$1': rot_(AA.x,AA.y,rp_ang)
 BA: AA + (`$4'1,1)*m4segwid*(1-`$5');  `$2': rot_(BA.x,BA.y,rp_ang)
 CA: BA - (`$4'1,-1)*m4segwid*`$5';     `$3': rot_(CA.x,CA.y,rp_ang) ')
define(`m4slu',`(`$1'+(`$2')*m4slant,`$2')')

divert(0)dnl


[
 S: sevensegment(code=4.;hght=1)
 { for_(1,8,1,`"m4x" at S.Seg`'m4x') }
 move right 0.25
 P: sevensegment(code=X1100011;off=invis;hght=1)
 ]
[
 for_(0,9,1,`sevensegment(code=m4x`'ifelse(m4x,1,.);slant=1/4;off=invis)
  move movewid/4')
 ] with .nw at last [].sw+(0,-boxht/3)

PE