X11 hello world
This commit is contained in:
commit
41b22dd9a7
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
21
LICENSE.md
Normal file
21
LICENSE.md
Normal file
@ -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.
|
12
README.md
Normal file
12
README.md
Normal file
@ -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.
|
48
command/linux/rebuild.sh
Executable file
48
command/linux/rebuild.sh
Executable file
@ -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}
|
0
command/linux/setup.sh
Executable file
0
command/linux/setup.sh
Executable file
7
compile/controller/event.h
Normal file
7
compile/controller/event.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#ifndef CONTROLLER_EVENT
|
||||||
|
#define CONTROLLER_EVENT
|
||||||
|
enum controller_event_t {
|
||||||
|
start,
|
||||||
|
stop
|
||||||
|
};
|
||||||
|
#endif
|
36
compile/controller/root.cpp
Normal file
36
compile/controller/root.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "controller/root.h"
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
11
compile/controller/root.h
Normal file
11
compile/controller/root.h
Normal file
@ -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
|
7
compile/controller/status.h
Normal file
7
compile/controller/status.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#ifndef CONTROLLER_STATUS
|
||||||
|
#define CONTROLLER_STATUS
|
||||||
|
enum controller_status_t {
|
||||||
|
ok,
|
||||||
|
error
|
||||||
|
};
|
||||||
|
#endif
|
1
compile/libraries.txt
Normal file
1
compile/libraries.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
X11
|
8
compile/main.cpp
Normal file
8
compile/main.cpp
Normal file
@ -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;
|
||||||
|
}
|
2
compile/project_files.txt
Normal file
2
compile/project_files.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
main.cpp
|
||||||
|
controller/root.cpp
|
BIN
earn/executable
Executable file
BIN
earn/executable
Executable file
Binary file not shown.
BIN
link/controller/root.cpp.o
Normal file
BIN
link/controller/root.cpp.o
Normal file
Binary file not shown.
2
link/library_options.txt
Normal file
2
link/library_options.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
-lX11
|
BIN
link/main.cpp.o
Normal file
BIN
link/main.cpp.o
Normal file
Binary file not shown.
3
link/project_files.txt
Normal file
3
link/project_files.txt
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user