static CSTR_rast ed_end_word(CSTR_rast cs,uchar *str,uchar *word_len) { CSTR_rast c=cs; CSTR_rast_attr attr; int16_t i; RecVersions vers; CSTR_GetCollection(c,&vers); *str++ = vers.Alt[0].Code; i=1; do{ c=CSTR_GetNext(c); CSTR_GetCollection(c,&vers); *str++ = vers.Alt[0].Code; CSTR_GetAttr(c,&attr); i++; }while( c && !memchr(right_limit_word,vers.Alt[0].Code,sizeof(right_limit_word)) && !(attr.flg&CSTR_f_fict) && i<MAX_LEN_WORD-1); c=c ? c : CSTR_GetLastRaster(CSTR_GetRasterLine(cs)); if( i ) { i--; str--; } *str='\0'; *word_len = (uchar)i; return c; }
static void show_spell(CSTR_rast c) { uchar wrd[80],buf[160],*w=wrd, lang; Bool32 nonrec=FALSE; CSTR_rast_attr attr; UniVersions uni; CSTR_rast co=c; *w=0; do{ CSTR_GetAttr(c, &attr); c=CSTR_GetPrev(c); } while( c && attr.flg&(CSTR_f_let|CSTR_f_bad) ); if( !c ) c=CSTR_GetNext(CSTR_GetFirstRaster(CSTR_GetRasterLine(co))); else c=CSTR_GetNext(CSTR_GetNext(c)); CSTR_GetAttr(c,&attr); for(lang=attr.language;c;c=CSTR_GetNext(c)) { CSTR_GetAttr(c,&attr); if(!(attr.flg&(CSTR_f_let|CSTR_f_bad)) ) break; if( attr.flg&CSTR_f_bad ) nonrec=TRUE; CSTR_GetCollectionUni(c,&uni); strcat(w,uni.Alt[0].Code); } strcpy(buf,"<"); strcat(buf,wrd); strcat(buf,"> static : "); if( rpstr_txt_spell(wrd,lang) ) strcat(buf,"y"); else strcat(buf," n"); Snap_Console(buf); return; }
static CSTR_rast ed_next_word(CSTR_rast cs) { CSTR_rast c=cs; CSTR_rast_attr attr; RecVersions vers; CSTR_GetAttr(c,&attr); if( attr.flg==CSTR_f_fict && attr.col==0x7fff ) return (CSTR_rast)0; // last rast do{ c=CSTR_GetNext(c); CSTR_GetAttr(c,&attr); CSTR_GetCollection(c,&vers); }while( c && memchr(left_limit_word,vers.Alt[0].Code,sizeof(left_limit_word)) && !(attr.flg&CSTR_f_fict) ); return (attr.flg&CSTR_f_fict)?(CSTR_rast)0:c; }
void ed_make_word(CSTR_rast b, CSTR_rast e) { uchar *l,p; CSTR_rast c; UniVersions uni; int16_t k,i,n,h,wb; CSTR_rast_attr a; int16_t top,bottom,left,right; /* struct fragm_disk { uchar code; uchar fragm_numb; uint16_t depth; }; struct fragm_disk_descr { uchar code; uint16_t row; uint16_t col; uint16_t height; uint16_t w_width; char type; uchar kegl; uchar font; uchar language;//reserv; uchar type_underl; }; struct sheet_disk_descr { uchar code; char quant_fragm; uint16_t sheet_numb; uint16_t descr_lth; uchar byte_flag; uint16_t resolution; uint16_t incline; char tabl[13]; }; */ for(top=10000,bottom=0,left=10000,right=0,c=b;c&&c!=e;c=CSTR_GetNext(c)) { CSTR_GetAttr(c,&a); if( a.col<left ) left = a.col; if( a.col+a.w>right ) right = a.col+a.w; if( a.row<top ) top = a.row; if( a.row+a.h>bottom ) bottom = a.row+a.h; if( c==b ) { language=a.language; } } h = bottom-top-1; wb= (right-left-1+7)/8; // start sheet_disk_descr p =0x0a/*SS_SHEET_DESCR*//*f.code*/; ed_write((uchar*)&p,1); p =1/*f.quant_fragm*/; ed_write((uchar*)&p,1); n =0/*f.sheet_numb*/; ed_write((uchar*)&n,2); n =0x26/*f.descr_lth*/; ed_write((uchar*)&n,2); p =0/*f.byte_flag*/; ed_write((uchar*)&p,1); n =300/*f.resolution*/; ed_write((uchar*)&n,2); n =0/*f.incline*/; ed_write((uchar*)&n,2); p =0/*f.res1*/; ed_write((uchar*)&p,1); n =0/*f.res2-3*/; ed_write((uchar*)&n,2); n =0/*f.res4-5*/; ed_write((uchar*)&n,2); n =0/*f.res6-7*/; ed_write((uchar*)&n,2); n =0/*f.res8-9*/; ed_write((uchar*)&n,2); n =0/*f.res10-11*/; ed_write((uchar*)&n,2); n =0/*f.res12-13*/; ed_write((uchar*)&n,2); // start fragm_disk_descr p =0x0b/*SS_FRAGMENT*//*f.code*/; ed_write((uchar*)&p,1); n =0/*f.row*/; ed_write((uchar*)&n,2); n =0/*f.col*/; ed_write((uchar*)&n,2); n =h/*f.heigh*/; ed_write((uchar*)&n,2); n =wb/*f.w_width*/; ed_write((uchar*)&n,2); p =0/*FD_TYPE_TEXT*//*f.type*/; ed_write((uchar*)&p,1); p =10/*f.kegl*/; ed_write((uchar*)&p,1); p =0/*f.font*/; ed_write((uchar*)&p,1); p = language; ed_write((uchar*)&p,1); p =0/*f.type_underl*/; ed_write((uchar*)&p,1); // start fragm_disk p =0x0b/*SS_FRAGMENT*//*f.code*/; ed_write((uchar*)&p,1); p =0/*f.fragm_numb*/; ed_write((uchar*)&p,1); n =0/*f.depth*/; ed_write((uchar*)&n,2); for(c=b;c&&c!=e;c=CSTR_GetNext(c)) { CSTR_GetCollectionUni(c,&uni); if( uni.lnAltCnt && !uni.Alt[0].Code[0] ) continue; CSTR_GetAttr(c,&a); // start bitmap ref p =0/*SS_BITMAP_REF*/; ed_write((uchar*)&p,1); p =a.cpos; ed_write((uchar*)&p,1); n =a.r_row; ed_write((uchar*)&n,2); n =a.r_col; ed_write((uchar*)&n,2); n =a.h; ed_write((uchar*)&n,2); n =a.w; ed_write((uchar*)&n,2); // stop bitmap ref n=(int16_t)uni.lnAltCnt; if(n>7) n=7; if(n<1) n=1; for(k=i=0;k<n;) { p=uni.Alt[i].Prob; if( p&1 ) p--; if( !p ) p=2; // all odd propability for(l = &uni.Alt[i++].Code[0];*l && k<n;l++,k++) { // for ligas : strlen(uni.Alt[i].Code)>1 ed_write(l,1); if( k==n-1 ) p = p+1; // last even propability ed_write(&p,1); } } } return; }