-1 - みる会図書館


検索対象: UNIX MAGAZINE 1994年10月号
274件見つかりました。

1. UNIX MAGAZINE 1994年10月号

ー⑨ 連載 /Windows NT #undef read = 0 ; int read(int fd , char *buf , int numRead ; int wcl , wc2; BYTE *mb ; TCHAR *wc ; int wclen; int 1 ) static TCHAR 1eftOverBuf [ 128 ] ; static int 1eftOver = 0 ; static BYTE 1eadByte ; static int 1eadByteExist WC a110Ca(1 + sizeof (1eftOverBuf)/sizeof(TCHAR)) ; a110Ca(1 + sizeof (1eftOverBuf) ) ; if (cp-read> 0 ) { if (1eadByteExist) { mb [ 0 ] = 1eadByte; numRe ad —read(fd, mb + IeadByteExist , (1/2—IeftOver)—1eadByteExist + sizeof (1eftOverBuf)/sizeof (TCHAR) ) ; if (numRead く = 0 ) { if ( (1eadByteExist > 0 ) Ⅱ 1eftOver > 0 ) numRead = 0 ; else return numRead ; wcl = MuItiByteToWideChar (cp—read , MB—PRECOMPOSED, mb , numRead + 1eadByteExist¯l , wc , (1 + sizeof (1eftOverBuf))/sizeof (TCHAR)) ; wc2 = MuItiByteTOWideChar (cp—read, MB—PRECOMPOSED , mb , numRead + 1eadByteExist , wc , (1 + sizeof (1eftOverBuf))/sizeof(TCHAR) ) ; if (wc2 fprintf (stderr , TEXT ( "Mu1tiByteTOWideChar failed %x\n" ) , GetLastError ( ) ) ; return ー 1 ; i f ( numRe ad 1eadByteExist = 0 ; wc2; WClen else if ( ( cl く wc2) & & ((mb[numRead + 1eadByteExist—1] ) & 0X80 ) ) { IeadByteExist = 1 eadByt e mb [numRead + 1eadByteExist—1] ; int t, result ; WCIen = WC2; 1eadByteExist else { wclen = WCI ; memcpy (buf , 1eftOverBuf , 1eftOver*sizeof (TCHAR) ) ; memcpy(buf + 1eftOver*sizeof (TCHAR) , wc , (t = ( ( ( 1 / 2 ー 1eftOver) > wclen)? wclen: ( 1 / 2 ー = (t + 1eftOver)*sizeof (TCHAR) ; result 1eftOver = vclen ー t; memcpy (1eftOverBuf , ()c + t) , 1eftOver*sizeof (TCHAR) ) ; return result ; 1eftOver)) )*sizeof (TCHAR)) ; UNIX MAGAZINE 1994 ユ 0 93

2. UNIX MAGAZINE 1994年10月号

