Index: console/Makefile
===================================================================
--- console/Makefile	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ console/Makefile	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -48,5 +48,6 @@
 	gcons.c
 
-IMAGES = helenos.ppm nameic.ppm
+IMAGES = helenos.ppm nameic.ppm cons_selected.ppm cons_idle.ppm \
+	cons_has_data.ppm cons_kernel.ppm
 
 ARCH_SOURCES = 
Index: console/cons_has_data.ppm
===================================================================
--- console/cons_has_data.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
+++ console/cons_has_data.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -0,0 +1,5 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿûûÿõõÿëëÿââÿÜÜÿ××ÿÔÔÿÓÓÿÔÔÿ××ÿÜÜÿââÿëëÿõõÿûûÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿ÷÷ÿééÿ××ÿ¸¸ÿÿyyÿggÿ[[ÿUUÿSSÿTTÿ[[ÿggÿyyÿÿ¸¸ÿ××ÿééÿ÷÷ÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿ÷÷ÿääÿÃÃÿÿddÿSSÿ\\ÿvvÿÿ³³ÿÆÆÿÎÎÿÇÇÿ³³ÿÿvvÿ\\ÿSSÿddÿÿÃÃÿääÿ÷÷ÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿúúÿêêÿÇÇÿÿVVÿ__ÿÿÈÈÿØØÿááÿêêÿòòÿøøÿúúÿøøÿòòÿêêÿááÿØØÿÈÈÿÿ__ÿVVÿÿÇÇÿêêÿúúÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿøøÿÚÚÿÿ]]ÿddÿ££ÿÒÒÿééÿøøÿûûÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿøøÿééÿÓÓÿ¤¤ÿddÿ]]ÿÿÚÚÿøøÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿõõÿÐÐÿ}}ÿZZÿÿÐÐÿïïÿúúÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿúúÿïïÿÐÐÿÿZZÿ}}ÿÏÏÿõõÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿóóÿÅÅÿppÿiiÿ¿¿ÿççÿøøÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿøøÿèèÿÀÀÿiiÿooÿÄÄÿóóÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿööÿÅÅÿjjÿnnÿÈÈÿôôÿûûÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿõõÿÉÉÿnnÿjjÿÄÄÿõõÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿøøÿÐÐÿooÿnnÿËËÿööÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿööÿËËÿnnÿooÿÐÐÿøøÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿúúÿÚÚÿ}}ÿhhÿÈÈÿööÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿööÿÈÈÿhhÿ}}ÿÚÚÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿëëÿÿ[[ÿ¿¿ÿõõÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿõõÿ¿¿ÿ[[ÿÿêêÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿøøÿÇÇÿ\\ÿÿèèÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿèèÿÿ\\ÿÇÇÿ÷÷ÿüüÿýýÿýýÿýýÿýýÿýýÿüüÿååÿÿddÿÏÏÿøøÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿùùÿÏÏÿddÿÿääÿüüÿüüÿýýÿýýÿýýÿýýÿøøÿÄÄÿVVÿ££ÿîîÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿïïÿ££ÿVVÿÃÃÿ÷÷ÿüüÿýýÿýýÿýýÿýýÿêêÿÿ^^ÿÓÓÿúúÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿûûÿÓÓÿ^^ÿÿééÿüüÿýýÿýýÿýýÿûûÿ××ÿddÿÿééÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿééÿÿddÿ××ÿûûÿüüÿýýÿýýÿõõÿ¸¸ÿRRÿÈÈÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿÈÈÿRRÿ¸¸ÿõõÿüüÿýýÿýýÿììÿÿ\\ÿØØÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿØØÿ\\ÿÿëëÿüüÿýýÿýýÿããÿyyÿvvÿááÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿââÿvvÿyyÿââÿüüÿýýÿýýÿÜÜÿggÿÿëëÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿëëÿÿggÿÜÜÿüüÿýýÿýýÿ××ÿ[[ÿ²²ÿóóÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿóóÿ²²ÿ[[ÿ××ÿüüÿýýÿýýÿÔÔÿUUÿÇÇÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿÇÇÿUUÿÔÔÿüüÿýýÿýýÿÓÓÿSSÿÎÎÿûûÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿûûÿÎÎÿSSÿÓÓÿüüÿýýÿýýÿÔÔÿUUÿÇÇÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿÇÇÿUUÿÔÔÿüüÿýýÿýýÿ××ÿ[[ÿ³³ÿóóÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿôôÿ³³ÿ[[ÿ××ÿüüÿýýÿýýÿÜÜÿggÿÿëëÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿëëÿÿggÿÜÜÿüüÿýýÿýýÿããÿyyÿvvÿááÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿââÿvvÿyyÿââÿüüÿýýÿýýÿëëÿÿ\\ÿÙÙÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿÙÙÿ\\ÿÿëëÿüüÿýýÿýýÿõõÿ¸¸ÿSSÿÈÈÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿÈÈÿSSÿ¸¸ÿõõÿüüÿýýÿýýÿûûÿ××ÿddÿÿêêÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿêêÿÿddÿ××ÿûûÿüüÿýýÿýýÿüüÿééÿÿ__ÿÓÓÿúúÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿûûÿÓÓÿ__ÿÿèèÿüüÿüüÿýýÿýýÿýýÿ÷÷ÿÃÃÿUUÿ¤¤ÿïïÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿððÿ¤¤ÿUUÿÃÃÿ÷÷ÿüüÿýýÿýýÿýýÿýýÿüüÿååÿÿddÿÐÐÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿÐÐÿddÿÿääÿüüÿüüÿýýÿýýÿýýÿýýÿüüÿ÷÷ÿÇÇÿ\\ÿÿèèÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿééÿÿ\\ÿÆÆÿööÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿüüÿëëÿÿ[[ÿÀÀÿööÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿööÿÀÀÿ[[ÿÿêêÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿùùÿÚÚÿ}}ÿiiÿÉÉÿ÷÷ÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿ÷÷ÿÉÉÿiiÿ}}ÿÚÚÿùùÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿøøÿÐÐÿooÿnnÿËËÿ÷÷ÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿ÷÷ÿËËÿnnÿooÿÏÏÿ÷÷ÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿõõÿÄÄÿjjÿnnÿÉÉÿõõÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿööÿÉÉÿnnÿjjÿÃÃÿôôÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿòòÿÄÄÿooÿiiÿ¿¿ÿèèÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿééÿÀÀÿiiÿooÿÃÃÿòòÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿûûÿôôÿÐÐÿ}}ÿZZÿÿÐÐÿïïÿûûÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿûûÿïïÿÐÐÿÿZZÿ}}ÿÏÏÿôôÿûûÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿ÷÷ÿÚÚÿÿ]]ÿddÿ££ÿÓÓÿêêÿùùÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿùùÿêêÿÔÔÿ¤¤ÿddÿ]]ÿÿÚÚÿ÷÷ÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿùùÿêêÿÇÇÿÿVVÿ__ÿÿÈÈÿÙÙÿââÿëëÿóóÿùùÿûûÿùùÿóóÿëëÿââÿÙÙÿÈÈÿÿ__ÿVVÿÿÇÇÿêêÿùùÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿûûÿ÷÷ÿääÿÃÃÿÿddÿSSÿ\\ÿvvÿÿ³³ÿÆÆÿÎÎÿÇÇÿ³³ÿÿvvÿ\\ÿSSÿddÿÿÃÃÿääÿööÿûûÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿûûÿööÿééÿ××ÿ¸¸ÿÿyyÿggÿ[[ÿUUÿSSÿTTÿ[[ÿggÿyyÿÿ··ÿÖÖÿééÿööÿûûÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿüüÿúúÿôôÿëëÿââÿÛÛÿ××ÿÔÔÿÓÓÿÔÔÿ××ÿÛÛÿââÿëëÿôôÿúúÿûûÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿüüÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýýÿýý
Index: console/cons_idle.ppm
===================================================================
--- console/cons_idle.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
+++ console/cons_idle.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -0,0 +1,5 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûõõõëëëâââÜÜÜ×××ÔÔÔÓÓÓÔÔÔ×××ÜÜÜâââëëëõõõûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷ééé×××¸¸¸yyyggg[[[UUUSSSTTT[[[gggyyy¸¸¸×××ééé÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüü÷÷÷äääÃÃÃdddSSS\\\vvv³³³ÆÆÆÎÎÎÇÇÇ³³³vvv\\\SSSdddÃÃÃäää÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúêêêÇÇÇVVV___ÈÈÈØØØáááêêêòòòøøøúúúøøøòòòêêêáááØØØÈÈÈ___VVVÇÇÇêêêúúúüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÚÚÚ]]]ddd£££ÒÒÒéééøøøûûûüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüøøøéééÓÓÓ¤¤¤ddd]]]ÚÚÚøøøüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüõõõÐÐÐ}}}ZZZÐÐÐïïïúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüúúúïïïÐÐÐZZZ}}}ÏÏÏõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüóóóÅÅÅpppiii¿¿¿çççøøøüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüøøøèèèÀÀÀiiioooÄÄÄóóóüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýöööÅÅÅjjjnnnÈÈÈôôôûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüõõõÉÉÉnnnjjjÄÄÄõõõüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýøøøÐÐÐooonnnËËËöööüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüöööËËËnnnoooÐÐÐøøøüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýúúúÚÚÚ}}}hhhÈÈÈöööüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööÈÈÈhhh}}}ÚÚÚùùùüüüýýýýýýýýýýýýýýýýýýýýýüüüëëë[[[¿¿¿õõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüõõõ¿¿¿[[[êêêüüüüüüýýýýýýýýýýýýýýýýýýøøøÇÇÇ\\\èèèüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüèèè\\\ÇÇÇ÷÷÷üüüýýýýýýýýýýýýýýýüüüååådddÏÏÏøøøüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüùùùÏÏÏdddäääüüüüüüýýýýýýýýýýýýøøøÄÄÄVVV£££îîîüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüïïï£££VVVÃÃÃ÷÷÷üüüýýýýýýýýýýýýêêê^^^ÓÓÓúúúüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûÓÓÓ^^^éééüüüýýýýýýýýýûûû×××dddéééüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüéééddd×××ûûûüüüýýýýýýõõõ¸¸¸RRRÈÈÈùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùÈÈÈRRR¸¸¸õõõüüüýýýýýýììì\\\ØØØüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüØØØ\\\ëëëüüüýýýýýýãããyyyvvváááüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýâââvvvyyyâââüüüýýýýýýÜÜÜgggëëëüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýëëëgggÜÜÜüüüýýýýýý×××[[[²²²óóóüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýóóó²²²[[[×××üüüýýýýýýÔÔÔUUUÇÇÇùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùÇÇÇUUUÔÔÔüüüýýýýýýÓÓÓSSSÎÎÎûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûÎÎÎSSSÓÓÓüüüýýýýýýÔÔÔUUUÇÇÇùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùÇÇÇUUUÔÔÔüüüýýýýýý×××[[[³³³óóóüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýôôô³³³[[[×××üüüýýýýýýÜÜÜgggëëëüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýëëëgggÜÜÜüüüýýýýýýãããyyyvvváááüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýâââvvvyyyâââüüüýýýýýýëëë\\\ÙÙÙüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýÙÙÙ\\\ëëëüüüýýýýýýõõõ¸¸¸SSSÈÈÈùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùÈÈÈSSS¸¸¸õõõüüüýýýýýýûûû×××dddêêêüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýêêêddd×××ûûûüüüýýýýýýüüüééé___ÓÓÓúúúüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûÓÓÓ___èèèüüüüüüýýýýýýýýý÷÷÷ÃÃÃUUU¤¤¤ïïïüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýððð¤¤¤UUUÃÃÃ÷÷÷üüüýýýýýýýýýýýýüüüååådddÐÐÐùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùÐÐÐdddäääüüüüüüýýýýýýýýýýýýüüü÷÷÷ÇÇÇ\\\èèèüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüééé\\\ÆÆÆöööüüüüüüýýýýýýýýýýýýýýýüüüëëë[[[ÀÀÀöööüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýöööÀÀÀ[[[êêêüüüüüüýýýýýýýýýýýýýýýýýýüüüùùùÚÚÚ}}}iiiÉÉÉ÷÷÷üüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý÷÷÷ÉÉÉiii}}}ÚÚÚùùùüüüüüüýýýýýýýýýýýýýýýýýýýýýüüüøøøÐÐÐooonnnËËË÷÷÷üüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý÷÷÷ËËËnnnoooÏÏÏ÷÷÷üüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüõõõÄÄÄjjjnnnÉÉÉõõõüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööÉÉÉnnnjjjÃÃÃôôôüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüòòòÄÄÄoooiii¿¿¿èèèùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùéééÀÀÀiiioooÃÃÃòòòüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôôÐÐÐ}}}ZZZÐÐÐïïïûûûüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýûûûïïïÐÐÐZZZ}}}ÏÏÏôôôûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüü÷÷÷ÚÚÚ]]]ddd£££ÓÓÓêêêùùùüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýùùùêêêÔÔÔ¤¤¤ddd]]]ÚÚÚ÷÷÷üüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüùùùêêêÇÇÇVVV___ÈÈÈÙÙÙâââëëëóóóùùùûûûùùùóóóëëëâââÙÙÙÈÈÈ___VVVÇÇÇêêêùùùüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûû÷÷÷äääÃÃÃdddSSS\\\vvv³³³ÆÆÆÎÎÎÇÇÇ³³³vvv\\\SSSdddÃÃÃäääöööûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûöööééé×××¸¸¸yyyggg[[[UUUSSSTTT[[[gggyyy···ÖÖÖéééöööûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüúúúôôôëëëâââÛÛÛ×××ÔÔÔÓÓÓÔÔÔ×××ÛÛÛâââëëëôôôúúúûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý
Index: console/cons_selected.ppm
===================================================================
--- console/cons_selected.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
+++ console/cons_selected.ppm	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -0,0 +1,143 @@
+P6
+# CREATOR: The GIMP's PNM Filter Version 1.0
+48 48
+255
+ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûúúúøøøõõõðððìììèèèæææäääääääääæææèèèìììðððôôôøøøúúúûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûùùùõõõîîîåååÙÙÙÌÌÌÀÀÀ¶¶¶¯¯¯«««©©©«««¯¯¯¶¶¶ÀÀÀÌÌÌÙÙÙåååîîîõõõùùùûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûùùùôôôêêêÛÛÛÈÈÈ²²²uuuhhh^^^XXXUUUXXX^^^ggguuu²²²ÇÇÇÛÛÛêêêôôôùùùûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüúúúöööìììÛÛÛÁÁÁ£££gggOOO>>>111((("""
+
+
+
+
+
+
+
+
+"""(((111>>>OOOfff¢¢¢ÁÁÁÚÚÚìììöööúúúüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüùùùòòòâââÈÈÈ¥¥¥~~~ZZZ===***
+
+
+
+
+
+)))===ZZZ~~~¥¥¥ÈÈÈâââòòòùùùüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüøøøïïïÚÚÚ···```<<<$$$
+
+
+'''555BBBLLLQQQRRRQQQLLLBBB555'''
+
+
+$$$<<<___···ÚÚÚïïïøøøûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüøøøîîîÕÕÕ¬¬¬zzzKKK***###666LLLccczzz¤¤¤¦¦¦¤¤¤zzzcccLLL666###)))JJJyyy¬¬¬ÕÕÕíííøøøüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýüüüüüüùùùîîîÓÓÓ¦¦¦ooo???      777WWWzzz°°°ÃÃÃÒÒÒÜÜÜáááâââáááÜÜÜÒÒÒÃÃÃ°°°zzzWWW777      ???ooo¥¥¥ÒÒÒíííùùùüüüüüüüüüýýýýýýýýýýýýýýýüüüüüüúúúïïïÕÕÕ¦¦¦lll:::
+
+
++++MMMwwwÀÀÀ×××äääìììòòòõõõ÷÷÷øøø÷÷÷õõõòòòíííååå×××ÀÀÀwwwMMM+++
+
+
+:::lll¥¥¥ÕÕÕïïïùùùüüüüüüüüüýýýýýýýýýüüüüüüúúúòòòÛÛÛ¬¬¬ppp:::
+
+
+222^^^ºººØØØêêêóóó÷÷÷ùùùúúúûûûûûûûûûûûûûûûúúúùùùøøøóóóêêêØØØººº^^^333
+
+
+:::ooo¬¬¬ÚÚÚòòòúúúüüüüüüüüüýýýýýýüüüüüüöööããã···zzz???
+
+
+555fffÉÉÉåååòòòøøøûûûûûûûûûüüüüüüüüüüüüüüüüüüüüüûûûûûûûûûøøøóóóåååÊÊÊggg666
+
+
+???yyy···âââöööûûûüüüüüüýýýüüüüüüùùùìììÈÈÈKKK   222fff¡¡¡ÐÐÐëëëöööúúúûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýüüüüüüüüüüüüûûûúúúöööëëëÐÐÐ¢¢¢fff222   JJJÈÈÈìììùùùüüüüüüüüüüüüûûûôôôÛÛÛ¥¥¥```******^^^ÐÐÐíííøøøûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûøøøíííÑÑÑ^^^******```¥¥¥ÚÚÚôôôûûûüüüüüüüüüùùùêêêÂÂÂ~~~<<<   MMMÉÉÉëëëøøøûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûøøøëëëÊÊÊMMM   <<<~~~ÁÁÁêêêùùùüüüüüüüüüõõõÛÛÛ£££ZZZ$$$777wwwºººåååöööûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûöööåååºººwww777$$$ZZZ£££ÛÛÛõõõûûûüüüúúúîîîÈÈÈ>>>###WWWØØØòòòûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûóóóØØØWWW###>>>ÈÈÈîîîúúúüüüøøøååå²²²ggg)))666zzzÀÀÀêêêøøøüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüùùùêêêÀÀÀzzz666)))fff²²²åååøøøüüüõõõÙÙÙPPP
+
+
+
+
+
+MMMÖÖÖóóóûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûóóó×××MMM
+
+
+
+
+
+PPPÙÙÙôôôûûûñññÌÌÌ>>>(((ddd°°°äääøøøüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüøøøååå±±±ddd(((>>>ÌÌÌðððûûûìììÀÀÀvvv222666{{{ÃÃÃíííúúúüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúíííÃÃÃ{{{666222vvvÀÀÀìììúúúééé···hhh)))CCCÒÒÒòòòûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûòòòÒÒÒCCC)))hhh¶¶¶éééùùùççç°°°^^^###
+
+
+MMMÜÜÜöööüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüöööÜÜÜMMM
+
+
+###^^^¯¯¯æææùùùååå«««XXX
+
+
+RRR¤¤¤áááøøøüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøááá¥¥¥RRR
+
+
+XXX«««åååùùùåååªªªVVV
+
+
+
+
+
+SSS¦¦¦âââøøøüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøããã§§§SSS
+
+
+
+
+
+VVVªªªäääùùùååå«««XXX
+
+
+RRR¤¤¤áááøøøüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøááá¥¥¥RRR
+
+
+XXX«««åååùùùççç°°°^^^###
+
+
+MMMÜÜÜöööüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüöööÜÜÜMMM
+
+
+###^^^¯¯¯æææùùùééé···hhh)))CCCÒÒÒòòòûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûóóóÒÒÒCCC)))hhh¶¶¶éééùùùìììÀÀÀvvv222666{{{ÃÃÃíííúúúüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüúúúíííÃÃÃ{{{666222vvvÀÀÀìììúúúñññÌÌÌ>>>(((ddd±±±åååøøøüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüøøøååå±±±ddd(((>>>ÌÌÌðððûûûõõõÙÙÙPPP
+
+
+
+
+
+MMM×××óóóûûûüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüûûûôôô×××MMM
+
+
+
+
+
+PPPÙÙÙôôôûûûøøøååå²²²ggg***777zzzÀÀÀêêêùùùüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüùùùêêêÀÀÀzzz777***fff²²²åååøøøüüüúúúîîîÈÈÈ===###XXXØØØòòòûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûûóóóØØØ   XXX###===ÈÈÈîîîúúúüüüüüüõõõÛÛÛ£££ZZZ$$$888xxxºººååå÷÷÷üüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüü÷÷÷åååºººxxx888$$$ZZZ£££ÛÛÛõõõûûûüüüüüüùùùêêêÁÁÁ~~~;;;   MMMÊÊÊëëëøøøûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüøøøëëëÊÊÊMMM   ;;;}}}ÁÁÁêêêùùùüüüüüüüüüûûûôôôÚÚÚ¥¥¥___)))+++^^^ÑÑÑíííøøøüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüøøøíííÑÑÑ___+++)))___¤¤¤ÚÚÚôôôûûûüüüüüüüüüüüüùùùìììÈÈÈJJJ   333ggg¢¢¢ÑÑÑëëë÷÷÷ûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüûûû÷÷÷ëëëÑÑÑ£££ggg333   JJJÇÇÇìììùùùüüüüüüüüüüüüüüüûûûöööâââ···yyy???
+
+
+555gggÊÊÊåååóóóùùùûûûüüüüüüüüüüüüýýýýýýýýýýýýüüüüüüüüüûûûùùùóóóåååÊÊÊggg666
+
+
+???yyy···âââõõõûûûüüüüüüüüüýýýüüüüüüúúúòòòÚÚÚ¬¬¬ooo:::
+
+
+222^^^ºººØØØêêêóóóøøøúúúûûûûûûüüüüüüüüüûûûûûûúúúøøøóóóêêêØØØººº^^^333
+
+
+999ooo¬¬¬ÚÚÚòòòúúúüüüüüüüüüýýýýýýüüüüüüüüüùùùïïïÕÕÕ¥¥¥lll:::
+
+
++++MMMwwwÀÀÀ×××äääíííòòòöööøøøøøøøøøöööòòòíííååå×××ÀÀÀ   xxxNNN+++
+
+
+:::kkk¥¥¥ÔÔÔïïïùùùüüüüüüüüüüüüýýýýýýýýýüüüüüüüüüøøøíííÒÒÒ¥¥¥ooo???      777WWWzzz°°°ÃÃÃÒÒÒÜÜÜáááãããáááÜÜÜÒÒÒÃÃÃ±±±zzzWWW777      ???ooo¥¥¥ÒÒÒíííøøøüüüüüüüüüüüüýýýýýýýýýýýýýýýüüüüüüûûûøøøíííÔÔÔ¬¬¬yyyKKK***###666MMMddd{{{¤¤¤¦¦¦¤¤¤{{{dddMMM666###)))JJJyyy«««ÔÔÔíííøøøûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüøøøïïïÚÚÚ···```<<<$$$
+
+
+'''555BBBLLLQQQRRRQQQLLLBBB555'''
+
+
+$$$<<<___···ÚÚÚïïïøøøûûûüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûùùùòòòâââÈÈÈ¥¥¥~~~ZZZ===***
+
+
+
+
+
+)))===YYY}}}¤¤¤ÇÇÇâââòòòùùùûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüüüüúúúõõõìììÚÚÚÁÁÁ£££gggOOO>>>111((("""
+
+
+
+
+
+
+
+
+"""(((111>>>OOOfff¢¢¢ÁÁÁÚÚÚëëëõõõúúúûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüûûûùùùóóóêêêÛÛÛÇÇÇ²²²uuuhhh^^^XXXUUUXXX^^^ggguuu²²²ÇÇÇÚÚÚéééóóóùùùûûûüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüüüüûûûøøøôôôîîîäääÙÙÙÌÌÌÀÀÀ¶¶¶¯¯¯«««©©©«««¯¯¯¶¶¶¿¿¿ÌÌÌÙÙÙäääîîîôôôøøøûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüüüüûûûûûûùùù÷÷÷ôôôðððìììèèèæææäääääääääæææèèèëëëðððôôô÷÷÷ùùùûûûûûûüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýüüüüüüüüüüüüüüüûûûûûûúúúúúúùùùùùùùùùùùùùùùùùùùùùúúúúúúûûûûûûüüüüüüüüüüüüüüüüüüýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýý
Index: console/console.c
===================================================================
--- console/console.c	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ console/console.c	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -227,8 +227,8 @@
 		return;
 
-	if (newcons == -1) {
-		if (active_console == -1)
+	if (newcons == KERNEL_CONSOLE) {
+		if (active_console == KERNEL_CONSOLE)
 			return;
-		active_console = -1;
+		active_console = KERNEL_CONSOLE;
 		curs_visibility(0);
 
@@ -307,5 +307,5 @@
 			if ((c >= '0') && (c < '0' + CONSOLE_COUNT)) {
 				if (c == '0')
-					change_console(-1);
+					change_console(KERNEL_CONSOLE);
 				else
 					change_console(c - '1');
@@ -343,5 +343,6 @@
 		return;
 	}
-
+	
+	gcons_notify_connect(consnum);
 	connections[consnum].used = 1;
 	connections[consnum].client_phone = IPC_GET_ARG3(call);
Index: console/console.h
===================================================================
--- console/console.h	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ console/console.h	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -30,4 +30,6 @@
 #define __CONSOLE_H__
 
+#define KERNEL_CONSOLE 9
+
 #define CONSOLE_COUNT 12 
 
Index: console/gcons.c
===================================================================
--- console/gcons.c	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ console/gcons.c	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -33,4 +33,5 @@
 #include <sys/mman.h>
 #include <string.h>
+#include <align.h>
 
 #include "console.h"
@@ -38,10 +39,11 @@
 
 #define CONSOLE_TOP      65
-#define CONSOLE_MARGIN   10
-
-#define STATUS_START    120
-#define STATUS_SPACE    5
-#define STATUS_WIDTH    40
-#define STATUS_HEIGHT   30
+#define CONSOLE_MARGIN   6
+
+#define STATUS_START    110
+#define STATUS_TOP      8
+#define STATUS_SPACE    3
+#define STATUS_WIDTH    48
+#define STATUS_HEIGHT   48
 
 #define MAIN_COLOR      0xffffff
@@ -50,27 +52,23 @@
 static ipcarg_t xres,yres;
 
+enum butstate {
+	CONS_DISCONNECTED = 0,
+	CONS_SELECTED,
+	CONS_IDLE,
+	CONS_HAS_DATA,
+	CONS_KERNEL,
+	CONS_DISCONNECTED_SEL,
+	CONS_LAST
+};
+
 static int console_vp;
 static int cstatus_vp[CONSOLE_COUNT];
-static int console_has_input[CONSOLE_COUNT];
 static int cstat_row, cstat_col; /* Size of cstatus buttons */
+static enum butstate console_state[CONSOLE_COUNT];
 
 static int fbphone;
 
-enum butstate {
-	CONS_ACTIVE = 0,
-	CONS_IDLE,
-	CONS_HAS_INPUT,
-	CONS_DISCONNECTED
-};
-
-static struct {
-	int fgcolor;
-	int bgcolor;
-} stat_colors[] = {
-	{0xd0d0d0, 0x808080},
-	{0xd0d0d0, 0x0},
-	{0xd0d0d0, 0xa04040},
-	{0xd0d0d0, 0x0}
-};
+/** List of pixmaps identifying these icons */
+static int ic_pixmaps[CONS_LAST] = {-1,-1,-1,-1,-1,-1};
 
 static int active_console = 0;
@@ -107,29 +105,47 @@
 }
 
-static void draw_stat(int consnum, enum butstate state)
+static void redraw_state(int consnum)
 {
 	char data[5];
 	int i;
-	
+	enum butstate state = console_state[consnum];
+
 	vp_switch(cstatus_vp[consnum]);
-	set_style(stat_colors[state].fgcolor, stat_colors[state].bgcolor);
-	clear();
-	if (state != CONS_DISCONNECTED) {
-		snprintf(data, 5, "%d", consnum+1);
-		for (i=0;data[i];i++)
-			putch(data[i], 0, i);
+	if (ic_pixmaps[state] != -1)
+		nsend_call_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], ic_pixmaps[state]);
+
+ 	if (state != CONS_DISCONNECTED && state != CONS_KERNEL && state != CONS_DISCONNECTED_SEL) {
+ 		snprintf(data, 5, "%d", consnum+1);
+ 		for (i=0;data[i];i++)
+ 			putch(data[i], 1, 2+i);
+ 	}
+}
+
+/** Notification run on changing console (except kernel console) */
+void gcons_change_console(int consnum)
+{
+	int i;
+
+	if (!use_gcons)
+		return;
+
+	if (active_console == KERNEL_CONSOLE) {
+		for (i=0; i < CONSOLE_COUNT; i++)
+			redraw_state(i);
+	} else {
+		if (console_state[active_console] == CONS_DISCONNECTED_SEL)
+			console_state[active_console] = CONS_DISCONNECTED;
+		else
+			console_state[active_console] = CONS_IDLE;
+		redraw_state(active_console);
 	}
-}
-
-void gcons_change_console(int consnum)
-{
-	if (!use_gcons)
-		return;
-
-	if (active_console != -1)
-		draw_stat(active_console, CONS_IDLE);
 	active_console = consnum;
-	draw_stat(consnum, CONS_ACTIVE);
-	console_has_input[consnum] = 0;
+
+	if (console_state[consnum] == CONS_DISCONNECTED) {
+		console_state[consnum] = CONS_DISCONNECTED_SEL;
+		redraw_state(consnum);
+	} else
+		console_state[consnum] = CONS_SELECTED;
+	redraw_state(consnum);
 
 	vp_switch(console_vp);
@@ -142,16 +158,31 @@
 		return;
 
-	if (consnum == active_console || console_has_input[consnum])
-		return;
-
-	console_has_input[consnum] = 1;
-
-	if (active_console == -1)
-		return;
-
-	draw_stat(consnum, CONS_HAS_INPUT);
+	if (consnum == active_console || console_state[consnum] == CONS_HAS_DATA)
+		return;
+
+	console_state[consnum] = CONS_HAS_DATA;
+
+	if (active_console == KERNEL_CONSOLE)
+		return;
+
+	redraw_state(consnum);
 	
 	vp_switch(console_vp);
-
+}
+
+void gcons_notify_connect(int consnum)
+{
+	if (!use_gcons)
+		return;
+	if (active_console == consnum)
+		console_state[consnum] = CONS_SELECTED;
+	else
+		console_state[consnum] = CONS_IDLE;
+
+	if (active_console == KERNEL_CONSOLE)
+		return;
+
+	redraw_state(consnum);
+	vp_switch(console_vp);
 }
 
@@ -159,6 +190,11 @@
 void gcons_in_kernel(void)
 {
-	draw_stat(active_console, CONS_IDLE);
-	active_console = -1; /* Set to kernel console */
+	if (console_state[active_console] = CONS_DISCONNECTED_SEL)
+		console_state[active_console] = CONS_DISCONNECTED;
+	else
+		console_state[active_console] = CONS_IDLE;
+	redraw_state(active_console);
+
+	active_console = KERNEL_CONSOLE; /* Set to kernel console */
 	vp_switch(0);
 }
@@ -190,5 +226,5 @@
 		goto drop;
 	/* Draw logo */
-	send_call_2(fbphone, FB_DRAW_PPM, x, y);
+	nsend_call_2(fbphone, FB_DRAW_PPM, x, y);
 drop:
 	/* Drop area */
@@ -203,5 +239,5 @@
 extern char _binary_nameic_ppm_start[0];
 extern int _binary_nameic_ppm_size;
-void gcons_redraw_console(void)
+static void gcons_redraw_console(void)
 {
 	int i;
@@ -214,13 +250,56 @@
 	set_style(MAIN_COLOR, MAIN_COLOR);
 	clear();
-	draw_pixmap(_binary_helenos_ppm_start, (size_t)&_binary_helenos_ppm_size, xres-64, 0);
-	draw_pixmap(_binary_nameic_ppm_start, (size_t)&_binary_nameic_ppm_size, 5, 10);
+	draw_pixmap(_binary_helenos_ppm_start, (size_t)&_binary_helenos_ppm_size, xres-66, 2);
+	draw_pixmap(_binary_nameic_ppm_start, (size_t)&_binary_nameic_ppm_size, 5, 17);
 
 
 	for (i=0;i < CONSOLE_COUNT; i++) 
-		draw_stat(i, i == active_console ? CONS_ACTIVE : CONS_DISCONNECTED);
+		redraw_state(i);
 	vp_switch(console_vp);
 }
 
+static int make_pixmap(char *data, int size)
+{
+	char *shm;
+	int rc;
+	int pxid = -1;
+
+	/* Create area */
+	shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | MAP_ANONYMOUS, 0, 0);
+	if (shm == MAP_FAILED)
+		return -1;
+
+	memcpy(shm, data, size);
+	/* Send area */
+	rc = sync_send_2(fbphone, FB_PREPARE_SHM, (ipcarg_t)shm, 0, NULL, NULL);
+	if (rc)
+		goto exit;
+	rc = sync_send_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t)shm, 0, PROTO_READ, NULL, NULL, NULL);
+	if (rc)
+		goto drop;
+
+	/* Obtain pixmap */
+	rc = sync_send(fbphone, FB_SHM2PIXMAP, 0, NULL);
+	if (rc < 0)
+		goto drop;
+	pxid = rc;
+drop:
+	/* Drop area */
+	nsend_call(fbphone, FB_DROP_SHM, 0);
+exit:       
+	/* Remove area */
+	munmap(shm, size);
+
+	return pxid;
+}
+
+extern char _binary_cons_selected_ppm_start[0];
+extern int _binary_cons_selected_ppm_size;
+extern char _binary_cons_idle_ppm_start[0];
+extern int _binary_cons_idle_ppm_size;
+extern char _binary_cons_has_data_ppm_start[0];
+extern int _binary_cons_has_data_ppm_size;
+extern char _binary_cons_kernel_ppm_start[0];
+extern int _binary_cons_kernel_ppm_size;
 /** Initialize nice graphical console environment */
 void gcons_init(int phone)
@@ -239,6 +318,8 @@
 
 	/* create console viewport */
-	console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, xres-2*CONSOLE_MARGIN,
-			       yres-(CONSOLE_TOP+CONSOLE_MARGIN));
+	/* Align width & height to character size */
+	console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, 
+			       ALIGN_DOWN(xres-2*CONSOLE_MARGIN, 8),
+			       ALIGN_DOWN(yres-(CONSOLE_TOP+CONSOLE_MARGIN),16));
 	if (console_vp < 0)
 		return;
@@ -247,10 +328,27 @@
 	for (i=0; i < CONSOLE_COUNT; i++) {
 		cstatus_vp[i] = vp_create(STATUS_START+CONSOLE_MARGIN+i*(STATUS_WIDTH+STATUS_SPACE),
-					  CONSOLE_MARGIN, STATUS_WIDTH, STATUS_HEIGHT);
+					  STATUS_TOP, STATUS_WIDTH, STATUS_HEIGHT);
 		if (cstatus_vp[i] < 0)
 			return;
+		vp_switch(cstatus_vp[i]);
+		set_style(0x202020, 0xffffff);
 	}
 	
+	/* Initialize icons */
+	ic_pixmaps[CONS_SELECTED] = make_pixmap(_binary_cons_selected_ppm_start,
+					      (int)&_binary_cons_selected_ppm_size);
+	ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start,
+					      (int)&_binary_cons_idle_ppm_size);
+	ic_pixmaps[CONS_HAS_DATA] = make_pixmap(_binary_cons_has_data_ppm_start,
+						(int)&_binary_cons_has_data_ppm_size);
+	ic_pixmaps[CONS_DISCONNECTED] = make_pixmap(_binary_cons_idle_ppm_start,
+					      (int)&_binary_cons_idle_ppm_size);
+	ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start,
+					      (int)&_binary_cons_kernel_ppm_size);
+	ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED];
+
 	use_gcons = 1;
+	console_state[0] = CONS_DISCONNECTED_SEL;
+	console_state[KERNEL_CONSOLE] = CONS_KERNEL;
 	gcons_redraw_console();
 }
Index: console/gcons.h
===================================================================
--- console/gcons.h	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ console/gcons.h	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -34,4 +34,5 @@
 void gcons_notify_char(int consnum);
 void gcons_in_kernel(void);
+void gcons_notify_connect(int consnum);
 
 #endif
Index: fb/fb.c
===================================================================
--- fb/fb.c	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ fb/fb.c	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -55,6 +55,6 @@
 /* Pixel specific fuctions */
 
-typedef void (*putpixel_fn_t)(unsigned int x, unsigned int y, int color);
-typedef int (*getpixel_fn_t)(unsigned int x, unsigned int y);
+typedef void (*conv2scr_fn_t)(void *, int);
+typedef int (*conv2rgb_fn_t)(void *);
 
 struct {
@@ -66,6 +66,6 @@
 	unsigned int pixelbytes ;
 
-	putpixel_fn_t putpixel;
-	getpixel_fn_t getpixel;
+	conv2scr_fn_t rgb2scr;
+	conv2rgb_fn_t scr2rgb;
 } screen;
 
@@ -91,5 +91,5 @@
 	unsigned int width;
 	unsigned int height;
-	void *data;
+	__u8 *data;
 } pixmap_t;
 static pixmap_t pixmaps[MAX_PIXMAPS];
@@ -111,73 +111,65 @@
 #define POINTPOS(x, y)	((y) * screen.scanline + (x) * screen.pixelbytes)
 
-/** Put pixel - 24-bit depth, 1 free byte */
-static void putpixel_4byte(unsigned int x, unsigned int y, int color)
-{
-	*((__u32 *)(screen.fbaddress + POINTPOS(x, y))) = color;
-}
-
-/** Return pixel color - 24-bit depth, 1 free byte */
-static int getpixel_4byte(unsigned int x, unsigned int y)
-{
-	return *((__u32 *)(screen.fbaddress + POINTPOS(x, y))) & 0xffffff;
-}
-
-/** Put pixel - 24-bit depth */
-static void putpixel_3byte(unsigned int x, unsigned int y, int color)
-{
-	unsigned int startbyte = POINTPOS(x, y);
-
+/* Conversion routines between different color representations */
+static void rgb_4byte(void *dst, int rgb)
+{
+	*(int *)dst = rgb;
+}
+
+static int byte4_rgb(void *src)
+{
+	return (*(int *)src) & 0xffffff;
+}
+
+static void rgb_3byte(void *dst, int rgb)
+{
+	__u8 *scr = dst;
 #if (defined(BIG_ENDIAN) || defined(FB_BIG_ENDIAN))
-	screen.fbaddress[startbyte] = RED(color, 8);
-	screen.fbaddress[startbyte + 1] = GREEN(color, 8);
-	screen.fbaddress[startbyte + 2] = BLUE(color, 8);
+	scr[0] = RED(rgb, 8);
+	scr[1] = GREEN(rgb, 8);
+	scr[2] = BLUE(rgb, 8);
 #else
-	screen.fbaddress[startbyte + 2] = RED(color, 8);
-	screen.fbaddress[startbyte + 1] = GREEN(color, 8);
-	screen.fbaddress[startbyte + 0] = BLUE(color, 8);
+	scr[2] = RED(rgb, 8);
+	scr[1] = GREEN(rgb, 8);
+	scr[0] = BLUE(rgb, 8);
 #endif
 
-}
-
-/** Return pixel color - 24-bit depth */
-static int getpixel_3byte(unsigned int x, unsigned int y)
-{
-	unsigned int startbyte = POINTPOS(x, y);
-
-
-
+
+}
+
+static int byte3_rgb(void *src)
+{
+	__u8 *scr = src;
 #if (defined(BIG_ENDIAN) || defined(FB_BIG_ENDIAN))
-	return screen.fbaddress[startbyte] << 16 | screen.fbaddress[startbyte + 1] << 8 | screen.fbaddress[startbyte + 2];
+	return scr[0] << 16 | scr[1] << 8 | scr[2];
 #else
-	return screen.fbaddress[startbyte + 2] << 16 | screen.fbaddress[startbyte + 1] << 8 | screen.fbaddress[startbyte + 0];
-#endif
-								
-
-}
-
-/** Put pixel - 16-bit depth (5:6:5) */
-static void putpixel_2byte(unsigned int x, unsigned int y, int color)
+	return scr[2] << 16 | scr[1] << 8 | scr[0];
+#endif	
+}
+
+/**  16-bit depth (5:6:5) */
+static void rgb_2byte(void *dst, int rgb)
 {
 	/* 5-bit, 6-bits, 5-bits */ 
-	*((__u16 *)(screen.fbaddress + POINTPOS(x, y))) = RED(color, 5) << 11 | GREEN(color, 6) << 5 | BLUE(color, 5);
-}
-
-/** Return pixel color - 16-bit depth (5:6:5) */
-static int getpixel_2byte(unsigned int x, unsigned int y)
-{
-	int color = *((__u16 *)(screen.fbaddress + POINTPOS(x, y)));
+	*((__u16 *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 | BLUE(rgb, 5);
+}
+
+/** 16-bit depth (5:6:5) */
+static int byte2_rgb(void *src)
+{
+	int color = *(__u16 *)(src);
 	return (((color >> 11) & 0x1f) << (16 + 3)) | (((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3);
 }
 
 /** Put pixel - 8-bit depth (3:2:3) */
-static void putpixel_1byte(unsigned int x, unsigned int y, int color)
-{
-	screen.fbaddress[POINTPOS(x, y)] = RED(color, 3) << 5 | GREEN(color, 2) << 3 | BLUE(color, 3);
+static void rgb_1byte(void *dst, int rgb)
+{
+	*(__u8 *)dst = RED(rgb, 3) << 5 | GREEN(rgb, 2) << 3 | BLUE(rgb, 3);
 }
 
 /** Return pixel color - 8-bit depth (3:2:3) */
-static int getpixel_1byte(unsigned int x, unsigned int y)
-{
-	int color = screen.fbaddress[POINTPOS(x, y)];
+static int byte1_rgb(void *src)
+{
+	int color = *(__u8 *)src;
 	return (((color >> 5) & 0x7) << (16 + 5)) | (((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5);
 }
@@ -192,10 +184,15 @@
 static void putpixel(int vp, unsigned int x, unsigned int y, int color)
 {
-	screen.putpixel(viewports[vp].x + x, viewports[vp].y + y, color);
+	int dx = viewports[vp].x + x;
+	int dy = viewports[vp].y + y;
+	(*screen.rgb2scr)(&screen.fbaddress[POINTPOS(dx,dy)],color);
 }
 /** Get pixel from viewport */
 static int getpixel(int vp, unsigned int x, unsigned int y)
 {
-	return screen.getpixel(viewports[vp].x + x, viewports[vp].y + y);
+	int dx = viewports[vp].x + x;
+	int dy = viewports[vp].y + y;
+
+	return (*screen.scr2rgb)(&screen.fbaddress[POINTPOS(dx,dy)]);
 }
 
@@ -359,21 +356,21 @@
 	switch (bpp) {
 		case 8:
-			screen.putpixel = putpixel_1byte;
-			screen.getpixel = getpixel_1byte;
+			screen.rgb2scr = rgb_1byte;
+			screen.scr2rgb = byte1_rgb;
 			screen.pixelbytes = 1;
 			break;
 		case 16:
-			screen.putpixel = putpixel_2byte;
-			screen.getpixel = getpixel_2byte;
+			screen.rgb2scr = rgb_2byte;
+			screen.scr2rgb = byte2_rgb;
 			screen.pixelbytes = 2;
 			break;
 		case 24:
-			screen.putpixel = putpixel_3byte;
-			screen.getpixel = getpixel_3byte;
+			screen.rgb2scr = rgb_3byte;
+			screen.scr2rgb = byte3_rgb;
 			screen.pixelbytes = 3;
 			break;
 		case 32:
-			screen.putpixel = putpixel_4byte;
-			screen.getpixel = getpixel_4byte;
+			screen.rgb2scr = rgb_4byte;
+			screen.scr2rgb = byte4_rgb;
 			screen.pixelbytes = 4;
 			break;
@@ -478,4 +475,48 @@
 }
 
+
+/** Return first free pixmap */
+static int find_free_pixmap(void)
+{
+	int i;
+	
+	for (i=0;i < MAX_PIXMAPS;i++)
+		if (!pixmaps[i].data)
+			return i;
+	return -1;
+}
+
+static void putpixel_pixmap(int pm, unsigned int x, unsigned int y, int color)
+{
+	pixmap_t *pmap = &pixmaps[pm];
+	int pos = (y * pmap->width + x) * screen.pixelbytes;
+
+	(*screen.rgb2scr)(&pmap->data[pos],color);
+}
+
+/** Create a new pixmap and return appropriate ID */
+static int shm2pixmap(char *shm, size_t size)
+{
+	int pm;
+	pixmap_t *pmap;
+
+	pm = find_free_pixmap();
+	if (pm == -1)
+		return ELIMIT;
+	pmap = &pixmaps[pm];
+	
+	if (ppm_get_data(shm, size, &pmap->width, &pmap->height))
+		return EINVAL;
+	
+	pmap->data = malloc(pmap->width * pmap->height * screen.pixelbytes);
+	if (!pmap->data)
+		return ENOMEM;
+
+	ppm_draw(shm, size, 0, 0, pmap->width, pmap->height, 
+		 putpixel_pixmap, pm);
+
+	return pm;
+}
+
 /** Handle shared memory communication calls
  *
@@ -503,7 +544,7 @@
 	static size_t intersize = 0;
 
-	static char *pixmap = NULL;
-	static ipcarg_t pixmap_id = 0;
-	static size_t pixmap_size;
+	static char *shm = NULL;
+	static ipcarg_t shm_id = 0;
+	static size_t shm_size;
 
 	int handled = 1;
@@ -515,12 +556,12 @@
 	case IPC_M_AS_AREA_SEND:
 		/* We accept one area for data interchange */
-		if (IPC_GET_ARG1(*call) == pixmap_id) {
+		if (IPC_GET_ARG1(*call) == shm_id) {
 			void *dest = as_get_mappable_page(IPC_GET_ARG2(*call));
-			pixmap_size = IPC_GET_ARG2(*call);
+			shm_size = IPC_GET_ARG2(*call);
 			if (!ipc_answer_fast(callid, 0, (sysarg_t)dest, 0)) 
-				pixmap = dest;
+				shm = dest;
 			else
-				pixmap_id = 0;
-			if (pixmap[0] != 'P')
+				shm_id = 0;
+			if (shm[0] != 'P')
 				while (1)
 					;
@@ -532,20 +573,27 @@
 		return 1;
 	case FB_PREPARE_SHM:
-		if (pixmap_id)
+		if (shm_id)
 			retval = EBUSY;
 		else 
-			pixmap_id = IPC_GET_ARG1(*call);
+			shm_id = IPC_GET_ARG1(*call);
 		break;
 		
 	case FB_DROP_SHM:
-		if (pixmap) {
-			as_area_destroy(pixmap);
-			pixmap = NULL;
-		}
-		pixmap_id = 0;
+		if (shm) {
+			as_area_destroy(shm);
+			shm = NULL;
+		}
+		shm_id = 0;
 		break;
-		
+
+	case FB_SHM2PIXMAP:
+		if (!shm) {
+			retval = EINVAL;
+			break;
+		}
+		retval = shm2pixmap(shm, shm_size);
+		break;
 	case FB_DRAW_PPM:
-		if (!pixmap) {
+		if (!shm) {
 			retval = EINVAL;
 			break;
@@ -558,5 +606,5 @@
 		}
 		
-		draw_ppm(pixmap, pixmap_size, IPC_GET_ARG1(*call), IPC_GET_ARG2(*call),
+		ppm_draw(shm, shm_size, IPC_GET_ARG1(*call), IPC_GET_ARG2(*call),
 			 vport->width - x, vport->height - y, putpixel, vp);
 		break;
@@ -579,15 +627,4 @@
 		ipc_answer_fast(callid, retval, 0, 0);
 	return handled;
-}
-
-/** Return first free pixmap */
-static int find_free_pixmap(void)
-{
-	int i;
-	
-	for (i=0;i < MAX_PIXMAPS;i++)
-		if (!pixmaps[i].data)
-			return i;
-	return -1;
 }
 
Index: fb/ppm.c
===================================================================
--- fb/ppm.c	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ fb/ppm.c	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -57,4 +57,19 @@
 }
 
+int ppm_get_data(unsigned char *data, size_t dtsz, int *width, int *height)
+{
+	/* Read magic */
+	if (data[0] != 'P' || data[1] != '6')
+		return EINVAL;
+
+	data+=2;
+	skip_whitespace(&data);
+	read_num(&data, width);
+	skip_whitespace(&data);
+	read_num(&data,height);
+
+	return 0;
+}
+
 /** Draw PPM pixmap
  *
@@ -67,5 +82,5 @@
  * @param putpixel Putpixel function used to print bitmap
  */
-int draw_ppm(unsigned char *data, size_t datasz, unsigned int sx, 
+int ppm_draw(unsigned char *data, size_t datasz, unsigned int sx, 
 	     unsigned int sy, 
 	     unsigned int maxwidth, unsigned int maxheight,
@@ -105,5 +120,5 @@
 			continue;
 		}
-		color = ((data[0]*coef) << 16) + ((data[1]*coef) << 8) + data[0]*coef;
+		color = ((data[0]*coef) << 16) + ((data[1]*coef) << 8) + data[2]*coef;
 		
 		(*putpixel)(vp, sx+(i % width), sy+(i / width), color);
Index: fb/ppm.h
===================================================================
--- fb/ppm.h	(revision 1f36e901afaaf7412a506cbb20ae4b3a28c25be0)
+++ fb/ppm.h	(revision a7d2d782c414139c9bc5b1707b4985f51133a01f)
@@ -30,8 +30,9 @@
 #define _PPM_H_
 
-int draw_ppm(unsigned char *data, size_t datasz, unsigned int sx, 
+int ppm_draw(unsigned char *data, size_t datasz, unsigned int sx, 
 	     unsigned int sy, 
 	     unsigned int maxwidth, unsigned int maxheight,
 	     void (*putpixel)(int,unsigned int, unsigned int, int),int vp);
+int ppm_get_data(unsigned char *data, size_t dtsz, int *width, int *height);
 
 #endif
