diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/floc.iml b/.idea/floc.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/floc.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..79b3c94
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3dc08c6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1195591..40e0148 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.28)
-project(floc)
+project(floc VERSION 0.0.2)
option(ENABLE_ADDRSAN "Enable the address sanitizer" OFF)
option(ENABLE_UBSAN "Enable the ub sanitizer" OFF)
diff --git a/commit.py b/commit.py
new file mode 100755
index 0000000..fa3d864
--- /dev/null
+++ b/commit.py
@@ -0,0 +1,86 @@
+#!/usr/bin/python3
+
+import subprocess
+
+#---------------------------------------
+# CONFIG
+#---------------------------------------
+
+VERSION_BEGIN_STR = "project(floc VERSION "
+VERSION_END_STR = ")"
+PATCH_LIMIT = 100000
+
+#---------------------------------------
+# DO NOT TOUCH
+#---------------------------------------
+
+def load_cmake():
+ cmake_file = open("CMakeLists.txt", 'r')
+ cmake_text = cmake_file.read()
+ cmake_file.close()
+ return cmake_text
+
+def write_cmake(cmake_text):
+ cmake_file = open("CMakeLists.txt", 'w')
+ cmake_file.write(cmake_text)
+ cmake_file.close()
+
+def get_version(cmake_text):
+ begin = cmake_text.find(VERSION_BEGIN_STR) + len(VERSION_BEGIN_STR)
+ end = cmake_text.find(VERSION_END_STR, begin)
+ return (cmake_text[begin:end], begin, end)
+
+def split_version(cmake_text):
+ version, begin, end = get_version(cmake_text)
+ version_parts = version.split('.')
+ return (version_parts, begin, end)
+
+def recombine(cmake_text, version_parts, begin, end):
+ constructed_version = version_parts[0] + '.' + version_parts[1] + '.' + version_parts[2]
+ constructed_text_begin = cmake_text[0:begin]
+ constrcuted_text_end = cmake_text[end::]
+ return constructed_text_begin + constructed_version + constrcuted_text_end
+
+
+def inc_major(cmake_text):
+ version_parts, begin, end = split_version(cmake_text)
+ version_parts[0] = str(int(version_parts[0]) + 1)
+ version_parts[1] = '0'
+ version_parts[2] = '0'
+ return recombine(cmake_text, version_parts, begin, end)
+
+def inc_minor(cmake_text):
+ version_parts, begin, end = split_version(cmake_text)
+ version_parts[1] = str(int(version_parts[1]) + 1)
+ version_parts[2] = '0'
+ return recombine(cmake_text, version_parts, begin, end)
+
+def inc_patch(cmake_text):
+ version_parts, begin, end = split_version(cmake_text)
+ if int(version_parts[2]) + 1 >= PATCH_LIMIT:
+ return inc_minor(cmake_text)
+ version_parts[2] = str(int(version_parts[2]) + 1)
+ return recombine(cmake_text, version_parts, begin, end)
+
+cmake_text = load_cmake()
+cmake_version = get_version(cmake_text)[0]
+print(f"Current Version: {cmake_version}")
+
+try:
+ type = input("What kind of commit is this ((M)ajor, (m)inor, (p)atch)? ")
+
+ if type.startswith('M'):
+ print("Selected major")
+ write_cmake(inc_major(cmake_text))
+ elif type.startswith('m'):
+ print("Selected minor")
+ write_cmake(inc_minor(cmake_text))
+ elif type.startswith('p') or type.startswith('P') or len(type) == 0:
+ print("Selected patch")
+ write_cmake(inc_patch(cmake_text))
+
+ subprocess.call(["git", "add", "*"])
+ subprocess.call(["git", "commit"])
+ subprocess.call(["sh", "-c", "git remote | xargs -L1 git push --all"])
+except KeyboardInterrupt:
+ print("\nCancelling!")