123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- #include <Fenster.h>
- #include <iostream>
- #include <Text.h>
- #include <Punkt.h>
- #include <DateiSystem.h>
- #include <Datei.h>
- #include <Schrift.h>
- #include <Bildschirm.h>
- #include <MausEreignis.h>
- #include <Bild.h>
- 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 <LTDS Datei Pfad>\n";
- cout << " listgrößen\n";
- cout << " delgröße <größe>\n";
- cout << " listzeichen <größe>\n";
- cout << " editzeichen <größe> <Zeichen Nummer>\n";
- cout << " endedit\n";
- cout << " saveedit <größe> <Zeichen Nummer>\n";
- cout << " delzeichen <größe> <Zeichen Nummer>\n";
- cout << " setalpha <alpha>\n";
- cout << " setbg <r> <g> <b>\n";
- cout << " setfg <r> <g> <b>\n";
- cout << " exit\n";
- cout << "----++Ende++----\n";
- }
- else if( txt->istGleich( "loadschrift" ) )
- {
- cout << " loadschrift <LTDS Datei Pfad>\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 <größe>\n";
- cout << "L" << oe << "scht die angegebene Schriftgröße.\n";
- }
- else if( txt->istGleich( "listzZeichen" ) )
- {
- cout << " listzeichen <größe>\n";
- cout << "Gibt eine Liste mit in einer Schriftgröße enthaltenen Zeichen wieder.\n";
- }
- else if( txt->istGleich( "editzeichen" ) )
- {
- cout << " editzeichen <größe> <Zeichen Nummer>\n";
- cout << "Öffnet ein Editorfenster, in dem das angegebene Zeichen bearbeitet werden kann.\n";
- }
- else if( txt->istGleich( "saveedit" ) )
- {
- cout << " saveedit <größe> <Zeichen Nummer>\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 <größe> <Zeichen Nummer>\n";
- cout << "Löscht das angegebene Zeichen.\n";
- }
- else if( txt->istGleich( "setalpha" ) )
- {
- cout << " setalpha <alpha>\n";
- cout << "Setzt den Editor - Alphawert.\n";
- }
- else if( txt->istGleich( "setbg" ) )
- {
- cout << " setbg <r> <g> <b>\n";
- cout << "Setzt den Editor - Hintergrund.\n";
- }
- else if( txt->istGleich( "setfg" ) )
- {
- cout << " setfg <r> <g> <b>\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();
- }
- }
|