mirror of
https://github.com/pine64/blisp.git
synced 2024-12-21 14:00:14 +00:00
Initial commit
This commit is contained in:
commit
019c7dd845
58
.clang-format
Normal file
58
.clang-format
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
Language: Cpp
|
||||
BasedOnStyle: GNU
|
||||
IndentWidth: 4
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterFunction: false
|
||||
AfterCaseLabel: false
|
||||
AfterEnum: false
|
||||
AfterControlStatement: Never
|
||||
AfterStruct : false
|
||||
AfterUnion : false
|
||||
AfterExternBlock : false
|
||||
BeforeElse : false
|
||||
BeforeWhile : false
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignArrayOfStructures: Left
|
||||
AlignEscapedNewlines: Right
|
||||
AlignOperands: Align
|
||||
AllowShortEnumsOnASingleLine: False
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLoopsOnASingleLine : false
|
||||
AlwaysBreakAfterReturnType: AllDefinitions
|
||||
AlignTrailingComments : true
|
||||
AlignConsecutiveMacros: AcrossEmptyLines
|
||||
KeepEmptyLinesAtTheStartOfBlocks : false
|
||||
PointerAlignment : Left
|
||||
QualifierAlignment : Left
|
||||
ReferenceAlignment : Left
|
||||
RemoveBracesLLVM : false
|
||||
SpaceAfterCStyleCast : false
|
||||
SpaceAfterLogicalNot : false
|
||||
SpaceAfterTemplateKeyword : false
|
||||
SpaceAroundPointerQualifiers : Before
|
||||
SpaceBeforeAssignmentOperators : true
|
||||
SpaceBeforeCaseColon : false
|
||||
SpaceBeforeCpp11BracedList : false
|
||||
SpaceBeforeParens : ControlStatements
|
||||
SpaceBeforeParensOptions :
|
||||
AfterControlStatements : true
|
||||
AfterFunctionDeclarationName : false
|
||||
AfterFunctionDefinitionName : false
|
||||
AfterOverloadedOperator : false
|
||||
SpaceBeforeRangeBasedForLoopColon : false
|
||||
SpaceBeforeSquareBrackets : false
|
||||
SpaceInEmptyBlock : false
|
||||
SpaceInEmptyParentheses : false
|
||||
SpacesInCStyleCastParentheses : false
|
||||
SpacesInConditionalStatement : false
|
||||
SpacesInContainerLiterals : false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets : false
|
||||
UseTab : Never
|
||||
|
||||
BitFieldColonSpacing: None
|
||||
BreakBeforeBinaryOperators: All
|
77
.gitignore
vendored
Normal file
77
.gitignore
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
# *.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# SonarLint plugin
|
||||
.idea/sonarlint/
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "vendor/argtable3"]
|
||||
path = vendor/argtable3
|
||||
url = https://github.com/argtable/argtable3
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -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
|
2
.idea/blisp.iml
generated
Normal file
2
.idea/blisp.iml
generated
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
7
.idea/codeStyles/Project.xml
generated
Normal file
7
.idea/codeStyles/Project.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<clangFormatSettings>
|
||||
<option name="ENABLED" value="true" />
|
||||
</clangFormatSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/blisp.iml" filepath="$PROJECT_DIR$/.idea/blisp.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
11
CMakeLists.txt
Normal file
11
CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
project(blisp C)
|
||||
|
||||
set(CMAKE_C_STANDARD 23)
|
||||
|
||||
add_subdirectory(vendor/argtable3)
|
||||
|
||||
add_executable(blisp src/main.c src/cmd/write.c)
|
||||
|
||||
target_include_directories(blisp PRIVATE vendor/argtable3/src)
|
||||
target_link_libraries(blisp PRIVATE argtable3)
|
16
src/cmd.h
Normal file
16
src/cmd.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef BLISP_CMD_H
|
||||
#define BLISP_CMD_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct cmd {
|
||||
const char* name;
|
||||
int8_t (*args_init)();
|
||||
uint8_t (*args_parse_exec)(int argc, char** argv);
|
||||
void (*args_print_syntax)();
|
||||
void (*args_free)();
|
||||
};
|
||||
|
||||
extern struct cmd cmd_write;
|
||||
|
||||
#endif // BLISP_CMD_H
|
47
src/cmd/write.c
Normal file
47
src/cmd/write.c
Normal file
@ -0,0 +1,47 @@
|
||||
#include "../cmd.h"
|
||||
#include <argtable3.h>
|
||||
|
||||
#define REG_EXTENDED 1
|
||||
#define REG_ICASE (REG_EXTENDED << 1)
|
||||
|
||||
static struct arg_rex* cmd;
|
||||
static struct arg_file* binary_to_write;
|
||||
static struct arg_end* end;
|
||||
static void* cmd_write_argtable[3];
|
||||
|
||||
int8_t
|
||||
cmd_write_args_init() {
|
||||
cmd_write_argtable[0] = cmd
|
||||
= arg_rex1(NULL, NULL, "write", NULL, REG_ICASE, NULL);
|
||||
cmd_write_argtable[1] = binary_to_write
|
||||
= arg_file0(NULL, NULL, "<input>", "Binary to write");
|
||||
cmd_write_argtable[2] = end = arg_end(10);
|
||||
|
||||
if (arg_nullcheck(cmd_write_argtable) != 0) {
|
||||
fprintf(stderr, "insufficient memory\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cmd_write_parse_exec(int argc, char** argv) {
|
||||
int errors = arg_parse(argc, argv, cmd_write_argtable);
|
||||
if (errors == 0) {
|
||||
printf("yeet\n");
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cmd_write_args_print_syntax() {
|
||||
arg_print_syntax(stdout,cmd_write_argtable,"\n");
|
||||
}
|
||||
|
||||
void
|
||||
cmd_write_free() {
|
||||
arg_freetable(cmd_write_argtable,
|
||||
sizeof(cmd_write_argtable) / sizeof(cmd_write_argtable[0]));
|
||||
}
|
||||
|
||||
struct cmd cmd_write
|
||||
= { "write", cmd_write_args_init, cmd_write_parse_exec, cmd_write_args_print_syntax, cmd_write_free };
|
94
src/main.c
Normal file
94
src/main.c
Normal file
@ -0,0 +1,94 @@
|
||||
#include "cmd.h"
|
||||
#include <argtable3.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct cmd* cmds[] = {
|
||||
&cmd_write,
|
||||
};
|
||||
|
||||
static struct arg_lit* help;
|
||||
static struct arg_lit* version;
|
||||
static struct arg_end* end;
|
||||
static void* argtable[3];
|
||||
|
||||
int8_t args_init() {
|
||||
argtable[0] = help = arg_lit0(NULL, "help", "print this help and exit");
|
||||
argtable[1] = version = arg_lit0(NULL, "version", "print version information and exit");
|
||||
argtable[2] = end = arg_end(20);
|
||||
|
||||
if (arg_nullcheck(argtable) != 0) {
|
||||
fprintf(stderr, "insufficient memory\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void print_help() {
|
||||
puts("Usage:");
|
||||
for (uint8_t i = 0; cmds[i] != NULL; i++) {
|
||||
fputs("\tblisp", stdout);
|
||||
cmds[i]->args_print_syntax();
|
||||
}
|
||||
fputs("\tblisp", stdout);
|
||||
arg_print_syntax(stdout, argtable,"\n");
|
||||
}
|
||||
|
||||
int8_t args_parse_exec(int argc, char** argv) {
|
||||
int error = arg_parse(argc, argv, argtable);
|
||||
if (error == 0) {
|
||||
if (help->count) {
|
||||
print_help();
|
||||
return 1;
|
||||
} else if (version->count) {
|
||||
printf("blisp 1.0.0\n");
|
||||
printf("Copyright (C) 2022 Marek Kraus and PINE64 Community\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void args_free() {
|
||||
arg_freetable(argtable, sizeof(argtable) / sizeof(argtable[0]));
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv) {
|
||||
int exit_code = 0;
|
||||
|
||||
if (args_init() != 0) {
|
||||
exit_code = -1;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; cmds[i] != NULL; i++) {
|
||||
if (cmds[i]->args_init() != 0) {
|
||||
exit_code = -1;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (args_parse_exec(argc, argv)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
uint8_t command_found = false;
|
||||
for (uint8_t i = 0; cmds[i] != NULL; i++) {
|
||||
if (cmds[i]->args_parse_exec(argc, argv)) {
|
||||
command_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!command_found) {
|
||||
|
||||
}
|
||||
|
||||
exit:
|
||||
for (uint8_t i = 0; cmds[i] != NULL; i++) {
|
||||
cmds[i]->args_free();
|
||||
}
|
||||
args_free();
|
||||
return exit_code;
|
||||
}
|
1
vendor/argtable3
vendored
Submodule
1
vendor/argtable3
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 6f0e40bc44c99af353ced367c6fafca8705f5fca
|
Loading…
Reference in New Issue
Block a user