From 41b22dd9a7bfba5db01103c4d9fbc0ac8430396d Mon Sep 17 00:00:00 2001 From: James Whiteman Date: Wed, 22 Dec 2021 01:47:19 -0800 Subject: [PATCH] X11 hello world --- .gitignore | 0 LICENSE.md | 21 ++++++++++++++++ README.md | 12 +++++++++ command/linux/rebuild.sh | 48 ++++++++++++++++++++++++++++++++++++ command/linux/setup.sh | 0 compile/controller/event.h | 7 ++++++ compile/controller/root.cpp | 36 +++++++++++++++++++++++++++ compile/controller/root.h | 11 +++++++++ compile/controller/status.h | 7 ++++++ compile/libraries.txt | 1 + compile/main.cpp | 8 ++++++ compile/project_files.txt | 2 ++ earn/executable | Bin 0 -> 16984 bytes link/controller/root.cpp.o | Bin 0 -> 2320 bytes link/library_options.txt | 2 ++ link/main.cpp.o | Bin 0 -> 1232 bytes link/project_files.txt | 3 +++ 17 files changed, 158 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 README.md create mode 100755 command/linux/rebuild.sh create mode 100755 command/linux/setup.sh create mode 100644 compile/controller/event.h create mode 100644 compile/controller/root.cpp create mode 100644 compile/controller/root.h create mode 100644 compile/controller/status.h create mode 100644 compile/libraries.txt create mode 100644 compile/main.cpp create mode 100644 compile/project_files.txt create mode 100755 earn/executable create mode 100644 link/controller/root.cpp.o create mode 100644 link/library_options.txt create mode 100644 link/main.cpp.o create mode 100644 link/project_files.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..3bf8a32 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 James Whiteman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c4e1d1 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Develop +If you are on Linux: +- Navigate to command/linux in terminal. +- Run `sh setup.sh` to setup your environment. +- Run `sh rebuild.sh` to build the application. +- Navigate to earn/ and run `executable` to run the built program. + +If you are on Windows: +- Navigate to command/windows in command prompt. +- Run `setup.bat` to setup your environment. +- Run `rebuild.bat` to build the application. +- Navigate to earn/ and run `executable.exe` to run the built program. diff --git a/command/linux/rebuild.sh b/command/linux/rebuild.sh new file mode 100755 index 0000000..db9af49 --- /dev/null +++ b/command/linux/rebuild.sh @@ -0,0 +1,48 @@ +#Global definitions. +F_ROOT=$(readlink -f "$0") +D_ROOT=$(dirname "${F_ROOT}")/../../. +D_COMPILE=${D_ROOT}/compile +D_LINK=${D_ROOT}/link +D_EARN=${D_ROOT}/earn +F_COMPILE_LIST=${D_COMPILE}/project_files.txt +F_LINK_LIST=${D_LINK}/project_files.txt +echo "" > ${F_LINK_LIST} + +# Compile. +LINE=0 +LINE_COUNT=$(cat ${F_COMPILE_LIST} | wc -l) +while true +do + if [ ${LINE} -ge ${LINE_COUNT} ]; then + break + fi + LINE=$((LINE+1)) + F_COMPILE=$(head -n ${LINE} ${F_COMPILE_LIST} | tail -n 1) + I_COMPILE=${D_COMPILE}/${F_COMPILE} + O_COMPILE=${D_LINK}/${F_COMPILE}.o + mkdir -p "${O_COMPILE%/*}" + clang++ -I ${D_COMPILE} -c ${I_COMPILE} -o ${O_COMPILE} + echo ${O_COMPILE} >> ${F_LINK_LIST} +done + +# Libraries. +F_LIBRARY_LIST=${D_COMPILE}/libraries.txt +F_LIBRARY_OPTIONS=${D_LINK}/library_options.txt +echo "" > ${F_LIBRARY_OPTIONS} +LINE=0 +LINE_COUNT=$(cat ${F_LIBRARY_LIST} | wc -l) +while true +do + if [ ${LINE} -ge ${LINE_COUNT} ]; then + break + fi + LINE=$((LINE+1)) + LIBRARY="-l$(head -n ${LINE} ${F_LIBRARY_LIST}) " + echo $LIBRARY >> ${F_LIBRARY_OPTIONS} +done + +# Link. +I_LINK=$(cat ${F_LINK_LIST}) +I_LIBRARIES=$(cat ${F_LIBRARY_OPTIONS}) +O_LINK=${D_EARN}/executable +clang++ ${I_LIBRARIES} ${I_LINK} -o ${O_LINK} diff --git a/command/linux/setup.sh b/command/linux/setup.sh new file mode 100755 index 0000000..e69de29 diff --git a/compile/controller/event.h b/compile/controller/event.h new file mode 100644 index 0000000..7764354 --- /dev/null +++ b/compile/controller/event.h @@ -0,0 +1,7 @@ +#ifndef CONTROLLER_EVENT +#define CONTROLLER_EVENT +enum controller_event_t { + start, + stop +}; +#endif diff --git a/compile/controller/root.cpp b/compile/controller/root.cpp new file mode 100644 index 0000000..cb9438c --- /dev/null +++ b/compile/controller/root.cpp @@ -0,0 +1,36 @@ +#include "controller/root.h" +#include +#include +#include +#include + +controller_status_t root_controller_t::on_event(controller_event_t event) { + Display *d; + Window w; + XEvent e; + const char *msg = "Hello, World!"; + int s; + + d = XOpenDisplay(NULL); + if (d == NULL) { + return controller_status_t::error; + } + + s = DefaultScreen(d); + w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 100, 100, 1, BlackPixel(d, s), WhitePixel(d, s)); + XSelectInput(d, w, ExposureMask | KeyPressMask); + XMapWindow(d, w); + + while (true) { + XNextEvent(d, &e); + if (e.type == Expose) { + XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10); + XDrawString(d, w, DefaultGC(d, s), 10, 50, msg, strlen(msg)); + } + if (e.type == KeyPress) + break; + } + + XCloseDisplay(d); + return controller_status_t::ok; +} diff --git a/compile/controller/root.h b/compile/controller/root.h new file mode 100644 index 0000000..e5d8205 --- /dev/null +++ b/compile/controller/root.h @@ -0,0 +1,11 @@ +#ifndef CONTROLLER_ROOT +#define CONTROLLER_ROOT +#include "controller/status.h" +#include "controller/event.h" + +class root_controller_t { + public: + + controller_status_t on_event(controller_event_t event); +}; +#endif diff --git a/compile/controller/status.h b/compile/controller/status.h new file mode 100644 index 0000000..7610fe7 --- /dev/null +++ b/compile/controller/status.h @@ -0,0 +1,7 @@ +#ifndef CONTROLLER_STATUS +#define CONTROLLER_STATUS +enum controller_status_t { + ok, + error +}; +#endif diff --git a/compile/libraries.txt b/compile/libraries.txt new file mode 100644 index 0000000..08d2b99 --- /dev/null +++ b/compile/libraries.txt @@ -0,0 +1 @@ +X11 diff --git a/compile/main.cpp b/compile/main.cpp new file mode 100644 index 0000000..af1c4c2 --- /dev/null +++ b/compile/main.cpp @@ -0,0 +1,8 @@ +#include "controller/root.h" +#include "controller/status.h" + +int main(int argc, char *argv[]) { + root_controller_t* controller = new root_controller_t(); + controller_status_t status = controller->on_event(controller_event_t::start); + return status; +} diff --git a/compile/project_files.txt b/compile/project_files.txt new file mode 100644 index 0000000..24b0fd7 --- /dev/null +++ b/compile/project_files.txt @@ -0,0 +1,2 @@ +main.cpp +controller/root.cpp diff --git a/earn/executable b/earn/executable new file mode 100755 index 0000000000000000000000000000000000000000..b35282eafb535e1e2e7d535ee9f1b5053c2d5c6f GIT binary patch literal 16984 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 literal 0 HcmV?d00001 diff --git a/link/controller/root.cpp.o b/link/controller/root.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..7526cf17d74567558eb3101f5bdcdcaa19bbaa6f GIT binary patch literal 2320 zcmbuAU1%d!6vyu**`~Yw3MyDoBtk(&cW6YgB1pqF^%i0+EoFnCaW=Wuu#=f#GU@J$ z#V$+4VJL{uw|(%%H(wWa7Z;2QTSRc#2MzcVg#{P-P(kp)U_Aeux!Z9}eDQ?2_uSt- z=ghfh&P+Zi6qgg4#*}F66?VK*l(Dt3V|`Joi)?}{H@Sb0Up`zTpWK&zoBKOQe)Evu zRMyu+s(O!7f~R zWna?vFKMpb;enI+kIlumd9X>IpTM(NX~A=)-Axy@uXwOtx^W5t{e4E*|2BW4O3Q+O za62`JY`DKPH_n3=cA;lf=AA)G&CX42m$3nrNj5uvtM^yGe~k97&62lVU%3T!a;Ehi zVu$ws$bE3!_Rn;%10JmL{Pjo3bjfe$WulZ8@;we7G%1tF@nm6Es4zwCE**~-gFV!| z7=)$2bws%p{U80-At~Iy)|JzKN8-IZG=;&XB@YG$fi#dQv3YZAbNs^{B-8S#F?qFogrU_)?kk(I);9rd3_eOA>ZCLz`5gd&>%zk+U-y;4{55q9-B(B((8_}mTC>hG%m5y z8Pjfv2dmc%=WNZY+81cU6^17^YIVmHA=6!98oDPgdaSe|Oi}SxET>6}RYHYrVR=li z*!4P;@*AtU7hT)-$`#x4T-!8-TlN-gt1Mtx$Sp*;L}ib`UavR~Yk00HET&twC-hfW zH%~V_qjH{=mR#e)hUeC-EvB31cD-y=tMn4mN~R{>Ex+R$b-_x@HPc+D1nE6B1=A^> zXPl$?QeDojT{S!dIH%`iz5eg;I|YdLmx}iinuz4#@Hq}vgML&x=0&<-68XEL)qrDG zeGVNGe`j7MhCYbP(;++xH_+?o3-zT@??;Mmj{D<#85JvRB78TZqK>2Hw`ddkeAI~a z_e1||j4MAie@^>KkD6W${i6(e-1esdbK>TohF~EUK%HOVA4nNizuEBlsXC#4cyE=z r;s?Z%#lB6`E?o~~KJ>>o00MtVJpUfCc%Q1pI%rV>LEygxzV4}-zpuv`}Y;lMu( z_P@H1zCfHta>MN>d3Q@m*IN|$Te#X=>q*`7T*?NxI3{qO-vei->0FvUb@~9SUq+n< z;W|xA=bLY8H_y%VF@V-5;122y_&u8Du0!RJCSVS^IVJeP3Hp81FI4K3y`jdvHqfSV zG#cXy+62<-I9PYlCQwJ!t{Qa^d6Gs#Cp#KMtgtD$n6Y-R5}s2S5_CgI*OlyNYj26M(gW%NgHPCWHWq{ zM_B@*t8*Q#AwSEA{{seCgT8}}Pv%j+w;c9cok2fo#8tG-g71TU_T5r0-Gz-!v(ch) zoI$30;kPz#^jTyIAT?r!<0ww H#NPiOfs}#X literal 0 HcmV?d00001 diff --git a/link/project_files.txt b/link/project_files.txt new file mode 100644 index 0000000..53ecc27 --- /dev/null +++ b/link/project_files.txt @@ -0,0 +1,3 @@ + +/home/cogentleman/main/art/cpp_launchpad/command/linux/../.././link/main.cpp.o +/home/cogentleman/main/art/cpp_launchpad/command/linux/../.././link/controller/root.cpp.o