BLUESTACK.ORG : datei5

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are 38.103.63.60
//datei-name: baumbild.C #include "baum.h" extern Dump* dump; extern char pfad[512]; void Baum::cmdline() { int c = strlen(edbox); if (edbox[c - 2] == '.' && edbox[c - 1] == 'a') { edbox[c - 2] = 0; F8(); } //1 else ifRb(); rpFlag = 1; bildneu(); } //1 baum split laden void Baum::ifRb() { if (! edbox[0]) { strcpy(edbox, "z.k"); if (rTyp == 'w') { kett1 = w[root].st; strcpy(edbox, kett1); } } baumDat = new char[BDAT]; stckrset(); if (! rb()) mes = 2; else { memcpy(mint, baumDat, 4); if (mint[0] == MAGIC) CntrlO(); else O0(); mes = 10; } edbox[0] = 0; mesFlag = 0; delete [] baumDat; } int Baum::rb() { strcpy(tex, pfad); if (*edbox != '/') { strcat(tex, edbox); } else strcpy(tex, edbox); stream = fopen(tex, "rb"); if (! stream) return 0; fseek(stream, 0, SEEK_END); datLen = ftell(stream); fseek(stream, 0, SEEK_SET); fread (baumDat, 1, datLen, stream); fclose(stream); return 1; } void Baum::bildneu() { if (! root) { if (flag0) flag0 = 0; else return; } if (edFlag == 2) { edFlag = 0; ast = clip[7]; baumi = clap[7]; if (ast == s[baumi].sl) umbau(baumi, 'l', root, rTyp); else umbau(baumi, 'r', root, rTyp); root = clap[6]; rTyp = 's'; } edbox[0] = 0; stckrset(); bBild(); lr = 0; graphldruck(); graphrdruck(); vbox[0] = v; vbox[1] = 0; //1 if (t1flag) sprintf(box, "*%u", root); //2 satznr. else { strncpy(box, txt1, 15); box[15] = 0; } //3 satzlabel if (t0flag) { if (t2flag) lr = rSatz; else { rzi = s[rSatz].b; rrSatz = r[rzi].zS; lr = rrSatz; } } sprintf(lcbox, "%3d", loc); sprintf(rzbox, "%5u", querz); if (mes) mes0(); else { mespos[0] = 0; statusbar->message(mespos); } if (dump->isVisible()) { dump->raise(); dump->repaint(); } if (rpFlag) rpFlag = 0; else repaint(0, 0, BILDBR, BILDH, FALSE); } //1 satzverb. //2 satznr. //3 satzlabel void Baum::bBild() { tabclr(); t0flag = t1flag = t2flag = 0; bbild(); if (querz) { t0flag = 1; //1 if (rrSatz && labTest(rrSatz)) txt2 = w[s[rrSatz].sl].st; //2 else t2flag = 1; } if (rTyp == 'w') { txt1 = w[root].st; v = 0; if (! txt1) t1flag = 1; } //3 else { if (labTest(root)) { txt1 = w[s[root].sl].st; //4 holz = s[root].sr; } else { holz = root; t1flag = 1; } //5 v = s[holz].v; //6 krone(holz); } } //7 //1 wrzwrz //2 wrzwrzlabel //3 wurzelwort //4 wurzellabel //5 wurzelsatz //6 verb.ausdruck //7 wrzwrzsatz void Baum::tabclr() { char i; for (i = 0; i < LZAHL; i++) { tabl[i].l = 0; tabl[i].v = 0; tabl[i].t = 0; tabl[i].e = 0; tabr[i].l = 0; tabr[i].v = 0; tabr[i].t = 0; tabr[i].e = 0; } } void Baum::bbild() { rSatz = 0; rrSatz = 0; zweig = 0; if (root) { if (rTyp == 's') { rzi = s[root].b; if (rzi) rSatz = r[rzi].zS; loc = s[root].lc; Root = s[root].h; //1 if (! Root) Root = rSatz; } else { rzi = w[root].b; if (rzi) { rSatz = r[rzi].zS; loc = s[rSatz].lc; if (labTest(rSatz) && ! r[rzi].zz) { root = rSatz; rTyp = 's'; rzi = s[root].b; if (rzi) rSatz = r[rzi].zS; loc = s[root].lc; } if (histor) { if (s[histor].t1 == 'w' && s[histor].sl == root) v = 1; else if (s[histor].t2 == 'w' && s[histor].sr == root) v = 1; } if (v) v = 0; else histor = rSatz; Root = histor; } } querz = 0; if (! rzi) return; querCount(root, rTyp); if (root == s[Root].sl) zweig = '\\'; //1 else if (root == s[Root].sr) zweig = '/'; //1 else if (root == s[s[Root].sr].sl) zweig = '\\'; //1 else zweig = '/'; //1 if ((rzi = s[rSatz].b)) rrSatz = r[rzi].zS; } else { rTyp = 's'; s0 = s[ENDS]; querz = 0; } } //1 Root i history //2 root i (Root h (links o. rechts)) void Baum::history() { if (rTyp == 'w') { if (! w[root].b) return; if (histor) { rTyp = 's'; root = histor; histor = 0; } else { rzi = w[root].b; rTyp = 's'; root = r[rzi].zS; getRSatz(); } } else if (rTyp == 's') { if (! s[root].b ) return; if (s[root].h) { rTyp = 's'; root = s[root].h; } else { rzi = s[root].b; root = r[rzi].zS; getRSatz(); } } } void Baum::histLR(char histFlag) { if (rTyp == 's') { if (labTest(root)) { Root = root; rTyp = s[root].t2; root = s[root].sr; } else Root = 0; if (histFlag == '<') { if (s[root].t1 == 'w') { rTyp = 'w'; if (Root && lflag) histor = Root; else histor = root; root = s[root].sl; Root = 0; } else if (s[root].t1 == 's') { rTyp = 's'; if (Root && lflag) s[s[root].sl].h = Root; else s[s[root].sl].h = root; root = s[root].sl; Root = 0; } } else { if (s[root].t2 == 'w') { rTyp = 'w'; if (Root && lflag) histor = Root; else histor = root; root = s[root].sr; Root = 0; } else if (s[root].t2 == 's') { rTyp = 's'; if (Root && lflag) s[s[root].sr].h = Root; else s[s[root].sr].h = root; root = s[root].sr; Root = 0; } } } } void Baum::getRSatz() { rSatz = getWrzl(root, rTyp); if (rSatz) { if (labTest(rSatz)) { root = rSatz; rTyp = 's'; } } } //1 int Baum::getWrzl(int i, char t) { int rzi; if (t == 'w') rzi = w[i].b; else rzi = s[i].b; if (rzi) return r[rzi].zS; return 0; } void Baum::pfadH(int k) { if (s[k].t1 == rC1 && s[k].sl == rI1) { if (rC1 == 's') s[s[k].sl].h = k; else histor = k; ast = k; return; } if (s[k].t1 == 's') pfadH(s[k].sl); if (ast) { s[ast].h = k; ast = k; return; } if (s[k].t2 == rC1 && s[k].sr == rI1) { if (rC1 == 's') s[s[k].sr].h = k; else histor = k; ast = k; return; } if (s[k].t2 == 's') pfadH(s[k].sr); if (ast) { s[ast].h = k; ast = k; } } // setzt ast als bezugs.knoten void Baum::querCount(int i, char t) { int rzi; if (t == 'w') rzi = w[i].b; else rzi = s[i].b; while (rzi) { rSatz = r[rzi].zS; if (s[rSatz].lc == loc) querz++; //1 rzi = r[rzi].zz; } } //1 querz: anzahl der lokalen rückzeiger void Baum::krone(int root1) { typ = s[root1].t1; // linker teil hat typ holz = s[root1].sl; // und inhalt als neuer b-punkt. if (s[root1].v != '"' && tabfall(holz, typ)) // wenn links tab-element { tabl[0].t = typ; tabl[0].e = holz; tabl[0].h = root1; } // in tabl eintragen else { nr = 0; tab = tabl; *stck0++ = 0; // anfang und ende. astkrone(); } typ = s[root1].t2; // rechter teil hat typ holz = s[root1].sr; if (s[root1].v != '"' && tabfall(holz, typ)) // wenn rechts tab-element { tabr[0].t = typ; tabr[0].e = holz; tabr[0].h = root1; } // in tabr eintragen else { nr = 0; tab = tabr; *stck0++ = 0; // anfang und ende. astkrone(); } } void Baum::astkrone() { char lrflag = 'l'; cstck0 = cstack; loop: if (! tabfall(holz, typ)) // wenn kein tab-element { if (lrflag == 'l') *cstck0++ = 127; // tiefen.zähler *stck0++ = holz; // b-punkt merken typ = s[holz].t1; // linker teil hat typ ast = holz; holz = s[holz].sl; // und inhalt als neuer b-punkt. lrflag = 'l'; goto loop; } *cstck0++ = nr; *cstck0++ = 0; if (lrflag == 'r') abtrag(); tab[nr].t = typ; tab[nr].e = holz; tab[nr].h = ast; // sonst in tab eintragen nr++; holz = *--stck0; // nächstes tab-element und vorgänger zurückholen. if (holz) { if (nr != LZAHL) { tab[nr].v = s[holz].v; // verb.zeichen des b-punkts zuordnen. typ = s[holz].t2; // rechter teil hat typ ast = holz; holz = s[holz].sr; // und inhalt als neuer b-punkt. lrflag = 'r'; goto loop; } while (cstck0 > (cstack + 2)) abtrag(); } tab[0].l = *--cstck0; } // setzt holz & typ voraus /* void Baum::krone(int root1) { typ = s[root1].t1; //1 holz = s[root1].sl; //2 if (s[root1].v != '"' && tabfall(holz, typ)) //3 { tabl[0].t = typ; tabl[0].e = holz; tabl[0].h = root1; } //4 else { nr = 0; tab = tabl; *stck0++ = 0; //5 astkrone(); } typ = s[root1].t2; //6 holz = s[root1].sr; if (s[root1].v != '"' && tabfall(holz, typ)) //7 { tabr[0].t = typ; tabr[0].e = holz; tabr[0].h = root1; } //8 else { nr = 0; tab = tabr; *stck0++ = 0; //9 astkrone(); } } //1 linker teil hat typ //2 und inhalt als neuer b-punkt. //3 wenn links tab-element //4 in tabl eintragen //5 anfang und ende. //6 rechter teil hat typ //7 wenn rechts tab-element //8 in tabr eintragen //9 anfang und ende. void Baum::astkrone() { char lrflag = 'l'; cstck0 = cstack; loop: if (! tabfall(holz, typ)) //1 { if (lrflag == 'l') *cstck0++ = 127; //2 *stck0++ = holz; //3 typ = s[holz].t1; //4 ast = holz; holz = s[holz].sl; } //5 *cstck0++ = nr; *cstck0++ = 0; if (lrflag == 'r') abtrag(); tab[nr].t = typ; tab[nr].e = holz; tab[nr].h = ast; //6 nr++; holz = *--stck0; //7 if (holz) { if (nr != LZAHL) { tab[nr].v = s[holz].v; //8 typ = s[holz].t2; //9 ast = holz; holz = s[holz].sr; //10 lrflag = 'r'; goto loop; } while (cstck0 > (cstack + 2)) abtrag(); } tab[0].l = *--cstck0; } // setzt holz & typ voraus //1 wenn kein tab-element //2 tiefen.zähler //3 b-punkt merken //4 linker teil hat typ //5 und inhalt als neuer b-punkt. //6 sonst in tab eintragen //7 nächstes tab-element und vorgänger zurückholen. //8 verb.zeichen des b-punkts zuordnen. //9 rechter teil hat typ //10 und inhalt als neuer b-punkt. */ char Baum::tabfall(int kNr, char& t) { if (t != 's') return 1; if (s[kNr].t1 != 's' && s[kNr].t2 != 's') return 1; if (labTest(kNr)) { t = 'l'; return 1; } return 0; } // wenn kein satz o. links u. rechts kein satz dann tab-element. // wenn labelflagge gesetzt u. labelfall dann typ : 'l' u. tab-element. void Baum::abtrag() { char a, b, c; loop: c = *--cstck0; b = *--cstck0; a = *--cstck0; if (a != 127) { if (a < c) a = c; a++; tab[b].l = a; *cstck0++ = a; goto loop; } *cstck0++ = b; //1 *cstck0++ = c; } //2 //1 letztes \-element //2 gesamt-tiefe //************************************************************* void Baum::graphldruck() { int line; tab = tabl; line = 0; while (tab[line].t && line < LZAHL ) { typ = tab[line].t; bload(btextl[line], line); line++; } if (line < LZAHL) btextl[line][0] = 0; } void Baum::bload(char* txtb, int line) { int n; char* txta; char c; double *dd; c = tab[line].v; n = tab[line].e; if (! c) c = ' '; *txtb++ = c; *txtb++ = ' '; if (typ == 's') { if (s[n].t1 == 'w' || s[n].t1 == '?' || s[n].t1 == 't') { txta = w[s[n].sl].st; do { *txtb++ = *txta++; } while (*txta); } else if (s[n].t1 == 'ß') { txta = w[cmdStart_ + s[n].sl + 1].st; do { *txtb++ = *txta++; } while (*txta); } else { sprintf(tex, "%d", s[n].sl); txta = tex; *txtb++ = s[n].t1; if (s[n].t1 != ':') *txtb++ = ':'; do { *txtb++ = *txta++; } while (*txta); } *txtb++ = ' '; *txtb++ = s[n].v; *txtb++ = ' '; if (s[n].t2 == 'w' || s[n].t2 == '?' || s[n].t2 == 't') { txta = w[s[n].sr].st; do { *txtb++ = *txta++; } while (*txta); } else if (s[n].t2 == 'ß') { txta = w[cmdStart_ + s[n].sr + 1].st; do { *txtb++ = *txta++; } while (*txta); } else { sprintf(tex, "%d", s[n].sr); txta = tex; *txtb++ = s[n].t2; if (s[n].t2 != ':') *txtb++ = ':'; do { *txtb++ = *txta++; } while (*txta); } *txtb = 0; } else if (typ == 'w' || typ == '?') { txta = w[n].st; strcpy(txtb, txta); } else if (typ == '@') { rzi = s[n].b; n = r[rzi].zS; strcpy(tex, ":"); strcat(tex, w[s[n].sl].st); strcpy(txtb, tex); } else if (typ == 't') { strcpy(tex, "\""); strcat(tex, w[n].st); strcpy(txtb, tex); } else if (typ == '\'' || typ == 'c') { if (n < 0) n += 256; strcpy(tex, "\'"); strcat(tex, w[n].st); strcat(tex, "\'"); strcpy(txtb, tex); } else if (typ == 'l') { txta = w[s[n].sl].st; do { *txtb++ = *txta++; } while (*txta); *txtb = 0; } else if (typ == 'd' || typ == 'f') { dd = (double*) n; sprintf(txtb, "%f", *dd); } else { if (typ == ':') sprintf(txtb, "%c%d", typ, n); else if (typ == 'ß') strcpy(txtb, w[cmdStart_ + n + 1].st); else sprintf(txtb, "%c:%d", typ, n); } } void Baum::graphrdruck() { int line; tab = tabr; line = 0; while (tab[line].t && line < LZAHL ) { typ = tab[line].t; bload(btextr[line], line); line++; } if (line < LZAHL) btextr[line][0] = 0; } void Baum::tiefe(char ty, int nr, int x, int gx) { int k; char t; //1 t = char((gx - x) / 7); if (t) --t; while (nr < LZAHL && t >= tab[nr].l) nr++; //2 if (labTest(root)) root = s[root].sr; if (! ty) { typ = s[root].t1; holz = s[root].sl; } else { typ = s[root].t2; holz = s[root].sr; } rekFlag = 0; rekI = nr; k = holz; tabNr(typ, holz); } //1 t : spalten_nr //2 nr : zeilen_nr void Baum::tabNr(char t, int k) { if (! rekFlag) { if (tabfall(k, t)) { if (rekI) --rekI; return; } tabNr(s[k].t1, s[k].sl); if (! rekI) { rekI = 1; rekFlag = 1; holz = k; } if (! rekFlag) tabNr(s[k].t2, s[k].sr); } }


back to baumC
There is no comment on this page. [Display comments/form]