AST RESEARCH, INC. TECHNICAL BULLETIN #TB-0349 12/28/87 AST 5250 TRANSLATION TABLES An alternate method of finding the translation tables for AST's 5250 family of products is available through the use of the Application Program Interface (API). This method does not use the method mentioned in the AST-5250 Emulation Program base manual, which uses the Device Control Block (DCB). Instead, this method uses function 0Fh of the API. -NOTE: Programmers wishing to use the AST-API should refer to publication 000357-001B "AST-API supplement to the AST-5251/11 user's manual" or the IBM-API documentation. Here is a sample program written for Borland's TURBO C compiler that uses API function 0Fh to find the translation tables. /* ------------------------------------------------------ */ /* TABLES.C - programmer: Paul McGinnis - DataComm */ /* Support Dec. 1987 Uses AST-5250 implementation of API */ /* (Applications Program Interface) Program compiled and */ /* tested with Borland's TURBO C v1.0 */ #include #include main() { unsigned char c; unsigned int offset, off2, xu, xl, i, j, k; int seg; puts(""); puts("AST-5250 products - API conversion tables"); puts(""); puts("Choices available are:"); puts(""); puts("--> 1 <-- EBCDIC-to-ASCII table"); puts(""); puts("--> 2 <-- Scan code table"); puts(""); puts("--> 3 <-- ASCII-to-EBCDIC table"); puts(""); puts("--> 4 <-- ASCII-to-5250 scan code table"); puts(""); puts("--> 5 <-- PC-to-5250 uppercase scan code table"); puts(""); puts("--> X <-- Abort program and exit to DOS"); printf("\n\nEnter choice: "); c = getchar(); if ((c > 0x35) || (c < 0x31)) return; puts(""); /* This section calculates the necessary offsets for the pointer table */ if (c == 0x31) { puts("EBCDIC-to-ASCII table"); off2 = 0; } else if (c == 0x32) { puts("Scan code table"); off2 = 4; } else if (c == 0x33) { puts("ASCII-to-EBCDIC table"); off2 = 8; } else if (c == 0x34) { puts("ASCII-to-5250 scan code table"); off2 = 0x0c; } else { puts("PC-to-5250 uppercase scan code table"); off2 = 0x10; } /* This section loads the AL register with the function number (0Fh), generates DOS interrupt 59h used by AST-5250 API, and retrieves the segment and offset of the pointer table */ _AL = 0x0f; geninterrupt(0x59); c = _AL; offset = _SI; seg = _ES; if (c != 0) { puts("***FATAL ERROR*** generating DOS interrupt 59h used by API."); puts(""); return; } /* This section finds and displays the actual table in memory */ i = offset + off2; xl = peek(seg, i); j = i + 2; xu = peek(seg, j); printf ("Pointer location = %04X:%04X table location = %04X:%04X\n\n", seg, i, xu, xl); puts (" 0# 1# 2# 3# 4# 5# 6# 7# 8# 9# A# B# C# D# E# F#"); printf (" -- -- -- -- -- -- -- -- -- -- -- -- - - -- -- --"); for (i = 0; i < 0x10; ++i) { printf("\n#%01X: ", i); for (j = 0; j < 0x10; ++j) { k = xl + (j << 4) + i; c = (unsigned char) peek(xu, k); printf("%02X ", c); } } puts(""); puts(""); } /* ------------------------------------------------------ */ References: - AST-API Supplement to the AST-5251/11 user's manual 000357-001B February 1987. - AST-5250 Emulation Program base manual 000425-001A January 1987. - IBM 5250 API programmer's manual. - Turbo C user's guide & reference guide TURBO C is a registered trademark of Borland International IBM is a registered trademark of International Business Machines Corp.