├── debug.c ├── debug.h ├── dosdefs.h ├── endtext.c ├── endtext.h ├── globals.h ├── history.txt ├── kitten.c ├── kitten.h ├── lfn.c ├── lfn.h ├── license.txt ├── main.c ├── makefile ├── messages.h ├── miniclib.c ├── miniclib.h ├── nls ├── vmsmount.en ├── vmsmount.es └── vmsmount.nl ├── printf.c ├── printf.h ├── readme.txt ├── redir.c ├── redir.h ├── toolsd.c ├── toolsd.h ├── unicode.c ├── unicode.h ├── unitbls ├── cp1258.txt ├── cp1258.txt.patch ├── cp437.txt ├── cp720.txt ├── cp737.txt ├── cp775.txt ├── cp850.txt ├── cp852.txt ├── cp855.txt ├── cp857.txt ├── cp858.txt ├── cp860.txt ├── cp861.txt ├── cp862.txt ├── cp863.txt ├── cp864.txt ├── cp864.txt.patch ├── cp865.txt ├── cp866.txt ├── cp869.txt ├── cp874.txt ├── cp874.txt.patch ├── license.txt ├── makefile ├── readme.txt └── tools │ ├── makefile │ └── mk_table.c.patch ├── vmaux.c ├── vmaux.h ├── vmcall.h ├── vmchcpd ├── LICENSE.txt ├── cstrtsys.asm ├── device.h ├── devinit.c ├── devinit.h ├── makefile ├── nlscmds.h ├── vmchcpd.c ├── vmchcpd.h ├── vmfunc.c └── vmfunc.h ├── vmdos.c ├── vmdos.h ├── vmint.h ├── vmshf.c ├── vmshf.h ├── vmtool.c └── vmtool.h /debug.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * Copyright (C) 2011-2022 Eduardo Casino 5 | * 6 | * debug.c: Enable debug to VMware logs 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include 25 | #include 26 | #include 27 | 28 | #include "printf.h" 29 | #include "vmtool.h" 30 | 31 | rpc_t rpcd = { 32 | 0, // channel 33 | 0, // cookie1 34 | 0 // cookie2 35 | }; 36 | 37 | #define MSG_LEN 160 38 | 39 | static char msg_buf[MSG_LEN + 5] = "log "; 40 | static char *msg = &msg_buf[4]; 41 | 42 | static inline size_t strnlen_local(const char *s, size_t maxlen) 43 | { 44 | size_t len; 45 | for (len = 0; s[len] && len < maxlen; ++len) 46 | ; 47 | return len; 48 | } 49 | 50 | static inline int isprint_local(int c) 51 | { 52 | return (unsigned)c - 0x20 < 0x5f; 53 | } 54 | 55 | static void dlog(void) 56 | { 57 | uint32_t len; 58 | int ret; 59 | uint16_t id; 60 | 61 | if (rpcd.channel == VMRPC_INVALID_CHANNEL) 62 | { 63 | return; 64 | } 65 | len = strnlen_local(msg_buf, sizeof(msg_buf)); 66 | ret = VMRpcSend(&rpcd, msg_buf, len); 67 | 68 | if (ret != VMTOOL_SUCCESS) 69 | { 70 | return; 71 | } 72 | 73 | ret = VMRpcRecvLen(&rpcd, &len, &id); 74 | 75 | if (ret != VMTOOL_SUCCESS || len == 0) 76 | { 77 | return; 78 | } 79 | 80 | if (len > MSG_LEN) 81 | len = MSG_LEN; 82 | 83 | ret = VMRpcRecvDat(&rpcd, msg, len, id); 84 | 85 | return; 86 | } 87 | 88 | void dprintf(const char *name, const char *file, int line, const char *format, ...) 89 | { 90 | va_list va; 91 | int len; 92 | 93 | snprintf(msg, MSG_LEN, "%s: [%s:%d]: ", name, file, line); 94 | len = strnlen_local(msg, MSG_LEN); 95 | 96 | va_start(va, format); 97 | vsnprintf(msg + len, MSG_LEN - len, format, va); 98 | va_end(va); 99 | dlog(); 100 | 101 | return; 102 | } 103 | 104 | void ddump(const char *name, const char *file, int line, const char *prfx, void __far *addr, uint16_t size) 105 | { 106 | char __far *c = (char __far *)addr; 107 | while (size) 108 | { 109 | int len, i; 110 | uint16_t s; 111 | 112 | snprintf(msg, MSG_LEN, "%s: [%s:%d]: %s: %4.4X:%4.4X >", name, file, line, prfx, FP_SEG(c), FP_OFF(c)); 113 | len = strnlen_local(msg, MSG_LEN); 114 | 115 | s = size; 116 | for (i = 0; i < 16 && s > 0; ++i, --s, len += 3) 117 | { 118 | if (i == 8) 119 | { 120 | msg[len++] = ' '; 121 | } 122 | snprintf(msg + len, MSG_LEN - len, " %2.2x", c[i]); 123 | } 124 | while (i++ < 16) 125 | { 126 | msg[len++] = ' '; 127 | msg[len++] = ' '; 128 | msg[len++] = ' '; 129 | } 130 | msg[len++] = ' '; 131 | msg[len++] = '|'; 132 | msg[len++] = ' '; 133 | for (i = 0; i < 16 && size > 0; ++i, ++c, --size, ++len) 134 | { 135 | snprintf(msg + len, MSG_LEN - len, "%c", isprint_local(*c) ? *c : '.'); 136 | } 137 | while (i++ < 16) 138 | { 139 | msg[len++] = ' '; 140 | } 141 | msg[len++] = ' '; 142 | msg[len++] = '|'; 143 | 144 | dlog(); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /debug.h: -------------------------------------------------------------------------------- 1 | #ifndef _DEBUG_H_ 2 | #define _DEBUG_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * debug.h: Enable debug to VMware logs 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #ifdef DEBUG 28 | #include 29 | #include 30 | 31 | #include "vmtool.h" 32 | 33 | extern rpc_t rpcd; 34 | 35 | #define ASSERT(EXPRESSION) assert(EXPRESSION) 36 | #define DPRINTF(FORMAT, ...) dprintf(MY_NAME, __FILE__, __LINE__, FORMAT, __VA_ARGS__) 37 | #define DPUTS(STRING) dprintf(MY_NAME, __FILE__, __LINE__, STRING) 38 | #define DDUMP(PRFX, ADDR, SIZE) ddump(MY_NAME, __FILE__, __LINE__, PRFX, ADDR, SIZE) 39 | extern void dprintf(const char *name, const char *file, int line, const char *format, ...); 40 | extern void ddump(const char *name, const char *file, int line, const char *prfx, void __far *addr, uint16_t size); 41 | 42 | #else 43 | 44 | #define ASSERT(EXPRESSION) {} 45 | #define DPRINTF(FORMAT, ...) {} 46 | #define DPUTS(STRING) {} 47 | #define DDUMP(PRFX, ADDR, SIZE) {} 48 | 49 | #endif /* DEBUG */ 50 | 51 | #endif /* _DEBUG_H_ */ 52 | -------------------------------------------------------------------------------- /endtext.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * Copyright (C) 2011-2022 Eduardo Casino 5 | * 6 | * endtext.c: Marks end of the transient code 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include "globals.h" 25 | 26 | __segment __far get_endtext_cs(void) 27 | { 28 | return get_cs(); 29 | } 30 | 31 | void EndOfTransientBlock(void) 32 | { 33 | return; 34 | } 35 | -------------------------------------------------------------------------------- /endtext.h: -------------------------------------------------------------------------------- 1 | #ifndef _ENDTEXT_H_ 2 | #define _ENDTEXT_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * endtext.h: Marks end of transient code 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | extern __segment __far get_endtext_cs(void); 28 | 29 | // Marks end of transient block 30 | // 31 | extern void EndOfTransientBlock(void); 32 | 33 | #endif /* _ENDTEXT_H_ */ 34 | -------------------------------------------------------------------------------- /globals.h: -------------------------------------------------------------------------------- 1 | #ifndef _GLOBALS_H_ 2 | #define _GLOBALS_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * globals.h: Some global definitions used in various modules 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include "kitten.h" 28 | 29 | #define VERSION_MAJOR 0 30 | #define VERSION_MINOR 6 31 | 32 | #define ERR_SUCCESS 0 33 | #define ERR_UNINST 245 34 | #define ERR_NOTINST 246 35 | #define ERR_BUFFER 247 36 | #define ERR_BADOPTS 248 37 | #define ERR_WRONGOS 249 38 | #define ERR_NOVIRT 250 39 | #define ERR_NOSHF 251 40 | #define ERR_NOALLWD 252 41 | #define ERR_INSTLLD 253 42 | #define ERR_BADDRV 254 43 | #define ERR_SYSTEM 255 44 | 45 | #define MY_NAME "VMSMOUNT" 46 | 47 | #define VERB_FPRINTF(L, F, ...) \ 48 | if (verbosity >= L) \ 49 | fprintf(F, __VA_ARGS__) 50 | #define VERB_FPUTS(L, S, F) \ 51 | if (verbosity >= L) \ 52 | fputs(S, F) 53 | 54 | typedef enum 55 | { 56 | SILENT, 57 | QUIET, 58 | NORMAL, 59 | VERBOSE 60 | } Verbosity; 61 | 62 | extern inline __segment get_cs(void); 63 | #pragma aux get_cs = \ 64 | "mov ax, cs" \ 65 | __modify \ 66 | __exact []; 67 | 68 | extern nl_catd cat; 69 | extern Verbosity verbosity; 70 | 71 | #endif /* _GLOBALS_H_ */ 72 | -------------------------------------------------------------------------------- /history.txt: -------------------------------------------------------------------------------- 1 | Version 0.6 (2022-09-04) 2 | * Fix: Set correct file size in WriteFile() 3 | * Implement CloseAll() 4 | * Port to Open Watcom v2. Remove dependencies with GNU make and nasm 5 | * Add debugging support 6 | * Shared folders can now be configured while the VM is running 7 | * Code Page change with CHCP with the new, optional VMCHCPD.SYS driver 8 | * Build unicode transcode tables from source 9 | * Various code cleanups 10 | 11 | Version 0.5c (2020-08-20) 12 | 13 | * Update file modification time in CloseFile() (Many thanks to 14 | Alan Kamrowski II for the extensive bug report, testing and 15 | code review) 16 | 17 | Version 0.5b (2011-11-06) 18 | 19 | * Add support for lower case shares when /LFN is set 20 | 21 | Version 0.5 (2011-11-06) 22 | 23 | * Partial LFN support: mangles long file names to valid DOS 8.3 names 24 | (New options /LFN, /M: and /CI or /CS) 25 | * New /QQ (silent) option 26 | 27 | Version 0.4 (2011-10-17) 28 | 29 | * BUGFIX: writing 0 bytes to a file MUST truncate it 30 | * Uninstallation (new /U option) 31 | * Add CPU test 32 | * Optimizations and cleanup for smaller, more efficient code (Tom, me) 33 | * Configurable read/write buffer size (new /B option) 34 | * New /Q (quiet) option 35 | 36 | Version 0.3 (2011-10-07) 37 | 38 | * BUGFIX: stack too small (Tom Ehlert) 39 | * Improved performance: fast _fmemcpy() implementation 40 | by Tom Ehlert 41 | * Various enhancements for size reduction (Tom Ehlert) 42 | 43 | Version 0.2 (2011-10-01) 44 | 45 | * Fixed a bug when printing the default messages in English 46 | * New errorlevels (now exits with the asigned drive number) 47 | * Dutch translation 48 | 49 | Version 0.1 (2011-09-30) 50 | 51 | Initial version 52 | -------------------------------------------------------------------------------- /kitten.h: -------------------------------------------------------------------------------- 1 | /* Functions that emulate UNIX catgets, some small DOS file functions */ 2 | 3 | /* Copyright (C) 1999,2000 Jim Hall */ 4 | /* Kitten version by Tom Ehlert, heavily modified by Eric Auer 2003 */ 5 | 6 | /* 7 | This library is free software; you can redistribute it and/or 8 | modify it under the terms of the GNU Lesser General Public 9 | License as published by the Free Software Foundation; either 10 | version 2.1 of the License, or (at your option) any later version. 11 | 12 | This library is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 | Lesser General Public License for more details. 16 | 17 | You should have received a copy of the GNU Lesser General Public 18 | License along with this library; if not, write to the Free Software 19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 | */ 21 | 22 | 23 | #ifndef _CATGETS_H 24 | #define _CATGETS_H 25 | 26 | #ifdef __cplusplus 27 | extern "C" 28 | { 29 | #endif 30 | 31 | #ifdef NO_KITTEN 32 | 33 | #define kittengets(x,y,z) (z) 34 | #define kittenclose() 35 | #define kittenopen(a) 36 | 37 | #else 38 | 39 | /* Data types */ 40 | 41 | #define nl_catd int 42 | 43 | /* Functions */ 44 | 45 | #define catgets(catalog, set,message_number,message) kittengets(set,message_number,message) 46 | #define catopen(name,flag) kittenopen(name) 47 | #define catclose(catalog) kittenclose() 48 | 49 | 50 | char *kittengets (int set_number, int message_number, char *message); 51 | nl_catd kittenopen (char *name); 52 | void kittenclose (void); 53 | 54 | int get_line (int file, char *buffer, int size); 55 | 56 | #ifndef _MICROC_ 57 | #ifndef __DJGPP__ 58 | 59 | int dos_open (char *filename, int mode); 60 | #define open(filename,mode) dos_open(filename,mode) 61 | 62 | int dos_read (int file, void *ptr, unsigned count); 63 | #define read(file, ptr, count) dos_read(file,ptr,count) 64 | 65 | int dos_write (int file, void *ptr, unsigned count); 66 | #define write(file, ptr, count) dos_write(file,ptr,count) 67 | 68 | void dos_close (int file); 69 | #define close(file) dos_close(file) 70 | 71 | #endif /*DJGPP*/ 72 | #endif /*Micro-C */ 73 | #endif /*NO_KITTEN */ 74 | #ifdef __cplusplus 75 | } 76 | #endif 77 | 78 | #endif /* _CATGETS_H */ 79 | -------------------------------------------------------------------------------- /lfn.h: -------------------------------------------------------------------------------- 1 | #ifndef _LFN_H_ 2 | #define _LFN_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * lfn.h: functions for Long File Name support 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | #include "vmshf.h" 30 | 31 | #define DEF_MANGLING_CHARS 3 32 | #define MIN_MANGLING_CHARS 2 33 | #define MAX_MANGLING_CHARS 6 34 | 35 | extern uint8_t manglingChars; 36 | extern uint8_t hashLen; 37 | 38 | extern char longFileName1[VMSHF_MAX_PATH]; 39 | extern char longFileName2[VMSHF_MAX_PATH]; 40 | 41 | // Claculates and returns hashLen bits length hash 42 | // 43 | extern uint32_t LfnFNameHash(uint8_t *name, // in : File name in UTF-8 44 | uint16_t len // in : File name length 45 | ); 46 | 47 | // Gets the true, LFN path from a DOS, mangled path 48 | // Returns far pointer to converted path, NULL if buffer overflow 49 | // 50 | extern char __far *LfnGetTrueLongName(char __far *dest, // out : Destination buffer for LFN 51 | char __far *path // in : DOS path name 52 | ); 53 | 54 | // Generates a valid (and hopefully unique) 8.3 DOS path from an LFN 55 | // This function assumes that fName is already in DOS character set 56 | // Returns always true 57 | // 58 | extern int LfnMangleFNameToFcbName( 59 | uint32_t hash, // in : Pre-calculated hash of the filename in UTF-8 60 | char *fcbName, // out : File name in FCB format. Must be 12 bytes long (we NULL-terminate it) 61 | char *fName, // in : File name in DOS codepage 62 | uint16_t fNameLen // in : File name length 63 | ); 64 | 65 | // Locates begin of transient part of the code when /LFN is set 66 | // Returns offset to itself 67 | // 68 | extern uint16_t BeginOfTransientBlockWithLfn(void); 69 | 70 | #endif /* _LFN_H_ */ 71 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | # vi: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab 2 | # 3 | # VMSMOUNT 4 | # A network redirector for mounting VMware's Shared Folders in DOS 5 | # Copyright (C) 2011-2022 Eduardo Casino 6 | # 7 | # This program is free software; you can redistribute it and/or 8 | # modify it under the terms of the GNU General Public License 9 | # as published by the Free Software Foundation; either version 2 10 | # of the License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program; if not, write to the Free Software 19 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | # MA 02110-1301, USA. 21 | # 22 | 23 | CC = wcc 24 | LD = wlink 25 | UPX = upx 26 | RM = rm -f 27 | MAKE = wmake 28 | CFLAGS = -Ivmchcpd -bt=dos -ms -q -s -oh -os -DREVERSE_HASH 29 | LDFLAGS = SYSTEM dos & 30 | ORDER & 31 | clname FAR_DATA & 32 | clname RES_CODE & 33 | clname CODE segment BEGTEXT segment _TEXT & 34 | clname BEGDATA & 35 | clname DATA & 36 | clname BSS & 37 | OPTION QUIET, STATICS, MAP=vmsmount.map 38 | UPXFLAGS = -9 39 | 40 | SUBDIRS = vmchcpd unitbls 41 | TARGET = vmsmount.exe 42 | 43 | !ifdef DEBUG 44 | CFLAGS += -DDEBUG 45 | DBGOBJ = printf.obj debug.obj 46 | DBG = DEBUG=y 47 | !endif 48 | 49 | OBJ = kitten.obj vmaux.obj main.obj $(DBGOBJ) miniclib.obj unicode.obj & 50 | vmdos.obj vmtool.obj vmshf.obj toolsd.obj redir.obj lfn.obj & 51 | endtext.obj 52 | 53 | all : $(TARGET) .SYMBOLIC 54 | (cd vmchcpd; $(MAKE) $(DBG) $@) 55 | 56 | tables: .SYMBOLIC 57 | (cd unitbls; $(MAKE) all) 58 | 59 | clean : .SYMBOLIC 60 | (for d in $(SUBDIRS); do cd $$d; $(MAKE) $(DBG) $@; cd ..; done) 61 | $(RM) $(OBJ) $(TARGET) *.map *.err 62 | 63 | distclean : clean .SYMBOLIC 64 | (for d in $(SUBDIRS); do cd $$d; $(MAKE) $(DBG) $@; cd ..; done) 65 | 66 | $(TARGET) : $(OBJ) 67 | $(LD) $(LDFLAGS) NAME $(TARGET) FILE {$(OBJ)} $(LIBPATH) $(LIBRARY) 68 | $(UPX) $(UPXFLAGS) $(TARGET) 69 | 70 | # main.obj and kitten.obj must be compiled with 8086 instructions only to gracefully 71 | # execute the processor check in real, older machines 72 | # 73 | main.obj : main.c .AUTODEPEND 74 | $(CC) -0 $(CFLAGS) -fo=$@ $< 75 | 76 | kitten.obj : kitten.c .AUTODEPEND 77 | $(CC) -0 $(CFLAGS) -fo=$@ $< 78 | 79 | vmaux.obj : vmaux.c .AUTODEPEND 80 | $(CC) -3 $(CFLAGS) -fo=$@ $< 81 | 82 | endtext.obj : endtext.c .AUTODEPEND 83 | $(CC) -3 $(CFLAGS) -nt=_TEXT_END -fo=$@ $< 84 | 85 | redir.obj : .AUTODEPEND 86 | 87 | toolsd.obj: .AUTODEPEND 88 | 89 | vmtool.obj : .AUTODEPEND 90 | 91 | vmshf.obj : .AUTODEPEND 92 | 93 | vmdos.obj : .AUTODEPEND 94 | 95 | lfn.obj : .AUTODEPEND 96 | 97 | !ifdef DEBUG 98 | 99 | debug.obj: .AUTODEPEND 100 | 101 | printf.obj: .AUTODEPEND 102 | 103 | !endif 104 | 105 | .c.obj : 106 | $(CC) -3 $(CFLAGS) -g=RES_GROUP -nt=RES_TEXT -nc=RES_CODE -nd=RES -fo=$@ $< 107 | -------------------------------------------------------------------------------- /messages.h: -------------------------------------------------------------------------------- 1 | #ifndef _MESSAHES_H_ 2 | #define _MESSAGES_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * This program is free software; you can redistribute it and/or 10 | * modify it under the terms of the GNU General Public License 11 | * as published by the Free Software Foundation; either version 2 12 | * of the License, or (at your option) any later version. 13 | * 14 | * This program is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | * GNU General Public License for more details. 18 | * 19 | * You should have received a copy of the GNU General Public License 20 | * along with this program; if not, write to the Free Software 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 22 | * MA 02110-1301, USA. 23 | */ 24 | 25 | #define MSG_MY_NAME "%s %d.%d -" 26 | #define MSG_COPYRIGHT " (C) 2011-2022 Eduardo Casino - GNU GPL Ver. 2.0\n" 27 | #define MSG_HELP_1 "\nUsage:\n" 28 | #define MSG_HELP_2 " VMSMOUNT [/H][/V|/Q|/QQ] [/L:] [/B:] [/LFN [/M:] [/CS|/CI]]\n" 29 | #define MSG_HELP_3 " VMSMOUNT [/V|/Q/QQ] /U\n" 30 | #define MSG_HELP_4 " /H - Prints this message and exits\n" 31 | #define MSG_HELP_5 " /V - Verbose: Prints information on system resources\n" 32 | #define MSG_HELP_6 " /Q - Quiet: Omits copyright message\n" 33 | #define MSG_HELP_7 " /QQ - Silent: Does not print any messages at all\n" 34 | #define MSG_HELP_8 " /L: - Drive letter to assign\n" 35 | #define MSG_HELP_9 " (if omitted, use first available)\n" 36 | #define MSG_HELP_10 " /B: - Size of read/write buffer\n" 37 | #define MSG_HELP_11 " (4K default, higher values increase performance)\n" 38 | #define MSG_HELP_12 " /LFN - Long File Name support\n" 39 | #define MSG_HELP_13 " /M: - Number of mangling chars for short names\n" 40 | #define MSG_HELP_14 " (2 minimum, 6 maximum, 3 default)\n" 41 | #define MSG_HELP_15 " /CI - Host file system is case insensitive\n" 42 | #define MSG_HELP_16 " (default option)\n" 43 | #define MSG_HELP_17 " /CS - Host file system is case sensitive\n" 44 | #define MSG_HELP_18 " (mangles file names whith lower case chars)\n" 45 | #define MSG_HELP_19 " /U - Uninstall\n" 46 | #define MSG_ERROR_BUFFER " ERROR: Buffer size must be between %u and %u bytes\n" 47 | #define MSG_ERROR_INUSE " ERROR: Drive %c: already in use\n" 48 | #define MSG_ERROR_NO_DRIVES " ERROR: No drive letter available (LASTDRIVE is %c)\n" 49 | #define MSG_ERROR_INVALID_DRIVE " ERROR: Invalid drive letter %c (LASTDRIVE is %c)\n" 50 | #define MSG_ERROR_BADOS " ERROR: Usupported DOS version %d.%d. Need 5.0 or higher.\n" 51 | #define MSG_ERROR_LOL " ERROR: Can't get the List-Of-Lists!\n" 52 | #define MSG_ERROR_SDA " ERROR: Can't get the SDA!\n" 53 | #define MSG_ERROR_NLSINFO " ERROR: Can't get the NLS tables.\n" 54 | #define MSG_ERROR_NOVIRT " ERROR: Not running on top of VMWARE.\n" 55 | #define MSG_ERROR_NOSHF " ERROR: Can't open communication channel with VM.\n" 56 | #define MSG_ERROR_INSTALLED " ERROR: Already installed. Use /U to uninstall.\n" 57 | #define MSG_ERROR_REDIR_NOT_ALLOWED " ERROR: Redirectors are not allowed.\n" 58 | #define MSG_ERROR_UNINSTALL " ERROR: Unable to uninstall.\n" 59 | #define MSG_ERROR_NOTINSTALLED " ERROR: Driver not installed.\n" 60 | #define MSG_ERROR_MANGLE " ERROR: Mangle characters must be between %u and %u\n" 61 | #define MSG_INFO_MOUNT " Mounting Shared Folders in %c:\n" 62 | #define MSG_INFO_UNINSTALL " Successfully removed from memory.\n" 63 | #define MSG_INFO_VMVERS " INFO: Running on VMware %s Version %lu\n" 64 | #define MSG_INFO_TZ " INFO: UTC Offset is %ld seconds\n" 65 | #define MSG_INFO_TBL " INFO: Active page is cp%d. Loading unicode table %s\n" 66 | #define MSG_INFO_LOAD " INFO: Driver loaded into memory with %u bytes used.\n" 67 | #define MSG_INFO_CHCP " INFO: CHCP support enabled via VMCHCPD.SYS\n" 68 | #define MSG_WARN_CP " WARNING: Active code page not found" 69 | #define MSG_WARN_UNICODE " WARNING: Can't load Unicode table: %s" 70 | #define MSG_WARN_TBLFORMAT " WARNING: Invalid file format: %s" 71 | #define MSG_WARN_NOTBL " WARNING: Can't find Unicode table: %s" 72 | #define MSG_WARN_437 ". Defaulting to cp437\n" 73 | #define MSG_WARN_TIMEZONE " WARNING: TZ invalid or not defined, times will be shown in UTC.\n" 74 | #define MSG_WARN_SF_DISABLED " WARNING: Shared Folders disabled for this guest.\n" 75 | 76 | #endif /* _MESSAGES_H_ */ 77 | -------------------------------------------------------------------------------- /miniclib.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * Copyright (C) 2011-2022 Eduardo Casino 5 | * 6 | * minilibc.c: some libc replacement functions 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include 25 | 26 | char *strrchr_local(const char *str, char c) 27 | { 28 | int i; 29 | 30 | for (i = 0; str[i] != '\0'; ++i) 31 | ; 32 | for (; i && str[i] != c; --i) 33 | ; 34 | 35 | return (char *)&str[i]; 36 | } 37 | 38 | char *strchr_local(const char *str, char c) 39 | { 40 | int i; 41 | 42 | for (i = 0; str[i] != '\0' && str[i] != c; ++i) 43 | ; 44 | 45 | return (char *)&str[i]; 46 | } 47 | 48 | char __far *_fstrrchr_local(const char __far *str, char c) 49 | { 50 | int i; 51 | 52 | for (i = 0; str[i] != '\0'; ++i) 53 | ; 54 | for (; i && str[i] != c; --i) 55 | ; 56 | 57 | return (char __far *)&str[i]; 58 | } 59 | 60 | char __far *_fstrchr_local(const char __far *str, char c) 61 | { 62 | int i; 63 | 64 | for (i = 0; str[i] != '\0' && str[i] != c; ++i) 65 | ; 66 | 67 | return (char __far *)&str[i]; 68 | } 69 | 70 | void _fmemcpy_local(void __far *dst, const void __far *src, size_t num) 71 | { 72 | void __far *d = dst; 73 | const void __far *s = src; 74 | 75 | // fastest implementation so far 76 | // using rep movsD 77 | 78 | __asm 79 | { 80 | push es; 81 | push ds; 82 | push si; 83 | push di; 84 | 85 | mov cx, num; 86 | les di, d; 87 | lds si, s; 88 | 89 | // push/pop strictly not necessary 90 | // but doing the byte moves at last 91 | // favors aligned buffers 92 | 93 | shr cx,1; 94 | pushf 95 | shr cx,1; 96 | rep movsd; 97 | 98 | adc cx,cx; 99 | rep movsw; 100 | 101 | popf 102 | adc cx,cx; 103 | rep movsb; 104 | 105 | pop di; 106 | pop si; 107 | pop ds; 108 | pop es; 109 | } 110 | 111 | return; 112 | } 113 | 114 | char __far *_fstrcpy_local(char __far *dst, const char __far *src) 115 | { 116 | while (*src) 117 | { 118 | *dst++ = *src++; 119 | } 120 | *dst = '\0'; 121 | 122 | return dst; 123 | } 124 | 125 | void *memcpy_local(void *dst, const void *src, size_t num) 126 | { 127 | char *d = (char *)dst; 128 | char *s = (char *)src; 129 | 130 | while (num--) 131 | { 132 | *d++ = *s++; 133 | } 134 | 135 | return dst; 136 | } 137 | 138 | int strncmp_local(const char *s1, const char *s2, size_t num) 139 | { 140 | while (*s1 && num) 141 | { 142 | if (*s1 != *s2) 143 | { 144 | break; 145 | } 146 | 147 | s1++, s2++, num--; 148 | } 149 | 150 | return (num == 0 ? num : *(const unsigned char *)s1 - *(const unsigned char *)s2); 151 | } 152 | -------------------------------------------------------------------------------- /miniclib.h: -------------------------------------------------------------------------------- 1 | #ifndef _MINICLIB_H_ 2 | #define _MINICLIB_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * minilibc.h: some libc replacement functions 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | extern char *strchr_local(const char *str, char c); 30 | extern char *strrchr_local(const char *str, char c); 31 | extern char __far *_fstrchr_local(const char __far *str, char c); 32 | extern char __far *_fstrrchr_local(const char __far *str, char c); 33 | extern void _fmemcpy_local(void __far *dst, const void __far *src, size_t num); 34 | extern char __far *_fstrcpy_local(char __far *dst, const char __far *src); 35 | extern void *memcpy_local(void *dst, const void *src, size_t num); 36 | extern int strncmp_local(const char *s1, const char *s2, size_t num); 37 | 38 | #endif /* _MINICLIB_H_ */ 39 | -------------------------------------------------------------------------------- /nls/vmsmount.en: -------------------------------------------------------------------------------- 1 | # Language: English 2 | # Codepage: 437 3 | # 4 | # Translator: Eduardo 5 | # 6 | # Spaces before text must be kept. Be sure that no spaces are 7 | # added to the end of the lines. 8 | # 9 | 0.1:\nUsage:\n 10 | 0.2: VMSMOUNT [/H][/V|/Q|/QQ] [/L:] [/B:] [/LFN [/M:] [/CI|/CS]]\n 11 | 0.3: VMSMOUNT [/V|/Q|/QQ] /U\n 12 | 0.4: /H - Prints this message and exits\n 13 | 0.5: /V - Verbose: Prints information on system resources\n 14 | 0.6: /Q - Quiet: Omits copyright message\n 15 | 0.7: /QQ - Silent: Does not print any messages at all\n 16 | 0.8: /L: - Drive letter to assign\n 17 | 0.9: (if omitted, use first available)\n 18 | 0.10: /B: - Size of read/write buffer\n 19 | 0.11: (4K default, higher values increase performance)\n 20 | 0.12: /LFN - Long File Name support\n 21 | 0.13: /M: - Number of mangling chars for short names\n 22 | 0.14: (2 minimum, 6 maximum, 3 default)\n 23 | 0.15: /CI - Host file system is case insensitive\n 24 | 0.16: (default option)\n 25 | 0.17: /CS - Host file system is case sensitive\n 26 | 0.18: (mangles file names whith lower case chars)\n 27 | 0.19: /U - Uninstall\n 28 | 1.0: ERROR: Drive %c: already in use\n 29 | 1.1: ERROR: No drive letter available (LASTDRIVE is %c)\n 30 | 1.2: ERROR: Usupported DOS version %d.%d. Need 5.0 or higher.\n 31 | 1.3: ERROR: Not running on top of VMWARE.\n 32 | 1.4: ERROR: Invalid drive letter %c (LASTDRIVE is %c)\n 33 | 1.5: ERROR: Can't get the List-Of-Lists!\n 34 | 1.6: ERROR: Redirectors are not allowed.\n 35 | 1.7: ERROR: Already installed. Use /U to uninstall.\n 36 | 1.8: ERROR: Can't open communication channel with VM.\n 37 | 1.9: ERROR: Can't get the SDA!\n 38 | 1.10: ERROR: Can't get the NLS tables.\n 39 | 1.11: ERROR: Buffer size must be between %u and %u bytes\n 40 | 1.12: ERROR: Unable to uninstall.\n 41 | 1.13: ERROR: Driver not installed.\n 42 | 1.14: ERROR: Mangle characters must be between %u and %u\n 43 | 1.15: WARNING: TZ invalid or not defined, times will be shown in UTC.\n 44 | 1.16: WARNING: Can't find Unicode table: %s 45 | 1.17: WARNING: Can't load Unicode table: %s 46 | 1.18: WARNING: Invalid file format: %s 47 | 1.19: WARNING: Active code page not found 48 | 1.20:. Defaulting to cp437\n 49 | 1.21: WARNING: Shared Folders disabled for this guest.\n 50 | 2.0: Mounting Shared Folders in %c:\n 51 | 2.1: Successfully uninstalled and removed from memory.\n 52 | 9.0: INFO: Running on VMware %s Version %lu\n 53 | 9.1: INFO: UTC Offset is %ld seconds\n 54 | 9.2: INFO: Active page is cp%d. Loading unicode table %s\n 55 | 9.3: INFO: Driver loaded into memory with %u bytes used.\n 56 | 9.4: INFO: CHCP support enabled via VMCHCPD.SYS\n 57 | -------------------------------------------------------------------------------- /nls/vmsmount.es: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eduardocasino/vmsmount/c9a068c569778a32a5e929940882e30a0d52519d/nls/vmsmount.es -------------------------------------------------------------------------------- /nls/vmsmount.nl: -------------------------------------------------------------------------------- 1 | # Language: Dutch 2 | # Codepage: 437 3 | # 4 | # Translator: Bernd Blaauw 5 | # 6 | # Spaces before text must be kept. Be sure that no spaces are 7 | # added to the end of the lines. 8 | # 9 | 0.1:\nGebruik:\n 10 | 0.2: VMSMOUNT [/H][/V|/Q|/QQ] [/L:] [/B:[K]] [/LFN [/M:] [/CI|/CS]]\n 11 | 0.3: VMSMOUNT [/V|/Q|/QQ] /U\n 12 | 0.4: /H - Geeft dit bericht weer en stopt\n 13 | 0.5: /V - Verbaal: Geeft informatie weer over systeembronnen\n 14 | 0.6: /Q - Stil: Laat copyright-melding achterwege\n 15 | 0.7: /QQ - Stil: Laat geen enkele melding zien\n 16 | 0.8: /L: - Toe te kennen schijfletter\n 17 | 0.9: (indien weggelaten, gebruikt eerst beschikbare)\n 18 | 0.10: /B: - Grootte van lees/schrijf-buffer\n 19 | 0.11: (standaard 4K, hogere waardes verhogen de prestaties)\n 20 | 0.12: /LFN - Ondersteuning voor lange bestandsnamen\n 21 | 0.13: /M: - Aantal te vermengen tekens voor korte namen\n 22 | 0.14: (minstens 2, maximaal 6, standaard 3)\n 23 | 0.15: /CI - Host bestandssysteem is niet hoofdlettergevoelig\n 24 | 0.16: (standaard instelling)\n 25 | 0.17: /CS - Host bestandssysteem is hoofdlettergevoelig\n 26 | 0.18: (vermengt bestandsnamen met lower-case tekens)\n 27 | 0.19: /U - Desinstalleren\n 28 | 1.0: FOUT: Schijfaanduiding %c: is al in gebruik\n 29 | 1.1: FOUT: Geen schijfletter beschikbaar (LASTDRIVE is %c)\n 30 | 1.2: FOUT: Niet ondersteunde DOS versie %d.%d. Versie 5.0 of nieuwer benodigd.\n 31 | 1.3: FOUT: Systeem draait niet under VMWARE.\n 32 | 1.4: FOUT: Ongeldige schijfletter %c (LASTDRIVE is %c)\n 33 | 1.5: FOUT: Kan de List-Of-Lists niet achterhalen!\n 34 | 1.6: FOUT: Redirectors zijn not toegestaan.\n 35 | 1.7: FOUT: Al geinstalleerd. Gebruik /U om programma te stoppen.\n 36 | 1.8: FOUT: Kan geen communicatiekanaal openen met VMware\n 37 | 1.9: FOUT: Kan de SDA niet achterhalen!\n 38 | 1.10: FOUT: Kan de NLS tabellen niet achterhalen.\n 39 | 1.11: FOUT: Buffergrootte dient tussen %u en %u bytes te zijn\n 40 | 1.12: FOUT: Niet gelukt om te desinstalleren.\n 41 | 1.13: FOUT: Stuurprogramma niet geinstalleerd.\n 42 | 1.14: FOUT: Aantal te vermengen karakters moet tussen %u en %u liggen\n 43 | 1.15: WAARSCHUWING: TZ ongeldig of niet gedefinieerd, tijden worden weergegeven als UTC.\n 44 | 1.16: WAARSCHUWING: Kan Unicode tabel niet vinden: %s 45 | 1.17: WAARSCHUWING: Kan Unicode tabel niet laden: %s 46 | 1.18: WAARSCHUWING: Ongeldig bestandsformaat: %s 47 | 1.19: WAARSCHUWING: Actieve codepagina niet gevonden 48 | 1.20:. Tijd om terug te vallen op cp437\n 49 | 1.21: WAARSCHUWING: Gedeelde mappen uitgeschakeld voor dit gast-besturingssysteem.\n 50 | 2.0: Shared Folders gekoppeld onder %c:\n 51 | 2.1: Succesvol gestopt en verwijderd uit geheugen.\n 52 | 9.0: INFO: Werkend op VMware %s versie %lu\n 53 | 9.1: INFO: UTC Offset is %ld seconds\n 54 | 9.2: INFO: Actieve pagina is cp%d. Bezig met laden van unicode tabel %s\n 55 | 9.3: INFO: Stuurprogramma in geheugen geladen met %u bytes gebruikt.\n 56 | 9.4: INFO: CHCP-ondersteuning ingeschakeld via VMCHCPD.SYS\n 57 | -------------------------------------------------------------------------------- /printf.h: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////////////////// 2 | // \author (c) Marco Paland (info@paland.com) 3 | // 2014-2019, PALANDesign Hannover, Germany 4 | // 5 | // \license The MIT License (MIT) 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | // 25 | // \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on 26 | // embedded systems with a very limited resources. 27 | // Use this instead of bloated standard/newlib printf. 28 | // These routines are thread safe and reentrant. 29 | // 30 | /////////////////////////////////////////////////////////////////////////////// 31 | 32 | #ifndef _PRINTF_H_ 33 | #define _PRINTF_H_ 34 | 35 | #include 36 | #include 37 | 38 | // internal secure strlen 39 | // \return The length of the string (excluding the terminating 0) limited by 'maxsize' 40 | static inline unsigned int _strnlen_s(const char __far* str, size_t maxsize) 41 | { 42 | const char __far * s; 43 | for (s = str; *s && maxsize--; ++s); 44 | return (unsigned int)(s - str); 45 | } 46 | 47 | /** 48 | * Tiny snprintf/vsnprintf implementation 49 | * \param buffer A pointer to the buffer where to store the formatted string 50 | * \param count The maximum number of characters to store in the buffer, including a terminating null character 51 | * \param format A string that specifies the format of the output 52 | * \param va A value identifying a variable arguments list 53 | * \return The number of characters that COULD have been written into the buffer, not counting the terminating 54 | * null character. A value equal or larger than count indicates truncation. Only when the returned value 55 | * is non-negative and less than count, the string has been completely written. 56 | */ 57 | #define snprintf snprintf_ 58 | #define vsnprintf vsnprintf_ 59 | extern int snprintf_(char* buffer, size_t count, const char* format, ...); 60 | extern int vsnprintf_(char* buffer, size_t count, const char* format, va_list va); 61 | 62 | #endif // _PRINTF_H_ 63 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | VMSMOUNT - A DOS redirector for mounting VMware's Shared Folders 2 | (C) 2011-2022 Eduardo Casino 3 | 4 | WARNING AND DISCLAIMER 5 | 6 | This should be considered a beta version and, as such, may contain 7 | bugs that could cause data loss. THIS PROGRAM IS PROVIDED "AS IS" WITHOUT 8 | WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED 9 | TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 10 | PURPOSE. THE ENTIRE RISK ASTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS 11 | WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 12 | NECESSARY SERVICING, REPAIR OR CORRECTION. 13 | 14 | USAGE 15 | 16 | VMSMOUNT [/H][/V|/Q|/QQ] [/L:] [/B:] [/LFN [/M:] [/CI|/CS]] 17 | VMSMOUNT [/V|/Q|/QQ] /U 18 | /H - Prints help and exits 19 | /V - Verbose: Prints information on system resources 20 | /Q - Quiet: Omits copyright message 21 | /QQ - Silent: Does not print any messages at all 22 | /L: - Drive letter to assign 23 | (if omitted, use the first available) 24 | /B: - Size of read/write buffer 25 | (4K default, higher values increase performance) 26 | /LFN - Long File Name support. "Mangles" long file names 27 | (or those with illegal or unconvertibe characters) 28 | to valid 8.3 names, using a hash algorithm. For 29 | example, "This is a long file.name" will translate 30 | into "THIS~2BF.NAM" 31 | /M: - Number of mangling chars for short names 32 | (2 minimum, 6 maximum, 3 default) For example, the 33 | same "This is a long file.name" will translate into 34 | "THISI~02.NAM" if /M:2 or "TH~0BAC0.NAM" if /M:5. 35 | The default suits most use cases. Increase if the 36 | host file system has many files with similar long 37 | names. 38 | /CI - Host file system is case insensitive, so 39 | "example.txt" and "ExaMPLe.Txt" are the same. This is 40 | the default behaviour. 41 | /CS - Host file system is case sensitive (non-Windows 42 | hosts) Mangles file names whith lower case chars. For 43 | example, "EXAMPLE.TXT" will be left unchanged, but 44 | "Example.txt" will be translated into "EXAM~4F0.TXT" 45 | /U - Uninstall 46 | 47 | /D - Dump contents of internal stack (if compiled with 48 | debug support) 49 | 50 | ENVIRONMENT 51 | 52 | TZ - Valid POSIX timezone. If omitted, file times will be in UTC 53 | (see http://www.gnu.org/s/hello/manual/libc/TZ-Variable.html) 54 | Example: TZ=CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00 55 | LANG - Used by the Kitten library to show messages in the correct 56 | language. Currently only available in English, Spanish and 57 | Dutch. 58 | NLSPATH - Used by the Kitten library to find the message catalogs 59 | (VMSMOUNT.EN, VMSMOUNT.ES, VMSMOUNT.NL, ...) 60 | PATH - VMSMOUNT searchs in the PATH for the unicode conversion 61 | tables. 62 | 63 | VMSMOUNT gets the current NLS settings from the kernel and translates 64 | VMware's UTF encoding to the correct code page, provided that the 65 | necessary conversion table is found. It uses the same table format 66 | as Volkov Commander and DOSLFN. Please refer to TBL.TXT in the DOSLFN 67 | source package for details(http://adoxa.altervista.org/doslfn/index.html) 68 | For convenience, I'm distributing with this package the translation 69 | tables, which can be generated from the ASCII code tables provided at 70 | www.unicode.org using the MK_TABLE program from DOSLFN 71 | 72 | RETURN CODES (ERRORLEVELS) 73 | 74 | If loaded successfully, VMSMOUNT returns the number of the assigned drive 75 | letter starting with 1 ( A == 1, B == 2, C == 3, ... ) 76 | 77 | If not loaded, errorlevel is set according to the following table: 78 | 79 | ERRORLEVEL Meaning 80 | ~~~~~~~~~~ ~~~~~~~ 81 | 0 Not loaded (help screen requested) or successfully uninstalled 82 | 245 Unable to uninstall 83 | 246 Driver not installed and tried to uninstall 84 | 247 Invalid buffer size 85 | 248 Invalid command line option(s) 86 | 249 Unsupported DOS version 87 | 250 Not running in a virtual machine 88 | 251 Shared folders not enabled 89 | 252 Redirector not allowed to install 90 | 253 Already installed 91 | 254 Invalid drive letter 92 | 255 Other system error 93 | 94 | SUPPORT FOR SWITCHING CODE PAGES WITH CHCP AND NLSFUNC 95 | 96 | Since version 0.6, VMSMOUNT supports code page changes with CHCP if the 97 | optional VMCHCPD.SYS driver and NLSFUNC are installed. 98 | 99 | Configuration example for a Greek environment in which it may be 100 | necessary to switch between different (737, 869 and 850) code pages: 101 | 102 | CONFIG.SYS: 103 | COUNTRY=30,,C:\FDOS\COUNTRY.SYS 104 | DEVICEHIGH=C:\FDOS\NETWORK\VMSMOUNT\VMCHCPD.SYS 105 | 106 | AUTOEXEC.BAT: 107 | DISPLAY CON=(EGA,,3) 108 | MODE CON CP PREP=((850) C:\FDOS\CPI\EGA.CPI) 109 | MODE CON CP PREP=((,737,869) C:\FDOS\CPI\EGA5.CPI) 110 | LH NLSFUNC /Y 111 | CHCP 737 112 | KEYB GK,,KEYBRD2.SYS 113 | 114 | C:\> VMSMOUNT /V /LFN 115 | VMSMOUNT 0.6 - (C) 2011-2022 Eduardo Casino - GNU GPL Ver. 2.0 116 | INFO: Running on VMware Workstation Version 6 117 | INFO: Active page is cp737. Loading unicode table cp737uni.tbl 118 | INFO: CHCP support enabled via VMCHCPD.SYS 119 | INFO: UTC Offset is -18000 seconds 120 | INFO: Driver loaded into memory with 22960 bytes used. 121 | Mounting Shared Folders in E: 122 | 123 | 124 | Now you can switch between code pages using the CHCP command 125 | 126 | LIMITATIONS 127 | 128 | * Does not work with DOS < 5 (Tested with latest FreeDOS kernel, 129 | MS-DOS 6.22 and MS-DOS 7 (win95) 130 | * Does not support old versions of VMWare Workstation (Tested with 131 | VMWare Player 3 and 4) 132 | * Shared folder names MUST be uppercase if /LFN is not set 133 | 134 | ACKNOWLEDGEMENTS 135 | 136 | * "Undocumented DOS 2nd ed." by Andrew Schulman et al. 137 | Enlightening, but with some inaccuracies that have driven me mad 138 | 139 | * Ken Kato's VMBack info and Command Line Tools 140 | (http://sites.google.com/site/chitchatvmback/) 141 | The HGFS code is fully based on his excellent work 142 | 143 | * VMware's Open Virtual Machine Tools 144 | (http://open-vm-tools.sourceforge.net/) 145 | Info on the HGFS V3 protocol 146 | 147 | * Tomi Tilli's TSR example in Watcom C for the 148 | Vintage Computer Forum (www.vintage-computer.com) 149 | The idea and some code for a lightweight TSR written in C 150 | 151 | * Jason Hood/Henrik Haftmann for the unicode translation tables in 152 | DOSLFN. Jason again for SHSUCDX, it's source code has been very 153 | helpful. 154 | 155 | * Bernd Blaauw for his incredibly useful feedback and Dutch translation 156 | 157 | * Tom Ehlert for extensive feedback, code review, bug reports, ideas and 158 | actual code 159 | 160 | * Alan Kamrowski II for extensive bug report, testing and code review 161 | 162 | * Marco Paland (info@paland.com) for his tiny printf implementation 163 | 164 | * Javier de San Pedro (https://git.javispedro.com/vbados.git) for ideas 165 | for the porting to OW 2.0 166 | 167 | * And, of course, Pat Villani for the FreeDOS kernel. 168 | 169 | 170 | BUILD 171 | 172 | VMSMOUNT was built with OpenWatcom 2.0 toolkit, cross compiling on Linux 173 | (or WSL). Compile with 'wmake' or 'wmake DEBUG=y' to add debugging support. 174 | 175 | For building the unicode conversion tables from source, native GCC is 176 | needed. Just type 'wmake tables'. 177 | 178 | BUGS 179 | 180 | * When used with DOSLFN in FreeDOS, "." and ".." appear corrupted 181 | in the long name listing with DIR /LFN. I don't know if it is a 182 | FreeDOS kernel, FreeCOM or DOSLFN bug. I assume it is not VMSMOUNT 183 | because it also occurs with SHSUCDX. It does not happen with MS-DOS 7. 184 | 185 | TODO 186 | 187 | * Full Long file names support 188 | 189 | LICENSE 190 | 191 | VMSMOUNT is GPLd software. See LICENSE.TXT for the details. 192 | -------------------------------------------------------------------------------- /redir.h: -------------------------------------------------------------------------------- 1 | #ifndef _REDIR_H_ 2 | #define _REDIR_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * redir.h: Redirector interface 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | #include 29 | 30 | #include "dosdefs.h" 31 | #include "vmshf.h" 32 | 33 | #define VMSMOUNT_MAGIC 'SF' 34 | 35 | #pragma pack(push, 1) 36 | 37 | typedef struct 38 | { 39 | char signature[9]; // "VMSMOUNT" 40 | uint16_t psp; // Our PSP 41 | void __far *ourHandler; // Our handler (points to Int2fRedirector() ) 42 | void __far *previousHandler; // Handler we chain to and must be restored when uninstalled 43 | void __far *ourClockHandler; // Our clock interrupt handler (points to Int1cHandler() ) 44 | void __far *previousClockHandler; // Handler we chain to and must be restored when uninstalled 45 | rpc_t __far *fpRpci; // Pointer to HGFS session data 46 | rpc_t __far *fpTclo; // Pointer to TCLO session data 47 | #ifdef DEBUG 48 | rpc_t __far *fpRpcd; // Pointer to RPCI channel for debugging 49 | uint8_t __far *ourStack; // Pointer to internal stack 50 | #endif 51 | } Signature; 52 | 53 | #pragma pack(pop) 54 | 55 | extern void(__interrupt __far *fpPrevInt2fHandler)(); 56 | 57 | #define STACK_SIZE 300 58 | extern uint8_t newStack[STACK_SIZE]; 59 | extern uint8_t lfn; 60 | extern uint8_t driveNum; 61 | extern CDS __far *fpCDS; 62 | extern SDA __far *fpSDA; 63 | extern SDB __far *fpSDB; 64 | extern FDB __far *fpFDB; 65 | extern SFTT __far *fpFileTable; 66 | extern char __far *fpFcbName1; 67 | extern char __far *fpFcbName2; 68 | extern char __far *fpFileName1; 69 | extern char __far *fpFileName2; 70 | extern char __far *fpCurrentPath; 71 | extern char __far *fpLongFileName1; 72 | extern char __far *fpLongFileName2; 73 | 74 | extern __segment myDS; 75 | 76 | extern void __declspec(naked) __far Int2fRedirector(void); 77 | extern uint16_t BeginOfTransientBlockNoLfn(void); 78 | 79 | extern __segment __far get_tsr_cs(void); 80 | 81 | #endif /* _REDIR_H_ */ 82 | -------------------------------------------------------------------------------- /toolsd.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT - A network redirector for mounting VMware's Shared Folders in DOS 3 | * Copyright (C) 2022 Eduardo Casino 4 | * 5 | * toolsd.c: Minimal VMWare tools daemon 6 | * 7 | * This program is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU General Public License 9 | * as published by the Free Software Foundation; either version 2 10 | * of the License, or (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | * MA 02110-1301, USA. 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #include "debug.h" 27 | #include "globals.h" 28 | #include "miniclib.h" 29 | #include "vmtool.h" 30 | 31 | #define HEARTBEAT_INTERVAL 18 // (1 sec) 32 | 33 | #define TCLO_PING "ping" 34 | #define TCLO_RESET "reset" 35 | #define TCLO_VIX_CMD "Vix_1_" 36 | #define TCLO_VIX_MOUNT TCLO_VIX_CMD "Mount_Volumes" 37 | #define TCLO_SUCCESS "OK " 38 | #define TCLO_ERROR "ERROR " 39 | #define TCLO_RST_SUCCESS TCLO_SUCCESS "ATR toolbox" 40 | #define TCLO_UNKNOWN_CMD TCLO_ERROR "Unknown command" 41 | #define TCLO_VIX_SUCCESS TCLO_SUCCESS "0 0" 42 | #define TCLO_VIX_UNSUPPORTED TCLO_ERROR "6 0" 43 | 44 | #define TCLO_CMD_MAX_LEN 160 45 | typedef union { 46 | struct 47 | { 48 | uint8_t command[TCLO_CMD_MAX_LEN + 1]; 49 | uint32_t commandLen; 50 | } c; 51 | struct 52 | { 53 | uint8_t reply[TCLO_CMD_MAX_LEN + 1]; 54 | uint32_t replyLen; 55 | } r; 56 | } TCLOMsg; 57 | 58 | #ifdef DEBUG 59 | #define DEB_STACK_SIZE 256 60 | uint8_t debStack[DEB_STACK_SIZE] = { 61 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 62 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 63 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 64 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 65 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 66 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 67 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 68 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 69 | 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC}; 70 | 71 | static uint16_t dosSS; 72 | static uint16_t dosSP; 73 | #endif 74 | 75 | rpc_t tclo = { 76 | 0, // channel 77 | 0, // cookie1 78 | 0 // cookie2 79 | }; 80 | 81 | void(__interrupt __far *fpPrevInt1cHandler)(); 82 | 83 | static void Int1cToolsd(union INTPACK regset) 84 | #pragma aux Int1cToolsd "*" __parm __caller [] __modify [__ax __bx __cx __dx __si __di __es __gs __fs] 85 | { 86 | // Do not use stack (see how to fix it -zu) 87 | static TCLOMsg msg = {0}; 88 | static ticks = HEARTBEAT_INTERVAL; 89 | static uint16_t id; 90 | static int ret; 91 | 92 | #ifdef DEBUG 93 | __asm 94 | { 95 | mov dosSS, ss 96 | mov dosSP, sp 97 | mov ax, ds 98 | mov ss, ax 99 | mov sp, (offset debStack) + DEB_STACK_SIZE 100 | } 101 | #endif 102 | 103 | if (msg.r.replyLen || ++ticks > HEARTBEAT_INTERVAL) 104 | { 105 | ticks = 0; // Reset heartbeat counter 106 | 107 | ret = VMRpcSend(&tclo, &msg.r.reply, msg.r.replyLen); 108 | msg.r.replyLen = 0; // This also sets msg.c.commandLen to 0 109 | 110 | if (ret) 111 | { 112 | goto chain; 113 | } 114 | 115 | ret = VMRpcRecvLen(&tclo, &msg.c.commandLen, &id); 116 | 117 | if (ret || msg.c.commandLen == 0) 118 | { 119 | goto chain; 120 | } 121 | 122 | if (msg.c.commandLen > TCLO_CMD_MAX_LEN) 123 | msg.c.commandLen = TCLO_CMD_MAX_LEN; 124 | 125 | if (VMRpcRecvDat(&tclo, &msg.c.command, msg.c.commandLen, id) == 0) 126 | { 127 | if (!strncmp_local(msg.c.command, TCLO_RESET, sizeof(TCLO_RESET) - 1)) 128 | { 129 | msg.r.replyLen = sizeof(TCLO_RST_SUCCESS) - 1; 130 | memcpy_local(&msg.r.reply, TCLO_RST_SUCCESS, msg.r.replyLen); 131 | } 132 | else if (!strncmp_local(msg.c.command, TCLO_PING, sizeof(TCLO_PING) - 1)) 133 | { 134 | msg.r.replyLen = sizeof(TCLO_SUCCESS) - 1; 135 | memcpy_local(&msg.r.reply, TCLO_SUCCESS, msg.r.replyLen); 136 | } 137 | else if (!strncmp_local(msg.c.command, TCLO_VIX_MOUNT, sizeof(TCLO_VIX_MOUNT) - 1)) 138 | { 139 | msg.r.replyLen = sizeof(TCLO_VIX_SUCCESS) - 1; 140 | DPRINTF("Received TCLO Vix command: %s", msg.c.command); 141 | memcpy_local(&msg.r.reply, TCLO_VIX_SUCCESS, msg.r.replyLen); 142 | } 143 | else if (!strncmp_local(msg.c.command, TCLO_VIX_CMD, sizeof(TCLO_VIX_CMD) - 1)) 144 | { 145 | msg.r.replyLen = sizeof(TCLO_VIX_UNSUPPORTED) - 1; 146 | DPRINTF("Received unsupported TCLO Vix command: %s", msg.c.command); 147 | memcpy_local(&msg.r.reply, TCLO_VIX_UNSUPPORTED, msg.r.replyLen); 148 | } 149 | else 150 | { 151 | #ifdef DEBUG 152 | msg.c.command[msg.c.commandLen] = '\0'; 153 | DPRINTF("Received unsupported TCLO command: %s", msg.c.command); 154 | #endif 155 | msg.r.replyLen = sizeof(TCLO_UNKNOWN_CMD) - 1; 156 | memcpy_local(&msg.r.reply, TCLO_UNKNOWN_CMD, msg.r.replyLen); 157 | } 158 | } 159 | } 160 | 161 | chain: 162 | #ifdef DEBUG 163 | __asm 164 | { 165 | mov ss, dosSS 166 | mov sp, dosSP 167 | } 168 | #endif 169 | return; 170 | } 171 | 172 | void __declspec(naked) __far Int1cHandler(void) 173 | { 174 | __asm 175 | { 176 | pusha 177 | push ds 178 | push es 179 | push fs 180 | push gs 181 | 182 | mov bp, sp 183 | push cs 184 | pop ds 185 | 186 | call Int1cToolsd 187 | 188 | mov bx, word ptr [bp+28] ; restore flags 189 | and bx, 0fcffh ; except for IF and TF 190 | push bx 191 | popf 192 | pop gs 193 | pop fs 194 | pop es 195 | pop ds 196 | popa 197 | 198 | jmp dword ptr cs:fpPrevInt1cHandler 199 | } 200 | } 201 | -------------------------------------------------------------------------------- /toolsd.h: -------------------------------------------------------------------------------- 1 | #ifndef _TOOLSD_H_ 2 | #define _TOOLSD_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2022 Eduardo Casino 8 | * 9 | * toolsd.h: Minimal VMWare Toolsd Daemmon 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | #include "vmtool.h" 30 | 31 | extern rpc_t tclo; 32 | 33 | extern void (__interrupt __far *fpPrevInt1cHandler)(); 34 | 35 | extern void __declspec(naked) __far Int1cHandler(void); 36 | 37 | #endif /* _TOOLSD_H_ */ 38 | -------------------------------------------------------------------------------- /unicode.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * Copyright (C) 2011-2022 Eduardo Casino 5 | * 6 | * unicode.c: unicode conversion routines 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "globals.h" 30 | 31 | // Initialised to cp437 32 | // 33 | uint16_t unicodeTbl[128] = { 34 | 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 35 | 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 36 | 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 37 | 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502, 38 | 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 39 | 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 40 | 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 41 | 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x03BC, 0x03C4, 42 | 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 43 | 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0}; 44 | 45 | static uint8_t lookupCP(uint16_t cp) 46 | { 47 | uint8_t i; 48 | 49 | for (i = 0; i < 128 && unicodeTbl[i] != cp; ++i) 50 | ; 51 | 52 | return (i < 128 ? (uint8_t)i + 128 : '\0'); 53 | } 54 | 55 | // dst and src CAN'T BE THE SAME !!!! 56 | // Returns resulting length or -1 if buffer overflow 57 | // 58 | int LocalToUtf8(uint8_t __far *dst, uint8_t __far *src, int buflen) 59 | { 60 | int len = 0; // Resulting length 61 | uint16_t cp; // Unicode Code Point 62 | 63 | while (*src) 64 | { 65 | // UTF-8 bytes: 0xxxxxxx 66 | // Binary CP: 0xxxxxxx 67 | // CP range: U+0000 to U+007F (Direct ASCII translation) 68 | // 69 | if (!(*src & 0x80)) 70 | { 71 | if (buflen > len) 72 | { 73 | *dst++ = *src; 74 | ++len; 75 | goto cont; 76 | } 77 | else 78 | { 79 | return -1; 80 | } 81 | } 82 | 83 | cp = unicodeTbl[*src - 128]; 84 | 85 | // UTF-8 bytes: 110yyyyy 10xxxxxx 86 | // Binary CP: 00000yyy yyxxxxxx 87 | // CP range: U+0080 to U+07FF 88 | // 89 | if (!(cp & 0xF000)) 90 | { 91 | if (buflen > len + 1) 92 | { 93 | *dst++ = (uint8_t)(cp >> 6) | 0xC0; 94 | *dst++ = (uint8_t)(cp & 0x3f) | 0x80; 95 | len += 2; 96 | } 97 | else 98 | { 99 | return -1; 100 | } 101 | } 102 | 103 | // UTF-8 bytes: 1110zzzz 10yyyyyy 10xxxxxx 104 | // Binary CP: zzzzyyyy yyxxxxxx 105 | // CP range: U+0800 to U+FFFF 106 | // 107 | else 108 | { 109 | if (buflen > len + 2) 110 | { 111 | *dst++ = (uint8_t)(cp >> 12) | 0xE0; 112 | *dst++ = (uint8_t)((cp >> 6) & 0x3F) | 0x80; 113 | *dst++ = (uint8_t)(cp & 0x3F) | 0x80; 114 | len += 3; 115 | } 116 | else 117 | { 118 | return -1; 119 | } 120 | } 121 | cont: 122 | ++src; 123 | }; 124 | 125 | // Terminate string 126 | // 127 | *dst = '\0'; 128 | 129 | return len; 130 | } 131 | 132 | // Returns 0 on success, -1 if any unsupported char is found 133 | // 134 | int Utf8ToLocal(uint8_t *dst, uint8_t *src) 135 | { 136 | int ret = 0; // Return code 137 | uint16_t cp; // Unicode Code point 138 | 139 | while (*src) 140 | { 141 | // UTF-8 bytes: 0xxxxxxx 142 | // Binary CP: 0xxxxxxx 143 | // CP range: U+0000 to U+007F (Direct ASCII translation) 144 | // 145 | if (!(*src & 0x80)) 146 | { 147 | *dst = *src; 148 | ++src; 149 | goto cont; 150 | } 151 | 152 | // UTF-8 bytes: 110yyyyy 10xxxxxx 153 | // Binary CP: 00000yyy yyxxxxxx 154 | // CP range: U+0080 to U+07FF 155 | // 156 | if (!(*src & 0x20)) 157 | { 158 | cp = ((uint16_t)(*src & 0x1F) << 6) | *(src + 1) & 0x3F; 159 | *dst = lookupCP(cp); 160 | if (*dst == '\0') 161 | { 162 | *dst = '_'; 163 | ret = -1; 164 | } 165 | src += 2; 166 | goto cont; 167 | } 168 | 169 | // UTF-8 bytes: 1110zzzz 10yyyyyy 10xxxxxx 170 | // Binary CP: zzzzyyyy yyxxxxxx 171 | // CP range: U+0800 to U+FFFF 172 | // 173 | if (!(*src & 0x10)) 174 | { 175 | cp = ((uint16_t)(*src & 0xF) << 12) | ((uint16_t)(*(src + 1) & 0x3F) << 6) | *(src + 2) & 0x3F; 176 | *dst = lookupCP(cp); 177 | if (*dst == '\0') 178 | { 179 | *dst = '_'; 180 | ret = -1; 181 | } 182 | src += 3; 183 | goto cont; 184 | } 185 | 186 | // UTF-8 bytes: 11110www 10zzzzzz 10yyyyyy 10xxxxxx 187 | // Binary CP: 000wwwzz zzzzyyyy yyxxxxxx 188 | // CP range: U+010000 to U+10FFFF 189 | // 190 | if (!(*src & 0x08)) 191 | { 192 | *dst = '_'; // Currently unsupported 193 | ret = -1; 194 | src += 4; 195 | goto cont; 196 | } 197 | 198 | // Should not reach here 199 | // 200 | *dst = '_'; 201 | ret = -1; 202 | ++src; 203 | cont: 204 | ++dst; 205 | }; 206 | 207 | // Terminate string 208 | // 209 | *dst = '\0'; 210 | 211 | return ret; 212 | } 213 | -------------------------------------------------------------------------------- /unicode.h: -------------------------------------------------------------------------------- 1 | #ifndef _UNICODE_H_ 2 | #define _UNICODE_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * unicode.h: Unicode conversion routines 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | extern uint16_t unicodeTbl[128]; 30 | 31 | extern int LocalToUtf8(uint8_t __far *dst, uint8_t __far *src, int buflen); 32 | extern int Utf8ToLocal(uint8_t *dst, uint8_t *src); 33 | 34 | #endif /* _UNICODE_H_ */ 35 | -------------------------------------------------------------------------------- /unitbls/cp1258.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp1258 to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.01 5 | # Table format: Format A 6 | # Date: 04/15/98 7 | # 8 | # Contact: Shawn.Steele@microsoft.com 9 | # 10 | # General notes: none 11 | # 12 | # Format: Three tab-separated columns 13 | # Column #1 is the cp1258 code (in hex) 14 | # Column #2 is the Unicode (in hex as 0xXXXX) 15 | # Column #3 is the Unicode name (follows a comment sign, '#') 16 | # 17 | # The entries are in cp1258 order 18 | # 19 | 0x00 0x0000 #NULL 20 | 0x01 0x0001 #START OF HEADING 21 | 0x02 0x0002 #START OF TEXT 22 | 0x03 0x0003 #END OF TEXT 23 | 0x04 0x0004 #END OF TRANSMISSION 24 | 0x05 0x0005 #ENQUIRY 25 | 0x06 0x0006 #ACKNOWLEDGE 26 | 0x07 0x0007 #BELL 27 | 0x08 0x0008 #BACKSPACE 28 | 0x09 0x0009 #HORIZONTAL TABULATION 29 | 0x0A 0x000A #LINE FEED 30 | 0x0B 0x000B #VERTICAL TABULATION 31 | 0x0C 0x000C #FORM FEED 32 | 0x0D 0x000D #CARRIAGE RETURN 33 | 0x0E 0x000E #SHIFT OUT 34 | 0x0F 0x000F #SHIFT IN 35 | 0x10 0x0010 #DATA LINK ESCAPE 36 | 0x11 0x0011 #DEVICE CONTROL ONE 37 | 0x12 0x0012 #DEVICE CONTROL TWO 38 | 0x13 0x0013 #DEVICE CONTROL THREE 39 | 0x14 0x0014 #DEVICE CONTROL FOUR 40 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 41 | 0x16 0x0016 #SYNCHRONOUS IDLE 42 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 43 | 0x18 0x0018 #CANCEL 44 | 0x19 0x0019 #END OF MEDIUM 45 | 0x1A 0x001A #SUBSTITUTE 46 | 0x1B 0x001B #ESCAPE 47 | 0x1C 0x001C #FILE SEPARATOR 48 | 0x1D 0x001D #GROUP SEPARATOR 49 | 0x1E 0x001E #RECORD SEPARATOR 50 | 0x1F 0x001F #UNIT SEPARATOR 51 | 0x20 0x0020 #SPACE 52 | 0x21 0x0021 #EXCLAMATION MARK 53 | 0x22 0x0022 #QUOTATION MARK 54 | 0x23 0x0023 #NUMBER SIGN 55 | 0x24 0x0024 #DOLLAR SIGN 56 | 0x25 0x0025 #PERCENT SIGN 57 | 0x26 0x0026 #AMPERSAND 58 | 0x27 0x0027 #APOSTROPHE 59 | 0x28 0x0028 #LEFT PARENTHESIS 60 | 0x29 0x0029 #RIGHT PARENTHESIS 61 | 0x2A 0x002A #ASTERISK 62 | 0x2B 0x002B #PLUS SIGN 63 | 0x2C 0x002C #COMMA 64 | 0x2D 0x002D #HYPHEN-MINUS 65 | 0x2E 0x002E #FULL STOP 66 | 0x2F 0x002F #SOLIDUS 67 | 0x30 0x0030 #DIGIT ZERO 68 | 0x31 0x0031 #DIGIT ONE 69 | 0x32 0x0032 #DIGIT TWO 70 | 0x33 0x0033 #DIGIT THREE 71 | 0x34 0x0034 #DIGIT FOUR 72 | 0x35 0x0035 #DIGIT FIVE 73 | 0x36 0x0036 #DIGIT SIX 74 | 0x37 0x0037 #DIGIT SEVEN 75 | 0x38 0x0038 #DIGIT EIGHT 76 | 0x39 0x0039 #DIGIT NINE 77 | 0x3A 0x003A #COLON 78 | 0x3B 0x003B #SEMICOLON 79 | 0x3C 0x003C #LESS-THAN SIGN 80 | 0x3D 0x003D #EQUALS SIGN 81 | 0x3E 0x003E #GREATER-THAN SIGN 82 | 0x3F 0x003F #QUESTION MARK 83 | 0x40 0x0040 #COMMERCIAL AT 84 | 0x41 0x0041 #LATIN CAPITAL LETTER A 85 | 0x42 0x0042 #LATIN CAPITAL LETTER B 86 | 0x43 0x0043 #LATIN CAPITAL LETTER C 87 | 0x44 0x0044 #LATIN CAPITAL LETTER D 88 | 0x45 0x0045 #LATIN CAPITAL LETTER E 89 | 0x46 0x0046 #LATIN CAPITAL LETTER F 90 | 0x47 0x0047 #LATIN CAPITAL LETTER G 91 | 0x48 0x0048 #LATIN CAPITAL LETTER H 92 | 0x49 0x0049 #LATIN CAPITAL LETTER I 93 | 0x4A 0x004A #LATIN CAPITAL LETTER J 94 | 0x4B 0x004B #LATIN CAPITAL LETTER K 95 | 0x4C 0x004C #LATIN CAPITAL LETTER L 96 | 0x4D 0x004D #LATIN CAPITAL LETTER M 97 | 0x4E 0x004E #LATIN CAPITAL LETTER N 98 | 0x4F 0x004F #LATIN CAPITAL LETTER O 99 | 0x50 0x0050 #LATIN CAPITAL LETTER P 100 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 101 | 0x52 0x0052 #LATIN CAPITAL LETTER R 102 | 0x53 0x0053 #LATIN CAPITAL LETTER S 103 | 0x54 0x0054 #LATIN CAPITAL LETTER T 104 | 0x55 0x0055 #LATIN CAPITAL LETTER U 105 | 0x56 0x0056 #LATIN CAPITAL LETTER V 106 | 0x57 0x0057 #LATIN CAPITAL LETTER W 107 | 0x58 0x0058 #LATIN CAPITAL LETTER X 108 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 109 | 0x5A 0x005A #LATIN CAPITAL LETTER Z 110 | 0x5B 0x005B #LEFT SQUARE BRACKET 111 | 0x5C 0x005C #REVERSE SOLIDUS 112 | 0x5D 0x005D #RIGHT SQUARE BRACKET 113 | 0x5E 0x005E #CIRCUMFLEX ACCENT 114 | 0x5F 0x005F #LOW LINE 115 | 0x60 0x0060 #GRAVE ACCENT 116 | 0x61 0x0061 #LATIN SMALL LETTER A 117 | 0x62 0x0062 #LATIN SMALL LETTER B 118 | 0x63 0x0063 #LATIN SMALL LETTER C 119 | 0x64 0x0064 #LATIN SMALL LETTER D 120 | 0x65 0x0065 #LATIN SMALL LETTER E 121 | 0x66 0x0066 #LATIN SMALL LETTER F 122 | 0x67 0x0067 #LATIN SMALL LETTER G 123 | 0x68 0x0068 #LATIN SMALL LETTER H 124 | 0x69 0x0069 #LATIN SMALL LETTER I 125 | 0x6A 0x006A #LATIN SMALL LETTER J 126 | 0x6B 0x006B #LATIN SMALL LETTER K 127 | 0x6C 0x006C #LATIN SMALL LETTER L 128 | 0x6D 0x006D #LATIN SMALL LETTER M 129 | 0x6E 0x006E #LATIN SMALL LETTER N 130 | 0x6F 0x006F #LATIN SMALL LETTER O 131 | 0x70 0x0070 #LATIN SMALL LETTER P 132 | 0x71 0x0071 #LATIN SMALL LETTER Q 133 | 0x72 0x0072 #LATIN SMALL LETTER R 134 | 0x73 0x0073 #LATIN SMALL LETTER S 135 | 0x74 0x0074 #LATIN SMALL LETTER T 136 | 0x75 0x0075 #LATIN SMALL LETTER U 137 | 0x76 0x0076 #LATIN SMALL LETTER V 138 | 0x77 0x0077 #LATIN SMALL LETTER W 139 | 0x78 0x0078 #LATIN SMALL LETTER X 140 | 0x79 0x0079 #LATIN SMALL LETTER Y 141 | 0x7A 0x007A #LATIN SMALL LETTER Z 142 | 0x7B 0x007B #LEFT CURLY BRACKET 143 | 0x7C 0x007C #VERTICAL LINE 144 | 0x7D 0x007D #RIGHT CURLY BRACKET 145 | 0x7E 0x007E #TILDE 146 | 0x7F 0x007F #DELETE 147 | 0x80 0x20AC #EURO SIGN 148 | 0x81 #UNDEFINED 149 | 0x82 0x201A #SINGLE LOW-9 QUOTATION MARK 150 | 0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK 151 | 0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK 152 | 0x85 0x2026 #HORIZONTAL ELLIPSIS 153 | 0x86 0x2020 #DAGGER 154 | 0x87 0x2021 #DOUBLE DAGGER 155 | 0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT 156 | 0x89 0x2030 #PER MILLE SIGN 157 | 0x8A #UNDEFINED 158 | 0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK 159 | 0x8C 0x0152 #LATIN CAPITAL LIGATURE OE 160 | 0x8D #UNDEFINED 161 | 0x8E #UNDEFINED 162 | 0x8F #UNDEFINED 163 | 0x90 #UNDEFINED 164 | 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 165 | 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 166 | 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 167 | 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 168 | 0x95 0x2022 #BULLET 169 | 0x96 0x2013 #EN DASH 170 | 0x97 0x2014 #EM DASH 171 | 0x98 0x02DC #SMALL TILDE 172 | 0x99 0x2122 #TRADE MARK SIGN 173 | 0x9A #UNDEFINED 174 | 0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 175 | 0x9C 0x0153 #LATIN SMALL LIGATURE OE 176 | 0x9D #UNDEFINED 177 | 0x9E #UNDEFINED 178 | 0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS 179 | 0xA0 0x00A0 #NO-BREAK SPACE 180 | 0xA1 0x00A1 #INVERTED EXCLAMATION MARK 181 | 0xA2 0x00A2 #CENT SIGN 182 | 0xA3 0x00A3 #POUND SIGN 183 | 0xA4 0x00A4 #CURRENCY SIGN 184 | 0xA5 0x00A5 #YEN SIGN 185 | 0xA6 0x00A6 #BROKEN BAR 186 | 0xA7 0x00A7 #SECTION SIGN 187 | 0xA8 0x00A8 #DIAERESIS 188 | 0xA9 0x00A9 #COPYRIGHT SIGN 189 | 0xAA 0x00AA #FEMININE ORDINAL INDICATOR 190 | 0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 191 | 0xAC 0x00AC #NOT SIGN 192 | 0xAD 0x00AD #SOFT HYPHEN 193 | 0xAE 0x00AE #REGISTERED SIGN 194 | 0xAF 0x00AF #MACRON 195 | 0xB0 0x00B0 #DEGREE SIGN 196 | 0xB1 0x00B1 #PLUS-MINUS SIGN 197 | 0xB2 0x00B2 #SUPERSCRIPT TWO 198 | 0xB3 0x00B3 #SUPERSCRIPT THREE 199 | 0xB4 0x00B4 #ACUTE ACCENT 200 | 0xB5 0x00B5 #MICRO SIGN 201 | 0xB6 0x00B6 #PILCROW SIGN 202 | 0xB7 0x00B7 #MIDDLE DOT 203 | 0xB8 0x00B8 #CEDILLA 204 | 0xB9 0x00B9 #SUPERSCRIPT ONE 205 | 0xBA 0x00BA #MASCULINE ORDINAL INDICATOR 206 | 0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 207 | 0xBC 0x00BC #VULGAR FRACTION ONE QUARTER 208 | 0xBD 0x00BD #VULGAR FRACTION ONE HALF 209 | 0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS 210 | 0xBF 0x00BF #INVERTED QUESTION MARK 211 | 0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE 212 | 0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE 213 | 0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 214 | 0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE 215 | 0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS 216 | 0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE 217 | 0xC6 0x00C6 #LATIN CAPITAL LETTER AE 218 | 0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA 219 | 0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE 220 | 0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE 221 | 0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 222 | 0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS 223 | 0xCC 0x0300 #COMBINING GRAVE ACCENT 224 | 0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE 225 | 0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 226 | 0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS 227 | 0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE 228 | 0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE 229 | 0xD2 0x0309 #COMBINING HOOK ABOVE 230 | 0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE 231 | 0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 232 | 0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN 233 | 0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS 234 | 0xD7 0x00D7 #MULTIPLICATION SIGN 235 | 0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE 236 | 0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE 237 | 0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE 238 | 0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 239 | 0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS 240 | 0xDD 0x01AF #LATIN CAPITAL LETTER U WITH HORN 241 | 0xDE 0x0303 #COMBINING TILDE 242 | 0xDF 0x00DF #LATIN SMALL LETTER SHARP S 243 | 0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE 244 | 0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE 245 | 0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 246 | 0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE 247 | 0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS 248 | 0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE 249 | 0xE6 0x00E6 #LATIN SMALL LETTER AE 250 | 0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA 251 | 0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE 252 | 0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE 253 | 0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX 254 | 0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS 255 | 0xEC 0x0301 #COMBINING ACUTE ACCENT 256 | 0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE 257 | 0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX 258 | 0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS 259 | 0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE 260 | 0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE 261 | 0xF2 0x0323 #COMBINING DOT BELOW 262 | 0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE 263 | 0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 264 | 0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN 265 | 0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS 266 | 0xF7 0x00F7 #DIVISION SIGN 267 | 0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE 268 | 0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE 269 | 0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE 270 | 0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX 271 | 0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS 272 | 0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN 273 | 0xFE 0x20AB #DONG SIGN 274 | 0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS 275 | -------------------------------------------------------------------------------- /unitbls/cp1258.txt.patch: -------------------------------------------------------------------------------- 1 | --- cp1258.txt.orig 2022-09-04 08:16:48.766919133 +0200 2 | +++ cp1258.txt 2022-09-04 08:00:18.406902298 +0200 3 | @@ -1,3 +1,4 @@ 4 | +# _DOSVietNam 5 | # 6 | # Name: cp1258 to Unicode table 7 | # Unicode version: 2.0 8 | -------------------------------------------------------------------------------- /unitbls/cp720.txt: -------------------------------------------------------------------------------- 1 | # _DOSArabic2 2 | 82 E9 3 | 83 E2 4 | 5 | 85 E0 6 | 7 | 87 E7 8 | 88 EA 9 | 89 EB 10 | 8A E8 11 | 8B EF 12 | 8C EE 13 | 14 | 91 651 15 | 92 652 16 | 93 F4 17 | 94 A4 18 | 95 640 19 | 96 FB 20 | 97 F9 21 | 98 621 22 | 99 622 23 | 9A 623 24 | 9B 624 25 | 9C A3 26 | 9D 625 27 | 9E 626 28 | 9F 627 29 | A0 628 30 | A1 629 31 | A2 62A 32 | A3 62B 33 | A4 62C 34 | A5 62D 35 | A6 62E 36 | A7 62F 37 | A8 630 38 | A9 631 39 | AA 632 40 | AB 633 41 | AC 634 42 | AD 635 43 | AE AB 44 | AF BB 45 | B0 2591 46 | B1 2592 47 | B2 2593 48 | B3 2502 49 | B4 2524 50 | B5 2561 51 | B6 2562 52 | B7 2556 53 | B8 2555 54 | B9 2563 55 | BA 2551 56 | BB 2557 57 | BC 255D 58 | BD 255C 59 | BE 255B 60 | BF 2510 61 | C0 2514 62 | C1 2534 63 | C2 252C 64 | C3 251C 65 | C4 2500 66 | C5 253C 67 | C6 255E 68 | C7 255F 69 | C8 255A 70 | C9 2554 71 | CA 2569 72 | CB 2566 73 | CC 2560 74 | CD 2550 75 | CE 256C 76 | CF 2567 77 | D0 2568 78 | D1 2564 79 | D2 2565 80 | D3 2559 81 | D4 2558 82 | D5 2552 83 | D6 2553 84 | D7 256B 85 | D8 256A 86 | D9 2518 87 | DA 250C 88 | DB 2588 89 | DC 2584 90 | DD 258C 91 | DE 2590 92 | DF 2580 93 | E0 636 94 | E1 637 95 | E2 638 96 | E3 639 97 | E4 63A 98 | E5 641 99 | E6 B5 100 | E7 642 101 | E8 643 102 | E9 644 103 | EA 645 104 | EB 646 105 | EC 647 106 | ED 648 107 | EE 649 108 | EF 64A 109 | F0 2261 110 | F1 64B 111 | F2 64C 112 | F3 64D 113 | F4 64E 114 | F5 64F 115 | F6 650 116 | F7 2248 117 | F8 B0 118 | F9 2219 119 | FA B7 120 | FB 221A 121 | FC 207F 122 | FD B2 123 | FE 25A0 124 | FF A0 125 | -------------------------------------------------------------------------------- /unitbls/cp850.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp850_DOSLatin1 to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp850_DOSLatin1 code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp850_DOSLatin1 order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x0025 #PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 147 | 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 148 | 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 149 | 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 150 | 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 151 | 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 152 | 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 153 | 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 154 | 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 155 | 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 156 | 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 157 | 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 158 | 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 159 | 0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE 160 | 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 161 | 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 162 | 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 163 | 0x91 0x00e6 #LATIN SMALL LIGATURE AE 164 | 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 165 | 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 166 | 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 167 | 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 168 | 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 169 | 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 170 | 0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 171 | 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 172 | 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 173 | 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 174 | 0x9c 0x00a3 #POUND SIGN 175 | 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 176 | 0x9e 0x00d7 #MULTIPLICATION SIGN 177 | 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 178 | 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 179 | 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 180 | 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 181 | 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 182 | 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 183 | 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 184 | 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 185 | 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 186 | 0xa8 0x00bf #INVERTED QUESTION MARK 187 | 0xa9 0x00ae #REGISTERED SIGN 188 | 0xaa 0x00ac #NOT SIGN 189 | 0xab 0x00bd #VULGAR FRACTION ONE HALF 190 | 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 191 | 0xad 0x00a1 #INVERTED EXCLAMATION MARK 192 | 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 193 | 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 194 | 0xb0 0x2591 #LIGHT SHADE 195 | 0xb1 0x2592 #MEDIUM SHADE 196 | 0xb2 0x2593 #DARK SHADE 197 | 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 198 | 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 199 | 0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 200 | 0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 201 | 0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 202 | 0xb8 0x00a9 #COPYRIGHT SIGN 203 | 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 204 | 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 205 | 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 206 | 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 207 | 0xbd 0x00a2 #CENT SIGN 208 | 0xbe 0x00a5 #YEN SIGN 209 | 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 210 | 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 211 | 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 212 | 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 213 | 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 214 | 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 215 | 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 216 | 0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE 217 | 0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE 218 | 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 219 | 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 220 | 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 221 | 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 222 | 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 223 | 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 224 | 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 225 | 0xcf 0x00a4 #CURRENCY SIGN 226 | 0xd0 0x00f0 #LATIN SMALL LETTER ETH 227 | 0xd1 0x00d0 #LATIN CAPITAL LETTER ETH 228 | 0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 229 | 0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 230 | 0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 231 | 0xd5 0x0131 #LATIN SMALL LETTER DOTLESS I 232 | 0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 233 | 0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 234 | 0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS 235 | 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 236 | 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 237 | 0xdb 0x2588 #FULL BLOCK 238 | 0xdc 0x2584 #LOWER HALF BLOCK 239 | 0xdd 0x00a6 #BROKEN BAR 240 | 0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE 241 | 0xdf 0x2580 #UPPER HALF BLOCK 242 | 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 243 | 0xe1 0x00df #LATIN SMALL LETTER SHARP S 244 | 0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 245 | 0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE 246 | 0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE 247 | 0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 248 | 0xe6 0x00b5 #MICRO SIGN 249 | 0xe7 0x00fe #LATIN SMALL LETTER THORN 250 | 0xe8 0x00de #LATIN CAPITAL LETTER THORN 251 | 0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 252 | 0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 253 | 0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 254 | 0xec 0x00fd #LATIN SMALL LETTER Y WITH ACUTE 255 | 0xed 0x00dd #LATIN CAPITAL LETTER Y WITH ACUTE 256 | 0xee 0x00af #MACRON 257 | 0xef 0x00b4 #ACUTE ACCENT 258 | 0xf0 0x00ad #SOFT HYPHEN 259 | 0xf1 0x00b1 #PLUS-MINUS SIGN 260 | 0xf2 0x2017 #DOUBLE LOW LINE 261 | 0xf3 0x00be #VULGAR FRACTION THREE QUARTERS 262 | 0xf4 0x00b6 #PILCROW SIGN 263 | 0xf5 0x00a7 #SECTION SIGN 264 | 0xf6 0x00f7 #DIVISION SIGN 265 | 0xf7 0x00b8 #CEDILLA 266 | 0xf8 0x00b0 #DEGREE SIGN 267 | 0xf9 0x00a8 #DIAERESIS 268 | 0xfa 0x00b7 #MIDDLE DOT 269 | 0xfb 0x00b9 #SUPERSCRIPT ONE 270 | 0xfc 0x00b3 #SUPERSCRIPT THREE 271 | 0xfd 0x00b2 #SUPERSCRIPT TWO 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff 0x00a0 #NO-BREAK SPACE 274 | -------------------------------------------------------------------------------- /unitbls/cp855.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp855_DOSCyrillic to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp855_DOSCyrillic code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp855_DOSCyrillic order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x0025 #PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 0x0452 #CYRILLIC SMALL LETTER DJE 147 | 0x81 0x0402 #CYRILLIC CAPITAL LETTER DJE 148 | 0x82 0x0453 #CYRILLIC SMALL LETTER GJE 149 | 0x83 0x0403 #CYRILLIC CAPITAL LETTER GJE 150 | 0x84 0x0451 #CYRILLIC SMALL LETTER IO 151 | 0x85 0x0401 #CYRILLIC CAPITAL LETTER IO 152 | 0x86 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE 153 | 0x87 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE 154 | 0x88 0x0455 #CYRILLIC SMALL LETTER DZE 155 | 0x89 0x0405 #CYRILLIC CAPITAL LETTER DZE 156 | 0x8a 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 157 | 0x8b 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I 158 | 0x8c 0x0457 #CYRILLIC SMALL LETTER YI 159 | 0x8d 0x0407 #CYRILLIC CAPITAL LETTER YI 160 | 0x8e 0x0458 #CYRILLIC SMALL LETTER JE 161 | 0x8f 0x0408 #CYRILLIC CAPITAL LETTER JE 162 | 0x90 0x0459 #CYRILLIC SMALL LETTER LJE 163 | 0x91 0x0409 #CYRILLIC CAPITAL LETTER LJE 164 | 0x92 0x045a #CYRILLIC SMALL LETTER NJE 165 | 0x93 0x040a #CYRILLIC CAPITAL LETTER NJE 166 | 0x94 0x045b #CYRILLIC SMALL LETTER TSHE 167 | 0x95 0x040b #CYRILLIC CAPITAL LETTER TSHE 168 | 0x96 0x045c #CYRILLIC SMALL LETTER KJE 169 | 0x97 0x040c #CYRILLIC CAPITAL LETTER KJE 170 | 0x98 0x045e #CYRILLIC SMALL LETTER SHORT U 171 | 0x99 0x040e #CYRILLIC CAPITAL LETTER SHORT U 172 | 0x9a 0x045f #CYRILLIC SMALL LETTER DZHE 173 | 0x9b 0x040f #CYRILLIC CAPITAL LETTER DZHE 174 | 0x9c 0x044e #CYRILLIC SMALL LETTER YU 175 | 0x9d 0x042e #CYRILLIC CAPITAL LETTER YU 176 | 0x9e 0x044a #CYRILLIC SMALL LETTER HARD SIGN 177 | 0x9f 0x042a #CYRILLIC CAPITAL LETTER HARD SIGN 178 | 0xa0 0x0430 #CYRILLIC SMALL LETTER A 179 | 0xa1 0x0410 #CYRILLIC CAPITAL LETTER A 180 | 0xa2 0x0431 #CYRILLIC SMALL LETTER BE 181 | 0xa3 0x0411 #CYRILLIC CAPITAL LETTER BE 182 | 0xa4 0x0446 #CYRILLIC SMALL LETTER TSE 183 | 0xa5 0x0426 #CYRILLIC CAPITAL LETTER TSE 184 | 0xa6 0x0434 #CYRILLIC SMALL LETTER DE 185 | 0xa7 0x0414 #CYRILLIC CAPITAL LETTER DE 186 | 0xa8 0x0435 #CYRILLIC SMALL LETTER IE 187 | 0xa9 0x0415 #CYRILLIC CAPITAL LETTER IE 188 | 0xaa 0x0444 #CYRILLIC SMALL LETTER EF 189 | 0xab 0x0424 #CYRILLIC CAPITAL LETTER EF 190 | 0xac 0x0433 #CYRILLIC SMALL LETTER GHE 191 | 0xad 0x0413 #CYRILLIC CAPITAL LETTER GHE 192 | 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 193 | 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 194 | 0xb0 0x2591 #LIGHT SHADE 195 | 0xb1 0x2592 #MEDIUM SHADE 196 | 0xb2 0x2593 #DARK SHADE 197 | 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 198 | 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 199 | 0xb5 0x0445 #CYRILLIC SMALL LETTER HA 200 | 0xb6 0x0425 #CYRILLIC CAPITAL LETTER HA 201 | 0xb7 0x0438 #CYRILLIC SMALL LETTER I 202 | 0xb8 0x0418 #CYRILLIC CAPITAL LETTER I 203 | 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 204 | 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 205 | 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 206 | 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 207 | 0xbd 0x0439 #CYRILLIC SMALL LETTER SHORT I 208 | 0xbe 0x0419 #CYRILLIC CAPITAL LETTER SHORT I 209 | 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 210 | 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 211 | 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 212 | 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 213 | 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 214 | 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 215 | 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 216 | 0xc6 0x043a #CYRILLIC SMALL LETTER KA 217 | 0xc7 0x041a #CYRILLIC CAPITAL LETTER KA 218 | 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 219 | 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 220 | 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 221 | 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 222 | 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 223 | 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 224 | 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 225 | 0xcf 0x00a4 #CURRENCY SIGN 226 | 0xd0 0x043b #CYRILLIC SMALL LETTER EL 227 | 0xd1 0x041b #CYRILLIC CAPITAL LETTER EL 228 | 0xd2 0x043c #CYRILLIC SMALL LETTER EM 229 | 0xd3 0x041c #CYRILLIC CAPITAL LETTER EM 230 | 0xd4 0x043d #CYRILLIC SMALL LETTER EN 231 | 0xd5 0x041d #CYRILLIC CAPITAL LETTER EN 232 | 0xd6 0x043e #CYRILLIC SMALL LETTER O 233 | 0xd7 0x041e #CYRILLIC CAPITAL LETTER O 234 | 0xd8 0x043f #CYRILLIC SMALL LETTER PE 235 | 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 236 | 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 237 | 0xdb 0x2588 #FULL BLOCK 238 | 0xdc 0x2584 #LOWER HALF BLOCK 239 | 0xdd 0x041f #CYRILLIC CAPITAL LETTER PE 240 | 0xde 0x044f #CYRILLIC SMALL LETTER YA 241 | 0xdf 0x2580 #UPPER HALF BLOCK 242 | 0xe0 0x042f #CYRILLIC CAPITAL LETTER YA 243 | 0xe1 0x0440 #CYRILLIC SMALL LETTER ER 244 | 0xe2 0x0420 #CYRILLIC CAPITAL LETTER ER 245 | 0xe3 0x0441 #CYRILLIC SMALL LETTER ES 246 | 0xe4 0x0421 #CYRILLIC CAPITAL LETTER ES 247 | 0xe5 0x0442 #CYRILLIC SMALL LETTER TE 248 | 0xe6 0x0422 #CYRILLIC CAPITAL LETTER TE 249 | 0xe7 0x0443 #CYRILLIC SMALL LETTER U 250 | 0xe8 0x0423 #CYRILLIC CAPITAL LETTER U 251 | 0xe9 0x0436 #CYRILLIC SMALL LETTER ZHE 252 | 0xea 0x0416 #CYRILLIC CAPITAL LETTER ZHE 253 | 0xeb 0x0432 #CYRILLIC SMALL LETTER VE 254 | 0xec 0x0412 #CYRILLIC CAPITAL LETTER VE 255 | 0xed 0x044c #CYRILLIC SMALL LETTER SOFT SIGN 256 | 0xee 0x042c #CYRILLIC CAPITAL LETTER SOFT SIGN 257 | 0xef 0x2116 #NUMERO SIGN 258 | 0xf0 0x00ad #SOFT HYPHEN 259 | 0xf1 0x044b #CYRILLIC SMALL LETTER YERU 260 | 0xf2 0x042b #CYRILLIC CAPITAL LETTER YERU 261 | 0xf3 0x0437 #CYRILLIC SMALL LETTER ZE 262 | 0xf4 0x0417 #CYRILLIC CAPITAL LETTER ZE 263 | 0xf5 0x0448 #CYRILLIC SMALL LETTER SHA 264 | 0xf6 0x0428 #CYRILLIC CAPITAL LETTER SHA 265 | 0xf7 0x044d #CYRILLIC SMALL LETTER E 266 | 0xf8 0x042d #CYRILLIC CAPITAL LETTER E 267 | 0xf9 0x0449 #CYRILLIC SMALL LETTER SHCHA 268 | 0xfa 0x0429 #CYRILLIC CAPITAL LETTER SHCHA 269 | 0xfb 0x0447 #CYRILLIC SMALL LETTER CHE 270 | 0xfc 0x0427 #CYRILLIC CAPITAL LETTER CHE 271 | 0xfd 0x00a7 #SECTION SIGN 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff 0x00a0 #NO-BREAK SPACE 274 | -------------------------------------------------------------------------------- /unitbls/cp857.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp857_DOSTurkish to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp857_DOSTurkish code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp857_DOSTurkish order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x0025 #PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA 147 | 0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS 148 | 0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE 149 | 0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX 150 | 0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS 151 | 0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE 152 | 0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE 153 | 0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA 154 | 0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX 155 | 0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS 156 | 0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE 157 | 0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS 158 | 0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX 159 | 0x8d 0x0131 #LATIN SMALL LETTER DOTLESS I 160 | 0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS 161 | 0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE 162 | 0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE 163 | 0x91 0x00e6 #LATIN SMALL LIGATURE AE 164 | 0x92 0x00c6 #LATIN CAPITAL LIGATURE AE 165 | 0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX 166 | 0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS 167 | 0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE 168 | 0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX 169 | 0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE 170 | 0x98 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE 171 | 0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS 172 | 0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS 173 | 0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE 174 | 0x9c 0x00a3 #POUND SIGN 175 | 0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE 176 | 0x9e 0x015e #LATIN CAPITAL LETTER S WITH CEDILLA 177 | 0x9f 0x015f #LATIN SMALL LETTER S WITH CEDILLA 178 | 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 179 | 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 180 | 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 181 | 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 182 | 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 183 | 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 184 | 0xa6 0x011e #LATIN CAPITAL LETTER G WITH BREVE 185 | 0xa7 0x011f #LATIN SMALL LETTER G WITH BREVE 186 | 0xa8 0x00bf #INVERTED QUESTION MARK 187 | 0xa9 0x00ae #REGISTERED SIGN 188 | 0xaa 0x00ac #NOT SIGN 189 | 0xab 0x00bd #VULGAR FRACTION ONE HALF 190 | 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 191 | 0xad 0x00a1 #INVERTED EXCLAMATION MARK 192 | 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 193 | 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 194 | 0xb0 0x2591 #LIGHT SHADE 195 | 0xb1 0x2592 #MEDIUM SHADE 196 | 0xb2 0x2593 #DARK SHADE 197 | 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 198 | 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 199 | 0xb5 0x00c1 #LATIN CAPITAL LETTER A WITH ACUTE 200 | 0xb6 0x00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX 201 | 0xb7 0x00c0 #LATIN CAPITAL LETTER A WITH GRAVE 202 | 0xb8 0x00a9 #COPYRIGHT SIGN 203 | 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 204 | 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 205 | 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 206 | 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 207 | 0xbd 0x00a2 #CENT SIGN 208 | 0xbe 0x00a5 #YEN SIGN 209 | 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 210 | 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 211 | 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 212 | 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 213 | 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 214 | 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 215 | 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 216 | 0xc6 0x00e3 #LATIN SMALL LETTER A WITH TILDE 217 | 0xc7 0x00c3 #LATIN CAPITAL LETTER A WITH TILDE 218 | 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 219 | 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 220 | 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 221 | 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 222 | 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 223 | 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 224 | 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 225 | 0xcf 0x00a4 #CURRENCY SIGN 226 | 0xd0 0x00ba #MASCULINE ORDINAL INDICATOR 227 | 0xd1 0x00aa #FEMININE ORDINAL INDICATOR 228 | 0xd2 0x00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX 229 | 0xd3 0x00cb #LATIN CAPITAL LETTER E WITH DIAERESIS 230 | 0xd4 0x00c8 #LATIN CAPITAL LETTER E WITH GRAVE 231 | 0xd5 #UNDEFINED 232 | 0xd6 0x00cd #LATIN CAPITAL LETTER I WITH ACUTE 233 | 0xd7 0x00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX 234 | 0xd8 0x00cf #LATIN CAPITAL LETTER I WITH DIAERESIS 235 | 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 236 | 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 237 | 0xdb 0x2588 #FULL BLOCK 238 | 0xdc 0x2584 #LOWER HALF BLOCK 239 | 0xdd 0x00a6 #BROKEN BAR 240 | 0xde 0x00cc #LATIN CAPITAL LETTER I WITH GRAVE 241 | 0xdf 0x2580 #UPPER HALF BLOCK 242 | 0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE 243 | 0xe1 0x00df #LATIN SMALL LETTER SHARP S 244 | 0xe2 0x00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX 245 | 0xe3 0x00d2 #LATIN CAPITAL LETTER O WITH GRAVE 246 | 0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE 247 | 0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE 248 | 0xe6 0x00b5 #MICRO SIGN 249 | 0xe7 #UNDEFINED 250 | 0xe8 0x00d7 #MULTIPLICATION SIGN 251 | 0xe9 0x00da #LATIN CAPITAL LETTER U WITH ACUTE 252 | 0xea 0x00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX 253 | 0xeb 0x00d9 #LATIN CAPITAL LETTER U WITH GRAVE 254 | 0xec 0x00ec #LATIN SMALL LETTER I WITH GRAVE 255 | 0xed 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS 256 | 0xee 0x00af #MACRON 257 | 0xef 0x00b4 #ACUTE ACCENT 258 | 0xf0 0x00ad #SOFT HYPHEN 259 | 0xf1 0x00b1 #PLUS-MINUS SIGN 260 | 0xf2 #UNDEFINED 261 | 0xf3 0x00be #VULGAR FRACTION THREE QUARTERS 262 | 0xf4 0x00b6 #PILCROW SIGN 263 | 0xf5 0x00a7 #SECTION SIGN 264 | 0xf6 0x00f7 #DIVISION SIGN 265 | 0xf7 0x00b8 #CEDILLA 266 | 0xf8 0x00b0 #DEGREE SIGN 267 | 0xf9 0x00a8 #DIAERESIS 268 | 0xfa 0x00b7 #MIDDLE DOT 269 | 0xfb 0x00b9 #SUPERSCRIPT ONE 270 | 0xfc 0x00b3 #SUPERSCRIPT THREE 271 | 0xfd 0x00b2 #SUPERSCRIPT TWO 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff 0x00a0 #NO-BREAK SPACE 274 | -------------------------------------------------------------------------------- /unitbls/cp862.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp862_DOSHebrew to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp862_DOSHebrew code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp862_DOSHebrew order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x0025 #PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 0x05d0 #HEBREW LETTER ALEF 147 | 0x81 0x05d1 #HEBREW LETTER BET 148 | 0x82 0x05d2 #HEBREW LETTER GIMEL 149 | 0x83 0x05d3 #HEBREW LETTER DALET 150 | 0x84 0x05d4 #HEBREW LETTER HE 151 | 0x85 0x05d5 #HEBREW LETTER VAV 152 | 0x86 0x05d6 #HEBREW LETTER ZAYIN 153 | 0x87 0x05d7 #HEBREW LETTER HET 154 | 0x88 0x05d8 #HEBREW LETTER TET 155 | 0x89 0x05d9 #HEBREW LETTER YOD 156 | 0x8a 0x05da #HEBREW LETTER FINAL KAF 157 | 0x8b 0x05db #HEBREW LETTER KAF 158 | 0x8c 0x05dc #HEBREW LETTER LAMED 159 | 0x8d 0x05dd #HEBREW LETTER FINAL MEM 160 | 0x8e 0x05de #HEBREW LETTER MEM 161 | 0x8f 0x05df #HEBREW LETTER FINAL NUN 162 | 0x90 0x05e0 #HEBREW LETTER NUN 163 | 0x91 0x05e1 #HEBREW LETTER SAMEKH 164 | 0x92 0x05e2 #HEBREW LETTER AYIN 165 | 0x93 0x05e3 #HEBREW LETTER FINAL PE 166 | 0x94 0x05e4 #HEBREW LETTER PE 167 | 0x95 0x05e5 #HEBREW LETTER FINAL TSADI 168 | 0x96 0x05e6 #HEBREW LETTER TSADI 169 | 0x97 0x05e7 #HEBREW LETTER QOF 170 | 0x98 0x05e8 #HEBREW LETTER RESH 171 | 0x99 0x05e9 #HEBREW LETTER SHIN 172 | 0x9a 0x05ea #HEBREW LETTER TAV 173 | 0x9b 0x00a2 #CENT SIGN 174 | 0x9c 0x00a3 #POUND SIGN 175 | 0x9d 0x00a5 #YEN SIGN 176 | 0x9e 0x20a7 #PESETA SIGN 177 | 0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK 178 | 0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE 179 | 0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE 180 | 0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE 181 | 0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE 182 | 0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE 183 | 0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE 184 | 0xa6 0x00aa #FEMININE ORDINAL INDICATOR 185 | 0xa7 0x00ba #MASCULINE ORDINAL INDICATOR 186 | 0xa8 0x00bf #INVERTED QUESTION MARK 187 | 0xa9 0x2310 #REVERSED NOT SIGN 188 | 0xaa 0x00ac #NOT SIGN 189 | 0xab 0x00bd #VULGAR FRACTION ONE HALF 190 | 0xac 0x00bc #VULGAR FRACTION ONE QUARTER 191 | 0xad 0x00a1 #INVERTED EXCLAMATION MARK 192 | 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 193 | 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 194 | 0xb0 0x2591 #LIGHT SHADE 195 | 0xb1 0x2592 #MEDIUM SHADE 196 | 0xb2 0x2593 #DARK SHADE 197 | 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 198 | 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 199 | 0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE 200 | 0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE 201 | 0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE 202 | 0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE 203 | 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 204 | 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 205 | 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 206 | 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 207 | 0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE 208 | 0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE 209 | 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 210 | 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 211 | 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 212 | 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 213 | 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 214 | 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 215 | 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 216 | 0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE 217 | 0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE 218 | 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 219 | 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 220 | 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 221 | 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 222 | 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 223 | 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 224 | 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 225 | 0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE 226 | 0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE 227 | 0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE 228 | 0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE 229 | 0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE 230 | 0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE 231 | 0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE 232 | 0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE 233 | 0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE 234 | 0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE 235 | 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 236 | 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 237 | 0xdb 0x2588 #FULL BLOCK 238 | 0xdc 0x2584 #LOWER HALF BLOCK 239 | 0xdd 0x258c #LEFT HALF BLOCK 240 | 0xde 0x2590 #RIGHT HALF BLOCK 241 | 0xdf 0x2580 #UPPER HALF BLOCK 242 | 0xe0 0x03b1 #GREEK SMALL LETTER ALPHA 243 | 0xe1 0x00df #LATIN SMALL LETTER SHARP S (GERMAN) 244 | 0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA 245 | 0xe3 0x03c0 #GREEK SMALL LETTER PI 246 | 0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA 247 | 0xe5 0x03c3 #GREEK SMALL LETTER SIGMA 248 | 0xe6 0x00b5 #MICRO SIGN 249 | 0xe7 0x03c4 #GREEK SMALL LETTER TAU 250 | 0xe8 0x03a6 #GREEK CAPITAL LETTER PHI 251 | 0xe9 0x0398 #GREEK CAPITAL LETTER THETA 252 | 0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA 253 | 0xeb 0x03b4 #GREEK SMALL LETTER DELTA 254 | 0xec 0x221e #INFINITY 255 | 0xed 0x03c6 #GREEK SMALL LETTER PHI 256 | 0xee 0x03b5 #GREEK SMALL LETTER EPSILON 257 | 0xef 0x2229 #INTERSECTION 258 | 0xf0 0x2261 #IDENTICAL TO 259 | 0xf1 0x00b1 #PLUS-MINUS SIGN 260 | 0xf2 0x2265 #GREATER-THAN OR EQUAL TO 261 | 0xf3 0x2264 #LESS-THAN OR EQUAL TO 262 | 0xf4 0x2320 #TOP HALF INTEGRAL 263 | 0xf5 0x2321 #BOTTOM HALF INTEGRAL 264 | 0xf6 0x00f7 #DIVISION SIGN 265 | 0xf7 0x2248 #ALMOST EQUAL TO 266 | 0xf8 0x00b0 #DEGREE SIGN 267 | 0xf9 0x2219 #BULLET OPERATOR 268 | 0xfa 0x00b7 #MIDDLE DOT 269 | 0xfb 0x221a #SQUARE ROOT 270 | 0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N 271 | 0xfd 0x00b2 #SUPERSCRIPT TWO 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff 0x00a0 #NO-BREAK SPACE 274 | -------------------------------------------------------------------------------- /unitbls/cp864.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp864_DOSArabic to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp864_DOSArabic code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp864_DOSArabic order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x066a #ARABIC PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 0x00b0 #DEGREE SIGN 147 | 0x81 0x00b7 #MIDDLE DOT 148 | 0x82 0x2219 #BULLET OPERATOR 149 | 0x83 0x221a #SQUARE ROOT 150 | 0x84 0x2592 #MEDIUM SHADE 151 | 0x85 0x2500 #FORMS LIGHT HORIZONTAL 152 | 0x86 0x2502 #FORMS LIGHT VERTICAL 153 | 0x87 0x253c #FORMS LIGHT VERTICAL AND HORIZONTAL 154 | 0x88 0x2524 #FORMS LIGHT VERTICAL AND LEFT 155 | 0x89 0x252c #FORMS LIGHT DOWN AND HORIZONTAL 156 | 0x8a 0x251c #FORMS LIGHT VERTICAL AND RIGHT 157 | 0x8b 0x2534 #FORMS LIGHT UP AND HORIZONTAL 158 | 0x8c 0x2510 #FORMS LIGHT DOWN AND LEFT 159 | 0x8d 0x250c #FORMS LIGHT DOWN AND RIGHT 160 | 0x8e 0x2514 #FORMS LIGHT UP AND RIGHT 161 | 0x8f 0x2518 #FORMS LIGHT UP AND LEFT 162 | 0x90 0x03b2 #GREEK SMALL BETA 163 | 0x91 0x221e #INFINITY 164 | 0x92 0x03c6 #GREEK SMALL PHI 165 | 0x93 0x00b1 #PLUS-OR-MINUS SIGN 166 | 0x94 0x00bd #FRACTION 1/2 167 | 0x95 0x00bc #FRACTION 1/4 168 | 0x96 0x2248 #ALMOST EQUAL TO 169 | 0x97 0x00ab #LEFT POINTING GUILLEMET 170 | 0x98 0x00bb #RIGHT POINTING GUILLEMET 171 | 0x99 0xfef7 #ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM 172 | 0x9a 0xfef8 #ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM 173 | 0x9b #UNDEFINED 174 | 0x9c #UNDEFINED 175 | 0x9d 0xfefb #ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM 176 | 0x9e 0xfefc #ARABIC LIGATURE LAM WITH ALEF FINAL FORM 177 | 0x9f #UNDEFINED 178 | 0xa0 0x00a0 #NON-BREAKING SPACE 179 | 0xa1 0x00ad #SOFT HYPHEN 180 | 0xa2 0xfe82 #ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM 181 | 0xa3 0x00a3 #POUND SIGN 182 | 0xa4 0x00a4 #CURRENCY SIGN 183 | 0xa5 0xfe84 #ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM 184 | 0xa6 #UNDEFINED 185 | 0xa7 #UNDEFINED 186 | 0xa8 0xfe8e #ARABIC LETTER ALEF FINAL FORM 187 | 0xa9 0xfe8f #ARABIC LETTER BEH ISOLATED FORM 188 | 0xaa 0xfe95 #ARABIC LETTER TEH ISOLATED FORM 189 | 0xab 0xfe99 #ARABIC LETTER THEH ISOLATED FORM 190 | 0xac 0x060c #ARABIC COMMA 191 | 0xad 0xfe9d #ARABIC LETTER JEEM ISOLATED FORM 192 | 0xae 0xfea1 #ARABIC LETTER HAH ISOLATED FORM 193 | 0xaf 0xfea5 #ARABIC LETTER KHAH ISOLATED FORM 194 | 0xb0 0x0660 #ARABIC-INDIC DIGIT ZERO 195 | 0xb1 0x0661 #ARABIC-INDIC DIGIT ONE 196 | 0xb2 0x0662 #ARABIC-INDIC DIGIT TWO 197 | 0xb3 0x0663 #ARABIC-INDIC DIGIT THREE 198 | 0xb4 0x0664 #ARABIC-INDIC DIGIT FOUR 199 | 0xb5 0x0665 #ARABIC-INDIC DIGIT FIVE 200 | 0xb6 0x0666 #ARABIC-INDIC DIGIT SIX 201 | 0xb7 0x0667 #ARABIC-INDIC DIGIT SEVEN 202 | 0xb8 0x0668 #ARABIC-INDIC DIGIT EIGHT 203 | 0xb9 0x0669 #ARABIC-INDIC DIGIT NINE 204 | 0xba 0xfed1 #ARABIC LETTER FEH ISOLATED FORM 205 | 0xbb 0x061b #ARABIC SEMICOLON 206 | 0xbc 0xfeb1 #ARABIC LETTER SEEN ISOLATED FORM 207 | 0xbd 0xfeb5 #ARABIC LETTER SHEEN ISOLATED FORM 208 | 0xbe 0xfeb9 #ARABIC LETTER SAD ISOLATED FORM 209 | 0xbf 0x061f #ARABIC QUESTION MARK 210 | 0xc0 0x00a2 #CENT SIGN 211 | 0xc1 0xfe80 #ARABIC LETTER HAMZA ISOLATED FORM 212 | 0xc2 0xfe81 #ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM 213 | 0xc3 0xfe83 #ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM 214 | 0xc4 0xfe85 #ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM 215 | 0xc5 0xfeca #ARABIC LETTER AIN FINAL FORM 216 | 0xc6 0xfe8b #ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM 217 | 0xc7 0xfe8d #ARABIC LETTER ALEF ISOLATED FORM 218 | 0xc8 0xfe91 #ARABIC LETTER BEH INITIAL FORM 219 | 0xc9 0xfe93 #ARABIC LETTER TEH MARBUTA ISOLATED FORM 220 | 0xca 0xfe97 #ARABIC LETTER TEH INITIAL FORM 221 | 0xcb 0xfe9b #ARABIC LETTER THEH INITIAL FORM 222 | 0xcc 0xfe9f #ARABIC LETTER JEEM INITIAL FORM 223 | 0xcd 0xfea3 #ARABIC LETTER HAH INITIAL FORM 224 | 0xce 0xfea7 #ARABIC LETTER KHAH INITIAL FORM 225 | 0xcf 0xfea9 #ARABIC LETTER DAL ISOLATED FORM 226 | 0xd0 0xfeab #ARABIC LETTER THAL ISOLATED FORM 227 | 0xd1 0xfead #ARABIC LETTER REH ISOLATED FORM 228 | 0xd2 0xfeaf #ARABIC LETTER ZAIN ISOLATED FORM 229 | 0xd3 0xfeb3 #ARABIC LETTER SEEN INITIAL FORM 230 | 0xd4 0xfeb7 #ARABIC LETTER SHEEN INITIAL FORM 231 | 0xd5 0xfebb #ARABIC LETTER SAD INITIAL FORM 232 | 0xd6 0xfebf #ARABIC LETTER DAD INITIAL FORM 233 | 0xd7 0xfec1 #ARABIC LETTER TAH ISOLATED FORM 234 | 0xd8 0xfec5 #ARABIC LETTER ZAH ISOLATED FORM 235 | 0xd9 0xfecb #ARABIC LETTER AIN INITIAL FORM 236 | 0xda 0xfecf #ARABIC LETTER GHAIN INITIAL FORM 237 | 0xdb 0x00a6 #BROKEN VERTICAL BAR 238 | 0xdc 0x00ac #NOT SIGN 239 | 0xdd 0x00f7 #DIVISION SIGN 240 | 0xde 0x00d7 #MULTIPLICATION SIGN 241 | 0xdf 0xfec9 #ARABIC LETTER AIN ISOLATED FORM 242 | 0xe0 0x0640 #ARABIC TATWEEL 243 | 0xe1 0xfed3 #ARABIC LETTER FEH INITIAL FORM 244 | 0xe2 0xfed7 #ARABIC LETTER QAF INITIAL FORM 245 | 0xe3 0xfedb #ARABIC LETTER KAF INITIAL FORM 246 | 0xe4 0xfedf #ARABIC LETTER LAM INITIAL FORM 247 | 0xe5 0xfee3 #ARABIC LETTER MEEM INITIAL FORM 248 | 0xe6 0xfee7 #ARABIC LETTER NOON INITIAL FORM 249 | 0xe7 0xfeeb #ARABIC LETTER HEH INITIAL FORM 250 | 0xe8 0xfeed #ARABIC LETTER WAW ISOLATED FORM 251 | 0xe9 0xfeef #ARABIC LETTER ALEF MAKSURA ISOLATED FORM 252 | 0xea 0xfef3 #ARABIC LETTER YEH INITIAL FORM 253 | 0xeb 0xfebd #ARABIC LETTER DAD ISOLATED FORM 254 | 0xec 0xfecc #ARABIC LETTER AIN MEDIAL FORM 255 | 0xed 0xfece #ARABIC LETTER GHAIN FINAL FORM 256 | 0xee 0xfecd #ARABIC LETTER GHAIN ISOLATED FORM 257 | 0xef 0xfee1 #ARABIC LETTER MEEM ISOLATED FORM 258 | 0xf0 0xfe7d #ARABIC SHADDA MEDIAL FORM 259 | 0xf1 0x0651 #ARABIC SHADDAH 260 | 0xf2 0xfee5 #ARABIC LETTER NOON ISOLATED FORM 261 | 0xf3 0xfee9 #ARABIC LETTER HEH ISOLATED FORM 262 | 0xf4 0xfeec #ARABIC LETTER HEH MEDIAL FORM 263 | 0xf5 0xfef0 #ARABIC LETTER ALEF MAKSURA FINAL FORM 264 | 0xf6 0xfef2 #ARABIC LETTER YEH FINAL FORM 265 | 0xf7 0xfed0 #ARABIC LETTER GHAIN MEDIAL FORM 266 | 0xf8 0xfed5 #ARABIC LETTER QAF ISOLATED FORM 267 | 0xf9 0xfef5 #ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM 268 | 0xfa 0xfef6 #ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM 269 | 0xfb 0xfedd #ARABIC LETTER LAM ISOLATED FORM 270 | 0xfc 0xfed9 #ARABIC LETTER KAF ISOLATED FORM 271 | 0xfd 0xfef1 #ARABIC LETTER YEH ISOLATED FORM 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff #UNDEFINED 274 | -------------------------------------------------------------------------------- /unitbls/cp864.txt.patch: -------------------------------------------------------------------------------- 1 | --- cp864.txt.orig 2022-09-04 13:31:28.147240059 +0200 2 | +++ cp864.txt 2022-09-04 13:32:10.487240779 +0200 3 | @@ -52,7 +52,7 @@ 4 | 0x22 0x0022 #QUOTATION MARK 5 | 0x23 0x0023 #NUMBER SIGN 6 | 0x24 0x0024 #DOLLAR SIGN 7 | -0x25 0x066a #ARABIC PERCENT SIGN 8 | +0x25 0x0025 #PERCENT SIGN 9 | 0x26 0x0026 #AMPERSAND 10 | 0x27 0x0027 #APOSTROPHE 11 | 0x28 0x0028 #LEFT PARENTHESIS 12 | -------------------------------------------------------------------------------- /unitbls/cp869.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp869_DOSGreek2 to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/24/96 7 | # Contact: Shawn.Steele@microsoft.com 8 | # 9 | # General notes: none 10 | # 11 | # Format: Three tab-separated columns 12 | # Column #1 is the cp869_DOSGreek2 code (in hex) 13 | # Column #2 is the Unicode (in hex as 0xXXXX) 14 | # Column #3 is the Unicode name (follows a comment sign, '#') 15 | # 16 | # The entries are in cp869_DOSGreek2 order 17 | # 18 | 0x00 0x0000 #NULL 19 | 0x01 0x0001 #START OF HEADING 20 | 0x02 0x0002 #START OF TEXT 21 | 0x03 0x0003 #END OF TEXT 22 | 0x04 0x0004 #END OF TRANSMISSION 23 | 0x05 0x0005 #ENQUIRY 24 | 0x06 0x0006 #ACKNOWLEDGE 25 | 0x07 0x0007 #BELL 26 | 0x08 0x0008 #BACKSPACE 27 | 0x09 0x0009 #HORIZONTAL TABULATION 28 | 0x0a 0x000a #LINE FEED 29 | 0x0b 0x000b #VERTICAL TABULATION 30 | 0x0c 0x000c #FORM FEED 31 | 0x0d 0x000d #CARRIAGE RETURN 32 | 0x0e 0x000e #SHIFT OUT 33 | 0x0f 0x000f #SHIFT IN 34 | 0x10 0x0010 #DATA LINK ESCAPE 35 | 0x11 0x0011 #DEVICE CONTROL ONE 36 | 0x12 0x0012 #DEVICE CONTROL TWO 37 | 0x13 0x0013 #DEVICE CONTROL THREE 38 | 0x14 0x0014 #DEVICE CONTROL FOUR 39 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 40 | 0x16 0x0016 #SYNCHRONOUS IDLE 41 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 42 | 0x18 0x0018 #CANCEL 43 | 0x19 0x0019 #END OF MEDIUM 44 | 0x1a 0x001a #SUBSTITUTE 45 | 0x1b 0x001b #ESCAPE 46 | 0x1c 0x001c #FILE SEPARATOR 47 | 0x1d 0x001d #GROUP SEPARATOR 48 | 0x1e 0x001e #RECORD SEPARATOR 49 | 0x1f 0x001f #UNIT SEPARATOR 50 | 0x20 0x0020 #SPACE 51 | 0x21 0x0021 #EXCLAMATION MARK 52 | 0x22 0x0022 #QUOTATION MARK 53 | 0x23 0x0023 #NUMBER SIGN 54 | 0x24 0x0024 #DOLLAR SIGN 55 | 0x25 0x0025 #PERCENT SIGN 56 | 0x26 0x0026 #AMPERSAND 57 | 0x27 0x0027 #APOSTROPHE 58 | 0x28 0x0028 #LEFT PARENTHESIS 59 | 0x29 0x0029 #RIGHT PARENTHESIS 60 | 0x2a 0x002a #ASTERISK 61 | 0x2b 0x002b #PLUS SIGN 62 | 0x2c 0x002c #COMMA 63 | 0x2d 0x002d #HYPHEN-MINUS 64 | 0x2e 0x002e #FULL STOP 65 | 0x2f 0x002f #SOLIDUS 66 | 0x30 0x0030 #DIGIT ZERO 67 | 0x31 0x0031 #DIGIT ONE 68 | 0x32 0x0032 #DIGIT TWO 69 | 0x33 0x0033 #DIGIT THREE 70 | 0x34 0x0034 #DIGIT FOUR 71 | 0x35 0x0035 #DIGIT FIVE 72 | 0x36 0x0036 #DIGIT SIX 73 | 0x37 0x0037 #DIGIT SEVEN 74 | 0x38 0x0038 #DIGIT EIGHT 75 | 0x39 0x0039 #DIGIT NINE 76 | 0x3a 0x003a #COLON 77 | 0x3b 0x003b #SEMICOLON 78 | 0x3c 0x003c #LESS-THAN SIGN 79 | 0x3d 0x003d #EQUALS SIGN 80 | 0x3e 0x003e #GREATER-THAN SIGN 81 | 0x3f 0x003f #QUESTION MARK 82 | 0x40 0x0040 #COMMERCIAL AT 83 | 0x41 0x0041 #LATIN CAPITAL LETTER A 84 | 0x42 0x0042 #LATIN CAPITAL LETTER B 85 | 0x43 0x0043 #LATIN CAPITAL LETTER C 86 | 0x44 0x0044 #LATIN CAPITAL LETTER D 87 | 0x45 0x0045 #LATIN CAPITAL LETTER E 88 | 0x46 0x0046 #LATIN CAPITAL LETTER F 89 | 0x47 0x0047 #LATIN CAPITAL LETTER G 90 | 0x48 0x0048 #LATIN CAPITAL LETTER H 91 | 0x49 0x0049 #LATIN CAPITAL LETTER I 92 | 0x4a 0x004a #LATIN CAPITAL LETTER J 93 | 0x4b 0x004b #LATIN CAPITAL LETTER K 94 | 0x4c 0x004c #LATIN CAPITAL LETTER L 95 | 0x4d 0x004d #LATIN CAPITAL LETTER M 96 | 0x4e 0x004e #LATIN CAPITAL LETTER N 97 | 0x4f 0x004f #LATIN CAPITAL LETTER O 98 | 0x50 0x0050 #LATIN CAPITAL LETTER P 99 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 100 | 0x52 0x0052 #LATIN CAPITAL LETTER R 101 | 0x53 0x0053 #LATIN CAPITAL LETTER S 102 | 0x54 0x0054 #LATIN CAPITAL LETTER T 103 | 0x55 0x0055 #LATIN CAPITAL LETTER U 104 | 0x56 0x0056 #LATIN CAPITAL LETTER V 105 | 0x57 0x0057 #LATIN CAPITAL LETTER W 106 | 0x58 0x0058 #LATIN CAPITAL LETTER X 107 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 108 | 0x5a 0x005a #LATIN CAPITAL LETTER Z 109 | 0x5b 0x005b #LEFT SQUARE BRACKET 110 | 0x5c 0x005c #REVERSE SOLIDUS 111 | 0x5d 0x005d #RIGHT SQUARE BRACKET 112 | 0x5e 0x005e #CIRCUMFLEX ACCENT 113 | 0x5f 0x005f #LOW LINE 114 | 0x60 0x0060 #GRAVE ACCENT 115 | 0x61 0x0061 #LATIN SMALL LETTER A 116 | 0x62 0x0062 #LATIN SMALL LETTER B 117 | 0x63 0x0063 #LATIN SMALL LETTER C 118 | 0x64 0x0064 #LATIN SMALL LETTER D 119 | 0x65 0x0065 #LATIN SMALL LETTER E 120 | 0x66 0x0066 #LATIN SMALL LETTER F 121 | 0x67 0x0067 #LATIN SMALL LETTER G 122 | 0x68 0x0068 #LATIN SMALL LETTER H 123 | 0x69 0x0069 #LATIN SMALL LETTER I 124 | 0x6a 0x006a #LATIN SMALL LETTER J 125 | 0x6b 0x006b #LATIN SMALL LETTER K 126 | 0x6c 0x006c #LATIN SMALL LETTER L 127 | 0x6d 0x006d #LATIN SMALL LETTER M 128 | 0x6e 0x006e #LATIN SMALL LETTER N 129 | 0x6f 0x006f #LATIN SMALL LETTER O 130 | 0x70 0x0070 #LATIN SMALL LETTER P 131 | 0x71 0x0071 #LATIN SMALL LETTER Q 132 | 0x72 0x0072 #LATIN SMALL LETTER R 133 | 0x73 0x0073 #LATIN SMALL LETTER S 134 | 0x74 0x0074 #LATIN SMALL LETTER T 135 | 0x75 0x0075 #LATIN SMALL LETTER U 136 | 0x76 0x0076 #LATIN SMALL LETTER V 137 | 0x77 0x0077 #LATIN SMALL LETTER W 138 | 0x78 0x0078 #LATIN SMALL LETTER X 139 | 0x79 0x0079 #LATIN SMALL LETTER Y 140 | 0x7a 0x007a #LATIN SMALL LETTER Z 141 | 0x7b 0x007b #LEFT CURLY BRACKET 142 | 0x7c 0x007c #VERTICAL LINE 143 | 0x7d 0x007d #RIGHT CURLY BRACKET 144 | 0x7e 0x007e #TILDE 145 | 0x7f 0x007f #DELETE 146 | 0x80 #UNDEFINED 147 | 0x81 #UNDEFINED 148 | 0x82 #UNDEFINED 149 | 0x83 #UNDEFINED 150 | 0x84 #UNDEFINED 151 | 0x85 #UNDEFINED 152 | 0x86 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS 153 | 0x87 #UNDEFINED 154 | 0x88 0x00b7 #MIDDLE DOT 155 | 0x89 0x00ac #NOT SIGN 156 | 0x8a 0x00a6 #BROKEN BAR 157 | 0x8b 0x2018 #LEFT SINGLE QUOTATION MARK 158 | 0x8c 0x2019 #RIGHT SINGLE QUOTATION MARK 159 | 0x8d 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS 160 | 0x8e 0x2015 #HORIZONTAL BAR 161 | 0x8f 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS 162 | 0x90 0x038a #GREEK CAPITAL LETTER IOTA WITH TONOS 163 | 0x91 0x03aa #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA 164 | 0x92 0x038c #GREEK CAPITAL LETTER OMICRON WITH TONOS 165 | 0x93 #UNDEFINED 166 | 0x94 #UNDEFINED 167 | 0x95 0x038e #GREEK CAPITAL LETTER UPSILON WITH TONOS 168 | 0x96 0x03ab #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA 169 | 0x97 0x00a9 #COPYRIGHT SIGN 170 | 0x98 0x038f #GREEK CAPITAL LETTER OMEGA WITH TONOS 171 | 0x99 0x00b2 #SUPERSCRIPT TWO 172 | 0x9a 0x00b3 #SUPERSCRIPT THREE 173 | 0x9b 0x03ac #GREEK SMALL LETTER ALPHA WITH TONOS 174 | 0x9c 0x00a3 #POUND SIGN 175 | 0x9d 0x03ad #GREEK SMALL LETTER EPSILON WITH TONOS 176 | 0x9e 0x03ae #GREEK SMALL LETTER ETA WITH TONOS 177 | 0x9f 0x03af #GREEK SMALL LETTER IOTA WITH TONOS 178 | 0xa0 0x03ca #GREEK SMALL LETTER IOTA WITH DIALYTIKA 179 | 0xa1 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS 180 | 0xa2 0x03cc #GREEK SMALL LETTER OMICRON WITH TONOS 181 | 0xa3 0x03cd #GREEK SMALL LETTER UPSILON WITH TONOS 182 | 0xa4 0x0391 #GREEK CAPITAL LETTER ALPHA 183 | 0xa5 0x0392 #GREEK CAPITAL LETTER BETA 184 | 0xa6 0x0393 #GREEK CAPITAL LETTER GAMMA 185 | 0xa7 0x0394 #GREEK CAPITAL LETTER DELTA 186 | 0xa8 0x0395 #GREEK CAPITAL LETTER EPSILON 187 | 0xa9 0x0396 #GREEK CAPITAL LETTER ZETA 188 | 0xaa 0x0397 #GREEK CAPITAL LETTER ETA 189 | 0xab 0x00bd #VULGAR FRACTION ONE HALF 190 | 0xac 0x0398 #GREEK CAPITAL LETTER THETA 191 | 0xad 0x0399 #GREEK CAPITAL LETTER IOTA 192 | 0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 193 | 0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 194 | 0xb0 0x2591 #LIGHT SHADE 195 | 0xb1 0x2592 #MEDIUM SHADE 196 | 0xb2 0x2593 #DARK SHADE 197 | 0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL 198 | 0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT 199 | 0xb5 0x039a #GREEK CAPITAL LETTER KAPPA 200 | 0xb6 0x039b #GREEK CAPITAL LETTER LAMDA 201 | 0xb7 0x039c #GREEK CAPITAL LETTER MU 202 | 0xb8 0x039d #GREEK CAPITAL LETTER NU 203 | 0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT 204 | 0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL 205 | 0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT 206 | 0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT 207 | 0xbd 0x039e #GREEK CAPITAL LETTER XI 208 | 0xbe 0x039f #GREEK CAPITAL LETTER OMICRON 209 | 0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT 210 | 0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT 211 | 0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL 212 | 0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL 213 | 0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT 214 | 0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL 215 | 0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL 216 | 0xc6 0x03a0 #GREEK CAPITAL LETTER PI 217 | 0xc7 0x03a1 #GREEK CAPITAL LETTER RHO 218 | 0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT 219 | 0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT 220 | 0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL 221 | 0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL 222 | 0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT 223 | 0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL 224 | 0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL 225 | 0xcf 0x03a3 #GREEK CAPITAL LETTER SIGMA 226 | 0xd0 0x03a4 #GREEK CAPITAL LETTER TAU 227 | 0xd1 0x03a5 #GREEK CAPITAL LETTER UPSILON 228 | 0xd2 0x03a6 #GREEK CAPITAL LETTER PHI 229 | 0xd3 0x03a7 #GREEK CAPITAL LETTER CHI 230 | 0xd4 0x03a8 #GREEK CAPITAL LETTER PSI 231 | 0xd5 0x03a9 #GREEK CAPITAL LETTER OMEGA 232 | 0xd6 0x03b1 #GREEK SMALL LETTER ALPHA 233 | 0xd7 0x03b2 #GREEK SMALL LETTER BETA 234 | 0xd8 0x03b3 #GREEK SMALL LETTER GAMMA 235 | 0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT 236 | 0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT 237 | 0xdb 0x2588 #FULL BLOCK 238 | 0xdc 0x2584 #LOWER HALF BLOCK 239 | 0xdd 0x03b4 #GREEK SMALL LETTER DELTA 240 | 0xde 0x03b5 #GREEK SMALL LETTER EPSILON 241 | 0xdf 0x2580 #UPPER HALF BLOCK 242 | 0xe0 0x03b6 #GREEK SMALL LETTER ZETA 243 | 0xe1 0x03b7 #GREEK SMALL LETTER ETA 244 | 0xe2 0x03b8 #GREEK SMALL LETTER THETA 245 | 0xe3 0x03b9 #GREEK SMALL LETTER IOTA 246 | 0xe4 0x03ba #GREEK SMALL LETTER KAPPA 247 | 0xe5 0x03bb #GREEK SMALL LETTER LAMDA 248 | 0xe6 0x03bc #GREEK SMALL LETTER MU 249 | 0xe7 0x03bd #GREEK SMALL LETTER NU 250 | 0xe8 0x03be #GREEK SMALL LETTER XI 251 | 0xe9 0x03bf #GREEK SMALL LETTER OMICRON 252 | 0xea 0x03c0 #GREEK SMALL LETTER PI 253 | 0xeb 0x03c1 #GREEK SMALL LETTER RHO 254 | 0xec 0x03c3 #GREEK SMALL LETTER SIGMA 255 | 0xed 0x03c2 #GREEK SMALL LETTER FINAL SIGMA 256 | 0xee 0x03c4 #GREEK SMALL LETTER TAU 257 | 0xef 0x0384 #GREEK TONOS 258 | 0xf0 0x00ad #SOFT HYPHEN 259 | 0xf1 0x00b1 #PLUS-MINUS SIGN 260 | 0xf2 0x03c5 #GREEK SMALL LETTER UPSILON 261 | 0xf3 0x03c6 #GREEK SMALL LETTER PHI 262 | 0xf4 0x03c7 #GREEK SMALL LETTER CHI 263 | 0xf5 0x00a7 #SECTION SIGN 264 | 0xf6 0x03c8 #GREEK SMALL LETTER PSI 265 | 0xf7 0x0385 #GREEK DIALYTIKA TONOS 266 | 0xf8 0x00b0 #DEGREE SIGN 267 | 0xf9 0x00a8 #DIAERESIS 268 | 0xfa 0x03c9 #GREEK SMALL LETTER OMEGA 269 | 0xfb 0x03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA 270 | 0xfc 0x03b0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS 271 | 0xfd 0x03ce #GREEK SMALL LETTER OMEGA WITH TONOS 272 | 0xfe 0x25a0 #BLACK SQUARE 273 | 0xff 0x00a0 #NO-BREAK SPACE 274 | -------------------------------------------------------------------------------- /unitbls/cp874.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Name: cp874 to Unicode table 3 | # Unicode version: 2.0 4 | # Table version: 2.00 5 | # Table format: Format A 6 | # Date: 04/15/98 7 | # 8 | # Contact: Shawn.Steele@microsoft.com 9 | # 10 | # General notes: none 11 | # 12 | # Format: Three tab-separated columns 13 | # Column #1 is the cp874 code (in hex) 14 | # Column #2 is the Unicode (in hex as 0xXXXX) 15 | # Column #3 is the Unicode name (follows a comment sign, '#') 16 | # 17 | # The entries are in cp874 order 18 | # 19 | 0x00 0x0000 #NULL 20 | 0x01 0x0001 #START OF HEADING 21 | 0x02 0x0002 #START OF TEXT 22 | 0x03 0x0003 #END OF TEXT 23 | 0x04 0x0004 #END OF TRANSMISSION 24 | 0x05 0x0005 #ENQUIRY 25 | 0x06 0x0006 #ACKNOWLEDGE 26 | 0x07 0x0007 #BELL 27 | 0x08 0x0008 #BACKSPACE 28 | 0x09 0x0009 #HORIZONTAL TABULATION 29 | 0x0A 0x000A #LINE FEED 30 | 0x0B 0x000B #VERTICAL TABULATION 31 | 0x0C 0x000C #FORM FEED 32 | 0x0D 0x000D #CARRIAGE RETURN 33 | 0x0E 0x000E #SHIFT OUT 34 | 0x0F 0x000F #SHIFT IN 35 | 0x10 0x0010 #DATA LINK ESCAPE 36 | 0x11 0x0011 #DEVICE CONTROL ONE 37 | 0x12 0x0012 #DEVICE CONTROL TWO 38 | 0x13 0x0013 #DEVICE CONTROL THREE 39 | 0x14 0x0014 #DEVICE CONTROL FOUR 40 | 0x15 0x0015 #NEGATIVE ACKNOWLEDGE 41 | 0x16 0x0016 #SYNCHRONOUS IDLE 42 | 0x17 0x0017 #END OF TRANSMISSION BLOCK 43 | 0x18 0x0018 #CANCEL 44 | 0x19 0x0019 #END OF MEDIUM 45 | 0x1A 0x001A #SUBSTITUTE 46 | 0x1B 0x001B #ESCAPE 47 | 0x1C 0x001C #FILE SEPARATOR 48 | 0x1D 0x001D #GROUP SEPARATOR 49 | 0x1E 0x001E #RECORD SEPARATOR 50 | 0x1F 0x001F #UNIT SEPARATOR 51 | 0x20 0x0020 #SPACE 52 | 0x21 0x0021 #EXCLAMATION MARK 53 | 0x22 0x0022 #QUOTATION MARK 54 | 0x23 0x0023 #NUMBER SIGN 55 | 0x24 0x0024 #DOLLAR SIGN 56 | 0x25 0x0025 #PERCENT SIGN 57 | 0x26 0x0026 #AMPERSAND 58 | 0x27 0x0027 #APOSTROPHE 59 | 0x28 0x0028 #LEFT PARENTHESIS 60 | 0x29 0x0029 #RIGHT PARENTHESIS 61 | 0x2A 0x002A #ASTERISK 62 | 0x2B 0x002B #PLUS SIGN 63 | 0x2C 0x002C #COMMA 64 | 0x2D 0x002D #HYPHEN-MINUS 65 | 0x2E 0x002E #FULL STOP 66 | 0x2F 0x002F #SOLIDUS 67 | 0x30 0x0030 #DIGIT ZERO 68 | 0x31 0x0031 #DIGIT ONE 69 | 0x32 0x0032 #DIGIT TWO 70 | 0x33 0x0033 #DIGIT THREE 71 | 0x34 0x0034 #DIGIT FOUR 72 | 0x35 0x0035 #DIGIT FIVE 73 | 0x36 0x0036 #DIGIT SIX 74 | 0x37 0x0037 #DIGIT SEVEN 75 | 0x38 0x0038 #DIGIT EIGHT 76 | 0x39 0x0039 #DIGIT NINE 77 | 0x3A 0x003A #COLON 78 | 0x3B 0x003B #SEMICOLON 79 | 0x3C 0x003C #LESS-THAN SIGN 80 | 0x3D 0x003D #EQUALS SIGN 81 | 0x3E 0x003E #GREATER-THAN SIGN 82 | 0x3F 0x003F #QUESTION MARK 83 | 0x40 0x0040 #COMMERCIAL AT 84 | 0x41 0x0041 #LATIN CAPITAL LETTER A 85 | 0x42 0x0042 #LATIN CAPITAL LETTER B 86 | 0x43 0x0043 #LATIN CAPITAL LETTER C 87 | 0x44 0x0044 #LATIN CAPITAL LETTER D 88 | 0x45 0x0045 #LATIN CAPITAL LETTER E 89 | 0x46 0x0046 #LATIN CAPITAL LETTER F 90 | 0x47 0x0047 #LATIN CAPITAL LETTER G 91 | 0x48 0x0048 #LATIN CAPITAL LETTER H 92 | 0x49 0x0049 #LATIN CAPITAL LETTER I 93 | 0x4A 0x004A #LATIN CAPITAL LETTER J 94 | 0x4B 0x004B #LATIN CAPITAL LETTER K 95 | 0x4C 0x004C #LATIN CAPITAL LETTER L 96 | 0x4D 0x004D #LATIN CAPITAL LETTER M 97 | 0x4E 0x004E #LATIN CAPITAL LETTER N 98 | 0x4F 0x004F #LATIN CAPITAL LETTER O 99 | 0x50 0x0050 #LATIN CAPITAL LETTER P 100 | 0x51 0x0051 #LATIN CAPITAL LETTER Q 101 | 0x52 0x0052 #LATIN CAPITAL LETTER R 102 | 0x53 0x0053 #LATIN CAPITAL LETTER S 103 | 0x54 0x0054 #LATIN CAPITAL LETTER T 104 | 0x55 0x0055 #LATIN CAPITAL LETTER U 105 | 0x56 0x0056 #LATIN CAPITAL LETTER V 106 | 0x57 0x0057 #LATIN CAPITAL LETTER W 107 | 0x58 0x0058 #LATIN CAPITAL LETTER X 108 | 0x59 0x0059 #LATIN CAPITAL LETTER Y 109 | 0x5A 0x005A #LATIN CAPITAL LETTER Z 110 | 0x5B 0x005B #LEFT SQUARE BRACKET 111 | 0x5C 0x005C #REVERSE SOLIDUS 112 | 0x5D 0x005D #RIGHT SQUARE BRACKET 113 | 0x5E 0x005E #CIRCUMFLEX ACCENT 114 | 0x5F 0x005F #LOW LINE 115 | 0x60 0x0060 #GRAVE ACCENT 116 | 0x61 0x0061 #LATIN SMALL LETTER A 117 | 0x62 0x0062 #LATIN SMALL LETTER B 118 | 0x63 0x0063 #LATIN SMALL LETTER C 119 | 0x64 0x0064 #LATIN SMALL LETTER D 120 | 0x65 0x0065 #LATIN SMALL LETTER E 121 | 0x66 0x0066 #LATIN SMALL LETTER F 122 | 0x67 0x0067 #LATIN SMALL LETTER G 123 | 0x68 0x0068 #LATIN SMALL LETTER H 124 | 0x69 0x0069 #LATIN SMALL LETTER I 125 | 0x6A 0x006A #LATIN SMALL LETTER J 126 | 0x6B 0x006B #LATIN SMALL LETTER K 127 | 0x6C 0x006C #LATIN SMALL LETTER L 128 | 0x6D 0x006D #LATIN SMALL LETTER M 129 | 0x6E 0x006E #LATIN SMALL LETTER N 130 | 0x6F 0x006F #LATIN SMALL LETTER O 131 | 0x70 0x0070 #LATIN SMALL LETTER P 132 | 0x71 0x0071 #LATIN SMALL LETTER Q 133 | 0x72 0x0072 #LATIN SMALL LETTER R 134 | 0x73 0x0073 #LATIN SMALL LETTER S 135 | 0x74 0x0074 #LATIN SMALL LETTER T 136 | 0x75 0x0075 #LATIN SMALL LETTER U 137 | 0x76 0x0076 #LATIN SMALL LETTER V 138 | 0x77 0x0077 #LATIN SMALL LETTER W 139 | 0x78 0x0078 #LATIN SMALL LETTER X 140 | 0x79 0x0079 #LATIN SMALL LETTER Y 141 | 0x7A 0x007A #LATIN SMALL LETTER Z 142 | 0x7B 0x007B #LEFT CURLY BRACKET 143 | 0x7C 0x007C #VERTICAL LINE 144 | 0x7D 0x007D #RIGHT CURLY BRACKET 145 | 0x7E 0x007E #TILDE 146 | 0x7F 0x007F #DELETE 147 | 0x80 0x20AC #EURO SIGN 148 | 0x81 #UNDEFINED 149 | 0x82 #UNDEFINED 150 | 0x83 #UNDEFINED 151 | 0x84 #UNDEFINED 152 | 0x85 0x2026 #HORIZONTAL ELLIPSIS 153 | 0x86 #UNDEFINED 154 | 0x87 #UNDEFINED 155 | 0x88 #UNDEFINED 156 | 0x89 #UNDEFINED 157 | 0x8A #UNDEFINED 158 | 0x8B #UNDEFINED 159 | 0x8C #UNDEFINED 160 | 0x8D #UNDEFINED 161 | 0x8E #UNDEFINED 162 | 0x8F #UNDEFINED 163 | 0x90 #UNDEFINED 164 | 0x91 0x2018 #LEFT SINGLE QUOTATION MARK 165 | 0x92 0x2019 #RIGHT SINGLE QUOTATION MARK 166 | 0x93 0x201C #LEFT DOUBLE QUOTATION MARK 167 | 0x94 0x201D #RIGHT DOUBLE QUOTATION MARK 168 | 0x95 0x2022 #BULLET 169 | 0x96 0x2013 #EN DASH 170 | 0x97 0x2014 #EM DASH 171 | 0x98 #UNDEFINED 172 | 0x99 #UNDEFINED 173 | 0x9A #UNDEFINED 174 | 0x9B #UNDEFINED 175 | 0x9C #UNDEFINED 176 | 0x9D #UNDEFINED 177 | 0x9E #UNDEFINED 178 | 0x9F #UNDEFINED 179 | 0xA0 0x00A0 #NO-BREAK SPACE 180 | 0xA1 0x0E01 #THAI CHARACTER KO KAI 181 | 0xA2 0x0E02 #THAI CHARACTER KHO KHAI 182 | 0xA3 0x0E03 #THAI CHARACTER KHO KHUAT 183 | 0xA4 0x0E04 #THAI CHARACTER KHO KHWAI 184 | 0xA5 0x0E05 #THAI CHARACTER KHO KHON 185 | 0xA6 0x0E06 #THAI CHARACTER KHO RAKHANG 186 | 0xA7 0x0E07 #THAI CHARACTER NGO NGU 187 | 0xA8 0x0E08 #THAI CHARACTER CHO CHAN 188 | 0xA9 0x0E09 #THAI CHARACTER CHO CHING 189 | 0xAA 0x0E0A #THAI CHARACTER CHO CHANG 190 | 0xAB 0x0E0B #THAI CHARACTER SO SO 191 | 0xAC 0x0E0C #THAI CHARACTER CHO CHOE 192 | 0xAD 0x0E0D #THAI CHARACTER YO YING 193 | 0xAE 0x0E0E #THAI CHARACTER DO CHADA 194 | 0xAF 0x0E0F #THAI CHARACTER TO PATAK 195 | 0xB0 0x0E10 #THAI CHARACTER THO THAN 196 | 0xB1 0x0E11 #THAI CHARACTER THO NANGMONTHO 197 | 0xB2 0x0E12 #THAI CHARACTER THO PHUTHAO 198 | 0xB3 0x0E13 #THAI CHARACTER NO NEN 199 | 0xB4 0x0E14 #THAI CHARACTER DO DEK 200 | 0xB5 0x0E15 #THAI CHARACTER TO TAO 201 | 0xB6 0x0E16 #THAI CHARACTER THO THUNG 202 | 0xB7 0x0E17 #THAI CHARACTER THO THAHAN 203 | 0xB8 0x0E18 #THAI CHARACTER THO THONG 204 | 0xB9 0x0E19 #THAI CHARACTER NO NU 205 | 0xBA 0x0E1A #THAI CHARACTER BO BAIMAI 206 | 0xBB 0x0E1B #THAI CHARACTER PO PLA 207 | 0xBC 0x0E1C #THAI CHARACTER PHO PHUNG 208 | 0xBD 0x0E1D #THAI CHARACTER FO FA 209 | 0xBE 0x0E1E #THAI CHARACTER PHO PHAN 210 | 0xBF 0x0E1F #THAI CHARACTER FO FAN 211 | 0xC0 0x0E20 #THAI CHARACTER PHO SAMPHAO 212 | 0xC1 0x0E21 #THAI CHARACTER MO MA 213 | 0xC2 0x0E22 #THAI CHARACTER YO YAK 214 | 0xC3 0x0E23 #THAI CHARACTER RO RUA 215 | 0xC4 0x0E24 #THAI CHARACTER RU 216 | 0xC5 0x0E25 #THAI CHARACTER LO LING 217 | 0xC6 0x0E26 #THAI CHARACTER LU 218 | 0xC7 0x0E27 #THAI CHARACTER WO WAEN 219 | 0xC8 0x0E28 #THAI CHARACTER SO SALA 220 | 0xC9 0x0E29 #THAI CHARACTER SO RUSI 221 | 0xCA 0x0E2A #THAI CHARACTER SO SUA 222 | 0xCB 0x0E2B #THAI CHARACTER HO HIP 223 | 0xCC 0x0E2C #THAI CHARACTER LO CHULA 224 | 0xCD 0x0E2D #THAI CHARACTER O ANG 225 | 0xCE 0x0E2E #THAI CHARACTER HO NOKHUK 226 | 0xCF 0x0E2F #THAI CHARACTER PAIYANNOI 227 | 0xD0 0x0E30 #THAI CHARACTER SARA A 228 | 0xD1 0x0E31 #THAI CHARACTER MAI HAN-AKAT 229 | 0xD2 0x0E32 #THAI CHARACTER SARA AA 230 | 0xD3 0x0E33 #THAI CHARACTER SARA AM 231 | 0xD4 0x0E34 #THAI CHARACTER SARA I 232 | 0xD5 0x0E35 #THAI CHARACTER SARA II 233 | 0xD6 0x0E36 #THAI CHARACTER SARA UE 234 | 0xD7 0x0E37 #THAI CHARACTER SARA UEE 235 | 0xD8 0x0E38 #THAI CHARACTER SARA U 236 | 0xD9 0x0E39 #THAI CHARACTER SARA UU 237 | 0xDA 0x0E3A #THAI CHARACTER PHINTHU 238 | 0xDB #UNDEFINED 239 | 0xDC #UNDEFINED 240 | 0xDD #UNDEFINED 241 | 0xDE #UNDEFINED 242 | 0xDF 0x0E3F #THAI CURRENCY SYMBOL BAHT 243 | 0xE0 0x0E40 #THAI CHARACTER SARA E 244 | 0xE1 0x0E41 #THAI CHARACTER SARA AE 245 | 0xE2 0x0E42 #THAI CHARACTER SARA O 246 | 0xE3 0x0E43 #THAI CHARACTER SARA AI MAIMUAN 247 | 0xE4 0x0E44 #THAI CHARACTER SARA AI MAIMALAI 248 | 0xE5 0x0E45 #THAI CHARACTER LAKKHANGYAO 249 | 0xE6 0x0E46 #THAI CHARACTER MAIYAMOK 250 | 0xE7 0x0E47 #THAI CHARACTER MAITAIKHU 251 | 0xE8 0x0E48 #THAI CHARACTER MAI EK 252 | 0xE9 0x0E49 #THAI CHARACTER MAI THO 253 | 0xEA 0x0E4A #THAI CHARACTER MAI TRI 254 | 0xEB 0x0E4B #THAI CHARACTER MAI CHATTAWA 255 | 0xEC 0x0E4C #THAI CHARACTER THANTHAKHAT 256 | 0xED 0x0E4D #THAI CHARACTER NIKHAHIT 257 | 0xEE 0x0E4E #THAI CHARACTER YAMAKKAN 258 | 0xEF 0x0E4F #THAI CHARACTER FONGMAN 259 | 0xF0 0x0E50 #THAI DIGIT ZERO 260 | 0xF1 0x0E51 #THAI DIGIT ONE 261 | 0xF2 0x0E52 #THAI DIGIT TWO 262 | 0xF3 0x0E53 #THAI DIGIT THREE 263 | 0xF4 0x0E54 #THAI DIGIT FOUR 264 | 0xF5 0x0E55 #THAI DIGIT FIVE 265 | 0xF6 0x0E56 #THAI DIGIT SIX 266 | 0xF7 0x0E57 #THAI DIGIT SEVEN 267 | 0xF8 0x0E58 #THAI DIGIT EIGHT 268 | 0xF9 0x0E59 #THAI DIGIT NINE 269 | 0xFA 0x0E5A #THAI CHARACTER ANGKHANKHU 270 | 0xFB 0x0E5B #THAI CHARACTER KHOMUT 271 | 0xFC #UNDEFINED 272 | 0xFD #UNDEFINED 273 | 0xFE #UNDEFINED 274 | 0xFF #UNDEFINED 275 | -------------------------------------------------------------------------------- /unitbls/cp874.txt.patch: -------------------------------------------------------------------------------- 1 | --- cp874.txt.orig 2022-09-04 10:10:05.107034662 +0200 2 | +++ cp874.txt 2022-09-04 10:12:42.447037337 +0200 3 | @@ -1,3 +1,4 @@ 4 | +# _DOSThai 5 | # 6 | # Name: cp874 to Unicode table 7 | # Unicode version: 2.0 8 | -------------------------------------------------------------------------------- /unitbls/license.txt: -------------------------------------------------------------------------------- 1 | UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE 2 | 3 | See Terms of Use 4 | for definitions of Unicode Inc.’s Data Files and Software. 5 | 6 | NOTICE TO USER: Carefully read the following legal agreement. 7 | BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S 8 | DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), 9 | YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE 10 | TERMS AND CONDITIONS OF THIS AGREEMENT. 11 | IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE 12 | THE DATA FILES OR SOFTWARE. 13 | 14 | COPYRIGHT AND PERMISSION NOTICE 15 | 16 | Copyright © 1991-2022 Unicode, Inc. All rights reserved. 17 | Distributed under the Terms of Use in https://www.unicode.org/copyright.html. 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining 20 | a copy of the Unicode data files and any associated documentation 21 | (the "Data Files") or Unicode software and any associated documentation 22 | (the "Software") to deal in the Data Files or Software 23 | without restriction, including without limitation the rights to use, 24 | copy, modify, merge, publish, distribute, and/or sell copies of 25 | the Data Files or Software, and to permit persons to whom the Data Files 26 | or Software are furnished to do so, provided that either 27 | (a) this copyright and permission notice appear with all copies 28 | of the Data Files or Software, or 29 | (b) this copyright and permission notice appear in associated 30 | Documentation. 31 | 32 | THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF 33 | ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 34 | WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 35 | NONINFRINGEMENT OF THIRD PARTY RIGHTS. 36 | IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS 37 | NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL 38 | DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 39 | DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 40 | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 41 | PERFORMANCE OF THE DATA FILES OR SOFTWARE. 42 | 43 | Except as contained in this notice, the name of a copyright holder 44 | shall not be used in advertising or otherwise to promote the sale, 45 | use or other dealings in these Data Files or Software without prior 46 | written authorization of the copyright holder. 47 | -------------------------------------------------------------------------------- /unitbls/makefile: -------------------------------------------------------------------------------- 1 | # vi: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab 2 | # 3 | # VMSMOUNT 4 | # A network redirector for mounting VMware's Shared Folders in DOS 5 | # Copyright (C) 2022 Eduardo Casino (mail@eduardocasino.es) 6 | # 7 | # This program is free software; you can redistribute it and/or 8 | # modify it under the terms of the GNU General Public License 9 | # as published by the Free Software Foundation; either version 2 10 | # of the License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program; if not, write to the Free Software 19 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | # MA 02110-1301, USA. 21 | # 22 | 23 | MKTABLE = tools/mk_table 24 | MAKE = wmake 25 | RM = rm -f 26 | 27 | TABLES = & 28 | c1258uni.tbl cp437uni.tbl cp720uni.tbl cp737uni.tbl cp775uni.tbl cp850uni.tbl & 29 | cp852uni.tbl cp855uni.tbl cp857uni.tbl cp858uni.tbl cp860uni.tbl cp861uni.tbl & 30 | cp862uni.tbl cp863uni.tbl cp864uni.tbl cp865uni.tbl cp866uni.tbl cp869uni.tbl & 31 | cp874uni.tbl 32 | 33 | all : $(MKTABLE) $(TABLES) 34 | 35 | $(MKTABLE) : .SYMBOLIC 36 | (cd tools; $(MAKE) all) 37 | 38 | distclean: .SYMBOLIC clean 39 | (cd tools; $(MAKE) clean) 40 | 41 | clean : .SYMBOLIC 42 | $(RM) *.tbl 43 | $(RM) -r build 44 | 45 | c1258uni.tbl : cp1258.txt 46 | @[ -d build ] || mkdir build 47 | @cp $< build 48 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 49 | $(MKTABLE) build/$< 50 | 51 | cp437uni.tbl : cp437.txt 52 | @[ -d build ] || mkdir build 53 | @cp $< build 54 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 55 | $(MKTABLE) build/$< 56 | 57 | cp720uni.tbl : cp720.txt 58 | @[ -d build ] || mkdir build 59 | @cp $< build 60 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 61 | $(MKTABLE) build/$< 62 | 63 | cp737uni.tbl : cp737.txt 64 | @[ -d build ] || mkdir build 65 | @cp $< build 66 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 67 | $(MKTABLE) build/$< 68 | 69 | cp775uni.tbl : cp775.txt 70 | @[ -d build ] || mkdir build 71 | @cp $< build 72 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 73 | $(MKTABLE) build/$< 74 | 75 | cp850uni.tbl : cp850.txt 76 | @[ -d build ] || mkdir build 77 | @cp $< build 78 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 79 | $(MKTABLE) build/$< 80 | 81 | cp852uni.tbl : cp852.txt 82 | @[ -d build ] || mkdir build 83 | @cp $< build 84 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 85 | $(MKTABLE) build/$< 86 | 87 | cp855uni.tbl : cp855.txt 88 | @[ -d build ] || mkdir build 89 | @cp $< build 90 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 91 | $(MKTABLE) build/$< 92 | 93 | cp857uni.tbl : cp857.txt 94 | @[ -d build ] || mkdir build 95 | @cp $< build 96 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 97 | $(MKTABLE) build/$< 98 | 99 | cp858uni.tbl : cp858.txt 100 | @[ -d build ] || mkdir build 101 | @cp $< build 102 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 103 | $(MKTABLE) build/$< 104 | 105 | cp860uni.tbl : cp860.txt 106 | @[ -d build ] || mkdir build 107 | @cp $< build 108 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 109 | $(MKTABLE) build/$< 110 | 111 | cp861uni.tbl : cp861.txt 112 | @[ -d build ] || mkdir build 113 | @cp $< build 114 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 115 | $(MKTABLE) build/$< 116 | 117 | cp862uni.tbl : cp862.txt 118 | @[ -d build ] || mkdir build 119 | @cp $< build 120 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 121 | $(MKTABLE) build/$< 122 | 123 | cp863uni.tbl : cp863.txt 124 | @[ -d build ] || mkdir build 125 | @cp $< build 126 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 127 | $(MKTABLE) build/$< 128 | 129 | cp864uni.tbl : cp864.txt 130 | @[ -d build ] || mkdir build 131 | @cp $< build 132 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 133 | $(MKTABLE) build/$< 134 | 135 | cp865uni.tbl : cp865.txt 136 | @[ -d build ] || mkdir build 137 | @cp $< build 138 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 139 | $(MKTABLE) build/$< 140 | 141 | cp866uni.tbl : cp866.txt 142 | @[ -d build ] || mkdir build 143 | @cp $< build 144 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 145 | $(MKTABLE) build/$< 146 | 147 | cp869uni.tbl : cp869.txt 148 | @[ -d build ] || mkdir build 149 | @cp $< build 150 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 151 | $(MKTABLE) build/$< 152 | 153 | cp874uni.tbl : cp874.txt 154 | @[ -d build ] || mkdir build 155 | @cp $< build 156 | @-[ -f $<.patch ] && (cd build; patch -p0 $< < ../$<.patch) 157 | $(MKTABLE) build/$< 158 | 159 | -------------------------------------------------------------------------------- /unitbls/readme.txt: -------------------------------------------------------------------------------- 1 | All tables were downloaded from http://www.unicode.org/Public/MAPPINGS and are covered by the 2 | UNICODE, INC. LICENSE AGREEMENT (see `license.txt` for details) EXCEPT: 3 | 4 | * cp858.txt : Derived from cp850.txt, under the same license 5 | * cp720.txt : From https://www-user.tu-chemnitz.de/~heha/hsn/dos/doslfn/ , under CC BY 4.0 6 | 7 | -------------------------------------------------------------------------------- /unitbls/tools/makefile: -------------------------------------------------------------------------------- 1 | # vi: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab 2 | # 3 | # VMSMOUNT 4 | # A network redirector for mounting VMware's Shared Folders in DOS 5 | # Copyright (C) 2022 Eduardo Casino (mail@eduardocasino.es) 6 | # 7 | # This program is free software; you can redistribute it and/or 8 | # modify it under the terms of the GNU General Public License 9 | # as published by the Free Software Foundation; either version 2 10 | # of the License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program; if not, write to the Free Software 19 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | # MA 02110-1301, USA. 21 | # 22 | # NOTE: 23 | # As license is unclear, download and build Henrik Haftmann's 24 | # mk_table from its original site. No part of its code is used in 25 | # VMSMOUNT, it is just used for generating the conversion tables 26 | # 27 | # 28 | 29 | # Can't get it to compile with Open Watcom 30 | # 31 | # CC = wcl386 32 | CC = gcc 33 | RM = rm -f 34 | !ifeq CC wcl386 35 | CFLAGS = -bcl=linux 36 | !else 37 | CFLAGS = 38 | !endif 39 | 40 | DOSLFN = doslfn.zip 41 | LINK = https://www-user.tu-chemnitz.de/~heha/hsn/dos/doslfn/$(DOSLFN) 42 | 43 | # Jason Hood's version: 44 | # LINK = http://adoxa.altervista.org/doslfn/dl.php?f=doslfn 45 | 46 | TARGET = mk_table 47 | 48 | all : $(TARGET) 49 | 50 | clean : .SYMBOLIC 51 | $(RM) $(TARGET) $(DOSLFN) mk_table.c 52 | 53 | !ifeq CC wcl386 54 | 55 | $(TARGET) : mk_table.c 56 | $(CC) $(CFLAGS) -fe $@ $< 57 | 58 | !else 59 | 60 | $(TARGET) : mk_table.c 61 | $(CC) $(CFLAGS) -o $@ $< 62 | 63 | !endif 64 | 65 | mk_table.c : $(DOSLFN) 66 | unzip -L -a -o $< $@ 67 | patch -p0 < $@.patch 68 | 69 | $(DOSLFN) : .EXISTSONLY 70 | wget -O $@ $(LINK) 71 | 72 | -------------------------------------------------------------------------------- /unitbls/tools/mk_table.c.patch: -------------------------------------------------------------------------------- 1 | --- mk_table.c.orig 2022-09-04 14:43:12.307313225 +0200 2 | +++ mk_table.c 2022-09-04 14:44:16.647314318 +0200 3 | @@ -66,11 +66,11 @@ int main(int argc,char**argv) { 4 | continue; 5 | } 6 | c=0xFFFF; /* if there is an unused entry (e.g. Turkish) */ 7 | - if (sscanf(line,"%X %X",&j,&c)<1) continue; 8 | + if (sscanf(line,"%hX %hX",&j,&c)<1) continue; 9 | if (j<0x80) { 10 | if (c!=j) printf("Code 0x%02X is not ASCII, it's 0x%02X\n",j,c); 11 | }else if (j<0x100){ 12 | - if (sscanf(line,"%*[^#]#DBCS LEAD BYTE%c",&c)) { 13 | + if (sscanf(line,"%*[^#]#DBCS LEAD BYTE%c",(char *)&c)>0) { 14 | c=0; 15 | if (!dbcs) { 16 | puts("MESSAGE: Input file is DBCS"); 17 | -------------------------------------------------------------------------------- /vmaux.h: -------------------------------------------------------------------------------- 1 | #ifndef _VMAUX_H_ 2 | #define _VMAUX_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * vmaux.h: VM functions to be called BEFORE going resident 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include "vmshf.h" 28 | 29 | #include 30 | 31 | int VMAuxCheckVirtual(void); 32 | int VMAuxBeginSession(rpc_t __far *, rpc_t __far * 33 | #ifdef DEBUG 34 | , 35 | rpc_t __far * 36 | #endif 37 | ); 38 | void VMAuxEndSession(rpc_t __far *, rpc_t __far * 39 | #ifdef DEBUG 40 | , 41 | rpc_t __far * 42 | #endif 43 | ); 44 | 45 | int VMAuxSharedFolders(rpc_t __far *); 46 | 47 | #endif /* _VMAUX_H_ */ 48 | -------------------------------------------------------------------------------- /vmcall.h: -------------------------------------------------------------------------------- 1 | #ifndef _VMCALL_H_ 2 | #define _VMCALL_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * 8 | * This file is a derivative work of the VMware Command Line Tools, by Ken Kato 9 | * http://sites.google.com/site/chitchatvmback/ 10 | * 11 | * Copyright (c) 2002-2008, Ken Kato 12 | * Copyright (C) 2011-2022 Eduardo Casino 13 | * 14 | * This program is free software; you can redistribute it and/or 15 | * modify it under the terms of the GNU General Public License 16 | * as published by the Free Software Foundation; either version 2 17 | * of the License, or (at your option) any later version. 18 | * 19 | * This program is distributed in the hope that it will be useful, 20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | * GNU General Public License for more details. 23 | * 24 | * You should have received a copy of the GNU General Public License 25 | * along with this program; if not, write to the Free Software 26 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 27 | * MA 02110-1301, USA. 28 | */ 29 | 30 | #include 31 | 32 | #pragma pack(push, 1) 33 | 34 | typedef struct Regs 35 | { 36 | union { 37 | uint8_t byte[4]; 38 | struct 39 | { 40 | uint16_t low; 41 | uint16_t high; 42 | } halfs; 43 | uint32_t word; 44 | } eax; 45 | union { 46 | uint8_t byte[4]; 47 | struct 48 | { 49 | uint16_t low; 50 | uint16_t high; 51 | } halfs; 52 | uint32_t word; 53 | } ebx; 54 | union { 55 | uint8_t byte[4]; 56 | struct 57 | { 58 | uint16_t low; 59 | uint16_t high; 60 | } halfs; 61 | uint32_t word; 62 | } ecx; 63 | union { 64 | uint8_t byte[4]; 65 | struct 66 | { 67 | uint16_t low; 68 | uint16_t high; 69 | } halfs; 70 | uint32_t word; 71 | } edx; 72 | union { 73 | uint8_t byte[4]; 74 | struct 75 | { 76 | uint16_t low; 77 | uint16_t high; 78 | } halfs; 79 | uint32_t word; 80 | } ebp; 81 | union { 82 | uint8_t byte[4]; 83 | struct 84 | { 85 | uint16_t low; 86 | uint16_t high; 87 | } halfs; 88 | uint32_t word; 89 | } edi; 90 | union { 91 | uint8_t byte[4]; 92 | struct 93 | { 94 | uint16_t low; 95 | uint16_t high; 96 | } halfs; 97 | uint32_t word; 98 | } esi; 99 | } CREGS; 100 | 101 | #pragma pack(pop) 102 | 103 | #define LOAD_REGS \ 104 | "movzx eax,ax" \ 105 | "pushad" \ 106 | "push eax" \ 107 | "mov esi, 18h[eax]" \ 108 | "mov edi, 14h[eax]" \ 109 | "mov ebp, 10h[eax]" \ 110 | "mov edx, 0ch[eax]" \ 111 | "mov ecx, 08h[eax]" \ 112 | "mov ebx, 04h[eax]" \ 113 | "mov eax, 00h[eax]" 114 | 115 | #define STORE_REGS \ 116 | "xchg 00h[esp], eax" \ 117 | "mov 18h[eax], esi" \ 118 | "mov 14h[eax], edi" \ 119 | "mov 10h[eax], ebp" \ 120 | "mov 0ch[eax], edx" \ 121 | "mov 08h[eax], ecx" \ 122 | "mov 04h[eax], ebx" \ 123 | "pop dword ptr 00h[eax]" \ 124 | "popad" 125 | 126 | extern void _VmwCommand(CREGS *r); 127 | #pragma aux _VmwCommand = \ 128 | LOAD_REGS \ 129 | "in eax, dx" \ 130 | STORE_REGS \ 131 | __parm [__ax] \ 132 | __modify [__ax]; 133 | 134 | extern void _VmwRpcOuts(CREGS *r); 135 | #pragma aux _VmwRpcOuts = \ 136 | LOAD_REGS \ 137 | "pushf" \ 138 | "cld" \ 139 | "rep outsb" \ 140 | "popf" \ 141 | STORE_REGS \ 142 | __parm [__ax] \ 143 | __modify [__ax]; 144 | 145 | extern void _VmwRpcIns(CREGS *r); 146 | #pragma aux _VmwRpcIns = \ 147 | LOAD_REGS \ 148 | "push es" \ 149 | "push ds" \ 150 | "pop es" \ 151 | "pushf" \ 152 | "cld" \ 153 | "rep insb" \ 154 | "popf" \ 155 | "pop es" \ 156 | STORE_REGS \ 157 | __parm [__ax] \ 158 | __modify [__ax]; 159 | 160 | #endif /* _VMCALL_H_ */ 161 | -------------------------------------------------------------------------------- /vmchcpd/cstrtsys.asm: -------------------------------------------------------------------------------- 1 | ; Open Watcom startup code for DOS 16-bit device drivers 2 | ; 3 | ; Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 4 | ; 5 | ; This program is free software; you can redistribute it and/or 6 | ; modify it under the terms of the GNU General Public License 7 | ; as published by the Free Software Foundation; either version 2 8 | ; of the License, or (at your option) any later version. 9 | ; 10 | ; This program is distributed in the hope that it will be useful, 11 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ; GNU General Public License for more details. 14 | ; 15 | ; You should have received a copy of the GNU General Public License 16 | ; along with this program; if not, write to the Free Software 17 | ; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 | ; MA 02110-1301, USA. 19 | ; 20 | 21 | ; Assemble with 'WASM -bt=DOS -mt -0' 22 | ; Use 'DISABLE 1014' directive with WLINK to suppress warning about missing stack segment 23 | ; Example: WLINK SYSTEM dos DISABLE 1014 NAME mydevice.sys FILE {cstrtsys.o mydevice.o} 24 | ; 25 | 26 | ATTR_SUBST equ 08000h 27 | ATTR_CHAR equ 08000h 28 | ATTR_IOCTL equ 04000h 29 | ATTR_BLDFAT equ 02000h 30 | ATTR_REMOTE equ 01000h 31 | ATTR_EXCALLS equ 00800h 32 | ATTR_QRYIOCTL equ 00080h 33 | ATTR_GENIOCTL equ 00040h 34 | ATTR_RAW equ 00400h 35 | ATTR_FASTCON equ 00010h 36 | ATTR_CLOCK equ 00008h 37 | ATTR_NULL equ 00004h 38 | ATTR_CONOUT equ 00002h 39 | ATTR_HUGE equ 00002h 40 | ATTR_CONIN equ 00001h 41 | 42 | ; Device name and attributes. Modify according to your needs 43 | ; 44 | 45 | DEVICE_NAME equ 'VMCHCPD$' 46 | DEVICE_ATTR equ ATTR_CHAR or ATTR_IOCTL or ATTR_EXCALLS or ATTR_GENIOCTL 47 | 48 | ; End of user modifiable part 49 | 50 | DGROUP group _HEADER, _TEXT, _BSS, _INIT 51 | 52 | _BSS segment word public 'BSS' 53 | _BSS ends 54 | 55 | _TEXT segment word public 'CODE' 56 | _TEXT ends 57 | 58 | _INIT segment word public 'INIT' 59 | 60 | public _transient_data 61 | public _small_code_ 62 | 63 | _transient_data label near 64 | 65 | _small_code_ dw ? 66 | 67 | _INIT ends 68 | 69 | _HEADER segment word public 'HEADER' 70 | 71 | org 0 72 | 73 | _cstart_ label near 74 | 75 | extrn DeviceStrategy_ : proc 76 | extrn DeviceInterrupt_ : proc 77 | 78 | ; Device Header 79 | ; 80 | dd -1 ; Next device ( -1 == End of list ) 81 | dw DEVICE_ATTR 82 | dw DeviceStrategy_ 83 | dw DeviceInterrupt_ 84 | db DEVICE_NAME 85 | 86 | _HEADER ends 87 | 88 | end _cstart_ 89 | -------------------------------------------------------------------------------- /vmchcpd/devinit.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * devinit.c: Device driver initialization 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "debug.h" 30 | #include "devinit.h" 31 | #include "vmchcpd.h" 32 | #include "vmfunc.h" 33 | 34 | #pragma data_seg("_CODE") 35 | 36 | // 37 | // Place here any variables or constants that should go away after initialization 38 | // 39 | static char hellomsg[] = "\r\nVMCHCPD Version 0.1 - (C) 2022 Eduardo Casino - GNU GPL Ver. 2.0\r\n$"; 40 | static char errormsg[] = "ERROR: VMware not detected. Not installing.\r\n$"; 41 | 42 | uint16_t DeviceInit(void) 43 | { 44 | printMsg(hellomsg); 45 | 46 | if (RunningIn386OrHigher() && VMCheckVirtual()) 47 | { 48 | #ifdef DEBUG 49 | VMRpcOpen(); 50 | #endif 51 | 52 | fpSysVars = GetSysvars(); 53 | 54 | fpRequest->r_endaddr = MK_FP(getCS(), &transient_data); 55 | } 56 | else 57 | { 58 | printMsg(errormsg); 59 | 60 | fpRequest->r_endaddr = MK_FP(getCS(), 0); 61 | } 62 | 63 | return 0; 64 | } 65 | -------------------------------------------------------------------------------- /vmchcpd/devinit.h: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * devinit.h: Device driver initialization 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | #ifndef _DEVINIT_H_ 24 | #define _DEVINIT_H_ 25 | 26 | #include "dosdefs.h" 27 | 28 | extern SysVars __far *GetSysvars(void); 29 | #pragma aux GetSysvars = \ 30 | "mov ah, 0x52" \ 31 | "int 0x21" \ 32 | "sub bx, 12" \ 33 | __value [__es __bx]; 34 | 35 | // CPU identification routine 36 | // (Info from http://www.ukcpu.net/Programming/Hardware/x86/CPUID/x86-ID.asp) 37 | // 38 | // in 808x and 8018x, flags 12-15 are always set. 39 | // in 286, flags 12-15 are always clear in real mode. 40 | // in 32-bit processors, bit 15 is always clear in real mode. 41 | // bits 12-14 have the last value loaded into them. 42 | // 43 | static uint8_t RunningIn386OrHigher(void); 44 | #pragma aux RunningIn386OrHigher = \ 45 | "pushf" /* Save current flags */ \ 46 | "xor ax, ax" \ 47 | "push ax" \ 48 | "popf" /* Load all flags cleared */ \ 49 | "pushf" \ 50 | "pop ax" /* Load flags back to ax */ \ 51 | "and ax, 0xf000" /* If 86/186, flags 12-15 will be set */ \ 52 | "cmp ax, 0xf000" \ 53 | "je return" \ 54 | "mov ax, 0xf000" \ 55 | "push ax" \ 56 | "popf" /* Load flags 12-15 set */ \ 57 | "pushf" \ 58 | "pop ax" /* Load flags back to ax */ \ 59 | "and ax, 0xf000" /* If 286, flags 12-15 will be cleared */ \ 60 | "jz return" \ 61 | "mov al, 0x01" \ 62 | "return:" \ 63 | "popf" /* Restore flags */ \ 64 | __value [__al]; 65 | 66 | extern void *transient_data ; 67 | 68 | extern uint16_t DeviceInit(void); 69 | 70 | #endif /* _DEVINIT_H_ */ 71 | -------------------------------------------------------------------------------- /vmchcpd/makefile: -------------------------------------------------------------------------------- 1 | # vi: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab 2 | # 3 | # VMCHCPD 4 | # A DOS device driver for managing code page changes for VMSMOUNT 5 | # Copyright (C) 2022 Eduardo Casino (mail@eduardocasino.es) 6 | # 7 | # This program is free software; you can redistribute it and/or 8 | # modify it under the terms of the GNU General Public License 9 | # as published by the Free Software Foundation; either version 2 10 | # of the License, or (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program; if not, write to the Free Software 19 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | # MA 02110-1301, USA. 21 | # 22 | 23 | CC = wcc 24 | AS = wasm 25 | LD = wlink 26 | RM = rm -f 27 | CFLAGS = -I.. -bt=dos -ms -q -s -osh -DUSE_INTERNAL_STACK -DSTACK_SIZE=300 28 | ASFLAGS = -bt=DOS -zq -mt -0 29 | LDFLAGS = SYSTEM dos & 30 | ORDER clname HEADER clname DATA clname CODE clname BSS clname INIT & 31 | DISABLE 1014 OPTION QUIET, STATICS, MAP=vmchcpd.map 32 | 33 | !ifdef DEBUG 34 | CFLAGS += -DDEBUG 35 | DBGOBJ = vmtool.obj printf.obj debug.obj 36 | !endif 37 | 38 | TARGET = vmchcpd.sys 39 | 40 | OBJ = cstrtsys.obj vmfunc.obj devinit.obj $(DBGOBJ) vmchcpd.obj 41 | 42 | all : $(TARGET) 43 | 44 | clean : .SYMBOLIC 45 | $(RM) $(OBJ) $(TARGET) *.map *.err 46 | 47 | distclean : clean .SYMBOLIC 48 | 49 | $(TARGET) : $(OBJ) 50 | $(LD) $(LDFLAGS) NAME $(TARGET) FILE {$(OBJ)} 51 | 52 | devinit.obj : devinit.c .AUTODEPEND 53 | $(CC) -0 $(CFLAGS) -nt=_INIT -nc=INIT -fo=$@ $< 54 | 55 | vmfunc.obj : vmfunc.c .AUTODEPEND 56 | $(CC) -3 $(CFLAGS) -nt=_INIT -nc=INIT -fo=$@ $< 57 | 58 | !ifdef DEBUG 59 | vmtool.obj : ../vmtool.c .AUTODEPEND 60 | $(CC) -3 $(CFLAGS) -fo=$@ $< 61 | 62 | printf.obj : ../printf.c .AUTODEPEND 63 | $(CC) -3 $(CFLAGS) -fo=$@ $< 64 | 65 | debug.obj : ../debug.c .AUTODEPEND 66 | $(CC) -3 $(CFLAGS) -fo=$@ $< 67 | !endif 68 | 69 | .asm.obj : .AUTODEPEND 70 | $(AS) $(ASFLAGS) -fo=$@ $< 71 | 72 | .c.obj : .AUTODEPEND 73 | $(CC) -3 $(CFLAGS) -fo=$@ $< 74 | -------------------------------------------------------------------------------- /vmchcpd/nlscmds.h: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * 5 | * Copyright (c) 2022, Eduardo Casino 6 | * 7 | * This program is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU General Public License 9 | * as published by the Free Software Foundation; either version 2 10 | * of the License, or (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program; if not, write to the Free Software 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 20 | * MA 02110-1301, USA. 21 | */ 22 | 23 | #ifndef _NLSCMDS_ 24 | #define _NLSCMDS_ 25 | 26 | #include 27 | 28 | // Device Control Channel commands (just one for now) 29 | #define DEV_CTRL_SET_NLS 0 30 | #define DEV_CTRL_LAST_COMMAND DEV_CTRL_SET_NLS 31 | 32 | #pragma pack(push, 1) 33 | typedef struct { 34 | uint16_t length; 35 | uint16_t codePage; 36 | } NLSDATA; 37 | 38 | typedef struct { 39 | uint8_t ptr_size; 40 | uint16_t __far *unicode_table; 41 | uint8_t path_size; 42 | char table_path[1]; 43 | } SETNLS; 44 | 45 | typedef struct { 46 | uint8_t num; 47 | union { 48 | SETNLS set_nls; 49 | } cmd; 50 | } CHCPCMD; 51 | 52 | #pragma pack(pop) 53 | 54 | #endif /* _NLSCMDS_ */ 55 | -------------------------------------------------------------------------------- /vmchcpd/vmchcpd.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * vmchcpd.c: Device driver implementation 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | // TODO: Check also if VBSF is running 25 | // 26 | 27 | #include 28 | #include 29 | #include 30 | 31 | #include "debug.h" 32 | #include "device.h" 33 | #include "devinit.h" 34 | #include "nlscmds.h" 35 | #include "redir.h" 36 | #include "vmcall.h" 37 | #include "vmchcpd.h" 38 | #include "vmtool.h" 39 | 40 | static uint8_t our_stack[STACK_SIZE]; 41 | uint8_t *stack_bottom = our_stack + STACK_SIZE; 42 | uint32_t dos_stack; 43 | 44 | request __far *fpRequest = (request __far *)0; 45 | 46 | SysVars __far *fpSysVars = (SysVars __far *)0; 47 | 48 | static uint16_t __far *fpUnicodeTbl = (uint16_t __far *)0; 49 | 50 | #define FILE_NAME_SIZE 13 // leading '\' + Name + '.' + ext 51 | #define MAX_PATH_LEN 80 // Including terminating null 52 | static char unicodeTblPath[MAX_PATH_LEN] = {0}; 53 | 54 | static inline uint16_t CmdSetNls(SETNLS __far *command) 55 | { 56 | if (command->ptr_size == 4 && command->path_size != 0 && command->path_size <= MAX_PATH_LEN - FILE_NAME_SIZE) 57 | { 58 | register uint8_t i; 59 | 60 | fpUnicodeTbl = command->unicode_table; 61 | 62 | for (i = 0; i < command->path_size; ++i) 63 | { 64 | unicodeTblPath[i] = command->table_path[i]; 65 | } 66 | 67 | return S_DONE; 68 | } 69 | 70 | return (S_DONE | S_ERROR | E_WRITE); 71 | } 72 | 73 | int _fstrncmp_local(const char __far *s1, const char *s2, size_t num) 74 | { 75 | while (*s1 && num) 76 | { 77 | if (*s1 != *s2) 78 | { 79 | break; 80 | } 81 | 82 | s1++, s2++, num--; 83 | } 84 | 85 | return (num == 0 ? num : *(const unsigned char __far *)s1 - *(const unsigned char *)s2); 86 | } 87 | 88 | static bool IsVMRedirectorInstalled(void) 89 | { 90 | int driveNum; 91 | CDS __far *currDir; 92 | 93 | for (driveNum = 4; driveNum < fpSysVars->lastDrive; ++driveNum) 94 | { 95 | currDir = &fpSysVars->currDir[driveNum]; 96 | if (currDir->u.Net.parameter == VMSMOUNT_MAGIC) 97 | { 98 | break; 99 | } 100 | } 101 | 102 | // I'm going to be a bit paranoid here 103 | // 104 | if (driveNum < fpSysVars->lastDrive) 105 | { 106 | if ((uint32_t)currDir->u.Net.redirIFSRecordPtr != 0ui32 && 107 | (uint32_t)currDir->u.Net.redirIFSRecordPtr != 0xffffffffui32) 108 | { 109 | Signature __far *sig = (Signature __far *)currDir->u.Net.redirIFSRecordPtr; 110 | 111 | if (!_fstrncmp_local(sig->signature, "VMSMOUNT", 9)) 112 | { 113 | // Double check that this is actually the instance we know of 114 | // 115 | if (FP_SEG(sig->ourHandler) == FP_SEG(fpUnicodeTbl)) 116 | { 117 | return true; 118 | } 119 | } 120 | } 121 | } 122 | 123 | DPUTS("VMSMOUNT NOT found"); 124 | return false; 125 | } 126 | 127 | static inline uint16_t loadUnicodeTable(void) 128 | { 129 | NLSDATA __far *nlsData = (NLSDATA __far *)fpRequest->r_data; 130 | 131 | uint16_t retCode = S_DONE | S_ERROR | E_WRITE; 132 | 133 | if (fpUnicodeTbl == (uint16_t __far *)0 || !IsVMRedirectorInstalled()) 134 | { 135 | return S_DONE; 136 | } 137 | 138 | if (nlsData->length >= 2) 139 | { 140 | int i, nc; 141 | 142 | for (i = 0; unicodeTblPath[i] != '\0' && i < MAX_PATH_LEN - FILE_NAME_SIZE; ++i) 143 | ; 144 | 145 | if (unicodeTblPath[i] == '\0') 146 | { 147 | int cp = nlsData->codePage; 148 | uint16_t handle; 149 | nc = i; 150 | 151 | unicodeTblPath[i++] = '\\'; 152 | unicodeTblPath[i++] = 'c'; 153 | if (cp < 1000) 154 | { 155 | unicodeTblPath[i++] = 'p'; 156 | } 157 | else 158 | { 159 | unicodeTblPath[i++] = (cp / 1000) + '0'; 160 | cp %= 1000; 161 | } 162 | unicodeTblPath[i++] = (cp / 100) + '0'; 163 | cp %= 100; 164 | unicodeTblPath[i++] = (cp / 10) + '0'; 165 | cp %= 10; 166 | unicodeTblPath[i++] = cp + '0'; 167 | unicodeTblPath[i++] = 'u'; 168 | unicodeTblPath[i++] = 'n'; 169 | unicodeTblPath[i++] = 'i'; 170 | unicodeTblPath[i++] = '.'; 171 | unicodeTblPath[i++] = 't'; 172 | unicodeTblPath[i++] = 'b'; 173 | unicodeTblPath[i++] = 'l'; 174 | unicodeTblPath[i++] = '\0'; 175 | 176 | DPRINTF("unicodeTblPath = `%s`", unicodeTblPath); 177 | handle = _open(unicodeTblPath); 178 | DPRINTF("handle = %d", handle); 179 | 180 | unicodeTblPath[nc] = '\0'; // Restore path 181 | 182 | if (handle != 0xffff) 183 | { 184 | uint8_t c[2]; 185 | 186 | // Looking for the '\r\n' table description terminator and 0x01 format 187 | // designator (Single byte to 16bit) 188 | // 189 | for (i = 0; i < 256 && 1 == _read(handle, 1, c) && c[0] !='\r'; ++i) 190 | ; 191 | 192 | DPRINTF("c = 0x%x", c[0]); 193 | if (c[0] == '\r') 194 | { 195 | if (2 == _read(handle, 2, c) && c[0] == '\n' && c[1] == 0x01) 196 | { 197 | DPRINTF("c = 0x%x 0x%x", c[0], c[1]); 198 | 199 | if (256 == _read(handle, 256, fpUnicodeTbl)) 200 | { 201 | DDUMP("fpUnicodeTbl", fpUnicodeTbl, 256); 202 | retCode = S_DONE; 203 | } 204 | } 205 | } 206 | 207 | _close(handle); 208 | } 209 | } 210 | } 211 | 212 | return retCode; 213 | } 214 | 215 | static uint16_t GenericIOCTL(void) 216 | { 217 | DPUTS("GenericIOCTL()"); 218 | 219 | if (fpRequest->r_fun == 0x004A) 220 | { 221 | return loadUnicodeTable(); 222 | } 223 | 224 | return (S_DONE | S_ERROR | E_CMD); 225 | } 226 | 227 | static uint16_t IOCTLOutput(void) 228 | { 229 | CHCPCMD __far *command = (CHCPCMD __far *)fpRequest->r_trans; 230 | 231 | DPUTS("IOCTLOutput()"); 232 | 233 | if (fpRequest->r_count >= sizeof(CHCPCMD)) 234 | { 235 | switch (command->num) 236 | { 237 | case DEV_CTRL_SET_NLS: 238 | return CmdSetNls(&command->cmd.set_nls); 239 | break; 240 | 241 | default: 242 | return (S_DONE | S_ERROR | E_CMD); 243 | break; 244 | } 245 | } 246 | 247 | return (S_DONE | S_ERROR | E_LENGTH); 248 | } 249 | 250 | static uint16_t Open(void) 251 | { 252 | DPUTS("Open()"); 253 | 254 | return S_DONE; 255 | } 256 | 257 | static uint16_t Close(void) 258 | { 259 | DPUTS("Close()"); 260 | 261 | return S_DONE; 262 | } 263 | 264 | static driverFunction_t dispatchTable[] = { 265 | DeviceInit, // 0x00 Initialize 266 | NULL, // 0x01 MEDIA Check 267 | NULL, // 0x02 Build BPB 268 | NULL, // 0x03 Ioctl In 269 | NULL, // 0x04 Input (Read) 270 | NULL, // 0x05 Non-destructive Read 271 | NULL, // 0x06 Input Status 272 | NULL, // 0x07 Input Flush 273 | NULL, // 0x08 Output (Write) 274 | NULL, // 0x09 Output with verify 275 | NULL, // 0x0A Output Status 276 | NULL, // 0x0B Output Flush 277 | IOCTLOutput, // 0x0C Ioctl Out 278 | Open, // 0x0D Device Open 279 | Close, // 0x0E Device Close 280 | NULL, // 0x0F Removable MEDIA 281 | NULL, // 0x10 Output till busy 282 | NULL, // 0x11 Unused 283 | NULL, // 0x12 Unused 284 | GenericIOCTL, // 0x13 Generic Ioctl 285 | NULL, // 0x14 Unused 286 | NULL, // 0x15 Unused 287 | NULL, // 0x16 Unused 288 | NULL, // 0x17 Get Logical Device 289 | NULL, // 0x18 Set Logical Device 290 | NULL // 0x19 Ioctl Query 291 | }; 292 | 293 | static driverFunction_t currentFunction; 294 | 295 | void __far DeviceInterrupt(void) 296 | #pragma aux DeviceInterrupt __parm [] 297 | { 298 | switch_stack(); 299 | 300 | push_regs(); 301 | 302 | if (fpRequest->r_command > C_MAXCMD || NULL == (currentFunction = dispatchTable[fpRequest->r_command])) 303 | { 304 | fpRequest->r_status = S_DONE | S_ERROR | E_CMD; 305 | } 306 | else 307 | { 308 | fpRequest->r_status = currentFunction(); 309 | } 310 | 311 | DDUMP("our_stack", our_stack, STACK_SIZE); 312 | 313 | pop_regs(); 314 | 315 | restore_stack(); 316 | } 317 | 318 | void __far DeviceStrategy(request __far *req) 319 | #pragma aux DeviceStrategy __parm [__es __bx] 320 | { 321 | fpRequest = req; 322 | } 323 | -------------------------------------------------------------------------------- /vmchcpd/vmchcpd.h: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * vmchcpd.h: Device driver implementation 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | #ifndef _VMCHCPD_H_ 24 | #define _VMCHCPD_H_ 25 | 26 | #include 27 | 28 | #include "device.h" 29 | #include "dosdefs.h" 30 | 31 | #define MY_NAME "VMTOOLSD" 32 | 33 | #if ( _M_IX86 >= 0x200 ) 34 | #define push_all "pusha" 35 | #define pop_all "popa" 36 | #else 37 | #define push_all "push ax" "push cx" "push dx" "push bx" "push sp" "push bp" "push si" "push di" 38 | #define pop_all "pop di" "pop si" "pop bp" "pop bx" "pop bx" "pop dx" "pop cx" "pop ax" 39 | #endif 40 | 41 | #if ( _M_IX86 >= 0x300 ) 42 | #define push_segregs "push ds" "push es" "push fs" "push gs" 43 | #define pop_segregs "pop gs" "pop fs" "pop es" "pop ds" 44 | #else 45 | #define push_segregs "push ds" "push es" "push bx" "push bx" 46 | #define pop_segregs "pop bx" "pop bx" "pop es" "pop ds" 47 | #endif 48 | 49 | #ifdef USE_INTERNAL_STACK 50 | 51 | #ifndef STACK_SIZE 52 | #define STACK_SIZE 500 53 | #endif 54 | 55 | extern uint8_t *stack_bottom; 56 | extern uint32_t dos_stack; 57 | 58 | extern void switch_stack( void ); 59 | #pragma aux switch_stack = \ 60 | "cli" \ 61 | "mov word ptr [cs:dos_stack], sp" \ 62 | "mov word ptr [cs:dos_stack+2], ss" \ 63 | "push cs" \ 64 | "pop ss" \ 65 | "mov sp, word ptr [cs:stack_bottom]" \ 66 | "sti"; 67 | 68 | extern void restore_stack( void ); 69 | #pragma aux restore_stack = \ 70 | "cli" \ 71 | "mov sp, word ptr [cs:dos_stack]" \ 72 | "mov ss, word ptr [cs:dos_stack+2]" \ 73 | "sti"; 74 | 75 | #endif /* USE_INTERNAL_STACK */ 76 | 77 | extern void push_regs( void ); 78 | #pragma aux push_regs = \ 79 | "pushf" \ 80 | push_all \ 81 | push_segregs \ 82 | "push cs" "pop ds"; 83 | 84 | extern void pop_regs( void ); 85 | #pragma aux pop_regs = \ 86 | pop_segregs \ 87 | pop_all \ 88 | "popf"; 89 | 90 | extern __segment getCS( void ); 91 | #pragma aux getCS = \ 92 | "mov ax, cs"; 93 | 94 | extern void printMsg( const char * ); 95 | #pragma aux printMsg = \ 96 | "mov ah, 0x9" \ 97 | "int 0x21" \ 98 | __parm [__dx] \ 99 | __modify [__ax __di __es]; 100 | 101 | #define set_dos_stack_for_internal_call \ 102 | "cli" \ 103 | "mov bp, sp" \ 104 | "mov sp, word ptr [cs:dos_stack]" \ 105 | "mov ss, word ptr [cs:dos_stack+2]" \ 106 | "sti" 107 | 108 | #define restore_stack_after_internal_call \ 109 | "cli" \ 110 | "push cs" \ 111 | "pop ss" \ 112 | "mov sp, bp" \ 113 | "sti" 114 | 115 | extern uint16_t _open( const char *fname ); 116 | #pragma aux _open = \ 117 | push_all \ 118 | push_segregs \ 119 | set_dos_stack_for_internal_call \ 120 | "xor cx, cx" \ 121 | "mov ax, 0x1226" \ 122 | "push bp" \ 123 | "int 0x2f" \ 124 | "pop bp" \ 125 | restore_stack_after_internal_call \ 126 | "jnc return" \ 127 | "mov ax, 0xffff" \ 128 | "return:" \ 129 | "mov word ptr [ss:bp+22], ax" \ 130 | pop_segregs \ 131 | pop_all \ 132 | __parm [__dx] \ 133 | __value [__ax]; 134 | 135 | extern void _close(uint16_t handle); 136 | #pragma aux _close = \ 137 | push_all \ 138 | push_segregs \ 139 | set_dos_stack_for_internal_call \ 140 | "mov ax, 0x1227" \ 141 | "push bp" \ 142 | "int 0x2f" \ 143 | "pop bp" \ 144 | restore_stack_after_internal_call \ 145 | pop_segregs \ 146 | pop_all \ 147 | __parm [__bx]; 148 | 149 | extern uint16_t _read(uint16_t handle, uint16_t count, void __far *buffer); 150 | #pragma aux _read = \ 151 | push_all \ 152 | push_segregs \ 153 | set_dos_stack_for_internal_call \ 154 | "xchg ax, dx" \ 155 | "mov ds, ax" \ 156 | "mov ax, 0x1229" \ 157 | "push bp" \ 158 | "int 0x2f" \ 159 | "pop bp" \ 160 | restore_stack_after_internal_call \ 161 | "jnc return" \ 162 | "mov ax, 0xffff" \ 163 | "return:" \ 164 | "mov word ptr [ss:bp+22], ax" \ 165 | pop_segregs \ 166 | pop_all \ 167 | __value [__ax] \ 168 | __parm [__bx] [__cx] [__dx __ax]; 169 | 170 | typedef uint16_t (*driverFunction_t)(void); 171 | 172 | extern request __far *fpRequest; 173 | 174 | extern SysVars __far *fpSysVars; 175 | 176 | #endif /* _VMCHCPD_H_ */ 177 | -------------------------------------------------------------------------------- /vmchcpd/vmfunc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * vmfunc.c: VMware interface functions 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | 24 | #include 25 | 26 | #include "debug.h" 27 | #include "vmcall.h" 28 | #include "vmtool.h" 29 | 30 | #pragma data_seg("_CODE") 31 | 32 | #ifdef DEBUG 33 | void VMRpcOpen(void) 34 | { 35 | CREGS r; 36 | 37 | r.eax.word = VMWARE_MAGIC; 38 | r.ebx.word = VMRPC_OPEN_RPCI | VMRPC_ENHANCED; 39 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_OPEN; 40 | r.edx.word = VMWARE_CMD_PORT; 41 | r.ebp.word = r.edi.word = r.esi.word = 0; 42 | 43 | _VmwCommand(&r); 44 | 45 | if (r.eax.word || r.ecx.word != 0x00010000L || r.edx.halfs.low) 46 | { 47 | 48 | rpcd.channel = VMRPC_INVALID_CHANNEL; 49 | } 50 | else 51 | { 52 | rpcd.channel = r.edx.word; 53 | rpcd.cookie1 = r.esi.word; 54 | rpcd.cookie2 = r.edi.word; 55 | } 56 | 57 | return; 58 | } 59 | #endif 60 | 61 | bool VMCheckVirtual(void) 62 | { 63 | CREGS r; 64 | 65 | r.eax.word = VMWARE_MAGIC; 66 | r.ebx.word = ~VMWARE_MAGIC; 67 | r.ecx.halfs.high = 0xFFFF; 68 | r.ecx.halfs.low = VMCMD_GET_VERSION; 69 | r.edx.word = VMWARE_CMD_PORT; 70 | r.ebp.word = r.edi.word = r.esi.word = 0; 71 | 72 | _VmwCommand(&r); 73 | 74 | if (r.ebx.word == VMWARE_MAGIC) 75 | { 76 | return true; 77 | } 78 | else 79 | { 80 | return false; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /vmchcpd/vmfunc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * VMCHCPD 3 | * A DOS device driver for managing code page changes for VMSMOUNT 4 | * Copyright (C) 2022, Eduardo Casino (mail@eduardocasino.es) 5 | * 6 | * vmfunc.h: VMware interface functions 7 | * 8 | * This program is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU General Public License 10 | * as published by the Free Software Foundation; either version 2 11 | * of the License, or (at your option) any later version. 12 | * 13 | * This program is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU General Public License 19 | * along with this program; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 | * MA 02110-1301, USA. 22 | */ 23 | #ifndef _VMFUNC_H_ 24 | #define _VMFUNC_H_ 25 | 26 | #include 27 | 28 | #include "debug.h" 29 | 30 | #ifdef DEBUG 31 | extern void VMRpcOpen(void); 32 | #endif 33 | 34 | extern bool VMCheckVirtual(void); 35 | 36 | #endif /* _VMFUNC_H_ */ 37 | -------------------------------------------------------------------------------- /vmdos.h: -------------------------------------------------------------------------------- 1 | #ifndef _VMDOS_H_ 2 | #define _VMDOS_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * vmdos.h: Conversions from/to vmware and DOS 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | #include "dosdefs.h" 30 | #include "vmshf.h" 31 | 32 | extern int32_t gmtOffset; 33 | extern uint8_t __far *fpFUcase; 34 | extern FChar __far *fpFChar; 35 | extern uint8_t caseSensitive; 36 | 37 | extern unsigned char toupper_local(unsigned char c); 38 | extern int IllegalChar(unsigned char c); 39 | extern uint32_t FTimeToFatTime(uint64_t); 40 | extern uint64_t FatTimeToFTime(uint32_t); 41 | extern uint8_t FModeToFatAttr(VMShfAttr *); 42 | extern VMShfAttr *FatAttrToFMode(uint8_t); 43 | extern uint32_t DosExtActionToOpenAction(uint16_t); 44 | extern int FNameToFcbName(char *fcbName, char *fName, uint16_t fNameLen, uint8_t isRoot, uint8_t lfn); 45 | extern int DosPathToPortable(uint8_t *dst, uint8_t __far *src, uint8_t utf); 46 | extern uint16_t VmshfStatusToDosError(uint32_t); 47 | 48 | #endif /* _VMDOS_H_ */ 49 | -------------------------------------------------------------------------------- /vmint.h: -------------------------------------------------------------------------------- 1 | #ifndef _VMINT_H_ 2 | #define _VMINT_H_ 3 | #pragma once 4 | /* 5 | * VMSMOUNT 6 | * A network redirector for mounting VMware's Shared Folders in DOS 7 | * Copyright (C) 2011-2022 Eduardo Casino 8 | * 9 | * vmint.h: Basic 64bit integer arithmetic 10 | * 11 | * This program is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU General Public License 13 | * as published by the Free Software Foundation; either version 2 14 | * of the License, or (at your option) any later version. 15 | * 16 | * This program is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU General Public License 22 | * along with this program; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 24 | * MA 02110-1301, USA. 25 | */ 26 | 27 | #include 28 | 29 | void u64mul32(uint64_t *result, uint64_t multiplicand, uint32_t multiplier); 30 | #pragma aux u64mul32 = \ 31 | "mov bx, word ptr [esp]" /* Pointer to result */ \ 32 | "mov eax, dword ptr [esp+0x02]" /* Low word of multiplicand */ \ 33 | "mov ecx, dword ptr [esp+0x0a]" /* Multiplier */ \ 34 | "mul ecx" \ 35 | "mov dword ptr [bx], eax" /* Low dword of result */ \ 36 | "mov dword ptr [bx+4], edx" /* Temporary storage for hogh dword of result */ \ 37 | "mov eax, dword ptr [esp+0x06]" /* High word of multiplicand */ \ 38 | "mov ecx, dword ptr [esp+0x0a]" /* Multiplier */ \ 39 | "mul ecx" \ 40 | "add dword ptr [bx+4], eax" \ 41 | __parm __caller [] \ 42 | __modify [__ax __bx __cx __dx __es]; 43 | 44 | void u32mul32(uint32_t *result, uint32_t multiplicand, uint32_t multiplier); 45 | #pragma aux u32mul32 = \ 46 | "mov bx, word ptr [esp]" /* Pointer to result */ \ 47 | "mov eax, dword ptr [esp+0x02]" /* Multiplicand */ \ 48 | "mov ecx, dword ptr [esp+0x06]" /* Multiplier */ \ 49 | "mul ecx" \ 50 | "mov dword ptr [bx], eax" /* Low word of result */ \ 51 | __parm __caller [] \ 52 | __modify [__ax __bx __cx __dx __es]; 53 | 54 | uint32_t u64div32(uint64_t *quotient, uint64_t dividend, uint32_t divisor); 55 | #pragma aux u64div32 = \ 56 | "mov bx, word ptr [esp]" /* Pointer to quotient */ \ 57 | "mov eax, dword ptr [esp+0x06]" /* High dword of dividend */ \ 58 | "xor edx, edx" \ 59 | "mov ecx, dword ptr [esp+0x0a]" /* divisor */ \ 60 | "div ecx" \ 61 | "mov dword ptr [bx+4], eax" /* High dword of quotient */ \ 62 | "mov eax, dword ptr [esp+0x02]" /* Low dword of dividend */ \ 63 | "div ecx" \ 64 | "mov dword ptr [bx], eax" /* Low dword of quotient */ \ 65 | "mov ax, dx" /* return reminder in dx:ax */ \ 66 | "ror edx, 16" \ 67 | __parm __caller [] \ 68 | __value [__dx __ax] \ 69 | __modify [__ax __bx __cx __dx __es]; 70 | 71 | uint32_t u32div32(uint32_t *quotient, uint32_t dividend, uint32_t divisor); 72 | #pragma aux u32div32 = \ 73 | "mov bx, word ptr [esp]" /* Pointer to quotient */ \ 74 | "mov eax, dword ptr [esp+0x02]" /* Dividend */ \ 75 | "xor edx, edx" \ 76 | "mov ecx, dword ptr [esp+0x06]" /* Divisor */ \ 77 | "div ecx" \ 78 | "mov dword ptr [bx], eax" /* Quotient */ \ 79 | "mov ax, dx" /* Return reminder in dx:ax */ \ 80 | "ror edx, 16" \ 81 | __parm __caller [] \ 82 | __value [__dx __ax] \ 83 | __modify [__ax __bx __cx __dx __es]; 84 | 85 | void u64add32(uint64_t *result, uint64_t value1, uint32_t value2); 86 | #pragma aux u64add32 = \ 87 | "mov bx, word ptr [esp]" \ 88 | "mov eax, dword ptr [esp+0x02]" \ 89 | "add eax, dword ptr [esp+0x0a]" \ 90 | "mov dword ptr [bx], eax" \ 91 | "mov eax, dword ptr [esp+0x06]" \ 92 | "adc eax, 0" \ 93 | "mov dword ptr [bx+4], eax" \ 94 | __parm __caller [] \ 95 | __modify [__ax __bx __cx __dx __es]; 96 | 97 | void u64sub32(uint64_t *result, uint64_t value1, uint32_t value2); 98 | #pragma aux u64sub32 = \ 99 | "mov bx, word ptr [esp]" \ 100 | "mov eax, dword ptr [esp+0x02]" \ 101 | "sub eax, dword ptr [esp+0x0a]" \ 102 | "mov dword ptr [bx], eax" \ 103 | "mov eax, dword ptr [esp+0x06]" \ 104 | "sbb eax, 0" \ 105 | "mov dword ptr [bx+4], eax" \ 106 | __parm __caller [] \ 107 | __modify [__ax __bx __cx __dx __es]; 108 | 109 | #endif /* _VMINT_H_ */ 110 | -------------------------------------------------------------------------------- /vmtool.c: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * 5 | * This file is a derivative work of the VMware Command Line Tools, by Ken Kato 6 | * http://sites.google.com/site/chitchatvmback/ 7 | * 8 | * vmtool.c: VMware backdoor call wrapper functions 9 | * 10 | * Copyright (c) 2002-2008, Ken Kato 11 | * Copyright (c) 2011-2022, Eduardo Casino 12 | * 13 | * This program is free software; you can redistribute it and/or 14 | * modify it under the terms of the GNU General Public License 15 | * as published by the Free Software Foundation; either version 2 16 | * of the License, or (at your option) any later version. 17 | * 18 | * This program is distributed in the hope that it will be useful, 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 | * GNU General Public License for more details. 22 | * 23 | * You should have received a copy of the GNU General Public License 24 | * along with this program; if not, write to the Free Software 25 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 26 | * MA 02110-1301, USA. 27 | */ 28 | 29 | #include 30 | 31 | #include "vmcall.h" 32 | #include "vmtool.h" 33 | 34 | static CREGS r; 35 | 36 | /* 37 | send RPC command 38 | */ 39 | int VMRpcSend(const rpc_t *rpc, const unsigned char *command, uint32_t length) 40 | { 41 | /* send command length */ 42 | 43 | r.eax.word = VMWARE_MAGIC; 44 | r.ebx.word = length; 45 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_SENDLEN; 46 | r.edx.word = rpc->channel | VMWARE_CMD_PORT; 47 | r.ebp.word = 0; 48 | r.esi.word = rpc->cookie1; 49 | r.edi.word = rpc->cookie2; 50 | 51 | _VmwCommand(&r); 52 | 53 | if (r.eax.word || r.ecx.halfs.high == 0) 54 | return -1; 55 | 56 | if (!length) 57 | return 0; 58 | 59 | /* send command string */ 60 | 61 | if (rpc->cookie1 && rpc->cookie2) 62 | { 63 | 64 | /* enhanced RPC */ 65 | 66 | r.eax.word = VMWARE_MAGIC; 67 | r.ebx.word = VMRPC_ENH_DATA; 68 | r.ecx.word = length; 69 | r.edx.word = rpc->channel | VMWARE_RPC_PORT; 70 | r.esi.word = (uint32_t)command; 71 | r.edi.word = rpc->cookie2; 72 | r.ebp.word = rpc->cookie1; 73 | 74 | _VmwRpcOuts(&r); 75 | 76 | if (r.ebx.word != VMRPC_ENH_DATA) 77 | return -1; 78 | } 79 | else 80 | { 81 | int i; 82 | /* conventional RPC */ 83 | 84 | for (;;) 85 | { 86 | r.eax.word = VMWARE_MAGIC; 87 | r.ebx.word = 0; 88 | for (i = 0; i < length && i < 4; ++i) 89 | r.ebx.byte[i] = command[i]; 90 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_SENDDAT; 91 | r.edx.word = rpc->channel | VMWARE_CMD_PORT; 92 | r.ebp.word = r.edi.word = r.esi.word = 0; 93 | 94 | _VmwCommand(&r); 95 | 96 | if (r.eax.word || r.ecx.halfs.high == 0) 97 | return -1; 98 | 99 | if (length <= 4) 100 | break; 101 | 102 | length -= 4; 103 | command += 4; 104 | } 105 | } 106 | 107 | return 0; 108 | } 109 | 110 | int VMRpcRecvLen(const rpc_t *rpc, uint32_t *length, uint16_t *dataid) 111 | { 112 | /* receive result length */ 113 | 114 | r.eax.word = VMWARE_MAGIC; 115 | r.ebx.word = 0; 116 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_RECVLEN; 117 | r.edx.word = rpc->channel | VMWARE_CMD_PORT; 118 | r.ebp.word = 0; 119 | r.esi.word = rpc->cookie1; 120 | r.edi.word = rpc->cookie2; 121 | 122 | _VmwCommand(&r); 123 | 124 | if (r.eax.word || r.ecx.halfs.high == 0) 125 | return -1; 126 | 127 | *length = r.ebx.word; 128 | *dataid = r.edx.halfs.high; 129 | 130 | return 0; 131 | } 132 | 133 | int VMRpcRecvDat(const rpc_t *rpc, unsigned char *data, uint32_t length, uint16_t dataid) 134 | { 135 | if (rpc->cookie1 && rpc->cookie2) 136 | { 137 | 138 | /* enhanced RPC */ 139 | 140 | r.eax.word = VMWARE_MAGIC; 141 | r.ebx.word = VMRPC_ENH_DATA; 142 | r.ecx.word = length; 143 | r.edx.word = rpc->channel | VMWARE_RPC_PORT; 144 | r.esi.word = rpc->cookie1; 145 | r.edi.word = (uint32_t)data; 146 | r.ebp.word = rpc->cookie2; 147 | 148 | _VmwRpcIns(&r); 149 | 150 | if (r.ebx.word != VMRPC_ENH_DATA) 151 | return -1; 152 | } 153 | else 154 | { 155 | /* conventional RPC */ 156 | 157 | for (;;) 158 | { 159 | 160 | r.eax.word = VMWARE_MAGIC; 161 | r.ebx.word = dataid; 162 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_RECVDAT; 163 | r.edx.word = rpc->channel | VMWARE_CMD_PORT; 164 | r.ebp.word = r.edi.word = r.esi.word = 0; 165 | 166 | _VmwCommand(&r); 167 | 168 | if (r.eax.word || r.ecx.halfs.high == 0) 169 | return -1; 170 | 171 | *(data++) = r.ebx.word; 172 | 173 | if (length <= 4) 174 | break; 175 | 176 | length -= 4; 177 | } 178 | } 179 | 180 | r.eax.word = VMWARE_MAGIC; 181 | r.ebx.word = dataid; 182 | r.ecx.word = VMCMD_INVOKE_RPC | VMRPC_RECVEND; 183 | r.edx.word = rpc->channel | VMWARE_CMD_PORT; 184 | r.ebp.word = 0; 185 | r.esi.word = rpc->cookie1; 186 | r.edi.word = rpc->cookie2; 187 | 188 | _VmwCommand(&r); 189 | 190 | if (r.eax.word || r.ecx.halfs.high == 0) 191 | return -1; 192 | 193 | return 0; 194 | } 195 | -------------------------------------------------------------------------------- /vmtool.h: -------------------------------------------------------------------------------- 1 | /* 2 | * VMSMOUNT 3 | * A network redirector for mounting VMware's Shared Folders in DOS 4 | * 5 | * This file is a derivative work of the VMware Command Line Tools, by Ken Kato 6 | * http://sites.google.com/site/chitchatvmback/ 7 | * 8 | * vmtool.h: VMware backdoor call wrapper functions 9 | * 10 | * Copyright (c) 2002-2008, Ken Kato 11 | * Copyright (c) 2011-2022, Eduardo Casino 12 | * 13 | * This program is free software; you can redistribute it and/or 14 | * modify it under the terms of the GNU General Public License 15 | * as published by the Free Software Foundation; either version 2 16 | * of the License, or (at your option) any later version. 17 | * 18 | * This program is distributed in the hope that it will be useful, 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 | * GNU General Public License for more details. 22 | * 23 | * You should have received a copy of the GNU General Public License 24 | * along with this program; if not, write to the Free Software 25 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 26 | * MA 02110-1301, USA. 27 | */ 28 | 29 | #ifndef _VMTOOL_H_ 30 | #define _VMTOOL_H_ 31 | 32 | #include 33 | 34 | #ifdef __cplusplus 35 | extern "C" { 36 | #endif /* __cplusplus */ 37 | 38 | /* 39 | magic number and port numbers 40 | */ 41 | #define VMWARE_MAGIC 0x564D5868UL /* Beckdoor magic number (VMXh) */ 42 | #define VMWARE_CMD_PORT 0x5658 /* Backdoor command port (VX) */ 43 | #define VMWARE_RPC_PORT 0x5659 /* RPC data transfer port (VY) */ 44 | 45 | /* 46 | backdoor command numbers 47 | */ 48 | #define VMCMD_GET_MEGAHERZ 0x01 /* Get processor MHz */ 49 | #define VMCMD_APM_FUNCTION 0x02 /* APM function */ 50 | #define VMCMD_GET_DISKGEO 0x03 /* ? Get disk geometry */ 51 | #define VMCMD_GET_CURSOR 0x04 /* Get cursor position */ 52 | #define VMCMD_SET_CURSOR 0x05 /* Set cursor position */ 53 | #define VMCMD_GET_CLIPLEN 0x06 /* Get host->guest copy length */ 54 | #define VMCMD_GET_CLIPDATA 0x07 /* Get host->guest copy data */ 55 | #define VMCMD_SET_CLIPLEN 0x08 /* Set guest->host copy length */ 56 | #define VMCMD_SET_CLIPDATA 0x09 /* Set guest->host copy data */ 57 | #define VMCMD_GET_VERSION 0x0a /* Get version number */ 58 | #define VMCMD_GET_DEVINFO 0x0b /* Get device information */ 59 | #define VMCMD_SET_DEVSTAT 0x0c /* Set device state */ 60 | #define VMCMD_GET_OPTIONS 0x0d /* Get GUI option settings */ 61 | #define VMCMD_SET_OPTIONS 0x0e /* Set GUI option settings */ 62 | #define VMCMD_GET_SCRSIZE 0x0f /* Get host's screen size */ 63 | #define VMCMD_UNUSED_10H 0x10 /* ? monitorControl */ 64 | #define VMCMD_GET_HARDWARE 0x11 /* Get Virtual HW version */ 65 | #define VMCMD_OSNOTFOUND 0x12 /* OS not found message popup */ 66 | #define VMCMD_GET_BIOSUUID 0x13 /* Get BIOS UUID */ 67 | #define VMCMD_GET_MEMSIZE 0x14 /* Get VM memory size in MB */ 68 | #define VMCMD_UNUSED_15H 0x15 /* ? (likely to be unused) */ 69 | #define VMCMD_OS2INTCUR 0x16 /* ? getOS2IntCursor */ 70 | #define VMCMD_GET_GMTIME 0x17 /* Get host's time (GMT) */ 71 | #define VMCMD_STOPCATCHUP 0x18 /* ? stopCatchup */ 72 | #define VMCMD_UNUSED_19H 0x19 /* ? (likely to be unused) */ 73 | #define VMCMD_UNUSED_1AH 0x1a /* ? (likely to be unused) */ 74 | #define VMCMD_UNUSED_1BH 0x1b /* ? (likely to be unused) */ 75 | #define VMCMD_INITSCSIOP 0x1c /* ? initScsiOprom */ 76 | #define VMCMD_UNUSED_1DH 0x1d /* ? (likely to be unused) */ 77 | #define VMCMD_INVOKE_RPC 0x1e /* Invoke RPC command. */ 78 | #define VMCMD_RESERVED_0 0x1f /* ? rsvd0 host memory size? */ 79 | #define VMCMD_RESERVED_1 0x20 /* ? rsvd1 */ 80 | #define VMCMD_RESERVED_2 0x21 /* ? rsvd2 */ 81 | #define VMCMD_ACPID 0x22 /* ? ACPID */ 82 | #define VMCMD_UNUSED_23h 0x23 /* ? (likely to be unused) */ 83 | #define VMCMD_UNUSED_24H 0x24 /* ? (likely to be unused) */ 84 | #define VMCMD_PATCHSMBIOS 0x25 /* ? PatchSMBIOS */ 85 | #define VMCMD_UNUSED_26H 0x26 /* ? (likely to be unused) */ 86 | #define VMCMD_ABSMOUSEDAT 0x27 /* ? absMouseDataDisable */ 87 | #define VMCMD_ABSMOUSESTA 0x28 /* ? absMouseStatusDisable */ 88 | #define VMCMD_ABSMOUSECMD 0x29 /* ? absMouseCommandDisable */ 89 | #define VMCMD_UNKNOWN_2AH 0x2a /* ? (likely to be unused) */ 90 | #define VMCMD_PATCHACPITB 0x2b /* ? PatchACPITables */ 91 | #define VMCMD_GETTIMEFULL 0x2e /* */ 92 | 93 | #define VMCMD_MAXVAL_WS2 0x21 /* max value for VMware 2.x */ 94 | #define VMCMD_MAXVAL_WS3 0x21 /* max value for VMware 3.x */ 95 | #define VMCMD_MAXVAL_WS40 0x22 /* max value for VMware 4.0 */ 96 | #define VMCMD_MAXVAL_WS45 0x29 /* max value for VMware 4.5 */ 97 | #define VMCMD_MAXVAL_WS5 0x2b /* max value for VMware 5.x */ 98 | 99 | /* 100 | knowm APM function/parameter combination (command 0x02) 101 | */ 102 | #define VMAPM_SUSPEND 0x00070004UL 103 | #define VMAPM_POWEROFF 0x00070007UL 104 | 105 | /* 106 | copy and paste max length (commands 0x06, 0x07, 0x08, 0x09) 107 | */ 108 | #define VMCLIP_MAXLEN_WS40 65355 /* max data len up to WS 4.0 */ 109 | #define VMCLIP_MAXLEN_WS45 65436 /* max data len since WS 4.5 */ 110 | 111 | /* 112 | connectable device information (commands 0x0b, 0x0c) 113 | */ 114 | #define VMDEV_DEVICE_MAX 52 /* device number = 0 - 51 */ 115 | #define VMDEV_INFO_LENGTH 40 /* device information length */ 116 | #define VMDEV_STATE_OFFSET 36 /* state data in device info */ 117 | 118 | /* 119 | GUI options bitmask (commands 0x0d, 0x0e) 120 | */ 121 | #define VMPREF_GRAB_MOVE 0x0001 /* grab by cursor movement */ 122 | #define VMPREF_UNGRAB_MOVE 0x0002 /* ungrab by cursor movement */ 123 | #define VMPREF_SCROLL_MOVE 0x0004 /* scroll by cursor movement */ 124 | #define VMPREF_COPY_PASTE 0x0010 /* copy and paste */ 125 | #define VMPREF_FULLSCREEN 0x0040 /* full screen (read only) */ 126 | #define VMPREF_ENTER_FULL 0x0080 /* full screen (write only) */ 127 | #define VMPREF_SYNCRONIZE 0x0400 /* time syncronization */ 128 | 129 | /* 130 | BIOS UUID length (command 0x13) 131 | */ 132 | #define VMWARE_UUID_LENGTH 16 /* UUID length in bytes */ 133 | 134 | /* 135 | RPC subcommand values (command 0x1e) 136 | */ 137 | #define VMRPC_OPEN 0x00000000UL /* Open RPC channel */ 138 | #define VMRPC_SENDLEN 0x00010000UL /* Send RPC command length */ 139 | #define VMRPC_SENDDAT 0x00020000UL /* Send RPC command */ 140 | #define VMRPC_RECVLEN 0x00030000UL /* Receive RPC reply length */ 141 | #define VMRPC_RECVDAT 0x00040000UL /* Receive RPC reply */ 142 | #define VMRPC_RECVEND 0x00050000UL /* Unknown backdoor command */ 143 | #define VMRPC_CLOSE 0x00060000UL /* Close RPC channel */ 144 | 145 | /* 146 | RPC command magic numbers (command 0x1e) 147 | */ 148 | #define VMRPC_OPEN_RPCI 0x49435052UL /* 'RPCI' channel open magic */ 149 | #define VMRPC_OPEN_TCLO 0x4f4c4354UL /* 'TCLO' channel open magic */ 150 | 151 | #define VMRPC_ENHANCED 0x80000000UL /* enhanced RPC open magic bit */ 152 | #define VMRPC_ENH_DATA 0x00010000UL /* enhanced RPC data xfer megic */ 153 | 154 | /* 155 | private RPC context struct 156 | */ 157 | typedef struct _rpc { 158 | uint32_t channel; /* channel number */ 159 | uint32_t cookie1; /* cookie#1 for enhanced rpc */ 160 | uint32_t cookie2; /* cookie#2 for enhanced rpc */ 161 | } rpc_t; 162 | 163 | #define VMRPC_INVALID_CHANNEL (uint32_t) -1 164 | 165 | /* 166 | private return values 167 | */ 168 | #define VMTOOL_SUCCESS 0 /* success */ 169 | #define VMTOOL_STX_ERROR 1 /* syntax error */ 170 | #define VMTOOL_CMD_ERROR 2 /* backdoor call error */ 171 | #define VMTOOL_RPC_ERROR 3 /* RPC protocol error */ 172 | #define VMTOOL_SYS_ERROR 4 /* system error */ 173 | 174 | 175 | /* 176 | backdoor I/O wrapper functions 177 | */ 178 | 179 | /* 180 | send data with command 0x1e, subcommands 1, 2 and/or enhanced data channel 181 | */ 182 | int VMRpcSend(const rpc_t *rpc, const unsigned char *command, uint32_t length); 183 | 184 | /* 185 | receive data length with command 0x1e, subcommand 3 186 | */ 187 | int VMRpcRecvLen(const rpc_t *rpc, uint32_t *length, uint16_t *dataid); 188 | 189 | /* 190 | receive data with command 0x1e, subcommands 4,5 and/or enhanced data channel 191 | */ 192 | int VMRpcRecvDat(const rpc_t *rpc, unsigned char *data, uint32_t length, uint16_t dataid); 193 | 194 | #ifdef __cplusplus 195 | } 196 | #endif /* __cplusplus */ 197 | 198 | #endif /* _VMTOOL_H_ */ 199 | --------------------------------------------------------------------------------