#include #include #include #include #include #include #include #include #include #include using namespace Framework; using namespace std; #define AE (unsigned char)142 #define ae (unsigned char)132 #define OE (unsigned char)153 #define oe (unsigned char)148 #define UE (unsigned char)154 #define ue (unsigned char)129 #define ss (unsigned char)225 void UserInputThread(); void PrintHelp( Text *txt ); void loadschrift( Text *txt ); void listgrößen(); void delgröße( Text *txt ); void listzeichen( Text *txt ); void editzeichen( Text *txt ); void endedit(); void saveedit( Text *txt ); void delzeichen( Text *txt ); void setalpha( Text *txt ); void setfg( Text *txt ); void setbg( Text *txt ); void endedit(); void saveedit( Text *txt ); void draw(); bool editFMaus( void *p, void *fenster, MausEreignis me ); DWORD WINAPI UserInputThread( LPVOID p ); LTDSDatei *schrift; WFenster *editF; bool exitB = 0; bool MsgSleep = 1; Buchstabe *editZ; unsigned char alpha = 0; int bgF; int fgF; int main() { bgF = 0; fgF = 0xFFFFFFFF; WNDCLASS wc = F_Normal( GetModuleHandle( NULL ) ); wc.lpszClassName = "LENCK - Tech Zeichen Edit Fenster"; editF = new WFenster(); editF->erstellen( WS_POPUP, wc ); editF->setMausAktion( editFMaus ); Bildschirm *screen = new Bildschirm3D( editF->getThis() ); screen->setRenderZeichnungen( 0 ); screen->setdeckFarbe( 0 ); screen->setFill( 0 ); screen->setTestRend( 0 ); editF->setBildschirm( screen ); std::locale::global( std::locale( "German_germany" ) ); schrift = new LTDSDatei(); HWND hWnd = GetConsoleWindow(); WFenster *console = new WFenster( hWnd ); console->setSize( 600, 400 ); console->setPosition( Bildschirmmitte( console->getThis() ) ); CreateThread( NULL, 0, UserInputThread, 0, 0, NULL ); MSG msg = {}; while( msg.message != WM_QUIT ) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else if( exitB ) break; if( MsgSleep ) Sleep( 1000 ); } console->setFensterHandle( 0 ); console->release(); schrift->release(); editF->release(); screen->release(); return 0; } DWORD WINAPI UserInputThread( LPVOID p ) { cout << "Willkommen beim LENCK - Tech Schrift Editor! \nprogrammiert von Kolja Strohm\nSchreibe \\? für Hilfe.\n"; Text *UserMessage = new Text(); char c[ 255 ]; while( 1 ) { cout << "LTDSEditor->"; cin.getline( c, 255, '\n' ); UserMessage->setText( c ); if( !UserMessage->positionVon( "\\?" ) ) PrintHelp( UserMessage->getTeilText( 3 ) ); else if( !UserMessage->positionVon( "loadschrift" ) ) loadschrift( UserMessage->getTeilText( 12 ) ); else if( UserMessage->istGleich( "listgr\x94áen" ) ) listgrößen(); else if( !UserMessage->positionVon( "delgr\x94áe" ) ) delgröße( UserMessage->getTeilText( 9 ) ); else if( !UserMessage->positionVon( "listzeichen" ) ) listzeichen( UserMessage->getTeilText( 12 ) ); else if( !UserMessage->positionVon( "editzeichen" ) ) editzeichen( UserMessage->getTeilText( 12 ) ); else if( UserMessage->istGleich( "endedit" ) ) endedit(); else if( !UserMessage->positionVon( "saveedit" ) ) saveedit( UserMessage->getTeilText( 9 ) ); else if( !UserMessage->positionVon( "delzeichen" ) ) delzeichen( UserMessage->getTeilText( 11 ) ); else if( !UserMessage->positionVon( "setalpha" ) ) setalpha( UserMessage->getTeilText( 9 ) ); else if( !UserMessage->positionVon( "setfg" ) ) setfg( UserMessage->getTeilText( 6 ) ); else if( !UserMessage->positionVon( "setbg" ) ) setbg( UserMessage->getTeilText( 6 ) ); else if( UserMessage->istGleich( "exit" ) ) { exitB = true; break; } else cout << "Geben sie \\? ein, um eine Befehlsübersicht zu erhalten.\n"; } UserMessage->release(); return 0; } void PrintHelp( Text *txt ) { if( txt->getLength() == 0 ) { cout << "----++Befehle++----\n"; cout << " loadschrift \n"; cout << " listgrößen\n"; cout << " delgröße \n"; cout << " listzeichen \n"; cout << " editzeichen \n"; cout << " endedit\n"; cout << " saveedit \n"; cout << " delzeichen \n"; cout << " setalpha \n"; cout << " setbg \n"; cout << " setfg \n"; cout << " exit\n"; cout << "----++Ende++----\n"; } else if( txt->istGleich( "loadschrift" ) ) { cout << " loadschrift \n"; cout << "L" << ae << "d die Schrift aus dem angegebenen Pfad ein.\n"; } else if( txt->istGleich( "listgr\x94áen" ) ) { cout << " listgrößen\n"; cout << "Gibt eine Liste mit in der Schrift gespeicherten Schriftgrößen wieder.\n"; } else if( txt->istGleich( "delgr\x94áen" ) ) { cout << " delgröße \n"; cout << "L" << oe << "scht die angegebene Schriftgröße.\n"; } else if( txt->istGleich( "listzZeichen" ) ) { cout << " listzeichen \n"; cout << "Gibt eine Liste mit in einer Schriftgröße enthaltenen Zeichen wieder.\n"; } else if( txt->istGleich( "editzeichen" ) ) { cout << " editzeichen \n"; cout << "Öffnet ein Editorfenster, in dem das angegebene Zeichen bearbeitet werden kann.\n"; } else if( txt->istGleich( "saveedit" ) ) { cout << " saveedit \n"; cout << "Speichert den geöffneten Buchstaben unter der angegebenen Größe und Zeichennummer.\n"; } else if( txt->istGleich( "endedit" ) ) { cout << " endedit\n"; cout << "Beendet das Editorfenster.\n"; } else if( txt->istGleich( "delzeichen" ) ) { cout << " delzeichen \n"; cout << "Löscht das angegebene Zeichen.\n"; } else if( txt->istGleich( "setalpha" ) ) { cout << " setalpha \n"; cout << "Setzt den Editor - Alphawert.\n"; } else if( txt->istGleich( "setbg" ) ) { cout << " setbg \n"; cout << "Setzt den Editor - Hintergrund.\n"; } else if( txt->istGleich( "setfg" ) ) { cout << " setfg \n"; cout << "Setzt den Editor - Fordergrund.\n"; } else if( txt->istGleich( "exit" ) ) { cout << " exit\n"; cout << "Schließt das Programm.\n"; } else cout << "Geben sie \\? ein, um eine Befehlsübersicht zu erhalten.\n"; txt->release(); } void loadschrift( Text *txt ) { schrift->setPfad( txt->getThis() ); if( !DateiExistiert( txt->getThis() ) ) schrift->erstelleDatei(); schrift->leseDaten(); cout << schrift->getAnzahlSchriftgrößen() << " Schriftgrößen wurden gefunden.\n"; txt->release(); } void listgrößen() { unsigned char *gr = schrift->getSchriftGrößen(); cout << "----++Schriftgrößen++----\n"; for( int i = 0; i < schrift->getAnzahlSchriftgrößen(); i++ ) cout << (int)gr[ i ] << endl; cout << "Es wurden " << schrift->getAnzahlSchriftgrößen() << " Schriftgrößen gefunden.\n"; cout << "----++Ende++----\n"; } void delgröße( Text *txt ) { schrift->löscheSchrifrGröße( TextZuInt( txt->getText(), 10 ) ); cout << "Die Schriftgröße " << txt->getText() << " wurde gelöscht.\n"; txt->release(); } void listzeichen( Text *txt ) { cout << "----++Zeichen++----\n"; unsigned char anz = schrift->getAnzahlBuchstaben( TextZuInt( txt->getText(), 10 ) ); unsigned char *z = schrift->getBuchstaben( TextZuInt( txt->getText(), 10 ) ); if( z ) { for( int i = 0; i < anz; i++ ) { cout << (char)z[ i ] << " " << (int)z[ i ] << endl; } cout << "Es wurden " << (int)anz << " Zeichen gefunden.\n"; } else cout << "Die angegebene Schriftgröße existiert nicht.\n"; cout << "----++Ende++----\n"; txt->release(); } void editzeichen( Text *txt ) { if( MsgSleep ) { MsgSleep = 0; Text *größe = txt->getTeilText( 0, txt->positionVon( ' ' ) ); Text *zeich = txt->getTeilText( txt->positionVon( ' ' ) + 1 ); editZ = schrift->ladeBuchstabe( TextZuInt( größe->getText(), 10 ), TextZuInt( zeich->getText(), 10 ) ); if( !editZ ) { int br = 0, hö = 0; cout << "Das eingegebene Zeichen existiert noch nicht.\nBitte gebe die Breite ein:"; cin >> br; cout << "\nBitte gebe die Höhe ein:"; cin >> hö; if( br < 0 || hö < 0 || br > 255 || hö > 255 ) { cout << "Error: Die breite oder die Höhe liegt nicht zwischen 0 und 255!\n"; größe->release(); zeich->release(); txt->release(); MsgSleep = 1; return; } cout << "Erfolg.\n"; editZ = new Buchstabe(); editZ->NeuBuchstabe( Punkt( br, hö ) ); } zeich->release(); größe->release(); unsigned char *Buffer = editZ->getBuff(); editF->setSize( editZ->getBreite() * 10 + 1, editZ->getHeight() * 10 + 1 ); Bildschirm *screen = editF->getBildschirm(); editF->setPosition( Bildschirmmitte( editF->getThis() ) ); editF->setAnzeigeModus( 1 ); screen->update(); Bild *rObj = screen->getRenderBild(); fgF = 0xFFFFFFFF; int a2 = 255 - ( fgF >> 24 ); int fc = fgF & 0x00FFFFFF; for( int i = 0; i < editZ->getBreite() * editZ->getHeight(); i++ ) { for( int i1 = 0; i1 < 100; i1++ ) rObj->alphaPixel2D( ( ( i * 10 ) % ( editZ->getBreite() * 10 ) ) + ( i1 % 10 ), ( ( ( i * 10 ) / ( editZ->getBreite() * 10 ) ) * 10 ) + ( i1 / 10 ), fc | ( ( Buffer[ i ] - a2 ) << 24 ) ); screen->render(); } screen->render(); rObj->release(); screen->release(); } else cout << "Error: Du musst das Editfenster zuvor mit 'endedit' beenden.\n"; txt->release(); } void saveedit( Text *txt ) { if( !MsgSleep ) { Text *größe = txt->getTeilText( 0, txt->positionVon( ' ' ) ); Text *zeich = txt->getTeilText( txt->positionVon( ' ' ) + 1 ); schrift->löscheBuchstabe( TextZuInt( größe->getText(), 10 ), TextZuInt( zeich->getText(), 10 ) ); schrift->addBuchstabe( TextZuInt( größe->getText(), 10 ), editZ->getThis(), TextZuInt( zeich->getText(), 10 ) ); zeich->release(); größe->release(); } else cout << "Error: Der Editor ist nicht geöffnet.\n"; txt->release(); } void endedit() { if( !MsgSleep ) { editZ = editZ->release(); editF->setAnzeigeModus( 0 ); MsgSleep = 1; } else cout << "Error: Der Editor ist nicht geöffnet.\n"; } void delzeichen( Text *txt ) { Text *gr = txt->getTeilText( 0, txt->positionVon( ' ' ) ); Text *z = txt->getTeilText( txt->positionVon( ' ' ) + 1 ); schrift->löscheBuchstabe( TextZuInt( gr->getText(), 10 ), TextZuInt( z->getText(), 10 ) ); cout << "Das Zeichen " << z->getText() << " wurde aus der Schriftgröße " << gr->getText() << " gelöscht.\n"; gr->release(); z->release(); txt->release(); } void setalpha( Text *txt ) { alpha = (unsigned char)TextZuInt( txt->getText(), 10 ); txt->release(); } void setfg( Text *txt ) { if( !MsgSleep ) { Text *r = txt->getTeilText( 0, txt->positionVon( ' ' ) ); Text *g = txt->getTeilText( txt->positionVon( ' ' ) + 1, txt->positionVon( ' ', 1 ) ); Text *b = txt->getTeilText( txt->positionVon( ' ', 1 ) + 1 ); fgF = ( ( (int)*r & 0xFF ) << 16 ) | ( ( (int)*g & 0xFF ) << 8 ) | ( (int)*b & 0xFF ); r->release(); g->release(); b->release(); draw(); } else cout << "Error: Der Editor ist nicht geöffnet.\n"; txt->release(); } void setbg( Text *txt ) { if( !MsgSleep ) { Text *r = txt->getTeilText( 0, txt->positionVon( ' ' ) ); Text *g = txt->getTeilText( txt->positionVon( ' ' ) + 1, txt->positionVon( ' ', 1 ) ); Text *b = txt->getTeilText( txt->positionVon( ' ', 1 ) + 1 ); bgF = 0xFF000000 | ( ( (int)*r & 0xFF ) << 16 ) | ( ( (int)*g & 0xFF ) << 8 ) | ( (int)*b & 0xFF ); r->release(); g->release(); b->release(); draw(); } else cout << "Error: Der Editor ist nicht geöffnet.\n"; txt->release(); } bool editFMaus( void *p, void *fenster, MausEreignis me ) { switch( me.id ) { case ME_PLinks: if( 1 ) { if( !MsgSleep ) { Bildschirm *screen = ((WFenster*)fenster)->getBildschirm(); Bild *rObj = screen->getRenderBild(); int x = me.mx / 10; int y = me.my / 10; int fc = fgF & 0x00FFFFFF; unsigned char *Buffer = editZ->getBuff(); int i = x + y * editZ->getBreite(); Buffer[ i ] = alpha; rObj->fillRegion( x * 10, y * 10, 10, 10, bgF ); screen->render(); for( int i1 = 0; i1 < 100; i1++ ) rObj->alphaPixel2D( ( x * 10 ) + ( i1 % 10 ), ( y * 10 ) + ( i1 / 10 ), fc | ( alpha << 24 ) ); rObj->release(); screen->render(); screen->release(); } } break; } return 1; } void draw() { if( !MsgSleep ) { Bildschirm *screen = editF->getBildschirm(); Bild *rObj = screen->getRenderBild(); int *ObjBuff = rObj->getBuffer(); int bh = rObj->getBreite() * rObj->getHeight(); for( int i = 0; i < bh; i++ ) ObjBuff[ i ] = bgF; screen->render(); unsigned char *Buffer = editZ->getBuff(); int b = editZ->getBreite() * 10; int fc = fgF & 0x00FFFFFF; for( int i = 0; i < editZ->getBreite() * editZ->getHeight(); i++ ) { for( int i1 = 0; i1 < 100; i1++ ) rObj->alphaPixel2D( ( ( i * 10 ) % b ) + ( i1 % 10 ), ( ( ( i * 10 ) / b ) * 10 ) + ( i1 / 10 ), fc | ( Buffer[ i ] << 24 ) ); } rObj->release(); screen->render(); screen->release(); } }