| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- /*
- ** Command & Conquer Red Alert(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /* $Header: g:/library/source/rcs/./dipthong.c 1.15 1994/05/20 15:35:17 joe_bostic Exp $ */
- /***************************************************************************
- ** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
- ***************************************************************************
- * *
- * Project Name : Westwood Library *
- * *
- * File Name : DIPTHONG.C *
- * *
- * Programmer : Joe L. Bostic *
- * *
- * Start Date : February 23, 1992 *
- * *
- * Last Update : February 13, 1995 [BWG] *
- * *
- * DIGRAM or DIATOMIC encoding is the correct term for this method. *
- * This is a fixed dictionary digram encoding optimized for English text. *
- * *
- *-------------------------------------------------------------------------*
- * Functions: *
- * Extract_String -- Extracts a string pointer from a string data block. *
- * UnDip_Text -- Undipthongs a text string into specified buffer. *
- * Dip_Text -- Compresses text by using dipthonging. *
- * Fixup_Text -- Converts dipthonged foreign text into normal text. *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- //#include "function.h"
- //#include "ems.h"
- #include <keyboard.h>
- #include "dipthong.h"
- /***************************************************************************
- * Fixup_Text -- Converts dipthonged foreign text into normal text. *
- * *
- * Takes text that has been processed (or undipped) to hold foriegn *
- * language character pairs (needed for Window_Print) and converts it *
- * so that Text_Print will print it properly. Typically this would be *
- * used after text has been undipped but before it will be Text_Printed.*
- * Text that is to be Window_Printed doesn't and mustn't have its text *
- * processed by this routine. *
- * *
- * INPUT: source -- Pointer to the source string to process. *
- * *
- * dest -- Destination buffer to hold the processed string. *
- * *
- * OUTPUT: none *
- * *
- * WARNINGS: This routine will only reduce the size of the string if it *
- * modifies it at all. Because of this it is quite legal to *
- * pass the same pointers to this routine so that it will *
- * modify the string "in place". *
- * *
- * HISTORY: *
- * 08/13/1993 JLB : Created. *
- * 10/06/1994 JLB : Handles source string in EMS. *
- *=========================================================================*/
- void Fixup_Text(char const *source, char *dest)
- {
- if (source && dest) {
- char const *src;
- char temp;
- src = source;
- while (*src) {
- if (*src == KA_EXTEND) {
- src++;
- temp = *src++;
- temp += 127;
- *dest++ = temp;
- } else {
- *dest++ = *src++;
- }
- }
- *dest = '\0';
- }
- }
- /***************************************************************************
- * Dip_Text -- Compresses text by using dipthonging. *
- * *
- * This routine is used to compress text by using dipthonging. Text *
- * that is compressed in this fashion usually is reduced in size by *
- * approximately 40%. *
- * *
- * INPUT: source -- Pointer to the source string to compress. *
- * *
- * dest -- Pointer to the buffer that will hold the dipthong *
- * text output. *
- * *
- * OUTPUT: Returns the number of bytes output into the output buffer. *
- * *
- * WARNINGS: none *
- * *
- * HISTORY: *
- * 08/13/1993 JLB : Created. *
- *=========================================================================*/
- int Dip_Text(char const *source, char *dest)
- {
- unsigned char first, // First character in pair.
- next; // Second character in pair.
- int common, // Common character index.
- dipthong; // Dipthong character index.
- unsigned long length=0; // Length of output string
- first = *source++;
- next = *source;
- while (first) {
- if (first > 127) {
- /*
- ** Characters greater than 127 cannot be dipthonged. They must
- ** be preceeded with an extended character code.
- */
- *dest++ = (char)KA_EXTEND;
- first -= 127;
- length++;
- } else {
- /*
- ** Normal characters can be dipthonged. First see if there is a
- ** match in the Common table.
- */
- for (common = 0; common < 16; common++) {
- if (Common[common] == first) {
- /*
- ** Common character found. See if there is a matching
- ** Dipthong character.
- */
- for (dipthong = 0; dipthong < 8; dipthong++) {
- if (Dipthong[common][dipthong] == next) {
- first = (unsigned char) (common << 3);
- first |= (unsigned char)dipthong;
- first |= (unsigned char)0x80;
- source++;
- }
- }
- }
- }
- }
- /*
- ** Output the translated character to the destination buffer.
- */
- *dest++ = first;
- length++;
- first = *source++;
- next = *source;
- }
- *dest = '\0';
- return(length);
- }
- /***************************************************************************
- * UnDip_Text -- Undipthongs a text string into specified buffer. *
- * *
- * This routine is used to undipthong a text string and place the *
- * undipped text into the buffer specified. Since dipthonged text is *
- * compressed, in order for the text to be used it must be undipped *
- * first. *
- * *
- * INPUT: source -- Pointer to the dipped string. *
- * *
- * dest -- Pointer to the destination buffer. *
- * *
- * OUTPUT: Returns the number of bytes placed into the destination *
- * buffer. *
- * *
- * WARNINGS: Be sure the destination buffer is big enough to hold the *
- * undipped text. *
- * *
- * HISTORY: *
- * 08/13/1993 JLB : Created. *
- * 10/06/1994 JLB : Handles source string in EMS. *
- *=========================================================================*/
- int UnDip_Text(char const *source, char *dest)
- {
- int c; // Source input character.
- int common; // Common character index.
- int len; // Length of output string.
- char const *src;
- len = 0; // Presume no translation.
- /*
- ** Sweep through the source text and dipthong it.
- */
- src = source;
- c = *src++;
- while (c) {
- /*
- ** Convert a dipthong character into it's component
- ** ASCII characters.
- */
- if (c & 0x80) {
- c &= 0x7F;
- common = (c & 0x78) >> 3;
- *dest++ = Common[common];
- len++;
- c = Dipthong[common][c & 0x07];
- }
- *dest++ = (unsigned char)c;
- len++;
- c = *src++;
- }
- /*
- ** End the output text with a '\0'.
- */
- *dest++ = '\0';
- return(len);
- }
- /***************************************************************************
- * Extract_String -- Extracts a string pointer from a string data block. *
- * *
- * This routine is used to find a pointer to the specified string *
- * inside a string block. String data blocks are created with the *
- * TEXTMAKE utility. The data block my reside in XMS or EMS memory, *
- * but of course the returned string pointer will also point to *
- * such memory. In this case, the string must be placed in real *
- * memory before it can be used. *
- * *
- * INPUT: data -- Pointer to the string data block. *
- * *
- * string -- The string number to extract (if < 0 then NULL *
- * is returned). *
- * *
- * OUTPUT: Returns with pointer to the string number specified. *
- * *
- * WARNINGS: none *
- * *
- * HISTORY: *
- * 08/13/1993 JLB : Created. *
- * 08/13/1993 JLB : Handles EMS or XMS data pointer. *
- *=========================================================================*/
- #define TXT_GUEST 4567+3
- #define TXT_LOGIN 4567+4
- #define TXT_LOGIN_TO_INTERNET 4567+5
- #define TXT_YOUR_HANDLE 4567+6
- #define TXT_YOUR_PASSWORD 4567+7
- #define TXT_INTERNET_HOST 4567+8
- #define TXT_INTERNET_JOIN 4567+9
- #define TXT_INTERNET_GAME_TYPE 4567+10
- #define TXT_JOIN_INTERNET_GAME 4567+11
- #define TXT_ENTER_IP_ADDRESS 4567+12
- #define TXT_WINSOCK_CONNECTING 4567+13
- #define TXT_WINSOCK_NOT_CONNECTING 4567+14
- #define TXT_WINSOCK_UNABLE_TO_CONNECT_TO_SERVER 4567+15
- #define TXT_WINSOCK_CONTACTING_SERVER 4567+16
- #define TXT_WINSOCK_SERVER_ADDRESS_LOOKUP_FAILED 4567+17
- #define TXT_WINSOCK_UNABLE_TO_ACCEPT_CLIENT 4567+18
- #define TXT_WINSOCK_UNABLE_TO_CONNECT 4567+19
- #define TXT_WINSOCK_CONNECTION_LOST 4567+20
- #define TXT_WINSOCK_RESOLVING_HOST_ADDRESS 4567+21
- static char InternetTxt[22][40]={
- "Internet H2H",
- "Host Internet Game",
- "Join Internet Game",
- "Guest",
- "Login",
- "Login to Planet Westwood",
- "Planet Westwood Handle",
- "Planet Westwood Password",
- "Host Game",
- "Join Game",
- "Choose Type of Internet Game",
- "Join Internet Game",
- "Address of Host",
- "Connecting...",
- "Connection Error!",
- "Unable to connect to host!",
- "Connecting to host...",
- "Unable to resolve host address!",
- "Unable to accept client connection",
- "Unable to connect!",
- "Connection lost!",
- "Resolving address of host..."
- };
- char *Extract_String(void const *data, int string)
- {
- unsigned short int const *ptr;
- if (!data || string < 0) return(NULL);
- if (string >= 4567) return (InternetTxt[string-4567]);
- ptr = (unsigned short int const *)data;
- return (((char*)data) + ptr[string]);
- }
|