kernaux 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +44 -0
- data/.rubocop.yml +79 -0
- data/.simplecov +9 -0
- data/.yardopts +4 -0
- data/Gemfile +8 -0
- data/README.md +29 -0
- data/Rakefile +80 -0
- data/bin/console +8 -0
- data/bin/setup +7 -0
- data/ext/default/assert.c +55 -0
- data/ext/default/cmdline.c +83 -0
- data/ext/default/dynarg.c +45 -0
- data/ext/default/dynarg.h +35 -0
- data/ext/default/extconf.rb +14 -0
- data/ext/default/main.c +34 -0
- data/ext/default/main.h +28 -0
- data/ext/default/ntoa.c +254 -0
- data/ext/default/printf.c +210 -0
- data/ext/default/version.c +47 -0
- data/kernaux.gemspec +59 -0
- data/lib/kernaux/assert.rb +58 -0
- data/lib/kernaux/cmdline.rb +20 -0
- data/lib/kernaux/errors.rb +39 -0
- data/lib/kernaux/ntoa.rb +136 -0
- data/lib/kernaux/printf.rb +70 -0
- data/lib/kernaux/version.rb +13 -0
- data/lib/kernaux.rb +20 -0
- metadata +230 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f3d010f1c8a8ce21a88ce43e74f74cefd3948499192dfb15c86a7bdbec8fb207
|
4
|
+
data.tar.gz: 22cc8aa38ee888bcd8812eb5bc0632111211833a74f4c2d456356d0c7420657b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 99134a6e80f7a9891de94d80e510e8d022d9522c2c1630e8ac7a0c23a7ee1e38ee9783a86eee91c7128af019d9ebfb415a650857e862fe7a826057768c3bfffb
|
7
|
+
data.tar.gz: 42d27fc4592ae2e6c7c760b5ae5804e88cd3c8e7d67e6900da11f64bc1b73d9d77aa7c30a17aaacab8b678d26b9b11ebd3717c7967ac1601edf1654f9b53b9ef
|
data/.gitignore
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
*.so
|
4
|
+
|
5
|
+
/.byebug_history
|
6
|
+
/.config/
|
7
|
+
/.rake_tasks~
|
8
|
+
/InstalledFiles/
|
9
|
+
/pkg/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
# Used by dotenv library to load environment variables.
|
13
|
+
/.env
|
14
|
+
|
15
|
+
# RSpec configuration and generated files.
|
16
|
+
/.rspec
|
17
|
+
/coverage/
|
18
|
+
/spec/examples.txt
|
19
|
+
/spec/reports/
|
20
|
+
/test/tmp/
|
21
|
+
/test/version_tmp/
|
22
|
+
|
23
|
+
# Documentation cache and generated files.
|
24
|
+
/.yardoc/
|
25
|
+
/_yardoc/
|
26
|
+
/doc/
|
27
|
+
/rdoc/
|
28
|
+
|
29
|
+
# Environment normalization.
|
30
|
+
/.bundle/
|
31
|
+
/vendor/bundle/
|
32
|
+
/lib/bundler/man/
|
33
|
+
|
34
|
+
# For a library or gem, you might want to ignore these files since the code is
|
35
|
+
# intended to run in multiple environments; otherwise, check them in.
|
36
|
+
/Gemfile.lock
|
37
|
+
/.ruby-version
|
38
|
+
/.ruby-gemset
|
39
|
+
|
40
|
+
# Unless supporting rvm < 1.11.0 or doing something fancy, ignore this.
|
41
|
+
/.rvmrc
|
42
|
+
|
43
|
+
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
44
|
+
/.rubocop-https?--*
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
- rubocop-rake
|
4
|
+
- rubocop-rspec
|
5
|
+
|
6
|
+
AllCops:
|
7
|
+
TargetRubyVersion: 3.0
|
8
|
+
DisplayCopNames: true
|
9
|
+
NewCops: enable
|
10
|
+
|
11
|
+
Layout/AccessModifierIndentation:
|
12
|
+
EnforcedStyle: outdent
|
13
|
+
|
14
|
+
Layout/LineLength:
|
15
|
+
Max: 80
|
16
|
+
|
17
|
+
Lint/AmbiguousOperatorPrecedence:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Lint/ReturnInVoidContext:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Metrics/BlockLength:
|
24
|
+
Exclude:
|
25
|
+
- '*.gemspec'
|
26
|
+
- 'Rakefile'
|
27
|
+
- 'spec/**/*_spec.rb'
|
28
|
+
|
29
|
+
RSpec/ContextWording:
|
30
|
+
Prefixes:
|
31
|
+
- 'and'
|
32
|
+
- 'for'
|
33
|
+
- 'using'
|
34
|
+
- 'when'
|
35
|
+
- 'with'
|
36
|
+
- 'without'
|
37
|
+
|
38
|
+
RSpec/FilePath:
|
39
|
+
CustomTransform:
|
40
|
+
KernAux: kernaux
|
41
|
+
|
42
|
+
RSpec/ExampleLength:
|
43
|
+
CountAsOne: ['array', 'hash', 'heredoc']
|
44
|
+
|
45
|
+
Security/Eval:
|
46
|
+
Exclude:
|
47
|
+
- 'spec/**/*_spec.rb'
|
48
|
+
|
49
|
+
Style/AndOr:
|
50
|
+
EnforcedStyle: conditionals
|
51
|
+
|
52
|
+
Style/Documentation:
|
53
|
+
Exclude:
|
54
|
+
- 'Rakefile'
|
55
|
+
|
56
|
+
Style/DoubleNegation:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/GlobalVars:
|
60
|
+
Exclude:
|
61
|
+
- 'ext/*/extconf.rb'
|
62
|
+
|
63
|
+
Style/HashAsLastArrayItem:
|
64
|
+
Enabled: false
|
65
|
+
|
66
|
+
Style/PerlBackrefs:
|
67
|
+
Enabled: false
|
68
|
+
|
69
|
+
Style/TrailingCommaInArguments:
|
70
|
+
EnforcedStyleForMultiline: comma
|
71
|
+
|
72
|
+
Style/TrailingCommaInArrayLiteral:
|
73
|
+
EnforcedStyleForMultiline: comma
|
74
|
+
|
75
|
+
Style/TrailingCommaInHashLiteral:
|
76
|
+
EnforcedStyleForMultiline: comma
|
77
|
+
|
78
|
+
Style/VariableInterpolation:
|
79
|
+
Enabled: false
|
data/.simplecov
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
::KernAux
|
2
|
+
=========
|
3
|
+
|
4
|
+
[![Build status](https://github.com/tailix/libkernaux/actions/workflows/ruby.yml/badge.svg)](https://github.com/tailix/libkernaux/actions/workflows/ruby.yml)
|
5
|
+
[![Build status (FreeBSD)](https://api.cirrus-ci.com/github/tailix/libkernaux.svg?task=Ruby%20(FreeBSD))](https://cirrus-ci.com/github/tailix/libkernaux)
|
6
|
+
|
7
|
+
Binding to [libkernaux](https://github.com/tailix/libkernaux) - auxiliary
|
8
|
+
library for kernel development.
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
Install
|
13
|
+
-------
|
14
|
+
|
15
|
+
Add the following to your `Gemfile`:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'kernaux', '~> 0.5.0'
|
19
|
+
```
|
20
|
+
|
21
|
+
Or add the following to your `*.gemspec`:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
Gem::Specification.new do |spec|
|
25
|
+
# ...
|
26
|
+
spec.add_runtime_dependency 'kernaux', '~> 0.5.0'
|
27
|
+
# ...
|
28
|
+
end
|
29
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class GemHelper
|
7
|
+
def tag_version(*)
|
8
|
+
yield if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def git_push(*); end
|
12
|
+
|
13
|
+
def perform_git_push(*); end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
CLEAN << '.yardoc'
|
18
|
+
CLEAN << 'coverage'
|
19
|
+
CLEAN << 'doc'
|
20
|
+
CLEAN << 'spec/examples.txt'
|
21
|
+
|
22
|
+
desc 'Run default checks'
|
23
|
+
task default: %i[test lint yard:cov]
|
24
|
+
|
25
|
+
desc 'Run tests'
|
26
|
+
task test: :spec
|
27
|
+
|
28
|
+
desc 'Run code analysis tools'
|
29
|
+
task lint: :rubocop
|
30
|
+
|
31
|
+
desc 'Fix code style (rubocop --auto-correct)'
|
32
|
+
task fix: 'rubocop:auto_correct'
|
33
|
+
|
34
|
+
begin
|
35
|
+
require 'rspec/core/rake_task'
|
36
|
+
RSpec::Core::RakeTask.new
|
37
|
+
rescue LoadError
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
begin
|
42
|
+
require 'rubocop/rake_task'
|
43
|
+
RuboCop::RakeTask.new
|
44
|
+
rescue LoadError
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
|
48
|
+
begin
|
49
|
+
require 'yard'
|
50
|
+
YARD::Rake::YardocTask.new
|
51
|
+
rescue LoadError
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
begin
|
56
|
+
require 'rake/extensiontask'
|
57
|
+
Rake::ExtensionTask.new 'default' do |ext|
|
58
|
+
ext.lib_dir = 'lib/kernaux'
|
59
|
+
end
|
60
|
+
rescue LoadError
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'Open development console'
|
65
|
+
task :console do
|
66
|
+
sh 'bundle', 'exec', File.expand_path(File.join('bin', 'console'), __dir__)
|
67
|
+
end
|
68
|
+
|
69
|
+
namespace :yard do
|
70
|
+
desc 'Measure documentation coverage'
|
71
|
+
task :cov do
|
72
|
+
result = `bundle exec yard stats`.lines.last.strip.freeze
|
73
|
+
m = result.match(/\A(\d+(\.\d+)?)% documented\z/)
|
74
|
+
raise 'Invalid result' if m.nil?
|
75
|
+
|
76
|
+
coverage = m[1].to_f.round(2)
|
77
|
+
puts "Documentation coverage: #{coverage}%"
|
78
|
+
raise 'Not fully documented!' if coverage != 100
|
79
|
+
end
|
80
|
+
end
|
data/bin/console
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#include "main.h"
|
2
|
+
|
3
|
+
static void assert_cb(const char *file, int line, const char *msg);
|
4
|
+
|
5
|
+
static VALUE rb_KernAux_assert_cb(VALUE self);
|
6
|
+
static VALUE rb_KernAux_assert_cb_EQ(VALUE self, VALUE assert_cb);
|
7
|
+
static
|
8
|
+
VALUE rb_KernAux_assert_do(VALUE self, VALUE file, VALUE line, VALUE msg);
|
9
|
+
|
10
|
+
void init_assert()
|
11
|
+
{
|
12
|
+
kernaux_assert_cb = assert_cb;
|
13
|
+
|
14
|
+
rb_define_singleton_method(rb_KernAux, "assert_cb",
|
15
|
+
rb_KernAux_assert_cb, 0);
|
16
|
+
rb_define_singleton_method(rb_KernAux, "assert_cb=",
|
17
|
+
rb_KernAux_assert_cb_EQ, 1);
|
18
|
+
rb_define_singleton_method(rb_KernAux, "assert_do",
|
19
|
+
rb_KernAux_assert_do, 3);
|
20
|
+
}
|
21
|
+
|
22
|
+
void assert_cb(const char *const file, const int line, const char *const msg)
|
23
|
+
{
|
24
|
+
const VALUE assert_cb_rb = rb_iv_get(rb_KernAux, "@assert_cb");
|
25
|
+
if (assert_cb_rb == Qnil) return;
|
26
|
+
const VALUE file_rb = rb_str_new2(file);
|
27
|
+
const VALUE line_rb = INT2FIX(line);
|
28
|
+
const VALUE msg_rb = rb_str_new2(msg);
|
29
|
+
rb_funcall(assert_cb_rb, rb_intern_call, 3, file_rb, line_rb, msg_rb);
|
30
|
+
}
|
31
|
+
|
32
|
+
VALUE rb_KernAux_assert_cb(const VALUE self)
|
33
|
+
{
|
34
|
+
return rb_iv_get(self, "@assert_cb");
|
35
|
+
}
|
36
|
+
|
37
|
+
VALUE rb_KernAux_assert_cb_EQ(const VALUE self, const VALUE assert_cb_rb)
|
38
|
+
{
|
39
|
+
return rb_iv_set(self, "@assert_cb", assert_cb_rb);
|
40
|
+
}
|
41
|
+
|
42
|
+
VALUE rb_KernAux_assert_do(
|
43
|
+
const VALUE self_rb __attribute__((unused)),
|
44
|
+
VALUE file_rb,
|
45
|
+
const VALUE line_rb,
|
46
|
+
VALUE msg_rb
|
47
|
+
) {
|
48
|
+
const char *const file = StringValueCStr(file_rb);
|
49
|
+
const int line = FIX2INT(line_rb);
|
50
|
+
const char *const msg = StringValueCStr(msg_rb);
|
51
|
+
|
52
|
+
kernaux_assert_do(file, line, msg);
|
53
|
+
|
54
|
+
return Qnil;
|
55
|
+
}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#include "main.h"
|
2
|
+
|
3
|
+
#ifdef KERNAUX_VERSION_WITH_CMDLINE
|
4
|
+
|
5
|
+
#define ARG_COUNT_MAX 256
|
6
|
+
#define BUFFER_SIZE 4096
|
7
|
+
|
8
|
+
struct Data {
|
9
|
+
char error_msg[KERNAUX_CMDLINE_ERROR_MSG_SIZE_MAX];
|
10
|
+
char *argv[ARG_COUNT_MAX];
|
11
|
+
char buffer[BUFFER_SIZE];
|
12
|
+
};
|
13
|
+
|
14
|
+
static VALUE rb_ANON_Data_ALLOC(VALUE klass);
|
15
|
+
static VALUE rb_KernAux_cmdline(VALUE self, VALUE cmdline);
|
16
|
+
|
17
|
+
static const struct rb_data_type_struct info = {
|
18
|
+
.wrap_struct_name = "cmdline",
|
19
|
+
.function = {
|
20
|
+
.dmark = NULL,
|
21
|
+
.dfree = RUBY_DEFAULT_FREE,
|
22
|
+
.dsize = NULL,
|
23
|
+
.dcompact = NULL,
|
24
|
+
.reserved = { 0 },
|
25
|
+
},
|
26
|
+
.parent = NULL,
|
27
|
+
.data = NULL,
|
28
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY,
|
29
|
+
};
|
30
|
+
|
31
|
+
static VALUE rb_KernAux_CmdlineError = Qnil;
|
32
|
+
static VALUE rb_ANON_Data = Qnil;
|
33
|
+
|
34
|
+
void init_cmdline()
|
35
|
+
{
|
36
|
+
rb_gc_register_mark_object(rb_KernAux_CmdlineError =
|
37
|
+
rb_define_class_under(rb_KernAux, "CmdlineError", rb_KernAux_Error));
|
38
|
+
rb_gc_register_mark_object(rb_ANON_Data =
|
39
|
+
rb_funcall(rb_cClass, rb_intern_new, 1, rb_cObject));
|
40
|
+
|
41
|
+
rb_define_alloc_func(rb_ANON_Data, rb_ANON_Data_ALLOC);
|
42
|
+
rb_define_singleton_method(rb_KernAux, "cmdline", rb_KernAux_cmdline, 1);
|
43
|
+
}
|
44
|
+
|
45
|
+
VALUE rb_ANON_Data_ALLOC(const VALUE klass)
|
46
|
+
{
|
47
|
+
struct Data *data;
|
48
|
+
return TypedData_Make_Struct(klass, struct Data, &info, data);
|
49
|
+
}
|
50
|
+
|
51
|
+
VALUE rb_KernAux_cmdline(const VALUE self_rb, VALUE cmdline_rb)
|
52
|
+
{
|
53
|
+
const char *const cmdline = StringValueCStr(cmdline_rb);
|
54
|
+
size_t argc;
|
55
|
+
|
56
|
+
const VALUE data_rb = rb_funcall(rb_ANON_Data, rb_intern_new, 0);
|
57
|
+
struct Data *data;
|
58
|
+
TypedData_Get_Struct(data_rb, struct Data, &info, data);
|
59
|
+
if (!data) rb_raise(rb_KernAux_CmdlineError, "internal error");
|
60
|
+
|
61
|
+
const bool result = kernaux_cmdline(
|
62
|
+
cmdline,
|
63
|
+
data->error_msg,
|
64
|
+
&argc,
|
65
|
+
data->argv,
|
66
|
+
data->buffer,
|
67
|
+
ARG_COUNT_MAX,
|
68
|
+
BUFFER_SIZE
|
69
|
+
);
|
70
|
+
|
71
|
+
if (!result) rb_raise(rb_KernAux_CmdlineError, "%s", data->error_msg);
|
72
|
+
|
73
|
+
VALUE result_rb = rb_ary_new2(argc);
|
74
|
+
for (size_t index = 0; index < argc; ++index) {
|
75
|
+
rb_ary_push(
|
76
|
+
result_rb,
|
77
|
+
rb_funcall(rb_str_new2(data->argv[index]), rb_intern_freeze, 0)
|
78
|
+
);
|
79
|
+
}
|
80
|
+
return rb_funcall(result_rb, rb_intern_freeze, 0);
|
81
|
+
}
|
82
|
+
|
83
|
+
#endif // KERNAUX_VERSION_WITH_CMDLINE
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#include "dynarg.h"
|
2
|
+
|
3
|
+
struct DynArg DynArg_create()
|
4
|
+
{
|
5
|
+
struct DynArg dynarg;
|
6
|
+
DynArg_init(&dynarg);
|
7
|
+
return dynarg;
|
8
|
+
}
|
9
|
+
|
10
|
+
void DynArg_init(struct DynArg *const dynarg)
|
11
|
+
{
|
12
|
+
dynarg->use_dbl = false;
|
13
|
+
dynarg->dbl = 0.0;
|
14
|
+
dynarg->arg.str = "";
|
15
|
+
}
|
16
|
+
|
17
|
+
void DynArg_use_char(struct DynArg *const dynarg, const char chr)
|
18
|
+
{
|
19
|
+
dynarg->use_dbl = false;
|
20
|
+
dynarg->arg.chr = chr;
|
21
|
+
}
|
22
|
+
|
23
|
+
void DynArg_use_double(struct DynArg *const dynarg, const double dbl)
|
24
|
+
{
|
25
|
+
dynarg->use_dbl = true;
|
26
|
+
dynarg->dbl = dbl;
|
27
|
+
}
|
28
|
+
|
29
|
+
void DynArg_use_long_long(struct DynArg *const dynarg, const long long ll)
|
30
|
+
{
|
31
|
+
dynarg->use_dbl = false;
|
32
|
+
dynarg->arg.ll = ll;
|
33
|
+
}
|
34
|
+
|
35
|
+
void DynArg_use_str(struct DynArg *const dynarg, const char *const str)
|
36
|
+
{
|
37
|
+
dynarg->use_dbl = false;
|
38
|
+
dynarg->arg.str = str;
|
39
|
+
}
|
40
|
+
|
41
|
+
void DynArg_use_unsigned_long_long(struct DynArg *const dynarg, const unsigned long long ull)
|
42
|
+
{
|
43
|
+
dynarg->use_dbl = false;
|
44
|
+
dynarg->arg.ull = ull;
|
45
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#ifndef INCLUDED_DYNARG
|
2
|
+
#define INCLUDED_DYNARG
|
3
|
+
|
4
|
+
#ifdef __cplusplus
|
5
|
+
extern "C" {
|
6
|
+
#endif
|
7
|
+
|
8
|
+
#include <stdbool.h>
|
9
|
+
|
10
|
+
struct DynArg {
|
11
|
+
bool use_dbl;
|
12
|
+
double dbl;
|
13
|
+
// TODO: check if this will work on different endianness.
|
14
|
+
union {
|
15
|
+
char chr;
|
16
|
+
long long ll;
|
17
|
+
const char *str;
|
18
|
+
unsigned long long ull;
|
19
|
+
} __attribute__((packed)) arg;
|
20
|
+
};
|
21
|
+
|
22
|
+
struct DynArg DynArg_create();
|
23
|
+
void DynArg_init(struct DynArg *dynarg);
|
24
|
+
|
25
|
+
void DynArg_use_char(struct DynArg *dynarg, char chr);
|
26
|
+
void DynArg_use_double(struct DynArg *dynarg, double dbl);
|
27
|
+
void DynArg_use_long_long(struct DynArg *dynarg, long long ll);
|
28
|
+
void DynArg_use_str(struct DynArg *dynarg, const char *str);
|
29
|
+
void DynArg_use_unsigned_long_long(struct DynArg *dynarg, unsigned long long ull);
|
30
|
+
|
31
|
+
#ifdef __cplusplus
|
32
|
+
}
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#endif
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mkmf'
|
4
|
+
|
5
|
+
$CFLAGS += ' -pedantic -Wall -Wextra'
|
6
|
+
|
7
|
+
raise 'libkernaux not found' unless have_library 'kernaux'
|
8
|
+
|
9
|
+
raise 'kernaux_assert_do not found' unless have_func 'kernaux_assert_do'
|
10
|
+
unless have_var 'kernaux_assert_cb', 'kernaux.h'
|
11
|
+
raise 'kernaux_assert_cb not found'
|
12
|
+
end
|
13
|
+
|
14
|
+
raise 'can\'t create Makefile' unless create_makefile 'kernaux/default'
|
data/ext/default/main.c
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#include "main.h"
|
2
|
+
|
3
|
+
ID rb_intern_call = Qnil;
|
4
|
+
ID rb_intern_freeze = Qnil;
|
5
|
+
ID rb_intern_LESS = Qnil;
|
6
|
+
ID rb_intern_new = Qnil;
|
7
|
+
|
8
|
+
VALUE rb_KernAux = Qnil;
|
9
|
+
VALUE rb_KernAux_Error = Qnil;
|
10
|
+
|
11
|
+
void Init_default()
|
12
|
+
{
|
13
|
+
rb_gc_register_mark_object(ID2SYM(rb_intern_call = rb_intern("call")));
|
14
|
+
rb_gc_register_mark_object(ID2SYM(rb_intern_freeze = rb_intern("freeze")));
|
15
|
+
rb_gc_register_mark_object(ID2SYM(rb_intern_LESS = rb_intern("<")));
|
16
|
+
rb_gc_register_mark_object(ID2SYM(rb_intern_new = rb_intern("new")));
|
17
|
+
|
18
|
+
rb_gc_register_mark_object(rb_KernAux = rb_define_module("KernAux"));
|
19
|
+
rb_gc_register_mark_object(rb_KernAux_Error =
|
20
|
+
rb_define_class_under(rb_KernAux, "Error", rb_eRuntimeError));
|
21
|
+
|
22
|
+
init_version();
|
23
|
+
init_assert();
|
24
|
+
|
25
|
+
#ifdef KERNAUX_VERSION_WITH_CMDLINE
|
26
|
+
init_cmdline();
|
27
|
+
#endif // KERNAUX_VERSION_WITH_CMDLINE
|
28
|
+
#ifdef KERNAUX_VERSION_WITH_NTOA
|
29
|
+
init_ntoa();
|
30
|
+
#endif // KERNAUX_VERSION_WITH_NTOA
|
31
|
+
#ifdef KERNAUX_VERSION_WITH_PRINTF
|
32
|
+
init_printf();
|
33
|
+
#endif // KERNAUX_VERSION_WITH_PRINTF
|
34
|
+
}
|
data/ext/default/main.h
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#ifndef __MAIN_H__
|
2
|
+
#define __MAIN_H__
|
3
|
+
|
4
|
+
#include <kernaux.h>
|
5
|
+
#include <ruby.h>
|
6
|
+
|
7
|
+
extern ID rb_intern_call;
|
8
|
+
extern ID rb_intern_freeze;
|
9
|
+
extern ID rb_intern_LESS;
|
10
|
+
extern ID rb_intern_new;
|
11
|
+
|
12
|
+
extern VALUE rb_KernAux;
|
13
|
+
extern VALUE rb_KernAux_Error;
|
14
|
+
|
15
|
+
void init_version();
|
16
|
+
void init_assert();
|
17
|
+
|
18
|
+
#ifdef KERNAUX_VERSION_WITH_CMDLINE
|
19
|
+
void init_cmdline();
|
20
|
+
#endif // KERNAUX_VERSION_WITH_CMDLINE
|
21
|
+
#ifdef KERNAUX_VERSION_WITH_NTOA
|
22
|
+
void init_ntoa();
|
23
|
+
#endif // KERNAUX_VERSION_WITH_NTOA
|
24
|
+
#ifdef KERNAUX_VERSION_WITH_PRINTF
|
25
|
+
void init_printf();
|
26
|
+
#endif // KERNAUX_VERSION_WITH_PRINTF
|
27
|
+
|
28
|
+
#endif
|