約 4,053,844 件
https://w.atwiki.jp/lenen_motoneta/pages/155.html
(前略)クラウゼ(後略)のスペルカード。 冥王冥王星。発見から長らく太陽系第9惑星とされていたが、現在は準惑星に区分されている。 「失われた威名」2006年に冥王星が準惑星に再分類されたこと(「惑星」という異名を失ったこと)を指していると思われる。 弾幕・技 冥王「失われた威名」 登場 鏈縁无現里冥王「失われた威名」(EX)
https://w.atwiki.jp/ooooasys/pages/12.html
勝手な推測 ファイルはヘッダ部とデータ部に分かれるだろう 昔のワープロなのでそんなに機能はないだろう。 文字ごとにプロパティを設定する訳じゃない。あってせいぜい行単位 2倍角とか3倍角とかあるかも 半角漢字とかもあるよね。扱いはどうしようか。 文字罫線だったような気がする 同じデータが2種類箇所にある可能性はあるよね あとここでは特に記載が無い限りbig endianとする。 未確定 C \Program Files\OASYS2002\Viewer\OASPROP\FMLBPQP.DLL がファイルを右クリックてプロパティをみたときに呼ばれる。これに文書のフォーマットの情報がすべて載っている。ということはこれを解析すればヘッダ情報が分かるだろう。OASYS1,2,3すべて同じファイルが呼ばれる。ここまでは分かった。 ヘッダは2ffまで 300からデータ ヘッダは000-0ff, 100-1ffで同様な組がある 2f24(/$)が行の前のスペースを表す---前インデント その次データがある 2f22(/")が改行を表す 改行の後を21(!)でpadding 正しくは1区1点の全角スペースを入れている 2f25(/%)が行の後のスペースを表す---後インデント 行の後に00(nul)でpadding(5個だがこれはレイアウトの桁数によりそう)= ここが違う。行の後に0001が来たら次の行の文字の修飾を表すことを示し、7Dまでを修飾として扱う。どのように扱われるかは解析中。 最後の改行の後にも完全に空白な行がデータとしてある。データとしては行単位で処理しており、最後の空白行でデータが最後という処理をしていそう 空白行の後に06ffまで0でpadding = 多分 0x300分ヘッダがあり、以降0x400ずつセグメントがある。 勘違いしていることに気がついた。完全に行指向のエディタとして考えなければならない 単位は2バイトごとの文字半角英数の後に全角文字を入力すると自動的にA0でpaddingされる = これはスペース20の7ビット目を立てたもの 英数一部の記号のみ半角単位で打てる。半角でできる記号は何か、全角の記号は何かを要調査 なんかラインプリンタにどのようにデータを流し込むかを考えていけばできそうな気がしてきた。 2バイトごとに読み込み0x0080との ANDをとる。もし trueなら ASCII falseならOASYS区点 なんか違ったな。1行分のデータ(桁数x2) byteを読む。次の5byte を読む。0x0000000000なら次の行が始まる。 0x0001000000なら装飾情報が入っているので続いた後1行分のデータ(桁数x2)を読み込む。その次に 0x7d0000の装飾情報終了文字があり、次の行が始まる。 データ・修飾方法の長さには前インデント、後インデントを含む 半角文字と全角文字で書式データの処理方法が異なるかもしれない。 全角文字の場合 1byte目の先頭bitが立っていたら修飾情報あり、無かったら修飾情報無し。(先頭bitを0にして修飾情報を加えても表示には反映されなかった) 修飾情報 0x8000 = 細下線 0x8338 = 点線下線 0x8339 = 太線下線 0x833A = 二重線下線 0x833B = 波線下線 0x8336 = 網掛け状下線 0x833F = 細下線付き黒丸傍点 0x8335 = 細下線付き句点型傍点 0x033F = 黒丸傍点 0x0335 = 句点型傍点 OASYS形式では細下線と傍点は同時につけられるが、それ以外の下線と傍点では下線が優先される。 網掛けとか取消線をつけると一気にヘッダが増える0x。これから考えると、文字を重ねる場合には、データフォーマットの 変更が行われると思われる。 ファイル形式 0x1ffまでがWindowsとかUNIX用に加えられた部分 0x200からがOASYSのフォーマットそのまま のような気がする。 確定っぽい 文字コード 文字コードについてはOASYS区点コードを参照 ヘッダー部 アドレス(サイズ) タイプ 内容 値の範囲 (範囲外の時の値) 備考 0x0204 (0x02) uword-be 文書の総ページ数 0 = uword = 0xffff 0x0206 ubyte 版数 0 = ubyte 100 (0) 0x0207 ubyte 書き込み保護 0 =ubyte =1 (0) 0 なし, 1 あり 0x0208 ubyte 1ページの行数 1 = ubyte = 254 (30) 0x020b (0x32) ubyte 題名 OASYS区点コードの文字列 0x023d ubyte 文字間隔 1 = ubyte =7 (1) 1 "3.81mm" 2 "5.08mm" (分岐あり) 3 "3.18mm" 4 "4.45mm" 5 "その他" 6 "定型" 7 "字間", インチ表示とか混ざっていてなんか処理をしている。sub_10002096 要再解析 0x023e ubyte 行間隔 ubyte ==4 だったら ubyte = 2 2 6.35mm 3 4.23mm 5 その他 6 8.89mm 7 定型 else 8.47mm , 定型は.OASにはなし 0x0248 ubyte 用紙の向き 1 = ubyte =2 0x025fを参照 0x025c ubyte 用紙サイズ 1 = ubyte = 10 1 A4 2 B4 3 A5 4 B5 5 その他 6 はがき 7 A3 8 B3 9 レター 10 リーガル 11 レジャー(.OASにはなし) 0x025d(0x02) uword-be 用紙サイズその他の時の縦(mm) 0x025f ubyte 用紙の向き 1 =ubyte =2 [0x025f]==[0x0248]の場合は横長, [0x025f]!=[0x0248]の場合は縦長 0x0260 (0x02) uword-be 上部余白 1 = uword-be = 0x3e7 (10) 上部余白か右側余白かは多分書く方向による。要再解析 0x0262 (0x02) uword-be 左側余白 1 = uword-be = 0x3e7 (10) 左側余白か下側余白かは多分書く方向による。要再解析 0x0275 ubyte 行内文字数 OASYSの書式設定では10-200 0x0283(0x02) uword-be 用紙サイズその他の時の横(mm) 0x02c0 ubyte 縦書き/横書き 0 = ubyte = 1 [0x0248]==1の場合--横書きのみ, [0x0248]==2の場合--0 印刷時のみ縦書き 1 縦書き 0x20d8 (0x05) ubyte[5] 更新日付(yymmddhhMM) sub_10004725関数で2000年問題の日付の処理をしている。要解析。2進化10進のデータの場合と16進のデータの場合がある。 0x20dd (0x05) ubyte[5] 作成日付(yymmddhhMM) sub_10004725関数で2000年問題の日付の処理をしている。要解析。2進化10進のデータの場合と16進のデータの場合がある。 0x0008 32byte 文書名 (EUCで記述) 最初の32byte分か? しかも半角文字が全角に変換される。 0x0208 1byte 行数 0x0274 1byte 行内文字数 0x0275 1byte 行内文字数 0x274と同じ。なぜか同じデータが2個 ????日時 = 作成か? 0x02d3 1byte 年(2桁) 0x02d4 1byte 月(1-12) 0x02d5 1byte 日(1-31) 0x02d6 1byte 時(1-24) 0x02d7 1byte 分(0-59) 更新日時 0x02d8 1byte 年(2桁) 0x02d9 1byte 月(1-12) 0x02da 1byte 日(1-31) 0x02db 1byte 時(1-24) 0x02dc 1byte 分(0-59) データの実装 解析 拡張子が .OAS = hObject+400h =2 .OA2 = hObject+400h = 3 .FMT = hObject+400h = 4 .OA3 = hObject+400h = 5 最初の8バイトを読み込む {Buffer[0],Buffer[1],Buffer[2],Buffer[3],var_64,var_63,var_62,var_61} Buffer[0] == 0xf0; Buffer[1] == 0xf2; がマジック //ここもうちょっと整理 switch (var_62) { case 0xf0 if (var_61 == 0xf0) { if (Buffer[3] == 0xd6 var_64 == 0xc1) { switch (var_63) { case 0xc6 var_62 = 0xf1; var_61 = 0xf1; [esi + 401 h] = 2; lDistanceToMove = 0x200 break; case 0xc5 var_62 = 0xf0; var_61 = 0xf5; [esi + 401 h] = 2; lDistanceToMove = 0x200 break; case 0xb8 var_62 = 0xf1; var_61 = 0xf2; [esi + 401 h] = 2; lDistanceToMove = 0x200; break; case 0xb7 var_62 = 0xf1; var_61 = 0xf3; [esi + 401 h] = 2; lDistanceToMove = 0x200; break; case 0xb3 var_62 = 0xf0; var_61 = 0xf0; [esi + 401 h] = 2; lDistanceToMove = 0x200; break; case 0xa5 var_62 = 0xf3; var_61 = 0xf1; [esi + 401 h] = 1; lDistanceToMove = 0x200; break; case 0xa3 var_62 = 0xf1; var_61 = 0xf5; [esi + 401 h] = 1; lDistanceToMove = 0x200; break; default var_62 = 0xf3; var_61 = 0xf1; [esi + 401 h] = 1; lDistanceToMove = 0x200; break; } break; } else { goto_error(); } } else { // to loc_1000510f if (var_61 = 0xf6 var_61 = 0xf9) { [esi + 401 h] = 2; lDistanceToMove = 0x200; break; } } // ここにbreakなし case 0xf1 if (var_61 = 0xf0 var_61 = 0xf3) { [esi + 401 h] = 2; lDistanceToMove = 0x200; break; } // ここにbreakなし case 0xf2 if (var_61 = 0xf1 var_61 = 0xf4) { [esi + 401 h] = 2; lDistanceToMove = 0x200; break; } // ここにbreakなし default [esi + 401 h] = 1; lDistanceToMove = 0x200; break; } 200h byte に飛ぶ hObjectに 400h byte読み込む var_Cを0クリア var_CにhObject 7D (27Dh) から4バイトコピーする hObject 88h から hObject 7D へ4バイトコピーする var_cから 88hへ4byteコピーする = i.e 27Dh と 288hの値を4byte分 swapする esp += 30h (スタックを30hbyte解放) hObjectをpushして call sub_1000483F sub_1000483Fの処理 ここで word の処理は signed, byteの処理はunsigned if(hObject[0] 1 || hObject[0] 16) { hObject[0] = 1;} if (hObject[1] 0x7D) { hObject[1] = 0;} if (hObject[2] 0x7C ) { hObject[2] = 4;} if (hObject[3] 1 || hObject[3] 0x7d) { hObject[3] = 0x2b; } if (hObject[6] 0x63 ) {hObject[6] = 0;} if (hObject[7] != 1) {hObject[7] = 0;} if (hObject[8] 1 || hObject[8] 0xfe) {hObject[8] = 0x1e;} if (hObject[9] 1 || hObject[9] 4) { hObject[9] = 1;} else if (hObject[9] == 0) {hObject[9] = 1;} 1の時のメモリ書き換えよりレジスタ比較の方が早くて最適化された? hObject[0x0a]からhObject[0x3c]はなし if( hObject[0x3d] 1 || hObject[0x3d] 7) { hObject[0x3d] = 1;} if( hObject[0x3e] 1 || hObject[0x3e] 7) { hObject[0x3e] = 1;} if( hObject[0x3e] == 4 ) { hObject[0x3e] = 2 }; hObject[0x3f]からhObject[0x40]はなし if( hObject[0x41] 1 || hObject[0x41] 4) { hObject[0x41] = 2 }; if( hObject[0x42]hObject[0x43] 0xfc19(-999) || hObject[0x42]hObject[0x43] 0x270f(9999) ) { hObject[0x42] = 0; hObject[0x43] = 1;} hObject[0x44] は複雑なので後で解析 if(hObject[0x45] 1 || hObject[0x45] 3) { hObject[0x45] = 3;} hObject[0x46], hObject[0x47]はなし if(hObject[0x48] != 2 ) {hObject[0x48] = 1;} if(hObject[0x49] 0x80){ hObject[0x49] = 0;} if(hObject[0x4A] 1 || hObject[0x4A] 4 ) { hObject[0x4A] = 1;} if(hObject[0x4B] 1 || hObject[0x4B} 3 ) { hObject[0x4B] = 1;} if(hObject[0x4d] != 2) {hObject[0x4d] = 1;} if(hObject[0x4f] != 2) {hObject[0x4f] = 1;} if(hObject[0x50] 1 || xObject[0x50] 3) {hObject[0x50] = 1;} if(hObject[0x52] != 1) {hObject[0x52] = 2;} if(hObject[0x53] != 2) {hObject[0x53] = 1;} if(hObject[0x55] 0x80) {hObject[0x55] = 0;} if(hObject[0x59] 2) {hObject[0x59] = 0;} if(hObject[0x5a] 1 || hObject[0x5a] 5) { hObject[0x5a] = 1;} if(hObject[0x5b] != 2) { hObject[0x5b] = 1;} if(hObject[0x5c] 1 || hObject[0x5c] 0x0a) { hObject[0x5c] = 1;} if( hObject[0x5d]hObject[0x5e] 0 || hObject[0x5d]hObject[0x5e] 0x270f (9999) ) { hObject[0x5d] = 2; hObject[0x5e] = 0x61;} なぜ609? if( hObject[0x5f] != 2) { hObject[0x5f] = 1;} if(hObject[0x60]hObject[0x61] 0 || hObject[0x60]hObject[0x61] 0x3e7 ) { hObject[0x60] = 0; hObject[0x61] = 0x0d;} if(hObject[0x62]hObject[0x63] 0 || hObject[0x62]hObject[0x63] 0x3e7 ) { hObject[0x62] = 0; hObject[0x63] = 0x0d;} (0x3e7 = 999) if(hObject[0x64]hObject[0x65] 0 || hObject[0x64]hObject[0x65] 0x3e7 ) { hObject[0x64] = 0; hObject[0x65] = 0x7f;} if(hObject[0x66]hObject[0x67] 0 || hObject[0x66]hObject[0x67] 0x3e7 ) { hObject[0x66] = 0; hObject[0x67] = 0x1b;} if(hObject[0x68]hObject[0x69] 0 || hObject[0x68]hObject[0x69] 0x3e7 ) { hObject[0x68] = 0; hObject[0x69] = 0x1b;} if(hObject[0x6a]hObject[0x6b] 0 || hObject[0x6a]hObject[0x6b] 0x3e7 ) { hObject[0x6a] = 0; hObject[0x6b] = 0x96;} (0x96 = 150) if(hObject[0x6c]hObject[0x6d] 0 || hObject[0x6c]hObject[0x6d] 0x3e7 ) { hObject[0x6c] = 0; hObject[0x6d] = 0x96;} (0x96 = 150) if(hObject[0x6e]hObject[0x6f] 0 || hObject[0x6e]hObject[0x6f] 0x3e7 ) { hObject[0x6e] = 0; hObject[0x6f] = 0x5A;} (0x5a = 90) if(hObject[0x70]hObject[0x71] 0 || hObject[0x70]hObject[0x71] 0x3e7 ) { hObject[0x70] = 0; hObject[0x71] = 5;} if(hObject[0x77] 2) {hObject[0x77] = 0;} if(hObject[0x78]hObject[0x79] 0 || hObject[0x78]hObject[0x79] 0x3e7 ) { hObject[0x78] = 0; hObject[0x79] = 0;} if(hObject[0x7a] 2) {hObject[0x7a] = 0;} hObject[0x7c]は複雑なので後で解析 if(hObject[0x7d] != 1) {hOjbect[0x7d] = 0;} if(hObject[0x7e] 7 ) {hObject[0x7e} = 0;} if(hObject[0x7f] != 1 ) {hObject[0x7f] = 0;} if(hObject[0x80] != 1 ) {hObject[0x80] = 0;} if(hObject[0x81] 3) {hObject[0x81] = 0;} if(hObject[0x82]hObject[0x83] 0 || hObject[0x82]hObject[0x83] 0x3e7 ) { hObject[0x82] = 0; hObject[0x83] = 0;} if(hObject[0x8c] 2) {hObject[0x8c] = 0;} if(hObject[0x8d] != 1) {hObject[0x8d] = 0;} if(hObject[0x8F]hObject[0x90] 0 || hObject[0x8F]hObject[0x90] 0x270f) {hObject[0x8f] = hObject[0x90] = 0;} (0x270f = 9999) if(hObject[0x91] != 1) {hObject[0x91] = 0;} if(hObject[0x92] != 2) {hObject[0x92] = 1;} if(hObject[0x93] 1 || hObject[0x93] 0xff) {hObject[0x93] = 1;} このケースよくわからない。なぜ hObject[0x93] 0xffの比較が必要か? if(hObject[0x94]hObject[0x95] 1 || hObject[0x94]hObject[0x95] 0x3e7 ) { hObject[0x94] = 0; hObject[0x95] = 1;} if(hObject[0x96] 1 || hObject[0x96] 0xff) {hObject[0x96] = 1;} このケースよくわからない if(hObject[0x97]hObject[0x98] 1 || hObject[0x97]hObject[0x98] 0x3e7 ) { hObject[0x97] = 0; hObject[0x98] = 1;} if(hObject[0x9b]! != 1) {hObject[0x9b] = 0;} if(hObject[0x9c]hObject[0x9d] 0 || hObject[0x9c]hObject[0x9d] 0x63 ) { hObject[0x9c] = hObject[0x9d] = 0;} if(hObject[0x9f] != 1) {hObject[0x9f] = 0;} if(hObject[0xa3] 2) {hObject[0xa3] = 0;} if(hObject[0xa4] != 1) {hObject[0xa4] =0;} if(hObject[0xa6] != 1) {hObject[0xa6] = 0;} if(hObject[0xa7] != 1) {hObject[0xa7] = 0;} if(hObject[0xa8] != 1) {hObject[0xa8] = 0;} if(hObject[0xa9] != 1) {hObject[0xa9] = 0;} if(hObject[0xaa] 1 || hObject[0xaa] 0x63) {hObject[0xaa] = 1;} if(hObject[0xab] 1 || hObject[0xab] 0x63) {hObject[0xab] = 1;} if(hObject[0xac] != 1) {hObject[0xac] = 0;} if(hObject[0xb1] 2) {hObject[0xb1] = 0;} if(hObject[0xb4] != 1) {hObject[0xb4] = 0;} if(hObject[0xb5] 3) {hObject[0xb5] = 0;} if(hObject[0xb6] 4) {hObject[0xb6] = 0;} if(hObject[0xb7] 3) {hObject[0xb7] = 0;} if(hObject[0xb8] != 1) {hObject[0xb8] = 0;} if(hObject[0xb9] 0x2d || hObject[0xb9] != 0xff) hObject[0xb9] = 0;} if(hObject[0xba] != 1) {hObject[0xba] = 0;} if(hObject[0xbb] 9) {hObject[0xbb] = 0 } if(hObject[0xbc] 9) {hObject[0xbc] = 0 } if(hObject[0xbd] != 1) {hObject[0xbd] = 0;} if(hObject[0xbe] 9) {hObject[0xbe] = 0 } if(hObject[0xbf] != 1) {hObject[0xbf] = 0;} if(hObject[0xc0] != 1) {hObject[0xc0] = 0;} if(hObject[0xc1]hObject[0xc2] 0 || hObject[0xc1]hObject[0xc2] 0x270f) {hObject[0xc1]=hObject[0xc2]=0} if(hObject[0xc3] 0x63) {hObject[0xc3]=0;} if(hObject[0xc4] != 1) {hObject[0xc4] = 0;} if(hObject[0xc5] != 1) {hObject[0xc5] = 0;} if(hObject[0xc6] != 1) {hObject[0xc6] = 0;} if(hObject[0xc7] 0xff ) {hObject[0xc7] = 0;} if(hObject[0xc8] 0xff ) {hObject[0xc8] = 0;} if(hObject[0xc9] 3) {hObject[0xc9] = 0;} if(hObject[0xca] != 1) {hObject[0xca] = 0;} if(hObject[0xcb] 7) {hObject[0xcb] = 0;} if(hObject[0xcc] 0xff) {hObject[0xcc] = 0;} return; とりあえず印刷形式タブまでは解析できた。不明な点がいくつかあるが。重複あるが下記にメモ 5e7c = 7090 = 7a3c = MSVCRT.dll_??2@YAPAXI@Z_name F100010bb = ローカルの関数 引数なし? L10009e98 のカウントを1増やすL10009e98 = 値を1増やしたり減らしたりしているので参照のカウンタL10007608 = L10007608 10007608 times 008h db 0 10007610 db 0,0,0,0,0,0,0,0, 0c0h,000h,000h,000h,000h,000h,000h,046h関数の戻り値は AL(8bit) AX(16bit) EAX (32bit)に入る 拡張子が .OAS = hObject+400h =2 .OA2 = hObject+400h = 3 .FMT = hObject+400h = 4 .OA3 = hObject+400h = 5 .OASの場合 ( i.e. [esi+400h] == 2)8byte読み込む最初の2byte = 0xf0f2Buffer[0] == 0xf0Buffer[1] == 0xf2Buffer[2] == Unspecified;switch (var_62) {case 0xf0 if( var_61 == 0xf0) {if(Buffer[3] == 0xd6 var_64 == 0xc1) {//ここは 10005094の処理を解析switch(var_63) {case 0xc6 var_62 = 0xf1;var_61 = 0xf1;[esi+401h] = 2;lDistanceToMove = 0x200 break;case 0xc5 var_62 = 0xf0;var_61 = 0xf5;[esi+401h] = 2;lDistanceToMove = 0x200 break;case 0xb8 var_62 = 0xf1;var_61 = 0xf2;[esi+401h] = 2;lDistanceToMove = 0x200;break;case 0xb7 var_62 = 0xf1;var_61 = 0xf3;[esi+401h] = 2;lDistanceToMove = 0x200;break;case 0xb3 var_62 = 0xf0;var_61 = 0xf0;[esi+401h] = 2;lDistanceToMove = 0x200;break;case 0xa5 var_62 = 0xf3;var_61 = 0xf1;[esi+401h] = 1;lDistanceToMove = 0x200;break;case 0xa3 var_62 = 0xf1;var_61 = 0xf5;[esi+401h] = 1;lDistanceToMove = 0x200;break;default var_62 = 0xf3;var_61 = 0xf1;[esi+401h] = 1;lDistanceToMove = 0x200;break;}break;} else {goto_error;}} else { // to loc_1000510fif( var_61 = 0xf6 var_61 = 0xf9 ) {[esi+401h] = 2;lDistanceToMove = 0x200 break;}}// ここにbreakなしcase 0xf1 if( var_61 = 0xf0 var_61 = 0xf3) {[esi+401h] = 2;lDistanceToMove = 0x200 break;}// ここにbreakなしcase 0xf2 if (var_61 = 0xf1 var_61 = 0xf4) {[esi+401h] = 2;lDistanceToMove = 0x200 break;}//ここにbreakなしdefault [esi+401h] = 1;lDistanceToMove = 0x200 break;}ここからfseekをする処理}3Dhの処理if [3dh] = 2 then arg_c=1if [3dh] = 3 then [8eh と 5ah の処理 arg_c= 7 分岐処理が沢山if [3dh] = 4 then arg_c = 3if [3dh] = 5 then arg_c = 4if [3dh] = 6 then arg_c = 5if [3dh] = 7 then arg_c = 6else arg_c = 0行間隔if [3eh] == 2 then arg_c = 1if [3eh] == 3 then arg_c = 0if [3eh] == 5 then arg_c = 5if [3eh] == 6 then arg_c = 3if [3eh] == 7 then arg_c = 4else arg_c = 2if[0x5c] == 5 その他if[0x5c] 0x8000 不明if[0x5c] = 0ch 不明[0x5f] 2 or 1[0x48] 2 or 1if [0x5f] ==2 [0x48] == 2 横長if [0x5f] ==2 [0x48] == 1 縦長if [0x5f] ==1 [0x48] == 2 縦長if [0x5f] ==1 [0x48] == 1 横長0x028e なんかのフラグif [0x8e] == 0x20 if [0x5a] ==0 || [0x5a] == 1 標準9ポイント if [0x5a] == 2 標準10.5ポイント if [0x5a] == 3 縮小 if [0x5a] == 4 (if [0xc3] == 9 標準9ポイント else その他の処理) if [0x5a] == 5 標準9ポイントendifif [0x8e] != 0x20 if [0x8e] == 0 || [0x8e] == 1 標準10.5ポイント if [0x8e] == 2 大文字 if [0x8e] == 3 縮小 if [0x8e] == 4 その他の処理 if [0x8e] == 5 標準9ポイント else その他の処理その他の処理の内容 [0xc3] ポイント数が入る [0xb9] 書体が入る 28通り、後で解析 [0x8e], [0xa5], [0xcb] ---- 20通り 縮小英文字の種類、後で解析 [0xca] 縮小文字の向き 1 横向き それ以外 縦向き(2文字単位) [0x77] 添え字の文字種 2 カタカナ それ以外 ひらがな [0x92] 添え字/欧文文字 1 欧文文字 それ以外 添え字数字===============================================禁則/揃え[0xa9] 字詰め範囲 1 行単位 それ以外 文書全体[0xa8] 制御記号の扱い 0 空白置き換え それ以外 詰める[0x7c] 罫線位置ずれ 下位2ビットでマスク 0 半角詰め/制御記号 1 制御記号のみ 2 なし[0xc9] 文字揃え 0 標準 1 下端[左端] 2 中央 3 上端[右端] それ以外 標準[0x4a] 禁則処理 0 なし 1 Aランク 2 Bランク 3 Cランク それ以外 なし = ここでarg_cに何かを入れている[0xc6] ぶら下げ禁則文字(ぶら下げがあるとき) 0 送り出し それ以外 ぶら下げ[0x7a] 英文禁則 0 なし 1 ワードラップ それ以外 ハイフネーション[0x9f] 登録縮小文字 0 禁則、英文禁則指定無効 1 禁則、英文禁則指定有効[0x7f] 禁則、英文均等 0 なし それ以外 あり[0xa4] 行末行頭空白数 0 半角空白1個対象 それ以外 半角空白2個対象===================================================印刷形式[0x41] 頁番号印刷 1 なし 2 頁 3 -頁- 4 頁/総ページ数 それ以外 頁[0x8f][0x90] word-be 総ページ数 0 文書のページ数に従う それ以外 itoaの結果[0x42][0x43] signed word-be 番号初期値[0x6e][0x6f] word-be 番号位置(左右) mm 印刷開始位置からの長さ[0x70][0x71] word-be 番号位置(上下) mm 用紙下端からの長さ[0x4b] 印刷形式 0 標準 1 袋とじ 2 中央空け それ以外 標準[0x4d] ページ番号付け 0 一箇所 1 2箇所(左右) 2 2箇所(上下)[0x6a][0x6b] word-be 右ページ開始位置(中央空けの場合) mm [0x48]==2と併せてみる[0x66][0x67] word-be 右ページ開始位置(袋とじの場合) 桁数 [0x48]==2と併せてみる[0x6c][0x6d] word-be ページ番号までの長さ(中央あけの場合) mm [0x48]==2と併せて見る[0x68][0x69] word-be ページ番号までの長さ(袋とじの場合)桁数 [0x48]==2と併せて見る[0xc7] 多段組印刷 0 なし 1 あり 1から9 が段数 1という値をとることはプログラム的には無い?[0xc8] 段組印刷位置 桁======================================================印刷情報[0x44]
https://w.atwiki.jp/neosrchelp/pages/12.html
【システムファイル】 ゲームの基本設定が記入されたファイルです シナリオファイル直下に、『.srcsys』、もしくは『.srctxt』があれば読み込まれ セミコロン( )の左側が項目名、右側が入力する内容となります 内容に関しては、以下の通りとなります ※スタートファイル ニューゲーム選択時に読み込まれるシナリオファイルです ゲーム開始する時の物を設定してください 【例】 スタートファイル 知世の野望_00.srceve ※資金 資金パラメータの表示を変更します 設定しなかった場合、表示が資金のままとなります 【例】 資金 ガバス ※強化資金 ユニットの強化に使用する資金を設定します カンマで区切った分だけ、強化が可能になります 省略した場合の区切りは、【10000, 20000, 30000, 40000, 50000】になります 【例】 強化資金 3000, 8000, 15000, 25000, 50000 ※セーブ名、セーブ数 セーブデータのファイル名と、最大セーブ数です {0}の部分が、セーブデータファイルの番号になります {0}の記入は、外さないようにお願いいたします 最大セーブ数は、設定した数だけセーブデータが作成できるようになります 最大50件が上限となり、それ以上を設定しても、50件となります 【例】 セーブ名 知世の野望_{0} セーブ数 10 画像パス(初期値 asset) ゲームで使用する画像素材のフォルダ名を指定します。(注:マップチップ以外) フォルダ内(サブフォルダ内も含む)に入っているすべての画像素材を読み込みます。 画像を結合しない場合など、テスト用とでシステムファイルを分けて利用すると扱いやすいかと思われます。 省略可能で、その場合は【asset】フォルダが画像素材入れになります。 【例】 画像パス asset_base (使用する画像を入れたフォルダをasset_baseにする。) ※参戦作品 作品内に使うキャラクターデータです dataフォルダ直下の設定した.srcdat(変換後専用ファイル) もしくは.txtファイルが読み込まれます また、複数の作品を使う場合は、カンマ(,)で区切って下さい 【例】 参戦作品 カードキャプターさくら, 魔法少女リリカルなのは ※会話キャラデータ キャラクター会話画像データを設定します data/img直下のデータが読み込まれます また、複数使う場合は、カンマ(,)で区切って下さい 【例】 会話キャラデータ メインキャラ画像 ※会話タイプ ゲーム内で使用する会話タイプです 現在、以下の2つのタイプが存在します 立ち絵 メッセージウィンドウ1つで、立ち絵を表示するタイプのシステムです アイコン メッセージウィンドウ3つで、ウィンドウ左側にキャラアイコンを表示します バストアップや、SRCのキャラクターアイコンを使用する時におススメのスタイルです また、立ち絵をトリミングして表示する事も可能です 【例】 会話タイプ 立ち絵 インターミッション インターミッション時に表示するボタンとラベルを設定します showパラメーターを0にすると、初期状態で表示されず IntermissionItemで表示を設定すると表示されるようになります x、yを設定するとその位置を基点として表示されます typeで表示したいものを設定してください ラベル 資金、及び現在設定している変数を表示します 資金の場合はパラメータのkeyを資金 グローバル変数の場合はkeyを変数名にしてください titleを1にすると項目名を表示し、0にすると項目名が表示されません fontsize、color、backを指定すると、それぞれ文字の大きさ、文字の色、文字の背景色を設定できます width、heightでラベル範囲を設定でき(省略した場合は適当なサイズに設定されます) alignにLEFT、RIGHT、CENTERを設定すると画像がそれぞれの位置に揃えられます ボタン インターミッションのボタンを設定します 画像はsystemフォルダ内のインターミッションパーツの中から 使用する物をimgパラメータで指定してください デフォルト機能を設定する場合は、以下の値をactionに設定してください 次のステージ NextStage ユニット一覧 UnitList セーブ DataSave 強化 UnitStrength 素材一覧 MaterialList 実行時に特定のEveを設定する場合は、actionの代わりに fileパラメータに実行するsrceveを、labelに開始時のラベルを設定してください labelを指定しない場合は、スタートラベルから開始されます ≪全体例≫ マイユニット スタートファイル クラフターストーリー_00.srceve 資金 マギス 強化資金 3000, 8000, 15000, 25000, 50000 セーブ名 クラフターストーリー_{0} セーブ数 4 参戦作品 クラフターストーリー, ザコ 会話タイプ 立ち絵 インターミッション name 背景, type img, img back/温泉_夜_緑.jpg name 資金, type label,key 資金, x 10, y 10, color 0xFF44FF, fontsize 36 ,back 0x55FFFF44, width 200, height 44, align RIGHT name 捕虜, type label,key 捕虜数, x 10, y 40 name 次へ, type btn,action NextStage, x 20, y 100 name 一覧, type btn,action UnitList, x 180, y 100 name セーブ, type btn,action DataSave, x 340, y 100 name 強化イベント,type btn, action UnitStrength ,x 20, y 200,show 0 name ふれあい, type btn, img btn_event, file event/セシルイベント.srceve, label セシルスタート, x 180, y 200, show 0 name 盗賊狩り, type btn, img btn_event, file event/盗賊狩り.srceve, x 340, y 200, show 0 name 素材一覧,type btn, action MaterialList ,x 180, y 200
https://w.atwiki.jp/dai1357/pages/23.html
制御ファイル Oracleデータベースを構成するファイルの1つ。 格納している情報 データファイルの情報 REDOログファイルの情報 Oracleデータベースの管理情報 チェックポイント?情報 制御ファイルが1つあればOracleサーバを運用できる。 →通常は多重化(ミラー化)して運用。 CONTROL_FILES初期化パラメータで認識される。 Database Controlの「管理」タブ→「記憶域」リージョン 「制御ファイル」から確認できる。
https://w.atwiki.jp/dentu-os/pages/34.html
ハードディスク トラック/シリンダ/セクタ/ブロック 各ディスクは木の年輪のように同心円上にトラックと呼ばれる領域に分けられている。トラックには内側から0,1,2..のような番号が存在する。 同じトラック番号のトラックをまとめてシリンダと呼ぶ。各トラックは等分割されており、これをセクタと呼ぶ。セクタよりも小さい単位での書き込みはできない。磁気ヘッドを読みたいセクタに移動することをシークするという。セクタのサイズは記憶媒体によって決まる。OSはいくつかのセクタをまとめてブロックという単位で扱う。 ファイルシステムの仕組み 二次記憶装置を抽象化し、保管されたデータへのアクセス手段を提供する。 ファイルシステムの役割として次のような事柄が上げられる ファイル名によるアクセス ユーザーはセクタを知る必要が無い ファイルの作成/伸長 セクタの空き情報などを意識する必要がない ファイルの保護 ファイルにはアクセス権が付けられている。 ファイルへのアクセス 順アクセス方式 先頭から逐次アクセスしていく ランダムアクセス方式 ファイルの様々な位置にアクセスすることができる。 階層化ファイルシステム ファイルを階層的に分類して保存することができる。 directory/folder ファイルシステムの実現 連続方式 一つのファイルを連続したブロック上に格納する。 実装が簡単であるが、ファイル作成前にファイルの最大長を決めておかなれけばならない欠点がある。 連結方式 ファイルの領域同士をリスト構造にして実現する。これにより、ファイルの長さを自由に伸ばすことができる。ただし、ランダムアクセスができない。また、不良セクタが発生した場合ファイル全体が読めなくなってしまう。 Unixでの実装 ブートブロック 論理ブロック番号0番 unixのブートプログラムが格納されている。 スーパーブロック 論理ブロック番号1番 ファイルシステムに関する様々な情報が格納されている。 iノードブロック 論理ブロック番号2からn番.iノードと呼ばれるファイル管理用の データ構造がならぶ。 データブロック ファイルやディレクトリなどファイルの実体を格納する。
https://w.atwiki.jp/skmt200x/pages/38.html
目的 このページでは2007で大幅に変更されたユーザインターフェース「Ribbon」について、どう対応するのが手っとり早いのかなどについてまとめたページです。 基本的にXP、2003の機能を大体把握しているのが前提でしょうか。 内容 オンライン版 Excel 2003 の機能に対応する Excel 2007 のインタラクティブ コマンド リファレンス ガイド Word 2003 の機能に対応する Word 2007 のインタラクティブ コマンド リファレンス ガイド PowerPoint 2003 の機能に対応する PowerPoint 2007 のインタラクティブ コマンド リファレンス ガイド それぞれ「ガイドを開始する」リンクをクリックするとガイドが開始されます。 オフライン版 Excel 2003 の機能に対応する Excel 2007 のインタラクティブ コマンド リファレンス ガイド Word 2003 の機能に対応する Word 2007 のインタラクティブ コマンド リファレンス ガイド PowerPoint 2003 の機能に対応する PowerPoint 2007 のインタラクティブ コマンド リファレンス ガイド それぞれコンパイル済みHTMLヘルプファイル(*.chm)が含まれています。 オンライン版、オフライン版ともに使い方は実にインタラクティブで 使い方は実に簡単で、2003までの操作を画面で行うと、2007の場合の操作を表示してくれます。 2003での操作を画面で行うと ... 2007の場合の操作が画面に表示されます。 2003までを使っていて、基本的な操作一式を把握している場合には非常に便利だと思います。 個人的には、こんなツールを用意してまで新しいUIを浸透させたかったのか? という部分に疑問がないわけでもありませんが C=( ̄o ̄;;)。 リボンになって「操作性が向上した」と感じている人はどれくらいいるんだろう? 最終更新日 [2008-09-22]
https://w.atwiki.jp/ce00582/pages/5168.html
import java.io.*; class den{ int[] com=new int[20]; int[] index=new int[500]; String[] data=new String[50000]; String[] author=new String[50000]; String[] credit=new String[5000]; String[] article=new String[500]; int s,sx,datanumber,creditnumber; int authornumber,indexnumber,number; int page,m,n,h,h1; int p1,p2,t; String file,bun,str,str1,str2; public static void main(String[] args){ den test=new den(); } den(){ str1="("; str2=")"; readfile("c.txt"); for(s=1;s datanumber+1;s++){ author[s]=data[s]; } authornumber=datanumber; makecom(); number=0; for(m=13;m 20;m++){ for(n=1;n com[m]+1;n++){ number=number+1; page=m*100+n; file="data/"; file=file+page; file=file+".txt"; readfile(file); sx=0; for(s=1;s datanumber+1;s++){ h=0; p1=data[s].indexOf(str1); p2=data[s].indexOf(str2); if(p1==0)h=h+1; if(p2 0)h=h+1; str=""; if(h==2)str=data[s].substring(p1+1,p2); credit[s]=str; } t=0; for(s=1;s datanumber+1;s++){ h=0; for(sx=1;sx authornumber+1;sx++){ h1=0; if(credit[s].indexOf(author[sx]) -1)h1=100; if(credit[s].indexOf("答申文") 0)h1=0; if(credit[s].indexOf("退室") 0)h1=0; if(credit[s].indexOf("入室") 0)h1=0; if(credit[s].indexOf("提出資料") 0)h1=0; if(h1 50)h=100; } if(h 50)t=t+1; if(h 50)index[t]=s; } indexnumber=t; for(s=1;s indexnumber;s++){ p1=index[s]; p2=index[s+1]; bun=data[p1]; for(sx=p1+1;sx p2;sx++){ bun=bun+data[sx]; } article[s]=bun; } file="gdata/"; file=file+number; file=file+".txt"; writefile(file); } } } void makecom(){ com[13]=35; com[14]=42; com[15]=30; com[16]=35; com[17]=31; com[18]=31; com[19]=15; } void writefile(String file){ int s,sx; try{ PrintWriter pw = new PrintWriter (new BufferedWriter(new FileWriter(file))); for(s=1;s indexnumber;s++){ pw.println(article[s]); } System.out.println("ファイルに書きこみました。"); pw.close(); } catch(IOException ep){ System.out.println("入出力エラーです。"); } } void readfile(String file){ String str; BufferedReader br; s=0; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"SJIS")); while((str = br.readLine()) != null) { s=s+1; data[s]=str; } br.close(); } catch (IOException e) {System.out.println(e);} datanumber=s; } }
https://w.atwiki.jp/goldiary/pages/19.html
一覧 Excel セル内改行の前後で分割する Excel 一行おきに色を付ける! 条件付き書式で関数を使用! Excel 一列おきに色を付ける! 条件付き書式で関数を使用! Excel セルの大きさを正方形(方眼紙)にする Excel ツールバーに電卓を追加する Excel 変更しないのに 「変更を保存しますか?」 と表示? Excel 列番号が数字になってしまった場合の対処方法 Excel 変更していないのに計算方法が手動に (・・?) Excel ダブルクリックで色を変える方法 Excelセル内改行の前後で分割する 改行位置に改行コードが含まれています。 Excelの場合、Alt+Enterキーを押すと、16進数で0Aという制御コードが入ります。 この0Aは、CHAR関数で表すとCHAR(10)です。 改行の前と後ろを、それぞれ抜き出す =LEFT(B5,SEARCH(CHAR(10),B5)-1) =MID(B5,SEARCH(CHAR(10),B5)+1,256) ※赤文字はセル指定で Excel 一行おきに色を付ける! 条件付き書式で関数を使用! [ Excel ] 表を作成した時に一行おきに色をつける場合、それぞれ行を選択して塗りつぶしにて行っている方が多いかと思います。これだと選択するのに時間を要してしまいますので、MOD関数 ROW関数 を使用して、条件付書式にて色を付けてみます。 色を付けるセル範囲を指定します。 [書式]-[条件付き書式] を選択して、[数式が] [ =MOD(ROW(),2)=1 ] と入力します(下図)。 [書式] ボタンにて[パターン]タブから色を選択してOKします。 以上で選択範囲の奇数行に色がついたと思います。=MOD(ROW(),2)=1と入力することで、行番号を2で割って余りが1ならば奇数行と認識されますので、奇数行に色が付くことになります。ちなみに余りが0なら偶数行です。 Excel 一列おきに色を付ける! 条件付き書式で関数を使用! [ Excel ] 今回も ROW関数 での一行おきに色を付けると同じように、COLUMN関数を使用して列で行ってみます。 色を付けるセル範囲を指定します。 [書式]-[条件付き書式] を選択して、[数式が] [ =MOD(COLUMN(),2)=1 ] と入力し、[書式] ボタンから“黄色”の設定を行います(下図)。 [追加] ボタンを押して、[数式が] [ =MOD(COLUMN(),2)=0 ] と入力し、[書式] ボタンから“黒”の設定を行います(下図)。 条件を2つ設定したら、[OK] をクリックして下さい。見慣れた縦じまが表示されると思います。実務においては、列ごとに色をつけることはないかもしれませんが、方法の一つとして覚えておくのもいいかもしれません。 Excel セルの大きさを正方形(方眼紙)にする [ Excel ] 複雑な表を作成したり、図形を作成する場合には、セルの大きさ(高さと幅)が正方形になっている方が便利な場合があります。そこで今日は、セルの大きさを正方形にする方法を紹介します。 どこでもいいので、行番号をクリックして、任意の行を選択します。 [書式]-[列]-[幅] で列幅ダイアログを表示します。 1.63 と入力して OK して下さい。 以上で、セルが正方形になったと思います。ただし、まったくの正方形になったわけではなく、あくまでも正方形に一番近いということだけです。 Excel ツールバーに電卓を追加する [ Excel ] 2007バージョン スタート Excelのオプション ユーザー設定 全てのコマンド選択 Excel 変更しないのに 「変更を保存しますか?」 と表示? [ Excel ] ブックを開いて、内容は一切変更をしないのに上記のメッセージが表示されることがあります。これは、ブックを開くと自動的に再計算する関数を使用しているためです。たとえば、TODAY関数。今日の日付を表示する関数ですが、ブックを開くと新たに今日の日付がセットされますので、結果としてブック(シート)が更新されたことになり、上記のメッセージが表示されるという訳です。 再計算される関数は以下の通りです。 AREAS CELL COLUMNS INDEX INDIRECT NOW OFFSET ROWS RAND TODAY また、リンクされた画像がある場合も再計算の対象になりますので、同様のメッセージが表示されることとなります。 Excel 列番号が数字になってしまった場合の対処方法 [ Excel ] Excelブックを開いたら、列番号が数字になってしまうことがあります。マクロで行と列の位置を計算、セルの相対参照を表示したあとにその事象が発生することがあるようです。 列番号が数字の表示形式を 「 R1C1 形式 」 、通常のアルファベットの表示形式を 「 A1 形式 」 といいます。 列番号が数字になってしまった場合の対処方法です。[ツール]-[オプション]-[全般]タブ-[R1C1 参照形式を使用する] のチェックを外して下さい。列番号の表示がアルファベットになります。 Excel 変更していないのに計算方法が手動に (・・?) [ Excel ] シートの内容を変更した時に、関数等の計算が反映されないことはありませんか? これは、MSサポート情報 にもあるように、作業グループのまま保存すると計算方法が手動に変更されてしまう不具合です。分かりやすく説明すると、複数のシートを選択した状態で保存した時にこの事象が発生します。サポート情報では、Excel2000/2002が対象となっていますが、Excel2003でもおきます。 「セルをダブルクリックしたら色を変えられるようにするにはどうしたらいいのでしょうか?」 2003までのExcelなら、[書式設定]ツールバー―[塗りつぶしの色]ボタンや、[セルの書式設定]ダイアログ―[パターン]タブでセルの色を指定できます。 Excel 2007なら、[ホーム]タブ―[フォント]グループ―[塗りつぶしの色]ボタンや、[セルの書式設定]ダイアログ―[塗りつぶし]タブなどでセルの色を指定できます。 実務ではセルの色を変更する処理が頻発するようなことがあり、そんなときに[塗りつぶしの色]ボタンの操作でさえ面倒に感じることもあり、 「ダブルクリックで色を変えるには?」 といった要望をいただくことになるわけです。 ▼ダブルクリックしたときにセルの色を変更するイベントプロシージャ ※B1 B10セルでダブルクリックしたときに、塗りつぶしが設定されていなければ明るい緑色で塗りつぶし、塗りつぶしが行われているときは塗りつぶしを解除する例 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range( B1 B10 )) Is Nothing Then Exit Sub With Selection.Interior If .ColorIndex = xlNone Then .ColorIndex = 4 Else .ColorIndex = xlNone End If End With Cancel = True End Sub ▼サンプルファイル(003086.xls 37KByte)ダウンロード サンプルファイルでは「Sheet1」シートのWorksheet_BeforeDoubleClickイベントプロシージャを、上記のようにコーディングしてあります。 「Sheet1」シートのB1 B10セルをダブルクリックすると、セルの色が変化することをご確認いただけるでしょう。 セルの背景色を変更しているのは、 With Selection.Interior If .ColorIndex = xlNone Then .ColorIndex = 4 Else .ColorIndex = xlNone End If End With の部分です。 「.ColorIndex = xlNone」のとき、即ち背景色が設定されていないときに「.ColorIndex = 4」としています。「4」が明るい緑色なのですが、他の色にしたいときは他の数値を指定してください。 色と数値の関係については、ColorIndexプロパティ値一覧をご参照ください。 B1 B10セルに対してだけ処理したいので、 If Intersect(Target, Range( B1 B10 )) Is Nothing Then Exit Sub というIf文を、背景色の変更処理の前に入れています。 他のセル範囲に対して、ダブルクリックで色変更するのであれば、「Range( B1 B10 )」の部分を変更してください。 Excelでは通常ダブルクリックをすると、セル内にカーソルが入ってしまいますが、色をつけるためにダブルクリックしているのに、いちいちセル内にカーソルが入ると鬱陶しくて仕方ないはずなので、「Cancel = True」でDoubleClickイベントをキャンセルしています。
https://w.atwiki.jp/rflab/pages/14.html
Ansoft Designer で、PCBの各層の厚さや材質の情報を保存するための astyファイル について解析した結果を示します。 注意事項 各クラスの内容AnsoftDesignerTechnologyFileクラス CommonSerSymクラス SubstrateDataクラス関数 Dielectric(H, Er, TAND, HU, TANM, MSat, Mrem) 関数 DielectricRef(type, ref) 関数 Metalization(SubDef, TRL1, TRL2, TRL3, R) 関数 Metal(Name, R, T) TopLayoutSettingsクラス Layoutクラス Layersクラス layerクラス stackup layerクラス Sublayerクラス 導体名サブクラス PCBの情報からテクノロジファイルを作る テクノロジファイルの確認 注意事項 内容は管理人が勝手に解釈したもので、ほとんどが推測によるものです。情報は自己責任において利用してください。 $begin $end で囲まれた情報を「クラス」と呼んでいます。 クラスに属するデータは「メンバ」と呼んでいます。 abcd(x,y,z) は「関数」と呼んでいます。 各クラスの内容 AnsoftDesignerTechnologyFileクラス Topのクラスで、以下の3つサブクラスを持つ。 CommonSerSymサブクラス ... 材質の情報 TopLayoutSettingsサブクラス ... 文字フォント情報など Layoutサブクラス ... 各レイヤの情報 CommonSerSymクラス 基盤材質の情報として、SubstrateDataサブクラスを持つ。 SubstrateDataクラス 基盤材質のデータを記述するためのクラス。 Nameメンバ … 材質の名称。 Typeメンバ … 基盤の種類。0=Microstrip, 1=Stripline, 2= Offset Stripline, 3=Coplanar Waveguide, 4=Grounded Coplanar Waveguide, 5=Suspended Stripline, 6=Slotline, 7=Four-Layer, 8=Five-Layer, 9=Rectangular Waveguide。 Dielectric()関数、DielectricRef()関数、Metalization()関数を有する。 関数 Dielectric(H, Er, TAND, HU, TANM, MSat, Mrem) 基盤誘電体のパラメータ設定。HU以降は省略して Dielectric(H, Er, TAND) と記述可能。 H … 高さ(Height)。 長さの単位が使える。 Er … 比誘電率(relative permittivity)。ガラスエポキシ基盤 FR4 の場合、4.0~4.8程度。 関数 DielectricRef(type, ref) 使用する誘電率のデータを選択する。 type=1でrefに Dielectric を指定すると、上記Dielectric()関数で設定したデータが使用される。 type=2とすると、syslibなどで登録されている誘電体のデータ( FR4_epoxy など)を指定できる。 関数 Metalization(SubDef, TRL1, TRL2, TRL3, R) 導電レイヤ情報。 SubDef … Substration Definition で使用する情報。 TRL1~TRL3 … Component の TRL (Transition Line) で使用する情報を Metal()関数で指定する。 R … Roughness。表面の荒さ。 関数 Metal(Name, R, T) Name … 金属の名称。 R … 抵抗値(Resistivity)。 T … 厚さ(Thickness)。 TopLayoutSettingsクラス 文字フォント情報などが含まれるが詳細は省略。 Layoutクラス Layersサブクラスと導体名(copper/goldなど)のサブクラスを持つ。 Layersサブクラス ... 各レイヤの情報 導体名サブクラス ... 導電率の情報 Layersクラス 各レイヤの情報として layerサブクラスと stackup layer サブクラスを持つ。 layerクラス PCBレイアウト時の詳細なレイヤ情報。インピーダンス計算には使用されない。 Nameメンバ ... レイヤ名を設定する。例として、「Measures」、「Rats」、「Errors」、「Symbols」、「Assembly」、「Silkscreen」などがある。 stackup layerクラス インピーダンス計算に使われるレイヤ情報。インピーダンス計算用の情報として Sublayerサブクラスを有する。 Nameメンバ ... レイヤ名を設定する。例として、「Trace」、「Dielectric」、「Ground」などがある。 ElevationEditModeメンバ ... 下のレイヤのどの位置に現在のレイヤを配置するかを設定する。 snap to bottom で下のレイヤの Upper Elevation の値が、現在のレイヤの Lower Elevation となる。 snap to middle の場合、下のレイヤの Upper Elevation の値が、現在のレイヤの中心の高さとなる。 Sublayerクラス インピーダンス計算用のレイヤ情報として、以下のメンバを持つ。 Tickness ... 厚さ。長さの単位が使える。 LowerElevation ... レイヤの高さ。長さの単位が使える。 Roughness ... 表面の荒さ。長さの単位が使える。 Material ... 材質 導体名サブクラス permittivity ... 誘電率 conductivity ... 導電率 [Siemens/m]。銅の場合、20℃で 59×106 S/m 0℃で 64.5×106 S/m。 PCBの情報からテクノロジファイルを作る 次のようなPCB基盤でインピーダンスの解析をするためのテクノロジファイルを作成する。 Layer No.1 に信号 (Signal) があり、 Layer No.2 が Ground となっていること部分について、マイクロストリップ線路の解析を行う。 上の図は、PCBレイアウトエディタでのレイヤ設定であるが、 Ansoft Designer ではこのうちの Layer No.1 と Layer No.2 だけをモデリングする。 Layer No.1 は Ansoft Designer では Trace Stackupレイヤ、 Layer No.2 は Ground Stackupレイヤとなり、Ground Stackupレイヤは理論的なレイヤとして厚さを0umとする。(下図参照。) このようにして作成したテクノロジファイルが MS_FR4_Er44_015mm_1oz_copper.asty である。 Ansoft Designer の userlib か、各ユーザのホームディレクトリにある PersonalLib 内にこのファイルを保存する。 テクノロジファイルの確認 Ansoft Designer を起動後、「Insert Circuit Design」を行うと、「Choose Layout Technology」ダイアログが表示され、 MS_FR4_015mm_1oz_copper を選ぶことができる。 Project Manager ウィンドウの Circuit1 - Data の下にある FR4 をダブルクリックすると、 Substrate Definition ダイアログが表示され、テクノロジーファイルの情報が反映されていることが確認できる。(下図、クリックすると拡大します。) また、メニューの Schematic - Layout Stackup を選択すると、 Edit Layers ダイアログが表示され、各レイヤの Lower Elevation と Upper Elevation が意図したとおりに設定されていることが確認できる。(下図)
https://w.atwiki.jp/linsivvi/pages/28.html
A Missing Mask 必須レベル:31 クエストスタータ:Nektropos城地下(-14.62, -12.91, -32.40)にある"a create" 難度:普通 キャンプ有無:有り ステータスポイントボーナス:45,750 報酬:Guise of the Deceiver LORE NO-TRADE アクティフ スロット “使用”することでダークエルフに変身できる。 ファクション増減:なし 重量:0.0 NPCへの売価:20G 1) クエストを受けた後、Eliseの寝室地下に入ると、Billyという人形がポップします。倒す 2) 娯楽室にいるBillyを倒す(レアポップ、要PH掃除) 3) 礼拝堂にいるBIllyを倒す(レアポップ、要PH掃除) 4) 図書館に行き、本棚裏にある隠れ部屋にある本(-23, +13.5, +29)を読む 5) 中庭に戻るとBillyが現れます。話し掛けて5GPを払う。(払わないと無敵状態なBillyと 戦闘に入り、クリア不可能に) 6) 牢屋にいるFroglok幽霊に話し掛けて、下記のものを持ってくるように頼まれる: - 人形 x 21 - 残忍な血 - 豚王の首 人形: 城地下、特定な寝室、Lord Everling行く途中の通路に沸きます。 再ポップはしないのでこのステップまではできれば人形系モンスター に手を出さないこと。数が足りなかったら次回に持ち越すしかない。 残忍な血: 再度図書館に向かうとレベル35▲▲のラミアがポップ。倒すとアップデート 豚王の首: 牛舎に居るPH豚を殺し続けばいずれポップします。 7) Froglok幽霊に話し掛ける。会話が終わったら暫く消えるがすぐ再ポップします。時間を計って 同時に会話を勧めれば一度で全員分アップデートされます。 8) 最深部にいるMalthus Everlingを倒し、部屋内にある大箱(+224, -17, +28)を調べるとクリア。