From 5bb187381105c326e33c766923c9d30ad6fbbfa7 Mon Sep 17 00:00:00 2001 From: luke zeller Date: Fri, 17 Apr 2020 11:05:39 -0400 Subject: [PATCH 1/8] initial commit --- program.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 program.cpp diff --git a/program.cpp b/program.cpp new file mode 100644 index 0000000..59d4b1e --- /dev/null +++ b/program.cpp @@ -0,0 +1,28 @@ +#include +#include +#include + +using namespace std; + +static void activate(GtkApplication* app, gpointer user_data) +{ + GtkWidget *window; + + window = gtk_application_window_new(app); + gtk_window_set_title (GTK_WINDOW(window), "z80 screen test"); + gtk_window_set_default_size(GTK_WINDOW(window), 320, 200); + gtk_widget_show_all(window); +} + +int main(int argc, char **argv) +{ + GtkApplication *app; + int status; + + app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + status = g_application_run(G_APPLICATION(app), argc, argv); + g_object_unref(app); + + return status; +} From dcbc2250ebac2f3f95c8fb39453867a5b3e00b5c Mon Sep 17 00:00:00 2001 From: luke zeller Date: Fri, 17 Apr 2020 13:15:10 -0400 Subject: [PATCH 2/8] created proper window, added menu bar, got pixel by pixel control of window --- program.cpp | 163 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 154 insertions(+), 9 deletions(-) diff --git a/program.cpp b/program.cpp index 59d4b1e..7c2b8c1 100644 --- a/program.cpp +++ b/program.cpp @@ -1,25 +1,170 @@ #include #include + #include -using namespace std; +/* Surface to store current scribbles */ +static cairo_surface_t *surface = NULL; -static void activate(GtkApplication* app, gpointer user_data) +static void clear_surface(void) { - GtkWidget *window; + cairo_t *cr; - window = gtk_application_window_new(app); - gtk_window_set_title (GTK_WINDOW(window), "z80 screen test"); - gtk_window_set_default_size(GTK_WINDOW(window), 320, 200); - gtk_widget_show_all(window); + cr = cairo_create(surface); + + //set to black + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_paint(cr); + + cairo_destroy(cr); } -int main(int argc, char **argv) +/* Create a new surface of the appropriate size to store our scribbles */ +static gboolean configure_event_cb(GtkWidget *widget, + GdkEventConfigure *event, + gpointer data) +{ + if(surface) + { + cairo_surface_destroy(surface); +} + + surface = gdk_window_create_similar_surface(gtk_widget_get_window(widget), + CAIRO_CONTENT_COLOR, + gtk_widget_get_allocated_width(widget), + gtk_widget_get_allocated_height(widget)); + + /* Initialize the surface to white */ + clear_surface(); + + /* We've handled the configure event, no need for further processing. */ + return TRUE; +} + +/* Redraw the screen from the surface. Note that the ::draw + * signal receives a ready-to-be-used cairo_t that is already + * clipped to only draw the exposed areas of the widget + */ +static gboolean +draw_cb(GtkWidget *widget, + cairo_t *cr, + gpointer data) +{ + cairo_set_source_surface(cr, surface, 0, 0); + cairo_paint(cr); + + return FALSE; +} + +/* Draw a rectangle on the surface at the given position */ +static void +draw_pixel(GtkWidget *widget, + gdouble x, + gdouble y, + int size) +{ + cairo_t *cr; + + /* Paint to the surface, where we store our state */ + cr = cairo_create(surface); + + cairo_set_source_rgb(cr, 1, 1, 1); + + cairo_rectangle(cr, x, y, size, size); + cairo_fill(cr); + + cairo_destroy(cr); + + /* Now invalidate the affected region of the drawing area. */ + gtk_widget_queue_draw_area(widget, x, y, size, size); +} + + + +static void +close_window(void) +{ + if(surface) + cairo_surface_destroy(surface); +} + + + +static void +activate(GtkApplication *app, + gpointer user_data) +{ + GtkWidget *window; + GtkWidget *box; + GtkWidget *frame; + GtkWidget *drawing_area; + + //define menubar things + GtkWidget *menubar; + GtkWidget *fileMenu; + GtkWidget *fileMi; + GtkWidget *quitMi; + + + int zoom = 2; + + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "z80 screen test"); + gtk_window_set_resizable(GTK_WINDOW(window), FALSE); + + g_signal_connect(window, "destroy", G_CALLBACK(close_window), NULL); + + + gtk_container_set_border_width(GTK_CONTAINER(window), 0); + + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + gtk_container_add(GTK_CONTAINER(window), box); + + + menubar = gtk_menu_bar_new(); + fileMenu = gtk_menu_new(); + + fileMi = gtk_menu_item_new_with_label("File"); + quitMi = gtk_menu_item_new_with_label("Quit"); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi); + gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(quitMi), "activate", + G_CALLBACK(gtk_widget_destroy(window)), NULL); + + + drawing_area = gtk_drawing_area_new(); + /* set a minimum size */ + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + + gtk_box_pack_start(GTK_BOX(box), drawing_area, FALSE, FALSE, 0); + + /* Signals used to handle the backing surface */ + g_signal_connect(drawing_area, "draw", + G_CALLBACK(draw_cb), NULL); + g_signal_connect(drawing_area,"configure-event", + G_CALLBACK(configure_event_cb), NULL); + + + + gtk_widget_show_all(window); + + + draw_pixel(drawing_area, 0, 0, zoom); + +} + +int +main(int argc, + char **argv) { GtkApplication *app; int status; - app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); + app = gtk_application_new("com.github.amberisvibin.z80screentest", G_APPLICATION_FLAGS_NONE); g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); From b7b2f63235f3d37d51df3fc3ec330d82b0073d85 Mon Sep 17 00:00:00 2001 From: luke zeller Date: Fri, 17 Apr 2020 13:16:34 -0400 Subject: [PATCH 3/8] program file initial commit --- program | Bin 0 -> 23280 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 program diff --git a/program b/program new file mode 100755 index 0000000000000000000000000000000000000000..2526559df851108c9d255bc879379832795907d7 GIT binary patch literal 23280 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 JQ?Rkxe*+}f_xAt* literal 0 HcmV?d00001 From ddc93e298c763be426fc54afe3092d8be4fd7135 Mon Sep 17 00:00:00 2001 From: luke zeller Date: Thu, 23 Apr 2020 13:01:42 -0400 Subject: [PATCH 4/8] character write working --- program | Bin 23280 -> 29496 bytes program.cpp | 204 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 196 insertions(+), 8 deletions(-) diff --git a/program b/program index 2526559df851108c9d255bc879379832795907d7..5b649bf181891489e076e91116942baaa9c92855 100755 GIT binary patch literal 29496 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 literal 23280 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 JQ?Rkxe*+}f_xAt* diff --git a/program.cpp b/program.cpp index 7c2b8c1..2e8200a 100644 --- a/program.cpp +++ b/program.cpp @@ -3,6 +3,62 @@ #include +int charA[8][8] = { + {0,0,0,0,0,0,0,0}, + {0,1,1,1,1,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,1,1,1,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,0,0,0,0,0,0,0}, +}; + +int charB[8][8] = { + {0,0,0,0,0,0,0,0}, + {0,1,1,1,1,0,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,1,1,1,0,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,1,1,1,0,0,0}, + {0,0,0,0,0,0,0,0}, +}; + +int charC[8][8] = { + {0,0,0,0,0,0,0,0}, + {0,0,1,1,1,1,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,0,0,0,0,0,0}, + {0,0,1,1,1,1,0,0}, + {0,0,0,0,0,0,0,0}, +}; + +int charD[8][8] = { + {0,0,0,0,0,0,0,0}, + {0,1,1,1,1,0,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,0,0,0,1,0,0}, + {0,1,1,1,1,0,0,0}, + {0,0,0,0,0,0,0,0}, +}; + +int charE[8][8] = { + {0,0,0,0,0,0,0,0}, + {0,1,1,1,1,1,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,1,1,1,0,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,0,0,0,0,0,0}, + {0,1,1,1,1,1,0,0}, + {0,0,0,0,0,0,0,0}, +}; + + /* Surface to store current scribbles */ static cairo_surface_t *surface = NULL; @@ -21,8 +77,8 @@ static void clear_surface(void) /* Create a new surface of the appropriate size to store our scribbles */ static gboolean configure_event_cb(GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) + GdkEventConfigure *event, + gpointer data) { if(surface) { @@ -70,7 +126,7 @@ draw_pixel(GtkWidget *widget, cairo_set_source_rgb(cr, 1, 1, 1); - cairo_rectangle(cr, x, y, size, size); + cairo_rectangle(cr, x * size, y * size, size, size); cairo_fill(cr); cairo_destroy(cr); @@ -79,7 +135,24 @@ draw_pixel(GtkWidget *widget, gtk_widget_queue_draw_area(widget, x, y, size, size); } - +static void +draw_char(GtkWidget *drawing_area, int zoom, int x, int y, int chara[8][8]) +{ + for(int i=0;i<8;i++){ + for(int j=0;j<8;j++){ + int realX = j + (x * 8); + int realY = i + (y * 8); + switch (chara[i][j]) { + case 1: draw_pixel(drawing_area, realX, realY, zoom); + break; + case 0: break; + default: std::cout << "nonstandard num in array" << std::endl; + } + + }//end of j + + }//end of i +} static void close_window(void) @@ -88,6 +161,39 @@ close_window(void) cairo_surface_destroy(surface); } +static void +zoom1(GtkWidget *drawing_area) +{ + int zoom = 1; + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + gtk_widget_queue_resize(drawing_area); +} + +static void +zoom2(GtkWidget *drawing_area) +{ + int zoom = 2; + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + gtk_widget_queue_resize(drawing_area); +} + +static void +zoom3(GtkWidget *drawing_area) +{ + int zoom = 3; + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + gtk_widget_queue_resize(drawing_area); +} + +static void +zoom4(GtkWidget *drawing_area) +{ + int zoom = 4; + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + gtk_widget_queue_resize(drawing_area); + +} + static void @@ -104,6 +210,14 @@ activate(GtkApplication *app, GtkWidget *fileMenu; GtkWidget *fileMi; GtkWidget *quitMi; + GtkWidget *viewMenu; + GtkWidget *viewMi; + GtkWidget *zoomMi; + GtkWidget *zoomMenu; + GtkWidget *zoom1Mi; + GtkWidget *zoom2Mi; + GtkWidget *zoom3Mi; + GtkWidget *zoom4Mi; int zoom = 2; @@ -112,7 +226,7 @@ activate(GtkApplication *app, gtk_window_set_title(GTK_WINDOW(window), "z80 screen test"); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - g_signal_connect(window, "destroy", G_CALLBACK(close_window), NULL); + g_signal_connect(window, "destroy", G_CALLBACK(close_window), NULL); gtk_container_set_border_width(GTK_CONTAINER(window), 0); @@ -123,17 +237,40 @@ activate(GtkApplication *app, menubar = gtk_menu_bar_new(); fileMenu = gtk_menu_new(); + viewMenu = gtk_menu_new(); + zoomMenu = gtk_menu_new(); fileMi = gtk_menu_item_new_with_label("File"); quitMi = gtk_menu_item_new_with_label("Quit"); + viewMi = gtk_menu_item_new_with_label("View"); + zoomMi = gtk_menu_item_new_with_label("Zoom"); + + zoom1Mi = gtk_menu_item_new_with_label("100%"); + zoom2Mi = gtk_menu_item_new_with_label("200%"); + zoom3Mi = gtk_menu_item_new_with_label("300%"); + zoom4Mi = gtk_menu_item_new_with_label("400%"); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu); gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi); gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(viewMi), viewMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), zoomMi); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), viewMi); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(zoomMi), zoomMenu); + gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom1Mi); + gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom2Mi); + gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom3Mi); + gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom4Mi); + gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0); - g_signal_connect(G_OBJECT(quitMi), "activate", - G_CALLBACK(gtk_widget_destroy(window)), NULL); + g_signal_connect_swapped (quitMi, "activate", + G_CALLBACK (gtk_widget_destroy), + window); + drawing_area = gtk_drawing_area_new(); @@ -149,14 +286,65 @@ activate(GtkApplication *app, G_CALLBACK(configure_event_cb), NULL); + + g_signal_connect_swapped (zoom1Mi, "activate", + G_CALLBACK (zoom1), + drawing_area); + g_signal_connect_swapped (zoom2Mi, "activate", + G_CALLBACK (zoom2), + drawing_area); + g_signal_connect_swapped (zoom3Mi, "activate", + G_CALLBACK (zoom3), + drawing_area); + g_signal_connect_swapped (zoom4Mi, "activate", + G_CALLBACK (zoom4), + drawing_area); + + gtk_widget_show_all(window); +/* + draw_char(drawing_area, zoom, 0, 0,charA); + draw_char(drawing_area, zoom, 1, 0,charB); + draw_char(drawing_area, zoom, 2, 0,charC); + draw_char(drawing_area, zoom, 3, 0,charD); + draw_char(drawing_area, zoom, 4, 0,charE); +*/ + + for(int i=0;i<25;i++){ + for(int j=0;j<40;j++){ + + int randNum = (rand() % 5); + + switch(randNum) { + case 0: draw_char(drawing_area, zoom, j, i,charA); break; + case 1: draw_char(drawing_area, zoom, j, i,charB); break; + case 2: draw_char(drawing_area, zoom, j, i,charC); break; + case 3: draw_char(drawing_area, zoom, j, i,charD); break; + case 4: draw_char(drawing_area, zoom, j, i,charE); break; + default: std::cout << "invalid num in rand" << std::endl; break; + } + + //draw_char(drawing_area, zoom, j, i,charA); + + + }//end of j + + }//end of i + + + /* +std::cout << "got here" << std::endl; + zoom = 4; + gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); + gtk_widget_queue_resize(drawing_area); draw_pixel(drawing_area, 0, 0, zoom); - + */ } + int main(int argc, char **argv) From bf956fa04570e18d24c1b86a6d2ef1168a1e812a Mon Sep 17 00:00:00 2001 From: luke zeller Date: Thu, 23 Apr 2020 14:57:43 -0400 Subject: [PATCH 5/8] re configured GTK to be much easier we now have a function that runs every draw --- program | Bin 29496 -> 19808 bytes program.cpp | 323 +++++++++------------------------------------------- 2 files changed, 52 insertions(+), 271 deletions(-) diff --git a/program b/program index 5b649bf181891489e076e91116942baaa9c92855..efb85dbfb5f1e394d3ce17db53c7a43ab7007ddc 100755 GIT binary patch literal 19808 zcmeHPeQ;dWb-ycFwg6in1c72cymraN#(2FlmMha5b|tO+lt@O{l5qj&d9}Newn)2T z_pNP_xHVPDupr1U26N z&VBd1efzY_hr>+&(eU-x%ZxX-+lMp_m2NK(9u@ratTi5;s!z7)Ws&^Qw4_u zDg)vZO=1cDE)!RYh2R%R%q;hr1f^y=RaQtV6x)PkmiV zPjgE%!buGi7EHOmo1sU3`Lv0Ld8?|g)HrCW-%M$|DXkrh_HJ0eb}+nVFd9qkU9-1o z!7?ugblsP#TmnfdfAKcz|OYP&C51xDepYFS9rS|a+4_)SKhANuJV-}**N;DvX7cIS>O z>JBY#0bDda2xWC?7nE-Y=Pp1@W<5wT`Q{RKye05kO5k59VShyl`F)Ug|lsVH&z-z=(v7@c9fxXfRHDPdXv`3Ldv~WEjwB-e(WDVcba%E4#$%E0V6SDeFFH6VbiIEl9@CRXFk$Gr zsZ~@5E!6i!W8wH7y&r8cMusE8hEe;%k-lJR5bccKWtO3F1{xDd=)rKPQEZru zB?n+Nh}Mw7yi!3uLolS@nTi@xh&Y*v#uO4x1kt>HJ(!3D^}K!AU}~HZHPCZMixUyF zRk{RYARTWmvos>{-amw6*R1n+&2j0Mebz$*kKLqoE-*5KQPsA{aH2?V&(mE3oT&gUM(}k0%YZcBs8u@Am3}Z5!bK zTeoa8nxgTf4vEP6cJ!{bA+THG@xf%Et8MGH_%=Nt>ljS7e>(f2Zdh;ByS^GKRzZtd z0oojjr(|bBsvml2Z%_{!k-hM-E}6b4CLIm0u9L^qypf}!N8}vT_1;dD>sG-<=x7L}c{;k-8P&@jPR8gJ@`@Cz9P z?Xuw)+3+1Ue6bDRWy95$UX~8naJsj18n)rQ_oK4CHoTUFLHFBm`+e?S8?L65)H-Ox zFSXe@WW&|el%+3DpLPYX8V zuI`TUiU%;`wDBctCE0WX=4Y<%C8(S^sEu!0wT=oaRuI`ZYt-S=_)C=0rEx)Ss(RUe zjGj2ADC9qAAo<2DkyYok^o(}oS2t=$X3I6#Gup{>#w9Q?t_)P>rut;RSf8$+{hOXf zT_Ux*M;qO=4w6Dkzhx}e#y0hV$^7i2TrLyFWPGOLZy@K|3056B%4oH2nj0KSdvSm4d^OP(eS)ww3qf!VRZl!eR?au#jU z4rxcGDzx-b)IO=XjzU;FG`8SRFg|Ugv#!)-W1TOL^_(3`%|akUO`Srw-d>F{x(q7; zMr^YeZe2m`CnFV^YsllzXzBmVj01ezb#N5*Plw>u(ZGyrx}6q+g5F6FYw6UCmhQ=* z7SQ7vTBRPP))$D@&|r|C`l^5Z@Ay57-vo)jem3vF?Z}VS9i( zz?p5T#Tvyzw1Sh+g%Gm2#^1e-=3jc>%W%%5Hr|6@0Qnb5_U`}9<(`C|$XrHUPY0$l z9ze)sGCz_T8qp~w{qBcqcxVXa*wmU1%RJGgDxZXi|1q-YmwuO7ZM<$98im1b!EJ%+ zeT*!@@LbWcy609xX1wuAC3+u3$0{n(=jf>uusc?F76R$XBU5EA{8{KvKb86GIZf4| zm42x;{ohpEZ79y{o+EQLHDbK+aooB{st0VQYmU^p4{|wcyze9x>5$`@r%ApBe`H5- zdv@REzkR3uf~!gIJDX0;j_y0_O0Bzl-)t_26=fAB`yCjz%wLeL@w!XR?(P7Dc|Y}K zvoX|u+aNwcs!!5{%6tzqf9J72PxZ1tB{z#cdB6AH(lNg2>sQ0=+uPGG`g_{b@A9alB_!yQya(nzFz2m!VFaYY5T0sD=o( zCt^K*E73-(OH|dgRn>o``l3CR`^Ak*ufOKHt5*P(`nQAbn#tv)B7sO`*T8QF@GjC< ziRwCl-w5iHd!;~C%{R+hmMkp$I$C75<;N(01?8`jj#d7GRsL^)zYE`BTc0oQmBq3z z?*M)PhBNRV$mT+|5<>%~dtcRh9BR!Q-&w{!K22r||hS?}2#_%zI$o1M?o3_rSad z<~=a)fsge7e;>l%gYfqs*iy>mr1vO*@ozhL`gVm9m(#Z@lop%B`fiw>Zzw&aUiS05 zeg1xh-`(>w1Ha?v?^Wb83H0$uAk%y2a&gKWrek*`-V0Z%k1F_^i&LunLQ_nZ7rgex^6)OQ3*P0Xr}((?=@Rh{5(P9~IL#_v@XbGw_AJ`T=h;`*;rJj>yT zTlNp)62j5E@b)%-*8Y8xyxlhE?K;l>+RG@oVF(c*Ph;M2e)@)2kZrv)Acdzp{Y;5p)o9t>u^X2Giy>-LRize;Sx2N`Vh4R>q`s|3AFSo@z*h|X= z?^g3D&HV-9G`;{ROtcR!!=TjIKZ*rbrEs4EU#@W8mxGn*ck$PS_H?zGJk>{uSeKaV zhauop?}Wqth?Jk}&qKhAwf~1w{$f$-Mh1!NeNyI^ikltnc^){``>d*0p6LUdR(Pk{ zILotqV2faoZvwJ1c6 zhY4g|2)vs4e$WNER%kf}a%n$V?@M}xp zUj;7P(`+_}+w;$Iyyni6n@iaFP6_-8;BIBwPEJw1xE`I)k8hQ*bEX7-F)p-Xe((U7 z{qm_=m7mv_kZ+Unu;e!7QJqXZCFJjgJ+klinQ|;ILJ1>jr0^wL2rs`m7*98b^bm#c zB@ufSj_dt{@m|FLg^hS3sRvVgMJPTrJQy(|VNa8{v9Y+2j`*!8Lgesr9kE$PVnp;M zfE;ppDTVAlqO%pt%r8jV7-W1}pg2sv9pm%mAur4831G*L=K zcB8pn4PJe-amOuD3L0ejE((sLD&kTSA%I*0e0_sXp=btT?Wi$Pid_Q-tHD?p@rq`X ziT6@_Hh0|A?C*d|s#kBTidn(BK!Q! z9RX;z{=pW1XL}1Y5O1vqG-X$7-HKpNil!_YS*YvXoh@AX$3%3haJ*15C5ITbQ0N{< z>-l^#2u}sx6^|XI$VhVaoESl#?dld4xt5*2&R~#p5v@vSutKIbU{z`cou|l{^tp zF}f=DHXmPEI7DWToiV>KyGPFbe8B9SFieLXREa5f-tnl8e$I6U#g00JXqNJ#g~^+b zI>xe(BQaEAQX^rO?2aUoSaAv%9c78gV2~74Zg|iT9yy&n$a?zYU@4P~ zgoFnnxnOBAhjd)V-FhMeYWW@r!y0p@4RakgH8_u|fwvi$Vj6_(U&r_K4dmM%e9HQKj>DAS19APV&;9=^rQfU!@_7$aeh)?Zq~p~80Wk6j+sCHf zOo}>BFr4H6J%_$q=`r2qaJa*~c+jE0U!5m0WqH*qXY<6v4t+k4VoKlJ*%RAi`j|tX zpKqByjeV^>u^waQ`9|J<{N9o&zt3cOr~jTt0X31wU$~W|qMBlv@c1$R95Qx&&25%2 zbuM$x`hV`wpHTWtC&{=iIqQE5WpqZRE>r9LjsHI&r@vUA>1pUz+w}R|UUe3W~Nrvud1_3Szo!)!r7diT652m5@J}@|Ih^{ uNdI>O-D|kty#7!zx80O9|JJMX)2O5WTrbPgElgT6*O=iM;K(Ip5 zU>{?Qrna`Uwd>)kTKig8v97+NRU4!T)K_2dVP8~~U_mE}8d9uj3(ouP^Ks|go4L@c zYxVsxXRVoi_V4Vy&pG>?d+#}S?%neZclF}ztSn8Y9PJ8?xPciQaf*VDTSNxLsa0s> z@jXSmP#X(=48wT2lM|Hk)Sqppc>>P?CA~?MNkh-)uqLT&AyLw^OIy$4C6a1|oF~0p z$~x!^$-%x2>i<0FB~|rUeNG{7p%tPrlB#;-oBpe~UjGed>N$<`?VsaR>XExhZ%F73 z2|Y<`g+C>g{-kEmr$YGCN*ySpLX4P9E^sID|ke8I|ptS68wDFVFS1a`Toy?48 zr9bDeCaJ9NtI#9A{G&+>yS7x;XEP2nMFo=5JfU=HYoKA?+)G;ySkP1?p30X^(|#E~`}BfemaU&X>j&T7IH98` zENxJoBtwbh#Sj~OIdUXJ{omw#oQ~E!!Yc5Yk58Zf#kQyZbl+{2?w60evTDWo6E~kx z2{>(f6BV49rev25{upE(Y2?SFk?HLG7aErizsCk&0o&>1r`ohjh(;P)cYRf z9r#$&902LsQ(%MNVbh+kV{p^ix!Fd3myJJ{+Sqy6M!v$Pzx!$O3AF=80MpT%tzk6)(MjJc7u^F#rHu8sUOcp=)&60R4`(OZh<&?TZoYu3H(?X3ZyHyQ{9 z^=5xmkFIU^Yd&uv9MXMZzc(tGu-_N;2Af+YAAxKn6bt+Odbqg(h9ZIHptn``g@Qqd z>W$v0SJ;Wf!cAVtHTombaA>VSCD*Kn8g3?ySTO8w5{2#FKrpK5Rm*Fj74|m=B2j;M zc}-<&DCl4AZAjM&QHwCp6liVLbiKI^-HJrL;i#^2b7_q=H{PPJ2?QHMYec8fo3=o! zH>^vm@R`X~LOSSQqft?tKN!;+ATI$?Zg`Z0)&v@frw=bqsYY7-t*t5llQbL|g%|u` z-P_p6B!zyY1d@Q0zFT-F8I)2q)y|q2i2B>i)d-`;XqelHYC@PC{zkpU zA82lgn%Y4#AaEGP_mXvws4OjpkZP8o34Sw!aYDpl7V*`ybsuLqh z)}nzZW}szAQ?5$YBAmZue4Pa~iynfKLzM5cYf9s+Q}^OLX_Lc{r-Bzj|4;A`psT{zv?C ztAc^(qEh#2hKE`s?%KsmmxY$;ZdONYr0O5D?^_P*<$CQ^zH}8-@(R#qUnmx(4*Ent zbYF*8$As+&M76LNvqon~Qvl~C^1iNX4Tyc4#GfqVc*25j5b}BTyj;pl zzE|h?SP->0yA>SGGg6;|t3K^l@G}f)v{S*w7MPVL6#NT{{E&i+rnAx!1)rtJ%j+b$ zi}orqt+ffOJ%(ZK0ykD?pAPhoz|z|;?@Y$ z>R0fIik$%kKU={Q3Vx1)4=MO01s_rHa}`_@^MuA^vV!L+_<0ImsNnKm5EV~S@Cy`q zhk{?I;4>9`ih`FYxI@7!6nv_JI~81AXL=NTx*}hz;4>6_g@RwC;PnbVQ^8vle71tO zEBM6<-l5=^DEI~iFH-PL3SO+>JqmuQf^Syv5(VF);H3)wsDg`AAuHXg;I#LaX`6!2 zm0*TuJdp7~#se7-WIT}ZK*j?Z4`e)$@xZ6@z@G~){F|rqNS>!Fch8lY=DD*snw{+P zbp9@H2eX?jpLT_&4JT(z2Pv4Mk$el43=bYmCX+pkrw#n@;9i5Ljr;K6c7vxI7sG>( z8$8{x7#@7k;AulYJoqhxr;YsZ;Oz!ao5kV5RR&KR_u)aW!PAC)c<`$RPaE~&L6^bP z27P$2)Zpm`$nfA)gQt!9@Zbc4rw#h>V3xtt#(a42=*P0Zv>`|T4W2gQ=)b|!1|0o2 zc)GEI{u?}P#L<6)rwuszZ}7D7M*j_-Hr(jH!P7GaYp|QehTA{o{;@_F#e#y(*_y+H+b3@qyGj^8)Ed|;OT}E`fu>G zF-HFlo^C9m{{~MRWc1(QX=9B38$8``LjMh(Hpu9|!PCYV{Wo~p5TpN+$L!wuWt!cK zG&aA%FZhy~FSqbT7Ji0>zreyzwD99Ce6EE*ak;tv4=wzA7XGk>f8D~rY~lZ4;dfg2 zXDs}$Ec{~@{$UIMBMX1Oh3~fTcUt&$7CvU-+bq1_!mqUObr!zH!n-Z}0t;Vm;fpN% z3=4mOg`a5Q$6NSZ3x5LlO4a%Jp@o0X!XLKqud96NdsXqhH+kZ3dO8mc)h@5@&b=0A zJWu!d12_?Sx);2J^J8-2t57-C1NJn!4s_>c6PZ5}orp`rcTq-{hSQP*1yeTQ=+Slv z3i(%XW$<*DzeHr#$Da6*XZ!nCdbW?`c(R`N?EN@;77TO?19{1TCe|;hPuGtP3m!&Y zTI}LFPv?TmA*p%dhofhBx)wBnNnCe4nM^d|Wc+;YI>=?MgsxFP=?|_!A!X{Ihl^Pu zDr}_I$9E-;;~@9M-6NhZ_efL02QT5X2cKRl>!UK@l#ikknO{LCzCAmnMc49WFzWEc z*Cjmh*nlTq*N+Nvr~o9VF8-dua#OGn$75^Pr{7_dnnbhKa#zN z$R1$IZ~i;%!JL-r6AYD5hlUF#xCii6(;tuRLr;oCPj*sI;I`p{!tp=F!1_fh$9!F4tLj6=>nfJQNgPe-F<{v##- z8naU9hRP*{$xzq2eO)zZpgZA;Gxdj{qKuL3Pds)gUN;c0*5aIvCDm&rcjsrcwqN#%G4c?_iZ1@&cfGNR7#EfJ?a0RJD<(c7yoLmQA~T-q9xs_ zZLL>q-C=8smV>9ZRi@aQXKRa=lBc%y7WrHpiSLY<`*{12EwJHd2pyA(<#2CG`ZPo`p>&vzV-P zxi`6;77Gw%inCm!J%n-j0Ia`%?RKAw3r@dD3m#q|9gnv^)5i*5s-#JV=|cUFhH z7yL2e-{t&n@Pov^#`!+*ZxH_i=lj9`5Ana@`~djf#Q%)*3GmMl|3l6XCEomtZ2C6g z_<94`B094kjZFkpm>q|g8Az`X%q2mm0dE!-^9=-bumf{HkVLZq?-qiGKa`DmR0!sf z#rIX1RsFPq^a;Vc$l^`|mQ{b-Ku`y(+Dn2*3>f;%;>`xKRS0e(!H5boL6?E_3&8>s z{E7iXp9xMfkO3k17LdeL1D1jx9Fx6H2*GDaaKwP6;PVDDBm}=hg1;~<_K2!~!~}O? zK5kZyf~V-HfMVhvD(A9x-DuHBx)vS(GquP)lJ3a8mZoZV`B|bpM^7TUg^sH3^7qBn z|9K`_N2`>6Yd^auPNkDccli@S`1>j0fziTFF8oa)+?oe-wYu4^r&&6>q-q^Wr$C*r9ig$;NfMd*ZXmd$RhjNDg#$Q#-our)s-m8)(?D_MMHNF{#bl zF$9B8lc}^~IVD`|2PAgCt=N7c7J=BitJ0g=M)MRkUPCf9>1DoyA4N&#Vv?DK(f$)| zLf{;D+Z_1nqG3z`IIAmn0e+hmM^qU8@9AXT%^KW-i$*6KfULoF=H)A`8RP4Y(9)G( zf3OaL?ZhvcQNA)xH=EgsySsb=wF3>CeiVnxdVKNA$A~z9_YV=W9S7+^m-`5vxc)n_ z4OkpYB(c(a5*1;^WLkU{#@8K>$3{BW9nXrD-M$V74%YwZ_JW6~ziX&z-4k2z12sJH zEkNjc8F6UHJ7|NlDteYw`E~CBjPuGJO~nOMHqyMn2Fl6y^RBN|cQ1GsHw|3ZR>lA5 zs;i2B=vwZIAFuOt7aan;ta{c7cquRO!4cHE{X|Z5O6hB2e^VVFu8zOIDE_u9dDa0> z=Z-AT{MTde(EYI+R=RFZDBr-8mylHdA-fSd%he84qMUknupq0~rrw zJdp7~#se7-WIT}Zz`x7`S$LO$rC^A??b7HCH#&l`Hb)@n@P@^C`sI9meZxh8DioIO@6KJ6U-Hedp8Sf=aZB=@!TbtWeu*o8=E8i(!u&}K z^9vW|=dt&qXb#VWom{e$Nf{4hJdp7~#se7-WIXWy)&ufAWcl8)e9sum4wkI+hhiNn z@t<1wUt9QN7M|XrrX=<0ooPyEaKaak$m78?mR8_L9ZGEd0xI95K98aNeQe537QB3K zn$}K~uoPwK!;h08%4`wsk!utgUyGJsl=?-ve1~_T5Tr+gDdC|emehA)2@qmS6KDt_Bz zye917Cojg!c44c;_`C449VI-i!FVwo9Q+KwWn40=$r1-goPyR0S}$n3pc@435p;{7 zTLtYEv`^3hL5Bp@rfMt|3hEHFL{O)owSv|Q+Ain@L3;$jSKvQLsfS=-58y8f#5d=~mvdsbepLoNHP@~Zt)_19XbRsORsCwnJr zpS8Y!mOqtkYybWgyxPWpwtuIRS8dC@s$=c1T1I)PBWb#FE2i@Qto>8TtG1U^R$lIy zS=SH?Mq`fo2vk#AG(X0;vRRyWl$Dgu$BoYlRV{5k2R)r67Zi#_4(`ELq{VYI8IMyD z$C_k}c3WEcTw@(%mLF@Zf6VweO|Fy7c%CNL4`v*z6|wFx5FYULnun_PFAalEkQR1u!f(LQg)Csj*xaQAeR zOGTvoL}MMRmgZ<@YjXW+#?R5xt)FtR8kFlzvpiPI^(w;iIZ8Y_wKPYQtLYR zls%`HLisv98+ZE(*$vfH2`wWDcUthN0+;&=sc{)HS!hp56Gx~%N{jKyO5=w%;ACI! zS4fu9T70s!(f-^FJYD-AV)AEdc}`@IWWB#-`N>*^r9CeS+$nImE`Jp`wP(*4kwIej zz(L=~hw$_0T{I+i?;CVBDkA(5fwTMFz-t8lfxy{)Zs2VK|LsgLNQXGl=zcTV`SC0c zi0ZW;3w)2j+5KvWJSFgn^sXC{#P1^!oo9~{f=IkI_sTFW@k?n5J6 zD{#55l>0ZBNjoln$Y?cF-QLP!V<-Y~=0Y3HRE__X8)t$@pusVRmtJ?c&x>z=TQH zuZwJOy04N>ewhs(U^wP~8E>IqG<2>`b#Z+C#76#k8@%5Jf6E3>0-r#haPoR_7_x+) zQq%fpnhjoTgI{Tb-(-VpzHl@Wjo}G(AD-NhL3;IQo9?5SzYzrPYz*nmt)T|Q7;cP) z!V%pY>%e0gZSAdo#HTH;C@C*bFQg;*X8^HW@sJ1tdq%@+wWhGQ4e@4UZEb6zqHqYM z8i<-i+ryz|NEiFs+gSk9>eBh`0l&|`CJ;fqReBaB9P=SkG2*9ISLk{mL>9nSUnV05 zBVRhl*XmCN6QUodDlj$c(%e#=!m~yZgqD09pm?r4 zY&F8X^4QWC2?}Ff5E!9{|+0ik0n^|D(v;li{ zeR)l#Y|}|1UMum2<+Dv9nyoJqW0M^1q42jd*sasaV%UnfwWOXVS~QEIYz;r1HkdaV zpjmV3$jCf=xQOA+B7rO6sab{QIMizFT^gxH=!iLTH-#srP`{!}A}lYjCl#68>~abNQ4?Ud}cJ5jg&Q(w<)eQJChi3yG0QhN=3vL!NX}F+-iXKQ^#HBGnxl< z9zCB`S4bZy4dC7p6|z300@icyh!FS6=o!(~M@5P@S5JMZWFe-__$QB~Z65zLlZ2vP zn}sZ~^I5!ndF{kWB^50nSI{C7}?_H5Ln7Y z{64K1QO?2A>ITvw7R9{S-y+sCEsd}yIc|e5Y`BKZqbhG(0LHjFVxViqSXAN6Lr-0P z`b2m3Xi1A@E=%&hvZV5Na#74=WuEACe6UnC^eeF5rzEL^aj7pXFHH%dD@^(;gubL- zFiG?OrcxogPo~x{?`KQuP=%3~>u3po4H>+^9g_XuBI=h^-i^n0g(YkIy+G-=f2rRu z^d)V_evcBhk^C(6taT$pK9&0N{=KB~`2<_47Jd0Ugrt3^sQ*cezP$e@X-qySBN`yvE!)HIYp47tf7g)IqCV>Q*(vHbn&}jl z1??BCBy#*D{|98qe^S5S$x9^tIcJS;>-fEf5>;RRo+9a1X;@gW)_)i{{Wc*ETjO^Z z`G0#>e@T5wk3yFY6{#=pHz%$Fh$Q7Wm*ORU0tGa8rM~B~3VFM$j{$OtxhG@;;%Xjtk7R z)b9{_l1vcwmqy?5NkV&V1{moorvPHqdYX1i(_tT>Q diff --git a/program.cpp b/program.cpp index 2e8200a..50a5ae8 100644 --- a/program.cpp +++ b/program.cpp @@ -1,7 +1,8 @@ -#include -#include - +#include #include +#include + +int zoom = 2; int charA[8][8] = { {0,0,0,0,0,0,0,0}, @@ -59,303 +60,83 @@ int charE[8][8] = { }; -/* Surface to store current scribbles */ -static cairo_surface_t *surface = NULL; +static void do_drawing(cairo_t *); -static void clear_surface(void) +static void draw_pixel(cairo_t *cr, int x, int y, int size) { - cairo_t *cr; - - cr = cairo_create(surface); - - //set to black - cairo_set_source_rgb(cr, 0, 0, 0); - cairo_paint(cr); - - cairo_destroy(cr); -} - -/* Create a new surface of the appropriate size to store our scribbles */ -static gboolean configure_event_cb(GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) -{ - if(surface) - { - cairo_surface_destroy(surface); -} - - surface = gdk_window_create_similar_surface(gtk_widget_get_window(widget), - CAIRO_CONTENT_COLOR, - gtk_widget_get_allocated_width(widget), - gtk_widget_get_allocated_height(widget)); - - /* Initialize the surface to white */ - clear_surface(); - - /* We've handled the configure event, no need for further processing. */ - return TRUE; -} - -/* Redraw the screen from the surface. Note that the ::draw - * signal receives a ready-to-be-used cairo_t that is already - * clipped to only draw the exposed areas of the widget - */ -static gboolean -draw_cb(GtkWidget *widget, - cairo_t *cr, - gpointer data) -{ - cairo_set_source_surface(cr, surface, 0, 0); - cairo_paint(cr); - - return FALSE; -} - -/* Draw a rectangle on the surface at the given position */ -static void -draw_pixel(GtkWidget *widget, - gdouble x, - gdouble y, - int size) -{ - cairo_t *cr; - - /* Paint to the surface, where we store our state */ - cr = cairo_create(surface); - + //set to white cairo_set_source_rgb(cr, 1, 1, 1); + //create rectange and fill it cairo_rectangle(cr, x * size, y * size, size, size); cairo_fill(cr); - - cairo_destroy(cr); - - /* Now invalidate the affected region of the drawing area. */ - gtk_widget_queue_draw_area(widget, x, y, size, size); + } -static void -draw_char(GtkWidget *drawing_area, int zoom, int x, int y, int chara[8][8]) +static void draw_char(cairo_t *cr, int x, int y, int zoom, int charToDraw[8][8]) { - for(int i=0;i<8;i++){ - for(int j=0;j<8;j++){ + //8x8 char loop + for(int i=0;i<8;i++) + { + for(int j=0;j<8;j++) + { + //get actual coords of pixels to draw int realX = j + (x * 8); int realY = i + (y * 8); - switch (chara[i][j]) { - case 1: draw_pixel(drawing_area, realX, realY, zoom); + switch (charToDraw[i][j]) { + case 1: draw_pixel(cr, realX, realY, zoom); break; case 0: break; default: std::cout << "nonstandard num in array" << std::endl; } - - }//end of j - - }//end of i + } + } } -static void -close_window(void) +static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data) +{ + do_drawing(cr); + + return FALSE; +} + +static void do_drawing(cairo_t *cr) { - if(surface) - cairo_surface_destroy(surface); + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_paint(cr); + + draw_char(cr, 0, 0, zoom, charA); + draw_char(cr, 1, 0, zoom, charB); + draw_char(cr, 2, 0, zoom, charC); + draw_char(cr, 3, 0, zoom, charD); + draw_char(cr, 4, 0, zoom, charE); } -static void -zoom1(GtkWidget *drawing_area) -{ - int zoom = 1; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom2(GtkWidget *drawing_area) -{ - int zoom = 2; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom3(GtkWidget *drawing_area) -{ - int zoom = 3; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom4(GtkWidget *drawing_area) -{ - int zoom = 4; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); - -} - - - -static void -activate(GtkApplication *app, - gpointer user_data) +//set up gtk, +int main(int argc, char *argv[]) { GtkWidget *window; - GtkWidget *box; - GtkWidget *frame; - GtkWidget *drawing_area; + GtkWidget *darea; - //define menubar things - GtkWidget *menubar; - GtkWidget *fileMenu; - GtkWidget *fileMi; - GtkWidget *quitMi; - GtkWidget *viewMenu; - GtkWidget *viewMi; - GtkWidget *zoomMi; - GtkWidget *zoomMenu; - GtkWidget *zoom1Mi; - GtkWidget *zoom2Mi; - GtkWidget *zoom3Mi; - GtkWidget *zoom4Mi; + gtk_init(&argc, &argv); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - int zoom = 2; + darea = gtk_drawing_area_new(); + gtk_container_add(GTK_CONTAINER(window), darea); - window = gtk_application_window_new(app); - gtk_window_set_title(GTK_WINDOW(window), "z80 screen test"); + g_signal_connect(G_OBJECT(darea), "draw", + G_CALLBACK(on_draw_event), NULL); + g_signal_connect(window, "destroy", + G_CALLBACK(gtk_main_quit), NULL); + + gtk_window_set_default_size(GTK_WINDOW(window), 320 * zoom, 200 * zoom); + gtk_window_set_title(GTK_WINDOW(window), "z80 screentest"); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - g_signal_connect(window, "destroy", G_CALLBACK(close_window), NULL); - - - gtk_container_set_border_width(GTK_CONTAINER(window), 0); - - box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_container_add(GTK_CONTAINER(window), box); - - - menubar = gtk_menu_bar_new(); - fileMenu = gtk_menu_new(); - viewMenu = gtk_menu_new(); - zoomMenu = gtk_menu_new(); - - fileMi = gtk_menu_item_new_with_label("File"); - quitMi = gtk_menu_item_new_with_label("Quit"); - - viewMi = gtk_menu_item_new_with_label("View"); - zoomMi = gtk_menu_item_new_with_label("Zoom"); - - zoom1Mi = gtk_menu_item_new_with_label("100%"); - zoom2Mi = gtk_menu_item_new_with_label("200%"); - zoom3Mi = gtk_menu_item_new_with_label("300%"); - zoom4Mi = gtk_menu_item_new_with_label("400%"); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(viewMi), viewMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), zoomMi); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), viewMi); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(zoomMi), zoomMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom1Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom2Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom3Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom4Mi); - - gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0); - - g_signal_connect_swapped (quitMi, "activate", - G_CALLBACK (gtk_widget_destroy), - window); - - - - drawing_area = gtk_drawing_area_new(); - /* set a minimum size */ - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - - gtk_box_pack_start(GTK_BOX(box), drawing_area, FALSE, FALSE, 0); - - /* Signals used to handle the backing surface */ - g_signal_connect(drawing_area, "draw", - G_CALLBACK(draw_cb), NULL); - g_signal_connect(drawing_area,"configure-event", - G_CALLBACK(configure_event_cb), NULL); - - - - g_signal_connect_swapped (zoom1Mi, "activate", - G_CALLBACK (zoom1), - drawing_area); - g_signal_connect_swapped (zoom2Mi, "activate", - G_CALLBACK (zoom2), - drawing_area); - g_signal_connect_swapped (zoom3Mi, "activate", - G_CALLBACK (zoom3), - drawing_area); - g_signal_connect_swapped (zoom4Mi, "activate", - G_CALLBACK (zoom4), - drawing_area); - - - gtk_widget_show_all(window); -/* - draw_char(drawing_area, zoom, 0, 0,charA); - draw_char(drawing_area, zoom, 1, 0,charB); - draw_char(drawing_area, zoom, 2, 0,charC); - draw_char(drawing_area, zoom, 3, 0,charD); - draw_char(drawing_area, zoom, 4, 0,charE); -*/ + gtk_main(); - for(int i=0;i<25;i++){ - for(int j=0;j<40;j++){ - - int randNum = (rand() % 5); - - switch(randNum) { - case 0: draw_char(drawing_area, zoom, j, i,charA); break; - case 1: draw_char(drawing_area, zoom, j, i,charB); break; - case 2: draw_char(drawing_area, zoom, j, i,charC); break; - case 3: draw_char(drawing_area, zoom, j, i,charD); break; - case 4: draw_char(drawing_area, zoom, j, i,charE); break; - default: std::cout << "invalid num in rand" << std::endl; break; - } - - //draw_char(drawing_area, zoom, j, i,charA); - - - }//end of j - - }//end of i - - - /* -std::cout << "got here" << std::endl; - zoom = 4; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); - - draw_pixel(drawing_area, 0, 0, zoom); - */ -} - - -int -main(int argc, - char **argv) -{ - GtkApplication *app; - int status; - - app = gtk_application_new("com.github.amberisvibin.z80screentest", G_APPLICATION_FLAGS_NONE); - g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); - status = g_application_run(G_APPLICATION(app), argc, argv); - g_object_unref(app); - - return status; + return 0; } From ea0dd8a141da58ab91500b27a40f7bb1ff5496f9 Mon Sep 17 00:00:00 2001 From: luke zeller Date: Thu, 23 Apr 2020 15:22:55 -0400 Subject: [PATCH 6/8] the function does not run every frame, just on every draw. fixed a few things --- program | Bin 19808 -> 19808 bytes program.cpp | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/program b/program index efb85dbfb5f1e394d3ce17db53c7a43ab7007ddc..e645e0c3ccd3fac68ea90ee27456e3a65e40ff19 100755 GIT binary patch delta 487 zcmaDbi}ArM#tj^doJ%o#q!VK!lB zWZk@x%awy;8Y=^XM=!7Z=6^y`EcGs#4^9BJceDQ1U|`6+@q(Fw;l+aA|Nnb*9`fjR zec;h~&7<@93%_6g|GRWP>bwWyBm$*h)L^L50;=)oH9Z7$4oForkozJGLlp~9cpu2U zAT{N`1b}+L)*OFv8l*vN@>+3I;=+Cfb zCo%G{bI1UN4S;e-CVy3wXZ$!>R7sif#biq*cSeEDjY{@hjI5In>Xb9i*lekLofAk2 zn&&ey?wH(YDGrpGY5AS8X!1m>e8w4*8Lh<`Cv29q{?5p#uvyS{JrCp7$p=04IcG?K OLWhB2#^#@%>C6CW5y)Qv delta 499 zcmaDbi}ArM#tj^doLe~z1&;evZ!{5*SZOP{}n$GrXbe_3s=VK!lB zJZaC zCjS>#u+-z1Zvlru+Jw*ia=#qIeR^%HRTvl?!#q2$Ifi<6esv6S?EDkz(W_em6b|;$ z{Oi&DhU3Nj&3+P#*e5B>ku3ZE|Njz328P2x`UsGI0i<65>4?o+733KeD}YP}S3ZF@ zCTCtY_a5eE7Um2_9(E2Hps)c@?$qS3it>!#CyOd6Gya%tspQV6u(?smo{N!t@ Date: Tue, 28 Apr 2020 15:06:11 -0400 Subject: [PATCH 7/8] a hell of a lot changed. ported from gtk to sdl added entire font added keyboard control added cursor TODO: backspace works on every char of every line, make aware of newline add colour to drawChar --- program | Bin 19808 -> 76448 bytes program.cpp | 1262 ++++++++++++++++++++++++++--- spriteconvert/array.txt | 761 +++++++++++++++++ spriteconvert/program | Bin 0 -> 17168 bytes spriteconvert/program.cpp | 17 + spriteconvert/script.py | 47 ++ spriteconvert/sprite/letter00.png | Bin 0 -> 98 bytes spriteconvert/sprite/letter01.png | Bin 0 -> 96 bytes spriteconvert/sprite/letter02.png | Bin 0 -> 94 bytes spriteconvert/sprite/letter03.png | Bin 0 -> 98 bytes spriteconvert/sprite/letter04.png | Bin 0 -> 99 bytes spriteconvert/sprite/letter05.png | Bin 0 -> 97 bytes spriteconvert/sprite/letter06.png | Bin 0 -> 103 bytes spriteconvert/sprite/letter07.png | Bin 0 -> 95 bytes spriteconvert/sprite/letter08.png | Bin 0 -> 92 bytes spriteconvert/sprite/letter09.png | Bin 0 -> 96 bytes spriteconvert/sprite/letter10.png | Bin 0 -> 95 bytes spriteconvert/sprite/letter11.png | Bin 0 -> 91 bytes spriteconvert/sprite/letter12.png | Bin 0 -> 110 bytes spriteconvert/sprite/letter13.png | Bin 0 -> 103 bytes spriteconvert/sprite/letter14.png | Bin 0 -> 93 bytes spriteconvert/sprite/letter15.png | Bin 0 -> 100 bytes spriteconvert/sprite/letter16.png | Bin 0 -> 104 bytes spriteconvert/sprite/letter17.png | Bin 0 -> 98 bytes spriteconvert/sprite/letter18.png | Bin 0 -> 99 bytes spriteconvert/sprite/letter19.png | Bin 0 -> 90 bytes spriteconvert/sprite/letter20.png | Bin 0 -> 95 bytes spriteconvert/sprite/letter21.png | Bin 0 -> 99 bytes spriteconvert/sprite/letter22.png | Bin 0 -> 98 bytes spriteconvert/sprite/letter23.png | Bin 0 -> 103 bytes spriteconvert/sprite/letter24.png | Bin 0 -> 96 bytes spriteconvert/sprite/letter25.png | Bin 0 -> 106 bytes spriteconvert/sprite/letter26.png | Bin 0 -> 102 bytes spriteconvert/sprite/letter27.png | Bin 0 -> 109 bytes spriteconvert/sprite/letter28.png | Bin 0 -> 104 bytes spriteconvert/sprite/letter29.png | Bin 0 -> 107 bytes spriteconvert/sprite/letter30.png | Bin 0 -> 108 bytes spriteconvert/sprite/letter31.png | Bin 0 -> 107 bytes spriteconvert/sprite/letter32.png | Bin 0 -> 96 bytes spriteconvert/sprite/letter33.png | Bin 0 -> 91 bytes spriteconvert/sprite/letter34.png | Bin 0 -> 104 bytes spriteconvert/sprite/letter35.png | Bin 0 -> 93 bytes spriteconvert/sprite/letter36.png | Bin 0 -> 91 bytes spriteconvert/sprite/letter37.png | Bin 0 -> 85 bytes spriteconvert/sprite/letter38.png | Bin 0 -> 85 bytes spriteconvert/sprite/letter39.png | Bin 0 -> 104 bytes spriteconvert/sprite/letter40.png | Bin 0 -> 100 bytes spriteconvert/sprite/letter41.png | Bin 0 -> 92 bytes spriteconvert/sprite/letter42.png | Bin 0 -> 83 bytes spriteconvert/sprite/letter43.png | Bin 0 -> 90 bytes spriteconvert/sprite/letter44.png | Bin 0 -> 96 bytes spriteconvert/sprite/letter45.png | Bin 0 -> 87 bytes spriteconvert/sprite/letter46.png | Bin 0 -> 87 bytes spriteconvert/sprite/letter47.png | Bin 0 -> 90 bytes spriteconvert/sprite/letter48.png | Bin 0 -> 81 bytes spriteconvert/sprite/letter49.png | Bin 0 -> 105 bytes spriteconvert/sprite/letter50.png | Bin 0 -> 97 bytes spriteconvert/sprite/letter51.png | Bin 0 -> 87 bytes spriteconvert/sprite/letter52.png | Bin 0 -> 102 bytes spriteconvert/sprite/letter53.png | Bin 0 -> 98 bytes spriteconvert/sprite/letter54.png | Bin 0 -> 100 bytes spriteconvert/sprite/letter55.png | Bin 0 -> 113 bytes spriteconvert/sprite/letter56.png | Bin 0 -> 109 bytes spriteconvert/sprite/letter57.png | Bin 0 -> 94 bytes spriteconvert/sprite/letter58.png | Bin 0 -> 93 bytes spriteconvert/sprite/letter59.png | Bin 0 -> 106 bytes spriteconvert/sprite/letter60.png | Bin 0 -> 103 bytes spriteconvert/sprite/letter61.png | Bin 0 -> 108 bytes spriteconvert/sprite/letter62.png | Bin 0 -> 91 bytes spriteconvert/sprite/letter63.png | Bin 0 -> 81 bytes spriteconvert/sprite/letter64.png | Bin 0 -> 103 bytes spriteconvert/sprite/letter65.png | Bin 0 -> 100 bytes spriteconvert/sprite/letter66.png | Bin 0 -> 95 bytes spriteconvert/sprite/letter67.png | Bin 0 -> 90 bytes 74 files changed, 1954 insertions(+), 133 deletions(-) create mode 100644 spriteconvert/array.txt create mode 100755 spriteconvert/program create mode 100644 spriteconvert/program.cpp create mode 100644 spriteconvert/script.py create mode 100644 spriteconvert/sprite/letter00.png create mode 100644 spriteconvert/sprite/letter01.png create mode 100644 spriteconvert/sprite/letter02.png create mode 100644 spriteconvert/sprite/letter03.png create mode 100644 spriteconvert/sprite/letter04.png create mode 100644 spriteconvert/sprite/letter05.png create mode 100644 spriteconvert/sprite/letter06.png create mode 100644 spriteconvert/sprite/letter07.png create mode 100644 spriteconvert/sprite/letter08.png create mode 100644 spriteconvert/sprite/letter09.png create mode 100644 spriteconvert/sprite/letter10.png create mode 100644 spriteconvert/sprite/letter11.png create mode 100644 spriteconvert/sprite/letter12.png create mode 100644 spriteconvert/sprite/letter13.png create mode 100644 spriteconvert/sprite/letter14.png create mode 100644 spriteconvert/sprite/letter15.png create mode 100644 spriteconvert/sprite/letter16.png create mode 100644 spriteconvert/sprite/letter17.png create mode 100644 spriteconvert/sprite/letter18.png create mode 100644 spriteconvert/sprite/letter19.png create mode 100644 spriteconvert/sprite/letter20.png create mode 100644 spriteconvert/sprite/letter21.png create mode 100644 spriteconvert/sprite/letter22.png create mode 100644 spriteconvert/sprite/letter23.png create mode 100644 spriteconvert/sprite/letter24.png create mode 100644 spriteconvert/sprite/letter25.png create mode 100644 spriteconvert/sprite/letter26.png create mode 100644 spriteconvert/sprite/letter27.png create mode 100644 spriteconvert/sprite/letter28.png create mode 100644 spriteconvert/sprite/letter29.png create mode 100644 spriteconvert/sprite/letter30.png create mode 100644 spriteconvert/sprite/letter31.png create mode 100644 spriteconvert/sprite/letter32.png create mode 100644 spriteconvert/sprite/letter33.png create mode 100644 spriteconvert/sprite/letter34.png create mode 100644 spriteconvert/sprite/letter35.png create mode 100644 spriteconvert/sprite/letter36.png create mode 100644 spriteconvert/sprite/letter37.png create mode 100644 spriteconvert/sprite/letter38.png create mode 100644 spriteconvert/sprite/letter39.png create mode 100644 spriteconvert/sprite/letter40.png create mode 100644 spriteconvert/sprite/letter41.png create mode 100644 spriteconvert/sprite/letter42.png create mode 100644 spriteconvert/sprite/letter43.png create mode 100644 spriteconvert/sprite/letter44.png create mode 100644 spriteconvert/sprite/letter45.png create mode 100644 spriteconvert/sprite/letter46.png create mode 100644 spriteconvert/sprite/letter47.png create mode 100644 spriteconvert/sprite/letter48.png create mode 100644 spriteconvert/sprite/letter49.png create mode 100644 spriteconvert/sprite/letter50.png create mode 100644 spriteconvert/sprite/letter51.png create mode 100644 spriteconvert/sprite/letter52.png create mode 100644 spriteconvert/sprite/letter53.png create mode 100644 spriteconvert/sprite/letter54.png create mode 100644 spriteconvert/sprite/letter55.png create mode 100644 spriteconvert/sprite/letter56.png create mode 100644 spriteconvert/sprite/letter57.png create mode 100644 spriteconvert/sprite/letter58.png create mode 100644 spriteconvert/sprite/letter59.png create mode 100644 spriteconvert/sprite/letter60.png create mode 100644 spriteconvert/sprite/letter61.png create mode 100644 spriteconvert/sprite/letter62.png create mode 100644 spriteconvert/sprite/letter63.png create mode 100644 spriteconvert/sprite/letter64.png create mode 100644 spriteconvert/sprite/letter65.png create mode 100644 spriteconvert/sprite/letter66.png create mode 100644 spriteconvert/sprite/letter67.png diff --git a/program b/program index e645e0c3ccd3fac68ea90ee27456e3a65e40ff19..89ad4403ed3238f58b678f05c8f769eacad6338c 100755 GIT binary patch literal 76448 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%0Ab+8ST)7l80JqEfL=8>_LAk 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 diff --git a/program.cpp b/program.cpp index b68ddef..c5c35d7 100644 --- a/program.cpp +++ b/program.cpp @@ -1,146 +1,1142 @@ -#include -#include +//Z80 SCREENTEST +#include +#include +#include #include +#include +#include +#include +using namespace std; -int zoom = 2; +//define chars +bool chars[69][8][8] { -int charA[8][8] = { - {0,0,0,0,0,0,0,0}, - {0,1,1,1,1,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,1,1,1,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,0,0,0,0,0,0,0}, -}; - -int charB[8][8] = { - {0,0,0,0,0,0,0,0}, - {0,1,1,1,1,0,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,1,1,1,0,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,1,1,1,0,0,0}, - {0,0,0,0,0,0,0,0}, -}; - -int charC[8][8] = { - {0,0,0,0,0,0,0,0}, - {0,0,1,1,1,1,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,0,0,0,0,0,0}, - {0,0,1,1,1,1,0,0}, - {0,0,0,0,0,0,0,0}, -}; - -int charD[8][8] = { - {0,0,0,0,0,0,0,0}, - {0,1,1,1,1,0,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,0,0,0,1,0,0}, - {0,1,1,1,1,0,0,0}, - {0,0,0,0,0,0,0,0}, -}; - -int charE[8][8] = { - {0,0,0,0,0,0,0,0}, - {0,1,1,1,1,1,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,1,1,1,0,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,0,0,0,0,0,0}, - {0,1,1,1,1,1,0,0}, - {0,0,0,0,0,0,0,0}, -}; - - -static void do_drawing(cairo_t *); - -static void draw_pixel(cairo_t *cr, int x, int y, int size) -{ - - //set to white - cairo_set_source_rgb(cr, 1, 1, 1); - - //create rectange and fill it - cairo_rectangle(cr, x * size, y * size, size, size); - cairo_fill(cr); - -} - -static void draw_char(cairo_t *cr, int x, int y, int zoom, int charToDraw[8][8]) -{ - //8x8 char loop - for(int i=0;i<8;i++) - { - for(int j=0;j<8;j++) { - //get actual coords of pixels to draw - int realX = j + (x * 8); - int realY = i + (y * 8); - switch (charToDraw[i][j]) { - case 1: draw_pixel(cr, realX, realY, zoom); - break; - case 0: break; - default: std::cout << "nonstandard num in array" << std::endl; - } + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,0,1,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,1,0,0,0,}, + {0,0,1,1,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,1,0,0,}, + {0,0,1,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,1,0,0,}, + {0,1,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,1,0,0,}, + {0,1,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,1,0,0,1,0,0,0,}, + {0,0,1,1,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,0,1,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, +}; + +map charMap{ {SDLK_SPACE, 0}, + {SDLK_a, 1}, + {SDLK_b, 2}, + {SDLK_c, 3}, + {SDLK_d, 4}, + {SDLK_e, 5}, + {SDLK_f, 6}, + {SDLK_g, 7}, + {SDLK_h, 8}, + {SDLK_i, 9}, + {SDLK_j, 10}, + {SDLK_k, 11}, + {SDLK_l, 12}, + {SDLK_m, 13}, + {SDLK_n, 14}, + {SDLK_o, 15}, + {SDLK_p, 16}, + {SDLK_q, 17}, + {SDLK_r, 18}, + {SDLK_s, 19}, + {SDLK_t, 20}, + {SDLK_u, 21}, + {SDLK_v, 22}, + {SDLK_w, 23}, + {SDLK_x, 24}, + {SDLK_y, 25}, + {SDLK_z, 26}, + {SDLK_1, 27}, + {SDLK_2, 28}, + {SDLK_3, 29}, + {SDLK_4, 30}, + {SDLK_5, 31}, + {SDLK_6, 32}, + {SDLK_7, 33}, + {SDLK_8, 34}, + {SDLK_9, 35}, + {SDLK_0, 36}, + {SDLK_BACKQUOTE, 37}, + {SDLK_MINUS, 38}, + {SDLK_EQUALS, 39}, + {SDLK_BACKSLASH, 40}, + {SDLK_SLASH, 41}, + {SDLK_LEFTBRACKET, 42}, + {SDLK_RIGHTBRACKET, 44}, + {SDLK_SEMICOLON, 45}, + {SDLK_QUOTE, 47}, + {SDLK_COMMA, 48}, + {SDLK_PERIOD, 49}, + +}; + +map shiftMap{ {SDLK_SPACE, 0}, + {SDLK_a, 1}, + {SDLK_b, 2}, + {SDLK_c, 3}, + {SDLK_d, 4}, + {SDLK_e, 5}, + {SDLK_f, 6}, + {SDLK_g, 7}, + {SDLK_h, 8}, + {SDLK_i, 9}, + {SDLK_j, 10}, + {SDLK_k, 11}, + {SDLK_l, 12}, + {SDLK_m, 13}, + {SDLK_n, 14}, + {SDLK_o, 15}, + {SDLK_p, 16}, + {SDLK_q, 17}, + {SDLK_r, 18}, + {SDLK_s, 19}, + {SDLK_t, 20}, + {SDLK_u, 21}, + {SDLK_v, 22}, + {SDLK_w, 23}, + {SDLK_x, 24}, + {SDLK_y, 25}, + {SDLK_z, 26}, + {SDLK_1, 52}, + {SDLK_2, 62}, + {SDLK_3, 54}, + {SDLK_4, 55}, + {SDLK_5, 56}, + {SDLK_6, 63}, + {SDLK_7, 57}, + {SDLK_8, 50}, + {SDLK_9, 58}, + {SDLK_0, 59}, + {SDLK_BACKQUOTE, 67}, + {SDLK_MINUS, 64}, + {SDLK_EQUALS, 51}, + {SDLK_BACKSLASH, 43}, + {SDLK_SLASH, 53}, + {SDLK_LEFTBRACKET, 66}, + {SDLK_RIGHTBRACKET, 65}, + {SDLK_SEMICOLON, 46}, + {SDLK_QUOTE, 68}, + {SDLK_COMMA, 60}, + {SDLK_PERIOD, 61}, + +}; + + +//int screen[40][25]; but in vector +vector< vector > screen(40, vector(25)); + +const char* ver = "0.1.0-prerelease"; + +bool cursor = false; + +void drawChar(SDL_Renderer *renderer, int scale, int x, int y, int charToDraw) { + + + + + //set up + SDL_RenderSetScale(renderer, scale, scale); + + + //8x8 char loop + for(int i=0;i<8;i++) { + for(int j=0;j<8;j++) { + + //get actual coords of pixels to draw + int realX = j + (x * 8); + int realY = i + (y * 8); + + if (chars[charToDraw][i][j]) { + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderDrawPoint(renderer, realX, realY); + + } else { + + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderDrawPoint(renderer, realX, realY); + + } + } } - } + } -static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data) -{ - do_drawing(cr); +void drawScreen(SDL_Renderer *renderer, int scale, int x, int y) { + + for(int c=0;c<40;c++) { + for(int d=0;d<25;d++) { + drawChar(renderer, scale, c, d, screen[c][d]); + } + } + + if (cursor) { + + drawChar(renderer, scale, x, y, 64); + + } - return FALSE; } -static void do_drawing(cairo_t *cr) -{ +void clearScreen() { + + /*for(int c=0;c<40;c++) { + for(int d=0;d<25;d++) { + screen[c][d] = 0; + } + }*/ + + screen.clear(); + +} + +void scrollScreen() { + + for(int c=0;c<40;c++) { + for(int d=0;d<24;d++) { + screen[c][d] = screen[c][d+1]; + } + } + + for(int c=0;c<40;c++) { + + screen[c][24] = 0; + + } + +} + +int main(int argc, char* argv[]) { + + //setup + + //output version info + + SDL_version compiled; + SDL_version linked; + + SDL_VERSION(&compiled); + SDL_GetVersion(&linked); + + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Z80SCREENTEST %s", ver); + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "SDL2 compile %d.%d.%d", + compiled.major, compiled.minor, compiled.patch); + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "SDL2 link %d.%d.%d", + linked.major, linked.minor, linked.patch); + + + + //declare pointers + SDL_Window *window; + SDL_Renderer *renderer; + + //set a scale + int scale = 4; + + //prevent crash on some os's + SDL_SetMainReady(); + + //initialize SDL2 + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init failed: %s", SDL_GetError()); + SDL_Quit(); + return 3; + }; + + //create window with properties: + window = SDL_CreateWindow( + "Z80 SCREENTEST", //window title + SDL_WINDOWPOS_UNDEFINED, //initial x position + SDL_WINDOWPOS_UNDEFINED, //initial y position + 320 * scale, //width, in pixels + 200 * scale, //height, in pixels + SDL_WINDOW_OPENGL //flags - see below + ); + + // Check that the window was successfully created + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindow failed: %s", SDL_GetError()); + SDL_Quit(); + return 3; + }; + + //create renderer + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + + if (renderer == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateRenderer failed: %s", SDL_GetError()); + SDL_Quit(); + return 3; + }; + + //clear screen to black + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + //test drawing section (will be removed once program loop is implemented +/* + SDL_RenderSetScale(renderer, scale, scale); + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + SDL_RenderDrawPoint(renderer, 0, 0); + + + drawChar(renderer, scale, 0, 0, 0); + + SDL_RenderPresent(renderer); +*/ + + + + int a = 0; + int b = 0; + + Uint32 time = SDL_GetTicks(); + + //program loop + bool close = 0; + while (!close) { + + drawScreen(renderer, scale, a, b); + SDL_RenderPresent(renderer); + + if (SDL_TICKS_PASSED(SDL_GetTicks(), time + 500)) { + + cursor = !cursor; + time = SDL_GetTicks(); + + } + + + + + //handle events + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { - cairo_set_source_rgb(cr, 0, 0, 0); - cairo_paint(cr); + //close + case SDL_QUIT: + close = 1; + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { - draw_char(cr, 0, 0, zoom, charA); - draw_char(cr, 1, 0, zoom, charB); - draw_char(cr, 2, 0, zoom, charC); - draw_char(cr, 3, 0, zoom, charD); - draw_char(cr, 4, 0, zoom, charE); -} - -//set up gtk, -int main(int argc, char *argv[]) -{ - GtkWidget *window; - GtkWidget *darea; - - gtk_init(&argc, &argv); - - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - - darea = gtk_drawing_area_new(); - gtk_container_add(GTK_CONTAINER(window), darea); - - g_signal_connect(G_OBJECT(darea), "draw", - G_CALLBACK(on_draw_event), NULL); - g_signal_connect(window, "destroy", - G_CALLBACK(gtk_main_quit), NULL); - - gtk_window_set_default_size(GTK_WINDOW(window), 320 * zoom, 200 * zoom); - gtk_window_set_title(GTK_WINDOW(window), "z80 screentest"); - gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - - gtk_widget_show_all(window); - - gtk_main(); - - - - return 0; + case SDLK_RETURN: + cursor = true; + a = 0; + if (b < 24) { b++; } else { b = 24; scrollScreen(); } + time = SDL_GetTicks(); + break; + + case SDLK_TAB: + a = a + 2; + break; + + case SDLK_BACKSPACE: + + cursor = true; + + if (a == 0) { + if (b != 0) { + a = 40; + b = b - 1; + } else { + break; + } + } + a = a - 1; + screen[a][b] = 0; + + time = SDL_GetTicks(); + + break; + + default: + + if (charMap.count(event.key.keysym.sym) == 0) { break; } + + cursor = true; + + if (event.key.keysym.mod == 4097) { + + screen[a][b] = shiftMap[event.key.keysym.sym]; + + } else { + + screen[a][b] = charMap[event.key.keysym.sym]; + + } + + if (a < 39) { a++; } else { a = 0; b++; } + if (b < 25) {} else { b = 24; scrollScreen(); } + + time = SDL_GetTicks(); + + break; + + } + } + } + } + + //destroy things + SDL_DestroyWindow(window); + SDL_DestroyRenderer(renderer); + + //clean up sdl + SDL_Quit(); + + return 0; } diff --git a/spriteconvert/array.txt b/spriteconvert/array.txt new file mode 100644 index 0000000..2b03af8 --- /dev/null +++ b/spriteconvert/array.txt @@ -0,0 +1,761 @@ +bool chars[69][8][8] { + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,0,1,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,0,1,0,0,0,}, + {0,0,1,1,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,1,0,0,}, + {0,0,1,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,1,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,1,0,1,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,1,1,0,0,1,0,0,}, + {0,1,1,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,1,0,0,}, + {0,1,0,0,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,1,0,1,0,0,0,0,}, + {0,1,0,0,1,0,0,0,}, + {0,0,1,1,0,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,1,0,0,0,}, + {0,1,0,0,0,1,0,0,}, + {0,1,0,1,0,1,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,1,0,0,0,0,0,0,}, + {0,0,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,0,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,1,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,1,0,0,0,0,0,}, + {0,0,0,1,0,0,0,0,}, + {0,0,0,1,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,1,1,1,0,1,0,0,}, + {0,1,0,1,1,1,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, + + { + {0,0,0,0,0,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,1,0,1,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, +}; \ No newline at end of file diff --git a/spriteconvert/program b/spriteconvert/program new file mode 100755 index 0000000000000000000000000000000000000000..4fbaf24cb71239fa876817c58109b7faf43c2ac2 GIT binary patch literal 17168 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 literal 0 HcmV?d00001 diff --git a/spriteconvert/program.cpp b/spriteconvert/program.cpp new file mode 100644 index 0000000..b5360d2 --- /dev/null +++ b/spriteconvert/program.cpp @@ -0,0 +1,17 @@ +#include +#include +#include + +using namespace std; + +int main(int argc, char* argv[]) { + + //initialize SDL2 + if (SDL_Init() < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init failed: %s", SDL_GetError()); + SDL_Quit(); + return 3; + }; + + +} diff --git a/spriteconvert/script.py b/spriteconvert/script.py new file mode 100644 index 0000000..062b0f4 --- /dev/null +++ b/spriteconvert/script.py @@ -0,0 +1,47 @@ +from PIL import Image + +length = 68 + +current = 0 + +f = open("array.txt", "w") + +f.write("bool chars[{}][8][8] ".format(length + 1) + "{ \n") + +f.write(""" + { + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + {0,0,0,0,0,0,0,0,}, + }, +""") + +for k in range(length): + + if current < 10: + img = Image.open("sprite/letter0{}.png".format(current)) + else: + img = Image.open("sprite/letter{}.png".format(current)) + + w,h = img.size + + f.write("\n {\n") + + for i in range(h): + f.write(" {") + for j in range(w): + + r,g,b,p = img.getpixel((j,i)) + if p == 0: + f.write("0,") + if p == 255: + f.write("1,") + f.write("},\n") + f.write(" },\n") + current += 1 +f.write("};") diff --git a/spriteconvert/sprite/letter00.png b/spriteconvert/sprite/letter00.png new file mode 100644 index 0000000000000000000000000000000000000000..5afb41a9f09636fdc7bdcbc4d8fed68b61411cd2 GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqnw~C>AsWHSDGCe{3qSqexPtk# vqISbZ$43gh5?mK}74Nb%g*^yuxV)L+{sJye6I*Wype6=SS3j3^P6Ygr+AsWHSDGCe{3qSq8c;(;` t$qAwdSS2MS9Hb7^yqe`OQ`Ewin_=q$PR<1WO=>_b44$rjF6*2UngA@p8H)e_ literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter02.png b/spriteconvert/sprite/letter02.png new file mode 100644 index 0000000000000000000000000000000000000000..2347ae8ab9607e402167ed72da003b72bca637e3 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqs-7;6AsWHSDGCe{6QBHFypr|w sL6HWPiK2(EUJ7J9;kT#n$je9ukCkkkPZ!ko05vdpy85}Sb4q9e065beDgXcg literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter03.png b/spriteconvert/sprite/letter03.png new file mode 100644 index 0000000000000000000000000000000000000000..367151856608d69921903ff9d0688d579bb48e1d GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqnw~C>AsWHSDGCe{3qSq8c;(;` v$qAwdSS2MS9Hb7^SZO~jM;OXk;vd$@?2>`Ad9OM81 literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter05.png b/spriteconvert/sprite/letter05.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbd40f72deda35940084d5623447fdef124ed6e GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq8lEnWAsWHSDGCe{3qSqexPtk# uqISc^z$=f87}w2E5$1?$3}^H^&%_Y0l#SC+waf*mhr!d;&t;ucLK6Tq{TV3$ literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter06.png b/spriteconvert/sprite/letter06.png new file mode 100644 index 0000000000000000000000000000000000000000..3051e14a80722a1768684d7d6b54dbbb2f942303 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqdY&$hAsWHSDGCe{3qSqexPtk# zqISc^z$=Ti9n3h_b1Jkh(RSD-{Z4KTpK}-|!<+@2oV%PFeSta|JYD@<);T3K0RZpj B95?^~ literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter07.png b/spriteconvert/sprite/letter07.png new file mode 100644 index 0000000000000000000000000000000000000000..00b8c968ba1960891edf66fdab993a8b76eea13f GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqYMw5RAsWHSDGCe{3qSprl#ocs snIJI7e-cy4=>xMojT(*2AAHeaSht&-Gko3ZHlPj$Pgg&ebxsLQ00MU!LjV8( literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter08.png b/spriteconvert/sprite/letter08.png new file mode 100644 index 0000000000000000000000000000000000000000..9415f3f7d7a4d05203353e423561296cabf2fab1 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq%APKcAsWHSDGCe{3qSqexPtlg pL6HMb9JvCIyjanY;ht2%#$d3JjZ>MuGY6=g!PC{xWt~$(69C*u82JDI literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter09.png b/spriteconvert/sprite/letter09.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa959f97efa45f1f8ef4721822a698fd91b3f0d GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq>Ygr+AsWHSDGCe{3qSqexPtlg uK@o-1%_4`7zFfobEI=fC<4(q-&I~eZ**I6JW?BQaFnGH9xvXv$=R*0?e4q{nPgg&ebxsLQ00_hyH~;_u literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter11.png b/spriteconvert/sprite/letter11.png new file mode 100644 index 0000000000000000000000000000000000000000..ed092ad52ce7315c33d2034d5f3e3c873e3b120a GIT binary patch literal 91 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqN}eu`AsWHSDGCe{3qSprl#ocs o5z%e-W!zPN;N9U@MJZDm0yeU7e(cMA22{=9>FVdQ&MBb@0HDShVgLXD literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter12.png b/spriteconvert/sprite/letter12.png new file mode 100644 index 0000000000000000000000000000000000000000..e9292db42077f7032ae200531ded8e73325359f7 GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqrk*a2AsWHSDGCe{3qSprl#ocs znIJHye+`2Qzopr0JQ`g Aw*UYD literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter14.png b/spriteconvert/sprite/letter14.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9a572773eab36f2db24d230b7b9d109989a35c GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqDxNNmAsWHSDGCe{6QBH7-uUp5 p0h@AsWHSDGCe{3qSq8c;(;` v$qAwdSS2MS9Hb7^OcGJJ?Zm8IP$kB|u$_yu_sEeDpe6=SS3j3^P6U@(!5Q~OQLJD@HGPgg&ebxsLQ0CoBs7ytkO literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter19.png b/spriteconvert/sprite/letter19.png new file mode 100644 index 0000000000000000000000000000000000000000..23cf3b06d5cbf847959f033911bd1a40e5e78fb5 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqik>cxAsWHSDGCe{3qSqexPtlg nL6HMb9JvCIuq|fdInThLv5}3_nd7%8P%(q2tDnm{r-UW|gmM=m literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter20.png b/spriteconvert/sprite/letter20.png new file mode 100644 index 0000000000000000000000000000000000000000..8caffca97701701b8ec3f2052c3b26d01aa2ff72 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqYMw5RAsWHSDGCe{3qSprl#ocs snIJI7eul^a8Me>DcMhJ=JN_z>f%g(O=a(O{fj}J$p00i_>zopr00#IPbN~PV literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter21.png b/spriteconvert/sprite/letter21.png new file mode 100644 index 0000000000000000000000000000000000000000..e38c84f4db693290e0968c9cab0b364a360ba8c2 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqTAnVBAsWHSDGCe{3qSprl#ocs wnIJI7-<|cuw?#YHZzgK=HCOV*GPW&eAsWHSDGCe{3qSprl#ocs vnIJI7o`EZ&EO`gx%|s18w=&BxerATgOT3)SWmdOYgr+AsWHSDGCe{3qSprl#ocs tnIJHy-&erZa1)crT!Y!{4vcNf8P}fR;51y(-3rvg;OXk;vd$@?2>{sp7$*P# literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter25.png b/spriteconvert/sprite/letter25.png new file mode 100644 index 0000000000000000000000000000000000000000..3722b8d0df1071fc1fbc39e1eb1e33280c1884cd GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqhMq2tAsWHSDGCe{3qSqexPtlg zK@o-1%_4`7UKCy6v1oRKV&@u$)hfG~O3ELVsB}3oSS)1YoN_~c1yD1Cr>mdKI;Vst E0J32qCjbBd literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter26.png b/spriteconvert/sprite/letter26.png new file mode 100644 index 0000000000000000000000000000000000000000..bee5e4998a1c63f13cc47f6a1e4405d2aa17d7c1 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqx}GkMAsWHSDGCe{6QBHdzIh^v z$AHg6=t$eef?ADLnX4I|Ii%P(u5~YGZd=ayY9%}8!_dq%K#dHZu6{1-oD!M<`R^U` literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter27.png b/spriteconvert/sprite/letter27.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f84a1f514d8848bf5dd4bf352421e7cacc0fc3 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqCY~;iAsWHSDGCe{6QBH7-uUp5 z0h@CS_T0p@Ub(PJj6rh?2dBOczc^4UgQu&X%Q~loCIIe~ B8vpl~LGLgp=ars+Z9v@&p00i_>zopr E07<Ygr+AsWHSDGCe{3qSqexPtlg tL6HTgn@t{sFiby^#?+;fE0R#b#vrqijngpicL-1mgQu&X%Q~loCICR*8cP5G literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter33.png b/spriteconvert/sprite/letter33.png new file mode 100644 index 0000000000000000000000000000000000000000..02436b8d05011963d24b7d2e33ab64160af1e31c GIT binary patch literal 91 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqN}eu`AsWHSDGCe{6QBH7-uUp5 o0h@FVdQ&MBb@0Dx~71ONa4 literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter34.png b/spriteconvert/sprite/letter34.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f6a40488f634e9d4192b7ba64113fd57b22a4a GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq`kpS1AsWHSDGCe{6QBH7-uUp5 z0h@d!}Y+9kwM`g8)vh?!33aI22WQ%mvv4FO#t;e B98UlM literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter40.png b/spriteconvert/sprite/letter40.png new file mode 100644 index 0000000000000000000000000000000000000000..529016b21b46ff4fdb6cfa5188c42b608a520edb GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq+MX_sAsWHSDGCe{g(v=}CnPYO xP7G$4eq!cJ`iCq(Y4`_9so~R+m%%E_PjdPmfRXd#vDWd literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter42.png b/spriteconvert/sprite/letter42.png new file mode 100644 index 0000000000000000000000000000000000000000..9d276a9ae733a70d5ad80e97159052e449998fd3 GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqQl2i3AsWHSDGCe{7oYq$HZWMw f!RyH?F^`Qw;UF6)cV1W(P!)rxtDnm{r-UW|n?4eM literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter43.png b/spriteconvert/sprite/letter43.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1c97c93618c176322c6fdbff66c66e422b95e2 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqik>cxAsWHSDGCe{6QBH7-uUp* n39f`s3a!jb8#3G%Rmd<%Y-Ho?J~UMqsF=ai)z4*}Q$iB}q1qUa literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter44.png b/spriteconvert/sprite/letter44.png new file mode 100644 index 0000000000000000000000000000000000000000..c67029ff816542964eb9eca3705f8e8f94f94afd GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq>Ygr+AsWHSDGCe{7oYq$HZWMw tu~7SfL4OJ>%i0608JvZlC^Y3UFx*_t!g-^6(HWo?22WQ%mvv4FO#mlh8n*xd literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter45.png b/spriteconvert/sprite/letter45.png new file mode 100644 index 0000000000000000000000000000000000000000..0487a3fc6485efc37cc203f8c9e2de757fb7753c GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqa-J@ZAsWHSDGCe{7oYq$HZWMw ku~7SfK|X`Xgm)ece4Cj#@9iwP2UN-6>FVdQ&MBb@05Yf+?EnA( literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter46.png b/spriteconvert/sprite/letter46.png new file mode 100644 index 0000000000000000000000000000000000000000..946f8f607bc4110c694ff06866244662c14a24dd GIT binary patch literal 87 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqa-J@ZAsWHSDGCe{7oYq$HZWMw kF>wvUVW$#dHYY}gNt>BCckP-S1ysr4>FVdQ&MBb@03o>*_5c6? literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter47.png b/spriteconvert/sprite/letter47.png new file mode 100644 index 0000000000000000000000000000000000000000..84065707c86ec4ea74add9ae13fa558c39baf4d5 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqik>cxAsWHSDGCe{FV{b?XJ%&Z n+WI2zz-k6(p(l(@`xqFQ)-!V&_8C_I6*G9c`njxgN@xNASh*G` literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter48.png b/spriteconvert/sprite/letter48.png new file mode 100644 index 0000000000000000000000000000000000000000..aabd917e88c5993d8a466b1f5cf68f36e4e6e102 GIT binary patch literal 81 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq5}q!OAsWHSDGCe{?TecJ^YHL! d@TtGxW-wpD$T``Hu>z=u!PC{xWt~$(698D`5eonS literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter49.png b/spriteconvert/sprite/letter49.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb71bf0a3bacdcde569f2cf00a5bb873beb942a GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq2A(dCAsWHSDGCe{7oYq$HZWMw zanQnmvqZ|()I*5v!LkV{OdjTb<`2Gb@6tCAVPbGQ&B^I%d*m%pFN3G6pUXO@geCy# Cz#GE= literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter50.png b/spriteconvert/sprite/letter50.png new file mode 100644 index 0000000000000000000000000000000000000000..9995d4c77d348281206e74bbf089bd448ca32cad GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq8lEnWAsWHSDGCe{o}nM+H#Rc5 u3LCMja55JZmS}&N)o|5P#aigF2*Zix%$)6$1OEW^FnGH9xvXx<*=?+xx!D~DfGQb0UHx3vIVCg!01GJAsWHSDGCe{6QBGyHZW-T vVIZZ$8q6T%!k%Ec$d^HLS+i(_Ef0g!dM?h7vpXAsnixD?{an^LB{Ts5t3ZpP*5j3OI2IDc}46alp{c)I$ztaD0e0su=A8B_oO literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter55.png b/spriteconvert/sprite/letter55.png new file mode 100644 index 0000000000000000000000000000000000000000..83df8027ecca4130700d3a8a3dd0395d709c4d9a GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq7M?DSAsWHSDGCe{3qSo|XksLP z=GZcZB@$|V2?{e=rn{IiJ`)nT`+_TBlE%A(1tQGM%wen+w%iO>`?)xod}`+c&0z3! L^>bP0l+XkK`C}dJ literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter56.png b/spriteconvert/sprite/letter56.png new file mode 100644 index 0000000000000000000000000000000000000000..46d33c6ab544a4c33cbc72f71ae852cf40f1fe24 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqCY~;iAsWHSDGCe{6QBHdzIh^v z$AHg6=t$eeg4!2q3tq6TRJz5IvN&+f!KWTOlz6N!*77nu-@(PXvxR>aP(OpGtDnm{ Hr-UW|3o9Xu literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter57.png b/spriteconvert/sprite/letter57.png new file mode 100644 index 0000000000000000000000000000000000000000..33bfa16cdd8a96afab19e4b2edb1378b9e4d51d1 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqs-7;6AsWHSDGCe{7oYrh{#j6% q!m8j|!mGhl62MR-ALpL*)qufZCmZMe1MxLL4Gf;HelF{r5}E+ODHsd@ literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter58.png b/spriteconvert/sprite/letter58.png new file mode 100644 index 0000000000000000000000000000000000000000..3e12a68943df45074c394908cd4b1df8d8f3aa5a GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqDxNNmAsWHSDGCe{6QBHdzIh^v qM?+=>(*&m-7IQ@f-g=1iGc!o+WaC`-G1vsCp25@A&t;ucLK6VBXBXoD literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter59.png b/spriteconvert/sprite/letter59.png new file mode 100644 index 0000000000000000000000000000000000000000..2576d7c148cfdbb4435e8e419d587763ebdb974c GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqhMq2tAsWHSDGCe{8&CXCPe^F! zUaajfktNeDtUzopr0PoQq Axc~qF literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter61.png b/spriteconvert/sprite/letter61.png new file mode 100644 index 0000000000000000000000000000000000000000..42636fa8de58c63e8d22867da792c4ddaa7a45ef GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq#-1*YAsWHSDGCe{6QBH7-uUp5 z0h@FVdQ&MBb@0GbFGUjP6A literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter63.png b/spriteconvert/sprite/letter63.png new file mode 100644 index 0000000000000000000000000000000000000000..0c41790e6c5282cd9268a3829b393c9483cff87e GIT binary patch literal 81 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq5}q!OAsWHSDGCe{?US1RN62u0 dV{nXTV6dOT$XTD3a1^M9!PC{xWt~$(6999;5?BBL literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter64.png b/spriteconvert/sprite/letter64.png new file mode 100644 index 0000000000000000000000000000000000000000..c123d8ef53f8e49f1ee4ed910f4770f1d8235e63 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqdY&$hAsWHSDGCe{6QBHdzIh^v zM?;2P}s@Fd1b{TkTDFNu6{1-oD!M{zqmrGa(=(+jSLTm@FGMea-t@~c=lf9rO80(CHWy85}Sb4q9e0NHmKGynhq literal 0 HcmV?d00001 diff --git a/spriteconvert/sprite/letter67.png b/spriteconvert/sprite/letter67.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9abbb26586e8aef3daa2924b10392a167ef45c GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqik>cxAsWHSDGCe{6QBGyHZW-T nVIZaBI*Dn`G{xBl0bC67Cs{a;O=I^0DrWF>^>bP0l+XkKO2QSt literal 0 HcmV?d00001 From cb809b8ce362ab27ec2e2c9013f1bd03553a128f Mon Sep 17 00:00:00 2001 From: luke zeller Date: Tue, 5 May 2020 14:15:34 -0400 Subject: [PATCH 8/8] got print working, new keyboard control converts keycode to char. all chars conv to charcodes using shiftMap and charMap. added temp cp/m logo cause fuck it --- program | Bin 76448 -> 112392 bytes program.cpp | 208 ++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 171 insertions(+), 37 deletions(-) diff --git a/program b/program index 89ad4403ed3238f58b678f05c8f769eacad6338c..e05fc5a4134d222015ad026df8f5e0d4276f745c 100755 GIT binary patch literal 112392 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�@ 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 literal 76448 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%0Ab+8ST)7l80JqEfL=8>_LAk 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 charMap{ {SDLK_SPACE, 0}, +map charMap = { {' ', 0}, + {'a', 1}, + {'b', 2}, + {'c', 3}, + {'d', 4}, + {'e', 5}, + {'f', 6}, + {'g', 7}, + {'h', 8}, + {'i', 9}, + {'j', 10}, + {'k', 11}, + {'l', 12}, + {'m', 13}, + {'n', 14}, + {'o', 15}, + {'p', 16}, + {'q', 17}, + {'r', 18}, + {'s', 19}, + {'t', 20}, + {'u', 21}, + {'v', 22}, + {'w', 23}, + {'x', 24}, + {'y', 25}, + {'z', 26}, + {'1', 27}, + {'2', 28}, + {'3', 29}, + {'4', 30}, + {'5', 31}, + {'6', 32}, + {'7', 33}, + {'8', 34}, + {'9', 35}, + {'0', 36}, + {'`', 37}, + {'-', 38}, + {'=', 39}, + {'\\', 40}, + {'/', 41}, + {'[', 42}, + {']', 44}, + {';', 45}, + {'\'', 47}, + {',', 48}, + {'.', 49} + +}; + +map shiftMap = { {'!', 52}, + {'@', 62}, + {'#', 54}, + {'$', 55}, + {'%', 56}, + {'^', 63}, + {'&', 57}, + {'*', 50}, + {'(', 58}, + {')', 59}, + {'~', 67}, + {'_', 64}, + {'+', 51}, + {'|', 43}, + {'?', 53}, + {'{', 66}, + {'}', 65}, + {':', 46}, + {'\"', 68}, + {'<', 60}, + {'>', 61} + +}; + +map shiftConv = { {'1', '!'}, + {'2', '@'}, + {'3', '#'}, + {'4', '$'}, + {'5', '%'}, + {'6', '^'}, + {'7', '&'}, + {'8', '*'}, + {'9', '('}, + {'0', ')'}, + {'`', '~'}, + {'-', '_'}, + {'=', '+'}, + {'\\', '|'}, + {'/', '?'}, + {'[', '{'}, + {']', '}'}, + {';', ':'}, + {'\'', '\"'}, + {',', '<'}, + {'.', '>'} + +}; + +/*map charMap{ {SDLK_SPACE, 0}, {SDLK_a, 1}, {SDLK_b, 2}, {SDLK_c, 3}, @@ -871,8 +970,10 @@ map shiftMap{ {SDLK_SPACE, 0}, {SDLK_COMMA, 60}, {SDLK_PERIOD, 61}, -}; - +};*/ + + +string shiftChars = R"(!@#$%^&*()~_+|?{}:"<>)"; //int screen[40][25]; but in vector vector< vector > screen(40, vector(25)); @@ -881,6 +982,9 @@ const char* ver = "0.1.0-prerelease"; bool cursor = false; +int a = 0; +int b = 0; + void drawChar(SDL_Renderer *renderer, int scale, int x, int y, int charToDraw) { @@ -931,12 +1035,6 @@ void drawScreen(SDL_Renderer *renderer, int scale, int x, int y) { } void clearScreen() { - - /*for(int c=0;c<40;c++) { - for(int d=0;d<25;d++) { - screen[c][d] = 0; - } - }*/ screen.clear(); @@ -958,6 +1056,52 @@ void scrollScreen() { } +void printCharFromCode(int charCode) { + + screen[a][b] = charCode; + + if (a < 39) { a++; } else { a = 0; b++; } + if (b < 25) {} else { b = 24; scrollScreen(); } + +} + +void printChar(char charToDraw) { + + if (shiftChars.find(charToDraw) != string::npos) { + + printCharFromCode(shiftMap[charToDraw]); + + } else { + + printCharFromCode(charMap[charToDraw]); + + } + +} + +void print(string stringToPrint) { + + for(int f=0; f < stringToPrint.length(); f++) { + + printChar(stringToPrint[f]); + + } + +} + +void println(string stringToPrint) { + + for(int f=0; f < stringToPrint.length(); f++) { + + printChar(stringToPrint[f]); + + } + + a = 0; + b++; + +} + int main(int argc, char* argv[]) { //setup @@ -1000,9 +1144,9 @@ int main(int argc, char* argv[]) { "Z80 SCREENTEST", //window title SDL_WINDOWPOS_UNDEFINED, //initial x position SDL_WINDOWPOS_UNDEFINED, //initial y position - 320 * scale, //width, in pixels - 200 * scale, //height, in pixels - SDL_WINDOW_OPENGL //flags - see below + 320 * scale, //width, in pixels + 200 * scale, //height, in pixels + SDL_WINDOW_OPENGL //flags ); // Check that the window was successfully created @@ -1024,23 +1168,16 @@ int main(int argc, char* argv[]) { //clear screen to black SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); + - //test drawing section (will be removed once program loop is implemented -/* - SDL_RenderSetScale(renderer, scale, scale); - SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); - SDL_RenderDrawPoint(renderer, 0, 0); - - - drawChar(renderer, scale, 0, 0, 0); - - SDL_RenderPresent(renderer); -*/ + println("cp/m 2.2"); + println("copyright 1979 digital research"); + println(""); + print("a>"); - int a = 0; - int b = 0; + Uint32 time = SDL_GetTicks(); @@ -1051,16 +1188,11 @@ int main(int argc, char* argv[]) { drawScreen(renderer, scale, a, b); SDL_RenderPresent(renderer); - if (SDL_TICKS_PASSED(SDL_GetTicks(), time + 500)) { - + if (SDL_GetTicks() > time + 500) { + cursor = !cursor; time = SDL_GetTicks(); - } - - - - //handle events SDL_Event event; while (SDL_PollEvent(&event)) { @@ -1104,23 +1236,25 @@ int main(int argc, char* argv[]) { break; default: + + cout << shiftMap[event.key.keysym.sym]; if (charMap.count(event.key.keysym.sym) == 0) { break; } cursor = true; if (event.key.keysym.mod == 4097) { + + //char shiftSym = - screen[a][b] = shiftMap[event.key.keysym.sym]; + printCharFromCode(shiftMap[shiftConv[event.key.keysym.sym]]); } else { - screen[a][b] = charMap[event.key.keysym.sym]; + printCharFromCode(charMap[event.key.keysym.sym]); } - - if (a < 39) { a++; } else { a = 0; b++; } - if (b < 25) {} else { b = 24; scrollScreen(); } + time = SDL_GetTicks();