home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Heaven Sunny 2 / APPARE2.BIN / oh_towns / taropyon / edia / ccisrc / edi.c < prev    next >
C/C++ Source or Header  |  1995-06-20  |  34KB  |  1,060 lines

  1. /*************************************************************************
  2. *    "edi.cci" : テキストエディタ
  3. *************************************************************************/
  4.  
  5. #include    "ediofs.h"
  6.  
  7. /*    edi から txd を得るマクロ (edi->txd)    */
  8. #define    EDI_TXDPTR(edi)    EdiGetTxdPtr(edi)
  9.  
  10. /* メタキー設定データ    */
  11. char    *EdiTbl_metakey[26] =
  12. {
  13.     /* A */    "$swave(note,cmd,len,Tn,wn,&,x,sp,ep,sin,amp,ang,spd,amp,sub)",
  14.     /* B */    "$cho(note,len,n,x,sp,ep)",
  15.     /* C */    "continue",
  16.     /* D */    "#define\\t",
  17.     /* E */    "#endif",
  18.     /* F */    "fprintf(\x22",
  19.     /* G */    "fgets(buf,len,fp);",
  20.     /* H */    ".mmltype\\tfb386\\n.fm\\t\\t\\tfmtone2\\n.pcm\\t\\tensam01\\n",
  21.     /* I */    "#include\\t",
  22.     /* J */    "#ifdef\\n#\\tdefine\\tEXT\\n#else\\n#\\tdefine\\tEXT\\textern\\n#endif\\n",
  23.     /* K */    "iskanji\x28",
  24. #if    0
  25.     /* L */    "/*\\t:*****************************************************************\\n\\t:\\n\\t:*****************************************************************\\n*/\\n",
  26. #else
  27.     /* L */    "/*************************************************************************\\n*\\n*************************************************************************/\\n",
  28. #endif
  29.     /* M */    "void\\tmain(int argc,char *argv[])\\n{\\t",
  30.     /* N */    "NORMAL",
  31.     /* O */    "if ( (fp = fopen(filename,\x22rb\x22))==NULL )\\n",
  32.     /* P */    "printf(\x22",
  33.     /* Q */    "exit();",
  34.     /* R */    "return",
  35.     /* S */    "$slide(note,cmd,n,&,x,sp,ep)",
  36.     /* T */    "typedef",
  37.     /* U */    "unsigned",
  38.     /* V */    "$vib(note,len,n,sin,sp,a,spd,ang)",
  39.     /* W */    "$wave(note,cmd,n,&,sin,sp,a,spd,ang)",
  40.     /* X */    "FALSE",
  41.     /* Y */    "TRUE",
  42.     /* Z */    "register"
  43. };
  44.  
  45. /*************************************************************************
  46. *    テキストエディタ・システムの初期化
  47. *************************************************************************/
  48.  
  49. int        EdiUsr_sysInit()
  50. {
  51.     int        i;
  52.  
  53.     EdiHistFlag = TRUE;    /* 編集履歴有効    */
  54.     for ( i = 0; i < 26; ++i )
  55.         EdiMetaKeySet( 'A'+i, EdiTbl_metakey[i]);
  56.  
  57.     /* 検索パターンの登録    --------------------------------------------*/
  58.     TxdSetSearchPattern("NIFTY TITLE", "[0-9]..../[0-9].... ........  .* .*\\|[0-9]../[0-9]..   ...[0-9]....  .* .*" );
  59.     TxdSetSearchPattern("C FUNCTION" , "^[A-Za-z_].*[ \\t]*[a-zA-Z_].*(.*)" );
  60.     TxdSetSearchPattern("TITLE"      ,
  61.         "^[ \\t]*[★☆●○◎■□◆◇・§]\\|^[ \\t]*[((【《][ 0-90-9]*[))】》]" );
  62.     TxdSetSearchPattern("#ifdef~else~endif" ,
  63.         "^#[ \\t]*if\\|^#[ \\t]*else\\|^#[ \\t]*endif" );
  64.     return (NORMAL);
  65. }
  66.  
  67. int        EdiUsr_sysTerm()
  68. {
  69.     return (NORMAL);
  70. }
  71.  
  72. /*************************************************************************
  73. *    操作ガイドメッセージのオン/オフ
  74. *************************************************************************/
  75.  
  76. int        EdiUsr_guideMsg()
  77. {
  78.     int        y, x1,y1,x2,y2;
  79.  
  80.     x1 = EdiFr[0];
  81.     y1 = EdiFr[1];
  82.     x2 = EdiFr[2];
  83.     y2 = y1 + 14*2 - 1;
  84.  
  85.     EdiFr[1] = y2 + 1;
  86.  
  87.     DSP_writePage(0);
  88.     DSP_boxf(x1,y1,x2,y2,PSET,C_MBLACK);
  89.     y = y1 + 1;
  90.     DSP_putf12(x1,y,C_HYELLOW,C_MBLACK,
  91. " ^Y:行削除 ^T:左削除 ^U:右削除  ^A:1単語戻る ^F:1単語進む  ^W:1行上 ^Z:1行下  ^R:1頁上 ^C:1頁下 ");
  92.     y += 14;
  93.     DSP_putf12(x1,y,C_HYELLOW,C_MBLACK,
  94. " ^B:UNDO ^~B:REDO ^O:TAB・改行表\示切替 ^Q:拡張1 ^K:拡張2 ^P:ポケット ^L:行削除バッファ・ペースト ^J・G:ガイド・オフ");
  95.  
  96.     return (NORMAL);
  97. }
  98.  
  99. /*************************************************************************
  100. *    ウィンドゥがオープンされたときに呼び出される
  101. *-------------------------------------------------------------------------
  102. *    キーカスタマイズ等はここで行うと良い
  103. *************************************************************************/
  104.  
  105. int        EdiUsr_openFunc( char *edi )
  106. {
  107.     char    *txd;
  108.  
  109. #ifdef    CT
  110. #    undef    CT
  111. #endif
  112. #define    CT    KA_BIT_CTRL
  113. #ifdef    SH
  114. #    undef    SH
  115. #endif
  116. #define    SH    KA_BIT_SHIFT
  117.  
  118.     txd = EDI_TXDPTR(edi);
  119.     TXD_cstSetKey( txd, SH|CT|KA_INS   , TXD_CALLUSRFNC, 0, "dup_line    行複写");
  120.     TXD_cstSetKey( txd,    CT|KA_RETURN, TXD_CALLUSRFNC, 0, "template    テンプレート");
  121.     TXD_cstSetKey( txd, SH|CT|KA_F     , TXD_CALLUSRFNC, 0, "getxt_searchPattern    検索パターンの取得");
  122.  
  123.     TXD_cstSetPfxKey( txd, CT|KA_Q     , KA_W, TXD_CALLUSRFNC, 0, "word_help    キーワード説明");
  124.     TXD_cstSetPfxKey( txd, CT|KA_K     , KA_W, TXD_CALLUSRFNC, 0, "cut_word        1単語選択");
  125.     TXD_cstSetPfxKey( txd, SH|CT|KA_J  , KA_U, TXD_CALLUSRFNC, 0, "undo_info    UNDO/REDO情報の表\示");
  126.     TXD_cstSetPfxKey( txd, SH|CT|KA_J  , KA_C, TXD_CALLUSRFNC, 0, "clear_undo_buffer    撤回用バッファの削除");
  127.     TXD_cstSetPfxKey( txd, CT|KA_K     , SH|KA_R,
  128.                                                TXD_CALLUSRFNC, 0, "auto_rect_edit    罫線内の矩形編集");
  129. #if    1
  130.     TXD_cstSetPfxKey( txd, CT|KA_Q     , KA_W, TXD_CALLUSRFNC, 0, "pg_help        プログラム・ヘルパ");
  131. #else
  132.     TXD_cstSetPfxKey( txd, CT|KA_Q     , KA_W, TXD_CALLUSRFNC, 0, "word_help    キーワード説明");
  133. #endif
  134.     TXD_cstSetPfxKey( txd, SH|CT|KA_M  , KA_T, TXD_CALLUSRFNC, 0, "mml_toneGen    mml generate");
  135.  
  136. #ifdef    _TAROPYON_SYSTEM
  137.     TXD_cstSetPfxKey( txd, CT|KA_J     , KA_1, TXD_CALLUSRFNC, 0, "form_1    C言語ソ\ース編集");
  138.     TXD_cstSetPfxKey( txd, CT|KA_J     , KA_2, TXD_CALLUSRFNC, 0, "form_2    原稿整理/編集(19)");
  139. #endif
  140.  
  141. #ifdef    _ESC_MARK_JUMP
  142.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0B00, TXD_CALLUSRFNC, 0, "jump_mark_0");
  143.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0200, TXD_CALLUSRFNC, 0, "jump_mark_1");
  144.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0300, TXD_CALLUSRFNC, 0, "jump_mark_2");
  145.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0400, TXD_CALLUSRFNC, 0, "jump_mark_3");
  146.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0500, TXD_CALLUSRFNC, 0, "jump_mark_4");
  147.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0600, TXD_CALLUSRFNC, 0, "jump_mark_5");
  148.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0700, TXD_CALLUSRFNC, 0, "jump_mark_6");
  149.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0800, TXD_CALLUSRFNC, 0, "jump_mark_7");
  150.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0900, TXD_CALLUSRFNC, 0, "jump_mark_8");
  151.     TXD_cstSetPfxKey( txd, KA_ESC, 0x0A00, TXD_CALLUSRFNC, 0, "jump_mark_9");
  152. #endif
  153.     return (NORMAL);
  154. #undef    CT
  155. #undef    SH
  156. }
  157.  
  158. /*************************************************************************
  159. *    セーブして編集を終了するときに呼ばれる
  160. *************************************************************************/
  161.  
  162. int        EdiUsr_saveFunc( char *edi, char *fn )
  163. {
  164.     return (NORMAL);
  165. }
  166.  
  167. /*************************************************************************
  168. *    編集を終了するときに呼ばれる
  169. *************************************************************************/
  170.  
  171. int        EdiUsr_quitFunc( char *edi )
  172. {
  173.     return (NORMAL);
  174. }
  175.  
  176. /*************************************************************************
  177. *    イベント処理関数
  178. *************************************************************************/
  179.  
  180. int        ediUsr_evtFunc( int evtNo, char *sbj )
  181. {
  182.     return    EDI_cmdJump( GET_EVTSBJ_PTR(sbj), evtNo );
  183. }
  184.  
  185. /*************************************************************************
  186. *    新規にファイルオープンしたときに呼び出される
  187. *************************************************************************/
  188.  
  189. int        EdiUsr_setPathname( char *edi, char *pn )
  190. {
  191.     return (NORMAL);
  192. }
  193.  
  194. int        EDI_menu_1( char *edi, int x, int y )
  195. {
  196.     int            ret;
  197.     char        *mnu;
  198.     char        *obj;
  199.     char        *func;
  200.  
  201.     func = "ediUsr_evtFunc";
  202.     obj = MNU_alloc(11);
  203. #ifndef    _MSG_JPN
  204.     MNU_setObj(obj, 0, MNU_NOR, 'O', "File Open"      ,    NULL, EDICMD_FILEOPEN    ,func, edi );
  205.     MNU_setObj(obj, 1, MNU_NOR, 'C', "File Close"     ,    NULL, EDICMD_FILECLOSE   ,func, edi );
  206.     MNU_setObj(obj, 2, MNU_BLK,  0,   NULL            ,    NULL, 0,                  NULL, NULL);
  207.     MNU_setObj(obj, 3, MNU_NOR, 'W', "Write file"     ,    NULL, EDICMD_FILEWRITE   ,func, edi );
  208.     MNU_setObj(obj, 4, MNU_NOR, 'R', "Read file"      ,    NULL, EDICMD_FILEREAD    ,func, edi );
  209.     MNU_setObj(obj, 5, MNU_NOR, 'U', "Update file"    ,    NULL, EDICMD_FILEUPDATE  ,func, edi );
  210.     MNU_setObj(obj, 6, MNU_NOR, 'F', "Change Filename",    NULL, EDICMD_CHANGENAME  ,func, edi );
  211.     MNU_setObj(obj, 7, MNU_NOR, 'E', "Edit original"  ,    NULL, EDICMD_EDITORIGINAL,func, edi );
  212.     MNU_setObj(obj, 8, MNU_BLK,  0,   NULL            ,    NULL, 0,                  NULL, NULL);
  213.     MNU_setObj(obj, 9, MNU_NOR, 'P', "UPdate all"     ,    NULL, EDICMD_UPDATEALL   ,func, edi );
  214.     MNU_setObj(obj,10, MNU_NOR, 'N', "New window"     ,    NULL, EDICMD_NEWWINDOW   ,func, edi );
  215.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU1 (FILE)" );
  216. #else
  217.     MNU_setObj(obj, 0, MNU_NOR, 'O', "ファイルを開く",                    NULL, EDICMD_FILEOPEN    ,func, edi );
  218.     MNU_setObj(obj, 1, MNU_NOR, 'C', "ファイルを閉じる",                NULL, EDICMD_FILECLOSE   ,func, edi );
  219.     MNU_setObj(obj, 2, MNU_BLK,  0,   NULL,                                NULL, 0,                  NULL, NULL);
  220.     MNU_setObj(obj, 3, MNU_NOR, 'W', "編集ファイルの書出",                NULL, EDICMD_FILEWRITE   ,func, edi );
  221.     MNU_setObj(obj, 4, MNU_NOR, 'R', "別ファイルの読込",                NULL, EDICMD_FILEREAD    ,func, edi );
  222.     MNU_setObj(obj, 5, MNU_NOR, 'U', "編集ファイルの更新(保存)",        NULL, EDICMD_FILEUPDATE  ,func, edi );
  223.     MNU_setObj(obj, 6, MNU_NOR, 'F', "ファイル名の変更",                NULL, EDICMD_CHANGENAME  ,func, edi );
  224.     MNU_setObj(obj, 7, MNU_NOR, 'E', "オリジナル・ファイル読込(再編集)",        NULL, EDICMD_EDITORIGINAL,func, edi );
  225.     MNU_setObj(obj, 8, MNU_BLK,  0,   NULL,                                NULL, 0,                  NULL, NULL);
  226.     MNU_setObj(obj, 9, MNU_NOR, 'P', "全編集ファイルを更新(保存)",    NULL, EDICMD_UPDATEALL   ,func, edi );
  227.     MNU_setObj(obj,10, MNU_NOR, 'N', "新しい編集ファイルを開く",        NULL, EDICMD_NEWWINDOW   ,func, edi );
  228.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー1(ファイル)" );
  229. #endif
  230.  
  231.     ret = MNU_start ( mnu );
  232.     MNU_close(mnu);
  233.     MNU_free(obj);
  234.  
  235.     return (ret);
  236. }
  237.  
  238. /*************************************************************************
  239. *    指定行に飛ぶ
  240. *************************************************************************/
  241.  
  242. int        edi_evt_jump( int evtNo, char *sbj )
  243. {
  244.     char    *edi;
  245.     char    *txd;
  246.     char    *dlg;
  247.     int        ret, ln;
  248.     char    buf[16];
  249.  
  250.     edi = GET_EVTSBJ_PTR(sbj);
  251.     dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  252. #ifndef    _MSG_JPN
  253.         "Input line number ?"
  254. #else
  255.         "行番号を入力してください。"
  256. #endif
  257.       );
  258.     DLG_getsSetTitle( dlg, "JUMP" );
  259.     buf[0] = '\0';
  260.     ret = DLG_getsStart( dlg, 15, buf );
  261.     if ( ret > 0 && (ln = atoi(buf)) > 0 )
  262.     {
  263.         txd = EDI_TXDPTR(edi);
  264.         TXD_jumpLine( txd, ln - 1 );
  265.     }
  266.     DLG_getsClose(dlg);
  267.     return (0);
  268. }
  269.  
  270. /*************************************************************************
  271. *    カットバッファを置換検索パターンに
  272. *************************************************************************/
  273.  
  274. int        _ediSetRplPtn( int evtNo, char *sbj )
  275. {
  276.     char    *edi;
  277.     char    *txd;
  278.     char    buf[256];
  279.  
  280.     edi = GET_EVTSBJ_PTR(sbj);
  281.     txd = EDI_TXDPTR(edi);
  282.     memset( buf, 0, 256);
  283.     if ( TXD_getCutBuf(txd,buf,256) >= 0 )
  284.         TXD_setReplacePtn( txd, buf );
  285.  
  286.     return (evtNo);
  287. }
  288.  
  289. /*************************************************************************
  290. *    カットバッファを置換文字列に
  291. *************************************************************************/
  292.  
  293. int        _ediSetRplStr( int evtNo, char *sbj )
  294. {
  295.     char    *edi;    /* EDI_T    */
  296.     char    *txd;    /* TXD_T    */
  297.     char    buf[256];
  298.  
  299.     edi = GET_EVTSBJ_PTR(sbj);
  300.     txd = EDI_TXDPTR(edi);
  301.     memset( buf, 0, 256);
  302.     if ( TXD_getCutBuf(txd,buf,256) >= 0 )
  303.         TXD_setReplaceStr( txd, buf );
  304.  
  305.     return (evtNo);
  306. }
  307.  
  308. /*************************************************************************
  309. *    カットバッファを検索パターンに
  310. *************************************************************************/
  311.  
  312. int        _ediSetSearch( int evtNo, char *sbj )
  313. {
  314.     char    *edi;
  315.     char    *txd;
  316.     int        len;
  317.     char    buf[256];
  318.  
  319.     edi = GET_EVTSBJ_PTR(sbj);
  320.     txd = EDI_TXDPTR(edi);
  321.     if ( (len = TXD_getCutBuf(txd,buf,256)) >= 0 )
  322.         TXD_setSearchPtn( txd, buf, len );
  323.  
  324.     return (evtNo);
  325. }
  326.  
  327. /*************************************************************************
  328. *    [MENU2]
  329. *************************************************************************/
  330.  
  331. int        EDI_menu_2( char *edi, int x, int y )
  332. {
  333.     int            ret;
  334.     char        *mnu;    /* MNU_T    */
  335.     char        *obj;    /* MNUOBJ_T    */
  336.  
  337.     obj = MNU_alloc(13);
  338. #ifndef    _MSG_JPN
  339.     MNU_setObj(obj, 0, MNU_NOR, 'F', "Find & jump",         NULL, TXD_SEARCHALL     , NULL, edi );
  340.     MNU_setObj(obj, 1, MNU_NOR, 'S', "Search",              NULL, EDICMD_SEARCH     , NULL, edi );
  341.     MNU_setObj(obj, 2, MNU_NOR, 'R', "Replace",             NULL, EDICMD_REPLACE    , NULL, edi );
  342.     MNU_setObj(obj, 3, MNU_NOR, 'A', "Multi replace All",   NULL, TXD_MREPLACE      , NULL, edi );
  343.     MNU_setObj(obj, 4, MNU_NOR, '1', "Set repalce pattern", NULL, 0,       "_ediSetRplPtn", edi );
  344.     MNU_setObj(obj, 5, MNU_NOR, '2', "Set repalce strings", NULL, 0,       "_ediSetRplStr", edi );
  345.     MNU_setObj(obj, 6, MNU_NOR, '3', "Set search pattern",  NULL, 0,       "_ediSetSearch", edi );
  346.     MNU_setObj(obj, 7, MNU_BLK,  0,   NULL,                 NULL, 0,                NULL, NULL);
  347.     MNU_setObj(obj, 8, MNU_NOR, 'J', "Jump",                NULL, 0, "edi_evt_jump"     , edi );
  348.     MNU_setObj(obj, 9, MNU_NOR, 'T', "Top of text",            NULL, EDICMD_TOPOFTEXT  , NULL, edi );
  349.     MNU_setObj(obj,10, MNU_NOR, 'B', "Bottom of text",        NULL, EDICMD_LASTOFTEXT , NULL, edi );
  350.     MNU_setObj(obj,11, MNU_NOR, 'L', "Last touch",            NULL, EDICMD_LASTTOUCH  , NULL, edi );
  351.     MNU_setObj(obj,12, MNU_NOR, 'M', "Mark",                NULL, EDICMD_MARK       , NULL, edi );
  352.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU2 (EDIT)" );
  353. #else
  354.     MNU_setObj(obj, 0, MNU_NOR, 'F', "全検索(一覧表示)"           , NULL, TXD_SEARCHALL     , NULL, edi );
  355.     MNU_setObj(obj, 1, MNU_NOR, 'S', "検索"                         , NULL, EDICMD_SEARCH     , NULL, edi );
  356.     MNU_setObj(obj, 2, MNU_NOR, 'R', "置換"                         , NULL, EDICMD_REPLACE    , NULL, edi );
  357.     MNU_setObj(obj, 3, MNU_NOR, 'A', "複数パターンの一括置換"          , NULL, TXD_MREPLACE      , NULL, edi );
  358.     MNU_setObj(obj, 4, MNU_NOR, '1', "カットバッファを置換検索パターンに転送", NULL, 0,       "_ediSetRplPtn", edi );
  359.     MNU_setObj(obj, 5, MNU_NOR, '2', "カットバッファを置換文字列に転送"   , NULL, 0,       "_ediSetRplStr", edi );
  360.     MNU_setObj(obj, 6, MNU_NOR, '3', "カットバッファを検索パターンに転送"    , NULL, 0,       "_ediSetSearch", edi );
  361.     MNU_setObj(obj, 7, MNU_BLK,  0,   NULL                          , NULL, 0,                NULL, NULL);
  362.     MNU_setObj(obj, 8, MNU_NOR, 'J', "指定行番号に移動"             , NULL, 0, "edi_evt_jump"     , edi );
  363.     MNU_setObj(obj, 9, MNU_NOR, 'T', "テキストの先頭に移動"         , NULL, EDICMD_TOPOFTEXT  , NULL, edi );
  364.     MNU_setObj(obj,10, MNU_NOR, 'B', "テキストの最後に移動"         , NULL, EDICMD_LASTOFTEXT , NULL, edi );
  365.     MNU_setObj(obj,11, MNU_NOR, 'L', "最後に変更があった場所に移動" , NULL, EDICMD_LASTTOUCH  , NULL, edi );
  366.     MNU_setObj(obj,12, MNU_NOR, 'M', "マーク&ジャンプ"             , NULL, EDICMD_MARK       , NULL, edi );
  367.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー2(編集・移動)" );
  368. #endif
  369.  
  370.     ret = MNU_start ( mnu );
  371.     MNU_close(mnu);
  372.     MNU_free(obj);
  373.  
  374.     if ( ret > 0 )
  375.         return EDI_cmdJump(edi,ret);
  376.     else
  377.         return (ret);
  378. }
  379.  
  380. /*************************************************************************
  381. *    [MENU3]
  382. *************************************************************************/
  383.  
  384. int        EDI_menu_3( char *edi, int x, int y )
  385. {
  386.     int            ret;
  387.     char        *mnu;    /* MNU_T    */
  388.     char        *obj;    /* MNUOBJ_T    */
  389.     char        *txd;
  390.     int            md;
  391.     unsigned    u[4];
  392.     char        undoMsg[80], redoMsg[80];
  393.  
  394.     txd = EDI_TXDPTR(edi);
  395.  
  396.     obj = MNU_alloc(12);
  397.     if ( TXD_getUndoInfo( txd, u ) == NORMAL && u[3] > 0 )
  398.     {
  399.         md = MNU_NOR;
  400. #ifndef    _MSG_JPN
  401.         sprintf( undoMsg, "Undo (%4d)", u[3] );
  402. #else
  403.         sprintf( undoMsg, "撤回       (%4d)", u[3] );
  404. #endif
  405.     } else
  406.     {
  407.         md = MNU_NOR | MNU_IGN;
  408. #ifndef    _MSG_JPN
  409.         strcpy( undoMsg, "Undo");
  410. #else
  411.         strcpy( undoMsg, "撤回");
  412. #endif
  413.     }
  414.     MNU_setObj(obj, 0, md, 'U', undoMsg , NULL, TXD_UNDO, NULL, edi );
  415.  
  416.     if ( TXD_getRedoInfo( txd, u ) == NORMAL && u[3] > 0 )
  417.     {
  418.         md = MNU_NOR;
  419. #ifndef    _MSG_JPN
  420.         sprintf( redoMsg, "Redo (%4d)", u[3] );
  421. #else
  422.         sprintf( redoMsg, "撤回の撤回 (%4d)", u[3] );
  423. #endif
  424.     } else
  425.     {
  426.         md = MNU_NOR | MNU_IGN;
  427. #ifndef    _MSG_JPN
  428.         strcpy( redoMsg, "Redo");
  429. #else
  430.         strcpy( redoMsg, "撤回の撤回");
  431. #endif
  432.     }
  433.     MNU_setObj(obj, 1, md, 'R', redoMsg, NULL, TXD_REDO, NULL, edi );
  434.  
  435.     MNU_setObj(obj, 2, MNU_BLK,  0,   NULL,                 NULL, 0                 , NULL, NULL);
  436.  
  437. #ifndef    _MSG_JPN
  438.     MNU_setObj(obj, 3, MNU_NOR, '1', "Split 1 left/right",    NULL, EDICMD_SPLIT_1,   NULL, edi );
  439.     MNU_setObj(obj, 4, MNU_NOR, '2', "Split 2 up/down",        NULL, EDICMD_SPLIT_2,   NULL, edi );
  440.     MNU_setObj(obj, 5, MNU_BLK,  0,   NULL,                    NULL, 0,                NULL, NULL);
  441.     MNU_setObj(obj, 6, MNU_NOR, 'P', "Print CUT-BUFFER",    NULL, EDICMD_PRINTCBUF, NULL, edi );
  442.     MNU_setObj(obj, 7, MNU_NOR, 'T', "Text printout",        NULL, EDICMD_PRINTOUT , NULL, edi );
  443.     MNU_setObj(obj, 8, MNU_BLK,  0,   NULL,                    NULL, 0,                NULL, NULL);
  444.     MNU_setObj(obj, 9, MNU_NOR, 'C', "Calculator",            NULL, EDICMD_CALC,      NULL, edi );
  445.     MNU_setObj(obj,10, MNU_NOR, 'A', "Ascii code list",        NULL, EDICMD_ASCIICODE, NULL, edi );
  446.     MNU_setObj(obj,11, MNU_NOR, 'K', "Kanji code list",        NULL, EDICMD_KANJICODE, NULL, edi );
  447.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU3 (UTILITY)" );
  448. #else
  449.     MNU_setObj(obj, 3, MNU_NOR, '1', "画面分割(左右)"    , NULL, EDICMD_SPLIT_1,   NULL, edi );
  450.     MNU_setObj(obj, 4, MNU_NOR, '2', "画面分割(上下)"    , NULL, EDICMD_SPLIT_2,   NULL, edi );
  451.     MNU_setObj(obj, 5, MNU_BLK,  0,   NULL                 , NULL, 0,                NULL, NULL);
  452.     MNU_setObj(obj, 6, MNU_NOR, 'P', "カットバッファの内容を表示", NULL, EDICMD_PRINTCBUF, NULL, edi );
  453.     MNU_setObj(obj, 7, MNU_NOR, 'T', "印字"                , NULL, EDICMD_PRINTOUT , NULL, edi );
  454.     MNU_setObj(obj, 8, MNU_BLK,  0,   NULL                 , NULL, 0,                NULL, NULL);
  455.     MNU_setObj(obj, 9, MNU_NOR, 'C', "数式計算"            , NULL, EDICMD_CALC,      NULL, edi );
  456.     MNU_setObj(obj,10, MNU_NOR, 'A', "アスキーコード一覧"  , NULL, EDICMD_ASCIICODE, NULL, edi );
  457.     MNU_setObj(obj,11, MNU_NOR, 'K', "漢字コード一覧"      , NULL, EDICMD_KANJICODE, NULL, edi );
  458.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー3(ユーティリティ)" );
  459. #endif
  460.  
  461.     ret = MNU_start ( mnu );
  462.     MNU_close(mnu);
  463.     MNU_free(obj);
  464.  
  465.     if ( ret > 0 )
  466.         return EDI_cmdJump(edi,ret);
  467.     else
  468.         return (ret);
  469. }
  470.  
  471.  
  472. #define    EDI_KST_SNAM    ".kst"
  473. #define    EDI_KST_WILD    "*.kst"
  474.  
  475. int        _ediSaveSetup( int evtNo, char *sbj )
  476. {
  477.     char    *edi;
  478.     char    *txd;
  479.     char    *fdl;
  480.     int        ret;
  481.     char    tmp[128], *fn;
  482.  
  483.     edi = GET_EVTSBJ_PTR(sbj);
  484.     txd = EDI_TXDPTR(edi);
  485.  
  486.     if ( (fdl = FDL_open(0)) == NULL )
  487.         return (ERR);
  488.     FDL_set_title( fdl,"SAVE SETUP");
  489.     FDL_set_wildcard( fdl, EDI_KST_WILD );
  490.     ret = FDL_start(fdl);
  491.     fn  = FDL_get_filename(fdl);
  492.     if ( ret != NORMAL || strlen(fn) == 0 )
  493.     {
  494.         FDL_close(fdl);
  495.         return (ERR);
  496.     }
  497.     FS_appendSnam( tmp, fn, EDI_KST_SNAM );
  498.     EDI_saveKeySetup(edi,tmp);
  499.     FDL_close(fdl);
  500.  
  501.     return (NORMAL);
  502. }
  503.  
  504.  
  505. int        _ediLoadSetup( int evtNo, char *sbj )
  506. {
  507.     char    *edi;
  508.     char    *txd;
  509.     char    *fdl;
  510.     int        ret;
  511.     char    tmp[128], *fn;
  512.  
  513.     edi = GET_EVTSBJ_PTR(sbj);
  514.     txd = EDI_TXDPTR(edi);
  515.  
  516.     if ( (fdl = FDL_open(0)) == NULL )
  517.         return (ERR);
  518.     FDL_set_title( fdl,"LOAD SETUP");
  519.     FDL_set_wildcard( fdl, EDI_KST_WILD );
  520.     ret = FDL_start(fdl);
  521.     fn  = FDL_get_filename(fdl);
  522.     if ( ret != NORMAL || strlen(fn) == 0 )
  523.     {
  524.         FDL_close(fdl);
  525.         return (ERR);
  526.     }
  527.     FS_appendSnam( tmp, fn, EDI_KST_SNAM );
  528.     EDI_loadKeySetup(edi,tmp);
  529.     FDL_close(fdl);
  530.  
  531.     return (NORMAL);
  532. }
  533.  
  534. int        _ediCallCCI( int evtNo, char *sbj )
  535. {
  536.     char    *edi;
  537.     char    *pn;
  538.  
  539.     edi = GET_EVTSBJ_PTR(sbj);
  540.     pn = EdiGet_pn(edi);        /* 編集ファイル名の取得    */
  541.     cci_call_menu(pn);
  542.  
  543.     return (NORMAL);
  544. }
  545.  
  546. int        _ediCallHE386( int evtNo, char *sbj )
  547. {
  548.     char    *edi;
  549.     char    *pn;
  550.  
  551.     edi = GET_EVTSBJ_PTR(sbj);
  552.     pn = EdiGet_pn(edi);        /* 編集ファイル名の取得    */
  553.     he386_menu( pn );
  554.  
  555.     return (NORMAL);
  556. }
  557.  
  558. int        _ediCallGSPLAY( int evtNo, char *sbj )
  559. {
  560.     AplDtaInit();                        /* DTA 領域の設定    */
  561.     AplDtaSetStr( "$MainArg", "gsplay -wrdplay H:/USR/SND/JCOMP/jcomp.exp");
  562.     AplPclExec( "GSPLAY.EXP",  7 );        /* GSPLAYの起動        */
  563.  
  564.     return (NORMAL);
  565. }
  566.  
  567. int        _ediCallExpPath( int evtNo, char *sbj )
  568. {
  569.     CCI_setExpSearchPath();
  570.     return (NORMAL);
  571. }
  572.  
  573. /*************************************************************************
  574. *    [MENU4]
  575. *************************************************************************/
  576.  
  577. int        EDI_menu_4( char *edi, int x, int y )
  578. {
  579.     int            ret;
  580.     char        *mnu;
  581.     char        *obj;
  582.  
  583.     obj = MNU_alloc(10);
  584. #ifndef    _MSG_JPN
  585.     MNU_setObj(obj, 0, MNU_NOR, 'A', "Alphabet buffer"    , NULL, EDICMD_ALBUF_MENU   , NULL, edi );
  586.     MNU_setObj(obj, 1, MNU_NOR, 'K', "Key customize"      , NULL, EDICMD_KEYCUSTOMIZE , NULL, edi );
  587.     MNU_setObj(obj, 2, MNU_NOR, 'S', "Save key setup data", NULL, 0, "_ediSaveSetup"  , edi );
  588.     MNU_setObj(obj, 3, MNU_NOR, 'L', "Load key setup data", NULL, 0, "_ediLoadSetup"  , edi );
  589.     MNU_setObj(obj, 4, MNU_BLK,  0 , NULL                 , NULL, 0, NULL             , NULL);
  590.     MNU_setObj(obj, 5, MNU_NOR, 'C', "CCI"                , NULL, 0, "_ediCallCCI"    , edi );
  591.     MNU_setObj(obj, 6, MNU_NOR, 'M', "MML Compile"        , NULL, 0, "_ediCallHE386"  , edi );
  592.     MNU_setObj(obj, 7, MNU_NOR, 'G', "GSPLAY"             , NULL, 0, "_ediCallGSPLAY" , edi );
  593.     MNU_setObj(obj, 8, MNU_BLK,  0 , NULL                 , NULL, 0, NULL             , NULL);
  594.     MNU_setObj(obj, 9, MNU_NOR, 'P', "EXP search path"    , NULL, 0, "_ediCallExpPath", edi );
  595.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "MENU4 (OTHER)" );
  596. #else
  597.     MNU_setObj(obj, 0, MNU_NOR, 'A', "英字バッファ"         , NULL, EDICMD_ALBUF_MENU   , NULL, edi );
  598.     MNU_setObj(obj, 1, MNU_NOR, 'K', "キーカスタマイズ"     , NULL, EDICMD_KEYCUSTOMIZE , NULL, edi );
  599.     MNU_setObj(obj, 2, MNU_NOR, 'S', "キー・カスタマイズ・データの保存", NULL, 0, "_ediSaveSetup"  , edi );
  600.     MNU_setObj(obj, 3, MNU_NOR, 'L', "キー・カスタマイズ・データの読込", NULL, 0, "_ediLoadSetup"  , edi );
  601.     MNU_setObj(obj, 4, MNU_BLK,  0 , NULL                   , NULL, 0, NULL             , NULL);
  602.     MNU_setObj(obj, 5, MNU_NOR, 'C', "CCI"                  , NULL, 0, "_ediCallCCI"    , edi );
  603.     MNU_setObj(obj, 6, MNU_NOR, 'M', "MML コンパイラ"       , NULL, 0, "_ediCallHE386"  , edi );
  604.     MNU_setObj(obj, 7, MNU_NOR, 'G', "GSPLAY"               , NULL, 0, "_ediCallGSPLAY" , edi );
  605.     MNU_setObj(obj, 8, MNU_BLK,  0 , NULL                   , NULL, 0, NULL             , NULL);
  606.     MNU_setObj(obj, 9, MNU_NOR, 'P', "EXPプログラム検索パス設定", NULL, 0, "_ediCallExpPath", edi );
  607.     mnu = MNU_open( x, y, MNUATT_EXIT, obj, "メニュー4(その他)" );
  608. #endif
  609.  
  610.     ret = MNU_start ( mnu );
  611.     MNU_close(mnu);
  612.     MNU_free(obj);
  613.  
  614.     if ( ret > 0 )
  615.         return EDI_cmdJump(edi,ret);
  616.     else
  617.         return (ret);
  618. }
  619.  
  620.  
  621. int        EDI_menu_5( char *edi )    {    return (ERR); }
  622. int        EDI_menu_6( char *edi )    {    return (ERR); }
  623. int        EDI_menu_7( char *edi )    {    return (ERR); }
  624. int        EDI_menu_8( char *edi )    {    return (ERR); }
  625.  
  626. int        _ediSaveColTbl( int evtNo, char *sbj )    /* カラーテーブルの保存    */
  627. {
  628.     char    *edi;
  629.     char    *txd;
  630.  
  631.     edi = GET_EVTSBJ_PTR(sbj);
  632.     txd = EDI_TXDPTR(edi);
  633.     TxdUsr_saveColTbl( txd );
  634.     return (NORMAL);
  635. }
  636.  
  637. /*************************************************************************
  638. *    [SETUP2]
  639. *************************************************************************/
  640.  
  641. int        EDI_setup2( char *edi )
  642. {
  643.     int            ret;
  644.     char        *mnu;
  645.     char        *obj;
  646.  
  647.     obj = MNU_alloc(2);
  648. #ifndef    _MSG_JPN
  649.     MNU_setObj(obj, 0, MNU_NOR, 'C' , "Change color table",    NULL, EDICMD_CHGCOLOR , NULL            , edi );
  650.     MNU_setObj(obj, 1, MNU_NOR, 'S' , "Save color table"  ,    NULL, 0               , "_ediSaveColTbl", edi );
  651.     mnu = MNU_open( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  652.         MNUATT_EXIT, obj, "SETUP2" );
  653. #else
  654.     MNU_setObj(obj, 0, MNU_NOR, 'C' , "カラーテーブルの変更", NULL, EDICMD_CHGCOLOR , NULL            , edi );
  655.     MNU_setObj(obj, 1, MNU_NOR, 'S' , "カラーテーブルの保存" , NULL, 0               , "_ediSaveColTbl", edi );
  656.     mnu = MNU_open( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  657.         MNUATT_EXIT, obj, "設定2" );
  658. #endif
  659.  
  660.     ret = MNU_start( mnu );
  661.     MNU_close(mnu);
  662.     MNU_free(obj);
  663.  
  664.     if ( ret > 0 )
  665.         return EDI_cmdJump(edi,ret);
  666.     else
  667.         return (ret);
  668. }
  669.  
  670. /*************************************************************************
  671. *    カーソル位置の位置単語をカットバッファに格納
  672. *************************************************************************/
  673.  
  674. int        TxdUsr_cut_word(char *txd )
  675. {
  676.     if ( TxdGet_selFlag(txd) != 0 )        /* 選択中なら処理しない    */
  677.         return (0);
  678.     TXD_cmdJump( txd, TXD_CUTSTART );
  679.     TXD_cmdJump( txd, TXD_NEXTWORD );
  680.     TXD_cmdJump( txd, TXD_CUTEND   );
  681.     return (NORMAL);
  682. }
  683.  
  684. /*************************************************************************
  685. *    行の二重化
  686. *************************************************************************/
  687.  
  688. int        TxdUsr_dup_line( char *txd )
  689. {
  690.     if ( TxdGet_selFlag(txd) != 0 )        /* 選択中なら処理しない                */
  691.         return (0);
  692.     TXD_cmdJump( txd, TXD_TOPOFLINE );    /* カーソルを行頭に                    */
  693.     TXD_cmdJump( txd, TXD_SCBUFSET  );    /* 行末まで行カットバッファに格納    */
  694.     TXD_cmdJump( txd, TXD_CUR_DOWN  );    /* カーソルを下に                    */
  695.     TXD_cmdJump( txd, TXD_SCBUFPASTE);    /* 行カットバッファをペースト        */
  696.  
  697.     return (NORMAL);
  698. }
  699.  
  700. int        _txd_printUndoInf( char *dlg, int *ubuf )
  701. {
  702.     DLG_msgPrintf(dlg,"  最大バッファサイズ %8d bytes\r\n", ubuf[0] );
  703.     DLG_msgPrintf(dlg,"  使用バッファサイズ %8d bytes\r\n", ubuf[1] );
  704.     DLG_msgPrintf(dlg,"  最大回数           %8d 回\r\n"   , ubuf[2] );
  705.     DLG_msgPrintf(dlg,"  現在有効数         %8d 回"       , ubuf[3] );
  706. }
  707.  
  708. /*************************************************************************
  709. *    UNDO情報の表示
  710. *************************************************************************/
  711.  
  712. int        TxdUsr_undo_info( char *txd )
  713. {
  714.     char        *dlg;
  715.     int            ch, x, y;
  716.     int            u[4];
  717.     unsigned    ec;
  718.  
  719.     DSP_writePage(1);
  720.     dlg = DLG_msgOpen( DLGPOS_MOS_SET_CENTER,DLGPOS_MOS_SET_CENTER,
  721.         8*38,16*10,C_MBLACK,C_DLGBASE,COLMIX(C_HGREEN,C_GRAY),
  722.         "UNDO/REDO BUFFER INFORMATION");
  723.     if ( dlg == NULL )
  724.         return (ERR);
  725.     DLG_msgClear( dlg, -1 );
  726.  
  727.     if ( TXD_getUndoInfo( txd, u ) == NORMAL )
  728.     {
  729.         DLG_msgPuts(  dlg,"- UNDO -\r\n" );
  730.         _txd_printUndoInf( dlg, u );
  731.         if ( TXD_getRedoInfo( txd, u ) == NORMAL )
  732.         {
  733.             DLG_msgPuts(  dlg,"\r\n- REDO -\r\n" );
  734.             _txd_printUndoInf( dlg, u );
  735.         } else
  736.         {
  737.             DLG_msgPuts(dlg,"\r\n\n REDO機能は使用されていません。\r\n" );
  738.         }
  739.     } else
  740.     {
  741.         DLG_msgPuts(dlg,"\r\n UNDO機能は使用されていません。\r\n" );
  742.     }
  743.  
  744.     while ( 1 )
  745.     {
  746.         ch = EVT_getkey(&ec);
  747.         if ( ch != 0xFFFF || EVT_mos_pget(&x,&y) )
  748.             break;
  749.         EVT_idl();
  750.     }
  751.     DLG_msgClose(dlg);
  752.     EVT_mos_waitBO();
  753.  
  754.     return (NORMAL);
  755. }
  756.  
  757. /*************************************************************************
  758. *    UNDOバッファの初期化
  759. *************************************************************************/
  760.  
  761. int        TxdUsr_clear_undo_buffer( char *txd )
  762. {
  763.     TXD_undo_freeAll( txd );
  764.     return (NORMAL);
  765. }
  766.  
  767. #define    _TXDBOX_APEX        (0)    /*    角    */
  768. #define    _TXDBOX_VERTICAL    (1)    /*    縦    */
  769. #define    _TXDBOX_HORIZON        (2)    /*    横    */
  770.  
  771. int        _txd_isRectCha(int ch)
  772. {
  773.     switch ( ch )
  774.     {
  775.         case 0x84A1:
  776.         case 0x84A4:
  777.         case 0x84A5:
  778.         case 0x84A3:
  779.         case 0x84A2:
  780.         case 0x84A7:
  781.         case 0x84A8:
  782.         case 0x84A6:
  783.         case 0x84A9:
  784.             return _TXDBOX_APEX;
  785.         case 0x84A0:
  786.             return _TXDBOX_VERTICAL;
  787.         case 0x849F:
  788.             return _TXDBOX_HORIZON;
  789.  
  790.         case 0x84AC:
  791.         case 0x84AD:
  792.         case 0x84AE:
  793.         case 0x84AF:
  794.         case 0x84B0:
  795.         case 0x84B1:
  796.         case 0x84B2:
  797.         case 0x84B3:
  798.         case 0x84B4:
  799.             return _TXDBOX_APEX;
  800.         case 0x84AB:
  801.             return _TXDBOX_VERTICAL;
  802.         case 0x84AA:
  803.             return _TXDBOX_HORIZON;
  804.  
  805.         case 0x84CC:
  806.         case 0x84CD:
  807.         case 0x84CE:
  808.         case 0x84CF:
  809.         case 0x84D0:
  810.         case 0x84D1:
  811.         case 0x84D2:
  812.         case 0x84D3:
  813.         case 0x84D4:
  814.             return _TXDBOX_APEX;
  815.         case 0x84CB:
  816.             return _TXDBOX_VERTICAL;
  817.         case 0x84CA:
  818.             return _TXDBOX_HORIZON;
  819.  
  820.         default:
  821.             return (-1);
  822.     }
  823. }
  824.  
  825. /*************************************************************************
  826. *    罫線で囲まれている範囲を矩形編集
  827. *************************************************************************/
  828.  
  829. int        TxdUsr_auto_rect_edit( char *txd )
  830. {
  831.     int        saveLnL;
  832.     int        saveOfs;
  833.     int        typ, x, y;
  834.     int        x1, y1, x2, y2;
  835.     int        pos1LnL, pos1Ofs;
  836.     int        pos2LnL, pos2Ofs;
  837.  
  838.     /* 現在カーソル位置を保存    */
  839.     saveLnL = TxdGet_curPosLnL(txd);
  840.     saveOfs = TxdGet_curPosOfs(txd);
  841.     if ( saveLnL == 0 || TxdGet_curLin(txd) == NULL || TxdGet_curX(txd) == 0 )
  842.         return (NORMAL);
  843.     if ( _txd_isRectCha(TXD_getch(txd)) >= 0 )
  844.         return (NORMAL);    /* 罫線上ならエラー    */
  845.  
  846.     /* 左端まで移動    ----------------------------------------------------*/
  847.     for(;;)
  848.     {
  849.         TXD_cmdJump(txd,TXD_CUR_LEFT);
  850.         typ = _txd_isRectCha(TXD_getch(txd));
  851.         if ( typ == _TXDBOX_VERTICAL )
  852.         {    /* OK */
  853.             x1 = TxdGet_curX(txd);
  854.             break;
  855.         } else if ( TxdGet_curX(txd) == 0 )
  856.             goto _ERR;
  857.     }
  858.  
  859.     /* 上限まで移動    ----------------------------------------------------*/
  860.     for(;;)
  861.     {
  862.         TXD_cmdJump(txd,TXD_CUR_UP);
  863.         x = TxdGet_curX(txd);
  864.         if ( x != x1 )
  865.             goto _ERR;
  866.         typ = _txd_isRectCha(TXD_getch(txd));
  867.         if ( typ == _TXDBOX_APEX )
  868.         {    /* OK */
  869.             y1 = TxdGet_curPosLnD(txd);
  870.             break;
  871.         } else if ( typ != _TXDBOX_VERTICAL )
  872.             goto _ERR;
  873.     }
  874.  
  875.     pos1LnL = TxdGet_curPosLnL(txd);
  876.     pos1Ofs = TxdGet_curPosOfs(txd);
  877.  
  878.     /* 下限まで移動    ----------------------------------------------------*/
  879.     for(;;)
  880.     {
  881.         TXD_cmdJump(txd,TXD_CUR_DOWN);
  882.         x = TxdGet_curX(txd);
  883.         if ( x != x1 )
  884.             goto _ERR;
  885.         typ = _txd_isRectCha(TXD_getch(txd));
  886.         if ( typ == _TXDBOX_APEX )
  887.         {    /* OK */
  888.             y2 = TxdGet_curPosLnD(txd);
  889.             break;
  890.         } else if ( typ != _TXDBOX_VERTICAL )
  891.             goto _ERR;
  892.     }
  893.  
  894.     /* 右端まで移動    ----------------------------------------------------*/
  895.     for(;;)
  896.     {
  897.         TXD_cmdJump(txd,TXD_CUR_RIGHT);
  898.         y = TxdGet_curPosLnD(txd);
  899.         if ( y != y2 )
  900.             goto _ERR;
  901.         typ = _txd_isRectCha(TXD_getch(txd));
  902.         if ( typ == _TXDBOX_APEX )
  903.         {    /* OK */
  904.             x2 = TxdGet_curX(txd);
  905.             break;
  906.         } else if ( typ != _TXDBOX_HORIZON )    /* 横線と異なる    */
  907.             goto _ERR;
  908.     }
  909.  
  910.     if ( x1 >= x2 || y1 >= y2 )
  911.         goto _ERR;
  912.  
  913.     pos2LnL = TxdGet_curPosLnL(txd);
  914.     pos2Ofs = TxdGet_curPosOfs(txd);
  915.  
  916.     TXD_jumpPos( txd, pos1LnL, pos1Ofs );
  917.     TXD_cmdJump(txd,TXD_CUR_RIGHT);
  918.     TXD_cmdJump(txd,TXD_CUR_DOWN);
  919.     TXD_cmdJump(txd,TXD_RECTSTART);
  920.  
  921.     TXD_jumpPos( txd, pos2LnL, pos2Ofs );
  922.     TXD_cmdJump(txd,TXD_CUR_UP);
  923.     TXD_cmdJump(txd,TXD_RECTEND);
  924.  
  925.     return (NORMAL);
  926.  
  927. _ERR:
  928.     TXD_jumpPos( txd, saveLnL, saveOfs );
  929.     return (NORMAL);
  930. }
  931.  
  932. #undef    _TXDBOX_APEX
  933. #undef    _TXDBOX_VERTICAL
  934. #undef    _TXDBOX_HORIZON
  935.  
  936. /*************************************************************************
  937. *    カーソル位置の単語を検索パターンに設定
  938. *************************************************************************/
  939.  
  940. int        TxdUsr_getxt_searchPattern( char *txd )
  941. {
  942.     size_t        curLnL, curOfs;
  943.     int            ret, ch, len;
  944.     char        ptn[256+4];
  945.  
  946.     /* 現在カーソル位置を取得    */
  947.     curLnL = TxdGet_curPosLnL(txd);
  948.     curOfs = TxdGet_curPosOfs(txd);
  949.  
  950.     if ( (ch = TXD_getch(txd)) > 0 )
  951.     {
  952.         len = 0;
  953.         while( len < 256 )
  954.         {
  955.             ch = TXD_getch(txd);
  956.             TXD_cmdJump( txd, TXD_CUR_RIGHT );
  957.             if ( (ch & 0xFF) < 0x20 )
  958.                 break;
  959.             if ( ch < 256 )
  960.             {
  961.                 if ( isdigit(ch) || isalpha(ch) || ch == '_' )
  962.                     ptn[len++] = ch;
  963.                 else
  964.                     break;
  965.             } else
  966.             {    /* 漢字    */
  967.                 ptn[len++] = (ch>>8) & 0xFF;
  968.                 ptn[len++] = ch & 0xFF;
  969.             }
  970.         }
  971.         ptn[len] = '\0';
  972.         TXD_jumpPos( txd, curLnL, curOfs );
  973.         if ( len == 0 )
  974.             return (NORMAL);
  975.  
  976.         if ( TXD_setSearchPtn( txd, ptn, len ) == NORMAL )
  977.         {
  978.             DSP_writePage(1);
  979.             DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  980.                 C_MBLACK, C_DLGBASE, COLMIX(C_TIMEBOX,C_GRAY),
  981.                 2, "Sear search pattern \n %s ", ptn );
  982.         }
  983.     }
  984.     return (NORMAL);
  985. }
  986.  
  987. /*************************************************************************
  988. *    C言語ソース編集
  989. *************************************************************************/
  990.  
  991. int        TxdUsr_form_1( char *txd )
  992. {
  993.     char    *edi;
  994.  
  995.     edi = TxdGet_ptr(txd);
  996.     EdiSet_marginAdjust(edi,0);
  997.  
  998.     TxdSet_linDspFlag(txd,0);    /* 行番号OFF        */
  999.     TxdSet_linDspMode(txd,1);    /* 論理行            */
  1000.     TxdSet_dspTab(txd,1);        /* タブコード表示    */
  1001.     TxdSet_tabSpace(txd,0);        /* タブ展開OFF        */
  1002.     TxdSet_dspKS(txd,1);        /* 全角スペース表示    */
  1003.     TxdSet_dspCUL(txd,1);        /* カーソル行アンダーラインON    */
  1004.     TxdSet_dspColum(txd,0);        /* 桁位置ゲージOFF    */
  1005.     TxdSet_fntX(txd, 6);        /* フォント8×16    */
  1006.     TxdSet_fntY(txd,12);
  1007.     TxdSet_xsL(txd,256);        /* 右マージン38        */
  1008.     TxdSet_tab(txd,4);            /* タブサイズ2        */
  1009.  
  1010.     TXD_chgSize(txd);
  1011.  
  1012.     return (NORMAL);
  1013. }
  1014.  
  1015. /*************************************************************************
  1016. *    原稿モード
  1017. *************************************************************************/
  1018.  
  1019. int        TxdUsr_form_2( char *txd )
  1020. {
  1021.     char    *edi;
  1022.  
  1023.     edi = TxdGet_ptr(txd);
  1024.     EdiSet_marginAdjust(edi,0);
  1025.  
  1026.     TxdSet_linDspFlag(txd,1);    /* 行番号ON            */
  1027.     TxdSet_linDspMode(txd,0);    /* 表示行            */
  1028.     TxdSet_dspTab(txd,1);        /* タブコード表示    */
  1029.     TxdSet_tabSpace(txd,1);        /* タブ展開            */
  1030.     TxdSet_dspKS(txd,1);        /* 全角スペース表示    */
  1031.     TxdSet_dspCUL(txd,1);        /* カーソル行アンダーラインON    */
  1032.     TxdSet_dspColum(txd,0);        /* 桁位置ゲージOFF    */
  1033.     TxdSet_fntX(txd, 8);        /* フォント8×16    */
  1034.     TxdSet_fntY(txd,16);
  1035.     TxdSet_xsL(txd,38);            /* 右マージン38        */
  1036.     TxdSet_tab(txd,2);            /* タブサイズ2        */
  1037.  
  1038.     TXD_chgSize(txd);
  1039.  
  1040.     return (NORMAL);
  1041. }
  1042.  
  1043. #ifdef    _ESC_MARK_JUMP
  1044. int TxdUsr_jump_mark_0( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,0);}
  1045. int TxdUsr_jump_mark_1( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,1);}
  1046. int TxdUsr_jump_mark_2( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,2);}
  1047. int TxdUsr_jump_mark_3( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,3);}
  1048. int TxdUsr_jump_mark_4( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,4);}
  1049. int TxdUsr_jump_mark_5( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,5);}
  1050. int TxdUsr_jump_mark_6( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,6);}
  1051. int TxdUsr_jump_mark_7( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,7);}
  1052. int TxdUsr_jump_mark_8( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,8);}
  1053. int TxdUsr_jump_mark_9( UINT txd ){ UINT edi; edi = TxdGet_ptr(txd); return EDI_markJump(edi,9);}
  1054. #endif
  1055.  
  1056. #include    "edimml.c"
  1057. #include    "edipghlp.c"
  1058. /*#include    "ediwhlp.c"*/
  1059. #include    "editmp.c"
  1060.