This file is indexed.

/usr/bin/johab2ucs2 is in unifont-bin 1:5.1.20080914-1.1ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
#!/usr/bin/perl  -w

# johab2ucs2.pl 
# This script(working as filter) converts  Hangul "Johab encoded  fonts"
# with an unofficial XLFD name "-johab" in BDF format
# to UCS-2 encoded font in a format defined by
# Roman Czyborra <roman@czyborra.com> at 
# http://czyborra.com/unifont/

# 'hanterm304font.tar.gz contains about a dozen of 
# "Johab-encoded" fonts. The package is available 
# ftp://ftp.kaist.ac.kr/hangul/terminal/hanterm/hanterm304beta/fonts
# Please, note that this script only works with  fonts whose 
# XLFD name ends with 
#
#  --16-160-75-75-c-160-johab-1
# (and whose file name in the package doesn't include 's' or 'sh' preceding
# '(m|g)16.bdf'. )
#
# There are  four of them : 
#  johabg16.bdf,johabm16.bdf,johabp16.bdf,iyagi16.bdf.  
#
# Fonts in the package with other XLFD names
# (johabs and johabsh) contain glyphs for about 5000 Hanjas and special symbols
# defined in KS C 5601-1987. 

#  Sep. 29, 1998
#  Jungshik Shin <jshin@pantheon.yale.edu>

# A more complete routine which not only covers
# *modern* pre-composed Hangul syllables in UAC00-UD7A3
# but also supports dynamic rendering of
# Hangul syllables(medieval as well as modern)
# using Hangul comibining Jamos  at [U1100-U11FF]
# was made by Deog-tae Kim <dtkim@calab.kaist.ac.kr
# to be used in Java font-properties file. 
# It's available at  http://calab.kaist.ac.kr/~dtkim/java/

# 2 May 2008: changes by Paul Hardy (unifoundry <at> unfoundry.com):
#
#    - In tconBase, "459" index corrected to "449".
#    - Modified subroutine get_ind to always return 0 for final
#      if no final consonant is in the composite syllable.
#      Previously it always added $tconMap[$m] to the final
#      consonant location even if there was no final consonant.
#    - Index arrays were extended to cover all of Johab encoded
#      Hangul, even though not all glyphs are used to generate
#      the Unicode Hangul Syllables range.
#    - Added comments on the letters in the letter arrays


# Conversion routine from Hangul Jamo index to glyph index 
# of Hangul "Johab-encoded" fonts  as used by 
# Hangul xterm, hanterm.
# The following routine is based on Hanterm by Song, Jaekyung
# available at ftp://ftp.kaist.ac.kr/hangul/terminal/hanterm

# Leading Consonant index values:
#
#    Modern Letters:                     Archaic Letters (no Romanization):
#
#       0 G  (choseong kiyeok)              19 (choseong kapyeounpieup) 
#       1 GG (choseong ssangkiyeok)         20 (choseong pieup-kiyeok)
#       2 N  (choseong nieun)               21 (choseong sios-kiyeok)
#       3 D  (choseong tikeut)              22 (choseong pieup-tikeut)
#       4 DD (choseong ssangtikeut)         23 (choseong sios-tikeut)
#       5 R  (choseong rieul)               24 (choseong sios-pieup)
#       6 M  (choseong mieum)               25 (choseong pieup-sios)
#       7 B  (choseong pieup)               26 (choseong pansios)
#       8 BB (choseong ssangpieup)          27 (choseong yesieung)
#       9 S  (choseong sios)                28 (choseong pieup-cieuc)
#      10 SS (choseong ssangsios)           29 (choseong sios-cieuc)
#      11 ieung (choseong ieung)            30 (choseong yeorinhieuh)
#      12 J  (choseong cieuc)
#      13 JJ (choseong ssangcieuc)
#      14 C  (choseong chieuch)
#      15 K  (choseong khieukh)
#      16 T  (choseong thieuth)
#      17 P  (choseong phieuph)
#      18 H  (choseong hieuh)
#

