.\" man page for hbf2gf .\" .\" Copyright (C) 1994-2021 Werner Lemberg .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program in doc/COPYING; if not, write to the Free .\" Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, .\" MA 02110-1301 USA .\" . .TH HBF2GF 1 16-Oct-2021 "CJK Version 4.8.5" .SH "نام (NAME)" hbf2gf \- تبدیل یک فونت بیت‌مپ CJK به زیرفونت‌های قابل استفاده توسط TeX و Omega. . . .SH "خلاصه دستور (SYNOPSIS)" .na .nh .B hbf2gf .RB [ \-q ] .IR \%configuration-file [ .cfg ] .br .B hbf2gf 'in +\n(.ku .RB [ \-q ] .RB [ \-p ] .RB [ \-g ] .RB [ \-n ] .I \%subfont-name \%x-resolution .RI [ \%y-scale \ | \ \%y-resolution ] .br .in .B hbf2gf .B \-t .RB [ \-q ] .I \%subfont-name .br .B "hbf2gf \-\-version" | .B \-\-help .ad .hy . . . .\" ==== .\" ==== تعاریف ماکرو .\" ==== . .\" در اینجا \TeX برای troff و nroff تعریف می‌شود .if t .ds TX \fRT\h'-0.1667m'\v'0.20v'E\v'-0.20v'\h'-0.125m'X\fP .if n .ds TX TeX . .\" و در اینجا همان مورد برای \LaTeX .if t \{\ .ie '\*(.T'dvi' \ .ds LX \fRL\h'-0.36m'\v'-0.15v'\s-3A\s0\h'-0.15m'\v'0.15v'\fP\*(TX .el .ds LX \fRL\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\fP\*(TX .\} .if n .ds LX LaTeX . .\" \LaTeXe .\" توجه داشته باشید که برای TeX به \vareps به جای \eps نیاز است که .\" فقط با توالی فرار \N (در فونت Math Italic) قابل دسترسی است .if t \{\ .ie '\*(.T'dvi' .ds LE \*(LX\h'0.15m'2\v'0.20v'\f(MI\N'34'\fP\v'-0.20v' .el .ds LE \*(LX\h'0.15m'2\v'0.20v'\(*e\v'-0.20v' .\} .if n .ds LE LaTeX\ 2e . .\" تعریفی برای \Delta .if t .ds DE \(*D .if n .ds DE Delta_ . .\" فونت ماشین‌تحریری (typewriter) .if t \{\ .de C \fC\\$1\fP\\$2 .. .\} .if n \{\ .de C \\$1\\$2 .. .\} . .\" افزونه‌ای به .TP برای ممکن ساختن دو برچسب برای یک آیتم .de TQ .br .ns .TP .. . .\" ==== .\" ==== پایان تعاریف ماکرو .\" ==== . . ..SH "توضیحات (DESCRIPTION)" فونت‌های بیتی CJK را نمی‌توان به‌طور مستقیم با \*(TX به کار برد، زیرا تعداد نویسه‌ها در این فونت‌ها از\ 256، که محدودیت یک فونت \*(TX است، فراتر می‌رود. بنابراین ضروری است که این فونت‌ها به زیرفونت‌ها تقسیم شوند و این دقیقاً همان کاری است که .B hbf2gf انجام می‌دهد. .PP همان‌طور که از نامش پیداست، .B hbf2gf از فونت‌های CJK در قالب خاصی به نام .B Hanzi Bitmap Font .RB ( HBF ) استفاده می‌کند. این ساختار صرفاً از فایل(های) بیتی CJK و یک فایل متنی با قالبی بسیار مشابه با قالب BDF در سامانه پنجره‌ای X\ (X\ Window System) تشکیل شده است که فایل‌های فونت بیتی را توصیف می‌کند: کدگذاری، اندازه و غیره. فایل‌های .C GF تولیدشده می‌توانند سپس با .B gftopk به فایل‌های استاندارد .C PK تبدیل شوند. .PP دستور .B hbf2gf می‌تواند در سه حالت فراخوانی شود: . .PP .in +2m .B hbf2gf .RB [ \-q ] .IR configuration-file [ .cfg ] .PP .in +5m این فراخوانی معمولاً مجموعه‌ای از فایل‌های .C GF \c ، یک فایل .C PL و یک فایل دسته‌ای (batch file) ایجاد می‌کند که باید پس از پایان کار .B hbf2gf اجرا شود. این اسکریپت سپس .B gftopk را فراخوانی می‌کند تا تمام فایل‌های .C GF را به فایل‌های .C PK تبدیل کند، و .B pltotf را فراخوانی می‌کند تا فایل .C PL را به یک فایل .C TFM تبدیل نماید. در نهایت، فایل .C TFM را کپی می‌کند تا هر فایل .C PK فایل .C TFM مخصوص به خود را داشته باشد (که همگی یکسان هستند). .PP .in +5m اگر .B ofm_file در فایل پیکربندی روی \(oqyes\(cq تنظیم شده باشد، فایل‌های .C OFM و .C OVF نیز ایجاد خواهند شد. . .PP .in +5m گزینه .B \-q دستور .B hbf2gf را بی‌صدا می‌کند. .PP .in +2m .na .nh .B hbf2gf 'in +\n(.ku .RB [ \-q ] .RB [ \-p ] .RB [ \-g ] .RB [ \-n ] .I \%subfont-name \%x-resolution .RI [ \%y-scale \ | \ \%y-resolution ] .ad .hy .PP .in +5m این حالت برای استفاده به همراه .B \%mktexpk و مشتقات آن در نظر گرفته شده است. تنها یک فایل .C GF به همراه یک فایل .C PL برای زیرفونت مشخص‌شده محاسبه خواهد شد، که وضوح افقی و ضریب مقیاس عمودی (اگر مقدار کمتر از\ 10 باشد) یا وضوح عمودی (در غیر این صورت) را از خط فرمان دریافت کرده و پارامتر .B nmb_fonts در فایل پیکربندی را نادیده می‌گیرد. دو نویسه آخر (که به عنوان شماره زیرفونت تفسیر می‌شوند) حذف می‌شوند تا نام فایل پیکربندی به دست آید (که باید به \(oq\c .C \&.cfg \(cq\c ) ختم شود). هیچ فایل اجرایی (job file) ایجاد نخواهد شد. اگر گزینه .B \-p تنظیم شود، هیچ فایل .C PL ایجاد نمی‌شود. اگر .B \-g تنظیم شود، هیچ فایل .C GF ایجاد نمی‌شود. پسوند فایل را می‌توان با .BR \-n کنترل کرد؛ اگر تنظیم شود، پسوند \(oq\c .C \&.gf \(cq خواهد بود، در غیر این صورت \(oq\c .C \&. <\c .IR resolution >\c .C gf \(cq. گزینه .B \-q دستور .B hbf2gf را بی‌صدا می‌کند. . .PP .in +2m .na .nh .B hbf2gf 'in +\n(.ku .B \-t .RB [ \-q ] .I \%subfont-name .ad .hy .PP .in +5m این حالت برای استفاده در اسکریپت‌هایی مانند .BR \%mktexpk در نظر گرفته شده است؛ بررسی می‌کند که آیا نام زیرفونت مشخص‌شده به یک فایل پیکربندی .B hbf2gf منتهی می‌شود یا خیر. در صورت موفقیت 0 بازمی‌گرداند و نام آن فایل پیکربندی را چاپ می‌کند (به شرطی که گزینه .B \-q تنظیم نشده باشد). این آزمون کامل و دقیق نیست؛ صرفاً دو نویسه آخر را حذف کرده و بررسی می‌کند که آیا فایل پیکربندی با آن نام وجود دارد یا خیر. .PP برای جزئیات بیشتر درباره فایل‌های پیکربندی، بخش بعدی را ببینید. .PP مشخص کردن گزینه .B \-\-version نسخه فعلی .B hbf2gf و کتابخانه جستجوی فایل مورد استفاده (مانند\ \c .BR kpathsea ) را بازمی‌گرداند. اطلاعات نحوه استفاده با پارامتر .B \-\-help نمایش داده می‌شود. . ..SH "فایل پیکربندی (CONFIGURATION FILE)" در اینجا یک نمونه فایل پیکربندی (\c .C gsfs14.cfg ) برای یک قلم چینی 56\(mu56 با کدگذاری GB آمده است؛ توجه داشته باشید که تمام اطلاعات مربوط به قلم در فایل .C jfs56.hbf قرار دارد. برای آگاهی از نحوهٔ یافتن قلم‌های HBF و فایل‌های پیکربندی .B hbf2gf بخش .B "FILE SEARCHING" را ببینید. برای اطلاع از نحوهٔ تهیه قلم‌های CJK به همراه فایل‌های .C HBF آن، بخش .B AVAILABILITY را ببینید: .PP .if t \fC .nf hbf_header jfs56.hbf mag_x 1 threshold 128 comment jianti fansongti 56x56 pixel font design_size 14.4 y_offset \-13 nmb_files \-1 output_name gsfs14 checksum 123456789 dpi_x 300 pk_files no tfm_files yes coding codingscheme GuoBiao encoded TeX text pk_directory $HBF_TARGET/pk/modeless/gb2312/gsfs14/ tfm_directory $HBF_TARGET/tfm/gb2312/gsfs14/ .fi .if t \fP .PP یک فایل پیکربندی، یک فایل متنی ساده متشکل از کلمات کلیدی و آرگومان‌های آن‌ها است. یک کلمه کلیدی باید در ابتدای یک خط باشد، در غیر این صورت کل خط نادیده گرفته خواهد شد. اگر کلمه‌ای که خط با آن آغاز می‌شود یک کلمه کلیدی نباشد، آن خط نیز نادیده گرفته خواهد شد. خط‌های خالی نیز نادیده گرفته می‌شوند. جستجو برای کلمات کلیدی به بزرگی و کوچکی حروف حساس نیست؛ در مقابل، آرگومان‌ها دقیقاً همان‌گونه که داده شده‌اند در نظر گرفته می‌شوند (به جز \(oqyes\(cq و \(oqno\(cq که می‌توانند با حروف بزرگ یا کوچک نوشته شوند). هر کلمه کلیدی دارای یک آرگومان است که باید با نویسه‌های فاصله (فاصله یا تب) از کلمه کلیدی جدا شده و در همان خط باشد. طول هیچ خطی نباید بیشتر از ۲۵۶ نویسه باشد. .PP می‌توانید از متغیرهای محیطی در فایل پیکربندی استفاده کنید. نویسهٔ گریز که آغازگر یک متغیر محیطی در فایل پیکربندی است، همواره \(oq\c .C $ \(cq است، حتی برای سیستم‌عامل‌هایی مانند DOS که قواعد دیگری دارند. دستور .B hbf2gf تنها نام‌های متغیرهای محیطی را تشخیص می‌دهد که با یک حرف یا یک خط زیر (underscore) آغاز شوند و در ادامه نویسه‌های الفبایی-عددی یا خط زیر داشته باشند. می‌توانید متغیر را درون آکولاد قرار دهید تا پایان نام متغیر مشخص شود، برای نمونه .C ${FOO} . برای نوشتن علامت دلار باید \(oq\c .C $$ \(cq را بنویسید. بسط متغیرهای محیطی در خود hbf2gf (بدون کمک روال‌های جستجوی kpathsea، emtexdir یا MiKTeX) بسیار محدود است؛ این ویژگی از نسخه‌های پیشین منتقل شده است. این قابلیت نمی‌تواند متغیرهای تنظیم‌شده در texmf.cnf را بسط دهد؛ همچنین نمی‌تواند بیش از یک دایرکتوری را به عنوان مقدار متغیر مدیریت کند. .B از آن جز برای پارامترهای \(oqpk_directory\(cq و \(oqtfm_directory\(cq .B استفاده نکنید! .PP این فهرستی از تمام کلمات کلیدی ضروری است: .TP .B hbf_header نام فایل سرآیند HBF برای قلم(های) ورودی. دستور .B hbf2gf از سازوکار جستجوی مشخص‌شده (kpathsea، emtexdir یا MiKTeX) برای یافتن این فایل استفاده می‌کند. .TP .B output_name ریشهٔ نام فایل‌های خروجی. یک شمارهٔ ده‌دهی دورقمی متوالی که از \(oq\c .C 01 \(cq آغاز می‌شود، پیوست خواهد شد. برای قلم‌های Unicode کلمه کلیدی .B unicode در زیر را ببینید. این مقدار تقریباً در تمام موارد با نام فایل پیکربندی یکسان است. .PP و اینک تمام کلمات کلیدی اختیاری: .TP .B x_offset عرض نویسه را افزایش می‌دهد. بر هر دو سمت اعمال می‌شود؛ مقدار پیش‌فرض برای گلیف‌های نچرخیده، مقداری است که در سرآیند HBF .RB ( HBF_BITMAP_BOUNDING_BOX ) آمده و با .B design_size (به پیکسل) مقیاس‌بندی شده است. .TP .B y_offset تمام نویسه‌ها را به بالا یا پایین جابه‌جا می‌کند؛ مقدار پیش‌فرض برای گلیف‌های نچرخیده، مقداری است که در سرآیند HBF .RB ( HBF_BITMAP_BOUNDING_BOX ) آمده و با .B design_size (به پیکسل) مقیاس‌بندی شده است. .TP .B design_size اندازهٔ طراحی قلم (به پوینت). .B x_offset و .B y_offset به این اندازه ارجاع دارند. پیش‌فرض\ 10.0 است. .TP .B slant میزان کجی قلم (به صورت \*(DEx\ /\ \*(DEy داده می‌شود). تنها مقادیر در بازهٔ 0\ \(<=\ \fBslant\fP\ \(<=\ 1 مجاز هستند. پیش‌فرض\ 0.0 است. .TP .B rotation اگر روی \(oqyes\(cq تنظیم شود، تمام گلیف‌ها ۹۰\ درجه پادساعت‌گرد چرخانده خواهند شد. آفست‌های پیش‌فرض ارائه‌شده در سرآیند HBF نادیده گرفته می‌شوند (و روی\ 0 تنظیم خواهند شد). پیش‌فرض \(oqno\(cq است. .TP .B mag_x .TQ .B mag_y مقادیر مقیاس‌بندی نویسه‌ها برای رسیدن به اندازهٔ طراحی. اگر تنها یک بزرگ‌نمایی داده شود، مقادیر x و y برابر فرض می‌شوند. پیش‌فرض \fBmag_x\fP\ =\ \fBmag_y\fP\ =\ 1.0 است. .PP .TP .B threshold مقداری بین ۱ و\ 254 که آستانه‌ای را برای تبدیل نگاشت خاکستری (graymap) درونی به بیت‌مپ خروجی تعیین می‌کند؛ مقادیر کمتر، پیکسل‌های بیشتری را حذف می‌کنند. مقدار پیش‌فرض\ 128 است. .PP .TP .B comment توضیحی در توصیف قلم؛ مقدار پیش‌فرض هیچ (none) است. .PP .TP .B nmb_fonts تعداد زیرقلم‌هایی که باید ایجاد شوند. مقدار پیش‌فرض برای ایجاد همهٔ قلم‌ها \-1 است. .TP .B unicode اگر \(oqyes\(cq باشد، یک عدد هگزادسیمال دو رقمی به عنوان شمارهٔ متوالی استفاده خواهد شد که با مقدار نخستین بایت از نخستین محدودهٔ کد آغاز می‌شود. پیش‌فرض \(oqno\(cq است. .TP .B min_char کمترین مقدار کدگذاری. اگر این مقدار با کمترین کد نویسه در فایل HBF یکسان نباشد، باید آن را برای دریافت آفست‌های درست زیرفایل تنظیم کنید. .PP .TP .B dpi_x .TQ .B dpi_y تفکیک‌پذیری افقی و عمودی چاپگر (بر حسب dpi). اگر تنها یک تفکیک‌پذیری داده شود، مقادیر x و y یکسان فرض می‌شوند. پیش‌فرض\ 300 است. .TP .B checksum یک چکسام برای تطبیق دادن فایل‌های .C GF با فایل‌های مناسب .C TFM . مقدار پیش‌فرض این عدد صحیح ۳۲ بیتی بدون علامت\ 0 است..TP .B coding یک توضیح برای توصیف طرح کدگذاری؛ پیش‌فرض هیچ (none) است. .PP .TP .B pk_directory دایرکتوری مقصد فایل‌های .C PK ؛ پیش‌فرض: هیچ (none). توجه! فایل بچ بررسی نخواهد کرد که آیا این دایرکتوری وجود دارد یا خیر. .TP .B tfm_directory دایرکتوری مقصد فایل‌های .C TFM ؛ پیش‌فرض: هیچ (none). توجه! فایل بچ بررسی نخواهد کرد که آیا این دایرکتوری وجود دارد یا خیر. .TP .B pk_files تعیین ایجاد شدن یا نشدن فایل‌های .C PK ؛ پیش‌فرض \(oqyes\(cq است. .TP .B tfm_files تعیین ایجاد شدن یا نشدن فایل‌های .C TFM ؛ پیش‌فرض \(oqyes\(cq است. .TP .B ofm_file تعیین ایجاد شدن یا نشدن یک فایل .C OPL ؛ پیش‌فرض \(oqno\(cq است. سپس فایل بچ از .B ovp2ovf توزیع Omega برای تبدیل آن به یک فایل .C OFM و یک فایل .C OVF استفاده خواهد کرد. فایل .C OPL صرفاً تمام زیرقلم‌ها را دوباره به یک قلم واحد Omega نگاشت می‌کند. .TP .B long_extension اگر \(oqyes\(cq باشد، فایل‌های .C PK شامل وضوح در پسوند خواهند بود (مانند .C gsso1201.300pk ). این مورد فقط بر فایل بچ تأثیر می‌گذارد (پیش‌فرض \(oqyes\(cq است). .TP .B rm_command دستور شل برای حذف فایل‌ها؛ پیش‌فرض: \(oqrm\(cq. .TP .B cp_command دستور شل برای رونوشت فایل‌ها؛ پیش‌فرض: \(oqcp\(cq. .TP .B job_extension پسوند فایل بچ که .B gftopk و .B pltotf را برای تبدیل فایل‌های .C GF و .C PL به ترتیب به فایل‌های .C PK و .C TFM فراخوانی می‌کند؛ پیش‌فرض هیچ (none) است. . . .SH "جستجوی فایل (FILE SEARCHING)" .B hbf2gf برای جستجوی فایل‌ها از یکی از کتابخانه‌های .BR kpathsea ، .BR emtexdir ، یا .B MiKTeX استفاده می‌کند .RB ( emtexdir تنها روی سیستم‌عامل‌هایی با پیش‌زمینه شبه MS-DOS یعنی MS-DOS، OS/2 و Windows کار خواهد کرد؛ .B MiKTeX برای سیستم‌های Win32 است). ..SS kpathsea نسخهٔ واقعی kpathsea در صورت اجرای دستور .B hbf2gf .BR \-\-version روی صفحه نمایش داده می‌شود. .PP در اینجا جدولی از نوع فایل و متغیرهای متناظر .B kpathsea آمده است. .PP .in +4m .ta 2i .br .C "\&.hbf MISCFONTS" .br .C "\&.cfg HBF2GFINPUTS" .PP لطفاً برای جزئیات بیشتر دربارهٔ این متغیرها، فایل‌های info مربوط به .B kpathsea را مطالعه کنید. تصمیم‌گیری دربارهٔ این‌که از کدام طرح نام‌گذاری برای متغیرها استفاده شود، در زمان کامپایل انجام می‌گیرد. .PP شما باید متغیر .C TEXMFCNF را روی پوشه‌ای که فایل پیکربندی .C texmf.cnf شما در آن قرار دارد تنظیم کنید. .PP در اینجا دستور مناسب برای یافتن مقداری که یک متغیر .B kpathsea روی آن تنظیم شده آمده است (ما از .C MISCFONTS به عنوان مثال استفاده می‌کنیم). این روش به ویژه زمانی مفید است که متغیری در .C texmf.cnf یا در محیط تنظیم نشده باشد، و در نتیجه به مقدار پیش‌فرضی اشاره دارد که به صورت سخت‌کد شده درون کتابخانهٔ .B kpathsea قرار دارد. .PP .in +2m .C "kpsewhich \-progname=hbf2gf \-expand\-var='$MISCFONTS'" .PP ما نام برنامه را نیز انتخاب می‌کنیم چرا که امکان مشخص کردن متغیرهایی وجود دارد که تنها برای یک برنامهٔ خاص جستجو می‌شوند \(en در مثال ما این متغیر .C MISCFONTS.hbf2gf خواهد بود. .PP روشی مشابه اما نه کاملاً یکسان، اجرای دستور زیر است: .PP .in +2m .C "kpsewhich \-progname=hbf2gf \-show\-path='misc fonts'" .PP [فهرست کاملی از انواع قالب‌ها را می‌توان با وارد کردن \(oq\c .C "kpsewhich \-\-help" \(cq در خط فرمان به دست آورد.] این دقیقاً روشی است که .B hbf2gf برای جستجوی فایل‌ها استفاده می‌کند؛ عیب این روش آن است که تمام متغیرها بسط داده می‌شوند که می‌تواند رشته‌های بسیار طولانی ایجاد کند. . .SS emtexdir .PP در اینجا فهرست پسوندها و متغیرهای محیطی مربوط به آن‌ها که باید در .C autoexec.bat (یا به ترتیب در .C config.sys برای OS/2) تنظیم شوند آمده است: .PP .in +4m .ta 2i .br .C "\&.hbf HBFONTS" .br .C "\&.cfg HBFCFG" .PP اگر یکی از متغیرها تنظیم نشده باشد، یک پیام هشدار صادر می‌شود. پوشهٔ جاری همیشه جستجو خواهد شد. طبق معمول، افزودن یک علامت تعجب به انتهای مسیر پوشه باعث جستجوی زیرپوشه‌ها تا یک سطح عمق می‌شود و دو علامت تعجب باعث جستجو در تمام زیرپوشه‌ها می‌گردد. مثال: .PP .in +2m .C HBFONTS=c:\\\\fonts\\\\hbf!!;d:\\\\myfonts\\\\hbf! .PP ساختارهایی مانند \(oq\c .C c:\\\\fonts!!\\\\hbf \(cq امکان‌پذیر نیستند. ..SS MikTeX .PP لطفاً برای جزئیات بیشتر به مستندات .B MiKTeX مراجعه کنید. . . .SH "محدودیت‌ها (LIMITATIONS)" اندازه خروجی x و y نباید از .BR MAX_CHAR_SIZE ، که در زمان کامپایل تعریف می‌شود فراتر رود؛ مقدار پیش‌فرض آن 1023\ (پیکسل) است. . . .SH "همچنین ببینید (SEE ALSO)" .BR ttf2pk (1) .PP .C hbf2gf.w : 'in +\n(.ku این کد منبع نوشته شده به زبان .B CWEB است که می‌تواند با استفاده از .B cweave به یک سند آراسته \*(TX تبدیل شود. بسته CJK همچنین شامل یک فایل .C hbf2gf.pdf از پیش قالب‌بندی‌شده است. .PP فایل‌های مستندات .B CJK (\c .C hbf2gf.txt ). .PP استاندارد .B Hanzi Bitmap File .RB ( HBF ) نسخه\ 1.3؛ موجود در .C \%ftp.ifcss.org . .PP مستندات Omega موجود در .C ftp.ens.fr و میزبان‌ها و آینه‌های CTAN. . . .SH "فایل‌ها (FILES)" .TP .C *.cfg اسکریپت‌های پیکربندی .BR hbf2gf . .TP .C *.hbf فایل‌های سرآیند HBF که فونت‌های بیت‌مپ با عرض ثابت را توصیف می‌کنند. توجه داشته باشید که نام(های) خود فونت بیت‌مپ مشخص‌شده در فایل‌های سرآیند، برای .B hbf2gf اهمیتی ندارند. . . .SH "در دسترس بودن (AVAILABILITY)" .B hbf2gf بخشی از بسته ماکروی CJK برای \*(LE است که در میزبان‌های CTAN و آینه‌های آن در دسترس است. .PP فونت‌های CJK به همراه فایل‌های سرآیند HBF را می‌توان در .C ftp.ifcss.org و آینه‌های آن پیدا کرد. . . .SH "نویسندگان (AUTHORS)" Werner Lemberg .C .br Ross Paterson (the HBF API) .C