1 /*-------------------------------------------------------------------- 2 nxeditor 3 FILE NAME:ed.h 4 Programed by : I.Neva 5 R & D ADVANCED SYSTEMS. IMAGING PRODUCTS. 6 1992.06.01 7 8 Copyright (c) 1998,1999,2000 9 SASAKI Shunsuke <ele@pop17.odn.ne.jp> All rights reserved. 10 --------------------------------------------------------------------*/ 11 #include "config.h" 12 13 #include <stdio.h> 14 #include <stdlib.h> 15 #include <string.h> 16 17 #include <sys/param.h> 18 19 #ifdef HAVE_UNISTD_H 20 # include <unistd.h> 21 #endif 22 23 #include "../lib/generic.h" 24 #include "../lib/hash.h" 25 #include "kanji.h" 26 27 28 #define SHELL 29 30 #ifdef VAL_impl 31 # define VAL 32 #else 33 # define VAL extern 34 #endif 35 36 37 #define LN_path 2048 38 #define LN_dspbuf 2048 39 #define LN_buf 2048 40 41 #define MAX_val 64 42 43 44 #include "../lib/term.h" 45 #include "disp.h" 46 47 48 49 50 #define UNDO_SYSTEM (0+MAX_edfiles) 51 #define SEARCHS_SYSTEM (1+MAX_edfiles) 52 #define SYSTEM_SYSTEM (2+MAX_edfiles) 53 #define SHELLS_SYSTEM (3+MAX_edfiles) 54 #define FOPEN_SYSTEM (4+MAX_edfiles) 55 56 #define MAX_edfiles 8 57 #define MAX_edbuf (MAX_edfiles+5) 58 59 60 #define ESCAPE (-1) 61 62 #define NONE 0 63 #define DELETE 1 64 #define BACKSPACE 2 65 #define STAY 3 66 67 #define MAXKEYDEF 200 68 #define MAXSYSKEYDEF 200 69 #define NumWidth (sysinfo.numberf ? 6: 0) 70 71 //#define MAXLINESTR 255 72 #define MAXLINESTR 2048 73 //#define MAXEDITLINE 1024 74 #define MAXEDITLINE 2048 75 #define MAXFILEMENU 512 76 77 #define PROFILE_VERSION "neprof02" 78 79 80 typedef struct _ed 81 { 82 struct _ed *prev; 83 struct _ed *next; 84 char *buffer; 85 86 size_t size; /* ���ݤ��Ƥ���Хåե��Υ����� */ 87 size_t bytes; /* �Хåե���μºݤ�ʸ��������*/ 88 } EditLine; 89 90 typedef struct 91 { 92 93 int x,y; /* ɽ���ε��� */ 94 int sizex,sizey; /* �ǥ����ץ쥤������ */ 95 96 97 int cy; /* ���̾�ǤΥ���������� */ 98 long ly; /* ���ֹ� */ 99 EditLine *ed; /* ���ιԤΥХåե� */ 100 101 int f_cx,f_sx; /* fix �����ޤ�Ʊ�����֤�ݻ����褦�Ȥ��롣 */ 102 103 int l_cy; /* latest. */ 104 long l_sy; /* ����餬�Ѳ�����к����褬ɬ�� */ 105 106 size_t bytes; /* ���Τ��Խ������� */ 107 108 bool gf; /* �����ޡ�����ä����ե饰 */ 109 } se_t; 110 111 typedef struct 112 { 113 char buf[MAXEDITLINE+1]; /* �Խ��Хåե� */ 114 int size; /* �Խ��Хåե��Υ����� */ 115 116 int dsize; /* ɽ����ǽ������ */ 117 int dx; /* ɽ������ */ 118 119 int cx,sx; /* ����������������/����������� */ 120 int lx; /* ���������Хåե���ΰ��� */ 121 122 int l_sx; /* latest. */ 123 } le_t; 124 125 #define csrse edbuf[CurrentFileNo].se 126 #define csrle edbuf[CurrentFileNo].le 127 128 //�����ƥ���� 129 130 typedef struct 131 { 132 char nxpath[LN_path]; 133 hash_t *vp_def; 134 const char *shell; 135 136 int tabstop; 137 char tabcode; 138 139 color_t c_crmark; 140 color_t c_block; 141 color_t c_linenum; 142 color_t c_ctrl; 143 color_t c_sysmsg; 144 color_t c_search; 145 color_t c_menuc; 146 color_t c_menun; 147 color_t c_eff_dirc; 148 color_t c_eff_dirn; 149 color_t c_eff_normc; 150 color_t c_eff_normn; 151 152 bool crmarkf; /* crmark������Ԥ����ɤ��� */ 153 bool tabmarkf; 154 bool autoindentf; 155 bool numberf; 156 bool freecursorf; 157 bool overwritef; 158 bool japanesef; 159 160 bool backupf; 161 bool nocasef; 162 163 bool f_report; 164 165 char systemline[MAXEDITLINE+1]; 166 dspreg_t *sl_drp; 167 char doublekey[4+1]; 168 } sysinfo_t; 169 170 VAL sysinfo_t sysinfo; 171 VAL int CurrentFileNo; 172 VAL int BackFileNo; 173 174 //csrse 175 VAL int OnMessage_Flag; 176 177 178 typedef enum {REPLM_all,REPLM_before,REPLM_after,REPLM_block} replm_t; 179 180 181 typedef enum {BLKM_none, BLKM_x, BLKM_y} blkm_t; 182 183 typedef struct 184 { 185 long y_st, y_ed; 186 int x_st, x_ed; 187 188 blkm_t blkm; 189 } block_t; 190 191 typedef struct 192 { 193 char path[LN_path+1]; 194 int ct; /* Create Time */ 195 bool cf; /* file Change Flag */ 196 int kc; /* EUC/JIS/SJIS */ 197 int rm; /* LF/CRLF/CR */ 198 199 200 bool pm; /* Paging Mode */ 201 replm_t replm; /* replace Mode */ 202 203 se_t se; 204 le_t le; 205 206 block_t block; 207 } edbuf_t; 208 209 210 VAL edbuf_t edbuf[MAX_edbuf]; 211 212 #define CNTRL(c) ((c)-'@') 213 214 215 216 extern void eff_init(const char *s1,const char *s2); 217 218 extern void search_init(); 219 220 extern void InitLine(); 221 extern void Realloc(EditLine *li,const char *s); 222 extern EditLine *GetTop(); 223 extern EditLine *GetLast(); 224 extern EditLine *MakeLine(const char *buffer); 225 extern void AppendLast(EditLine *li); 226 extern void InsertLine(EditLine *bli,EditLine *li); 227 extern void DeleteList(EditLine *li); 228 extern EditLine *GetList(long o_number); 229 extern long GetTopNumber(); 230 extern long GetLastNumber(); 231 extern void lists_proc(void func(),void *gp,long n_st,long n_en); 232 extern size_t lists_size(long n_st,long n_en); 233 extern void lists_add(void *func(),void *gp); 234 235 extern void inkey_wait(const char *buffer); 236 extern int keysel(const char *s,const char *t); 237 extern bool keysel_ynq(const char *s); 238 extern int keysel_yneq(const char *s); 239 240 extern void se_insert(const char *s,bool f); 241 extern void se_delete(int n, bool f); 242 243 244 245 extern void undo_paste(); 246 extern void undo_add(bool df,const char *s); 247 extern void udbuf_set(bool df,const char *s); 248 extern void udbuf_get(char *s); 249 extern void udbuf_init(); 250 251 extern void le_setlx(le_t *lep,int lx); 252 extern void le_csrleftside(le_t *lep); 253 extern void le_csrrightside(le_t *lep); 254 extern void le_csrleft(le_t *lep); 255 extern void le_csrright(le_t *lep); 256 extern void le_edit(le_t *lep,int ch,int cm); 257 extern size_t le_regbuf(const char *s,char *t); 258 259 260 261 typedef struct 262 { 263 char str[MAXLINESTR+1]; 264 color_t nc; /* normal�� */ 265 color_t cc; /* cursor������� */ 266 267 bool mf; /* mark flag */ 268 } mitem_t; 269 270 typedef struct 271 { 272 mitem_t *mitem; 273 size_t nums; 274 275 char *title; 276 bool df; /* filer�����Ѥ���disable flag */ 277 278 int sy,cy; /* ���ߤκ�ɸ */ 279 280 dspreg_t *drp; 281 } menu_t; 282 283 extern void menu_itemmake(menu_t *mnp,void func(int,mitem_t *,void *),size_t nums,void *vp); 284 extern void menu_itemmakelists(menu_t *mnp,size_t width,size_t num,char *s); 285 extern void menu_iteminit(menu_t *mnp); 286 extern void menu_itemfin(menu_t *mnp); 287 extern void menu_dview(menu_t *mnp); 288 extern void menu_itemview(menu_t *mnp,int a,bool f); 289 extern void menu_view(menu_t *mnp); 290 extern void menu_csrmove(menu_t *mnp,int ly); 291 extern void menu_csrnext(menu_t *mnp,char c); 292 extern int menu_select(menu_t *mnp); 293 extern int menu_vselect(int x, int y, size_t num, ...); 294 295 extern dspreg_t *menu_regset(menu_t *mnp); 296 297 298 typedef struct 299 { 300 FILE *fp; 301 int kc; 302 int jm; /* jis������ */ 303 304 int n_cr,n_lf; 305 } kinfo_t; 306 307 #define issjis1(c) (((u_char)(c)>=0x81 &&(u_char)(c)<=0x9f) || ((u_char)(c)>=0xe0 &&(u_char)(c)<=0xfc)) 308 #define issjis2(c) ( (u_char)(c)>=0x40 &&(u_char)(c)<=0xfc) 309 #define iskana(c) ( (u_char)(c)>=0xa0 &&(u_char)(c)<=0xdf) 310 #define iseuc(c) ( (u_char)(c)>=0xa1 &&(u_char)(c)<=0xfe) 311 #define isjis(c) ( (u_char)(c)>=0x21 &&(u_char)(c)<=0x7e) 312 313 extern const char *kanji_fromeuc(char *s, size_t bytes, const char *t, int kc); 314 315 extern int file_knjchk(FILE *fp); 316 extern int file_gets(char *s, size_t bytes, FILE *fp, int *n_cr, int *n_lf); 317 extern void kanji_toeuc(char *s,size_t bytes, const char *t 318 , bool f_sjis, int *jm); 319 320 #define JM_ank 0 321 #define JM_kana 1 322 #define JM_kanji 2 323 #define JM_so 3 324 325 #define KC_euc 0 326 #define KC_jis 1 327 #define KC_sjis 2 328 329 #define RM_lf 0 330 #define RM_crlf 1 331 #define RM_cr 2 332 333 extern int kanji_poscanon(int offset, const char *buf); 334 extern int kanji_poscandsp(int offset, const char *buf); 335 extern int kanji_posnext(int offset, const char *buf); 336 extern int kanji_posprev(int offset, const char *buf); 337 338 extern int kanji_posbuf(int offset, const char *buf); 339 extern int kanji_posdsp(int offset, const char *buf); 340 341 extern int kanji_countdsp(char c, int n); 342 extern int kanji_countbuf(char c); 343 344 345 extern void strjfcpy(char *s,const char *t,size_t bytes,size_t len); 346 347 extern const char *keyf_getarg(int n); 348 extern int keyf_numarg(); 349 350 extern void lm_mark(int ln, int n); 351 extern int lm_line(int n); 352 353 extern void keyf_set(int region,const char *k,const char *s); 354 extern int keyf_getname(const char *s,int n); 355 356