Start.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. #include <Fenster.h>
  2. #include <iostream>
  3. #include <Text.h>
  4. #include <Punkt.h>
  5. #include <DateiSystem.h>
  6. #include <Datei.h>
  7. #include <Schrift.h>
  8. #include <Bildschirm.h>
  9. #include <MausEreignis.h>
  10. #include <Bild.h>
  11. using namespace Framework;
  12. using namespace std;
  13. #define AE (unsigned char)142
  14. #define ae (unsigned char)132
  15. #define OE (unsigned char)153
  16. #define oe (unsigned char)148
  17. #define UE (unsigned char)154
  18. #define ue (unsigned char)129
  19. #define ss (unsigned char)225
  20. void UserInputThread();
  21. void PrintHelp( Text *txt );
  22. void loadschrift( Text *txt );
  23. void listgrößen();
  24. void delgröße( Text *txt );
  25. void listzeichen( Text *txt );
  26. void editzeichen( Text *txt );
  27. void endedit();
  28. void saveedit( Text *txt );
  29. void delzeichen( Text *txt );
  30. void setalpha( Text *txt );
  31. void setfg( Text *txt );
  32. void setbg( Text *txt );
  33. void endedit();
  34. void saveedit( Text *txt );
  35. void draw();
  36. bool editFMaus( void *p, void *fenster, MausEreignis me );
  37. DWORD WINAPI UserInputThread( LPVOID p );
  38. LTDSDatei *schrift;
  39. WFenster *editF;
  40. bool exitB = 0;
  41. bool MsgSleep = 1;
  42. Buchstabe *editZ;
  43. unsigned char alpha = 0;
  44. int bgF;
  45. int fgF;
  46. int main()
  47. {
  48. bgF = 0;
  49. fgF = 0xFFFFFFFF;
  50. WNDCLASS wc = F_Normal( GetModuleHandle( NULL ) );
  51. wc.lpszClassName = "LENCK - Tech Zeichen Edit Fenster";
  52. editF = new WFenster();
  53. editF->erstellen( WS_POPUP, wc );
  54. editF->setMausAktion( editFMaus );
  55. Bildschirm *screen = new Bildschirm3D( editF->getThis() );
  56. screen->setRenderZeichnungen( 0 );
  57. screen->setdeckFarbe( 0 );
  58. screen->setFill( 0 );
  59. screen->setTestRend( 0 );
  60. editF->setBildschirm( screen );
  61. std::locale::global( std::locale( "German_germany" ) );
  62. schrift = new LTDSDatei();
  63. HWND hWnd = GetConsoleWindow();
  64. WFenster *console = new WFenster( hWnd );
  65. console->setSize( 600, 400 );
  66. console->setPosition( Bildschirmmitte( console->getThis() ) );
  67. CreateThread( NULL, 0, UserInputThread, 0, 0, NULL );
  68. MSG msg = {};
  69. while( msg.message != WM_QUIT )
  70. {
  71. if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
  72. {
  73. TranslateMessage( &msg );
  74. DispatchMessage( &msg );
  75. }
  76. else if( exitB )
  77. break;
  78. if( MsgSleep )
  79. Sleep( 1000 );
  80. }
  81. console->setFensterHandle( 0 );
  82. console->release();
  83. schrift->release();
  84. editF->release();
  85. screen->release();
  86. return 0;
  87. }
  88. DWORD WINAPI UserInputThread( LPVOID p )
  89. {
  90. cout << "Willkommen beim LENCK - Tech Schrift Editor! \nprogrammiert von Kolja Strohm\nSchreibe \\? für Hilfe.\n";
  91. Text *UserMessage = new Text();
  92. char c[ 255 ];
  93. while( 1 )
  94. {
  95. cout << "LTDSEditor->";
  96. cin.getline( c, 255, '\n' );
  97. UserMessage->setText( c );
  98. if( !UserMessage->positionVon( "\\?" ) )
  99. PrintHelp( UserMessage->getTeilText( 3 ) );
  100. else if( !UserMessage->positionVon( "loadschrift" ) )
  101. loadschrift( UserMessage->getTeilText( 12 ) );
  102. else if( UserMessage->istGleich( "listgr\x94áen" ) )
  103. listgrößen();
  104. else if( !UserMessage->positionVon( "delgr\x94áe" ) )
  105. delgröße( UserMessage->getTeilText( 9 ) );
  106. else if( !UserMessage->positionVon( "listzeichen" ) )
  107. listzeichen( UserMessage->getTeilText( 12 ) );
  108. else if( !UserMessage->positionVon( "editzeichen" ) )
  109. editzeichen( UserMessage->getTeilText( 12 ) );
  110. else if( UserMessage->istGleich( "endedit" ) )
  111. endedit();
  112. else if( !UserMessage->positionVon( "saveedit" ) )
  113. saveedit( UserMessage->getTeilText( 9 ) );
  114. else if( !UserMessage->positionVon( "delzeichen" ) )
  115. delzeichen( UserMessage->getTeilText( 11 ) );
  116. else if( !UserMessage->positionVon( "setalpha" ) )
  117. setalpha( UserMessage->getTeilText( 9 ) );
  118. else if( !UserMessage->positionVon( "setfg" ) )
  119. setfg( UserMessage->getTeilText( 6 ) );
  120. else if( !UserMessage->positionVon( "setbg" ) )
  121. setbg( UserMessage->getTeilText( 6 ) );
  122. else if( UserMessage->istGleich( "exit" ) )
  123. {
  124. exitB = true;
  125. break;
  126. }
  127. else
  128. cout << "Geben sie \\? ein, um eine Befehlsübersicht zu erhalten.\n";
  129. }
  130. UserMessage->release();
  131. return 0;
  132. }
  133. void PrintHelp( Text *txt )
  134. {
  135. if( txt->getLength() == 0 )
  136. {
  137. cout << "----++Befehle++----\n";
  138. cout << " loadschrift <LTDS Datei Pfad>\n";
  139. cout << " listgrößen\n";
  140. cout << " delgröße <größe>\n";
  141. cout << " listzeichen <größe>\n";
  142. cout << " editzeichen <größe> <Zeichen Nummer>\n";
  143. cout << " endedit\n";
  144. cout << " saveedit <größe> <Zeichen Nummer>\n";
  145. cout << " delzeichen <größe> <Zeichen Nummer>\n";
  146. cout << " setalpha <alpha>\n";
  147. cout << " setbg <r> <g> <b>\n";
  148. cout << " setfg <r> <g> <b>\n";
  149. cout << " exit\n";
  150. cout << "----++Ende++----\n";
  151. }
  152. else if( txt->istGleich( "loadschrift" ) )
  153. {
  154. cout << " loadschrift <LTDS Datei Pfad>\n";
  155. cout << "L" << ae << "d die Schrift aus dem angegebenen Pfad ein.\n";
  156. }
  157. else if( txt->istGleich( "listgr\x94áen" ) )
  158. {
  159. cout << " listgrößen\n";
  160. cout << "Gibt eine Liste mit in der Schrift gespeicherten Schriftgrößen wieder.\n";
  161. }
  162. else if( txt->istGleich( "delgr\x94áen" ) )
  163. {
  164. cout << " delgröße <größe>\n";
  165. cout << "L" << oe << "scht die angegebene Schriftgröße.\n";
  166. }
  167. else if( txt->istGleich( "listzZeichen" ) )
  168. {
  169. cout << " listzeichen <größe>\n";
  170. cout << "Gibt eine Liste mit in einer Schriftgröße enthaltenen Zeichen wieder.\n";
  171. }
  172. else if( txt->istGleich( "editzeichen" ) )
  173. {
  174. cout << " editzeichen <größe> <Zeichen Nummer>\n";
  175. cout << "Öffnet ein Editorfenster, in dem das angegebene Zeichen bearbeitet werden kann.\n";
  176. }
  177. else if( txt->istGleich( "saveedit" ) )
  178. {
  179. cout << " saveedit <größe> <Zeichen Nummer>\n";
  180. cout << "Speichert den geöffneten Buchstaben unter der angegebenen Größe und Zeichennummer.\n";
  181. }
  182. else if( txt->istGleich( "endedit" ) )
  183. {
  184. cout << " endedit\n";
  185. cout << "Beendet das Editorfenster.\n";
  186. }
  187. else if( txt->istGleich( "delzeichen" ) )
  188. {
  189. cout << " delzeichen <größe> <Zeichen Nummer>\n";
  190. cout << "Löscht das angegebene Zeichen.\n";
  191. }
  192. else if( txt->istGleich( "setalpha" ) )
  193. {
  194. cout << " setalpha <alpha>\n";
  195. cout << "Setzt den Editor - Alphawert.\n";
  196. }
  197. else if( txt->istGleich( "setbg" ) )
  198. {
  199. cout << " setbg <r> <g> <b>\n";
  200. cout << "Setzt den Editor - Hintergrund.\n";
  201. }
  202. else if( txt->istGleich( "setfg" ) )
  203. {
  204. cout << " setfg <r> <g> <b>\n";
  205. cout << "Setzt den Editor - Fordergrund.\n";
  206. }
  207. else if( txt->istGleich( "exit" ) )
  208. {
  209. cout << " exit\n";
  210. cout << "Schließt das Programm.\n";
  211. }
  212. else
  213. cout << "Geben sie \\? ein, um eine Befehlsübersicht zu erhalten.\n";
  214. txt->release();
  215. }
  216. void loadschrift( Text *txt )
  217. {
  218. schrift->setPfad( txt->getThis() );
  219. if( !DateiExistiert( txt->getThis() ) )
  220. schrift->erstelleDatei();
  221. schrift->leseDaten();
  222. cout << schrift->getAnzahlSchriftgrößen() << " Schriftgrößen wurden gefunden.\n";
  223. txt->release();
  224. }
  225. void listgrößen()
  226. {
  227. unsigned char *gr = schrift->getSchriftGrößen();
  228. cout << "----++Schriftgrößen++----\n";
  229. for( int i = 0; i < schrift->getAnzahlSchriftgrößen(); i++ )
  230. cout << (int)gr[ i ] << endl;
  231. cout << "Es wurden " << schrift->getAnzahlSchriftgrößen() << " Schriftgrößen gefunden.\n";
  232. cout << "----++Ende++----\n";
  233. }
  234. void delgröße( Text *txt )
  235. {
  236. schrift->löscheSchrifrGröße( TextZuInt( txt->getText(), 10 ) );
  237. cout << "Die Schriftgröße " << txt->getText() << " wurde gelöscht.\n";
  238. txt->release();
  239. }
  240. void listzeichen( Text *txt )
  241. {
  242. cout << "----++Zeichen++----\n";
  243. unsigned char anz = schrift->getAnzahlBuchstaben( TextZuInt( txt->getText(), 10 ) );
  244. unsigned char *z = schrift->getBuchstaben( TextZuInt( txt->getText(), 10 ) );
  245. if( z )
  246. {
  247. for( int i = 0; i < anz; i++ )
  248. {
  249. cout << (char)z[ i ] << " " << (int)z[ i ] << endl;
  250. }
  251. cout << "Es wurden " << (int)anz << " Zeichen gefunden.\n";
  252. }
  253. else
  254. cout << "Die angegebene Schriftgröße existiert nicht.\n";
  255. cout << "----++Ende++----\n";
  256. txt->release();
  257. }
  258. void editzeichen( Text *txt )
  259. {
  260. if( MsgSleep )
  261. {
  262. MsgSleep = 0;
  263. Text *größe = txt->getTeilText( 0, txt->positionVon( ' ' ) );
  264. Text *zeich = txt->getTeilText( txt->positionVon( ' ' ) + 1 );
  265. editZ = schrift->ladeBuchstabe( TextZuInt( größe->getText(), 10 ), TextZuInt( zeich->getText(), 10 ) );
  266. if( !editZ )
  267. {
  268. int br = 0, hö = 0;
  269. cout << "Das eingegebene Zeichen existiert noch nicht.\nBitte gebe die Breite ein:";
  270. cin >> br;
  271. cout << "\nBitte gebe die Höhe ein:";
  272. cin >> hö;
  273. if( br < 0 || hö < 0 || br > 255 || hö > 255 )
  274. {
  275. cout << "Error: Die breite oder die Höhe liegt nicht zwischen 0 und 255!\n";
  276. größe->release();
  277. zeich->release();
  278. txt->release();
  279. MsgSleep = 1;
  280. return;
  281. }
  282. cout << "Erfolg.\n";
  283. editZ = new Buchstabe();
  284. editZ->NeuBuchstabe( Punkt( br, hö ) );
  285. }
  286. zeich->release();
  287. größe->release();
  288. unsigned char *Buffer = editZ->getBuff();
  289. editF->setSize( editZ->getBreite() * 10 + 1, editZ->getHeight() * 10 + 1 );
  290. Bildschirm *screen = editF->getBildschirm();
  291. editF->setPosition( Bildschirmmitte( editF->getThis() ) );
  292. editF->setAnzeigeModus( 1 );
  293. screen->update();
  294. Bild *rObj = screen->getRenderBild();
  295. fgF = 0xFFFFFFFF;
  296. int a2 = 255 - ( fgF >> 24 );
  297. int fc = fgF & 0x00FFFFFF;
  298. for( int i = 0; i < editZ->getBreite() * editZ->getHeight(); i++ )
  299. {
  300. for( int i1 = 0; i1 < 100; i1++ )
  301. rObj->alphaPixel2D( ( ( i * 10 ) % ( editZ->getBreite() * 10 ) ) + ( i1 % 10 ), ( ( ( i * 10 ) / ( editZ->getBreite() * 10 ) ) * 10 ) + ( i1 / 10 ), fc | ( ( Buffer[ i ] - a2 ) << 24 ) );
  302. screen->render();
  303. }
  304. screen->render();
  305. rObj->release();
  306. screen->release();
  307. }
  308. else
  309. cout << "Error: Du musst das Editfenster zuvor mit 'endedit' beenden.\n";
  310. txt->release();
  311. }
  312. void saveedit( Text *txt )
  313. {
  314. if( !MsgSleep )
  315. {
  316. Text *größe = txt->getTeilText( 0, txt->positionVon( ' ' ) );
  317. Text *zeich = txt->getTeilText( txt->positionVon( ' ' ) + 1 );
  318. schrift->löscheBuchstabe( TextZuInt( größe->getText(), 10 ), TextZuInt( zeich->getText(), 10 ) );
  319. schrift->addBuchstabe( TextZuInt( größe->getText(), 10 ), editZ->getThis(), TextZuInt( zeich->getText(), 10 ) );
  320. zeich->release();
  321. größe->release();
  322. }
  323. else
  324. cout << "Error: Der Editor ist nicht geöffnet.\n";
  325. txt->release();
  326. }
  327. void endedit()
  328. {
  329. if( !MsgSleep )
  330. {
  331. editZ = editZ->release();
  332. editF->setAnzeigeModus( 0 );
  333. MsgSleep = 1;
  334. }
  335. else
  336. cout << "Error: Der Editor ist nicht geöffnet.\n";
  337. }
  338. void delzeichen( Text *txt )
  339. {
  340. Text *gr = txt->getTeilText( 0, txt->positionVon( ' ' ) );
  341. Text *z = txt->getTeilText( txt->positionVon( ' ' ) + 1 );
  342. schrift->löscheBuchstabe( TextZuInt( gr->getText(), 10 ), TextZuInt( z->getText(), 10 ) );
  343. cout << "Das Zeichen " << z->getText() << " wurde aus der Schriftgröße " << gr->getText() << " gelöscht.\n";
  344. gr->release();
  345. z->release();
  346. txt->release();
  347. }
  348. void setalpha( Text *txt )
  349. {
  350. alpha = (unsigned char)TextZuInt( txt->getText(), 10 );
  351. txt->release();
  352. }
  353. void setfg( Text *txt )
  354. {
  355. if( !MsgSleep )
  356. {
  357. Text *r = txt->getTeilText( 0, txt->positionVon( ' ' ) );
  358. Text *g = txt->getTeilText( txt->positionVon( ' ' ) + 1, txt->positionVon( ' ', 1 ) );
  359. Text *b = txt->getTeilText( txt->positionVon( ' ', 1 ) + 1 );
  360. fgF = ( ( (int)*r & 0xFF ) << 16 ) | ( ( (int)*g & 0xFF ) << 8 ) | ( (int)*b & 0xFF );
  361. r->release();
  362. g->release();
  363. b->release();
  364. draw();
  365. }
  366. else
  367. cout << "Error: Der Editor ist nicht geöffnet.\n";
  368. txt->release();
  369. }
  370. void setbg( Text *txt )
  371. {
  372. if( !MsgSleep )
  373. {
  374. Text *r = txt->getTeilText( 0, txt->positionVon( ' ' ) );
  375. Text *g = txt->getTeilText( txt->positionVon( ' ' ) + 1, txt->positionVon( ' ', 1 ) );
  376. Text *b = txt->getTeilText( txt->positionVon( ' ', 1 ) + 1 );
  377. bgF = 0xFF000000 | ( ( (int)*r & 0xFF ) << 16 ) | ( ( (int)*g & 0xFF ) << 8 ) | ( (int)*b & 0xFF );
  378. r->release();
  379. g->release();
  380. b->release();
  381. draw();
  382. }
  383. else
  384. cout << "Error: Der Editor ist nicht geöffnet.\n";
  385. txt->release();
  386. }
  387. bool editFMaus( void *p, void *fenster, MausEreignis me )
  388. {
  389. switch( me.id )
  390. {
  391. case ME_PLinks:
  392. if( 1 )
  393. {
  394. if( !MsgSleep )
  395. {
  396. Bildschirm *screen = ((WFenster*)fenster)->getBildschirm();
  397. Bild *rObj = screen->getRenderBild();
  398. int x = me.mx / 10;
  399. int y = me.my / 10;
  400. int fc = fgF & 0x00FFFFFF;
  401. unsigned char *Buffer = editZ->getBuff();
  402. int i = x + y * editZ->getBreite();
  403. Buffer[ i ] = alpha;
  404. rObj->fillRegion( x * 10, y * 10, 10, 10, bgF );
  405. screen->render();
  406. for( int i1 = 0; i1 < 100; i1++ )
  407. rObj->alphaPixel2D( ( x * 10 ) + ( i1 % 10 ), ( y * 10 ) + ( i1 / 10 ), fc | ( alpha << 24 ) );
  408. rObj->release();
  409. screen->render();
  410. screen->release();
  411. }
  412. }
  413. break;
  414. }
  415. return 1;
  416. }
  417. void draw()
  418. {
  419. if( !MsgSleep )
  420. {
  421. Bildschirm *screen = editF->getBildschirm();
  422. Bild *rObj = screen->getRenderBild();
  423. int *ObjBuff = rObj->getBuffer();
  424. int bh = rObj->getBreite() * rObj->getHeight();
  425. for( int i = 0; i < bh; i++ )
  426. ObjBuff[ i ] = bgF;
  427. screen->render();
  428. unsigned char *Buffer = editZ->getBuff();
  429. int b = editZ->getBreite() * 10;
  430. int fc = fgF & 0x00FFFFFF;
  431. for( int i = 0; i < editZ->getBreite() * editZ->getHeight(); i++ )
  432. {
  433. for( int i1 = 0; i1 < 100; i1++ )
  434. rObj->alphaPixel2D( ( ( i * 10 ) % b ) + ( i1 % 10 ), ( ( ( i * 10 ) / b ) * 10 ) + ( i1 / 10 ), fc | ( Buffer[ i ] << 24 ) );
  435. }
  436. rObj->release();
  437. screen->render();
  438. screen->release();
  439. }
  440. }