💾 Archived View for spam.works › mirrors › textfiles › computers › ASTRESEARCH › 0349.tb captured on 2023-06-16 at 21:39:23.

View Raw

More Information

-=-=-=-=-=-=-




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.