Skip to content

Instantly share code, notes, and snippets.

@jenskutilek
Created May 23, 2019 08:17
Show Gist options
  • Save jenskutilek/1ca0ad24e63eaab27540ea1d139fe036 to your computer and use it in GitHub Desktop.
Save jenskutilek/1ca0ad24e63eaab27540ea1d139fe036 to your computer and use it in GitHub Desktop.
HTIC assembly instructions example
flags {
# As seen on VTT
X 1 # X X axis
Y 0 # Y Y axis
O 1 # O Use original outline
N 0 # N Use gridfitted outline
R 1 # R Round distance; or perpendicular to line
r 0 # r Do not round distance; or parallel to line
M 1 # M Set rp0 to point number on the stack
m 0 # m Do not set rp0
1 1 # 1 Use rp1
2 0 # 2 Use rp2
> 1 # > Obey minimum distance
< 0 # < Do not obey minimum distance
Gr 00 # Gr Gray
Bl 01 # Bl Black
Wh 10 # Wh White
# Combined flags
M<rGr 10000
M<RGr 10100
M>RGr 11100
}
gasp {
6 doGray symSmoothing # 10
20 doGridfit doGray symGridfit # 7
120 doGridfit doGray symGridfit symSmoothing # 15
65535 doGray symSmoothing # 10
}
# head {
# flags instructionsMayAlterAdvanceWidth
# 7 lowestRecPPEM
# }
maxp {
512 maxStackElements
11 maxFunctionDefs
0 maxStorage
1 maxZones
0 maxTwilightPoints
}
cvt {
19 zones_off # value to decide whether zones are off
# y distances for stems
78 1 # Fatest
60 2 # Round_Fat
49 3 # Serif_Med
50 4 # Straight_Thin
56 5 # dbpq
# bottom zones
0 6 # b: 0
19 7
-206 8 # b: 1
18 9
# top zones
440 10 # t: 0
16 11
466 12 # t: 1
16 13
540 14 # t: 2
17 15
644 16 # t: 3
16 17
661 18 # t: 4
9 19
632 20 # t: LF
10 21
508 22 # t: OsF
18 23
}
fpgm {
void 0 check_gridfit
IF ((MPPEM) < 9)
push 1 1
INSTCTRL
EIF
SCANCTRL 511 # dropout ppm
SCVTCI 68 # stem snap in 1/64 pixel
push 9 3
SDS # FL delta shift is always 3
SDB # FL delta base is always 9
ENDF
void 1 round_cvt cvt
DUP
DUP
RCVT
ROUND[Bl]
WCVTP
push 1
ADD
ENDF
void 2 round_stems cvt_first_stem val_num_stems
push 1
LOOPCALL
POP
ENDF
void 3 doublelink pt1 pt2
DUP
GC[N]
push 3
CINDEX
GC[N]
GT
IF
SWAP
EIF
DUP
ROLL
DUP
ROLL
MD[N]
ABS
ROLL
DUP
GC[N]
DUP
ROUND[Gr]
SUB
ABS
push 4
CINDEX
GC[N]
DUP
ROUND[Gr]
SUB
ABS
GT
IF
SWAP
NEG
ROLL
EIF
MDAP[R]
DUP
push 0
GTEQ
IF
ROUND[Bl]
DUP
push 0
EQ
IF
POP
push 64
EIF
ELSE
ROUND[Bl]
DUP
push 0
EQ
IF
POP
push 64
NEG
EIF
EIF
MSIRP[m]
ENDF
void 4 doublelink_stem pt1 cvt_stem pt2
DUP
GC[N]
push 4
CINDEX
GC[N]
GT
IF
SWAP
ROLL
EIF
DUP
GC[N]
DUP
ROUND[Wh]
SUB
ABS
push 4
CINDEX
GC[N]
DUP
ROUND[Wh]
SUB
ABS
GT
IF
SWAP
ROLL
EIF
MDAP[R]
MIRP[11101]
ENDF
void 5 function_5
MPPEM
DUP
push 3
MINDEX
LT
IF
LTEQ
IF
push 128
WCVTP
ELSE
push 64
WCVTP
EIF
ELSE
POP
POP
DUP
RCVT
push 192
LT
IF
push 192
WCVTP
ELSE
POP
EIF
EIF
ENDF
void 6 round_zone cvt_pos cvt_size
DUP
DUP
RCVT
ROUND[Bl]
WCVTP
push 1
ADD
DUP
DUP
RCVT
RDTG
ROUND[Bl]
RTG
WCVTP
push 1
ADD
ENDF
void 7 round_zones cvt_first_zone val_num_zones
push 6
LOOPCALL
ENDF
void 8 set_stem cvt_stem val_ppm6 val_ppm5 val_ppm4 val_ppm3 val_ppm2 val_ppm1
MPPEM
DUP
push 3
MINDEX
GTEQ
IF
push 64
ELSE
push 0
EIF
ROLL
ROLL
DUP
push 3
MINDEX
GTEQ
IF
SWAP
POP
push 128
ROLL
ROLL
ELSE
ROLL
SWAP
EIF
DUP
push 3
MINDEX
GTEQ
IF
SWAP
POP
push 192
ROLL
ROLL
ELSE
ROLL
SWAP
EIF
DUP
push 3
MINDEX
GTEQ
IF
SWAP
POP
push 256
ROLL
ROLL
ELSE
ROLL
SWAP
EIF
DUP
push 3
MINDEX
GTEQ
IF
SWAP
POP
push 320
ROLL
ROLL
ELSE
ROLL
SWAP
EIF
DUP
push 3
MINDEX
GTEQ
IF
push 3
CINDEX
RCVT
push 384
LT
IF
SWAP
POP
push 384
SWAP
POP
ELSE
push 3
CINDEX
RCVT
SWAP
POP
SWAP
POP
EIF
ELSE
POP
EIF
WCVTP
ENDF
void 9 function_9
MPPEM
GTEQ
IF
RCVT
WCVTP
ELSE
POP
POP
EIF
ENDF
void 10 zone_align pt cvt_zone
RCVT zones_off
IF
POP
MDAP[R]
ELSE
MIAP[r]
EIF
ENDF
}
prep {
CALL check_gridfit
# vertical distances
SVTCA[Y]
CALL round_stems 1 5
# vdist ppms
CALL set_stem 1 68 58 41 32 19 0
CALL set_stem 2 92 72 57 43 29 0
CALL set_stem 3 110 90 70 48 30 0
CALL set_stem 4 110 90 70 48 30 0
CALL set_stem 5 100 82 62 48 30 0
# zones
CALL round_zones 6 9
push 0
DUP
RCVT
RDTG
ROUND[Bl]
RTG
WCVTP
deltac 12 12-8 14-8
IF ((MPPEM) > 120)
push 1
ELSE
push 0
EIF
push 1
INSTCTRL
}
.notdef {
SVTCA[Y]
CALL zone_align 0 20
CALL zone_align 1 6
SRP0 0
MIRP[M<RGr] 4 4
SRP0 1
MIRP[M<RGr] 6 4
IUP[Y]
IUP[X]
}
E {
SVTCA[Y]
CALL zone_align 3 16
CALL zone_align 39 6
MIRP[M<RGr] 0 3
SRP0 3
MIRP[M<RGr] 1 3
SRP0 3
MIRP[M<RGr] 13 4
SRP1 39
SRP2 13
IP 28
MDAP[R] 28
MIRP[M<RGr] 15 4
SRP0 39
MIRP[M<RGr] 30 4
IUP[Y]
IUP[X]
}
O {
SVTCA[Y]
CALL zone_align 5 16
CALL zone_align 15 6
SRP0 5
MIRP[M<RGr] 25 4
SRP0 15
MIRP[M<RGr] 35 4
IUP[Y]
IUP[X]
}
a {
SVTCA[Y]
CALL zone_align 27 10
CALL zone_align 39 6
CALL zone_align 48 6
SRP0 27
MIRP[M<RGr] 12 4
SRP1 12
SRP2 48
IP 51
MDAP[R] 51
MIRP[M<RGr] 6 4
SRP1 27
SRP2 48
IP 19
MDAP[R] 19
deltap 19 11+8
SRP0 39
MIRP[M<RGr] 36 3
SRP0 48
MIRP[M<RGr] 59 2
IUP[Y]
IUP[X]
}
e {
SVTCA[Y]
CALL zone_align 5 10
CALL zone_align 25 6
SRP1 25
SRP2 5
IP 12
MDAP[R] 12
SRP0 25
MIRP[M<RGr] 17 2
SRP1 25
SRP2 12
IP 21
MDAP[R] 21
SRP0 12
MIRP[M<RGr] 28 4
SRP0 5
MIRP[M<RGr] 33 4
IUP[Y]
IUP[X]
}
h {
SVTCA[Y]
CALL zone_align 4 18
CALL zone_align 11 10
CALL zone_align 16 6
CALL zone_align 31 6
MIRP[M<RGr] 0 3
SRP0 4
MIRP[M<RGr] 1 3
SRP0 0
MDRP[M<rGr] 29
MDRP[M<rGr] 19
MDRP[M<rGr] 14
SRP0 11
MIRP[M<RGr] 23 2
IUP[Y]
IUP[X]
}
o {
SVTCA[X]
MDAP[R] 40
MDAP[R] 20
SRP0 40
MDRP[M>RGr] 0
SRP0 20
MDRP[M>RGr] 10
SRP0 0
MDRP[M>RGr] 30
SRP0 10
MDRP[M>RGr] 41
SVTCA[Y]
CALL zone_align 5 10
CALL zone_align 15 6
SRP0 5
MIRP[M<RGr] 25 4
SRP0 15
MIRP[M<RGr] 35 4
IUP[Y]
IUP[X]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment