BLUESTACK.ORG : datei2

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are 38.103.63.60
// datei-name: baum.C #include "baum.h" extern Baum* baum; extern KApplication* app; extern BMes* bMes; extern Fund* fundList; extern Dump* dump; extern InputDialog* eDialog; extern EditDialog* editDialog; extern Output* outputWindow; extern char pfad[512]; //app->exec() -> void Baum::paintEvent(QPaintEvent* e_) { int i; QPainter p; QPointArray arrow(4); p.begin(&buffer); p.setBrush(QColor(250, 250, 200)); // gelb p.drawRect(0, 0, BILDBR, LY2); if (root && querzBaum()) p.setBrush(QColor(255, 183, 115)); // helleres braun else p.setBrush(QColor(165,192,162)); // oliv p.drawRect(0, LY2, BILDBR, 73); // p.setPen//(QColor(0, 79, 0)); // p.drawLine(0, LY2, BILDBR, LY2); p.setBrush(QColor(167, 255, 137)); // helleres grün p.drawRect(0, CLPY, BILDBR, CLPH); // clpbox p.setBrush(Qt::yellow); if (root) { rzLabCheck(); if (rFlag) { switch (rFlag) { case 1: p.setBrush(Qt::cyan); break; case 2: p.setBrush(Qt::red); break; case 3: p.setBrush(Qt::magenta); } p.drawRect(RZX, BOXY, BBR+24, BOXH); p.setBrush(Qt::yellow); } else p.drawRect(RZX, BOXY, BBR + 24, BOXH); // rzbox p.drawRect(BOXX, BOXY, BOXBR, BOXH); // box if (! lcmod) p.setBrush(QColor(250, 250, 200)); // helles gelb: F2-toggle ausführen p.drawRect(1, BOXY, BBR, BOXH); // lcbox p.setBrush(Qt::blue); arrow.setPoint(0, BOXX + 2, BOXY + BOXH + 1); arrow.setPoint(1, BOXX + BOXBR - 2, BOXY + BOXH + 1); if (s[root].b && zweig == '\\') { if (lcTest()) p.setBrush(QColor(255, 50, 0)); //(248, 174, 167)); // helles braun arrow.setPoint(2, BOXX + BOXBR + BOXBR/2 - 26, BOXY + BOXH + 11); arrow.setPoint(3, BOXX + BOXBR/2 - 1, BOXY + BOXH + 11); p.drawPolygon(arrow, false , 0, 4); } if (s[root].b && zweig == '/') { if (lcTest()) p.setBrush(QColor(255, 50, 0)); //(248, 174, 167)); // helles braun arrow.setPoint(2, BOXX + BOXBR/2 - 1, BOXY + BOXH + 11); arrow.setPoint(3, BOXX - BOXBR/2 + 25, BOXY + BOXH + 11); p.drawPolygon(arrow, false , 0, 4); } p.setBrush(QColor(16,16,16)); // schwarz p.drawRect(BILDBR/8, CLPY - 4, BILDBR/8, 4); p.drawRect(3 * (BILDBR / 8), CLPY - 4, BILDBR/8 , 4); p.drawRect(5 * (BILDBR / 8), CLPY - 4, BILDBR/8 , 4); p.drawRect(7 * (BILDBR / 8), CLPY - 4, BILDBR/8 + 8 , 4); p.setFont(QFont("courier", 12, QFont::Bold)); drawText(&p); p.setPen(Qt::red); tab = tabl; drawTab(&p, LGX); tab = tabr; drawTab(&p, RGX); freeFlag = 1; if (freeFlag) { p.setPen(Qt::red); p.drawText(BILDBR/2 - 4, BOXY + BOXH - 1, 20, 20, Qt::AlignLeft,"*"); } p.setPen(Qt::blue); p.drawText(BILDM - 4, 30, LH, BOXH, Qt::AlignLeft, vbox); p.drawText(BOXX + 4, BOXY, BOXBR - 4, BOXH, Qt::AlignLeft, box); p.drawText(5, BOXY, BBR - 4, BOXH, Qt::AlignLeft, lcbox); p.drawText(RZX + 4, BOXY, BBR + 16, BOXH, Qt::AlignLeft, rzbox); for(i = 0; i < 8; ++i) { p.drawText(5 + i * BILDBR/8, CLPY + 2, BILDBR/8 - 10, LH, Qt::AlignLeft, clipString(i, clip, clipTyp, &p)); p.drawText(5 + i * BILDBR/8, CLPY + LH + 2, BILDBR/8 - 10, LH, Qt::AlignLeft, clipString(i, clap, clapTyp, &p)); } p.setPen(Qt::white); if (rTyp == 'w' && w[ root].st) { kett1 = w[ root].st; if (strstr(kett1,".gif") || strstr(kett1,".jpg")) { strcpy(tex, pfad); strcat(tex,"bilder/"); strcat(tex, kett1); if (pixmap.load(tex)) // load and draw image { p.drawPixmap((BILDBR - pixmap.width()) / 2, (LY2 - pixmap.height()) / 2, pixmap); } } } else { p.setPen(QColor(0, 79, 0)); // p.setPen(SolidLine); p.drawLine(BILDM, LH + 30, BILDM, LY2); } } bitBlt(this, 0, 0, &buffer); p.end(); } void Baum::drawTab(QPainter* p, int x2) { char i; int x1, y1, y2; for(i = 0; i < LZAHL; i++) { x1 = tab[i].l; if (x1) { x1 = x2 - x1 * 7; y2 = i * LH + 45; if (y2 >= LY2 - LH/2) break; if (x2 == RGX) if (x1 <= BILDM) x1 = BILDM; p->drawLine(x1, y2, x2, y2); if (i) { y1 = graphtab(i); if (y1) { y1 = y2 - y1 * LH; if (x1 == BILDM) continue; p->drawLine(x1, y1 , x1, y2); } } } } } int Baum::graphtab(int n) { char nk = tab[n].l; int m = n - 1; while (nk > tab[m].l) m--; return n - m; } void Baum::editor1show() { bMes->show(); bMes->setFocus(); bmod = 1; } void Baum::editor1hide() { bMes->hide(); setFocus(); } /* void Baum::editorAppend(char* text) { bMes->append(text); } */ void Baum::ifFlag() { if (mesFlag) { switch (mesFlag) { case 1: case 43: if (inp == 2) { strcpy(alt, edbox); mes = 4; } else { strcpy(neu, edbox); stckrset(); if (mesFlag == 1) CntrlA(root, rTyp, loc); else if (mesFlag == 43) AltA(); } inp--; break; case 5: if (*stck4 == 1) { *cstck4++ = *edbox; stck4++; } else { strcpy(tex, edbox); tScan(tex); *stck4++ = root; } if (*stck4) { mes = 17; root = Root; rTyp = 's'; } else { CntrlE2(); mesFlag = 0; } rpFlag = 1; bildneu(); return; case 82: if (inp == 1) { strcpy(alt, edbox); ShiftF2(); inp--; } } if (! inp) mesFlag = 0; } else lastInput(1); rpFlag = 1; bildneu(); } // setzt mesFlag, inp alt, neu, edbox, stck4, cstck4, tex, root. Root, rTyp, mes u. rpFlag voraus void Baum::keyCase(int Key, int Ascii, int State) { if (State == Qt::ControlButton) { switch(Key) { //case Qt::Key_1: stckrset(); banking(); bildneu(); break; case Qt::Key_2: stckrset(); lastEntry(); bildneu(); break; case Qt::Key_G: stckrset(); CntrlG(); bildneu(); break; case Qt::Key_adiaeresis: CntrlAe(); bildneu(); break; case Qt::Key_odiaeresis: //:65535 CntrlOe(); bildneu(); break; } } else if (State == Qt::AltButton) //1 { if (Key == Qt::Key_U) { stckrset(); AltU(root); } else if (Key == Qt::Key_C) { stckrset(); toLower(); bildneu(); } } else { switch (Key) //2 { case Qt::Key_Left: buttonLinks(); break; case Qt::Key_Right: buttonRechts(); break; case Qt::Key_Down: buttonTief(); break; case Qt::Key_Up: buttonHoch(); break; case Qt::Key_F10: F10(); bildneu(); break; case Qt::Key_F11: if (rTyp == 's') F11(root); else mes = 2; bildneu(); break; case Qt::Key_F12: F12(); bildneu(); break; case Qt::Key_Prior: bLinks(); bildneu(); break; case Qt::Key_Next: bRechts(); bildneu(); break; case Qt::Key_Home: rzLinks(root, rTyp); bildneu(); break; case Qt::Key_End: rzRechts(root, rTyp); bildneu(); break; default: if (Ascii) { bC[0] = char(Ascii); bC[1] = 0; bInp->setText(bC); bInp->setFocus(); } } } } //3 //1 ALT ABCDEGIMNOPRVZ //2 gross-/kleinschreibung und sondertasten (incl. SHFT) ohne CTRL/ALTER //3 focus auf editfeld void Baum::toLower() { QString datei; sync(); datei = fileDialog->getOpenFileName(pfad, "*", this); if (datei.length()) { strcpy(edbox, datei); baumDat = new char[BDAT]; stckrset(); if (rb()) { baumdat = baumDat; while (*baumdat) { *baumdat = tolower(*baumdat); ++baumdat; } wb(); } else statusbar->message("es konnten keine daten geladen werden!"); delete [] baumDat; } mes = 1; edbox[0] = 0; mesFlag = 0; } void Baum::drawText(QPainter* p) { int i; p->setFont(QFont("courier", 12, QFont::Bold)); p->setPen(QColor(0, 79, 0)); for (i = 0; i < LZAHL; i++) { if (btextl[i][0]) { if (tabl[i].t == 'l') p->setPen(Qt::blue); else if (tabl[i].t != 's' && tabl[i].t != 'w' && tabl[i].t != '?') p->setPen(Qt::red); if (35 + i * LH < LY2 - LH) { p->drawText(TLX, 35 + i * LH, BILDM - 102, 20, Qt::AlignLeft, btextl[i], -1); p->setPen(QColor(0, 79, 0)); } else break; } else break; } p->setPen(QColor(0, 79, 0)); for (i = 0; i < LZAHL; i++) { if (btextr[i][0]) { if (tabr[i].t == 'l') p->setPen(Qt::blue); else if (tabr[i].t != 's' && tabr[i].t != 'w' && tabr[i].t != '?') p->setPen(Qt::red); if (35 + i * LH < LY2 - LH) { p->drawText(TRX, 35 + i * LH, BILDM - 102, 20, Qt::AlignLeft, btextr[i], -1); p->setPen(QColor(0, 79, 0)); } else break; } else break; } } void Baum::mes0() { int a, b ,c; switch (mes) { case 1: sprintf(mespos, "okay sMax: %d", sMax); break; case 2: strcpy(mespos, "geht leider nicht!"); break; case 3: strcpy(mespos, "eingabe findet kein passendes muster"); break; case 4: strcpy(mespos, "neu:"); break; case 5: sprintf(mespos, "baum_fehler"); break; case 6: txt2 = ascii + 512; for (int i = 0; i < 80; i++) { mespos[i] = txt2[i]; if (! txt2[i]) mespos[i] = ' '; } break; // F5 case 8: strcpy(mespos, "baum zu groß, max. 1000 worte editierbar"); break; case 9: strcpy(mespos, "verknüpfung (name : muster)"); break; case 10: a = int(ENDC - (asci0 - ascii)); b = ENDW - wort0; c = ENDS - satz0; sprintf(mespos, "freie zeichen:%7u freie worte:%7u freie sätze:%7u", a, b, c); break; case 11: strcpy(mespos, "(CntrlJ a CntrlH h knot) zurückgesetzt!"); break; case 13: strcpy(mespos, "abbruch, seiteneffekt s.o. !"); break; case 14: strcpy(mespos, "mehrfachlabel!"); break; case 15: strcpy(mespos, "gespeichert!"); break; case 17: if (*(stck4) == 1) strcpy(mespos, "verb"); else strcpy(mespos, w[*(stck4)].st + 1); break; default: return; } statusbar->message(mespos); } void Baum::keyPressEvent(QKeyEvent* e) { if (e->key() == Qt::Key_Control || e->key() == Qt::Key_Alt || e->key() == Qt::Key_Shift) return; if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { if (edFlag) edFlag = 2; strcpy(edbox, bInp->text()); if (dbgFlag && *edbox == 'x') { dbgFlag = 0; *edbox = 0; deleteX(); } ifFlag(); if (! mes3Flag) bInp->setText(0); else mes3Flag = 0; } else { keyCase(e->key(), e->ascii(), e->state()); if (mes) mes = 0; else statusbar->message(""); } } char Baum::querzBaum() { int rzi, rzz, rzSatz; char zzFlag; zzFlag = 0; comboTief->clear(); if (rTyp == 's') rzi = rzz = s[root].b; else rzi = rzz = w[root].b; if (rTyp == 's') rSatz = s[root].h; else rSatz = histor; if (! rSatz) { loop: //1 while (rzi) { rSatz = r[rzi].zS; if (s[rSatz].lc == loc) { if (s[rSatz].v == '"') { txt0 = w[s[rSatz].sl].st; sprintf(tex,"%s %d", txt0, rSatz); comboTief->insertItem(tex); } } rzi = s[rSatz].b; rSatz = r[rzi].zS; } } else { while (rSatz) { if (s[rSatz].lc == loc) { if (s[rSatz].v == '"') { txt0 = w[s[rSatz].sl].st; sprintf(tex,"%s %d", txt0, rSatz); comboTief->insertItem(tex); } } rzSatz = rSatz; rSatz = s[rSatz].h; } rSatz = rzSatz; rzi = s[rSatz].b; goto loop; } rzi = rzz; lLoop: //2 if (rzi) { rSatz = r[rzi].zS; if (s[rSatz].lc == loc) { rzz = rzi; zzLoop: //3 rzz = r[rzz].zz; if (rzz) { rzSatz = r[rzz].zS; if (s[rzSatz].lc == loc) zzFlag = 1; else goto zzLoop; } else { rzi = s[rSatz].b; goto lLoop; } } rzi = r[rzi].zz; goto lLoop; } return zzFlag; } //1: lädt comboTief mit label-history //2: lädt comboLBox rückzeigersätze char Baum::lcTest() { int rzi; if (rTyp == 's') { rzi = s[root].b; if (rzi) { rSatz = r[rzi].zS; if (loc != s[rSatz].lc) return 1; } } return 0; } char* Baum::clipString(int i, int* clp, char* clpTyp, QPainter* p) { p->setPen(QColor(0, 79, 0)); if (root && (rTyp == 'w' || s[root].v == '"')) comboload(); if (*(clpTyp + i) == 'w') return w[*(clp + i)].st; if (*(clpTyp + i) == 's') { if (labTest(*(clp + i))) { p->setPen(QColor(0, 0, 255)); return w[s[*(clp + i)].sl].st; } else { sprintf(tex, "%d", *(clp + i)); strcpy(kette, "*"); strcat(kette, tex); return kette; } } return NULL; } void Baum::mousePressEvent(QMouseEvent* e) { int xp, yp, clpnr, e_nr, i; //1 char clipFlag; QPoint clickedPos = e->pos(); //2 xp = clickedPos.x(); yp = clickedPos.y(); if (yp > 28 && yp < LY2) //3 { e_nr = (yp - 28) / LH; setFocus(); if (root) { if (xp < BILDM) //4 { tab = tabl; holz = tab[e_nr].e; typ = tab[e_nr].t; if (xp < LGX + 7) tiefe(0, e_nr, xp, LGX); } else //5 { tab = tabr; holz = tab[e_nr].e; typ = tab[e_nr].t; if (xp < RGX + 7) tiefe(1, e_nr, xp, RGX); } if (holz) { if (e->button() == LeftButton || e->button() == MidButton) // linke Maustaste { if (typ == 'l') typ = 's'; ast = 0; rI1 = holz; rC1 = typ; pfadH(root); //6 if (e->button() == LeftButton) { rTyp = typ; root = holz; } else { if (rI1 == clip[7] && rC1 == clipTyp[7]) { clip[7] = 0; clipTyp[7] = 0; clap[7] = 0; clapTyp[7] = 0; strcpy(edbox, ""); bInp->setText(edbox); edFlag = 0; } else { clip[7] = rI1; clipTyp[7] = rC1; clap[7] = tab[e_nr].h; clapTyp[7] = 's'; mausEdit(); } } } else if (e->button() == RightButton) //7 { if (typ == 'l') typ = 's'; clipFlag = 0; //8 for (i = 0; i <=7; i++) { if (holz == clip[i] && typ == clipTyp[i]) { clip[i] = clip[0]; clipTyp[i] = clipTyp[0]; clipFlag = 1; break;} } if (!clipFlag) { for (i = 7; i > 0; i--) { clip[i] = clip[i - 1]; clipTyp[i] = clipTyp[i - 1]; } } clip[0] = holz; clipTyp[0] = typ; } } } else return; } else if (yp >= BOXY && yp <= BOXY + BOXH) { if (xp >= BOXX && xp <= BOXX + BOXBR) { if (e->button() == LeftButton && rTyp == 's') CntrlK(root); else F9(); } if (xp < BBR + 1 ) F2(); } else if (xp >= BOXX && xp <= BOXX + BOXBR && yp >= BOXY + BOXH + 1 && yp <= BOXY + BOXH + 11) buttonTief(); else if (yp < CLPY + CLPH) //9 { clpnr = xp / (BILDBR / 8); if (yp <= (CLPY + CLPH/2)) { if (clip[clpnr]) //10 { rTyp = clipTyp[clpnr]; root = clip[clpnr]; } } else if (clap[clpnr]) //11 { rTyp = clapTyp[clpnr]; root = clap[clpnr]; } } else return; bildneu(); } //1 e_nr : zeilen_nr. //2 setzt QPoint clickedPos o (xp a yp) //3 baum_fenster //4 linkes fenster //5 rechtes fenster //6 verändert ast //7 rechte Maustaste //8 doppelte Einträge vermeiden //9 clip_clap //10 clip //11 clap void Baum::mausEdit() { char tempstr[2]; typ = clipTyp[7]; if (typ == 'w') { worti = clip[7]; strcpy(edbox, w[worti].st); } else if (typ == 's') { satzi = clip[7]; if (s[satzi].t1 == 'w' && s[satzi].t2 == 'w') { worti = s[satzi].sl; strcpy(edbox, w[worti].st); strcat(edbox, " "); tempstr[0] = s[satzi].v; tempstr[1] = 0; strcat(edbox, tempstr); strcat(edbox, " "); worti = s[satzi].sr; strcat(edbox, w[worti].st); } else if (s[satzi].t1 == 'w') { worti = s[satzi].sl; strcpy(edbox, w[worti].st); } else if (s[satzi].t2 == 'w') { worti = s[satzi].sr; strcpy(edbox, w[worti].st); } } clap[6] = root; clapTyp[6] = 's'; bInp->setText(edbox); bInp->setFocus(); edFlag = 1;} void Baum::resizeEvent(QResizeEvent* event) { setMinimumSize(800, 703); BILDBR = width(); BILDH = height(); BILDM = BILDBR / 2; LY2 = BILDH - 168; BOXX = BILDM - 72; BOXY = BILDH - 158; RBOXX = BILDBR - 266; RZX = BILDBR - 63; CLPY = BILDH - 95; RGX = BILDM + 92; EDY = BILDH - 55; TRX = BILDM + 100; linksButton->setGeometry(BILDM - 195, BILDH - 158, 80, 20); rechtsButton->setGeometry(BILDM + 115, BILDH - 158, 80, 20); blinksButton->setGeometry(BILDM - 255, BILDH - 158, 50, 20); brechtsButton->setGeometry(BILDM + 205, BILDH - 158, 50, 20); rzlinksButton->setGeometry(BILDM - 305, BILDH - 158, 40, 20); rzrechtsButton->setGeometry(BILDM + 265, BILDH - 158, 40, 20); labelButton->setGeometry(BILDM - 15, BILDH - 181, 30, 20); comboLBox->setGeometry(20, BILDH - 131, 240, 24); comboRBox->setGeometry(BILDBR - 260, BILDH - 131, 240, 24); comboTief->setGeometry(BILDM - 120, BILDH - 125, 240, 24); bMes->move(10, 35); bMes->resize(BILDBR - 20, BILDH - 223); bInp->move(0, EDY); bInp->resize(BILDBR, 32); buffer.resize(event->size()); } void Baum::CntrlH1() { stckrset(); CntrlH(); bildneu(); } void Baum::CntrlJ1() { stckrset(); CntrlJ(); bildneu(); } void Baum::dateiLaden() { QString datei; sync(); datei = fileDialog->getOpenFileName(pfad, "*", this); if (datei.length()) { strcpy(edbox, datei); ifRb(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::dateiSpeichern() { QString datei; sync(); datei = fileDialog->getSaveFileName(pfad, "*", this); if (datei.length()) { strcpy(edbox, datei); ifWb(); } if (mes != 15) statusbar->message("dateiSpeichern: dateiName?"); bildneu(); } void Baum::ifWb() { char c, d; int i; if (! edbox[0]) { strcpy(edbox, "z.k"); if (rTyp == 's') if (labTest(root)) { kett1 = w[s[root].sl].st; strcpy(edbox, kett1); } } baumDat = new char[BDAT]; stckrset(); i = strlen(edbox); c = edbox[i - 1]; d = edbox[i - 2]; if (d == '.' && c == 'k' ) { S0(); wb(); mesFlag = 0; mes = 15; } else { if (d == '/' && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z' ))) { i = int(c); if (vLSatz0(i)) { delete [] baumDat; return; } } CntrlS(); if (wb()) { for (i = 0; i <= wort0; i++) w[i].st += int(ascii); // relocieren der textzeiger mesFlag = 0; mes = 15; } } delete [] baumDat; } int Baum::wb() { strcpy(tex, pfad); if (*edbox != '/') strcat(tex, edbox); else strcpy(tex, edbox); stream = fopen(tex, "wb"); if (! stream) return 0; fwrite (baumDat, 1, datLen, stream); fclose(stream); sync(); return 1; } void Baum::baumMerge() { QString datei; stckrset(); sync(); datei = fileDialog->getOpenFileName(pfad, "*.a", this); if (datei.length()) { strcpy(edbox, datei); if (strstr(edbox,".a")) { edbox[strlen(edbox)-2] = 0; } F3(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::splitLaden() { QString datei; sync(); datei = fileDialog->getOpenFileName(pfad, "*.a", this); if (datei.length()) { strcpy(edbox, datei); if (strstr(edbox,".a")) { edbox[strlen(edbox)-2] = 0; } F8(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::splitSpeichern() { QString datei; sync(); datei = fileDialog->getSaveFileName(pfad, "*.a", this); if (datei.length()) { strcpy(edbox, datei); if (strstr(edbox,".a")) { edbox[strlen(edbox)-2] = 0; } // entfernt endung .a F4(); mes = 15; } else statusbar->message("splitSpeichern: dateiName?"); bildneu(); } void Baum::dbfImport() { QString datei; sync(); datei = fileDialog->getOpenFileName(pfad, "*.dbf", this); if (datei.length()) { strcpy(edbox, datei); baumDat = new char[BDAT]; stckrset(); if (! rb()) mes = 2; else dbfBau(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::csvImport() { QString datei; sync(); datei = fileDialog->getOpenFileName(pfad, "*.csv", this); if (datei.length()) { strcpy(edbox, datei); csvBau(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::labelSetzen() { QString z; bool ok; ok = false; z = QInputDialog::getText("label:", "neuen label eingeben:", QLineEdit::Normal, "remove label", &ok, this); if (ok) { strcpy (edbox, z); if (rTyp == 's') { if (strcmp(edbox, "remove label") == 0) edbox[0] = 0; root = CntrlL(root, edbox); bildneu(); } else mes = 2; } } /* void Baum::programmEntfernen() { F11(); bildneu(); } */ void Baum::steuerzeichenSetzen() { if (rTyp == 's') { CntrlV(root); bildneu(); } else mes = 2; } void Baum::steuerzeichenAst() { if (rTyp == 's') { AltV(root); bildneu(); } else mes = 2; } void Baum::baumDrehen() { if (rTyp == 's') { CntrlU(root); bildneu(); } else mes = 2; } void Baum::teilstringErsetzen() { mesFlag = 1; inp = 2; statusbar->message("alt:"); repaint(0, 0, BILDBR, CLPY + CLPH, FALSE); } void Baum::kopierenErsetzen() { mesFlag = 43; inp = 2; statusbar->message("alt:"); repaint(0, 0, BILDBR, CLPY + CLPH, FALSE); } void Baum::locModus() { F2(); bildneu(); } void Baum::locSetzen() { mesFlag = 82; inp = 1; statusbar->message("lokalität:"); repaint(0, 0, BILDBR, CLPY + CLPH, FALSE); } void Baum::rootClipboard() { F9(); repaint(0, 0, BILDBR, CLPY + CLPH, FALSE); } void Baum::shiftClipboard() { ShiftF9(); repaint(0, 0, BILDBR, CLPY + CLPH, FALSE); } void Baum::baumDump() { lflag = 0; bildneu(); if (dump->isVisible()) dump->hide(); else dump->show(); setFocus(); } void Baum::baumAusgleichen() { stckrset(); if (rTyp == 's') root = CntrlB(root); else mes = 2; bildneu(); } void Baum::baumAusgleichR() { stckrset(); if (rTyp == 's') { AltB(root, '.'); root = Ast; } else mes = 2; bildneu(); } void Baum::baumSortieren() { stckrset(); if (rTyp == 's') CntrlI(root); else mes = 2; bildneu(); } void Baum::wertSortieren() { stckrset(); if (rTyp == 's') { sortZ = 1; CntrlI(root); sortZ = 0; } else mes = 2; bildneu(); } void Baum::freieEingabe() { if (freeFlag) { freeFlag = 0; struktur->setItemChecked(freeInput, FALSE); } else { freeFlag = 1; struktur->setItemChecked(freeInput, TRUE); } repaint(); } void Baum::baumKopie() { stckrset(); if (rTyp == 's') { root = CntrlW(root); } else mes = 2; bildneu(); } void Baum::teilBaum() { stckrset(); if (rTyp == 's') { CntrlK(root); } else mes = 2; bildneu(); } void Baum::baumReorg() { stckrset(); F7(); F5(); bildneu(); } void Baum::clearBaum() { stckrset(); F6(root, rTyp); bildneu(); } void Baum::papierKorb() { stckrset(); F7(); bildneu(); } void Baum::labelMatch() { stckrset(); CntrlZ(); bildneu(); } void Baum::astMatch() { stckrset(); AltZ(); bildneu(); } void Baum::setSignal(int k) { if (fifoNr == FIFO) fifoNr = 0; if (fifo[fifoNr]) cout << "knoten " << k << " verworfen" << endl; //1 else { cout << "knoten " << k << " gesendet" << endl; fifo[fifoNr] = k; if (! fifoTop) fifoTop = fifoNr; ++fifoNr; signalSemaphor = 1; } } //2 // signal handler sendet knotenSignal //1 fifo voll //2 setzt globalen semaphor für runstack-Schleife void Baum::addSlot(int k) { if (slotNr < SLOTS) { ++slotNr; slotList[slotNr] = k; } } // fügt funktionsknoten aus shadow in empfänger-slot-liste für signale ein // im shadow werden eingebundene funktionen bei addSlot und delSlot in konstanten von typ ':' transformiert // diese funktionsknoten werden von signalen aufgerufen // dort steht ein baumC-programm das den gesandten signalbaum auswertet und // per befehl signalSuccess, die brauchbarkeit des signalbaum meldet // signalSuccess steht immer vor einem abschließenden return void Baum::delSlot(int k) { int j; j = 0; while (j < slotNr && k != slotList[j]) j++; if ( j < slotNr) { while ( j < slotNr) { slotList[j] = slotList[j+1]; ++j; } --slotNr; } } // entfernt funktionsknoten aus empfänger-slot-liste // und schrumpft sloteinträge void Baum::signalSuccess(char status) { signalCode = status; } // damit sendet ein empfänger-slot, ob der signalbaum von ihm verwendet wurde // signalcode ist globale status-variable // status = 0 bedeutet (mit dem signalbaum kann ich nichts anfangen) // status = 1 bedeutet (ich habe signalbaum verwendet, zusätzlich an andere slots weiterleiten) // status = 2 bedeutet (ich habe signalbaum verwendet, nicht an andere slots weiterleiten) // status = 3 bedeutet (signal war für mich, aber der inhalt war nicht korrekt) void Baum::eingabeMaske() { int i; maskFlag = 0; AltE(); if (iM > 0) //1 { eDialog->activ_line = 0; if (iM >= 15) iM = 15; for(i = 0; i < iM; i++) { eDialog->line[i]->setText(0); } eDialog->resize(725, (iM + 2) * 30); eDialog->okay->setGeometry(262, 10 + (iM + 1) * 30 - 20, 200, 30); eDialog->show(); } } // iM > 0, es liegen eingabefelder vor void Baum::eingabeMaskeReplace() { int i; maskFlag = 1; AltP(); if (!mes) { eDialog->activ_line = 0; if (iM >= 15) iM = 15; for(i = 0; i < iM; i++) { eDialog->line[i]->setText(w[mintG[i]].st); } eDialog->resize(725, (iM + 2) * 30); eDialog->okay->setGeometry(262, 10 + (iM + 1) * 30 - 20, 200, 30); eDialog->show(); } } void Baum::baumE() { if (rTyp == 's' && root) { editDialog->comboEBox->clear(); CntrlE(); editDialog->line->setFocus(); editDialog->show(); return; } bildneu(); } void Baum::shadowEdit() { int k; loc = CPYLOC; k = copyShadow(root); //1 nr = 0; ERek1(k); loc = STDLOC; root = KRek(k); clrShadow(k); } // erzeugt neuen baum aus altem Baum //1 baum clonen nach loc = CPYLCOC int Baum::copyShadow(int i) { int sl, sr; if (s[i].t1 != 's') sl = s[i].sl; else sl = copyShadow(s[i].sl); if (s[i].t2 != 's') sr = s[i].sr; else sr = copyShadow(s[i].sr); if (loc == CPYLOC) return SBau(sl, sr, s[i].t1, s[i].t2, s[i].v); else return sBau(sl, sr, s[i].t1, s[i].t2, s[i].v); } // erzeugt zu einem gegebenen baum einen shadow_baum (rekursiv) u. gibt dessen wurzel zurück void Baum::clrShadow(int i) { int sl, sr; char t1, t2; if (! s[i].v) return; sl = s[i].sl; sr = s[i].sr; t1 = s[i].t1; t2 = s[i].t2; if (! s[i].b) s[i] = s[ENDS]; //1 if (t1 == 's') clrShadow(sl); if (t2 == 's') clrShadow(sr); } // setzt i : satz voraus //1: kopiert leeren satzblock void Baum::labelGroup() { if (rTyp == 's') { worti = clip[0]; if (worti && clipTyp[0] == 'w') { ast = 0; AltG(root); root = sBau(worti, ast, 'w', typ, '"'); rTyp = 's'; bildneu(); } } } void Baum::baumMuster() { if (Muster()) { stckrset(); CntrlM(); bildneu(); } } char Baum::Muster() { QString z; bool ok; ok = false; z = QInputDialog::getText("muster:", "¹n: wort, ²n: satz, ³n: wort|satz", QLineEdit::Normal, "muster | muster·name", &ok, this); if (ok) { strcpy (edbox, z); if (strcmp (edbox, "muster | muster·name") == 0) { bildneu(); return 0; } } return 1; } void Baum::baumTransform() { if (Muster()) { stckrset(); AltM(); bildneu(); } } void Baum::rechtsTransform() { stckrset(); CntrlN(); bildneu(); } void Baum::linksTransform() { stckrset(); AltN(); bildneu(); } void Baum::compProg() { stckrset(); AltR(); bildneu(); } void Baum::progStart() { stckrset(); CntrlR(); bildneu(); } void Baum::progDbg() { stckrset(); CntrlX(); bildneu(); } void Baum::cBaum() { stckrset(); Cntrl0(); bildneu(); } void Baum::editorC() { stckrset(); Alt0(); bmod = 0; editor1hide(); bildneu(); } void Baum::functionTree() { stckrset(); CntrlP(); bildneu(); } void Baum::datumHolen() { CntrlD(); bildneu(); } void Baum::zeitHolen() { CntrlT(); bildneu(); } void Baum::datumEinfuegen() { stckrset(); AltD(); bildneu(); } void Baum::datumsBaum() { stckrset(); CntrlY(); bildneu(); } void Baum::baumEdit() { F1(); } void Baum::asciiLaden() { QString datei; datei = fileDialog->getOpenFileName(pfad, "*", this); if (datei.length()) { strcpy(edbox, datei); ShiftF8(); } else statusbar->message("es konnten keine daten geladen werden!"); bildneu(); } void Baum::asciiSpeichern() { QString datei; datei = fileDialog->getSaveFileName(pfad, "*", this); if (datei.length()) { strcpy(edbox, datei); ShiftF4(); } else statusbar->message("asciiSpeichern: dateiName?"); bildneu(); } void Baum::getEingabe() { int k, i; iS = 0; for(i = 0; i < 15; i++) { if (i < iM) { strcpy(tex, eDialog->line[i]->text()); //1 if (!tex[0]) mintS[iS] = '-'; else mintS[iS] = wortI(tex); ++iS; } } loc = CPYLOC; k = copyShadow( root); if (maskFlag) { iG = 0; AltP2( clip[0], k); loc = STDLOC; k = KRek(k); if (! s[ root].b) //2 { loeschRek( root, 's'); root = k; } else { tlz( root, k, 's', 's'); root = k; } } else { nr = 0; ERek(k); loc = STDLOC; root = KRek(k); clrShadow(k); } bildneu(); } //1 einlesen der eingabezeilen (leerzeilen werden zu -) //2 datenbaum war wurzel void Baum::replaceBaum() { char kFall; int alt, histWrzl, wrzl, rzi; alt = root; histWrzl = s[alt].h; if (!histWrzl) { rzi = s[alt].b; wrzl = r[rzi].zS; if (alt == s[wrzl].sl) kFall = 1; else kFall = 2; } else { if (s[histWrzl].v == '"' && lflag) histWrzl = s[histWrzl].sr; if (alt == s[histWrzl].sl) kFall = 3; else if (alt == s[histWrzl].sr) kFall = 4; } strcpy(tex, editDialog->line->text()); editDialog->comboEBox->removeItem(nr); editDialog->comboEBox->insertItem((QString) tex, nr); shadowEdit(); switch(kFall) { case 1: umbau(wrzl, 'l', root, 's'); break; case 2: umbau(wrzl, 'r', root, 's'); break; case 3: umbau(histWrzl, 'l', root, 's'); break; case 4: umbau(histWrzl, 'r', root, 's'); } editDialog->hide(); bildneu(); } void Baum::focusA(const QString& s) { if (s.isEmpty()) setFocus(); } void Baum::buttonTief() { history(); bildneu(); } void Baum::buttonLinks() { histLR('<'); bildneu(); } // finde_modus void Baum::buttonRechts() { histLR('>'); bildneu(); } // finde_modus void Baum::buttonHoch() { if (lflag) lflag = 0; else lflag = 1; bildneu(); } void Baum::buttonRzLinks() { rzLinks(root, rTyp); bildneu(); } void Baum::buttonRzRechts() { rzRechts(root, rTyp); bildneu(); } void Baum::buttonBLinks() { bLinks(); bildneu(); } void Baum::buttonBRechts() { bRechts(); bildneu(); } void Baum::comboIndL(int i) { strcpy(tex, comboLBox->text(i)); bInp->setText(tex); bInp->setFocus(); bildneu();} void Baum::comboIndR(int i) { root = combo[i]; rTyp = comboTyp[i]; bildneu(); setFocus(); } void Baum::comboRSatz(int index) { int len; if (comboTief->count()) { strcpy(tex, comboTief->text(index)); len = strlen(tex) - 1; while (tex[len] != ' ') --len; root = atoi(&tex[len + 1]); rTyp = 's'; bildneu(); setFocus(); } } //**************************************************************************** Fund::Fund(QWidget* parent, const char* name, WFlags f) { setGeometry(280, 100, 350, 500); setMinimumSize(350, 500); setMaximumSize(350, 500); setFont(QFont("courier", 12, QFont::Bold)); setCaption("fundListe"); listBox = new QListBox(this); listBox->setGeometry(10, 50, 330, 430); suchEdit = new QLineEdit(this); suchEdit->setGeometry(10, 10, 330, 30); suchEdit->setFocus(); connect(listBox, SIGNAL(selected(int)), this, SLOT(listItemIndex(int))); connect(suchEdit, SIGNAL(returnPressed()), SLOT(suchText())); } void Fund::findeString() { iFF = 0; suchEdit->setText(0); suchEdit->setFocus(); setCaption("fundListe"); show(); } // lokale stringsuche void Fund::paintEvent(QPaintEvent*) { QPainter p; char tmpstr[128]; int i; p.begin(this); listBox->clear(); for (i = 0; i < iFF; ++i) { sprintf(tmpstr,"%s", baum->w[baum->tmpF[i].i].st); listBox->insertItem(tmpstr); } listBox->sort(true); listBox->setSelected(0,true); p.end(); } void Fund::listItemIndex(int index) { char tmpstr[128]; strcpy(tmpstr, listBox->text(index)); baum->root = baum->wortI(tmpstr); baum->rTyp = 'w'; baum->bildneu(); fundList->hide(); baum->setFocus(); } void Fund::suchText() { strcpy(baum->kette, suchEdit->text()); suchEdit->setText(0); if (*baum->kette) { iFF = 0; baum->CntrlF(baum->root); } } Dump::Dump(QWidget* parent, const char* name, WFlags f) { x = 470; y = 356; b = 210; h = 200; bx = 40; by = 30; bb = 150; bh = 25; fh = 30; tx = 15; bKlick = zKlick = 0; setGeometry(x, y, b, h); setMinimumSize(b, h); setMaximumSize(b, h); setFont(QFont("courier", 12, QFont::Bold)); setCaption("dump"); } void Dump::paintEvent(QPaintEvent*) { QPainter p; int x = bx; int y = by; int b = bb; int h = bh; char tempstr[5]; p.begin(this); p.setBrush(QColor(250, 250, 200)); p.setPen(QColor(250, 250, 200)); p.drawRect(0, 0, 210, 225); p.setPen(Qt::black); if (bKlick) { p.setBrush(QColor(167,255,137)); //grün p.drawRect(x, y + h, b, h); p.drawRect(x, y + 2 * h - 1, b, h); p.drawLine(x, y + h - 1, x + b - 1, y + h - 1); p.setPen(Qt::blue); p.drawText(tx, y + h, 80, fh, Qt::AlignLeft, "sZ"); p.drawText(tx, y + 2 * h, 80, fh, Qt::AlignLeft, "zz"); sprintf(tempstr,"%d", dumpZS); p.drawText(x + 7, y + h + 5, 130, 20, Qt::AlignLeft, tempstr); sprintf(tex, "%d", dumpZz); p.drawText(x + 7, y + 2 * h + 5, 130, fh, Qt::AlignLeft, tex); bKlick = 0; } else if (baum->rTyp == 's') { p.drawRect(x, y, b, h); p.drawRect(x, y + h, b, h + 1); p.drawRect(x, y + 2 * h, b, h + 1); p.drawRect(x, y + 5 * h, b, h + 1); p.setBrush(QColor(167,255,137)); //grün p.drawRect(x, y + 3 * h, b, h + 1); p.drawRect(x, y + 4 * h, b, h + 1); p.drawLine(x, y - 1, x + b - 1, y - 1); p.drawLine(x + 53, y, x + 53, y + h); p.drawLine(x + 82, y, x + 82, y + h); p.drawLine(x + 112, y, x + 112, y + h); p.setPen(Qt::blue); p.drawText(x + 5, y - 20, 20, 20, Qt::AlignLeft, "v"); p.drawText(x + 54, y - 20, 30, fh, Qt::AlignLeft, "t1"); p.drawText(x + 84, y - 20, 30, fh, Qt::AlignLeft, "t2"); p.drawText(x + 110, y - 20, 35, fh, Qt::AlignLeft, "loc"); p.drawText(tx, y + h, 80, fh, Qt::AlignLeft, "sl"); p.drawText(tx, y + 2 * h, 80, fh, Qt::AlignLeft, "sr"); p.drawText(tx, y + 3 * h, 80, fh, Qt::AlignLeft, "b"); p.drawText(tx, y + 4 * h, 80, fh, Qt::AlignLeft, "h"); p.drawText(tx, y + 5 * h, 80, fh, Qt::AlignLeft, "s"); sprintf(tempstr,"%d",int(baum->s[baum->root].v)); p.drawText(x + 7, y + 5, 40, 20, Qt::AlignLeft, tempstr); sprintf(tex, "%d", baum->s[baum->root].sl); p.drawText(x + 7, y + h + 5, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->s[baum->root].sr); p.drawText(x + 7, y + 2 * h + 5, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->s[baum->root].b); p.drawText(x + 7, y + 3 * h + 5, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->s[baum->root].h); p.drawText(x + 7, y + 4 * h + 5, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->s[baum->root].s); p.drawText(x + 7, y + 5 * h + 5, 130, fh, Qt::AlignLeft, tex); tempstr[0] = baum->s[baum->root].t1; tempstr[1] = 0; if (*tempstr != 'w' && *tempstr != 's') p.setPen(Qt::red); else p.setPen(Qt::blue); p.drawText(x + 60, y + 5, 30, 20, Qt::AlignLeft, tempstr); tempstr[0] = baum->s[baum->root].t2; tempstr[1] = 0; if (*tempstr != 'w' && *tempstr != 's') p.setPen(Qt::red); else p.setPen(Qt::blue); p.drawText(x + 92, y + 5, 30, 20, Qt::AlignLeft, tempstr); sprintf(tex, "%d", int(baum->s[baum->root].lc)); if (baum->s[baum->root].lc) p.setPen(Qt::red); else p.setPen(Qt::blue); p.drawText(x + 117, y + 5, 50, fh, Qt::AlignLeft, tex); } else if (baum->rTyp == 'w') { y += 10; p.drawRect(x, y, b, h + 1); p.drawRect(x, y + h, b, h + 1); p.drawRect(x, y + 2 * h, b, h + 1); p.drawLine(x, y - 1, x + b - 1, y - 1); p.drawLine(x, y + 5 * h - 1, x + b - 1, y + 5 * h - 1); p.setBrush(QColor(167, 255, 137)); //grün p.drawRect(x, y + 3 * h, b, h + 1); p.drawRect(x, y + 5 * h, b, h + 1); p.setPen(Qt::blue); y += 5; p.drawText(tx, y, 80, fh, Qt::AlignLeft, "st"); p.drawText(tx, y + h, 80, fh, Qt::AlignLeft, "wl"); p.drawText(tx, y + 2 * h, 80, fh, Qt::AlignLeft, "wr"); p.drawText(tx, y + 3 * h, 80, fh, Qt::AlignLeft, "b"); p.drawText(tx, y + 5 * h, 80, fh, Qt::AlignLeft, "h"); sprintf(tex, "%d", int(baum->w[baum->root].st)); p.drawText(x + 7, y, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->w[baum->root].wl); p.drawText(x + 7, y + h, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->w[baum->root].wr); p.drawText(x + 7, y + 2 * h, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->w[baum->root].b); p.drawText(x + 7, y + 3 * h, 130, fh, Qt::AlignLeft, tex); sprintf(tex, "%d", baum->histor); p.drawText(x + 7, y + 5 * h, 130, fh, Qt::AlignLeft, tex); p.setPen(Qt::red); p.drawText(10, 10, 130, 20, Qt::AlignLeft, baum->w[baum->root].st); } p.end(); } void Dump::mousePressEvent(QMouseEvent* e) { int xp, yp; QPoint clickedPos = e->pos(); xp = clickedPos.x(); yp = clickedPos.y(); if (zKlick) { zKlick = 0; if (xp > bx && xp < bx + bb && yp > by + bh && yp < by + 2 * bh) { baum->root = dumpZS; baum->rTyp = 's'; baum->bildneu(); } //1 else if (xp > bx && xp < bx + bb && yp > by + 2 * bh && yp < by + 3 * bh) { dumpB = baum->r[dumpB].zz; dumpZS = baum->r[dumpB].zS; dumpZz = baum->r[dumpB].zz; bKlick = 1; zKlick = 1; baum->bildneu(); } return; } if (baum->rTyp == 's') { if (xp > bx && xp < bx + bb && yp > by + 3 * bh && yp < by + 4 * bh) //1 { dumpB = baum->s[baum->root].b; bKlick = 1; } else if (xp > bx && xp < bx + bb && yp > by + 4 * bh && yp < by + 5 * bh) //3 { baum->rTyp = 's'; baum->root = baum->s[baum->root].h; zKlick = 0; baum->bildneu(); } } else { if (baum->rTyp == 'w') { if (xp > bx && xp < bx + bb && yp > by + 3 * bh + 10 && yp < by + 4 * bh + 10) //2 { dumpB = baum->w[baum->root].b; bKlick = 1; } else if (xp > bx && xp < bx + bb && yp > by + 5 * bh + 10 && yp < by + 6 * bh + 10) //3 { baum->rTyp = 's'; baum->root = baum->histor; zKlick = 1; baum->bildneu(); return; } } } if (bKlick == 1) { dumpZS = baum->r[dumpB].zS; dumpZz = baum->r[dumpB].zz; zKlick = 1; baum->bildneu(); } } //1 s.b //2 w.b //3 histor InputDialog::InputDialog(QWidget* parent, const char* name, WFlags f) { int i; setGeometry(150, 150, 725, 500); setFont(QFont("courier", 12, QFont::Bold)); setCaption("input dialog"); for(i = 0; i < 15; i++) { line[i] = new QLineEdit(this); line[i]->setGeometry(160, 10 + i * 30, 550, 26); connect(line[i], SIGNAL(returnPressed()), SLOT(nextLine())); } okay = new QPushButton("Okay", this); okay->setGeometry(210, 10 + 13 * 30, 200, 30); connect(okay, SIGNAL(clicked()), SLOT(getEingabe())); line[0]->setFocus(); } void InputDialog::paintEvent(QPaintEvent*) { int i; char* txt0; QPainter p; p.begin(this); p.setBrush(QColor(250, 250, 200)); p.setPen(Qt::black); p.drawRect(0, 0, 725, 500); for(i = 0; i < 15; i++) { if (i < baum->iM) { txt0 = baum->w[baum->mintM[i]].st; ++txt0; p.drawText(10, 10 + i * 30, 200, 26, Qt::AlignLeft, txt0); line[i]->show(); } else line[i]->hide(); } p.end(); } void InputDialog::getEingabe() { hide(); baum->getEingabe(); } void InputDialog::nextLine() { if (activ_line < baum->iM - 1) { ++activ_line; line[activ_line]->setFocus(); } else { activ_line = 0; line[0]->setFocus(); } } // wechselt mit return-taste eine zeile tiefer void InputDialog::keyPressEvent(QKeyEvent* e) { int Key = 0; Key = e->key(); if (Key == Qt::Key_Up) { if (activ_line > 0) { --activ_line; line[activ_line]->setFocus(); } else { activ_line = baum->iM - 1; line[activ_line]->setFocus(); } } if (Key == Qt::Key_Down) { if (activ_line < baum->iM - 1) { ++activ_line; line[activ_line]->setFocus(); } else { activ_line = 0; line[0]->setFocus(); } } if (Key == Qt::Key_Escape) line[activ_line]->setText(0); repaint(); } EditDialog::EditDialog(QWidget* parent, const char* name, WFlags f) { setGeometry(200, 550, 620, 170); setFont(QFont("courier", 12, QFont::Bold)); setCaption("worte eines baums editieren"); comboEBox = new QComboBox(this); comboEBox->setGeometry(10, 40, 600, 26); connect(comboEBox, SIGNAL(activated(int)), SLOT(getEditWort(int))); line = new QLineEdit(this); line->setGeometry(10, 80, 600, 26); connect(line, SIGNAL(returnPressed()), SLOT(wortInComboBox())); neubaum = new QPushButton("Neuer Baum", this); neubaum->setGeometry(30, 120, 240, 30); connect(neubaum, SIGNAL(clicked()), SLOT(neuBaum())); replacebaum = new QPushButton("Alten Baum umbauen", this); replacebaum->setGeometry(355, 120, 240, 30); connect(replacebaum, SIGNAL(clicked()), SLOT(replaceBaum())); line->setFocus(); } void EditDialog::paintEvent(QPaintEvent*) { QPainter p; p.begin(this); p.setBrush(QColor(250, 250, 200)); p.setPen(Qt::black); p.drawRect(0, 0, 620, 170); p.drawText(10, 10, 600, 26, Qt::AlignLeft, "wort aus combobox holen (return = übernehmen)"); p.end(); } void EditDialog::keyPressEvent(QKeyEvent* e) { int Key = 0; Key = e->key(); if (Key == Qt::Key_Return || Key == Qt::Key_Enter) { wortInComboBox(); editDialog->line->setFocus(); } repaint(); } void EditDialog::neuBaum() { strcpy(tex, line->text()); comboEBox->removeItem(nr); comboEBox->insertItem((QString) tex); baum->shadowEdit(); hide(); baum->bildneu(); } void EditDialog::replaceBaum() { baum->replaceBaum(); } void EditDialog::getEditWort(int index) { strcpy(tex, editDialog->comboEBox->text(index)); nr = index; line->setText(tex); line->setFocus(); } void EditDialog::wortInComboBox() { strcpy(tex, line->text()); comboEBox->removeItem(nr); comboEBox->insertItem((QString) tex, nr); editDialog->line->setFocus(); } Output::Output(QWidget* parent, const char* name, WFlags f) { int i; start = 0; command = line = 0; ostring[0] = 0; bred = bgreen = bblue = 255; pred = pgreen = pblue = 0; txt0 = ostring; for (i = 0; i <= 9; ++i) param[i] = 0; //1 BILDH = 500; BILDBR = 650; BILDX = 150; BILDY = 150; setGeometry(BILDX, BILDY, BILDBR, BILDH); strcpy(fontname,"courier"); fontsize = 14; fonttyp = QFont::Bold; setFont(QFont(fontname, fontsize, fonttyp)); setCaption("output window"); } //1 parameter array löschen void Output::paintEvent(QPaintEvent* e_) { QPainter p; p.begin(&buffer); if (!start) { start = 1; p.setBrush(Qt::white); p.setPen(Qt::white); p.drawRect(0, 0, BILDBR, BILDH); p.setPen(Qt::black);} else { if (command) drawCommand(&p, command, txt0); } p.end(); bitBlt(this, 0, 0, &buffer); } void Output::resizeEvent(QResizeEvent* event) { BILDBR = width(); BILDH = height(); buffer.resize(event->size()); } void Output::outputShow() { outputWindow->show(); repaint(); } // ausgabefenster zeigen void Output::outputHide() { outputWindow->hide(); } // ausgabefenster verstecken void Output::outputResize(int x, int y, int breite, int hoehe) { BILDBR = breite; BILDH = hoehe; BILDX = x; BILDY = y; outputWindow->move(BILDX, BILDY); outputWindow->resize(BILDBR, BILDH); start = 0; repaint(); } // groesse des ausgabefenster ändern void Output::outputClear() { start = 0; line = 0; repaint(); } // ausgabefenster reinigen void Output::drawCommand(QPainter* p, int befehl, char* string) { switch(befehl) { case 1: p->setPen(QColor(pred, pgreen, pblue)); p->drawLine(param[0], param[1], param[2], param[3]); break; //1 case 2: bred = param[0]; bgreen = param[1]; bblue = param[2]; break; //2 case 3: pred = param[0]; pgreen = param[1]; pblue = param[2]; break; //3 case 4: p->setPen(QColor(pred, pgreen, pblue)); p->setBrush(QColor(bred, bgreen, bblue)); p->drawRect(param[0], param[1], param[2], param[3]); break; //4 case 5: p->setPen(QColor(pred, pgreen, pblue)); p->setFont(QFont(fontname, fontsize, fonttyp)); p->drawText(param[0], param[1], param[2], param[3], Qt::AlignLeft, string); break; //5 case 6: p->setPen(QColor(pred, pgreen, pblue)); p->setBrush(QColor(bred, bgreen, bblue)); p->drawEllipse(param[0], param[1], param[2], param[3]); break; //6 case 7: buffer.save(string, "BMP" ); break; // 7 case 8: buffer.load(string); break; // 8 case 9: outputWindow->setCaption(string); break; // 9 case 10: p->setPen(QColor(pred, pgreen, pblue)); p->setFont(QFont("courier", 12, QFont::Bold)); p->drawText(10, line * 16, BILDBR, 20, Qt::AlignLeft, string); ++line; } //10 command = 0; } // zeichenbefehle //1 linie ziehen //2 pinsel farbe //3 stift farbe //4 rechteck zeichnen //5 text schreiben //6 zeichne ellipse/kreis //7 fensterinhalt speichern als JPG-datei //8 fensterinhalt aus Datei laden //9 fensterüberschrift //10 print //************************************************************************* void Baum::F1() { if (bmod) { bmod = 0; asciiToBaum(); editor1hide(); bildneu(); } else { bmod = 1; if (root) { if (rTyp == 's' && s[root].v) baumToAscii(); } editor1show(); } } void Baum::F2() { if (lcmod) lcmod = 0; else lcmod = 1; } void Baum::ShiftF2() { char col; int loc1; col = loc; lcmod = 1; loc1 = atoi(alt); loc = char(loc1); if (col != loc) { rzRechts(root, rTyp); rzi = *rzp; if (! rzi) return; rSatz = r[rzi].zS; if (s[rSatz].lc != loc) { lcRechts(); if (! s[root].v) lcLinks(); } else { root = rSatz; rTyp = 's'; } } } void Baum::F3() { int i, w0, aLen, wLen, sLen; char* wp, * sp, * rp; //rLen int* stck03; stck3 = stack + 3 * STCK1; stck03 = stck3; baumDat = new char[BDAT]; asci_neu = baumDat; blockRead(".a", asci_neu); aLen = datLen; w_neu = (wort*)(baumDat + aLen); wp = (char*)w_neu; blockRead(".w", wp); wLen = datLen; s_neu = (satz*)(baumDat + aLen + wLen); sp = (char*)s_neu; blockRead(".s", sp); sLen = datLen; r_neu = (kett*)(baumDat + aLen + wLen + sLen); rp = (char*)r_neu; blockRead(".r", rp); // d_neu = baumDat + aLen + wLen + sLen + rLen; blockRead(".d", d_neu); asci_tmp = asci_neu; w_tmp = w_neu; s_tmp = s_neu; r_tmp = r_neu; asci_neu = ascii; w_neu = w; s_neu = s; r_neu = r; ascii = asci_tmp; w = w_tmp; s = s_tmp; r = r_tmp; w0 = wLen / sizeof(wort); for (i = 1 ; i < w0; i++) w[i].st += int (ascii); //1 baumi = sLen / sizeof(satz); while (baumi) { if (! s[baumi].b && s[baumi].v) *stck03++ = baumi; //1 --baumi; } typ = 's'; while (stck03 != stck3) //5 { holz = *--stck03; loc = s[holz].lc; holz = F5rek(holz); } sMax = holz; ascii = asci_neu; w = w_neu; s = s_neu; r = r_neu; delete [] baumDat; } //1 reloziert die textzeiger void Baum::F4() { int i; char* wp, * sp, * rp; wp = (char*)w; sp = (char*)s; rp = (char*)r; for (i = 0 ; i <= wort0 ; i++) w[i].st -= int (ascii); // deloziert die textzeiger blockWrite(".a", ascii, 1, asci0 - ascii); blockWrite(".w", wp, sizeof(wort), wort0 + 1); blockWrite(".s", sp, sizeof(satz), sMax + 1); blockWrite(".r", rp, sizeof(kett), rMax + 1); for (i = 0 ; i <= wort0 ; i++) w[i].st += int (ascii); // reloziert die textzeiger mes = 1; } void Baum::blockWrite(char* ext, char* start, int size, int anzahl) { strcpy (tex, edbox); strcat(tex, ext); stream = fopen (tex, "wb"); // FILE* stream fwrite (start, size, anzahl, stream); fclose (stream); } void Baum::ShiftF4() { if (! edbox[0]) strcpy(edbox, "noname"); baumDat = new char[BDAT]; transMulti(10, baumDat); datLen = strlen(baumDat); if (datLen) { if (wb()) mes = 1; } else mes = 2; delete [] baumDat; } void Baum::transMulti(char c, char * feldadr) { int i; txt0 = feldadr; sum = bMes->numLines(); // anzahl zeilen for (i = 0; i < sum; i++) // aktuelle zeile { strcpy(txt0, bMes->textLine(i)); txt0 += strlen(txt0); *txt0++ = c; } // 0 oder LF *txt0++ =0; *txt0 = 0; } // ende hat 2 nullen // kopiert QMultiLineEdit nach feldadr void Baum::F5() { int* stck03; stck3 = stack + 3 * STCK1; stck03 = stck3; while (! s[sMax].v && sMax) sMax--; baumi = sMax; while (baumi) { if (! s[baumi].b && s[baumi].v) *stck03++ = baumi; //1 --baumi; } asci_neu = new char[ENDC+1]; w_neu = new wort[ENDW+1]; //2 s_neu = new satz[ENDS+1]; r_neu = new kett[ENDRL+1]; //2 w_tmp = w; s_tmp = s; r_tmp = r; asci_tmp = ascii; ascii = asci_neu; w = w_neu; asciinit(); //3 wort0 = 255; satz0 = 1; rzl0 = 1; keyList(); //4 typ = 's'; while (stck03 != stck3) //5 { holz = *--stck03; loc = s[holz].lc; holz = F5rek(holz); s[holz].h = 0; s[holz].s = 0; } w = w_tmp; s = s_tmp; r = r_tmp; ascii = asci_tmp; delete [] ascii; delete [] w; delete [] s; delete [] r; ascii = asci_neu; w = w_neu; s = s_neu; r = r_neu; root = holz; sMax = holz; int i; for(i = 0; i < 8; i++) { clip[i] = 0; clipTyp[i] = 0; clap[i] = 0; clapTyp[i] = 0; } mes = 6; } //1 die einzelnen bäume werden aufgelistet: //2 und über einen zweiten speicherbereich //3 mit an dem neuen speicher angepassten w[0-255] //4 und evtl. der keyList //5 in einer schleife abgearbeitet: int Baum::F5rek(int kNr) { int sl, sr; unsigned char t1, t2, v; s = s_tmp; r = r_tmp; //1: sl = s[kNr].sl; sr = s[kNr].sr; t1 = s[kNr].t1; t2 = s[kNr].t2; v = s[kNr].v; if (t1 == 's') sl = F5rek(sl); else if (t1 == 'w') { w = w_tmp; txt0 = w[sl].st; w = w_neu; sl = wortI(txt0); } //2 if (t2 == 's') sr = F5rek(sr); else if (t2 == 'w') { w = w_tmp; txt0 = w[sr].st; w = w_neu; sr = wortI(txt0); } //2 s = s_neu; r = r_neu; //3 return sBau(sl, sr, t1, t2, v); } //1 s | r zurücksetzen //2 alten wort_string holen und neues wort anlegen //3 s | r an neuen speicher anpassen void Baum::wBSort(int bZweig) { if (w[bZweig].wl) wBSort(w[bZweig].wl); *stck1++ = bZweig; if (w[bZweig].wr) wBSort(w[bZweig].wr); w[bZweig].wl = 0; w[bZweig].wr = 0; } // TK_rekursion void Baum::wBAusgleich() { int vor, mitte; int* stckA, * stckB; loop: if (! *(stck1 + 1)) return; stckA = stckB = stck1; loop1: if (*stckA) { vor = *stckA++; if (*stckA) { mitte = *stckA++; w[mitte].wl = vor; *stckB++ = mitte; if (*stckA) { w[mitte].wr = *stckA++; if (*stckA) { *stckB++ = *stckA++; goto loop1; } } } else *stckB++ = vor; } *stckB = 0; goto loop; } void Baum::F6(int k, char t) { if (t == 's') { if (! s[k].b) { loeschRek(k, t); mes = 1; } } else mes = 2; } void Baum::clearLOC() { int kNr; F7(); kNr = sMax; while (kNr) { if (! s[kNr].b && s[kNr].v != '"' && loc == STDLOC) s[kNr].lc = OUTLOC; --kNr; } } void Baum::F7() { int kNr; mes = 1; while (! s[sMax].v && sMax) --sMax; kNr = sMax; while (kNr) { if (! s[kNr].b && s[kNr].lc == OUTLOC) loeschRek(kNr, 's'); else { if (s[kNr].v) docS(kNr); if (mes == 1) --kNr; else break; } } if (loc == OUTLOC) { loc = STDLOC; bLinks(); } } void Baum::docS(int i) { if (s[i].t1 == 'w' || s[i].t1 == 's') { rzp = getRzp(s[i].sl, s[i].t1); if (rzp && *rzp) { docS1(i); if (mes == 5) goto ret; } } if (s[i].t2 == 'w' || s[i].t2 == 's') { rzp = getRzp(s[i].sr, s[i].t2); if (rzp && *rzp) { docS1(i); if (mes == 5) goto ret; } } docS2(i); if (mes == 5) goto ret; return; ret: root = i; } void Baum::docS1(int i) { rzi = *rzp; loop: rSatz = r[rzi].zS; if (rSatz != i) { rzi = r[rzi].zz; if (rzi) goto loop; else { mes = 5; cout << i << endl; } } } void Baum::docS2(int i) { rzi = s[i].b; while (rzi) { rSatz = r[rzi].zS; if (rSatz == i) { mes = 5; return; } if (s[rSatz].sl != i && s[rSatz].sr != i) { mes = 5; return; } rzi = r[rzi].zz; } } void Baum::F8() { char* wp, * sp, * rp; wp = (char*)w; sp = (char*)s; rp = (char*)r; blockRead(".a", ascii); asci0 = ascii + datLen; blockRead(".w", wp); wort0 = datLen / sizeof(wort); blockRead(".s", sp); sMax = datLen / sizeof(satz) - 1; satz0 = 1; while (s[satz0].v) satz0++; blockRead(".r", rp); rMax = datLen / sizeof(kett); rzl0 = 1; while (r[rzl0].zS) rzl0++; for (int i = 0 ; i <= wort0 ; i++) w[i].st += int (ascii); // reloziert die textzeiger root = 1; rTyp = 's'; bRechts(); edbox[0] = 0; mesFlag = 0; mes = 1; } void Baum::blockRead(char* ext, char* start) { strcpy(tex, edbox); strcat(tex, ext); stream = fopen (tex, "rb"); getDatLen(); fread (start, 1, datLen, stream); fclose (stream); } void Baum::getDatLen() { fseek (stream, 0, SEEK_END ); // dateiende + 0 suchen datLen = ftell(stream); // länge bis gesuchte position fseek (stream, 0, SEEK_SET ); } // dateianfang + 0 suchen void Baum::ShiftF8() { char* p; if (! edbox[0]) strcpy(edbox, "noname"); baumDat = new char[BDAT]; if (rb()) { p = strstr(baumDat,"<html"); //1 if (!p) p = strstr(baumDat,"<HTML"); if (!p) p = strstr(baumDat,"<DOCUMENT"); if (!p) p = strstr(baumDat,"<document"); if (p) { dp = baumDat; baumdat = p; htm(); } bMes->setText(baumDat); editor1show(); bmod = 1; mes = 1; } else mes = 2; delete [] baumDat; } //1 HTML/XML scan void Baum::htm() { unsigned char zchn; while (*baumdat) { zchn = (unsigned char) *baumdat++; if (zchn == '<') htm1(); // html else { if (zchn == LF || zchn == CR) zchn = ' '; else if (zchn == '&') *dp++ = htm2(); else if (zchn == ' ' && (*(dp - 1) == LF || (*(dp - 1) == ' '))) continue; //1 else *dp++ = zchn; } } *dp = 0; } // setzt baumDat voraus, verwandelt htm_text in ascii_text //1 verhindert LF' '|' ' void Baum::htm1() { unsigned char c; txt1 = tex; if (baumdat == strstr(baumdat, "![CDATA[")) // XML CDATA { baumdat += 8; *dp++ = LF; while (*baumdat != ']') { c = (unsigned char) *baumdat++; if (c == '&') { if (baumdat == strstr(baumdat, "nbsp;")) { baumdat +=5; c = ' '; } } // Leerzeichen if (c == 0xc3) // unicode { if (*baumdat == -97) c = 0xdf; // sz else if (*baumdat == -74) c = 0xf6; // o-umlaut klein else if (*baumdat == -92) c = 0xe4; // a-umlaut klein else if (*baumdat == -68) c = 0xfc; // u-umlaut klein baumdat++; } *dp++ = c; } while (*baumdat != '>') baumdat++; baumdat++; return; } while ((c = (unsigned char) *baumdat++) != '>') // html { if (c >= 'a' && c <= 'z') c -= 0x20; //1 *txt1++ = c; } *txt1 = 0; if (strcmp(tex, "P") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 else if (strcmp(tex, "BR") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 if (strcmp(tex, "/H1") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 else if (strcmp(tex, "/H2") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 if (strcmp(tex, "/H3") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 else if (strcmp(tex, "/H4") == 0) { if (*(dp - 2) != LF) *dp++ = LF; } //2 while (*baumdat == LF || *baumdat == CR || *baumdat == ' ') baumdat++; } //1 html-tags gross schreiben //2 max. 1 leerzeile unsigned char Baum::htm2() // umlaute konvertieren { txt1 = tex; while (*baumdat != ';') *txt1++ = *baumdat++; baumdat++; *txt1 = 0; if (strcmp(tex, "Auml") == 0) return 0xc4; else if (strcmp(tex, "Ouml") == 0) return 0xd6; else if (strcmp(tex, "Uuml") == 0) return 0xdc; else if (strcmp(tex, "auml") == 0) return 0xe4; else if (strcmp(tex, "ouml") == 0) return 0xf6; else if (strcmp(tex, "uuml") == 0) return 0xfc; else if (strcmp(tex, "szlig") == 0) return 0xdf; else if (strcmp(tex, "amp") == 0) return('&'); else if (strcmp(tex, "lt") == 0) return('<'); else if (strcmp(tex, "gt") == 0) return('>'); else if (strcmp(tex, "deg") == 0) return 0xb0; else if (strcmp(tex, "nbsp") == 0) return(' '); return(' '); } void Baum::F9() { int i, j; j = 7; for (i = 0; i < 8; ++i) { if (rTyp == clipTyp[i] && root == clip[i]) { clipTyp[i] = 0; clip[i] = 0; j = i; } } for (i = j; i > 0; --i) { clipTyp[i] = clipTyp[i - 1]; clip[i] = clip[i -1]; } clipTyp[0] = rTyp; clip[0] = root; } //1 // //1 void Baum::ShiftF9() { int i; for (i = 0; i < 7; i++) { clip[i] = clip[i + 1]; clipTyp[i] = clipTyp[i + 1]; } clip[7] = 0; clipTyp[7] = 0; } void Baum::F10() { int i, j; j = 7; for (i = 0; i < 8; ++i) { if (rTyp == clapTyp[i] && root == clap[i]) { clapTyp[i] = 0; clap[i] = 0; j = i; } } for (i = j; i > 0; --i) { clapTyp[i] = clapTyp[i - 1]; clap[i] = clap[i -1]; } clapTyp[0] = rTyp; clap[0] = root; } void Baum::F11(int k) { s[root].b = 0; } //{ Ast = 0; F11Rek(k); root = Ast; } void Baum::F11Rek(int k) { if (s[k].t1 == 's') F11Rek(s[k].sl); else if (! s[k].sl) { if (! Ast) Ast = k; //1 else Ast = sBau(Ast, k, 's', 's', '·'); } if (s[k].t2 == 's') F11Rek(s[k].sr); else if (! s[k].sr) { if (! Ast) Ast = k; //1 else Ast = sBau(Ast, k, 's', 's', '·'); } } /* void Baum::F11(int k) { baumi = wortI("rcs"); typ = 'w'; Ast = 0; F11Rek(k); root = Ast; } void Baum::F11Rek(int k) { if (s[k].v == '"') { if (isDay (w[s[k].sl].st)) { if (! vSatz(s[k].sl, 'w', '·')) { if (hatMember(s[k].sr, 's')) { if (! Ast) Ast = k; //1 else Ast = sBau(Ast, k, 's', 's', '·'); } } } else F11Rek(s[k].sr); } else { if (s[k].t1 == 's') F11Rek(s[k].sl); if (s[k].t2 == 's') F11Rek(s[k].sr); } } // sucht alle lab-knoten, die nicht im ·-baum sind . zeigt knoten als baum //1 anfangs-knoten */ void Baum::F12() { if (rTyp == 's') { ifBau0(root); elseBau0(root); bildneu(); } } void Baum::ifBau0(int k) { if (s[k].v == 'f') { if (s[k].t2 == 's') k = s[k].sr; else return; } if (s[k].v == '"' && s[k].sl == switch_) k = s[s[k].sr].sr; if (s[k].t1 == 's') { if (s[s[k].sl].v == ',') { ast = s[k].sl; if (s[ast].t2 == 's') { ast = s[ast].sr; if (s[ast].v == '"' && s[ast].sl == then_) { k = ast; ifBau0(k); if (s[k].t2 == 's') ifBau0(s[k].sr); return; } } anbauLl(k, if_then, 'w', '"'); } else if (s[s[k].sl].v == ';') anbauLl(k, do_while, 'w', '"'); else if (s[s[k].sl].v == '_') { if (forTest0(s[k].sl)) anbauLl(k, for_do, 'w', '"'); else anbauLl(k, while_do, 'w', '"'); } else if (s[k].t2 == 's') { if (s[s[k].sr].v == ',') { ast = s[k].sr; if (s[ast].t2 == 's') { ast = s[ast].sr; if (s[ast].v == '"' && s[ast].sl == then_) { ifBau0(s[k].sl); ifBau0(s[s[k].sr].sr); return; } } anbauRl(k, if_then, 'w', '"'); } else if (s[s[k].sr].v == ';') anbauRl(k, do_while, 'w', '"'); else if (s[s[k].sr].v == '_') { if (forTest0(s[k].sr)) anbauRl(k, for_do, 'w', '"'); else anbauRl(k, while_do, 'w', '"'); } } ifBau0(s[k].sl); } else if (s[k].sl != if_then && s[k].sl != do_while && s[k].sl != while_do && s[k].sl != for_do) { if (s[k].t2 == 's') { if (s[s[k].sr].v == ',') { ast = s[k].sr; if (s[ast].t2 == 's') { ast = s[ast].sr; if (s[ast].v == '"' && s[ast].sl == then_) { ifBau0(ast); return; } } anbauRl(k, if_then, 'w', '"'); } else if (s[s[k].sr].v == ';') anbauRl(k, do_while, 'w', '"'); else if (s[s[k].sr].v == '_') { if (forTest0(s[k].sr)) anbauRl(k, for_do, 'w', '"'); else anbauRl(k, while_do, 'w', '"'); } } } if (s[k].t2 == 's') ifBau0(s[k].sr); } void Baum::elseBau0(int k) { if (s[k].v == 'f') { if (s[k].t2 == 's') k = s[k].sr; else return; } if (s[k].v == '·') { ast = s[k].sl; flag = 0; if (s[ast].v == '"' && s[ast].sl == case_) flag = 1; if (s[s[k].sr].v != '"' && !flag) anbauRl(k, else_, 'w', '"'); } if (s[k].t1 == 's') elseBau0(s[k].sl); if (s[k].t2 == 's') elseBau0(s[k].sr); } char Baum::forTest0(int k) { return 0; } int Baum::rbX() { strcpy(tex, "/baum/b/wiki.txt"); //home/internet2/baum/aktsent.txt"); 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; } int Baum::wbX() { strcpy(tex, "/baum/b/aktsent.txt"); //home/internet2/baum/aktsent.txt"); stream = fopen(tex, "wb"); if (! stream) return 0; fwrite (baumDat, 1, datLen, stream); fclose(stream); sync(); return 1; } /* { if (rTyp == 's') { dhSyntax(root); mes = 1; } else mes = 2; } { if (rTyp == 's') zeitSyntax(root); } void Baum::zeitSyntax(int k) { int li, re, rr; li = s[k].sl; re = s[k].sr; if (s[k].v == '"') { if (s[re].v == ':' || s[re].v == 'i') { if (s[re].t2 == 'w') { rr = s[re].sr; if (isTime(w[rr].st)) { worti = wortI(w[rr].st + 3); Ast = s[k].sl; umbau(k, 'l', worti, 'w'); umbau(re, 'r', Ast, 'w'); return; } } } } if (s[k].t1 == 's') zeitSyntax(li); if (s[k].t2 == 's') zeitSyntax(re); } char Baum::isTime(char* date) { char c; if (strlen(date) == 7) { c = *date++; if (c != 'e') return 0; c = *date++; if (c != 'u') return 0; c = *date++; if (c != '_') return 0; c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c != '.') return 0; c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c < '0' || c > '9') return 0; return 1; } if (strlen(date) == 8) { c = *date++; if (c != 'e') return 0; c = *date++; if (c != 'u') return 0; c = *date++; if (c != '_') return 0; c = *date++; if (c < '1' || c > '9') return 0; c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c != '.') return 0; c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c < '0' || c > '9') return 0; return 1; } return 0; } void Baum::dhSyntax(int k) { if (s[k].v == ',') { if (s[k].t2 == 'w') { re = s[k].sr; if (atoi(w[re].st)) s[k].v = '*'; return; } } if (s[k].t1 == 's') dhSyntax(s[k].sl); if (s[k].t2 == 's') dhSyntax(s[k].sr); } void Baum::dhSyntax(int k) { int li, re, A, B, C; char tA, tB, tC; li = s[k].sl; re = s[k].sr; if (s[li].v == 'h') { A = s[li].sl; tA = s[li].t1; B = s[re].sl; tB = s[re].t1; C = s[re].sr; tC = s[re].t2; A = sBau(A, B, tA, tB, 'a'); umbau(k, 'l', A, 's'); s[k].v = 'h'; umbau(k, 'r', C, tC); return; } if (s[k].t1 == 's') dhSyntax(li); if (s[k].t2 == 's') dhSyntax(re); } void Baum::dhSyntax(int k) { int li, re, A, B; char tA, tB; li = s[k].sl; re = s[k].sr; if (s[k].v == 'd') { A = s[li].sl; tA = s[li].t1; B = s[re].sr; tB = s[re].t2; A = sBau(A, '2', tA, 'w', '*'); umbau(k, 'l', A, 's'); s[k].v = 'i'; umbau(k, 'r', B, tB); return; } if (s[k].t1 == 's') dhSyntax(li); if (s[k].t2 == 's') dhSyntax(re); } void Baum::dhSyntax(int k) { int li, re, A, B, C; char tA, tB, tC; li = s[k].sl; re = s[k].sr; if (s[k].v == ':' && s[k].t1 == 's' && s[li].v == ',') { A = s[li].sl; tA = s[li].t1; B = s[li].sr; tB = s[li].t2; C = s[k].sr; tC = s[k].t2; umbau(k, 'l', A, tA); s[k].v = 'd'; re = sBau(B, C, tB, tC, 'h'); umbau(k, 'r', re, 's'); } if (s[k].t1 == 's') dhSyntax(li); if (s[k].t2 == 's') dhSyntax(re); } void Baum::zeitSyntax(int k) { int li, re; li = s[k].sl; re = s[k].sr; if (s[k].v == ',' && s[k].t1 == 'w' && s[k].t2 == 'w') { if (isTime(w[li].st) && isTime(w[re].st)) { s[k].v = '_'; return; } } if (s[k].t1 == 's') zeitSyntax(li); if (s[k].t2 == 's') zeitSyntax(re); } char Baum::isTime(char* date) { char c; if (strlen(date) == 4) { c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c != ':') return 0; c = *date++; if (c < '0' || c > '5') return 0; c = *date++; if (c < '0' || c > '9') return 0; return 1; } if (strlen(date) == 5) { c = *date++; if (c < '0' || c > '2') return 0; c = *date++; if (c < '0' || c > '9') return 0; c = *date++; if (c != ':') return 0; c = *date++; if (c < '0' || c > '5') return 0; c = *date++; if (c < '0' || c > '9') return 0; return 1; } return 0; } { int i, j; char string[10]; char* bp; baumDat = new char[0x10000]; bp = baumDat; for (i = 1536; i <1791 ; ++i) { sprintf(string, "&#%d; ", i); j = 0; while (string[j]) *bp++ = string[j++]; } *bp = 0; stream = fopen("unicode", "wb"); if (! stream) return; fwrite (baumDat, 1, strlen(baumDat), stream); fclose(stream); delete [] baumDat; } */


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