# Middle Letter index values:
#
#    Modern Letters:                     Archaic Letters (no Romanization):
#
#       0 Filler (blank)                    22 YO-YA   (jungseong yo-ya)
#       1 A   (jungseong a)                 23 YO-YAE  (jungseong yo-yae)
#       2 AE  (jungseong ae)                24 YO-I    (jungseong yo-i)
#       3 YA  (jungseong ya)                25 YU-YEO  (jungseong yu-yeo)
#       4 YAE (jungseong yae)               26 YU-YE   (jungseong yu-ye)
#       5 EO  (jungseong eo)                27 YU-I    (jungseong yu-i)
#       6 E   (jungseong e)                 28 araea   (jungseong araea)
#       7 YEO (jungseong yeo)               29 araea-i (jungseong araea-i)
#       8 YE  (jungseong ye)
#       9 O   (jungseong o)
#      10 WA  (jungseong wa)
#      11 WAE (jungseong wae)
#      12 OE  (jungseong oe)
#      13 YO  (jungseong yo)
#      14 U   (jungseong u)
#      15 WEO (jungseong weo)
#      16 WE  (jungseong we)
#      17 WI  (jungseong wi)
#      18 YU  (jungseong yu)
#      19 EU  (jungseong eu)
#      20 YI  (jungseong yi)
#      21 I   (jungseong i)
#

# Terminal (Final) Letter index values:
#
#    Modern Letters:                     Archaic Letters (no Romanization):
#
#       0 Filler (blank)                    28 (jongseong rieul-hieuh)
#       1 G  (jongseong kiyeok)             29 (jongseong mieum-kiyeok)
#       2 GG (jongseong ssangkiyeok)        30 (jongseong yeorinhieuh)
#       3 GS (jongseong kiyeok-sios)        31 (jongseong yesieung)
#       4 N  (jongseong nieun)
#       5 NJ (jongseong nieun-cieuc)
#       6 NH (jongseong niuen-hieuh)
#       7 D  (jongseong tikeut)
#       8 L  (jongseong rieul)
#       9 LG (jongseong rieul-kiyeok)
#      10 LM (jongseong rieul-mieum)
#      11 LB (jongseong rieul-pieup)
#      12 LS (jongseong rieul-sios)
#      13 LT (jongseong rieul-thieuth)
#      14 LP (jongseong rieul-phieuph)
#      15 LH (jongseong rieul-hieuh)
#      16 M  (jongseong mieum)
#      17 B  (jongseong pieup)
#      18 BS (jongseong pieup-sios)
#      19 S  (jongseong sios)
#      20 SS (jongseong ssangsios)
#      21 NG (jongseong ieung)
#      22 J  (jongseong cieuc)
#      23 C  (jongseong chieuch)
#      24 K  (jongseong khieukh)
#      25 T  (jongseong thieuth)
#      26 P  (jongseong phieuph)
#      27 H  (jongseong hieuh)
#


# The base font index for leading consonants
  @lconBase= (
          1,  11,  21,  31,  41,  51,  # G, GG, N, D, DD, R
         61,  71,  81,  91, 101, 111,  # M, B, BB, S, SS, ieung
        121, 131, 141, 151, 161, 171,  # J, JJ, C, K, T, P
        181,                           # H -- end of modern set
        191, 201, 211, 221, 231, 241,  # 
        251, 261, 271, 281, 291, 301
  );

  # The base index for vowels

  @vowBase = (
        0,311,314,317,320,323,   # (Fill), A, AE, YA, YAE, EO
        326,329,332,335,339,343, # E, YEO, YE, O, WA, WAE
        347,351,355,358,361,364, # OI, YO, U, WEO, WE, WI
        367,370,374,378,         # YU, EU, UI, I     -- end of modern set
        381, 384, 387,           # YO-YA, YO-YAE, YO-YI
        390, 393, 396,           # YU-YEO, YU-YE, YU-I
        399, 402                 # araea, araea-i
  );

  # The base font index for trailing consonants

  @tconBase = (
        # modern trailing consonants (filler + 27)
        0,
        405, 409, 413, 417, 421,  #  G, GG, GS,  N, NJ
        425, 429, 433, 437, 441,  # NH,  D,  L, LG, LM
        445, 449, 453, 457, 461,  # LB, LS, LT, LP, LH
        465, 469, 473, 477, 481,  #  M,  B, BS,  S, SS
        485, 489, 493, 497, 501,  # NG,  J,  C,  K,  T
        505, 509,                 #  P,  H     -- end of modern set
        513, 517, 521, 525
   );

    # The mapping from vowels to leading consonant type
    # in absence of trailing consonant

    @lconMap1 = (
        0,0,0,0,0,0,     # (Fill), A, AE, YA, YAE, EO
        0,0,0,1,3,3,     # E, YEO, YE, O, WA, WAE
        3,1,2,4,4,4,     # OI, YO, U, WEO, WE, WI
        2,1,3,0,         # YU, EU, UI, I    -- end of modern set
        3,3,3,4,4,4,     # YO-YA, YO-YAE, YO-I, YU-YEO, YU-YE, YU-I
        1,3              # araea, araea-i
    );

    # The mapping from vowels to leading consonant type
    # in presence of trailing consonant

    @lconMap2 = (
        5,5,5,5,5,5,     #  (Fill), A, AE, YA, YAE, EO
        5,5,5,6,8,8,     #  E, YEO, YE, O, WA, WAE
        8,6,7,9,9,9,     #  OI, YO, U, WEO, WE, WI
        7,6,8,5,         #  YU, EU, UI, I    -- end of modern set
        8,8,8,9,9,9,     # YO-YA, YO-YAE, YO-I, YU-YEO, YU-YE, YU-I
        6,8              # araea, araea-i
    );

    #  vowel type ; 1 = o and its alikes, 0 = others

    @vowType = (
        0,0,0,0,0,0,
        0,0,0,1,1,1,
        1,1,0,0,0,0,
        0,1,1,0,         # end of modern set
        1,1,1,0,0,0,1,1
    );

    #  The mapping from trailing consonants to vowel type

    @tconType = (
        0, 1, 1, 1, 2, 1,
        1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1,
        1, 1, 1, 1,        # end of moder set
        1, 1, 1, 1
    );

    #  The mapping from vowels to trailing consonant type

    @tconMap = (
        0, 0, 2, 0, 2, 1,  # (Fill), A, AE, YA, YAE, EO
        2, 1, 2, 3, 0, 0,  # E, YEO, YE, O, WA, WAE
        0, 3, 3, 1, 1, 1,  # OI, YO, U, WEO, WE, WI
        3, 3, 0, 1,        # YU, EU, UI, I   -- end of modern set
        0, 0, 0, 1, 1, 1,  # YO-YA, YO-YAE, YO-I, YU-YEO, YU-YE, YU-I
        3, 0               # araea, araea-i
    );



