textfiles/computers/ASTRESEARCH/0349.tb

157 lines
3.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 <stdio.h>
#include <dos.h>
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.