221 lines
7.3 KiB
C
221 lines
7.3 KiB
C
|
|
/*************************************************
|
|
* chajei.c *
|
|
* *
|
|
* Copyright (C) 1995-1999 Microsoft Inc. *
|
|
* *
|
|
*************************************************/
|
|
|
|
// ---------------------------------------------------------------------------
|
|
//
|
|
// This program generateis Chajei Source Unicode file from its table files
|
|
//
|
|
// History: 03-24-1998, Weibz, Created
|
|
//
|
|
// Usage: chajeisrc <A15.tbl> <A234.tbl> <Acode.tbl> <Unicode Text File>
|
|
//
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
|
|
#include <stdio.h>
|
|
#include <windows.h>
|
|
|
|
|
|
void _cdecl main( int argc, TCHAR **argv) {
|
|
|
|
HANDLE hA15, hA234, hAcode, hOutFile;
|
|
HANDLE hA15Map, hA234Map, hAcodeMap;
|
|
LPWORD lpA15, lpAcode, lpA234;
|
|
DWORD BytesWritten;
|
|
WORD iA15Pattern;
|
|
int i;
|
|
WORD wOutData, wA1, wA5;
|
|
WORD wPattern234, uCode;
|
|
WORD OutLine[9];
|
|
|
|
|
|
|
|
if ( argc != 5 ) {
|
|
printf("usage: chajeisrc <A15.tbl> <A234.tbl> <Acode.tbl> <U Text File>\n");
|
|
return;
|
|
}
|
|
|
|
|
|
hA15 = CreateFile( argv[1], // pointer to name of the file
|
|
GENERIC_READ, // access (read-write) mode
|
|
FILE_SHARE_READ, // share mode
|
|
NULL, // pointer to security attributes
|
|
OPEN_EXISTING, // how to create
|
|
FILE_ATTRIBUTE_NORMAL, // file attributes
|
|
NULL);
|
|
|
|
if ( hA15 == INVALID_HANDLE_VALUE ) {
|
|
printf("hA15 is INVALID_HANDLE_VALUE\n");
|
|
return;
|
|
}
|
|
|
|
|
|
hA234 = CreateFile(argv[2], // pointer to name of the file
|
|
GENERIC_READ, // access (read-write) mode
|
|
FILE_SHARE_READ, // share mode
|
|
NULL, // pointer to security attributes
|
|
OPEN_EXISTING, // how to create
|
|
FILE_ATTRIBUTE_NORMAL, // file attributes
|
|
NULL);
|
|
|
|
if ( hA234 == INVALID_HANDLE_VALUE ) {
|
|
printf("hA234 is INVALID_HANDLE_VALUE\n");
|
|
return;
|
|
}
|
|
|
|
|
|
hAcode = CreateFile(argv[3], // pointer to name of the file
|
|
GENERIC_READ, // access (read-write) mode
|
|
FILE_SHARE_READ, // share mode
|
|
NULL, // pointer to security attributes
|
|
OPEN_EXISTING, // how to create
|
|
FILE_ATTRIBUTE_NORMAL, // file attributes
|
|
NULL);
|
|
|
|
if ( hAcode == INVALID_HANDLE_VALUE ) {
|
|
printf("hAcode is INVALID_HANDLE_VALUE\n");
|
|
return;
|
|
}
|
|
|
|
hOutFile = CreateFile( argv[4], // pointer to name of the file
|
|
GENERIC_WRITE, // access (read-write) mode
|
|
FILE_SHARE_WRITE, // share mode
|
|
NULL, // pointer to security attributes
|
|
CREATE_ALWAYS , // how to create
|
|
FILE_ATTRIBUTE_NORMAL, // file attributes
|
|
NULL);
|
|
|
|
if ( hOutFile == INVALID_HANDLE_VALUE ) return;
|
|
|
|
hA15Map = CreateFileMapping(hA15, // handle to file to map
|
|
NULL, // optional security attributes
|
|
PAGE_READONLY, // protection for mapping object
|
|
0, // high-order 32 bits of object size
|
|
0, // low-order 32 bits of object size
|
|
NULL); // name of file-mapping object);
|
|
if ( !hA15Map ) {
|
|
printf("hA15Map is NULL\n");
|
|
return;
|
|
}
|
|
|
|
hA234Map = CreateFileMapping(hA234, // handle to file to map
|
|
NULL, // optional security attributes
|
|
PAGE_READONLY, // protection for mapping object
|
|
0, // high-order 32 bits of object size
|
|
0, // low-order 32 bits of object size
|
|
NULL); // name of file-mapping object);
|
|
if ( !hA234Map ) {
|
|
printf("hA234Map is NULL\n");
|
|
return;
|
|
}
|
|
|
|
hAcodeMap = CreateFileMapping(hAcode, // handle to file to map
|
|
NULL, // optional security attributes
|
|
PAGE_READONLY, // protection for mapping object
|
|
0, // high-order 32 bits of object size
|
|
0, // low-order 32 bits of object size
|
|
NULL); // name of file-mapping object);
|
|
if ( !hAcodeMap ) {
|
|
printf("hAcodeMap is NULL\n");
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
lpA15 = (LPWORD)MapViewOfFile(hA15Map, FILE_MAP_READ, 0, 0, 0);
|
|
lpA234 = (LPWORD)MapViewOfFile(hA234Map, FILE_MAP_READ, 0, 0, 0);
|
|
lpAcode = (LPWORD)MapViewOfFile(hAcodeMap, FILE_MAP_READ, 0, 0, 0);
|
|
|
|
// ------------------------------
|
|
|
|
|
|
wOutData = 0xFEFF;
|
|
|
|
WriteFile(hOutFile, // handle to file to write to
|
|
&wOutData, // pointer to data to write to file
|
|
2, // number of bytes to write
|
|
&BytesWritten, // pointer to number of bytes written
|
|
NULL); // pointer to structure needed for
|
|
// overlapped I/O
|
|
|
|
|
|
for (i=0; i<5; i++)
|
|
OutLine[i] = 0x0020;
|
|
OutLine[5] = 0x0009;
|
|
OutLine[7] = 0x000D;
|
|
OutLine[8] = 0x000A;
|
|
|
|
for (iA15Pattern=0; iA15Pattern < 27 * 27 - 1; iA15Pattern++) {
|
|
WORD A234Start, A234End, Offset;
|
|
WORD wSeq;
|
|
|
|
A234Start = lpA15[iA15Pattern];
|
|
A234End = lpA15[iA15Pattern+1];
|
|
|
|
if ( A234End > A234Start ) {
|
|
|
|
wA1 = iA15Pattern / 27;
|
|
wA5 = iA15Pattern % 27;
|
|
if ( wA1 == 0 )
|
|
wA1 = 0x0020;
|
|
else
|
|
wA1 = wA1 + L'A' - 1;
|
|
|
|
if ( wA5 == 0 )
|
|
wA5 = 0x0020;
|
|
else
|
|
wA5 = wA5 + L'A' - 1;
|
|
|
|
OutLine[0] = wA1;
|
|
OutLine[4] = wA5;
|
|
|
|
for (Offset=A234Start; Offset<A234End; Offset++) {
|
|
wPattern234 = lpA234[Offset];
|
|
uCode = lpAcode[Offset];
|
|
|
|
for (i=3; i>0; i--) {
|
|
wSeq = wPattern234 & 0x1f;
|
|
if ( wSeq == 0 )
|
|
OutLine[i] = 0x0020;
|
|
else
|
|
OutLine[i] = wSeq + L'A' - 1;
|
|
wPattern234 = wPattern234 >> 5;
|
|
}
|
|
OutLine[6] = uCode;
|
|
WriteFile(hOutFile, // handle to file to write to
|
|
OutLine, // pointer to data to write to file
|
|
18, // number of bytes to write
|
|
&BytesWritten, // pointer to number of bytes written
|
|
NULL); // pointer to structure needed for
|
|
// overlapped I/O
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// ------------------------------------------------------------
|
|
|
|
|
|
UnmapViewOfFile(lpA15);
|
|
UnmapViewOfFile(lpA234);
|
|
UnmapViewOfFile(lpAcode);
|
|
|
|
CloseHandle(hA15Map);
|
|
CloseHandle(hA234Map);
|
|
CloseHandle(hAcodeMap);
|
|
|
|
CloseHandle(hOutFile);
|
|
CloseHandle(hA15);
|
|
CloseHandle(hA234);
|
|
CloseHandle(hAcode);
|
|
|
|
return;
|
|
|
|
}
|
|
|