return - みる会図書館


検索対象: BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術
20件見つかりました。

1. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

マリスト 2 可 oy デバイスドライバのソースのつづき err = usbd—alloc—report—desc (uaa—>iface , M_TEMP ) ; &desc, &size, if (err) USB_ATTACH_ERROR_RETURN ; if ( ! hid—locate (desc , size , HID—USAGE2 (HUP—GENERIC-DESKTOP , HUG—X) , hid—input , &sc—>sc—loc—x, &flags) ) { printf("%s : joy has no X report*n" , USBDEVNAME(sc¯>sc—dev) ) ; USB_ATTACH_ERROR_RETURN ; if ( (flags & JOY—FLAGS—MASK) ! = JOY—FLAGS) { printf ( "%s : X report Ox % 04X not supported*n" USBDEVNAME(sc—>sc—dev) , flags) ; USB_ATTACH_ERROR_RETURN ; if ( ! hid—locate (desc , size , HID—USAGE2 (HUP—GENERIC-DESKTOP , HUG—Y) , hid—input , &sc—>sc—loc—y, &flags) ) { printf("%s : joy has Ⅱ 0 Y report*n" , USBDEVNAME(sc->sc—dev)) ; USB_ATTACH_ERROR_RETURN ; if ( (flags & JOY—FLAGS—MASK) ! = JOY—FLAGS) { printf ( : Y report Ox%04x not supported*n" USBDEVNAME(sc—>sc—dev) , flags) ; USB_ATTACH_ERROR_RETURN ; if (hid—locate (desc , size , HID—USAGE2 (HUP—GENERIC—DESKTOP , HUG—RZ) , hid—input , &sc->sc—loc—z, &flags)) { if ( (flags & JOY-FLAGS—MASK) ! = JOY—FLAGS) { / * Bad Rz , ignore it . * / SC—>SC_IOC_Z . SIZe } else { sc—>flags ー = UJOY—RZ; / * figure out the number 0f buttons * / for (i 1 ; i く = MAX—BUTTONS ; i + + ) if ( ! hid—locate (desc , size , HID—USAGE2 (HUP—BUTTON , hid—input , &loc—btn, 0 ) ) break; sc—>nbuttons sc—>sc—loc_btn = malloc(sizeof (struct hid—location)*sc—>nbuttons , M_USBDEV , M_NOWAIT) ; if ( ! sc—>sc—loc—btn) { printf ( : no memory*n" , USBDEVNAME (sc¯>sc—dev) ) ; USB_ATTACH_ERROR_RETURN ; printf ("%s : %d buttons%s*n" , USBDEVNAME(sc—>sc—dev) , sc—>nbuttons, sc—>flags & UJOY—RZ ? " and the rotation Of Z—axis . 1 ; i く = sc—>nbuttons ; i + + ) hid—locate(desc, size , HID—USAGE2(HUP-BUTTON, i) , hid—input , &sc—>sc—loc—btn[i—l] , 0 ) ; for (i sc—>sc_isize = hid—report—size(desc, size, hid—input, &sc—>sc—iid) ; sc—>sc—ibuf = malloc(sc—>sc—isize, M—USBDEV, M—NOWAIT) ; if (sc—>sc—ibuf = = NULL) { printf ( "%s : Ⅱ 0 memory*n" , USBDEVNAME(sc¯>sc-dev) ) ; free(sc—>sc—loc—btn, M—USBDEV) ; USB_ATTACH_ERROR_RETURN ; BSD magazine 2000 NO. 3

2. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

ァ - モン君のソ - ス探検 if error message should be printed * / index intO parent argv vector * / character checked for validity * / reset getopt * / argument associated with option * / opt e rr opt ind 1 , opt opt , optreset ; *optarg ; int char #define BADCH (int)' #define BADARG #define EMS G * getopt Parse argc/argv argument vector. int getopt (nargc , nargv , ostr) int nargc ; Char * COIISt ; C011St Char *OStr ; extern Char *__progname ; static char *place = EMSG; char * 01i ; / * option letter processing * / / * option letter list index * / if (optreset Ⅱ !*place) { optreset if (optind > = nargc Ⅱ * (place nargv [optind] ) ! = place = EMSG; return ( ー 1 ) ; / * update scanning pointer * / if (place [ 1 ] & & * + + place + + optind; place = EMSG; return ( ー 1 ) ; / * found if ( (optopt ! ( 01i * if the user didn't specify * assume means ー 1 . if (optopt (int)' return ( ー 1 ) ; if ( ! *place) + + opt 土Ⅱ d ; if (opterr & & *ostr ! = (void)fprintf (stderr , "%s : illegal option return (BADCH) ; / * option letter okay? * / (int)*place + + ) (int)' strchr(ostr, optopt) ) ) { as an option , -progname , optopt) ; if ( * + + 01i ! = optarg = NULL ; if ( ! *place) 十十 optind ; / * do t need argument * / 752 BSD magazine 2000 No. 3

3. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

デ - そン君のソ - ス探検 ▽リスト 2 getopt()z のつづき一 else if (nargc く = + + optind) { optarg = place ; if (*place) else { if (*ostr place = EMSG; / * need an argument * / / * Ⅱ 0 arg * / / * no white space * / return (BADARG) ; if (opterr) (void)fprintf (stderr, : option requires an argument -progname , opt opt ) ; return (BADCH) ; else optarg place = EMSG; 十十 optind ; ばわかることだよ。 / ヾ / ヾ : そうそう。パラメ return (optopt) ; / * white space * / nargv [optind] ; / * dump back option letter * / ータを取る場合も、ゆっくり読め モンママが登場です。 気が付くと、時計の針は 12 時を回っていました。再びデー ートを書くことを忘れてしまい、月曜日に先生に怒られまし プラネタリウムに連れていってもらいました。すっかりレポ getopt ( ) か理解できて気をよくしたデーモン君は、午後から 飯にしなさい。今日はシーフードカレーですよ。 ママ : はいはい。パソコンいじりはそれぐらいにして、 0 2000 NO. 3 BSD magazine

4. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

のつづき マリスト 2 ujoy デバイスドライバのソース 0 リ明デーイスドライバ フログラミング if ()d = = NULL Ⅱ id—>bInterfaceC1ass ! = UCLASS—HID) return (UMATCH_NONE) ; M_TEMP) ; err = usbd—alloc_report—desc (uaa—>iface , &desc, &size, if (err) return (UMATCH_NONE) ; if (hid—is—collection(desc, size, HUG_JOYSTICK) ) ) HID_USAGE2 (HUP_GENERIC_DESKTOP , ret = UMATCH_IFACECLASS ; ret = UMATCH_NONE ; free(desc, M—TEMP) ; return (ret) ; else USB _ATTACH ()j oy ) USB_ATTACH_START ()j oy , sc , uaa) ; usbd_interface_handle iface = uaa—>iface ; usb—interface—descriptor_t *id; usb—endpoint—descriptor—t *ed ; int size; VOid usbd_status err ; char devinfo [ 1024 ] ; u—int32—t flags ; int i ; struct hid_location loc_btn; sc—>sc_udev = uaa—>device; sc—>sc_iface iface; id = usbd—get—interface—descriptor (iface) ; usbd—devinfo (uaa—>device , 0 , devinfo) ; USB_ATTACH_SETUP ; printf("%s: %s , iclass %d/%d*n" , USBDEVNAME(sc—>sc—dev) , devinfo, id—>bInterfaceC1ass, id->blnterfaceSubC1ass) ; ed = usbd—interface2endpoint—descriptor (iface , 0 ) ; if ()d = = NULL) { printf ("%s : could not read endpoint descriptor*nl' USBDEVNAME(sc—>sc—dev) ) ; USB_ATTACH_ERROR_RETURN ; DPRINTFN ( 10 , ( "uj oy_attach : bLength=%d bDescriptorType=%d " "bEndpointAddress=%d—%s bmAttributes=%d wMaxPacketSize=%d" " blnterval=%d*nl' ed—>bLength, ed—>bDescriptorType , ed—>bEndpointAddress & UE_ADDR, UE_GET_DIR(ed—>bEndpointAddress) ==UE_DIR_IN? "in" ed—>bmAttributes & UE_XFERTYPE , UGETW(ed—>wMaxPacketSize) , ed->blnterval) ) ; if (UE_GET_DIR(ed—>bEndpointAddress) ! = UE—DIR_IN Ⅱ (ed—>bmAttributes & UE—XFERTYPE) ! = UE—INTERRUPT) { printf ( : unexpected endpoint*nl' USBDEVNAME(sc—>sc—dev) ) ; USB_ATTACH_ERROR_RETURN ; "out ed—>bEndpointAddress ; sc—>sc—ep—addr BSD magazine 2000 NO. 3

5. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

ラ デ リ明スドライ ~ 。。 ~ フログラミング free (desc , M—TEMP) ; #ifdef USB_DEBUG DPRINTF( ("uj oy_attach : DPRINTF( ("uj oy_attach : sc—>sc_loc X. POS, SC—>SC_IOC_X. size)) ; DPRINTF( ("uj oy_attach: SC—>SC_IOC_X. POS, sc—>sc_loc_x. size)) ; if (sc—>flags & UJOY—RZ) DPRINTF ( ( "uj oy_attach : Rz*t%d/%d*n" SC—>SC_IOC—Z. POS, sc—>sc_loc_z. size)) ; 1 ; i く = sc—>nbuttons ; i 十十 ) { DPRINTF( ("uj oy_attach : B%d*t%d/%d*n" i, sc—>sc—loc—btn[i—l] . pos,sc—>sc—loc—btn[i—l] . size)) ; fo て (i DPRINTF(("ujoy—attach: size=%d, id=%d*n" , sc—>sc_isize, sc—>sc_iid) ) ; #endif usbd—add—drv—event (USB—EVENT—DRIVER_DETACH , sc—>sc—udev, USBDEV(sc—>sc—dev) ) ; USB _ATTACH_ SUCCESS _RETURN ; int uj oy—activate (self , act) device—ptr—t self ; enum devact act ; (struct ujoy—softc *)self ; struct uJ oy—softc *sc switch (act) { c as e DVACT_ACTIVATE : return (EOPNOTSUPP) ; break ; c ase DVACT_DEACTIVATE : sc—>sc—dying 1 ; break ; return ( 0 ) ; USB-DETACH ()j oy ) USB_DETACH_START()j oy , sc); DPRINTF( ( "ujoy_detach: sc=%p flags=%d*n' sc, flags)); sc->sc—dying = 1 ; free(sc—>sc—loc—btn, M—USBDEV) ; free (sc—>sc—ibuf , M—USBDEV) ; usbd—add—drv— event (USB—EVENT—DRIVER_DETACH , sc—>sc_udev, USBDEV(sc—>sc—dev)) ; return ( 0 ) ; BSD magazi ne 2000 NO, 3

6. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

ただ、プランチの変更でファイルの 追加コマンドである add サプコマンドを 行うと、削除されたファイルが入る Attic ディレクトリに入れられる ( 図 17 ) 。そして、このファイルは、「メイ % cvs —f diff example . c 工 ndex : example . c 2 ⅱ尾、を . C , V . C , V ー 2 , 15 Exp $ " ・ ンツリーに存在しないファイルである」 ということで削除されたファイルとし て登録されてしまう。削除されたファ イルというのが気になるかもしれない が、そのような仕組みになっていると RCS file : /usr/home/kogane/cvsroot/exampl/example 13a14 diff —rl . 2 example . c retrieving revision 1 . 2 return 0 ; 図 21 lndex : example . c % cvs diff —r 1.1 example. c cvs の - f オフションを使用する RCS file : /usr/home/kogane/cvsroot/exampl/example retrieving reviSIon 1 . 1 diff -c ーて 1 . 1 example ・ c 2000 / 01 / 26 * * * example. C 2000 / 01 / 26 example . c 14 : 45 : 28 16 : 32 : 13 1 . 1 * This is CVS example file . ! static char rcs_id ロ $ld: example. c,v 1.1 2000 / 01 / 26 14 : 45 : 28 kogane Exp $ "$ld: example. c,v int main(int argc , char *argv ロ ) 1 . 1 2000 / 01 / 26 14 : 45 つ ; printf ("This is CVS example program*n This is CVS example file . $ld: example. c,v 1 .2 2000 / 01 / 26 15 : 59 : 44 kogane Exp $ ! static char rcs_id[] "$ 工 d: example . c,v 1 . 2 2000 / 01 / 26 15 : 59 : 28 kogane Exp : 44 kogane 十 十 注 2 int main(int argc , char *argv ロ ) printf("first change*n") ; printf ( "This is CVS example program*n return 0 ; 前に述べたように、 cvs は diff コマンドを内蔵している。 図 22 特定のリビジョンとの比較 いうことで納得するしかない。このフ ァイルは、メインツリーにマージする checkout-j オプションでマージすること により、 Attic から通常のディレクトリ に移動する。「 ( 13 ) マージ」参照。 ーーソースファイルの差分を見る チェックアウトしたディレクトリで、 どのようにファイルを修正したか知り たくなることがある。そのようなとき は、 diff サプコマンドを使用する ( 図 18 ) 。これは、 14 行目に return 0 ; を追加 した状態であることを示している。 のような表示は、 diff コマンドの標準の 一時的に . cvsrc のオプションを見て欲 示される ( 図 20 ) 。 を実行してもコンテキスト di 仕形式で表 これで、オプションのない diff コマンド diff —c # # で始まる行はコメント % cat ~/ . cvsrc ればよい。 トリの . csvrc ファイルに次のよう記述す そのような場合には、ホームディレク ションをつけて表示したくなるだろう。 この diff コマンドのように、常に一 c オプ 示されるので、差分が見やすくなる注 2 。 れらの表示では、ソース行の前後が表 オプション ) 形式が使える ( 図 19 ) 。 プション ) とか、ユニファイド diff (-u マンドと同様にコンテキスト diff ()c オ di サプコマンドでは、 UNIX の diff コ % cvs diff ( 表示結果は省略する ) 。 すべてのファイルの差分が表示される ファイル名を省略するとリポジトリ 表示と同じである。 2000 No. 3 BSD magazine

7. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

グを付ける。 —r REL_OI_FIX % cvs rtag REL—OI example この rtag はリポジトリに対してタグを 付けるので、チェックアウトしたディ レクトリで実行する必要はない。 設定したタグをチェックアウトコマ ンドで指定すれば、その時点のソース を再構成できる。 新しい別のディレクトリで図 14 のよ うに行えば、そのディレクトリ下の exampl には SNAP ー 000209 や REL 01 と タグを付けた時点のソースが復元され る。タグを付けてチェックアウトした ファイルは、修正したりファイルを追 加することができないので、チェック アウトを実行するよりは exp 。 rt コマンド を使用するほうがよいだろう ( 図 15 ) 。 export コマンドは checkout とほとんど同 じであるが、 cvs の管理ディレクトリ アウトを行う。 % cd exampl CVS checout cd -/fixdir exampl そこで、通常の修正や追加を行って、 コミットすればファイルが修正される。 % CVS commit % cvs add NEWFILE % cvs diff -c example 工 ndex : example . c . C RCS file : /usr/home/kogane/cvsroot/exampl/example. c , v retrieving revision 1 . 2 diff -c ーて 1 . 2 example . c 2000 / 01 / 26 15 : 59 : 44 * * * example . C example. c 2000 / 01 / 26 16 : 32 : 13 * * * 11 , 14 * * * * 11 , 15 1 . 2 十 printf ( "This is CVS example program*n't ) ; printf ( "first change*n" ) ; return 0 ; % cvs diff —u example. c lndex : example . c RCS file : /usr/home/kogane/cvsroot/exampl/example. c , v (cvs) が作成されない。 ブランチの指定 1 6 ) 。 REL-OI-FIX のタグが設定された せすにタグを付けることができる ( 図 rtag コマンドを使えば、チェックアウト % cvs tag —b REL—OI—FIX % cvs checout ーて REL—OI exampl を実行する。 して、そのディレクトリで tag コマンド バージョンでチェックアウトする。そ tag コマンドを使う場合は、まず古い 指定したタグはプランチタグとなる。 マンドに -b オプションを指定すると、 チを設定することである。 tag 、 rtag コ のもうひとつの重要な機能は、プラン ランチを指定する。 tag 、 rtag コマンド うためには、そのバージョンからのプ 古いバージョンを元にして修正を行 BSD magazine 2000 NO. 3 なら、新しいディレクトリでチェック 70 retrieving 1 . 2 diff ーⅡ—rl . 2 example. c example. c 2000 / 01 / 26 15 : 59 : 44 + + + example. c 2000 / 01 / 26 16 : 32 : 13 ー 11 , 4 + 11 , 5 1 . 2 printf ("This is CVS example program*n") ; 十 printf ( "first change*n" ) ; return 0 ; 図 19 - c オプションを使用する % cvs diff example. c lndex : example . c RCS file : /usr/home/kogane/cvsroot/exampl/example . c , v retrieving revision 1 . 2 diff —c ーて 1 . 2 example. c 2000 / 01 / 26 15 : 59 : 44 * * * example . c example. c 2000 / 01 / 26 16 : 32 : 13 * * * 11 , 14 * * * * 11 , 15 1 . 2 printf ( "This is CVS example program*n") ・ printf ( "first change*n") ; 十 return 0 ; 図 20 . cvs 「 c にオプションを指定した場合

8. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

マリスト 1 Ucat.java lmport java. 10 . * ; import Java. uti1. テキストを読み込み、出力をする。 実行時に指定できるオプションは、つぎのとおり。 く pre> Usage: Java Ucat [—i code] [ ー 0 code] [file ー 1 code ー 0 code く /pre> く p> 入力に用いる漢字コード ( 省略時は Unicode) 出力に用いる漢字コード ( 省略時は Unicode) 漢字コードの詳細は、 JDK Specification 」の「く a ドキュメントの「エ nternationalization href="http://java.sun. com/products/jdk/l .2/docs/guide/int l/encoding. doc. htmI">Supported Encodings く /a> 」を参照。 く pre> Unicode UTF8 JIS EUC_JP SJIS Unicode UTF—8 JIS 日本語 EUC シフト JIS JISAutoDetect JIS/EUC—JP/SJIS の自動判別 (Unicode への変換 く /pre> 時のみ使用可能 ) 工ラーにならなくても、文字化けしている可能性が高いことに注意する。 なる。 工ンコードが異なる場合、 sun. io. Ma1formed 工 nputException 工ラーと 読み込むときに用いた漢字コードと、実際のテキストの漢字コードの く p > UnsupportedEncodingException 工ラーとなる。 使用できないエンコーティング名を指定した場合は、 public class Ucat { / / クラス変数 private static ファイル名のリスト private static private static コード * メインルーチン Vector String String infiles lncode out c Ode ; / / 入力 ; / / 入力文字コ new Vector ( ) "Unicode" ; 〃出力文字 GURU 師への迸 out . write(c) ; out . flush ( ) ; / / バッフアにたまっているのを出力 in. close() ; out . close() ; } catch (IOException e) { System. err. print1n("Error: " + e. t0String()) ; * 使い方の表示 private static void printUsage() { PrintStream 0 System. err ; 0. print1n("Usage : java Ucat C-i code] [ ー 0 code] * オプション処理 Cfi1e 8/JIS/EUC_JP/SJIS") ; 。・ println(" 文字コード例・ は Unicode) " ) ; ー 0 code 0. println( " は Unicode) " ) ; —i code 0. println(" 0. println("") ・ . Unicode/UTF— 出力に用いる文字コード ( 省略時 入力に用いる文字コード ( 省略時 private static boolean parseArguments (String args ロ ) * @return boolean 成功すれば true 、失敗は false を返す。 if (args [i] ・ equals("-i")) { for (int i=O; i く args ・ length; i + + ) { throws FiIeN0tFoundException { infiles . addE1ement (new } else { return false ; printUsage ( ) ; } else if (args [i] . charAt ( 0 ) outcode = args Ci] , 十十 ; } else if (args Ci] ・ equals("-o")) { incode = args [i] ; i 十十 ; infiles . addEIement (System. (n) ; if (infiles . size() Fi1eInputStream(args [i] ) ) ; public static void main(String args ロ ) try { if ( ! parseArguments (args) ) { System. exit(l) ; BufferedReader in ; while ((c=in. read()) ! = ー 1 ) { incode) ) ; InputStreamReader( (InputStream) infiles . eIementAt (i) , in = new BufferedReader (new int C ; for (int i=0; i く infiles . size(); i + + ) { OutputStreamWriter(System. out, outcode)) ; BufferedWriter out = new BufferedWriter (new return true ; 2000 No. 3 BSD magazine 789

9. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

れぞれの実装に依存する。たとえば、 現在の、 x のサンプル実装 (XFree86 も含む ) の Xlib は Unicode のロケールを サポートしていないが、 Unicode ロケー ルを持つ solaris の OpenWindows は当然 サポートしている。 XSetLocaleModifiers(3X) によって設 定されるロケールモディファイアは、 ロケールの機能の調整を行うためのも ので、 " @ カテゴリ = 設定内容 " という文 字列で指定する。現在の x のサンプル 実装では、文字入力サーバーの選択 (@XIM) に利用されているのみである。 これを空文字にしておくと、環境変数 XMODIFIERS から参照されるようにな るので、そうしておけば良いだろう。 &count) ! = Success) { MB/WC 変換 x で国際化プログラミングを行う場 合にも、 MB / wc の概念はそのまま通 用する。ファイルなどとの入出力や通 信にはマルチバイト文字列を用い、内 部でのデータ処理にはワイド文字を利 用することになる。これらの変換には、 libc の関数群をそのまま利用すれば良 XIib の機能としては、 MB/WC とテキ ストプロバティとを相互変換する関数 0 表 1 国際化テキストプロバティ変換関数群 XmbTextListToTextProperty XwcTextListToTextProperty XmbText P ropertyToTextList XwcTextP ropertyToTextList XFreeStringList XwcFreeStringList XDefau ItString 表 2 テキストプロバティのスタイル指定 マリスト 2 MB → WC 変換を行うコード int Xmbstowcs (Disp1ay *dpy, wchar—t *dst , wchar_t **wclist ; int count ; char *mbptr XTextProperty textprop ; / * テキストプロバティに変換する * / const char *Src , size_t Size) if (XmbTextListTOTextProperty(dpy , &mbptr , 1 , XTextSty1e , &textprop) ! = fprintf (stderr, "can ー t convert tO TextProperty*n") ; Success) { printf (stderr, "can ー t convert tO TextProperty*n" ) ; if (XwcTextPropertyTOTextList (dpy , &textprop , &wclist , / * テキストプロバテイから戻す * / return ー 1 ; XFree (textprop. value) ; return ー 1 ; } else { wcsncpy(dst, wlist [ 0 ] , size) ; XwcFreeStringList (wclist) ; が存在するため、これを介することで MB / wc の相互変換が可能になるが、 もともと MB / wc 変換のために設計さ れているわけではないので、利用は煩 雑になる。これには、表 1 のような関 数がある注 4 。 テキストプロバティは X のクライアン ト間で用いるデータ構造 ( 後述 ) で、 内部的にはバイト列 + プロバティの工 ンコーディング種別の情報からなって いる。 テキストプロバティのエンコーディ ングには、次の 3 種類がある return 0 ; STRING バイト列 ( 工ンコ ード情報なし。 ISO-Latin1 のみ ) TEXT COMPOUND TEXT ケール名称が格納されている ) バイト列 ( 工ンコード情報あり。 ロ XStrigStyle XCompoundTextStyIe XTextStyIe XXStd ℃ CTextStyle STRING に変換 TEXT に変換 COMPOUND TEXT に変換 Latin1 の文字列なら STRING に、そうでなければ COMPOUND TEXT に変換 コンパウンドテキスト ( ロケールに 非依存の汎用マルチスクリプト ) この選択は、変換時に style 引数で指定 できる ( 表 2 ) 。 同じロケール内部での MB / wc の相 互変換を行う場合には、間で TEXT を 利用すれば良い注 5 。 COMPOUND— TEXT は異なるロケール間での変換に 用いる。 テキストプロバティを介して MB → 注 4 実は現在の Xlib のサンプル実装には、隠し関数として MB / wc 変換の関数が搭載されており、 xaw などでは内部でこれを利用している。しかし、これは公 式なものではなく、将来の仕様も保証されたものではないので利用はお勧めできない。 注 5 現在の実装では、この TextProperty/TextList を介しておけば ( 正確にはあと XIib の「隠し関数」も同様 ) ロケールを正しくサポートしていない OS において も、「 x の国際化」機能が利用「できてしまう」。 70 BSD magazine 2000 NO. 3

10. BSD magazine No.3 BSDではじめよう! ; BSD日本語環境構築術

マリスト行 arch/mmeye/mmeye/machdep 、 c の initSH3() の一部 NetBSD 移植の実際 0 VOid initSH3(pc) void *PC ; / * XXX return address paddr-t avail ; pd-entry-t *pagedir ; pt-entry-t *pagetab, pte, u—int sp; int X ; char *P ; avail = sh3-round-page(end) ; . common area, page dir * CIear . bSS , area , else pagedir CPTDPTDIJ 咢 pte ; * Activate MMU bcopy(), TLBVECTOR, x) ; x = tlbmisshandler_stub end p = tlbmisshandler-stub; / * Set TLB miss handler / * set PageDirReg * / processO stack, page table p = (char *)avail + ( 1 + UPAGES) bzero(edata, p ー edata) ; * inst a11 trap handler area #def ine MMUCR_AT #def ine MMUCR_IX #def ine MMUCR_TF #def ine MMUCR_SV 0X0001 0X0002 0X0004 0X0100 bcopy(MonTrap100, Trap100Vec, MonTrap100- bcopy(MonTrap600, Trap600Vec, MonTrap600- -asm ("ldc % 0 , vbr" : "r" (VBRINIT)) ; * NBPG + NBPG * 9 ; end end / * address traslation enable * / / * index mode * / / * TLB flush * / / * single virtual space mode * / ー MonTrap100) ; ー MonTrap600 ) ; edat a ー kernel text ー data ー bss ー end Page Dir NBPG ー Proc0 Stack ー Page Tab1e USPACE ( = 4*NBPG) 0 9*NBPG Bui1d initial page tables の 0 洋 : 4 ? ② these structures are used by S/W. ln SH3 H/W doe s not support PTD , Construct a page table directory ー十 3 R 印』ト : 」新丁 : 工第 $ 0 * NOW here is virtual address / * Set procOpaddr * / proc0paddr = (void * ) (avail + NBPG) ; / * Set pcb->PageDirReg of procO * / proc0paddr->u-pcb. pageDirReg = (int)pagedir, / * avail-start is first available physical memory address * / 0 / * atdevbase is first available logical memory address * / atdevbase = VADDRSTART ; 中略 / * Ca11 pmap initialization tO make new kernel address space * / * lnitialize error message buffer ()t end Of core) . * set bOOt device information initmsgbuf( (caddr-t)msgbuf-paddr, round-page(MSGBUFSIZE)) ; te ト一 K 背「 PG-V lPG-4K ー PG-M ー PG-N te ・ DSHI 0Xd1000000 , 0Xd1400000 , 0Xd1800000 , 0Xd1C00000 * / / * make pde f 0 て 0Xd0000000 , 0Xd0400000 , 0Xd0800000 , 0Xd0C00000 , 0 0 て (x 0 ; x く nkpde; x + の { pagedir[(VADDRSTART > > PDSHIFT) + 幻 = pteS setup-bootinfo() ; / * setup proc0 stack * / sp = avail + NBPG + USPACE * XXX We canl t return here, ー 16 ー sizeof(struct trapframe) ; pte 十 = NBPG : / * lnstall a PDE recursively mapping page directory as - ー第 1 ・を」 ) pa 空 1 て ; pte ト PG-V ー PG-4K ー PG-KW IPG-M ー PG-N ・ ef 洫 ( P 0 a page table ! because we change stack pointer. --asm --volatile ("jmp @%0 ; mov % 1 , r15 " SO jump t0 return address directly. 2000 No. 3 BSD magazine 7 刀