# read in BITMAP patterns for Jamos from JOHAB-encoded BDF font file 
# thru STDIN

$BITMAP=0;
while (<>) {
  if (/^ENCODING\s+(\d+)/) { $i = $1; $jamo[$i]=""; }
  elsif (/^BITMAP/) { $BITMAP=1; }
  elsif (/^ENDCHAR/) { $BITMAP=0; 
  }
  elsif ($BITMAP) { 
    y/a-f/A-F/; 
    s/\n$//; 
    $jamo[$i] = $jamo[$i] . $_;
  }
}

for ( $j=0 ; $j <  11172 ;  $j++ ) {

   $init = int( $j / 21 / 28) ;
   $medial = int($j / 28 ) % 21+1 ; 
   $final = $j % 28;
  
   printf ("%04X:%64s\n", $j+0xAC00, &compose_hangul($init,$medial,$final));

}

sub compose_hangul
{
   local($l,$m,$f) = @_; 

   @l_bit = unpack("a2" x 32, $jamo[&get_ind($l,$m,$f,1)]);
   @m_bit = unpack("a2" x 32, $jamo[&get_ind($l,$m,$f,2)]);
   @f_bit = unpack("a2" x 32, $jamo[&get_ind($l,$m,$f,3)]);
 

   for ( $i = 0; $i < 32; $i++) {
      $bit[$i]=sprintf("%02X", 
         hex($l_bit[$i]) | hex($m_bit[$i]) | hex($f_bit[$i]) );
   }

   return pack("a2" x 32, @bit );

}

sub get_ind
{
  local($l,$m,$f,$wh) = @_;

# ($l = 0 && $l < 19 && $m =0 && $m < 21  && $f =0 && $f < 28) or 
#   die ("$0: get_ind() : invalid Jamo index\n");

  if ( $wh == 1 ) {  # leading consonant index; no final consonant if $f==0
    $ind = $lconBase[$l] + 
           ($f > 0 ?  $lconMap2[$m] : $lconMap1[$m] ) ;
  } 
  elsif ( $wh == 2 ) { # medial vowel index

     $ind = $vowBase[$m];
     if ( $vowType[$m] == 1 ) {
     # For vowels 'o' and alikes,
     # Giyeok and Kieuk get special treatment
         $ind += ( ($l==0 || $l == 15) ? 0 : 1)
                 + ($f > 0 ? 2 : 0 );
     }
     else {
         $ind+= $tconType[$f];
     }
  }
  else {
      if ($f == 0) {
         $ind = 0;
      }
      else {
         $ind = $tconBase[$f] + $tconMap[$m];
      }
  }
  return $ind;
}