;=============================================================== ; 2バイト文字対応改行挿入モジュール ;=============================================================== #module "_wf_str2kai2" ; 2バイト文字対応改行挿入 インデント機能付き / ↑特殊インデント機能付き ;--------------------------------------------------------------- #defcfunc wf_str2kai2 str aa, int bb, int n ; 新関数「wf_str2kai2」を生成 ;【パラメータ】 sdim a,1024 : a=aa b=bb ; b 1行文字数を指定 ;n モードを指定 0:1回改行 1〜:グローバル改行 ;【返し値】 ;c ;【レスポンス】(stat) mref stt,64 ; 1回改行モードでは返し値の文字数、グローバル改行モードでは挿入された改行コード(\n)の数 l=strlen(a) f=0 flg_top=0 if strmid(a,0,1) == " " : flg_top=1 if strmid(a,0,2) == " " : flg_top=2 if strmid(a,0,3) == " ↑" : flg_top=3 if strmid(a,0,4) == " ↑" : flg_top=4 flg_ent=0 if l > b { b1=b b2=b-1 if n == 0 { sdim c,l+9 }else{ sdim c,l+128 } r_p=0 : val_chr=0 w_p=0 *s if r_p >= l : goto *endof_s val_chr=peek(a,r_p) if ((val_chr >= 129)&(val_chr <= 159))|((val_chr >= 224)&(val_chr <= 235)) { ; 2バイト文字(S-JIS)は1バイト目が81-9F(129-159)/E0-EF(224-235)として扱う if (r_p == b2) | (r_p == b1) { if (f == 0) | (n != 0) { poke c,w_p,13 poke c,w_p+1,10 w_p+=2 f++ if flg_top == 1 { poke c,w_p,32 w_p+=1 } if flg_top == 2 { poke c,w_p,32 poke c,w_p+1,32 w_p+=2 } if flg_top == 3 { poke c,w_p,32 poke c,w_p+1,32 poke c,w_p+2,32 w_p+=3 } if flg_top == 4 { poke c,w_p,32 poke c,w_p+1,32 poke c,w_p+2,32 poke c,w_p+3,32 w_p+=4 } if f == 1 { if flg_top == 1 : b-=1 if flg_top == 2 : b-=2 if flg_top == 3 : b-=3 if flg_top == 4 : b-=4 } } if n != 0 : b1=r_p+b : b2=r_p+b-1 } poke c,w_p,val_chr val_chr=peek(a,r_p+1) poke c,w_p+1,val_chr r_p+=2 w_p+=2 }else{ if r_p == b1 { if (f == 0) | (n != 0) { poke c,w_p,13 poke c,w_p+1,10 w_p+=2 f++ if flg_top == 1 { poke c,w_p,32 w_p+=1 } if flg_top == 2 { poke c,w_p,32 poke c,w_p+1,32 w_p+=2 } if flg_top == 3 { poke c,w_p,32 poke c,w_p+1,32 poke c,w_p+2,32 w_p+=3 } if flg_top == 4 { poke c,w_p,32 poke c,w_p+1,32 poke c,w_p+2,32 poke c,w_p+3,32 w_p+=4 } if f == 1 { if flg_top == 1 : b-=1 if flg_top == 2 : b-=2 if flg_top == 3 : b-=3 if flg_top == 4 : b-=4 } } if n != 0 : b1=r_p+b : b2=r_p+b-1 } poke c,w_p,val_chr r_p+=1 w_p+=1 } goto *s *endof_s if n == 0 { stt=l }else{ stt=f } return c }else{ if n == 0 { stt=l }else{ stt=f } return a } #global str_tmp="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" mes str_tmp mes "文字数"+strlen(str_tmp) mes wf_str2kai2(str_tmp,20) mes "文字数:"+strlen(str_tmp)+"→"+stat mes wf_str2kai2(str_tmp,20,1) mes " 行数:"+(stat+1) stop