000 - みる会図書館


検索対象: 月刊 C MAGAZINE 1992年6月号
188件見つかりました。

1. 月刊 C MAGAZINE 1992年6月号

応用 & 語 C の導具箱 List 1 173 : { 34 : } 43 : } 52 : { 58 : { fprintf(stdprn, "XcXc ” , ESC, ' ぐ ) ; 64 : { 72 : ) ” XcXc14XcXc ” , 0x1b, 0x5b, ' 78 : } UN Ⅸからのコマンド送出方法の例 List 2 open("/dev/ttya ” ,O_WRONLY ) ) = 80 : yokogak i ( ) 2 : 3 : 5 : 6 : 7 : 1 : if((handle exit(l); if((stdprn exit(l); printf( ” can' t 0 n printer }n ” ) : fdopen (hand 1 e, ” ) ) = printf( ” can' t printer #n ” ) ; 82 : 83 : 84 : } 85 : 88 : { 89 : 92 : 93 : 94 : 95 : 96 : 97 : { 99 : 1 圓 : 101 : 102 : 103 : 104 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : 116. 117 : 118 : 119 : 120 : { 121 : 122 : 123. 124 : 125 : 126 : 128. 129 : 130 : 131. 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 ・ 141 : 142 : 143 : 144 : 145 : 146 : 147 : 149 : 150 : 151 : 152. 153 : 155 : 156 : 157 : 158 . 159 : 160 : 161 162 : 163 : 164 : 165 : 167 : 168 : 169 : 170 : 171 : 174 : 175 : 176. fprintf(stdprn. ” XcXcOXcXc ” , 0x1b, 0x5b, ' return ( の ; NULL){ 86 : moji-kaiten(kakudo) 87 : char *kakudo; fprintf(stdprn, "XcXcXsXcXc", 0x1b, 0x5b, kakudo, return( の ; List 2 LASER SHOT の LIPS 関数群 (uPS9206. C) maru_num ( X, y, num) int x; int y; Char *num ; 1 : 2 : 4 : 6 : 7 : 8 : 10 : 11 : 13 : 21 : 23 : 24 : 26 : 29 : 32 : 33 : 35 : 37 : 38 : 41 : 42 : 44 : 45 : 48 : 51 : 53 : 54 : 56 : 57 : 59 : 60 : 63 : 65 : 66 : 71 : 74 : 76 : 77 : 79 : 30 : text_mode() 28 : MYEXTERN char *mids() ; 27 : MYEXTERN LONG labs(); 25 : #endif char *ltoa() : char *itoa(); 22 : #ifdef UNIX 20 : #endif #include "Iipspr02. h ” #include "cboxprot. h ” 17 : #ifdef PROTOTYPE 15 : #include ” Iipsvar2. h ” 14 : #include ” lips2. h ” 12 : #endif return( の ; fprintf(stdprn, "XcXX@", ESC) ; 36 : job-start(comlevel, dpi, code) 39 : char *code; char *dp i ; Char *comlevel ; #def ine MYEXTERN extern 3 : #include ” config. h ” 5 : #include く stdiO. h> #include く fcntl. h> #include く string. h> 9 : #ifdef MSDOS #include く stdl ib. h> #include く process. h> mkprint(), Y, ”〇” ) : fourbunl() ; mkprint(x + 1, y-l, num) ; zenkaku() : return ( の : 105 : auto_kyocho() fprintf(stdprn. "XcXc?25h", 0x1b, 0x5b) ; return ( の ; moji_weight(weight) char *weight; fprintf(stdprn, ” XcXcXsXc", 0x1b, 0x5b,weight, return( の ; sel_mojiset(name) Char *name ; fprintf(stdprn, "XcPzXsXcXc", 0xlb,name, 0xlb, 0x5c); return( の : put_mojiset(num, table) Char *num : 127 : char *table; fprintf(stdprn, "XcXcXs;Xs D", 0xlb' Ox5b' table); return( の ; get_moj i set (num, tab atrret) char *atrret ; char *tab 1 e : char *num : fprintf(stdprn, return ( の ; job-end() fpr i ntf (stdprn, return ( の ; initlaza() return( の : soft—reset(); soft—reset() return( の ; tate—henkan—yes ( ) return( の ; fprintf(stdprn, 68 : tate_henkan_no( ) "XcPXs;Xs;XsJ%cXc", 0x1b, comlevel,dpi, code, 0x1b, 0x5c) : "XcXcXc29h ” , 0x1b. 0x5b, 0x3f) ; ” XcPOJXcXc", 0x1b, 0x1b, 0x5c); fprintf(stdprn, "xcxcxs;xs;xsxcxc", 0xlb' 0x5b' table•atrret' 0X25 , 0X76 ) ; return( の ; fourbunl() fprintf(stdprn, " % c % C50 ; 50 B", Oxlb, Ox5b); return( の : 148 : fourbai() fprintf(stdprn, " % c % C200 : 200 B ” , 0x1b, 0x5b) : return( の ; 154 : zenkaku ( ) yokobai() fprintf(stdprn, " % c % C100 ; 100 B", 0x1b, 0x5b) : fprintf(stdprn, ” % c % C100 ; 200 B", 0x1b,0x5b) : return( の ; return ( の ; 166 : tatebai() fprintf(stdprn, "XcXcXc291", Oxlb' 0x5b' 0x3f); return ( の ; tategaki ( ) return( の : fprintf(stdprn, fprintf(stdprn, " % c % C200 ; 100 B ” , 0x1b,0x5b) ; return( の ; 172 : mojiretsu kakudai mode() fprintf(stdprn, "XcXc?28h", 0x1b, 0x5b) ; return( の : 応用 C 言語 129

2. 月刊 C MAGAZINE 1992年6月号

匚一 279 , 000 円 18 000 円 円 <NEC> PC-9801NL く PC-9801NC く旧 M 〉 PS/55 NOTE ( ェカン > PC-886P2 くエカン〉 PC-886GE5 件ャラベル ) AV - 田口 SXE 5523SV4 Ⅳ 0 E こ B8- Ⅳ 0 田一別売 2 巳 906 円別売 匚こここコ (NEC) PC ー 98 団 UF ・・ (NEC) PC ー 98 団 FA/U2 ・・ 13 巳 000 円 ・匚 : こ : こ : コにカン ) PC-886GS2 ・・ 匚 : : こ : こ二 ] ( ェカン ) PC-286VJ5 ・ にカン〉 PC-886GE8 ・・・ 円 匚 : 匚こコ (NEC) PC -98 団 NS / T4 ロ・・・ にカン〉 PC-886GE2 円 件ヤノン旧 J - IOV SeIect(B) (NEC) PC-PR101/T108 くエカン〉 AP-I ロロロ PC 〉 PC - P 日田 1 / 6 ロ A (NEC 〉 PC-KD882 オートシートフィーダ - カットシートフィーダ - ASF-6L110 7 旧円別売 AP 旧ロ OQS 9.6 別売 39 お 00 円 43S00 円 49 00 円 円 65S00 円 63 お 00 円 9 000 円 興 ) 可ヒューレットノヾッカード ) 68 , 900 円 ( ェカン ) HG-4000 PC ・・・・・・・匚 : ここここコ 69 旧 00 円 (NEC) PC - P 日 15 ロ n ・ 40 旧 00 円 (NEC 〉 PC-TV454 ・・ HP Desk det5 ロロ J ・・・ 37 旧 00 円 (NEC) PC - K ロ日 8 ト 69 お 00 円 4 日 S00 円 (NEC) PC-PR201/60 ・・ (NEO) PC - KD854n ・・・ 71 00 円 <NEC) PC ー P 日田レ 65A ・・ 129 , 000 円 にカン ) AP -9 ロロ PC ・・ 79 , 日 00 円 (NEC) PC - P 日田 1 / 45L ・・・ 6 ロ旧 00 円 (NEC) PC ー P 日 IOI / T165 ・・・ 79.900 円にカン〉 LP - 田・・・・・・・・・・・・・匚こ : : : こ : : 第 ] 3 ス 500 円 ープ CU-14FD ・・ (NEC> PC - TV455 ・・・ 匚こ : : こコ (NEC) pc - P 日旧開 / 2 ・・・ 129 , 000 円 ー ~ こここ二こ ] ( スタ - ) U 日 -2 ロ OCL ・・ 41 S00 円 5 日 S00 円にカンⅣ P - 田 6 旧 C ・・・ ( サンヨー℃ MT-A 14U2S ・・ 匚こ : 〕コ ( ェカンⅣ P ー旧 47PC ・・・ 匚こ〕こコ件ヤノン旧 J -332Y 当元・・・ [ : : : こここコ (NEC) pc ー p 日 2 開口 / 4 ・・ 269 , 000 円 59500 円 ( 三菱〉 XC-98V8 ・・・ にカン ) AP -3 ロ OBK ・・ くテクノジャパン〉 く緑電子〉 く ELP) く ELP) く緑電子〉 くテクノジャパン〉 件ャラベル ) ( テクノジャパン〉 く日本テクサ〉 8ØNST BLT-N80 LH-100i LH-IOOFR A ー旧ロ PD125E AV-200F /P PD200HE STATlON-240LB ( 緑電子旧 LT - <A 日 L ・ソフト付 F 合用内蔵旧ロ M 日 FA 内蔵 Ed, トプ使用 36 , 0 円別 62 , 500 円 6 巳 000 円 62 お 00 円 65 00 円 70S00 円 72 お 00 円 10 000 円 10 ス 000 円 112 , 000 円 くメルコ〉 ぐ / 0 ) くメルコ〉 くオムロン〉 Ⅳ 0 ) くアイワ〉 くエース電子〉 FA84-4M EMJ ー 4 口日 PlO-PC34FX-4ME CEL-IOOO MD24FB5V PV-M24B5 AF-5S プリンタノヾッファ IOS-IOSTD 付 モテム モテム 5 月 18 日号 PC-9801NS/T (NCPC-9801NS/T80 ン〉 PC -886NAE いエル PC-886NWR2 く東芝 ) J -31 SX 開Ⅳ W PC ー 98 団 FA2 くエカン ) PC-886GS8 ( 刈ロ ) RC D -4 ロ 0 ロ Ⅳ 0 ) NT34-2M (I/O) EP-NTB-4M E 旧本テクサ ) Dyna Pack 4 ロ 国ロ EFA -8 ロロ 0 第、 Ⅳ 0 旧別売 32 , 円別売 697g 別売 123g 別売 をに朝きはに 189 , 000 円 28 巳 000 円 ノートノ、 、周辺機器 5900 円 くハ戸〉 CRTC-02N ( C 日 T パック ) ・・・ シュド〉 T98-S ロ団 (NEC CRT/\ ック完全コンヾチ ) ・ 4950 円 3 お 00 円 (HCTO) HT-PCNI ( ノイズフィルター付 P 日ケープル ) ・・・ 5 , 900 円 に一ス電子 ) ACE-IOB ( テンキ - ) ・・ 28 , 000 円 Ⅳ 0 〉 PlO-98NT-4ME ( 醂日 RAM) ・・・ 48 , 5 ロ 0 円 はオス〉 GOLD98-8MA ( 8M 日 RAM) マウス付・・ 16 旧 00 円 国に〉日 CD - 田 ( 2M 日 RAM) ・・ 仭に〉日 CD - 田開旧 M 日 RAM) ・・・ 56 旧 00 円 ( テクノジャパン ) T 日 4 ロ NST テンキーソフト付・・・ 46 旧 00 円 ℃日 0 C 日 C - 旧 E80 ・ 6 巳 000 円 (ICM> Pack E80 ( 日 OM 日 H ロロ ) ・ 77 旧 00 円 15 000 円 386 , 000 円 228 , 000 円 電子〉 BLT-N40 ( 4 ロ M 日 HDD) ・・ 4 000 円 電子〉日 LT - N12 ロ ()2 ロ M 日 H ロ D ) ・・・ 8 巳 000 円 27 000 円にカン ) PC -386GS5 ・・・ 旧本テクサ ) TRUST NE80 (80MB HDD) ・ 69S00 円 旧本テクサ〉 TRUST NE125 (125MB H ロロ ) ・・・ 84500 円 ( キャラベル〉 AV-125SXE 貶 5M 日 HDD) ・・・ 日ス 900 円 アデクソン ) S 日一 7314 く三菱 ) XC ー 14g8C Ⅱ ロ 28 ニ 27 旧 09 円別売 P03 ヨ日日 SX を 新 \1 ル 256000 円 ( 旧 M) 553 ロ - UW8 ・・・ くネオス〉 くメルコ〉 GOLD9&4MA ENT ー 6 ロロロ NS / T 用内部増設 マウス : 55 N*OJ.E 用 ー臨 s を 1 い物十 25 , 600 34500 円 23 , 800 円 2 500 円 2 500 円 2 ス 900 円 2 巳 400 円 25 , 600 円 25300 円 [ : : : : ここ : バ三トディスグ三ツドプ : ここここ ] 28 , 000 円 46 , 900 円 (CRC) CRC-FD8.5WS 3.5 " 2 ドライフ・・・ く I/O 〉 FA34-8M (IOS-IOSTD イ寸) ・・ 仭に ) 63 , 500 円 JWP-IOOO プリンタバッフア・・・ 22 , 500 円 9 巳 000 円 60 旧 00 円 ℃日 C 〉 CRC-FD3.5SH 3.5 " 1 ドライプ・・・ (I/O) (ICM) HC-IOON ・ FA84-10M (IOS-lOSTDfi) ・ 49300 円 仭に〉 J YP- 旧ロロプリンタバッフア・・ 2 日 , 900 円 60 旧 00 円 74800 円 く電〉 FA84-12M (IOS-10STDfi) ・・ ℃日 C 〉 CRC-SCIOOD ・・ (CRC) CRC-FD5SH5"I ドライプ・ 21300 円 インテル ) J 日 0X387SX - 旧コプロ・・ 匚ここ : : : ラ三ド三カ△ツ万三こ : ここ ] 98.000 円 1 日 S00 円 ( メルコ ) EMJ -2 ロ OO 日・ 22 , 900 円 (ELP) LH-200i 200MB HDD ・・・ インテル ) J 日 0X387SX -20 コプロ・・・ 日 1 , 500 円 28 , 900 円 56 、 000 円 ( メルコ ) EMJ -8 ロロロ日 ( テクノジャパン〉 PD130HE ・・・ く I/O 〉 曰 0 ー 31SS - G4M ・・ J 日 0X387DX -33 コプロ・・・ 31 S00 円 くイ万ル ) 61 , 500 円 2 日 300 円 23 , 900 円 Ca 「「 Y Pack 40 ・・ PS-SlM55N-4ME ・・ ( メルコ ) E ロ A ー 400 ロ日・・・ 73 , 800 円 旧本テクサ ) ( インテル ) JBOX487SX コプロ・・・ 1 1 000 円 33 , 500 円 48300 円 Dyna Pack 8 ロ・・ く I/O 〉 NT34 ー 6M ・・ ( メルコ ) E ロ A -8 ロロロ日・・・ 旧本テクサ〉 ムをコン 81 S00 円 46 お OO 円 25 , 400 円 STA 羽 ON ー 12 ロ L 日・・ Ⅳ 0 〉 EP-NTB-6ME ・ 24600 円 旧本テクサ〉 ( メルコ ) はムロン〉 MD24FP5V ・・・ 53S00 円 55S00 円 Ⅳ 0 〉 36 旧 00 円 電子 ) TF-120 ( ストリーマ ) ・・・ EP-NTB-8ME ・ はオス ) GOLD8 旧ロ -41_A ・・ 25.900 円 ( アイワ〉 PV-A24B5 ・・ 15300 円 1 ス 900 円 1 1500 円 に一ス電子 ) AF-35S 3.5 " 1 ドライフ・・・ Ⅳ 0 ) PIO-PC34FX-2ME ・ PC 凵 NK296EX ()C 用 ) モテム・・・ 64 日 00 円 ( ネオス ) NE-98SlM-2M PC9 U 互農・ く沖電気 ) 25.600 円 23.900 円 に一ス電子 ) AF-35W 3.5 " 2 ドライプ・・・ Ⅳ 0 ) 曰 0- DA134-4ML ・ 24900 円 65.500 円 ( ネオス > NE-EMS-4LA ・・ に一ランド ) ミュージ郎 3 ロロ・・・ CRC-FD3.5WH 35 " 2 ドライプ・・ 33 , 800 円 4 ス日 00 円 39 旧 00 円 (CRC) Ⅳ 0 ) 曰 0- DA 旧 4 一日 ML 109 , 58 円 くネオス ) NE-DA8M ・ に一ランド ) ミュージ郎 5 ロ 0 ・・ (NEC 〉文豪ミニ 5SX に士通 ) オアシス 80LX Ⅲ ( 東芝〉ルホ JW95UV 件ヤノン〉キヤノワード 275 <NEC) 文豪ミニ 7SX ( シャー WD-A551 く冨士通 ) オアシス 3 ロ - AX8 ロい東芝〉ルハ UW981JPII 第朝要↓ , い、朝、いい物→気朝 ~ 霧 : 円当 18 00 円 匚 : こ : : こコ件ヤノン ) キヤノワード日 5 ・・・ 218 , 000 円 <NEC 〉文豪ミニ 5Si ・ 仂シオ〉 HW-9800GX ・ 朝を第ト、 円 134000 円 136.000 円 106 、 000 円 (NEC) 文豪ミニ 7SD ・・ 円 186 , 000 円 106 : 000 円 1 15000 円 ( 富士通〉オアシス 80- SX3 団・・・・・匚ここここ〕

3. 月刊 C MAGAZINE 1992年6月号

応用 C 言語 C の道具箱 List 2 List 2 274. 275 : locatet(), y) 276 : 277 : LONG x ; 278 : LONG y : 279 : 280 : char xxC20] ; 281 : char yyC20] ; Y = Y - ( NG ) ( ( 63 * 25.4 * 10 の / Gdpi ) ; 282 : if (y く OL){ 283 : 284 : y : OL : 285 : ltoa(x,xx,l の ; 286 : ltoa(y,yy,l の ; 287 : fprintf(stdprn, "XcCXs;Xsf", ESC, yy, (x) ; 288 : return( の ; 289 : 290. 291 : mprint(), y, moji) 292 : 293 : LONG x : 294 : LONG y; 295 : Char *mOJi ; 296. locatet(), Y) ; 297 : fprintf(stdprn, "Xs", moji) ; 298 : return( の ; 299 : 300 : } 301 : mkprint(ix, iy, moji) 302 : 303 : int ix; 304 : int iy; 305 : char *moji : 306 : 307 : LONG x; 308 : LONG y; ニ (LONG)(ix*10 の・ 309 : X ニ (LONG)(iY*100) ・ 310 : Y locatet(x,y) ; 311 : 312 : #ifdef MSDOS fprintf(stdprn, ” XcXcXcXcXs ” , ESC, ' L' , ESC, ' L' , moji) : 313 : 314 : #endif 315 : #ifdef UNIX fprintf(stdprn, "XS ” ,moji) ; 316 : #endif 317 : return( の ; 318 : 319 : } 177 : shyota i ( num ) 178 : 179 : Char *num ; 180. fprintf(stdprn, "XcXcXsXc", 0x1b, 0x5b, num, 181 : return ( の ; 182 : 183 : 184 : 185 : kaigyo(n) 186 : int n; 187 : 188 : int i for(i = 0 ;i く n:i + + ){ 189 : fprintf(stdprn, "XcXc ” , Ox0d, (F) ; 190 : 191 : return( の ; 192 : 193 : } 194 : 195 : kaipage() 196 : fprintf(stdprn, 197 : return( の ; 198 : 199 : 0 char-set() fprintf(stdprn, ” % c ” , 0xOf) ; 202 : return ( の ; 203 : 204 : 205 : 208 : 209 : 210. 211 : 214 : 215 : 216 : 217 : 3-char-set() 218 : 219 : fprintf(stdprn, ” XcXc ” , ESC, ' 0 ' ) ; 220 : return( の ; 221 : 222 : 223 : print_maisu(num) 224 : 225 : Char 226 : { fprintf(stdprn, "XcCXsv ” , ESC, num) ; 227 : return( の ; 228 : 229. 230 : 231 : 232 : char *Pi tch 233 : fprintf(stdprn, ” % c [ 1000 : % s G", ESC, pitch) ; 234 : return( の ; 235 : 236 : } 237 : moji_size(size) 238 : 239 : Char *S i ze 240 : fprintf(stdprn, "XcCXs C", ESC,size) ; 241 : return ( の ; 242 : 243 : } 244 : tl ine(haba, type, xl, yl, x2,y2) 245 : 246 : char *haba; 247 : char *type; int xl,yl, x2, Y2; 248 : 249 : ( locatet((LONG) ( xl * 10 の , ( LONG ) ( yl * 10 の ) : 250 : fprintf(stdprn, "XcCXs;Xs;0{" ESC, hath type) ; 251 : locatet((LONG) ( x2 * 10 の , ( LONG} ( y2 * 10 の ) ; 252 : fprintf(stdprn, " % c [ 0 : 0 : の " , ESC) ; 253 : return ( の ; 254 : 255 : 256 : zahyot_unit(unit) 257 : 258 : char *unit,• 259 : fprintf(stdprn, "XcCXs I", ESC,unit) : 260 : return( の ; 261 : 262. 263 : 264 : 265 : { fprintf(stdprn, "XcC11h", ESC) ; 266 : return( の : 267 : 268 . 269 : keta-mode ( ) 270 : 271 : { fprintf(stdprn. ” % c [ 111 ” , ESC) ; 272 : return ( の ; 273 : 1 char—set ( ) fprintf(stdprn, ” % c ” , OxOe) ; return( の ; 2-char_set ( ) fprintf(stdprn, ” % c % c ” . ESC, ' n' ) ; return( の ; っム 0 0 っ 4 9 0 用 数 0 関 0 ・ 1 ・ 1 十 0 Ⅳん . 、十 、 0 1 ー 0 曲曲ⅲ { ⅲ 1 より 0 っ 0 ・ 4- -0 ^ 0 っー 8 9 0 1 より編 00 - - -0 ^ 0 ー 8 0 ・ 1 り 0 ^ 0 -4- 0 、 1 、 1 1 1 ・ 1 ・ 111 よ 1 .1 ・ 1 り 0 りムりり 0 つり 0 List 3 *Str return(str) : 130 C MAGAZINE 1992 6

4. 月刊 C MAGAZINE 1992年6月号

9 UNIZV9VVN 灸辟 品隼 UNIZVDVJN 品辟嶝引阜ハくエハ ) ミ 2 炬 SN S767B 凶拠眠 ( Y ) ト 0 9 レØくト区 4 ◎粟 '< E4 ートっトト◎囲Ø 加 0 ロト 0 新辟 uNIZV9VJN 辟朴・朴・経朴 ロロ・ロロロ Ø公細加 0 L ト 9 享 086 む太 0 。都田 8 一ト籵 a66 校Øエー CCØ凵 ( 署 < ) 輸凶矩 皿ー ( つ 辟レ UNIZVDVJN

5. 月刊 C MAGAZINE 1992年6月号

ーナショナル ールクラフト 0 ~ ノソ 0 テク アリス・

6. 月刊 C MAGAZINE 1992年6月号

ライフホ - ト lnformation from C0mpiler Makers Lattice C べクタ値を得ることができないプログラム Q List 1 のように割り込みべクタ の退避・設定を行っていますが , 終了後に誤動作します。ほかの処 理系では , 動作するのですが , ど こが悪いのでしようか。 A Lattice C て、は , intdosx 関数 と int86x 関数の仕様がほかの処理 系と異なっています。 Lattice C て、 は , intdosx 関数と int86x 関数のセ グメントレジスタ構造体の引数は 入力専用て、 , ファンクションから 返ってきた値は , この構造体に格 納されません。したがって , List 1 のプログラムて、は , ファンクショ ン 35H を使ってべクタ値を得ること がて、きていません。セグメントレ ジスタに返ってきた値を参照する 場合には , Lattice C て、は intdoss 関 数か int86s 関数を使います ( 付録デ イスク LISTI 2 参照 ) 。 Q プログラム中で , system 関数 を使って , ファイルのコピーを行 っています。ところが , ファイル が存在しないエラー時でも , リタ ーン値はいつも正常終了を示す、、 0 〃 が返っていきます。そのほかにも いろいろ試してみましたが 0 ″以 外の値が返ってきたことがありま せん。どうなっているのでしよう A system 関数は , 環境変 .com spec に指定されたコマンドプロセ ッサ ( 通常 command.com) を使っ て , その引数として起動するプロ グラムを指定するようになってい ます。ちょうど ,Fig. 1 の関数を呼 び出したのと , 同じような状態て す。 したがって , system 関数が返す 値は , command.com が返すステー タスになります。 command.com は , コヒ。一時 , ファイルがあって もなくても 0 を返しますから system 関数もコヒ。ーするファイルがあっ てもなくても 0 を返します。 system 関数が 0 以外の値を返すときは , comspec が設定されていないか , ま ちがって設定されているときて、す。 Q List 2 のプログラムを Fig. 2 の ようにコンバイル・リンクしても , 浮動小数点数が表示されず , 感 % に がそのまま表示されます。なにが 問題なのでしようか。 A リンク時のライプラリの順序 に問題があります。 printf 関数に は , 浮動小数点表示をサポートす る ( つまり , % If をサポートする ) バ ージョンと , 整数専用 ( つまり , % If を見つけても特別な処理をしない ) のバージョンとがあります。浮動 小数点表示をサポートする printf 関数はく lcm. lib > に入っており , 整数専用の printf 関数は , く lc. li b> に入っています。 リンカは , 先に指定されたライ プラリの中に入っている printf 関数 をリンクしますから , lc. lib ライプ ラリより , lcm. lib ライプラリを先 に指定しなければなりません。と ころが , コンパイルオプション L" は , 以下の順番にライプラリを リンクします。 ①十記号の次に指定されたライプ ラリ。複数ある場合には , 左か ら右の順 ② L の次に指定された文字を末尾に List 1 #include く stdio. h> #include く dos. h> extern void handler() ; main() struct SREGS segs; union REGS regs; Fig. 1 command.com を呼び出してファイルコピーを行う関数 f0「k厄( ” command.com , command.com ” , ” / C ” c 叩 y", ' 転送元” , ”転送先 ' , NULL, envp) 皿 si 馴 old—seg, old—off; char far *Ptr = (char far *)handler; regs. h. ah ニ 0X35 ; regs. h. al = 0X45 : intdosx(&regs, &regs, &segs) ; old_seg = segs. es; old_off ー regs. x. bx; regs. h. ah = 0X25 ; regs. h. al = 0X45 ; regs. x. dx = FP—0FF(ptr) ; segs. ds = FP-SEG(ptr) : intdosx(&regs, &regs, &segs) ; regs. h. ah = 0X25 ; regs. h. al ニ 0X45 ; regs. x. dx ニ 01d off; segs. ds ニ old_seg; intdosx(&regs, &regs, &segs) ; prin 廿関数で浮動小数点表示をするプログラム List 2 2 : main() 1 : #include く stdio. h> 4 : 5 : double a ニ 1.0 ; printf("%lf*n ” , a) ; 持 olcx.lib(x は , ー L の続きに指 定された文字 ) 。複数ある場合に は , 左から右の順 ③標準ライプラリ <lc.lib> したがって , Fig. 2 のようなコマ ンドラインオプションては , まず , lc. lib をリンクし , 次に , lcm. lib 最 Fig. 2 コマンドライン A>lc -Lm 十 test 後にもう一度 , lc. lib をリンクして しまいます。 lc. lib は , 自動的にリ ンクされますから , 指定する必要 がないのて , A>lc -Lm test とすれば , うまくいきます。 lnformation from Compiler Makers 153

7. 月刊 C MAGAZINE 1992年6月号

などはすて、にインプリメントされています。 EasyWin ストリーム (stdio, iostream) や conio を使 ったプログラムを Windows アプリ化する E asyWin がサポートされます。 Fig. 1 ヘルプファイル ・ WinHe ゆ形式のヘルプファイル 785681 Mar 1 7 1992 03 . 00 b . owlwhelp. hlp 1 7 1992 03 . 00 tcwhelp. hlp ー「 w---a 3917422 Mar b . Mar 1 7 1992 03 . 00 winsight. hlp 5 1 7 9 5 1 7 1992 03 . 00 b . workhelp. hlp -rw---a 880970 Mar ・ DOS 用へルプファイル 399852 1 7 1992 03 . 00 b . 0W旧eゆ . tch Mar tchelp. tch 3324080 Mar 1 7 1992 03 . 00 b . WinSight 533048 1 7 1992 03 . 00 b : tvchelp. tch Mar Windows のメッセージや , Windows のク ラスに関する情報をモニタするツールて、す。 K バイトを切っても Extended メモリが残っ 追加された機能 てさえいれば平気な顔をしてコンパイル・ TDW. EXE, TDPROFW. EXE リンクをこなしてくれます。残りメモリが 510K バイトと 180K バイトの場合て、コンパイ Windows 環境てのデバッガ TDW. EXE と BC 十十 2.0 から追加された機能をざっと眺 ル時間を比較してみましたが , まったく同 プロファイラ TDPROFW. EXE が提供されて めてみます。詳細については , 4 月号を参照 じ時間しかかかりませんて、した。 います。 してください AT&T C 十十 Ver. 2.1 のサポート十住 Wind 。 ws ホステッドな環境版コンノヾイラ BGI ネストしたクラス , インクリメント / デク Windows 上の環境版コンパイラが提供さ 6 種類のフォントが追加されました。 リメント演算子の前置後置の区別 , テンプ れ , Windows 環境て、の開発が可能となりま クラスライプラリ レートのサポートなどが追加されています。 した (Fig. 3 , Fig. 4 ) 。 ObjectBrowser とい クラス内て、宣言されたクラスの名前は , う名前のつけられた , クラス階層のプラウ TC 十十 /BC 十十て、は ,TCLASS というク ラスライプラリが提供されてきました。実 ザも用意されています ( 4 月号参照 ) 。 それを含むクラス内て、ローカルになります。 滝版ということもありダイアログはまだ作 ネストしたクラスへのアクセスは , 通常の 際には BC 十十 3.0 て、はなく Application Fr メンバへのアクセスとほば同じ形式て、記述 業中のようて、すが , 2 バイト文字のエディット ameworks からのようて、すが , 4 月号の「スタ されます (List 1 ) 。 Fig. 2 オプティマイズ関係のオプション テンプレート機能により , 型をパラメー タに持っクラスの宣言がて、きます ( 4 月号参 照 ) 。 オプティマイズ Fig. 2 に BC. EXE て、のオプティマイズオプ ションのメニュー画面をあげておきます。 具体的なオプティマイズの効果については , P 「 0 ・ ect 0 tions File Edit search Pun 「 om i Debu• 川団 ( lp ( ) No 「に ( 0 Regi st 期 0 朝 ( 0 ) 師 to 「 n 計に しら「いい : : 、リい、、い「曰 55 第 0 第ら ( ー ) NO 0 はⅲに日新 on ( ) t3p 新 m に己 100 引 ( 0 ) 0p い m にを国 ob 引い いはにを「げ ( ) 3 にを ( 0 ) Speed 一ネ ! ◆ - [ 幻 ob 引「 egist 曰、 a Ⅱい朝い い - Ⅳ日「 iant ー 0 朝」 0 ロ に ] _lnduct iQ ロ協「い es [XJ [ 幻 LOOP OPt 朝 1 に at iO 日 [ 幻 Supress 「、 edundant loads Ⅸ ] COPY propagati Assume no pointer a Ⅱヨ 5 ー [ 幻 [ 日 d code 引 imi 「旧い on 信 ] Jump opt im ーこ a い 0 ロ lnline intrinsic f Ⅲの・い 0 「 「 1 Standat 、 d stack 行 a Ⅲ 81 Ⅲ 81 # i 81 BEG I N BEG I 4 月号を参照してください D P M ー Extended Memory の管理に VCPI て、はな く DPMI がサポートされ , BC. EXE の Wind ows 3.0 のエンハンストモードて、の使用が可 能となりました。常駐型の DPMI カーネル , DPMIRES. EXE も提供されています。 DOS 版コンパイラて、は , 残りメモリが 200 F i 1 e ・ STEPI HEL STEP 、 - OWL. 臼 1 p Accept t ト旧 settings in this dialog box 30 C MAGAZINE 1992 6

8. 月刊 C MAGAZINE 1992年6月号

more 型て、あるとしてメモリ上のビットパターン を解釈してしまい , バグとなる。 タイプタグというのは , 共用体にとって 必須て、はないものの , 密接な関係がある。 このためほかの言語て、は共用体 ( に相当する 機能 ) の定義時にタイプタグを同時に宣言し てしまえるような構文を備えている場合も ある。 いつも引き合いに出す PascaI て、は , C 言語 の構造体に相当するレコード (record) 型と いうものが存在する。 Pascal における共用 体に相当するものは , このレコード型の変 形として存在し , 「可変部を持っレコード」 と呼ばれる。またタイプタグのことを Pasc al て、は「タグフィールド」と呼ぶ。 可変部を持っレコード型の定義を用いる と List 4 のような記述がて、きる ocase—of は C 言語て、いえば switch に相当する機能て、ある が , この部分て、宣言されるのがタグフィー ルドて、ある。 List 4 て、は valtype がタグフィ ールドて、あり , タグフィールド自身は整数 型 (integer) て、あるとしている。 valtype が 0 の場合には integer 型の n というメンバ (Pas cal 用語て、はフィールド ) が有効て、あり , va ltype が 1 の場合には array [ 0...9 ] of cha r, すなわち char の 10 要素の配列て、ある a と いうメンバが有効て、あるという定義て、ある。 念のため , Pascal は苦手という人のため に ,List 4 て、は同時に C 言語て、類似の型を宣 言するとどうなるかを示しておいた。 ところて、 , pascal て、はタグフィールドそ のものの型 ( タグ型 ) としては , Pascal て、いう 順序型 ( 大ざっぱにいえば c 言語の integral に 相当する概念て、ある ) て、あれば何て、も用いる ことはて、きる。ただし , JIS-PascaI て、は「選 択定数の値全体がタグ型の値の集合と等し くなければならない」という制限がある (Pa scal には JIS 規格が存在する。ただし実際上 は ISO 規格と同一てある ) 。このため , 厳密 には List 4 の pascal の例は JIS-Pascal< は こて、は説明を複雑にし 文法違反て、ある。 ないためと C 旨衄との対応がとりやすいの 「 4 ロロ Pascal, および C 言語でのサンプルプログラム List pasc でのタグフィールドと可変部を持つレコード型の型定義の例 type record case valtype : integer Of ( n : integer ) ; ( a : array [ 0..9 ] 0f char ) f00 end ; 類似の型を C で typedef 宣言の例 typedef struct ( int valtype; union { int n; char a [ 10 ] ; } f00 ; C , および Pasc 引でのコーティングの断片 List C でのコーティングの断片 typedef struct { int valtype; union { int n; char a [ 10 ] ; } f00 ; f00 S,• int m; void bar() if (). valtype ー m ニ S. u. n; pasc 引でのコーティングの断片 type f00 record case valtype : integer Of integer ) ; ( a : array [ 0..9 ] 0f char ) ; end ; var f00 ; S m : integer; procedu re bar ; begin if s. valtype = 0 then end; ANSI C ー more 117

9. 月刊 C MAGAZINE 1992年6月号

新 MS - DOS プロクラミンク入門 C プログラマのための Fig. 3 LSI C ー 86 ver 3.20 / 3.30 のスモールモテルの一般的なメモリ構造 低位アドレス C-PSP—]. W PSP 領域 コード領域 64K バイト以下 初期化されているテータ領域 初期化されていないデータ領域 スタック領域 nea 「ヒープ領域 fa 「ヒープ領域 CS —COPYRIGHT— SS, DS DGROUP 64K バイト 以下 —STACK SP —ENDSTACK 高位アドレス ・ FAR—DATA, FAR ー BSS はコード領域と DGROUP の間に割り付けられる ・右端の変数名はアセンプラレベルて記述している ・ C 言語からアクセスする場合は右端の一をひとっ取る ( ー STACK と一 ENDSTACK は C 言語からはアクセスできない ) Fig. 4 スタックオーノヾフローの対処法 変更されたスタックサイズ ← O 、ノ -4 ・つ 0 0 0 ) ワ 0 ^ 0 4- ワーっ 0 っ ^ 0 0 0 リ っ乙ワー戸 0 れ 0 -4- 0 一 -0 、 0 0V11 11 ^ 0 り 0 0 0 0 11 11 0 . 、ノ 414 ・ 0 0 叮ー 0 【 ^ 0 1 よ -4 ・ 0 0 ーりん 1 亠 っーっ】っ 8 っ 0 、 8 っー 4- つん育 4 + レ 0 ) ・ 1 11 1 よ ・ 1 1 ー亠 0 っ乙 ・ 1 cd 0 マー 一・し 8 0 0 + レ 8 0 0 0. ・ 1 0 , 0 8 0 つ O O よ 11 O cd 、 1 0 一 0 、 1 0 十レ・ 1 0 0 ・ 0 ・ 4- ・ 0 【 O ・ 1 ・ 1 CO 《し + し + レ 0 E 1 り 0 X ・ 1 V) ・ 1 O OQ 0 ・ 1 0 18 。 error 2000 : Stack overflow E:}>exehdr /stack: 0X2800 assign Microsoft R EXE File Header Utility Version 2.01 Copyright C Microsoft Corp 1985 ー 1990. AI 1 rights reserved. EXEHDR: error U1105 : minimum allocation less than stack; correcting minimum EXEHDR: error U1106 : minimum al location greater than maximum; correcting maXIIT1111Tl . EXE size (bytes) 6752 Magic number: 5a4d Bytes on last page: 0152 Pages in file: 0034 Relocations: 0009 Paragraphs in header: 0020 Extra paragraphs needed : 02fd Extra paragraphs wanted: 02fd 06d3 : 2800 ←変更されたスタックサイズ lnitial stack location: Word checks um : 5370 Entry i nt : 0000 : 2844 Relocation table address: 001e Memory needed : 38K . EXE size (bytes) Minimum load size (bytes) 0ver lay number lnitial CS:IP lnitial SS:SP Minimum allocation para) Maximum allocation para) Header size (para) Relocation table offset Relocation entries E:Y 〉 assign 新 MS-DOS プログラミング入門 75

10. 月刊 C MAGAZINE 1992年6月号

djgcci* 解講座・ llello 刪 key く要素のとき : 負の数 を返すような関数を指定します。 マッチする要素が見つかったときはそれ へのポインタ , 見つからなかったときは NU LL を返します。 diV. C div t div(int num, int denom) ・ num を denom て、割り , 商を構造体 div t の メンバ quot に , 剰余を rem に入れて返しま す。剰余の符号は num の符号と同じになり ます。 div t は stdlib. h て、定義されています。 exit. C void volatile exit(int code) ・ 終了コード code て、プログラムを終了しま す。 具体的には , ・ atexit ( ) で登録された関数 ( あとに登録 getenv. C をこの順て、実行します。 ・ exit (code) ・ cleanup( ) されたものから順に ) long の整数 n の絶対値を返します。 long labs(long n) ・ labs. c 見つからなければ NULL を返します。 内容を返します。 name という名前の環境変数を探し , その char * getenv (const char * name) 旧ⅳ . c きます。 vx2e を返します。 e には負の値も指定て、 double ldexp(double v, ldexp. c int e) ・ 型が int てなく long てあること以外 div( ) ldiv tldiv(long num, long denom) ・ と同じて、す。 malloc. c a, b を引数として呼ばれたときに , それら (*compar)( ) には , ふたつの配列要素 クイックソートによって整列します。 size バイトの要素 n 個からなる配列 array を int ( * compar) (void * , void * ) ) ; unsigned size, int n, VOid * array, void qsort( qsort. C 内部て、 setenv( ) を呼び出しています。 します。 成功したら 0 , 失敗したら 0 以外の値を返 て , 環境変数をセットします。 ゞ変数 = 内容クの形の文字列 str に従っ int putenv(const char * str) ・ putenv. c の命令を直接使っています。 インラインアセンプラを使って , 80387 します。 に分け , iptr[0], iptr [ 1 ] にそれぞれ格納 実数 value を整数部と小数点以下の部分 double *iptr) ・ double modf(double value, modf. c 実現しています。 けて持っことによって , 高速な割り当てを 空きメモリのリストをサイズによって分 せんが ) , NULL を返します。 っているのて、 , そんなことはまず起こりま ます。空きメモリがなければ ( 仮想記憶を使 nbytes バイトのメモリプロックを取得し void * malloc(unsigned nbytes) ・ を返すような関数を指定します。 a く b のとき : 負の数 a = b のとき : 0 a > b のとき : 正の数 を比較して , この関数て、は , 要素数が 4 未満なら挿入 ソートに切り換えることによって , 高速化 を実現しています。 rand. C int rand (void) ・ RAND MAX 未満の擬似乱数を返しま す。 VOid srand (int seed) ・ seed を rand( ) て、発生する乱数の種として 指定します。 setenv. C int setenv (char * name, char *value int rewrite) 環境変数 name の値として value をセット します。 name がすて、に定義されていて , な おかっ rewrite が 0 なら , 何もしません。成功 したら 0 , 失敗したら一 1 を返します。 strtod. c double strtOd (const char * s, char * * sret , s が指す文字列に含まれている小数を浮動 小数点数に変換します。先頭の空白文字は 読み飛ばされます。 * sret には , 小数を表す 文字列の末尾の次の位置が格納されます。 小数が見つからなければ , *sret に s を格納 して , 返り値として 0 を返します。 strtol.c long strtol(const char * s, char * * sret, int base) ・ s が指す文字列に含まれている base 進数の 整数を int に変換し , その値を返します。 base が 0 の場合 , s が指す文字列は C 言語の ソース中の整定数と同じように解釈され , 先頭に 0 がつけば 8 進数 , 0x がつけば 16 進 数 , となります。先頭の空白文字は読み飛 ばされます。 * sret には , 整数を表す文字列の末尾の次 djgcc 詳解講座・ Hello GCC World 69