From ad547a6b5986815fda458221149728d9d9ab1d87 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 25 Feb 2021 19:22:25 +0000 Subject: restore Build,TODO from r57911 git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/dviout-util/dd.h | 763 +++++++++++++++++++++++++++++++++++++ 1 file changed, 763 insertions(+) create mode 100644 Build/source/texk/dviout-util/dd.h (limited to 'Build/source/texk/dviout-util/dd.h') diff --git a/Build/source/texk/dviout-util/dd.h b/Build/source/texk/dviout-util/dd.h new file mode 100644 index 00000000000..ae14628d619 --- /dev/null +++ b/Build/source/texk/dviout-util/dd.h @@ -0,0 +1,763 @@ +/* + * TEX Device Driver ver 2.02- + * copyright(c) 1988,89 by TSG, 1990- by SHIMA + * 1991 changed by hideki + * + * dd.h : common header file + * + */ +#ifndef INC_DD_H +#define INC_DD_H + +#ifndef __STDIO_H +#include +#endif + +/* reduce harmless warning messsages */ +#if defined(MSVC) && !defined(_WARNING_) +#define _WARNING_ +#pragma warning( disable : 4244 4018 4028 4102 4761 4146 4047 4305 4113 4245) +#endif + +#ifdef WIN32 +#define WIN32G +#define STR_SEARCH +#define USE_COLOR +#define HYPERTEX +#define PLUG 1 +#define DOUBLE_PAGE +#define DVI_ADD +#define USE_ETF +#endif + +#if defined(WIN32G) || defined(WIN32C) +#define USE_WINAPI +#define MAX_KPS_DEPTH 16 +#elif defined(UNIX) +#define MAX_KPS_DEPTH 16 +#endif + +#ifdef USE_WINAPI +#define USE_WINFONT +#endif + +#ifdef NOPS +#define NOPSFRAG +#endif + +int strlcmp(const char *, const char *); + +#ifndef MSVC +long filelength(int); +int strcmpi(const char *, const char *); +#ifndef GCC +char *stpcpy(char *, const char *); +#endif +#endif + +#if !defined(GCC1) || defined(UNIX) +#define GetCh() getch() +#define KbHit() kbhit() +#endif + +#ifdef UNIX +#define MAXPATH 256 +#define MAXDRIVE 1 +#define MAXDIR 256 +#define MAXFILE 128 +#define MAXEXT 128 +#define O_BINARY 0 +#define PATH_SEP '/' +#define DELIMITER ':' +#else +#define PATH_SEP '\\' +#define DELIMITER ';' +#endif + +#ifndef max +#define max(a,b) ( (a) > (b) ? (a) : (b) ) +#define min(a,b) ( (a) < (b) ? (a) : (b) ) +#endif + +/* standard definitons */ + +#define uchar unsigned char +#define uint unsigned int +#define ulong unsigned long +typedef void (*void_func_ptr) (); +typedef int (*int_func_ptr) (); +typedef int (* COMP)(const void *, const void *); + +#ifdef FALSE +#undef FALSE +#endif +#ifdef TRUE +#undef TRUE +#endif +#ifdef BOOL +#undef BOOL +#endif +typedef enum{ + FALSE = 0, + TRUE = 1 +} BOOL; + +#define NOTHING 0 +#define FAILURE (-1) +#define NOMORE (-2) + +#ifndef SEEK_SET +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 +#endif + +#if defined(LIPS3)||defined(ESCPAGE) +#define LBP +#endif + +#ifdef LBP +#define FDOWN +#else +#undef JDWN +#endif + +#if !defined(JDWN) && defined(JGAIJI) +#undef JGAIJI +#endif + +void Free0(void *); + +#ifdef WIN32 +void Free(void *); +#define get_near_work(x) marea(x) +#else +#define Free(x) free(x) +extern uchar *get_near_work(uint); +#endif + +/* definitons for device driver */ + + +//#ifdef GCC +#define far +#define huge +//#endif + +#define BUFFER uchar far +#define HUGE_BUF uchar huge + /* Both BUFFER pointer and HUGE_BUF pointer are 32bit-pointer. + * HUGE_BUF will be used for larger buffers ( correctly speaking, + * ones which keep more data than 64Kbytes ). + * And it is noteworthy that the pointers of these types are impossible + * to express continually ( ex. BUFFER *a, *b ), because they are not + * "typedef" but "#define." This foolish error is because of 8086CPU, + * which has only 16bit-pointer, so we must add "far" or "huge" for use of + * 32bit-pointer. However, "far" and "huge" are permitted to "typedef." + * How wonderful SEGMENT !! + */ +#ifdef NOFLOAT +#define SIZE_PARA long +#else +#define SIZE_PARA double +#endif + /* This device driver calculate units with double. + */ +#define F_SIZE_PARA long + /* This device driver calculate units with double. + */ +#define PIXEL int +#define SCALED_PT long + /* the units of pixel and scaled-point + */ + +#define HEADER_DEPTH 0xe0000L +#define FOOTER_DEPTH 0xe0000L + /* the header depth and the footer depth ( scaled point ) + */ + +typedef enum { + UNKNOWN, ONDEMAND, ONDEMAND2, UNRESOLVE, + PK_FONT, PXL1001, PXL1002, PXL1003, PKD_FONT, JXL, + SUBTFM, +#ifdef VFD /* Fonts before JXL should be unscalable */ + VFD_FONT, +#endif +#ifdef TTFONT /* European TrueType fonts (expand by dviout) */ + CMTTF, +#endif +#ifdef USE_WINFONT /* Europian TrueType fonts (WinAPI) */ + WINTT_FONT, +#endif +#ifdef VIRTUALFONT + VIRTUAL_FONT, +#endif + SUBJFM, ROM_FONT, ZS_FONT, +#ifdef BEZIERFONT + JG_FONT, +#endif +#ifdef TTFONT /* Japanese TrueType fonts (expand by dviout) */ + TT_FONT, +#endif +#ifdef USE_WINFONT /* Japanese TrueType fonts (WinAPI) */ + WINJTT_FONT, +#endif +#ifdef USE_ETF + ETF_FONT, +#endif + JLBP, JIS_FONT, JIS_PK, JIS_PKH, GAIJI +} FONT_TYPE; + + /* FONT_TYPE shows the type of fonts */ + +typedef enum { + HORIZONTAL, VERTICAL +} PRINT_DIR; + + /* Direction at printing, HORIZONTAL normally. + */ + +typedef enum { + PreviousPart, NextPart, + PreviousPage, NextPage, + NextPageDirection, + EscapeQuit +} NEXT_ACTION; + + /* These values are returned by device-output module, which says + * what to do next. + */ + +#define PREAMBLE struct PREAMBLE_REC far + /* Information about Preamble of a font-file + */ +struct PREAMBLE_REC { + PIXEL width, height, pitch_offset, depth_offset; + /* the size of the character, and the offset for typesetting. + */ + BUFFER *raster; + /* the pointer of Raster-data buffer + */ + long tfm_width; + int byte_width; + /* equal width/8, raised decimal + */ + PIXEL shift_up_ptex, shift_right_ptex; + /* the offset when lateral-Kanji used (when in pTeX tate mode) + */ + int rotate_ptex; + /* the flag of rotation (when in pTeX tate mode) + */ +}; + +#define CHAR_INFO struct CHAR_INFO_REC far + /* This buffer is a linked-list one, which keeps pointers of unpacked + * fonts. + */ +struct CHAR_INFO_REC { + uint code; + /* character code + */ + CHAR_INFO *next_char; + CHAR_INFO *former_char; + /* needless to say? */ + struct PREAMBLE_REC pre; + /* preamble of an unpacked font + */ +}; + +#define f_HUGE 0x8000 +#define f_EMS 0x4000 + +#define BUF_INFO struct BUF_INFO_REC + /* Information about buffers + */ +struct BUF_INFO_REC { + BUFFER *start; + BUFFER *current; + BUFFER *end; + /* Each means starting, current, and ending pointer of the buffer. + * Especially, 'end' means 'start+size', so the pointer above ( or + * which equals )'end' will be out of the buffer. + */ + long size; + int flush; +}; + +typedef struct { + long offset; + int number; +#ifdef HYPERTEX + int hyper0; +#endif +} +PAGE_INDEX; +/* _REC; + +#define PAGE_INDEX PAGE_INDEX_REC far +*/ + + /* page index buffer */ + +#define DVIFILE_INFO struct DVIFILE_INFO_REC + /* Information about Preamble of DVI-file. ( to say the truth, this is + * the same thing as Preamble itself. So, you'd better see + * "TeX : The Program." ) + */ +struct DVIFILE_INFO_REC { + FILE *file_ptr; + char *file_name; + long post, last_bop; + long num, den, mag; + SCALED_PT l, u; + int stack_depth; + int total_page; +}; + +#define DIMENSION struct DIMENSION_REC + /* Information about device-output + */ + +struct DIMENSION_REC { + int dpi; + /* is horizontal dot-per-inch ratio of the device + */ + int DPI; + /* is vertical dot-per-inch ratio of the device . + */ + PIXEL max_width, max_height; + /* These tell us the maximum size the device can output. + * They are represented by pixel-unit. + */ + PIXEL output_width, output_height; + /* is the final size to be output to the device + */ + PIXEL buf_width, buf_height; + /* These tell us the maximum size Bitmap-buffer can hold. + * oriented by text direction + */ + PIXEL text_width, text_height; + /* These are the maxmum size directed in DVI-file. + */ + int mag; + /* is the magnification for output. This is the same value as 'mag' in + * DVI-file ( so equal the one in DVI_INFO ), when no '-mag' & '-half' + * options directed. + */ + int split; + /* Our Device-driver divides the text to several parts, if that can't + * be output at once. 'split' is the number of parts. Then, if 'split' + * holds '1', Device-driver will put the text at a time. + */ + PRINT_DIR print_direction; + /* This shows the direction for output, responsing '-V' option. + * So there is no meaning for PREVIEWER. + */ + SIZE_PARA size_para; + /* is size-parameter for conversion pixel<-->scaled pt. + * ( equal "num * den / mag" ) + */ + PIXEL x_offset, y_offset; + /* the offset of the head of text. These are directed by '-X' and + * '-Y' options. + */ + PAGE_INDEX *page_index; + /* the index of file-offset of pages in dvifile + */ + int total_page; + /* same as 'total_page' in DVI_INFO. + */ + int start_page, end_page; + /* the starting and the ending page to print. + */ + int max_nombre_page; + /* the maximal nombre page + */ + int prt_type; + /* the type of the printer, ESC/P, PC-PR, PC-MN, LIPS3 or Previewer etc + */ +}; + +#define NO_PRN_OUT 0x1000 + +#define OUTPUT_INFO struct OUTPUT_INFO_REC + /* Information about output. Interpreting-module and Device-output-module + * receive the pointer of this. + */ +struct OUTPUT_INFO_REC { + FILE *dvifile_ptr; + /* DVI-file pointer + */ + long page_start_offset; + /* the file-offset at the position the page starts from. + */ + PRINT_DIR print_direction; + /* equal the one in DIMENSION. + */ + PIXEL h_0, v_0; + /* the original point for output. + */ + PIXEL width, height; + /* the size for output.; it is assigned for all the size of the text + * to be held in the buffer. + */ + int byte_width, byte_height; + /* equal width/8 and height/8. + */ + int split, page; + /* the current part and page. + */ + HUGE_BUF *bitmap_ptr; + /* Bitmap pointer + */ +}; + +typedef struct { /* KANJI fonts */ + int width; /* width by dots (without counting K_DBL) */ + int height; /* height by dots (without counting K_DBL) */ + int size; /* size by bytes = (width+7)/8*height */ + int base; /* number of dots under base line */ + int fh; /* file handle number */ + char *name; /* Kanji font file_name */ +} +KFONT; + +typedef struct { + int char_type; + int id; + long width; /* character width */ + long height; /* character height(length above the baseline) */ + long depth; /* character depth (length under the baseline) */ + long italic; + long glue; + long plus; + long minus; +} +JFM_DATA; + +#define KFONT_SIZE sizeof(KFONT) + +#define FONT_INFO struct FONT_INFO_REC far + /* Information about fonts. This is linked-list. + */ +union EXT { + BUFFER *dir; /* PXL1001, PXL1002, PXL1003 + address of the directory for PXLFONT */ + KFONT *kdir; /* JLBP, JIS_FONT, JIS_PK, JIS_PKH, GAIJI */ + int fh; /* JXL, PKD_FONT, VFD_FONT (file handle) */ + /* ZS_FONT, JG_FONT, TT_FONT (use as ID) */ + long count; +#ifdef VIRTUALFONT + FONT_INFO *local_font; +#endif +}; + +#define CHAR_ROOT 8 /* should be a power of 2 */ +#define MAX_NAME_LEN 128 + +struct FONT_INFO_REC { /* 4*CHAR_ROOT + 46 = 78 bytes + + 4 = 82 bytes (FDOWN) + + 6 = 88 bytes (NTTRPL)*/ + int font_code; + /* sent from dvi-file, when the font is defined. + */ + FONT_TYPE font_type; + /* type of font. + */ + FONT_TYPE etf_type; + /* type of ETF_FONT. + */ + int f_goth; + /* flag for gothic etc. + */ + char *name; + /* the file-name of the font. + */ + BUFFER *pk; + /* the pointer of unpacked data of the font. + * it is NULL, when data is unloaded or flushed. + */ + CHAR_INFO *char_info[CHAR_ROOT]; + /* the pointers of the first CHAR_INFO of the font. + * Also, it is NULL, when data is unloaded or flushed. + */ + FONT_INFO *k_top; + FONT_INFO *k_next; + + F_SIZE_PARA size_para; + + F_SIZE_PARA des_para; + /* design size. + */ + int dpi; + /* requested dpi + */ + int sdpi; + /* substituted dpi + */ + char n[MAX_NAME_LEN]; + /* font name + */ + FONT_INFO *next_font; + /* equal NULL, when no next font. + */ + FONT_INFO *before_font; + /* equal NULL, when no former font + */ + FONT_INFO *after_font; + /* equal NULL, when no after font + */ + int k_width; + /* normal allowable maximal width of Kanji character by bits + * counting k_scale + * in PTeX TATE-KUMI fonts, it shows height of fonts. + */ + int k_height; + /* normal allowable maximal height of Kanji character by bits + * counting k_scale + * in PTeX TATE-KUMI fonts, it shows width of fonts. + */ + int last; + /* last JIS CODE of Kanji font, + offset of character packet of Virtual Font + */ + long c; + /* checksum (id) + */ + union EXT ext; + + int texpk_pos; + +#ifdef LBP + int lbp_font_inf; /*0-3bit:フォント番号-80H, + 4,5:bold flag (0:normal, 1:1dot, 2:2dot) + 6:ouline flag 8-15:フォント縦横比(0-200)*/ +#endif +#ifdef FDOWN + uchar *d_flag; +#endif + void *vjfm; /* WINTT_FONT or VIRTUAL_FONT */ + +#ifndef NO_NTTRPL + int code_offset; + int pt_size; + int family_code; +#endif +#ifdef USE_SUBFONT + int sfd_id; +#endif +}; + +#ifdef LBP +#ifdef FDOWN +typedef struct { /*ダウンロード情報*/ + int assign_num; /*割当番号*/ + int maxwidth; /*フォント最大幅*/ + int maxheight; /*フォント最大高*/ + int mincharcode; /*最小コード*/ + int maxcharcode; /*最大コード*/ + int numoffonts; /*ダウンロードしたフォントの数*/ + long total_send; /*ダウンロードしたトータルバイト数*/ + long total_off; /*実サイズを使う場合のバイト数の差*/ + long total_mem; /*セルサイズで計ったトータルバイト数*/ +} +DL_INFO; + +struct DJFONT_COUNT { /*和文フォントの文字の出現頻度情報 + : 8 byte -> should be even size*/ + unsigned short int code; /*文字コード*/ + unsigned char font_code; /*フォント番号*/ + unsigned char count; /*出現回数-1*/ + unsigned short int after; /*次のノード*/ + unsigned short int before; /*前のノード*/ +}; + +struct DJFONT_TABLE { /*和文フォントのダウンロードした文字情報: 5 byte*/ + unsigned short int code; /*元の文字コード*/ + unsigned char font_code; /*元のフォント番号*/ + unsigned char new_code; /*ダウンロードで埋め込んだ文字コード*/ + unsigned char new_font_code; /*ダウンロードで埋め込んだフォント番号*/ +}; + +#define DJFONT struct DJFONT_COUNT +#define DJTABLE struct DJFONT_TABLE + +struct REAL_SIZE { /*文字の左右の空白を削った実ボックスサイズ、左上が原点*/ + int left; /*最左端のx-座標*/ + int top; /*最上端のy-座標*/ + int right; /*最右端のx-座標 + 1*/ + int bottom; /*最下端のy-座標 + 1*/ +}; + +# endif/*FDOWN*/ + +typedef struct { + void (*init) (void); + void (*init2) (int, int); + void (*end) (void); + void (*set_font) (FONT_INFO *, KFONT *, int, int, int); + void (*move_cap) (PIXEL, PIXEL); + void (*move_homepoint) (PIXEL, PIXEL); + void (*pre_put_char) (FONT_INFO *, PREAMBLE*, uint *, PIXEL *, PIXEL *); + void (*put_jis_font) (uint); + void (*put_dl_font) (uint); + long (*get_dlhsize) (int num); + void (*pre_download) (FONT_INFO *, DL_INFO *, int, int); + void (*download_rastor) (FONT_INFO *, DL_INFO *, uint, int); + void (*post_download) (FONT_INFO *, DL_INFO *); + void (*drawbox) (PIXEL, PIXEL, PIXEL, PIXEL, int); + void (*rotate) (int); + void (*tate_yoko) (int); + struct LIPS_LFONT *data; +} LBP_FUNC; + +struct LIPS_LFONT { + char *font_name; + int no; +}; + +#endif /*LBP*/ + +/* extern variables */ + +extern BUF_INFO buffers[]; + +extern FONT_INFO *first_font_info; + + /* the first position of the font-list. + */ + +#define pk_buf_pointer (&buffers[1]) + + /* the buffer for pk-font-data loaded from disk directly. + */ + +#define raster_buf_pointer (&buffers[0]) + + /* the buffer for the raster-data of unpacked fonts. + */ + +#define bitmap_buf_pointer (&buffers[2]) + + /* Virtual VRAM buffer. Interpret-module will draw the figure onto this. + * This is casted to HUGE_BUF when used. + */ + + /* Buffer for working in far heap: default size = 0 + */ + + /* Buffer for working in EMS + */ + +#ifdef GCC +#define COMMON_SIZE 0x4000 +#else +#define COMMON_SIZE 2560 +#endif +extern char common_work[COMMON_SIZE]; +#define tmp_buf common_work + + /* Buffer for working in near heap + COMMON_SIZE should not be smaller than 2048 + */ + +extern BUFFER *get_work(uint); +extern FILE *fopenf(char*, char*); + +#define F_GOTH 1 +#define K_DBL 2 +#define F_LBP 4 +#define F_DWN 8 +#define F_FILL 0x10 +#define F_SHADOW 0x20 +#define F_OUTLINE 0x40 +#define F_GGOTH 0x80 +#define K_SCALE 0x100 +#define F_TATE 0x200 +#define K_SCALE2 0x400 +#define F_TOPT 0x800 +#define F_DTATE 0x1000 +#define F_DYOKO 0x2000 + +#define F_ATTR (F_GOTH|F_FILL|F_SHADOW|F_OUTLINE|F_GGOTH) + +/* Definition for DVI commands */ + +#define SET_CHAR_0 0 +#define SET1 128 +#define SET_RULE 132 +#define PUT1 133 +#define PUT_RULE 137 +#define NOP 138 +#define BOP 139 +#define EOP 140 +#define PUSH 141 +#define POP 142 +#define RIGHT1 143 +#define W0 147 +#define W1 148 +#define X0 152 +#define X1 153 +#define DOWN1 157 +#define Y0 161 +#define Y1 162 +#define Z0 166 +#define Z1 167 +#define FNT_NUM_0 171 +#define FNT1 235 +#define XXX1 239 +#define FNT_DEF_1 243 +#define PRE 247 +#define POST 248 +#define POST_POST 249 +#define EOFNC 255 /* end of func */ + +/* Units for length : mm, inch(in), point(pt), scaled point(sp) and macros + * for them. + * by K.Yoshizawa Dec. 26, 1992 + */ +#define ROUND(X) (int)((X)+0.5) /* 浮動小数点数→整数時の四捨五入 */ + +#define MM_PER_IN 25.4 /* 1in = 25.4mm */ +#define PT_PER_IN 72.27 /* 1in = 72.27pt */ +#define BP_PER_IN 72.0 /* 1in = 72.0pt */ + +#define IN_PER_MM (1.0/MM_PER_IN) +#define PT_PER_MM (PT_PER_IN/MM_PER_IN) + +#define PT_PER_BP (PT_PER_IN/BP_PER_IN) + +#define MM_PER_PT (MM_PER_IN/PT_PER_IN) +#define IN_PER_PT (1.0/PT_PER_IN) + +#define MM_TO_SP(X) PT_TO_SP(MM_TO_PT(X)) +#define IN_TO_SP(X) PT_TO_SP(IN_TO_PT(X)) +#define BP_TO_SP(X) PT_TO_SP(BP_TO_PT(X)) +#define PT_TO_SP(X) ((SCALED_PT)ROUND((double)(X)*65536.0)) + +#define IN_TO_MM(X) ((X)*MM_PER_IN) +#define PT_TO_MM(X) ((X)*MM_PER_PT) +#define SP_TO_MM(X) PT_TO_MM(SP_TO_PT(X)) + +#define MM_TO_IN(X) ((X)*IN_PER_MM) +#define PT_TO_IN(X) ((X)*IN_PER_PT) +#define SP_TO_IN(X) PT_TO_IN(SP_TO_PT(X)) + +#define MM_TO_PT(X) ((X)*PT_PER_MM) +#define IN_TO_PT(X) ((X)*PT_PER_IN) +#define BP_TO_PT(X) ((X)*PT_PER_BP) +#define SP_TO_PT(X) ((double)(X)/65536.0) + +/* + * type of machine + */ +#define M_PC98 0 +#define M_DOSV 1 +#define M_J31 2 + +#define M_DBCS 1 + +#define issjis1(x) ((x)>=0x81&&(x)<=0xfc&&((x)<=0x9f||(x)>=0xe0)) + +#endif // INC_DD_H +/* end of file : dd.h */ -- cgit v1.2.3