ー⑨ 連載 /Windows NT int 1 ; if ( 1 0 ) fprintf (stderr , TEXT ( "Mu1tiByteToWideChar failed %x\n" ) , GetLastError ( ) ) ; 1 = Mu1tiByteToWideChar (cp-arg , MB—PRECOMPOSED , mb—cmd , ー 1 , cmd, 1 ) ; mb-cmd, ー 1 , NULL, の ) ) ; cmd = malloc (sizeof (TCHAR) * ( 1 = Mu1tiByteTOWideChar (cp—arg , MB-PRECOMPOSED , mb_cmd GetCommandLineA ( ) ; TCHAR *eq; for (i 0 ; environ[i] ; i + + ) { int i = 0 ; TCHAR *win32—getenv (TCHAR *varname) _O_BINARY) ; / * —setmode(—fileno(stderr) , _O_BINARY) ; setmode (—fileno (stdout) , _O_BINARY) ; —setmode(—fileno(stdin) , *argv = CommandLineToArgvW (cmd, argc) ; cmd GetCommandLine ( ) ; #endif (strnicmp (varname , environ , ()q ー environ[i] ) ) (lstrlen(varname) ()q ー environ[i] ) ) & & if ( ( * ()q = strchr(environ[i] , return ()q + 1) ; return NULL ; #undef sprintf win32set—cp() int 1 ; TCHAR value [ 256 ] ; int page ; char buf [ 32 ] ; cp—read = cp—write = cp—arg = GetOEMCP ( ) ; 1 = GetEnvironmentVariabIe (TEXT ( "CODE—PAGE" ) , value , if ( 1 > 0 & & —stscanf (value, TEXT("%d") , &page) ) { cp—read = cp-write = cp-arg = page ; sprintf (buf , set10ca1e(LC—ALL, buf) ; sizeof(va1ue)/sizeof(TCHAR)) ; 1 = GetEnvironmentVariab1e (TEXT ( "READ—CODE-PAGE" ) , value , if ( 1 > 0 & & -stscanf(value , TEXT("%d") , &page)) { cp—read page ; 1 = GetEnvironmentVariab1e (TEXT( "WRITE-CODE—PAGE" ) , if ( 1 > 0 & & -stscanf(value, TEXT("%d"), &page)) { cp-write = page ; value , 1 = GetEnvironmentVariab1e (TEXT ( "ARG-CODE—PAGE" ) , value , if ( 1 > 0 & & —stscanf (value, TEXT("%d") , &page)) { cp—arg = page ; UNIX MAGAZINE 1994 ユ 0 sizeof (value)/sizeof (TCHAR) ) ; sizeof (value)/sizeof (TCHAR) ) ; sizeof(value)/sizeof (TCHAR) ) ; 95

3. UNIX MAGAZINE 1994年10月号

ワークステーションのおと一の 図 4 /dev/dsk のシンポリック・リンク bash$ ls ー 1 total 8 lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , lrwxrwxrwx 1 r 0 ot 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 : c lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 : d lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 :e lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 : f lrwxrwxrwx 1 root 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 : g 1 rwxrwxrwx 1 ro ot 86 espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 :h bash$ Ju1 20 17 : 17 Ju1 20 17 : 17 Ju1 20 17 : 17 Ju1 20 17 : 17 Ju1 20 17 : 17 c0t3d0s3 Ju1 20 17 : 17 cOt3d0s2 Ju1 20 17 : 17 cOt3d0s1 Ju1 20 17 : 17 c0t3d0sO cOt3dOs7 c0t3d0s6 cOt3d0s5 cOt3dOs4 0 : b 0 : a す。そして、 /dev/dsk の下を調べてみます。 bash$ cd /dev/dsk .. / .. /devices/iommu@O, 10000000/sbus@O , 10001000 / .. / .. /devices/iommu@O, 10000000/sbus@O , 10001000 / .. / .. /devices/iommu@O, 10000000/sbus@0 , 10001000 / .. / .. /devices/iommu@O, 10000000/sbus@0 , 10001000 / .. / .. /devices/iommu@O, 10000000/sbus@0 , 10001000 / .. /.. /devices/iommu@O, 10000000/sbus@0 , 10001000 / .. /.. /devices/iommu@(), 10000000/sbus@0 , 10001000 / .. /.. /devices/iommu@O, 10000000/sbus@0 , 10001000 / /dev/dsk ディレクトリを見てみると・・ bash$ Is cOt3d0s0 cOt3dOs1 cOt3dOs2 cOt3d0s3 c0t3d0s4 cOt3d0s5 c0t3dOs6 c0t3dOs7 bash$ ls cOt1dOsO cOt1d0s1 c0t1d0s2 cOt1d0s3 cOt1dOs4 cOt1dOs5 bash$ cOt1dOs6 cOt1dOs7 cOt3d0sO cOt3dOs1 cOt3d0s2 cOt3dOs3 cOt3dOs4 cOt3dOs5 cOt3dOs6 cOt3dOs7 SCSI-ID が 3 のハードディスクが、 1 つだけつながっ ていることが分かります。当り前ですが、 ID が 1 のハー ドディスクはありません。 ls ー 1 で見てみると、これら はすべて /devices ディレクトリ中のファイルへのシン ポリック・リンクになっています ( 図 4 ) 。 この状態で format コマンドを実行しても、ハードディ スクは 1 っしか認識されていません。 # format Searching f0 て disks ... done AVAILABLE DISK SELECTIONS : 0. cOt3d0 く SUNI .05 cyl 2036 alt 2 hd 14 sec 72 > /iommu@O , 10000000/sbus@O , 10001000/espdma@5 , # /usr/sbin/disks # /usr/sbin/drvconfig bin/disk を実行します。 次に、 root になり /usr/sbin/drvconfig と /usr/s- Specify disk (enter its number) : 8400000/esp@5 , 8800000/sd@3 , 0 それぞれすこし日判肋ゞかかりますが、メッセージも何も 1994 ユ 0 出す、静かに終ります。本当にこれでいいのでしようか ? UNIX MAGAZINE ちゃんとテンヾイスファイルができています。 ls ー 1 で見 ると、 /devices へのシンポリック・リンクもできている ようです。 次に format コマンドを実行すると、追加したハ ディスクか識されました。 # f ormat Searching for disks ... done AVAILABLE DISK SELECTIONS : 0. c0t1dO く HP ー C2247 cyl 1644 alt 2 hd 13 sec 96 > /iommu@O , 10000000/sbus@O , 10001000/espdma@5 , 8400000/esp@5 , 8800000/sd@l , 0 1 . cOt3d0 く SUNI .05 cyl 2036 alt 2 hd 14 sec 72 > /iommu@O , 10000000/sbus@O , 10001000/espdma@5 , 8400000/esp@5 , 8800000/sd@3 , 0 Specify disk (enter its number) : 、一に聿いたようにすれは、 Solaris 2.3J を動かしたま までハードディスクを設定することはできますが、なかな か危険です。たとえば、新たに接続したハードディスクの SCSI-ID が内蔵のハードディスクと同しになっていたら、 ます間違いなく計機は落ちてしまいます。 77

4. UNIX MAGAZINE 1994年10月号

cat /tmp/ps2jep. $$. jep Ⅱ exit 2 exit 0 頑張れ lpr 君 ! 力をこめてリターンキーを叩く ! tiger ・ ps ー lpr % ・ /gs OutputFi1e= これもだめです。 そりやそうです。 gs の出力デバイスの指定を忘れてい ました。それに、せつかく printcap に登録したのに、 lpr でプリンタ名を指定していません。 よし、もう 1 既 % . /gs —sDEVICE=bj 200 —sOutputFi1e=— \ tiger ・ ps ー lpr ¯Pbj gs のメッセージがそのまま出力されました。そしてふ たたびピーピー。 gs のメッセージを消すために -q オプ ションを付けましたが、いきなりピーピー。しつばいやー ! フィルタを書く 「フィルタを書かなあかんにやろか」 フィルタを書くといってもどうやって、そして何を書け ばいいのか見当もつきません。そこで、 /etc/printcap を眺めてみると次のようなエントリがありました。 # HP LaserJet II 0 Ⅱ the parallel port (no TO print plain text : TO print DVI files : TO print POStScript : # Examp1es : lpr —v file . ps groff —Tdvi —mdvi man 5 printcap ー lpr 114 lj IHP LaserJet II : \ 連載 / IJN Ⅸの道具箱ー② 図 5 HP LaserJet Plus 用プリンタフィルタ (ps2jep-filter) # ! /bin/sh BSDI $ld: ps2jep—fi1ter. sh,v 1.2 1994 / 01 / 13 17 : 54 : 48 sanders Exp $ # PostScript to HP LaserJet P1us filter for use with lpr. # Requires ghostscript (/usr/contrib/bin/gs and support files) export IFS PATH=" /bin : /usr/bin" ; export PATH IF=/tmp/ps2jep. $ $. ps OF=/tmp/ps2jep. $$ ・ jep DEV=1j etplus RES = 300X300 gs=/usr/contrib/bin/gs printf ' \ 033E ' trap "/bin/rm —f /tmp/ps2jep. $$. * ; printf ' \ 033E , " 0 cat > /tmp/ps2jep ・ $ $ . ps Ⅱ exit 2 { echo showpage ; ech0 quit ; } ー \ $gs —dSAFER —SDEVICE=$DEV —r$RES —sOutputFi1e=$OF $IF 2>/dev/nu11 >/dev/null Ⅱ exit 2 lpr —d lpr —d baud rate) lpr lpr : sh : 1p=/dev/1pO : sd=/var/spool/lpd : \ : lf=/var/log/lpd—errs : \ : if=/usr/1ibexec/1pr/txt2jep—fi1ter:\ :df=/usr/1ibexec/1pr/dvi2jep—fi1ter: \ :vf=/usr/1ibexec/1pr/ps2jep—fi1ter: :vf=/usr/1ibexec/1pr/ps2bj200—fi1ter: : lf=/var/log/lpd-errs :mx#O : \ : sh : 1p=/dev/1pO : sd=/var/spool/lpd : \ bjlBJ220JS:\ /etc/printcap も次のように変更です。 た ( 図 6 ) 。 います。これをコピーして、 BJ ー 220 用に変更してみまし に渡す引数の設定などをおこなう部分が知頁に用意されて けのもののようです ( 図 5 ) 。それに、 1 次ファイルや gs 覗いてみると、 gs を起動してそれをプリンタに送り込むだ ちゃうんかと思って見てみるとまさしくそうです。なかを if や df 、 vf という行があります。これってフィルタと 「何がおかしいにやろ」 しかし、やつばりプリンタはむなしくピーピー鳴るはか % lpr -Pbj -v tiger ・ ps かんべきや ! UNIX MAGAZINE 1994.10 罠にはまってしまいます。 モンキー片山 (k) は編集部に入るなり、編集長 (j) の 何かがおかしい " こでモンキー片山カ扁集部へやってきました。

5. UNIX MAGAZINE 1994年10月号

IJN Ⅸへの招待 MaI<efiIe の書き方 坂本文 るのですが、このときに、、両方の財 e. 川 e があります " 今月は、 Makefile の書き方について説明します。前回 という警告メッセージが出ることもあります。たとえば と重複する部分もありますが、復習も兼ねて勉強してくだ SunOS の make では、次のようなメッセージが出力さ れます ( 誌面の都合上、で折り返しています ) 。 % ls Makefi1e makefile % make make : Warning : B0th 'makefile ' and 'Makefi1e' exists その名前 最初は、ファイル名の付け方です。分かりやすくする ために、 Makefile と Makefile に使うファイル名を以下 のように区別して表記することにします。 MakefiIe : ューサーか作成する make への指示を記述し たファイル いすれにしても、 makefile か読み込まれ make が実 Makefi1e 、 makefile : Makefile のファイノレ名 行されます。 M e. 川 e には、どのようなファイル名を付けてもかま makefile のほうか優先して読み込まれるにもかかわ いません。ただし、基本的には Makefi1e か makefile らす、 Makefile に Makefi1e という名前を付けるユー のいすれかです。理由は、偂回も説明したように ) make サーが多いようです。一部のマニュアルやドキュメント が省田に読み込む Makefile の名前だからです。ュー 、、 ls を実行したとき、大文字で始まるファイル名 ザーが ()f オプションの指定なしに ) make を実行する のはうがさきに表示されるので、 Makefi1e のはうが好 と、 make はカレントディレクトリから、 ましい " と書いてあるからかもしれません。 make を使う 1. makefile ときは、ディレクトリのなかにイ乍業に関連する多数のファ 2. Makefi1e イルがあり、ふつう Makefile もそこに置かれています。 Makefile に makefile という名前を付けていると、 ls を の順で MakefiIe を捜します。そしてファイルがみつかる 実行したときに多くのファイル名に埋もれてしまいます。 と、それを MakefiIe として使用します 1 。 このため、多数の関連ファイルを作成する場合には、 (ls カレントディレクトリに makefile と Makefi1e の双 で頁のほうに出力される ) Makefi1e を使うほうが適切 方を作成した場合は、上記の理由から makefile のはう でしよう。 が優う勺に使用されます。 make の不鶤頁 2 によっても異な 冒頭で述べたように、 Makefile には MakefiIe か 1 M 佖ん e 五が SCCS (Source Code ControI System) でノヾー makefile 以外のファイル名を付けることもできます。そ ジョン管理されていた場合、そこから斤の MakefiIe を取り出して利 用す引新皀をもつ make もあります。その際のファイルの検出順序は、 s. makefile 、 makefile 、 s . Makefi1e 、 Makefi1e となります。 2 SystemV 系、 BSD 系、 GNU make など。 184 UNIX MAGAZINE 1994.10

6. UNIX MAGAZINE 1994年10月号

図 1 Makefile とディレクトリ構成 ( 例 ) % pwd /usr/home/husband/aya/Tanoshi-UNIX % ls —R Chap1/ Chap1 : Main . tex Chap2 : Main . tex Makefi1e Chap3 : Main . tex Chap4 : Main . tex Chap2/ Makefi1e sectionl section2 Makefi1e Makefi1e . tex . tex Chap3 / sectionl section3 section4. tex sectionl . tex sectionl . tex . tex .tex Chap4/ section2. tex section2. tex section2. tex LJN Ⅸへの招待 0 Makefi1e section3. tex ドを言当する際は、十分注意してください。 ターケット・クループ UNIX MAGAZINE 1994.10 しようか ? 行すればよいのですから、次のような Makefile はどうで よう。 Chap1 ~ 4 のディレクトリでそれぞれ make を実 Tanoshi-UNIX に置く Makefile の内容を考えてみまし トップのディレクトリ、 /usr/home/husband/aya/ になっているとイ反定します。 ます。ディレクトリとファイル構成は、図 1 に小す状態 ディレクトリで make を実行すればよいようになってい ンパイルするには、各章のディレクトリを含むトップの 完成するようになっています。また、 1 冊全部を一気にコ るので ) その章のコンパイルか了して dvi ファイルが で make を実行すれば、 ( 原稿が I*TEX で言当されてい 章にそれぞれ Make 用 e を用意し、ある章のディレクトリ ごとにディレクトリを用意することにします。そして、各 たとえは、 1 冊の本を作るとしましよう。ここでは、章 く同しものである " といった場合に便利です。 それ異なるが、それを処理する UNIX コマンドはまった びます。ターゲット・グループは、、ターゲットはそれ 可能です。このような言当をターゲット・グループと呼 の左イには、複数のターゲットを並べて言当することも Makefile のなかのターゲットを言当する部分 ( コロン % cat Makefi1e a11 : chapl chap2 chap3 chap4 cd Chap4 chap4 : cd Chap3 chap3 : cd Chap2 chap2 : cd Chap1 chapl : make を実行すると、最初に言己されたターゲット all make make make make グループを利用すると便利です。次の MakefiIe を使うと きないものでしようか。そういう場合には、ターゲット・ 同し (make) です。 Makefile をもうすこし簡潔に言当で 名は異なっているものの、実行する UNIX コマンドは皆 ch 叩 1 ~ 4 のターゲットでは、移動先のディレクトリ することカそきそうです。 す。したがって、この Make 用 e でもどうやら目的を達 クトリにディレクトリが変更さ make が実行されま 処理されます。それぞれのターゲットでは、該当ディレ か実行さこれによってターゲット chapl ~ 4 が偵に a11 : Chap1 Chap2 Chap3 Chap4 % cat Makefi1e 同し処理がおこなえます。 189

7. UNIX MAGAZINE 1994年10月号

図 3 probe-scsi の出力 0k probe ー S C S 1 3 Target MAXTOR LXT—213S SUN02074.17 Unit 0 Disk Target 4 21247 ー 005 VP150S ー 05 ARCHIVE VIPER 150 Unit 0 Removab1e Tape Target 5 MT-2ST/N50 TEAC RV K Unit 0 Removab1e Tape MT-2ST/N50 TEAC RV K Unit 1 Removab1e Tape MT-2ST/N50 TEAC RV K Unit 2 Removab1e Tape MT-2ST/N50 RV K 3 Removab1e Tape TEAC Unit MT-2ST/N50 RV K Tape TEAC Unit 4 Removab1e MT-2ST/N50 TEAC RV K Unit 5 Removab1e Tape MT-2ST/N50 RV K TEAC Unit 6 Removab1e Tape MT-2ST/N50 TEAC RV K 7 Removab1e Tape Unit 図 4 テフォルトテープでの復 T -2 の % mt —f /dev/rst 1 offline % mt —f /dev/rst 1 rew /dev/rstl : Ⅱ 0 tape loaded 0 て drive offline % mt —f /dev/rstl rew % mt —f /dev/rstl offline % tar tvf /dev/rst 1 I/O error /dev/rstl : /dev/rstl % tar tvf 3 / 10 rwxr—sr—X 0 / 10 0 / 10 rwxr—sr—X 0 ・ 1 4 0 0 9 9 9 9 9 9 イよイ亠 11 8 0 0 8 6 6 イ 1 イ 8 8 8 図 5 struct st-devtype ~ " 名前 " , 識別名長 , " 識別名 " テープ装置のタイプ , テープレコード長 ( パイト数 ) , 装置の機能と特性 , 読出し時のリトライ回数 , 書込み時のリトライ回数 , 密度コード 1 , 密度コード 2 , 密度コード 3 , 密度コード 4 , 速度コード 1 , 速度コード 2 , 速度コード 3 , 速度コード 4 , という部分がありますから、 2 つの閉し中括弧のあいだに ェントリを追加して、図 5 のようにします。 TEAC MT-2 用のデータの例か図 6 です。 EmuIex の MT-2 というテーフ・コントローラも st ー co Ⅱ f . c に当求 されていますが、たまたま名前か 1 司しになっているだけで 全然別のものです。 ます、同種のドライプのデータをコピーしてきます。 MT-2 の場合、固定プロック長で容量が 150MB ですか ら、 ARCHIVE の QIC-150 のデータをもってきて匿 することにします。 1 つのエントリは 10 個のパラメータからなります。そ のうち 2 つは要素数 4 の配列なので、 16 というべきかも しれません。 構造体の最初の要素は文字列で、何を書いてもかまいま せんが、通常はドライプの ( 人間にとっての ) 呼び名を入 れます。 stdef . h コメントに、、テンヾッグ用である " と書 かれています。 図 6 MT-2 列 "TEAC MT—2 cassette 3 .81mm streamer" 14 , "TEAC MT-2ST" ST_TYPE_DEFAULT , 512 , (ST_AUTODEN_OVERRIDE IST_LONG_ERASE) , 400 , 400 , { 0X00 , 0X00 , 0X00 , 0X00 } , { 0 , 0 , 0 , 0 } 142 UNIX MAGAZINE 1994 ユ 0

8. UNIX MAGAZINE 1994年10月号

連載 / IJN Ⅸの道具箱ー② 図 7 DJ 505J 用の白黒 / カラーのプリンタフィルタ $gs —dSAFER —dNOPAUSE —sDEVICE=$DEV —sOutputFi1e=$OF $IF 2 { ech0 showpage; ech0 quit ; } ー \ cat > /var/tmp/ps2dj505j . $$. ps ー exit 2 trap '/bin/rm —f /var/tmp/ps2d ・ 505j . $ $ . * ; printf ' \ 033E ' , , 0 printf ' \ 033E ' gs=/usr/10ca1/X11R5/bin/gs # gs コマンドの絶対パス名です DEV=dj505j OF=/var/tmp/ps2dj505j . $ $ . dj505j IF=/var/tmp/ps2dj505j . $ $ . ps # 次の 1 次ファイル名工 F 、 OF は適当に変更してください export PATH PATH=' '/bin: /usr/bin' ' ・ export IFS # Requires ghostscript (/usr/contrib/bin/gs and support- files) # ! /bin/sh # 白黒用 . /usr/1ibexec/1pr/ps2dj505j—fi1ter # ! /bin/sh # カラー用 /usr/1ibexec/Ipr/ps2dj505jc—fiIter exit 0 rm -f $IF $OF cat /var/tmp/ps2dj505j . $ $ . dj505j Ⅱ exit 2 > / d 。フ。。 11 > / d 。ツ。。 11 Ⅱ exit 2 : lf=/var/log/lpd-errs : :mx#0 : vf=/usr/1ibexec/1pr/ps2dj505j c—filter : hpc IHP DeskJet 505J : : sh : 1p=/dev/1pO : sd=/var/spool/dj 505j : \ # カラー用プリンタの設定 : lf=/var/log/lpd-errs : :mx#0 : vf=/usr/1ibexec/1pr/ps2dj505j—fi1ter : hpm IHP DeskJet 505J : : sh : 1p=/dev/1pO : sd=/var/spool/dj 505j : \ # 白黒用プリンタの設定 # lp 、 sd 、 mx 、 vf などの設定は、それぞれの環境に応じて適切に変更してください 図 8 DJ 505J 用の白黒 / カラーの printcap のエントリ exit 0 rm —f $IF $OF cat /var/tmp/ps2dj505jc . $ $ . dj505jc Ⅱ exit 2 >/dev/null >/dev/null Ⅱ exit 2 $gs —q —dSAFER —dNOPAUSE —SDEVICE=$DEV —sOutputFi1e=$OF $IF 2 { echo showpage ; echo quit ; } ー \ cat > /var/tmp/ps2dj 505J 。 . Ⅱ exit 2 trap ( '/bin/rm —f /var/tmp/ s2dj505jc. $$ . * ; printf ' \ 033E , , , 0 printf ' \ 033E ) gs=/usr/10ca1/X11R5/bin/gs # gs コマンドの絶対パス名です DEV=dj 505j c OF=/var/tmp/ps2dj 505j c. $ $ . dj 505j c IF=/var/tmp/ps2dj 505j c. $ $. ps # 次の 1 次ファイル名 IF 、 OF は、適当に変更してください export PATH PATH=' '/bin:/usr/bin' ' ・ export IFS # Requires ghostscript (/usr/contrib/bin/gs and support files) UNIX MAGAZINE 1994 ユ 0 119

9. UNIX MAGAZINE 1994年10月号

連載 / インターネットの利用と仕組みー① 図 5 IIJ のホームページの HTML のソース く HEAD> く TITLE>IIJ Home Page く /TITLE> く /HEAD > く BODY> く A HREF=" index—J . html"> く IMG SRC="new—icons/top2. gif "> く /A> く A HREF="peop1e/www/www.html" >www@iij . ad. jp く /A> く ADDRESS > く HR> Copyright (c) 1994 lnternet lnitiative Japan lnc. く A HREF="index—j . html"> く IMG SRC="/new—1cons/hai—js ・ gif"> IIJ Japanese Home page く /A> く /p> We also have く A HREF="ftp://ftp. iij ・ ad ・ jp/pub">Anonymous-FTP server. く /A> く p> く /DL> く /H2 > What ' s WWWく/A> く IMG SRC="new—icons/mosaicI—button. gif"> く A HREF="eng1ish/www/wa1king.html"> く DD> Event lnformation く /A> く IMG SRC="new—icons/event4. gif " > く A HREF="eng1ish/event/event . html " > く DD> IIJ Service Menu く /A> く IMG SRC="new—icons/service—button. gif " > く A HREF="engIish/service/service . 五 tm1 " > く DD> IIJ lnformation く /A> く IMG SRC="new—icons/iij—button. gif"> く A HREF="eng1ish/iij/iij . html"> く DD> What ' s New ? く /A> く IMG SRC="new—icons/whatnew—button. gif " > く A HREF="eng1ish/whatnew/whatnew. htmlt'> く DD> く H2 > く DL> く A HREF="peop1e/www/www.五tml " > WWW staff く /A> at IIJ. WWW home page , in Japan. This server is maintained by く A HREF="eng1ish/iij/iij . html">lnternet lnitiative Japan lnc. く /A> This is the く HR> く H1>We1come to the IIJ Home Page ! く / HI > く /ADDRESS> く /BODY> 58 UNIX MAGAZINE 1994.10

10. UNIX MAGAZINE 1994年10月号

連載 / Li Language— 0 delete {deIeteN0de $canvas} create {return [createNode $canvas $currentType ($canvas) $x $y] } # 指定したカンパスと同じ大きさに図形を表示する proc fi11ByNode {canvas type} { g10baI shapes set id _PALETTE eval $sha es($type) set bbox $canvas bbox $id] [lindex $bbox 0 ] ] set w [expr [lindex $bbox 2 ] [lindex $bbox 1 ] ] set れ [expr [lindex $bbox 3 ] set cw [lindex [$canvas configure —width] 4 ] set ch [lindex [$canvas configure —hei ht] 4 ] # ID 生成のための変数 set _ids_ 0 # 新しい ID を得る proc newld { } { g10ba1 —ids g10ba1 shapes return —ID [incr —ids—] # マウスの下にある図形の ID を求める proc getCurrentId {canvas} { return C1index [$canvas gettags current] 0 ] # 図を描くカンパスの初期設定 proc setupCanvas {canvas} { $canvas bind —NODE—く ButtonRe1ease—1> "$canvas dtag selected" bind $canvas く BI—Motion> "mouseMove $canvas %x % bind $canvas く 1 > "d0N0de $canvas %x % # パレットの初期化 proc setuppalette {parent canvas shapes} { upvar 1 shapes s frame $parent. $—inove—•—height 30 pack $parent . f—move- —expand 1 ¯fill both -text { 移動 } -variable var$ arent\ radiobutton $parent . f—move— . r—move— —command 第 set currentType ($canvas) { } ; set currentCom($canvas -expand 1 —fi11 b0th pack $ arent . f—move— . r—move— frame parent. f—delete——height 30 pack $parent . f-delete- —expand 1 —fill both -text { 削除 } —variable var$parent\ radiobutton $parent . f—delete— . r—delete —command currentType ($canvas) { } ; set currentCom ($canvas) delete " pack $parent . f-delete- . r-delete —expand 1 —fill both foreach Ⅱ [array names s] { frame $parent . f${n} pack $parent. f${n} —expand 1 -fill b0th radiobutton $parent. f${n}. r${n} —text ${n} ¯variable var$parent\ —comma れ d "set currentType($canvas) ${n};set currentCom($canvas) canvas $parent . f${n} . c -width 30 —hei ht 30 pack $parent. f${n}. 。 $parent. f${n} , $ } -side right -expand 1 -fill both fi11ByNode $parent. f${n}. c ${n} UNIX MAGAZINE 1994 ユ 0 135