home *** CD-ROM | disk | FTP | other *** search
/ Languages Around the World / LanguageWorld.iso / language / japanese / win_prog / win_jwp / jwp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-28  |  25.5 KB  |  598 lines

  1. /* Copyright (C) Stephen Chung, 1991-1992.  All rights reserved. */
  2.  
  3. #include <windows.h>
  4. #include "toolbar.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <mem.h>
  9. #include <dos.h>
  10. #include <io.h>
  11. #include <time.h>
  12.  
  13.  
  14. #define CTL3D           /* 3D Dialog Boxes */
  15.  
  16. /* Macros */
  17.  
  18. #define KANJI           unsigned short int
  19.  
  20. #define MAGIC           0x42022667L
  21.  
  22. #define JWPFILEVERSION  "B2"
  23.  
  24. #define NRSUMMARIES     5
  25. #define NRHEADERS       3
  26.  
  27. #define MAXLINELEN      512                 /* General length of a line */
  28. #define MAXFILENAMELEN  120                 /* General length of filenames */
  29. #define BUFSIZE         1024                /* General buffer for things */
  30. #define TEXTBLOCKSIZE   256                 /* One unit of text */
  31. #define UNDOTEXTSIZE    16                  /* One unit of undo text */
  32. #define MAXFILES        10                  /* Maximum number of files opened */
  33. #define MAXGLOSSARY     500                 /* Maximum number of glossaries */
  34. #define PROGNAME        "JWP"               /* Name of the program */
  35. #define NAMELEN         40                  /* General length for names */
  36. #define BLOCKSIZE       10240L              /* Optimal memory page size */
  37. #define C64K            (60L * 1024L)       /* 64K Blocks */
  38. #define CPOSPAGESIZE    BLOCKSIZE           /* Page size for the CPOS array */
  39.  
  40. #define BADKANJI        0x2223              /* Black square */
  41.  
  42. #define ISASCII(x)      ((HIBYTE(x) & 0x7f) == 0)
  43. #define ISKANJI(x)      ((HIBYTE(x) & 0x7f) != 0)
  44. #define KANJIAT(x,y)    ISKANJI(CHAROF(x,y))
  45. #define KANJIPOS(x)     KANJIAT(x,POSOF(x))
  46.  
  47. #define BASEFONT        (global.basefont)
  48. #define PRINTFONT       (global.printfont)
  49. #define SYSFONT         (global.sysfont)
  50.  
  51. #define LINEGAP(x)      ((x)->spacing / 2)
  52. #define CHARGAP(x)      ((x)->leading / 2)
  53.  
  54. #define BlockAlloc(x)   SegHeapAlloc(x)
  55. #define BlockRealloc(x, n) SegHeapRealloc(x, n)
  56. #define FreeBlock(x)    SegHeapFree(x)
  57.  
  58. #define StructAlloc(x)  ((x far *) SegHeapAlloc(sizeof(x)))
  59. #define FreeStruct(x)   SegHeapFree(x)
  60.  
  61. #define MemAlloc(x)     MyLocalAlloc(x)
  62. #define FreeMem(x)      LocalFree(x)
  63.  
  64. #define PARAOF(x)       ((x).para)
  65. #define LINEOF(x)       ((x).line)
  66. #define POSOF(x)        ((x).pos)
  67. #define UNITOF(x,y)     (PARAOF(x)->text[LINEOF(x)->position + y])
  68. #define CHAROF(x,y)     UNITOF(x,y).kanji
  69. #define FORMATOF(x,y)   UNITOF(x,y).format
  70. #define POS2ABS(x)      (LINEOF(x)->position + POSOF(x))
  71.  
  72. #define TOPPARA(x)      PARAOF((x)->top)
  73. #define TOPLINE(x)      LINEOF((x)->top)
  74. #define CURPARA(x)      PARAOF((x)->current)
  75. #define CURLINE(x)      LINEOF((x)->current)
  76. #define CURCHAR(x)      POSOF((x)->current)
  77.  
  78. #define CURX(f)         ((f)->cursor.x)
  79. #define CURY(f)         ((f)->cursor.y)
  80. #define PSEUDOX(f)      ((f)->pseudo.x)
  81. #define PSEUDOY(f)      ((f)->pseudo.y)
  82.  
  83. #define SELNOW(x)       ((x)->sel.now)
  84. #define SEL1(x)         ((x)->sel.pos1)
  85. #define SEL2(x)         ((x)->sel.pos2)
  86. #define SELPARA1(x)     PARAOF(SEL1(x))
  87. #define SELPARA2(x)     PARAOF(SEL2(x))
  88. #define SELPOS1(x)      POSOF((x)->sel.pos1)
  89. #define SELPOS2(x)      POSOF((x)->sel.pos2)
  90. #define SELCHAR1(x)     (SELPARA1(x)->text[SELPOS1(x)])
  91. #define SELCHAR2(x)     (SELPARA2(x)->text[SELPOS2(x)])
  92. #define SELTYPE(x)      ((x)->sel.type)
  93.  
  94. #define RULER(x)        ((x)->ruler)
  95. #define BASEWIDTH(x)    ((x)->basefont->width + (x)->leading)
  96.  
  97. #define RULERHEIGHT     (2 * AVGHEIGHT)
  98. #define BORDERSPACE     (global.borderspace)
  99. #define AVGWIDTH        (global.textmetric.tmAveCharWidth)
  100. #define AVGHEIGHT       (global.textmetric.tmHeight + global.textmetric.tmExternalLeading)
  101.  
  102. #define STATUSHEIGHT    (AVGHEIGHT * 1.3)
  103.  
  104. #define TBBORDER        6
  105. #define TBICONHEIGHT    24
  106. #define TBICONWIDTH     24
  107. #define TBHEIGHT        (TBICONHEIGHT + 2 * BORDERSPACE)
  108.  
  109. #define POS2PIXEL(x)    (BORDERSPACE + (x) * BASEWIDTH(f) - f->startx)
  110. #define LEFTMARGIN(x)   ((LINEOF(x)->prev == NULL) ? PARAOF(x)->firstindent : PARAOF(x)->leftindent)
  111. #define NEXTLINE(x)     Skip(&(x), 1)
  112. #define PREVLINE(x)     Skip(&(x), -1)
  113.  
  114.  
  115.  
  116. /* Type definitions */
  117.  
  118. #define OP_MOVESEL          0x0001          /* Options for ReformatParagraph */
  119. #define OP_UPDATE           0x0002
  120. #define OP_MOVETOEND        0x0004
  121. #define OP_REFORMAT         0x0008
  122. #define OP_SAMELEN          0x0010
  123. #define OP_MINIMAL          0x0020
  124. #define OP_WITHFORMAT       0x0040
  125. #define OP_CHOOSEKANJI      0x0080
  126.  
  127. #define FN_NORMAL           0x0001          /* Normal file */
  128. #define FN_CLIPBOARD        0x0002          /* Clipboard */
  129. #define FN_CONTROL          0x0004          /* A Japanese edit control */
  130. #define FN_NOSWITCHING      0x0008          /* No mode switching at all times */
  131. #define FN_EITHER           0x0010          /* Either ASCII or Japanese */
  132. #define FN_NOKANJI          0x0020          /* No Kanji allowed */
  133. #define FN_NOEDIT            0x0040            /* No editing allowed */
  134. #define FN_NOSCROLLBARS        0x0080            /* Do not display scrollbars */
  135.  
  136.  
  137. typedef enum { SEL_CONVERSION, SEL_SELECTION } SELTYPE;
  138.  
  139. typedef enum { M_KANA, M_ASCII } INPUTMODE;
  140.  
  141. typedef enum {
  142.     UN_INSERT, UN_DELETE, UN_INDENT, UN_SPLITLINE, UN_JOINLINE
  143. } EDITACTION;
  144.  
  145. typedef enum {
  146.     J_LEFT, J_RIGHT, J_CENTER, J_JUSTIFY
  147. } JUSTIFICATION;
  148.  
  149. typedef enum {
  150.     U_INSERT, U_DELETE, U_REPLACE, U_PARAFORMAT
  151. } UNDOACTIONS;
  152.  
  153. typedef enum {
  154.     M_INCHES =  0,
  155.     M_CM =      1,
  156.     M_MM =      2,
  157.     M_POINTS =  3,
  158.     M_PIXELS =  4
  159. } MEASUREMENT;
  160.  
  161. typedef struct {
  162.     char *name;
  163.     char *symbol;
  164.     int decimal;
  165.     double conversion;
  166. } MEASUREINFO;
  167.  
  168. typedef enum {
  169.     FF_UNKNOWN =  0,
  170.     FF_NORMAL =   1,
  171.     FF_TEMPLATE = 2,
  172.     FF_EUC =      3,
  173.     FF_SJIS =     4,
  174.     FF_NEWJIS =   5,
  175.     FF_OLDJIS =   6,
  176.     FF_NEC =      7
  177. } FILEFORMAT;
  178.  
  179.  
  180. typedef struct UndoBufStruct {
  181.     int para1, start;
  182.     int para2, stop;
  183.     time_t time;
  184.     UNDOACTIONS action;
  185.     KANJI far *data;
  186.     struct UndoBufStruct far *next, far *prev;
  187. } UNDOBUF;
  188.  
  189.  
  190. typedef struct {                    /* The header for JWP's native format */
  191.     unsigned long int magic;        /* Magic identifier */
  192.     char version[6];                /* Version number */
  193.     unsigned int paragraphs;        /* Number of paragraphs */
  194.     float margins[4];               /* Left/Right/Top/Bottom margins, in inches */
  195.  
  196.     int landscape:1;                /* Landscape printing */
  197.     int summary:1;                  /* File summary exists */
  198.     int headers:1;                  /* Has header / footer */
  199.     int lrheader:1;                 /* Separate Left/Right pages in header/footer? */
  200.     int nofirstpage:1;              /* Don't print header/footer on first page? */
  201.     unsigned int undo;              /* Number of undo levels */
  202.     char extra[97];                 /* Make it up to 128 bytes */
  203. } FILEHEADER;
  204.  
  205.  
  206. typedef struct {
  207.     unsigned int textsize;          /* Number of characters in this paragraph */
  208.     unsigned int firstindent;       /* Indentations */
  209.     unsigned int leftindent;
  210.     unsigned int rightindent;
  211. } OLDFILEPARAHEADER100;
  212.  
  213.  
  214. typedef struct {
  215.     unsigned int textsize;          /* Number of characters in this paragraph */
  216.     unsigned int spacemulti;        /* Spacing, x 100 */
  217.     unsigned char firstindent;      /* Indentations */
  218.     unsigned char leftindent;
  219.     unsigned char rightindent;
  220.     unsigned char extra[9];         /* Pad it to 16 byte */
  221. } FILEPARAHEADER;
  222.  
  223.  
  224. typedef struct {
  225.     KANJI facename[NAMELEN/2];      /* Font family name */
  226.     int width, height;              /* Width and height in pixels */
  227.     int charsize;                   /* Number of bytes that make up a character */
  228.     int verticals;                  /* The number of extra "vertical" characters */
  229.     long int offset;                /* Byte offset to the beginning of bitmaps */
  230.     BOOL holes;                     /* Packed JIS coding or 93x93 with holes */
  231.     int leading, spacing;           /* Horizontal / Vertical gaps */
  232.     char extra[6];                  /* Make it up to 64 bytes */
  233. } FONTHEADER;
  234.  
  235.  
  236. typedef struct {                    /* A kanji font that has been loaded */
  237.     KANJI *facename;                /* Name of the font family */
  238.     char *filename;                 /* Filename of the font */
  239.     OFSTRUCT of;                    /* File open structure */
  240.     int width, height;              /* Width and height in pixels */
  241.     int leading, spacing;           /* Horizontal / Vertical gaps */
  242.     int bmsize;                     /* Number of bytes per character */
  243.     int verticals;                  /* Number of extra "vertical" characters */
  244.     int offset;                     /* Byte offset to the beginning of bitmaps in the font file */
  245.     BOOL holes;                     /* Packed JIS coding or 93x93 with holes */
  246. } KANJIFONT;
  247.  
  248.  
  249. typedef struct {                    /* An ASCII font */
  250.     char *facename;                 /* Name of font family */
  251.     double size;                    /* Font height (in points) */
  252.     TEXTMETRIC textmetric;          /* Font text metrics */
  253.     HFONT hfont;                    /* Font handle */
  254. } ASCIIFONT;
  255.  
  256.  
  257. typedef union {                     /* Special format of a character */
  258.     int width;                      
  259. } CHARFORMAT;
  260.  
  261.  
  262. typedef struct {                    /* One character */
  263.     KANJI kanji;                    /* The kanji */
  264.     //CHARFORMAT far *format;       /* Format */
  265. } UNIT;
  266.  
  267.  
  268. typedef struct oneline {            /* A linked list of lines */
  269.     int position;                   /* The first UNIT of the line */
  270.     int height;                     /* Height of the line, in pixels */
  271.     int width;                      /* Width of the line, in pixels */
  272.     int length;                     /* Number of characters */
  273.     struct oneline far *next;       /* Links */
  274.     struct oneline far *prev;
  275. } ONELINE;
  276.  
  277.  
  278. typedef struct paragraph {          /* A linked list of paragraphs */
  279.     int         leftindent;         /* Margin indents, in characters */
  280.     int         rightindent;
  281.     int         firstindent;
  282.     int         spacing;            /* Line spacing */
  283.     int         spacemulti;         /* Multiple for line spacing, x 100 */
  284.     ONELINE     far *lines;         /* Beginning of the lines list */
  285.     ONELINE     far *lastline;      /* Line breaks */
  286.     UNIT        far *text;          /* The actual text */
  287.     unsigned int textsize;          /* Allocated space for text */
  288.     struct paragraph far *next;     /* Links */
  289.     struct paragraph far *prev;
  290. } PARAGRAPH;
  291.  
  292.  
  293. typedef struct {
  294.     HWND hwnd;                          /* Window handle */
  295.     int upperrow, lowerrow, middlerow;  /* Position (in pixels) of the bar */
  296.     int bigticks, smallticks, pointer;  /* Sizes (in pixels) */
  297.     int startx, left, right, first;     /* Margin positions (in characters) */
  298.     int leftpos, rightpos, firstpos;    /* Margin positions (in pizels) */
  299. } FILERULER;
  300.  
  301.  
  302. typedef struct {                    /* For selections, the "line" field      */
  303.     PARAGRAPH far *para;            /* is ignored.  The "pos" field contains */
  304.     ONELINE far *line;              /* the offset from the beginning of the  */
  305.     int pos;                        /* paragraph */
  306. } POSITION;
  307.  
  308.  
  309. typedef struct {
  310.     POSITION pos1, pos2;            /* Block start and end positions */
  311.     BOOL now;                       /* In the middle of a conversion? */
  312.     SELTYPE type;                   /* Type of block: conversion or selection */
  313. } SELECTION;
  314.  
  315.  
  316. typedef struct {
  317.     double margins[4];              /* Top/Bottom/Left/Right margins */
  318.     BOOL landscape;                 /* Landscape printing */
  319. } PAGESETUP;
  320.  
  321.  
  322. typedef struct FileOptionsStruct {
  323.     int type;                       /* 0 = Normal File; 1 = Dialog Edit */
  324.     char filename[MAXFILENAMELEN];  /* Name of the file being edited */
  325.     FILEFORMAT fileformat;          /* Input file-format */
  326.     long int nr_bytes;              /* Length of the file */
  327.     HWND parent;                    /* Window handle of the frame window */
  328.     HWND hwnd;                      /* Window handle */
  329.     HDC hdc;                        /* Is there an hdc active for this window? */
  330.     FILERULER ruler;                /* The ruler */
  331.     SELECTION sel;                  /* Selected block */
  332.     PAGESETUP pagesetup;            /* Page setup parameters */
  333.     UNDOBUF far *undo;              /* The undo buffer */
  334.     UNDOBUF far *undotail;
  335.     int undolevels;                 /* Number of undo's for this file */
  336.     UNDOBUF far *redo;              /* The redo chain */
  337.     UNDOBUF far *redotail;
  338.     KANJI far *summary[NRSUMMARIES];/* Summary info: Title, Subject, Author, Keywords, Comments */
  339.     KANJI far *header[4][NRHEADERS];/* Header/Footer: Left/Right Page: Left, Center, Right */
  340.     BOOL lrheader;                  /* Separate Left/Right pages in header/footer? */
  341.     BOOL nofirstpage;               /* No header/footer on first page? */
  342.     KANJIFONT *basefont;            /* The base font for this window */
  343.     int width, height;              /* Width and height (in pixels) of the window */
  344.     int leading;                    /* Number of pixels between kanji's */
  345.     int spacing;                    /* Number of pixels between lines */
  346.     int nr_lines;                   /* Total number of lines in the file */
  347.     PARAGRAPH far *paragraph;       /* Pointer to the first paragraph of the file */
  348.     PARAGRAPH far *eof;             /* Pointer to the last paragraph of the file */
  349.     POSITION current;               /* Current cursor position */
  350.     POSITION top;                   /* Line on the top of the screen */
  351.     int startx;                     /* The starting left position (in pixels) */
  352.     int linelen;                    /* Total length of a line, in characters */
  353.     int vscroll, hscroll;           /* Scroll-bar positions */
  354.     POINT pseudo;                   /* Pseudo position of cursor */
  355.     POINT cursor;                   /* Current cursor pixel position */
  356.     BOOL caret;                     /* Caret visible? */
  357.     BOOL relaxmargin;               /* Relax right margin? */
  358.     BOOL changed;                   /* File changed? */
  359.  
  360.     struct FileOptionsStruct *next; /* Link */
  361. } FILEOPTIONS;
  362.  
  363.  
  364. typedef struct {
  365.     FILEOPTIONS *active;            /* Pointer to the active file */
  366.     INPUTMODE mode;                 /* Either M_KANA or M_ASCII */
  367.     TEXTMETRIC textmetric;          /* Text metrics of the system font */
  368.     int convsel;                    /* The item in the kanji list being selected */
  369.     int borderspace;                /* Default amount of border (in pixels) */
  370.  
  371.     KANJIFONT *sysfont;             /* The system Kanji font */
  372.     KANJIFONT *basefont;            /* The base Kanji font */
  373.     KANJIFONT *printfont;           /* The base print font */
  374.     int nr_fonts;                   /* Number of installed kanji fonts */
  375.  
  376.     int leading;                    /* Number of pixels between kanji's */
  377.     int spacing;                    /* Number of pixels between lines */
  378.  
  379.     char *printer;                  /* Name of the printer */
  380.     POINT resolution;               /* The dpi of the printer */
  381.     POINT printable;                /* The printable area of the printer */
  382.     double dispscale;               /* The ratio of screen : printer */
  383.     double printscale;              /* The scale factor of printing font */
  384.     double paper[2];                /* Paper size, in inches */
  385.     MEASUREMENT measure;            /* Measurement units */
  386.     PAGESETUP pagesetup;            /* Page setup */
  387.  
  388.     char *jwppath;                  /* Pathname of the JWP directory */
  389.     char *help;                     /* Pathname of the JWP help file */
  390.     char *convdict;                 /* Filename of the conversion dictionary */
  391.     char *convidx;                  /* Filename of the conversion dictionary index */
  392.     char *userdict;                 /* Filename of the user conversion dictionary */
  393.     char *convcache;                /* Filename of the conversion cache */
  394.     char *jdict;                    /* Filename of the Japanese-English dictionary */
  395.     char *jdictidx;                 /* Filename of the J-E dictionary index */
  396.     char *kinfo;                    /* Filename of the Kanji info file */
  397.     char *kinfoidx;                 /* Filename of the Kanji info index */
  398.     char *glossary;                 /* Filename of the global glossary */
  399.  
  400.     FARPROC convdlg;                /* Modeless dialog boxes */
  401.     FARPROC gloslistdlg;
  402.  
  403.     POINT far *cpos;                /* Screen positions for the current paragraph */
  404.     PARAGRAPH far *cpospara;        /* Current paragraph being tracked */
  405.     int cposcount;                  /* Number of characters in the current paragraph */
  406.     unsigned int cpossize;          /* Number of characters allocated in array */
  407.  
  408.     HWND hwnd;                      /* Main window handle */
  409.     HWND tbhwnd;                    /* Toolbar window handle */
  410.     HWND fonthwnd;                  /* Font list window handle */
  411.     HWND clienthwnd;                /* Frame window handle */
  412.     HWND glisthwnd;                 /* Glossary list handle */
  413.     HWND convhwnd;                  /* Kanji list window handle */
  414.     HWND statushwnd;                /* Status bar window handle */
  415.  
  416.                                     /* The following are options... */
  417.  
  418.     RECT glistsize;                 /* Size and position of the glossary list */
  419.     RECT convbar;                   /* Size and position of the conversion bar */
  420.     FILEFORMAT clipboard;           /* Clipboard format */
  421.     int undolevels;                 /* Number of undo levels */
  422.     int saveundolevels;             /* Number of undo levels to save */
  423.     int listposition;               /* 0 = floating, 1 = top, 2 = bottom */
  424.     int glistbehaviour;             /* 0 = remains, 1 = disappears */
  425.     JUSTIFICATION longjust;         /* Justification for long text */
  426.     JUSTIFICATION shortjust;        /* Justification for long text */
  427.  
  428.     BOOL relaxmargin;               /* Relax the right margin on small hiragana's? */
  429.     BOOL dynamicconvert;            /* Automatically convert when hopeless? */
  430.     BOOL dynamicglossary;           /* Check glossary dynamically? */
  431.     BOOL glistvisible;              /* Is the glossary list visible? */
  432.     BOOL showspecial;               /* Show special symbols */
  433.     BOOL showruler;                 /* Show the ruler in file windows */
  434.     BOOL showstatus;                /* Show the status bar */
  435.     BOOL showribbon;                /* Show the toolbar */
  436.     BOOL draftview;                 /* Show the draft view */
  437.     BOOL ctl3d;                     /* 3D dialog boxes */
  438.     BOOL nnconvert;                 /* Convert nn into n' n */
  439. } GLOBALOPTIONS;
  440.  
  441.  
  442.  
  443. /* Global variables */
  444.  
  445. extern GLOBALOPTIONS global;
  446. extern FILEOPTIONS *fileoptions;
  447. extern FILEOPTIONS *curfile;
  448. extern KANJIFONT *InstalledFonts;
  449. extern KANJIFONT *DefKanjiFont;
  450. extern KANJIFONT *DefPrintFont;
  451. extern ASCIIFONT DefAsciiFont;
  452. extern HANDLE hInstance;
  453. extern KANJI kanji_list[];
  454. extern BYTE LastConvKey[];
  455. extern HMENU hmenu;
  456. extern FILEFORMAT FileFormats[];
  457. extern char *FileFormatNames[];
  458. extern char *FileExtensions[];
  459. extern BOOL OptionsChanged;
  460. extern BOOL Dialogs3D;
  461. extern MEASUREINFO Measurements[];
  462.  
  463.  
  464. /* Global functions */
  465.  
  466. extern int  GetKanjiBitmap (KANJIFONT *, int, BYTE far * *);
  467. extern void DisplayKanjiBitmap (HDC, int, int, int, int, int, DWORD, BYTE far *);
  468. extern int OpenFont(char *, KANJIFONT *);
  469. extern FILEOPTIONS *NewFile (int, BOOL);
  470. extern void ShowFileWindow (char *, FILEOPTIONS *);
  471. extern void ErrorMessage (HWND, char *, ...);
  472. extern int  Confirmation (HWND, char *, ...);
  473. extern BOOL RetryMessage (char *, ...);
  474. extern int  InitFonts (void);
  475. extern void DisplayRuler (FILEOPTIONS *, BOOL);
  476. extern int  Skip (POSITION *, int);
  477. extern DWORD GetDimension (FILEOPTIONS *, POSITION, int);
  478. extern int  FontCharWidth (int, int);
  479. extern int  CalcLength (FILEOPTIONS *, POSITION *);
  480. extern void SetReformatProc (BOOL (*f_pf)(FILEOPTIONS *, PARAGRAPH far *, int));
  481. extern void ReformatParagraph (FILEOPTIONS *, POSITION, PARAGRAPH far *, int);
  482. extern void FindScrollPos (FILEOPTIONS *);
  483. extern void SetHorzScroll (FILEOPTIONS *);
  484. extern BOOL CharInput (FILEOPTIONS *, WORD);
  485. extern void MoveIntoWindow (FILEOPTIONS *);
  486. extern BOOL FindCaret (FILEOPTIONS *, BOOL);
  487. extern void DoCaret (FILEOPTIONS *, int, int, BOOL);
  488. extern int  Jis2Index (KANJI, BOOL);
  489. extern BOOL IsSmallKana (KANJI);
  490. extern void EnableNullPointers (BOOL);
  491. extern void far *SegHeapAlloc (unsigned int);
  492. extern void SegHeapFree (void far *);
  493. extern void far *SegHeapRealloc (void far *, unsigned int);
  494. extern unsigned int SegHeapGetSize (void far *);
  495. extern void FreeAllMemory (void);
  496. extern void *MyLocalAlloc (unsigned int);
  497. extern int  InitConversion (void);
  498. extern int  kanjilen (KANJI far *);
  499. extern int  unitlen (UNIT far *);
  500. extern int  kanjicmp (KANJI far *, KANJI far *);
  501. extern int  kanjincmp (KANJI far *, KANJI far *, int);
  502. extern int  bytecmp (BYTE far *, BYTE far *);
  503. extern int  bytencmp (BYTE far *, BYTE far *, int);
  504. extern KANJI far *kanjicpy (KANJI far *, KANJI far *);
  505. extern KANJI far *kanjicat (KANJI far *, KANJI far *);
  506. extern char *ReverseKana (KANJI);
  507. extern void StatusMessage (char *);
  508. extern void InsertString (FILEOPTIONS *, POSITION, KANJI far *, int);
  509. extern void DeleteString (FILEOPTIONS *, POSITION, int, int);
  510. extern void ReplaceString (FILEOPTIONS *, POSITION, int, KANJI far *, int);
  511. extern void FlipHighlight (FILEOPTIONS *);
  512. extern BOOL MergeKanjiLists (KANJI *, KANJI *);
  513. extern int  FindConversion (KANJI *, KANJI *);
  514. extern void ReallocateText (POSITION, unsigned int);
  515. extern void PutIntoConvCache (BYTE far *, KANJI far *);
  516. extern int ConvCacheLookup (BYTE far *, KANJI far *);
  517. extern void FontCacheStatistics (int *, long int *, long int *, long int *);
  518. extern void ConvCacheStatistics (long int *, long int *, long int *);
  519. extern void CountMemoryUsage (long int *, long int *, long int *);
  520. extern BOOL DoFileOpen (char *);
  521. extern BOOL DoFileSaveAs (BOOL);
  522. extern void SetupIO (int (* in)(void), void (* out)(int));
  523. extern FILEFORMAT DetectCodeType(void);
  524. extern void FileImport (FILEFORMAT);
  525. extern void FileExport (FILEFORMAT);
  526. extern void NewParagraph (FILEOPTIONS *, POSITION *, unsigned int n);
  527. extern int AllignKanjiBitmap (BYTE far *, BYTE far *, int, int);
  528. extern void CloseFile (FILEOPTIONS *);
  529. extern void DrawBoundingBox (HWND, HDC, int);
  530. extern LONG JlistProc (HWND, WORD, WORD, LONG, BOOL, KANJI far * (* Convert)(int, LONG, KANJI *));
  531. extern void CenterDialogBox (HWND);
  532. extern WORD DecodeKeyStroke (WORD, WORD, BOOL, BOOL);
  533. extern BOOL ReadProgramSizeOptions (int *, int *, int *, int *);
  534. extern void ReadOptionsFile (void);
  535. extern void WriteOptionsFile (BOOL);
  536. extern void ReadGlossary (char *);
  537. extern void WriteGlossary (char *);
  538. extern void ProcessMenuTexts (void);
  539. extern int SearchGlossary (KANJI far *);
  540. extern KANJI far *GetGlossary (int);
  541. extern void FillCPos (FILEOPTIONS *, PARAGRAPH far *, int, int);
  542. extern BOOL InSelection (FILEOPTIONS *, POSITION);
  543. extern void WriteConversionCache (char *);
  544. extern void WriteUserConversions (char *);
  545. extern void ReadConversionCache (char *);
  546. extern HANDLE GetCBData (int);
  547. extern void ClearCBData (void);
  548. extern void CopyToClipboard (FILEOPTIONS *);
  549. extern LONG ProcessClipboardMessage (HWND, WORD, WORD, LONG);
  550. extern void InsertFromClipboard (FILEOPTIONS *);
  551. extern void BlockDelete (FILEOPTIONS *, POSITION, POSITION);
  552. extern void BlockReplace (FILEOPTIONS *, POSITION, POSITION, KANJI far *);
  553. extern void RecordAction (EDITACTION, ...);
  554. extern KANJI TranslateJAscii (KANJI, BOOL);
  555. extern void TurnOffSelection (FILEOPTIONS *);
  556. extern void RedrawFile (FILEOPTIONS *, HDC, int, int, RECT far *, BOOL);
  557. extern void ToggleInputMode (void);
  558. extern void TakeCareOfThings (FILEOPTIONS *, BOOL);
  559. extern void DoSearch (void);
  560. extern void DoReplace (void);
  561. extern void ConvertNow (FILEOPTIONS *, BOOL);
  562. extern void SetKanjiInfoChar (KANJI);
  563. extern void RecordAnchor (FILEOPTIONS *, POSITION, POINT);
  564. extern void ChangeAnchor (int, int);
  565. extern int RelativePosition (POSITION, POSITION, BOOL);
  566. extern void DropAnchor (FILEOPTIONS *, POSITION, POINT, int);
  567. extern void ExtendSelection (HWND, FILEOPTIONS *);
  568. extern void Triangles (FILEOPTIONS *);
  569. extern void ReformatFile (FILEOPTIONS *);
  570. extern void EnableFontCache (BOOL);
  571. extern void AbsoluteToPosition (POSITION, POSITION *);
  572. extern void ResetClipboard (void);
  573. extern void SwitchMenu (int);
  574. extern char *DupString (char *);
  575. extern BOOL SetupPrinter (BOOL);
  576. extern void InitPrinting (void);
  577. extern HDC GetPrinterDC(BOOL, char *);
  578. extern MEASUREMENT FindMeasurement (char *, MEASUREMENT);
  579. extern int CalcLineLength (FILEOPTIONS *);
  580. extern void StartPrinting (FILEOPTIONS *, int, int);
  581. extern void PrintFile (FILEOPTIONS *);
  582. extern int FontDisplayError (int, int);
  583. extern void ChangePrinterOrFonts (void);
  584. extern HFONT SelectAsciiFont (HDC hdc, char *facename, double ps, TEXTMETRIC *tmout);
  585. extern HFONT FindMatchingScreenFont (HFONT, double, TEXTMETRIC *);
  586. extern void PutQuickFile (char *);
  587. extern void UpdateQuickFiles (void);
  588. extern char *GetQuickFile (int);
  589. extern FILEOPTIONS *CreateUsingTemplate(char far *, int);
  590. extern BOOL ClipboardFull (void);
  591. extern int YesNo(HWND, char *, ...);
  592. extern void UndoAddTyping (FILEOPTIONS *, POSITION, int, BOOL);
  593. extern void UndoAddInsert (FILEOPTIONS *, POSITION, POSITION);
  594. extern void UndoJoinLine (FILEOPTIONS *, POSITION);
  595. extern void UndoAddErase (FILEOPTIONS *, POSITION, int);
  596. extern void UndoAddDelete (FILEOPTIONS *, POSITION, POSITION);
  597. extern void UndoOneStep (FILEOPTIONS *);
  598.