X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f From: Rugxulo Newsgroups: comp.os.msdos.djgpp Subject: query con codepage Date: Tue, 5 May 2009 10:31:33 -0700 (PDT) Organization: http://groups.google.com Lines: 93 Message-ID: NNTP-Posting-Host: 65.13.115.246 Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1241544693 23646 127.0.0.1 (5 May 2009 17:31:33 GMT) X-Complaints-To: groups-abuse AT google DOT com NNTP-Posting-Date: Tue, 5 May 2009 17:31:33 +0000 (UTC) Complaints-To: groups-abuse AT google DOT com Injection-Info: o20g2000vbh.googlegroups.com; posting-host=65.13.115.246; posting-account=p5rsXQoAAAB8KPnVlgg9E_vlm2dvVhfO User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729),gzip(gfe),gzip(gfe) To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Just in case anyone finds this useful, I'm posting it here. It basically tells you what codepage is currently prepared / selected / displayed for the CON device. #include #include #include // ---------------------------------------------------------------------- // Tuesday, May 5, 2009 12:25pm // rugxulo _AT_ gmail _DOT_ com // // This file is (obviously?) not copyrighted, "nenies propra=83o" !! // // Tested successfully on DR-DOS 7.03, FreeDOS 1.0++, and MS-DOS 6.22. // (Doesn't work on XP or Vista, though.) // ---------------------------------------------------------------------- // // short query_con_codepage(); // // gets currently selected display CON codepage // // int 21h, 6601h ("chcp") needs NLSFUNC.EXE + COUNTRY.SYS, but many // obscure codepages (e.g. FD's cp853 from EGA.CPX (CPIX.ZIP) or // Kosta Kostis' cp913 from ISOLATIN.CPI (ISOCP101.ZIP) have no // relevant data inside COUNTRY.SYS. // // int 21h, 440Ch 6Ah only works in MS-DOS and DR-DOS (not FreeDOS) because // FreeDOS DISPLAY is an .EXE TSR, not a device driver, and hence doesn't // fully support IOCTL, so they use the undocumented int 2Fh, 0AD02h // (which doesn't work in DR-DOS!). But DR-DOS' DISPLAY doesn't respond // to the typical install check i.d. anyways. FreeDOS currently only // supports COUNTRY.SYS in their "unstable" kernel 2037, but at least // their KEYB, "=A2oje", supports cp853 too (thanks, Henrique!). // // P.S. For MS or DR: ren ega.cpx *.com ; upx -d ega.com ; ren ega.com *.cpi // ---------------------------------------------------------------------- short query_con_codepage() { __dpmi_regs regs; short param_block[2] =3D { 0, 437 }; regs.d.eax =3D 0x440C; // GENERIC IO FOR HANDLES regs.d.ebx =3D 1; // STDOUT regs.d.ecx =3D 0x036A; // 3 =3D CON, 0x6A =3D QUERY SELECTED CP regs.x.ds =3D __tb >> 4; // using transfer buffer for low mem. regs.x.dx =3D __tb & 0x0F; // (suggested by DJGPP FAQ, hi Eli!) regs.x.flags |=3D 1; // preset carry for potential failure __dpmi_int (0x21, ®s); if (!(regs.x.flags & 1)) // if succeed (carry flag set) ... dosmemget( __tb, 4, param_block); else { // (undocumented method) regs.x.ax =3D 0xAD02; // 440C -> MS-DOS or DR-DOS only regs.x.bx =3D 0xFFFE; // AD02 -> MS-DOS or FreeDOS only regs.x.flags |=3D 1; __dpmi_int(0x2F, ®s); if ((!(regs.x.flags & 1)) && (regs.x.bx < 0xFFFE)) param_block[1] =3D regs.x.bx; } return param_block[1]; } #ifdef TEST int main() { printf("\nCP%u\n",query_con_codepage() ); // same as "mode con cp / sta" return 0; } #endif // EOF